@agnostack/next-shopify 1.7.0-beta.6 → 1.7.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 (79) hide show
  1. package/dist/handlers/api/auth.d.ts +1 -0
  2. package/dist/handlers/api/auth.js +34 -0
  3. package/dist/handlers/api/auth.js.map +1 -0
  4. package/dist/handlers/api/callback.d.ts +1 -0
  5. package/dist/{helpers → handlers/api}/callback.js +23 -27
  6. package/dist/handlers/api/callback.js.map +1 -0
  7. package/dist/handlers/api/graph.d.ts +1 -0
  8. package/dist/handlers/api/graph.js +75 -0
  9. package/dist/handlers/api/graph.js.map +1 -0
  10. package/dist/handlers/api/index.d.ts +5 -0
  11. package/dist/handlers/api/index.js +18 -0
  12. package/dist/handlers/api/index.js.map +1 -0
  13. package/dist/handlers/api/rest.d.ts +1 -0
  14. package/dist/handlers/api/rest.js +83 -0
  15. package/dist/handlers/api/rest.js.map +1 -0
  16. package/dist/handlers/api/uninstall.d.ts +6 -0
  17. package/dist/handlers/api/uninstall.js +64 -0
  18. package/dist/handlers/api/uninstall.js.map +1 -0
  19. package/dist/handlers/ssr/index.d.ts +2 -0
  20. package/dist/{utils/shopify-api-node → handlers/ssr}/index.js +2 -2
  21. package/dist/handlers/ssr/index.js.map +1 -0
  22. package/dist/handlers/{ssr.d.ts → ssr/protect.d.ts} +0 -7
  23. package/dist/handlers/ssr/protect.js +47 -0
  24. package/dist/handlers/ssr/protect.js.map +1 -0
  25. package/dist/handlers/ssr/wrap.d.ts +7 -0
  26. package/dist/handlers/ssr/wrap.js +12 -0
  27. package/dist/handlers/ssr/wrap.js.map +1 -0
  28. package/dist/index.d.ts +0 -1
  29. package/dist/index.js +0 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/utils/billing.d.ts +12 -17
  32. package/dist/utils/billing.js +44 -195
  33. package/dist/utils/billing.js.map +1 -1
  34. package/dist/utils/constants.d.ts +0 -5
  35. package/dist/utils/constants.js +1 -111
  36. package/dist/utils/constants.js.map +1 -1
  37. package/dist/utils/display.d.ts +5 -1
  38. package/dist/utils/display.js +28 -1
  39. package/dist/utils/display.js.map +1 -1
  40. package/dist/utils/firebase.d.ts +1 -1
  41. package/dist/utils/firebase.js +19 -15
  42. package/dist/utils/firebase.js.map +1 -1
  43. package/dist/utils/session.d.ts +1 -1
  44. package/dist/utils/session.js +19 -24
  45. package/dist/utils/session.js.map +1 -1
  46. package/dist/utils/shopify.d.ts +1 -5
  47. package/dist/utils/shopify.js +12 -40
  48. package/dist/utils/shopify.js.map +1 -1
  49. package/dist/withShopify.js +11 -23
  50. package/dist/withShopify.js.map +1 -1
  51. package/package.json +2 -1
  52. package/CHANGELOG.md +0 -678
  53. package/dist/handlers/api.d.ts +0 -10
  54. package/dist/handlers/api.js +0 -104
  55. package/dist/handlers/api.js.map +0 -1
  56. package/dist/handlers/ssr.js +0 -61
  57. package/dist/handlers/ssr.js.map +0 -1
  58. package/dist/helpers/auth.d.ts +0 -14
  59. package/dist/helpers/auth.js +0 -22
  60. package/dist/helpers/auth.js.map +0 -1
  61. package/dist/helpers/callback.d.ts +0 -9
  62. package/dist/helpers/callback.js.map +0 -1
  63. package/dist/helpers/graph.d.ts +0 -22
  64. package/dist/helpers/graph.js +0 -74
  65. package/dist/helpers/graph.js.map +0 -1
  66. package/dist/helpers/index.d.ts +0 -5
  67. package/dist/helpers/index.js +0 -17
  68. package/dist/helpers/index.js.map +0 -1
  69. package/dist/helpers/rest.d.ts +0 -22
  70. package/dist/helpers/rest.js +0 -68
  71. package/dist/helpers/rest.js.map +0 -1
  72. package/dist/helpers/uninstall.d.ts +0 -7
  73. package/dist/helpers/uninstall.js +0 -36
  74. package/dist/helpers/uninstall.js.map +0 -1
  75. package/dist/utils/shopify-api-node/beginAuth.d.ts +0 -6
  76. package/dist/utils/shopify-api-node/beginAuth.js +0 -45
  77. package/dist/utils/shopify-api-node/beginAuth.js.map +0 -1
  78. package/dist/utils/shopify-api-node/index.d.ts +0 -1
  79. package/dist/utils/shopify-api-node/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ export function handleAuth(serverRuntimeConfig: any): (req: any, res: any) => Promise<any>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleAuth = void 0;
4
+ const utils_1 = require("../../utils");
5
+ // NOTE: typically handling: "/api/auth"
6
+ const handleAuth = (serverRuntimeConfig) => async (req, res) => {
7
+ var _a;
8
+ const { API_URLS, API_PATHS, PAGE_PATHS } = serverRuntimeConfig;
9
+ const query = (_a = req.query) !== null && _a !== void 0 ? _a : {};
10
+ const { embedded, host, shop: _shop } = query !== null && query !== void 0 ? query : {};
11
+ const shopify = await utils_1.getInitializedShopify(serverRuntimeConfig);
12
+ const shop = shopify.utils.sanitizeShop(_shop);
13
+ if (utils_1.stringEmpty(shop)) {
14
+ return res.redirect(`${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?code=no_shop_provided&type=handleAuth`);
15
+ }
16
+ if (embedded === '1') {
17
+ // TODO: explore objectToQuerystring
18
+ const redirectUriParams = new URLSearchParams({
19
+ shop,
20
+ host,
21
+ }).toString();
22
+ const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop, redirectUri: `${API_URLS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK]}?${redirectUriParams}` })).toString();
23
+ return res.redirect(`${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.EXIT]}?${queryParams}`);
24
+ }
25
+ return shopify.auth.begin({
26
+ shop,
27
+ isOnline: true,
28
+ rawRequest: req,
29
+ rawResponse: res,
30
+ callbackPath: API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK],
31
+ });
32
+ };
33
+ exports.handleAuth = handleAuth;
34
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/handlers/api/auth.js"],"names":[],"mappings":";;;AAAA,uCAKoB;AAEpB,wCAAwC;AACjC,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;;IACpE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAA;IAC/D,MAAM,KAAK,GAAG,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,CAAA;IAC7B,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAA;IAEnD,MAAM,OAAO,GAAG,MAAM,6BAAqB,CAAC,mBAAmB,CAAC,CAAA;IAEhE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC9C,IAAI,mBAAW,CAAC,IAAI,CAAC,EAAE;QACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,wBAAgB,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;KACnG;IAED,IAAI,QAAQ,KAAK,GAAG,EAAE;QACpB,oCAAoC;QACpC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAC;YAC5C,IAAI;YACJ,IAAI;SACL,CAAC,CAAC,QAAQ,EAAE,CAAA;QACb,MAAM,WAAW,GAAG,IAAI,eAAe,iCAClC,KAAK,KACR,IAAI,EACJ,WAAW,EAAE,GAAG,QAAQ,CAAC,uBAAe,CAAC,aAAa,CAAC,IAAI,iBAAiB,EAAE,IAC9E,CAAC,QAAQ,EAAE,CAAA;QAEb,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,wBAAgB,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,CAAA;KAC3E;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI;QACJ,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,SAAS,CAAC,uBAAe,CAAC,aAAa,CAAC;KACvD,CAAC,CAAA;AACJ,CAAC,CAAA;AAlCY,QAAA,UAAU,cAkCtB"}
@@ -0,0 +1 @@
1
+ export function handleCallback(serverRuntimeConfig: any): (req: any, res: any) => Promise<any>;
@@ -1,20 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleCallback = void 0;
3
4
  const shopify_api_1 = require("@shopify/shopify-api");
4
- const utils_1 = require("../utils");
5
- const callbackHelper = async ({ req, res, serverRuntimeConfig }) => {
5
+ const utils_1 = require("../../utils");
6
+ // NOTE: typically handling: "/api/auth/callback"
7
+ const handleCallback = (serverRuntimeConfig) => async (req, res) => {
6
8
  var _a;
7
- // TODO enable billing management
8
- // const { PAGE_PATHS, PAYMENT_CONFIG } = serverRuntimeConfig
9
- const { PAGE_PATHS } = serverRuntimeConfig;
9
+ const { PAGE_PATHS, PAYMENT_CONFIG, API_PATHS } = serverRuntimeConfig;
10
10
  const { shop, host } = req.query;
11
11
  if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(host)) {
12
- return {
13
- statusCode: 303,
14
- redirectUrl: `${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?code=${utils_1.ERROR_CODES.INVALID_CALLBACK}`,
15
- };
12
+ // HMMM: why is this a 303 (rather than a 302 or or anything)??
13
+ return res.redirect(303, `${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?code=${utils_1.ERROR_CODES.INVALID_CALLBACK}`);
16
14
  }
17
- let redirectUrl;
15
+ let redirectUrl = `${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?invalid_callback_response`;
18
16
  try {
19
17
  const { shopify, storeSession } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
20
18
  const authPayload = { rawRequest: req, rawResponse: res };
@@ -25,14 +23,16 @@ const callbackHelper = async ({ req, res, serverRuntimeConfig }) => {
25
23
  // TODO: explore objectToQuerystring
26
24
  const embeddedURL = await shopify.auth.getEmbeddedAppUrl(authPayload);
27
25
  redirectUrl = `${embeddedURL}?${new URLSearchParams(req.query).toString()}`;
28
- // TODO enable billing management
29
- // if (PAYMENT_CONFIG?.required) {
30
- // const billingManager = new BillingManager(shopify, session, serverRuntimeConfig)
31
- // const confirmationUrl = await billingManager.ensureBilling()
32
- // if (stringNotEmpty(confirmationUrl)) {
33
- // redirectUrl = confirmationUrl
34
- // }
35
- // }
26
+ if (PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) {
27
+ const confirmationUrl = await utils_1.ensureBilling({
28
+ shopify,
29
+ session,
30
+ paymentConfig: PAYMENT_CONFIG,
31
+ });
32
+ if (utils_1.stringNotEmpty(confirmationUrl)) {
33
+ redirectUrl = confirmationUrl;
34
+ }
35
+ }
36
36
  }
37
37
  catch (error) {
38
38
  const errorMessage = 'Error handling callback route';
@@ -40,10 +40,9 @@ const callbackHelper = async ({ req, res, serverRuntimeConfig }) => {
40
40
  // TODO implement a custom SessionNotFound error
41
41
  case error instanceof shopify_api_1.CookieNotFound: {
42
42
  console.error(`${errorMessage}. Cookie Error`, error);
43
- redirectUrl = await utils_1.getRedirectUrl(serverRuntimeConfig, {
44
- req,
45
- res,
46
- });
43
+ // TODO: explore objectToQuerystring
44
+ const queryParams = new URLSearchParams({ host, shop }).toString();
45
+ redirectUrl = `${API_PATHS[utils_1.API_ROUTE_NAMES.AUTH]}?${queryParams}`;
47
46
  break;
48
47
  }
49
48
  case error instanceof shopify_api_1.BillingError: {
@@ -68,10 +67,7 @@ const callbackHelper = async ({ req, res, serverRuntimeConfig }) => {
68
67
  }
69
68
  }
70
69
  }
71
- return {
72
- statusCode: 302,
73
- redirectUrl,
74
- };
70
+ return res.redirect(302, redirectUrl);
75
71
  };
76
- exports.default = callbackHelper;
72
+ exports.handleCallback = handleCallback;
77
73
  //# sourceMappingURL=callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../src/handlers/api/callback.js"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export function handleGraph(serverRuntimeConfig: any): (req: any, res: any, params: any) => Promise<any>;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.handleGraph = void 0;
15
+ const shopify_api_1 = require("@shopify/shopify-api");
16
+ const utils_1 = require("../../utils");
17
+ const handleGraph = (serverRuntimeConfig) => async (req, res, params) => {
18
+ var _a, _b, _c;
19
+ const { body = '{}' } = req, _d = req.query, _e = _d === void 0 ? {} : _d, { shop, apiVersion } = _e, _query = __rest(_e, ["shop", "apiVersion"]);
20
+ const _f = params !== null && params !== void 0 ? params : JSON.parse(body), { query: graphQuery, variables: graphVariables } = _f, graphParams = __rest(_f, ["query", "variables"]);
21
+ let query = _query;
22
+ if (utils_1.isType(query, 'string')) {
23
+ query = utils_1.querystringToObject(query);
24
+ }
25
+ if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(graphQuery)) {
26
+ return res.status(400).json({ message: 'Invalid arguments' });
27
+ }
28
+ let statusCode;
29
+ let response;
30
+ let message;
31
+ let headers = {};
32
+ try {
33
+ const { Graphql } = await utils_1.getVerifiedClients(serverRuntimeConfig, { req, res, shop, apiVersion });
34
+ response = await Graphql.query(Object.assign(Object.assign({ data: graphVariables ? {
35
+ query: graphQuery,
36
+ variables: graphVariables,
37
+ } : graphQuery }, utils_1.objectNotEmpty(query) && { query }), graphParams));
38
+ statusCode = 200;
39
+ }
40
+ catch (error) {
41
+ statusCode = 500;
42
+ message = 'Error handling query call';
43
+ switch (true) {
44
+ case error instanceof utils_1.ShopifyAuthenticationError: {
45
+ console.error(`${message}. Authentication Error`, error);
46
+ const errroResponse = utils_1.getAuthErrorResponse({ error, shop, serverRuntimeConfig });
47
+ statusCode = errroResponse.statusCode;
48
+ message = errroResponse.message;
49
+ headers = errroResponse.headers;
50
+ break;
51
+ }
52
+ case error instanceof shopify_api_1.BillingError: {
53
+ console.error(`${message}. Billing Error - ${error.message}`, error.errorData);
54
+ break;
55
+ }
56
+ case error instanceof shopify_api_1.GraphqlQueryError: {
57
+ const errorMessages = utils_1.ensureArray((_a = error.response) === null || _a === void 0 ? void 0 : _a.errors).map(({ message }) => utils_1.ensureString(message));
58
+ console.error(`${message}. ${errorMessages.join('. ')}`);
59
+ break;
60
+ }
61
+ default: {
62
+ break;
63
+ }
64
+ }
65
+ }
66
+ Object.entries(headers).forEach(([key, value]) => {
67
+ res.setHeader(key, value);
68
+ });
69
+ if (!(response === null || response === void 0 ? void 0 : response.body)) {
70
+ return res.status(statusCode).json({ message });
71
+ }
72
+ return res.status(statusCode).json((_c = (_b = response.body) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : response.body);
73
+ };
74
+ exports.handleGraph = handleGraph;
75
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/handlers/api/graph.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./auth";
2
+ export * from "./callback";
3
+ export * from "./graph";
4
+ export * from "./rest";
5
+ export * from "./uninstall";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./auth"), exports);
14
+ __exportStar(require("./callback"), exports);
15
+ __exportStar(require("./graph"), exports);
16
+ __exportStar(require("./rest"), exports);
17
+ __exportStar(require("./uninstall"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/api/index.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAsB;AACtB,6CAA0B;AAC1B,0CAAuB;AACvB,yCAAsB;AACtB,8CAA2B"}
@@ -0,0 +1 @@
1
+ export function handleRest(serverRuntimeConfig: any): (req: any, res: any, _params: any) => Promise<any>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.handleRest = void 0;
15
+ // NOTE: api routes do NOT work in `next export`
16
+ const shopify_api_1 = require("@shopify/shopify-api");
17
+ const utils_1 = require("../../utils");
18
+ const handleRest = (serverRuntimeConfig) => async (req, res, _params) => {
19
+ const { query: _query, method: _method, body: _body } = req;
20
+ const { shop } = _query !== null && _query !== void 0 ? _query : {};
21
+ const _a = _params !== null && _params !== void 0 ? _params : {}, { method: methodParam, query: queryParam, body: bodyParam, path } = _a, params = __rest(_a, ["method", "query", "body", "path"]);
22
+ if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(path)) {
23
+ return {
24
+ statusCode: 400,
25
+ message: 'Invalid arguments',
26
+ };
27
+ }
28
+ let statusCode;
29
+ let response;
30
+ let message;
31
+ let headers = {};
32
+ try {
33
+ let queryData = queryParam !== null && queryParam !== void 0 ? queryParam : _query;
34
+ if (utils_1.isType(queryData, 'string')) {
35
+ queryData = utils_1.querystringToObject(queryData);
36
+ }
37
+ const _b = utils_1.ensureObject(queryData), { apiVersion } = _b, query = __rest(_b, ["apiVersion"]);
38
+ const body = bodyParam !== null && bodyParam !== void 0 ? bodyParam : _body;
39
+ const method = utils_1.ensureString(methodParam !== null && methodParam !== void 0 ? methodParam : _method).toLowerCase();
40
+ const { Rest } = await utils_1.getVerifiedClients(serverRuntimeConfig, { req, res, shop, apiVersion });
41
+ response = await Rest[method](Object.assign({ path,
42
+ query,
43
+ body, type: shopify_api_1.DataType.JSON }, params));
44
+ statusCode = 200;
45
+ }
46
+ catch (error) {
47
+ message = 'Error handling rest call';
48
+ statusCode = 500;
49
+ switch (true) {
50
+ case error instanceof utils_1.ShopifyAuthenticationError: {
51
+ console.error(`${message}. Authentication Error`, error);
52
+ const errroResponse = utils_1.getAuthErrorResponse({ error, shop, serverRuntimeConfig });
53
+ statusCode = errroResponse.statusCode;
54
+ message = errroResponse.message;
55
+ headers = errroResponse.headers;
56
+ break;
57
+ }
58
+ case error instanceof shopify_api_1.BillingError: {
59
+ console.error(`${message}. Billing Error - ${error.message}`, error.errorData);
60
+ break;
61
+ }
62
+ default: {
63
+ console.error(message, error);
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ Object.entries(headers).forEach(([key, value]) => {
69
+ res.setHeader(key, value);
70
+ });
71
+ if (!response) {
72
+ return res.status(statusCode).json({ message });
73
+ }
74
+ if ((params === null || params === void 0 ? void 0 : params.type) && ![shopify_api_1.DataType.GraphQL, shopify_api_1.DataType.JSON].includes(params.type)) {
75
+ return res.status(statusCode).send(response);
76
+ }
77
+ if (!(response === null || response === void 0 ? void 0 : response.body)) {
78
+ return res.status(statusCode).json({ message });
79
+ }
80
+ return res.status(statusCode).json(response.body);
81
+ };
82
+ exports.handleRest = handleRest;
83
+ //# sourceMappingURL=rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../src/handlers/api/rest.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAAgD;AAChD,sDAA6D;AAE7D,uCASoB;AAEb,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IAC7E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAA;IAC7B,MAAM,KAMF,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,EANX,EACJ,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,IAAI,OAEW,EADZ,MAAM,cALL,mCAML,CAAgB,CAAA;IAEjB,IAAI,mBAAW,CAAC,IAAI,CAAC,IAAI,mBAAW,CAAC,IAAI,CAAC,EAAE;QAC1C,OAAO;YACL,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,mBAAmB;SAC7B,CAAA;KACF;IAED,IAAI,UAAU,CAAA;IACd,IAAI,QAAQ,CAAA;IACZ,IAAI,OAAO,CAAA;IACX,IAAI,OAAO,GAAG,EAAE,CAAA;IAEhB,IAAI;QACF,IAAI,SAAS,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,MAAM,CAAA;QACpC,IAAI,cAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;YAC/B,SAAS,GAAG,2BAAmB,CAAC,SAAS,CAAC,CAAA;SAC3C;QAED,MAAM,KAA2B,oBAAY,CAAC,SAAS,CAAC,EAAlD,EAAE,UAAU,OAAsC,EAAjC,KAAK,cAAtB,cAAwB,CAA0B,CAAA;QACxD,MAAM,IAAI,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,KAAK,CAAA;QAC/B,MAAM,MAAM,GAAG,oBAAY,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAEjE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAAkB,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QAE9F,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAC3B,IAAI;YACJ,KAAK;YACL,IAAI,EACJ,IAAI,EAAE,sBAAQ,CAAC,IAAI,IAChB,MAAM,EACT,CAAA;QAEF,UAAU,GAAG,GAAG,CAAA;KACjB;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,GAAG,0BAA0B,CAAA;QACpC,UAAU,GAAG,GAAG,CAAA;QAEhB,QAAQ,IAAI,EAAE;YACZ,KAAK,KAAK,YAAY,kCAA0B,CAAC,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,wBAAwB,EAAE,KAAK,CAAC,CAAA;gBACxD,MAAM,aAAa,GAAG,4BAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;gBAChF,UAAU,GAAG,aAAa,CAAC,UAAU,CAAA;gBACrC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAA;gBAC/B,OAAO,GAAG,aAAa,CAAC,OAAO,CAAA;gBAC/B,MAAK;aACN;YAED,KAAK,KAAK,YAAY,0BAAY,CAAC,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,qBAAqB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;gBAC9E,MAAK;aACN;YAED,OAAO,CAAC,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBAC7B,MAAK;aACN;SACF;KACF;IAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC/C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;KAChD;IAED,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,CAAC,CAAC,sBAAQ,CAAC,OAAO,EAAE,sBAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC5E,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;KAC7C;IAED,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAA,EAAE;QACnB,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;KAChD;IAED,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACnD,CAAC,CAAA;AAvFY,QAAA,UAAU,cAuFtB"}
@@ -0,0 +1,6 @@
1
+ export namespace rawBodyConfig {
2
+ namespace api {
3
+ const bodyParser: boolean;
4
+ }
5
+ }
6
+ export function handleAppUninstalled(serverRuntimeConfig: any): (req: any, res: any) => Promise<any>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleAppUninstalled = exports.rawBodyConfig = void 0;
7
+ const raw_body_1 = __importDefault(require("raw-body"));
8
+ const runtime_1 = require("@shopify/shopify-api/runtime");
9
+ const utils_1 = require("../../utils");
10
+ // NOTE raw request body is required for Shopify webhook validation
11
+ exports.rawBodyConfig = {
12
+ api: {
13
+ bodyParser: false,
14
+ },
15
+ };
16
+ // NOTE: typically handling: "/api/webhooks/app/uninstalled"
17
+ const handleAppUninstalled = (serverRuntimeConfig) => async (req, res) => {
18
+ // NOTE raw request body is required for Shopify webhook validation
19
+ const rawBody = await raw_body_1.default(req).catch((error) => {
20
+ console.error('Error extracting raw body for app uninstall', error);
21
+ // HMMMM: dont think we can return a 500 here (vs a 200 w/ an error object)
22
+ return res.status(500).send('Unable to get request body');
23
+ });
24
+ try {
25
+ const shop = req.headers['x-shopify-shop-domain'];
26
+ if (utils_1.stringEmpty(shop)) {
27
+ return res.status(400).send('Invalid shop');
28
+ }
29
+ const { shopify, findSession, deleteSessions } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
30
+ // NOTE these methods will intercept the response from shopify.webhooks.process
31
+ // NOTE setAbstractConvertIncomingResponseFunc is required if using setAbstractConvertResponseFunc
32
+ runtime_1.setAbstractConvertIncomingResponseFunc(async (args) => args);
33
+ runtime_1.setAbstractConvertResponseFunc(async (response, adapterArgs) => {
34
+ const { statusCode, statusText } = utils_1.ensureObject(response);
35
+ const { type, rawResponse } = utils_1.ensureObject(adapterArgs);
36
+ // NOTE additional check (before removing sessions) to ensure this is the uninstall response scenario (although this nay not be needed)
37
+ if (type === utils_1.API_WEBHOOK_TOPICS.APP_UNINSTALLED && statusCode === 200) {
38
+ try {
39
+ const sessionsIds = await findSession(shop);
40
+ if (utils_1.arrayNotEmpty(sessionsIds)) {
41
+ await deleteSessions(sessionsIds.map(({ id }) => id));
42
+ }
43
+ }
44
+ catch (error) {
45
+ return rawResponse.status(500).send(error === null || error === void 0 ? void 0 : error.message);
46
+ }
47
+ }
48
+ return rawResponse.status(statusCode).send(statusText);
49
+ });
50
+ return shopify.webhooks.process({
51
+ rawBody: rawBody.toString(),
52
+ rawRequest: req,
53
+ rawResponse: res,
54
+ type: utils_1.API_WEBHOOK_TOPICS.APP_UNINSTALLED,
55
+ });
56
+ }
57
+ catch (error) {
58
+ console.error('Error handling uninstall', error);
59
+ // HMMM: not sure this should/can send back a 500 here (vs 200 w error object in body)
60
+ return res.status(500).send('Error handling uninstall');
61
+ }
62
+ };
63
+ exports.handleAppUninstalled = handleAppUninstalled;
64
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/handlers/api/uninstall.js"],"names":[],"mappings":";;;;;;AAAA,wDAAiC;AACjC,0DAGqC;AAErC,uCAMoB;AAEpB,mEAAmE;AACtD,QAAA,aAAa,GAAG;IAC3B,GAAG,EAAE;QACH,UAAU,EAAE,KAAK;KAClB;CACF,CAAA;AAED,4DAA4D;AACrD,MAAM,oBAAoB,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC9E,mEAAmE;IACnE,MAAM,OAAO,GAAG,MAAM,kBAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACpD,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAA;QAEnE,2EAA2E;QAC3E,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,IAAI;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;QAEjD,IAAI,mBAAW,CAAC,IAAI,CAAC,EAAE;YACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;SAC5C;QAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,yBAAiB,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAEvG,+EAA+E;QAC/E,kGAAkG;QAClG,gDAAsC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5D,wCAA8B,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAC7D,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,oBAAY,CAAC,QAAQ,CAAC,CAAA;YACzD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,oBAAY,CAAC,WAAW,CAAC,CAAA;YAEvD,uIAAuI;YACvI,IAAI,IAAI,KAAK,0BAAkB,CAAC,eAAe,IAAI,UAAU,KAAK,GAAG,EAAE;gBACrE,IAAI;oBACF,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;oBAC3C,IAAI,qBAAa,CAAC,WAAW,CAAC,EAAE;wBAC9B,MAAM,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;qBACtD;iBACF;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC,CAAA;iBACpD;aACF;YAED,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;QAEF,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;YAC3B,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,0BAAkB,CAAC,eAAe;SACzC,CAAC,CAAA;KACH;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;QAChD,sFAAsF;QACtF,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;KACxD;AACH,CAAC,CAAA;AAnDY,QAAA,oBAAoB,wBAmDhC"}
@@ -0,0 +1,2 @@
1
+ export * from "./protect";
2
+ export * from "./wrap";
@@ -10,6 +10,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- // NOTE these are overrides of '@shopify/shopify-api'
14
- __exportStar(require("./beginAuth"), exports);
13
+ __exportStar(require("./protect"), exports);
14
+ __exportStar(require("./wrap"), exports);
15
15
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/ssr/index.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAyB;AACzB,yCAAsB"}
@@ -1,10 +1,3 @@
1
- export function wrapRoute(): ({ res, query, locale }: {
2
- res: any;
3
- query: any;
4
- locale: any;
5
- }, data: any) => {
6
- props: any;
7
- };
8
1
  export function protectRoute(props: any): ({ req, res, query, locale }: {
9
2
  req: any;
10
3
  res: any;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.protectRoute = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const protectRoute = (props) => async ({ req, res, query, locale } = {}, data) => {
6
+ var _a, _b, _c, _d;
7
+ const { PAGE_PATHS, API_PATHS } = props;
8
+ const shop = (_a = query === null || query === void 0 ? void 0 : query.shop) !== null && _a !== void 0 ? _a : (_b = req.query) === null || _b === void 0 ? void 0 : _b.shop;
9
+ const embedded = (_c = query === null || query === void 0 ? void 0 : query.embedded) !== null && _c !== void 0 ? _c : (_d = req.query) === null || _d === void 0 ? void 0 : _d.embedded;
10
+ res.setHeader('Content-Security-Policy', utils_1.getSecurityHeader(shop));
11
+ if (utils_1.stringEmpty(shop)) {
12
+ return {
13
+ redirect: {
14
+ destination: `${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?code=no_shop_provided&type=protectRoute`,
15
+ permanent: false,
16
+ },
17
+ };
18
+ }
19
+ const { shopify, findSession } = await utils_1.getShopifyHelpers(props, { shop });
20
+ const existingSessions = await findSession(shop);
21
+ if (utils_1.arrayEmpty(existingSessions)) {
22
+ // TODO: explore objectToQuerystring
23
+ const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop })).toString();
24
+ return {
25
+ redirect: {
26
+ destination: `${API_PATHS[utils_1.API_ROUTE_NAMES.AUTH]}?${queryParams}`,
27
+ permanent: false,
28
+ },
29
+ };
30
+ }
31
+ if (embedded !== '1') {
32
+ return {
33
+ redirect: {
34
+ destination: await shopify.auth.getEmbeddedAppUrl({
35
+ rawRequest: req,
36
+ rawResponse: res,
37
+ }),
38
+ permanent: false,
39
+ },
40
+ };
41
+ }
42
+ return {
43
+ props: utils_1.cleanObject(Object.assign({ locale }, data)),
44
+ };
45
+ };
46
+ exports.protectRoute = protectRoute;
47
+ //# sourceMappingURL=protect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protect.js","sourceRoot":"","sources":["../../../src/handlers/ssr/protect.js"],"names":[],"mappings":";;;AAAA,uCAQoB;AAEb,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE;;IACtF,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IACvC,MAAM,IAAI,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,MAAA,GAAG,CAAC,KAAK,0CAAE,IAAI,CAAA;IAC3C,MAAM,QAAQ,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,mCAAI,MAAA,GAAG,CAAC,KAAK,0CAAE,QAAQ,CAAA;IAEvD,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,yBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;IAEjE,IAAI,mBAAW,CAAC,IAAI,CAAC,EAAE;QACrB,OAAO;YACL,QAAQ,EAAE;gBACR,WAAW,EAAE,GAAG,UAAU,CAAC,wBAAgB,CAAC,KAAK,CAAC,0CAA0C;gBAC5F,SAAS,EAAE,KAAK;aACjB;SACF,CAAA;KACF;IAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,yBAAiB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAEzE,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;IAEhD,IAAI,kBAAU,CAAC,gBAAgB,CAAC,EAAE;QAChC,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,eAAe,iCAAM,KAAK,KAAE,IAAI,IAAG,CAAC,QAAQ,EAAE,CAAA;QAEtE,OAAO;YACL,QAAQ,EAAE;gBACR,WAAW,EAAE,GAAG,SAAS,CAAC,uBAAe,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE;gBAChE,SAAS,EAAE,KAAK;aACjB;SACF,CAAA;KACF;IAED,IAAI,QAAQ,KAAK,GAAG,EAAE;QACpB,OAAO;YACL,QAAQ,EAAE;gBACR,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBAChD,UAAU,EAAE,GAAG;oBACf,WAAW,EAAE,GAAG;iBACjB,CAAC;gBACF,SAAS,EAAE,KAAK;aACjB;SACF,CAAA;KACF;IAED,OAAO;QACL,KAAK,EAAE,mBAAW,iBAChB,MAAM,IACH,IAAI,EACP;KACH,CAAA;AACH,CAAC,CAAA;AAlDY,QAAA,YAAY,gBAkDxB"}
@@ -0,0 +1,7 @@
1
+ export function wrapRoute(): ({ res, query, locale }: {
2
+ res: any;
3
+ query: any;
4
+ locale: any;
5
+ }, data: any) => {
6
+ props: any;
7
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrapRoute = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const wrapRoute = () => ({ res, query, locale } = {}, data) => {
6
+ res.setHeader('Content-Security-Policy', utils_1.getSecurityHeader(query === null || query === void 0 ? void 0 : query.shop));
7
+ return {
8
+ props: utils_1.cleanObject(Object.assign({ locale }, data)),
9
+ };
10
+ };
11
+ exports.wrapRoute = wrapRoute;
12
+ //# sourceMappingURL=wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../../src/handlers/ssr/wrap.js"],"names":[],"mappings":";;;AAAA,uCAA4D;AAErD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE;IACnE,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,yBAAiB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,CAAC,CAAA;IAExE,OAAO;QACL,KAAK,EAAE,mBAAW,iBAChB,MAAM,IACH,IAAI,EACP;KACH,CAAA;AACH,CAAC,CAAA;AATY,QAAA,SAAS,aASrB"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export * from './handlers';
2
- export * from './helpers';
3
2
  export * from './withShopify';
package/dist/index.js CHANGED
@@ -11,6 +11,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./handlers"), exports);
14
- __exportStar(require("./helpers"), exports);
15
14
  __exportStar(require("./withShopify"), exports);
16
15
  //# 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,6CAA0B;AAC1B,4CAAyB;AACzB,gDAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA0B;AAC1B,gDAA6B"}
@@ -1,20 +1,15 @@
1
- export class BillingManager {
2
- constructor(shopify: any, session: any, serverRuntimeConfig: any);
1
+ export function ensureBilling({ shopify, session, paymentConfig }: {
3
2
  shopify: any;
4
- shop: any;
5
- graphClient: any;
6
3
  session: any;
7
- accessToken: any;
8
- appId: any;
9
- appBaseUrl: any;
10
4
  paymentConfig: any;
11
- isRecurring: boolean;
12
- ensureBilling(): Promise<any>;
13
- hasActiveRecurringPayment(): Promise<boolean>;
14
- hasActiveOneTimePayment(endCursor?: any): any;
15
- hasActivePayment(): Promise<any>;
16
- requestPayment(): Promise<any>;
17
- requestSinglePayment(returnUrl: any): Promise<any>;
18
- requestRecurringPayment(returnUrl: any): Promise<any>;
19
- }
20
- export function generatePaymentConfig(): {};
5
+ }): Promise<any>;
6
+ export function generatePaymentConfig(data: any): {
7
+ required: boolean;
8
+ test: any;
9
+ name: string;
10
+ config: {
11
+ interval: any;
12
+ amount: any;
13
+ currencyCode: any;
14
+ };
15
+ };