@shopsbuilder/auth-sdk 1.1.0

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.
Files changed (84) hide show
  1. package/README.md +469 -0
  2. package/dist/README.md +469 -0
  3. package/dist/SaleorAccessTokenStorageHandler.d.mts +13 -0
  4. package/dist/SaleorAccessTokenStorageHandler.d.ts +13 -0
  5. package/dist/SaleorAccessTokenStorageHandler.js +50 -0
  6. package/dist/SaleorAccessTokenStorageHandler.mjs +8 -0
  7. package/dist/SaleorAuthClient.d.mts +52 -0
  8. package/dist/SaleorAuthClient.d.ts +52 -0
  9. package/dist/SaleorAuthClient.js +464 -0
  10. package/dist/SaleorAuthClient.mjs +13 -0
  11. package/dist/SaleorExternalAuth.d.mts +29 -0
  12. package/dist/SaleorExternalAuth.d.ts +29 -0
  13. package/dist/SaleorExternalAuth.js +198 -0
  14. package/dist/SaleorExternalAuth.mjs +12 -0
  15. package/dist/SaleorRefreshTokenStorageHandler.d.mts +24 -0
  16. package/dist/SaleorRefreshTokenStorageHandler.d.ts +24 -0
  17. package/dist/SaleorRefreshTokenStorageHandler.js +83 -0
  18. package/dist/SaleorRefreshTokenStorageHandler.mjs +12 -0
  19. package/dist/chunk-263DHBMK.mjs +56 -0
  20. package/dist/chunk-74GMXOK4.mjs +13 -0
  21. package/dist/chunk-77CRMKFX.mjs +12 -0
  22. package/dist/chunk-7JTFMRQS.mjs +105 -0
  23. package/dist/chunk-BRRF6LN3.mjs +224 -0
  24. package/dist/chunk-BZFBMGPG.mjs +25 -0
  25. package/dist/chunk-K5MTKW5C.mjs +16 -0
  26. package/dist/chunk-KLIEZ4V4.mjs +10 -0
  27. package/dist/chunk-NAQNA6DI.mjs +20 -0
  28. package/dist/chunk-Q3UFWDCC.mjs +38 -0
  29. package/dist/chunk-T35JF4IS.mjs +59 -0
  30. package/dist/chunk-UDLCOX6B.mjs +49 -0
  31. package/dist/chunk-WJVMUY3P.mjs +33 -0
  32. package/dist/graphql.d.mts +11 -0
  33. package/dist/graphql.d.ts +11 -0
  34. package/dist/graphql.js +40 -0
  35. package/dist/graphql.mjs +6 -0
  36. package/dist/index.d.mts +5 -0
  37. package/dist/index.d.ts +5 -0
  38. package/dist/index.js +524 -0
  39. package/dist/index.mjs +23 -0
  40. package/dist/mutations.d.mts +12 -0
  41. package/dist/mutations.d.ts +12 -0
  42. package/dist/mutations.js +145 -0
  43. package/dist/mutations.mjs +17 -0
  44. package/dist/next/handler.d.mts +9 -0
  45. package/dist/next/handler.d.ts +9 -0
  46. package/dist/next/handler.js +36 -0
  47. package/dist/next/handler.mjs +11 -0
  48. package/dist/next/index.d.mts +6 -0
  49. package/dist/next/index.d.ts +6 -0
  50. package/dist/next/index.js +38 -0
  51. package/dist/next/index.mjs +11 -0
  52. package/dist/next/server.d.mts +20 -0
  53. package/dist/next/server.d.ts +20 -0
  54. package/dist/next/server.js +79 -0
  55. package/dist/next/server.mjs +53 -0
  56. package/dist/react/SaleorAuthProvider.d.mts +10 -0
  57. package/dist/react/SaleorAuthProvider.d.ts +10 -0
  58. package/dist/react/SaleorAuthProvider.js +50 -0
  59. package/dist/react/SaleorAuthProvider.mjs +13 -0
  60. package/dist/react/context.d.mts +9 -0
  61. package/dist/react/context.d.ts +9 -0
  62. package/dist/react/context.js +46 -0
  63. package/dist/react/context.mjs +16 -0
  64. package/dist/react/index.d.mts +8 -0
  65. package/dist/react/index.d.ts +8 -0
  66. package/dist/react/index.js +291 -0
  67. package/dist/react/index.mjs +30 -0
  68. package/dist/react/useAuthChange.d.mts +8 -0
  69. package/dist/react/useAuthChange.d.ts +8 -0
  70. package/dist/react/useAuthChange.js +58 -0
  71. package/dist/react/useAuthChange.mjs +7 -0
  72. package/dist/react/useSaleorExternalAuth.d.mts +22 -0
  73. package/dist/react/useSaleorExternalAuth.d.ts +22 -0
  74. package/dist/react/useSaleorExternalAuth.js +227 -0
  75. package/dist/react/useSaleorExternalAuth.mjs +11 -0
  76. package/dist/types.d.mts +82 -0
  77. package/dist/types.d.ts +82 -0
  78. package/dist/types.js +34 -0
  79. package/dist/types.mjs +6 -0
  80. package/dist/utils.d.mts +28 -0
  81. package/dist/utils.d.ts +28 -0
  82. package/dist/utils.js +77 -0
  83. package/dist/utils.mjs +15 -0
  84. package/package.json +129 -0
package/dist/index.js ADDED
@@ -0,0 +1,524 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ ExternalProvider: () => ExternalProvider,
34
+ GraphQLError: () => GraphQLError,
35
+ SaleorAuthClient: () => SaleorAuthClient,
36
+ SaleorExternalAuth: () => SaleorExternalAuth,
37
+ createSaleorAuthClient: () => createSaleorAuthClient
38
+ });
39
+ module.exports = __toCommonJS(src_exports);
40
+
41
+ // src/SaleorRefreshTokenStorageHandler.ts
42
+ var getStorageAuthEventKey = (prefix) => [prefix, "saleor_storage_auth_change"].filter(Boolean).join("+");
43
+ var getStorageAuthStateKey = (prefix) => [prefix, "saleor_auth_module_auth_state"].filter(Boolean).join("+");
44
+ var getRefreshTokenKey = (prefix) => [prefix, "saleor_auth_module_refresh_token"].filter(Boolean).join("+");
45
+ var SaleorRefreshTokenStorageHandler = class {
46
+ constructor(storage, prefix) {
47
+ this.storage = storage;
48
+ this.prefix = prefix;
49
+ if (typeof window !== "undefined") {
50
+ window.addEventListener("storage", this.handleStorageChange);
51
+ }
52
+ }
53
+ handleStorageChange = (event) => {
54
+ const { oldValue, newValue, type, key } = event;
55
+ if (oldValue === newValue || type !== "storage" || key !== getStorageAuthStateKey(this.prefix)) {
56
+ return;
57
+ }
58
+ this.sendAuthStateEvent(newValue);
59
+ };
60
+ cleanup = () => {
61
+ if (typeof window !== "undefined") {
62
+ window.removeEventListener("storage", this.handleStorageChange);
63
+ }
64
+ };
65
+ /* auth state */
66
+ sendAuthStateEvent = (authState) => {
67
+ if (typeof window !== "undefined") {
68
+ const event = new CustomEvent(getStorageAuthEventKey(this.prefix), {
69
+ detail: { authState }
70
+ });
71
+ window.dispatchEvent(event);
72
+ }
73
+ };
74
+ getAuthState = () => this.storage.getItem(getStorageAuthStateKey(this.prefix)) || "signedOut";
75
+ setAuthState = (authState) => {
76
+ this.storage.setItem(getStorageAuthStateKey(this.prefix), authState);
77
+ this.sendAuthStateEvent(authState);
78
+ };
79
+ /* refresh token */
80
+ getRefreshToken = () => this.storage.getItem(getRefreshTokenKey(this.prefix)) || null;
81
+ setRefreshToken = (token) => {
82
+ this.storage.setItem(getRefreshTokenKey(this.prefix), token);
83
+ };
84
+ /* performed on logout */
85
+ clearAuthStorage = () => {
86
+ this.setAuthState("signedOut");
87
+ this.storage.removeItem(getRefreshTokenKey(this.prefix));
88
+ };
89
+ };
90
+
91
+ // src/graphql.ts
92
+ var TypedDocumentString = class extends String {
93
+ constructor(value, __meta__) {
94
+ super(value);
95
+ this.value = value;
96
+ this.__meta__ = __meta__;
97
+ }
98
+ __apiType;
99
+ toString() {
100
+ return this.value;
101
+ }
102
+ };
103
+
104
+ // src/utils.ts
105
+ var MILLI_MULTIPLYER = 1e3;
106
+ var decodeToken = (token) => {
107
+ const tokenParts = token.split(".");
108
+ const decodedTokenData = Buffer.from(tokenParts[1] || "", "base64").toString();
109
+ const parsedTokenData = JSON.parse(decodedTokenData);
110
+ return parsedTokenData;
111
+ };
112
+ var getTokenExpiry = (token) => {
113
+ const parsedTokenData = decodeToken(token);
114
+ return parsedTokenData.exp * MILLI_MULTIPLYER || 0;
115
+ };
116
+ var getTokenIss = (token) => {
117
+ const parsedTokenData = decodeToken(token);
118
+ return parsedTokenData.iss;
119
+ };
120
+ var isExpiredToken = (token, tokenGracePeriod) => {
121
+ return getTokenExpiry(token) - tokenGracePeriod <= Date.now();
122
+ };
123
+ var getRequestData = (query, variables, requestInit) => ({
124
+ ...requestInit,
125
+ method: "POST",
126
+ headers: {
127
+ ...Object.fromEntries(new Headers(requestInit?.headers).entries()),
128
+ "Content-Type": "application/json"
129
+ },
130
+ body: JSON.stringify({
131
+ query,
132
+ variables
133
+ })
134
+ });
135
+ var InvariantError = class extends Error {
136
+ constructor(message) {
137
+ super(message);
138
+ }
139
+ };
140
+ function invariant(condition, message) {
141
+ if (!condition) {
142
+ throw new InvariantError(`Invariant Violation: ${message || ""}`);
143
+ }
144
+ }
145
+
146
+ // src/mutations.ts
147
+ var accountErrorFragment = (
148
+ /* graphql */
149
+ `
150
+ fragment AccountErrorFragment on AccountError {
151
+ code
152
+ field
153
+ message
154
+ }
155
+ `
156
+ );
157
+ var TOKEN_REFRESH = new TypedDocumentString(
158
+ /* graphql */
159
+ `
160
+ ${accountErrorFragment}
161
+ mutation refreshToken($refreshToken: String!) {
162
+ tokenRefresh(refreshToken: $refreshToken) {
163
+ token
164
+ errors {
165
+ ...AccountErrorFragment
166
+ }
167
+ }
168
+ }
169
+ `
170
+ );
171
+ var TOKEN_CREATE = new TypedDocumentString(
172
+ /* graphql */
173
+ `
174
+ mutation tokenCreate($email: String!, $password: String!) {
175
+ tokenCreate(email: $email, password: $password) {
176
+ token
177
+ refreshToken
178
+ errors {
179
+ message
180
+ field
181
+ code
182
+ }
183
+ }
184
+ }
185
+ `
186
+ );
187
+ var PASSWORD_RESET = new TypedDocumentString(
188
+ /* graphql */
189
+ `
190
+ mutation passwordReset($email: String!, $password: String!, $token: String!) {
191
+ setPassword(email: $email, password: $password, token: $token) {
192
+ token
193
+ refreshToken
194
+ errors {
195
+ message
196
+ field
197
+ code
198
+ }
199
+ }
200
+ }
201
+ `
202
+ );
203
+ var ExternalAuthenticationURL = new TypedDocumentString(
204
+ /* graphql */
205
+ `
206
+ mutation externalAuthenticationUrl($pluginId: String!, $input: JSONString!) {
207
+ externalAuthenticationUrl(pluginId: $pluginId, input: $input) {
208
+ authenticationData
209
+ errors {
210
+ code
211
+ field
212
+ message
213
+ }
214
+ }
215
+ }
216
+ `
217
+ );
218
+ var ExternalObtainAccessTokens = new TypedDocumentString(
219
+ /* graphql */
220
+ `
221
+ mutation AuthObtainAccessToken($pluginId: String!, $input: JSONString!) {
222
+ externalObtainAccessTokens(pluginId: $pluginId, input: $input) {
223
+ token
224
+ refreshToken
225
+ user {
226
+ id
227
+ email
228
+ }
229
+ errors {
230
+ field
231
+ code
232
+ message
233
+ }
234
+ }
235
+ }
236
+ `
237
+ );
238
+
239
+ // src/SaleorAuthClient.ts
240
+ var import_cookie = __toESM(require("cookie"));
241
+
242
+ // src/SaleorAccessTokenStorageHandler.ts
243
+ var getAccessTokenKey = (prefix) => [prefix, "saleor_auth_access_token"].filter(Boolean).join("+");
244
+ var SaleorAccessTokenStorageHandler = class {
245
+ constructor(storage, prefix) {
246
+ this.storage = storage;
247
+ this.prefix = prefix;
248
+ }
249
+ getAccessToken = () => {
250
+ const key = getAccessTokenKey(this.prefix);
251
+ return this.storage.getItem(key);
252
+ };
253
+ setAccessToken = (token) => {
254
+ const key = getAccessTokenKey(this.prefix);
255
+ return this.storage.setItem(key, token);
256
+ };
257
+ clearAuthStorage = () => {
258
+ const key = getAccessTokenKey(this.prefix);
259
+ return this.storage.removeItem(key);
260
+ };
261
+ };
262
+
263
+ // src/SaleorAuthClient.ts
264
+ var SaleorAuthClient = class {
265
+ // we'll assume a generous time of 2 seconds for api to
266
+ // process our request
267
+ tokenGracePeriod = 2e3;
268
+ tokenRefreshPromise = null;
269
+ onAuthRefresh;
270
+ saleorApiUrl;
271
+ /**
272
+ * Persistent storage (for refresh token)
273
+ */
274
+ refreshTokenStorage;
275
+ /**
276
+ * Non-persistent storage for access token
277
+ */
278
+ accessTokenStorage;
279
+ defaultRequestInit;
280
+ /**
281
+ * Use ths method to clear event listeners from storageHandler
282
+ * @example
283
+ * ```jsx
284
+ * useEffect(() => {
285
+ * return () => {
286
+ * SaleorAuthClient.cleanup();
287
+ * }
288
+ * }, [])
289
+ * ```
290
+ */
291
+ constructor({
292
+ saleorApiUrl,
293
+ refreshTokenStorage,
294
+ accessTokenStorage,
295
+ onAuthRefresh,
296
+ tokenGracePeriod,
297
+ defaultRequestInit
298
+ }) {
299
+ this.defaultRequestInit = defaultRequestInit;
300
+ if (tokenGracePeriod) {
301
+ this.tokenGracePeriod = tokenGracePeriod;
302
+ }
303
+ this.onAuthRefresh = onAuthRefresh;
304
+ this.saleorApiUrl = saleorApiUrl;
305
+ const refreshTokenRepo = refreshTokenStorage ?? (typeof window !== "undefined" ? window.localStorage : void 0);
306
+ this.refreshTokenStorage = refreshTokenRepo ? new SaleorRefreshTokenStorageHandler(refreshTokenRepo, saleorApiUrl) : null;
307
+ const accessTokenRepo = accessTokenStorage ?? getInMemoryAccessTokenStorage();
308
+ this.accessTokenStorage = new SaleorAccessTokenStorageHandler(accessTokenRepo, saleorApiUrl);
309
+ }
310
+ cleanup = () => {
311
+ this.refreshTokenStorage?.cleanup();
312
+ };
313
+ runAuthorizedRequest = (input, init, additionalParams) => {
314
+ const token = this.accessTokenStorage.getAccessToken();
315
+ if (!token) {
316
+ return fetch(input, init);
317
+ }
318
+ const headers = new Headers(init?.headers);
319
+ const getURL = (input2) => {
320
+ if (typeof input2 === "string") {
321
+ return input2;
322
+ } else if ("url" in input2) {
323
+ return input2.url;
324
+ } else {
325
+ return input2.href;
326
+ }
327
+ };
328
+ const iss = getTokenIss(token);
329
+ const issuerAndDomainMatch = getURL(input) === iss;
330
+ const shouldAddAuthorizationHeader = issuerAndDomainMatch || additionalParams?.allowPassingTokenToThirdPartyDomains;
331
+ if (!issuerAndDomainMatch) {
332
+ if (shouldAddAuthorizationHeader) {
333
+ console.warn(
334
+ "Token's `iss` and request URL do not match but `allowPassingTokenToThirdPartyDomains` was specified."
335
+ );
336
+ } else {
337
+ console.warn(
338
+ "Token's `iss` and request URL do not match. Not adding `Authorization` header to the request."
339
+ );
340
+ }
341
+ }
342
+ if (shouldAddAuthorizationHeader) {
343
+ headers.set("Authorization", `Bearer ${token}`);
344
+ }
345
+ return fetch(input, { ...init, headers });
346
+ };
347
+ handleRequestWithTokenRefresh = async (input, requestInit, additionalParams) => {
348
+ const refreshToken = this.refreshTokenStorage?.getRefreshToken();
349
+ invariant(refreshToken, "Missing refresh token in token refresh handler");
350
+ const accessToken = this.accessTokenStorage.getAccessToken();
351
+ if (accessToken && !isExpiredToken(accessToken, this.tokenGracePeriod)) {
352
+ return this.fetchWithAuth(input, requestInit, additionalParams);
353
+ }
354
+ this.onAuthRefresh?.(true);
355
+ if (this.tokenRefreshPromise) {
356
+ const response = await this.tokenRefreshPromise;
357
+ const res = await response.clone().json();
358
+ const {
359
+ errors: graphqlErrors,
360
+ data: {
361
+ tokenRefresh: { errors, token }
362
+ }
363
+ } = res;
364
+ this.onAuthRefresh?.(false);
365
+ if (errors?.length || graphqlErrors?.length || !token) {
366
+ this.tokenRefreshPromise = null;
367
+ this.refreshTokenStorage?.clearAuthStorage();
368
+ return fetch(input, requestInit);
369
+ }
370
+ this.refreshTokenStorage?.setAuthState("signedIn");
371
+ this.accessTokenStorage.setAccessToken(token);
372
+ this.tokenRefreshPromise = null;
373
+ return this.runAuthorizedRequest(input, requestInit, additionalParams);
374
+ }
375
+ this.tokenRefreshPromise = fetch(
376
+ this.saleorApiUrl,
377
+ getRequestData(TOKEN_REFRESH, { refreshToken }, { ...this.defaultRequestInit, ...requestInit })
378
+ );
379
+ return this.fetchWithAuth(input, requestInit, additionalParams);
380
+ };
381
+ handleSignIn = async (response) => {
382
+ const readResponse = await response.json();
383
+ const responseData = "tokenCreate" in readResponse.data ? readResponse.data.tokenCreate : readResponse.data.setPassword;
384
+ if (!responseData) {
385
+ return readResponse;
386
+ }
387
+ const { errors, token, refreshToken } = responseData;
388
+ if (!token || errors.length) {
389
+ this.refreshTokenStorage?.setAuthState("signedOut");
390
+ return readResponse;
391
+ }
392
+ if (token) {
393
+ this.accessTokenStorage.setAccessToken(token);
394
+ }
395
+ if (refreshToken) {
396
+ this.refreshTokenStorage?.setRefreshToken(refreshToken);
397
+ }
398
+ this.refreshTokenStorage?.setAuthState("signedIn");
399
+ return readResponse;
400
+ };
401
+ /**
402
+ * @param additionalParams
403
+ * @param additionalParams.allowPassingTokenToThirdPartyDomains if set to true, the `Authorization` header will be added to the request even if the token's `iss` and request URL do not match
404
+ */
405
+ fetchWithAuth = async (input, init, additionalParams) => {
406
+ const refreshToken = this.refreshTokenStorage?.getRefreshToken();
407
+ if (!this.accessTokenStorage.getAccessToken() && typeof document !== "undefined") {
408
+ const tokenFromCookie = import_cookie.default.parse(document.cookie).token ?? null;
409
+ if (tokenFromCookie) {
410
+ this.accessTokenStorage.setAccessToken(tokenFromCookie);
411
+ }
412
+ document.cookie = import_cookie.default.serialize("token", "", { expires: /* @__PURE__ */ new Date(0), path: "/" });
413
+ }
414
+ const accessToken = this.accessTokenStorage.getAccessToken();
415
+ if (accessToken && !isExpiredToken(accessToken, this.tokenGracePeriod)) {
416
+ return this.runAuthorizedRequest(input, init, additionalParams);
417
+ }
418
+ if (refreshToken) {
419
+ return this.handleRequestWithTokenRefresh(input, init, additionalParams);
420
+ }
421
+ return fetch(input, init);
422
+ };
423
+ resetPassword = async (variables, requestInit) => {
424
+ const response = await fetch(
425
+ this.saleorApiUrl,
426
+ getRequestData(PASSWORD_RESET, variables, { ...this.defaultRequestInit, ...requestInit })
427
+ );
428
+ return this.handleSignIn(response);
429
+ };
430
+ signIn = async (variables, requestInit) => {
431
+ const response = await fetch(
432
+ this.saleorApiUrl,
433
+ getRequestData(TOKEN_CREATE, variables, { ...this.defaultRequestInit, ...requestInit })
434
+ );
435
+ return this.handleSignIn(response);
436
+ };
437
+ signOut = () => {
438
+ this.accessTokenStorage.clearAuthStorage();
439
+ this.refreshTokenStorage?.clearAuthStorage();
440
+ if (typeof document !== "undefined") {
441
+ document.cookie = import_cookie.default.serialize("token", "", {
442
+ expires: /* @__PURE__ */ new Date(0),
443
+ path: "/"
444
+ });
445
+ }
446
+ };
447
+ };
448
+ var createSaleorAuthClient = (props) => new SaleorAuthClient(props);
449
+ function getInMemoryAccessTokenStorage() {
450
+ let accessToken = null;
451
+ return {
452
+ getItem() {
453
+ return accessToken;
454
+ },
455
+ removeItem() {
456
+ return accessToken = null;
457
+ },
458
+ setItem(_key, value) {
459
+ return accessToken = value;
460
+ }
461
+ };
462
+ }
463
+
464
+ // src/types.ts
465
+ var ExternalProvider = /* @__PURE__ */ ((ExternalProvider2) => {
466
+ ExternalProvider2["OpenIDConnect"] = "mirumee.authentication.openidconnect";
467
+ ExternalProvider2["SaleorCloud"] = "cloud_auth.CloudAuthorizationPlugin";
468
+ return ExternalProvider2;
469
+ })(ExternalProvider || {});
470
+
471
+ // src/SaleorExternalAuth.ts
472
+ var GraphQLError = class extends Error {
473
+ constructor(errorResponse) {
474
+ const message = errorResponse.errors.map((error) => error.message).join("\n");
475
+ super(message);
476
+ this.errorResponse = errorResponse;
477
+ this.name = this.constructor.name;
478
+ Object.setPrototypeOf(this, new.target.prototype);
479
+ }
480
+ };
481
+ var SaleorExternalAuth = class {
482
+ constructor(saleorURL, provider) {
483
+ this.saleorURL = saleorURL;
484
+ this.provider = provider;
485
+ }
486
+ async makePOSTRequest(query, variables) {
487
+ const response = await fetch(this.saleorURL, getRequestData(query, variables));
488
+ const result = await response.json();
489
+ if ("errors" in result) {
490
+ console.error(result.errors);
491
+ throw new GraphQLError(result);
492
+ }
493
+ return result.data;
494
+ }
495
+ async initiate({ redirectURL }) {
496
+ const {
497
+ externalAuthenticationUrl: { authenticationData: data, errors }
498
+ } = await this.makePOSTRequest(ExternalAuthenticationURL, {
499
+ pluginId: this.provider,
500
+ input: JSON.stringify({ redirectUri: redirectURL })
501
+ });
502
+ if (errors.length > 0) {
503
+ console.error({ errors });
504
+ throw new GraphQLError({ errors });
505
+ }
506
+ const { authorizationUrl } = JSON.parse(data);
507
+ return authorizationUrl;
508
+ }
509
+ async obtainAccessToken({ code, state }) {
510
+ const { externalObtainAccessTokens: data } = await this.makePOSTRequest(ExternalObtainAccessTokens, {
511
+ pluginId: this.provider,
512
+ input: JSON.stringify({ code, state })
513
+ });
514
+ return data;
515
+ }
516
+ };
517
+ // Annotate the CommonJS export names for ESM import in node:
518
+ 0 && (module.exports = {
519
+ ExternalProvider,
520
+ GraphQLError,
521
+ SaleorAuthClient,
522
+ SaleorExternalAuth,
523
+ createSaleorAuthClient
524
+ });
package/dist/index.mjs ADDED
@@ -0,0 +1,23 @@
1
+ import {
2
+ SaleorAuthClient,
3
+ createSaleorAuthClient
4
+ } from "./chunk-BRRF6LN3.mjs";
5
+ import "./chunk-BZFBMGPG.mjs";
6
+ import "./chunk-263DHBMK.mjs";
7
+ import {
8
+ GraphQLError,
9
+ SaleorExternalAuth
10
+ } from "./chunk-T35JF4IS.mjs";
11
+ import {
12
+ ExternalProvider
13
+ } from "./chunk-KLIEZ4V4.mjs";
14
+ import "./chunk-UDLCOX6B.mjs";
15
+ import "./chunk-7JTFMRQS.mjs";
16
+ import "./chunk-K5MTKW5C.mjs";
17
+ export {
18
+ ExternalProvider,
19
+ GraphQLError,
20
+ SaleorAuthClient,
21
+ SaleorExternalAuth,
22
+ createSaleorAuthClient
23
+ };
@@ -0,0 +1,12 @@
1
+ import { TypedDocumentString } from './graphql.mjs';
2
+ import { TokenRefreshResponse, TokenRefreshVariables, TokenCreateResponse, TokenCreateVariables, PasswordResetResponse, PasswordResetVariables, ExternalAuthenticationURLResponse, ExternalAuthenticationURLVariables, ExternalObtainAccessTokenResponse, ExternalObtainAccessTokenVariables } from './types.mjs';
3
+ import '@graphql-typed-document-node/core';
4
+
5
+ declare const accountErrorFragment = "\n fragment AccountErrorFragment on AccountError {\n code\n field\n message\n }\n";
6
+ declare const TOKEN_REFRESH: TypedDocumentString<TokenRefreshResponse, TokenRefreshVariables>;
7
+ declare const TOKEN_CREATE: TypedDocumentString<TokenCreateResponse, TokenCreateVariables>;
8
+ declare const PASSWORD_RESET: TypedDocumentString<PasswordResetResponse, PasswordResetVariables>;
9
+ declare const ExternalAuthenticationURL: TypedDocumentString<ExternalAuthenticationURLResponse, ExternalAuthenticationURLVariables>;
10
+ declare const ExternalObtainAccessTokens: TypedDocumentString<ExternalObtainAccessTokenResponse, ExternalObtainAccessTokenVariables>;
11
+
12
+ export { ExternalAuthenticationURL, ExternalObtainAccessTokens, PASSWORD_RESET, TOKEN_CREATE, TOKEN_REFRESH, accountErrorFragment };
@@ -0,0 +1,12 @@
1
+ import { TypedDocumentString } from './graphql.js';
2
+ import { TokenRefreshResponse, TokenRefreshVariables, TokenCreateResponse, TokenCreateVariables, PasswordResetResponse, PasswordResetVariables, ExternalAuthenticationURLResponse, ExternalAuthenticationURLVariables, ExternalObtainAccessTokenResponse, ExternalObtainAccessTokenVariables } from './types.js';
3
+ import '@graphql-typed-document-node/core';
4
+
5
+ declare const accountErrorFragment = "\n fragment AccountErrorFragment on AccountError {\n code\n field\n message\n }\n";
6
+ declare const TOKEN_REFRESH: TypedDocumentString<TokenRefreshResponse, TokenRefreshVariables>;
7
+ declare const TOKEN_CREATE: TypedDocumentString<TokenCreateResponse, TokenCreateVariables>;
8
+ declare const PASSWORD_RESET: TypedDocumentString<PasswordResetResponse, PasswordResetVariables>;
9
+ declare const ExternalAuthenticationURL: TypedDocumentString<ExternalAuthenticationURLResponse, ExternalAuthenticationURLVariables>;
10
+ declare const ExternalObtainAccessTokens: TypedDocumentString<ExternalObtainAccessTokenResponse, ExternalObtainAccessTokenVariables>;
11
+
12
+ export { ExternalAuthenticationURL, ExternalObtainAccessTokens, PASSWORD_RESET, TOKEN_CREATE, TOKEN_REFRESH, accountErrorFragment };