@pacspace-io/sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +65 -9
  2. package/dist/client.d.ts +33 -2
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +294 -19
  5. package/dist/client.js.map +1 -1
  6. package/dist/errors/index.d.ts +24 -1
  7. package/dist/errors/index.d.ts.map +1 -1
  8. package/dist/errors/index.js +44 -4
  9. package/dist/errors/index.js.map +1 -1
  10. package/dist/index.d.ts +49 -11
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +106 -7
  13. package/dist/index.js.map +1 -1
  14. package/dist/resources/balance.d.ts +207 -13
  15. package/dist/resources/balance.d.ts.map +1 -1
  16. package/dist/resources/balance.js +356 -16
  17. package/dist/resources/balance.js.map +1 -1
  18. package/dist/resources/submission.d.ts +79 -0
  19. package/dist/resources/submission.d.ts.map +1 -0
  20. package/dist/resources/submission.js +398 -0
  21. package/dist/resources/submission.js.map +1 -0
  22. package/dist/types/balance.d.ts +489 -19
  23. package/dist/types/balance.d.ts.map +1 -1
  24. package/dist/types/config.d.ts +51 -1
  25. package/dist/types/config.d.ts.map +1 -1
  26. package/dist/types/submission.d.ts +125 -0
  27. package/dist/types/submission.d.ts.map +1 -0
  28. package/dist/types/submission.js +3 -0
  29. package/dist/types/submission.js.map +1 -0
  30. package/dist/webhooks/index.d.ts +1 -1
  31. package/dist/webhooks/index.d.ts.map +1 -1
  32. package/dist/webhooks/types.d.ts +27 -31
  33. package/dist/webhooks/types.d.ts.map +1 -1
  34. package/dist/webhooks/types.js +0 -3
  35. package/dist/webhooks/types.js.map +1 -1
  36. package/dist/webhooks/verify.d.ts +5 -0
  37. package/dist/webhooks/verify.d.ts.map +1 -1
  38. package/dist/webhooks/verify.js +19 -4
  39. package/dist/webhooks/verify.js.map +1 -1
  40. package/package.json +1 -1
package/README.md CHANGED
@@ -41,7 +41,9 @@ const checkpoint = await pac.balance.checkpoint('cust_123', {
41
41
  | Option | Type | Default | Description |
42
42
  |--------|------|---------|-------------|
43
43
  | `apiKey` | `string` | **required** | Your PacSpace API key (`pk_live_*` or `pk_test_*`) |
44
- | `baseUrl` | `string` | `https://balance-api.pacspace.io` | API base URL |
44
+ | `baseUrl` | `string` | auto-routed | API base URL (overrides auto-routing if provided) |
45
+ | `sandboxUrl` | `string` | `https://api-sandbox-<hash>.run.app` | Custom sandbox URL (used for `pk_test_*` keys) |
46
+ | `productionUrl` | `string` | `https://api.pacspace.io` | Custom production URL (used for `pk_live_*` keys) |
45
47
  | `chainId` | `number` | auto-detected | Default chain ID (296 for sandbox, 295 for production) |
46
48
  | `maxRetries` | `number` | `2` | Max retries on transient errors |
47
49
  | `timeout` | `number` | `30000` | Request timeout in ms |
@@ -103,17 +105,36 @@ if (report.matchesYours) {
103
105
 
104
106
  #### `pac.balance.receipt(customerId, options?)`
105
107
 
106
- Generate a verifiable receipt with cryptographic proof data.
108
+ Generate a verifiable receipt. With `options.period` (YYYY-MM), returns a period-specific receipt with `proofRoot`, `verifyUrl`, and `verificationReference` — share the `verifyUrl` on invoices for counterparty verification.
107
109
 
108
110
  ```typescript
109
- const receipt = await pac.balance.receipt('cust_123');
111
+ // Period receipt (shareable proof for invoices)
112
+ const receipt = await pac.balance.receipt('cust_123', { period: '2026-02' });
113
+ console.log(receipt.proofRoot); // Proof root for verification
114
+ console.log(receipt.verifyUrl); // app.pacspace.io/verify/{proofRoot}
110
115
  console.log(receipt.finalBalance);
111
- console.log(receipt.verification.itemHashes);
116
+
117
+ // Full ledger receipt (all verified deltas)
118
+ const full = await pac.balance.receipt('cust_123');
119
+ console.log(full.finalBalance);
120
+ console.log(full.verification.itemHashes);
121
+ ```
122
+
123
+ #### `pac.verify(proofRoot)`
124
+
125
+ Verify a proof root via the public verification endpoint. No API key required — the proof root is the access key.
126
+
127
+ ```typescript
128
+ const result = await pac.verify(receipt.proofRoot);
129
+ if (result.verified) {
130
+ console.log(result.verification?.publicLedgerUrl);
131
+ console.log(result.summary?.recordCount);
132
+ }
112
133
  ```
113
134
 
114
135
  #### `pac.balance.checkpoint(customerId?, options?)`
115
136
 
116
- Commit a period-end checkpoint (Merkle root anchored on-chain).
137
+ Commit a period-end checkpoint. The proof root is recorded on the public verification layer for independent verification.
117
138
 
118
139
  ```typescript
119
140
  const checkpoint = await pac.balance.checkpoint('cust_123', {
@@ -179,12 +200,47 @@ try {
179
200
  | `RateLimitError` | 429 | Rate limit exceeded |
180
201
  | `TimeoutError` | — | Polling timeout exceeded |
181
202
 
182
- ## Environment Detection
203
+ ## Environment Detection & Auto-Routing
183
204
 
184
- The SDK auto-detects your environment from the API key prefix:
205
+ The SDK automatically routes requests to the correct API endpoint based on your API key prefix:
185
206
 
186
- - `pk_test_*` → Sandbox (Hedera Testnet, chain 296)
187
- - `pk_live_*` → Production (Hedera Mainnet, chain 295)
207
+ - `pk_test_*` → Sandbox API (`https://api-sandbox-<hash>.run.app`) + Hedera Testnet (chain 296)
208
+ - `pk_live_*` → Production API (`https://api.pacspace.io`) + Hedera Mainnet (chain 295)
209
+
210
+ ### Examples
211
+
212
+ **Sandbox (automatic):**
213
+ ```typescript
214
+ const pac = new PacSpace({ apiKey: 'pk_test_...' });
215
+ // Automatically uses sandbox API URL
216
+ ```
217
+
218
+ **Production (automatic):**
219
+ ```typescript
220
+ const pac = new PacSpace({ apiKey: 'pk_live_...' });
221
+ // Automatically uses production API URL
222
+ ```
223
+
224
+ **Custom URLs:**
225
+ ```typescript
226
+ // Override sandbox URL
227
+ const pac = new PacSpace({
228
+ apiKey: 'pk_test_...',
229
+ sandboxUrl: 'https://custom-sandbox.example.com',
230
+ });
231
+
232
+ // Override production URL
233
+ const pac = new PacSpace({
234
+ apiKey: 'pk_live_...',
235
+ productionUrl: 'https://custom-production.example.com',
236
+ });
237
+
238
+ // Override with explicit baseUrl (disables auto-routing)
239
+ const pac = new PacSpace({
240
+ apiKey: 'pk_test_...',
241
+ baseUrl: 'https://custom-api.example.com',
242
+ });
243
+ ```
188
244
 
189
245
  ## Requirements
190
246
 
package/dist/client.d.ts CHANGED
@@ -11,11 +11,24 @@ export declare class HttpClient {
11
11
  private readonly maxRetries;
12
12
  private readonly timeout;
13
13
  private readonly fetchFn;
14
+ private readonly bufferWrites;
15
+ private readonly bufferMaxItems;
16
+ private readonly bufferMaxAttempts;
17
+ private readonly bufferBaseDelayMs;
18
+ private readonly bufferMaxDelayMs;
19
+ private readonly bufferedWrites;
20
+ private drainTimer;
21
+ private drainInProgress;
22
+ private closed;
14
23
  /** Default chain ID, auto-detected from API key prefix or explicit config. */
15
24
  readonly defaultChainId: number | undefined;
16
25
  /** Default credit pool ID. */
17
26
  readonly defaultCreditPoolId: number | undefined;
18
27
  constructor(config: PacSpaceConfig);
28
+ /**
29
+ * Close the client and reject any buffered writes.
30
+ */
31
+ close(reason?: string): void;
19
32
  /**
20
33
  * Make a GET request and return unwrapped data.
21
34
  */
@@ -46,9 +59,27 @@ export declare class HttpClient {
46
59
  */
47
60
  private safeParseJson;
48
61
  /**
49
- * Extract a string error message from a parsed error body.
62
+ * Extract normalized API error fields from an error payload.
63
+ */
64
+ private extractApiError;
65
+ private asMessage;
66
+ private asRecord;
67
+ private asString;
68
+ private asNumber;
69
+ private shouldBufferRequest;
70
+ private enqueueBufferedRequest;
71
+ private removeBufferedRequest;
72
+ private scheduleBufferDrain;
73
+ private drainBufferedWrites;
74
+ private getBufferDelayMs;
75
+ /**
76
+ * Auto-detect base URL from API key prefix.
77
+ * - `pk_test_*` keys → sandbox API URL
78
+ * - `pk_live_*` keys → production API URL
79
+ *
80
+ * Custom URLs from config override the defaults.
50
81
  */
51
- private extractErrorMessage;
82
+ private detectBaseUrl;
52
83
  /**
53
84
  * Auto-detect chain ID from API key prefix.
54
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAwBrE;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAEvC,8EAA8E;IAC9E,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,8BAA8B;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAErC,MAAM,EAAE,cAAc;IA4BlC;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhE;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;YACW,OAAO;IAwFrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;YACW,gBAAgB;IAoC9B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;YACW,aAAa;IAU3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA+ErE;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuC;IACtE,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,MAAM,CAAS;IAEvB,8EAA8E;IAC9E,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,8BAA8B;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAErC,MAAM,EAAE,cAAc;IAyClC;;OAEG;IACH,KAAK,CAAC,MAAM,SAAkB,GAAG,IAAI;IAYrC;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhE;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;YACW,OAAO;IAiIrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;YACW,gBAAgB;IAoC9B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;YACW,aAAa;IAU3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,sBAAsB;IA4D9B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,mBAAmB;YAiBb,mBAAmB;IA0CjC,OAAO,CAAC,gBAAgB;IAYxB;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
package/dist/client.js CHANGED
@@ -3,9 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpClient = void 0;
4
4
  const errors_1 = require("./errors");
5
5
  /**
6
- * Default base URL for the PacSpace API.
6
+ * Default sandbox API base URL.
7
7
  */
8
- const DEFAULT_BASE_URL = 'https://balance-api.pacspace.io';
8
+ const DEFAULT_SANDBOX_URL = 'https://api-sandbox-wnizuypena-uw.a.run.app';
9
+ /**
10
+ * Default production API base URL.
11
+ */
12
+ const DEFAULT_PRODUCTION_URL = 'https://api.pacspace.io';
9
13
  /**
10
14
  * Default request timeout in milliseconds.
11
15
  */
@@ -14,6 +18,26 @@ const DEFAULT_TIMEOUT_MS = 30000;
14
18
  * Default maximum number of retries on transient errors.
15
19
  */
16
20
  const DEFAULT_MAX_RETRIES = 2;
21
+ /**
22
+ * Enable client-side write buffering by default.
23
+ */
24
+ const DEFAULT_BUFFER_WRITES = true;
25
+ /**
26
+ * Maximum in-memory buffered write requests.
27
+ */
28
+ const DEFAULT_BUFFER_MAX_ITEMS = 1000;
29
+ /**
30
+ * Maximum retry attempts per buffered request.
31
+ */
32
+ const DEFAULT_BUFFER_MAX_ATTEMPTS = 100;
33
+ /**
34
+ * Base delay for buffered request retries.
35
+ */
36
+ const DEFAULT_BUFFER_BASE_DELAY_MS = 1000;
37
+ /**
38
+ * Max delay for buffered request retries.
39
+ */
40
+ const DEFAULT_BUFFER_MAX_DELAY_MS = 60000;
17
41
  /**
18
42
  * HTTP status codes that are safe to retry.
19
43
  */
@@ -26,14 +50,30 @@ const RETRYABLE_STATUS_CODES = new Set([408, 429, 500, 502, 503, 504]);
26
50
  */
27
51
  class HttpClient {
28
52
  constructor(config) {
53
+ this.bufferedWrites = [];
54
+ this.drainTimer = null;
55
+ this.drainInProgress = false;
56
+ this.closed = false;
29
57
  if (!config.apiKey) {
30
58
  throw new errors_1.PacSpaceError('API key is required. Pass it via new PacSpace({ apiKey: "pk_..." })', 0, 'MISSING_API_KEY');
31
59
  }
32
60
  this.apiKey = config.apiKey;
33
- this.baseUrl = (config.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, '');
61
+ // Determine base URL: explicit baseUrl overrides everything, otherwise auto-route by API key prefix
62
+ if (config.baseUrl) {
63
+ this.baseUrl = config.baseUrl.replace(/\/+$/, '');
64
+ }
65
+ else {
66
+ this.baseUrl = this.detectBaseUrl(config.apiKey, config).replace(/\/+$/, '');
67
+ }
34
68
  this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;
35
69
  this.timeout = config.timeout ?? DEFAULT_TIMEOUT_MS;
36
70
  this.fetchFn = config.fetch || globalThis.fetch;
71
+ this.bufferWrites = config.bufferWrites ?? DEFAULT_BUFFER_WRITES;
72
+ this.bufferMaxItems = config.bufferMaxItems ?? DEFAULT_BUFFER_MAX_ITEMS;
73
+ this.bufferMaxAttempts = config.bufferMaxAttempts ?? DEFAULT_BUFFER_MAX_ATTEMPTS;
74
+ this.bufferBaseDelayMs =
75
+ config.bufferBaseDelayMs ?? DEFAULT_BUFFER_BASE_DELAY_MS;
76
+ this.bufferMaxDelayMs = config.bufferMaxDelayMs ?? DEFAULT_BUFFER_MAX_DELAY_MS;
37
77
  // Auto-detect chain ID from API key prefix
38
78
  this.defaultChainId = config.chainId ?? this.detectChainId(config.apiKey);
39
79
  this.defaultCreditPoolId = config.creditPoolId;
@@ -41,6 +81,20 @@ class HttpClient {
41
81
  throw new errors_1.PacSpaceError('No global fetch found. Upgrade to Node 18+ or pass a custom fetch implementation via config.', 0, 'NO_FETCH');
42
82
  }
43
83
  }
84
+ /**
85
+ * Close the client and reject any buffered writes.
86
+ */
87
+ close(reason = 'Client closed') {
88
+ this.closed = true;
89
+ if (this.drainTimer) {
90
+ clearTimeout(this.drainTimer);
91
+ this.drainTimer = null;
92
+ }
93
+ const pending = this.bufferedWrites.splice(0, this.bufferedWrites.length);
94
+ for (const item of pending) {
95
+ item.reject(new errors_1.PacSpaceError(reason, 0, 'CLIENT_CLOSED', item.path));
96
+ }
97
+ }
44
98
  /**
45
99
  * Make a GET request and return unwrapped data.
46
100
  */
@@ -56,7 +110,10 @@ class HttpClient {
56
110
  /**
57
111
  * Core request method with retry logic, auth injection, and response unwrapping.
58
112
  */
59
- async request(method, path, body, options) {
113
+ async request(method, path, body, options, allowBuffering = true) {
114
+ if (this.closed) {
115
+ throw new errors_1.PacSpaceError('Client closed', 0, 'CLIENT_CLOSED', path);
116
+ }
60
117
  const url = `${this.baseUrl}${path}`;
61
118
  const headers = this.buildHeaders(options);
62
119
  const requestInit = {
@@ -87,7 +144,11 @@ class HttpClient {
87
144
  if (attempt < this.maxRetries) {
88
145
  continue;
89
146
  }
90
- throw new errors_1.PacSpaceError(`Network error: ${lastError.message}`, 0, 'NETWORK_ERROR', path);
147
+ const networkError = new errors_1.PacSpaceError(`Network error: ${lastError.message}`, 0, 'NETWORK_ERROR', path);
148
+ if (allowBuffering && this.shouldBufferRequest(method, networkError)) {
149
+ return this.enqueueBufferedRequest(method, path, body, options, networkError);
150
+ }
151
+ throw networkError;
91
152
  }
92
153
  // Successful response — parse and unwrap
93
154
  if (response.ok) {
@@ -96,20 +157,29 @@ class HttpClient {
96
157
  return raw.data;
97
158
  }
98
159
  // success: false in a 2xx response (shouldn't happen, but handle it)
99
- throw (0, errors_1.mapApiError)(response.status, raw.error || raw.message || 'Unknown error', path, response.headers);
160
+ const parsedError = this.extractApiError(raw, 'Unknown error');
161
+ throw (0, errors_1.mapApiError)(response.status, parsedError.message, path, response.headers, parsedError);
100
162
  }
101
163
  // Non-retryable error — throw immediately
102
164
  if (!RETRYABLE_STATUS_CODES.has(response.status)) {
103
165
  const errorBody = await this.safeParseJson(response);
104
- const message = this.extractErrorMessage(errorBody, response.statusText);
105
- throw (0, errors_1.mapApiError)(response.status, message, path, response.headers);
166
+ const parsedError = this.extractApiError(errorBody, response.statusText);
167
+ throw (0, errors_1.mapApiError)(response.status, parsedError.message, path, response.headers, parsedError);
106
168
  }
107
169
  // Retryable error — continue to next attempt
108
170
  const errorBody = await this.safeParseJson(response);
109
- lastError = (0, errors_1.mapApiError)(response.status, this.extractErrorMessage(errorBody, response.statusText), path, response.headers);
171
+ const parsedError = this.extractApiError(errorBody, response.statusText);
172
+ lastError = (0, errors_1.mapApiError)(response.status, parsedError.message, path, response.headers, parsedError);
173
+ if (lastError instanceof errors_1.CadenceLimitError) {
174
+ throw lastError;
175
+ }
110
176
  }
111
177
  // All retries exhausted
112
- throw lastError || new errors_1.PacSpaceError('Request failed', 0, 'UNKNOWN', path);
178
+ const finalError = lastError || new errors_1.PacSpaceError('Request failed', 0, 'UNKNOWN', path);
179
+ if (allowBuffering && this.shouldBufferRequest(method, finalError)) {
180
+ return this.enqueueBufferedRequest(method, path, body, options, finalError);
181
+ }
182
+ throw finalError;
113
183
  }
114
184
  /**
115
185
  * Build HTTP headers with auth and optional overrides.
@@ -172,6 +242,10 @@ class HttpClient {
172
242
  if (lastError instanceof errors_1.RateLimitError && lastError.retryAfter) {
173
243
  return lastError.retryAfter * 1000;
174
244
  }
245
+ if (lastError instanceof errors_1.ServiceUnavailableError &&
246
+ lastError.retryAfter) {
247
+ return lastError.retryAfter * 1000;
248
+ }
175
249
  // Exponential backoff: 500ms, 1500ms, 3500ms, ...
176
250
  const baseDelay = 500;
177
251
  const delay = baseDelay * Math.pow(2, attempt - 1);
@@ -191,16 +265,217 @@ class HttpClient {
191
265
  }
192
266
  }
193
267
  /**
194
- * Extract a string error message from a parsed error body.
268
+ * Extract normalized API error fields from an error payload.
195
269
  */
196
- extractErrorMessage(errorBody, fallback) {
197
- if (!errorBody)
198
- return fallback;
199
- if (typeof errorBody.error === 'string')
200
- return errorBody.error;
201
- if (typeof errorBody.message === 'string')
202
- return errorBody.message;
203
- return fallback;
270
+ extractApiError(errorBody, fallback) {
271
+ if (!errorBody) {
272
+ return { message: fallback };
273
+ }
274
+ const nestedError = this.asRecord(errorBody.error);
275
+ if (nestedError) {
276
+ return {
277
+ message: this.asMessage(nestedError.message) ??
278
+ this.asMessage(errorBody.message) ??
279
+ fallback,
280
+ code: this.asString(nestedError.code) ??
281
+ this.asString(errorBody.code),
282
+ retryAfterSeconds: this.asNumber(nestedError.retryAfterSeconds),
283
+ customerId: this.asString(nestedError.customerId),
284
+ };
285
+ }
286
+ return {
287
+ message: this.asMessage(errorBody.message) ??
288
+ this.asMessage(errorBody.error) ??
289
+ fallback,
290
+ code: this.asString(errorBody.code),
291
+ retryAfterSeconds: this.asNumber(errorBody.retryAfterSeconds),
292
+ customerId: this.asString(errorBody.customerId),
293
+ };
294
+ }
295
+ asMessage(value) {
296
+ if (typeof value === 'string') {
297
+ return value;
298
+ }
299
+ if (Array.isArray(value)) {
300
+ const messages = value
301
+ .filter((item) => typeof item === 'string')
302
+ .map((item) => item.trim())
303
+ .filter((item) => item.length > 0);
304
+ if (messages.length > 0) {
305
+ return messages.join('; ');
306
+ }
307
+ }
308
+ return undefined;
309
+ }
310
+ asRecord(value) {
311
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
312
+ return value;
313
+ }
314
+ return null;
315
+ }
316
+ asString(value) {
317
+ return typeof value === 'string' ? value : undefined;
318
+ }
319
+ asNumber(value) {
320
+ if (typeof value === 'number' && Number.isFinite(value)) {
321
+ return value;
322
+ }
323
+ if (typeof value === 'string') {
324
+ const parsed = Number.parseFloat(value);
325
+ if (Number.isFinite(parsed)) {
326
+ return parsed;
327
+ }
328
+ }
329
+ return undefined;
330
+ }
331
+ shouldBufferRequest(method, error) {
332
+ if (!this.bufferWrites)
333
+ return false;
334
+ const normalizedMethod = method.toUpperCase();
335
+ if (normalizedMethod === 'GET' ||
336
+ normalizedMethod === 'HEAD' ||
337
+ normalizedMethod === 'OPTIONS') {
338
+ return false;
339
+ }
340
+ if (error instanceof errors_1.PacSpaceError) {
341
+ if (error.code === 'CANCELLED' ||
342
+ error.code === 'MISSING_API_KEY' ||
343
+ error.code === 'INVALID_API_KEY' ||
344
+ error.code === 'VALIDATION_ERROR' ||
345
+ error.code === 'CADENCE_LIMIT') {
346
+ return false;
347
+ }
348
+ return (RETRYABLE_STATUS_CODES.has(error.statusCode) || error.statusCode === 0);
349
+ }
350
+ return true;
351
+ }
352
+ enqueueBufferedRequest(method, path, body, options, lastError) {
353
+ if (this.closed) {
354
+ throw new errors_1.PacSpaceError('Client closed', 0, 'CLIENT_CLOSED', path);
355
+ }
356
+ if (this.bufferedWrites.length >= this.bufferMaxItems) {
357
+ throw new errors_1.PacSpaceError(`Client write buffer is full (${this.bufferMaxItems} items)`, 0, 'WRITE_BUFFER_FULL', path);
358
+ }
359
+ return new Promise((resolve, reject) => {
360
+ const requestId = `buf_${Date.now()}_${Math.random()
361
+ .toString(16)
362
+ .slice(2)}`;
363
+ const rejectIfAborted = () => {
364
+ this.removeBufferedRequest(requestId);
365
+ reject(new errors_1.PacSpaceError('Request cancelled', 0, 'CANCELLED', path));
366
+ };
367
+ if (options?.signal?.aborted) {
368
+ rejectIfAborted();
369
+ return;
370
+ }
371
+ options?.signal?.addEventListener('abort', rejectIfAborted, {
372
+ once: true,
373
+ });
374
+ const delayMs = this.getBufferDelayMs(1, lastError);
375
+ const buffered = {
376
+ id: requestId,
377
+ method,
378
+ path,
379
+ body,
380
+ options,
381
+ attempts: 1,
382
+ nextAttemptAt: Date.now() + delayMs,
383
+ resolve: (value) => {
384
+ options?.signal?.removeEventListener('abort', rejectIfAborted);
385
+ resolve(value);
386
+ },
387
+ reject: (error) => {
388
+ options?.signal?.removeEventListener('abort', rejectIfAborted);
389
+ reject(error);
390
+ },
391
+ };
392
+ this.bufferedWrites.push(buffered);
393
+ this.scheduleBufferDrain();
394
+ });
395
+ }
396
+ removeBufferedRequest(requestId) {
397
+ const index = this.bufferedWrites.findIndex((item) => item.id === requestId);
398
+ if (index >= 0) {
399
+ this.bufferedWrites.splice(index, 1);
400
+ }
401
+ }
402
+ scheduleBufferDrain() {
403
+ if (this.closed)
404
+ return;
405
+ if (this.drainTimer || this.drainInProgress || this.bufferedWrites.length === 0) {
406
+ return;
407
+ }
408
+ const nextAttemptAt = this.bufferedWrites.reduce((min, item) => Math.min(min, item.nextAttemptAt), Number.POSITIVE_INFINITY);
409
+ const delayMs = Math.max(0, nextAttemptAt - Date.now());
410
+ this.drainTimer = setTimeout(() => {
411
+ this.drainTimer = null;
412
+ void this.drainBufferedWrites();
413
+ }, delayMs);
414
+ this.drainTimer.unref?.();
415
+ }
416
+ async drainBufferedWrites() {
417
+ if (this.closed)
418
+ return;
419
+ if (this.drainInProgress)
420
+ return;
421
+ this.drainInProgress = true;
422
+ try {
423
+ while (this.bufferedWrites.length > 0) {
424
+ const current = this.bufferedWrites[0];
425
+ if (current.nextAttemptAt > Date.now()) {
426
+ break;
427
+ }
428
+ try {
429
+ const result = await this.request(current.method, current.path, current.body, current.options, false);
430
+ this.bufferedWrites.shift();
431
+ current.resolve(result);
432
+ }
433
+ catch (error) {
434
+ const err = error instanceof Error ? error : new Error(String(error));
435
+ current.attempts += 1;
436
+ if (current.attempts > this.bufferMaxAttempts) {
437
+ this.bufferedWrites.shift();
438
+ current.reject(err);
439
+ continue;
440
+ }
441
+ current.nextAttemptAt =
442
+ Date.now() + this.getBufferDelayMs(current.attempts, err);
443
+ break;
444
+ }
445
+ }
446
+ }
447
+ finally {
448
+ this.drainInProgress = false;
449
+ this.scheduleBufferDrain();
450
+ }
451
+ }
452
+ getBufferDelayMs(attempt, error) {
453
+ if (error instanceof errors_1.RateLimitError && error.retryAfter) {
454
+ return error.retryAfter * 1000;
455
+ }
456
+ if (error instanceof errors_1.ServiceUnavailableError && error.retryAfter) {
457
+ return error.retryAfter * 1000;
458
+ }
459
+ const cappedAttempt = Math.min(Math.max(attempt, 1), 12);
460
+ const delay = this.bufferBaseDelayMs * Math.pow(2, cappedAttempt - 1);
461
+ return Math.min(delay, this.bufferMaxDelayMs);
462
+ }
463
+ /**
464
+ * Auto-detect base URL from API key prefix.
465
+ * - `pk_test_*` keys → sandbox API URL
466
+ * - `pk_live_*` keys → production API URL
467
+ *
468
+ * Custom URLs from config override the defaults.
469
+ */
470
+ detectBaseUrl(apiKey, config) {
471
+ if (apiKey.startsWith('pk_test_')) {
472
+ return config.sandboxUrl || DEFAULT_SANDBOX_URL;
473
+ }
474
+ if (apiKey.startsWith('pk_live_')) {
475
+ return config.productionUrl || DEFAULT_PRODUCTION_URL;
476
+ }
477
+ // Fallback to production if prefix doesn't match expected patterns
478
+ return config.productionUrl || DEFAULT_PRODUCTION_URL;
204
479
  }
205
480
  /**
206
481
  * Auto-detect chain ID from API key prefix.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,25 @@ export declare class RateLimitError extends PacSpaceError {
43
43
  readonly retryAfter: number | null;
44
44
  constructor(message?: string, retryAfter?: number | null, requestPath?: string);
45
45
  }
46
+ /**
47
+ * Thrown when a customer's submission cadence window has not elapsed (HTTP 429).
48
+ * This error is terminal for the current request and should not be auto-retried.
49
+ */
50
+ export declare class CadenceLimitError extends PacSpaceError {
51
+ /** Milliseconds remaining before the next allowed submission, if provided. */
52
+ readonly retryAfterMs: number | null;
53
+ /** Customer ID associated with the cadence block, when provided. */
54
+ readonly customerId: string | null;
55
+ constructor(message?: string, retryAfterSeconds?: number | null, customerId?: string | null, requestPath?: string);
56
+ }
57
+ /**
58
+ * Thrown when the API is temporarily unavailable (HTTP 503).
59
+ */
60
+ export declare class ServiceUnavailableError extends PacSpaceError {
61
+ /** Seconds to wait before retrying, if provided by the API. */
62
+ readonly retryAfter: number | null;
63
+ constructor(message?: string, retryAfter?: number | null, requestPath?: string);
64
+ }
46
65
  /**
47
66
  * Thrown when the API returns a validation error (HTTP 400).
48
67
  */
@@ -65,5 +84,9 @@ export declare class WebhookVerificationError extends PacSpaceError {
65
84
  * Map an HTTP status code + API response to the appropriate typed error.
66
85
  * @internal
67
86
  */
68
- export declare function mapApiError(statusCode: number, message: string, requestPath?: string, headers?: Headers): PacSpaceError;
87
+ export declare function mapApiError(statusCode: number, message: string, requestPath?: string, headers?: Headers, apiError?: {
88
+ code?: string;
89
+ retryAfterSeconds?: number | null;
90
+ customerId?: string | null;
91
+ }): PacSpaceError;
69
92
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAG5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM;CAWvB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,OAAO,SAA+B,EAAE,WAAW,CAAC,EAAE,MAAM;CAIzE;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;gBAEvD,OAAO,SAA4C,EACnD,WAAW,CAAC,EAAE,MAAM;CAKvB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,aAAa;gBAClC,OAAO,SAAuB,EAAE,WAAW,CAAC,EAAE,MAAM;CAIjE;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;gBAEvD,OAAO,SAA0D,EACjE,WAAW,CAAC,EAAE,MAAM;CAKvB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAC/C,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGjC,OAAO,SAAwB,EAC/B,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,WAAW,CAAC,EAAE,MAAM;CAMvB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,OAAO,SAAyB,EAAE,WAAW,CAAC,EAAE,MAAM;CAInE;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,aAAa;gBAE3C,OAAO,SAAiD,EACxD,WAAW,CAAC,EAAE,MAAM;CAKvB;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;gBAC7C,OAAO,SAA0C;CAI9D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,GAChB,aAAa,CAuBf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAG5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM;CAWvB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,OAAO,SAA+B,EAAE,WAAW,CAAC,EAAE,MAAM;CAIzE;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;gBAEvD,OAAO,SAA4C,EACnD,WAAW,CAAC,EAAE,MAAM;CAKvB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,aAAa;gBAClC,OAAO,SAAuB,EAAE,WAAW,CAAC,EAAE,MAAM;CAIjE;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;gBAEvD,OAAO,SAA0D,EACjE,WAAW,CAAC,EAAE,MAAM;CAKvB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAC/C,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGjC,OAAO,SAAwB,EAC/B,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,WAAW,CAAC,EAAE,MAAM;CAMvB;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGjC,OAAO,SAAqC,EAC5C,iBAAiB,GAAE,MAAM,GAAG,IAAW,EACvC,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,WAAW,CAAC,EAAE,MAAM;CAUvB;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,aAAa;IACxD,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGjC,OAAO,SAAoC,EAC3C,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,WAAW,CAAC,EAAE,MAAM;CAMvB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,OAAO,SAAyB,EAAE,WAAW,CAAC,EAAE,MAAM;CAInE;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,aAAa;gBAE3C,OAAO,SAAiD,EACxD,WAAW,CAAC,EAAE,MAAM;CAKvB;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;gBAC7C,OAAO,SAA0C;CAI9D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,EACjB,QAAQ,CAAC,EAAE;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GACA,aAAa,CA+Cf"}