@pagouai/api-sdk 0.1.1-next.7

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/dist/client.js ADDED
@@ -0,0 +1,448 @@
1
+ import { ApiError, AuthenticationError, ConflictError, InvalidRequestError, NetworkError, NotFoundError, PermissionError, parseErrorPayload, RateLimitError, ServerError, } from "./errors";
2
+ import { TransactionsResource } from "./resources/transactions";
3
+ import { SDK_VERSION } from "./version";
4
+ const PRODUCTION_BASE_URL = "https://api.pagou.ai";
5
+ const SANDBOX_BASE_URL = "https://api.sandbox.pagou.ai";
6
+ const DEFAULT_AUTH_SCHEME = "bearer";
7
+ const DEFAULT_AUTH_HEADER_NAME = "apikey";
8
+ const DEFAULT_USER_AGENT = `PagouTS-SDK/${SDK_VERSION} (Transactions; +https://pagou.ai)`;
9
+ const DEFAULT_API_VERSION_HEADER = "";
10
+ const DEFAULT_API_VERSION = "";
11
+ const RETRY_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
12
+ /**
13
+ * Main SDK client for Pagou.ai API.
14
+ */
15
+ export class Client {
16
+ apiKey;
17
+ baseUrl;
18
+ timeoutMs;
19
+ maxRetries;
20
+ telemetry;
21
+ userAgent;
22
+ fetchImpl;
23
+ auth;
24
+ apiVersion;
25
+ retryBaseDelayMs;
26
+ maxRetryDelayMs;
27
+ transactions;
28
+ constructor(options) {
29
+ if (!options.apiKey) {
30
+ throw new Error("Client requires an apiKey.");
31
+ }
32
+ this.apiKey = options.apiKey;
33
+ this.baseUrl = normalizeBaseUrl(options.baseUrl ?? resolveEnvironmentBaseUrl(options.environment));
34
+ this.timeoutMs = options.timeoutMs ?? 30_000;
35
+ this.maxRetries = options.maxRetries ?? 2;
36
+ this.telemetry = options.telemetry ?? true;
37
+ this.userAgent = options.userAgent ?? DEFAULT_USER_AGENT;
38
+ this.fetchImpl = resolveFetch(options.fetch);
39
+ this.auth = options.auth ?? resolveDefaultAuth();
40
+ this.apiVersion = options.apiVersion ?? resolvePlaceholder(DEFAULT_API_VERSION);
41
+ this.retryBaseDelayMs = options.retryBaseDelayMs ?? 200;
42
+ this.maxRetryDelayMs = options.maxRetryDelayMs ?? 2_000;
43
+ this.transactions = new TransactionsResource(this);
44
+ }
45
+ /**
46
+ * Sends a request and unwraps a data envelope.
47
+ */
48
+ async requestData(input) {
49
+ const raw = await this.requestRaw(input);
50
+ const envelope = raw.body;
51
+ if (!isDataEnvelope(envelope)) {
52
+ throw new ApiError("Unexpected response format: expected data envelope", {
53
+ status: raw.status,
54
+ requestId: raw.requestId,
55
+ raw: raw.body,
56
+ });
57
+ }
58
+ return {
59
+ data: envelope.data,
60
+ meta: toMeta(raw),
61
+ };
62
+ }
63
+ /**
64
+ * Sends a request and unwraps a paginated envelope.
65
+ */
66
+ async requestPaginated(input) {
67
+ const raw = await this.requestRaw(input);
68
+ const envelope = raw.body;
69
+ if (!isPaginatedEnvelope(envelope)) {
70
+ throw new ApiError("Unexpected response format: expected paginated envelope", {
71
+ status: raw.status,
72
+ requestId: raw.requestId,
73
+ raw: raw.body,
74
+ });
75
+ }
76
+ return {
77
+ data: envelope,
78
+ meta: toMeta(raw),
79
+ };
80
+ }
81
+ async requestRaw(input) {
82
+ const method = input.method;
83
+ const canRetry = isRetryEligible(method, input.options?.idempotencyKey);
84
+ let attempt = 0;
85
+ for (;;) {
86
+ const prepared = this.prepareRequest(input);
87
+ try {
88
+ const response = await this.fetchImpl(prepared.url, prepared.init);
89
+ const requestId = extractRequestId(response.headers);
90
+ const body = await parseBody(response);
91
+ if (!response.ok) {
92
+ const shouldRetryStatus = RETRY_STATUS_CODES.has(response.status);
93
+ const shouldRetry = canRetry && shouldRetryStatus && attempt < this.maxRetries;
94
+ if (shouldRetry) {
95
+ const delayMs = computeRetryDelayMs(attempt, response.headers.get("Retry-After"), this.retryBaseDelayMs, this.maxRetryDelayMs);
96
+ attempt += 1;
97
+ prepared.clear();
98
+ await sleep(delayMs);
99
+ continue;
100
+ }
101
+ prepared.clear();
102
+ throw this.toApiError(response.status, body, requestId);
103
+ }
104
+ prepared.clear();
105
+ return {
106
+ status: response.status,
107
+ headers: response.headers,
108
+ body,
109
+ requestId: requestId ?? extractRequestIdFromBody(body),
110
+ };
111
+ }
112
+ catch (error) {
113
+ prepared.clear();
114
+ if (error instanceof ApiError) {
115
+ throw error;
116
+ }
117
+ const aborted = isAbortError(error);
118
+ const timedOut = prepared.didTimeout();
119
+ const retryable = !aborted;
120
+ if (canRetry && retryable && attempt < this.maxRetries) {
121
+ const delayMs = computeRetryDelayMs(attempt, undefined, this.retryBaseDelayMs, this.maxRetryDelayMs);
122
+ attempt += 1;
123
+ await sleep(delayMs);
124
+ continue;
125
+ }
126
+ const message = timedOut
127
+ ? `Request timed out after ${input.options?.timeoutMs ?? this.timeoutMs}ms`
128
+ : "Network request failed";
129
+ throw new NetworkError(message, {
130
+ cause: error,
131
+ });
132
+ }
133
+ }
134
+ }
135
+ prepareRequest(input) {
136
+ const headers = new Headers();
137
+ headers.set("Accept", "application/json");
138
+ if (input.body !== undefined) {
139
+ headers.set("Content-Type", "application/json");
140
+ }
141
+ const requestId = input.options?.requestId;
142
+ if (requestId) {
143
+ headers.set("X-Request-Id", requestId);
144
+ }
145
+ if (input.options?.idempotencyKey) {
146
+ headers.set("Idempotency-Key", input.options.idempotencyKey);
147
+ }
148
+ this.applyAuthHeader(headers);
149
+ this.applyVersionHeader(headers);
150
+ this.applyTelemetryHeaders(headers);
151
+ const url = new URL(input.path, this.baseUrl);
152
+ if (input.query) {
153
+ for (const [key, value] of Object.entries(input.query)) {
154
+ if (value === undefined || value === null) {
155
+ continue;
156
+ }
157
+ if (Array.isArray(value)) {
158
+ if (value.length === 0) {
159
+ continue;
160
+ }
161
+ url.searchParams.set(key, value.map((v) => String(v)).join(","));
162
+ continue;
163
+ }
164
+ url.searchParams.set(key, String(value));
165
+ }
166
+ }
167
+ const controller = new AbortController();
168
+ const externalSignal = input.options?.signal;
169
+ const timeoutMs = input.options?.timeoutMs ?? this.timeoutMs;
170
+ let timedOut = false;
171
+ let timeoutHandle;
172
+ const onExternalAbort = () => {
173
+ if (!controller.signal.aborted) {
174
+ controller.abort();
175
+ }
176
+ };
177
+ if (externalSignal) {
178
+ if (externalSignal.aborted) {
179
+ onExternalAbort();
180
+ }
181
+ else {
182
+ externalSignal.addEventListener("abort", onExternalAbort, { once: true });
183
+ }
184
+ }
185
+ if (timeoutMs > 0) {
186
+ timeoutHandle = setTimeout(() => {
187
+ timedOut = true;
188
+ if (!controller.signal.aborted) {
189
+ controller.abort();
190
+ }
191
+ }, timeoutMs);
192
+ }
193
+ const init = {
194
+ method: input.method,
195
+ headers,
196
+ signal: controller.signal,
197
+ };
198
+ if (input.body !== undefined) {
199
+ init.body = JSON.stringify(input.body);
200
+ }
201
+ const clear = () => {
202
+ if (timeoutHandle !== undefined) {
203
+ clearTimeout(timeoutHandle);
204
+ }
205
+ if (externalSignal) {
206
+ externalSignal.removeEventListener("abort", onExternalAbort);
207
+ }
208
+ };
209
+ return {
210
+ url,
211
+ init,
212
+ timeoutHandle,
213
+ clear,
214
+ didTimeout: () => timedOut,
215
+ };
216
+ }
217
+ applyAuthHeader(headers) {
218
+ switch (this.auth.scheme) {
219
+ case "bearer":
220
+ headers.set("Authorization", `Bearer ${this.apiKey}`);
221
+ break;
222
+ case "basic":
223
+ headers.set("Authorization", `Basic ${encodeBase64(`${this.apiKey}:x`)}`);
224
+ break;
225
+ case "api_key_header": {
226
+ const fallbackHeaderName = resolvePlaceholder(DEFAULT_AUTH_HEADER_NAME) ?? "apikey";
227
+ headers.set(this.auth.headerName ?? fallbackHeaderName, this.apiKey);
228
+ break;
229
+ }
230
+ }
231
+ }
232
+ applyVersionHeader(headers) {
233
+ const versionHeaderName = resolvePlaceholder(DEFAULT_API_VERSION_HEADER);
234
+ if (!versionHeaderName || !this.apiVersion) {
235
+ return;
236
+ }
237
+ headers.set(versionHeaderName, this.apiVersion);
238
+ }
239
+ applyTelemetryHeaders(headers) {
240
+ if (!this.telemetry) {
241
+ return;
242
+ }
243
+ if (this.userAgent) {
244
+ headers.set("User-Agent", this.userAgent);
245
+ }
246
+ headers.set("X-SDK-Lang", "typescript");
247
+ headers.set("X-SDK-Runtime", detectRuntime());
248
+ }
249
+ toApiError(status, body, requestIdFromHeader) {
250
+ const parsed = parseErrorPayload(body, `Request failed with status ${status}`, requestIdFromHeader);
251
+ const common = {
252
+ status,
253
+ code: parsed.code,
254
+ requestId: parsed.requestId,
255
+ details: parsed.details,
256
+ raw: parsed.raw,
257
+ };
258
+ if (status === 401) {
259
+ return new AuthenticationError(parsed.message, common);
260
+ }
261
+ if (status === 403) {
262
+ return new PermissionError(parsed.message, common);
263
+ }
264
+ if (status === 404) {
265
+ return new NotFoundError(parsed.message, common);
266
+ }
267
+ if (status === 409) {
268
+ return new ConflictError(parsed.message, common);
269
+ }
270
+ if (status === 429) {
271
+ return new RateLimitError(parsed.message, common);
272
+ }
273
+ if (status >= 500) {
274
+ return new ServerError(parsed.message, common);
275
+ }
276
+ return new InvalidRequestError(parsed.message, common);
277
+ }
278
+ }
279
+ function resolveFetch(customFetch) {
280
+ if (customFetch) {
281
+ return customFetch;
282
+ }
283
+ if (typeof fetch !== "function") {
284
+ throw new Error("Global fetch is not available. Inject a fetch implementation via Client options.");
285
+ }
286
+ return fetch;
287
+ }
288
+ function normalizeBaseUrl(baseUrl) {
289
+ if (!baseUrl) {
290
+ throw new Error("Client baseUrl cannot be empty.");
291
+ }
292
+ return baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
293
+ }
294
+ function resolveDefaultAuth() {
295
+ const scheme = resolveAuthScheme(DEFAULT_AUTH_SCHEME);
296
+ if (scheme === "api_key_header") {
297
+ const headerName = DEFAULT_AUTH_HEADER_NAME;
298
+ return { scheme, headerName };
299
+ }
300
+ return { scheme };
301
+ }
302
+ function resolveAuthScheme(value) {
303
+ if (value === "basic" || value === "api_key_header" || value === "bearer") {
304
+ return value;
305
+ }
306
+ return "bearer";
307
+ }
308
+ function resolveEnvironmentBaseUrl(environment) {
309
+ if (environment === "sandbox") {
310
+ return SANDBOX_BASE_URL;
311
+ }
312
+ return PRODUCTION_BASE_URL;
313
+ }
314
+ function resolvePlaceholder(value) {
315
+ if (!value) {
316
+ return undefined;
317
+ }
318
+ if (value.includes("{{") && value.includes("}}")) {
319
+ return undefined;
320
+ }
321
+ return value;
322
+ }
323
+ function extractRequestId(headers) {
324
+ return headers.get("x-request-id") ?? headers.get("request-id") ?? undefined;
325
+ }
326
+ function extractRequestIdFromBody(body) {
327
+ if (!body || typeof body !== "object") {
328
+ return undefined;
329
+ }
330
+ const record = body;
331
+ if (typeof record.requestId === "string") {
332
+ return record.requestId;
333
+ }
334
+ if (typeof record.request_id === "string") {
335
+ return record.request_id;
336
+ }
337
+ return undefined;
338
+ }
339
+ function toMeta(raw) {
340
+ return {
341
+ status: raw.status,
342
+ headers: raw.headers,
343
+ requestId: raw.requestId,
344
+ };
345
+ }
346
+ function isDataEnvelope(value) {
347
+ return typeof value.success === "boolean" && "data" in value;
348
+ }
349
+ function isPaginatedEnvelope(value) {
350
+ return (typeof value.success === "boolean" &&
351
+ Array.isArray(value.data) &&
352
+ Boolean(value.metadata) &&
353
+ typeof value.metadata?.page === "number" &&
354
+ typeof value.metadata?.limit === "number" &&
355
+ typeof value.metadata?.total === "number");
356
+ }
357
+ function isRetryEligible(method, idempotencyKey) {
358
+ if (method === "GET" || method === "HEAD") {
359
+ return true;
360
+ }
361
+ if ((method === "POST" || method === "PUT") && Boolean(idempotencyKey)) {
362
+ return true;
363
+ }
364
+ return false;
365
+ }
366
+ async function parseBody(response) {
367
+ const contentType = response.headers.get("content-type") ?? "";
368
+ if (contentType.includes("application/json")) {
369
+ try {
370
+ return await response.json();
371
+ }
372
+ catch {
373
+ return null;
374
+ }
375
+ }
376
+ const text = await response.text();
377
+ if (!text) {
378
+ return null;
379
+ }
380
+ try {
381
+ return JSON.parse(text);
382
+ }
383
+ catch {
384
+ return text;
385
+ }
386
+ }
387
+ function parseRetryAfterMs(retryAfterValue) {
388
+ if (!retryAfterValue) {
389
+ return undefined;
390
+ }
391
+ const numeric = Number(retryAfterValue);
392
+ if (Number.isFinite(numeric)) {
393
+ return Math.max(0, numeric * 1_000);
394
+ }
395
+ const parsedDate = Date.parse(retryAfterValue);
396
+ if (!Number.isNaN(parsedDate)) {
397
+ return Math.max(0, parsedDate - Date.now());
398
+ }
399
+ return undefined;
400
+ }
401
+ function computeRetryDelayMs(attempt, retryAfterValue, baseDelayMs, maxDelayMs) {
402
+ const retryAfterMs = parseRetryAfterMs(retryAfterValue);
403
+ if (typeof retryAfterMs === "number") {
404
+ return Math.min(retryAfterMs, maxDelayMs);
405
+ }
406
+ const backoff = baseDelayMs * 2 ** attempt;
407
+ const jitter = Math.floor(Math.random() * baseDelayMs);
408
+ return Math.min(backoff + jitter, maxDelayMs);
409
+ }
410
+ function sleep(ms) {
411
+ if (ms <= 0) {
412
+ return Promise.resolve();
413
+ }
414
+ return new Promise((resolve) => setTimeout(resolve, ms));
415
+ }
416
+ function isAbortError(error) {
417
+ if (error instanceof DOMException && error.name === "AbortError") {
418
+ return true;
419
+ }
420
+ if (!error || typeof error !== "object") {
421
+ return false;
422
+ }
423
+ return error.name === "AbortError";
424
+ }
425
+ function encodeBase64(input) {
426
+ if (typeof btoa === "function") {
427
+ return btoa(input);
428
+ }
429
+ const bytes = new TextEncoder().encode(input);
430
+ let binary = "";
431
+ for (const byte of bytes) {
432
+ binary += String.fromCharCode(byte);
433
+ }
434
+ if (typeof btoa !== "function") {
435
+ throw new Error("Base64 encoding is unavailable in this runtime.");
436
+ }
437
+ return btoa(binary);
438
+ }
439
+ function detectRuntime() {
440
+ if (typeof Deno !== "undefined") {
441
+ return "deno";
442
+ }
443
+ if (typeof Bun !== "undefined") {
444
+ return "bun";
445
+ }
446
+ return "node";
447
+ }
448
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface ApiErrorOptions {
2
+ status?: number;
3
+ code?: string;
4
+ requestId?: string;
5
+ details?: unknown;
6
+ raw?: unknown;
7
+ cause?: unknown;
8
+ }
9
+ export declare class ApiError extends Error {
10
+ readonly status?: number;
11
+ readonly code?: string;
12
+ readonly requestId?: string;
13
+ readonly details?: unknown;
14
+ readonly raw?: unknown;
15
+ constructor(message: string, options?: ApiErrorOptions);
16
+ }
17
+ export declare class AuthenticationError extends ApiError {
18
+ }
19
+ export declare class PermissionError extends ApiError {
20
+ }
21
+ export declare class RateLimitError extends ApiError {
22
+ }
23
+ export declare class InvalidRequestError extends ApiError {
24
+ }
25
+ export declare class NotFoundError extends ApiError {
26
+ }
27
+ export declare class ConflictError extends ApiError {
28
+ }
29
+ export declare class ServerError extends ApiError {
30
+ }
31
+ export declare class NetworkError extends ApiError {
32
+ }
33
+ export interface ParsedErrorPayload {
34
+ message: string;
35
+ code?: string;
36
+ requestId?: string;
37
+ details?: unknown;
38
+ raw: unknown;
39
+ }
40
+ export declare function parseErrorPayload(payload: unknown, fallbackMessage: string, fallbackRequestId?: string): ParsedErrorPayload;
41
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,QAAS,SAAQ,KAAK;IAClC,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnC,SAAgB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClC,SAAgB,GAAG,CAAC,EAAE,OAAO,CAAC;gBAElB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAY1D;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;CAAG;AACpD,qBAAa,eAAgB,SAAQ,QAAQ;CAAG;AAChD,qBAAa,cAAe,SAAQ,QAAQ;CAAG;AAC/C,qBAAa,mBAAoB,SAAQ,QAAQ;CAAG;AACpD,qBAAa,aAAc,SAAQ,QAAQ;CAAG;AAC9C,qBAAa,aAAc,SAAQ,QAAQ;CAAG;AAC9C,qBAAa,WAAY,SAAQ,QAAQ;CAAG;AAC5C,qBAAa,YAAa,SAAQ,QAAQ;CAAG;AAE7C,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;CACb;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,MAAM,EACvB,iBAAiB,CAAC,EAAE,MAAM,GACxB,kBAAkB,CAmCpB"}
package/dist/errors.js ADDED
@@ -0,0 +1,65 @@
1
+ export class ApiError extends Error {
2
+ status;
3
+ code;
4
+ requestId;
5
+ details;
6
+ raw;
7
+ constructor(message, options = {}) {
8
+ super(message);
9
+ this.name = this.constructor.name;
10
+ this.status = options.status;
11
+ this.code = options.code;
12
+ this.requestId = options.requestId;
13
+ this.details = options.details;
14
+ this.raw = options.raw;
15
+ if (options.cause !== undefined) {
16
+ this.cause = options.cause;
17
+ }
18
+ }
19
+ }
20
+ export class AuthenticationError extends ApiError {
21
+ }
22
+ export class PermissionError extends ApiError {
23
+ }
24
+ export class RateLimitError extends ApiError {
25
+ }
26
+ export class InvalidRequestError extends ApiError {
27
+ }
28
+ export class NotFoundError extends ApiError {
29
+ }
30
+ export class ConflictError extends ApiError {
31
+ }
32
+ export class ServerError extends ApiError {
33
+ }
34
+ export class NetworkError extends ApiError {
35
+ }
36
+ export function parseErrorPayload(payload, fallbackMessage, fallbackRequestId) {
37
+ if (!payload || typeof payload !== "object") {
38
+ return {
39
+ message: fallbackMessage,
40
+ requestId: fallbackRequestId,
41
+ raw: payload,
42
+ };
43
+ }
44
+ const obj = payload;
45
+ const message = (typeof obj.message === "string" && obj.message) ||
46
+ (typeof obj.detail === "string" && obj.detail) ||
47
+ (typeof obj.title === "string" && obj.title) ||
48
+ (typeof obj.error === "string" && obj.error) ||
49
+ fallbackMessage;
50
+ const code = typeof obj.code === "string" ? obj.code : typeof obj.error === "string" ? obj.error : undefined;
51
+ const requestId = typeof obj.requestId === "string"
52
+ ? obj.requestId
53
+ : typeof obj.request_id === "string"
54
+ ? obj.request_id
55
+ : fallbackRequestId;
56
+ const details = obj.errors ?? obj.details ?? obj.extensions ?? undefined;
57
+ return {
58
+ message,
59
+ code,
60
+ requestId,
61
+ details,
62
+ raw: payload,
63
+ };
64
+ }
65
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAClB,MAAM,CAAU;IAChB,IAAI,CAAU;IACd,SAAS,CAAU;IACnB,OAAO,CAAW;IAClB,GAAG,CAAW;IAE9B,YAAY,OAAe,EAAE,UAA2B,EAAE;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,IAA4B,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACrD,CAAC;IACF,CAAC;CACD;AAED,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;CAAG;AACpD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;CAAG;AAChD,MAAM,OAAO,cAAe,SAAQ,QAAQ;CAAG;AAC/C,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;CAAG;AACpD,MAAM,OAAO,aAAc,SAAQ,QAAQ;CAAG;AAC9C,MAAM,OAAO,aAAc,SAAQ,QAAQ;CAAG;AAC9C,MAAM,OAAO,WAAY,SAAQ,QAAQ;CAAG;AAC5C,MAAM,OAAO,YAAa,SAAQ,QAAQ;CAAG;AAU7C,MAAM,UAAU,iBAAiB,CAChC,OAAgB,EAChB,eAAuB,EACvB,iBAA0B;IAE1B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO;YACN,OAAO,EAAE,eAAe;YACxB,SAAS,EAAE,iBAAiB;YAC5B,GAAG,EAAE,OAAO;SACZ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,MAAM,OAAO,GACZ,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC;QAChD,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC;QAC9C,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC;QAC5C,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC;QAC5C,eAAe,CAAC;IAEjB,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7G,MAAM,SAAS,GACd,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QAChC,CAAC,CAAC,GAAG,CAAC,SAAS;QACf,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,GAAG,CAAC,UAAU;YAChB,CAAC,CAAC,iBAAiB,CAAC;IAEvB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC;IAEzE,OAAO;QACN,OAAO;QACP,IAAI;QACJ,SAAS;QACT,OAAO;QACP,GAAG,EAAE,OAAO;KACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { Client } from "./client";
2
+ export { ApiError, AuthenticationError, ConflictError, InvalidRequestError, NetworkError, NotFoundError, PermissionError, RateLimitError, ServerError, } from "./errors";
3
+ export { TransactionsResource } from "./resources/transactions";
4
+ export * from "./types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,GACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { Client } from "./client";
2
+ export { ApiError, AuthenticationError, ConflictError, InvalidRequestError, NetworkError, NotFoundError, PermissionError, RateLimitError, ServerError, } from "./errors";
3
+ export { TransactionsResource } from "./resources/transactions";
4
+ export * from "./types";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,GACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,cAAc,SAAS,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { PaginatedEnvelope } from "./types";
2
+ export interface AutoPageOptions {
3
+ initialPage?: number;
4
+ limit?: number;
5
+ }
6
+ /**
7
+ * Iterates over a page/limit paginated API until total items are consumed or no more data is returned.
8
+ */
9
+ export declare function autoPageByNumber<T>(fetchPage: (page: number, limit?: number) => Promise<PaginatedEnvelope<T>>, options?: AutoPageOptions): AsyncGenerator<T>;
10
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAuB,gBAAgB,CAAC,CAAC,EACxC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAC1E,OAAO,GAAE,eAAoB,GAC3B,cAAc,CAAC,CAAC,CAAC,CAmCnB"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Iterates over a page/limit paginated API until total items are consumed or no more data is returned.
3
+ */
4
+ export async function* autoPageByNumber(fetchPage, options = {}) {
5
+ const initialPage = options.initialPage ?? 1;
6
+ const limit = options.limit;
7
+ let page = initialPage;
8
+ let yielded = 0;
9
+ let total;
10
+ while (true) {
11
+ const envelope = await fetchPage(page, limit);
12
+ const data = envelope.data ?? [];
13
+ if (typeof envelope.metadata?.total === "number") {
14
+ total = envelope.metadata.total;
15
+ }
16
+ if (data.length === 0) {
17
+ break;
18
+ }
19
+ for (const item of data) {
20
+ yield item;
21
+ yielded += 1;
22
+ }
23
+ if (typeof total === "number" && yielded >= total) {
24
+ break;
25
+ }
26
+ if (data.length < (envelope.metadata?.limit ?? limit ?? data.length)) {
27
+ break;
28
+ }
29
+ page += 1;
30
+ }
31
+ }
32
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,gBAAgB,CACtC,SAA0E,EAC1E,UAA2B,EAAE;IAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAyB,CAAC;IAE9B,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAEjC,IAAI,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;YAClD,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM;QACP,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC;YACX,OAAO,IAAI,CAAC,CAAC;QACd,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACnD,MAAM;QACP,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtE,MAAM;QACP,CAAC;QAED,IAAI,IAAI,CAAC,CAAC;IACX,CAAC;AACF,CAAC"}