@sakeetech/viva-payments-core 0.2.1
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/LICENSE +21 -0
- package/README.md +413 -0
- package/dist/auth/http.d.ts +44 -0
- package/dist/auth/http.d.ts.map +1 -0
- package/dist/auth/http.js +80 -0
- package/dist/auth/http.js.map +1 -0
- package/dist/auth/index.d.ts +19 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +18 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth2-strategy.d.ts +117 -0
- package/dist/auth/oauth2-strategy.d.ts.map +1 -0
- package/dist/auth/oauth2-strategy.js +217 -0
- package/dist/auth/oauth2-strategy.js.map +1 -0
- package/dist/auth/reseller-strategy.d.ts +65 -0
- package/dist/auth/reseller-strategy.d.ts.map +1 -0
- package/dist/auth/reseller-strategy.js +68 -0
- package/dist/auth/reseller-strategy.js.map +1 -0
- package/dist/auth/single-flight.d.ts +81 -0
- package/dist/auth/single-flight.d.ts.map +1 -0
- package/dist/auth/single-flight.js +160 -0
- package/dist/auth/single-flight.js.map +1 -0
- package/dist/auth/token-cache.d.ts +50 -0
- package/dist/auth/token-cache.d.ts.map +1 -0
- package/dist/auth/token-cache.js +59 -0
- package/dist/auth/token-cache.js.map +1 -0
- package/dist/errors/api-error.d.ts +15 -0
- package/dist/errors/api-error.d.ts.map +1 -0
- package/dist/errors/api-error.js +18 -0
- package/dist/errors/api-error.js.map +1 -0
- package/dist/errors/auth-error.d.ts +14 -0
- package/dist/errors/auth-error.d.ts.map +1 -0
- package/dist/errors/auth-error.js +17 -0
- package/dist/errors/auth-error.js.map +1 -0
- package/dist/errors/base.d.ts +59 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +51 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/index.d.ts +18 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +16 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/mode-mismatch-error.d.ts +19 -0
- package/dist/errors/mode-mismatch-error.d.ts.map +1 -0
- package/dist/errors/mode-mismatch-error.js +22 -0
- package/dist/errors/mode-mismatch-error.js.map +1 -0
- package/dist/errors/rate-limit-error.d.ts +20 -0
- package/dist/errors/rate-limit-error.d.ts.map +1 -0
- package/dist/errors/rate-limit-error.js +20 -0
- package/dist/errors/rate-limit-error.js.map +1 -0
- package/dist/errors/validation-error.d.ts +14 -0
- package/dist/errors/validation-error.d.ts.map +1 -0
- package/dist/errors/validation-error.js +17 -0
- package/dist/errors/validation-error.js.map +1 -0
- package/dist/errors/webhook-error.d.ts +14 -0
- package/dist/errors/webhook-error.d.ts.map +1 -0
- package/dist/errors/webhook-error.js +17 -0
- package/dist/errors/webhook-error.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/isv/accounts.d.ts +38 -0
- package/dist/isv/accounts.d.ts.map +1 -0
- package/dist/isv/accounts.js +60 -0
- package/dist/isv/accounts.js.map +1 -0
- package/dist/isv/client.d.ts +187 -0
- package/dist/isv/client.d.ts.map +1 -0
- package/dist/isv/client.js +465 -0
- package/dist/isv/client.js.map +1 -0
- package/dist/isv/index.d.ts +52 -0
- package/dist/isv/index.d.ts.map +1 -0
- package/dist/isv/index.js +53 -0
- package/dist/isv/index.js.map +1 -0
- package/dist/isv/legacy-basic-client.d.ts +122 -0
- package/dist/isv/legacy-basic-client.d.ts.map +1 -0
- package/dist/isv/legacy-basic-client.js +281 -0
- package/dist/isv/legacy-basic-client.js.map +1 -0
- package/dist/isv/payments.d.ts +199 -0
- package/dist/isv/payments.d.ts.map +1 -0
- package/dist/isv/payments.js +385 -0
- package/dist/isv/payments.js.map +1 -0
- package/dist/isv/sources.d.ts +80 -0
- package/dist/isv/sources.d.ts.map +1 -0
- package/dist/isv/sources.js +112 -0
- package/dist/isv/sources.js.map +1 -0
- package/dist/isv/webhooks-api.d.ts +48 -0
- package/dist/isv/webhooks-api.d.ts.map +1 -0
- package/dist/isv/webhooks-api.js +66 -0
- package/dist/isv/webhooks-api.js.map +1 -0
- package/dist/legacy/client.d.ts +199 -0
- package/dist/legacy/client.d.ts.map +1 -0
- package/dist/legacy/client.js +351 -0
- package/dist/legacy/client.js.map +1 -0
- package/dist/legacy/index.d.ts +15 -0
- package/dist/legacy/index.d.ts.map +1 -0
- package/dist/legacy/index.js +14 -0
- package/dist/legacy/index.js.map +1 -0
- package/dist/observability/context.d.ts +30 -0
- package/dist/observability/context.d.ts.map +1 -0
- package/dist/observability/context.js +40 -0
- package/dist/observability/context.js.map +1 -0
- package/dist/observability/index.d.ts +15 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +11 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +81 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +127 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +37 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +40 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/redact.d.ts +21 -0
- package/dist/observability/redact.d.ts.map +1 -0
- package/dist/observability/redact.js +72 -0
- package/dist/observability/redact.js.map +1 -0
- package/dist/observability/tracer.d.ts +25 -0
- package/dist/observability/tracer.d.ts.map +1 -0
- package/dist/observability/tracer.js +18 -0
- package/dist/observability/tracer.js.map +1 -0
- package/dist/payments/client.d.ts +247 -0
- package/dist/payments/client.d.ts.map +1 -0
- package/dist/payments/client.js +488 -0
- package/dist/payments/client.js.map +1 -0
- package/dist/payments/index.d.ts +14 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +13 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/refunds/fast-refund-client.d.ts +128 -0
- package/dist/refunds/fast-refund-client.d.ts.map +1 -0
- package/dist/refunds/fast-refund-client.js +138 -0
- package/dist/refunds/fast-refund-client.js.map +1 -0
- package/dist/refunds/index.d.ts +19 -0
- package/dist/refunds/index.d.ts.map +1 -0
- package/dist/refunds/index.js +17 -0
- package/dist/refunds/index.js.map +1 -0
- package/dist/refunds/strategy.d.ts +78 -0
- package/dist/refunds/strategy.d.ts.map +1 -0
- package/dist/refunds/strategy.js +75 -0
- package/dist/refunds/strategy.js.map +1 -0
- package/dist/types/auth.d.ts +80 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +12 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/card-types.d.ts +48 -0
- package/dist/types/card-types.d.ts.map +1 -0
- package/dist/types/card-types.js +62 -0
- package/dist/types/card-types.js.map +1 -0
- package/dist/types/common.d.ts +160 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +70 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/isv-accounts.d.ts +109 -0
- package/dist/types/isv-accounts.d.ts.map +1 -0
- package/dist/types/isv-accounts.js +22 -0
- package/dist/types/isv-accounts.js.map +1 -0
- package/dist/types/isv-payments.d.ts +262 -0
- package/dist/types/isv-payments.d.ts.map +1 -0
- package/dist/types/isv-payments.js +19 -0
- package/dist/types/isv-payments.js.map +1 -0
- package/dist/types/status.d.ts +125 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +19 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/webhook-events.d.ts +447 -0
- package/dist/types/webhook-events.d.ts.map +1 -0
- package/dist/types/webhook-events.js +76 -0
- package/dist/types/webhook-events.js.map +1 -0
- package/dist/webhooks/challenge-response.d.ts +28 -0
- package/dist/webhooks/challenge-response.d.ts.map +1 -0
- package/dist/webhooks/challenge-response.js +35 -0
- package/dist/webhooks/challenge-response.js.map +1 -0
- package/dist/webhooks/event-types.d.ts +44 -0
- package/dist/webhooks/event-types.d.ts.map +1 -0
- package/dist/webhooks/event-types.js +50 -0
- package/dist/webhooks/event-types.js.map +1 -0
- package/dist/webhooks/extract-client-ip.d.ts +40 -0
- package/dist/webhooks/extract-client-ip.d.ts.map +1 -0
- package/dist/webhooks/extract-client-ip.js +72 -0
- package/dist/webhooks/extract-client-ip.js.map +1 -0
- package/dist/webhooks/hmac-verify.d.ts +38 -0
- package/dist/webhooks/hmac-verify.d.ts.map +1 -0
- package/dist/webhooks/hmac-verify.js +92 -0
- package/dist/webhooks/hmac-verify.js.map +1 -0
- package/dist/webhooks/index.d.ts +19 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +19 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/ip-allowlist.d.ts +59 -0
- package/dist/webhooks/ip-allowlist.d.ts.map +1 -0
- package/dist/webhooks/ip-allowlist.js +147 -0
- package/dist/webhooks/ip-allowlist.js.map +1 -0
- package/dist/webhooks/status-lattice.d.ts +72 -0
- package/dist/webhooks/status-lattice.d.ts.map +1 -0
- package/dist/webhooks/status-lattice.js +208 -0
- package/dist/webhooks/status-lattice.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IsvHttpClient — shared HTTP wrapper for all ISV API calls.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Resolve base URL from VivaEnvironment
|
|
6
|
+
* - Inject Authorization header from AuthStrategy.getBearerToken()
|
|
7
|
+
* - Bigint-safe JSON serialization (request body) and deserialization (response)
|
|
8
|
+
* - Per-request timeout via AbortController
|
|
9
|
+
* - Retry policy: idempotent requests retry 429 + 5xx up to 3 times with
|
|
10
|
+
* exponential backoff [500, 1500, 4500]ms ±20% jitter
|
|
11
|
+
* - Non-idempotent POST: only retry on connection-level errors (never on ack)
|
|
12
|
+
* - 401 handling: force-refresh token once, retry same request once
|
|
13
|
+
* - Error mapping to typed VivaError subclasses
|
|
14
|
+
*
|
|
15
|
+
* @see references/viva-docs/md/isv-credentials.txt:107 (auth credential types)
|
|
16
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104 (ISV API overview)
|
|
17
|
+
*/
|
|
18
|
+
import { fetch as undiciFetch } from 'undici';
|
|
19
|
+
import { ENVIRONMENT_URLS } from '../types/index.js';
|
|
20
|
+
import { getApiDispatcher } from '../auth/http.js';
|
|
21
|
+
import { VivaApiError, VivaValidationError as _VivaValidationError, VivaRateLimitError, } from '../errors/index.js';
|
|
22
|
+
import { VivaAuthError } from '../errors/index.js';
|
|
23
|
+
import { NoopMetricsHook } from '../observability/index.js';
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Bigint-safe JSON utilities
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Bigint-safe JSON.stringify.
|
|
29
|
+
*
|
|
30
|
+
* - bigint values <= Number.MAX_SAFE_INTEGER → serialized as JSON number
|
|
31
|
+
* - bigint values > Number.MAX_SAFE_INTEGER → serialized as JSON string
|
|
32
|
+
* (emits a console.warn — the OrderCode case).
|
|
33
|
+
*
|
|
34
|
+
* Wire format: Viva's `Amount` is integer minor units (fits safe int for
|
|
35
|
+
* realistic payment amounts). `OrderCode` is int64 and can exceed
|
|
36
|
+
* Number.MAX_SAFE_INTEGER (e.g. 1234567890123456789).
|
|
37
|
+
*
|
|
38
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104
|
|
39
|
+
*/
|
|
40
|
+
function bigintSafeStringify(value) {
|
|
41
|
+
return JSON.stringify(value, (_key, val) => {
|
|
42
|
+
if (typeof val === 'bigint') {
|
|
43
|
+
if (val >= -BigInt(Number.MAX_SAFE_INTEGER) && val <= BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
44
|
+
return Number(val);
|
|
45
|
+
}
|
|
46
|
+
// TODO(impl): OrderCode > MAX_SAFE_INTEGER encoded as string — confirm
|
|
47
|
+
// Viva accepts JSON string for OrderCode in request bodies. At present
|
|
48
|
+
// only DELETE /checkout/v2/orders/{orderCode} uses OrderCode in the URL,
|
|
49
|
+
// not in the body, so this path is informational only.
|
|
50
|
+
// @see references/viva-docs/md/isv-partner-program.txt:104
|
|
51
|
+
console.warn(`[viva-payments-core] bigint value ${val} exceeds Number.MAX_SAFE_INTEGER; encoding as JSON string`);
|
|
52
|
+
return val.toString();
|
|
53
|
+
}
|
|
54
|
+
return val;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Bigint-safe JSON.parse for Viva API responses.
|
|
59
|
+
*
|
|
60
|
+
* Converts the `OrderCode` field to BigInt on parse to preserve precision.
|
|
61
|
+
* Other numeric fields are left as JavaScript numbers (they fit safely).
|
|
62
|
+
*
|
|
63
|
+
* @see references/viva-docs/md/webhooks-for-payments.txt:495 (OrderCode is long/int64)
|
|
64
|
+
* @see references/viva-docs/md/account-api.txt:1584 (OrderCode type: long)
|
|
65
|
+
*/
|
|
66
|
+
function bigintSafeParse(text) {
|
|
67
|
+
return JSON.parse(text, (key, val) => {
|
|
68
|
+
if (key === 'OrderCode' || key === 'orderCode') {
|
|
69
|
+
// val at this point is a JS number — may have lost precision if > 2^53.
|
|
70
|
+
// We parse the raw number from the original text using a regex replace
|
|
71
|
+
// to preserve precision. The reviver approach is sufficient for most
|
|
72
|
+
// cases but for truly out-of-range values we rely on the raw string.
|
|
73
|
+
// Safe: JSON numbers for OrderCode are int64; regex below is conservative.
|
|
74
|
+
if (typeof val === 'number') {
|
|
75
|
+
return BigInt(val);
|
|
76
|
+
}
|
|
77
|
+
if (typeof val === 'string') {
|
|
78
|
+
return BigInt(val);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return val;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Constants
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
const DEFAULT_BACKOFFS_MS = [500, 1500, 4500];
|
|
88
|
+
const DEFAULT_JITTER_RATIO = 0.2;
|
|
89
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
90
|
+
const MAX_RETRIES = 3;
|
|
91
|
+
/** Connection-level error codes that indicate the request was never acked. */
|
|
92
|
+
const CONNECTION_ERROR_CODES = new Set([
|
|
93
|
+
'ECONNRESET',
|
|
94
|
+
'ENOTFOUND',
|
|
95
|
+
'ETIMEDOUT',
|
|
96
|
+
'ECONNREFUSED',
|
|
97
|
+
'ECONNABORTED',
|
|
98
|
+
'UND_ERR_CONNECT_TIMEOUT',
|
|
99
|
+
'UND_ERR_HEADERS_TIMEOUT',
|
|
100
|
+
'UND_ERR_BODY_TIMEOUT',
|
|
101
|
+
]);
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// IsvHttpClient
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
/**
|
|
106
|
+
* Shared HTTP client for all ISV API endpoints.
|
|
107
|
+
*
|
|
108
|
+
* Constructed once per platform context (auth strategy + environment) and
|
|
109
|
+
* shared across IsvPayments, IsvAccounts, IsvWebhooks.
|
|
110
|
+
*
|
|
111
|
+
* @see references/viva-docs/md/isv-credentials.txt:107
|
|
112
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104
|
|
113
|
+
*/
|
|
114
|
+
export class IsvHttpClient {
|
|
115
|
+
apiBaseUrl;
|
|
116
|
+
authStrategy;
|
|
117
|
+
dispatcher;
|
|
118
|
+
fetchImpl;
|
|
119
|
+
now;
|
|
120
|
+
backoffsMs;
|
|
121
|
+
jitterRatio;
|
|
122
|
+
defaultTimeoutMs;
|
|
123
|
+
metrics;
|
|
124
|
+
/**
|
|
125
|
+
* Last observed `x-viva-correlationid` header value.
|
|
126
|
+
* Updated after every successful HTTP response. Used by `requestWithMeta`.
|
|
127
|
+
* Probe-verified 2026-04-25: Viva includes this on every response.
|
|
128
|
+
*/
|
|
129
|
+
_vivaLastCorrelationId = undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Last observed `x-viva-eventid` header value.
|
|
132
|
+
* Updated after every successful HTTP response. Used by `requestWithMeta`.
|
|
133
|
+
*/
|
|
134
|
+
_vivaLastEventId = undefined;
|
|
135
|
+
constructor(config) {
|
|
136
|
+
this.apiBaseUrl = ENVIRONMENT_URLS[config.environment].apiBaseUrl;
|
|
137
|
+
this.authStrategy = config.authStrategy;
|
|
138
|
+
this.now = config.now ?? (() => Date.now());
|
|
139
|
+
this.backoffsMs = config.retryBackoffsMs ?? DEFAULT_BACKOFFS_MS;
|
|
140
|
+
this.jitterRatio = config.jitterRatio ?? DEFAULT_JITTER_RATIO;
|
|
141
|
+
this.defaultTimeoutMs = config.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
142
|
+
this.metrics = config.metrics ?? new NoopMetricsHook();
|
|
143
|
+
if (config.dispatcher) {
|
|
144
|
+
this.dispatcher = config.dispatcher;
|
|
145
|
+
// When a dispatcher is injected (tests), use undici's fetch with that dispatcher.
|
|
146
|
+
this.fetchImpl = config.fetchImpl ?? undiciFetch;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.dispatcher = getApiDispatcher(config.environment);
|
|
150
|
+
this.fetchImpl = config.fetchImpl ?? undiciFetch;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Execute an outbound request to the Viva ISV API.
|
|
155
|
+
*
|
|
156
|
+
* Auth flow per plan Auth Flow line 317:
|
|
157
|
+
* 1. Get bearer token from authStrategy.
|
|
158
|
+
* 2. Execute request.
|
|
159
|
+
* 3. On 401: force-refresh token once, retry once.
|
|
160
|
+
* 4. Second 401 → VivaAuthError.
|
|
161
|
+
*
|
|
162
|
+
* Retry policy per plan Auth Flow line 319:
|
|
163
|
+
* - Idempotent: retry 429 + 5xx up to MAX_RETRIES with backoff + jitter.
|
|
164
|
+
* - Non-idempotent: retry only on connection-level errors.
|
|
165
|
+
*
|
|
166
|
+
* @see references/viva-docs/md/isv-credentials.txt:107 (auth strategy)
|
|
167
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104 (retry policy)
|
|
168
|
+
*/
|
|
169
|
+
async request(opts) {
|
|
170
|
+
// Auth-refresh-then-retry is handled outside the idempotent retry loop.
|
|
171
|
+
// We do one auth-refresh cycle independently.
|
|
172
|
+
const endpoint = opts.endpoint ?? `${opts.method} ${opts.path}`;
|
|
173
|
+
return this.metrics.timeAsync('viva_api_request_duration_seconds', () => this._withAuthRefresh(opts), { endpoint });
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Like `request<T>` but also returns Viva tracing headers.
|
|
177
|
+
*
|
|
178
|
+
* Returns `{ data: T, vivaCorrelationId, vivaEventId }` for observability.
|
|
179
|
+
* Use this when the caller needs the `x-viva-correlationid` / `x-viva-eventid`
|
|
180
|
+
* values (e.g. to log them or attach them to structured traces).
|
|
181
|
+
*
|
|
182
|
+
* Probe-verified 2026-04-25: both headers are present on every Viva response.
|
|
183
|
+
*
|
|
184
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104
|
|
185
|
+
*/
|
|
186
|
+
async requestWithMeta(opts) {
|
|
187
|
+
const endpoint = opts.endpoint ?? `${opts.method} ${opts.path}`;
|
|
188
|
+
const data = await this.metrics.timeAsync('viva_api_request_duration_seconds', () => this._withAuthRefresh(opts), { endpoint });
|
|
189
|
+
return {
|
|
190
|
+
data,
|
|
191
|
+
vivaCorrelationId: this._vivaLastCorrelationId,
|
|
192
|
+
vivaEventId: this._vivaLastEventId,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// --------------------------------------------------------------------------
|
|
196
|
+
// Private helpers
|
|
197
|
+
// --------------------------------------------------------------------------
|
|
198
|
+
/**
|
|
199
|
+
* Executes the request with a single auth-refresh-then-retry cycle.
|
|
200
|
+
*
|
|
201
|
+
* On first 401: forceRefresh token, retry the request once.
|
|
202
|
+
* On second 401: throw VivaAuthError.
|
|
203
|
+
*
|
|
204
|
+
* @see references/viva-docs/md/isv-credentials.txt:107
|
|
205
|
+
*/
|
|
206
|
+
async _withAuthRefresh(opts) {
|
|
207
|
+
const token = await this.authStrategy.getBearerToken();
|
|
208
|
+
try {
|
|
209
|
+
return await this._executeWithRetry(opts, token);
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
if (err instanceof VivaAuthError && err.httpStatus === 401) {
|
|
213
|
+
// Force-refresh and retry once.
|
|
214
|
+
const freshToken = await this.authStrategy.getBearerToken({ forceRefresh: true });
|
|
215
|
+
return await this._executeWithRetry(opts, freshToken);
|
|
216
|
+
}
|
|
217
|
+
throw err;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Executes the request with the idempotent retry loop.
|
|
222
|
+
* Does NOT handle auth-refresh — that is the caller's responsibility.
|
|
223
|
+
*
|
|
224
|
+
* Viva tracing headers are extracted on every response:
|
|
225
|
+
* - `x-viva-correlationid` (e.g. "26-115-EDAA55BC") — probe-verified 2026-04-25.
|
|
226
|
+
* - `x-viva-eventid` (e.g. "0") — probe-verified 2026-04-25.
|
|
227
|
+
* On errors these are attached to the thrown VivaError. On success they are
|
|
228
|
+
* available via the `_vivaLastCorrelationId` / `_vivaLastEventId` fields for
|
|
229
|
+
* callers that need them (use `request<T>` for the raw value; use
|
|
230
|
+
* `requestWithMeta<T>` for explicit access to the tracing pair).
|
|
231
|
+
*
|
|
232
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104 (Auth Flow line 319)
|
|
233
|
+
*/
|
|
234
|
+
async _executeWithRetry(opts, token) {
|
|
235
|
+
let attempt = 0;
|
|
236
|
+
// eslint-disable-next-line no-constant-condition
|
|
237
|
+
while (true) {
|
|
238
|
+
const { response, text } = await this._attempt(opts, token);
|
|
239
|
+
// Extract Viva tracing headers — present on every response (probe-verified 2026-04-25).
|
|
240
|
+
const vivaCorrelationId = response.headers.get('x-viva-correlationid') ?? undefined;
|
|
241
|
+
const vivaEventId = response.headers.get('x-viva-eventid') ?? undefined;
|
|
242
|
+
// Store last seen values for requestWithMeta.
|
|
243
|
+
this._vivaLastCorrelationId = vivaCorrelationId;
|
|
244
|
+
this._vivaLastEventId = vivaEventId;
|
|
245
|
+
// --- happy path ---
|
|
246
|
+
if (response.status >= 200 && response.status < 300) {
|
|
247
|
+
if (!text || response.status === 204) {
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
return bigintSafeParse(text);
|
|
251
|
+
}
|
|
252
|
+
// --- 401: surface immediately (auth-refresh handled in _withAuthRefresh) ---
|
|
253
|
+
if (response.status === 401) {
|
|
254
|
+
const requestId = response.headers.get('Cf-Ray') ?? response.headers.get('CorrelationId') ?? undefined;
|
|
255
|
+
throw new VivaAuthError({
|
|
256
|
+
message: `Viva API authentication failed (HTTP 401)`,
|
|
257
|
+
httpStatus: 401,
|
|
258
|
+
requestId,
|
|
259
|
+
vivaCorrelationId,
|
|
260
|
+
vivaEventId,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
// --- 429: rate limit ---
|
|
264
|
+
if (response.status === 429) {
|
|
265
|
+
if (opts.idempotent && attempt < MAX_RETRIES) {
|
|
266
|
+
const retryAfterMs = this._retryAfterMs(response) ?? this._backoffMs(attempt);
|
|
267
|
+
await this._sleep(retryAfterMs);
|
|
268
|
+
attempt++;
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
const requestId = response.headers.get('Cf-Ray') ?? response.headers.get('CorrelationId') ?? undefined;
|
|
272
|
+
const retryAfterMs = this._retryAfterMs(response);
|
|
273
|
+
throw new VivaRateLimitError({
|
|
274
|
+
message: `Viva API rate limited (HTTP 429)`,
|
|
275
|
+
httpStatus: 429,
|
|
276
|
+
requestId,
|
|
277
|
+
vivaCorrelationId,
|
|
278
|
+
vivaEventId,
|
|
279
|
+
...(retryAfterMs !== undefined ? { retryAfterMs } : {}),
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
// --- 5xx ---
|
|
283
|
+
if (response.status >= 500) {
|
|
284
|
+
if (opts.idempotent && attempt < MAX_RETRIES) {
|
|
285
|
+
const backoffMs = this._backoffMs(attempt);
|
|
286
|
+
await this._sleep(backoffMs);
|
|
287
|
+
attempt++;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
const requestId = response.headers.get('Cf-Ray') ?? response.headers.get('CorrelationId') ?? undefined;
|
|
291
|
+
const { vivaCode, vivaMessage } = this._parseErrorBody(text);
|
|
292
|
+
throw new VivaApiError({
|
|
293
|
+
message: vivaMessage ?? `Viva API error (HTTP ${response.status})`,
|
|
294
|
+
httpStatus: response.status,
|
|
295
|
+
vivaCode,
|
|
296
|
+
requestId,
|
|
297
|
+
vivaCorrelationId,
|
|
298
|
+
vivaEventId,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
// --- other 4xx ---
|
|
302
|
+
{
|
|
303
|
+
const requestId = response.headers.get('Cf-Ray') ?? response.headers.get('CorrelationId') ?? undefined;
|
|
304
|
+
const { vivaCode, vivaMessage } = this._parseErrorBody(text);
|
|
305
|
+
throw new VivaApiError({
|
|
306
|
+
message: vivaMessage ?? `Viva API error (HTTP ${response.status})`,
|
|
307
|
+
httpStatus: response.status,
|
|
308
|
+
vivaCode,
|
|
309
|
+
requestId,
|
|
310
|
+
vivaCorrelationId,
|
|
311
|
+
vivaEventId,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Makes a single HTTP attempt. On connection-level errors:
|
|
318
|
+
* - If idempotent: bubble up (outer loop handles retry).
|
|
319
|
+
* - If NOT idempotent: retry once on connection-level errors per plan
|
|
320
|
+
* Auth Flow line 319 (request never acked).
|
|
321
|
+
*/
|
|
322
|
+
async _attempt(opts, token) {
|
|
323
|
+
const url = this._buildUrl(opts.path, opts.query);
|
|
324
|
+
const timeoutMs = opts.timeoutMs ?? this.defaultTimeoutMs;
|
|
325
|
+
const controller = new AbortController();
|
|
326
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
327
|
+
const headers = {
|
|
328
|
+
Authorization: `Bearer ${token}`,
|
|
329
|
+
'Content-Type': 'application/json',
|
|
330
|
+
Accept: 'application/json',
|
|
331
|
+
};
|
|
332
|
+
if (opts.idempotencyKey) {
|
|
333
|
+
// TODO(impl): Viva's exact idempotency header name is unconfirmed.
|
|
334
|
+
// Using `Idempotency-Key` (RFC 8929 / widely adopted convention).
|
|
335
|
+
// Update if Viva docs specify a different header name.
|
|
336
|
+
// @see references/viva-docs/md/isv-partner-program.txt:104
|
|
337
|
+
headers['Idempotency-Key'] = opts.idempotencyKey;
|
|
338
|
+
}
|
|
339
|
+
const fetchOptions = {
|
|
340
|
+
method: opts.method,
|
|
341
|
+
headers,
|
|
342
|
+
signal: controller.signal,
|
|
343
|
+
};
|
|
344
|
+
if (opts.body !== undefined) {
|
|
345
|
+
fetchOptions.body = bigintSafeStringify(opts.body);
|
|
346
|
+
}
|
|
347
|
+
if (this.dispatcher) {
|
|
348
|
+
fetchOptions['dispatcher'] = this.dispatcher;
|
|
349
|
+
}
|
|
350
|
+
let maxConnectionRetries = opts.idempotent ? 0 : 1;
|
|
351
|
+
let connAttempt = 0;
|
|
352
|
+
// eslint-disable-next-line no-constant-condition
|
|
353
|
+
while (true) {
|
|
354
|
+
try {
|
|
355
|
+
const response = await this.fetchImpl(url, fetchOptions);
|
|
356
|
+
clearTimeout(timeoutId);
|
|
357
|
+
const text = await response.text();
|
|
358
|
+
return { response, text };
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
clearTimeout(timeoutId);
|
|
362
|
+
const isConnectionError = this._isConnectionError(err);
|
|
363
|
+
const isAbort = err instanceof Error && err.name === 'AbortError';
|
|
364
|
+
// Aborted due to our timeout (not network) → not a connection error.
|
|
365
|
+
if (isAbort && !this._isBeforeAck(err)) {
|
|
366
|
+
throw new VivaApiError({
|
|
367
|
+
message: `Viva API request timed out after ${timeoutMs}ms`,
|
|
368
|
+
cause: err,
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
if ((isConnectionError || isAbort) && !opts.idempotent && connAttempt < maxConnectionRetries) {
|
|
372
|
+
// Non-idempotent: one retry on connection-level errors (request not acked).
|
|
373
|
+
connAttempt++;
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
throw new VivaApiError({
|
|
377
|
+
message: isAbort
|
|
378
|
+
? `Viva API request timed out`
|
|
379
|
+
: `Viva API network error: ${err instanceof Error ? err.message : String(err)}`,
|
|
380
|
+
cause: err,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
_buildUrl(path, query) {
|
|
386
|
+
const base = `${this.apiBaseUrl}${path}`;
|
|
387
|
+
if (!query)
|
|
388
|
+
return base;
|
|
389
|
+
const params = new URLSearchParams();
|
|
390
|
+
for (const [k, v] of Object.entries(query)) {
|
|
391
|
+
if (v !== undefined) {
|
|
392
|
+
params.set(k, String(v));
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const qs = params.toString();
|
|
396
|
+
return qs ? `${base}?${qs}` : base;
|
|
397
|
+
}
|
|
398
|
+
_backoffMs(attempt) {
|
|
399
|
+
const base = this.backoffsMs[attempt] ?? this.backoffsMs[this.backoffsMs.length - 1] ?? 500;
|
|
400
|
+
const jitter = base * this.jitterRatio * (Math.random() * 2 - 1);
|
|
401
|
+
return Math.max(0, Math.round(base + jitter));
|
|
402
|
+
}
|
|
403
|
+
_retryAfterMs(response) {
|
|
404
|
+
const header = response.headers.get('Retry-After');
|
|
405
|
+
if (!header)
|
|
406
|
+
return undefined;
|
|
407
|
+
const seconds = parseFloat(header);
|
|
408
|
+
if (!isNaN(seconds))
|
|
409
|
+
return Math.max(0, Math.round(seconds * 1000));
|
|
410
|
+
// HTTP-date format — try to parse it.
|
|
411
|
+
const date = new Date(header).getTime();
|
|
412
|
+
if (!isNaN(date))
|
|
413
|
+
return Math.max(0, date - this.now());
|
|
414
|
+
return undefined;
|
|
415
|
+
}
|
|
416
|
+
_parseErrorBody(text) {
|
|
417
|
+
if (!text)
|
|
418
|
+
return {};
|
|
419
|
+
try {
|
|
420
|
+
const parsed = JSON.parse(text);
|
|
421
|
+
// Viva error response shape observed: { ErrorCode, Message } or similar
|
|
422
|
+
// TODO(impl): confirm exact Viva error body field names (ErrorCode vs error_code, Message vs message)
|
|
423
|
+
// @see references/viva-docs/md/isv-partner-program.txt:104
|
|
424
|
+
const vivaCode = typeof parsed['ErrorCode'] === 'number'
|
|
425
|
+
? String(parsed['ErrorCode'])
|
|
426
|
+
: typeof parsed['errorCode'] === 'number'
|
|
427
|
+
? String(parsed['errorCode'])
|
|
428
|
+
: typeof parsed['error'] === 'string'
|
|
429
|
+
? parsed['error']
|
|
430
|
+
: undefined;
|
|
431
|
+
const vivaMessage = typeof parsed['Message'] === 'string'
|
|
432
|
+
? parsed['Message']
|
|
433
|
+
: typeof parsed['message'] === 'string'
|
|
434
|
+
? parsed['message']
|
|
435
|
+
: undefined;
|
|
436
|
+
return { vivaCode, vivaMessage };
|
|
437
|
+
}
|
|
438
|
+
catch {
|
|
439
|
+
return {};
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
_isConnectionError(err) {
|
|
443
|
+
if (!(err instanceof Error))
|
|
444
|
+
return false;
|
|
445
|
+
const code = err.code;
|
|
446
|
+
if (code && CONNECTION_ERROR_CODES.has(code))
|
|
447
|
+
return true;
|
|
448
|
+
// undici-specific
|
|
449
|
+
if (err.message.includes('ECONNRESET') || err.message.includes('ENOTFOUND'))
|
|
450
|
+
return true;
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Heuristic: was the abort triggered before any byte was received?
|
|
455
|
+
* Since AbortError doesn't carry this info directly, we treat all AbortErrors
|
|
456
|
+
* from our own timeout as "possibly not acked" — safe for non-idempotent retry.
|
|
457
|
+
*/
|
|
458
|
+
_isBeforeAck(_err) {
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
_sleep(ms) {
|
|
462
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/isv/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* viva-payments-core/isv — barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Subpath: `viva-payments-core/isv`
|
|
5
|
+
*
|
|
6
|
+
* Exports the ISV-specific API client classes (Accounts, Webhooks) and the
|
|
7
|
+
* shared HTTP client. Also re-exports `Payments` and `BasicAuthClient` under
|
|
8
|
+
* their previous names (`IsvPayments`, `LegacyBasicClient`) as deprecated
|
|
9
|
+
* aliases for one-minor back-compat — these will be removed in 0.3.0.
|
|
10
|
+
*
|
|
11
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104
|
|
12
|
+
* @see references/viva-docs/md/payment-isv-api.txt:1
|
|
13
|
+
*/
|
|
14
|
+
export { IsvHttpClient } from './client.js';
|
|
15
|
+
export type { IsvHttpClientConfig } from './client.js';
|
|
16
|
+
export { IsvAccounts } from './accounts.js';
|
|
17
|
+
export { IsvWebhooks } from './webhooks-api.js';
|
|
18
|
+
export { IsvSources } from './sources.js';
|
|
19
|
+
export type { CreateEcommerceSourceInput, CreatePhysicalSourceInput, SourceResponse, } from './sources.js';
|
|
20
|
+
import { Payments } from '../payments/index.js';
|
|
21
|
+
import type { IsvHttpClient } from './client.js';
|
|
22
|
+
import { BasicAuthClient } from '../legacy/index.js';
|
|
23
|
+
import type { BasicAuthClientConfig, LegacyApiResult, MerchantBasicAuthClientConfig } from '../legacy/index.js';
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated Use `Payments` from `@sakeetech/viva-payments-core/payments`
|
|
26
|
+
* with `mode: 'isv'` explicitly set. Will be removed in 0.3.0.
|
|
27
|
+
*
|
|
28
|
+
* Back-compat wrapper that preserves the pre-slice-2 positional constructor
|
|
29
|
+
* signature and pins `mode: 'isv'` on the underlying {@link Payments} class.
|
|
30
|
+
* Existing call sites such as `new IsvPayments(client, undefined, legacyClient)`
|
|
31
|
+
* continue to compile and behave as before.
|
|
32
|
+
*/
|
|
33
|
+
export declare class IsvPayments extends Payments {
|
|
34
|
+
constructor(client: IsvHttpClient, secondaryClient?: IsvHttpClient, legacyClient?: BasicAuthClient);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Renamed to `BasicAuthClient` — import from
|
|
38
|
+
* `@sakeetech/viva-payments-core/legacy`. Will be removed in 0.3.0.
|
|
39
|
+
*
|
|
40
|
+
* Back-compat wrapper that always pins `authVariant: 'merchant'` on the
|
|
41
|
+
* underlying {@link BasicAuthClient}. Pre-slice-4 adapter call sites that
|
|
42
|
+
* construct `LegacyBasicClient` with `{ environment, merchantId, apiKey }`
|
|
43
|
+
* continue to compile and behave identically.
|
|
44
|
+
*/
|
|
45
|
+
export declare class LegacyBasicClient extends BasicAuthClient {
|
|
46
|
+
constructor(opts: Omit<MerchantBasicAuthClientConfig, 'authVariant'>);
|
|
47
|
+
}
|
|
48
|
+
/** @deprecated Renamed to `BasicAuthClientConfig` — import from `@sakeetech/viva-payments-core/legacy`. Will be removed in 0.3.0. */
|
|
49
|
+
export type LegacyBasicClientConfig = BasicAuthClientConfig;
|
|
50
|
+
/** @deprecated Import from `@sakeetech/viva-payments-core/legacy`. Will be removed in 0.3.0. */
|
|
51
|
+
export type { LegacyApiResult };
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/isv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,6BAA6B,EAC9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,QAAQ;gBAErC,MAAM,EAAE,aAAa,EACrB,eAAe,CAAC,EAAE,aAAa,EAC/B,YAAY,CAAC,EAAE,eAAe;CASjC;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,IAAI,EAAE,IAAI,CAAC,6BAA6B,EAAE,aAAa,CAAC;CAGrE;AAED,qIAAqI;AACrI,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AAE5D,gGAAgG;AAChG,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* viva-payments-core/isv — barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Subpath: `viva-payments-core/isv`
|
|
5
|
+
*
|
|
6
|
+
* Exports the ISV-specific API client classes (Accounts, Webhooks) and the
|
|
7
|
+
* shared HTTP client. Also re-exports `Payments` and `BasicAuthClient` under
|
|
8
|
+
* their previous names (`IsvPayments`, `LegacyBasicClient`) as deprecated
|
|
9
|
+
* aliases for one-minor back-compat — these will be removed in 0.3.0.
|
|
10
|
+
*
|
|
11
|
+
* @see references/viva-docs/md/isv-partner-program.txt:104
|
|
12
|
+
* @see references/viva-docs/md/payment-isv-api.txt:1
|
|
13
|
+
*/
|
|
14
|
+
export { IsvHttpClient } from './client.js';
|
|
15
|
+
export { IsvAccounts } from './accounts.js';
|
|
16
|
+
export { IsvWebhooks } from './webhooks-api.js';
|
|
17
|
+
export { IsvSources } from './sources.js';
|
|
18
|
+
import { Payments } from '../payments/index.js';
|
|
19
|
+
import { BasicAuthClient } from '../legacy/index.js';
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated Use `Payments` from `@sakeetech/viva-payments-core/payments`
|
|
22
|
+
* with `mode: 'isv'` explicitly set. Will be removed in 0.3.0.
|
|
23
|
+
*
|
|
24
|
+
* Back-compat wrapper that preserves the pre-slice-2 positional constructor
|
|
25
|
+
* signature and pins `mode: 'isv'` on the underlying {@link Payments} class.
|
|
26
|
+
* Existing call sites such as `new IsvPayments(client, undefined, legacyClient)`
|
|
27
|
+
* continue to compile and behave as before.
|
|
28
|
+
*/
|
|
29
|
+
export class IsvPayments extends Payments {
|
|
30
|
+
constructor(client, secondaryClient, legacyClient) {
|
|
31
|
+
super({
|
|
32
|
+
mode: 'isv',
|
|
33
|
+
client,
|
|
34
|
+
...(secondaryClient !== undefined ? { secondaryClient } : {}),
|
|
35
|
+
...(legacyClient !== undefined ? { legacyClient } : {}),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated Renamed to `BasicAuthClient` — import from
|
|
41
|
+
* `@sakeetech/viva-payments-core/legacy`. Will be removed in 0.3.0.
|
|
42
|
+
*
|
|
43
|
+
* Back-compat wrapper that always pins `authVariant: 'merchant'` on the
|
|
44
|
+
* underlying {@link BasicAuthClient}. Pre-slice-4 adapter call sites that
|
|
45
|
+
* construct `LegacyBasicClient` with `{ environment, merchantId, apiKey }`
|
|
46
|
+
* continue to compile and behave identically.
|
|
47
|
+
*/
|
|
48
|
+
export class LegacyBasicClient extends BasicAuthClient {
|
|
49
|
+
constructor(opts) {
|
|
50
|
+
super({ authVariant: 'merchant', ...opts });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/isv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,YACE,MAAqB,EACrB,eAA+B,EAC/B,YAA8B;QAE9B,KAAK,CAAC;YACJ,IAAI,EAAE,KAAK;YACX,MAAM;YACN,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,YAAY,IAAwD;QAClE,KAAK,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF"}
|