@shopify/shopify-api 7.1.0 → 7.3.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 (58) hide show
  1. package/lib/billing/cancel.d.ts +4 -0
  2. package/lib/billing/cancel.d.ts.map +1 -0
  3. package/lib/billing/cancel.js +62 -0
  4. package/lib/billing/cancel.js.map +1 -0
  5. package/lib/billing/check.d.ts +2 -2
  6. package/lib/billing/check.d.ts.map +1 -1
  7. package/lib/billing/check.js +43 -11
  8. package/lib/billing/check.js.map +1 -1
  9. package/lib/billing/index.d.ts +4 -2
  10. package/lib/billing/index.d.ts.map +1 -1
  11. package/lib/billing/index.js +4 -0
  12. package/lib/billing/index.js.map +1 -1
  13. package/lib/billing/request.d.ts +2 -2
  14. package/lib/billing/request.d.ts.map +1 -1
  15. package/lib/billing/request.js +18 -3
  16. package/lib/billing/request.js.map +1 -1
  17. package/lib/billing/subscriptions.d.ts +4 -0
  18. package/lib/billing/subscriptions.d.ts.map +1 -0
  19. package/lib/billing/subscriptions.js +39 -0
  20. package/lib/billing/subscriptions.js.map +1 -0
  21. package/lib/billing/types.d.ts +58 -9
  22. package/lib/billing/types.d.ts.map +1 -1
  23. package/lib/error.d.ts +2 -0
  24. package/lib/error.d.ts.map +1 -1
  25. package/lib/error.js +4 -1
  26. package/lib/error.js.map +1 -1
  27. package/lib/index.d.ts +1 -0
  28. package/lib/index.d.ts.map +1 -1
  29. package/lib/index.js +1 -0
  30. package/lib/index.js.map +1 -1
  31. package/lib/session/index.d.ts +1 -0
  32. package/lib/session/index.d.ts.map +1 -1
  33. package/lib/session/index.js +1 -0
  34. package/lib/session/index.js.map +1 -1
  35. package/lib/version.d.ts +1 -1
  36. package/lib/version.js +1 -1
  37. package/lib/webhooks/index.d.ts +1 -0
  38. package/lib/webhooks/index.d.ts.map +1 -1
  39. package/lib/webhooks/index.js +2 -0
  40. package/lib/webhooks/index.js.map +1 -1
  41. package/lib/webhooks/process.d.ts +2 -2
  42. package/lib/webhooks/process.d.ts.map +1 -1
  43. package/lib/webhooks/process.js +77 -115
  44. package/lib/webhooks/process.js.map +1 -1
  45. package/lib/webhooks/register.d.ts.map +1 -1
  46. package/lib/webhooks/register.js +2 -0
  47. package/lib/webhooks/register.js.map +1 -1
  48. package/lib/webhooks/registry.js +5 -1
  49. package/lib/webhooks/registry.js.map +1 -1
  50. package/lib/webhooks/types.d.ts +32 -3
  51. package/lib/webhooks/types.d.ts.map +1 -1
  52. package/lib/webhooks/types.js +10 -1
  53. package/lib/webhooks/types.js.map +1 -1
  54. package/lib/webhooks/validate.d.ts +4 -0
  55. package/lib/webhooks/validate.d.ts.map +1 -0
  56. package/lib/webhooks/validate.js +86 -0
  57. package/lib/webhooks/validate.js.map +1 -0
  58. package/package.json +1 -1
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFactory = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const http_1 = require("../../runtime/http");
6
+ const crypto_1 = require("../../runtime/crypto");
7
+ const types_1 = require("../../runtime/crypto/types");
8
+ const types_2 = require("../types");
9
+ const safe_compare_1 = require("../auth/oauth/safe-compare");
10
+ const logger_1 = require("../logger");
11
+ const types_3 = require("./types");
12
+ const registry_1 = require("./registry");
13
+ const HANDLER_PROPERTIES = {
14
+ apiVersion: types_2.ShopifyHeader.ApiVersion,
15
+ domain: types_2.ShopifyHeader.Domain,
16
+ hmac: types_2.ShopifyHeader.Hmac,
17
+ topic: types_2.ShopifyHeader.Topic,
18
+ webhookId: types_2.ShopifyHeader.WebhookId,
19
+ };
20
+ function validateFactory(config) {
21
+ return function validate(_a) {
22
+ var { rawBody } = _a, adapterArgs = tslib_1.__rest(_a, ["rawBody"]);
23
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
24
+ const request = yield (0, http_1.abstractConvertRequest)(adapterArgs);
25
+ const log = (0, logger_1.logger)(config);
26
+ const webhookCheck = checkWebhookRequest(rawBody, request.headers);
27
+ if (!webhookCheck.valid) {
28
+ yield log.debug('Received malformed webhook request', webhookCheck);
29
+ return webhookCheck;
30
+ }
31
+ const { hmac, valid: _valid } = webhookCheck, loggingContext = tslib_1.__rest(webhookCheck, ["hmac", "valid"]);
32
+ yield log.debug('Webhook request is well formed', loggingContext);
33
+ if (yield checkWebhookHmac(config.apiSecretKey, rawBody, hmac)) {
34
+ yield log.debug('Webhook request is valid', loggingContext);
35
+ return webhookCheck;
36
+ }
37
+ else {
38
+ yield log.debug('Webhook validation failed', loggingContext);
39
+ if (config.isCustomStoreApp) {
40
+ log.deprecated('8.0.0', "apiSecretKey should be set to the custom store app's API secret key, so that webhook validation succeeds. adminApiAccessToken should be set to the custom store app's Admin API access token");
41
+ }
42
+ return {
43
+ valid: false,
44
+ reason: types_3.WebhookValidationErrorReason.InvalidHmac,
45
+ };
46
+ }
47
+ });
48
+ };
49
+ }
50
+ exports.validateFactory = validateFactory;
51
+ function checkWebhookRequest(rawBody, headers) {
52
+ if (!rawBody.length) {
53
+ return {
54
+ valid: false,
55
+ reason: types_3.WebhookValidationErrorReason.MissingBody,
56
+ };
57
+ }
58
+ const missingHeaders = [];
59
+ const headerValues = Object.entries(HANDLER_PROPERTIES).reduce((acc, [property, headerName]) => {
60
+ const headerValue = (0, http_1.getHeader)(headers, headerName);
61
+ if (headerValue) {
62
+ acc[property] = headerValue;
63
+ }
64
+ else {
65
+ missingHeaders.push(headerName);
66
+ }
67
+ return acc;
68
+ }, {});
69
+ if (missingHeaders.length) {
70
+ return {
71
+ valid: false,
72
+ reason: types_3.WebhookValidationErrorReason.MissingHeaders,
73
+ missingHeaders,
74
+ };
75
+ }
76
+ else {
77
+ return Object.assign(Object.assign({ valid: true }, headerValues), { topic: (0, registry_1.topicForStorage)(headerValues.topic) });
78
+ }
79
+ }
80
+ function checkWebhookHmac(secret, rawBody, hmac) {
81
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
82
+ const generatedHash = yield (0, crypto_1.createSHA256HMAC)(secret, rawBody, types_1.HashFormat.Base64);
83
+ return (0, safe_compare_1.safeCompare)(generatedHash, hmac);
84
+ });
85
+ }
86
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopify/shopify-api",
3
- "version": "7.1.0",
3
+ "version": "7.3.0",
4
4
  "description": "Shopify API Library for Node - accelerate development with support for authentication, graphql proxy, webhooks",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",