@kaiz11/stack-client 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +32 -0
- package/README.md +586 -0
- package/dist/accounts/accounts-client.d.ts +188 -0
- package/dist/accounts/accounts-client.d.ts.map +1 -0
- package/dist/accounts/accounts-client.js +264 -0
- package/dist/accounts/accounts-client.js.map +1 -0
- package/dist/accounts/index.d.ts +8 -0
- package/dist/accounts/index.d.ts.map +1 -0
- package/dist/accounts/index.js +8 -0
- package/dist/accounts/index.js.map +1 -0
- package/dist/accounts/mock-accounts.d.ts +90 -0
- package/dist/accounts/mock-accounts.d.ts.map +1 -0
- package/dist/accounts/mock-accounts.js +434 -0
- package/dist/accounts/mock-accounts.js.map +1 -0
- package/dist/accounts/types.d.ts +180 -0
- package/dist/accounts/types.d.ts.map +1 -0
- package/dist/accounts/types.js +59 -0
- package/dist/accounts/types.js.map +1 -0
- package/dist/auth/auth-client.d.ts +224 -0
- package/dist/auth/auth-client.d.ts.map +1 -0
- package/dist/auth/auth-client.js +230 -0
- package/dist/auth/auth-client.js.map +1 -0
- package/dist/auth/base-auth.d.ts +44 -0
- package/dist/auth/base-auth.d.ts.map +1 -0
- package/dist/auth/base-auth.js +55 -0
- package/dist/auth/base-auth.js.map +1 -0
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/methods/admin.d.ts +59 -0
- package/dist/auth/methods/admin.d.ts.map +1 -0
- package/dist/auth/methods/admin.js +55 -0
- package/dist/auth/methods/admin.js.map +1 -0
- package/dist/auth/methods/index.d.ts +9 -0
- package/dist/auth/methods/index.d.ts.map +1 -0
- package/dist/auth/methods/index.js +8 -0
- package/dist/auth/methods/index.js.map +1 -0
- package/dist/auth/methods/magic-link.d.ts +27 -0
- package/dist/auth/methods/magic-link.d.ts.map +1 -0
- package/dist/auth/methods/magic-link.js +37 -0
- package/dist/auth/methods/magic-link.js.map +1 -0
- package/dist/auth/methods/mfa.d.ts +92 -0
- package/dist/auth/methods/mfa.d.ts.map +1 -0
- package/dist/auth/methods/mfa.js +153 -0
- package/dist/auth/methods/mfa.js.map +1 -0
- package/dist/auth/methods/oauth.d.ts +62 -0
- package/dist/auth/methods/oauth.d.ts.map +1 -0
- package/dist/auth/methods/oauth.js +165 -0
- package/dist/auth/methods/oauth.js.map +1 -0
- package/dist/auth/methods/otp.d.ts +43 -0
- package/dist/auth/methods/otp.d.ts.map +1 -0
- package/dist/auth/methods/otp.js +66 -0
- package/dist/auth/methods/otp.js.map +1 -0
- package/dist/auth/methods/password.d.ts +64 -0
- package/dist/auth/methods/password.d.ts.map +1 -0
- package/dist/auth/methods/password.js +116 -0
- package/dist/auth/methods/password.js.map +1 -0
- package/dist/auth/methods/recovery.d.ts +62 -0
- package/dist/auth/methods/recovery.d.ts.map +1 -0
- package/dist/auth/methods/recovery.js +100 -0
- package/dist/auth/methods/recovery.js.map +1 -0
- package/dist/auth/mock-auth.d.ts +135 -0
- package/dist/auth/mock-auth.d.ts.map +1 -0
- package/dist/auth/mock-auth.js +417 -0
- package/dist/auth/mock-auth.js.map +1 -0
- package/dist/auth/server/helpers.d.ts +215 -0
- package/dist/auth/server/helpers.d.ts.map +1 -0
- package/dist/auth/server/helpers.js +241 -0
- package/dist/auth/server/helpers.js.map +1 -0
- package/dist/auth/server/index.d.ts +24 -0
- package/dist/auth/server/index.d.ts.map +1 -0
- package/dist/auth/server/index.js +40 -0
- package/dist/auth/server/index.js.map +1 -0
- package/dist/auth/server/middleware.d.ts +305 -0
- package/dist/auth/server/middleware.d.ts.map +1 -0
- package/dist/auth/server/middleware.js +405 -0
- package/dist/auth/server/middleware.js.map +1 -0
- package/dist/auth/server/verify.d.ts +184 -0
- package/dist/auth/server/verify.d.ts.map +1 -0
- package/dist/auth/server/verify.js +222 -0
- package/dist/auth/server/verify.js.map +1 -0
- package/dist/auth/token-manager.d.ts +94 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +231 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/auth/types.d.ts +412 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +66 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/user/identities.d.ts +62 -0
- package/dist/auth/user/identities.d.ts.map +1 -0
- package/dist/auth/user/identities.js +88 -0
- package/dist/auth/user/identities.js.map +1 -0
- package/dist/auth/user/index.d.ts +4 -0
- package/dist/auth/user/index.d.ts.map +1 -0
- package/dist/auth/user/index.js +4 -0
- package/dist/auth/user/index.js.map +1 -0
- package/dist/auth/user/user.d.ts +64 -0
- package/dist/auth/user/user.d.ts.map +1 -0
- package/dist/auth/user/user.js +105 -0
- package/dist/auth/user/user.js.map +1 -0
- package/dist/auth/user/verification.d.ts +49 -0
- package/dist/auth/user/verification.d.ts.map +1 -0
- package/dist/auth/user/verification.js +71 -0
- package/dist/auth/user/verification.js.map +1 -0
- package/dist/cli/browser.d.ts +11 -0
- package/dist/cli/browser.d.ts.map +1 -0
- package/dist/cli/browser.js +35 -0
- package/dist/cli/browser.js.map +1 -0
- package/dist/cli/callback-server.d.ts +30 -0
- package/dist/cli/callback-server.d.ts.map +1 -0
- package/dist/cli/callback-server.js +100 -0
- package/dist/cli/callback-server.js.map +1 -0
- package/dist/cli/file-token-store.d.ts +79 -0
- package/dist/cli/file-token-store.d.ts.map +1 -0
- package/dist/cli/file-token-store.js +138 -0
- package/dist/cli/file-token-store.js.map +1 -0
- package/dist/cli/index.d.ts +33 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/oauth.d.ts +67 -0
- package/dist/cli/oauth.d.ts.map +1 -0
- package/dist/cli/oauth.js +101 -0
- package/dist/cli/oauth.js.map +1 -0
- package/dist/cli/pkce.d.ts +35 -0
- package/dist/cli/pkce.d.ts.map +1 -0
- package/dist/cli/pkce.js +43 -0
- package/dist/cli/pkce.js.map +1 -0
- package/dist/client.d.ts +22 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +99 -0
- package/dist/client.js.map +1 -0
- package/dist/db/client.d.ts +9 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +19 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/errors.d.ts +19 -0
- package/dist/db/errors.d.ts.map +1 -0
- package/dist/db/errors.js +57 -0
- package/dist/db/errors.js.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/mock.d.ts +28 -0
- package/dist/db/mock.d.ts.map +1 -0
- package/dist/db/mock.js +459 -0
- package/dist/db/mock.js.map +1 -0
- package/dist/db/types.d.ts +73 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/errors.d.ts +33 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +76 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/http.d.ts +81 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +163 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/keys.d.ts +87 -0
- package/dist/lib/keys.d.ts.map +1 -0
- package/dist/lib/keys.js +147 -0
- package/dist/lib/keys.js.map +1 -0
- package/dist/lib/paths.d.ts +37 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +49 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/token-store.d.ts +42 -0
- package/dist/lib/token-store.d.ts.map +1 -0
- package/dist/lib/token-store.js +75 -0
- package/dist/lib/token-store.js.map +1 -0
- package/dist/mocks/handlers.d.ts +29 -0
- package/dist/mocks/handlers.d.ts.map +1 -0
- package/dist/mocks/handlers.js +79 -0
- package/dist/mocks/handlers.js.map +1 -0
- package/dist/mocks/index.d.ts +5 -0
- package/dist/mocks/index.d.ts.map +1 -0
- package/dist/mocks/index.js +9 -0
- package/dist/mocks/index.js.map +1 -0
- package/dist/mocks/responses.d.ts +76 -0
- package/dist/mocks/responses.d.ts.map +1 -0
- package/dist/mocks/responses.js +91 -0
- package/dist/mocks/responses.js.map +1 -0
- package/dist/mocks/server.d.ts +7 -0
- package/dist/mocks/server.d.ts.map +1 -0
- package/dist/mocks/server.js +9 -0
- package/dist/mocks/server.js.map +1 -0
- package/dist/mocks/state.d.ts +86 -0
- package/dist/mocks/state.d.ts.map +1 -0
- package/dist/mocks/state.js +77 -0
- package/dist/mocks/state.js.map +1 -0
- package/dist/storage/bucket-ref.d.ts +183 -0
- package/dist/storage/bucket-ref.d.ts.map +1 -0
- package/dist/storage/bucket-ref.js +529 -0
- package/dist/storage/bucket-ref.js.map +1 -0
- package/dist/storage/errors.d.ts +27 -0
- package/dist/storage/errors.d.ts.map +1 -0
- package/dist/storage/errors.js +89 -0
- package/dist/storage/errors.js.map +1 -0
- package/dist/storage/index.d.ts +13 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interface.d.ts +245 -0
- package/dist/storage/interface.d.ts.map +1 -0
- package/dist/storage/interface.js +2 -0
- package/dist/storage/interface.js.map +1 -0
- package/dist/storage/mock-storage.d.ts +67 -0
- package/dist/storage/mock-storage.d.ts.map +1 -0
- package/dist/storage/mock-storage.js +478 -0
- package/dist/storage/mock-storage.js.map +1 -0
- package/dist/storage/policies-client.d.ts +77 -0
- package/dist/storage/policies-client.d.ts.map +1 -0
- package/dist/storage/policies-client.js +115 -0
- package/dist/storage/policies-client.js.map +1 -0
- package/dist/storage/policy-templates.d.ts +6 -0
- package/dist/storage/policy-templates.d.ts.map +1 -0
- package/dist/storage/policy-templates.js +290 -0
- package/dist/storage/policy-templates.js.map +1 -0
- package/dist/storage/policy-types.d.ts +98 -0
- package/dist/storage/policy-types.d.ts.map +1 -0
- package/dist/storage/policy-types.js +20 -0
- package/dist/storage/policy-types.js.map +1 -0
- package/dist/storage/storage-client.d.ts +32 -0
- package/dist/storage/storage-client.d.ts.map +1 -0
- package/dist/storage/storage-client.js +94 -0
- package/dist/storage/storage-client.js.map +1 -0
- package/dist/storage/tus-upload.d.ts +56 -0
- package/dist/storage/tus-upload.d.ts.map +1 -0
- package/dist/storage/tus-upload.js +236 -0
- package/dist/storage/tus-upload.js.map +1 -0
- package/dist/storage/types.d.ts +335 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +39 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/test/auth/helpers.d.ts +33 -0
- package/dist/test/auth/helpers.d.ts.map +1 -0
- package/dist/test/auth/helpers.js +80 -0
- package/dist/test/auth/helpers.js.map +1 -0
- package/dist/test/helpers/jwt.d.ts +61 -0
- package/dist/test/helpers/jwt.d.ts.map +1 -0
- package/dist/test/helpers/jwt.js +132 -0
- package/dist/test/helpers/jwt.js.map +1 -0
- package/dist/test/helpers/mailpit.d.ts +61 -0
- package/dist/test/helpers/mailpit.d.ts.map +1 -0
- package/dist/test/helpers/mailpit.js +107 -0
- package/dist/test/helpers/mailpit.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +17 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { BaseAuthClient } from "./base-auth.js";
|
|
2
|
+
import type { IAuthClient } from "./auth-client.js";
|
|
3
|
+
import type { TokenManager } from "./token-manager.js";
|
|
4
|
+
import { type EmailPasswordCredentials, type SignUpOptions, type SignUpResult, type OAuthSignInOptions, type MagicLinkOptions, type OtpSignInOptions, type OtpVerifyOptions, type PasswordResetOptions, type UpdatePasswordOptions, type ReauthenticateOptions, type UpdateUserOptions, type EnrollFactorOptions, type ChallengeFactorOptions, type VerifyFactorOptions, type LinkIdentityOptions, type UnlinkIdentityOptions, type VerifyOptions, type ResendVerificationOptions, type Session, type User, type Factor, type UserIdentity, type LogoutScope } from "./types.js";
|
|
5
|
+
import type { AdminInviteOptions, InvitedUser } from "./methods/admin.js";
|
|
6
|
+
/**
|
|
7
|
+
* Mock auth client configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface MockAuthClientConfig {
|
|
10
|
+
tokenManager: TokenManager;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Mock implementation of AuthClient
|
|
14
|
+
*
|
|
15
|
+
* Uses the same response generation as MSW handlers,
|
|
16
|
+
* ensuring consistent behavior between SDK tests and developer tests.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { MockAuthClient, TokenManager, createMemoryStore } from "@kaiz11/stack-client";
|
|
21
|
+
*
|
|
22
|
+
* const tokenManager = new TokenManager({ store: createMemoryStore() });
|
|
23
|
+
* const auth = new MockAuthClient({ tokenManager });
|
|
24
|
+
*
|
|
25
|
+
* // Use like real AuthClient
|
|
26
|
+
* await auth.signInWithPassword({ email: "test@example.com", password: "password" });
|
|
27
|
+
* const user = auth.getUser();
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class MockAuthClient extends BaseAuthClient implements IAuthClient {
|
|
31
|
+
private enrolledFactors;
|
|
32
|
+
constructor(config: MockAuthClientConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Mock sign in with password
|
|
35
|
+
*/
|
|
36
|
+
signInWithPassword(credentials: EmailPasswordCredentials): Promise<Session>;
|
|
37
|
+
/**
|
|
38
|
+
* Mock sign up
|
|
39
|
+
*/
|
|
40
|
+
signUp(options: SignUpOptions): Promise<SignUpResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Mock sign out
|
|
43
|
+
*/
|
|
44
|
+
signOut(_scope?: LogoutScope): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Mock OAuth sign in - returns a mock authorization URL
|
|
47
|
+
*/
|
|
48
|
+
signInWithOAuth(options: OAuthSignInOptions): Promise<{
|
|
49
|
+
url: string;
|
|
50
|
+
provider: string;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Mock OAuth callback - simulates successful OAuth completion
|
|
54
|
+
*/
|
|
55
|
+
handleOAuthCallback(): Promise<Session | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Mock magic link - simulates sending email
|
|
58
|
+
*/
|
|
59
|
+
signInWithMagicLink(_options: MagicLinkOptions): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Mock OTP send - simulates sending OTP
|
|
62
|
+
*/
|
|
63
|
+
signInWithOtp(_options: OtpSignInOptions): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Mock OTP verify - simulates verification
|
|
66
|
+
*/
|
|
67
|
+
verifyOtp(options: OtpVerifyOptions): Promise<Session>;
|
|
68
|
+
/**
|
|
69
|
+
* Mock password reset email
|
|
70
|
+
*/
|
|
71
|
+
resetPasswordForEmail(_options: PasswordResetOptions): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Mock update password
|
|
74
|
+
*/
|
|
75
|
+
updatePassword(_options: UpdatePasswordOptions): Promise<Session>;
|
|
76
|
+
/**
|
|
77
|
+
* Mock reauthenticate - sends OTP to user's email (simulated)
|
|
78
|
+
*/
|
|
79
|
+
reauthenticate(_options?: ReauthenticateOptions): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Mock refresh session
|
|
82
|
+
*/
|
|
83
|
+
refreshSession(): Promise<Session>;
|
|
84
|
+
/**
|
|
85
|
+
* User management methods
|
|
86
|
+
*/
|
|
87
|
+
get user(): {
|
|
88
|
+
getCurrent: () => User | null;
|
|
89
|
+
get: () => Promise<User>;
|
|
90
|
+
update: (options: UpdateUserOptions) => Promise<Session>;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* MFA methods
|
|
94
|
+
*/
|
|
95
|
+
get mfa(): {
|
|
96
|
+
enroll: (options: EnrollFactorOptions) => Promise<{
|
|
97
|
+
id: string;
|
|
98
|
+
totpUri?: string;
|
|
99
|
+
qrCode?: string;
|
|
100
|
+
}>;
|
|
101
|
+
challenge: (options: ChallengeFactorOptions) => Promise<{
|
|
102
|
+
id: string;
|
|
103
|
+
expiresAt: number;
|
|
104
|
+
}>;
|
|
105
|
+
verify: (options: VerifyFactorOptions) => Promise<Session>;
|
|
106
|
+
unenroll: (factorId: string) => Promise<void>;
|
|
107
|
+
listFactors: () => Promise<Factor[]>;
|
|
108
|
+
getAuthenticatorAssuranceLevel: () => {
|
|
109
|
+
currentLevel: "aal1" | "aal2" | null;
|
|
110
|
+
nextLevel: "aal1" | "aal2" | null;
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Identity management methods
|
|
115
|
+
*/
|
|
116
|
+
get identities(): {
|
|
117
|
+
list: () => Promise<UserIdentity[]>;
|
|
118
|
+
link: (options: LinkIdentityOptions) => Promise<{
|
|
119
|
+
url: string;
|
|
120
|
+
provider: string;
|
|
121
|
+
}>;
|
|
122
|
+
unlink: (_options: UnlinkIdentityOptions) => Promise<void>;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Verification methods
|
|
126
|
+
*/
|
|
127
|
+
get verification(): {
|
|
128
|
+
verify: (options: VerifyOptions) => Promise<Session>;
|
|
129
|
+
resend: (_options: ResendVerificationOptions) => Promise<void>;
|
|
130
|
+
};
|
|
131
|
+
get admin(): {
|
|
132
|
+
inviteUserByEmail: (options: AdminInviteOptions) => Promise<InvitedUser>;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=mock-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-auth.d.ts","sourceRoot":"","sources":["../../src/auth/mock-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import { AuthError } from "../lib/errors.js";
|
|
2
|
+
import { createTokenResponse, } from "../mocks/responses.js";
|
|
3
|
+
import { mockState, requestCounts, delay } from "../mocks/state.js";
|
|
4
|
+
import { BaseAuthClient } from "./base-auth.js";
|
|
5
|
+
import { normalizeSession, normalizeUser, } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Mock implementation of AuthClient
|
|
8
|
+
*
|
|
9
|
+
* Uses the same response generation as MSW handlers,
|
|
10
|
+
* ensuring consistent behavior between SDK tests and developer tests.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { MockAuthClient, TokenManager, createMemoryStore } from "@kaiz11/stack-client";
|
|
15
|
+
*
|
|
16
|
+
* const tokenManager = new TokenManager({ store: createMemoryStore() });
|
|
17
|
+
* const auth = new MockAuthClient({ tokenManager });
|
|
18
|
+
*
|
|
19
|
+
* // Use like real AuthClient
|
|
20
|
+
* await auth.signInWithPassword({ email: "test@example.com", password: "password" });
|
|
21
|
+
* const user = auth.getUser();
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class MockAuthClient extends BaseAuthClient {
|
|
25
|
+
// Mock state for enrolled factors
|
|
26
|
+
enrolledFactors = [];
|
|
27
|
+
constructor(config) {
|
|
28
|
+
super(config.tokenManager);
|
|
29
|
+
// Set the refresh function on tokenManager for auto-refresh support
|
|
30
|
+
// This allows TokenManager's auto-refresh timer to use our mock logic
|
|
31
|
+
this.tokenManager.setRefreshFn(() => this.refreshSession());
|
|
32
|
+
}
|
|
33
|
+
// ============================================
|
|
34
|
+
// Password Authentication
|
|
35
|
+
// ============================================
|
|
36
|
+
/**
|
|
37
|
+
* Mock sign in with password
|
|
38
|
+
*/
|
|
39
|
+
async signInWithPassword(credentials) {
|
|
40
|
+
await delay(mockState.latency);
|
|
41
|
+
requestCounts.signIn++;
|
|
42
|
+
if (mockState.shouldFailSignIn) {
|
|
43
|
+
throw new AuthError(mockState.signInError.msg, mockState.signInError.error_code, mockState.signInError.code);
|
|
44
|
+
}
|
|
45
|
+
const response = createTokenResponse({ email: credentials.email });
|
|
46
|
+
const session = normalizeSession(response);
|
|
47
|
+
this.tokenManager.setSession(session);
|
|
48
|
+
return session;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Mock sign up
|
|
52
|
+
*/
|
|
53
|
+
async signUp(options) {
|
|
54
|
+
await delay(mockState.latency);
|
|
55
|
+
requestCounts.signUp++;
|
|
56
|
+
if (mockState.shouldFailSignUp) {
|
|
57
|
+
throw new AuthError(mockState.signUpError.msg, mockState.signUpError.error_code, mockState.signUpError.code);
|
|
58
|
+
}
|
|
59
|
+
const tokenOptions = {
|
|
60
|
+
email: options.email,
|
|
61
|
+
};
|
|
62
|
+
if (options.data) {
|
|
63
|
+
tokenOptions.userMetadata = options.data;
|
|
64
|
+
}
|
|
65
|
+
const response = createTokenResponse(tokenOptions);
|
|
66
|
+
const session = normalizeSession(response);
|
|
67
|
+
this.tokenManager.setSession(session);
|
|
68
|
+
// Mock mode always returns a session (no email verification)
|
|
69
|
+
return { session, user: session.user };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Mock sign out
|
|
73
|
+
*/
|
|
74
|
+
async signOut(_scope = "local") {
|
|
75
|
+
// Don't count as a request if not authenticated
|
|
76
|
+
if (!this.tokenManager.getSession()) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
await delay(mockState.latency);
|
|
80
|
+
requestCounts.signOut++;
|
|
81
|
+
this.tokenManager.clearSession();
|
|
82
|
+
}
|
|
83
|
+
// ============================================
|
|
84
|
+
// OAuth Authentication
|
|
85
|
+
// ============================================
|
|
86
|
+
/**
|
|
87
|
+
* Mock OAuth sign in - returns a mock authorization URL
|
|
88
|
+
*/
|
|
89
|
+
async signInWithOAuth(options) {
|
|
90
|
+
await delay(mockState.latency);
|
|
91
|
+
const redirectTo = options.redirectTo ?? "http://localhost:3000/callback";
|
|
92
|
+
const url = `https://mock-auth.example.com/authorize?provider=${options.provider}&redirect_to=${encodeURIComponent(redirectTo)}`;
|
|
93
|
+
return { url, provider: options.provider };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Mock OAuth callback - simulates successful OAuth completion
|
|
97
|
+
*/
|
|
98
|
+
async handleOAuthCallback() {
|
|
99
|
+
await delay(mockState.latency);
|
|
100
|
+
// Simulate getting tokens from URL hash/params
|
|
101
|
+
const response = createTokenResponse({ email: "oauth-user@example.com" });
|
|
102
|
+
const session = normalizeSession(response);
|
|
103
|
+
this.tokenManager.setSession(session);
|
|
104
|
+
return session;
|
|
105
|
+
}
|
|
106
|
+
// ============================================
|
|
107
|
+
// Magic Link Authentication
|
|
108
|
+
// ============================================
|
|
109
|
+
/**
|
|
110
|
+
* Mock magic link - simulates sending email
|
|
111
|
+
*/
|
|
112
|
+
async signInWithMagicLink(_options) {
|
|
113
|
+
await delay(mockState.latency);
|
|
114
|
+
// In real implementation, this triggers email sending
|
|
115
|
+
// Mock just simulates success
|
|
116
|
+
}
|
|
117
|
+
// ============================================
|
|
118
|
+
// OTP Authentication
|
|
119
|
+
// ============================================
|
|
120
|
+
/**
|
|
121
|
+
* Mock OTP send - simulates sending OTP
|
|
122
|
+
*/
|
|
123
|
+
async signInWithOtp(_options) {
|
|
124
|
+
await delay(mockState.latency);
|
|
125
|
+
// In real implementation, this triggers OTP sending
|
|
126
|
+
// Mock just simulates success
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Mock OTP verify - simulates verification
|
|
130
|
+
*/
|
|
131
|
+
async verifyOtp(options) {
|
|
132
|
+
await delay(mockState.latency);
|
|
133
|
+
const email = "email" in options && options.email
|
|
134
|
+
? options.email
|
|
135
|
+
: `${options.phone}@phone.local`;
|
|
136
|
+
const response = createTokenResponse({ email });
|
|
137
|
+
const session = normalizeSession(response);
|
|
138
|
+
this.tokenManager.setSession(session);
|
|
139
|
+
return session;
|
|
140
|
+
}
|
|
141
|
+
// ============================================
|
|
142
|
+
// Password Recovery
|
|
143
|
+
// ============================================
|
|
144
|
+
/**
|
|
145
|
+
* Mock password reset email
|
|
146
|
+
*/
|
|
147
|
+
async resetPasswordForEmail(_options) {
|
|
148
|
+
await delay(mockState.latency);
|
|
149
|
+
// Simulates sending password reset email
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Mock update password
|
|
153
|
+
*/
|
|
154
|
+
async updatePassword(_options) {
|
|
155
|
+
await delay(mockState.latency);
|
|
156
|
+
const currentSession = this.tokenManager.getSession();
|
|
157
|
+
if (!currentSession) {
|
|
158
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
159
|
+
}
|
|
160
|
+
// Return current session (password updated)
|
|
161
|
+
return currentSession;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Mock reauthenticate - sends OTP to user's email (simulated)
|
|
165
|
+
*/
|
|
166
|
+
async reauthenticate(_options) {
|
|
167
|
+
await delay(mockState.latency);
|
|
168
|
+
if (!this.tokenManager.getSession()) {
|
|
169
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// ============================================
|
|
173
|
+
// Session Management
|
|
174
|
+
// ============================================
|
|
175
|
+
/**
|
|
176
|
+
* Mock refresh session
|
|
177
|
+
*/
|
|
178
|
+
async refreshSession() {
|
|
179
|
+
// Throw if not authenticated
|
|
180
|
+
if (!this.tokenManager.getSession()) {
|
|
181
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
182
|
+
}
|
|
183
|
+
await delay(mockState.latency);
|
|
184
|
+
requestCounts.refresh++;
|
|
185
|
+
if (mockState.shouldFailRefresh) {
|
|
186
|
+
this.tokenManager.clearSession();
|
|
187
|
+
throw new AuthError(mockState.refreshError.msg, mockState.refreshError.error_code, mockState.refreshError.code);
|
|
188
|
+
}
|
|
189
|
+
// Get current session to preserve email
|
|
190
|
+
const currentSession = this.tokenManager.getSession();
|
|
191
|
+
const email = currentSession?.user.email ?? "user@example.com";
|
|
192
|
+
const response = createTokenResponse({
|
|
193
|
+
email,
|
|
194
|
+
refreshToken: `new-refresh-${Date.now()}`,
|
|
195
|
+
});
|
|
196
|
+
const session = normalizeSession(response);
|
|
197
|
+
this.tokenManager.setSession(session, "TOKEN_REFRESHED");
|
|
198
|
+
return session;
|
|
199
|
+
}
|
|
200
|
+
// ============================================
|
|
201
|
+
// User Management
|
|
202
|
+
// ============================================
|
|
203
|
+
/**
|
|
204
|
+
* User management methods
|
|
205
|
+
*/
|
|
206
|
+
get user() {
|
|
207
|
+
return {
|
|
208
|
+
getCurrent: () => {
|
|
209
|
+
return this.getUser();
|
|
210
|
+
},
|
|
211
|
+
get: async () => {
|
|
212
|
+
await delay(mockState.latency);
|
|
213
|
+
const session = this.tokenManager.getSession();
|
|
214
|
+
if (!session) {
|
|
215
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
216
|
+
}
|
|
217
|
+
return session.user;
|
|
218
|
+
},
|
|
219
|
+
update: async (options) => {
|
|
220
|
+
await delay(mockState.latency);
|
|
221
|
+
const session = this.tokenManager.getSession();
|
|
222
|
+
if (!session) {
|
|
223
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
224
|
+
}
|
|
225
|
+
// Create updated user with new metadata
|
|
226
|
+
const updatedUser = {
|
|
227
|
+
...session.user,
|
|
228
|
+
email: options.email ?? session.user.email,
|
|
229
|
+
phone: options.phone ?? session.user.phone,
|
|
230
|
+
userMetadata: {
|
|
231
|
+
...session.user.userMetadata,
|
|
232
|
+
...(options.data ?? {}),
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
// Create new session with updated user
|
|
236
|
+
const updatedSession = {
|
|
237
|
+
...session,
|
|
238
|
+
user: updatedUser,
|
|
239
|
+
};
|
|
240
|
+
this.tokenManager.setSession(updatedSession);
|
|
241
|
+
return updatedSession;
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
// ============================================
|
|
246
|
+
// MFA
|
|
247
|
+
// ============================================
|
|
248
|
+
/**
|
|
249
|
+
* MFA methods
|
|
250
|
+
*/
|
|
251
|
+
get mfa() {
|
|
252
|
+
return {
|
|
253
|
+
enroll: async (options) => {
|
|
254
|
+
await delay(mockState.latency);
|
|
255
|
+
if (!this.tokenManager.getSession()) {
|
|
256
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
257
|
+
}
|
|
258
|
+
const factorId = `factor-${Date.now()}`;
|
|
259
|
+
const factor = {
|
|
260
|
+
id: factorId,
|
|
261
|
+
type: options.type,
|
|
262
|
+
status: "unverified",
|
|
263
|
+
friendlyName: options.friendlyName,
|
|
264
|
+
createdAt: new Date().toISOString(),
|
|
265
|
+
updatedAt: new Date().toISOString(),
|
|
266
|
+
};
|
|
267
|
+
this.enrolledFactors.push(factor);
|
|
268
|
+
if (options.type === "totp") {
|
|
269
|
+
return {
|
|
270
|
+
id: factorId,
|
|
271
|
+
totpUri: `otpauth://totp/MockApp:user@example.com?secret=MOCK_SECRET&issuer=MockApp`,
|
|
272
|
+
qrCode: "data:image/png;base64,MOCK_QR_CODE",
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return { id: factorId };
|
|
276
|
+
},
|
|
277
|
+
challenge: async (options) => {
|
|
278
|
+
await delay(mockState.latency);
|
|
279
|
+
if (!this.tokenManager.getSession()) {
|
|
280
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
281
|
+
}
|
|
282
|
+
const factor = this.enrolledFactors.find((f) => f.id === options.factorId);
|
|
283
|
+
if (!factor) {
|
|
284
|
+
throw new AuthError("Factor not found", "factor_not_found", 404);
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
id: `challenge-${Date.now()}`,
|
|
288
|
+
expiresAt: Date.now() + 300000, // 5 minutes
|
|
289
|
+
};
|
|
290
|
+
},
|
|
291
|
+
verify: async (options) => {
|
|
292
|
+
await delay(mockState.latency);
|
|
293
|
+
const session = this.tokenManager.getSession();
|
|
294
|
+
if (!session) {
|
|
295
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
296
|
+
}
|
|
297
|
+
const factor = this.enrolledFactors.find((f) => f.id === options.factorId);
|
|
298
|
+
if (!factor) {
|
|
299
|
+
throw new AuthError("Factor not found", "factor_not_found", 404);
|
|
300
|
+
}
|
|
301
|
+
// Mark factor as verified
|
|
302
|
+
factor.status = "verified";
|
|
303
|
+
// Return session (in real impl, tokens would have aal2)
|
|
304
|
+
return session;
|
|
305
|
+
},
|
|
306
|
+
unenroll: async (factorId) => {
|
|
307
|
+
await delay(mockState.latency);
|
|
308
|
+
if (!this.tokenManager.getSession()) {
|
|
309
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
310
|
+
}
|
|
311
|
+
const index = this.enrolledFactors.findIndex((f) => f.id === factorId);
|
|
312
|
+
if (index === -1) {
|
|
313
|
+
throw new AuthError("Factor not found", "factor_not_found", 404);
|
|
314
|
+
}
|
|
315
|
+
this.enrolledFactors.splice(index, 1);
|
|
316
|
+
},
|
|
317
|
+
listFactors: async () => {
|
|
318
|
+
await delay(mockState.latency);
|
|
319
|
+
if (!this.tokenManager.getSession()) {
|
|
320
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
321
|
+
}
|
|
322
|
+
return [...this.enrolledFactors];
|
|
323
|
+
},
|
|
324
|
+
getAuthenticatorAssuranceLevel: () => {
|
|
325
|
+
const session = this.tokenManager.getSession();
|
|
326
|
+
if (!session) {
|
|
327
|
+
return { currentLevel: null, nextLevel: null };
|
|
328
|
+
}
|
|
329
|
+
const hasVerifiedFactor = this.enrolledFactors.some((f) => f.status === "verified");
|
|
330
|
+
return {
|
|
331
|
+
currentLevel: "aal1",
|
|
332
|
+
nextLevel: hasVerifiedFactor ? "aal2" : "aal1",
|
|
333
|
+
};
|
|
334
|
+
},
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
// ============================================
|
|
338
|
+
// Identity Management
|
|
339
|
+
// ============================================
|
|
340
|
+
/**
|
|
341
|
+
* Identity management methods
|
|
342
|
+
*/
|
|
343
|
+
get identities() {
|
|
344
|
+
return {
|
|
345
|
+
list: async () => {
|
|
346
|
+
await delay(mockState.latency);
|
|
347
|
+
const session = this.tokenManager.getSession();
|
|
348
|
+
if (!session) {
|
|
349
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
350
|
+
}
|
|
351
|
+
return session.user.identities ?? [];
|
|
352
|
+
},
|
|
353
|
+
link: async (options) => {
|
|
354
|
+
await delay(mockState.latency);
|
|
355
|
+
if (!this.tokenManager.getSession()) {
|
|
356
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
357
|
+
}
|
|
358
|
+
const redirectTo = options.redirectTo ?? "http://localhost:3000/callback";
|
|
359
|
+
const url = `https://mock-auth.example.com/authorize?provider=${options.provider}&redirect_to=${encodeURIComponent(redirectTo)}&linking=true`;
|
|
360
|
+
return { url, provider: options.provider };
|
|
361
|
+
},
|
|
362
|
+
unlink: async (_options) => {
|
|
363
|
+
await delay(mockState.latency);
|
|
364
|
+
if (!this.tokenManager.getSession()) {
|
|
365
|
+
throw new AuthError("Not authenticated", "not_authenticated", 401);
|
|
366
|
+
}
|
|
367
|
+
// In real implementation, this would remove the identity
|
|
368
|
+
},
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
// ============================================
|
|
372
|
+
// Verification
|
|
373
|
+
// ============================================
|
|
374
|
+
/**
|
|
375
|
+
* Verification methods
|
|
376
|
+
*/
|
|
377
|
+
get verification() {
|
|
378
|
+
return {
|
|
379
|
+
verify: async (options) => {
|
|
380
|
+
await delay(mockState.latency);
|
|
381
|
+
const email = "email" in options && options.email
|
|
382
|
+
? options.email
|
|
383
|
+
: `${options.phone}@phone.local`;
|
|
384
|
+
const response = createTokenResponse({ email });
|
|
385
|
+
const session = normalizeSession(response);
|
|
386
|
+
this.tokenManager.setSession(session);
|
|
387
|
+
return session;
|
|
388
|
+
},
|
|
389
|
+
resend: async (_options) => {
|
|
390
|
+
await delay(mockState.latency);
|
|
391
|
+
},
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
get admin() {
|
|
395
|
+
return {
|
|
396
|
+
inviteUserByEmail: async (options) => {
|
|
397
|
+
await delay(mockState.latency);
|
|
398
|
+
const now = new Date().toISOString();
|
|
399
|
+
const user = normalizeUser({
|
|
400
|
+
id: `user-${Date.now()}`,
|
|
401
|
+
aud: "authenticated",
|
|
402
|
+
email: options.email,
|
|
403
|
+
created_at: now,
|
|
404
|
+
updated_at: now,
|
|
405
|
+
app_metadata: { provider: "email", providers: ["email"] },
|
|
406
|
+
user_metadata: options.data ?? {},
|
|
407
|
+
});
|
|
408
|
+
return {
|
|
409
|
+
...user,
|
|
410
|
+
invitedAt: now,
|
|
411
|
+
confirmationSentAt: now,
|
|
412
|
+
};
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=mock-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-auth.js","sourceRoot":"","sources":["../../src/auth/mock-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EACL,gBAAgB,EAChB,aAAa,GAwBd,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD,kCAAkC;IAC1B,eAAe,GAAa,EAAE,CAAC;IAEvC,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAE3B,oEAAoE;QACpE,sEAAsE;QACtE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,+CAA+C;IAC/C,0BAA0B;IAC1B,+CAA+C;IAE/C;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,WAAqC;QAErC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CACjB,SAAS,CAAC,WAAW,CAAC,GAAG,EACzB,SAAS,CAAC,WAAW,CAAC,UAAU,EAChC,SAAS,CAAC,WAAW,CAAC,IAAI,CAC3B,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CACjB,SAAS,CAAC,WAAW,CAAC,GAAG,EACzB,SAAS,CAAC,WAAW,CAAC,UAAU,EAChC,SAAS,CAAC,WAAW,CAAC,IAAI,CAC3B,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAyB;YACzC,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,6DAA6D;QAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,SAAsB,OAAO;QACzC,gDAAgD;QAChD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,aAAa,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IACnC,CAAC;IAED,+CAA+C;IAC/C,uBAAuB;IACvB,+CAA+C;IAE/C;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,OAA2B;QAE3B,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE/B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,gCAAgC,CAAC;QAC1E,MAAM,GAAG,GAAG,oDAAoD,OAAO,CAAC,QAAQ,gBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QAEjI,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE/B,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+CAA+C;IAC/C,4BAA4B;IAC5B,+CAA+C;IAE/C;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,QAA0B;QAClD,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,sDAAsD;QACtD,8BAA8B;IAChC,CAAC;IAED,+CAA+C;IAC/C,qBAAqB;IACrB,+CAA+C;IAE/C;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAA0B;QAC5C,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,oDAAoD;QACpD,8BAA8B;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAyB;QACvC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE/B,MAAM,KAAK,GACT,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK;YACjC,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,GAAI,OAA6B,CAAC,KAAK,cAAc,CAAC;QAC5D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+CAA+C;IAC/C,oBAAoB;IACpB,+CAA+C;IAE/C;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAA8B;QACxD,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,yCAAyC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAA+B;QAClD,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE/B,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,4CAA4C;QAC5C,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgC;QACnD,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,qBAAqB;IACrB,+CAA+C;IAE/C;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,6BAA6B;QAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,aAAa,CAAC,OAAO,EAAE,CAAC;QAExB,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CACjB,SAAS,CAAC,YAAY,CAAC,GAAG,EAC1B,SAAS,CAAC,YAAY,CAAC,UAAU,EACjC,SAAS,CAAC,YAAY,CAAC,IAAI,CAC5B,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,cAAc,EAAE,IAAI,CAAC,KAAK,IAAI,kBAAkB,CAAC;QAE/D,MAAM,QAAQ,GAAG,mBAAmB,CAAC;YACnC,KAAK;YACL,YAAY,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,EAAE;SAC1C,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+CAA+C;IAC/C,kBAAkB;IAClB,+CAA+C;IAE/C;;OAEG;IACH,IAAI,IAAI;QACN,OAAO;YACL,UAAU,EAAE,GAAgB,EAAE;gBAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;YAED,GAAG,EAAE,KAAK,IAAmB,EAAE;gBAC7B,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,OAAO,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,OAA0B,EAAoB,EAAE;gBAC7D,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,wCAAwC;gBACxC,MAAM,WAAW,GAAS;oBACxB,GAAG,OAAO,CAAC,IAAI;oBACf,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK;oBAC1C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK;oBAC1C,YAAY,EAAE;wBACZ,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY;wBAC5B,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;qBACxB;iBACF,CAAC;gBAEF,uCAAuC;gBACvC,MAAM,cAAc,GAAY;oBAC9B,GAAG,OAAO;oBACV,IAAI,EAAE,WAAW;iBAClB,CAAC;gBAEF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBAC7C,OAAO,cAAc,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,MAAM;IACN,+CAA+C;IAE/C;;OAEG;IACH,IAAI,GAAG;QACL,OAAO;YACL,MAAM,EAAE,KAAK,EACX,OAA4B,EACgC,EAAE;gBAC9D,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;oBACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAW;oBACrB,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM,EAAE,YAAY;oBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC;gBAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAElC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5B,OAAO;wBACL,EAAE,EAAE,QAAQ;wBACZ,OAAO,EAAE,2EAA2E;wBACpF,MAAM,EAAE,oCAAoC;qBAC7C,CAAC;gBACJ,CAAC;gBAED,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;YAC1B,CAAC;YAED,SAAS,EAAE,KAAK,EACd,OAA+B,EACa,EAAE;gBAC9C,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;oBACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CACjC,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBACnE,CAAC;gBAED,OAAO;oBACL,EAAE,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE;oBAC7B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY;iBAC7C,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,OAA4B,EAAoB,EAAE;gBAC/D,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CACjC,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBACnE,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;gBAE3B,wDAAwD;gBACxD,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,QAAQ,EAAE,KAAK,EAAE,QAAgB,EAAiB,EAAE;gBAClD,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;oBACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;gBACvE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBACnE,CAAC;gBAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YAED,WAAW,EAAE,KAAK,IAAuB,EAAE;gBACzC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;oBACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC;YAED,8BAA8B,EAAE,GAG9B,EAAE;gBACF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACjD,CAAC;gBAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAC/B,CAAC;gBAEF,OAAO;oBACL,YAAY,EAAE,MAAM;oBACpB,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;iBAC/C,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,sBAAsB;IACtB,+CAA+C;IAE/C;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO;YACL,IAAI,EAAE,KAAK,IAA6B,EAAE;gBACxC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YACvC,CAAC;YAED,IAAI,EAAE,KAAK,EACT,OAA4B,EACgB,EAAE;gBAC9C,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;oBACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,MAAM,UAAU,GACd,OAAO,CAAC,UAAU,IAAI,gCAAgC,CAAC;gBACzD,MAAM,GAAG,GAAG,oDAAoD,OAAO,CAAC,QAAQ,gBAAgB,kBAAkB,CAAC,UAAU,CAAC,eAAe,CAAC;gBAE9I,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7C,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,QAA+B,EAAiB,EAAE;gBAC/D,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;oBACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;gBAED,yDAAyD;YAC3D,CAAC;SACF,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,eAAe;IACf,+CAA+C;IAE/C;;OAEG;IACH,IAAI,YAAY;QACd,OAAO;YACL,MAAM,EAAE,KAAK,EAAE,OAAsB,EAAoB,EAAE;gBACzD,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,MAAM,KAAK,GACT,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK;oBACjC,CAAC,CAAC,OAAO,CAAC,KAAK;oBACf,CAAC,CAAC,GAAI,OAA6B,CAAC,KAAK,cAAc,CAAC;gBAC5D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,QAAmC,EAAiB,EAAE;gBACnE,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK;QACP,OAAO;YACL,iBAAiB,EAAE,KAAK,EACtB,OAA2B,EACL,EAAE;gBACxB,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,aAAa,CAAC;oBACzB,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;oBACxB,GAAG,EAAE,eAAe;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,GAAG;oBACf,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE;oBACzD,aAAa,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;iBAClC,CAAC,CAAC;gBAEH,OAAO;oBACL,GAAG,IAAI;oBACP,SAAS,EAAE,GAAG;oBACd,kBAAkB,EAAE,GAAG;iBACxB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
|