@izapai/sdk 0.0.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +173 -1
- package/dist/client.d.ts +20 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +41 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +67 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/client/client.gen.d.ts +3 -0
- package/dist/generated/client/client.gen.d.ts.map +1 -0
- package/dist/generated/client/client.gen.js +217 -0
- package/dist/generated/client/client.gen.js.map +1 -0
- package/dist/generated/client/index.d.ts +11 -0
- package/dist/generated/client/index.d.ts.map +1 -0
- package/dist/generated/client/index.js +7 -0
- package/dist/generated/client/index.js.map +1 -0
- package/dist/generated/client/types.gen.d.ts +121 -0
- package/dist/generated/client/types.gen.d.ts.map +1 -0
- package/dist/generated/client/types.gen.js +3 -0
- package/dist/generated/client/types.gen.js.map +1 -0
- package/dist/generated/client/utils.gen.d.ts +38 -0
- package/dist/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/generated/client/utils.gen.js +229 -0
- package/dist/generated/client/utils.gen.js.map +1 -0
- package/dist/generated/client.gen.d.ts +13 -0
- package/dist/generated/client.gen.d.ts.map +1 -0
- package/dist/generated/client.gen.js +4 -0
- package/dist/generated/client.gen.js.map +1 -0
- package/dist/generated/core/auth.gen.d.ts +26 -0
- package/dist/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/generated/core/auth.gen.js +15 -0
- package/dist/generated/core/auth.gen.js.map +1 -0
- package/dist/generated/core/bodySerializer.gen.d.ts +26 -0
- package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/bodySerializer.gen.js +58 -0
- package/dist/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/generated/core/params.gen.d.ts +44 -0
- package/dist/generated/core/params.gen.d.ts.map +1 -0
- package/dist/generated/core/params.gen.js +110 -0
- package/dist/generated/core/params.gen.js.map +1 -0
- package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/pathSerializer.gen.js +107 -0
- package/dist/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/generated/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/queryKeySerializer.gen.js +93 -0
- package/dist/generated/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.js +133 -0
- package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/generated/core/types.gen.d.ts +84 -0
- package/dist/generated/core/types.gen.d.ts.map +1 -0
- package/dist/generated/core/types.gen.js +3 -0
- package/dist/generated/core/types.gen.js.map +1 -0
- package/dist/generated/core/utils.gen.d.ts +20 -0
- package/dist/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/generated/core/utils.gen.js +88 -0
- package/dist/generated/core/utils.gen.js.map +1 -0
- package/dist/generated/index.d.ts +3 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +3 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/sdk.gen.d.ts +474 -0
- package/dist/generated/sdk.gen.d.ts.map +1 -0
- package/dist/generated/sdk.gen.js +1035 -0
- package/dist/generated/sdk.gen.js.map +1 -0
- package/dist/generated/types.gen.d.ts +6277 -0
- package/dist/generated/types.gen.d.ts.map +1 -0
- package/dist/generated/types.gen.js +3 -0
- package/dist/generated/types.gen.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/retry.d.ts +18 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +84 -0
- package/dist/retry.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/webhooks.d.ts +127 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +153 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +58 -3
package/dist/webhooks.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
2
|
+
/** Header names iZap sends with every webhook delivery. */
|
|
3
|
+
export const WEBHOOK_HEADERS = {
|
|
4
|
+
id: "izap-webhook-id",
|
|
5
|
+
event: "izap-webhook-event",
|
|
6
|
+
timestamp: "izap-webhook-timestamp",
|
|
7
|
+
signature: "izap-webhook-signature",
|
|
8
|
+
v2: "izap-webhook-signature-v2",
|
|
9
|
+
};
|
|
10
|
+
export const DEFAULT_TOLERANCE_SEC = 300;
|
|
11
|
+
const SIGNATURE_VERSION = "v1";
|
|
12
|
+
const SIGNATURE_VERSION_V2 = "v2";
|
|
13
|
+
export class WebhookVerificationError extends Error {
|
|
14
|
+
name = "WebhookVerificationError";
|
|
15
|
+
code;
|
|
16
|
+
constructor(code, message) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.code = code;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Verifies an iZap webhook delivery and returns the parsed event.
|
|
23
|
+
*
|
|
24
|
+
* By default, requires `izap-webhook-signature-v2`
|
|
25
|
+
* (`v2=<hex HMAC-SHA256 of "{id}.{timestamp}.{raw_body}">`) — it covers the
|
|
26
|
+
* delivery id, so a captured delivery cannot be replayed under a new id the way
|
|
27
|
+
* it can under v1. Pass `allowV1: true` to accept a v1-only
|
|
28
|
+
* `izap-webhook-signature` (`v1=<hex HMAC-SHA256 of "{timestamp}.{raw_body}">`)
|
|
29
|
+
* when v2 is absent (senders from before v2 existed). Either check runs in
|
|
30
|
+
* constant time. Both checks also reject timestamps outside `toleranceSec`.
|
|
31
|
+
*
|
|
32
|
+
* @throws {WebhookVerificationError} when the delivery is not authentic or is stale.
|
|
33
|
+
*/
|
|
34
|
+
export function verify(options) {
|
|
35
|
+
const { secret, toleranceSec = DEFAULT_TOLERANCE_SEC, allowV1 = false, } = options;
|
|
36
|
+
if (typeof secret !== "string" || secret === "") {
|
|
37
|
+
throw new TypeError("webhooks.verify: `secret` is required.");
|
|
38
|
+
}
|
|
39
|
+
const body = rawBytes(options.payload);
|
|
40
|
+
const id = readHeader(options.headers, WEBHOOK_HEADERS.id);
|
|
41
|
+
const timestamp = readHeader(options.headers, WEBHOOK_HEADERS.timestamp);
|
|
42
|
+
const signature = readHeader(options.headers, WEBHOOK_HEADERS.signature);
|
|
43
|
+
const signatureV2 = readHeader(options.headers, WEBHOOK_HEADERS.v2);
|
|
44
|
+
const missing = [
|
|
45
|
+
[WEBHOOK_HEADERS.id, id],
|
|
46
|
+
[WEBHOOK_HEADERS.timestamp, timestamp],
|
|
47
|
+
]
|
|
48
|
+
.filter(([, value]) => !value)
|
|
49
|
+
.map(([name]) => name);
|
|
50
|
+
if (!signatureV2 && !allowV1) {
|
|
51
|
+
missing.push(WEBHOOK_HEADERS.v2);
|
|
52
|
+
}
|
|
53
|
+
else if (!signature && !signatureV2) {
|
|
54
|
+
missing.push(`${WEBHOOK_HEADERS.signature} or ${WEBHOOK_HEADERS.v2}`);
|
|
55
|
+
}
|
|
56
|
+
if (!id ||
|
|
57
|
+
!timestamp ||
|
|
58
|
+
(!signatureV2 && !allowV1) ||
|
|
59
|
+
(!signature && !signatureV2)) {
|
|
60
|
+
throw new WebhookVerificationError("missing_header", `Missing webhook header(s): ${missing.join(", ")}.`);
|
|
61
|
+
}
|
|
62
|
+
if (!/^\d+$/.test(timestamp)) {
|
|
63
|
+
throw new WebhookVerificationError("invalid_timestamp", `${WEBHOOK_HEADERS.timestamp} is not a Unix timestamp.`);
|
|
64
|
+
}
|
|
65
|
+
const timestampSec = Number(timestamp);
|
|
66
|
+
if (Math.abs(Date.now() / 1000 - timestampSec) > toleranceSec) {
|
|
67
|
+
throw new WebhookVerificationError("timestamp_out_of_tolerance", `${WEBHOOK_HEADERS.timestamp} is more than ${toleranceSec}s away from the current time.`);
|
|
68
|
+
}
|
|
69
|
+
// v2 wins whenever it is present: it is the stronger check (it covers `id`,
|
|
70
|
+
// closing v1's replay-under-a-new-id gap), and a delivery must not silently
|
|
71
|
+
// fall back to a v1 signature that happens to still verify.
|
|
72
|
+
const usingV2 = Boolean(signatureV2);
|
|
73
|
+
const activeHeaderName = usingV2
|
|
74
|
+
? WEBHOOK_HEADERS.v2
|
|
75
|
+
: WEBHOOK_HEADERS.signature;
|
|
76
|
+
const activeSignature = (usingV2 ? signatureV2 : signature);
|
|
77
|
+
const activeVersion = usingV2 ? SIGNATURE_VERSION_V2 : SIGNATURE_VERSION;
|
|
78
|
+
const expectedHex = usingV2
|
|
79
|
+
? computeSignatureV2(secret, id, timestamp, body)
|
|
80
|
+
: computeSignature(secret, timestamp, body);
|
|
81
|
+
if (!signatureMatches(activeSignature, activeVersion, expectedHex)) {
|
|
82
|
+
throw new WebhookVerificationError("invalid_signature", `${activeHeaderName} does not match the payload.`);
|
|
83
|
+
}
|
|
84
|
+
let data;
|
|
85
|
+
try {
|
|
86
|
+
data = JSON.parse(body.toString("utf8"));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
throw new WebhookVerificationError("invalid_payload", "The signed payload is not valid JSON.");
|
|
90
|
+
}
|
|
91
|
+
const event = readHeader(options.headers, WEBHOOK_HEADERS.event) ??
|
|
92
|
+
(typeof data === "object" && data !== null && "event" in data
|
|
93
|
+
? String(data.event)
|
|
94
|
+
: "");
|
|
95
|
+
return { id, event, timestamp: timestampSec, data };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Produces the `izap-webhook-signature` (v1) value for a payload, e.g. to exercise
|
|
99
|
+
* a receiver locally with a known secret. See {@link signV2} for the v2 scheme.
|
|
100
|
+
*/
|
|
101
|
+
export function sign(options) {
|
|
102
|
+
const timestamp = String(options.timestamp ?? Math.floor(Date.now() / 1000));
|
|
103
|
+
return `${SIGNATURE_VERSION}=${computeSignature(options.secret, timestamp, rawBytes(options.payload))}`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Produces the `izap-webhook-signature-v2` value for a payload, e.g. to exercise a
|
|
107
|
+
* receiver locally with a known secret. Unlike v1, this also signs `id`.
|
|
108
|
+
*/
|
|
109
|
+
export function signV2(options) {
|
|
110
|
+
const timestamp = String(options.timestamp ?? Math.floor(Date.now() / 1000));
|
|
111
|
+
return `${SIGNATURE_VERSION_V2}=${computeSignatureV2(options.secret, options.id, timestamp, rawBytes(options.payload))}`;
|
|
112
|
+
}
|
|
113
|
+
function computeSignature(secret, timestamp, body) {
|
|
114
|
+
return createHmac("sha256", secret)
|
|
115
|
+
.update(`${timestamp}.`)
|
|
116
|
+
.update(body)
|
|
117
|
+
.digest("hex");
|
|
118
|
+
}
|
|
119
|
+
function computeSignatureV2(secret, id, timestamp, body) {
|
|
120
|
+
return createHmac("sha256", secret)
|
|
121
|
+
.update(`${id}.${timestamp}.`)
|
|
122
|
+
.update(body)
|
|
123
|
+
.digest("hex");
|
|
124
|
+
}
|
|
125
|
+
function signatureMatches(headerValue, version, expectedHex) {
|
|
126
|
+
const expected = Buffer.from(expectedHex, "hex");
|
|
127
|
+
return headerValue
|
|
128
|
+
.split(/[\s,]+/)
|
|
129
|
+
.filter((entry) => entry.startsWith(`${version}=`))
|
|
130
|
+
.map((entry) => entry.slice(version.length + 1))
|
|
131
|
+
.filter((hex) => /^[0-9a-f]{64}$/i.test(hex))
|
|
132
|
+
.some((hex) => timingSafeEqual(Buffer.from(hex, "hex"), expected));
|
|
133
|
+
}
|
|
134
|
+
function rawBytes(payload) {
|
|
135
|
+
if (typeof payload === "string")
|
|
136
|
+
return Buffer.from(payload, "utf8");
|
|
137
|
+
if (payload instanceof Uint8Array) {
|
|
138
|
+
return Buffer.from(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
139
|
+
}
|
|
140
|
+
throw new TypeError("webhooks: `payload` must be the raw request body as a string or Buffer, not a parsed object.");
|
|
141
|
+
}
|
|
142
|
+
function readHeader(headers, name) {
|
|
143
|
+
if (headers instanceof Headers)
|
|
144
|
+
return headers.get(name) ?? undefined;
|
|
145
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
146
|
+
if (key.toLowerCase() !== name)
|
|
147
|
+
continue;
|
|
148
|
+
const first = Array.isArray(value) ? value[0] : value;
|
|
149
|
+
return first || undefined;
|
|
150
|
+
}
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@izapai/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "TypeScript SDK for the iZap REST API: WhatsApp business messaging, templates, chats and webhooks.",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"license": "MIT",
|
|
6
|
-
"
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/versariai/izap-sdk-typescript.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://devs.izap.ai",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/versariai/izap-sdk-typescript/issues",
|
|
14
|
+
"email": "support@izap.ai"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"izap",
|
|
18
|
+
"whatsapp",
|
|
19
|
+
"sdk",
|
|
20
|
+
"api",
|
|
21
|
+
"webhooks"
|
|
22
|
+
],
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./package.json": "./package.json"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist/",
|
|
34
|
+
"README.md",
|
|
35
|
+
"LICENSE"
|
|
36
|
+
],
|
|
37
|
+
"sideEffects": false,
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=20"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"generate": "openapi-ts",
|
|
43
|
+
"sync:schema": "node scripts/sync-schema.mjs",
|
|
44
|
+
"check:generated": "node scripts/check-generated.mjs",
|
|
45
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
46
|
+
"test": "npm run typecheck && vitest run",
|
|
47
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
48
|
+
"format": "prettier --write .",
|
|
49
|
+
"format:check": "prettier --check .",
|
|
50
|
+
"prepublishOnly": "npm test && npm run build"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@hey-api/openapi-ts": "0.99.0",
|
|
54
|
+
"@types/node": "20.19.43",
|
|
55
|
+
"prettier": "3.9.6",
|
|
56
|
+
"typescript": "5.9.3",
|
|
57
|
+
"vitest": "4.1.11"
|
|
58
|
+
},
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public"
|
|
61
|
+
}
|
|
7
62
|
}
|