@sakeetech/viva-payments-core 0.2.6 → 0.2.8
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.
- package/README.md +1 -1
- package/dist/auth/reseller-strategy.d.ts +7 -12
- package/dist/auth/reseller-strategy.d.ts.map +1 -1
- package/dist/auth/reseller-strategy.js +7 -12
- package/dist/auth/reseller-strategy.js.map +1 -1
- package/dist/payments/client.d.ts +25 -18
- package/dist/payments/client.d.ts.map +1 -1
- package/dist/payments/client.js +45 -66
- package/dist/payments/client.js.map +1 -1
- package/dist/webhooks/event-types.d.ts +28 -3
- package/dist/webhooks/event-types.d.ts.map +1 -1
- package/dist/webhooks/event-types.js +31 -4
- package/dist/webhooks/event-types.js.map +1 -1
- package/dist/webhooks/index.d.ts +1 -1
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/index.js +2 -1
- package/dist/webhooks/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -81,7 +81,7 @@ new Payments({
|
|
|
81
81
|
| `createOrder(req, opts?)` | `POST /checkout/v2/orders` (merchant) / `POST /checkout/v2/isv/orders?merchantId={uuid}` (ISV). Returns `{ orderCode, redirectUrl }`. |
|
|
82
82
|
| `retrieveTransaction(transactionId, opts?)` | `GET /checkout/v2/[isv/]transactions/{id}`. Idempotent. |
|
|
83
83
|
| `refundPayment(transactionId, opts)` | `POST /api/transactions/{id}` on the **legacy host** with Basic auth (probe F1 — v2/OAuth2 path returns 405). Requires `legacyClient`. |
|
|
84
|
-
| `cancelOrder(orderCode, opts
|
|
84
|
+
| `cancelOrder(orderCode, opts)` | `DELETE /api/orders/{orderCode}` on the **legacy host** with Basic auth (the v2/OAuth2 `/checkout/v2/orders/{oc}` route returns 404). Requires `legacyClient` — Merchant Basic (M) or a Reseller-variant per call (I). Idempotent. |
|
|
85
85
|
|
|
86
86
|
Mode behaviour: in merchant mode, `merchantId` (if passed) is silently
|
|
87
87
|
ignored; `isvAmount` is stripped from the wire body. In ISV mode,
|
|
@@ -3,19 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Some ISV API calls (e.g. `cancelOrder`) require a Reseller-level basic-auth
|
|
5
5
|
* credential rather than the OAuth2 bearer token. This strategy computes the
|
|
6
|
-
* `Authorization: Basic <base64(merchantId:resellerApiKey)>` header
|
|
7
|
-
* returns it from `getBearerToken()` so the S3 HTTP client remains
|
|
8
|
-
* it always calls `getBearerToken()` and uses the result verbatim.
|
|
6
|
+
* `Authorization: Basic <base64(resellerId:merchantId:resellerApiKey)>` header
|
|
7
|
+
* value and returns it from `getBearerToken()` so the S3 HTTP client remains
|
|
8
|
+
* uniform — it always calls `getBearerToken()` and uses the result verbatim.
|
|
9
9
|
*
|
|
10
|
-
* Credential combination used:
|
|
11
|
-
* Username = merchantId, Password = resellerApiKey
|
|
10
|
+
* Credential combination used (three-part):
|
|
11
|
+
* Username = resellerId:merchantId, Password = resellerApiKey
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* live demo. The ISV docs (`payment-isv-api.txt`) confirm Reseller ID +
|
|
15
|
-
* Merchant ID + Reseller API Key are required credentials but the precise
|
|
16
|
-
* Basic-auth encoding (which field is "username" vs "password") should be
|
|
17
|
-
* validated against a live Viva demo response before shipping.
|
|
18
|
-
* @see references/viva-docs/md/payment-isv-api.txt:1
|
|
13
|
+
* @see docs/internal/payment-isv-api.yaml:2650 (reseller auth structure)
|
|
19
14
|
*/
|
|
20
15
|
import type { AuthStrategy } from '../types/auth.js';
|
|
21
16
|
export interface ResellerStrategyOptions {
|
|
@@ -29,7 +24,7 @@ export interface ResellerStrategyOptions {
|
|
|
29
24
|
/**
|
|
30
25
|
* Returns a Basic-auth Authorization header value for ISV reseller calls.
|
|
31
26
|
*
|
|
32
|
-
* `getBearerToken()` returns `Basic <base64(merchantId:resellerApiKey)>`.
|
|
27
|
+
* `getBearerToken()` returns `Basic <base64(resellerId:merchantId:resellerApiKey)>`.
|
|
33
28
|
* The S3 layer sets `Authorization: <value>` — for this strategy the value
|
|
34
29
|
* includes the `Basic ` prefix so it can be used identically to a bearer value.
|
|
35
30
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reseller-strategy.d.ts","sourceRoot":"","sources":["../../src/auth/reseller-strategy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reseller-strategy.d.ts","sourceRoot":"","sources":["../../src/auth/reseller-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,QAAQ,CAAC,IAAI,yBAAyB;IAEtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,uBAAuB;IAM/E;;;;;;;OAOG;IACG,cAAc,CAAC,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;;;;;;;OAQG;IACH,sBAAsB,IAAI,MAAM;IAOhC,0EAA0E;IAC1E,IAAI,UAAU,IAAI,MAAM,CAEvB;CACF"}
|
|
@@ -4,26 +4,21 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Some ISV API calls (e.g. `cancelOrder`) require a Reseller-level basic-auth
|
|
6
6
|
* credential rather than the OAuth2 bearer token. This strategy computes the
|
|
7
|
-
* `Authorization: Basic <base64(merchantId:resellerApiKey)>` header
|
|
8
|
-
* returns it from `getBearerToken()` so the S3 HTTP client remains
|
|
9
|
-
* it always calls `getBearerToken()` and uses the result verbatim.
|
|
7
|
+
* `Authorization: Basic <base64(resellerId:merchantId:resellerApiKey)>` header
|
|
8
|
+
* value and returns it from `getBearerToken()` so the S3 HTTP client remains
|
|
9
|
+
* uniform — it always calls `getBearerToken()` and uses the result verbatim.
|
|
10
10
|
*
|
|
11
|
-
* Credential combination used:
|
|
12
|
-
* Username = merchantId, Password = resellerApiKey
|
|
11
|
+
* Credential combination used (three-part):
|
|
12
|
+
* Username = resellerId:merchantId, Password = resellerApiKey
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
* live demo. The ISV docs (`payment-isv-api.txt`) confirm Reseller ID +
|
|
16
|
-
* Merchant ID + Reseller API Key are required credentials but the precise
|
|
17
|
-
* Basic-auth encoding (which field is "username" vs "password") should be
|
|
18
|
-
* validated against a live Viva demo response before shipping.
|
|
19
|
-
* @see references/viva-docs/md/payment-isv-api.txt:1
|
|
14
|
+
* @see docs/internal/payment-isv-api.yaml:2650 (reseller auth structure)
|
|
20
15
|
*/
|
|
21
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
17
|
exports.ResellerBasicAuthStrategy = void 0;
|
|
23
18
|
/**
|
|
24
19
|
* Returns a Basic-auth Authorization header value for ISV reseller calls.
|
|
25
20
|
*
|
|
26
|
-
* `getBearerToken()` returns `Basic <base64(merchantId:resellerApiKey)>`.
|
|
21
|
+
* `getBearerToken()` returns `Basic <base64(resellerId:merchantId:resellerApiKey)>`.
|
|
27
22
|
* The S3 layer sets `Authorization: <value>` — for this strategy the value
|
|
28
23
|
* includes the `Basic ` prefix so it can be used identically to a bearer value.
|
|
29
24
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reseller-strategy.js","sourceRoot":"","sources":["../../src/auth/reseller-strategy.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"reseller-strategy.js","sourceRoot":"","sources":["../../src/auth/reseller-strategy.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAaH;;;;;;;;GAQG;AACH,MAAa,yBAAyB;IAC3B,IAAI,GAAG,qBAAqB,CAAC;IAErB,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,eAAe,CAAS;IAEzC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAA2B;QAC7E,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,cAAc,CAAC,KAAkC;QACrD,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACH,sBAAsB;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CACzB,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE,CAClE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,SAAS,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,0EAA0E;IAC1E,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF;AA7CD,8DA6CC"}
|
|
@@ -230,34 +230,41 @@ export declare class Payments {
|
|
|
230
230
|
/**
|
|
231
231
|
* Cancel an order that has not yet been paid.
|
|
232
232
|
*
|
|
233
|
-
* Idempotent per Viva docs: calling cancel on an already-cancelled or
|
|
234
|
-
* captured order returns the existing Viva response without error.
|
|
235
|
-
*
|
|
236
233
|
* Per plan P18: cancellation triggers webhook 4865 (Order Updated).
|
|
237
234
|
*
|
|
238
|
-
*
|
|
235
|
+
* CONTRACT (verified against live demo, 2026-06-13 — see
|
|
236
|
+
* docs/internal/viva-cancel-probes/*-findings.md):
|
|
237
|
+
* `DELETE /api/orders/{orderCode}` on the LEGACY HOST
|
|
238
|
+
* (`demo.vivapayments.com` / `www.vivapayments.com`) with Basic auth.
|
|
239
|
+
* Success → 200 `{ OrderCode, ErrorCode: 0, ErrorText: null, Success: true }`.
|
|
239
240
|
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
241
|
+
* The v2/OAuth2 route `DELETE /checkout/v2/orders/{orderCode}` does NOT exist
|
|
242
|
+
* — it returns an empty 404 for every order (even GET-by-code 404s), so the
|
|
243
|
+
* whole order-by-code resource is unavailable on `demo-api`/OAuth2. Cancel
|
|
244
|
+
* lives on the legacy host, exactly like refundPayment's cancel-transaction.
|
|
243
245
|
*
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
246
|
+
* AUTH per mode (the caller wires the correct `legacyClient`):
|
|
247
|
+
* - merchant: Merchant Basic — `base64(MerchantId:ApiKey)`.
|
|
248
|
+
* - isv: Reseller Basic — `base64(ResellerId:ConnectedMerchantId:ResellerApiKey)`.
|
|
249
|
+
* The caller passes a Reseller-variant client per-call via `opts.legacyClient`,
|
|
250
|
+
* since the cancel must authenticate as the reseller scoped to the connected
|
|
251
|
+
* merchant — an ISV never holds the connected merchant's ApiKey.
|
|
248
252
|
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
* already cancelled (idempotent). The fallback does NOT apply to non-401
|
|
252
|
-
* errors — those propagate as VivaApiError unchanged.
|
|
253
|
+
* This method calls `legacyClient` DIRECTLY (no OAuth2 / 401-fallback). If
|
|
254
|
+
* `legacyClient` is absent, throws VivaValidationError.
|
|
253
255
|
*
|
|
254
|
-
*
|
|
256
|
+
* Idempotent (verified): re-cancelling an already-cancelled order returns 200
|
|
257
|
+
* `Success: true`, not a 4xx — so the retry-on-5xx safety is sound and a second
|
|
258
|
+
* cancel is harmless.
|
|
259
|
+
*
|
|
260
|
+
* @see docs/internal/viva-cancel-probes/viva-cancel-order-findings.md (v2/OAuth2 route → 404)
|
|
261
|
+
* @see docs/internal/viva-cancel-probes/viva-cancel-legacy-findings.md (merchant legacy → 200)
|
|
262
|
+
* @see docs/internal/viva-cancel-probes/viva-cancel-isv-reseller-findings.md (ISV reseller legacy → 200, idempotent)
|
|
255
263
|
* @see references/viva-docs/md/webhooks-for-payments.txt:205 (4865 Order Updated)
|
|
256
|
-
* @see references/viva-docs/md/isv-credentials.txt:107 (reseller basic-auth)
|
|
257
|
-
* @see docs/plans/vendure-plugin-v0.md §D15 (reseller fallback scope)
|
|
258
264
|
*/
|
|
259
265
|
cancelOrder(orderCode: OrderCode, opts?: {
|
|
260
266
|
merchantId?: MerchantId;
|
|
267
|
+
legacyClient?: BasicAuthClient;
|
|
261
268
|
}): Promise<CancelOrderResponse>;
|
|
262
269
|
}
|
|
263
270
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/payments/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACX,MAAM,mBAAmB,CAAC;AAwB3B;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;CACzC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/payments/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACX,MAAM,mBAAmB,CAAC;AAwB3B;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;CACzC;AA+DD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;gBAE/C,MAAM,EAAE,cAAc;IAOlC;;;;;;;;;;;;;;;;;;OAkBG;IACG,WAAW,CACf,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GACxD,OAAO,CAAC,mBAAmB,CAAC;IAgF/B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,mBAAmB,CACvB,aAAa,EAAE,aAAa,EAC5B,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAA;KAAO,GACrC,OAAO,CAAC,2BAA2B,CAAC;IAqFvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;IACG,aAAa,CACjB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,UAAU,CAAC;QACvB,WAAW,CAAC,EAAE,UAAU,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mEAAmE;QACnE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB;;;;;WAKG;QACH,YAAY,CAAC,EAAE,eAAe,CAAC;KAChC,GACA,OAAO,CAAC,cAAc,CAAC;IA+D1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,WAAW,CACf,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QAAC,YAAY,CAAC,EAAE,eAAe,CAAA;KAAO,GACrE,OAAO,CAAC,mBAAmB,CAAC;CAqChC"}
|
package/dist/payments/client.js
CHANGED
|
@@ -119,26 +119,6 @@ function buildTransactionRetrieveUrl(mode, transactionId, merchantId) {
|
|
|
119
119
|
};
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
/**
|
|
123
|
-
* Build the path + query for `DELETE /checkout/v2/orders/{orderCode}`.
|
|
124
|
-
*
|
|
125
|
-
* Both modes share the same path template; only ISV mode appends the
|
|
126
|
-
* `merchantId` query parameter (and requires it).
|
|
127
|
-
*/
|
|
128
|
-
function buildOrderCancelUrl(mode, orderCode, merchantId) {
|
|
129
|
-
const path = `/checkout/v2/orders/${orderCode}`;
|
|
130
|
-
switch (mode) {
|
|
131
|
-
case 'merchant':
|
|
132
|
-
return { path, query: {} };
|
|
133
|
-
case 'isv':
|
|
134
|
-
if (!merchantId) {
|
|
135
|
-
throw new index_js_1.VivaValidationError({
|
|
136
|
-
message: "cancelOrder: merchantId is required when mode='isv'",
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
return { path, query: { merchantId } };
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
122
|
// ---------------------------------------------------------------------------
|
|
143
123
|
// Payments
|
|
144
124
|
// ---------------------------------------------------------------------------
|
|
@@ -470,63 +450,62 @@ class Payments {
|
|
|
470
450
|
/**
|
|
471
451
|
* Cancel an order that has not yet been paid.
|
|
472
452
|
*
|
|
473
|
-
* Idempotent per Viva docs: calling cancel on an already-cancelled or
|
|
474
|
-
* captured order returns the existing Viva response without error.
|
|
475
|
-
*
|
|
476
453
|
* Per plan P18: cancellation triggers webhook 4865 (Order Updated).
|
|
477
454
|
*
|
|
478
|
-
*
|
|
455
|
+
* CONTRACT (verified against live demo, 2026-06-13 — see
|
|
456
|
+
* docs/internal/viva-cancel-probes/*-findings.md):
|
|
457
|
+
* `DELETE /api/orders/{orderCode}` on the LEGACY HOST
|
|
458
|
+
* (`demo.vivapayments.com` / `www.vivapayments.com`) with Basic auth.
|
|
459
|
+
* Success → 200 `{ OrderCode, ErrorCode: 0, ErrorText: null, Success: true }`.
|
|
460
|
+
*
|
|
461
|
+
* The v2/OAuth2 route `DELETE /checkout/v2/orders/{orderCode}` does NOT exist
|
|
462
|
+
* — it returns an empty 404 for every order (even GET-by-code 404s), so the
|
|
463
|
+
* whole order-by-code resource is unavailable on `demo-api`/OAuth2. Cancel
|
|
464
|
+
* lives on the legacy host, exactly like refundPayment's cancel-transaction.
|
|
479
465
|
*
|
|
480
|
-
*
|
|
481
|
-
*
|
|
482
|
-
*
|
|
466
|
+
* AUTH per mode (the caller wires the correct `legacyClient`):
|
|
467
|
+
* - merchant: Merchant Basic — `base64(MerchantId:ApiKey)`.
|
|
468
|
+
* - isv: Reseller Basic — `base64(ResellerId:ConnectedMerchantId:ResellerApiKey)`.
|
|
469
|
+
* The caller passes a Reseller-variant client per-call via `opts.legacyClient`,
|
|
470
|
+
* since the cancel must authenticate as the reseller scoped to the connected
|
|
471
|
+
* merchant — an ISV never holds the connected merchant's ApiKey.
|
|
483
472
|
*
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
* the request is retried once with the secondary (Reseller basic-auth) client.
|
|
487
|
-
* A 401 from the secondary surfaces immediately as VivaAuthError — no further retry.
|
|
473
|
+
* This method calls `legacyClient` DIRECTLY (no OAuth2 / 401-fallback). If
|
|
474
|
+
* `legacyClient` is absent, throws VivaValidationError.
|
|
488
475
|
*
|
|
489
|
-
*
|
|
490
|
-
*
|
|
491
|
-
*
|
|
492
|
-
* errors — those propagate as VivaApiError unchanged.
|
|
476
|
+
* Idempotent (verified): re-cancelling an already-cancelled order returns 200
|
|
477
|
+
* `Success: true`, not a 4xx — so the retry-on-5xx safety is sound and a second
|
|
478
|
+
* cancel is harmless.
|
|
493
479
|
*
|
|
494
|
-
* @see
|
|
480
|
+
* @see docs/internal/viva-cancel-probes/viva-cancel-order-findings.md (v2/OAuth2 route → 404)
|
|
481
|
+
* @see docs/internal/viva-cancel-probes/viva-cancel-legacy-findings.md (merchant legacy → 200)
|
|
482
|
+
* @see docs/internal/viva-cancel-probes/viva-cancel-isv-reseller-findings.md (ISV reseller legacy → 200, idempotent)
|
|
495
483
|
* @see references/viva-docs/md/webhooks-for-payments.txt:205 (4865 Order Updated)
|
|
496
|
-
* @see references/viva-docs/md/isv-credentials.txt:107 (reseller basic-auth)
|
|
497
|
-
* @see docs/plans/vendure-plugin-v0.md §D15 (reseller fallback scope)
|
|
498
484
|
*/
|
|
499
485
|
async cancelOrder(orderCode, opts = {}) {
|
|
500
|
-
//
|
|
501
|
-
//
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
try {
|
|
512
|
-
raw = await this.client.request(requestOpts);
|
|
513
|
-
}
|
|
514
|
-
catch (err) {
|
|
515
|
-
// 401 → reseller fallback (D15). Only attempt if secondaryClient is present.
|
|
516
|
-
// A 401 from the secondary surfaces immediately — no further retry.
|
|
517
|
-
// @see docs/plans/vendure-plugin-v0.md §D15
|
|
518
|
-
// @see references/viva-docs/md/isv-credentials.txt:107
|
|
519
|
-
if (err instanceof index_js_1.VivaAuthError && err.httpStatus === 401 && this.secondaryClient) {
|
|
520
|
-
raw = await this.secondaryClient.request(requestOpts);
|
|
521
|
-
}
|
|
522
|
-
else {
|
|
523
|
-
throw err;
|
|
524
|
-
}
|
|
486
|
+
// legacyClient REQUIRED — DELETE /api/orders/{oc} on the legacy host with
|
|
487
|
+
// Basic auth. Merchant mode: Merchant Basic (construction-time legacyClient).
|
|
488
|
+
// ISV mode: a Reseller-variant client passed per-call (reseller creds +
|
|
489
|
+
// connected merchant UUID), mirroring refundPayment.
|
|
490
|
+
const legacyClient = opts.legacyClient ?? this.legacyClient;
|
|
491
|
+
if (!legacyClient) {
|
|
492
|
+
throw new index_js_1.VivaValidationError({
|
|
493
|
+
message: 'cancelOrder requires a legacyClient (Basic auth). ' +
|
|
494
|
+
'Merchant mode: configure the Merchant Basic pair (MerchantId + ApiKey). ' +
|
|
495
|
+
'ISV mode: pass a Reseller-variant client (resellerId + connectedMerchantId + resellerApiKey).',
|
|
496
|
+
});
|
|
525
497
|
}
|
|
498
|
+
const result = await legacyClient.request({
|
|
499
|
+
method: 'DELETE',
|
|
500
|
+
path: `/api/orders/${orderCode}`,
|
|
501
|
+
idempotent: true, // verified idempotent: re-cancel returns 200 Success
|
|
502
|
+
endpoint: 'DELETE /api/orders/{orderCode}',
|
|
503
|
+
});
|
|
504
|
+
const raw = result.data;
|
|
526
505
|
return {
|
|
527
|
-
orderCode: raw.OrderCode,
|
|
528
|
-
errorCode: raw.ErrorCode,
|
|
529
|
-
errorText: raw.ErrorText,
|
|
506
|
+
orderCode: (raw.OrderCode ?? orderCode),
|
|
507
|
+
errorCode: raw.ErrorCode ?? 0,
|
|
508
|
+
errorText: raw.ErrorText ?? '',
|
|
530
509
|
};
|
|
531
510
|
}
|
|
532
511
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/payments/client.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;;;AAeH,iDAAwE;AACxE,0DAAyD;AAEzD,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AA+CD;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,IAAkB,EAAE,UAA8B;IAC7E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACpD,KAAK,KAAK;YACR,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,8BAAmB,CAAC;oBAC5B,OAAO,EAAE,qDAAqD;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,2BAA2B,CAClC,IAAkB,EAClB,aAAqB,EACrB,UAA8B;IAE9B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,6BAA6B,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC3E,KAAK,KAAK;YACR,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,8BAAmB,CAAC;oBAC5B,OAAO,EAAE,6DAA6D;iBACvE,CAAC,CAAC;YACL,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,iCAAiC,aAAa,EAAE;gBACtD,KAAK,EAAE,EAAE,UAAU,EAAE;aACtB,CAAC;IACN,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/payments/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,12 +32,37 @@ export declare function isTransactionEvent(id: number): id is 1796 | 1797 | 1798
|
|
|
32
32
|
*/
|
|
33
33
|
export declare function isOnboardingEvent(id: number): id is 8193 | 8194;
|
|
34
34
|
/**
|
|
35
|
-
* All v1-scope event IDs as a frozen array.
|
|
35
|
+
* All v1-scope event IDs the webhook handler ACCEPTS INBOUND, as a frozen array.
|
|
36
36
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
37
|
+
* This is the route handler's allow-list for incoming notifications — it
|
|
38
|
+
* includes 4865 (Order Updated) because the endpoint legitimately RECEIVES
|
|
39
|
+
* order-cancellation events. It is NOT the set to register via the ISV API:
|
|
40
|
+
* 4865 is not registerable at the ISV partner-account level (see
|
|
41
|
+
* {@link ISV_EVENT_TYPE_IDS}). Use this for inbound validation only.
|
|
39
42
|
*
|
|
40
43
|
* @see references/viva-docs/md/webhooks-for-payments.txt:141
|
|
41
44
|
*/
|
|
42
45
|
export declare const V1_EVENT_TYPE_IDS: readonly (1796 | 1797 | 1798 | 4865 | 8193 | 8194)[];
|
|
46
|
+
/**
|
|
47
|
+
* Event IDs registerable via the ISV webhook API (`POST /isv/v1/webhooks`).
|
|
48
|
+
*
|
|
49
|
+
* The ISV partner-account webhook API accepts only the transaction events plus
|
|
50
|
+
* the two "Marketplace & ISV only" onboarding events. It does NOT accept 4865
|
|
51
|
+
* (Order Updated) — that is an order-level Smart Checkout event registerable
|
|
52
|
+
* only per-merchant via Self-Care, and `POST /isv/v1/webhooks` rejects it with
|
|
53
|
+
* `IsvCreateWebhookFailedInvalidEventTypeId`. (sakee-tech/vivawallet-npm-public#18)
|
|
54
|
+
*
|
|
55
|
+
* 1796 — Transaction Payment Created
|
|
56
|
+
* 1797 — Transaction Reversal Created
|
|
57
|
+
* 1798 — Transaction Failed
|
|
58
|
+
* 8193 — Account Connected (Marketplace & ISV only)
|
|
59
|
+
* 8194 — Account Verification Status Changed (Marketplace & ISV only)
|
|
60
|
+
*
|
|
61
|
+
* 1799 (Transaction Price Calculated) is intentionally excluded — it is
|
|
62
|
+
* deferred post-v1 (see DEFERRED_EVENT_TYPES).
|
|
63
|
+
*
|
|
64
|
+
* @see references/viva-docs/md/webhooks-for-payments.txt:222 (8193/8194 "Marketplace & ISV only")
|
|
65
|
+
* @see references/viva-docs/md/isv-partner-program.txt:200 (ISV webhook event list — no 4865)
|
|
66
|
+
*/
|
|
67
|
+
export declare const ISV_EVENT_TYPE_IDS: readonly (1796 | 1797 | 1798 | 8193 | 8194)[];
|
|
43
68
|
//# sourceMappingURL=event-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/webhooks/event-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAE9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,CAE/D;AAED
|
|
1
|
+
{"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/webhooks/event-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAE9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,CAE/D;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAEvE,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAEjE,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @see references/viva-docs/md/webhooks-for-payments.txt:141
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.V1_EVENT_TYPE_IDS = exports.EVENT_TYPES = void 0;
|
|
11
|
+
exports.ISV_EVENT_TYPE_IDS = exports.V1_EVENT_TYPE_IDS = exports.EVENT_TYPES = void 0;
|
|
12
12
|
exports.isTransactionEvent = isTransactionEvent;
|
|
13
13
|
exports.isOnboardingEvent = isOnboardingEvent;
|
|
14
14
|
var webhook_events_js_1 = require("../types/webhook-events.js");
|
|
@@ -42,14 +42,41 @@ function isOnboardingEvent(id) {
|
|
|
42
42
|
return id === 8193 || id === 8194;
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
* All v1-scope event IDs as a frozen array.
|
|
45
|
+
* All v1-scope event IDs the webhook handler ACCEPTS INBOUND, as a frozen array.
|
|
46
46
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
47
|
+
* This is the route handler's allow-list for incoming notifications — it
|
|
48
|
+
* includes 4865 (Order Updated) because the endpoint legitimately RECEIVES
|
|
49
|
+
* order-cancellation events. It is NOT the set to register via the ISV API:
|
|
50
|
+
* 4865 is not registerable at the ISV partner-account level (see
|
|
51
|
+
* {@link ISV_EVENT_TYPE_IDS}). Use this for inbound validation only.
|
|
49
52
|
*
|
|
50
53
|
* @see references/viva-docs/md/webhooks-for-payments.txt:141
|
|
51
54
|
*/
|
|
52
55
|
exports.V1_EVENT_TYPE_IDS = Object.freeze([
|
|
53
56
|
1796, 1797, 1798, 4865, 8193, 8194,
|
|
54
57
|
]);
|
|
58
|
+
/**
|
|
59
|
+
* Event IDs registerable via the ISV webhook API (`POST /isv/v1/webhooks`).
|
|
60
|
+
*
|
|
61
|
+
* The ISV partner-account webhook API accepts only the transaction events plus
|
|
62
|
+
* the two "Marketplace & ISV only" onboarding events. It does NOT accept 4865
|
|
63
|
+
* (Order Updated) — that is an order-level Smart Checkout event registerable
|
|
64
|
+
* only per-merchant via Self-Care, and `POST /isv/v1/webhooks` rejects it with
|
|
65
|
+
* `IsvCreateWebhookFailedInvalidEventTypeId`. (sakee-tech/vivawallet-npm-public#18)
|
|
66
|
+
*
|
|
67
|
+
* 1796 — Transaction Payment Created
|
|
68
|
+
* 1797 — Transaction Reversal Created
|
|
69
|
+
* 1798 — Transaction Failed
|
|
70
|
+
* 8193 — Account Connected (Marketplace & ISV only)
|
|
71
|
+
* 8194 — Account Verification Status Changed (Marketplace & ISV only)
|
|
72
|
+
*
|
|
73
|
+
* 1799 (Transaction Price Calculated) is intentionally excluded — it is
|
|
74
|
+
* deferred post-v1 (see DEFERRED_EVENT_TYPES).
|
|
75
|
+
*
|
|
76
|
+
* @see references/viva-docs/md/webhooks-for-payments.txt:222 (8193/8194 "Marketplace & ISV only")
|
|
77
|
+
* @see references/viva-docs/md/isv-partner-program.txt:200 (ISV webhook event list — no 4865)
|
|
78
|
+
*/
|
|
79
|
+
exports.ISV_EVENT_TYPE_IDS = Object.freeze([
|
|
80
|
+
1796, 1797, 1798, 8193, 8194,
|
|
81
|
+
]);
|
|
55
82
|
//# 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;;;AAgBH,gDAEC;AAYD,8CAEC;AA9BD,gEAA+E;AAAtE,gHAAA,WAAW,OAAA;AAEpB;;;;;;;;;;;GAWG;AACH,SAAgB,kBAAkB,CAAC,EAAU;IAC3C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AAClE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAAC,EAAU;IAC1C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AACpC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"event-types.js","sourceRoot":"","sources":["../../src/webhooks/event-types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAgBH,gDAEC;AAYD,8CAEC;AA9BD,gEAA+E;AAAtE,gHAAA,WAAW,OAAA;AAEpB;;;;;;;;;;;GAWG;AACH,SAAgB,kBAAkB,CAAC,EAAU;IAC3C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AAClE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAAC,EAAU;IAC1C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACU,QAAA,iBAAiB,GAAyD,MAAM,CAAC,MAAM,CAAC;IACnG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CAC1B,CAAC,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;GAoBG;AACU,QAAA,kBAAkB,GAAkD,MAAM,CAAC,MAAM,CAAC;IAC7F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACpB,CAAC,CAAC"}
|
package/dist/webhooks/index.d.ts
CHANGED
|
@@ -15,6 +15,6 @@
|
|
|
15
15
|
export { buildChallengeResponse } from './challenge-response.js';
|
|
16
16
|
export { VIVA_DEMO_IPS, VIVA_PROD_IPS, isAllowedSourceIp, } from './ip-allowlist.js';
|
|
17
17
|
export { extractClientIp, type ClientIpRequest, } from './extract-client-ip.js';
|
|
18
|
-
export { EVENT_TYPES, type VivaEventTypeId, isTransactionEvent, isOnboardingEvent, V1_EVENT_TYPE_IDS, } from './event-types.js';
|
|
18
|
+
export { EVENT_TYPES, type VivaEventTypeId, isTransactionEvent, isOnboardingEvent, V1_EVENT_TYPE_IDS, ISV_EVENT_TYPE_IDS, } from './event-types.js';
|
|
19
19
|
export { mapStatusLetter, validateStatusTransition, applyStatusTransition, type StatusTransitionResult, } from './status-lattice.js';
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,WAAW,EACX,KAAK,eAAe,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,WAAW,EACX,KAAK,eAAe,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC"}
|
package/dist/webhooks/index.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @see references/viva-docs/md/webhooks-for-payments.txt:254
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.applyStatusTransition = exports.validateStatusTransition = exports.mapStatusLetter = exports.V1_EVENT_TYPE_IDS = exports.isOnboardingEvent = exports.isTransactionEvent = exports.EVENT_TYPES = exports.extractClientIp = exports.isAllowedSourceIp = exports.VIVA_PROD_IPS = exports.VIVA_DEMO_IPS = exports.buildChallengeResponse = void 0;
|
|
17
|
+
exports.applyStatusTransition = exports.validateStatusTransition = exports.mapStatusLetter = exports.ISV_EVENT_TYPE_IDS = exports.V1_EVENT_TYPE_IDS = exports.isOnboardingEvent = exports.isTransactionEvent = exports.EVENT_TYPES = exports.extractClientIp = exports.isAllowedSourceIp = exports.VIVA_PROD_IPS = exports.VIVA_DEMO_IPS = exports.buildChallengeResponse = void 0;
|
|
18
18
|
var challenge_response_js_1 = require("./challenge-response.js");
|
|
19
19
|
Object.defineProperty(exports, "buildChallengeResponse", { enumerable: true, get: function () { return challenge_response_js_1.buildChallengeResponse; } });
|
|
20
20
|
var ip_allowlist_js_1 = require("./ip-allowlist.js");
|
|
@@ -28,6 +28,7 @@ Object.defineProperty(exports, "EVENT_TYPES", { enumerable: true, get: function
|
|
|
28
28
|
Object.defineProperty(exports, "isTransactionEvent", { enumerable: true, get: function () { return event_types_js_1.isTransactionEvent; } });
|
|
29
29
|
Object.defineProperty(exports, "isOnboardingEvent", { enumerable: true, get: function () { return event_types_js_1.isOnboardingEvent; } });
|
|
30
30
|
Object.defineProperty(exports, "V1_EVENT_TYPE_IDS", { enumerable: true, get: function () { return event_types_js_1.V1_EVENT_TYPE_IDS; } });
|
|
31
|
+
Object.defineProperty(exports, "ISV_EVENT_TYPE_IDS", { enumerable: true, get: function () { return event_types_js_1.ISV_EVENT_TYPE_IDS; } });
|
|
31
32
|
var status_lattice_js_1 = require("./status-lattice.js");
|
|
32
33
|
Object.defineProperty(exports, "mapStatusLetter", { enumerable: true, get: function () { return status_lattice_js_1.mapStatusLetter; } });
|
|
33
34
|
Object.defineProperty(exports, "validateStatusTransition", { enumerable: true, get: function () { return status_lattice_js_1.validateStatusTransition; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;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,mDAO0B;AANxB,6GAAA,WAAW,OAAA;AAEX,oHAAA,kBAAkB,OAAA;AAClB,mHAAA,iBAAiB,OAAA;AACjB,mHAAA,iBAAiB,OAAA;AACjB,oHAAA,kBAAkB,OAAA;AAGpB,yDAK6B;AAJ3B,oHAAA,eAAe,OAAA;AACf,6HAAA,wBAAwB,OAAA;AACxB,0HAAA,qBAAqB,OAAA"}
|
package/package.json
CHANGED