@sakeetech/viva-payments-core 0.2.1 → 0.2.2

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 (105) hide show
  1. package/dist/auth/http.js +14 -9
  2. package/dist/auth/http.js.map +1 -1
  3. package/dist/auth/index.js +18 -5
  4. package/dist/auth/index.js.map +1 -1
  5. package/dist/auth/oauth2-strategy.js +24 -20
  6. package/dist/auth/oauth2-strategy.js.map +1 -1
  7. package/dist/auth/reseller-strategy.js +5 -1
  8. package/dist/auth/reseller-strategy.js.map +1 -1
  9. package/dist/auth/single-flight.js +8 -3
  10. package/dist/auth/single-flight.js.map +1 -1
  11. package/dist/auth/token-cache.js +7 -2
  12. package/dist/auth/token-cache.js.map +1 -1
  13. package/dist/errors/api-error.js +6 -2
  14. package/dist/errors/api-error.js.map +1 -1
  15. package/dist/errors/auth-error.js +6 -2
  16. package/dist/errors/auth-error.js.map +1 -1
  17. package/dist/errors/base.js +5 -1
  18. package/dist/errors/base.js.map +1 -1
  19. package/dist/errors/index.js +17 -7
  20. package/dist/errors/index.js.map +1 -1
  21. package/dist/errors/mode-mismatch-error.js +6 -2
  22. package/dist/errors/mode-mismatch-error.js.map +1 -1
  23. package/dist/errors/rate-limit-error.js +6 -2
  24. package/dist/errors/rate-limit-error.js.map +1 -1
  25. package/dist/errors/validation-error.js +6 -2
  26. package/dist/errors/validation-error.js.map +1 -1
  27. package/dist/errors/webhook-error.js +6 -2
  28. package/dist/errors/webhook-error.js.map +1 -1
  29. package/dist/index.js +4 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/isv/accounts.js +5 -1
  32. package/dist/isv/accounts.js.map +1 -1
  33. package/dist/isv/client.js +23 -19
  34. package/dist/isv/client.js.map +1 -1
  35. package/dist/isv/index.js +17 -8
  36. package/dist/isv/index.js.map +1 -1
  37. package/dist/isv/sources.js +8 -4
  38. package/dist/isv/sources.js.map +1 -1
  39. package/dist/isv/webhooks-api.js +5 -1
  40. package/dist/isv/webhooks-api.js.map +1 -1
  41. package/dist/legacy/client.js +19 -15
  42. package/dist/legacy/client.js.map +1 -1
  43. package/dist/legacy/index.js +5 -1
  44. package/dist/legacy/index.js.map +1 -1
  45. package/dist/observability/context.js +15 -11
  46. package/dist/observability/context.js.map +1 -1
  47. package/dist/observability/index.js +16 -5
  48. package/dist/observability/index.js.map +1 -1
  49. package/dist/observability/logger.js +11 -5
  50. package/dist/observability/logger.js.map +1 -1
  51. package/dist/observability/metrics.js +5 -1
  52. package/dist/observability/metrics.js.map +1 -1
  53. package/dist/observability/redact.js +4 -1
  54. package/dist/observability/redact.js.map +1 -1
  55. package/dist/observability/tracer.js +5 -1
  56. package/dist/observability/tracer.js.map +1 -1
  57. package/dist/payments/client.js +17 -13
  58. package/dist/payments/client.js.map +1 -1
  59. package/dist/payments/index.js +5 -1
  60. package/dist/payments/index.js.map +1 -1
  61. package/dist/refunds/fast-refund-client.js +11 -7
  62. package/dist/refunds/fast-refund-client.js.map +1 -1
  63. package/dist/refunds/index.js +7 -2
  64. package/dist/refunds/index.js.map +1 -1
  65. package/dist/refunds/strategy.js +4 -1
  66. package/dist/refunds/strategy.js.map +1 -1
  67. package/dist/types/auth.js +2 -1
  68. package/dist/types/auth.js.map +1 -1
  69. package/dist/types/card-types.js +7 -3
  70. package/dist/types/card-types.js.map +1 -1
  71. package/dist/types/common.js +8 -4
  72. package/dist/types/common.js.map +1 -1
  73. package/dist/types/index.js +14 -6
  74. package/dist/types/index.js.map +1 -1
  75. package/dist/types/isv-accounts.js +2 -1
  76. package/dist/types/isv-accounts.js.map +1 -1
  77. package/dist/types/isv-payments.js +2 -1
  78. package/dist/types/isv-payments.js.map +1 -1
  79. package/dist/types/status.js +2 -1
  80. package/dist/types/status.js.map +1 -1
  81. package/dist/types/webhook-events.js +5 -2
  82. package/dist/types/webhook-events.js.map +1 -1
  83. package/dist/webhooks/challenge-response.js +6 -3
  84. package/dist/webhooks/challenge-response.js.map +1 -1
  85. package/dist/webhooks/event-types.js +10 -4
  86. package/dist/webhooks/event-types.js.map +1 -1
  87. package/dist/webhooks/extract-client-ip.js +4 -1
  88. package/dist/webhooks/extract-client-ip.js.map +1 -1
  89. package/dist/webhooks/hmac-verify.js +14 -11
  90. package/dist/webhooks/hmac-verify.js.map +1 -1
  91. package/dist/webhooks/index.js +22 -6
  92. package/dist/webhooks/index.js.map +1 -1
  93. package/dist/webhooks/ip-allowlist.js +11 -7
  94. package/dist/webhooks/ip-allowlist.js.map +1 -1
  95. package/dist/webhooks/status-lattice.js +8 -3
  96. package/dist/webhooks/status-lattice.js.map +1 -1
  97. package/package.json +12 -12
  98. package/dist/isv/legacy-basic-client.d.ts +0 -122
  99. package/dist/isv/legacy-basic-client.d.ts.map +0 -1
  100. package/dist/isv/legacy-basic-client.js +0 -281
  101. package/dist/isv/legacy-basic-client.js.map +0 -1
  102. package/dist/isv/payments.d.ts +0 -199
  103. package/dist/isv/payments.d.ts.map +0 -1
  104. package/dist/isv/payments.js +0 -385
  105. package/dist/isv/payments.js.map +0 -1
@@ -1,3 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CARD_TYPE_BY_ID = void 0;
4
+ exports.resolveCardType = resolveCardType;
1
5
  /**
2
6
  * Viva's numeric CardTypeId → string scheme name mapping.
3
7
  *
@@ -35,7 +39,7 @@
35
39
  * @see ../refunds/strategy.ts (FAST_REFUND_ELIGIBLE_SCHEMES)
36
40
  * @see docs/STATE-MACHINE.md §3.1
37
41
  */
38
- export const CARD_TYPE_BY_ID = Object.freeze({
42
+ exports.CARD_TYPE_BY_ID = Object.freeze({
39
43
  0: 'Visa',
40
44
  1: 'MasterCard',
41
45
  2: 'Diners',
@@ -54,9 +58,9 @@ export const CARD_TYPE_BY_ID = Object.freeze({
54
58
  * Pure, no I/O. Safe to call from anywhere — including refund strategy
55
59
  * decisions and tests.
56
60
  */
57
- export function resolveCardType(cardTypeId) {
61
+ function resolveCardType(cardTypeId) {
58
62
  if (cardTypeId == null)
59
63
  return undefined;
60
- return CARD_TYPE_BY_ID[cardTypeId];
64
+ return exports.CARD_TYPE_BY_ID[cardTypeId];
61
65
  }
62
66
  //# sourceMappingURL=card-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"card-types.js","sourceRoot":"","sources":["../../src/types/card-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC7E,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,MAAM;IACT,gEAAgE;IAChE,gEAAgE;IAChE,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,KAAK;CACT,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAqC;IAErC,IAAI,UAAU,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"card-types.js","sourceRoot":"","sources":["../../src/types/card-types.ts"],"names":[],"mappings":";;;AAyDA,0CAKC;AA9DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACU,QAAA,eAAe,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC7E,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,MAAM;IACT,gEAAgE;IAChE,gEAAgE;IAChE,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,KAAK;CACT,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC7B,UAAqC;IAErC,IAAI,UAAU,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,uBAAe,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Common primitives shared across the Viva Wallet ISV API surface.
3
4
  *
@@ -8,11 +9,14 @@
8
9
  * @see references/viva-docs/md/webhooks-for-payments.txt:383
9
10
  * @see references/viva-docs/md/oauth2-authentication.txt:145
10
11
  */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.LEGACY_HOST = exports.ENVIRONMENT_URLS = exports.CURRENCY_CODES = void 0;
14
+ exports.asCurrencyCode = asCurrencyCode;
11
15
  /**
12
16
  * Narrow cast helper — call when you have a validated ISO 4217 numeric string.
13
17
  * Runtime validation lives in the implementation layer (S2/S6).
14
18
  */
15
- export function asCurrencyCode(code) {
19
+ function asCurrencyCode(code) {
16
20
  return code;
17
21
  }
18
22
  /**
@@ -22,7 +26,7 @@ export function asCurrencyCode(code) {
22
26
  *
23
27
  * @see references/viva-docs/md/wh-transaction-payment-created.txt:487
24
28
  */
25
- export const CURRENCY_CODES = {
29
+ exports.CURRENCY_CODES = {
26
30
  EUR: asCurrencyCode('978'),
27
31
  GBP: asCurrencyCode('826'),
28
32
  USD: asCurrencyCode('840'),
@@ -40,7 +44,7 @@ export const CURRENCY_CODES = {
40
44
  *
41
45
  * @see references/viva-docs/md/oauth2-authentication.txt:145
42
46
  */
43
- export const ENVIRONMENT_URLS = {
47
+ exports.ENVIRONMENT_URLS = {
44
48
  demo: {
45
49
  authBaseUrl: 'https://demo-accounts.vivapayments.com',
46
50
  apiBaseUrl: 'https://demo-api.vivapayments.com',
@@ -63,7 +67,7 @@ export const ENVIRONMENT_URLS = {
63
67
  *
64
68
  * @see references/viva-docs/md/tut-create-recurring-payment.txt:288
65
69
  */
66
- export const LEGACY_HOST = {
70
+ exports.LEGACY_HOST = {
67
71
  demo: 'https://demo.vivapayments.com',
68
72
  production: 'https://www.vivapayments.com',
69
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAoB,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;CACqB,CAAC;AAsFlD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAiD;IAC5E,IAAI,EAAE;QACJ,WAAW,EAAE,wCAAwC;QACrD,UAAU,EAAE,mCAAmC;KAChD;IACD,UAAU,EAAE;QACV,WAAW,EAAE,mCAAmC;QAChD,UAAU,EAAE,8BAA8B;KAC3C;CACO,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,WAAW,GAAoC;IAC1D,IAAI,EAAE,+BAA+B;IACrC,UAAU,EAAE,8BAA8B;CAClC,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAoBH,wCAEC;AAND;;;GAGG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,IAAoB,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACU,QAAA,cAAc,GAAG;IAC5B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC;CACqB,CAAC;AAsFlD;;;;GAIG;AACU,QAAA,gBAAgB,GAAiD;IAC5E,IAAI,EAAE;QACJ,WAAW,EAAE,wCAAwC;QACrD,UAAU,EAAE,mCAAmC;KAChD;IACD,UAAU,EAAE;QACV,WAAW,EAAE,mCAAmC;QAChD,UAAU,EAAE,8BAA8B;KAC3C;CACO,CAAC;AAEX;;;;;;;;;;;;GAYG;AACU,QAAA,WAAW,GAAoC;IAC1D,IAAI,EAAE,+BAA+B;IACrC,UAAU,EAAE,8BAA8B;CAClC,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * viva-payments-core/types — barrel re-export.
3
4
  *
@@ -9,13 +10,20 @@
9
10
  * Attribution: types hand-rolled fresh. Structure partially referenced from
10
11
  * @nkhind/vivawallet-sdk for API surface awareness — no code copied.
11
12
  */
12
- export {
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.DEFERRED_EVENT_TYPES = exports.EVENT_TYPES = exports.resolveCardType = exports.CARD_TYPE_BY_ID = exports.LEGACY_HOST = exports.ENVIRONMENT_URLS = exports.CURRENCY_CODES = exports.asCurrencyCode = void 0;
15
+ var common_js_1 = require("./common.js");
13
16
  // common.ts — runtime values
14
- asCurrencyCode, CURRENCY_CODES, ENVIRONMENT_URLS, LEGACY_HOST, } from './common.js';
15
- export {
17
+ Object.defineProperty(exports, "asCurrencyCode", { enumerable: true, get: function () { return common_js_1.asCurrencyCode; } });
18
+ Object.defineProperty(exports, "CURRENCY_CODES", { enumerable: true, get: function () { return common_js_1.CURRENCY_CODES; } });
19
+ Object.defineProperty(exports, "ENVIRONMENT_URLS", { enumerable: true, get: function () { return common_js_1.ENVIRONMENT_URLS; } });
20
+ Object.defineProperty(exports, "LEGACY_HOST", { enumerable: true, get: function () { return common_js_1.LEGACY_HOST; } });
21
+ var card_types_js_1 = require("./card-types.js");
16
22
  // card-types.ts — runtime values
17
- CARD_TYPE_BY_ID, resolveCardType, } from './card-types.js';
18
- export {
23
+ Object.defineProperty(exports, "CARD_TYPE_BY_ID", { enumerable: true, get: function () { return card_types_js_1.CARD_TYPE_BY_ID; } });
24
+ Object.defineProperty(exports, "resolveCardType", { enumerable: true, get: function () { return card_types_js_1.resolveCardType; } });
25
+ var webhook_events_js_1 = require("./webhook-events.js");
19
26
  // webhook-events.ts — runtime values
20
- EVENT_TYPES, DEFERRED_EVENT_TYPES, } from './webhook-events.js';
27
+ Object.defineProperty(exports, "EVENT_TYPES", { enumerable: true, get: function () { return webhook_events_js_1.EVENT_TYPES; } });
28
+ Object.defineProperty(exports, "DEFERRED_EVENT_TYPES", { enumerable: true, get: function () { return webhook_events_js_1.DEFERRED_EVENT_TYPES; } });
21
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,OAAO;AACL,6BAA6B;AAC7B,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AAoBrB,OAAO;AACL,iCAAiC;AACjC,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAsCzB,OAAO;AACL,qCAAqC;AACrC,WAAW,EACX,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAiBH,yCAMqB;AALnB,6BAA6B;AAC7B,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AAqBb,iDAIyB;AAHvB,iCAAiC;AACjC,gHAAA,eAAe,OAAA;AACf,gHAAA,eAAe,OAAA;AAuCjB,yDAI6B;AAH3B,qCAAqC;AACrC,gHAAA,WAAW,OAAA;AACX,yHAAA,oBAAoB,OAAA"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * ISV Connected Account + Webhook Registration types.
3
4
  *
@@ -18,5 +19,5 @@
18
19
  * - Update/Delete webhook (not exposed; manage via banking UI)
19
20
  * - Update connected account (not exposed for ISV; merchant edits via UI)
20
21
  */
21
- export {};
22
+ Object.defineProperty(exports, "__esModule", { value: true });
22
23
  //# sourceMappingURL=isv-accounts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isv-accounts.js","sourceRoot":"","sources":["../../src/types/isv-accounts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
1
+ {"version":3,"file":"isv-accounts.js","sourceRoot":"","sources":["../../src/types/isv-accounts.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * ISV Payment API request and response types.
3
4
  *
@@ -15,5 +16,5 @@
15
16
  * @see references/viva-docs/md/wh-transaction-payment-created.txt:158
16
17
  * @see references/viva-docs/md/webhooks-for-payments.txt:248
17
18
  */
18
- export {};
19
+ Object.defineProperty(exports, "__esModule", { value: true });
19
20
  //# sourceMappingURL=isv-payments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isv-payments.js","sourceRoot":"","sources":["../../src/types/isv-payments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
1
+ {"version":3,"file":"isv-payments.js","sourceRoot":"","sources":["../../src/types/isv-payments.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Viva transaction status letter mapping and plugin status enum.
3
4
  *
@@ -15,5 +16,5 @@
15
16
  * @see references/viva-docs/md/wh-transaction-payment-created.txt:398
16
17
  * @see references/viva-docs/md/wh-sale-transactions.txt:210
17
18
  */
18
- export {};
19
+ Object.defineProperty(exports, "__esModule", { value: true });
19
20
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/types/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/types/status.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Webhook event types and payloads for the Viva Wallet ISV integration.
3
4
  *
@@ -19,6 +20,8 @@
19
20
  * @see references/viva-docs/md/wh-account-connected.txt:150
20
21
  * @see references/viva-docs/md/wh-account-verif-status-changed.txt:152
21
22
  */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.DEFERRED_EVENT_TYPES = exports.EVENT_TYPES = void 0;
22
25
  // ---------------------------------------------------------------------------
23
26
  // EventTypeId const object (not a TypeScript enum)
24
27
  // ---------------------------------------------------------------------------
@@ -30,7 +33,7 @@
30
33
  *
31
34
  * @see references/viva-docs/md/webhooks-for-payments.txt:141
32
35
  */
33
- export const EVENT_TYPES = {
36
+ exports.EVENT_TYPES = {
34
37
  /** A customer payment has been successful. */
35
38
  TRANSACTION_PAYMENT_CREATED: 1796,
36
39
  /** A customer refund has been successfully actioned. */
@@ -50,7 +53,7 @@ export const EVENT_TYPES = {
50
53
  *
51
54
  * @see references/viva-docs/md/webhooks-for-payments.txt:141
52
55
  */
53
- export const DEFERRED_EVENT_TYPES = {
56
+ exports.DEFERRED_EVENT_TYPES = {
54
57
  /** Commission payment withdrawn by Viva. Post-v1. */
55
58
  TRANSACTION_PRICE_CALCULATED: 1799,
56
59
  /** ECR integration only. Post-v1. */
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-events.js","sourceRoot":"","sources":["../../src/types/webhook-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,8CAA8C;IAC9C,2BAA2B,EAAE,IAAI;IACjC,wDAAwD;IACxD,4BAA4B,EAAE,IAAI;IAClC,iCAAiC;IACjC,kBAAkB,EAAE,IAAI;IACxB,kEAAkE;IAClE,aAAa,EAAE,IAAI;IACnB,+DAA+D;IAC/D,iBAAiB,EAAE,IAAI;IACvB,0DAA0D;IAC1D,mCAAmC,EAAE,IAAI;CACjC,CAAC;AAOX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,qDAAqD;IACrD,4BAA4B,EAAE,IAAI;IAClC,qCAAqC;IACrC,mCAAmC,EAAE,IAAI;IACzC,qCAAqC;IACrC,kCAAkC,EAAE,IAAI;IACxC,8CAA8C;IAC9C,2BAA2B,EAAE,IAAI;IACjC,sCAAsC;IACtC,6BAA6B,EAAE,GAAG;IAClC,uCAAuC;IACvC,8BAA8B,EAAE,GAAG;IACnC;;;;;OAKG;IACH,iBAAiB,EAAE,IAAI;IACvB,2DAA2D;IAC3D,gBAAgB,EAAE,IAAI;CACd,CAAC"}
1
+ {"version":3,"file":"webhook-events.js","sourceRoot":"","sources":["../../src/types/webhook-events.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAIH,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E;;;;;;;GAOG;AACU,QAAA,WAAW,GAAG;IACzB,8CAA8C;IAC9C,2BAA2B,EAAE,IAAI;IACjC,wDAAwD;IACxD,4BAA4B,EAAE,IAAI;IAClC,iCAAiC;IACjC,kBAAkB,EAAE,IAAI;IACxB,kEAAkE;IAClE,aAAa,EAAE,IAAI;IACnB,+DAA+D;IAC/D,iBAAiB,EAAE,IAAI;IACvB,0DAA0D;IAC1D,mCAAmC,EAAE,IAAI;CACjC,CAAC;AAOX;;;;;GAKG;AACU,QAAA,oBAAoB,GAAG;IAClC,qDAAqD;IACrD,4BAA4B,EAAE,IAAI;IAClC,qCAAqC;IACrC,mCAAmC,EAAE,IAAI;IACzC,qCAAqC;IACrC,kCAAkC,EAAE,IAAI;IACxC,8CAA8C;IAC9C,2BAA2B,EAAE,IAAI;IACjC,sCAAsC;IACtC,6BAA6B,EAAE,GAAG;IAClC,uCAAuC;IACvC,8BAA8B,EAAE,GAAG;IACnC;;;;;OAKG;IACH,iBAAiB,EAAE,IAAI;IACvB,2DAA2D;IAC3D,gBAAgB,EAAE,IAAI;CACd,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Viva Wallet webhook challenge-response handler.
3
4
  *
@@ -6,7 +7,9 @@
6
7
  *
7
8
  * @see references/viva-docs/md/webhooks-for-payments.txt:311
8
9
  */
9
- import { VivaWebhookError } from '../errors/index.js';
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.buildChallengeResponse = buildChallengeResponse;
12
+ const index_js_1 = require("../errors/index.js");
10
13
  /**
11
14
  * Returns the GET-request response body for Viva's URL verification challenge.
12
15
  *
@@ -23,9 +26,9 @@ import { VivaWebhookError } from '../errors/index.js';
23
26
  * return res.json(buildChallengeResponse(env.VIVA_WEBHOOK_KEY));
24
27
  * }
25
28
  */
26
- export function buildChallengeResponse(webhookVerificationKey) {
29
+ function buildChallengeResponse(webhookVerificationKey) {
27
30
  if (!webhookVerificationKey || webhookVerificationKey.trim().length === 0) {
28
- throw new VivaWebhookError({
31
+ throw new index_js_1.VivaWebhookError({
29
32
  message: 'webhookVerificationKey must be a non-empty string. ' +
30
33
  'Obtain it from GET /api/messages/config/token and set VIVA_WEBHOOK_KEY.',
31
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"challenge-response.js","sourceRoot":"","sources":["../../src/webhooks/challenge-response.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CAAC,sBAA8B;IACnE,IAAI,CAAC,sBAAsB,IAAI,sBAAsB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,gBAAgB,CAAC;YACzB,OAAO,EACL,qDAAqD;gBACrD,yEAAyE;SAC5E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"challenge-response.js","sourceRoot":"","sources":["../../src/webhooks/challenge-response.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAoBH,wDAUC;AA5BD,iDAAsD;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,sBAAsB,CAAC,sBAA8B;IACnE,IAAI,CAAC,sBAAsB,IAAI,sBAAsB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,2BAAgB,CAAC;YACzB,OAAO,EACL,qDAAqD;gBACrD,yEAAyE;SAC5E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC;AACzC,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Runtime helpers for Viva webhook event type IDs.
3
4
  *
@@ -6,7 +7,12 @@
6
7
  *
7
8
  * @see references/viva-docs/md/webhooks-for-payments.txt:141
8
9
  */
9
- export { EVENT_TYPES } from '../types/webhook-events.js';
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.V1_EVENT_TYPE_IDS = exports.EVENT_TYPES = void 0;
12
+ exports.isTransactionEvent = isTransactionEvent;
13
+ exports.isOnboardingEvent = isOnboardingEvent;
14
+ var webhook_events_js_1 = require("../types/webhook-events.js");
15
+ Object.defineProperty(exports, "EVENT_TYPES", { enumerable: true, get: function () { return webhook_events_js_1.EVENT_TYPES; } });
10
16
  /**
11
17
  * Returns `true` for event types that carry a transaction payload and require
12
18
  * MerchantId-based tenant resolution.
@@ -20,7 +26,7 @@ export { EVENT_TYPES } from '../types/webhook-events.js';
20
26
  *
21
27
  * @see references/viva-docs/md/webhooks-for-payments.txt:141
22
28
  */
23
- export function isTransactionEvent(id) {
29
+ function isTransactionEvent(id) {
24
30
  return id === 1796 || id === 1797 || id === 1798 || id === 4865 || id === 7936;
25
31
  }
26
32
  /**
@@ -33,7 +39,7 @@ export function isTransactionEvent(id) {
33
39
  *
34
40
  * @see references/viva-docs/md/webhooks-for-payments.txt:224
35
41
  */
36
- export function isOnboardingEvent(id) {
42
+ function isOnboardingEvent(id) {
37
43
  return id === 8193 || id === 8194;
38
44
  }
39
45
  /**
@@ -44,7 +50,7 @@ export function isOnboardingEvent(id) {
44
50
  *
45
51
  * @see references/viva-docs/md/webhooks-for-payments.txt:141
46
52
  */
47
- export const V1_EVENT_TYPE_IDS = Object.freeze([
53
+ exports.V1_EVENT_TYPE_IDS = Object.freeze([
48
54
  1796, 1797, 1798, 4865, 8193, 8194,
49
55
  ]);
50
56
  //# sourceMappingURL=event-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-types.js","sourceRoot":"","sources":["../../src/webhooks/event-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAwB,MAAM,4BAA4B,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AACjF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAyD,MAAM,CAAC,MAAM,CAAC;IACnG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CAC1B,CAAC,CAAC"}
1
+ {"version":3,"file":"event-types.js","sourceRoot":"","sources":["../../src/webhooks/event-types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAiBH,gDAEC;AAYD,8CAEC;AA/BD,gEAA+E;AAAtE,gHAAA,WAAW,OAAA;AAEpB;;;;;;;;;;;;GAYG;AACH,SAAgB,kBAAkB,CAAC,EAAU;IAC3C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AACjF,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAAC,EAAU;IAC1C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACU,QAAA,iBAAiB,GAAyD,MAAM,CAAC,MAAM,CAAC;IACnG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CAC1B,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * extract-client-ip.ts — Source IP extraction with explicit proxy-depth trust.
3
4
  *
@@ -18,6 +19,8 @@
18
19
  *
19
20
  * @see docs/TODO-CSO.md "Finding 2"
20
21
  */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.extractClientIp = extractClientIp;
21
24
  /**
22
25
  * Extract the trusted client IP from a request.
23
26
  *
@@ -25,7 +28,7 @@
25
28
  * whether to reject or fall back to a default). Strips IPv6 brackets if
26
29
  * present (e.g. `[2001:db8::1]:443` → `2001:db8::1`).
27
30
  */
28
- export function extractClientIp(req, trustedProxyDepth) {
31
+ function extractClientIp(req, trustedProxyDepth) {
29
32
  const depth = Number.isInteger(trustedProxyDepth) && trustedProxyDepth >= 0
30
33
  ? trustedProxyDepth
31
34
  : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"extract-client-ip.js","sourceRoot":"","sources":["../../src/webhooks/extract-client-ip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAaH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAoB,EACpB,iBAAyB;IAEzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,IAAI,CAAC;QACzE,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,CAAC,CAAC;IAEN,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE9B,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACzB,uEAAuE;QACvE,wEAAwE;QACxE,0CAA0C;QAC1C,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,UAAU,CACjB,GAAkC;IAElC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,8CAA8C;IAC9C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,uEAAuE;IACvE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"extract-client-ip.js","sourceRoot":"","sources":["../../src/webhooks/extract-client-ip.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;AAoBH,0CAuBC;AA9BD;;;;;;GAMG;AACH,SAAgB,eAAe,CAC7B,GAAoB,EACpB,iBAAyB;IAEzB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,IAAI,CAAC;QACzE,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,CAAC,CAAC;IAEN,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE9B,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACzB,uEAAuE;QACvE,wEAAwE;QACxE,0CAA0C;QAC1C,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,UAAU,CACjB,GAAkC;IAElC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,8CAA8C;IAC9C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,uEAAuE;IACvE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * HMAC-SHA256 signature verification for the Sale Transactions webhook (event 7936).
3
4
  *
@@ -14,8 +15,10 @@
14
15
  *
15
16
  * @see references/viva-docs/md/wh-sale-transactions.txt:149
16
17
  */
17
- import { createHmac, timingSafeEqual } from 'node:crypto';
18
- import { VivaWebhookError } from '../errors/index.js';
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.verifyHmacSignature = verifyHmacSignature;
20
+ const node_crypto_1 = require("node:crypto");
21
+ const index_js_1 = require("../errors/index.js");
19
22
  /**
20
23
  * Verify the `Viva-Signature-256` header for the Sale Transactions webhook
21
24
  * (event 7936 only).
@@ -36,10 +39,10 @@ import { VivaWebhookError } from '../errors/index.js';
36
39
  *
37
40
  * @see references/viva-docs/md/wh-sale-transactions.txt:149
38
41
  */
39
- export function verifyHmacSignature(rawBody, signature, secret) {
42
+ function verifyHmacSignature(rawBody, signature, secret) {
40
43
  // --- 1. Guard: signature header must be present and non-empty ---
41
44
  if (signature == null || signature.length === 0) {
42
- throw new VivaWebhookError({
45
+ throw new index_js_1.VivaWebhookError({
43
46
  message: 'Missing Viva-Signature-256 header. This header is required for event 7936 (Sale Transactions).',
44
47
  });
45
48
  }
@@ -49,7 +52,7 @@ export function verifyHmacSignature(rawBody, signature, secret) {
49
52
  const expectedByteLength = 32; // SHA-256 output is 32 bytes
50
53
  const hexRegex = /^[0-9a-f]+$/i;
51
54
  if (!hexRegex.test(signature)) {
52
- throw new VivaWebhookError({
55
+ throw new index_js_1.VivaWebhookError({
53
56
  message: `Malformed Viva-Signature-256 header: not a valid hex string. Received: "${signature.slice(0, 20)}..."`,
54
57
  });
55
58
  }
@@ -58,12 +61,12 @@ export function verifyHmacSignature(rawBody, signature, secret) {
58
61
  candidateBuffer = Buffer.from(signature, 'hex');
59
62
  }
60
63
  catch {
61
- throw new VivaWebhookError({
64
+ throw new index_js_1.VivaWebhookError({
62
65
  message: 'Malformed Viva-Signature-256 header: hex decode failed.',
63
66
  });
64
67
  }
65
68
  // --- 3. Compute expected HMAC-SHA256 ---
66
- const hmac = createHmac('sha256', secret);
69
+ const hmac = (0, node_crypto_1.createHmac)('sha256', secret);
67
70
  hmac.update(rawBody);
68
71
  const expectedBuffer = hmac.digest(); // returns a Buffer (32 bytes)
69
72
  // --- 4. Constant-time comparison ---
@@ -76,15 +79,15 @@ export function verifyHmacSignature(rawBody, signature, secret) {
76
79
  // This runs in constant time relative to expectedByteLength.
77
80
  const zeros = Buffer.alloc(expectedByteLength, 0);
78
81
  // We deliberately ignore the result here — length mismatch is always a fail.
79
- void timingSafeEqual(zeros, expectedBuffer);
80
- throw new VivaWebhookError({
82
+ void (0, node_crypto_1.timingSafeEqual)(zeros, expectedBuffer);
83
+ throw new index_js_1.VivaWebhookError({
81
84
  message: `Viva-Signature-256 header length mismatch: expected ${expectedByteLength} bytes (${expectedByteLength * 2} hex chars), got ${candidateBuffer.length} bytes.`,
82
85
  });
83
86
  }
84
87
  // Both buffers are 32 bytes — safe to call timingSafeEqual.
85
- const valid = timingSafeEqual(expectedBuffer, candidateBuffer);
88
+ const valid = (0, node_crypto_1.timingSafeEqual)(expectedBuffer, candidateBuffer);
86
89
  if (!valid) {
87
- throw new VivaWebhookError({
90
+ throw new index_js_1.VivaWebhookError({
88
91
  message: 'Viva-Signature-256 signature mismatch. Request body may have been tampered with.',
89
92
  });
90
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hmac-verify.js","sourceRoot":"","sources":["../../src/webhooks/hmac-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA4B,EAC5B,SAAoC,EACpC,MAAc;IAEd,mEAAmE;IACnE,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,gBAAgB,CAAC;YACzB,OAAO,EAAE,gGAAgG;SAC1G,CAAC,CAAC;IACL,CAAC;IAED,kDAAkD;IAClD,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,kBAAkB,GAAG,EAAE,CAAC,CAAC,6BAA6B;IAC5D,MAAM,QAAQ,GAAG,cAAc,CAAC;IAEhC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,gBAAgB,CAAC;YACzB,OAAO,EAAE,2EAA2E,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;SACjH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CAAC;YACzB,OAAO,EAAE,yDAAyD;SACnE,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,8BAA8B;IAEpE,sCAAsC;IACtC,iEAAiE;IACjE,kEAAkE;IAClE,0EAA0E;IAC1E,8BAA8B;IAC9B,IAAI,eAAe,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClD,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAClD,6EAA6E;QAC7E,KAAK,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC5C,MAAM,IAAI,gBAAgB,CAAC;YACzB,OAAO,EAAE,uDAAuD,kBAAkB,WAAW,kBAAkB,GAAG,CAAC,oBAAoB,eAAe,CAAC,MAAM,SAAS;SACvK,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,MAAM,KAAK,GAAG,eAAe,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAE/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,gBAAgB,CAAC;YACzB,OAAO,EAAE,kFAAkF;SAC5F,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"hmac-verify.js","sourceRoot":"","sources":["../../src/webhooks/hmac-verify.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAyBH,kDA8DC;AArFD,6CAA0D;AAC1D,iDAAsD;AAEtD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,mBAAmB,CACjC,OAA4B,EAC5B,SAAoC,EACpC,MAAc;IAEd,mEAAmE;IACnE,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,2BAAgB,CAAC;YACzB,OAAO,EAAE,gGAAgG;SAC1G,CAAC,CAAC;IACL,CAAC;IAED,kDAAkD;IAClD,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,kBAAkB,GAAG,EAAE,CAAC,CAAC,6BAA6B;IAC5D,MAAM,QAAQ,GAAG,cAAc,CAAC;IAEhC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,2BAAgB,CAAC;YACzB,OAAO,EAAE,2EAA2E,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;SACjH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,2BAAgB,CAAC;YACzB,OAAO,EAAE,yDAAyD;SACnE,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,8BAA8B;IAEpE,sCAAsC;IACtC,iEAAiE;IACjE,kEAAkE;IAClE,0EAA0E;IAC1E,8BAA8B;IAC9B,IAAI,eAAe,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClD,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAClD,6EAA6E;QAC7E,KAAK,IAAA,6BAAe,EAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC5C,MAAM,IAAI,2BAAgB,CAAC;YACzB,OAAO,EAAE,uDAAuD,kBAAkB,WAAW,kBAAkB,GAAG,CAAC,oBAAoB,eAAe,CAAC,MAAM,SAAS;SACvK,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,MAAM,KAAK,GAAG,IAAA,6BAAe,EAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAE/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,2BAAgB,CAAC;YACzB,OAAO,EAAE,kFAAkF;SAC5F,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * viva-payments-core/webhooks — barrel export.
3
4
  *
@@ -10,10 +11,25 @@
10
11
  *
11
12
  * @see references/viva-docs/md/webhooks-for-payments.txt:254
12
13
  */
13
- export { buildChallengeResponse } from './challenge-response.js';
14
- export { VIVA_DEMO_IPS, VIVA_PROD_IPS, isAllowedSourceIp, } from './ip-allowlist.js';
15
- export { extractClientIp, } from './extract-client-ip.js';
16
- export { verifyHmacSignature } from './hmac-verify.js';
17
- export { EVENT_TYPES, isTransactionEvent, isOnboardingEvent, V1_EVENT_TYPE_IDS, } from './event-types.js';
18
- export { mapStatusLetter, validateStatusTransition, applyStatusTransition, } from './status-lattice.js';
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.applyStatusTransition = exports.validateStatusTransition = exports.mapStatusLetter = exports.V1_EVENT_TYPE_IDS = exports.isOnboardingEvent = exports.isTransactionEvent = exports.EVENT_TYPES = exports.verifyHmacSignature = exports.extractClientIp = exports.isAllowedSourceIp = exports.VIVA_PROD_IPS = exports.VIVA_DEMO_IPS = exports.buildChallengeResponse = void 0;
16
+ var challenge_response_js_1 = require("./challenge-response.js");
17
+ Object.defineProperty(exports, "buildChallengeResponse", { enumerable: true, get: function () { return challenge_response_js_1.buildChallengeResponse; } });
18
+ var ip_allowlist_js_1 = require("./ip-allowlist.js");
19
+ Object.defineProperty(exports, "VIVA_DEMO_IPS", { enumerable: true, get: function () { return ip_allowlist_js_1.VIVA_DEMO_IPS; } });
20
+ Object.defineProperty(exports, "VIVA_PROD_IPS", { enumerable: true, get: function () { return ip_allowlist_js_1.VIVA_PROD_IPS; } });
21
+ Object.defineProperty(exports, "isAllowedSourceIp", { enumerable: true, get: function () { return ip_allowlist_js_1.isAllowedSourceIp; } });
22
+ var extract_client_ip_js_1 = require("./extract-client-ip.js");
23
+ Object.defineProperty(exports, "extractClientIp", { enumerable: true, get: function () { return extract_client_ip_js_1.extractClientIp; } });
24
+ var hmac_verify_js_1 = require("./hmac-verify.js");
25
+ Object.defineProperty(exports, "verifyHmacSignature", { enumerable: true, get: function () { return hmac_verify_js_1.verifyHmacSignature; } });
26
+ var event_types_js_1 = require("./event-types.js");
27
+ Object.defineProperty(exports, "EVENT_TYPES", { enumerable: true, get: function () { return event_types_js_1.EVENT_TYPES; } });
28
+ Object.defineProperty(exports, "isTransactionEvent", { enumerable: true, get: function () { return event_types_js_1.isTransactionEvent; } });
29
+ Object.defineProperty(exports, "isOnboardingEvent", { enumerable: true, get: function () { return event_types_js_1.isOnboardingEvent; } });
30
+ Object.defineProperty(exports, "V1_EVENT_TYPE_IDS", { enumerable: true, get: function () { return event_types_js_1.V1_EVENT_TYPE_IDS; } });
31
+ var status_lattice_js_1 = require("./status-lattice.js");
32
+ Object.defineProperty(exports, "mapStatusLetter", { enumerable: true, get: function () { return status_lattice_js_1.mapStatusLetter; } });
33
+ Object.defineProperty(exports, "validateStatusTransition", { enumerable: true, get: function () { return status_lattice_js_1.validateStatusTransition; } });
34
+ Object.defineProperty(exports, "applyStatusTransition", { enumerable: true, get: function () { return status_lattice_js_1.applyStatusTransition; } });
19
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,GAEhB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EACL,WAAW,EAEX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,iEAAiE;AAAxD,+HAAA,sBAAsB,OAAA;AAE/B,qDAI2B;AAHzB,gHAAA,aAAa,OAAA;AACb,gHAAA,aAAa,OAAA;AACb,oHAAA,iBAAiB,OAAA;AAGnB,+DAGgC;AAF9B,uHAAA,eAAe,OAAA;AAIjB,mDAAuD;AAA9C,qHAAA,mBAAmB,OAAA;AAE5B,mDAM0B;AALxB,6GAAA,WAAW,OAAA;AAEX,oHAAA,kBAAkB,OAAA;AAClB,mHAAA,iBAAiB,OAAA;AACjB,mHAAA,iBAAiB,OAAA;AAGnB,yDAK6B;AAJ3B,oHAAA,eAAe,OAAA;AACf,6HAAA,wBAAwB,OAAA;AACxB,0HAAA,qBAAqB,OAAA"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Viva Wallet webhook source IP allowlist.
3
4
  *
@@ -26,7 +27,10 @@
26
27
  *
27
28
  * @see references/viva-docs/md/webhooks-for-payments.txt:270
28
29
  */
29
- import { BlockList } from 'node:net';
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.VIVA_PROD_IPS = exports.VIVA_DEMO_IPS = void 0;
32
+ exports.isAllowedSourceIp = isAllowedSourceIp;
33
+ const node_net_1 = require("node:net");
30
34
  // ---------------------------------------------------------------------------
31
35
  // Published IP lists
32
36
  // ---------------------------------------------------------------------------
@@ -36,7 +40,7 @@ import { BlockList } from 'node:net';
36
40
  *
37
41
  * @see references/viva-docs/md/webhooks-for-payments.txt:289
38
42
  */
39
- export const VIVA_DEMO_IPS = [
43
+ exports.VIVA_DEMO_IPS = [
40
44
  '20.50.240.57',
41
45
  '40.74.20.78',
42
46
  '195.167.87.181',
@@ -49,7 +53,7 @@ export const VIVA_DEMO_IPS = [
49
53
  *
50
54
  * @see references/viva-docs/md/webhooks-for-payments.txt:276
51
55
  */
52
- export const VIVA_PROD_IPS = [
56
+ exports.VIVA_PROD_IPS = [
53
57
  '51.138.37.238',
54
58
  '13.80.70.181',
55
59
  '13.80.71.223',
@@ -84,15 +88,15 @@ function addToBlockList(bl, entry) {
84
88
  }
85
89
  /** Build a BlockList from an array of IP/CIDR strings. */
86
90
  function buildBlockList(ips) {
87
- const bl = new BlockList();
91
+ const bl = new node_net_1.BlockList();
88
92
  for (const entry of ips) {
89
93
  addToBlockList(bl, entry);
90
94
  }
91
95
  return bl;
92
96
  }
93
97
  // Cached BlockLists built once per process.
94
- const _demoList = buildBlockList(VIVA_DEMO_IPS);
95
- const _prodList = buildBlockList(VIVA_PROD_IPS);
98
+ const _demoList = buildBlockList(exports.VIVA_DEMO_IPS);
99
+ const _prodList = buildBlockList(exports.VIVA_PROD_IPS);
96
100
  // ---------------------------------------------------------------------------
97
101
  // Normaliser
98
102
  // ---------------------------------------------------------------------------
@@ -127,7 +131,7 @@ function normaliseIp(ip) {
127
131
  *
128
132
  * @see references/viva-docs/md/webhooks-for-payments.txt:270
129
133
  */
130
- export function isAllowedSourceIp(ip, env, extraAllowlist) {
134
+ function isAllowedSourceIp(ip, env, extraAllowlist) {
131
135
  const normalised = normaliseIp(ip);
132
136
  const type = normalised.includes(':') ? 'ipv6' : 'ipv4';
133
137
  // Check the env-specific block list.
@@ -1 +1 @@
1
- {"version":3,"file":"ip-allowlist.js","sourceRoot":"","sources":["../../src/webhooks/ip-allowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,cAAc;IACd,aAAa;IACb,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,eAAe;CACP,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,eAAe;IACf,cAAc;IACd,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,aAAa;IACb,aAAa;IACb,gBAAgB;CACR,CAAC;AAEX,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,EAAa,EAAE,KAAa;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,mDAAmD;QACnD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,SAAS,cAAc,CAAC,GAAsB;IAC5C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,4CAA4C;AAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAChD,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAEhD,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,WAAW,CAAC,EAAU;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAU,EACV,GAA0B,EAC1B,cAAkC;IAElC,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAExD,qCAAqC;IACrC,MAAM,IAAI,GAAG,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"ip-allowlist.js","sourceRoot":"","sources":["../../src/webhooks/ip-allowlist.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Viva transaction status mapping and monotonic status lattice.
3
4
  *
@@ -16,6 +17,10 @@
16
17
  * @see references/viva-docs/md/wh-sale-transactions.txt:210
17
18
  * @see references/viva-docs/md/wh-transaction-payment-created.txt:398
18
19
  */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.mapStatusLetter = mapStatusLetter;
22
+ exports.validateStatusTransition = validateStatusTransition;
23
+ exports.applyStatusTransition = applyStatusTransition;
19
24
  /**
20
25
  * Pure mapping from Viva's `StatusId` letter to the plugin's canonical status.
21
26
  *
@@ -25,7 +30,7 @@
25
30
  * @see references/viva-docs/md/wh-sale-transactions.txt:210
26
31
  * @see references/viva-docs/md/wh-transaction-payment-created.txt:398
27
32
  */
28
- export function mapStatusLetter(letter) {
33
+ function mapStatusLetter(letter) {
29
34
  switch (letter) {
30
35
  case 'F':
31
36
  return { status: 'captured', claimSubstate: null };
@@ -171,7 +176,7 @@ const _ANCESTORS = new Map(_ALL_STATUSES.map((s) => [s, computeAncestors(s)]));
171
176
  * @see Plan P17 (status lattice), Plan A9 (authorized → cancelled)
172
177
  * @see references/viva-docs/md/wh-transaction-payment-created.txt:398
173
178
  */
174
- export function validateStatusTransition(current, next) {
179
+ function validateStatusTransition(current, next) {
175
180
  // Idempotent re-apply: same → same is always OK.
176
181
  if (current === next) {
177
182
  return { ok: true, next };
@@ -200,7 +205,7 @@ export function validateStatusTransition(current, next) {
200
205
  *
201
206
  * Not part of the core interface spec, provided for S8 convenience.
202
207
  */
203
- export function applyStatusTransition(current, incomingLetter) {
208
+ function applyStatusTransition(current, incomingLetter) {
204
209
  const { status: next, claimSubstate } = mapStatusLetter(incomingLetter);
205
210
  const result = validateStatusTransition(current, next);
206
211
  return { ...result, claimSubstate };
@@ -1 +1 @@
1
- {"version":3,"file":"status-lattice.js","sourceRoot":"","sources":["../../src/webhooks/status-lattice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status-lattice.js","sourceRoot":"","sources":["../../src/webhooks/status-lattice.ts"],"names":[],"mappings":"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"}