@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 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
  /**
@@ -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;AAwBlE,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;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;IAmFtE;;;OAGG;;IAGH;;OAEG;;IAKH;;OAEG;;IAKH;;;OAGG;mBACkB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAe3C;;;;;;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"}
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 { getCsrfToken, getCurrentUser, login as sdkLogin, logout as sdkLogout, } from './generated/sdk.gen.js';
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
- // Create the underlying heyapi client
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
- try {
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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
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
@@ -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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elasticpath/plasmic-backend-sdk",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "TypeScript SDK for Plasmic Admin API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",