@elasticpath/plasmic-backend-sdk 0.0.3 → 0.0.4
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/client.d.ts +17 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +35 -17
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/session-fetch.d.ts +47 -0
- package/dist/session-fetch.d.ts.map +1 -0
- package/dist/session-fetch.js +75 -0
- package/dist/session-fetch.js.map +1 -0
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -19,6 +19,22 @@ export interface PlasmicClientOptions {
|
|
|
19
19
|
baseUrl: string;
|
|
20
20
|
/** Optional: throw on HTTP errors (default: true) */
|
|
21
21
|
throwOnError?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Optional: Callback invoked when a 401 Unauthorized response is received.
|
|
24
|
+
* Use this to re-provision the session (e.g., call your backend's provision endpoint).
|
|
25
|
+
* After this callback completes, the request will be retried once.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const plasmic = createPlasmicClient({
|
|
30
|
+
* baseUrl: 'https://studio.plasmic.app',
|
|
31
|
+
* onSessionExpired: async () => {
|
|
32
|
+
* await provisionCmsAccess({ storeId, organizationId })
|
|
33
|
+
* }
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
onSessionExpired?: () => Promise<void>;
|
|
22
38
|
}
|
|
23
39
|
export interface AuthenticateOptions {
|
|
24
40
|
email: string;
|
|
@@ -49,7 +65,7 @@ export declare function createPlasmicClient(options: PlasmicClientOptions | stri
|
|
|
49
65
|
getCsrfToken(): string | null;
|
|
50
66
|
/**
|
|
51
67
|
* Fetch a fresh CSRF token from the server.
|
|
52
|
-
* Called automatically during authenticate().
|
|
68
|
+
* Called automatically during authenticate() and on CSRF errors.
|
|
53
69
|
*/
|
|
54
70
|
refreshCsrf(): Promise<string | null>;
|
|
55
71
|
/**
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA0BlE,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM;IAiHtE;;;OAGG;;IAGH;;OAEG;;IAKH;;OAEG;;IAKH;;;OAGG;mBACkB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI3C;;;;;;OAMG;iCAEe,MAAM,GAAG,mBAAmB,aACjC,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAmChB;;OAEG;eACc,OAAO,CAAC,IAAI,CAAC;IAU9B;;OAEG;oBACmB,OAAO,CAAC,OAAO,CAAC;IAkBtC;;;OAGG;uBACgB,OAAO,GAAG,OAAO;IAkBpC;;;;;;;;;;;;;;OAcG;kBACiB,CAAC,MACf,MAAM,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,GAC/C,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;EAa5C;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEnE;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/client.js
CHANGED
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { createClient } from '@hey-api/client-fetch';
|
|
17
17
|
// Import generated SDK functions
|
|
18
|
-
import {
|
|
18
|
+
import { getCurrentUser, login as sdkLogin, logout as sdkLogout, } from './generated/sdk.gen.js';
|
|
19
|
+
import { makeSessionFetch } from './session-fetch.js';
|
|
19
20
|
/**
|
|
20
21
|
* Admin routes that are exempt from CSRF token requirement.
|
|
21
22
|
* These routes are listed in csrfFreeStaticRoutes in the Plasmic backend.
|
|
@@ -40,15 +41,44 @@ const CSRF_EXEMPT_PATHS = [
|
|
|
40
41
|
*/
|
|
41
42
|
export function createPlasmicClient(options) {
|
|
42
43
|
const config = typeof options === 'string' ? { baseUrl: options } : options;
|
|
43
|
-
const { baseUrl, throwOnError = true } = config;
|
|
44
|
+
const { baseUrl, throwOnError = true, onSessionExpired } = config;
|
|
44
45
|
// Internal state
|
|
45
46
|
let csrfToken = null;
|
|
46
47
|
let isAuthenticated = false;
|
|
47
|
-
//
|
|
48
|
+
// Internal function to refresh CSRF token (used by fetch wrapper)
|
|
49
|
+
// This is defined early so it can be passed to makeSessionFetch
|
|
50
|
+
const refreshCsrfInternal = async () => {
|
|
51
|
+
try {
|
|
52
|
+
// Make a direct fetch call to avoid circular dependency with client
|
|
53
|
+
const response = await fetch(`${baseUrl.replace(/\/$/, '')}/api/v1/auth/csrf`, {
|
|
54
|
+
credentials: 'include',
|
|
55
|
+
});
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
console.error('Failed to fetch CSRF token:', response.status);
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const data = await response.json();
|
|
61
|
+
csrfToken = data?.csrf ?? null;
|
|
62
|
+
return csrfToken;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.error('Failed to fetch CSRF token:', err);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
// Create wrapped fetch with session and CSRF retry
|
|
70
|
+
const wrappedFetch = makeSessionFetch(globalThis.fetch, {
|
|
71
|
+
onSessionExpired,
|
|
72
|
+
onCsrfError: async () => {
|
|
73
|
+
await refreshCsrfInternal();
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
// Create the underlying heyapi client with wrapped fetch
|
|
48
77
|
const client = createClient({
|
|
49
78
|
baseUrl: `${baseUrl.replace(/\/$/, '')}/api/v1`,
|
|
50
79
|
credentials: 'include', // Send cookies with every request
|
|
51
80
|
throwOnError,
|
|
81
|
+
fetch: wrappedFetch,
|
|
52
82
|
});
|
|
53
83
|
/**
|
|
54
84
|
* Request interceptor: JSON-encode query params for GET/DELETE requests.
|
|
@@ -129,22 +159,10 @@ export function createPlasmicClient(options) {
|
|
|
129
159
|
},
|
|
130
160
|
/**
|
|
131
161
|
* Fetch a fresh CSRF token from the server.
|
|
132
|
-
* Called automatically during authenticate().
|
|
162
|
+
* Called automatically during authenticate() and on CSRF errors.
|
|
133
163
|
*/
|
|
134
164
|
async refreshCsrf() {
|
|
135
|
-
|
|
136
|
-
const { data, error } = await getCsrfToken({ client });
|
|
137
|
-
if (error) {
|
|
138
|
-
console.error('Failed to fetch CSRF token:', error);
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
csrfToken = data?.csrf ?? null;
|
|
142
|
-
return csrfToken;
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
console.error('Failed to fetch CSRF token:', err);
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
165
|
+
return refreshCsrfInternal();
|
|
148
166
|
},
|
|
149
167
|
/**
|
|
150
168
|
* Authenticate with email and password.
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAe,MAAM,uBAAuB,CAAC;AAElE,iCAAiC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
* TypeScript SDK for Plasmic Admin API with automatic authentication handling.
|
|
5
5
|
*/
|
|
6
6
|
export { createPlasmicClient, type PlasmicClient, type PlasmicClientOptions, type AuthenticateOptions, type Client, } from './client.js';
|
|
7
|
+
export { makeSessionFetch, type SessionFetchOptions, } from './session-fetch.js';
|
|
7
8
|
export * from './generated/index.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,MAAM,GACZ,MAAM,aAAa,CAAC;AAGrB,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,MAAM,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// Re-export the auth client
|
|
7
7
|
export { createPlasmicClient, } from './client.js';
|
|
8
|
+
// Re-export session fetch utilities for advanced usage
|
|
9
|
+
export { makeSessionFetch, } from './session-fetch.js';
|
|
8
10
|
// Re-export all generated SDK functions and types
|
|
9
11
|
export * from './generated/index.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4BAA4B;AAC5B,OAAO,EACL,mBAAmB,GAKpB,MAAM,aAAa,CAAC;AAErB,kDAAkD;AAClD,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4BAA4B;AAC5B,OAAO,EACL,mBAAmB,GAKpB,MAAM,aAAa,CAAC;AAErB,uDAAuD;AACvD,OAAO,EACL,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;AAE5B,kDAAkD;AAClD,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-aware fetch wrapper for Plasmic API.
|
|
3
|
+
*
|
|
4
|
+
* Provides transparent retry logic for session expiration (401) and CSRF errors (403).
|
|
5
|
+
* Following the same pattern as the shopper SDK's makeAuthFetch.
|
|
6
|
+
*/
|
|
7
|
+
export interface SessionFetchOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Callback invoked when a 401 Unauthorized response is received.
|
|
10
|
+
* Use this to re-provision the session before retry.
|
|
11
|
+
*/
|
|
12
|
+
onSessionExpired?: () => Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Callback invoked when a CSRF error (403 with CSRF message) is received.
|
|
15
|
+
* Use this to refresh the CSRF token before retry.
|
|
16
|
+
*/
|
|
17
|
+
onCsrfError?: () => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a fetch wrapper with automatic session and CSRF retry.
|
|
21
|
+
*
|
|
22
|
+
* When a 401 is received:
|
|
23
|
+
* 1. Calls onSessionExpired callback (if provided)
|
|
24
|
+
* 2. Retries the request once
|
|
25
|
+
*
|
|
26
|
+
* When a CSRF error (403) is received:
|
|
27
|
+
* 1. Calls onCsrfError callback (if provided)
|
|
28
|
+
* 2. Retries the request once
|
|
29
|
+
*
|
|
30
|
+
* @param baseFetch - The underlying fetch function to wrap
|
|
31
|
+
* @param options - Callbacks for handling session and CSRF errors
|
|
32
|
+
* @returns A wrapped fetch function with retry logic
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const wrappedFetch = makeSessionFetch(globalThis.fetch, {
|
|
37
|
+
* onSessionExpired: async () => {
|
|
38
|
+
* await provisionCmsAccess({ storeId })
|
|
39
|
+
* },
|
|
40
|
+
* onCsrfError: async () => {
|
|
41
|
+
* await refreshCsrfToken()
|
|
42
|
+
* }
|
|
43
|
+
* })
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function makeSessionFetch(baseFetch: typeof fetch, options?: SessionFetchOptions): typeof fetch;
|
|
47
|
+
//# sourceMappingURL=session-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-fetch.d.ts","sourceRoot":"","sources":["../src/session-fetch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,OAAO,KAAK,EACvB,OAAO,GAAE,mBAAwB,GAChC,OAAO,KAAK,CA6Bd"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-aware fetch wrapper for Plasmic API.
|
|
3
|
+
*
|
|
4
|
+
* Provides transparent retry logic for session expiration (401) and CSRF errors (403).
|
|
5
|
+
* Following the same pattern as the shopper SDK's makeAuthFetch.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if a response body indicates a CSRF error.
|
|
9
|
+
*/
|
|
10
|
+
async function isCsrfErrorResponse(response) {
|
|
11
|
+
if (response.status !== 403) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const body = await response.clone().text();
|
|
16
|
+
return (body.includes('CSRF token missing') ||
|
|
17
|
+
body.includes('CSRF token mismatch'));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates a fetch wrapper with automatic session and CSRF retry.
|
|
25
|
+
*
|
|
26
|
+
* When a 401 is received:
|
|
27
|
+
* 1. Calls onSessionExpired callback (if provided)
|
|
28
|
+
* 2. Retries the request once
|
|
29
|
+
*
|
|
30
|
+
* When a CSRF error (403) is received:
|
|
31
|
+
* 1. Calls onCsrfError callback (if provided)
|
|
32
|
+
* 2. Retries the request once
|
|
33
|
+
*
|
|
34
|
+
* @param baseFetch - The underlying fetch function to wrap
|
|
35
|
+
* @param options - Callbacks for handling session and CSRF errors
|
|
36
|
+
* @returns A wrapped fetch function with retry logic
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const wrappedFetch = makeSessionFetch(globalThis.fetch, {
|
|
41
|
+
* onSessionExpired: async () => {
|
|
42
|
+
* await provisionCmsAccess({ storeId })
|
|
43
|
+
* },
|
|
44
|
+
* onCsrfError: async () => {
|
|
45
|
+
* await refreshCsrfToken()
|
|
46
|
+
* }
|
|
47
|
+
* })
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export function makeSessionFetch(baseFetch, options = {}) {
|
|
51
|
+
const { onSessionExpired, onCsrfError } = options;
|
|
52
|
+
return async (input, init) => {
|
|
53
|
+
// Create a Request object so we can clone it for retry
|
|
54
|
+
const request = new Request(input, init);
|
|
55
|
+
// Make the initial request
|
|
56
|
+
let response = await baseFetch(request.clone());
|
|
57
|
+
// Handle 401 - session expired
|
|
58
|
+
if (response.status === 401 && onSessionExpired) {
|
|
59
|
+
await onSessionExpired();
|
|
60
|
+
// Retry once after re-provisioning
|
|
61
|
+
response = await baseFetch(request.clone());
|
|
62
|
+
}
|
|
63
|
+
// Handle CSRF error (403 with specific message)
|
|
64
|
+
if (response.status === 403 && onCsrfError) {
|
|
65
|
+
const isCsrf = await isCsrfErrorResponse(response);
|
|
66
|
+
if (isCsrf) {
|
|
67
|
+
await onCsrfError();
|
|
68
|
+
// Retry once after refreshing CSRF token
|
|
69
|
+
response = await baseFetch(request.clone());
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return response;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=session-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-fetch.js","sourceRoot":"","sources":["../src/session-fetch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,QAAkB;IACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3C,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACrC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAuB,EACvB,UAA+B,EAAE;IAEjC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAElD,OAAO,KAAK,EAAE,KAAwB,EAAE,IAAkB,EAAqB,EAAE;QAC/E,uDAAuD;QACvD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,IAAI,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAEhD,+BAA+B;QAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAChD,MAAM,gBAAgB,EAAE,CAAC;YACzB,mCAAmC;YACnC,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,gDAAgD;QAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,WAAW,EAAE,CAAC;gBACpB,yCAAyC;gBACzC,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"}
|