@isnap/sdk 0.0.0-next.3
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/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +242 -0
- package/dist/client.d.ts +50 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +242 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +43 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +53 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +100 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/openapi.d.ts +7963 -0
- package/dist/idempotency.d.ts +2 -0
- package/dist/idempotency.d.ts.map +1 -0
- package/dist/idempotency.js +4 -0
- package/dist/idempotency.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/sleep.d.ts +10 -0
- package/dist/internal/sleep.d.ts.map +1 -0
- package/dist/internal/sleep.js +37 -0
- package/dist/internal/sleep.js.map +1 -0
- package/dist/pagination.d.ts +10 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +16 -0
- package/dist/pagination.js.map +1 -0
- package/dist/resources/attachments.d.ts +45 -0
- package/dist/resources/attachments.d.ts.map +1 -0
- package/dist/resources/attachments.js +120 -0
- package/dist/resources/attachments.js.map +1 -0
- package/dist/resources/base.d.ts +6 -0
- package/dist/resources/base.d.ts.map +1 -0
- package/dist/resources/base.js +7 -0
- package/dist/resources/base.js.map +1 -0
- package/dist/resources/byod.d.ts +15 -0
- package/dist/resources/byod.d.ts.map +1 -0
- package/dist/resources/byod.js +13 -0
- package/dist/resources/byod.js.map +1 -0
- package/dist/resources/chats.d.ts +29 -0
- package/dist/resources/chats.d.ts.map +1 -0
- package/dist/resources/chats.js +28 -0
- package/dist/resources/chats.js.map +1 -0
- package/dist/resources/lines.d.ts +70 -0
- package/dist/resources/lines.d.ts.map +1 -0
- package/dist/resources/lines.js +86 -0
- package/dist/resources/lines.js.map +1 -0
- package/dist/resources/lookup.d.ts +15 -0
- package/dist/resources/lookup.d.ts.map +1 -0
- package/dist/resources/lookup.js +13 -0
- package/dist/resources/lookup.js.map +1 -0
- package/dist/resources/messages.d.ts +42 -0
- package/dist/resources/messages.d.ts.map +1 -0
- package/dist/resources/messages.js +41 -0
- package/dist/resources/messages.js.map +1 -0
- package/dist/resources/trial.d.ts +28 -0
- package/dist/resources/trial.d.ts.map +1 -0
- package/dist/resources/trial.js +31 -0
- package/dist/resources/trial.js.map +1 -0
- package/dist/resources/webhooks.d.ts +58 -0
- package/dist/resources/webhooks.d.ts.map +1 -0
- package/dist/resources/webhooks.js +65 -0
- package/dist/resources/webhooks.js.map +1 -0
- package/dist/retry.d.ts +14 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +47 -0
- package/dist/retry.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/dist/webhooks/parse.d.ts +15 -0
- package/dist/webhooks/parse.d.ts.map +1 -0
- package/dist/webhooks/parse.js +47 -0
- package/dist/webhooks/parse.js.map +1 -0
- package/dist/webhooks/types.d.ts +80 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +17 -0
- package/dist/webhooks/types.js.map +1 -0
- package/dist/webhooks/verify.d.ts +41 -0
- package/dist/webhooks/verify.d.ts.map +1 -0
- package/dist/webhooks/verify.js +110 -0
- package/dist/webhooks/verify.js.map +1 -0
- package/package.json +65 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export const DEFAULTS = {
|
|
2
|
+
baseUrl: 'https://api.isnap.ai',
|
|
3
|
+
maxRetries: 3,
|
|
4
|
+
timeoutMs: 30_000,
|
|
5
|
+
idempotencyKey: 'auto'
|
|
6
|
+
};
|
|
7
|
+
export function resolveConfig(config) {
|
|
8
|
+
if (!config || typeof config.apiKey !== 'string') {
|
|
9
|
+
throw new Error('iSnap SDK: apiKey is required');
|
|
10
|
+
}
|
|
11
|
+
const apiKey = config.apiKey.trim();
|
|
12
|
+
if (apiKey.length === 0) {
|
|
13
|
+
throw new Error('iSnap SDK: apiKey cannot be empty or whitespace');
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
apiKey,
|
|
17
|
+
baseUrl: (config.baseUrl ?? DEFAULTS.baseUrl).replace(/\/+$/, ''),
|
|
18
|
+
maxRetries: validateMaxRetries(config.maxRetries),
|
|
19
|
+
timeoutMs: validateTimeoutMs(config.timeoutMs),
|
|
20
|
+
idempotencyKey: config.idempotencyKey ?? DEFAULTS.idempotencyKey,
|
|
21
|
+
fetch: config.fetch ?? fetch,
|
|
22
|
+
onRetry: config.onRetry
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate `maxRetries` — must be a non-negative integer. NaN, negatives,
|
|
27
|
+
* or non-integers (e.g. `Infinity`, `2.5`) would silently break the
|
|
28
|
+
* `for (let attempt = 0; attempt <= config.maxRetries; attempt++)` loop in
|
|
29
|
+
* `withRetries` and produce confusing failure modes (zero attempts, or
|
|
30
|
+
* fractional comparisons). Validate at the boundary so the error surfaces
|
|
31
|
+
* at construction, not on the first request. Exported for reuse from
|
|
32
|
+
* per-call `RequestOptions.maxRetries` overrides.
|
|
33
|
+
*/
|
|
34
|
+
export function validateMaxRetries(value) {
|
|
35
|
+
if (value === undefined)
|
|
36
|
+
return DEFAULTS.maxRetries;
|
|
37
|
+
if (!Number.isInteger(value) || value < 0) {
|
|
38
|
+
throw new Error(`iSnap SDK: maxRetries must be a non-negative integer (got ${String(value)})`);
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validate `timeoutMs` — must be a finite positive number. NaN, zero,
|
|
44
|
+
* negative, or `Infinity` would either abort every request immediately or
|
|
45
|
+
* never time out at all.
|
|
46
|
+
*/
|
|
47
|
+
export function validateTimeoutMs(value) {
|
|
48
|
+
if (value === undefined)
|
|
49
|
+
return DEFAULTS.timeoutMs;
|
|
50
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
51
|
+
throw new Error(`iSnap SDK: timeoutMs must be a finite positive number (got ${String(value)})`);
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,sBAAsB;IAC/B,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,MAAM;IACjB,cAAc,EAAE,MAAe;CAChC,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IACD,OAAO;QACL,MAAM;QACN,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACjE,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;QACjD,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC;QAC9C,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc;QAChE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;QAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAyB;IAC1D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,UAAU,CAAA;IACnD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,6DAA6D,MAAM,CAAC,KAAK,CAAC,GAAG,CAC9E,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAA;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,8DAA8D,MAAM,CAAC,KAAK,CAAC,GAAG,CAC/E,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ErrorEnvelope, ErrorIssue } from './types.js';
|
|
2
|
+
export interface APIErrorMeta {
|
|
3
|
+
status: number;
|
|
4
|
+
code: string;
|
|
5
|
+
message: string;
|
|
6
|
+
traceId: string;
|
|
7
|
+
requestId: string;
|
|
8
|
+
retryAfter?: number;
|
|
9
|
+
issues?: ErrorIssue[];
|
|
10
|
+
}
|
|
11
|
+
export declare class APIError extends Error {
|
|
12
|
+
readonly status: number;
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly traceId: string;
|
|
15
|
+
readonly requestId: string;
|
|
16
|
+
readonly retryAfter?: number;
|
|
17
|
+
readonly issues?: ErrorIssue[];
|
|
18
|
+
constructor(meta: APIErrorMeta);
|
|
19
|
+
}
|
|
20
|
+
export declare class BadRequestError extends APIError {
|
|
21
|
+
}
|
|
22
|
+
export declare class AuthenticationError extends APIError {
|
|
23
|
+
}
|
|
24
|
+
export declare class PaymentRequiredError extends APIError {
|
|
25
|
+
}
|
|
26
|
+
export declare class PermissionDeniedError extends APIError {
|
|
27
|
+
}
|
|
28
|
+
export declare class NotFoundError extends APIError {
|
|
29
|
+
}
|
|
30
|
+
export declare class ConflictError extends APIError {
|
|
31
|
+
}
|
|
32
|
+
export declare class GoneError extends APIError {
|
|
33
|
+
}
|
|
34
|
+
export declare class UnprocessableEntityError extends APIError {
|
|
35
|
+
}
|
|
36
|
+
export declare class RateLimitError extends APIError {
|
|
37
|
+
}
|
|
38
|
+
export declare class QuotaExceededError extends APIError {
|
|
39
|
+
}
|
|
40
|
+
export declare class InternalServerError extends APIError {
|
|
41
|
+
}
|
|
42
|
+
export declare class ServiceUnavailableError extends APIError {
|
|
43
|
+
}
|
|
44
|
+
export declare class APIConnectionError extends Error {
|
|
45
|
+
constructor(message: string, options?: {
|
|
46
|
+
cause?: unknown;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export declare class WebhookSignatureError extends Error {
|
|
50
|
+
constructor(message: string);
|
|
51
|
+
}
|
|
52
|
+
export declare function fromEnvelope(envelope: ErrorEnvelope, traceId: string, requestId: string): APIError;
|
|
53
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;CACtB;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;gBAElB,IAAI,EAAE,YAAY;CAU/B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;CAAG;AAChD,qBAAa,mBAAoB,SAAQ,QAAQ;CAAG;AACpD,qBAAa,oBAAqB,SAAQ,QAAQ;CAAG;AACrD,qBAAa,qBAAsB,SAAQ,QAAQ;CAAG;AACtD,qBAAa,aAAc,SAAQ,QAAQ;CAAG;AAC9C,qBAAa,aAAc,SAAQ,QAAQ;CAAG;AAC9C,qBAAa,SAAU,SAAQ,QAAQ;CAAG;AAC1C,qBAAa,wBAAyB,SAAQ,QAAQ;CAAG;AACzD,qBAAa,cAAe,SAAQ,QAAQ;CAAG;AAC/C,qBAAa,kBAAmB,SAAQ,QAAQ;CAAG;AACnD,qBAAa,mBAAoB,SAAQ,QAAQ;CAAG;AACpD,qBAAa,uBAAwB,SAAQ,QAAQ;CAAG;AAExD,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAUD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,QAAQ,CAqCV"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export class APIError extends Error {
|
|
2
|
+
status;
|
|
3
|
+
code;
|
|
4
|
+
traceId;
|
|
5
|
+
requestId;
|
|
6
|
+
retryAfter;
|
|
7
|
+
issues;
|
|
8
|
+
constructor(meta) {
|
|
9
|
+
super(meta.message);
|
|
10
|
+
this.name = this.constructor.name;
|
|
11
|
+
this.status = meta.status;
|
|
12
|
+
this.code = meta.code;
|
|
13
|
+
this.traceId = meta.traceId;
|
|
14
|
+
this.requestId = meta.requestId;
|
|
15
|
+
this.retryAfter = meta.retryAfter;
|
|
16
|
+
this.issues = meta.issues;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class BadRequestError extends APIError {
|
|
20
|
+
}
|
|
21
|
+
export class AuthenticationError extends APIError {
|
|
22
|
+
}
|
|
23
|
+
export class PaymentRequiredError extends APIError {
|
|
24
|
+
}
|
|
25
|
+
export class PermissionDeniedError extends APIError {
|
|
26
|
+
}
|
|
27
|
+
export class NotFoundError extends APIError {
|
|
28
|
+
}
|
|
29
|
+
export class ConflictError extends APIError {
|
|
30
|
+
}
|
|
31
|
+
export class GoneError extends APIError {
|
|
32
|
+
}
|
|
33
|
+
export class UnprocessableEntityError extends APIError {
|
|
34
|
+
}
|
|
35
|
+
export class RateLimitError extends APIError {
|
|
36
|
+
}
|
|
37
|
+
export class QuotaExceededError extends APIError {
|
|
38
|
+
}
|
|
39
|
+
export class InternalServerError extends APIError {
|
|
40
|
+
}
|
|
41
|
+
export class ServiceUnavailableError extends APIError {
|
|
42
|
+
}
|
|
43
|
+
export class APIConnectionError extends Error {
|
|
44
|
+
constructor(message, options) {
|
|
45
|
+
super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);
|
|
46
|
+
this.name = 'APIConnectionError';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class WebhookSignatureError extends Error {
|
|
50
|
+
constructor(message) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.name = 'WebhookSignatureError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const QUOTA_CODES = new Set([
|
|
56
|
+
'new_contact_quota_exceeded',
|
|
57
|
+
'known_contact_quota_exceeded',
|
|
58
|
+
'total_message_quota_exceeded',
|
|
59
|
+
'queue_full',
|
|
60
|
+
'lookup_rate_limit_exceeded'
|
|
61
|
+
]);
|
|
62
|
+
export function fromEnvelope(envelope, traceId, requestId) {
|
|
63
|
+
const meta = {
|
|
64
|
+
status: envelope.status,
|
|
65
|
+
code: envelope.code,
|
|
66
|
+
message: envelope.message,
|
|
67
|
+
traceId,
|
|
68
|
+
requestId,
|
|
69
|
+
retryAfter: envelope.retry_after,
|
|
70
|
+
issues: envelope.issues
|
|
71
|
+
};
|
|
72
|
+
switch (envelope.status) {
|
|
73
|
+
case 400:
|
|
74
|
+
return new BadRequestError(meta);
|
|
75
|
+
case 401:
|
|
76
|
+
return new AuthenticationError(meta);
|
|
77
|
+
case 402:
|
|
78
|
+
return new PaymentRequiredError(meta);
|
|
79
|
+
case 403:
|
|
80
|
+
return new PermissionDeniedError(meta);
|
|
81
|
+
case 404:
|
|
82
|
+
return new NotFoundError(meta);
|
|
83
|
+
case 409:
|
|
84
|
+
return new ConflictError(meta);
|
|
85
|
+
case 410:
|
|
86
|
+
return new GoneError(meta);
|
|
87
|
+
case 413:
|
|
88
|
+
case 422:
|
|
89
|
+
return new UnprocessableEntityError(meta);
|
|
90
|
+
case 429:
|
|
91
|
+
return QUOTA_CODES.has(envelope.code) ? new QuotaExceededError(meta) : new RateLimitError(meta);
|
|
92
|
+
case 500:
|
|
93
|
+
return new InternalServerError(meta);
|
|
94
|
+
case 503:
|
|
95
|
+
return new ServiceUnavailableError(meta);
|
|
96
|
+
default:
|
|
97
|
+
return new APIError(meta);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|