@elizaos/plugin-elizacloud 2.0.0-alpha.7 → 2.0.0-beta.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 +220 -0
- package/auto-enable.ts +17 -0
- package/dist/browser/index.browser.js +2 -21
- package/dist/browser/index.browser.js.map +5 -37
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.node.cjs +12173 -2271
- package/dist/cjs/index.node.js.map +135 -27
- package/dist/cloud/auth.d.ts +19 -0
- package/dist/cloud/auth.d.ts.map +1 -0
- package/dist/cloud/auth.js +330 -0
- package/dist/cloud/auth.js.map +12 -0
- package/dist/cloud/backup.d.ts +18 -0
- package/dist/cloud/backup.d.ts.map +1 -0
- package/dist/cloud/backup.js +63 -0
- package/dist/cloud/backup.js.map +10 -0
- package/dist/cloud/base-url.d.ts +3 -0
- package/dist/cloud/base-url.d.ts.map +1 -0
- package/dist/cloud/base-url.js +77 -0
- package/dist/cloud/base-url.js.map +10 -0
- package/dist/cloud/bridge-client.d.ts +126 -0
- package/dist/cloud/bridge-client.d.ts.map +1 -0
- package/dist/cloud/bridge-client.js +432 -0
- package/dist/cloud/bridge-client.js.map +11 -0
- package/dist/cloud/cloud-api-key.d.ts +26 -0
- package/dist/cloud/cloud-api-key.d.ts.map +1 -0
- package/dist/cloud/cloud-api-key.js +60 -0
- package/dist/cloud/cloud-api-key.js.map +10 -0
- package/dist/cloud/cloud-manager.d.ts +33 -0
- package/dist/cloud/cloud-manager.d.ts.map +1 -0
- package/dist/cloud/cloud-manager.js +853 -0
- package/dist/cloud/cloud-manager.js.map +16 -0
- package/dist/cloud/cloud-proxy.d.ts +20 -0
- package/dist/cloud/cloud-proxy.d.ts.map +1 -0
- package/dist/cloud/cloud-proxy.js +54 -0
- package/dist/cloud/cloud-proxy.js.map +10 -0
- package/dist/cloud/cloud-wallet.d.ts +94 -0
- package/dist/cloud/cloud-wallet.d.ts.map +1 -0
- package/dist/cloud/cloud-wallet.js +5195 -0
- package/dist/cloud/cloud-wallet.js.map +92 -0
- package/dist/cloud/index.d.ts +9 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +30 -0
- package/dist/cloud/index.js.map +9 -0
- package/dist/cloud/reconnect.d.ts +26 -0
- package/dist/cloud/reconnect.d.ts.map +1 -0
- package/dist/cloud/reconnect.js +104 -0
- package/dist/cloud/reconnect.js.map +10 -0
- package/dist/cloud/validate-url.d.ts +2 -0
- package/dist/cloud/validate-url.d.ts.map +1 -0
- package/dist/cloud/validate-url.js +174 -0
- package/dist/cloud/validate-url.js.map +10 -0
- package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
- package/dist/cloud-providers/cloud-status.js +78 -0
- package/dist/cloud-providers/cloud-status.js.map +10 -0
- package/dist/cloud-providers/container-health.d.ts.map +1 -1
- package/dist/cloud-providers/container-health.js +74 -0
- package/dist/cloud-providers/container-health.js.map +10 -0
- package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
- package/dist/cloud-providers/credit-balance.js +85 -0
- package/dist/cloud-providers/credit-balance.js.map +10 -0
- package/dist/cloud-providers/index.d.ts.map +1 -1
- package/dist/cloud-providers/index.js +24 -0
- package/dist/cloud-providers/index.js.map +9 -0
- package/dist/cloud-providers/model-registry.d.ts.map +1 -1
- package/dist/cloud-providers/model-registry.js +71 -0
- package/dist/cloud-providers/model-registry.js.map +10 -0
- package/dist/index.browser.d.ts +4 -2
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12851 -0
- package/dist/index.js.map +145 -0
- package/dist/index.node.d.ts +15 -2
- package/dist/index.node.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +169 -0
- package/dist/init.js.map +12 -0
- package/dist/lib/cloud-connection.d.ts +78 -0
- package/dist/lib/cloud-connection.d.ts.map +1 -0
- package/dist/lib/cloud-connection.js +731 -0
- package/dist/lib/cloud-connection.js.map +14 -0
- package/dist/lib/cloud-secrets.d.ts +23 -0
- package/dist/lib/cloud-secrets.d.ts.map +1 -0
- package/dist/lib/cloud-secrets.js +64 -0
- package/dist/lib/cloud-secrets.js.map +10 -0
- package/dist/lib/config-env.d.ts +5 -0
- package/dist/lib/config-env.d.ts.map +1 -0
- package/dist/lib/config-env.js +191 -0
- package/dist/lib/config-env.js.map +11 -0
- package/dist/lib/config-like.d.ts +40 -0
- package/dist/lib/config-like.d.ts.map +1 -0
- package/dist/lib/config-like.js +103 -0
- package/dist/lib/config-like.js.map +10 -0
- package/dist/lib/credential-type-map.d.ts +53 -0
- package/dist/lib/credential-type-map.d.ts.map +1 -0
- package/dist/lib/credential-type-map.js +88 -0
- package/dist/lib/credential-type-map.js.map +10 -0
- package/dist/lib/feature-flags.d.ts +2 -0
- package/dist/lib/feature-flags.d.ts.map +1 -0
- package/dist/lib/feature-flags.js +40 -0
- package/dist/lib/feature-flags.js.map +10 -0
- package/dist/lib/http.d.ts +22 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +107 -0
- package/dist/lib/http.js.map +10 -0
- package/dist/lib/server-cloud-tts.d.ts +34 -0
- package/dist/lib/server-cloud-tts.d.ts.map +1 -0
- package/dist/lib/server-cloud-tts.js +549 -0
- package/dist/lib/server-cloud-tts.js.map +13 -0
- package/dist/lib/state-paths.d.ts +4 -0
- package/dist/lib/state-paths.d.ts.map +1 -0
- package/dist/lib/state-paths.js +52 -0
- package/dist/lib/state-paths.js.map +10 -0
- package/dist/lib/tts-debug.d.ts +4 -0
- package/dist/lib/tts-debug.d.ts.map +1 -0
- package/dist/lib/tts-debug.js +57 -0
- package/dist/lib/tts-debug.js.map +10 -0
- package/dist/models/embeddings.d.ts.map +1 -1
- package/dist/models/embeddings.js +319 -0
- package/dist/models/embeddings.js.map +13 -0
- package/dist/models/image.d.ts.map +1 -1
- package/dist/models/image.js +374 -0
- package/dist/models/image.js.map +14 -0
- package/dist/models/index.d.ts +1 -2
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1386 -0
- package/dist/models/index.js.map +20 -0
- package/dist/models/research.d.ts.map +1 -1
- package/dist/models/research.js +324 -0
- package/dist/models/research.js.map +13 -0
- package/dist/models/speech.d.ts.map +1 -1
- package/dist/models/speech.js +273 -0
- package/dist/models/speech.js.map +13 -0
- package/dist/models/text.d.ts +5 -2
- package/dist/models/text.d.ts.map +1 -1
- package/dist/models/text.js +803 -0
- package/dist/models/text.js.map +15 -0
- package/dist/models/tokenization.d.ts.map +1 -1
- package/dist/models/tokenization.js +65 -0
- package/dist/models/tokenization.js.map +10 -0
- package/dist/models/transcription.d.ts.map +1 -1
- package/dist/models/transcription.js +283 -0
- package/dist/models/transcription.js.map +13 -0
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.node.js +12171 -2266
- package/dist/node/index.node.js.map +135 -27
- package/dist/onboarding.d.ts +35 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +883 -0
- package/dist/onboarding.js.map +14 -0
- package/dist/plugin.d.ts +20 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +7611 -0
- package/dist/plugin.js.map +104 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +127 -0
- package/dist/providers/openai.js.map +11 -0
- package/dist/register-routes.d.ts +2 -0
- package/dist/register-routes.d.ts.map +1 -0
- package/dist/register-routes.js +7612 -0
- package/dist/register-routes.js.map +105 -0
- package/dist/routes/cloud-billing-routes.d.ts +9 -0
- package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
- package/dist/routes/cloud-billing-routes.js +807 -0
- package/dist/routes/cloud-billing-routes.js.map +14 -0
- package/dist/routes/cloud-compat-routes.d.ts +10 -0
- package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
- package/dist/routes/cloud-compat-routes.js +538 -0
- package/dist/routes/cloud-compat-routes.js.map +14 -0
- package/dist/routes/cloud-features-routes.d.ts +9 -0
- package/dist/routes/cloud-features-routes.d.ts.map +1 -0
- package/dist/routes/cloud-features-routes.js +124 -0
- package/dist/routes/cloud-features-routes.js.map +11 -0
- package/dist/routes/cloud-provisioning.d.ts +14 -0
- package/dist/routes/cloud-provisioning.d.ts.map +1 -0
- package/dist/routes/cloud-provisioning.js +37 -0
- package/dist/routes/cloud-provisioning.js.map +10 -0
- package/dist/routes/cloud-relay-routes.d.ts +22 -0
- package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
- package/dist/routes/cloud-relay-routes.js +60 -0
- package/dist/routes/cloud-relay-routes.js.map +10 -0
- package/dist/routes/cloud-routes-autonomous.d.ts +83 -0
- package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-routes-autonomous.js +6134 -0
- package/dist/routes/cloud-routes-autonomous.js.map +97 -0
- package/dist/routes/cloud-routes.d.ts +35 -0
- package/dist/routes/cloud-routes.d.ts.map +1 -0
- package/dist/routes/cloud-routes.js +6888 -0
- package/dist/routes/cloud-routes.js.map +100 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts +15 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes-autonomous.js +396 -0
- package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
- package/dist/routes/cloud-status-routes.d.ts +4 -0
- package/dist/routes/cloud-status-routes.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes.js +771 -0
- package/dist/routes/cloud-status-routes.js.map +15 -0
- package/dist/services/cloud-auth.d.ts +140 -5
- package/dist/services/cloud-auth.d.ts.map +1 -1
- package/dist/services/cloud-auth.js +363 -0
- package/dist/services/cloud-auth.js.map +12 -0
- package/dist/services/cloud-backup.d.ts.map +1 -1
- package/dist/services/cloud-backup.js +176 -0
- package/dist/services/cloud-backup.js.map +11 -0
- package/dist/services/cloud-bootstrap.d.ts +38 -0
- package/dist/services/cloud-bootstrap.d.ts.map +1 -0
- package/dist/services/cloud-bootstrap.js +84 -0
- package/dist/services/cloud-bootstrap.js.map +10 -0
- package/dist/services/cloud-bridge.d.ts +1 -1
- package/dist/services/cloud-bridge.d.ts.map +1 -1
- package/dist/services/cloud-bridge.js +308 -0
- package/dist/services/cloud-bridge.js.map +11 -0
- package/dist/services/cloud-container.d.ts.map +1 -1
- package/dist/services/cloud-container.js +241 -0
- package/dist/services/cloud-container.js.map +11 -0
- package/dist/services/cloud-credential-provider.d.ts +55 -0
- package/dist/services/cloud-credential-provider.d.ts.map +1 -0
- package/dist/services/cloud-credential-provider.js +190 -0
- package/dist/services/cloud-credential-provider.js.map +11 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
- package/dist/services/cloud-managed-gateway-relay.js +479 -0
- package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
- package/dist/services/cloud-model-registry.d.ts.map +1 -1
- package/dist/services/cloud-model-registry.js +175 -0
- package/dist/services/cloud-model-registry.js.map +10 -0
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +29 -0
- package/dist/services/index.js.map +9 -0
- package/dist/types/cloud.d.ts +41 -19
- package/dist/types/cloud.d.ts.map +1 -1
- package/dist/types/cloud.js +52 -0
- package/dist/types/cloud.js.map +10 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +9 -0
- package/dist/utils/cloud-api.d.ts +2 -27
- package/dist/utils/cloud-api.d.ts.map +1 -1
- package/dist/utils/cloud-api.js +33 -0
- package/dist/utils/cloud-api.js.map +10 -0
- package/dist/utils/cloud-sdk/client.d.ts +133 -0
- package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/client.js +3561 -0
- package/dist/utils/cloud-sdk/client.js.map +13 -0
- package/dist/utils/cloud-sdk/http.d.ts +37 -0
- package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/http.js +237 -0
- package/dist/utils/cloud-sdk/http.js.map +11 -0
- package/dist/utils/cloud-sdk/index.d.ts +6 -0
- package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/index.js +29 -0
- package/dist/utils/cloud-sdk/index.js.map +9 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts +5377 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/public-routes.js +2950 -0
- package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
- package/dist/utils/cloud-sdk/types.d.ts +655 -0
- package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.js +29 -0
- package/dist/utils/cloud-sdk/types.js.map +10 -0
- package/dist/utils/config.d.ts +7 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +137 -0
- package/dist/utils/config.js.map +10 -0
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/events.js +43 -0
- package/dist/utils/events.js.map +10 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +103 -0
- package/dist/utils/helpers.js.map +10 -0
- package/dist/utils/responses-output.d.ts +13 -0
- package/dist/utils/responses-output.d.ts.map +1 -0
- package/dist/utils/responses-output.js +102 -0
- package/dist/utils/responses-output.js.map +10 -0
- package/dist/utils/sdk-client.d.ts +5 -0
- package/dist/utils/sdk-client.d.ts.map +1 -0
- package/dist/utils/sdk-client.js +144 -0
- package/dist/utils/sdk-client.js.map +11 -0
- package/package.json +108 -19
- package/src/cloud/auth.ts +175 -0
- package/src/cloud/backup.ts +46 -0
- package/src/cloud/base-url.ts +62 -0
- package/src/cloud/bridge-client.ts +602 -0
- package/src/cloud/cloud-api-key.ts +80 -0
- package/src/cloud/cloud-manager.ts +163 -0
- package/src/cloud/cloud-proxy.ts +52 -0
- package/src/cloud/cloud-wallet.ts +341 -0
- package/src/cloud/index.ts +28 -0
- package/src/cloud/reconnect.ts +111 -0
- package/src/cloud/validate-url.ts +181 -0
- package/src/cloud-providers/cloud-status.ts +75 -0
- package/src/cloud-providers/container-health.ts +68 -0
- package/src/cloud-providers/credit-balance.ts +70 -0
- package/src/cloud-providers/index.ts +3 -0
- package/src/cloud-providers/model-registry.ts +74 -0
- package/src/index.browser.ts +10 -0
- package/src/index.node.ts +39 -0
- package/src/index.ts +347 -0
- package/src/init.ts +39 -0
- package/src/lib/cloud-connection.ts +663 -0
- package/src/lib/cloud-secrets.ts +58 -0
- package/src/lib/config-env.ts +168 -0
- package/src/lib/config-like.ts +149 -0
- package/src/lib/credential-type-map.ts +130 -0
- package/src/lib/feature-flags.ts +26 -0
- package/src/lib/http.ts +139 -0
- package/src/lib/server-cloud-tts.ts +609 -0
- package/src/lib/state-paths.ts +28 -0
- package/src/lib/tts-debug.ts +34 -0
- package/src/models/embeddings.ts +234 -0
- package/src/models/image.ts +219 -0
- package/src/models/index.ts +16 -0
- package/src/models/research.ts +265 -0
- package/src/models/speech.ts +78 -0
- package/src/models/text.ts +899 -0
- package/src/models/tokenization.ts +67 -0
- package/src/models/transcription.ts +97 -0
- package/src/onboarding.ts +396 -0
- package/src/plugin.ts +243 -0
- package/src/providers/openai.ts +16 -0
- package/src/register-routes.ts +6 -0
- package/src/routes/cloud-billing-routes.ts +754 -0
- package/src/routes/cloud-compat-routes.ts +314 -0
- package/src/routes/cloud-features-routes.ts +57 -0
- package/src/routes/cloud-provisioning.ts +37 -0
- package/src/routes/cloud-relay-routes.ts +89 -0
- package/src/routes/cloud-routes-autonomous.ts +996 -0
- package/src/routes/cloud-routes.ts +576 -0
- package/src/routes/cloud-status-routes-autonomous.ts +234 -0
- package/src/routes/cloud-status-routes.ts +73 -0
- package/src/services/cloud-auth.ts +567 -0
- package/src/services/cloud-backup.ts +208 -0
- package/src/services/cloud-bootstrap.ts +108 -0
- package/src/services/cloud-bridge.ts +386 -0
- package/src/services/cloud-container.ts +297 -0
- package/src/services/cloud-credential-provider.ts +210 -0
- package/src/services/cloud-managed-gateway-relay.ts +663 -0
- package/src/services/cloud-model-registry.ts +202 -0
- package/src/services/index.ts +17 -0
- package/{types → src/types}/cloud.ts +52 -29
- package/{types → src/types}/index.ts +6 -0
- package/src/utils/cloud-api.ts +10 -0
- package/src/utils/cloud-sdk/client.ts +735 -0
- package/src/utils/cloud-sdk/http.ts +291 -0
- package/src/utils/cloud-sdk/index.ts +23 -0
- package/src/utils/cloud-sdk/public-routes.ts +5070 -0
- package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
- package/src/utils/cloud-sdk/types.ts +762 -0
- package/src/utils/config.ts +174 -0
- package/src/utils/events.ts +37 -0
- package/src/utils/helpers.ts +107 -0
- package/src/utils/responses-output.ts +115 -0
- package/src/utils/sdk-client.ts +37 -0
- package/dist/actions/check-credits.d.ts +0 -6
- package/dist/actions/check-credits.d.ts.map +0 -1
- package/dist/actions/freeze-agent.d.ts +0 -9
- package/dist/actions/freeze-agent.d.ts.map +0 -1
- package/dist/actions/index.d.ts +0 -5
- package/dist/actions/index.d.ts.map +0 -1
- package/dist/actions/provision-agent.d.ts +0 -8
- package/dist/actions/provision-agent.d.ts.map +0 -1
- package/dist/actions/resume-agent.d.ts +0 -9
- package/dist/actions/resume-agent.d.ts.map +0 -1
- package/dist/build.d.ts +0 -3
- package/dist/build.d.ts.map +0 -1
- package/dist/generated/specs/specs.d.ts +0 -55
- package/dist/generated/specs/specs.d.ts.map +0 -1
- package/dist/models/object.d.ts +0 -4
- package/dist/models/object.d.ts.map +0 -1
- package/dist/utils/forwarded-settings.d.ts +0 -8
- package/dist/utils/forwarded-settings.d.ts.map +0 -1
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __returnValue = (v) => v;
|
|
4
|
+
function __exportSetter(name, newValue) {
|
|
5
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
+
}
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, {
|
|
10
|
+
get: all[name],
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
set: __exportSetter.bind(all, name)
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
18
|
+
|
|
19
|
+
// src/lib/state-paths.ts
|
|
20
|
+
import fs from "node:fs";
|
|
21
|
+
import path from "node:path";
|
|
22
|
+
import {
|
|
23
|
+
getElizaNamespace,
|
|
24
|
+
resolveStateDir,
|
|
25
|
+
resolveUserPath
|
|
26
|
+
} from "@elizaos/core";
|
|
27
|
+
function resolveConfigPath(env = process.env, stateDirPath = resolveStateDir(env)) {
|
|
28
|
+
const override = env.ELIZA_CONFIG_PATH?.trim();
|
|
29
|
+
if (override)
|
|
30
|
+
return resolveUserPath(override);
|
|
31
|
+
const namespace = getElizaNamespace(env);
|
|
32
|
+
const primaryPath = path.join(stateDirPath, `${namespace}.json`);
|
|
33
|
+
if (fs.existsSync(primaryPath))
|
|
34
|
+
return primaryPath;
|
|
35
|
+
if (namespace !== "eliza") {
|
|
36
|
+
const legacyPath = path.join(stateDirPath, "eliza.json");
|
|
37
|
+
if (fs.existsSync(legacyPath))
|
|
38
|
+
return legacyPath;
|
|
39
|
+
}
|
|
40
|
+
return primaryPath;
|
|
41
|
+
}
|
|
42
|
+
var init_state_paths = () => {};
|
|
43
|
+
|
|
44
|
+
// src/lib/cloud-secrets.ts
|
|
45
|
+
function getCloudSecret(key) {
|
|
46
|
+
return _cloudSecrets[key] ?? process.env[key];
|
|
47
|
+
}
|
|
48
|
+
function scrubCloudSecretsFromEnv() {
|
|
49
|
+
for (const key of [
|
|
50
|
+
"ELIZAOS_CLOUD_API_KEY",
|
|
51
|
+
"ELIZAOS_CLOUD_ENABLED"
|
|
52
|
+
]) {
|
|
53
|
+
if (process.env[key] !== undefined) {
|
|
54
|
+
_cloudSecrets[key] = process.env[key];
|
|
55
|
+
delete process.env[key];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function clearCloudSecrets() {
|
|
60
|
+
for (const key of [
|
|
61
|
+
"ELIZAOS_CLOUD_API_KEY",
|
|
62
|
+
"ELIZAOS_CLOUD_ENABLED"
|
|
63
|
+
]) {
|
|
64
|
+
delete _cloudSecrets[key];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function _resetCloudSecretsForTesting() {
|
|
68
|
+
for (const key of Object.keys(_cloudSecrets)) {
|
|
69
|
+
delete _cloudSecrets[key];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
var _cloudSecrets;
|
|
73
|
+
var init_cloud_secrets = __esm(() => {
|
|
74
|
+
_cloudSecrets = Object.create(null);
|
|
75
|
+
Object.defineProperty(_cloudSecrets, Symbol.toStringTag, {
|
|
76
|
+
value: "CloudSecrets",
|
|
77
|
+
enumerable: false
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// src/lib/tts-debug.ts
|
|
82
|
+
function truthy(raw) {
|
|
83
|
+
if (raw == null)
|
|
84
|
+
return false;
|
|
85
|
+
const value = String(raw).trim().toLowerCase();
|
|
86
|
+
return value === "1" || value === "true" || value === "yes" || value === "on";
|
|
87
|
+
}
|
|
88
|
+
function ttsDebugEnabled() {
|
|
89
|
+
if (typeof process !== "undefined" && process.env) {
|
|
90
|
+
if (truthy(process.env.ELIZA_TTS_DEBUG))
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
function isTtsDebugEnabled() {
|
|
96
|
+
return ttsDebugEnabled();
|
|
97
|
+
}
|
|
98
|
+
function ttsDebugTextPreview(text, maxChars = 160) {
|
|
99
|
+
const singleLine = text.replace(/\r?\n/g, "↵ ").replace(/\s+/g, " ").trim();
|
|
100
|
+
if (singleLine.length <= maxChars)
|
|
101
|
+
return singleLine;
|
|
102
|
+
return `${singleLine.slice(0, maxChars)}…`;
|
|
103
|
+
}
|
|
104
|
+
function ttsDebug(phase, detail) {
|
|
105
|
+
if (!ttsDebugEnabled())
|
|
106
|
+
return;
|
|
107
|
+
if (detail && Object.keys(detail).length > 0) {
|
|
108
|
+
console.info(`[eliza][tts] ${phase}`, detail);
|
|
109
|
+
} else {
|
|
110
|
+
console.info(`[eliza][tts] ${phase}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// src/lib/server-cloud-tts.ts
|
|
115
|
+
init_cloud_secrets();
|
|
116
|
+
init_state_paths();
|
|
117
|
+
import fs2 from "node:fs";
|
|
118
|
+
import { isElizaCloudServiceSelectedInConfig, sanitizeSpeechText } from "@elizaos/core";
|
|
119
|
+
function loadElizaConfig() {
|
|
120
|
+
const raw = fs2.readFileSync(resolveConfigPath(), "utf8");
|
|
121
|
+
const parsed = JSON.parse(raw);
|
|
122
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
123
|
+
}
|
|
124
|
+
function readTtsDebugClientHeaders(req) {
|
|
125
|
+
const pick = (name) => {
|
|
126
|
+
const raw = req.headers[name];
|
|
127
|
+
if (raw == null)
|
|
128
|
+
return;
|
|
129
|
+
const v = Array.isArray(raw) ? raw[0] : raw;
|
|
130
|
+
return typeof v === "string" && v.trim() ? v.trim() : undefined;
|
|
131
|
+
};
|
|
132
|
+
const decode = (enc) => {
|
|
133
|
+
if (!enc)
|
|
134
|
+
return;
|
|
135
|
+
try {
|
|
136
|
+
return decodeURIComponent(enc);
|
|
137
|
+
} catch {
|
|
138
|
+
return enc;
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
messageId: decode(pick("x-elizaos-tts-message-id")),
|
|
143
|
+
clipSegment: decode(pick("x-elizaos-tts-clip-segment")),
|
|
144
|
+
hearingFull: decode(pick("x-elizaos-tts-full-preview"))
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function ttsClientDbgFields(hdr) {
|
|
148
|
+
const o = {};
|
|
149
|
+
if (hdr.messageId)
|
|
150
|
+
o.messageId = hdr.messageId;
|
|
151
|
+
if (hdr.clipSegment)
|
|
152
|
+
o.clipSegment = hdr.clipSegment;
|
|
153
|
+
if (hdr.hearingFull)
|
|
154
|
+
o.hearingFull = hdr.hearingFull;
|
|
155
|
+
return o;
|
|
156
|
+
}
|
|
157
|
+
function normalizeSecretEnvValue(value) {
|
|
158
|
+
const trimmed = value?.trim();
|
|
159
|
+
if (!trimmed) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
if (trimmed === "REDACTED" || trimmed === "[REDACTED]" || /^\*+$/.test(trimmed)) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
return trimmed;
|
|
166
|
+
}
|
|
167
|
+
var OPENAI_STYLE_VOICE_ALIASES = new Set([
|
|
168
|
+
"alloy",
|
|
169
|
+
"ash",
|
|
170
|
+
"ballad",
|
|
171
|
+
"coral",
|
|
172
|
+
"echo",
|
|
173
|
+
"nova",
|
|
174
|
+
"sage",
|
|
175
|
+
"shimmer",
|
|
176
|
+
"verse"
|
|
177
|
+
]);
|
|
178
|
+
var DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID = "EXAVITQu4vr4xnSDxMaL";
|
|
179
|
+
var DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID = "eleven_flash_v2_5";
|
|
180
|
+
var ELIZA_CLOUD_TTS_MAX_TEXT_CHARS = 5000;
|
|
181
|
+
function isLikelyEdgeOrAzureNeuralVoiceId(raw) {
|
|
182
|
+
const t = raw.trim();
|
|
183
|
+
return /^[a-z]{2}-[A-Z]{2}-/i.test(t) && /Neural$/i.test(t);
|
|
184
|
+
}
|
|
185
|
+
function normalizeElizaCloudVoiceId(raw) {
|
|
186
|
+
const trimmed = raw.trim();
|
|
187
|
+
if (!trimmed)
|
|
188
|
+
return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
|
|
189
|
+
const lower = trimmed.toLowerCase();
|
|
190
|
+
if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {
|
|
191
|
+
return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
|
|
192
|
+
}
|
|
193
|
+
if (isLikelyEdgeOrAzureNeuralVoiceId(trimmed)) {
|
|
194
|
+
return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
|
|
195
|
+
}
|
|
196
|
+
return trimmed;
|
|
197
|
+
}
|
|
198
|
+
function resolveElizaCloudTtsVoiceId(bodyVoiceId, env = process.env) {
|
|
199
|
+
if (typeof bodyVoiceId === "string" && bodyVoiceId.trim()) {
|
|
200
|
+
return normalizeElizaCloudVoiceId(bodyVoiceId);
|
|
201
|
+
}
|
|
202
|
+
const envVoice = env.ELIZAOS_CLOUD_TTS_VOICE?.trim() ?? "";
|
|
203
|
+
if (envVoice) {
|
|
204
|
+
return normalizeElizaCloudVoiceId(envVoice);
|
|
205
|
+
}
|
|
206
|
+
return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
|
|
207
|
+
}
|
|
208
|
+
function resolveCloudApiKey(env = process.env) {
|
|
209
|
+
const envKey = normalizeSecretEnvValue(env.ELIZAOS_CLOUD_API_KEY);
|
|
210
|
+
if (envKey) {
|
|
211
|
+
return envKey;
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const config = loadElizaConfig();
|
|
215
|
+
const configKey = normalizeSecretEnvValue(typeof config.cloud?.apiKey === "string" ? config.cloud.apiKey : undefined);
|
|
216
|
+
if (configKey) {
|
|
217
|
+
return configKey;
|
|
218
|
+
}
|
|
219
|
+
} catch {}
|
|
220
|
+
const sealedKey = normalizeSecretEnvValue(getCloudSecret("ELIZAOS_CLOUD_API_KEY"));
|
|
221
|
+
if (sealedKey) {
|
|
222
|
+
return sealedKey;
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
var cachedCloudBaseUrlFromConfig;
|
|
227
|
+
var hasResolvedCloudBaseUrlFromConfig = false;
|
|
228
|
+
function __resetCloudBaseUrlCache() {
|
|
229
|
+
cachedCloudBaseUrlFromConfig = undefined;
|
|
230
|
+
hasResolvedCloudBaseUrlFromConfig = false;
|
|
231
|
+
}
|
|
232
|
+
function resolveCloudBaseUrlFromConfig() {
|
|
233
|
+
if (hasResolvedCloudBaseUrlFromConfig) {
|
|
234
|
+
return cachedCloudBaseUrlFromConfig ?? null;
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
const config = loadElizaConfig();
|
|
238
|
+
const raw = typeof config.cloud?.baseUrl === "string" ? config.cloud.baseUrl.trim() : "";
|
|
239
|
+
cachedCloudBaseUrlFromConfig = raw.length > 0 ? raw : null;
|
|
240
|
+
hasResolvedCloudBaseUrlFromConfig = true;
|
|
241
|
+
return cachedCloudBaseUrlFromConfig;
|
|
242
|
+
} catch {
|
|
243
|
+
cachedCloudBaseUrlFromConfig = null;
|
|
244
|
+
hasResolvedCloudBaseUrlFromConfig = true;
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
function pickBodyString(body, camel, snake) {
|
|
249
|
+
const a = body[camel];
|
|
250
|
+
if (typeof a === "string" && a.trim())
|
|
251
|
+
return a;
|
|
252
|
+
const b = body[snake];
|
|
253
|
+
if (typeof b === "string" && b.trim())
|
|
254
|
+
return b;
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
async function readRawRequestBody(req) {
|
|
258
|
+
const chunks = [];
|
|
259
|
+
for await (const chunk of req) {
|
|
260
|
+
chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
|
|
261
|
+
}
|
|
262
|
+
return Buffer.concat(chunks);
|
|
263
|
+
}
|
|
264
|
+
function sendJsonResponse(res, status, body) {
|
|
265
|
+
if (res.headersSent)
|
|
266
|
+
return;
|
|
267
|
+
res.statusCode = status;
|
|
268
|
+
res.setHeader("content-type", "application/json; charset=utf-8");
|
|
269
|
+
res.end(JSON.stringify(body));
|
|
270
|
+
}
|
|
271
|
+
function sendJsonErrorResponse(res, status, message) {
|
|
272
|
+
sendJsonResponse(res, status, { error: message });
|
|
273
|
+
}
|
|
274
|
+
function shouldRetryCloudTtsUpstream(status) {
|
|
275
|
+
return status === 404 || status === 502 || status === 503;
|
|
276
|
+
}
|
|
277
|
+
function forwardCloudTtsUpstreamError(res, status, bodyText) {
|
|
278
|
+
if (res.headersSent)
|
|
279
|
+
return;
|
|
280
|
+
const trimmed = bodyText.trim();
|
|
281
|
+
if (trimmed.startsWith("{") && trimmed.endsWith("}") || trimmed.startsWith("[") && trimmed.endsWith("]")) {
|
|
282
|
+
try {
|
|
283
|
+
const parsed = JSON.parse(trimmed);
|
|
284
|
+
sendJsonResponse(res, status, parsed);
|
|
285
|
+
return;
|
|
286
|
+
} catch {}
|
|
287
|
+
}
|
|
288
|
+
res.statusCode = status;
|
|
289
|
+
res.setHeader("content-type", "application/json; charset=utf-8");
|
|
290
|
+
res.end(JSON.stringify({ error: trimmed || "Eliza Cloud TTS request failed" }));
|
|
291
|
+
}
|
|
292
|
+
function normalizeElizaCloudTtsModelId(raw) {
|
|
293
|
+
const trimmed = raw.trim();
|
|
294
|
+
if (!trimmed)
|
|
295
|
+
return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
|
|
296
|
+
const lower = trimmed.toLowerCase();
|
|
297
|
+
if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {
|
|
298
|
+
return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
|
|
299
|
+
}
|
|
300
|
+
if (/^gpt-/i.test(trimmed)) {
|
|
301
|
+
return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
|
|
302
|
+
}
|
|
303
|
+
if (/^tts-1/i.test(trimmed)) {
|
|
304
|
+
return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
|
|
305
|
+
}
|
|
306
|
+
if (/mini-tts/i.test(trimmed)) {
|
|
307
|
+
return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
|
|
308
|
+
}
|
|
309
|
+
return trimmed;
|
|
310
|
+
}
|
|
311
|
+
function resolveCloudProxyTtsModel(bodyModel, env = process.env) {
|
|
312
|
+
const envModel = env.ELIZAOS_CLOUD_TTS_MODEL?.trim() ?? "";
|
|
313
|
+
const raw = typeof bodyModel === "string" && bodyModel.trim() ? bodyModel.trim() : "";
|
|
314
|
+
const chosen = raw || envModel;
|
|
315
|
+
if (!chosen)
|
|
316
|
+
return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
|
|
317
|
+
return normalizeElizaCloudTtsModelId(chosen);
|
|
318
|
+
}
|
|
319
|
+
function resolveElevenLabsApiKeyForCloudMode(env = process.env) {
|
|
320
|
+
const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);
|
|
321
|
+
if (directKey) {
|
|
322
|
+
return directKey;
|
|
323
|
+
}
|
|
324
|
+
let configWantsCloudTts = false;
|
|
325
|
+
try {
|
|
326
|
+
configWantsCloudTts = isElizaCloudServiceSelectedInConfig(loadElizaConfig(), "tts");
|
|
327
|
+
} catch {
|
|
328
|
+
configWantsCloudTts = false;
|
|
329
|
+
}
|
|
330
|
+
const cloudTtsEnabled = env.ELIZAOS_CLOUD_USE_TTS === "true" || env.ELIZAOS_CLOUD_USE_TTS === undefined && configWantsCloudTts;
|
|
331
|
+
if (!cloudTtsEnabled) {
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
if (env.ELIZA_CLOUD_TTS_DISABLED === "true") {
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
return resolveCloudApiKey(env);
|
|
338
|
+
}
|
|
339
|
+
function ensureCloudTtsApiKeyAlias(env = process.env) {
|
|
340
|
+
const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);
|
|
341
|
+
if (directKey) {
|
|
342
|
+
return false;
|
|
343
|
+
}
|
|
344
|
+
const cloudBackedKey = resolveElevenLabsApiKeyForCloudMode(env);
|
|
345
|
+
if (!cloudBackedKey) {
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
env.ELEVENLABS_API_KEY = cloudBackedKey;
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
function resolveCloudTtsBaseUrl(env = process.env) {
|
|
352
|
+
const fromEnv = env.ELIZAOS_CLOUD_BASE_URL?.trim() ?? "";
|
|
353
|
+
const fromConfig = fromEnv.length > 0 ? null : resolveCloudBaseUrlFromConfig();
|
|
354
|
+
const configured = fromEnv.length > 0 ? fromEnv : fromConfig?.trim() ?? "";
|
|
355
|
+
const fallback = "https://www.elizacloud.ai/api/v1";
|
|
356
|
+
const base = configured.length > 0 ? configured : fallback;
|
|
357
|
+
try {
|
|
358
|
+
const parsed = new URL(base);
|
|
359
|
+
let path2 = parsed.pathname.replace(/\/+$/, "");
|
|
360
|
+
if (!path2 || path2 === "/") {
|
|
361
|
+
path2 = "/api/v1";
|
|
362
|
+
}
|
|
363
|
+
parsed.pathname = path2;
|
|
364
|
+
return parsed.toString().replace(/\/$/, "");
|
|
365
|
+
} catch {
|
|
366
|
+
return fallback;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
function resolveCloudTtsCandidateUrls(env = process.env) {
|
|
370
|
+
const base = resolveCloudTtsBaseUrl(env).replace(/\/+$/, "");
|
|
371
|
+
const candidates = new Set;
|
|
372
|
+
const addEndpointsForApiV1Base = (baseUrl) => {
|
|
373
|
+
const trimmed = baseUrl.replace(/\/+$/, "");
|
|
374
|
+
candidates.add(`${trimmed}/voice/tts`);
|
|
375
|
+
try {
|
|
376
|
+
const u = new URL(trimmed);
|
|
377
|
+
const path2 = u.pathname.replace(/\/+$/, "");
|
|
378
|
+
if (path2.endsWith("/api/v1")) {
|
|
379
|
+
candidates.add(`${u.origin}/api/elevenlabs/tts`);
|
|
380
|
+
}
|
|
381
|
+
} catch {}
|
|
382
|
+
};
|
|
383
|
+
addEndpointsForApiV1Base(base);
|
|
384
|
+
try {
|
|
385
|
+
const parsed = new URL(base);
|
|
386
|
+
if (parsed.hostname.startsWith("www.")) {
|
|
387
|
+
parsed.hostname = parsed.hostname.slice(4);
|
|
388
|
+
addEndpointsForApiV1Base(parsed.toString().replace(/\/$/, ""));
|
|
389
|
+
} else {
|
|
390
|
+
parsed.hostname = `www.${parsed.hostname}`;
|
|
391
|
+
addEndpointsForApiV1Base(parsed.toString().replace(/\/$/, ""));
|
|
392
|
+
}
|
|
393
|
+
} catch {}
|
|
394
|
+
return [...candidates];
|
|
395
|
+
}
|
|
396
|
+
async function handleCloudTtsPreviewRoute(req, res) {
|
|
397
|
+
const clientTtsDbg = readTtsDebugClientHeaders(req);
|
|
398
|
+
const dbgExtra = ttsClientDbgFields(clientTtsDbg);
|
|
399
|
+
const cloudApiKey = resolveCloudApiKey();
|
|
400
|
+
if (!cloudApiKey) {
|
|
401
|
+
ttsDebug("server:cloud-tts:reject", {
|
|
402
|
+
reason: "no_api_key",
|
|
403
|
+
...dbgExtra
|
|
404
|
+
});
|
|
405
|
+
sendJsonErrorResponse(res, 401, "Eliza Cloud is not connected. Connect your Eliza Cloud account first.");
|
|
406
|
+
return true;
|
|
407
|
+
}
|
|
408
|
+
const rawBody = await readRawRequestBody(req);
|
|
409
|
+
let body;
|
|
410
|
+
try {
|
|
411
|
+
body = JSON.parse(rawBody.toString("utf8"));
|
|
412
|
+
} catch {
|
|
413
|
+
sendJsonErrorResponse(res, 400, "Invalid JSON request body");
|
|
414
|
+
return true;
|
|
415
|
+
}
|
|
416
|
+
const text = sanitizeSpeechText(typeof body.text === "string" ? body.text : "");
|
|
417
|
+
if (!text) {
|
|
418
|
+
sendJsonErrorResponse(res, 400, "Missing text");
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
421
|
+
if (text.length > ELIZA_CLOUD_TTS_MAX_TEXT_CHARS) {
|
|
422
|
+
sendJsonErrorResponse(res, 400, `Text too long. Maximum length is ${ELIZA_CLOUD_TTS_MAX_TEXT_CHARS} characters`);
|
|
423
|
+
return true;
|
|
424
|
+
}
|
|
425
|
+
const cloudModel = resolveCloudProxyTtsModel(pickBodyString(body, "modelId", "model_id"));
|
|
426
|
+
const cloudVoice = resolveElizaCloudTtsVoiceId(pickBodyString(body, "voiceId", "voice_id"));
|
|
427
|
+
const cloudUrls = resolveCloudTtsCandidateUrls();
|
|
428
|
+
const ttsPreview = ttsDebugTextPreview(text);
|
|
429
|
+
ttsDebug("server:cloud-tts:proxy", {
|
|
430
|
+
textChars: text.length,
|
|
431
|
+
preview: ttsPreview,
|
|
432
|
+
modelId: cloudModel,
|
|
433
|
+
voiceId: cloudVoice,
|
|
434
|
+
urlCandidates: cloudUrls.length,
|
|
435
|
+
...dbgExtra
|
|
436
|
+
});
|
|
437
|
+
try {
|
|
438
|
+
let lastStatus = 0;
|
|
439
|
+
let lastDetails = "unknown error";
|
|
440
|
+
let cloudResponse = null;
|
|
441
|
+
for (let i = 0;i < cloudUrls.length; i++) {
|
|
442
|
+
const cloudUrl = cloudUrls[i];
|
|
443
|
+
if (cloudUrl === undefined) {
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
const attempt = await fetch(cloudUrl, {
|
|
447
|
+
method: "POST",
|
|
448
|
+
headers: {
|
|
449
|
+
Authorization: `Bearer ${cloudApiKey}`,
|
|
450
|
+
"x-api-key": cloudApiKey,
|
|
451
|
+
"Content-Type": "application/json",
|
|
452
|
+
Accept: "audio/mpeg"
|
|
453
|
+
},
|
|
454
|
+
body: JSON.stringify({
|
|
455
|
+
text,
|
|
456
|
+
voiceId: cloudVoice,
|
|
457
|
+
modelId: cloudModel
|
|
458
|
+
})
|
|
459
|
+
});
|
|
460
|
+
if (attempt.ok) {
|
|
461
|
+
cloudResponse = attempt;
|
|
462
|
+
ttsDebug("server:cloud-tts:upstream-ok", {
|
|
463
|
+
urlIndex: i,
|
|
464
|
+
status: attempt.status,
|
|
465
|
+
preview: ttsPreview,
|
|
466
|
+
...dbgExtra
|
|
467
|
+
});
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
lastStatus = attempt.status;
|
|
471
|
+
lastDetails = await attempt.text().catch(() => "unknown error");
|
|
472
|
+
ttsDebug("server:cloud-tts:upstream-retry", {
|
|
473
|
+
urlIndex: i,
|
|
474
|
+
status: attempt.status,
|
|
475
|
+
preview: ttsPreview,
|
|
476
|
+
...dbgExtra
|
|
477
|
+
});
|
|
478
|
+
const hasMoreCandidates = i < cloudUrls.length - 1;
|
|
479
|
+
if (!hasMoreCandidates || !shouldRetryCloudTtsUpstream(attempt.status)) {
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
if (!cloudResponse) {
|
|
484
|
+
ttsDebug("server:cloud-tts:reject", {
|
|
485
|
+
reason: "upstream_failed",
|
|
486
|
+
lastStatus,
|
|
487
|
+
preview: ttsPreview,
|
|
488
|
+
...dbgExtra
|
|
489
|
+
});
|
|
490
|
+
if (lastStatus === 400 || lastStatus === 401 || lastStatus === 402 || lastStatus === 403 || lastStatus === 429) {
|
|
491
|
+
forwardCloudTtsUpstreamError(res, lastStatus, lastDetails);
|
|
492
|
+
return true;
|
|
493
|
+
}
|
|
494
|
+
sendJsonErrorResponse(res, 502, `Eliza Cloud TTS failed (${lastStatus || 502}): ${lastDetails}`);
|
|
495
|
+
return true;
|
|
496
|
+
}
|
|
497
|
+
const audioBuffer = Buffer.from(await cloudResponse.arrayBuffer());
|
|
498
|
+
ttsDebug("server:cloud-tts:success", {
|
|
499
|
+
bytes: audioBuffer.length,
|
|
500
|
+
preview: ttsPreview,
|
|
501
|
+
...dbgExtra
|
|
502
|
+
});
|
|
503
|
+
res.statusCode = 200;
|
|
504
|
+
res.setHeader("Content-Type", "audio/mpeg");
|
|
505
|
+
res.setHeader("Cache-Control", "no-store");
|
|
506
|
+
res.end(audioBuffer);
|
|
507
|
+
return true;
|
|
508
|
+
} catch (err) {
|
|
509
|
+
sendJsonErrorResponse(res, 502, `Eliza Cloud TTS request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
510
|
+
return true;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
function mirrorCompatHeaders(req) {
|
|
514
|
+
const HEADER_ALIASES = [
|
|
515
|
+
["x-elizaos-token", "x-eliza-token"],
|
|
516
|
+
["x-elizaos-export-token", "x-eliza-export-token"],
|
|
517
|
+
["x-elizaos-client-id", "x-eliza-client-id"],
|
|
518
|
+
["x-elizaos-terminal-token", "x-eliza-terminal-token"],
|
|
519
|
+
["x-elizaos-ui-language", "x-eliza-ui-language"],
|
|
520
|
+
["x-elizaos-agent-action", "x-eliza-agent-action"]
|
|
521
|
+
];
|
|
522
|
+
for (const [appHeader, elizaHeader] of HEADER_ALIASES) {
|
|
523
|
+
const appValue = req.headers[appHeader];
|
|
524
|
+
const elizaValue = req.headers[elizaHeader];
|
|
525
|
+
if (appValue != null && elizaValue == null) {
|
|
526
|
+
req.headers[elizaHeader] = appValue;
|
|
527
|
+
}
|
|
528
|
+
if (elizaValue != null && appValue == null) {
|
|
529
|
+
req.headers[appHeader] = elizaValue;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
export {
|
|
534
|
+
shouldRetryCloudTtsUpstream,
|
|
535
|
+
resolveElizaCloudTtsVoiceId,
|
|
536
|
+
resolveElevenLabsApiKeyForCloudMode,
|
|
537
|
+
resolveCloudTtsCandidateUrls,
|
|
538
|
+
resolveCloudTtsBaseUrl,
|
|
539
|
+
resolveCloudProxyTtsModel,
|
|
540
|
+
readTtsDebugClientHeaders,
|
|
541
|
+
normalizeElizaCloudTtsModelId,
|
|
542
|
+
mirrorCompatHeaders,
|
|
543
|
+
handleCloudTtsPreviewRoute,
|
|
544
|
+
ensureCloudTtsApiKeyAlias,
|
|
545
|
+
__resetCloudBaseUrlCache,
|
|
546
|
+
ELIZA_CLOUD_TTS_MAX_TEXT_CHARS
|
|
547
|
+
};
|
|
548
|
+
|
|
549
|
+
//# debugId=6733258098F6092A64756E2164756E21
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/lib/state-paths.ts", "../src/lib/cloud-secrets.ts", "../src/lib/tts-debug.ts", "../src/lib/server-cloud-tts.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n getElizaNamespace,\n resolveStateDir,\n resolveUserPath,\n} from \"@elizaos/core\";\n\nexport { getElizaNamespace, resolveStateDir, resolveUserPath };\n\nexport function resolveConfigPath(\n env: NodeJS.ProcessEnv = process.env,\n stateDirPath: string = resolveStateDir(env),\n): string {\n const override = env.ELIZA_CONFIG_PATH?.trim();\n if (override) return resolveUserPath(override);\n\n const namespace = getElizaNamespace(env);\n const primaryPath = path.join(stateDirPath, `${namespace}.json`);\n if (fs.existsSync(primaryPath)) return primaryPath;\n\n if (namespace !== \"eliza\") {\n const legacyPath = path.join(stateDirPath, \"eliza.json\");\n if (fs.existsSync(legacyPath)) return legacyPath;\n }\n\n return primaryPath;\n}\n",
|
|
6
|
+
"/**\n * Sealed in-process secret store for cloud credentials.\n *\n * Cloud API keys are scrubbed from process.env after login and stored\n * here so they are not visible in environment dumps, child processes,\n * or /proc/self/environ.\n *\n * This module has NO external dependencies so it can be imported by\n * any module without pulling in host-layer packages.\n */\n\nconst _cloudSecrets: Record<string, string | undefined> = Object.create(null);\n\nObject.defineProperty(_cloudSecrets, Symbol.toStringTag, {\n value: \"CloudSecrets\",\n enumerable: false,\n});\n\n/**\n * Read a cloud secret without exposing it in process.env.\n * Falls back to process.env for backwards compatibility with code that\n * sets the key before this module loads (e.g. docker entrypoints).\n */\nexport function getCloudSecret(\n key: \"ELIZAOS_CLOUD_API_KEY\" | \"ELIZAOS_CLOUD_ENABLED\",\n): string | undefined {\n return _cloudSecrets[key] ?? process.env[key];\n}\n\n/** Scrub cloud secrets from process.env and capture into the sealed store. */\nexport function scrubCloudSecretsFromEnv(): void {\n for (const key of [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n ] as const) {\n if (process.env[key] !== undefined) {\n _cloudSecrets[key] = process.env[key];\n delete process.env[key];\n }\n }\n}\n\n/** Clear any sealed cloud secrets after an explicit disconnect. */\nexport function clearCloudSecrets(): void {\n for (const key of [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n ] as const) {\n delete _cloudSecrets[key];\n }\n}\n\n/** Reset the sealed secret store. Test-only. */\nexport function _resetCloudSecretsForTesting(): void {\n for (const key of Object.keys(_cloudSecrets)) {\n delete _cloudSecrets[key];\n }\n}\n",
|
|
7
|
+
"function truthy(raw: string | undefined | null): boolean {\n if (raw == null) return false;\n const value = String(raw).trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction ttsDebugEnabled(): boolean {\n if (typeof process !== \"undefined\" && process.env) {\n if (truthy(process.env.ELIZA_TTS_DEBUG)) return true;\n }\n return false;\n}\n\nexport function isTtsDebugEnabled(): boolean {\n return ttsDebugEnabled();\n}\n\nexport function ttsDebugTextPreview(text: string, maxChars = 160): string {\n const singleLine = text.replace(/\\r?\\n/g, \"↵ \").replace(/\\s+/g, \" \").trim();\n if (singleLine.length <= maxChars) return singleLine;\n return `${singleLine.slice(0, maxChars)}…`;\n}\n\nexport function ttsDebug(\n phase: string,\n detail?: Record<string, unknown>,\n): void {\n if (!ttsDebugEnabled()) return;\n if (detail && Object.keys(detail).length > 0) {\n console.info(`[eliza][tts] ${phase}`, detail);\n } else {\n console.info(`[eliza][tts] ${phase}`);\n }\n}\n",
|
|
8
|
+
"/**\n * Cloud TTS helpers — proxy to Eliza Cloud (`elizacloud.ai`).\n *\n * Upstream routes (see eliza-cloud-v2): `POST /api/v1/voice/tts` and legacy\n * `POST /api/elevenlabs/tts`. Both accept `{ text, voiceId?, modelId? }` with\n * **ElevenLabs** voice and model ids; the cloud runs ElevenLabs server-side.\n */\nimport fs from \"node:fs\";\nimport type http from \"node:http\";\nimport { isElizaCloudServiceSelectedInConfig, sanitizeSpeechText } from \"@elizaos/core\";\nimport { getCloudSecret } from \"./cloud-secrets\";\nimport { resolveConfigPath } from \"./state-paths\";\nimport { ttsDebug, ttsDebugTextPreview } from \"./tts-debug\";\n\n// ---------------------------------------------------------------------------\n// Internal helpers (not exported)\n// ---------------------------------------------------------------------------\n\ntype ConfigLike = Record<string, unknown> & {\n cloud?: {\n apiKey?: unknown;\n baseUrl?: unknown;\n };\n};\n\nfunction loadElizaConfig(): ConfigLike {\n const raw = fs.readFileSync(resolveConfigPath(), \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as ConfigLike)\n : {};\n}\n\n/** Browser → API correlation (never forwarded to Eliza Cloud). */\nexport function readTtsDebugClientHeaders(\n req: Pick<http.IncomingMessage, \"headers\">,\n): {\n messageId?: string;\n clipSegment?: string;\n hearingFull?: string;\n} {\n const pick = (name: string): string | undefined => {\n const raw = req.headers[name];\n if (raw == null) return undefined;\n const v = Array.isArray(raw) ? raw[0] : raw;\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n };\n const decode = (enc: string | undefined): string | undefined => {\n if (!enc) return undefined;\n try {\n return decodeURIComponent(enc);\n } catch {\n return enc;\n }\n };\n return {\n messageId: decode(pick(\"x-elizaos-tts-message-id\")),\n clipSegment: decode(pick(\"x-elizaos-tts-clip-segment\")),\n hearingFull: decode(pick(\"x-elizaos-tts-full-preview\")),\n };\n}\n\nfunction ttsClientDbgFields(\n hdr: ReturnType<typeof readTtsDebugClientHeaders>,\n): Record<string, string> {\n const o: Record<string, string> = {};\n if (hdr.messageId) o.messageId = hdr.messageId;\n if (hdr.clipSegment) o.clipSegment = hdr.clipSegment;\n if (hdr.hearingFull) o.hearingFull = hdr.hearingFull;\n return o;\n}\n\nfunction normalizeSecretEnvValue(value: string | undefined): string | null {\n const trimmed = value?.trim();\n if (!trimmed) {\n return null;\n }\n if (\n trimmed === \"REDACTED\" ||\n trimmed === \"[REDACTED]\" ||\n /^\\*+$/.test(trimmed)\n ) {\n return null;\n }\n return trimmed;\n}\n\n/** OpenAI-style names — not valid ElevenLabs `voiceId`; map to default voice. */\nconst OPENAI_STYLE_VOICE_ALIASES = new Set([\n \"alloy\",\n \"ash\",\n \"ballad\",\n \"coral\",\n \"echo\",\n \"nova\",\n \"sage\",\n \"shimmer\",\n \"verse\",\n]);\n\n/** Eliza Cloud default premade voice (matches eliza-cloud-v2 ElevenLabs service). */\nconst DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID = \"EXAVITQu4vr4xnSDxMaL\";\nconst DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID = \"eleven_flash_v2_5\";\n\n/** Matches `MAX_TEXT_LENGTH` in eliza-cloud-v2 `app/api/v1/voice/tts/route.ts`. */\nexport const ELIZA_CLOUD_TTS_MAX_TEXT_CHARS = 5000;\n\n/** Edge / Azure neural ids (e.g. `en-US-AriaNeural`) are not ElevenLabs `voiceId`s. */\nfunction isLikelyEdgeOrAzureNeuralVoiceId(raw: string): boolean {\n const t = raw.trim();\n return /^[a-z]{2}-[A-Z]{2}-/i.test(t) && /Neural$/i.test(t);\n}\n\nfunction normalizeElizaCloudVoiceId(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n const lower = trimmed.toLowerCase();\n if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {\n return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n }\n if (isLikelyEdgeOrAzureNeuralVoiceId(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n }\n return trimmed;\n}\n\n/**\n * Resolve `voiceId` for Eliza Cloud TTS (ElevenLabs ids). OpenAI-style names\n * in the request are replaced with the default premade voice.\n */\nexport function resolveElizaCloudTtsVoiceId(\n bodyVoiceId: unknown,\n env: NodeJS.ProcessEnv = process.env,\n): string {\n if (typeof bodyVoiceId === \"string\" && bodyVoiceId.trim()) {\n return normalizeElizaCloudVoiceId(bodyVoiceId);\n }\n const envVoice = env.ELIZAOS_CLOUD_TTS_VOICE?.trim() ?? \"\";\n if (envVoice) {\n return normalizeElizaCloudVoiceId(envVoice);\n }\n return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n}\n\nfunction resolveCloudApiKey(\n env: NodeJS.ProcessEnv = process.env,\n): string | null {\n const envKey = normalizeSecretEnvValue(env.ELIZAOS_CLOUD_API_KEY);\n if (envKey) {\n return envKey;\n }\n\n try {\n const config = loadElizaConfig();\n const configKey = normalizeSecretEnvValue(\n typeof config.cloud?.apiKey === \"string\"\n ? config.cloud.apiKey\n : undefined,\n );\n if (configKey) {\n return configKey;\n }\n } catch {\n // ignore config load errors and continue with secret store fallback\n }\n\n const sealedKey = normalizeSecretEnvValue(\n getCloudSecret(\"ELIZAOS_CLOUD_API_KEY\"),\n );\n if (sealedKey) {\n return sealedKey;\n }\n\n return null;\n}\n\nlet cachedCloudBaseUrlFromConfig: string | null | undefined;\nlet hasResolvedCloudBaseUrlFromConfig = false;\n\nexport function __resetCloudBaseUrlCache(): void {\n cachedCloudBaseUrlFromConfig = undefined;\n hasResolvedCloudBaseUrlFromConfig = false;\n}\n\nfunction resolveCloudBaseUrlFromConfig(): string | null {\n if (hasResolvedCloudBaseUrlFromConfig) {\n return cachedCloudBaseUrlFromConfig ?? null;\n }\n\n try {\n const config = loadElizaConfig();\n const raw =\n typeof config.cloud?.baseUrl === \"string\"\n ? config.cloud.baseUrl.trim()\n : \"\";\n cachedCloudBaseUrlFromConfig = raw.length > 0 ? raw : null;\n hasResolvedCloudBaseUrlFromConfig = true;\n return cachedCloudBaseUrlFromConfig;\n } catch {\n // On failure, remember that we attempted resolution to avoid repeated I/O.\n cachedCloudBaseUrlFromConfig = null;\n hasResolvedCloudBaseUrlFromConfig = true;\n return null;\n }\n}\n\nfunction pickBodyString(\n body: Record<string, unknown>,\n camel: string,\n snake: string,\n): unknown {\n const a = body[camel];\n if (typeof a === \"string\" && a.trim()) return a;\n const b = body[snake];\n if (typeof b === \"string\" && b.trim()) return b;\n return undefined;\n}\n\nasync function readRawRequestBody(req: http.IncomingMessage): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n return Buffer.concat(chunks);\n}\n\nfunction sendJsonResponse(\n res: http.ServerResponse,\n status: number,\n body: unknown,\n): void {\n if (res.headersSent) return;\n res.statusCode = status;\n res.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n res.end(JSON.stringify(body));\n}\n\nfunction sendJsonErrorResponse(\n res: http.ServerResponse,\n status: number,\n message: string,\n): void {\n sendJsonResponse(res, status, { error: message });\n}\n\n/**\n * After a non-OK upstream response, only try the next URL for likely-transient /\n * wrong-route issues. Avoid retrying 401/402/429 etc. so we do not double-charge TTS.\n */\nexport function shouldRetryCloudTtsUpstream(status: number): boolean {\n return status === 404 || status === 502 || status === 503;\n}\n\nfunction forwardCloudTtsUpstreamError(\n res: http.ServerResponse,\n status: number,\n bodyText: string,\n): void {\n if (res.headersSent) return;\n const trimmed = bodyText.trim();\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n sendJsonResponse(res, status, parsed);\n return;\n } catch {\n /* fall through */\n }\n }\n res.statusCode = status;\n res.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n res.end(\n JSON.stringify({ error: trimmed || \"Eliza Cloud TTS request failed\" }),\n );\n}\n\n/**\n * Coerce stored/configured values to an ElevenLabs model id Eliza Cloud accepts.\n * Maps OpenAI TTS ids and common copy-paste mistakes; passes through real `eleven_*` ids.\n */\nexport function normalizeElizaCloudTtsModelId(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n const lower = trimmed.toLowerCase();\n if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n if (/^gpt-/i.test(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n if (/^tts-1/i.test(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n if (/mini-tts/i.test(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n return trimmed;\n}\n\n/** Eliza Cloud TTS `modelId` (ElevenLabs), from body or env or default. */\nexport function resolveCloudProxyTtsModel(\n bodyModel: unknown,\n env: NodeJS.ProcessEnv = process.env,\n): string {\n const envModel = env.ELIZAOS_CLOUD_TTS_MODEL?.trim() ?? \"\";\n const raw =\n typeof bodyModel === \"string\" && bodyModel.trim() ? bodyModel.trim() : \"\";\n const chosen = raw || envModel;\n if (!chosen) return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n return normalizeElizaCloudTtsModelId(chosen);\n}\n\n// ---------------------------------------------------------------------------\n// Exported Cloud TTS functions\n// ---------------------------------------------------------------------------\n\nexport function resolveElevenLabsApiKeyForCloudMode(\n env: NodeJS.ProcessEnv = process.env,\n): string | null {\n const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);\n if (directKey) {\n return directKey;\n }\n let configWantsCloudTts = false;\n try {\n configWantsCloudTts = isElizaCloudServiceSelectedInConfig(\n loadElizaConfig() as Record<string, unknown>,\n \"tts\",\n );\n } catch {\n configWantsCloudTts = false;\n }\n const cloudTtsEnabled =\n env.ELIZAOS_CLOUD_USE_TTS === \"true\" ||\n (env.ELIZAOS_CLOUD_USE_TTS === undefined && configWantsCloudTts);\n if (!cloudTtsEnabled) {\n return null;\n }\n if (env.ELIZA_CLOUD_TTS_DISABLED === \"true\") {\n return null;\n }\n return resolveCloudApiKey(env);\n}\n\nexport function ensureCloudTtsApiKeyAlias(\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);\n if (directKey) {\n return false;\n }\n const cloudBackedKey = resolveElevenLabsApiKeyForCloudMode(env);\n if (!cloudBackedKey) {\n return false;\n }\n env.ELEVENLABS_API_KEY = cloudBackedKey;\n return true;\n}\n\nexport function resolveCloudTtsBaseUrl(\n env: NodeJS.ProcessEnv = process.env,\n): string {\n const fromEnv = env.ELIZAOS_CLOUD_BASE_URL?.trim() ?? \"\";\n const fromConfig =\n fromEnv.length > 0 ? null : resolveCloudBaseUrlFromConfig();\n const configured = fromEnv.length > 0 ? fromEnv : (fromConfig?.trim() ?? \"\");\n const fallback = \"https://www.elizacloud.ai/api/v1\";\n const base = configured.length > 0 ? configured : fallback;\n\n try {\n const parsed = new URL(base);\n let path = parsed.pathname.replace(/\\/+$/, \"\");\n if (!path || path === \"/\") {\n path = \"/api/v1\";\n }\n parsed.pathname = path;\n return parsed.toString().replace(/\\/$/, \"\");\n } catch {\n return fallback;\n }\n}\n\nexport function resolveCloudTtsCandidateUrls(\n env: NodeJS.ProcessEnv = process.env,\n): string[] {\n const base = resolveCloudTtsBaseUrl(env).replace(/\\/+$/, \"\");\n const candidates = new Set<string>();\n\n const addEndpointsForApiV1Base = (baseUrl: string): void => {\n const trimmed = baseUrl.replace(/\\/+$/, \"\");\n candidates.add(`${trimmed}/voice/tts`);\n try {\n const u = new URL(trimmed);\n const path = u.pathname.replace(/\\/+$/, \"\");\n if (path.endsWith(\"/api/v1\")) {\n // Preserve the ElevenLabs-shaped compat route; `/audio/speech` would\n // require OpenAI-style model/voice ids and is intentionally not used.\n candidates.add(`${u.origin}/api/elevenlabs/tts`);\n }\n } catch {\n /* ignore */\n }\n };\n\n addEndpointsForApiV1Base(base);\n try {\n const parsed = new URL(base);\n if (parsed.hostname.startsWith(\"www.\")) {\n parsed.hostname = parsed.hostname.slice(4);\n addEndpointsForApiV1Base(parsed.toString().replace(/\\/$/, \"\"));\n } else {\n parsed.hostname = `www.${parsed.hostname}`;\n addEndpointsForApiV1Base(parsed.toString().replace(/\\/$/, \"\"));\n }\n } catch {\n // no-op\n }\n\n return [...candidates];\n}\n\nexport async function handleCloudTtsPreviewRoute(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n): Promise<boolean> {\n const clientTtsDbg = readTtsDebugClientHeaders(req);\n const dbgExtra = ttsClientDbgFields(clientTtsDbg);\n\n const cloudApiKey = resolveCloudApiKey();\n if (!cloudApiKey) {\n ttsDebug(\"server:cloud-tts:reject\", {\n reason: \"no_api_key\",\n ...dbgExtra,\n });\n sendJsonErrorResponse(\n res,\n 401,\n \"Eliza Cloud is not connected. Connect your Eliza Cloud account first.\",\n );\n return true;\n }\n\n const rawBody = await readRawRequestBody(req);\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(rawBody.toString(\"utf8\")) as Record<string, unknown>;\n } catch {\n sendJsonErrorResponse(res, 400, \"Invalid JSON request body\");\n return true;\n }\n\n const text = sanitizeSpeechText(\n typeof body.text === \"string\" ? body.text : \"\",\n );\n if (!text) {\n sendJsonErrorResponse(res, 400, \"Missing text\");\n return true;\n }\n\n if (text.length > ELIZA_CLOUD_TTS_MAX_TEXT_CHARS) {\n sendJsonErrorResponse(\n res,\n 400,\n `Text too long. Maximum length is ${ELIZA_CLOUD_TTS_MAX_TEXT_CHARS} characters`,\n );\n return true;\n }\n\n const cloudModel = resolveCloudProxyTtsModel(\n pickBodyString(body, \"modelId\", \"model_id\"),\n );\n const cloudVoice = resolveElizaCloudTtsVoiceId(\n pickBodyString(body, \"voiceId\", \"voice_id\"),\n );\n const cloudUrls = resolveCloudTtsCandidateUrls();\n\n const ttsPreview = ttsDebugTextPreview(text);\n ttsDebug(\"server:cloud-tts:proxy\", {\n textChars: text.length,\n preview: ttsPreview,\n modelId: cloudModel,\n voiceId: cloudVoice,\n urlCandidates: cloudUrls.length,\n ...dbgExtra,\n });\n\n try {\n let lastStatus = 0;\n let lastDetails = \"unknown error\";\n let cloudResponse: Response | null = null;\n for (let i = 0; i < cloudUrls.length; i++) {\n const cloudUrl = cloudUrls[i];\n if (cloudUrl === undefined) {\n continue;\n }\n const attempt = await fetch(cloudUrl, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${cloudApiKey}`,\n \"x-api-key\": cloudApiKey,\n \"Content-Type\": \"application/json\",\n Accept: \"audio/mpeg\",\n },\n body: JSON.stringify({\n text,\n voiceId: cloudVoice,\n modelId: cloudModel,\n }),\n });\n\n if (attempt.ok) {\n cloudResponse = attempt;\n ttsDebug(\"server:cloud-tts:upstream-ok\", {\n urlIndex: i,\n status: attempt.status,\n preview: ttsPreview,\n ...dbgExtra,\n });\n break;\n }\n\n lastStatus = attempt.status;\n lastDetails = await attempt.text().catch(() => \"unknown error\");\n ttsDebug(\"server:cloud-tts:upstream-retry\", {\n urlIndex: i,\n status: attempt.status,\n preview: ttsPreview,\n ...dbgExtra,\n });\n\n const hasMoreCandidates = i < cloudUrls.length - 1;\n if (!hasMoreCandidates || !shouldRetryCloudTtsUpstream(attempt.status)) {\n break;\n }\n }\n if (!cloudResponse) {\n ttsDebug(\"server:cloud-tts:reject\", {\n reason: \"upstream_failed\",\n lastStatus,\n preview: ttsPreview,\n ...dbgExtra,\n });\n if (\n lastStatus === 400 ||\n lastStatus === 401 ||\n lastStatus === 402 ||\n lastStatus === 403 ||\n lastStatus === 429\n ) {\n forwardCloudTtsUpstreamError(res, lastStatus, lastDetails);\n return true;\n }\n sendJsonErrorResponse(\n res,\n 502,\n `Eliza Cloud TTS failed (${lastStatus || 502}): ${lastDetails}`,\n );\n return true;\n }\n\n const audioBuffer = Buffer.from(await cloudResponse.arrayBuffer());\n ttsDebug(\"server:cloud-tts:success\", {\n bytes: audioBuffer.length,\n preview: ttsPreview,\n ...dbgExtra,\n });\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", \"audio/mpeg\");\n res.setHeader(\"Cache-Control\", \"no-store\");\n res.end(audioBuffer);\n return true;\n } catch (err) {\n sendJsonErrorResponse(\n res,\n 502,\n `Eliza Cloud TTS request failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n return true;\n }\n}\n\nexport function mirrorCompatHeaders(\n req: Pick<http.IncomingMessage, \"headers\">,\n): void {\n const HEADER_ALIASES = [\n [\"x-elizaos-token\", \"x-eliza-token\"],\n [\"x-elizaos-export-token\", \"x-eliza-export-token\"],\n [\"x-elizaos-client-id\", \"x-eliza-client-id\"],\n [\"x-elizaos-terminal-token\", \"x-eliza-terminal-token\"],\n [\"x-elizaos-ui-language\", \"x-eliza-ui-language\"],\n [\"x-elizaos-agent-action\", \"x-eliza-agent-action\"],\n ] as const;\n\n for (const [appHeader, elizaHeader] of HEADER_ALIASES) {\n const appValue = req.headers[appHeader];\n const elizaValue = req.headers[elizaHeader];\n\n if (appValue != null && elizaValue == null) {\n req.headers[elizaHeader] = appValue;\n }\n\n if (elizaValue != null && appValue == null) {\n req.headers[appHeader] = elizaValue;\n }\n }\n}\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "6733258098F6092A64756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { getElizaNamespace, resolveStateDir, resolveUserPath } from "@elizaos/core";
|
|
2
|
+
export { getElizaNamespace, resolveStateDir, resolveUserPath };
|
|
3
|
+
export declare function resolveConfigPath(env?: NodeJS.ProcessEnv, stateDirPath?: string): string;
|
|
4
|
+
//# sourceMappingURL=state-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-paths.d.ts","sourceRoot":"","sources":["../../src/lib/state-paths.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;AAE/D,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,YAAY,GAAE,MAA6B,GAC1C,MAAM,CAcR"}
|