voice-router-dev 0.8.9 → 0.9.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 +67 -0
- package/dist/constants.d.mts +22 -20
- package/dist/constants.d.ts +22 -20
- package/dist/constants.js +24 -24
- package/dist/constants.mjs +24 -24
- package/dist/{field-configs-CSOt3yc9.d.mts → field-configs-DYiUtRUz.d.mts} +50 -505
- package/dist/{field-configs-CSOt3yc9.d.ts → field-configs-DYiUtRUz.d.ts} +50 -505
- package/dist/field-configs.d.mts +1 -1
- package/dist/field-configs.d.ts +1 -1
- package/dist/field-configs.js +118 -196
- package/dist/field-configs.mjs +118 -196
- package/dist/index.d.mts +1655 -1754
- package/dist/index.d.ts +1655 -1754
- package/dist/index.js +257 -296
- package/dist/index.mjs +257 -296
- package/dist/{speechToTextChunkResponseModel-B4kVoFc3.d.ts → speechToTextChunkResponseModel-CI-Aqxcr.d.ts} +2015 -1846
- package/dist/{speechToTextChunkResponseModel-DmajV4F-.d.mts → speechToTextChunkResponseModel-D8VJ-wz6.d.mts} +2015 -1846
- package/dist/webhooks.d.mts +70 -2
- package/dist/webhooks.d.ts +70 -2
- package/dist/webhooks.js +113 -1
- package/dist/webhooks.mjs +111 -1
- package/package.json +1 -1
package/dist/webhooks.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { h2 as TranscriptionStatus, g$ as Speaker, h0 as Word, h1 as Utterance, V as CallbackTranscriptionSuccessPayload, K as CallbackTranscriptionErrorPayload, bt as Transcript, dw as ListenV1Response, eY as RetrieveTranscriptResponse, fL as SpeechToTextChunkResponseModel, fy as Transcription } from './speechToTextChunkResponseModel-D8VJ-wz6.mjs';
|
|
2
2
|
import { T as TranscriptionProvider } from './provider-metadata-BJ29OPW1.mjs';
|
|
3
3
|
import './constants.mjs';
|
|
4
4
|
|
|
@@ -258,6 +258,7 @@ type ProviderWebhookPayloadMap = {
|
|
|
258
258
|
"openai-whisper": never;
|
|
259
259
|
speechmatics: RetrieveTranscriptResponse;
|
|
260
260
|
elevenlabs: SpeechToTextChunkResponseModel;
|
|
261
|
+
soniox: Transcription;
|
|
261
262
|
};
|
|
262
263
|
/**
|
|
263
264
|
* Unified webhook event types
|
|
@@ -779,6 +780,73 @@ declare class ElevenLabsWebhookHandler extends BaseWebhookHandler {
|
|
|
779
780
|
*/
|
|
780
781
|
declare function createElevenLabsWebhookHandler(): ElevenLabsWebhookHandler;
|
|
781
782
|
|
|
783
|
+
/**
|
|
784
|
+
* Soniox webhook handler
|
|
785
|
+
* Parses and normalizes Soniox webhook callbacks
|
|
786
|
+
*
|
|
787
|
+
* Soniox webhooks are notification-only: payload is `{ id, status }`.
|
|
788
|
+
* The consumer must call `getTranscript(id)` to fetch the full transcript.
|
|
789
|
+
*
|
|
790
|
+
* @see https://soniox.com/docs/stt/async/webhooks
|
|
791
|
+
*/
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Soniox webhook handler
|
|
795
|
+
*
|
|
796
|
+
* Handles webhook callbacks from Soniox async transcription API.
|
|
797
|
+
* Soniox sends minimal notification payloads with `{ id, status }`.
|
|
798
|
+
* No transcript data is included — use `getTranscript(id)` to fetch results.
|
|
799
|
+
*
|
|
800
|
+
* @example
|
|
801
|
+
* ```typescript
|
|
802
|
+
* import { SonioxWebhookHandler } from '@meeting-baas/sdk/webhooks';
|
|
803
|
+
*
|
|
804
|
+
* const handler = new SonioxWebhookHandler();
|
|
805
|
+
*
|
|
806
|
+
* const event = handler.parse(req.body);
|
|
807
|
+
* if (event.eventType === 'transcription.completed') {
|
|
808
|
+
* // Fetch transcript via adapter
|
|
809
|
+
* const result = await sonioxAdapter.getTranscript(event.data.id);
|
|
810
|
+
* }
|
|
811
|
+
* ```
|
|
812
|
+
*/
|
|
813
|
+
declare class SonioxWebhookHandler extends BaseWebhookHandler {
|
|
814
|
+
readonly provider: TranscriptionProvider;
|
|
815
|
+
/**
|
|
816
|
+
* Check if payload matches Soniox webhook format
|
|
817
|
+
*
|
|
818
|
+
* Soniox webhooks have a minimal `{ id, status }` shape.
|
|
819
|
+
* Excludes false positives by checking the payload does NOT have
|
|
820
|
+
* fields unique to other providers.
|
|
821
|
+
*/
|
|
822
|
+
matches(payload: unknown, _options?: {
|
|
823
|
+
queryParams?: Record<string, string>;
|
|
824
|
+
userAgent?: string;
|
|
825
|
+
}): boolean;
|
|
826
|
+
/**
|
|
827
|
+
* Parse Soniox webhook payload to unified format
|
|
828
|
+
*
|
|
829
|
+
* Returns notification-only data (id + status). No transcript text
|
|
830
|
+
* is included — Soniox webhooks are notification-only.
|
|
831
|
+
*/
|
|
832
|
+
parse(payload: unknown, _options?: {
|
|
833
|
+
queryParams?: Record<string, string>;
|
|
834
|
+
}): UnifiedWebhookEvent;
|
|
835
|
+
/**
|
|
836
|
+
* Verify Soniox webhook signature
|
|
837
|
+
*
|
|
838
|
+
* Soniox uses custom auth headers on webhook delivery rather than
|
|
839
|
+
* HMAC signature verification. No server-side verification is available.
|
|
840
|
+
*
|
|
841
|
+
* @returns Always returns true
|
|
842
|
+
*/
|
|
843
|
+
verify(): boolean;
|
|
844
|
+
}
|
|
845
|
+
/**
|
|
846
|
+
* Factory function to create a Soniox webhook handler
|
|
847
|
+
*/
|
|
848
|
+
declare function createSonioxWebhookHandler(): SonioxWebhookHandler;
|
|
849
|
+
|
|
782
850
|
/**
|
|
783
851
|
* Webhook router with automatic provider detection
|
|
784
852
|
* Routes webhook payloads to the correct provider handler
|
|
@@ -982,4 +1050,4 @@ declare class WebhookRouter {
|
|
|
982
1050
|
*/
|
|
983
1051
|
declare function createWebhookRouter(): WebhookRouter;
|
|
984
1052
|
|
|
985
|
-
export { AssemblyAIWebhookHandler, type AssemblyAIWebhookPayload, AzureWebhookHandler, BaseWebhookHandler, DeepgramWebhookHandler, ListenV1Response as DeepgramWebhookPayload, ElevenLabsWebhookHandler, CallbackTranscriptionErrorPayload as GladiaWebhookErrorPayload, GladiaWebhookHandler, type GladiaWebhookPayload, CallbackTranscriptionSuccessPayload as GladiaWebhookSuccessPayload, type ProviderWebhookPayloadMap, SpeechmaticsWebhookHandler, type UnifiedWebhookEvent, type WebhookEventType, WebhookRouter, type WebhookRouterOptions, type WebhookRouterResult, type WebhookValidation, type WebhookVerificationOptions, createAssemblyAIWebhookHandler, createAzureWebhookHandler, createDeepgramWebhookHandler, createElevenLabsWebhookHandler, createGladiaWebhookHandler, createWebhookRouter };
|
|
1053
|
+
export { AssemblyAIWebhookHandler, type AssemblyAIWebhookPayload, AzureWebhookHandler, type AzureWebhookPayload, BaseWebhookHandler, DeepgramWebhookHandler, ListenV1Response as DeepgramWebhookPayload, ElevenLabsWebhookHandler, SpeechToTextChunkResponseModel as ElevenLabsWebhookPayload, CallbackTranscriptionErrorPayload as GladiaWebhookErrorPayload, GladiaWebhookHandler, type GladiaWebhookPayload, CallbackTranscriptionSuccessPayload as GladiaWebhookSuccessPayload, type ProviderWebhookPayloadMap, SonioxWebhookHandler, Transcription as SonioxWebhookPayload, SpeechmaticsWebhookHandler, RetrieveTranscriptResponse as SpeechmaticsWebhookPayload, type UnifiedWebhookEvent, type WebhookEventType, WebhookRouter, type WebhookRouterOptions, type WebhookRouterResult, type WebhookValidation, type WebhookVerificationOptions, createAssemblyAIWebhookHandler, createAzureWebhookHandler, createDeepgramWebhookHandler, createElevenLabsWebhookHandler, createGladiaWebhookHandler, createSonioxWebhookHandler, createWebhookRouter };
|
package/dist/webhooks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { h2 as TranscriptionStatus, g$ as Speaker, h0 as Word, h1 as Utterance, V as CallbackTranscriptionSuccessPayload, K as CallbackTranscriptionErrorPayload, bt as Transcript, dw as ListenV1Response, eY as RetrieveTranscriptResponse, fL as SpeechToTextChunkResponseModel, fy as Transcription } from './speechToTextChunkResponseModel-CI-Aqxcr.js';
|
|
2
2
|
import { T as TranscriptionProvider } from './provider-metadata-D1d-9cng.js';
|
|
3
3
|
import './constants.js';
|
|
4
4
|
|
|
@@ -258,6 +258,7 @@ type ProviderWebhookPayloadMap = {
|
|
|
258
258
|
"openai-whisper": never;
|
|
259
259
|
speechmatics: RetrieveTranscriptResponse;
|
|
260
260
|
elevenlabs: SpeechToTextChunkResponseModel;
|
|
261
|
+
soniox: Transcription;
|
|
261
262
|
};
|
|
262
263
|
/**
|
|
263
264
|
* Unified webhook event types
|
|
@@ -779,6 +780,73 @@ declare class ElevenLabsWebhookHandler extends BaseWebhookHandler {
|
|
|
779
780
|
*/
|
|
780
781
|
declare function createElevenLabsWebhookHandler(): ElevenLabsWebhookHandler;
|
|
781
782
|
|
|
783
|
+
/**
|
|
784
|
+
* Soniox webhook handler
|
|
785
|
+
* Parses and normalizes Soniox webhook callbacks
|
|
786
|
+
*
|
|
787
|
+
* Soniox webhooks are notification-only: payload is `{ id, status }`.
|
|
788
|
+
* The consumer must call `getTranscript(id)` to fetch the full transcript.
|
|
789
|
+
*
|
|
790
|
+
* @see https://soniox.com/docs/stt/async/webhooks
|
|
791
|
+
*/
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Soniox webhook handler
|
|
795
|
+
*
|
|
796
|
+
* Handles webhook callbacks from Soniox async transcription API.
|
|
797
|
+
* Soniox sends minimal notification payloads with `{ id, status }`.
|
|
798
|
+
* No transcript data is included — use `getTranscript(id)` to fetch results.
|
|
799
|
+
*
|
|
800
|
+
* @example
|
|
801
|
+
* ```typescript
|
|
802
|
+
* import { SonioxWebhookHandler } from '@meeting-baas/sdk/webhooks';
|
|
803
|
+
*
|
|
804
|
+
* const handler = new SonioxWebhookHandler();
|
|
805
|
+
*
|
|
806
|
+
* const event = handler.parse(req.body);
|
|
807
|
+
* if (event.eventType === 'transcription.completed') {
|
|
808
|
+
* // Fetch transcript via adapter
|
|
809
|
+
* const result = await sonioxAdapter.getTranscript(event.data.id);
|
|
810
|
+
* }
|
|
811
|
+
* ```
|
|
812
|
+
*/
|
|
813
|
+
declare class SonioxWebhookHandler extends BaseWebhookHandler {
|
|
814
|
+
readonly provider: TranscriptionProvider;
|
|
815
|
+
/**
|
|
816
|
+
* Check if payload matches Soniox webhook format
|
|
817
|
+
*
|
|
818
|
+
* Soniox webhooks have a minimal `{ id, status }` shape.
|
|
819
|
+
* Excludes false positives by checking the payload does NOT have
|
|
820
|
+
* fields unique to other providers.
|
|
821
|
+
*/
|
|
822
|
+
matches(payload: unknown, _options?: {
|
|
823
|
+
queryParams?: Record<string, string>;
|
|
824
|
+
userAgent?: string;
|
|
825
|
+
}): boolean;
|
|
826
|
+
/**
|
|
827
|
+
* Parse Soniox webhook payload to unified format
|
|
828
|
+
*
|
|
829
|
+
* Returns notification-only data (id + status). No transcript text
|
|
830
|
+
* is included — Soniox webhooks are notification-only.
|
|
831
|
+
*/
|
|
832
|
+
parse(payload: unknown, _options?: {
|
|
833
|
+
queryParams?: Record<string, string>;
|
|
834
|
+
}): UnifiedWebhookEvent;
|
|
835
|
+
/**
|
|
836
|
+
* Verify Soniox webhook signature
|
|
837
|
+
*
|
|
838
|
+
* Soniox uses custom auth headers on webhook delivery rather than
|
|
839
|
+
* HMAC signature verification. No server-side verification is available.
|
|
840
|
+
*
|
|
841
|
+
* @returns Always returns true
|
|
842
|
+
*/
|
|
843
|
+
verify(): boolean;
|
|
844
|
+
}
|
|
845
|
+
/**
|
|
846
|
+
* Factory function to create a Soniox webhook handler
|
|
847
|
+
*/
|
|
848
|
+
declare function createSonioxWebhookHandler(): SonioxWebhookHandler;
|
|
849
|
+
|
|
782
850
|
/**
|
|
783
851
|
* Webhook router with automatic provider detection
|
|
784
852
|
* Routes webhook payloads to the correct provider handler
|
|
@@ -982,4 +1050,4 @@ declare class WebhookRouter {
|
|
|
982
1050
|
*/
|
|
983
1051
|
declare function createWebhookRouter(): WebhookRouter;
|
|
984
1052
|
|
|
985
|
-
export { AssemblyAIWebhookHandler, type AssemblyAIWebhookPayload, AzureWebhookHandler, BaseWebhookHandler, DeepgramWebhookHandler, ListenV1Response as DeepgramWebhookPayload, ElevenLabsWebhookHandler, CallbackTranscriptionErrorPayload as GladiaWebhookErrorPayload, GladiaWebhookHandler, type GladiaWebhookPayload, CallbackTranscriptionSuccessPayload as GladiaWebhookSuccessPayload, type ProviderWebhookPayloadMap, SpeechmaticsWebhookHandler, type UnifiedWebhookEvent, type WebhookEventType, WebhookRouter, type WebhookRouterOptions, type WebhookRouterResult, type WebhookValidation, type WebhookVerificationOptions, createAssemblyAIWebhookHandler, createAzureWebhookHandler, createDeepgramWebhookHandler, createElevenLabsWebhookHandler, createGladiaWebhookHandler, createWebhookRouter };
|
|
1053
|
+
export { AssemblyAIWebhookHandler, type AssemblyAIWebhookPayload, AzureWebhookHandler, type AzureWebhookPayload, BaseWebhookHandler, DeepgramWebhookHandler, ListenV1Response as DeepgramWebhookPayload, ElevenLabsWebhookHandler, SpeechToTextChunkResponseModel as ElevenLabsWebhookPayload, CallbackTranscriptionErrorPayload as GladiaWebhookErrorPayload, GladiaWebhookHandler, type GladiaWebhookPayload, CallbackTranscriptionSuccessPayload as GladiaWebhookSuccessPayload, type ProviderWebhookPayloadMap, SonioxWebhookHandler, Transcription as SonioxWebhookPayload, SpeechmaticsWebhookHandler, RetrieveTranscriptResponse as SpeechmaticsWebhookPayload, type UnifiedWebhookEvent, type WebhookEventType, WebhookRouter, type WebhookRouterOptions, type WebhookRouterResult, type WebhookValidation, type WebhookVerificationOptions, createAssemblyAIWebhookHandler, createAzureWebhookHandler, createDeepgramWebhookHandler, createElevenLabsWebhookHandler, createGladiaWebhookHandler, createSonioxWebhookHandler, createWebhookRouter };
|
package/dist/webhooks.js
CHANGED
|
@@ -37,6 +37,7 @@ __export(webhooks_exports, {
|
|
|
37
37
|
DeepgramWebhookHandler: () => DeepgramWebhookHandler,
|
|
38
38
|
ElevenLabsWebhookHandler: () => ElevenLabsWebhookHandler,
|
|
39
39
|
GladiaWebhookHandler: () => GladiaWebhookHandler,
|
|
40
|
+
SonioxWebhookHandler: () => SonioxWebhookHandler,
|
|
40
41
|
SpeechmaticsWebhookHandler: () => SpeechmaticsWebhookHandler,
|
|
41
42
|
WebhookRouter: () => WebhookRouter,
|
|
42
43
|
createAssemblyAIWebhookHandler: () => createAssemblyAIWebhookHandler,
|
|
@@ -44,6 +45,7 @@ __export(webhooks_exports, {
|
|
|
44
45
|
createDeepgramWebhookHandler: () => createDeepgramWebhookHandler,
|
|
45
46
|
createElevenLabsWebhookHandler: () => createElevenLabsWebhookHandler,
|
|
46
47
|
createGladiaWebhookHandler: () => createGladiaWebhookHandler,
|
|
48
|
+
createSonioxWebhookHandler: () => createSonioxWebhookHandler,
|
|
47
49
|
createWebhookRouter: () => createWebhookRouter
|
|
48
50
|
});
|
|
49
51
|
module.exports = __toCommonJS(webhooks_exports);
|
|
@@ -1108,6 +1110,113 @@ function createElevenLabsWebhookHandler() {
|
|
|
1108
1110
|
return new ElevenLabsWebhookHandler();
|
|
1109
1111
|
}
|
|
1110
1112
|
|
|
1113
|
+
// src/generated/soniox/schema/transcriptionStatus.ts
|
|
1114
|
+
var TranscriptionStatus = {
|
|
1115
|
+
queued: "queued",
|
|
1116
|
+
processing: "processing",
|
|
1117
|
+
completed: "completed",
|
|
1118
|
+
error: "error"
|
|
1119
|
+
};
|
|
1120
|
+
|
|
1121
|
+
// src/webhooks/soniox-webhook.ts
|
|
1122
|
+
var SonioxWebhookHandler = class extends BaseWebhookHandler {
|
|
1123
|
+
constructor() {
|
|
1124
|
+
super(...arguments);
|
|
1125
|
+
this.provider = "soniox";
|
|
1126
|
+
}
|
|
1127
|
+
/**
|
|
1128
|
+
* Check if payload matches Soniox webhook format
|
|
1129
|
+
*
|
|
1130
|
+
* Soniox webhooks have a minimal `{ id, status }` shape.
|
|
1131
|
+
* Excludes false positives by checking the payload does NOT have
|
|
1132
|
+
* fields unique to other providers.
|
|
1133
|
+
*/
|
|
1134
|
+
matches(payload, _options) {
|
|
1135
|
+
if (!payload || typeof payload !== "object") {
|
|
1136
|
+
return false;
|
|
1137
|
+
}
|
|
1138
|
+
const obj = payload;
|
|
1139
|
+
if (typeof obj.id !== "string" || typeof obj.status !== "string") {
|
|
1140
|
+
return false;
|
|
1141
|
+
}
|
|
1142
|
+
const validStatuses = Object.values(TranscriptionStatus);
|
|
1143
|
+
if (!validStatuses.includes(obj.status)) {
|
|
1144
|
+
return false;
|
|
1145
|
+
}
|
|
1146
|
+
if ("language_code" in obj && "words" in obj) {
|
|
1147
|
+
return false;
|
|
1148
|
+
}
|
|
1149
|
+
if ("metadata" in obj) {
|
|
1150
|
+
const meta = obj.metadata;
|
|
1151
|
+
if (meta && typeof meta === "object" && "model_info" in meta) {
|
|
1152
|
+
return false;
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
if ("results" in obj && Array.isArray(obj.results)) {
|
|
1156
|
+
return false;
|
|
1157
|
+
}
|
|
1158
|
+
if ("event" in obj) {
|
|
1159
|
+
return false;
|
|
1160
|
+
}
|
|
1161
|
+
if ("transcript_id" in obj) {
|
|
1162
|
+
return false;
|
|
1163
|
+
}
|
|
1164
|
+
return true;
|
|
1165
|
+
}
|
|
1166
|
+
/**
|
|
1167
|
+
* Parse Soniox webhook payload to unified format
|
|
1168
|
+
*
|
|
1169
|
+
* Returns notification-only data (id + status). No transcript text
|
|
1170
|
+
* is included — Soniox webhooks are notification-only.
|
|
1171
|
+
*/
|
|
1172
|
+
parse(payload, _options) {
|
|
1173
|
+
if (!this.matches(payload)) {
|
|
1174
|
+
return this.createErrorEvent(payload, "Invalid Soniox webhook payload");
|
|
1175
|
+
}
|
|
1176
|
+
const data = payload;
|
|
1177
|
+
let eventType;
|
|
1178
|
+
switch (data.status) {
|
|
1179
|
+
case TranscriptionStatus.completed:
|
|
1180
|
+
eventType = "transcription.completed";
|
|
1181
|
+
break;
|
|
1182
|
+
case TranscriptionStatus.error:
|
|
1183
|
+
eventType = "transcription.failed";
|
|
1184
|
+
break;
|
|
1185
|
+
case TranscriptionStatus.processing:
|
|
1186
|
+
eventType = "transcription.processing";
|
|
1187
|
+
break;
|
|
1188
|
+
default:
|
|
1189
|
+
eventType = "transcription.created";
|
|
1190
|
+
}
|
|
1191
|
+
return {
|
|
1192
|
+
success: data.status !== TranscriptionStatus.error,
|
|
1193
|
+
provider: this.provider,
|
|
1194
|
+
eventType,
|
|
1195
|
+
data: {
|
|
1196
|
+
id: data.id,
|
|
1197
|
+
status: data.status === TranscriptionStatus.completed ? "completed" : data.status === TranscriptionStatus.error ? "error" : "processing",
|
|
1198
|
+
error: data.error_message ?? void 0
|
|
1199
|
+
},
|
|
1200
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1201
|
+
raw: payload
|
|
1202
|
+
};
|
|
1203
|
+
}
|
|
1204
|
+
/**
|
|
1205
|
+
* Verify Soniox webhook signature
|
|
1206
|
+
*
|
|
1207
|
+
* Soniox uses custom auth headers on webhook delivery rather than
|
|
1208
|
+
* HMAC signature verification. No server-side verification is available.
|
|
1209
|
+
*
|
|
1210
|
+
* @returns Always returns true
|
|
1211
|
+
*/
|
|
1212
|
+
verify() {
|
|
1213
|
+
return true;
|
|
1214
|
+
}
|
|
1215
|
+
};
|
|
1216
|
+
function createSonioxWebhookHandler() {
|
|
1217
|
+
return new SonioxWebhookHandler();
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1111
1220
|
// src/webhooks/webhook-router.ts
|
|
1112
1221
|
var WebhookRouter = class {
|
|
1113
1222
|
constructor() {
|
|
@@ -1117,7 +1226,8 @@ var WebhookRouter = class {
|
|
|
1117
1226
|
["deepgram", new DeepgramWebhookHandler()],
|
|
1118
1227
|
["azure-stt", new AzureWebhookHandler()],
|
|
1119
1228
|
["speechmatics", new SpeechmaticsWebhookHandler()],
|
|
1120
|
-
["elevenlabs", new ElevenLabsWebhookHandler()]
|
|
1229
|
+
["elevenlabs", new ElevenLabsWebhookHandler()],
|
|
1230
|
+
["soniox", new SonioxWebhookHandler()]
|
|
1121
1231
|
]);
|
|
1122
1232
|
}
|
|
1123
1233
|
/**
|
|
@@ -1299,6 +1409,7 @@ function createWebhookRouter() {
|
|
|
1299
1409
|
DeepgramWebhookHandler,
|
|
1300
1410
|
ElevenLabsWebhookHandler,
|
|
1301
1411
|
GladiaWebhookHandler,
|
|
1412
|
+
SonioxWebhookHandler,
|
|
1302
1413
|
SpeechmaticsWebhookHandler,
|
|
1303
1414
|
WebhookRouter,
|
|
1304
1415
|
createAssemblyAIWebhookHandler,
|
|
@@ -1306,6 +1417,7 @@ function createWebhookRouter() {
|
|
|
1306
1417
|
createDeepgramWebhookHandler,
|
|
1307
1418
|
createElevenLabsWebhookHandler,
|
|
1308
1419
|
createGladiaWebhookHandler,
|
|
1420
|
+
createSonioxWebhookHandler,
|
|
1309
1421
|
createWebhookRouter
|
|
1310
1422
|
});
|
|
1311
1423
|
//# sourceMappingURL=webhooks.js.map
|
package/dist/webhooks.mjs
CHANGED
|
@@ -1060,6 +1060,113 @@ function createElevenLabsWebhookHandler() {
|
|
|
1060
1060
|
return new ElevenLabsWebhookHandler();
|
|
1061
1061
|
}
|
|
1062
1062
|
|
|
1063
|
+
// src/generated/soniox/schema/transcriptionStatus.ts
|
|
1064
|
+
var TranscriptionStatus = {
|
|
1065
|
+
queued: "queued",
|
|
1066
|
+
processing: "processing",
|
|
1067
|
+
completed: "completed",
|
|
1068
|
+
error: "error"
|
|
1069
|
+
};
|
|
1070
|
+
|
|
1071
|
+
// src/webhooks/soniox-webhook.ts
|
|
1072
|
+
var SonioxWebhookHandler = class extends BaseWebhookHandler {
|
|
1073
|
+
constructor() {
|
|
1074
|
+
super(...arguments);
|
|
1075
|
+
this.provider = "soniox";
|
|
1076
|
+
}
|
|
1077
|
+
/**
|
|
1078
|
+
* Check if payload matches Soniox webhook format
|
|
1079
|
+
*
|
|
1080
|
+
* Soniox webhooks have a minimal `{ id, status }` shape.
|
|
1081
|
+
* Excludes false positives by checking the payload does NOT have
|
|
1082
|
+
* fields unique to other providers.
|
|
1083
|
+
*/
|
|
1084
|
+
matches(payload, _options) {
|
|
1085
|
+
if (!payload || typeof payload !== "object") {
|
|
1086
|
+
return false;
|
|
1087
|
+
}
|
|
1088
|
+
const obj = payload;
|
|
1089
|
+
if (typeof obj.id !== "string" || typeof obj.status !== "string") {
|
|
1090
|
+
return false;
|
|
1091
|
+
}
|
|
1092
|
+
const validStatuses = Object.values(TranscriptionStatus);
|
|
1093
|
+
if (!validStatuses.includes(obj.status)) {
|
|
1094
|
+
return false;
|
|
1095
|
+
}
|
|
1096
|
+
if ("language_code" in obj && "words" in obj) {
|
|
1097
|
+
return false;
|
|
1098
|
+
}
|
|
1099
|
+
if ("metadata" in obj) {
|
|
1100
|
+
const meta = obj.metadata;
|
|
1101
|
+
if (meta && typeof meta === "object" && "model_info" in meta) {
|
|
1102
|
+
return false;
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
if ("results" in obj && Array.isArray(obj.results)) {
|
|
1106
|
+
return false;
|
|
1107
|
+
}
|
|
1108
|
+
if ("event" in obj) {
|
|
1109
|
+
return false;
|
|
1110
|
+
}
|
|
1111
|
+
if ("transcript_id" in obj) {
|
|
1112
|
+
return false;
|
|
1113
|
+
}
|
|
1114
|
+
return true;
|
|
1115
|
+
}
|
|
1116
|
+
/**
|
|
1117
|
+
* Parse Soniox webhook payload to unified format
|
|
1118
|
+
*
|
|
1119
|
+
* Returns notification-only data (id + status). No transcript text
|
|
1120
|
+
* is included — Soniox webhooks are notification-only.
|
|
1121
|
+
*/
|
|
1122
|
+
parse(payload, _options) {
|
|
1123
|
+
if (!this.matches(payload)) {
|
|
1124
|
+
return this.createErrorEvent(payload, "Invalid Soniox webhook payload");
|
|
1125
|
+
}
|
|
1126
|
+
const data = payload;
|
|
1127
|
+
let eventType;
|
|
1128
|
+
switch (data.status) {
|
|
1129
|
+
case TranscriptionStatus.completed:
|
|
1130
|
+
eventType = "transcription.completed";
|
|
1131
|
+
break;
|
|
1132
|
+
case TranscriptionStatus.error:
|
|
1133
|
+
eventType = "transcription.failed";
|
|
1134
|
+
break;
|
|
1135
|
+
case TranscriptionStatus.processing:
|
|
1136
|
+
eventType = "transcription.processing";
|
|
1137
|
+
break;
|
|
1138
|
+
default:
|
|
1139
|
+
eventType = "transcription.created";
|
|
1140
|
+
}
|
|
1141
|
+
return {
|
|
1142
|
+
success: data.status !== TranscriptionStatus.error,
|
|
1143
|
+
provider: this.provider,
|
|
1144
|
+
eventType,
|
|
1145
|
+
data: {
|
|
1146
|
+
id: data.id,
|
|
1147
|
+
status: data.status === TranscriptionStatus.completed ? "completed" : data.status === TranscriptionStatus.error ? "error" : "processing",
|
|
1148
|
+
error: data.error_message ?? void 0
|
|
1149
|
+
},
|
|
1150
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1151
|
+
raw: payload
|
|
1152
|
+
};
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* Verify Soniox webhook signature
|
|
1156
|
+
*
|
|
1157
|
+
* Soniox uses custom auth headers on webhook delivery rather than
|
|
1158
|
+
* HMAC signature verification. No server-side verification is available.
|
|
1159
|
+
*
|
|
1160
|
+
* @returns Always returns true
|
|
1161
|
+
*/
|
|
1162
|
+
verify() {
|
|
1163
|
+
return true;
|
|
1164
|
+
}
|
|
1165
|
+
};
|
|
1166
|
+
function createSonioxWebhookHandler() {
|
|
1167
|
+
return new SonioxWebhookHandler();
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1063
1170
|
// src/webhooks/webhook-router.ts
|
|
1064
1171
|
var WebhookRouter = class {
|
|
1065
1172
|
constructor() {
|
|
@@ -1069,7 +1176,8 @@ var WebhookRouter = class {
|
|
|
1069
1176
|
["deepgram", new DeepgramWebhookHandler()],
|
|
1070
1177
|
["azure-stt", new AzureWebhookHandler()],
|
|
1071
1178
|
["speechmatics", new SpeechmaticsWebhookHandler()],
|
|
1072
|
-
["elevenlabs", new ElevenLabsWebhookHandler()]
|
|
1179
|
+
["elevenlabs", new ElevenLabsWebhookHandler()],
|
|
1180
|
+
["soniox", new SonioxWebhookHandler()]
|
|
1073
1181
|
]);
|
|
1074
1182
|
}
|
|
1075
1183
|
/**
|
|
@@ -1250,6 +1358,7 @@ export {
|
|
|
1250
1358
|
DeepgramWebhookHandler,
|
|
1251
1359
|
ElevenLabsWebhookHandler,
|
|
1252
1360
|
GladiaWebhookHandler,
|
|
1361
|
+
SonioxWebhookHandler,
|
|
1253
1362
|
SpeechmaticsWebhookHandler,
|
|
1254
1363
|
WebhookRouter,
|
|
1255
1364
|
createAssemblyAIWebhookHandler,
|
|
@@ -1257,6 +1366,7 @@ export {
|
|
|
1257
1366
|
createDeepgramWebhookHandler,
|
|
1258
1367
|
createElevenLabsWebhookHandler,
|
|
1259
1368
|
createGladiaWebhookHandler,
|
|
1369
|
+
createSonioxWebhookHandler,
|
|
1260
1370
|
createWebhookRouter
|
|
1261
1371
|
};
|
|
1262
1372
|
//# sourceMappingURL=webhooks.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "voice-router-dev",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Universal speech-to-text router for Gladia, AssemblyAI, Deepgram, Azure, OpenAI Whisper, Speechmatics, Soniox, and ElevenLabs",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|