@openclaw/voice-call 2026.5.2 → 2026.5.3-beta.2
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/api.js +2 -0
- package/dist/call-status-CXldV5o8.js +32 -0
- package/dist/cli-metadata.js +12 -0
- package/dist/config-7w04YpHh.js +548 -0
- package/dist/config-compat-B0me39_4.js +129 -0
- package/dist/guarded-json-api-Btx5EE4w.js +591 -0
- package/dist/http-headers-BrnxBasF.js +10 -0
- package/dist/index.js +1284 -0
- package/dist/mock-CeKvfVEd.js +135 -0
- package/dist/plivo-B-a7KFoT.js +393 -0
- package/dist/realtime-handler-B63CIDP2.js +325 -0
- package/dist/realtime-transcription.runtime-B2h70y2W.js +2 -0
- package/dist/realtime-voice.runtime-Bkh4nvLn.js +2 -0
- package/dist/response-generator-BrcmwDZU.js +182 -0
- package/dist/response-model-CyF5K80p.js +12 -0
- package/dist/runtime-api.js +6 -0
- package/dist/runtime-entry-88ytYAQa.js +3119 -0
- package/dist/runtime-entry.js +2 -0
- package/dist/setup-api.js +37 -0
- package/dist/telnyx-jjBE8boz.js +260 -0
- package/dist/twilio-1OqbcXLL.js +676 -0
- package/dist/voice-mapping-BYDGdWGx.js +40 -0
- package/package.json +14 -6
- package/api.ts +0 -16
- package/cli-metadata.ts +0 -10
- package/config-api.ts +0 -12
- package/index.test.ts +0 -943
- package/index.ts +0 -794
- package/runtime-api.ts +0 -20
- package/runtime-entry.ts +0 -1
- package/setup-api.ts +0 -47
- package/src/allowlist.test.ts +0 -18
- package/src/allowlist.ts +0 -19
- package/src/cli.ts +0 -845
- package/src/config-compat.test.ts +0 -120
- package/src/config-compat.ts +0 -227
- package/src/config.test.ts +0 -479
- package/src/config.ts +0 -808
- package/src/core-bridge.ts +0 -14
- package/src/deep-merge.test.ts +0 -40
- package/src/deep-merge.ts +0 -23
- package/src/gateway-continue-operation.ts +0 -200
- package/src/http-headers.test.ts +0 -16
- package/src/http-headers.ts +0 -15
- package/src/manager/context.ts +0 -42
- package/src/manager/events.test.ts +0 -581
- package/src/manager/events.ts +0 -288
- package/src/manager/lifecycle.ts +0 -53
- package/src/manager/lookup.test.ts +0 -52
- package/src/manager/lookup.ts +0 -35
- package/src/manager/outbound.test.ts +0 -528
- package/src/manager/outbound.ts +0 -486
- package/src/manager/state.ts +0 -48
- package/src/manager/store.ts +0 -106
- package/src/manager/timers.test.ts +0 -129
- package/src/manager/timers.ts +0 -113
- package/src/manager/twiml.test.ts +0 -13
- package/src/manager/twiml.ts +0 -17
- package/src/manager.closed-loop.test.ts +0 -236
- package/src/manager.inbound-allowlist.test.ts +0 -188
- package/src/manager.notify.test.ts +0 -377
- package/src/manager.restore.test.ts +0 -183
- package/src/manager.test-harness.ts +0 -127
- package/src/manager.ts +0 -392
- package/src/media-stream.test.ts +0 -768
- package/src/media-stream.ts +0 -708
- package/src/providers/base.ts +0 -97
- package/src/providers/mock.test.ts +0 -78
- package/src/providers/mock.ts +0 -185
- package/src/providers/plivo.test.ts +0 -93
- package/src/providers/plivo.ts +0 -601
- package/src/providers/shared/call-status.test.ts +0 -24
- package/src/providers/shared/call-status.ts +0 -24
- package/src/providers/shared/guarded-json-api.test.ts +0 -106
- package/src/providers/shared/guarded-json-api.ts +0 -42
- package/src/providers/telnyx.test.ts +0 -340
- package/src/providers/telnyx.ts +0 -394
- package/src/providers/twilio/api.test.ts +0 -145
- package/src/providers/twilio/api.ts +0 -93
- package/src/providers/twilio/twiml-policy.test.ts +0 -84
- package/src/providers/twilio/twiml-policy.ts +0 -87
- package/src/providers/twilio/webhook.ts +0 -34
- package/src/providers/twilio.test.ts +0 -591
- package/src/providers/twilio.ts +0 -861
- package/src/providers/twilio.types.ts +0 -17
- package/src/realtime-defaults.ts +0 -3
- package/src/realtime-fast-context.test.ts +0 -88
- package/src/realtime-fast-context.ts +0 -165
- package/src/realtime-transcription.runtime.ts +0 -4
- package/src/realtime-voice.runtime.ts +0 -5
- package/src/response-generator.test.ts +0 -321
- package/src/response-generator.ts +0 -318
- package/src/response-model.test.ts +0 -71
- package/src/response-model.ts +0 -23
- package/src/runtime.test.ts +0 -536
- package/src/runtime.ts +0 -510
- package/src/telephony-audio.test.ts +0 -61
- package/src/telephony-audio.ts +0 -12
- package/src/telephony-tts.test.ts +0 -196
- package/src/telephony-tts.ts +0 -235
- package/src/test-fixtures.ts +0 -73
- package/src/tts-provider-voice.test.ts +0 -34
- package/src/tts-provider-voice.ts +0 -21
- package/src/tunnel.test.ts +0 -166
- package/src/tunnel.ts +0 -314
- package/src/types.ts +0 -291
- package/src/utils.test.ts +0 -17
- package/src/utils.ts +0 -14
- package/src/voice-mapping.test.ts +0 -34
- package/src/voice-mapping.ts +0 -68
- package/src/webhook/realtime-handler.test.ts +0 -598
- package/src/webhook/realtime-handler.ts +0 -485
- package/src/webhook/stale-call-reaper.test.ts +0 -88
- package/src/webhook/stale-call-reaper.ts +0 -38
- package/src/webhook/tailscale.test.ts +0 -214
- package/src/webhook/tailscale.ts +0 -129
- package/src/webhook-exposure.test.ts +0 -33
- package/src/webhook-exposure.ts +0 -84
- package/src/webhook-security.test.ts +0 -770
- package/src/webhook-security.ts +0 -994
- package/src/webhook.hangup-once.lifecycle.test.ts +0 -135
- package/src/webhook.test.ts +0 -1470
- package/src/webhook.ts +0 -908
- package/src/webhook.types.ts +0 -5
- package/src/websocket-test-support.ts +0 -72
- package/tsconfig.json +0 -16
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
|
|
2
|
-
import type { WebhookContext } from "../../types.js";
|
|
3
|
-
|
|
4
|
-
type TwimlRequestView = {
|
|
5
|
-
callStatus: string | null;
|
|
6
|
-
direction: string | null;
|
|
7
|
-
isStatusCallback: boolean;
|
|
8
|
-
callSid?: string;
|
|
9
|
-
callIdFromQuery?: string;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
type TwimlPolicyInput = TwimlRequestView & {
|
|
13
|
-
hasStoredTwiml: boolean;
|
|
14
|
-
isNotifyCall: boolean;
|
|
15
|
-
hasActiveStreams: boolean;
|
|
16
|
-
canStream: boolean;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
type TwimlDecision =
|
|
20
|
-
| {
|
|
21
|
-
kind: "empty" | "pause" | "queue";
|
|
22
|
-
consumeStoredTwimlCallId?: string;
|
|
23
|
-
activateStreamCallSid?: string;
|
|
24
|
-
}
|
|
25
|
-
| {
|
|
26
|
-
kind: "stored";
|
|
27
|
-
consumeStoredTwimlCallId: string;
|
|
28
|
-
activateStreamCallSid?: string;
|
|
29
|
-
}
|
|
30
|
-
| {
|
|
31
|
-
kind: "stream";
|
|
32
|
-
consumeStoredTwimlCallId?: string;
|
|
33
|
-
activateStreamCallSid?: string;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
function isOutboundDirection(direction: string | null): boolean {
|
|
37
|
-
return direction?.startsWith("outbound") ?? false;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function readTwimlRequestView(ctx: WebhookContext): TwimlRequestView {
|
|
41
|
-
const params = new URLSearchParams(ctx.rawBody);
|
|
42
|
-
const type = normalizeOptionalString(ctx.query?.type);
|
|
43
|
-
const callIdFromQuery = normalizeOptionalString(ctx.query?.callId);
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
callStatus: params.get("CallStatus"),
|
|
47
|
-
direction: params.get("Direction"),
|
|
48
|
-
isStatusCallback: type === "status",
|
|
49
|
-
callSid: params.get("CallSid") || undefined,
|
|
50
|
-
callIdFromQuery,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function decideTwimlResponse(input: TwimlPolicyInput): TwimlDecision {
|
|
55
|
-
if (input.callIdFromQuery && !input.isStatusCallback) {
|
|
56
|
-
if (input.hasStoredTwiml) {
|
|
57
|
-
return { kind: "stored", consumeStoredTwimlCallId: input.callIdFromQuery };
|
|
58
|
-
}
|
|
59
|
-
if (input.isNotifyCall) {
|
|
60
|
-
return { kind: "empty" };
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (isOutboundDirection(input.direction)) {
|
|
64
|
-
return input.canStream ? { kind: "stream" } : { kind: "pause" };
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (input.isStatusCallback) {
|
|
69
|
-
return { kind: "empty" };
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (input.direction === "inbound") {
|
|
73
|
-
if (input.hasActiveStreams) {
|
|
74
|
-
return { kind: "queue" };
|
|
75
|
-
}
|
|
76
|
-
if (input.canStream && input.callSid) {
|
|
77
|
-
return { kind: "stream", activateStreamCallSid: input.callSid };
|
|
78
|
-
}
|
|
79
|
-
return { kind: "pause" };
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (input.callStatus !== "in-progress") {
|
|
83
|
-
return { kind: "empty" };
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return input.canStream ? { kind: "stream" } : { kind: "pause" };
|
|
87
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { WebhookContext, WebhookVerificationResult } from "../../types.js";
|
|
2
|
-
import { verifyTwilioWebhook } from "../../webhook-security.js";
|
|
3
|
-
import type { TwilioProviderOptions } from "../twilio.types.js";
|
|
4
|
-
|
|
5
|
-
export function verifyTwilioProviderWebhook(params: {
|
|
6
|
-
ctx: WebhookContext;
|
|
7
|
-
authToken: string;
|
|
8
|
-
currentPublicUrl?: string | null;
|
|
9
|
-
options: TwilioProviderOptions;
|
|
10
|
-
}): WebhookVerificationResult {
|
|
11
|
-
const result = verifyTwilioWebhook(params.ctx, params.authToken, {
|
|
12
|
-
publicUrl: params.currentPublicUrl || undefined,
|
|
13
|
-
allowNgrokFreeTierLoopbackBypass: params.options.allowNgrokFreeTierLoopbackBypass ?? false,
|
|
14
|
-
skipVerification: params.options.skipVerification,
|
|
15
|
-
allowedHosts: params.options.webhookSecurity?.allowedHosts,
|
|
16
|
-
trustForwardingHeaders: params.options.webhookSecurity?.trustForwardingHeaders,
|
|
17
|
-
trustedProxyIPs: params.options.webhookSecurity?.trustedProxyIPs,
|
|
18
|
-
remoteIP: params.ctx.remoteAddress,
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
if (!result.ok) {
|
|
22
|
-
console.warn(`[twilio] Webhook verification failed: ${result.reason}`);
|
|
23
|
-
if (result.verificationUrl) {
|
|
24
|
-
console.warn(`[twilio] Verification URL: ${result.verificationUrl}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
ok: result.ok,
|
|
30
|
-
reason: result.reason,
|
|
31
|
-
isReplay: result.isReplay,
|
|
32
|
-
verifiedRequestKey: result.verifiedRequestKey,
|
|
33
|
-
};
|
|
34
|
-
}
|