contiguity 0.0.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.md +8 -0
- package/README.md +1 -0
- package/dist/client/fetch.d.ts +30 -0
- package/dist/client/fetch.d.ts.map +1 -0
- package/dist/client/fetch.js +117 -0
- package/dist/contiguity.d.ts +81 -0
- package/dist/contiguity.d.ts.map +1 -0
- package/dist/contiguity.js +106 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12542 -0
- package/dist/services/domains/delete.d.ts +32 -0
- package/dist/services/domains/delete.d.ts.map +1 -0
- package/dist/services/domains/delete.js +43 -0
- package/dist/services/domains/get.d.ts +128 -0
- package/dist/services/domains/get.d.ts.map +1 -0
- package/dist/services/domains/get.js +95 -0
- package/dist/services/domains/index.d.ts +34 -0
- package/dist/services/domains/index.d.ts.map +1 -0
- package/dist/services/domains/index.js +37 -0
- package/dist/services/domains/list.d.ts +68 -0
- package/dist/services/domains/list.d.ts.map +1 -0
- package/dist/services/domains/list.js +52 -0
- package/dist/services/domains/register.d.ts +89 -0
- package/dist/services/domains/register.d.ts.map +1 -0
- package/dist/services/domains/register.js +73 -0
- package/dist/services/email/index.d.ts +17 -0
- package/dist/services/email/index.d.ts.map +1 -0
- package/dist/services/email/index.js +16 -0
- package/dist/services/email/send.d.ts +69 -0
- package/dist/services/email/send.d.ts.map +1 -0
- package/dist/services/email/send.js +84 -0
- package/dist/services/imessage/index.d.ts +24 -0
- package/dist/services/imessage/index.d.ts.map +1 -0
- package/dist/services/imessage/index.js +23 -0
- package/dist/services/imessage/send.d.ts +60 -0
- package/dist/services/imessage/send.d.ts.map +1 -0
- package/dist/services/imessage/send.js +66 -0
- package/dist/services/imessage/typing.d.ts +43 -0
- package/dist/services/imessage/typing.d.ts.map +1 -0
- package/dist/services/imessage/typing.js +55 -0
- package/dist/services/lease/available.d.ts +255 -0
- package/dist/services/lease/available.d.ts.map +1 -0
- package/dist/services/lease/available.js +109 -0
- package/dist/services/lease/create.d.ts +139 -0
- package/dist/services/lease/create.d.ts.map +1 -0
- package/dist/services/lease/create.js +84 -0
- package/dist/services/lease/details.d.ts +210 -0
- package/dist/services/lease/details.d.ts.map +1 -0
- package/dist/services/lease/details.js +71 -0
- package/dist/services/lease/get.d.ts +155 -0
- package/dist/services/lease/get.d.ts.map +1 -0
- package/dist/services/lease/get.js +74 -0
- package/dist/services/lease/index.d.ts +50 -0
- package/dist/services/lease/index.d.ts.map +1 -0
- package/dist/services/lease/index.js +51 -0
- package/dist/services/lease/leased.d.ts +308 -0
- package/dist/services/lease/leased.d.ts.map +1 -0
- package/dist/services/lease/leased.js +114 -0
- package/dist/services/lease/terminate.d.ts +81 -0
- package/dist/services/lease/terminate.d.ts.map +1 -0
- package/dist/services/lease/terminate.js +84 -0
- package/dist/services/otp/index.d.ts +28 -0
- package/dist/services/otp/index.d.ts.map +1 -0
- package/dist/services/otp/index.js +30 -0
- package/dist/services/otp/new.d.ts +29 -0
- package/dist/services/otp/new.d.ts.map +1 -0
- package/dist/services/otp/new.js +44 -0
- package/dist/services/otp/resend.d.ts +25 -0
- package/dist/services/otp/resend.d.ts.map +1 -0
- package/dist/services/otp/resend.js +37 -0
- package/dist/services/otp/verify.d.ts +27 -0
- package/dist/services/otp/verify.d.ts.map +1 -0
- package/dist/services/otp/verify.js +40 -0
- package/dist/services/text/index.d.ts +17 -0
- package/dist/services/text/index.d.ts.map +1 -0
- package/dist/services/text/index.js +16 -0
- package/dist/services/text/send.d.ts +28 -0
- package/dist/services/text/send.d.ts.map +1 -0
- package/dist/services/text/send.js +43 -0
- package/dist/services/whatsapp/index.d.ts +24 -0
- package/dist/services/whatsapp/index.d.ts.map +1 -0
- package/dist/services/whatsapp/index.js +23 -0
- package/dist/services/whatsapp/send.d.ts +60 -0
- package/dist/services/whatsapp/send.d.ts.map +1 -0
- package/dist/services/whatsapp/send.js +66 -0
- package/dist/services/whatsapp/typing.d.ts +43 -0
- package/dist/services/whatsapp/typing.d.ts.map +1 -0
- package/dist/services/whatsapp/typing.js +55 -0
- package/dist/types/base.d.ts +38 -0
- package/dist/types/base.d.ts.map +1 -0
- package/dist/types/base.js +32 -0
- package/dist/types/common.d.ts +56 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +48 -0
- package/dist/types/error.d.ts +37 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +54 -0
- package/dist/types/metadata.d.ts +10 -0
- package/dist/types/metadata.d.ts.map +1 -0
- package/dist/types/metadata.js +1 -0
- package/dist/types/response.d.ts +17 -0
- package/dist/types/response.d.ts.map +1 -0
- package/dist/types/response.js +17 -0
- package/dist/utils/parse.d.ts +8 -0
- package/dist/utils/parse.d.ts.map +1 -0
- package/dist/utils/parse.js +36 -0
- package/dist/utils/request.d.ts +6 -0
- package/dist/utils/request.d.ts.map +1 -0
- package/dist/utils/request.js +47 -0
- package/package.json +46 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ContiguityResponse, ContiguityRawResponse } from "@/types/response";
|
|
2
|
+
/**
|
|
3
|
+
* Base response builder that automatically creates flattened and raw response types
|
|
4
|
+
* This eliminates the need to manually define *ResponseFlattened and *ResponseRaw for each service
|
|
5
|
+
*/
|
|
6
|
+
export class BaseResponseBuilder {
|
|
7
|
+
schema;
|
|
8
|
+
constructor(schema) {
|
|
9
|
+
this.schema = schema;
|
|
10
|
+
}
|
|
11
|
+
get response() {
|
|
12
|
+
return this.schema;
|
|
13
|
+
}
|
|
14
|
+
get flattened() {
|
|
15
|
+
return ContiguityResponse.extend(this.schema.shape);
|
|
16
|
+
}
|
|
17
|
+
get raw() {
|
|
18
|
+
return ContiguityRawResponse.extend({
|
|
19
|
+
data: this.schema,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
get all() {
|
|
23
|
+
return {
|
|
24
|
+
response: this.response,
|
|
25
|
+
flattened: this.flattened,
|
|
26
|
+
raw: this.raw,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function createResponse(schema) {
|
|
31
|
+
return new BaseResponseBuilder(schema);
|
|
32
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Common validation schemas used across multiple services
|
|
4
|
+
*/
|
|
5
|
+
export declare const E164PhoneNumber: z.ZodString;
|
|
6
|
+
export declare const MessageContent: z.ZodString;
|
|
7
|
+
export declare const OptionalSenderNumber: z.ZodOptional<z.ZodString>;
|
|
8
|
+
export declare const AttachmentList: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
+
export declare const SingleOrMultipleEmails: (maxCount?: number, fieldName?: string) => z.ZodUnion<readonly [z.ZodEmail, z.ZodArray<z.ZodEmail>]>;
|
|
10
|
+
export declare const TypingAction: z.ZodEnum<{
|
|
11
|
+
start: "start";
|
|
12
|
+
stop: "stop";
|
|
13
|
+
}>;
|
|
14
|
+
export declare const NumberStatus: z.ZodEnum<{
|
|
15
|
+
available: "available";
|
|
16
|
+
"g-available": "g-available";
|
|
17
|
+
leased: "leased";
|
|
18
|
+
unavailable: "unavailable";
|
|
19
|
+
}>;
|
|
20
|
+
export declare const LeaseStatus: z.ZodEnum<{
|
|
21
|
+
active: "active";
|
|
22
|
+
expired: "expired";
|
|
23
|
+
terminated: "terminated";
|
|
24
|
+
}>;
|
|
25
|
+
export declare const BillingMethod: z.ZodEnum<{
|
|
26
|
+
monthly: "monthly";
|
|
27
|
+
service_contract: "service_contract";
|
|
28
|
+
goodwill: "goodwill";
|
|
29
|
+
}>;
|
|
30
|
+
export declare const Currency: z.ZodEnum<{
|
|
31
|
+
USD: "USD";
|
|
32
|
+
EUR: "EUR";
|
|
33
|
+
GBP: "GBP";
|
|
34
|
+
CAD: "CAD";
|
|
35
|
+
AUD: "AUD";
|
|
36
|
+
}>;
|
|
37
|
+
export declare const Carrier: z.ZodEnum<{
|
|
38
|
+
"T-Mobile": "T-Mobile";
|
|
39
|
+
"AT&T": "AT&T";
|
|
40
|
+
Verizon: "Verizon";
|
|
41
|
+
Contiguity: "Contiguity";
|
|
42
|
+
"International Partner": "International Partner";
|
|
43
|
+
}>;
|
|
44
|
+
export declare const MessageChannel: z.ZodEnum<{
|
|
45
|
+
sms: "sms";
|
|
46
|
+
mms: "mms";
|
|
47
|
+
rcs: "rcs";
|
|
48
|
+
imessage: "imessage";
|
|
49
|
+
whatsapp: "whatsapp";
|
|
50
|
+
}>;
|
|
51
|
+
export declare const createFallbackSchema: <T extends string>(serviceType: T, fallbackConditions: readonly [T, ...T[]]) => z.ZodOptional<z.ZodObject<{
|
|
52
|
+
when: z.ZodArray<z.ZodEnum<{ [k_1 in T]: k_1; } extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never>>;
|
|
53
|
+
from: z.ZodOptional<z.ZodString>;
|
|
54
|
+
}, z.core.$strip>>;
|
|
55
|
+
export type RequestFunction<TParams, TResponse> = (this: any, params: TParams) => Promise<TResponse>;
|
|
56
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AAGH,eAAO,MAAM,eAAe,aAAgF,CAAC;AAG7G,eAAO,MAAM,cAAc,aAA+C,CAAC;AAG3E,eAAO,MAAM,oBAAoB,4BAAwB,CAAC;AAG1D,eAAO,MAAM,cAAc,wCAGZ,CAAC;AAGhB,eAAO,MAAM,sBAAsB,GAAI,WAAU,MAAW,EAAE,YAAW,MAAgB,8DAKnF,CAAC;AAGP,eAAO,MAAM,YAAY;;;EAAgF,CAAC;AAG1G,eAAO,MAAM,YAAY;;;;;EAAgE,CAAC;AAE1F,eAAO,MAAM,WAAW;;;;EAA8C,CAAC;AAEvE,eAAO,MAAM,aAAa;;;;EAAsD,CAAC;AAEjF,eAAO,MAAM,QAAQ;;;;;;EAA8C,CAAC;AAEpE,eAAO,MAAM,OAAO;;;;;;EAMlB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;EAMzB,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EACjD,aAAa,CAAC,EACd,oBAAoB,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;;;kBAM/B,CAAC;AAGd,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,SAAS,IAAI,CAC9C,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,OAAO,KACd,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Common validation schemas used across multiple services
|
|
4
|
+
*/
|
|
5
|
+
// Phone number validation - used in text, iMessage, WhatsApp, and lease services
|
|
6
|
+
export const E164PhoneNumber = z.string().regex(/^\+[1-9]\d{1,14}$/, "Phone number must be in E.164 format");
|
|
7
|
+
// Message validation - used across messaging services
|
|
8
|
+
export const MessageContent = z.string().min(1, "Message cannot be empty");
|
|
9
|
+
// Optional sender number - used across messaging services
|
|
10
|
+
export const OptionalSenderNumber = z.string().optional();
|
|
11
|
+
// Attachment validation - used in iMessage and WhatsApp
|
|
12
|
+
export const AttachmentList = z
|
|
13
|
+
.array(z.string().min(1, "Attachment cannot be empty"))
|
|
14
|
+
.max(10, "Maximum 10 attachments allowed")
|
|
15
|
+
.optional();
|
|
16
|
+
// Email validation patterns - used in email service
|
|
17
|
+
export const SingleOrMultipleEmails = (maxCount = 10, fieldName = "email") => z.union([
|
|
18
|
+
z.email(`Must be a valid ${fieldName} address`),
|
|
19
|
+
z.array(z.email(`Must be a valid ${fieldName} address`))
|
|
20
|
+
.max(maxCount, `Maximum ${maxCount} ${fieldName} addresses allowed`)
|
|
21
|
+
]);
|
|
22
|
+
// Typing action validation - used in iMessage and WhatsApp typing
|
|
23
|
+
export const TypingAction = z.enum(["start", "stop"]).describe("Action must be either 'start' or 'stop'");
|
|
24
|
+
// Common status enums
|
|
25
|
+
export const NumberStatus = z.enum(["available", "g-available", "leased", "unavailable"]);
|
|
26
|
+
export const LeaseStatus = z.enum(["active", "expired", "terminated"]);
|
|
27
|
+
export const BillingMethod = z.enum(["monthly", "service_contract", "goodwill"]);
|
|
28
|
+
export const Currency = z.enum(["USD", "EUR", "GBP", "CAD", "AUD"]);
|
|
29
|
+
export const Carrier = z.enum([
|
|
30
|
+
"T-Mobile",
|
|
31
|
+
"AT&T",
|
|
32
|
+
"Verizon",
|
|
33
|
+
"Contiguity",
|
|
34
|
+
"International Partner"
|
|
35
|
+
]);
|
|
36
|
+
export const MessageChannel = z.enum([
|
|
37
|
+
"sms",
|
|
38
|
+
"mms",
|
|
39
|
+
"rcs",
|
|
40
|
+
"imessage",
|
|
41
|
+
"whatsapp"
|
|
42
|
+
]);
|
|
43
|
+
export const createFallbackSchema = (serviceType, fallbackConditions) => z.object({
|
|
44
|
+
/** When to fallback to SMS/RCS */
|
|
45
|
+
when: z.array(z.enum(fallbackConditions)).min(1, "At least one fallback condition must be specified"),
|
|
46
|
+
/** Fallback sender number */
|
|
47
|
+
from: OptionalSenderNumber
|
|
48
|
+
}).optional();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const ContiguityAPIError: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
timestamp: z.ZodNumber;
|
|
5
|
+
api_version: z.ZodString;
|
|
6
|
+
object: z.ZodString;
|
|
7
|
+
data: z.ZodObject<{
|
|
8
|
+
status: z.ZodNumber;
|
|
9
|
+
error: z.ZodString;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
export interface ContiguityErrorData {
|
|
13
|
+
data: {
|
|
14
|
+
status: number;
|
|
15
|
+
error: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare class ContiguityError extends Error {
|
|
19
|
+
readonly status: number;
|
|
20
|
+
constructor(response: ContiguityErrorData);
|
|
21
|
+
static fromError(error: any): ContiguityError;
|
|
22
|
+
toString(): string;
|
|
23
|
+
toJSON(): {
|
|
24
|
+
message: string;
|
|
25
|
+
status: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export declare class ContiguitySDKError extends Error {
|
|
29
|
+
readonly status: string;
|
|
30
|
+
constructor(message: string, status?: string);
|
|
31
|
+
toString(): string;
|
|
32
|
+
toJSON(): {
|
|
33
|
+
message: string;
|
|
34
|
+
status: string;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/types/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;iBAS7B,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE;QACF,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACtC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,QAAQ,EAAE,mBAAmB;IAMzC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG;IASlB,QAAQ;IAIjB,MAAM;;;;CAMT;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IACzC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAoB;IAOhD,QAAQ;IAIjB,MAAM;;;;CAMT"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const ContiguityAPIError = z.object({
|
|
3
|
+
id: z.string(),
|
|
4
|
+
timestamp: z.number(),
|
|
5
|
+
api_version: z.string(),
|
|
6
|
+
object: z.string(),
|
|
7
|
+
data: z.object({
|
|
8
|
+
status: z.number(),
|
|
9
|
+
error: z.string(),
|
|
10
|
+
}),
|
|
11
|
+
});
|
|
12
|
+
export class ContiguityError extends Error {
|
|
13
|
+
status;
|
|
14
|
+
constructor(response) {
|
|
15
|
+
super(response.data.error);
|
|
16
|
+
this.message = response.data.error;
|
|
17
|
+
this.status = response.data.status;
|
|
18
|
+
}
|
|
19
|
+
static fromError(error) {
|
|
20
|
+
return new ContiguityError({
|
|
21
|
+
data: {
|
|
22
|
+
error: error.message || "Unknown error",
|
|
23
|
+
status: error.status || 500,
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
28
|
+
return `[Contiguity Error]: ${this.message} (status: ${this.status})`;
|
|
29
|
+
}
|
|
30
|
+
toJSON() {
|
|
31
|
+
return {
|
|
32
|
+
message: this.message,
|
|
33
|
+
status: this.status,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class ContiguitySDKError extends Error {
|
|
38
|
+
status;
|
|
39
|
+
constructor(message, status = 'sdk_error') {
|
|
40
|
+
super(message);
|
|
41
|
+
this.message = message;
|
|
42
|
+
this.status = status;
|
|
43
|
+
this.name = '[Contiguity SDK Error]';
|
|
44
|
+
}
|
|
45
|
+
toString() {
|
|
46
|
+
return `[Contiguity SDK Error]: ${this.message} (status: ${this.status})`;
|
|
47
|
+
}
|
|
48
|
+
toJSON() {
|
|
49
|
+
return {
|
|
50
|
+
message: this.message,
|
|
51
|
+
status: this.status,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/types/metadata.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,kBAAkB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;CAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const ContiguityRawResponse: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
timestamp: z.ZodNumber;
|
|
5
|
+
api_version: z.ZodString;
|
|
6
|
+
object: z.ZodString;
|
|
7
|
+
data: z.ZodAny;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export declare const ContiguityResponse: z.ZodObject<{
|
|
10
|
+
metadata: z.ZodObject<{
|
|
11
|
+
id: z.ZodString;
|
|
12
|
+
timestamp: z.ZodNumber;
|
|
13
|
+
api_version: z.ZodString;
|
|
14
|
+
object: z.ZodString;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/types/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AAGH,eAAO,MAAM,kBAAkB;;;;;;;iBAQ7B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const ContiguityRawResponse = z.object({
|
|
3
|
+
id: z.string(),
|
|
4
|
+
timestamp: z.number(),
|
|
5
|
+
api_version: z.string(),
|
|
6
|
+
object: z.string(),
|
|
7
|
+
data: z.any(),
|
|
8
|
+
});
|
|
9
|
+
export const ContiguityResponse = z.object({
|
|
10
|
+
metadata: z.object({
|
|
11
|
+
id: z.string(),
|
|
12
|
+
timestamp: z.number(),
|
|
13
|
+
api_version: z.string(),
|
|
14
|
+
object: z.string(),
|
|
15
|
+
}),
|
|
16
|
+
// we run zod.extend with data here.
|
|
17
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Normalizes API responses to either raw or flattened format
|
|
4
|
+
* This utility handles the complex logic of parsing different response formats
|
|
5
|
+
* from the Contiguity API and normalizing them consistently.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseContiguityResponse<T extends z.ZodType, R extends z.ZodType>(response: any, dataSchema: T, rawResponseSchema: R, returnRaw?: boolean): any;
|
|
8
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/utils/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,EAC5E,QAAQ,EAAE,GAAG,EACb,UAAU,EAAE,CAAC,EACb,iBAAiB,EAAE,CAAC,EACpB,SAAS,GAAE,OAAe,GAC3B,GAAG,CAiCL"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes API responses to either raw or flattened format
|
|
3
|
+
* This utility handles the complex logic of parsing different response formats
|
|
4
|
+
* from the Contiguity API and normalizing them consistently.
|
|
5
|
+
*/
|
|
6
|
+
export function parseContiguityResponse(response, dataSchema, rawResponseSchema, returnRaw = false) {
|
|
7
|
+
// Handle different response formats:
|
|
8
|
+
// 1. Already wrapped in response format (response.object === "response")
|
|
9
|
+
// 2. Direct data that needs wrapping
|
|
10
|
+
// 3. Fallback to raw parsing
|
|
11
|
+
const validatedResponse = response.object === "response"
|
|
12
|
+
? rawResponseSchema.parse(response)
|
|
13
|
+
: dataSchema.safeParse(response).success
|
|
14
|
+
? {
|
|
15
|
+
id: response.id || "unknown",
|
|
16
|
+
timestamp: response.timestamp || Date.now(),
|
|
17
|
+
api_version: response.api_version || "unknown",
|
|
18
|
+
object: response.object || "unknown",
|
|
19
|
+
data: dataSchema.parse(response),
|
|
20
|
+
}
|
|
21
|
+
: rawResponseSchema.parse(response);
|
|
22
|
+
if (returnRaw) {
|
|
23
|
+
return validatedResponse;
|
|
24
|
+
}
|
|
25
|
+
// For flattened responses, we need to handle both formats
|
|
26
|
+
const rawData = rawResponseSchema.parse(validatedResponse);
|
|
27
|
+
return {
|
|
28
|
+
...rawData.data,
|
|
29
|
+
metadata: {
|
|
30
|
+
id: rawData.id,
|
|
31
|
+
timestamp: rawData.timestamp,
|
|
32
|
+
api_version: rawData.api_version,
|
|
33
|
+
object: rawData.object,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Standard request function factory - reduces duplication across services
|
|
4
|
+
*/
|
|
5
|
+
export declare function createRequestFunction<TRequest extends z.ZodType, TResponse extends z.ZodType, TRawResponse extends z.ZodType>(requestSchema: TRequest, responseSchema: TResponse, rawResponseSchema: TRawResponse, endpoint: string, method?: 'GET' | 'POST' | 'PUT' | 'DELETE'): (this: any, params?: z.infer<TRequest>) => Promise<any>;
|
|
6
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/utils/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,SAAS,CAAC,CAAC,OAAO,EAAE,SAAS,SAAS,CAAC,CAAC,OAAO,EAAE,YAAY,SAAS,CAAC,CAAC,OAAO,EACzH,aAAa,EAAE,QAAQ,EACvB,cAAc,EAAE,SAAS,EACzB,iBAAiB,EAAE,YAAY,EAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAiB,IAE5B,MAAM,GAAG,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAG,OAAO,CAAC,GAAG,CAAC,CA8C7E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard request function factory - reduces duplication across services
|
|
3
|
+
*/
|
|
4
|
+
export function createRequestFunction(requestSchema, responseSchema, rawResponseSchema, endpoint, method = 'POST') {
|
|
5
|
+
return async function (params) {
|
|
6
|
+
let validatedParams;
|
|
7
|
+
let url = endpoint;
|
|
8
|
+
let body;
|
|
9
|
+
if (params !== undefined) {
|
|
10
|
+
validatedParams = requestSchema.parse(params);
|
|
11
|
+
// Handle path parameters (for endpoints with {param})
|
|
12
|
+
if (endpoint.includes('{') && endpoint.includes('}')) {
|
|
13
|
+
// Extract path parameter name (e.g., "{number}" -> "number")
|
|
14
|
+
const pathParamMatch = endpoint.match(/\{(\w+)\}/);
|
|
15
|
+
if (pathParamMatch && pathParamMatch[1] && validatedParams && typeof validatedParams === 'object') {
|
|
16
|
+
const pathParam = pathParamMatch[1];
|
|
17
|
+
const pathValue = validatedParams[pathParam];
|
|
18
|
+
if (pathValue) {
|
|
19
|
+
url = endpoint.replace(`{${pathParam}}`, encodeURIComponent(pathValue));
|
|
20
|
+
// Remove path param from body
|
|
21
|
+
const bodyParams = { ...validatedParams };
|
|
22
|
+
delete bodyParams[pathParam];
|
|
23
|
+
// Only set body if there are remaining params and not GET/DELETE
|
|
24
|
+
if (Object.keys(bodyParams).length > 0 && method !== 'GET' && method !== 'DELETE') {
|
|
25
|
+
body = JSON.stringify(bodyParams);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else if (method !== 'GET' && method !== 'DELETE') {
|
|
31
|
+
// For non-path-param endpoints, use all params as body
|
|
32
|
+
body = JSON.stringify(validatedParams);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const response = await this.request(url, {
|
|
36
|
+
method,
|
|
37
|
+
...(body && { body })
|
|
38
|
+
});
|
|
39
|
+
return this.parse({
|
|
40
|
+
response,
|
|
41
|
+
schemas: {
|
|
42
|
+
sdk: responseSchema,
|
|
43
|
+
raw: rawResponseSchema
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "contiguity",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Contiguity's official JavaScript SDK",
|
|
6
|
+
"author": "Contiguity",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/**/*",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE.md"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"contiguity",
|
|
18
|
+
"sms",
|
|
19
|
+
"email",
|
|
20
|
+
"whatsapp",
|
|
21
|
+
"imessage",
|
|
22
|
+
"otp",
|
|
23
|
+
"domains"
|
|
24
|
+
],
|
|
25
|
+
"homepage": "https://contiguity.com",
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/contiguity/javascript/issues"
|
|
28
|
+
},
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/contiguity/javascript.git"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"publish": "bun publish --access public",
|
|
35
|
+
"dev": "bun run src/index.ts",
|
|
36
|
+
"build": "bunx tsc && bun build src/index.ts --outdir=dist --format=esm --target=node",
|
|
37
|
+
"typecheck": "bunx tsc --noEmit",
|
|
38
|
+
"update-deps": "npx npm-check-updates"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"zod": "^4.0.17"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"typescript": "^5.9.2"
|
|
45
|
+
}
|
|
46
|
+
}
|