retell-sdk 5.0.0 → 5.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.
- package/CHANGELOG.md +16 -0
- package/client.d.mts +2 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +2 -0
- package/client.d.ts.map +1 -1
- package/client.js +3 -0
- package/client.js.map +1 -1
- package/client.mjs +3 -0
- package/client.mjs.map +1 -1
- package/index.d.mts +1 -0
- package/index.d.mts.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +4 -1
- package/index.js.map +1 -1
- package/index.mjs +1 -0
- package/index.mjs.map +1 -1
- package/lib/webhook_auth.d.mts +11 -0
- package/lib/webhook_auth.d.mts.map +1 -0
- package/lib/webhook_auth.d.ts +11 -0
- package/lib/webhook_auth.d.ts.map +1 -0
- package/lib/webhook_auth.js +48 -0
- package/lib/webhook_auth.js.map +1 -0
- package/lib/webhook_auth.mjs +43 -0
- package/lib/webhook_auth.mjs.map +1 -0
- package/package.json +11 -1
- package/resources/call.d.mts +3 -3
- package/resources/call.d.mts.map +1 -1
- package/resources/call.d.ts +3 -3
- package/resources/call.d.ts.map +1 -1
- package/src/client.ts +4 -0
- package/src/index.ts +1 -0
- package/src/lib/webhook_auth.ts +76 -0
- package/src/resources/call.ts +3 -0
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const FIVE_MINUTES = 5 * 60 * 1000;
|
|
2
|
+
|
|
3
|
+
async function hmacSha256Hex(secret: string, input: string): Promise<string> {
|
|
4
|
+
const enc = new TextEncoder();
|
|
5
|
+
const key = await globalThis.crypto.subtle.importKey(
|
|
6
|
+
'raw',
|
|
7
|
+
enc.encode(secret),
|
|
8
|
+
{ name: 'HMAC', hash: 'SHA-256' },
|
|
9
|
+
false,
|
|
10
|
+
['sign'],
|
|
11
|
+
);
|
|
12
|
+
const sig = await globalThis.crypto.subtle.sign('HMAC', key, enc.encode(input));
|
|
13
|
+
return Array.from(new Uint8Array(sig))
|
|
14
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
15
|
+
.join('');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function hmacSha256Verify(secret: string, input: string, digest: string): Promise<boolean> {
|
|
19
|
+
const enc = new TextEncoder();
|
|
20
|
+
const key = await globalThis.crypto.subtle.importKey(
|
|
21
|
+
'raw',
|
|
22
|
+
enc.encode(secret),
|
|
23
|
+
{ name: 'HMAC', hash: 'SHA-256' },
|
|
24
|
+
false,
|
|
25
|
+
['verify'],
|
|
26
|
+
);
|
|
27
|
+
const digestBytes = new Uint8Array(digest.length / 2);
|
|
28
|
+
for (let i = 0; i < digest.length; i += 2) {
|
|
29
|
+
digestBytes[i / 2] = parseInt(digest.slice(i, i + 2), 16);
|
|
30
|
+
}
|
|
31
|
+
return globalThis.crypto.subtle.verify('HMAC', key, digestBytes, enc.encode(input));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface SecureWebhooks {
|
|
35
|
+
sign(input: string, secret: string, timestamp?: number): Promise<string>;
|
|
36
|
+
verify(
|
|
37
|
+
input: string,
|
|
38
|
+
secret: string,
|
|
39
|
+
signature: string,
|
|
40
|
+
opts?: { timeout?: number; timestamp?: number },
|
|
41
|
+
): Promise<boolean>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const symmetric: SecureWebhooks = {
|
|
45
|
+
async sign(input: string, secret: string, timestamp: number = Date.now()): Promise<string> {
|
|
46
|
+
const digest = await hmacSha256Hex(secret, input + timestamp);
|
|
47
|
+
return `v=${timestamp},d=${digest}`;
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
async verify(
|
|
51
|
+
input: string,
|
|
52
|
+
secret: string,
|
|
53
|
+
signature: string,
|
|
54
|
+
opts: { timeout?: number; timestamp?: number } = {},
|
|
55
|
+
): Promise<boolean> {
|
|
56
|
+
const match = /v=(\d+),d=(.*)/.exec(signature);
|
|
57
|
+
if (!match) return false;
|
|
58
|
+
|
|
59
|
+
const poststamp = Number(match[1]);
|
|
60
|
+
const postDigest = match[2]!;
|
|
61
|
+
const timestamp = opts.timestamp ?? Date.now();
|
|
62
|
+
const timeout = opts.timeout ?? FIVE_MINUTES;
|
|
63
|
+
|
|
64
|
+
if (Math.abs(timestamp - poststamp) > timeout) return false;
|
|
65
|
+
|
|
66
|
+
return hmacSha256Verify(secret, input + poststamp, postDigest);
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const verify = (body: string, apiKey: string, signature: string): Promise<boolean> => {
|
|
71
|
+
return symmetric.verify(body, apiKey, signature);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export const sign = (body: string, apiKey: string): Promise<string> => {
|
|
75
|
+
return symmetric.sign(body, apiKey);
|
|
76
|
+
};
|
package/src/resources/call.ts
CHANGED
|
@@ -223,6 +223,7 @@ export interface PhoneCallResponse {
|
|
|
223
223
|
| 'agent_hangup'
|
|
224
224
|
| 'call_transfer'
|
|
225
225
|
| 'voicemail_reached'
|
|
226
|
+
| 'ivr_reached'
|
|
226
227
|
| 'inactivity'
|
|
227
228
|
| 'max_duration_reached'
|
|
228
229
|
| 'concurrency_limit_reached'
|
|
@@ -1266,6 +1267,7 @@ export interface WebCallResponse {
|
|
|
1266
1267
|
| 'agent_hangup'
|
|
1267
1268
|
| 'call_transfer'
|
|
1268
1269
|
| 'voicemail_reached'
|
|
1270
|
+
| 'ivr_reached'
|
|
1269
1271
|
| 'inactivity'
|
|
1270
1272
|
| 'max_duration_reached'
|
|
1271
1273
|
| 'concurrency_limit_reached'
|
|
@@ -2312,6 +2314,7 @@ export namespace CallListParams {
|
|
|
2312
2314
|
| 'agent_hangup'
|
|
2313
2315
|
| 'call_transfer'
|
|
2314
2316
|
| 'voicemail_reached'
|
|
2317
|
+
| 'ivr_reached'
|
|
2315
2318
|
| 'inactivity'
|
|
2316
2319
|
| 'max_duration_reached'
|
|
2317
2320
|
| 'concurrency_limit_reached'
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '5.
|
|
1
|
+
export const VERSION = '5.2.0'; // x-release-please-version
|
package/version.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "5.
|
|
1
|
+
export declare const VERSION = "5.2.0";
|
|
2
2
|
//# sourceMappingURL=version.d.mts.map
|
package/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "5.
|
|
1
|
+
export declare const VERSION = "5.2.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/version.js
CHANGED
package/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '5.
|
|
1
|
+
export const VERSION = '5.2.0'; // x-release-please-version
|
|
2
2
|
//# sourceMappingURL=version.mjs.map
|