From 85f8e21d5d3639782a1ec88c828828fdc9fb5d01 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Tue, 30 Dec 2025 20:15:51 +0530 Subject: [PATCH 01/14] chore: update types and apis as v2 of authorizer --- package.json | 13 +- src/index.ts | 138 ++++++++-------- src/types.ts | 427 ++++++++++++++++++++++++++++++++----------------- tsup.config.ts | 15 +- 4 files changed, 360 insertions(+), 233 deletions(-) diff --git a/package.json b/package.json index be9975a..acd0678 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,11 @@ "node": ">=16" }, "scripts": { - "start": "rollup -w --config rollup.test.config.js", - "ts-types": "tsc --emitDeclarationOnly --outDir lib", + "start": "tsup --watch", "build": "tsup", - "test": "npm run build && jest --testTimeout=500000 --runInBand", + "test": "pnpm run build && jest --testTimeout=500000 --runInBand", "prepare": "husky install", - "prepublishOnly": "npm run build", + "prepublishOnly": "pnpm run build", "release": "pnpm build && bumpp --commit --push --tag && pnpm publish", "release-beta": "pnpm build && bumpp --commit --push --tag && pnpm publish --tag beta", "lint": "eslint --ignore-pattern 'tsup.config.ts' --ext .ts,.tsx,.js,.jsx,.json .", @@ -54,9 +53,6 @@ }, "devDependencies": { "@antfu/eslint-config": "^2.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^11.1.5", "@swc/core": "^1.3.99", "@types/jest": "^29.5.12", "@types/node": "^20.9.4", @@ -67,9 +63,6 @@ "husky": "^8.0.0", "jest": "^29.7.0", "lint-staged": "^15.2.0", - "rollup": "^2.79.1", - "rollup-plugin-filesize": "^10.0.0", - "rollup-plugin-serve": "^2.0.2", "testcontainers": "^10.3.2", "ts-jest": "^29.1.1", "tslib": "^2.6.2", diff --git a/src/index.ts b/src/index.ts index 2c84396..938139e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,25 +12,10 @@ import { sha256, trimURL, } from './utils'; -import type { - ApiResponse, - AuthToken, - AuthorizeResponse, - ConfigType, - GenericResponse, - GetTokenResponse, - GrapQlResponseType, - MetaData, - ResendVerifyEmailInput, - User, - ValidateJWTTokenResponse, - ValidateSessionResponse, - ForgotPasswordResponse, -} from './types'; // re-usable gql response fragment const userFragment = - 'id email email_verified given_name family_name middle_name nickname preferred_username picture signup_methods gender birthdate phone_number phone_number_verified roles created_at updated_at is_multi_factor_auth_enabled app_data'; + 'id email email_verified given_name family_name middle_name nickname preferred_username picture signup_methods gender birthdate phone_number phone_number_verified roles created_at updated_at revoked_timestamp is_multi_factor_auth_enabled app_data'; const authTokenFragment = `message access_token expires_in refresh_token id_token should_show_email_otp_screen should_show_mobile_otp_screen should_show_totp_screen authenticator_scanner_image authenticator_secret authenticator_recovery_codes user { ${userFragment} }`; // set fetch based on window object. Cross fetch have issues with umd build @@ -40,11 +25,11 @@ export * from './types'; export class Authorizer { // class variable - config: ConfigType; + config: Types.ConfigType; codeVerifier: string; // constructor - constructor(config: ConfigType) { + constructor(config: Types.ConfigType) { if (!config) throw new Error('Configuration is required'); this.config = config; @@ -68,9 +53,10 @@ export class Authorizer { } authorize = async ( - data: Types.AuthorizeInput, + data: Types.AuthorizeRequest, ): Promise< - ApiResponse | ApiResponse + | Types.ApiResponse + | Types.ApiResponse > => { if (!hasWindow()) return this.errorResponse([ @@ -115,9 +101,10 @@ export class Authorizer { if (data.response_type === Types.ResponseTypes.Code) { // get token and return it - const tokenResp: ApiResponse = await this.getToken({ - code: iframeRes.code, - }); + const tokenResp: Types.ApiResponse = + await this.getToken({ + code: iframeRes.code, + }); return tokenResp.errors.length ? this.errorResponse(tokenResp.errors) : this.okResponse(tokenResp.data); @@ -138,9 +125,10 @@ export class Authorizer { } }; - browserLogin = async (): Promise> => { + browserLogin = async (): Promise> => { try { - const tokenResp: ApiResponse = await this.getSession(); + const tokenResp: Types.ApiResponse = + await this.getSession(); return tokenResp.errors.length ? this.errorResponse(tokenResp.errors) : this.okResponse(tokenResp.data); @@ -162,8 +150,8 @@ export class Authorizer { }; forgotPassword = async ( - data: Types.ForgotPasswordInput, - ): Promise> => { + data: Types.ForgotPasswordRequest, + ): Promise> => { if (!data.state) data.state = encode(createRandomString()); if (!data.redirect_uri) data.redirect_uri = this.config.redirectURL; @@ -171,7 +159,7 @@ export class Authorizer { try { const forgotPasswordResp = await this.graphqlQuery({ query: - 'mutation forgotPassword($data: ForgotPasswordInput!) { forgot_password(params: $data) { message should_show_mobile_otp_screen } }', + 'mutation forgotPassword($data: ForgotPasswordRequest!) { forgot_password(params: $data) { message should_show_mobile_otp_screen } }', variables: { data, }, @@ -184,7 +172,7 @@ export class Authorizer { } }; - getMetaData = async (): Promise> => { + getMetaData = async (): Promise> => { try { const res = await this.graphqlQuery({ query: @@ -199,7 +187,9 @@ export class Authorizer { } }; - getProfile = async (headers?: Types.Headers): Promise> => { + getProfile = async ( + headers?: Types.Headers, + ): Promise> => { try { const profileRes = await this.graphqlQuery({ query: `query { profile { ${userFragment} } }`, @@ -217,11 +207,11 @@ export class Authorizer { // this is used to verify / get session using cookie by default. If using node.js pass authorization header getSession = async ( headers?: Types.Headers, - params?: Types.SessionQueryInput, - ): Promise> => { + params?: Types.SessionQueryRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ - query: `query getSession($params: SessionQueryInput){session(params: $params) { ${authTokenFragment} } }`, + query: `query getSession($params: SessionQueryRequest){session(params: $params) { ${authTokenFragment} } }`, headers, variables: { params, @@ -236,8 +226,8 @@ export class Authorizer { }; getToken = async ( - data: Types.GetTokenInput, - ): Promise> => { + data: Types.GetTokenRequest, + ): Promise> => { if (!data.grant_type) data.grant_type = 'authorization_code'; if (data.grant_type === 'refresh_token' && !data.refresh_token) @@ -277,11 +267,13 @@ export class Authorizer { } }; - login = async (data: Types.LoginInput): Promise> => { + login = async ( + data: Types.LoginRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ query: ` - mutation login($data: LoginInput!) { login(params: $data) { ${authTokenFragment}}} + mutation login($data: LoginRequest!) { login(params: $data) { ${authTokenFragment}}} `, variables: { data }, }); @@ -296,7 +288,7 @@ export class Authorizer { logout = async ( headers?: Types.Headers, - ): Promise> => { + ): Promise> => { try { const res = await this.graphqlQuery({ query: ' mutation { logout { message } } ', @@ -311,8 +303,8 @@ export class Authorizer { }; magicLinkLogin = async ( - data: Types.MagicLinkLoginInput, - ): Promise> => { + data: Types.MagicLinkLoginRequest, + ): Promise> => { try { if (!data.state) data.state = encode(createRandomString()); @@ -320,7 +312,7 @@ export class Authorizer { const res = await this.graphqlQuery({ query: ` - mutation magicLinkLogin($data: MagicLinkLoginInput!) { magic_link_login(params: $data) { message }} + mutation magicLinkLogin($data: MagicLinkLoginRequest!) { magic_link_login(params: $data) { message }} `, variables: { data }, }); @@ -365,8 +357,8 @@ export class Authorizer { }; resendOtp = async ( - data: Types.ResendOtpInput, - ): Promise> => { + data: Types.ResendOtpRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ query: ` @@ -384,12 +376,12 @@ export class Authorizer { }; resetPassword = async ( - data: Types.ResetPasswordInput, - ): Promise> => { + data: Types.ResetPasswordRequest, + ): Promise> => { try { const resetPasswordRes = await this.graphqlQuery({ query: - 'mutation resetPassword($data: ResetPasswordInput!) { reset_password(params: $data) { message } }', + 'mutation resetPassword($data: ResetPasswordRequest!) { reset_password(params: $data) { message } }', variables: { data, }, @@ -422,11 +414,13 @@ export class Authorizer { return this.okResponse(responseData); }; - signup = async (data: Types.SignupInput): Promise> => { + signup = async ( + data: Types.SignUpRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ query: ` - mutation signup($data: SignUpInput!) { signup(params: $data) { ${authTokenFragment}}} + mutation signup($data: SignUpRequest!) { signup(params: $data) { ${authTokenFragment}}} `, variables: { data }, }); @@ -440,13 +434,13 @@ export class Authorizer { }; updateProfile = async ( - data: Types.UpdateProfileInput, + data: Types.UpdateProfileRequest, headers?: Types.Headers, - ): Promise> => { + ): Promise> => { try { const updateProfileRes = await this.graphqlQuery({ query: - 'mutation updateProfile($data: UpdateProfileInput!) { update_profile(params: $data) { message } }', + 'mutation updateProfile($data: UpdateProfileRequest!) { update_profile(params: $data) { message } }', headers, variables: { data, @@ -463,7 +457,7 @@ export class Authorizer { deactivateAccount = async ( headers?: Types.Headers, - ): Promise> => { + ): Promise> => { try { const res = await this.graphqlQuery({ query: 'mutation deactivateAccount { deactivate_account { message } }', @@ -478,12 +472,12 @@ export class Authorizer { }; validateJWTToken = async ( - params?: Types.ValidateJWTTokenInput, - ): Promise> => { + params?: Types.ValidateJWTTokenRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ query: - 'query validateJWTToken($params: ValidateJWTTokenInput!){validate_jwt_token(params: $params) { is_valid claims } }', + 'query validateJWTToken($params: ValidateJWTTokenRequest!){validate_jwt_token(params: $params) { is_valid claims } }', variables: { params, }, @@ -498,11 +492,11 @@ export class Authorizer { }; validateSession = async ( - params?: Types.ValidateSessionInput, - ): Promise> => { + params?: Types.ValidateSessionRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ - query: `query validateSession($params: ValidateSessionInput){validate_session(params: $params) { is_valid user { ${userFragment} } } }`, + query: `query validateSession($params: ValidateSessionRequest){validate_session(params: $params) { is_valid user { ${userFragment} } } }`, variables: { params, }, @@ -517,12 +511,12 @@ export class Authorizer { }; verifyEmail = async ( - data: Types.VerifyEmailInput, - ): Promise> => { + data: Types.VerifyEmailRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ query: ` - mutation verifyEmail($data: VerifyEmailInput!) { verify_email(params: $data) { ${authTokenFragment}}} + mutation verifyEmail($data: VerifyEmailRequest!) { verify_email(params: $data) { ${authTokenFragment}}} `, variables: { data }, }); @@ -536,27 +530,27 @@ export class Authorizer { }; resendVerifyEmail = async ( - data: ResendVerifyEmailInput, - ): Promise> => { + data: Types.ResendVerifyEmailRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ query: ` - mutation resendVerifyEmail($data: ResendVerifyEmailInput!) { resend_verify_email(params: $data) { message }} + mutation resendVerifyEmail($data: ResendVerifyEmailRequest!) { resend_verify_email(params: $data) { message }} `, variables: { data }, }); return res?.errors?.length ? this.errorResponse(res.errors) - : this.okResponse(res.data?.verify_email); + : this.okResponse(res.data?.resend_verify_email); } catch (err) { return this.errorResponse([err]); } }; verifyOtp = async ( - data: Types.VerifyOtpInput, - ): Promise> => { + data: Types.VerifyOtpRequest, + ): Promise> => { try { const res = await this.graphqlQuery({ query: ` @@ -574,10 +568,10 @@ export class Authorizer { }; // helper to execute graphql queries - // takes in any query or mutation string as input + // takes in any query or mutation string as value graphqlQuery = async ( - data: Types.GraphqlQueryInput, - ): Promise => { + data: Types.GraphqlQueryRequest, + ): Promise => { const fetcher = getFetcher(); const res = await fetcher(`${this.config.authorizerURL}/graphql`, { method: 'POST', @@ -601,14 +595,14 @@ export class Authorizer { return { data: json.data, errors: [] }; }; - errorResponse = (errors: Error[]): ApiResponse => { + errorResponse = (errors: Error[]): Types.ApiResponse => { return { data: undefined, errors, }; }; - okResponse = (data: any): ApiResponse => { + okResponse = (data: any): Types.ApiResponse => { return { data, errors: [], diff --git a/src/types.ts b/src/types.ts index 8c8d07e..aa9002a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -13,188 +13,313 @@ export interface ConfigType { extraHeaders?: Record; } +// Pagination +export interface Pagination { + limit: number; + page: number; + offset: number; + total: number; +} + +// Meta +export interface Meta { + version: string; + client_id: string; + is_google_login_enabled: boolean; + is_facebook_login_enabled: boolean; + is_github_login_enabled: boolean; + is_linkedin_login_enabled: boolean; + is_apple_login_enabled: boolean; + is_discord_login_enabled: boolean; + is_twitter_login_enabled: boolean; + is_microsoft_login_enabled: boolean; + is_twitch_login_enabled: boolean; + is_roblox_login_enabled: boolean; + is_email_verification_enabled: boolean; + is_basic_authentication_enabled: boolean; + is_magic_link_login_enabled: boolean; + is_sign_up_enabled: boolean; + is_strong_password_enabled: boolean; + is_multi_factor_auth_enabled: boolean; + is_mobile_basic_authentication_enabled: boolean; + is_phone_verification_enabled: boolean; +} + +// User export interface User { id: string; - email: string; - preferred_username: string; + email: string | null; email_verified: boolean; signup_methods: string; - given_name?: string | null; - family_name?: string | null; - middle_name?: string | null; - nickname?: string | null; - picture?: string | null; - gender?: string | null; - birthdate?: string | null; - phone_number?: string | null; - phone_number_verified?: boolean | null; - roles?: string[]; - created_at: number; - updated_at: number; - is_multi_factor_auth_enabled?: boolean; - app_data?: Record; + given_name: string | null; + family_name: string | null; + middle_name: string | null; + nickname: string | null; + preferred_username: string | null; + gender: string | null; + birthdate: string | null; + phone_number: string | null; + phone_number_verified: boolean; + picture: string | null; + roles: string[]; + created_at: number | null; + updated_at: number | null; + revoked_timestamp: number | null; + is_multi_factor_auth_enabled: boolean | null; + app_data: Record | null; } -export interface AuthToken { - message?: string; - access_token: string; - expires_in: number; - id_token: string; - refresh_token?: string; - user?: User; - should_show_email_otp_screen?: boolean; - should_show_mobile_otp_screen?: boolean; - should_show_totp_screen?: boolean; - authenticator_scanner_image?: string; - authenticator_secret?: string; - authenticator_recovery_codes?: string[]; +// Users +export interface Users { + pagination: Pagination; + users: User[]; } -export interface GenericResponse { +// VerificationRequest +export interface VerificationRequest { + id: string; + identifier: string | null; + token: string | null; + email: string | null; + expires: number | null; + created_at: number | null; + updated_at: number | null; + nonce: string | null; + redirect_uri: string | null; +} + +// VerificationRequests +export interface VerificationRequests { + pagination: Pagination; + verification_requests: VerificationRequest[]; +} + +// AuthorizerError (GraphQL Error type - renamed to avoid conflict with native Error) +export interface AuthorizerError { message: string; + reason: string; } -export type Headers = Record; +// AuthResponse +export interface AuthResponse { + message: string; + should_show_email_otp_screen: boolean | null; + should_show_mobile_otp_screen: boolean | null; + should_show_totp_screen: boolean | null; + access_token: string | null; + id_token: string | null; + refresh_token: string | null; + expires_in: number | null; + user: User | null; + authenticator_scanner_image: string | null; + authenticator_secret: string | null; + authenticator_recovery_codes: string[] | null; +} + +// Keep AuthToken as alias for backward compatibility +export type AuthToken = AuthResponse; -export interface LoginInput { - email?: string; - phone_number?: string; +// Response +export interface Response { + message: string; +} + +// Keep GenericResponse as alias for backward compatibility +export type GenericResponse = Response; + +// ForgotPasswordResponse +export interface ForgotPasswordResponse { + message: string; + should_show_mobile_otp_screen: boolean | null; +} + +// InviteMembersResponse +export interface InviteMembersResponse { + message: string; + Users: User[]; +} + +// LoginRequest +export interface LoginRequest { + email?: string | null; + phone_number?: string | null; password: string; - roles?: string[]; - scope?: string[]; - state?: string; + roles?: string[] | null; + scope?: string[] | null; + state?: string | null; } -export interface SignupInput { - email?: string; +// SignUpRequest +export interface SignUpRequest { + email?: string | null; + given_name?: string | null; + family_name?: string | null; + middle_name?: string | null; + nickname?: string | null; + gender?: string | null; + birthdate?: string | null; + phone_number?: string | null; + picture?: string | null; password: string; confirm_password: string; - given_name?: string; - family_name?: string; - middle_name?: string; - nickname?: string; - picture?: string; - gender?: string; - birthdate?: string; - phone_number?: string; - roles?: string[]; - scope?: string[]; - redirect_uri?: string; - is_multi_factor_auth_enabled?: boolean; - state?: string; - app_data?: Record; + roles?: string[] | null; + scope?: string[] | null; + redirect_uri?: string | null; + is_multi_factor_auth_enabled?: boolean | null; + state?: string | null; + app_data?: Record | null; } -export interface MagicLinkLoginInput { +// Keep SignupRequest as alias for backward compatibility +export type SignupRequest = SignUpRequest; + +// MagicLinkLoginRequest +export interface MagicLinkLoginRequest { email: string; - roles?: string[]; - scopes?: string[]; - state?: string; - redirect_uri?: string; + roles?: string[] | null; + scope?: string[] | null; + state?: string | null; + redirect_uri?: string | null; } -export interface VerifyEmailInput { +// VerifyEmailRequest +export interface VerifyEmailRequest { token: string; - state?: string; + state?: string | null; } -export interface ResendVerifyEmailInput { +// ResendVerifyEmailRequest +export interface ResendVerifyEmailRequest { email: string; identifier: string; + state?: string | null; } -export interface VerifyOtpInput { - email?: string; - phone_number?: string; +// VerifyOTPRequest +export interface VerifyOTPRequest { + email?: string | null; + phone_number?: string | null; otp: string; - state?: string; - is_totp?: boolean; + is_totp?: boolean | null; + state?: string | null; } -export interface ResendOtpInput { - email?: string; - phone_number?: string; -} +// Keep VerifyOtpRequest as alias for backward compatibility +export type VerifyOtpRequest = VerifyOTPRequest; -export interface GraphqlQueryInput { - query: string; - variables?: Record; - headers?: Headers; +// ResendOTPRequest +export interface ResendOTPRequest { + email?: string | null; + phone_number?: string | null; + state?: string | null; } -export interface MetaData { - version: string; - client_id: string; - is_google_login_enabled: boolean; - is_facebook_login_enabled: boolean; - is_github_login_enabled: boolean; - is_linkedin_login_enabled: boolean; - is_apple_login_enabled: boolean; - is_twitter_login_enabled: boolean; - is_microsoft_login_enabled: boolean; - is_twitch_login_enabled: boolean; - is_roblox_login_enabled: boolean; - is_email_verification_enabled: boolean; - is_basic_authentication_enabled: boolean; - is_magic_link_login_enabled: boolean; - is_sign_up_enabled: boolean; - is_strong_password_enabled: boolean; - is_multi_factor_auth_enabled: boolean; - is_mobile_basic_authentication_enabled: boolean; - is_phone_verification_enabled: boolean; -} +// Keep ResendOtpRequest as alias for backward compatibility +export type ResendOtpRequest = ResendOTPRequest; -export interface UpdateProfileInput { - old_password?: string; - new_password?: string; - confirm_new_password?: string; - email?: string; - given_name?: string; - family_name?: string; - middle_name?: string; - nickname?: string; - gender?: string; - birthdate?: string; - phone_number?: string; - picture?: string; - is_multi_factor_auth_enabled?: boolean; - app_data?: Record; +// UpdateProfileRequest +export interface UpdateProfileRequest { + old_password?: string | null; + new_password?: string | null; + confirm_new_password?: string | null; + email?: string | null; + given_name?: string | null; + family_name?: string | null; + middle_name?: string | null; + nickname?: string | null; + gender?: string | null; + birthdate?: string | null; + phone_number?: string | null; + picture?: string | null; + is_multi_factor_auth_enabled?: boolean | null; + app_data?: Record | null; } -export interface ForgotPasswordInput { - email?: string; - phone_number?: string; - state?: string; - redirect_uri?: string; +// UpdateUserRequest (admin only) +export interface UpdateUserRequest { + id: string; + email?: string | null; + email_verified?: boolean | null; + given_name?: string | null; + family_name?: string | null; + middle_name?: string | null; + nickname?: string | null; + gender?: string | null; + birthdate?: string | null; + phone_number?: string | null; + phone_number_verified?: boolean | null; + picture?: string | null; + roles?: string[] | null; + is_multi_factor_auth_enabled?: boolean | null; + app_data?: Record | null; } -export interface ForgotPasswordResponse { - message: string; - should_show_mobile_otp_screen?: boolean; +// ForgotPasswordRequest +export interface ForgotPasswordRequest { + email?: string | null; + phone_number?: string | null; + state?: string | null; + redirect_uri?: string | null; } -export interface ResetPasswordInput { - token?: string; - otp?: string; - phone_number?: string; +// ResetPasswordRequest +export interface ResetPasswordRequest { + token?: string | null; + otp?: string | null; + phone_number?: string | null; password: string; confirm_password: string; } -export interface SessionQueryInput { - roles?: string[]; +// Keep ResetPasswordInput as alias for backward compatibility +export type ResetPasswordInput = ResetPasswordRequest; + +// DeleteUserRequest (admin only) +export interface DeleteUserRequest { + email: string; } -export interface IsValidJWTQueryInput { - jwt: string; - roles?: string[]; +// SessionQueryRequest +export interface SessionQueryRequest { + roles?: string[] | null; + scope?: string[] | null; } -export interface ValidJWTResponse { - valid: string; - message: string; +// Keep SessionQueryInput as alias for backward compatibility +export type SessionQueryInput = SessionQueryRequest; + +// ValidateJWTTokenRequest +export interface ValidateJWTTokenRequest { + token_type: string; + token: string; + roles?: string[] | null; +} + +// Keep ValidateJWTTokenInput as alias for backward compatibility +export type ValidateJWTTokenInput = ValidateJWTTokenRequest; + +// ValidateJWTTokenResponse +export interface ValidateJWTTokenResponse { + is_valid: boolean; + claims: Record; } +// ValidateSessionRequest +export interface ValidateSessionRequest { + cookie: string; + roles?: string[] | null; +} + +// Keep ValidateSessionInput as alias for backward compatibility +export type ValidateSessionInput = ValidateSessionRequest; + +// ValidateSessionResponse +export interface ValidateSessionResponse { + is_valid: boolean; + user: User; +} + +// OAuth types (not part of GraphQL schema, but used for OAuth flow) export enum OAuthProviders { Apple = 'apple', Github = 'github', @@ -205,6 +330,7 @@ export enum OAuthProviders { Microsoft = 'microsoft', Twitch = 'twitch', Roblox = 'roblox', + Discord = 'discord', } export enum ResponseTypes { @@ -212,12 +338,15 @@ export enum ResponseTypes { Token = 'token', } -export interface AuthorizeInput { +export interface AuthorizeRequest { response_type: ResponseTypes; use_refresh_token?: boolean; response_mode?: string; } +// Keep AuthorizeInput as alias for backward compatibility +export type AuthorizeInput = AuthorizeRequest; + export interface AuthorizeResponse { state: string; code?: string; @@ -229,12 +358,15 @@ export interface RevokeTokenInput { refresh_token: string; } -export interface GetTokenInput { +export interface GetTokenRequest { code?: string; grant_type?: string; refresh_token?: string; } +// Keep GetTokenInput as alias for backward compatibility +export type GetTokenInput = GetTokenRequest; + export interface GetTokenResponse { access_token: string; expires_in: number; @@ -242,23 +374,28 @@ export interface GetTokenResponse { refresh_token?: string; } -export interface ValidateJWTTokenInput { - token_type: 'access_token' | 'id_token' | 'refresh_token'; - token: string; - roles?: string[]; -} +// GraphQL query request +export type Headers = Record; -export interface ValidateJWTTokenResponse { - is_valid: boolean; - claims: Record; +export interface GraphqlQueryRequest { + query: string; + variables?: Record; + headers?: Headers; } -export interface ValidateSessionInput { - cookie?: string; +// Deprecated types (for backward compatibility) +export interface IsValidJWTQueryInput { + jwt: string; roles?: string[]; } -export interface ValidateSessionResponse { - is_valid: boolean; - user: User; +export interface ValidJWTResponse { + valid: string; + message: string; } + +// Keep MetaDataResponse as alias for backward compatibility +export type MetaDataResponse = Meta; + +// Keep MetaData as alias for backward compatibility +export type MetaData = Meta; diff --git a/tsup.config.ts b/tsup.config.ts index 1dc47ad..f8ca8de 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,8 +1,10 @@ import { defineConfig } from 'tsup'; import pkg from './package.json'; + const external = [...Object.keys(pkg.dependencies || {})]; export default defineConfig(() => [ + // Node.js builds (ESM + CJS) { entryPoints: ['src/index.ts'], outDir: 'lib', @@ -10,11 +12,13 @@ export default defineConfig(() => [ format: ['esm', 'cjs'], clean: true, dts: true, - minify: true, + minify: false, // Don't minify Node.js builds for better debugging + sourcemap: true, external, }, + // Browser IIFE build { - entry: { bundle: 'src/index.ts' }, + entryPoints: ['src/index.ts'], outDir: 'lib', format: ['iife'], globalName: 'authorizerdev', @@ -22,11 +26,10 @@ export default defineConfig(() => [ minify: true, platform: 'browser', dts: false, - name: 'authorizer', - // esbuild `globalName` option generates `var authorizerdev = (() => {})()` - // and var is not guaranteed to assign to the global `window` object so we make sure to assign it + // esbuild's globalName creates `var authorizerdev = ...` which works in browsers + // but we ensure it's also on window for compatibility footer: { - js: 'window.__TAURI__ = authorizerdev', + js: 'if (typeof window !== "undefined") { window.authorizerdev = authorizerdev; }', }, outExtension() { return { From bc2fe40e363129949c9ce5d4240fa3f2b3b03abc Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Tue, 30 Dec 2025 20:17:19 +0530 Subject: [PATCH 02/14] chore: add rc release cmd --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index acd0678..a9ce78d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@authorizerdev/authorizer-js", - "version": "2.0.3", + "version": "3.0.0-rc.1", "packageManager": "pnpm@7.28.0", "author": "Lakhan Samani", "license": "MIT", @@ -37,6 +37,7 @@ "prepublishOnly": "pnpm run build", "release": "pnpm build && bumpp --commit --push --tag && pnpm publish", "release-beta": "pnpm build && bumpp --commit --push --tag && pnpm publish --tag beta", + "release-rc": "pnpm build && pnpm publish --tag rc", "lint": "eslint --ignore-pattern 'tsup.config.ts' --ext .ts,.tsx,.js,.jsx,.json .", "lint:fix": "eslint --ignore-pattern 'tsup.config.ts' --ext .ts,.tsx,.js,.jsx,.json . --fix" }, From f23d4a8271b3b78eb597c142ecd67fda31410272 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Tue, 30 Dec 2025 20:22:09 +0530 Subject: [PATCH 03/14] chore: fix .npmrc --- .npmrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.npmrc b/.npmrc index e2a389c..e69de29 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +0,0 @@ -ignore-workspace-root-check=true \ No newline at end of file From 30248dd576a933d5f27271766e862e0150d4b26b Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Mon, 2 Mar 2026 01:25:58 +0530 Subject: [PATCH 04/14] chore: fix tests --- __test__/index.test.ts | 131 +++++++++++++++++++++++++++++++---------- 1 file changed, 99 insertions(+), 32 deletions(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index 5f91fd1..1083ffd 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -1,10 +1,15 @@ +import { randomUUID } from 'node:crypto'; import { GenericContainer, StartedTestContainer, Wait } from 'testcontainers'; import { ApiResponse, AuthToken, Authorizer } from '../lib'; -const authorizerConfig = { +const authorizerConfig: { + authorizerURL: string; + redirectURL: string; + adminSecret: string; + clientID?: string; +} = { authorizerURL: 'http://localhost:8080', redirectURL: 'http://localhost:8080/app', - // clientID: '3fab5e58-5693-46f2-8123-83db8133cd22', adminSecret: 'secret', }; @@ -18,22 +23,54 @@ const testConfig = { maginLinkLoginEmail: 'test_magic_link@test.com', }; -// Using etheral.email for email sink: https://ethereal.email/create -const authorizerENV = { - ENV: 'production', - DATABASE_URL: 'data.db', - DATABASE_TYPE: 'sqlite', - CUSTOM_ACCESS_TOKEN_SCRIPT: - 'function(user,tokenPayload){var data = tokenPayload;data.extra = {\'x-extra-id\': user.id};return data;}', - DISABLE_PLAYGROUND: 'true', - SMTP_HOST: 'smtp.ethereal.email', - SMTP_PASSWORD: 'WncNxwVFqb6nBjKDQJ', - SMTP_USERNAME: 'sydnee.lesch77@ethereal.email', - LOG_LELVEL: 'debug', - SMTP_PORT: '587', - SENDER_EMAIL: 'test@authorizer.dev', - ADMIN_SECRET: 'secret', -}; +// Build v2 CLI args for authorizer (see authorizer/cmd/root.go). Using etheral.email for email sink. +function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { + const clientId = randomUUID(); + const clientSecret = randomUUID(); + const jwtSecret = randomUUID(); + const customAccessTokenScript = + 'function(user,tokenPayload){var data = tokenPayload;data.extra = {\'x-extra-id\': user.id};return data;}'; + + const args = [ + '--client-id', + clientId, + '--client-secret', + clientSecret, + '--jwt-type', + 'HS256', + '--jwt-secret', + jwtSecret, + '--admin-secret', + authorizerConfig.adminSecret, + '--env', + 'production', + '--database-type', + 'sqlite', + '--database-url', + '/tmp/authorizer.db', + '--custom-access-token-script', + customAccessTokenScript, + '--enable-playground', + 'false', + '--log-level', + 'debug', + '--smtp-host', + 'smtp.ethereal.email', + '--smtp-port', + '587', + '--smtp-username', + 'sydnee.lesch77@ethereal.email', + '--smtp-password', + 'WncNxwVFqb6nBjKDQJ', + '--smtp-sender-email', + 'test@authorizer.dev', + '--enable-email-verification', + 'true', + '--enable-magic-link-login', + 'true', + ]; + return { args, clientId }; +} // const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); @@ -46,8 +83,10 @@ describe('Integration Tests - authorizer-js', () => { let authorizer: Authorizer; beforeAll(async () => { - container = await new GenericContainer('lakhansamani/authorizer:latest') - .withEnvironment(authorizerENV) + const { args, clientId } = buildAuthorizerCliArgs(); + + container = await new GenericContainer('lakhansamani/authorizer:2.0.0-rc.6') + .withCommand(args) .withExposedPorts(8080) .withWaitStrategy(Wait.forHttp('/health', 8080).forStatusCode(200)) .start(); @@ -58,15 +97,12 @@ describe('Integration Tests - authorizer-js', () => { authorizerConfig.redirectURL = `http://${container.getHost()}:${container.getMappedPort( 8080, )}/app`; + authorizerConfig.clientID = clientId; console.log('Authorizer URL:', authorizerConfig.authorizerURL); authorizer = new Authorizer(authorizerConfig); - // get metadata const metadataRes = await authorizer.getMetaData(); - // await sleep(50000); expect(metadataRes?.data).toBeDefined(); - if (metadataRes?.data?.client_id) { - authorizer.config.clientID = metadataRes?.data?.client_id; - } + expect(metadataRes?.data?.client_id).toBe(clientId); }); afterAll(async () => { @@ -101,10 +137,13 @@ describe('Integration Tests - authorizer-js', () => { (i: { email: string }) => i.email === testConfig.email, ); expect(item).not.toBeNull(); + expect(item?.token).toBeDefined(); const verifyEmailRes = await authorizer.verifyEmail({ token: item.token }); expect(verifyEmailRes?.data).toBeDefined(); expect(verifyEmailRes?.errors).toHaveLength(0); + expect(verifyEmailRes?.data?.access_token).toBeDefined(); + expect(verifyEmailRes?.data?.access_token).not.toBeNull(); expect(verifyEmailRes?.data?.access_token?.length).toBeGreaterThan(0); }); @@ -117,13 +156,23 @@ describe('Integration Tests - authorizer-js', () => { }); expect(loginRes?.data).toBeDefined(); expect(loginRes?.errors).toHaveLength(0); - expect(loginRes?.data?.access_token.length).not.toEqual(0); - expect(loginRes?.data?.refresh_token?.length).not.toEqual(0); - expect(loginRes?.data?.expires_in).not.toEqual(0); - expect(loginRes?.data?.id_token.length).not.toEqual(0); + expect(loginRes?.data?.access_token).toBeDefined(); + expect(loginRes?.data?.access_token).not.toBeNull(); + expect(loginRes?.data?.access_token?.length).toBeGreaterThan(0); + expect(loginRes?.data?.refresh_token).toBeDefined(); + expect(loginRes?.data?.refresh_token).not.toBeNull(); + expect(loginRes?.data?.refresh_token?.length).toBeGreaterThan(0); + expect(loginRes?.data?.expires_in).toBeDefined(); + expect(loginRes?.data?.expires_in).not.toBeNull(); + expect(loginRes?.data?.expires_in).toBeGreaterThan(0); + expect(loginRes?.data?.id_token).toBeDefined(); + expect(loginRes?.data?.id_token).not.toBeNull(); + expect(loginRes?.data?.id_token?.length).toBeGreaterThan(0); }); it('should validate jwt token', async () => { + expect(loginRes?.data?.access_token).toBeDefined(); + expect(loginRes?.data?.access_token).not.toBeNull(); const validateRes = await authorizer.validateJWTToken({ token_type: 'access_token', token: loginRes?.data?.access_token || '', @@ -134,6 +183,8 @@ describe('Integration Tests - authorizer-js', () => { }); it('should update profile successfully', async () => { + expect(loginRes?.data?.access_token).toBeDefined(); + expect(loginRes?.data?.access_token).not.toBeNull(); const updateProfileRes = await authorizer.updateProfile( { given_name: 'bob', @@ -147,28 +198,36 @@ describe('Integration Tests - authorizer-js', () => { }); it('should fetch profile successfully', async () => { + expect(loginRes?.data?.access_token).toBeDefined(); + expect(loginRes?.data?.access_token).not.toBeNull(); const profileRes = await authorizer.getProfile({ Authorization: `Bearer ${loginRes?.data?.access_token}`, }); expect(profileRes?.data).toBeDefined(); expect(profileRes?.errors).toHaveLength(0); + expect(profileRes?.data?.given_name).toBeDefined(); expect(profileRes?.data?.given_name).toMatch('bob'); }); it('should get access_token using refresh_token', async () => { + expect(loginRes?.data?.refresh_token).toBeDefined(); + expect(loginRes?.data?.refresh_token).not.toBeNull(); const tokenRes = await authorizer.getToken({ grant_type: 'refresh_token', - refresh_token: loginRes?.data?.refresh_token, + refresh_token: loginRes?.data?.refresh_token || '', }); expect(tokenRes?.data).toBeDefined(); expect(tokenRes?.errors).toHaveLength(0); - expect(tokenRes?.data?.access_token.length).not.toEqual(0); + expect(tokenRes?.data?.access_token).toBeDefined(); + expect(tokenRes?.data?.access_token?.length).toBeGreaterThan(0); if (loginRes && loginRes.data) { loginRes.data.access_token = tokenRes?.data?.access_token || ''; } }); it('should deactivate account', async () => { + expect(loginRes?.data?.access_token).toBeDefined(); + expect(loginRes?.data?.access_token).not.toBeNull(); const deactivateRes = await authorizer.deactivateAccount({ Authorization: `Bearer ${loginRes?.data?.access_token}`, }); @@ -177,11 +236,13 @@ describe('Integration Tests - authorizer-js', () => { }); it('should throw error while accessing profile after deactivation', async () => { + expect(loginRes?.data?.access_token).toBeDefined(); const resp = await authorizer.getProfile({ Authorization: `Bearer ${loginRes?.data?.access_token}`, }); expect(resp?.data).toBeUndefined(); - expect(resp?.errors).toHaveLength(1); + expect(resp?.errors).toBeDefined(); + expect(resp?.errors.length).toBeGreaterThan(0); }); describe('magic link login', () => { @@ -195,6 +256,7 @@ describe('Integration Tests - authorizer-js', () => { it('should verify email', async () => { const verificationRequestsRes = await authorizer.graphqlQuery({ query: verificationRequests, + variables: {}, headers: { 'x-authorizer-admin-secret': authorizerConfig.adminSecret, }, @@ -202,15 +264,20 @@ describe('Integration Tests - authorizer-js', () => { const requests = verificationRequestsRes?.data?._verification_requests .verification_requests; + expect(verificationRequestsRes?.data).toBeDefined(); + expect(verificationRequestsRes?.errors).toHaveLength(0); const item = requests.find( (i: { email: string }) => i.email === testConfig.maginLinkLoginEmail, ); expect(item).not.toBeNull(); + expect(item?.token).toBeDefined(); const verifyEmailRes = await authorizer.verifyEmail({ token: item.token, }); expect(verifyEmailRes?.data).toBeDefined(); expect(verifyEmailRes?.errors).toHaveLength(0); + expect(verifyEmailRes?.data?.user).toBeDefined(); + expect(verifyEmailRes?.data?.user?.signup_methods).toBeDefined(); expect(verifyEmailRes?.data?.user?.signup_methods).toContain( 'magic_link_login', ); From 4f48ad107863ab817a2a4f1375a1bab8c9bfeef5 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Tue, 3 Mar 2026 18:02:04 +0530 Subject: [PATCH 05/14] chore: update build packager --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a9ce78d..7ecd6d2 100644 --- a/package.json +++ b/package.json @@ -32,9 +32,9 @@ "scripts": { "start": "tsup --watch", "build": "tsup", - "test": "pnpm run build && jest --testTimeout=500000 --runInBand", + "test": "npm run build && jest --testTimeout=500000 --runInBand", "prepare": "husky install", - "prepublishOnly": "pnpm run build", + "prepublishOnly": "npm run build", "release": "pnpm build && bumpp --commit --push --tag && pnpm publish", "release-beta": "pnpm build && bumpp --commit --push --tag && pnpm publish --tag beta", "release-rc": "pnpm build && pnpm publish --tag rc", From 829c406b0e5ace8f353ac2a5787018e160a5a9f7 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 16:43:37 +0530 Subject: [PATCH 06/14] chore: fix test timeout --- __test__/index.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index 1083ffd..8977dd7 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -28,8 +28,7 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { const clientId = randomUUID(); const clientSecret = randomUUID(); const jwtSecret = randomUUID(); - const customAccessTokenScript = - 'function(user,tokenPayload){var data = tokenPayload;data.extra = {\'x-extra-id\': user.id};return data;}'; + const customAccessTokenScript = `function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}`; const args = [ '--client-id', @@ -89,6 +88,7 @@ describe('Integration Tests - authorizer-js', () => { .withCommand(args) .withExposedPorts(8080) .withWaitStrategy(Wait.forHttp('/health', 8080).forStatusCode(200)) + .withStartupTimeout(6000000) // 10 minutes .start(); authorizerConfig.authorizerURL = `http://${container.getHost()}:${container.getMappedPort( From 4b2ae1afea8e1a9ae67d16162fded2b8fe3bfe82 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 16:43:50 +0530 Subject: [PATCH 07/14] chore: fix test timeout --- __test__/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index 8977dd7..210a7e1 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -28,7 +28,7 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { const clientId = randomUUID(); const clientSecret = randomUUID(); const jwtSecret = randomUUID(); - const customAccessTokenScript = `function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}`; + const customAccessTokenScript = 'function(user,tokenPayload){var data = tokenPayload;data.extra = {\'x-extra-id\': user.id};return data;}'; const args = [ '--client-id', From f3fecd0f7d0d01f1a2f218098ec4afe94a1b0f86 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 16:57:22 +0530 Subject: [PATCH 08/14] chore: fix test --- __test__/index.test.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index 210a7e1..1125836 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -2,6 +2,8 @@ import { randomUUID } from 'node:crypto'; import { GenericContainer, StartedTestContainer, Wait } from 'testcontainers'; import { ApiResponse, AuthToken, Authorizer } from '../lib'; +jest.setTimeout(900000); // Integration tests can be slow on CI + const authorizerConfig: { authorizerURL: string; redirectURL: string; @@ -49,8 +51,7 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { '/tmp/authorizer.db', '--custom-access-token-script', customAccessTokenScript, - '--enable-playground', - 'false', + '--enable-playground=false', '--log-level', 'debug', '--smtp-host', @@ -63,10 +64,8 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { 'WncNxwVFqb6nBjKDQJ', '--smtp-sender-email', 'test@authorizer.dev', - '--enable-email-verification', - 'true', - '--enable-magic-link-login', - 'true', + '--enable-email-verification=true', + '--enable-magic-link-login=true', ]; return { args, clientId }; } @@ -88,7 +87,7 @@ describe('Integration Tests - authorizer-js', () => { .withCommand(args) .withExposedPorts(8080) .withWaitStrategy(Wait.forHttp('/health', 8080).forStatusCode(200)) - .withStartupTimeout(6000000) // 10 minutes + .withStartupTimeout(300000) // 5 minutes .start(); authorizerConfig.authorizerURL = `http://${container.getHost()}:${container.getMappedPort( @@ -100,9 +99,6 @@ describe('Integration Tests - authorizer-js', () => { authorizerConfig.clientID = clientId; console.log('Authorizer URL:', authorizerConfig.authorizerURL); authorizer = new Authorizer(authorizerConfig); - const metadataRes = await authorizer.getMetaData(); - expect(metadataRes?.data).toBeDefined(); - expect(metadataRes?.data?.client_id).toBe(clientId); }); afterAll(async () => { From 5b9bbc973517b0186dc664c901c88509be9d0be2 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 17:31:13 +0530 Subject: [PATCH 09/14] chore: increase wait time for pipeline --- __test__/index.test.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index 1125836..e446f02 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -76,18 +76,23 @@ const verificationRequests = 'query {_verification_requests { verification_requests { id token email expires identifier } } }'; describe('Integration Tests - authorizer-js', () => { - let container: StartedTestContainer; + let container: StartedTestContainer | undefined; let authorizer: Authorizer; beforeAll(async () => { const { args, clientId } = buildAuthorizerCliArgs(); - container = await new GenericContainer('lakhansamani/authorizer:2.0.0-rc.6') + container = await new GenericContainer('lakhansamani/authorizer:latest') .withCommand(args) .withExposedPorts(8080) .withWaitStrategy(Wait.forHttp('/health', 8080).forStatusCode(200)) - .withStartupTimeout(300000) // 5 minutes + .withStartupTimeout(900000) // 15 minutes (CI can be slow) + // Surface container stdout/stderr to help diagnose CI startup failures. + .withLogConsumer((chunk) => { + // Avoid changing log format; just mirror what container prints. + process.stdout.write(chunk.toString()); + }) .start(); authorizerConfig.authorizerURL = `http://${container.getHost()}:${container.getMappedPort( @@ -102,7 +107,7 @@ describe('Integration Tests - authorizer-js', () => { }); afterAll(async () => { - await container.stop(); + if (container) await container.stop(); }); it('should signup with email verification enabled', async () => { From 64e90a70aeb06cfda2f8dd39af4fd8b55c6d74cd Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 17:40:13 +0530 Subject: [PATCH 10/14] chore: fix minor --- __test__/index.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index e446f02..b90aec2 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -30,7 +30,8 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { const clientId = randomUUID(); const clientSecret = randomUUID(); const jwtSecret = randomUUID(); - const customAccessTokenScript = 'function(user,tokenPayload){var data = tokenPayload;data.extra = {\'x-extra-id\': user.id};return data;}'; + const customAccessTokenScript = + "function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"; const args = [ '--client-id', @@ -83,7 +84,7 @@ describe('Integration Tests - authorizer-js', () => { beforeAll(async () => { const { args, clientId } = buildAuthorizerCliArgs(); - container = await new GenericContainer('lakhansamani/authorizer:latest') + container = await new GenericContainer('lakhansamani/authorizer:2.0.0-rc.6') .withCommand(args) .withExposedPorts(8080) .withWaitStrategy(Wait.forHttp('/health', 8080).forStatusCode(200)) From 78ab9259b2fda54a50f5938807d2a7995b1c5e5b Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 17:40:19 +0530 Subject: [PATCH 11/14] chore: fix minor --- __test__/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index b90aec2..76ef75a 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -31,7 +31,7 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { const clientSecret = randomUUID(); const jwtSecret = randomUUID(); const customAccessTokenScript = - "function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"; + 'function(user,tokenPayload){var data = tokenPayload;data.extra = {\'x-extra-id\': user.id};return data;}'; const args = [ '--client-id', From 8c7fb62f5c6187d902ecf069d17aebfee3502292 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 18:03:50 +0530 Subject: [PATCH 12/14] chore: fix test --- __test__/index.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/__test__/index.test.ts b/__test__/index.test.ts index 76ef75a..b21afaa 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto'; import { GenericContainer, StartedTestContainer, Wait } from 'testcontainers'; import { ApiResponse, AuthToken, Authorizer } from '../lib'; -jest.setTimeout(900000); // Integration tests can be slow on CI +jest.setTimeout(1200000); // Integration tests can be slow on CI (20 minutes) const authorizerConfig: { authorizerURL: string; @@ -31,7 +31,7 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { const clientSecret = randomUUID(); const jwtSecret = randomUUID(); const customAccessTokenScript = - 'function(user,tokenPayload){var data = tokenPayload;data.extra = {\'x-extra-id\': user.id};return data;}'; + "function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"; const args = [ '--client-id', From a658eb428a13896b136a302e3b14d1ef36b0f851 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 18:04:12 +0530 Subject: [PATCH 13/14] chore: fix test --- .github/workflows/main.yml | 12 +++++++++--- __test__/index.test.ts | 4 ---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index eb76aae..ab3eef4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,6 +5,7 @@ on: [push, pull_request] jobs: test: runs-on: ubuntu-latest + timeout-minutes: 60 services: docker: @@ -22,8 +23,13 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: '16' # Specify your Node.js version here + node-version: '18' # Specify your Node.js version here + + - name: Set up pnpm + run: | + corepack enable + corepack prepare pnpm@7.28.0 --activate - name: Install dependencies - run: npm install + run: pnpm install --frozen-lockfile - name: Run integration tests - run: npm test # Make sure this command runs your integration tests + run: pnpm test # Make sure this command runs your integration tests diff --git a/__test__/index.test.ts b/__test__/index.test.ts index b21afaa..f4bcdc1 100644 --- a/__test__/index.test.ts +++ b/__test__/index.test.ts @@ -30,8 +30,6 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { const clientId = randomUUID(); const clientSecret = randomUUID(); const jwtSecret = randomUUID(); - const customAccessTokenScript = - "function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"; const args = [ '--client-id', @@ -50,8 +48,6 @@ function buildAuthorizerCliArgs(): { args: string[]; clientId: string } { 'sqlite', '--database-url', '/tmp/authorizer.db', - '--custom-access-token-script', - customAccessTokenScript, '--enable-playground=false', '--log-level', 'debug', From f998d45af5e48940ff01d8c9b657e64427035f66 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Fri, 20 Mar 2026 18:08:20 +0530 Subject: [PATCH 14/14] chore: fix test --- .github/workflows/main.yml | 6 +- pnpm-lock.yaml | 1048 ------------------------------------ 2 files changed, 3 insertions(+), 1051 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ab3eef4..1e81a60 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,13 +23,13 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: '18' # Specify your Node.js version here + node-version: "18" # Specify your Node.js version here - name: Set up pnpm run: | corepack enable - corepack prepare pnpm@7.28.0 --activate + corepack prepare pnpm --activate - name: Install dependencies - run: pnpm install --frozen-lockfile + run: pnpm install - name: Run integration tests run: pnpm test # Make sure this command runs your integration tests diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16bb6e7..656f850 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,15 +13,6 @@ devDependencies: '@antfu/eslint-config': specifier: ^2.1.0 version: 2.17.0(@vue/compiler-sfc@3.4.27)(eslint@8.57.0)(typescript@5.4.5) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@2.79.1) - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@2.79.1) - '@rollup/plugin-typescript': - specifier: ^11.1.5 - version: 11.1.6(rollup@2.79.1)(tslib@2.6.2)(typescript@5.4.5) '@swc/core': specifier: ^1.3.99 version: 1.5.5 @@ -52,15 +43,6 @@ devDependencies: lint-staged: specifier: ^15.2.0 version: 15.2.2 - rollup: - specifier: ^2.79.1 - version: 2.79.1 - rollup-plugin-filesize: - specifier: ^10.0.0 - version: 10.0.0 - rollup-plugin-serve: - specifier: ^2.0.2 - version: 2.0.3 testcontainers: specifier: ^10.3.2 version: 10.9.0 @@ -473,13 +455,6 @@ packages: '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - /@babel/template@7.24.0: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} @@ -797,10 +772,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@gar/promisify@1.1.3: - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - dev: true - /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -1082,13 +1053,6 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.6: - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true @@ -1131,81 +1095,6 @@ packages: fastq: 1.17.1 dev: true - /@npmcli/fs@2.1.2: - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.6.2 - dev: true - - /@npmcli/fs@3.1.1: - resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - semver: 7.6.2 - dev: true - - /@npmcli/git@4.1.0: - resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/promise-spawn': 6.0.2 - lru-cache: 7.18.3 - npm-pick-manifest: 8.0.2 - proc-log: 3.0.0 - promise-inflight: 1.0.1 - promise-retry: 2.0.1 - semver: 7.6.2 - which: 3.0.1 - transitivePeerDependencies: - - bluebird - dev: true - - /@npmcli/installed-package-contents@2.1.0: - resolution: {integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - npm-bundled: 3.0.1 - npm-normalize-package-bin: 3.0.1 - dev: true - - /@npmcli/move-file@2.0.1: - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - dev: true - - /@npmcli/node-gyp@3.0.0: - resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /@npmcli/promise-spawn@6.0.2: - resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - which: 3.0.1 - dev: true - - /@npmcli/run-script@6.0.2: - resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/node-gyp': 3.0.0 - '@npmcli/promise-spawn': 6.0.2 - node-gyp: 9.4.1 - read-package-json-fast: 3.0.2 - which: 3.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1213,74 +1102,6 @@ packages: dev: true optional: true - /@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 - dev: true - - /@rollup/plugin-terser@0.4.4(rollup@2.79.1): - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - rollup: 2.79.1 - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.31.0 - dev: true - - /@rollup/plugin-typescript@11.1.6(rollup@2.79.1)(tslib@2.6.2)(typescript@5.4.5): - resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.14.0||^3.0.0||^4.0.0 - tslib: '*' - typescript: '>=3.7.0' - peerDependenciesMeta: - rollup: - optional: true - tslib: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - resolve: 1.22.8 - rollup: 2.79.1 - tslib: 2.6.2 - typescript: 5.4.5 - dev: true - - /@rollup/pluginutils@5.1.0(rollup@2.79.1): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: true - /@rollup/rollup-android-arm-eabi@4.17.2: resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} cpu: [arm] @@ -1409,39 +1230,6 @@ packages: dev: true optional: true - /@sigstore/bundle@1.1.0: - resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@sigstore/protobuf-specs': 0.2.1 - dev: true - - /@sigstore/protobuf-specs@0.2.1: - resolution: {integrity: sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /@sigstore/sign@1.0.0: - resolution: {integrity: sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@sigstore/bundle': 1.1.0 - '@sigstore/protobuf-specs': 0.2.1 - make-fetch-happen: 11.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@sigstore/tuf@1.0.3: - resolution: {integrity: sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@sigstore/protobuf-specs': 0.2.1 - tuf-js: 1.1.7 - transitivePeerDependencies: - - supports-color - dev: true - /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -1654,24 +1442,6 @@ packages: '@swc/counter': 0.1.3 dev: true - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true - - /@tufjs/canonical-json@1.0.0: - resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /@tufjs/models@1.0.4: - resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.4 - dev: true - /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: @@ -1782,10 +1552,6 @@ packages: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true - /@types/semver@7.5.8: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true @@ -2005,10 +1771,6 @@ packages: resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} dev: true - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2023,30 +1785,6 @@ packages: hasBin: true dev: true - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - dependencies: - humanize-ms: 1.2.1 - dev: true - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -2056,12 +1794,6 @@ packages: uri-js: 4.4.1 dev: true - /ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - dependencies: - string-width: 4.2.3 - dev: true - /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -2120,10 +1852,6 @@ packages: picomatch: 2.3.1 dev: true - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true - /archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} @@ -2174,14 +1902,6 @@ packages: engines: {node: '>=14'} dev: true - /are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - dev: true - /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -2356,20 +2076,6 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true - /boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2390,13 +2096,6 @@ packages: fill-range: 7.0.1 dev: true - /brotli-size@4.0.0: - resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} - engines: {node: '>= 10.16.0'} - dependencies: - duplexer: 0.1.1 - dev: true - /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -2500,50 +2199,6 @@ packages: engines: {node: '>=8'} dev: true - /cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - '@npmcli/fs': 2.1.2 - '@npmcli/move-file': 2.0.1 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 8.1.0 - infer-owner: 1.0.4 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 9.0.1 - tar: 6.2.1 - unique-filename: 2.0.1 - transitivePeerDependencies: - - bluebird - dev: true - - /cacache@17.1.4: - resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@npmcli/fs': 3.1.1 - fs-minipass: 3.0.3 - glob: 10.3.14 - lru-cache: 7.18.3 - minipass: 7.1.1 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 4.0.0 - ssri: 10.0.6 - tar: 6.2.1 - unique-filename: 3.0.0 - dev: true - /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} dev: true @@ -2657,16 +2312,6 @@ packages: escape-string-regexp: 1.0.5 dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true - /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2721,29 +2366,15 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: true - /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true - /colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - dev: true - /commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} dev: true - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -2777,10 +2408,6 @@ packages: engines: {node: ^14.18.0 || >=16.10.0} dev: true - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true - /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true @@ -2906,10 +2533,6 @@ packages: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} dev: true - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true - /destr@2.0.3: resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} dev: true @@ -2973,14 +2596,6 @@ packages: engines: {node: '>=12'} dev: true - /duplexer@0.1.1: - resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} - dev: true - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -3006,14 +2621,6 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true - dependencies: - iconv-lite: 0.6.3 - dev: true - optional: true - /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: @@ -3033,15 +2640,6 @@ packages: engines: {node: '>=0.12'} dev: true - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true - - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true - /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -3594,10 +3192,6 @@ packages: jest-util: 29.7.0 dev: true - /exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - dev: true - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -3644,11 +3238,6 @@ packages: flat-cache: 3.2.0 dev: true - /filesize@6.4.0: - resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} - engines: {node: '>= 0.4.0'} - dev: true - /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3713,13 +3302,6 @@ packages: minipass: 3.3.6 dev: true - /fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minipass: 7.1.1 - dev: true - /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -3736,20 +3318,6 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: true - /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3842,17 +3410,6 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -3890,13 +3447,6 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: true - /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3907,10 +3457,6 @@ packages: engines: {node: '>=8'} dev: true - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true - /hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -3922,42 +3468,10 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info@6.1.1: - resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - lru-cache: 7.18.3 - dev: true - /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true - - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -3968,38 +3482,16 @@ packages: engines: {node: '>=16.17.0'} dev: true - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - dev: true - /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} hasBin: true dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dependencies: - safer-buffer: 2.1.2 - dev: true - optional: true - /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore-walk@6.0.5: - resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minimatch: 9.0.4 - dev: true - /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -4032,10 +3524,6 @@ packages: engines: {node: '>=8'} dev: true - /infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - dev: true - /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -4047,14 +3535,6 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - dev: true - /is-alphabetical@1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} dev: true @@ -4132,14 +3612,6 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - dev: true - - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -4675,10 +4147,6 @@ packages: argparse: 2.0.1 dev: true - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true - /jsdoc-type-pratt-parser@4.0.0: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} engines: {node: '>=12.0.0'} @@ -4709,11 +4177,6 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-parse-even-better-errors@3.0.2: - resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -4738,11 +4201,6 @@ packages: semver: 7.6.2 dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -4911,11 +4369,6 @@ packages: yallist: 3.1.1 dev: true - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true - /magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} dependencies: @@ -4933,54 +4386,6 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - agentkeepalive: 4.5.0 - cacache: 16.1.3 - http-cache-semantics: 4.1.1 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 2.1.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 - ssri: 9.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /make-fetch-happen@11.1.1: - resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - agentkeepalive: 4.5.0 - cacache: 17.1.4 - http-cache-semantics: 4.1.1 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 7.18.3 - minipass: 5.0.0 - minipass-fetch: 3.0.5 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 - ssri: 10.0.6 - transitivePeerDependencies: - - supports-color - dev: true - /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: @@ -5029,12 +4434,6 @@ packages: picomatch: 2.3.1 dev: true - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: true - /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -5070,63 +4469,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - dev: true - - /minipass-fetch@3.0.5: - resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minipass: 7.1.1 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - dev: true - - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /minipass-json-stream@1.0.1: - resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} - dependencies: - jsonparse: 1.3.1 - minipass: 3.3.6 - dev: true - - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - dependencies: - minipass: 3.3.6 - dev: true - - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - dependencies: - minipass: 3.3.6 - dev: true - /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -5207,11 +4549,6 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true - /node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} dev: true @@ -5227,27 +4564,6 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-gyp@9.4.1: - resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} - engines: {node: ^12.13 || ^14.13 || >=16} - hasBin: true - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - make-fetch-happen: 10.2.1 - nopt: 6.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.6.2 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -5256,14 +4572,6 @@ packages: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true - /nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - dependencies: - abbrev: 1.1.1 - dev: true - /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -5273,82 +4581,11 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data@5.0.0: - resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - hosted-git-info: 6.1.1 - is-core-module: 2.13.1 - semver: 7.6.2 - validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /npm-bundled@3.0.1: - resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - npm-normalize-package-bin: 3.0.1 - dev: true - - /npm-install-checks@6.3.0: - resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - semver: 7.6.2 - dev: true - - /npm-normalize-package-bin@3.0.1: - resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /npm-package-arg@10.1.0: - resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - hosted-git-info: 6.1.1 - proc-log: 3.0.0 - semver: 7.6.2 - validate-npm-package-name: 5.0.1 - dev: true - - /npm-packlist@7.0.4: - resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - ignore-walk: 6.0.5 - dev: true - - /npm-pick-manifest@8.0.2: - resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - npm-install-checks: 6.3.0 - npm-normalize-package-bin: 3.0.1 - npm-package-arg: 10.1.0 - semver: 7.6.2 - dev: true - - /npm-registry-fetch@14.0.5: - resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - make-fetch-happen: 11.1.1 - minipass: 5.0.0 - minipass-fetch: 3.0.5 - minipass-json-stream: 1.0.1 - minizlib: 2.1.2 - npm-package-arg: 10.1.0 - proc-log: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -5363,16 +4600,6 @@ packages: path-key: 4.0.0 dev: true - /npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - dev: true - /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: @@ -5420,11 +4647,6 @@ packages: mimic-fn: 4.0.0 dev: true - /opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - dev: true - /optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -5479,46 +4701,11 @@ packages: p-limit: 4.0.0 dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /pacote@15.2.0: - resolution: {integrity: sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - '@npmcli/git': 4.1.0 - '@npmcli/installed-package-contents': 2.1.0 - '@npmcli/promise-spawn': 6.0.2 - '@npmcli/run-script': 6.0.2 - cacache: 17.1.4 - fs-minipass: 3.0.3 - minipass: 5.0.0 - npm-package-arg: 10.1.0 - npm-packlist: 7.0.4 - npm-pick-manifest: 8.0.2 - npm-registry-fetch: 14.0.5 - proc-log: 3.0.0 - promise-retry: 2.0.1 - read-package-json: 6.0.4 - read-package-json-fast: 3.0.2 - sigstore: 1.9.0 - ssri: 10.0.6 - tar: 6.2.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5694,32 +4881,10 @@ packages: react-is: 18.3.1 dev: true - /proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true - - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - dev: true - /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -5767,12 +4932,6 @@ packages: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} dev: true - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - /rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} dependencies: @@ -5784,24 +4943,6 @@ packages: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: true - /read-package-json-fast@3.0.2: - resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - json-parse-even-better-errors: 3.0.2 - npm-normalize-package-bin: 3.0.1 - dev: true - - /read-package-json@6.0.4: - resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - glob: 10.3.14 - json-parse-even-better-errors: 3.0.2 - normalize-package-data: 5.0.0 - npm-normalize-package-bin: 3.0.1 - dev: true - /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -5855,10 +4996,6 @@ packages: picomatch: 2.3.1 dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true - /regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -5940,38 +5077,6 @@ packages: glob: 7.2.3 dev: true - /rollup-plugin-filesize@10.0.0: - resolution: {integrity: sha512-JAYYhzCcmGjmCzo3LEHSDE3RAPHKIeBdpqRhiyZSv5o/3wFhktUOzYAWg/uUKyEu5dEaVaql6UOmaqHx1qKrZA==} - engines: {node: '>=16.0.0'} - dependencies: - '@babel/runtime': 7.24.5 - boxen: 5.1.2 - brotli-size: 4.0.0 - colors: 1.4.0 - filesize: 6.4.0 - gzip-size: 6.0.0 - pacote: 15.2.0 - terser: 5.31.0 - transitivePeerDependencies: - - bluebird - - supports-color - dev: true - - /rollup-plugin-serve@2.0.3: - resolution: {integrity: sha512-gQKmfQng17+jOsX5tmDanvJkm0f9XLqWVvXsD7NGd1SlneT+U1j/HjslDUXQz6cqwLnVDRc6xF2lj6rre+eeeQ==} - dependencies: - mime: 3.0.0 - opener: 1.5.2 - dev: true - - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /rollup@4.17.2: resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -6032,16 +5137,6 @@ packages: hasBin: true dev: true - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - dependencies: - randombytes: 2.1.0 - dev: true - - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -6063,20 +5158,6 @@ packages: engines: {node: '>=14'} dev: true - /sigstore@1.9.0: - resolution: {integrity: sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - '@sigstore/bundle': 1.1.0 - '@sigstore/protobuf-specs': 0.2.1 - '@sigstore/sign': 1.0.0 - '@sigstore/tuf': 1.0.3 - make-fetch-happen: 11.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true @@ -6102,34 +5183,6 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true - - /smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - dev: true - - /socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - socks: 2.8.3 - transitivePeerDependencies: - - supports-color - dev: true - - /socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - dev: true - /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -6142,13 +5195,6 @@ packages: source-map: 0.6.1 dev: true - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -6198,10 +5244,6 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true - /ssh-remote-port-forward@1.0.4: resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} dependencies: @@ -6221,20 +5263,6 @@ packages: nan: 2.19.0 dev: true - /ssri@10.0.6: - resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minipass: 7.1.1 - dev: true - - /ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - minipass: 3.3.6 - dev: true - /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -6446,17 +5474,6 @@ packages: yallist: 4.0.0 dev: true - /terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: true - /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -6640,17 +5657,6 @@ packages: - ts-node dev: true - /tuf-js@1.1.7: - resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - '@tufjs/models': 1.0.4 - debug: 4.3.4 - make-fetch-happen: 11.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: true @@ -6706,34 +5712,6 @@ packages: engines: {node: '>=18'} dev: true - /unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - unique-slug: 3.0.0 - dev: true - - /unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - unique-slug: 4.0.0 - dev: true - - /unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - dev: true - - /unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - imurmurhash: 0.1.4 - dev: true - /unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: @@ -6777,11 +5755,6 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - /vue-eslint-parser@9.4.2(eslint@8.57.0): resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} engines: {node: ^14.17.0 || >=16.0.0} @@ -6835,27 +5808,6 @@ packages: isexe: 2.0.0 dev: true - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - dependencies: - string-width: 4.2.3 - dev: true - - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 - dev: true - /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'}