@blamejs/blamejs-shop 0.5.19 → 0.5.21

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 (194) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -0
  3. package/SECURITY.md +17 -0
  4. package/lib/addresses.js +2 -2
  5. package/lib/admin.js +49 -45
  6. package/lib/affiliates.js +7 -23
  7. package/lib/announcement-bar.js +5 -22
  8. package/lib/api-keys.js +4 -13
  9. package/lib/asset-manifest.json +1 -1
  10. package/lib/banner-ab-tests.js +5 -9
  11. package/lib/blog-articles.js +8 -26
  12. package/lib/captcha-gate.js +7 -17
  13. package/lib/carrier-accounts.js +3 -10
  14. package/lib/catalog-drafts.js +5 -12
  15. package/lib/category-navigation.js +4 -20
  16. package/lib/cms-blocks.js +4 -7
  17. package/lib/compliance-export.js +4 -11
  18. package/lib/consent-ledger.js +2 -4
  19. package/lib/cost-layers.js +56 -21
  20. package/lib/customer-import.js +2 -2
  21. package/lib/customer-notes.js +7 -23
  22. package/lib/customer-roles.js +3 -5
  23. package/lib/customer-segments.js +17 -14
  24. package/lib/customer-surveys.js +7 -14
  25. package/lib/customers.js +2 -4
  26. package/lib/dispute-resolution.js +5 -13
  27. package/lib/dropship-forwarding.js +3 -5
  28. package/lib/dunning.js +2 -7
  29. package/lib/email-ab-tests.js +4 -8
  30. package/lib/email-campaigns.js +25 -14
  31. package/lib/email-warmup.js +2 -7
  32. package/lib/experiments.js +6 -10
  33. package/lib/externaldb-d1.js +78 -44
  34. package/lib/geolocation.js +18 -28
  35. package/lib/gift-options.js +5 -23
  36. package/lib/knowledge-base.js +7 -22
  37. package/lib/line-gift-wrap.js +3 -17
  38. package/lib/live-chat.js +5 -18
  39. package/lib/metered-usage.js +3 -8
  40. package/lib/notifications.js +3 -7
  41. package/lib/operator-accounts.js +3 -5
  42. package/lib/operator-approvals.js +6 -8
  43. package/lib/operator-audit-log.js +2 -7
  44. package/lib/operator-help-center.js +5 -21
  45. package/lib/operator-inbox.js +4 -11
  46. package/lib/operator-roles.js +5 -7
  47. package/lib/order-escalation.js +2 -2
  48. package/lib/order-export.js +24 -20
  49. package/lib/order-notes.js +4 -14
  50. package/lib/order-ratings.js +4 -10
  51. package/lib/payment-methods.js +5 -13
  52. package/lib/payment-retries.js +2 -7
  53. package/lib/payment.js +103 -58
  54. package/lib/pixel-events.js +8 -23
  55. package/lib/plan-changes.js +2 -7
  56. package/lib/product-qa.js +4 -8
  57. package/lib/promo-banners.js +7 -15
  58. package/lib/purchase-orders.js +3 -6
  59. package/lib/push-notifications.js +7 -32
  60. package/lib/pwa-manifest.js +6 -11
  61. package/lib/quotes.js +5 -9
  62. package/lib/referrals.js +10 -6
  63. package/lib/reviews.js +4 -10
  64. package/lib/robots-config.js +6 -14
  65. package/lib/sales-tax-filings.js +2 -2
  66. package/lib/search-facets.js +5 -5
  67. package/lib/search-ranking.js +4 -7
  68. package/lib/search-synonyms.js +7 -21
  69. package/lib/security-middleware.js +125 -70
  70. package/lib/seller-signup.js +10 -26
  71. package/lib/sidebar-widgets.js +6 -15
  72. package/lib/site-redirects.js +49 -137
  73. package/lib/sitemap-generator.js +3 -7
  74. package/lib/sms-dispatcher.js +7 -23
  75. package/lib/stock-receipts.js +4 -10
  76. package/lib/storefront-dashboards.js +2 -10
  77. package/lib/storefront-forms.js +9 -22
  78. package/lib/storefront-pages.js +6 -20
  79. package/lib/storefront.js +21 -23
  80. package/lib/subscription-billing.js +3 -8
  81. package/lib/subscription-controls.js +2 -7
  82. package/lib/suggestion-box.js +9 -26
  83. package/lib/support-tickets.js +6 -24
  84. package/lib/tax-remittance.js +2 -2
  85. package/lib/tenants.js +2 -7
  86. package/lib/text-guard.js +137 -35
  87. package/lib/theme-assets.js +4 -16
  88. package/lib/translations.js +3 -6
  89. package/lib/trust-badges.js +4 -7
  90. package/lib/vendor/MANIFEST.json +107 -97
  91. package/lib/vendor/blamejs/CHANGELOG.md +180 -0
  92. package/lib/vendor/blamejs/NOTICE +14 -10
  93. package/lib/vendor/blamejs/README.md +17 -5
  94. package/lib/vendor/blamejs/index.js +2 -0
  95. package/lib/vendor/blamejs/lib/acme.js +9 -9
  96. package/lib/vendor/blamejs/lib/api-snapshot.js +35 -16
  97. package/lib/vendor/blamejs/lib/app-shutdown.js +1 -1
  98. package/lib/vendor/blamejs/lib/archive-adapters.js +1 -1
  99. package/lib/vendor/blamejs/lib/archive.js +13 -24
  100. package/lib/vendor/blamejs/lib/auth/access-lock.js +2 -1
  101. package/lib/vendor/blamejs/lib/auth/bot-challenge.js +3 -6
  102. package/lib/vendor/blamejs/lib/auth/ciba.js +32 -3
  103. package/lib/vendor/blamejs/lib/auth/oauth.js +65 -8
  104. package/lib/vendor/blamejs/lib/auth/password.js +1 -1
  105. package/lib/vendor/blamejs/lib/auth/saml.js +21 -3
  106. package/lib/vendor/blamejs/lib/auth-bot-challenge.js +3 -3
  107. package/lib/vendor/blamejs/lib/backup/index.js +5 -5
  108. package/lib/vendor/blamejs/lib/case-fold-classes.js +491 -0
  109. package/lib/vendor/blamejs/lib/codepoint-class.js +131 -0
  110. package/lib/vendor/blamejs/lib/constants.js +79 -0
  111. package/lib/vendor/blamejs/lib/db-declare-view.js +8 -2
  112. package/lib/vendor/blamejs/lib/error-page.js +20 -1
  113. package/lib/vendor/blamejs/lib/external-db.js +5 -1
  114. package/lib/vendor/blamejs/lib/flag-evaluation-context.js +24 -6
  115. package/lib/vendor/blamejs/lib/flag.js +28 -2
  116. package/lib/vendor/blamejs/lib/framework-schema.js +14 -3
  117. package/lib/vendor/blamejs/lib/guard-regex.js +2345 -89
  118. package/lib/vendor/blamejs/lib/http-client.js +217 -40
  119. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  120. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +3 -2
  121. package/lib/vendor/blamejs/lib/mail-dav.js +26 -26
  122. package/lib/vendor/blamejs/lib/mail-deploy.js +10 -10
  123. package/lib/vendor/blamejs/lib/mail-scan.js +3 -0
  124. package/lib/vendor/blamejs/lib/mail-store.js +7 -1
  125. package/lib/vendor/blamejs/lib/mail.js +5 -1
  126. package/lib/vendor/blamejs/lib/middleware/age-gate.js +3 -2
  127. package/lib/vendor/blamejs/lib/middleware/api-encrypt.js +1 -1
  128. package/lib/vendor/blamejs/lib/middleware/assetlinks.js +2 -1
  129. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +3 -2
  130. package/lib/vendor/blamejs/lib/middleware/bearer-auth.js +2 -1
  131. package/lib/vendor/blamejs/lib/middleware/compression.js +1 -1
  132. package/lib/vendor/blamejs/lib/middleware/cors.js +1 -1
  133. package/lib/vendor/blamejs/lib/middleware/csp-report.js +5 -5
  134. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +2 -1
  135. package/lib/vendor/blamejs/lib/middleware/daily-byte-quota.js +2 -2
  136. package/lib/vendor/blamejs/lib/middleware/deny-response.js +2 -1
  137. package/lib/vendor/blamejs/lib/middleware/dpop.js +2 -2
  138. package/lib/vendor/blamejs/lib/middleware/fetch-metadata.js +2 -1
  139. package/lib/vendor/blamejs/lib/middleware/flag-context.js +17 -0
  140. package/lib/vendor/blamejs/lib/middleware/idempotency-key.js +10 -8
  141. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +3 -2
  142. package/lib/vendor/blamejs/lib/middleware/require-aal.js +3 -2
  143. package/lib/vendor/blamejs/lib/middleware/require-auth.js +4 -3
  144. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +4 -3
  145. package/lib/vendor/blamejs/lib/middleware/require-content-type.js +3 -2
  146. package/lib/vendor/blamejs/lib/middleware/require-methods.js +3 -2
  147. package/lib/vendor/blamejs/lib/middleware/require-mtls.js +3 -2
  148. package/lib/vendor/blamejs/lib/middleware/security-txt.js +2 -1
  149. package/lib/vendor/blamejs/lib/middleware/web-app-manifest.js +2 -1
  150. package/lib/vendor/blamejs/lib/network-dns-resolver.js +1 -1
  151. package/lib/vendor/blamejs/lib/network-dns.js +3 -3
  152. package/lib/vendor/blamejs/lib/network-nts.js +35 -14
  153. package/lib/vendor/blamejs/lib/network-proxy.js +42 -4
  154. package/lib/vendor/blamejs/lib/network-smtp-policy.js +1 -1
  155. package/lib/vendor/blamejs/lib/network-tls.js +341 -11
  156. package/lib/vendor/blamejs/lib/nist-crosswalk.js +2 -2
  157. package/lib/vendor/blamejs/lib/ntp-check.js +30 -19
  158. package/lib/vendor/blamejs/lib/object-store/azure-blob.js +1 -1
  159. package/lib/vendor/blamejs/lib/object-store/gcs.js +1 -1
  160. package/lib/vendor/blamejs/lib/object-store/http-put.js +2 -1
  161. package/lib/vendor/blamejs/lib/object-store/sigv4-bucket-ops.js +5 -5
  162. package/lib/vendor/blamejs/lib/object-store/sigv4.js +2 -2
  163. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +4 -2
  164. package/lib/vendor/blamejs/lib/openapi.js +1 -1
  165. package/lib/vendor/blamejs/lib/pqc-agent.js +4 -7
  166. package/lib/vendor/blamejs/lib/problem-details.js +2 -1
  167. package/lib/vendor/blamejs/lib/redis-client.js +12 -1
  168. package/lib/vendor/blamejs/lib/regex-linear.js +1349 -0
  169. package/lib/vendor/blamejs/lib/render.js +531 -7
  170. package/lib/vendor/blamejs/lib/request-helpers.js +181 -5
  171. package/lib/vendor/blamejs/lib/router.js +37 -13
  172. package/lib/vendor/blamejs/lib/safe-async.js +142 -0
  173. package/lib/vendor/blamejs/lib/safe-icap.js +3 -0
  174. package/lib/vendor/blamejs/lib/safe-sql.js +15 -3
  175. package/lib/vendor/blamejs/lib/self-update.js +2 -2
  176. package/lib/vendor/blamejs/lib/testing.js +54 -7
  177. package/lib/vendor/blamejs/lib/validate-opts.js +56 -0
  178. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +62 -25
  179. package/lib/vendor/blamejs/lib/vendor/blamejs-pki.cjs +2004 -142
  180. package/lib/vendor/blamejs/lib/vendor/browser/noble-ciphers.mjs +727 -0
  181. package/lib/vendor/blamejs/lib/vendor/browser/noble-hashes.mjs +1070 -0
  182. package/lib/vendor/blamejs/lib/vendor/browser/noble-post-quantum.mjs +1090 -0
  183. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +510 -227
  184. package/lib/vendor/blamejs/lib/webhook-hmac.js +19 -2
  185. package/lib/vendor/blamejs/lib/webhook.js +1 -1
  186. package/lib/vendor/blamejs/lib/ws-client.js +24 -2
  187. package/lib/vendor/blamejs/package.json +1 -1
  188. package/lib/vendor/blamejs/sbom.cdx.json +6 -6
  189. package/lib/vendor-invoices.js +3 -6
  190. package/lib/vendors.js +5 -19
  191. package/lib/webhook-receiver.js +46 -83
  192. package/lib/webhook-subscriptions.js +3 -13
  193. package/lib/wishlist-sharing.js +5 -10
  194. package/package.json +1 -1
@@ -341,7 +341,7 @@ function create(config) {
341
341
  var headers = _signed("DELETE", url, {});
342
342
  return _httpRequest("DELETE", url, headers, null, reqOpts).then(
343
343
  function () { return true; },
344
- function (e) { if (e.statusCode === 404) return false; throw e; }
344
+ function (e) { if (e.statusCode === C.HTTP.STATUS.NOT_FOUND) return false; throw e; }
345
345
  );
346
346
  }
347
347
 
@@ -278,7 +278,7 @@ function create(config) {
278
278
  await _httpRequest("DELETE", url, authHeader.bearer(token), null, reqOpts);
279
279
  return true;
280
280
  } catch (e) {
281
- if (e.statusCode === 404) return false;
281
+ if (e.statusCode === C.HTTP.STATUS.NOT_FOUND) return false;
282
282
  throw e;
283
283
  }
284
284
  }
@@ -18,6 +18,7 @@
18
18
  * Errors are surfaced as object-store errors with statusCode set so the
19
19
  * retry layer can classify retryable vs permanent.
20
20
  */
21
+ var C = require("../constants");
21
22
  var { ObjectStoreError } = require("../framework-error");
22
23
  var safeUrl = require("../safe-url");
23
24
  var sharedRequest = require("./http-request");
@@ -122,7 +123,7 @@ function create(config) {
122
123
  return _request("DELETE", url, null, headers, reqOpts).then(
123
124
  function () { return true; },
124
125
  function (e) {
125
- if (e.statusCode === 404) return false;
126
+ if (e.statusCode === C.HTTP.STATUS.NOT_FOUND) return false;
126
127
  throw e;
127
128
  }
128
129
  );
@@ -396,7 +396,7 @@ function _buildLegalHoldXml(status) {
396
396
  // `get*` methods can surface a clean default instead of throwing.
397
397
  function _isLockNotConfigured(err) {
398
398
  if (!err) return false;
399
- if (err.statusCode !== 404 && err.statusCode !== 400) return false;
399
+ if (err.statusCode !== C.HTTP.STATUS.NOT_FOUND && err.statusCode !== C.HTTP.STATUS.BAD_REQUEST) return false;
400
400
  var msg = String(err.message || "");
401
401
  return msg.indexOf("ObjectLockConfigurationNotFoundError") !== -1 ||
402
402
  msg.indexOf("NoSuchObjectLockConfiguration") !== -1;
@@ -617,10 +617,10 @@ function create(config) {
617
617
  function (e) {
618
618
  // Map S3 conflict response codes into stable framework codes.
619
619
  var mapped = e;
620
- if (e.statusCode === 409 && /BucketAlreadyOwnedByYou/.test(e.message || "")) {
620
+ if (e.statusCode === C.HTTP.STATUS.CONFLICT && /BucketAlreadyOwnedByYou/.test(e.message || "")) {
621
621
  mapped = _err("BUCKET_ALREADY_OWNED",
622
622
  "bucket '" + name + "' already exists and is owned by this account", true);
623
- } else if (e.statusCode === 409) {
623
+ } else if (e.statusCode === C.HTTP.STATUS.CONFLICT) {
624
624
  mapped = _err("BUCKET_NAME_TAKEN",
625
625
  "bucket name '" + name + "' is taken in S3's global namespace", true);
626
626
  }
@@ -663,7 +663,7 @@ function create(config) {
663
663
  return true;
664
664
  },
665
665
  function (e) {
666
- if (e.statusCode === 404) {
666
+ if (e.statusCode === C.HTTP.STATUS.NOT_FOUND) {
667
667
  // Idempotent: missing bucket → false. Audit as success-with-noop
668
668
  // so the trail still records "operator attempted delete".
669
669
  if (auditSuccess) {
@@ -678,7 +678,7 @@ function create(config) {
678
678
  return false;
679
679
  }
680
680
  var mapped = e;
681
- if (e.statusCode === 409 && /BucketNotEmpty/.test(e.message || "")) {
681
+ if (e.statusCode === C.HTTP.STATUS.CONFLICT && /BucketNotEmpty/.test(e.message || "")) {
682
682
  mapped = _err("BUCKET_NOT_EMPTY",
683
683
  "bucket '" + name + "' is not empty; delete all objects + " +
684
684
  "noncurrent versions + delete-markers first", true);
@@ -788,7 +788,7 @@ function create(config) {
788
788
  // to — so existence probes via head() (e.g. the backup objectStore
789
789
  // adapter's hasKey / statKey) get the uniform missing-key signal instead
790
790
  // of a raw HTTP 404 they don't recognize.
791
- if (e && e.statusCode === 404) {
791
+ if (e && e.statusCode === C.HTTP.STATUS.NOT_FOUND) {
792
792
  throw _err("NOT_FOUND", "key not found: " + key, true);
793
793
  }
794
794
  throw e;
@@ -816,7 +816,7 @@ function create(config) {
816
816
  var headers = _makeSigned("DELETE", url, sha256Hex(Buffer.alloc(0)), extra);
817
817
  return _request("DELETE", url, headers, null, reqOpts).then(
818
818
  function () { return true; },
819
- function (e) { if (e.statusCode === 404) return false; throw e; }
819
+ function (e) { if (e.statusCode === C.HTTP.STATUS.NOT_FOUND) return false; throw e; }
820
820
  );
821
821
  }
822
822
 
@@ -68,7 +68,7 @@ function _defaultFetchImpl(endpoint, init) {
68
68
  }).then(function (res) {
69
69
  var status = res && res.statusCode;
70
70
  return {
71
- ok: status >= 200 && status < 300, // HTTP status ranges
71
+ ok: typeof status === "number" && C.HTTP.success(status),
72
72
  status: status,
73
73
  };
74
74
  });
@@ -553,7 +553,9 @@ function create(opts) {
553
553
  if (res && res.ok) return { ok: true, status: res.status };
554
554
  var status = res && res.status;
555
555
  // 5xx + 408/429 → retryable; everything else permanent
556
- var retryable = (status >= 500 && status < 600) || status === 408 || status === 429; // HTTP status ranges
556
+ var retryable = typeof status === "number" &&
557
+ (C.HTTP.serverError(status) || status === C.HTTP.STATUS.REQUEST_TIMEOUT ||
558
+ status === C.HTTP.STATUS.TOO_MANY_REQUESTS);
557
559
  if (retryable && attempt < maxAttempts) {
558
560
  await _sleep(_backoffMs(attempt));
559
561
  return await _post(payload, attempt + 1);
@@ -407,7 +407,7 @@ function create(opts) {
407
407
  var mw = function (req, res, next) {
408
408
  if (typeof res.writeHead !== "function") return next();
409
409
  var body = cachedString;
410
- res.writeHead(200, { // HTTP 200 status
410
+ res.writeHead(C.HTTP.STATUS.OK, { // HTTP 200 status
411
411
  "Content-Type": "application/json; charset=utf-8",
412
412
  "Content-Length": Buffer.byteLength(body),
413
413
  "Cache-Control": cacheControl,
@@ -225,13 +225,10 @@ function _buildAgentOpts(opts) {
225
225
  // handshake obeyed the policy and the other did not, decided by ALPN.
226
226
  merged.ecdhCurve = networkTls.outboundPosture().ecdhCurve;
227
227
  }
228
- // Mirror the resolved ecdhCurve into `groups` from one string (same
229
- // shape as network-tls.buildOptions). `applyToContext` only fills
230
- // `groups` when it is undefined, so setting it here preserves the
231
- // caller's narrowed/reordered selection instead of letting the
232
- // context filler re-derive `groups` from STATE.tlsKeyShares — a
233
- // different ordering that would ignore the caller's ecdhCurve.
234
- merged.groups = merged.ecdhCurve;
228
+ // `applyToContext` fills the group preference only when the base does not
229
+ // already carry one, so the resolved ecdhCurve above stands as the caller's
230
+ // narrowed or reordered selection rather than being re-derived from the
231
+ // configured key shares in a different order.
235
232
  merged.minVersion = "TLSv1.3";
236
233
  if (networkTls && typeof networkTls.applyToContext === "function") {
237
234
  merged = networkTls.applyToContext({ base: merged });
@@ -40,6 +40,7 @@
40
40
  * RFC 9457 Problem Details for HTTP APIs — standardized error response envelope with `application/problem+json` content type, supersedes RFC 7807.
41
41
  */
42
42
 
43
+ var C = require("./constants");
43
44
  var pick = require("./pick");
44
45
  var validateOpts = require("./validate-opts");
45
46
  var { defineClass } = require("./framework-error");
@@ -387,7 +388,7 @@ function respond(res, problem, req) {
387
388
  "respond: problem must be a non-null object", true);
388
389
  }
389
390
  var status = (typeof problem.status === "number" && Number.isInteger(problem.status) &&
390
- problem.status >= 100 && problem.status <= 599) ? problem.status : 500; // HTTP status range + default 500
391
+ problem.status >= 100 && problem.status <= 599) ? problem.status : C.HTTP.STATUS.INTERNAL_SERVER_ERROR; // HTTP status range + default 500
391
392
  var body = JSON.stringify(problem);
392
393
  // Seal the problem body when an encrypted session is active — the
393
394
  // encoder is present only after a request body decrypted, so its
@@ -467,7 +467,18 @@ function create(opts) {
467
467
  } else {
468
468
  sock = net.connect({ host: host, port: port }, onOk);
469
469
  }
470
- sock.once("error", onErr);
470
+ sock.once("error", function (err) {
471
+ // rediss:// negotiates on the shared posture, so a refusal here is
472
+ // usually the posture rather than Redis; say which part of it.
473
+ if (useTls) {
474
+ networkTls().annotateOutboundFailure(err, {
475
+ host: host,
476
+ port: port,
477
+ tlsOpts: tlsConnectOpts,
478
+ });
479
+ }
480
+ onErr(err);
481
+ });
471
482
  });
472
483
  socket = newSocket;
473
484
  socket.setNoDelay(true);