@robelest/convex-auth 0.0.2-preview.0 → 0.0.2-preview.2
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/dist/bin.cjs +17 -15
- package/dist/client/index.d.ts +84 -30
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +259 -59
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/component.d.ts +46 -120
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/index.d.ts +2 -4
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/index.js +2 -4
- package/dist/component/index.js.map +1 -1
- package/dist/component/public.d.ts +233 -167
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +328 -155
- package/dist/component/public.js.map +1 -1
- package/dist/component/schema.d.ts +127 -12
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +136 -10
- package/dist/component/schema.js.map +1 -1
- package/dist/providers/{Anonymous.d.ts → anonymous.d.ts} +8 -8
- package/dist/providers/{Anonymous.d.ts.map → anonymous.d.ts.map} +1 -1
- package/dist/providers/{Anonymous.js → anonymous.js} +9 -10
- package/dist/providers/anonymous.js.map +1 -0
- package/dist/providers/{ConvexCredentials.d.ts → credentials.d.ts} +11 -11
- package/dist/providers/credentials.d.ts.map +1 -0
- package/dist/providers/{ConvexCredentials.js → credentials.js} +8 -8
- package/dist/providers/credentials.js.map +1 -0
- package/dist/providers/{Email.d.ts → email.d.ts} +6 -6
- package/dist/providers/email.d.ts.map +1 -0
- package/dist/providers/{Email.js → email.js} +6 -6
- package/dist/providers/email.js.map +1 -0
- package/dist/providers/{Password.d.ts → password.d.ts} +10 -10
- package/dist/providers/{Password.d.ts.map → password.d.ts.map} +1 -1
- package/dist/providers/{Password.js → password.js} +19 -20
- package/dist/providers/password.js.map +1 -0
- package/dist/providers/{Phone.d.ts → phone.d.ts} +3 -3
- package/dist/providers/{Phone.d.ts.map → phone.d.ts.map} +1 -1
- package/dist/providers/{Phone.js → phone.js} +3 -3
- package/dist/providers/{Phone.js.map → phone.js.map} +1 -1
- package/dist/server/implementation/db.d.ts +5 -2
- package/dist/server/implementation/db.d.ts.map +1 -1
- package/dist/server/implementation/db.js +2 -1
- package/dist/server/implementation/db.js.map +1 -1
- package/dist/server/implementation/index.d.ts +285 -180
- package/dist/server/implementation/index.d.ts.map +1 -1
- package/dist/server/implementation/index.js +280 -173
- package/dist/server/implementation/index.js.map +1 -1
- package/dist/server/implementation/mutations/createAccountFromCredentials.d.ts.map +1 -1
- package/dist/server/implementation/mutations/createAccountFromCredentials.js +8 -18
- package/dist/server/implementation/mutations/createAccountFromCredentials.js.map +1 -1
- package/dist/server/implementation/mutations/createVerificationCode.d.ts.map +1 -1
- package/dist/server/implementation/mutations/createVerificationCode.js +16 -44
- package/dist/server/implementation/mutations/createVerificationCode.js.map +1 -1
- package/dist/server/implementation/mutations/invalidateSessions.d.ts.map +1 -1
- package/dist/server/implementation/mutations/invalidateSessions.js +4 -8
- package/dist/server/implementation/mutations/invalidateSessions.js.map +1 -1
- package/dist/server/implementation/mutations/modifyAccount.d.ts.map +1 -1
- package/dist/server/implementation/mutations/modifyAccount.js +8 -19
- package/dist/server/implementation/mutations/modifyAccount.js.map +1 -1
- package/dist/server/implementation/mutations/refreshSession.d.ts.map +1 -1
- package/dist/server/implementation/mutations/refreshSession.js +9 -23
- package/dist/server/implementation/mutations/refreshSession.js.map +1 -1
- package/dist/server/implementation/mutations/retrieveAccountWithCredentials.d.ts.map +1 -1
- package/dist/server/implementation/mutations/retrieveAccountWithCredentials.js +6 -12
- package/dist/server/implementation/mutations/retrieveAccountWithCredentials.js.map +1 -1
- package/dist/server/implementation/mutations/signIn.d.ts.map +1 -1
- package/dist/server/implementation/mutations/signIn.js +2 -1
- package/dist/server/implementation/mutations/signIn.js.map +1 -1
- package/dist/server/implementation/mutations/signOut.d.ts.map +1 -1
- package/dist/server/implementation/mutations/signOut.js +5 -6
- package/dist/server/implementation/mutations/signOut.js.map +1 -1
- package/dist/server/implementation/mutations/storeRef.d.ts +8 -0
- package/dist/server/implementation/mutations/storeRef.d.ts.map +1 -0
- package/dist/server/implementation/mutations/storeRef.js +8 -0
- package/dist/server/implementation/mutations/storeRef.js.map +1 -0
- package/dist/server/implementation/mutations/userOAuth.d.ts.map +1 -1
- package/dist/server/implementation/mutations/userOAuth.js +16 -53
- package/dist/server/implementation/mutations/userOAuth.js.map +1 -1
- package/dist/server/implementation/mutations/verifier.d.ts.map +1 -1
- package/dist/server/implementation/mutations/verifier.js +4 -8
- package/dist/server/implementation/mutations/verifier.js.map +1 -1
- package/dist/server/implementation/mutations/verifierSignature.d.ts.map +1 -1
- package/dist/server/implementation/mutations/verifierSignature.js +6 -10
- package/dist/server/implementation/mutations/verifierSignature.js.map +1 -1
- package/dist/server/implementation/mutations/verifyCodeAndSignIn.d.ts.map +1 -1
- package/dist/server/implementation/mutations/verifyCodeAndSignIn.js +7 -16
- package/dist/server/implementation/mutations/verifyCodeAndSignIn.js.map +1 -1
- package/dist/server/implementation/provider.d.ts +2 -1
- package/dist/server/implementation/provider.d.ts.map +1 -1
- package/dist/server/implementation/provider.js.map +1 -1
- package/dist/server/implementation/rateLimit.d.ts.map +1 -1
- package/dist/server/implementation/rateLimit.js +13 -39
- package/dist/server/implementation/rateLimit.js.map +1 -1
- package/dist/server/implementation/refreshTokens.d.ts +1 -8
- package/dist/server/implementation/refreshTokens.d.ts.map +1 -1
- package/dist/server/implementation/refreshTokens.js +14 -58
- package/dist/server/implementation/refreshTokens.js.map +1 -1
- package/dist/server/implementation/sessions.d.ts +2 -20
- package/dist/server/implementation/sessions.d.ts.map +1 -1
- package/dist/server/implementation/sessions.js +8 -35
- package/dist/server/implementation/sessions.js.map +1 -1
- package/dist/server/implementation/types.d.ts +11 -267
- package/dist/server/implementation/types.d.ts.map +1 -1
- package/dist/server/implementation/types.js +1 -181
- package/dist/server/implementation/types.js.map +1 -1
- package/dist/server/implementation/users.d.ts.map +1 -1
- package/dist/server/implementation/users.js +19 -67
- package/dist/server/implementation/users.js.map +1 -1
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +255 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/provider_utils.d.ts +1 -1
- package/dist/server/provider_utils.d.ts.map +1 -1
- package/dist/server/provider_utils.js +2 -2
- package/dist/server/provider_utils.js.map +1 -1
- package/dist/server/types.d.ts +91 -52
- package/dist/server/types.d.ts.map +1 -1
- package/package.json +3 -6
- package/src/cli/index.ts +20 -19
- package/src/client/index.ts +347 -110
- package/src/component/_generated/component.ts +55 -214
- package/src/component/index.ts +1 -11
- package/src/component/public.ts +366 -178
- package/src/component/schema.ts +150 -19
- package/src/providers/{Anonymous.ts → anonymous.ts} +10 -11
- package/src/providers/{ConvexCredentials.ts → credentials.ts} +11 -11
- package/src/providers/{Email.ts → email.ts} +5 -5
- package/src/providers/{Password.ts → password.ts} +22 -27
- package/src/providers/{Phone.ts → phone.ts} +2 -2
- package/src/server/implementation/db.ts +5 -2
- package/src/server/implementation/index.ts +368 -313
- package/src/server/implementation/mutations/createAccountFromCredentials.ts +11 -25
- package/src/server/implementation/mutations/createVerificationCode.ts +16 -47
- package/src/server/implementation/mutations/invalidateSessions.ts +4 -9
- package/src/server/implementation/mutations/modifyAccount.ts +8 -22
- package/src/server/implementation/mutations/refreshSession.ts +11 -24
- package/src/server/implementation/mutations/retrieveAccountWithCredentials.ts +9 -17
- package/src/server/implementation/mutations/signIn.ts +2 -1
- package/src/server/implementation/mutations/signOut.ts +5 -8
- package/src/server/implementation/mutations/storeRef.ts +7 -0
- package/src/server/implementation/mutations/userOAuth.ts +10 -50
- package/src/server/implementation/mutations/verifier.ts +4 -9
- package/src/server/implementation/mutations/verifierSignature.ts +6 -12
- package/src/server/implementation/mutations/verifyCodeAndSignIn.ts +7 -18
- package/src/server/implementation/provider.ts +2 -1
- package/src/server/implementation/rateLimit.ts +15 -41
- package/src/server/implementation/refreshTokens.ts +26 -76
- package/src/server/implementation/sessions.ts +8 -39
- package/src/server/implementation/types.ts +16 -191
- package/src/server/implementation/users.ts +19 -66
- package/src/server/index.ts +373 -0
- package/src/server/provider_utils.ts +2 -2
- package/src/server/types.ts +116 -51
- package/dist/providers/Anonymous.js.map +0 -1
- package/dist/providers/ConvexCredentials.d.ts.map +0 -1
- package/dist/providers/ConvexCredentials.js.map +0 -1
- package/dist/providers/Email.d.ts.map +0 -1
- package/dist/providers/Email.js.map +0 -1
- package/dist/providers/Password.js.map +0 -1
- package/providers/Anonymous/package.json +0 -6
- package/providers/ConvexCredentials/package.json +0 -6
- package/providers/Email/package.json +0 -6
- package/providers/Password/package.json +0 -6
- package/providers/Phone/package.json +0 -6
- package/server/package.json +0 -6
package/dist/bin.cjs
CHANGED
|
@@ -27170,7 +27170,7 @@ new Command().name("@robelest/convex-auth").description(
|
|
|
27170
27170
|
await configureSiteUrl(config, options.siteUrl);
|
|
27171
27171
|
await configureKeys(config);
|
|
27172
27172
|
await modifyTsConfig(config);
|
|
27173
|
-
await
|
|
27173
|
+
await configureConvexConfig(config);
|
|
27174
27174
|
await initializeAuth(config);
|
|
27175
27175
|
await configureHttp(config);
|
|
27176
27176
|
if (options.variables !== void 0) {
|
|
@@ -27378,27 +27378,27 @@ function addCompilerOption(tsconfig, existingValue, pattern, optionAndValue) {
|
|
|
27378
27378
|
return tsconfig.replace(pattern, optionAndValue);
|
|
27379
27379
|
}
|
|
27380
27380
|
}
|
|
27381
|
-
async function
|
|
27382
|
-
logStep(config, "Configure
|
|
27383
|
-
const sourceTemplate = `
|
|
27384
|
-
|
|
27385
|
-
|
|
27386
|
-
|
|
27387
|
-
|
|
27388
|
-
|
|
27389
|
-
|
|
27390
|
-
|
|
27381
|
+
async function configureConvexConfig(config) {
|
|
27382
|
+
logStep(config, "Configure convex config file");
|
|
27383
|
+
const sourceTemplate = `import { defineApp } from "convex/server";
|
|
27384
|
+
import auth from "@robelest/convex-auth/component/convex.config";
|
|
27385
|
+
|
|
27386
|
+
const app = defineApp();
|
|
27387
|
+
|
|
27388
|
+
app.use(auth);
|
|
27389
|
+
|
|
27390
|
+
export default app;
|
|
27391
27391
|
`;
|
|
27392
27392
|
const source = templateToSource(sourceTemplate);
|
|
27393
|
-
const
|
|
27394
|
-
const existingConfigPath = await existingNonEmptySourcePath(
|
|
27393
|
+
const convexConfigPath = import_path.default.join(config.convexFolderPath, "convex.config");
|
|
27394
|
+
const existingConfigPath = await existingNonEmptySourcePath(convexConfigPath);
|
|
27395
27395
|
if (existingConfigPath !== null) {
|
|
27396
27396
|
const existingConfig = (0, import_fs2.readFileSync)(existingConfigPath, "utf8");
|
|
27397
27397
|
if (doesAlreadyMatchTemplate(existingConfig, sourceTemplate)) {
|
|
27398
27398
|
logSuccess(`The ${source_default.bold(existingConfigPath)} is already set up.`);
|
|
27399
27399
|
} else {
|
|
27400
27400
|
logInfo(
|
|
27401
|
-
`You already have a ${source_default.bold(existingConfigPath)}, make sure the
|
|
27401
|
+
`You already have a ${source_default.bold(existingConfigPath)}, make sure it registers the auth component like this:`
|
|
27402
27402
|
);
|
|
27403
27403
|
print(indent(`
|
|
27404
27404
|
${source}
|
|
@@ -27406,7 +27406,7 @@ ${source}
|
|
|
27406
27406
|
await promptForConfirmationOrExit("Ready to continue?");
|
|
27407
27407
|
}
|
|
27408
27408
|
} else {
|
|
27409
|
-
const newConfigPath = config.usesTypeScript ? `${
|
|
27409
|
+
const newConfigPath = config.usesTypeScript ? `${convexConfigPath}.ts` : `${convexConfigPath}.js`;
|
|
27410
27410
|
(0, import_fs2.writeFileSync)(newConfigPath, source);
|
|
27411
27411
|
logSuccess(`Created ${source_default.bold(newConfigPath)}`);
|
|
27412
27412
|
}
|
|
@@ -27414,8 +27414,10 @@ ${source}
|
|
|
27414
27414
|
async function initializeAuth(config) {
|
|
27415
27415
|
logStep(config, "Initialize auth file");
|
|
27416
27416
|
const sourceTemplate = `import { Auth } from "@robelest/convex-auth/component";
|
|
27417
|
+
import { components } from "./_generated/api";
|
|
27417
27418
|
|
|
27418
27419
|
export const { auth, signIn, signOut, store } = Auth({$$
|
|
27420
|
+
component: components.auth,$$
|
|
27419
27421
|
providers: [$$],$$
|
|
27420
27422
|
});
|
|
27421
27423
|
`;
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,49 +1,103 @@
|
|
|
1
|
-
import { FunctionReference, OptionalRestArgs } from "convex/server";
|
|
2
1
|
import { Value } from "convex/values";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Structural interface for any Convex client.
|
|
4
|
+
* Satisfied by both `ConvexClient` (`convex/browser`) and
|
|
5
|
+
* `ConvexReactClient` (`convex/react`).
|
|
6
|
+
*/
|
|
7
|
+
interface ConvexTransport {
|
|
8
|
+
action(action: any, args: any): Promise<any>;
|
|
9
|
+
setAuth(fetchToken: (args: {
|
|
10
|
+
forceRefreshToken: boolean;
|
|
11
|
+
}) => Promise<string | null | undefined>, onChange?: (isAuthenticated: boolean) => void): void;
|
|
12
|
+
clearAuth(): void;
|
|
13
|
+
}
|
|
14
|
+
/** Pluggable key-value storage (defaults to `localStorage`). */
|
|
15
|
+
export interface Storage {
|
|
12
16
|
getItem(key: string): string | null | undefined | Promise<string | null | undefined>;
|
|
13
17
|
setItem(key: string, value: string): void | Promise<void>;
|
|
14
18
|
removeItem(key: string): void | Promise<void>;
|
|
15
19
|
}
|
|
16
|
-
|
|
17
|
-
token: string;
|
|
18
|
-
refreshToken: string;
|
|
19
|
-
};
|
|
20
|
-
export type SignInResult = {
|
|
20
|
+
type SignInResult = {
|
|
21
21
|
signingIn: boolean;
|
|
22
22
|
redirect?: URL;
|
|
23
23
|
};
|
|
24
|
-
|
|
24
|
+
/** Reactive auth state snapshot returned by `auth.state` and `auth.onChange`. */
|
|
25
|
+
export type AuthState = {
|
|
25
26
|
isLoading: boolean;
|
|
26
27
|
isAuthenticated: boolean;
|
|
27
28
|
token: string | null;
|
|
28
29
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
/** Options for {@link client}. */
|
|
31
|
+
export type ClientOptions = {
|
|
32
|
+
/** Any Convex client (`ConvexClient` or `ConvexReactClient`). */
|
|
33
|
+
convex: ConvexTransport;
|
|
34
|
+
/**
|
|
35
|
+
* Convex deployment URL. Derived automatically from the client internals
|
|
36
|
+
* when omitted — pass explicitly only if auto-detection fails.
|
|
37
|
+
*/
|
|
38
|
+
url?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Key-value storage for persisting tokens.
|
|
41
|
+
*
|
|
42
|
+
* - Defaults to `localStorage` in SPA mode.
|
|
43
|
+
* - Defaults to `null` (in-memory only) when `proxy` is set,
|
|
44
|
+
* since httpOnly cookies handle persistence.
|
|
45
|
+
*/
|
|
46
|
+
storage?: Storage | null;
|
|
47
|
+
/** Override how the URL bar is updated after OAuth code exchange. */
|
|
33
48
|
replaceURL?: (relativeUrl: string) => void | Promise<void>;
|
|
34
|
-
|
|
35
|
-
|
|
49
|
+
/**
|
|
50
|
+
* SSR proxy endpoint (e.g. `"/api/auth"`).
|
|
51
|
+
*
|
|
52
|
+
* When set, `signIn`/`signOut`/token refresh POST to this URL
|
|
53
|
+
* (with `credentials: "include"`) instead of calling Convex directly.
|
|
54
|
+
* The server handles httpOnly cookies for token persistence.
|
|
55
|
+
*
|
|
56
|
+
* Pair with {@link ClientOptions.token} for flash-free SSR hydration.
|
|
57
|
+
*/
|
|
58
|
+
proxy?: string;
|
|
59
|
+
/**
|
|
60
|
+
* JWT from server-side hydration.
|
|
61
|
+
*
|
|
62
|
+
* In proxy mode the server reads the JWT from an httpOnly cookie
|
|
63
|
+
* and passes it to the client during SSR. This avoids a loading
|
|
64
|
+
* flash on first render — the client is immediately authenticated.
|
|
65
|
+
*/
|
|
66
|
+
token?: string | null;
|
|
36
67
|
};
|
|
37
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Create a framework-agnostic auth client.
|
|
70
|
+
*
|
|
71
|
+
* ### SPA mode (default)
|
|
72
|
+
*
|
|
73
|
+
* ```ts
|
|
74
|
+
* import { ConvexClient } from 'convex/browser'
|
|
75
|
+
* import { client } from '\@robelest/convex-auth/client'
|
|
76
|
+
*
|
|
77
|
+
* const convex = new ConvexClient(CONVEX_URL)
|
|
78
|
+
* const auth = client({ convex })
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* ### SSR / proxy mode
|
|
82
|
+
*
|
|
83
|
+
* ```ts
|
|
84
|
+
* const auth = client({
|
|
85
|
+
* convex,
|
|
86
|
+
* proxy: '/api/auth',
|
|
87
|
+
* initialToken: tokenFromServer, // read from httpOnly cookie during SSR
|
|
88
|
+
* })
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* In proxy mode all auth operations go through the proxy URL.
|
|
92
|
+
* Tokens are stored in httpOnly cookies server-side — the client
|
|
93
|
+
* only holds the JWT in memory.
|
|
94
|
+
*/
|
|
95
|
+
export declare function client(options: ClientOptions): {
|
|
96
|
+
/** Current auth state snapshot. */
|
|
97
|
+
readonly state: AuthState;
|
|
38
98
|
signIn: (provider?: string, args?: FormData | Record<string, Value>) => Promise<SignInResult>;
|
|
39
99
|
signOut: () => Promise<void>;
|
|
40
|
-
|
|
41
|
-
forceRefreshToken: boolean;
|
|
42
|
-
}) => Promise<string | null>;
|
|
43
|
-
handleCodeFlow: () => Promise<void>;
|
|
44
|
-
hydrateFromStorage: () => Promise<void>;
|
|
45
|
-
getSnapshot: () => AuthSnapshot;
|
|
46
|
-
subscribe: (cb: () => void) => () => boolean;
|
|
100
|
+
onChange: (cb: (state: AuthState) => void) => (() => void);
|
|
47
101
|
};
|
|
48
102
|
export {};
|
|
49
103
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;GAIG;AACH,UAAU,eAAe;IACvB,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,CACL,UAAU,EAAE,CAAC,IAAI,EAAE;QACjB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EACxC,QAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,GAC5C,IAAI,CAAC;IACR,SAAS,IAAI,IAAI,CAAC;CACnB;AAED,gEAAgE;AAChE,MAAM,WAAW,OAAO;IACtB,OAAO,CACL,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAOD,KAAK,YAAY,GAAG;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,aAAa,GAAG;IAC1B,iEAAiE;IACjE,MAAM,EAAE,eAAe,CAAC;IACxB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,qEAAqE;IACrE,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAyBF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa;IAoazC,mCAAmC;oBACtB,SAAS;wBAlPX,MAAM,SACV,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KACtC,OAAO,CAAC,YAAY,CAAC;;mBA4LF,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC;EA2DhE"}
|