@speech-sdk/core 0.29.0 → 0.29.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/README.md +2 -0
- package/dist/provider-utils.d.ts.map +1 -1
- package/dist/provider-utils.js +63 -10
- package/dist/provider-utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -550,6 +550,8 @@ try {
|
|
|
550
550
|
|
|
551
551
|
`SpeechSdkProviderError` extends `ApiError`, so existing `instanceof ApiError`, `statusCode`, and `responseBody` handling remains compatible. `code` is populated from provider error codes (including Google `error.status`) or the RFC 7807 `code` extension. Match on `code` over `message` text — codes are a stable contract, messages aren't.
|
|
552
552
|
|
|
553
|
+
ElevenLabs Terms-of-Service content blocks use the canonical code `content_policy` with `retryable: false`. App callers should map that code to their content-refusal UX (for example, `content_refused` with guidance to edit the wording or switch hosts). The original ElevenLabs `type` and `code` remain available in `details`; string matching is only a compatibility fallback for older SDK versions.
|
|
554
|
+
|
|
553
555
|
| Error | When |
|
|
554
556
|
|---|---|
|
|
555
557
|
| `SpeechSdkProviderError` | Provider returned non-2xx; includes the parsed and raw provider response |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAEpD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,MAAM,CAQR;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;
|
|
1
|
+
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAEpD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,MAAM,CAQR;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAyHD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAQ5D;AAMD,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,GAAG,SAAS,CAgBpB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAmBD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
package/dist/provider-utils.js
CHANGED
|
@@ -22,34 +22,85 @@ function stringProperty(value, property) {
|
|
|
22
22
|
const candidate = value[property];
|
|
23
23
|
return typeof candidate === "string" ? candidate : undefined;
|
|
24
24
|
}
|
|
25
|
+
function nestedRecord(value, property) {
|
|
26
|
+
return isRecord(value) ? value[property] : undefined;
|
|
27
|
+
}
|
|
28
|
+
function errorBodyCandidates(json) {
|
|
29
|
+
const error = nestedRecord(json, "error");
|
|
30
|
+
const detail = nestedRecord(json, "detail");
|
|
31
|
+
const details = nestedRecord(json, "details");
|
|
32
|
+
return [
|
|
33
|
+
json,
|
|
34
|
+
error,
|
|
35
|
+
detail,
|
|
36
|
+
nestedRecord(error, "detail"),
|
|
37
|
+
details,
|
|
38
|
+
nestedRecord(details, "detail"),
|
|
39
|
+
nestedRecord(details, "error"),
|
|
40
|
+
];
|
|
41
|
+
}
|
|
25
42
|
function parseErrorBody(body) {
|
|
26
43
|
if (!body) {
|
|
27
|
-
return {};
|
|
44
|
+
return { messages: [], providerCodes: [] };
|
|
28
45
|
}
|
|
29
46
|
try {
|
|
30
47
|
const json = JSON.parse(body);
|
|
31
48
|
const error = isRecord(json) ? json.error : undefined;
|
|
32
|
-
const
|
|
49
|
+
const detail = nestedRecord(json, "detail");
|
|
50
|
+
const errorDetail = nestedRecord(error, "detail");
|
|
51
|
+
const details = nestedRecord(json, "details");
|
|
52
|
+
const messageCandidates = [
|
|
33
53
|
typeof error === "string" ? error : undefined,
|
|
34
54
|
stringProperty(error, "message"),
|
|
35
55
|
stringProperty(json, "message"),
|
|
36
56
|
stringProperty(json, "detail"),
|
|
57
|
+
stringProperty(detail, "message"),
|
|
58
|
+
stringProperty(errorDetail, "message"),
|
|
59
|
+
stringProperty(details, "message"),
|
|
60
|
+
stringProperty(nestedRecord(details, "detail"), "message"),
|
|
61
|
+
stringProperty(nestedRecord(details, "error"), "message"),
|
|
37
62
|
];
|
|
38
|
-
const
|
|
39
|
-
|
|
63
|
+
const messages = messageCandidates.filter((candidate) => typeof candidate === "string");
|
|
64
|
+
const message = messages[0] ?? truncate(body);
|
|
65
|
+
const providerCodes = errorBodyCandidates(json)
|
|
66
|
+
.map((candidate) => stringProperty(candidate, "code"))
|
|
67
|
+
.filter((candidate) => candidate !== undefined);
|
|
40
68
|
const code = stringProperty(json, "code") ??
|
|
41
69
|
stringProperty(error, "code") ??
|
|
42
70
|
stringProperty(error, "status") ??
|
|
43
|
-
stringProperty(json, "status")
|
|
71
|
+
stringProperty(json, "status") ??
|
|
72
|
+
providerCodes[0];
|
|
44
73
|
const requestId = stringProperty(json, "requestId") ??
|
|
45
74
|
stringProperty(json, "request_id") ??
|
|
46
75
|
stringProperty(error, "requestId") ??
|
|
47
76
|
stringProperty(error, "request_id");
|
|
48
|
-
return {
|
|
77
|
+
return {
|
|
78
|
+
message,
|
|
79
|
+
messages,
|
|
80
|
+
code,
|
|
81
|
+
providerCodes,
|
|
82
|
+
details: json,
|
|
83
|
+
requestId,
|
|
84
|
+
};
|
|
49
85
|
}
|
|
50
86
|
catch {
|
|
51
|
-
return {
|
|
87
|
+
return {
|
|
88
|
+
message: truncate(body),
|
|
89
|
+
messages: [body],
|
|
90
|
+
providerCodes: [],
|
|
91
|
+
details: body,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const ELEVENLABS_CONTENT_POLICY_CODE = "content_policy";
|
|
96
|
+
const ELEVENLABS_TOS_MESSAGE = "may violate our terms of service";
|
|
97
|
+
function isElevenLabsContentPolicyError(status, provider, parsed) {
|
|
98
|
+
if (provider !== "elevenlabs") {
|
|
99
|
+
return false;
|
|
52
100
|
}
|
|
101
|
+
const isForbidden = parsed.providerCodes.some((code) => code.toLowerCase() === "forbidden");
|
|
102
|
+
const mentionsTermsOfService = parsed.messages.some((message) => message.toLowerCase().includes(ELEVENLABS_TOS_MESSAGE));
|
|
103
|
+
return (status === 403 && isForbidden) || mentionsTermsOfService;
|
|
53
104
|
}
|
|
54
105
|
// 501 is terminal — it signals "capability will never work" (e.g. timestamps_unsupported).
|
|
55
106
|
// 429 retry honors Retry-After in retry-options.ts (RFC 7231 §7.1.3).
|
|
@@ -103,17 +154,19 @@ export async function handleErrorResponse(response, context) {
|
|
|
103
154
|
}
|
|
104
155
|
const rawResponse = await response.text().catch(() => undefined);
|
|
105
156
|
const parsed = parseErrorBody(rawResponse);
|
|
157
|
+
const isContentPolicyError = isElevenLabsContentPolicyError(response.status, context.provider, parsed);
|
|
106
158
|
const message = parsed.message
|
|
107
159
|
? `API error ${response.status}: ${parsed.message}`
|
|
108
160
|
: `API error ${response.status}`;
|
|
109
161
|
const retryAfterMs = parseRetryAfter(response.headers.get("retry-after"));
|
|
110
|
-
const retryable =
|
|
111
|
-
(response.status
|
|
162
|
+
const retryable = !isContentPolicyError &&
|
|
163
|
+
(response.status === 429 ||
|
|
164
|
+
(response.status >= 500 && response.status !== 501));
|
|
112
165
|
throw new SpeechSdkProviderError(message, {
|
|
113
166
|
status: response.status,
|
|
114
167
|
provider: context.provider,
|
|
115
168
|
model: context.model,
|
|
116
|
-
code: parsed.code,
|
|
169
|
+
code: isContentPolicyError ? ELEVENLABS_CONTENT_POLICY_CODE : parsed.code,
|
|
117
170
|
details: parsed.details,
|
|
118
171
|
rawResponse,
|
|
119
172
|
requestId: responseRequestId(response) ?? parsed.requestId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAElB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,iFAAiF;AACjF,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAEpD,MAAM,UAAU,aAAa,CAC3B,MAA0B,EAC1B,MAAc,EACd,YAAoB;IAEpB,MAAM,GAAG,GACP,MAAM;QACN,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,kBAAkB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,QAAgB;IACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CAAC,IAAwB;
|
|
1
|
+
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"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"}
|