@shopify/shopify-app-remix 1.0.0-rc.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 (161) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +373 -0
  3. package/build/cjs/adapters/node/index.js +13 -0
  4. package/build/cjs/auth/admin/authenticate.js +599 -0
  5. package/build/cjs/auth/admin/graphql-client.js +57 -0
  6. package/build/cjs/auth/admin/rest-client.js +124 -0
  7. package/build/cjs/auth/const.js +17 -0
  8. package/build/cjs/auth/helpers/add-response-headers.js +69 -0
  9. package/build/cjs/auth/helpers/begin-auth.js +18 -0
  10. package/build/cjs/auth/helpers/get-session-token-header.js +10 -0
  11. package/build/cjs/auth/helpers/handle-client-error.js +37 -0
  12. package/build/cjs/auth/helpers/redirect-to-auth-page.js +22 -0
  13. package/build/cjs/auth/helpers/redirect-with-app-bridge-headers.js +31 -0
  14. package/build/cjs/auth/helpers/redirect-with-exitiframe.js +23 -0
  15. package/build/cjs/auth/helpers/reject-bot-request.js +23 -0
  16. package/build/cjs/auth/helpers/validate-session-token.js +25 -0
  17. package/build/cjs/auth/login/login.js +54 -0
  18. package/build/cjs/auth/public/authenticate.js +32 -0
  19. package/build/cjs/auth/webhooks/authenticate.js +68 -0
  20. package/build/cjs/auth/webhooks/register.js +40 -0
  21. package/build/cjs/billing/cancel.js +40 -0
  22. package/build/cjs/billing/request.js +83 -0
  23. package/build/cjs/billing/require.js +47 -0
  24. package/build/cjs/index.js +140 -0
  25. package/build/cjs/override-logger.js +55 -0
  26. package/build/cjs/types.js +25 -0
  27. package/build/cjs/version.js +7 -0
  28. package/build/ts/adapters/node/index.d.ts +2 -0
  29. package/build/ts/adapters/node/index.d.ts.map +1 -0
  30. package/build/ts/adapters/node/index.js +10 -0
  31. package/build/ts/adapters/node/index.js.map +1 -0
  32. package/build/ts/auth/admin/authenticate.d.ts +32 -0
  33. package/build/ts/auth/admin/authenticate.d.ts.map +1 -0
  34. package/build/ts/auth/admin/authenticate.js +571 -0
  35. package/build/ts/auth/admin/authenticate.js.map +1 -0
  36. package/build/ts/auth/admin/graphql-client.d.ts +22 -0
  37. package/build/ts/auth/admin/graphql-client.d.ts.map +1 -0
  38. package/build/ts/auth/admin/graphql-client.js +53 -0
  39. package/build/ts/auth/admin/graphql-client.js.map +1 -0
  40. package/build/ts/auth/admin/rest-client.d.ts +34 -0
  41. package/build/ts/auth/admin/rest-client.d.ts.map +1 -0
  42. package/build/ts/auth/admin/rest-client.js +134 -0
  43. package/build/ts/auth/admin/rest-client.js.map +1 -0
  44. package/build/ts/auth/admin/types.d.ts +100 -0
  45. package/build/ts/auth/admin/types.d.ts.map +1 -0
  46. package/build/ts/auth/admin/types.js +3 -0
  47. package/build/ts/auth/admin/types.js.map +1 -0
  48. package/build/ts/auth/const.d.ts +9 -0
  49. package/build/ts/auth/const.d.ts.map +1 -0
  50. package/build/ts/auth/const.js +12 -0
  51. package/build/ts/auth/const.js.map +1 -0
  52. package/build/ts/auth/helpers/add-response-headers.d.ts +5 -0
  53. package/build/ts/auth/helpers/add-response-headers.d.ts.map +1 -0
  54. package/build/ts/auth/helpers/add-response-headers.js +60 -0
  55. package/build/ts/auth/helpers/add-response-headers.js.map +1 -0
  56. package/build/ts/auth/helpers/begin-auth.d.ts +3 -0
  57. package/build/ts/auth/helpers/begin-auth.d.ts.map +1 -0
  58. package/build/ts/auth/helpers/begin-auth.js +24 -0
  59. package/build/ts/auth/helpers/begin-auth.js.map +1 -0
  60. package/build/ts/auth/helpers/get-session-token-header.d.ts +2 -0
  61. package/build/ts/auth/helpers/get-session-token-header.d.ts.map +1 -0
  62. package/build/ts/auth/helpers/get-session-token-header.js +9 -0
  63. package/build/ts/auth/helpers/get-session-token-header.js.map +1 -0
  64. package/build/ts/auth/helpers/handle-client-error.d.ts +11 -0
  65. package/build/ts/auth/helpers/handle-client-error.d.ts.map +1 -0
  66. package/build/ts/auth/helpers/handle-client-error.js +40 -0
  67. package/build/ts/auth/helpers/handle-client-error.js.map +1 -0
  68. package/build/ts/auth/helpers/index.d.ts +8 -0
  69. package/build/ts/auth/helpers/index.d.ts.map +1 -0
  70. package/build/ts/auth/helpers/index.js +18 -0
  71. package/build/ts/auth/helpers/index.js.map +1 -0
  72. package/build/ts/auth/helpers/redirect-to-auth-page.d.ts +3 -0
  73. package/build/ts/auth/helpers/redirect-to-auth-page.d.ts.map +1 -0
  74. package/build/ts/auth/helpers/redirect-to-auth-page.js +33 -0
  75. package/build/ts/auth/helpers/redirect-to-auth-page.js.map +1 -0
  76. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts +4 -0
  77. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts.map +1 -0
  78. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js +24 -0
  79. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js.map +1 -0
  80. package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts +3 -0
  81. package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts.map +1 -0
  82. package/build/ts/auth/helpers/redirect-with-exitiframe.js +18 -0
  83. package/build/ts/auth/helpers/redirect-with-exitiframe.js.map +1 -0
  84. package/build/ts/auth/helpers/reject-bot-request.d.ts +3 -0
  85. package/build/ts/auth/helpers/reject-bot-request.d.ts.map +1 -0
  86. package/build/ts/auth/helpers/reject-bot-request.js +14 -0
  87. package/build/ts/auth/helpers/reject-bot-request.js.map +1 -0
  88. package/build/ts/auth/helpers/validate-session-token.d.ts +4 -0
  89. package/build/ts/auth/helpers/validate-session-token.d.ts.map +1 -0
  90. package/build/ts/auth/helpers/validate-session-token.js +36 -0
  91. package/build/ts/auth/helpers/validate-session-token.js.map +1 -0
  92. package/build/ts/auth/login/login.d.ts +3 -0
  93. package/build/ts/auth/login/login.d.ts.map +1 -0
  94. package/build/ts/auth/login/login.js +56 -0
  95. package/build/ts/auth/login/login.js.map +1 -0
  96. package/build/ts/auth/public/authenticate.d.ts +4 -0
  97. package/build/ts/auth/public/authenticate.d.ts.map +1 -0
  98. package/build/ts/auth/public/authenticate.js +35 -0
  99. package/build/ts/auth/public/authenticate.js.map +1 -0
  100. package/build/ts/auth/public/types.d.ts +27 -0
  101. package/build/ts/auth/public/types.d.ts.map +1 -0
  102. package/build/ts/auth/public/types.js +3 -0
  103. package/build/ts/auth/public/types.js.map +1 -0
  104. package/build/ts/auth/webhooks/authenticate.d.ts +5 -0
  105. package/build/ts/auth/webhooks/authenticate.d.ts.map +1 -0
  106. package/build/ts/auth/webhooks/authenticate.js +71 -0
  107. package/build/ts/auth/webhooks/authenticate.js.map +1 -0
  108. package/build/ts/auth/webhooks/index.d.ts +2 -0
  109. package/build/ts/auth/webhooks/index.d.ts.map +1 -0
  110. package/build/ts/auth/webhooks/index.js +6 -0
  111. package/build/ts/auth/webhooks/index.js.map +1 -0
  112. package/build/ts/auth/webhooks/register.d.ts +4 -0
  113. package/build/ts/auth/webhooks/register.d.ts.map +1 -0
  114. package/build/ts/auth/webhooks/register.js +39 -0
  115. package/build/ts/auth/webhooks/register.js.map +1 -0
  116. package/build/ts/auth/webhooks/types.d.ts +18 -0
  117. package/build/ts/auth/webhooks/types.d.ts.map +1 -0
  118. package/build/ts/auth/webhooks/types.js +3 -0
  119. package/build/ts/auth/webhooks/types.js.map +1 -0
  120. package/build/ts/billing/cancel.d.ts +5 -0
  121. package/build/ts/billing/cancel.d.ts.map +1 -0
  122. package/build/ts/billing/cancel.js +43 -0
  123. package/build/ts/billing/cancel.js.map +1 -0
  124. package/build/ts/billing/index.d.ts +4 -0
  125. package/build/ts/billing/index.d.ts.map +1 -0
  126. package/build/ts/billing/index.js +10 -0
  127. package/build/ts/billing/index.js.map +1 -0
  128. package/build/ts/billing/request.d.ts +6 -0
  129. package/build/ts/billing/request.d.ts.map +1 -0
  130. package/build/ts/billing/request.js +84 -0
  131. package/build/ts/billing/request.js.map +1 -0
  132. package/build/ts/billing/require.d.ts +6 -0
  133. package/build/ts/billing/require.d.ts.map +1 -0
  134. package/build/ts/billing/require.js +55 -0
  135. package/build/ts/billing/require.js.map +1 -0
  136. package/build/ts/billing/types.d.ts +228 -0
  137. package/build/ts/billing/types.d.ts.map +1 -0
  138. package/build/ts/billing/types.js +3 -0
  139. package/build/ts/billing/types.js.map +1 -0
  140. package/build/ts/config-types.d.ts +325 -0
  141. package/build/ts/config-types.d.ts.map +1 -0
  142. package/build/ts/config-types.js +3 -0
  143. package/build/ts/config-types.js.map +1 -0
  144. package/build/ts/index.d.ts +29 -0
  145. package/build/ts/index.d.ts.map +1 -0
  146. package/build/ts/index.js +108 -0
  147. package/build/ts/index.js.map +1 -0
  148. package/build/ts/override-logger.d.ts +3 -0
  149. package/build/ts/override-logger.d.ts.map +1 -0
  150. package/build/ts/override-logger.js +40 -0
  151. package/build/ts/override-logger.js.map +1 -0
  152. package/build/ts/types.d.ts +353 -0
  153. package/build/ts/types.d.ts.map +1 -0
  154. package/build/ts/types.js +17 -0
  155. package/build/ts/types.js.map +1 -0
  156. package/build/ts/version.d.ts +2 -0
  157. package/build/ts/version.d.ts.map +1 -0
  158. package/build/ts/version.js +5 -0
  159. package/build/ts/version.js.map +1 -0
  160. package/build/tsconfig.tsbuildinfo +1 -0
  161. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-to-auth-page.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-to-auth-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAM7C,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,UAAQ,GACf,OAAO,CAAC,KAAK,CAAC,CAYhB"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redirectToAuthPage = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var begin_auth_1 = require("./begin-auth");
6
+ var redirect_with_exitiframe_1 = require("./redirect-with-exitiframe");
7
+ var redirect_with_app_bridge_headers_1 = require("./redirect-with-app-bridge-headers");
8
+ function redirectToAuthPage(params, request, shop, isOnline) {
9
+ if (isOnline === void 0) { isOnline = false; }
10
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
11
+ var url, isEmbeddedRequest, isXhrRequest;
12
+ return tslib_1.__generator(this, function (_a) {
13
+ switch (_a.label) {
14
+ case 0:
15
+ url = new URL(request.url);
16
+ isEmbeddedRequest = url.searchParams.get('embedded') === '1';
17
+ isXhrRequest = request.headers.get('authorization');
18
+ if (!isXhrRequest) return [3 /*break*/, 1];
19
+ (0, redirect_with_app_bridge_headers_1.redirectWithAppBridgeHeaders)(params, shop);
20
+ return [3 /*break*/, 4];
21
+ case 1:
22
+ if (!isEmbeddedRequest) return [3 /*break*/, 2];
23
+ (0, redirect_with_exitiframe_1.redirectWithExitIframe)(params, request, shop);
24
+ return [3 /*break*/, 4];
25
+ case 2: return [4 /*yield*/, (0, begin_auth_1.beginAuth)(params, request, isOnline, shop)];
26
+ case 3: throw _a.sent();
27
+ case 4: return [2 /*return*/];
28
+ }
29
+ });
30
+ });
31
+ }
32
+ exports.redirectToAuthPage = redirectToAuthPage;
33
+ //# sourceMappingURL=redirect-to-auth-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-to-auth-page.js","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-to-auth-page.ts"],"names":[],"mappings":";;;;AAEA,2CAAuC;AACvC,uEAAkE;AAClE,uFAAgF;AAEhF,SAAsB,kBAAkB,CACtC,MAAmB,EACnB,OAAgB,EAChB,IAAY,EACZ,QAAgB;IAAhB,yBAAA,EAAA,gBAAgB;;;;;;oBAEV,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC3B,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;oBAC7D,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;yBAEtD,YAAY,EAAZ,wBAAY;oBACd,IAAA,+DAA4B,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;yBAClC,iBAAiB,EAAjB,wBAAiB;oBAC1B,IAAA,iDAAsB,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;;wBAExC,qBAAM,IAAA,sBAAS,EAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAA;wBAAtD,MAAM,SAAgD,CAAC;;;;;CAE1D;AAjBD,gDAiBC"}
@@ -0,0 +1,4 @@
1
+ import type { BasicParams } from '../../types';
2
+ export declare function redirectWithAppBridgeHeaders(params: BasicParams, shop: string): never;
3
+ export declare function getAppBridgeHeaders(params: BasicParams, url: string, shop: string): Headers;
4
+ //# sourceMappingURL=redirect-with-app-bridge-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-with-app-bridge-headers.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-app-bridge-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAK7C,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,GACX,KAAK,CASP;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,WAQb"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAppBridgeHeaders = exports.redirectWithAppBridgeHeaders = void 0;
4
+ var const_1 = require("../const");
5
+ var add_response_headers_1 = require("./add-response-headers");
6
+ function redirectWithAppBridgeHeaders(params, shop) {
7
+ var config = params.config;
8
+ var redirectUri = "".concat(config.appUrl).concat(config.auth.path, "?shop=").concat(shop);
9
+ throw new Response(undefined, {
10
+ status: 401,
11
+ statusText: 'Unauthorized',
12
+ headers: getAppBridgeHeaders(params, redirectUri, shop),
13
+ });
14
+ }
15
+ exports.redirectWithAppBridgeHeaders = redirectWithAppBridgeHeaders;
16
+ function getAppBridgeHeaders(params, url, shop) {
17
+ var _a;
18
+ var config = params.config;
19
+ var headers = new Headers((_a = {}, _a[const_1.REAUTH_URL_HEADER] = url, _a));
20
+ (0, add_response_headers_1.addResponseHeaders)(headers, config.isEmbeddedApp, shop);
21
+ return headers;
22
+ }
23
+ exports.getAppBridgeHeaders = getAppBridgeHeaders;
24
+ //# sourceMappingURL=redirect-with-app-bridge-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-with-app-bridge-headers.js","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-app-bridge-headers.ts"],"names":[],"mappings":";;;AACA,kCAA2C;AAE3C,+DAA0D;AAE1D,SAAgB,4BAA4B,CAC1C,MAAmB,EACnB,IAAY;IAEL,IAAA,MAAM,GAAI,MAAM,OAAV,CAAW;IACxB,IAAM,WAAW,GAAG,UAAG,MAAM,CAAC,MAAM,SAAG,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAS,IAAI,CAAE,CAAC;IAEvE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;QAC5B,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,cAAc;QAC1B,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC;KACxD,CAAC,CAAC;AACL,CAAC;AAZD,oEAYC;AAED,SAAgB,mBAAmB,CACjC,MAAmB,EACnB,GAAW,EACX,IAAY;;IAEL,IAAA,MAAM,GAAI,MAAM,OAAV,CAAW;IACxB,IAAM,OAAO,GAAG,IAAI,OAAO,WAAE,GAAC,yBAAiB,IAAG,GAAG,MAAE,CAAC;IAExD,IAAA,yCAAkB,EAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAExD,OAAO,OAAO,CAAC;AACjB,CAAC;AAXD,kDAWC"}
@@ -0,0 +1,3 @@
1
+ import type { BasicParams } from '../../types';
2
+ export declare function redirectWithExitIframe(params: BasicParams, request: Request, shop: string): never;
3
+ //# sourceMappingURL=redirect-with-exitiframe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-with-exitiframe.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-exitiframe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,GACX,KAAK,CAeP"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redirectWithExitIframe = void 0;
4
+ var server_runtime_1 = require("@remix-run/server-runtime");
5
+ function redirectWithExitIframe(params, request, shop) {
6
+ var api = params.api, config = params.config;
7
+ var url = new URL(request.url);
8
+ var queryParams = url.searchParams;
9
+ var host = api.utils.sanitizeHost(queryParams.get('host'));
10
+ queryParams.set('shop', shop);
11
+ queryParams.set('exitIframe', "".concat(config.auth.path, "?shop=").concat(shop));
12
+ if (host) {
13
+ queryParams.set('host', host);
14
+ }
15
+ throw (0, server_runtime_1.redirect)("".concat(config.auth.exitIframePath, "?").concat(queryParams.toString()));
16
+ }
17
+ exports.redirectWithExitIframe = redirectWithExitIframe;
18
+ //# sourceMappingURL=redirect-with-exitiframe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-with-exitiframe.js","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-exitiframe.ts"],"names":[],"mappings":";;;AAAA,4DAAmD;AAInD,SAAgB,sBAAsB,CACpC,MAAmB,EACnB,OAAgB,EAChB,IAAY;IAEL,IAAA,GAAG,GAAY,MAAM,IAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;IAC7B,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC;IACrC,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC;IAE9D,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,UAAG,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAS,IAAI,CAAE,CAAC,CAAC;IAElE,IAAI,IAAI,EAAE;QACR,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC/B;IAED,MAAM,IAAA,yBAAQ,EAAC,UAAG,MAAM,CAAC,IAAI,CAAC,cAAc,cAAI,WAAW,CAAC,QAAQ,EAAE,CAAE,CAAC,CAAC;AAC5E,CAAC;AAnBD,wDAmBC"}
@@ -0,0 +1,3 @@
1
+ import type { BasicParams } from '../../types';
2
+ export declare function rejectBotRequest({ logger }: BasicParams, request: Request): void | never;
3
+ //# sourceMappingURL=reject-bot-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reject-bot-request.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/reject-bot-request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,wBAAgB,gBAAgB,CAC9B,EAAC,MAAM,EAAC,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,GACf,IAAI,GAAG,KAAK,CAKd"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rejectBotRequest = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var isbot_1 = tslib_1.__importDefault(require("isbot"));
6
+ function rejectBotRequest(_a, request) {
7
+ var logger = _a.logger;
8
+ if ((0, isbot_1.default)(request.headers.get('User-Agent'))) {
9
+ logger.debug('Request is from a bot, skipping auth');
10
+ throw new Response(undefined, { status: 410, statusText: 'Gone' });
11
+ }
12
+ }
13
+ exports.rejectBotRequest = rejectBotRequest;
14
+ //# sourceMappingURL=reject-bot-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reject-bot-request.js","sourceRoot":"","sources":["../../../../src/auth/helpers/reject-bot-request.ts"],"names":[],"mappings":";;;;AAAA,wDAA0B;AAI1B,SAAgB,gBAAgB,CAC9B,EAAqB,EACrB,OAAgB;QADf,MAAM,YAAA;IAGP,IAAI,IAAA,eAAK,EAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAC,CAAC,CAAC;KAClE;AACH,CAAC;AARD,4CAQC"}
@@ -0,0 +1,4 @@
1
+ import { JwtPayload } from '@shopify/shopify-api';
2
+ import type { BasicParams } from '../../types';
3
+ export declare function validateSessionToken({ api, logger }: BasicParams, token: string): Promise<JwtPayload>;
4
+ //# sourceMappingURL=validate-session-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-session-token.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/validate-session-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,wBAAsB,oBAAoB,CACxC,EAAC,GAAG,EAAE,MAAM,EAAC,EAAE,WAAW,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAiBrB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSessionToken = void 0;
4
+ var tslib_1 = require("tslib");
5
+ function validateSessionToken(_a, token) {
6
+ var api = _a.api, logger = _a.logger;
7
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
8
+ var payload, error_1;
9
+ return tslib_1.__generator(this, function (_b) {
10
+ switch (_b.label) {
11
+ case 0:
12
+ logger.debug('Validating session token');
13
+ _b.label = 1;
14
+ case 1:
15
+ _b.trys.push([1, 3, , 4]);
16
+ return [4 /*yield*/, api.session.decodeSessionToken(token)];
17
+ case 2:
18
+ payload = _b.sent();
19
+ logger.debug('Session token is valid', {
20
+ payload: JSON.stringify(payload),
21
+ });
22
+ return [2 /*return*/, payload];
23
+ case 3:
24
+ error_1 = _b.sent();
25
+ logger.debug("Failed to validate session token: ".concat(error_1.message));
26
+ throw new Response(undefined, {
27
+ status: 401,
28
+ statusText: 'Unauthorized',
29
+ });
30
+ case 4: return [2 /*return*/];
31
+ }
32
+ });
33
+ });
34
+ }
35
+ exports.validateSessionToken = validateSessionToken;
36
+ //# sourceMappingURL=validate-session-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-session-token.js","sourceRoot":"","sources":["../../../../src/auth/helpers/validate-session-token.ts"],"names":[],"mappings":";;;;AAIA,SAAsB,oBAAoB,CACxC,EAA0B,EAC1B,KAAa;QADZ,GAAG,SAAA,EAAE,MAAM,YAAA;;;;;;oBAGZ,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;;;;oBAGvB,qBAAM,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAA;;oBAArD,OAAO,GAAG,SAA2C;oBAC3D,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;wBACrC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;qBACjC,CAAC,CAAC;oBAEH,sBAAO,OAAO,EAAC;;;oBAEf,MAAM,CAAC,KAAK,CAAC,4CAAqC,OAAK,CAAC,OAAO,CAAE,CAAC,CAAC;oBACnE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;wBAC5B,MAAM,EAAE,GAAG;wBACX,UAAU,EAAE,cAAc;qBAC3B,CAAC,CAAC;;;;;CAEN;AApBD,oDAoBC"}
@@ -0,0 +1,3 @@
1
+ import { BasicParams, LoginError } from '../../types';
2
+ export declare function loginFactory(params: BasicParams): (request: Request) => Promise<LoginError | never>;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../src/auth/login/login.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAEpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,aAGT,OAAO,KAAG,QAAQ,UAAU,GAAG,KAAK,CAAC,CA2C3E"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loginFactory = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var server_runtime_1 = require("@remix-run/server-runtime");
6
+ var types_1 = require("../../types");
7
+ function loginFactory(params) {
8
+ var api = params.api, config = params.config, logger = params.logger;
9
+ return function login(request) {
10
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
11
+ var url, shopParam, shop, _a, shopWithoutProtocol, shopWithDomain, sanitizedShop, redirectUrl;
12
+ return tslib_1.__generator(this, function (_b) {
13
+ switch (_b.label) {
14
+ case 0:
15
+ if (!config.canUseLoginForm) {
16
+ logger.debug('Login endpoint not available for Shopify Admin custom apps');
17
+ throw new Response(undefined, { status: 404 });
18
+ }
19
+ url = new URL(request.url);
20
+ shopParam = url.searchParams.get('shop');
21
+ if (request.method === 'GET' && !shopParam) {
22
+ return [2 /*return*/, {}];
23
+ }
24
+ _a = shopParam;
25
+ if (_a) return [3 /*break*/, 2];
26
+ return [4 /*yield*/, request.formData()];
27
+ case 1:
28
+ _a = (_b.sent()).get('shop');
29
+ _b.label = 2;
30
+ case 2:
31
+ shop = _a;
32
+ if (!shop) {
33
+ logger.debug('Missing shop parameter', { shop: shop });
34
+ return [2 /*return*/, { shop: types_1.LoginErrorType.MissingShop }];
35
+ }
36
+ shopWithoutProtocol = shop.replace(/^https?:\/\//, '');
37
+ shopWithDomain = (shop === null || shop === void 0 ? void 0 : shop.indexOf('.')) === -1
38
+ ? "".concat(shopWithoutProtocol, ".myshopify.com")
39
+ : shopWithoutProtocol;
40
+ sanitizedShop = api.utils.sanitizeShop(shopWithDomain);
41
+ if (!sanitizedShop) {
42
+ logger.debug('Invalid shop parameter', { shop: shop });
43
+ return [2 /*return*/, { shop: types_1.LoginErrorType.InvalidShop }];
44
+ }
45
+ redirectUrl = "".concat(config.appUrl).concat(config.auth.path, "?shop=").concat(sanitizedShop);
46
+ logger.info("Redirecting login request to ".concat(redirectUrl), {
47
+ shop: sanitizedShop,
48
+ });
49
+ throw (0, server_runtime_1.redirect)(redirectUrl);
50
+ }
51
+ });
52
+ });
53
+ };
54
+ }
55
+ exports.loginFactory = loginFactory;
56
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../../src/auth/login/login.ts"],"names":[],"mappings":";;;;AAAA,4DAAmD;AAEnD,qCAAoE;AAEpE,SAAgB,YAAY,CAAC,MAAmB;IACvC,IAAA,GAAG,GAAoB,MAAM,IAA1B,EAAE,MAAM,GAAY,MAAM,OAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;IAErC,OAAO,SAAe,KAAK,CAAC,OAAgB;;;;;;wBAC1C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;4BAC3B,MAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D,CAAC;4BACF,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;yBAC9C;wBAEK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC3B,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;4BAC1C,sBAAO,EAAE,EAAC;yBACX;wBAGC,KAAA,SAAS,CAAA;gCAAT,wBAAS;wBAAM,qBAAM,OAAO,CAAC,QAAQ,EAAE,EAAA;;wBAA1B,KAAC,CAAC,SAAwB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAY,CAAA;;;wBAD3D,IAAI,KACuD;wBAEjE,IAAI,CAAC,IAAI,EAAE;4BACT,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,MAAA,EAAC,CAAC,CAAC;4BAC/C,sBAAO,EAAC,IAAI,EAAE,sBAAc,CAAC,WAAW,EAAC,EAAC;yBAC3C;wBAEK,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;wBACvD,cAAc,GAClB,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,GAAG,CAAC,MAAK,CAAC,CAAC;4BACvB,CAAC,CAAC,UAAG,mBAAmB,mBAAgB;4BACxC,CAAC,CAAC,mBAAmB,CAAC;wBACpB,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;wBAE7D,IAAI,CAAC,aAAa,EAAE;4BAClB,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,MAAA,EAAC,CAAC,CAAC;4BAC/C,sBAAO,EAAC,IAAI,EAAE,sBAAc,CAAC,WAAW,EAAC,EAAC;yBAC3C;wBAEK,WAAW,GAAG,UAAG,MAAM,CAAC,MAAM,SAAG,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAS,aAAa,CAAE,CAAC;wBAEhF,MAAM,CAAC,IAAI,CAAC,uCAAgC,WAAW,CAAE,EAAE;4BACzD,IAAI,EAAE,aAAa;yBACpB,CAAC,CAAC;wBAEH,MAAM,IAAA,yBAAQ,EAAC,WAAW,CAAC,CAAC;;;;KAC7B,CAAC;AACJ,CAAC;AA9CD,oCA8CC"}
@@ -0,0 +1,4 @@
1
+ import type { BasicParams } from '../../types';
2
+ import type { PublicContext } from './types';
3
+ export declare function authenticatePublicFactory(params: BasicParams): (request: Request) => Promise<PublicContext>;
4
+ //# sourceMappingURL=authenticate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../../../../src/auth/public/authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAO7C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAE3C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,aAEhD,OAAO,KACf,QAAQ,aAAa,CAAC,CAqB1B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authenticatePublicFactory = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var helpers_1 = require("../helpers");
6
+ function authenticatePublicFactory(params) {
7
+ return function authenticatePublic(request) {
8
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
9
+ var logger, sessionTokenHeader;
10
+ var _a;
11
+ return tslib_1.__generator(this, function (_b) {
12
+ switch (_b.label) {
13
+ case 0:
14
+ logger = params.logger;
15
+ (0, helpers_1.rejectBotRequest)(params, request);
16
+ sessionTokenHeader = (0, helpers_1.getSessionTokenHeader)(request);
17
+ logger.info('Authenticating public request');
18
+ if (!sessionTokenHeader) {
19
+ logger.debug('Request did not contain a session token');
20
+ throw new Response(undefined, {
21
+ status: 401,
22
+ statusText: 'Unauthorized',
23
+ });
24
+ }
25
+ _a = {};
26
+ return [4 /*yield*/, (0, helpers_1.validateSessionToken)(params, sessionTokenHeader)];
27
+ case 1: return [2 /*return*/, (_a.sessionToken = _b.sent(),
28
+ _a)];
29
+ }
30
+ });
31
+ });
32
+ };
33
+ }
34
+ exports.authenticatePublicFactory = authenticatePublicFactory;
35
+ //# sourceMappingURL=authenticate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../src/auth/public/authenticate.ts"],"names":[],"mappings":";;;;AACA,sCAIoB;AAIpB,SAAgB,yBAAyB,CAAC,MAAmB;IAC3D,OAAO,SAAe,kBAAkB,CACtC,OAAgB;;;;;;;wBAET,MAAM,GAAI,MAAM,OAAV,CAAW;wBAExB,IAAA,0BAAgB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBAE5B,kBAAkB,GAAG,IAAA,+BAAqB,EAAC,OAAO,CAAC,CAAC;wBAE1D,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;wBAE7C,IAAI,CAAC,kBAAkB,EAAE;4BACvB,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;4BACxD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;gCAC5B,MAAM,EAAE,GAAG;gCACX,UAAU,EAAE,cAAc;6BAC3B,CAAC,CAAC;yBACJ;;wBAGe,qBAAM,IAAA,8BAAoB,EAAC,MAAM,EAAE,kBAAkB,CAAC,EAAA;4BADtE,uBACE,eAAY,GAAE,SAAsD;iCACpE;;;;KACH,CAAC;AACJ,CAAC;AAxBD,8DAwBC"}
@@ -0,0 +1,27 @@
1
+ import { JwtPayload } from '@shopify/shopify-api';
2
+ /**
3
+ * Authenticated Context for a public request
4
+ */
5
+ export interface PublicContext {
6
+ /**
7
+ * The decoded and validated session token for the request
8
+ *
9
+ * The payload of the Session Token is described here: {@link https://shopify.dev/docs/apps/auth/oauth/session-tokens#payload}
10
+ *
11
+ * @example
12
+ * Getting your app's store specific widget data using the session token
13
+ * // app/routes/public/widgets.ts
14
+ * import { LoaderArgs, json } from "@remix-run/node";
15
+ * import { shopify } from "../shopify.server";
16
+ * import { getWidgets } from "~/db/widgets.server";
17
+ *
18
+ * export const loader = async ({ request }: LoaderArgs) => {
19
+ * const { sessionToken } = await shopify.authenticate.public(
20
+ * request
21
+ * );
22
+ * return json(await getWidgets({shop: sessionToken.dest}));
23
+ * };
24
+ */
25
+ sessionToken: JwtPayload;
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/auth/public/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,EAAE,UAAU,CAAC;CAC1B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/auth/public/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { ShopifyRestResources } from '@shopify/shopify-api';
2
+ import type { BasicParams, MandatoryTopics } from '../../types';
3
+ import type { WebhookContext } from './types';
4
+ export declare function authenticateWebhookFactory<Resources extends ShopifyRestResources, Topics extends string | number | symbol | MandatoryTopics>({ api, config, logger }: BasicParams): (request: Request) => Promise<WebhookContext<Topics, Resources>>;
5
+ //# sourceMappingURL=authenticate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAEtE,OAAO,KAAK,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAE5C,wBAAgB,0BAA0B,CACxC,SAAS,SAAS,oBAAoB,EACtC,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,EACzD,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE,WAAW,aAEvB,OAAO,KACf,QAAQ,eAAe,MAAM,EAAE,SAAS,CAAC,CAAC,CAyD9C"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authenticateWebhookFactory = void 0;
4
+ var tslib_1 = require("tslib");
5
+ function authenticateWebhookFactory(_a) {
6
+ var api = _a.api, config = _a.config, logger = _a.logger;
7
+ return function authenticate(request) {
8
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
9
+ var rawBody, check, sessionId, session, restClient, graphqlClient;
10
+ return tslib_1.__generator(this, function (_a) {
11
+ switch (_a.label) {
12
+ case 0:
13
+ if (request.method !== 'POST') {
14
+ logger.debug('Received a non-POST request for a webhook. Only POST requests are allowed.', { url: request.url, method: request.method });
15
+ throw new Response(undefined, {
16
+ status: 405,
17
+ statusText: 'Method not allowed',
18
+ });
19
+ }
20
+ return [4 /*yield*/, request.text()];
21
+ case 1:
22
+ rawBody = _a.sent();
23
+ return [4 /*yield*/, api.webhooks.validate({
24
+ rawBody: rawBody,
25
+ rawRequest: request,
26
+ })];
27
+ case 2:
28
+ check = _a.sent();
29
+ if (!check.valid) {
30
+ logger.debug('Webhook validation failed', check);
31
+ throw new Response(undefined, { status: 400, statusText: 'Bad Request' });
32
+ }
33
+ sessionId = api.session.getOfflineId(check.domain);
34
+ return [4 /*yield*/, config.sessionStorage.loadSession(sessionId)];
35
+ case 3:
36
+ session = _a.sent();
37
+ if (!session) {
38
+ logger.debug('No session found for shop', check);
39
+ throw new Response(undefined, { status: 404, statusText: 'Not found' });
40
+ }
41
+ restClient = new api.clients.Rest({
42
+ session: session,
43
+ apiVersion: check.apiVersion,
44
+ });
45
+ graphqlClient = new api.clients.Graphql({
46
+ session: session,
47
+ apiVersion: check.apiVersion,
48
+ });
49
+ Object.entries(api.rest).forEach(function (_a) {
50
+ var _b = tslib_1.__read(_a, 2), name = _b[0], resource = _b[1];
51
+ Reflect.set(restClient, name, resource);
52
+ });
53
+ return [2 /*return*/, {
54
+ apiVersion: check.apiVersion,
55
+ shop: check.domain,
56
+ topic: check.topic,
57
+ webhookId: check.webhookId,
58
+ payload: JSON.parse(rawBody),
59
+ session: session,
60
+ admin: {
61
+ rest: restClient,
62
+ graphql: graphqlClient,
63
+ },
64
+ }];
65
+ }
66
+ });
67
+ });
68
+ };
69
+ }
70
+ exports.authenticateWebhookFactory = authenticateWebhookFactory;
71
+ //# sourceMappingURL=authenticate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/authenticate.ts"],"names":[],"mappings":";;;;AAMA,SAAgB,0BAA0B,CAGxC,EAAkC;QAAjC,GAAG,SAAA,EAAE,MAAM,YAAA,EAAE,MAAM,YAAA;IACpB,OAAO,SAAe,YAAY,CAChC,OAAgB;;;;;;wBAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;4BAC7B,MAAM,CAAC,KAAK,CACV,4EAA4E,EAC5E,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C,CAAC;4BACF,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;gCAC5B,MAAM,EAAE,GAAG;gCACX,UAAU,EAAE,oBAAoB;6BACjC,CAAC,CAAC;yBACJ;wBAEe,qBAAM,OAAO,CAAC,IAAI,EAAE,EAAA;;wBAA9B,OAAO,GAAG,SAAoB;wBAEtB,qBAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gCACxC,OAAO,SAAA;gCACP,UAAU,EAAE,OAAO;6BACpB,CAAC,EAAA;;wBAHI,KAAK,GAAG,SAGZ;wBAEF,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;4BAChB,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;4BACjD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAC,CAAC,CAAC;yBACzE;wBAEK,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACzC,qBAAM,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,EAAA;;wBAA5D,OAAO,GAAG,SAAkD;wBAClE,IAAI,CAAC,OAAO,EAAE;4BACZ,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;4BACjD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAC,CAAC,CAAC;yBACvE;wBAEK,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;4BACtC,OAAO,SAAA;4BACP,UAAU,EAAE,KAAK,CAAC,UAAwB;yBAC3C,CAAC,CAAC;wBACG,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;4BAC5C,OAAO,SAAA;4BACP,UAAU,EAAE,KAAK,CAAC,UAAwB;yBAC3C,CAAC,CAAC;wBAEH,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAC,EAAgB;gCAAhB,KAAA,qBAAgB,EAAf,IAAI,QAAA,EAAE,QAAQ,QAAA;4BAC/C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;wBAC1C,CAAC,CAAC,CAAC;wBAEH,sBAAO;gCACL,UAAU,EAAE,KAAK,CAAC,UAAU;gCAC5B,IAAI,EAAE,KAAK,CAAC,MAAM;gCAClB,KAAK,EAAE,KAAK,CAAC,KAAe;gCAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;gCAC1B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gCAC5B,OAAO,SAAA;gCACP,KAAK,EAAE;oCACL,IAAI,EAAE,UAA2C;oCACjD,OAAO,EAAE,aAAa;iCACvB;6BACF,EAAC;;;;KACH,CAAC;AACJ,CAAC;AA/DD,gEA+DC"}
@@ -0,0 +1,2 @@
1
+ export { registerWebhooksFactory } from './register';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerWebhooksFactory = void 0;
4
+ var register_1 = require("./register");
5
+ Object.defineProperty(exports, "registerWebhooksFactory", { enumerable: true, get: function () { return register_1.registerWebhooksFactory; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/index.ts"],"names":[],"mappings":";;;AAAA,uCAAmD;AAA3C,mHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,4 @@
1
+ import type { BasicParams } from '../../types';
2
+ import type { RegisterWebhooksOptions } from './types';
3
+ export declare function registerWebhooksFactory({ api, logger }: BasicParams): ({ session }: RegisterWebhooksOptions) => Promise<import("@shopify/shopify-api").RegisterReturn>;
4
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,SAAS,CAAC;AAErD,wBAAgB,uBAAuB,CAAC,EAAC,GAAG,EAAE,MAAM,EAAC,EAAE,WAAW,iBACd,uBAAuB,4DAuB1E"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerWebhooksFactory = void 0;
4
+ var tslib_1 = require("tslib");
5
+ function registerWebhooksFactory(_a) {
6
+ var api = _a.api, logger = _a.logger;
7
+ return function registerWebhooks(_a) {
8
+ var session = _a.session;
9
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
10
+ return tslib_1.__generator(this, function (_b) {
11
+ return [2 /*return*/, api.webhooks.register({ session: session }).then(function (response) {
12
+ Object.entries(response).forEach(function (_a) {
13
+ var _b = tslib_1.__read(_a, 2), topic = _b[0], topicResults = _b[1];
14
+ topicResults.forEach(function (_a) {
15
+ var success = _a.success, rest = tslib_1.__rest(_a, ["success"]);
16
+ if (success) {
17
+ logger.debug('Registered webhook', {
18
+ topic: topic,
19
+ shop: session.shop,
20
+ operation: rest.operation,
21
+ });
22
+ }
23
+ else {
24
+ logger.error('Failed to register webhook', {
25
+ topic: topic,
26
+ shop: session.shop,
27
+ result: JSON.stringify(rest.result),
28
+ });
29
+ }
30
+ });
31
+ });
32
+ return response;
33
+ })];
34
+ });
35
+ });
36
+ };
37
+ }
38
+ exports.registerWebhooksFactory = registerWebhooksFactory;
39
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/register.ts"],"names":[],"mappings":";;;;AAIA,SAAgB,uBAAuB,CAAC,EAA0B;QAAzB,GAAG,SAAA,EAAE,MAAM,YAAA;IAClD,OAAO,SAAe,gBAAgB,CAAC,EAAkC;YAAjC,OAAO,aAAA;;;gBAC7C,sBAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAC,OAAO,SAAA,EAAC,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;wBACpD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAC,EAAqB;gCAArB,KAAA,qBAAqB,EAApB,KAAK,QAAA,EAAE,YAAY,QAAA;4BACpD,YAAY,CAAC,OAAO,CAAC,UAAC,EAAkB;gCAAjB,IAAA,OAAO,aAAA,EAAK,IAAI,sBAAjB,WAAkB,CAAD;gCACrC,IAAI,OAAO,EAAE;oCACX,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;wCACjC,KAAK,OAAA;wCACL,IAAI,EAAE,OAAO,CAAC,IAAI;wCAClB,SAAS,EAAE,IAAI,CAAC,SAAS;qCAC1B,CAAC,CAAC;iCACJ;qCAAM;oCACL,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;wCACzC,KAAK,OAAA;wCACL,IAAI,EAAE,OAAO,CAAC,IAAI;wCAClB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;qCACpC,CAAC,CAAC;iCACJ;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBAEH,OAAO,QAAQ,CAAC;oBAClB,CAAC,CAAC,EAAC;;;KACJ,CAAC;AACJ,CAAC;AAxBD,0DAwBC"}
@@ -0,0 +1,18 @@
1
+ import { Session, Shopify, ShopifyRestResources } from '@shopify/shopify-api';
2
+ import type { JSONValue } from '../../types';
3
+ export interface RegisterWebhooksOptions {
4
+ session: Session;
5
+ }
6
+ export interface WebhookContext<Topics = string | number | symbol, Resources extends ShopifyRestResources = any> {
7
+ apiVersion: string;
8
+ shop: string;
9
+ topic: Topics;
10
+ webhookId: string;
11
+ payload: JSONValue;
12
+ session: Session;
13
+ admin: {
14
+ rest: InstanceType<Shopify['clients']['Rest']> & Resources;
15
+ graphql: InstanceType<Shopify['clients']['Graphql']>;
16
+ };
17
+ }
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc,CAC7B,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EACjC,SAAS,SAAS,oBAAoB,GAAG,GAAG;IAE5C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QACL,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;QAC3D,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;KACtD,CAAC;CACH"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { Session } from '@shopify/shopify-api';
2
+ import type { BasicParams } from '../types';
3
+ import type { CancelBillingOptions } from './types';
4
+ export declare function cancelBillingFactory(params: BasicParams, request: Request, session: Session): (options: CancelBillingOptions) => Promise<import("@shopify/shopify-api").AppSubscription>;
5
+ //# sourceMappingURL=cancel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../../src/billing/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAG1C,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAElD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,aAE6B,oBAAoB,6DAuBlE"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cancelBillingFactory = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var shopify_api_1 = require("@shopify/shopify-api");
6
+ var helpers_1 = require("../auth/helpers");
7
+ function cancelBillingFactory(params, request, session) {
8
+ return function cancelBilling(options) {
9
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
10
+ var api, logger, error_1;
11
+ return tslib_1.__generator(this, function (_a) {
12
+ switch (_a.label) {
13
+ case 0:
14
+ api = params.api, logger = params.logger;
15
+ logger.debug('Cancelling billing', tslib_1.__assign({ shop: session.shop }, options));
16
+ _a.label = 1;
17
+ case 1:
18
+ _a.trys.push([1, 3, , 7]);
19
+ return [4 /*yield*/, api.billing.cancel({
20
+ session: session,
21
+ subscriptionId: options.subscriptionId,
22
+ isTest: options.isTest,
23
+ prorate: options.prorate,
24
+ })];
25
+ case 2: return [2 /*return*/, _a.sent()];
26
+ case 3:
27
+ error_1 = _a.sent();
28
+ if (!(error_1 instanceof shopify_api_1.HttpResponseError && error_1.response.code === 401)) return [3 /*break*/, 5];
29
+ logger.debug('API token was invalid, redirecting to OAuth', {
30
+ shop: session.shop,
31
+ });
32
+ return [4 /*yield*/, (0, helpers_1.redirectToAuthPage)(params, request, session.shop)];
33
+ case 4: throw _a.sent();
34
+ case 5: throw error_1;
35
+ case 6: return [3 /*break*/, 7];
36
+ case 7: return [2 /*return*/];
37
+ }
38
+ });
39
+ });
40
+ };
41
+ }
42
+ exports.cancelBillingFactory = cancelBillingFactory;
43
+ //# sourceMappingURL=cancel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/billing/cancel.ts"],"names":[],"mappings":";;;;AAAA,oDAAgE;AAGhE,2CAAmD;AAInD,SAAgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,OAAgB;IAEhB,OAAO,SAAe,aAAa,CAAC,OAA6B;;;;;;wBACxD,GAAG,GAAY,MAAM,IAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;wBAE7B,MAAM,CAAC,KAAK,CAAC,oBAAoB,qBAAG,IAAI,EAAE,OAAO,CAAC,IAAI,IAAK,OAAO,EAAE,CAAC;;;;wBAG5D,qBAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gCAC9B,OAAO,SAAA;gCACP,cAAc,EAAE,OAAO,CAAC,cAAc;gCACtC,MAAM,EAAE,OAAO,CAAC,MAAM;gCACtB,OAAO,EAAE,OAAO,CAAC,OAAO;6BACzB,CAAC,EAAA;4BALF,sBAAO,SAKL,EAAC;;;6BAEC,CAAA,OAAK,YAAY,+BAAiB,IAAI,OAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,CAAA,EAAjE,wBAAiE;wBACnE,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;4BAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;yBACnB,CAAC,CAAC;wBACG,qBAAM,IAAA,4BAAkB,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAA;4BAA7D,MAAM,SAAuD,CAAC;4BAE9D,MAAM,OAAK,CAAC;;;;;;KAGjB,CAAC;AACJ,CAAC;AA5BD,oDA4BC"}