@elizaos/plugin-elizacloud 2.0.0-beta.1 → 2.0.11-beta.7

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.
Files changed (285) hide show
  1. package/README.md +20 -44
  2. package/auto-enable.ts +10 -5
  3. package/dist/browser/index.browser.js +2 -2
  4. package/dist/browser/index.browser.js.map +4 -4
  5. package/dist/cjs/index.node.cjs +2874 -5915
  6. package/dist/cjs/index.node.js.map +47 -116
  7. package/dist/cloud/auth-service-types.d.ts +8 -0
  8. package/dist/cloud/auth-service-types.d.ts.map +1 -0
  9. package/dist/cloud/auth-service-types.js +36 -0
  10. package/dist/cloud/auth-service-types.js.map +10 -0
  11. package/dist/cloud/auth.js +4 -51
  12. package/dist/cloud/auth.js.map +4 -4
  13. package/dist/cloud/base-url.d.ts +6 -2
  14. package/dist/cloud/base-url.d.ts.map +1 -1
  15. package/dist/cloud/base-url.js +3 -51
  16. package/dist/cloud/base-url.js.map +3 -3
  17. package/dist/cloud/bridge-client.d.ts +3 -3
  18. package/dist/cloud/bridge-client.d.ts.map +1 -1
  19. package/dist/cloud/bridge-client.js +3 -51
  20. package/dist/cloud/bridge-client.js.map +3 -3
  21. package/dist/cloud/clack-observer.d.ts +35 -0
  22. package/dist/cloud/clack-observer.d.ts.map +1 -0
  23. package/dist/cloud/clack-observer.js +143 -0
  24. package/dist/cloud/clack-observer.js.map +10 -0
  25. package/dist/cloud/cloud-manager.js +45 -92
  26. package/dist/cloud/cloud-manager.js.map +6 -6
  27. package/dist/cloud/cloud-wallet.js +2 -4835
  28. package/dist/cloud/cloud-wallet.js.map +3 -82
  29. package/dist/cloud/duffel-client.d.ts +181 -0
  30. package/dist/cloud/duffel-client.d.ts.map +1 -0
  31. package/dist/cloud/duffel-client.js +506 -0
  32. package/dist/cloud/duffel-client.js.map +11 -0
  33. package/dist/cloud/index.d.ts +6 -0
  34. package/dist/cloud/index.d.ts.map +1 -1
  35. package/dist/cloud/index.js +1782 -1
  36. package/dist/cloud/index.js.map +18 -3
  37. package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
  38. package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
  39. package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
  40. package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
  41. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
  42. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
  43. package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
  44. package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
  45. package/dist/cloud/managed-payment-clients.d.ts +166 -0
  46. package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
  47. package/dist/cloud/managed-payment-clients.js +238 -0
  48. package/dist/cloud/managed-payment-clients.js.map +11 -0
  49. package/dist/cloud/null-observer.d.ts +35 -0
  50. package/dist/cloud/null-observer.d.ts.map +1 -0
  51. package/dist/cloud/null-observer.js +45 -0
  52. package/dist/cloud/null-observer.js.map +10 -0
  53. package/dist/cloud/setup-observer.d.ts +98 -0
  54. package/dist/cloud/setup-observer.d.ts.map +1 -0
  55. package/dist/cloud/setup-observer.js +2 -0
  56. package/dist/cloud/setup-observer.js.map +9 -0
  57. package/dist/cloud/validate-url.d.ts.map +1 -1
  58. package/dist/cloud/validate-url.js +2 -1
  59. package/dist/cloud/validate-url.js.map +3 -3
  60. package/dist/cloud/x402-payment-handler.d.ts +85 -0
  61. package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
  62. package/dist/cloud/x402-payment-handler.js +119 -0
  63. package/dist/cloud/x402-payment-handler.js.map +10 -0
  64. package/dist/cloud-setup.d.ts +36 -0
  65. package/dist/cloud-setup.d.ts.map +1 -0
  66. package/dist/{onboarding.js → cloud-setup.js} +139 -139
  67. package/dist/cloud-setup.js.map +14 -0
  68. package/dist/cloud-voice-catalog.d.ts +65 -0
  69. package/dist/cloud-voice-catalog.d.ts.map +1 -0
  70. package/dist/cloud-voice-catalog.js +278 -0
  71. package/dist/cloud-voice-catalog.js.map +12 -0
  72. package/dist/index.browser.d.ts +11 -0
  73. package/dist/index.browser.d.ts.map +1 -1
  74. package/dist/index.d.ts +7 -1
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +5416 -8405
  77. package/dist/index.js.map +48 -116
  78. package/dist/index.node.d.ts +8 -1
  79. package/dist/index.node.d.ts.map +1 -1
  80. package/dist/init.js +17 -4
  81. package/dist/init.js.map +4 -4
  82. package/dist/lib/cloud-connection.d.ts +0 -1
  83. package/dist/lib/cloud-connection.d.ts.map +1 -1
  84. package/dist/lib/cloud-connection.js +14 -91
  85. package/dist/lib/cloud-connection.js.map +7 -7
  86. package/dist/lib/cloud-secrets.d.ts +5 -18
  87. package/dist/lib/cloud-secrets.d.ts.map +1 -1
  88. package/dist/lib/cloud-secrets.js +8 -36
  89. package/dist/lib/cloud-secrets.js.map +3 -3
  90. package/dist/lib/config-like.d.ts +1 -1
  91. package/dist/lib/config-like.d.ts.map +1 -1
  92. package/dist/lib/config-like.js +3 -3
  93. package/dist/lib/config-like.js.map +3 -3
  94. package/dist/lib/credential-type-map.d.ts +1 -1
  95. package/dist/lib/credential-type-map.js.map +1 -1
  96. package/dist/lib/http.d.ts +0 -11
  97. package/dist/lib/http.d.ts.map +1 -1
  98. package/dist/lib/http.js.map +2 -2
  99. package/dist/lib/server-cloud-tts.d.ts +12 -25
  100. package/dist/lib/server-cloud-tts.d.ts.map +1 -1
  101. package/dist/lib/server-cloud-tts.js +31 -329
  102. package/dist/lib/server-cloud-tts.js.map +4 -7
  103. package/dist/lib/tts-debug.d.ts +5 -3
  104. package/dist/lib/tts-debug.d.ts.map +1 -1
  105. package/dist/lib/tts-debug.js +1 -34
  106. package/dist/lib/tts-debug.js.map +3 -4
  107. package/dist/models/embeddings.d.ts.map +1 -1
  108. package/dist/models/embeddings.js +79 -69
  109. package/dist/models/embeddings.js.map +6 -6
  110. package/dist/models/image.d.ts.map +1 -1
  111. package/dist/models/image.js +42 -15
  112. package/dist/models/image.js.map +6 -6
  113. package/dist/models/index.js +676 -166
  114. package/dist/models/index.js.map +11 -12
  115. package/dist/models/research.d.ts.map +1 -1
  116. package/dist/models/research.js +24 -7
  117. package/dist/models/research.js.map +6 -6
  118. package/dist/models/speech.d.ts +61 -3
  119. package/dist/models/speech.d.ts.map +1 -1
  120. package/dist/models/speech.js +173 -17
  121. package/dist/models/speech.js.map +5 -5
  122. package/dist/models/text.d.ts +106 -1
  123. package/dist/models/text.d.ts.map +1 -1
  124. package/dist/models/text.js +452 -82
  125. package/dist/models/text.js.map +7 -8
  126. package/dist/models/tokenization.d.ts.map +1 -1
  127. package/dist/models/tokenization.js.map +2 -2
  128. package/dist/models/transcription.d.ts.map +1 -1
  129. package/dist/models/transcription.js +20 -6
  130. package/dist/models/transcription.js.map +5 -5
  131. package/dist/node/index.node.js +2828 -5838
  132. package/dist/node/index.node.js.map +47 -116
  133. package/dist/plugin.d.ts.map +1 -1
  134. package/dist/plugin.js +376 -5050
  135. package/dist/plugin.js.map +16 -92
  136. package/dist/providers/openai.js +11 -2
  137. package/dist/providers/openai.js.map +3 -3
  138. package/dist/register-routes.js +376 -5050
  139. package/dist/register-routes.js.map +16 -92
  140. package/dist/routes/cloud-billing-routes.d.ts.map +1 -1
  141. package/dist/routes/cloud-billing-routes.js +17 -60
  142. package/dist/routes/cloud-billing-routes.js.map +8 -7
  143. package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
  144. package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
  145. package/dist/routes/cloud-coding-container-routes.js +214 -0
  146. package/dist/routes/cloud-coding-container-routes.js.map +11 -0
  147. package/dist/routes/cloud-compat-routes.d.ts.map +1 -1
  148. package/dist/routes/cloud-compat-routes.js +17 -60
  149. package/dist/routes/cloud-compat-routes.js.map +8 -7
  150. package/dist/routes/cloud-features-routes.js +2 -2
  151. package/dist/routes/cloud-features-routes.js.map +4 -4
  152. package/dist/routes/cloud-relay-routes.d.ts +2 -1
  153. package/dist/routes/cloud-relay-routes.d.ts.map +1 -1
  154. package/dist/routes/cloud-relay-routes.js +84 -2
  155. package/dist/routes/cloud-relay-routes.js.map +5 -4
  156. package/dist/routes/cloud-routes-autonomous.d.ts +3 -4
  157. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -1
  158. package/dist/routes/cloud-routes-autonomous.js +11 -4893
  159. package/dist/routes/cloud-routes-autonomous.js.map +8 -87
  160. package/dist/routes/cloud-routes.d.ts +2 -2
  161. package/dist/routes/cloud-routes.d.ts.map +1 -1
  162. package/dist/routes/cloud-routes.js +343 -5058
  163. package/dist/routes/cloud-routes.js.map +13 -90
  164. package/dist/routes/cloud-status-routes-autonomous.d.ts +1 -2
  165. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -1
  166. package/dist/routes/cloud-status-routes-autonomous.js +4 -51
  167. package/dist/routes/cloud-status-routes-autonomous.js.map +5 -5
  168. package/dist/routes/cloud-status-routes.js +14 -90
  169. package/dist/routes/cloud-status-routes.js.map +7 -7
  170. package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
  171. package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
  172. package/dist/routes/home-remote-runner-access-url.js +91 -0
  173. package/dist/routes/home-remote-runner-access-url.js.map +10 -0
  174. package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
  175. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  176. package/dist/routes/travel-provider-relay-routes.js +358 -0
  177. package/dist/routes/travel-provider-relay-routes.js.map +14 -0
  178. package/dist/services/cloud-auth.d.ts +1 -1
  179. package/dist/services/cloud-auth.d.ts.map +1 -1
  180. package/dist/services/cloud-auth.js +7 -2
  181. package/dist/services/cloud-auth.js.map +4 -4
  182. package/dist/services/cloud-backup.js.map +2 -2
  183. package/dist/services/cloud-bootstrap.d.ts.map +1 -1
  184. package/dist/services/cloud-bootstrap.js.map +2 -2
  185. package/dist/services/cloud-bridge.js.map +3 -3
  186. package/dist/services/cloud-container.d.ts +5 -1
  187. package/dist/services/cloud-container.d.ts.map +1 -1
  188. package/dist/services/cloud-container.js +52 -1
  189. package/dist/services/cloud-container.js.map +4 -4
  190. package/dist/services/cloud-credential-provider.js.map +2 -2
  191. package/dist/services/cloud-model-registry.js.map +2 -2
  192. package/dist/types/cloud.d.ts +1 -0
  193. package/dist/types/cloud.d.ts.map +1 -1
  194. package/dist/types/cloud.js.map +2 -2
  195. package/dist/types/index.d.ts +1 -1
  196. package/dist/types/index.d.ts.map +1 -1
  197. package/dist/utils/cloud-sdk/client.d.ts.map +1 -1
  198. package/dist/utils/cloud-sdk/client.js +136 -4
  199. package/dist/utils/cloud-sdk/client.js.map +5 -5
  200. package/dist/utils/cloud-sdk/http.js.map +1 -1
  201. package/dist/utils/cloud-sdk/public-routes.d.ts +186 -0
  202. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -1
  203. package/dist/utils/cloud-sdk/public-routes.js +99 -1
  204. package/dist/utils/cloud-sdk/public-routes.js.map +3 -3
  205. package/dist/utils/cloud-sdk/types.d.ts +0 -2
  206. package/dist/utils/cloud-sdk/types.d.ts.map +1 -1
  207. package/dist/utils/cloud-sdk/types.js.map +1 -1
  208. package/dist/utils/config.d.ts +10 -1
  209. package/dist/utils/config.d.ts.map +1 -1
  210. package/dist/utils/config.js +12 -2
  211. package/dist/utils/config.js.map +3 -3
  212. package/dist/utils/events.d.ts +23 -2
  213. package/dist/utils/events.d.ts.map +1 -1
  214. package/dist/utils/events.js +5 -3
  215. package/dist/utils/events.js.map +3 -3
  216. package/dist/utils/sdk-client.d.ts.map +1 -1
  217. package/dist/utils/sdk-client.js +17 -4
  218. package/dist/utils/sdk-client.js.map +4 -4
  219. package/dist/utils/waifu-metering.d.ts +108 -0
  220. package/dist/utils/waifu-metering.d.ts.map +1 -0
  221. package/dist/utils/waifu-metering.js +166 -0
  222. package/dist/utils/waifu-metering.js.map +10 -0
  223. package/package.json +51 -22
  224. package/src/cloud/auth-service-types.ts +24 -0
  225. package/src/cloud/base-url.ts +6 -62
  226. package/src/cloud/clack-observer.ts +189 -0
  227. package/src/cloud/duffel-client.ts +847 -0
  228. package/src/cloud/index.ts +10 -0
  229. package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
  230. package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
  231. package/src/cloud/managed-payment-clients.ts +374 -0
  232. package/src/cloud/null-observer.ts +45 -0
  233. package/src/cloud/setup-observer.ts +125 -0
  234. package/src/cloud/validate-url.ts +7 -1
  235. package/src/cloud/x402-payment-handler.ts +215 -0
  236. package/src/cloud-setup.ts +531 -0
  237. package/src/cloud-voice-catalog.test.ts +254 -0
  238. package/src/cloud-voice-catalog.ts +246 -0
  239. package/src/index.browser.ts +29 -0
  240. package/src/index.node.ts +31 -1
  241. package/src/index.ts +76 -4
  242. package/src/lib/cloud-connection.ts +2 -4
  243. package/src/lib/cloud-secrets.ts +10 -54
  244. package/src/lib/config-like.ts +1 -1
  245. package/src/lib/credential-type-map.ts +2 -2
  246. package/src/lib/http.ts +0 -17
  247. package/src/lib/server-cloud-tts.ts +33 -341
  248. package/src/lib/tts-debug.ts +5 -34
  249. package/src/models/embeddings.ts +140 -76
  250. package/src/models/image.ts +29 -14
  251. package/src/models/research.ts +11 -1
  252. package/src/models/speech.ts +269 -23
  253. package/src/models/text.ts +704 -110
  254. package/src/models/tokenization.ts +2 -2
  255. package/src/models/transcription.ts +7 -3
  256. package/src/plugin.ts +38 -0
  257. package/src/routes/cloud-billing-routes.ts +4 -14
  258. package/src/routes/cloud-coding-container-routes.ts +198 -0
  259. package/src/routes/cloud-compat-routes.ts +4 -14
  260. package/src/routes/cloud-features-routes.ts +1 -1
  261. package/src/routes/cloud-relay-routes.ts +47 -1
  262. package/src/routes/cloud-routes-autonomous.ts +7 -10
  263. package/src/routes/cloud-routes.ts +68 -7
  264. package/src/routes/cloud-status-routes-autonomous.ts +6 -2
  265. package/src/routes/home-remote-runner-access-url.ts +83 -0
  266. package/src/routes/travel-provider-relay-routes.ts +193 -0
  267. package/src/services/cloud-auth.ts +9 -2
  268. package/src/services/cloud-bootstrap.ts +1 -3
  269. package/src/services/cloud-bridge.ts +1 -1
  270. package/src/services/cloud-container.ts +93 -0
  271. package/src/services/cloud-credential-provider.ts +1 -1
  272. package/src/services/cloud-model-registry.ts +1 -1
  273. package/src/types/cloud.ts +22 -0
  274. package/src/types/index.ts +19 -0
  275. package/src/utils/cloud-sdk/client.ts +42 -3
  276. package/src/utils/cloud-sdk/public-routes.ts +168 -0
  277. package/src/utils/cloud-sdk/types.ts +0 -2
  278. package/src/utils/config.ts +20 -1
  279. package/src/utils/events.ts +30 -2
  280. package/src/utils/sdk-client.ts +5 -1
  281. package/src/utils/waifu-metering.ts +302 -0
  282. package/dist/onboarding.d.ts +0 -35
  283. package/dist/onboarding.d.ts.map +0 -1
  284. package/dist/onboarding.js.map +0 -14
  285. package/src/onboarding.ts +0 -396
@@ -1,5 +1,4 @@
1
- import type { AgentRuntime } from "@elizaos/core";
2
- import type { RouteHelpers, RouteRequestMeta } from "../lib/http";
1
+ import type { AgentRuntime, RouteHelpers, RouteRequestMeta } from "@elizaos/core";
3
2
  export interface CloudConfigLike {
4
3
  cloud?: {
5
4
  enabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-status-routes-autonomous.d.ts","sourceRoot":"","sources":["../../src/routes/cloud-status-routes-autonomous.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,eAAe,CAAC;AAI3D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAiBlE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,uBACf,SAAQ,gBAAgB,EACtB,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAmED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,OAAO,CAAC,CA6HlB"}
1
+ {"version":3,"file":"cloud-status-routes-autonomous.d.ts","sourceRoot":"","sources":["../../src/routes/cloud-status-routes-autonomous.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAEjB,MAAM,eAAe,CAAC;AAoBvB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,uBACf,SAAQ,gBAAgB,EACtB,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAmED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,OAAO,CAAC,CA6HlB"}
@@ -17,56 +17,8 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
17
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
18
18
 
19
19
  // src/cloud/base-url.ts
20
- function isLoopbackHost(hostname) {
21
- const normalized = hostname.toLowerCase();
22
- return normalized === "localhost" || normalized === "::1" || normalized === "0:0:0:0:0:0:0:1" || normalized.startsWith("127.");
23
- }
24
- function trimApiPath(pathname) {
25
- const normalized = pathname.trim().replace(/\/+$/, "");
26
- if (!normalized)
27
- return "";
28
- if (normalized === "/api/v1")
29
- return "";
30
- if (normalized.endsWith("/api/v1")) {
31
- return normalized.slice(0, -"/api/v1".length);
32
- }
33
- return normalized;
34
- }
35
- function normalizeCloudSiteUrl(rawUrl) {
36
- const envOverride = process.env.ELIZAOS_CLOUD_BASE_URL?.trim();
37
- const candidate = envOverride || rawUrl?.trim() || DEFAULT_CLOUD_SITE_URL;
38
- try {
39
- const parsed = new URL(candidate);
40
- const pathname = trimApiPath(parsed.pathname);
41
- const host = parsed.hostname.toLowerCase();
42
- const preserveLocalOrigin = isLoopbackHost(host);
43
- parsed.hash = "";
44
- parsed.search = "";
45
- if (!preserveLocalOrigin) {
46
- parsed.protocol = "https:";
47
- parsed.port = "";
48
- }
49
- parsed.pathname = pathname;
50
- if (LEGACY_CLOUD_HOST_ALIASES.has(host)) {
51
- parsed.hostname = "www.elizacloud.ai";
52
- parsed.pathname = "";
53
- }
54
- return parsed.toString().replace(/\/{1,1024}$/, "");
55
- } catch {
56
- const safeCandidate = candidate.length > 8192 ? candidate.slice(0, 8192) : candidate;
57
- return safeCandidate.replace(/\/{1,1024}$/, "");
58
- }
59
- }
60
- function resolveCloudApiBaseUrl(rawUrl) {
61
- return `${normalizeCloudSiteUrl(rawUrl)}/api/v1`;
62
- }
63
- var DEFAULT_CLOUD_SITE_URL = "https://www.elizacloud.ai", LEGACY_CLOUD_HOST_ALIASES;
64
- var init_base_url = __esm(() => {
65
- LEGACY_CLOUD_HOST_ALIASES = new Set([
66
- "elizacloud.ai",
67
- "www.elizacloud.ai"
68
- ]);
69
- });
20
+ import { normalizeCloudSiteUrl, resolveCloudApiBaseUrl } from "@elizaos/shared";
21
+ var init_base_url = () => {};
70
22
 
71
23
  // src/cloud/validate-url.ts
72
24
  import dns from "node:dns";
@@ -177,6 +129,7 @@ async function validateCloudBaseUrl(rawUrl) {
177
129
  if (hostname === "localhost" || hostname.endsWith(".localhost") || hostname.endsWith(".local")) {
178
130
  return `Cloud base URL "${rawUrl}" points to a blocked local hostname.`;
179
131
  }
132
+ const elizaDev = process.env.ELIZA_DEV?.trim().toLowerCase();
180
133
  if (true) {
181
134
  return null;
182
135
  }
@@ -393,4 +346,4 @@ export {
393
346
  handleCloudStatusRoutes
394
347
  };
395
348
 
396
- //# debugId=C999B4B78B8C30DD64756E2164756E21
349
+ //# debugId=452BB0A3AD20687764756E2164756E21
@@ -2,12 +2,12 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/cloud/base-url.ts", "../src/cloud/validate-url.ts", "../src/cloud/cloud-api-key.ts", "../src/routes/cloud-status-routes-autonomous.ts"],
4
4
  "sourcesContent": [
5
- "const DEFAULT_CLOUD_SITE_URL = \"https://www.elizacloud.ai\";\n\nconst LEGACY_CLOUD_HOST_ALIASES = new Set([\n \"elizacloud.ai\",\n \"www.elizacloud.ai\",\n]);\n\nfunction isLoopbackHost(hostname: string): boolean {\n const normalized = hostname.toLowerCase();\n return (\n normalized === \"localhost\" ||\n normalized === \"::1\" ||\n normalized === \"0:0:0:0:0:0:0:1\" ||\n normalized.startsWith(\"127.\")\n );\n}\n\nfunction trimApiPath(pathname: string): string {\n const normalized = pathname.trim().replace(/\\/+$/, \"\");\n if (!normalized) return \"\";\n if (normalized === \"/api/v1\") return \"\";\n if (normalized.endsWith(\"/api/v1\")) {\n return normalized.slice(0, -\"/api/v1\".length);\n }\n return normalized;\n}\n\nexport function normalizeCloudSiteUrl(rawUrl?: string): string {\n // Allow cloud-provisioned containers to override the base URL via env var\n const envOverride = process.env.ELIZAOS_CLOUD_BASE_URL?.trim();\n const candidate = envOverride || rawUrl?.trim() || DEFAULT_CLOUD_SITE_URL;\n\n try {\n const parsed = new URL(candidate);\n const pathname = trimApiPath(parsed.pathname);\n const host = parsed.hostname.toLowerCase();\n const preserveLocalOrigin = isLoopbackHost(host);\n\n parsed.hash = \"\";\n parsed.search = \"\";\n if (!preserveLocalOrigin) {\n parsed.protocol = \"https:\";\n parsed.port = \"\";\n }\n parsed.pathname = pathname;\n\n if (LEGACY_CLOUD_HOST_ALIASES.has(host)) {\n parsed.hostname = \"www.elizacloud.ai\";\n parsed.pathname = \"\";\n }\n\n return parsed.toString().replace(/\\/{1,1024}$/, \"\");\n } catch {\n const safeCandidate =\n candidate.length > 8192 ? candidate.slice(0, 8192) : candidate;\n return safeCandidate.replace(/\\/{1,1024}$/, \"\");\n }\n}\n\nexport function resolveCloudApiBaseUrl(rawUrl?: string): string {\n return `${normalizeCloudSiteUrl(rawUrl)}/api/v1`;\n}\n",
6
- "import dns from \"node:dns\";\nimport net from \"node:net\";\nimport { promisify } from \"node:util\";\n\nconst dnsLookupAll = promisify(dns.lookup);\n\nconst BLOCKED_IPV4_CIDRS: Array<{ base: number; mask: number }> = [\n cidrV4(\"0.0.0.0\", 8),\n cidrV4(\"10.0.0.0\", 8),\n cidrV4(\"172.16.0.0\", 12),\n cidrV4(\"192.168.0.0\", 16),\n cidrV4(\"100.64.0.0\", 10),\n cidrV4(\"127.0.0.0\", 8),\n cidrV4(\"169.254.0.0\", 16),\n cidrV4(\"192.0.0.0\", 24),\n cidrV4(\"198.18.0.0\", 15),\n cidrV4(\"192.0.2.0\", 24),\n cidrV4(\"198.51.100.0\", 24),\n cidrV4(\"203.0.113.0\", 24),\n cidrV4(\"224.0.0.0\", 4),\n cidrV4(\"240.0.0.0\", 4),\n];\n\nfunction normalizeHostLike(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^\\[|\\]$/g, \"\");\n}\n\nfunction decodeIpv6MappedHex(mapped: string): string | null {\n const parts = mapped.split(\":\");\n if (parts.length < 1 || parts.length > 2) return null;\n\n const parsed = parts.map((part) => {\n if (!/^[0-9a-f]{1,4}$/i.test(part)) return Number.NaN;\n return Number.parseInt(part, 16);\n });\n if (parsed.some((value) => !Number.isFinite(value))) return null;\n\n const [hi, lo] = parsed.length === 1 ? [0, parsed[0]] : parsed;\n const octets = [hi >> 8, hi & 0xff, lo >> 8, lo & 0xff];\n return octets.join(\".\");\n}\n\nfunction canonicalizeIpv6(ip: string): string | null {\n try {\n return new URL(`http://[${ip}]/`).hostname.replace(/^\\[|\\]$/g, \"\");\n } catch {\n return null;\n }\n}\n\nfunction normalizeIpForPolicy(ip: string): string {\n const base = normalizeHostLike(ip).split(\"%\")[0];\n if (!base) return base;\n\n let normalized = base;\n if (net.isIP(normalized) === 6) {\n normalized = canonicalizeIpv6(normalized) ?? normalized;\n }\n\n let mapped: string | null = null;\n if (normalized.startsWith(\"::ffff:\")) {\n mapped = normalized.slice(\"::ffff:\".length);\n } else if (normalized.startsWith(\"0:0:0:0:0:ffff:\")) {\n mapped = normalized.slice(\"0:0:0:0:0:ffff:\".length);\n }\n if (!mapped) return normalized;\n\n if (net.isIP(mapped) === 4) return mapped;\n return decodeIpv6MappedHex(mapped) ?? normalized;\n}\n\nfunction cidrV4(base: string, prefix: number): { base: number; mask: number } {\n const parsed = parseIpv4ToInt(base);\n if (parsed === null) {\n throw new Error(`Invalid CIDR base IPv4 address: ${base}`);\n }\n const shift = 32 - prefix;\n const mask = shift === 32 ? 0 : (0xffffffff << shift) >>> 0;\n return { base: parsed & mask, mask };\n}\n\nfunction parseIpv4ToInt(ip: string): number | null {\n const parts = ip.split(\".\");\n if (parts.length !== 4) return null;\n\n let value = 0;\n for (const part of parts) {\n if (!/^\\d{1,3}$/.test(part)) return null;\n const octet = Number.parseInt(part, 10);\n if (!Number.isInteger(octet) || octet < 0 || octet > 255) return null;\n value = (value << 8) | octet;\n }\n\n return value >>> 0;\n}\n\nfunction isBlockedIpv4(ip: string): boolean {\n const asInt = parseIpv4ToInt(ip);\n if (asInt === null) return true;\n return BLOCKED_IPV4_CIDRS.some((cidr) => (asInt & cidr.mask) === cidr.base);\n}\n\nfunction isBlockedIpv6(ip: string): boolean {\n const normalized = ip.toLowerCase();\n return (\n normalized === \"::\" ||\n normalized === \"::1\" ||\n /^fe[89ab][0-9a-f]:/.test(normalized) ||\n /^f[cd][0-9a-f]{2}:/i.test(normalized) ||\n normalized.startsWith(\"ff\")\n );\n}\n\nfunction isBlockedIp(ip: string): boolean {\n const normalized = normalizeIpForPolicy(ip);\n const family = net.isIP(normalized);\n if (family === 4) return isBlockedIpv4(normalized);\n if (family === 6) return isBlockedIpv6(normalized);\n return false;\n}\n\nexport async function validateCloudBaseUrl(\n rawUrl: string,\n): Promise<string | null> {\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (parsed.protocol !== \"https:\") {\n return `Cloud base URL must use HTTPS, got \"${parsed.protocol}\" in \"${rawUrl}\"`;\n }\n\n const hostname = normalizeHostLike(parsed.hostname);\n if (!hostname) {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (\n hostname === \"localhost\" ||\n hostname.endsWith(\".localhost\") ||\n hostname.endsWith(\".local\")\n ) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked local hostname.`;\n }\n\n // Dev-mode bypass: skip IP-range blocking but keep URL format checks above.\n if (process.env.NODE_ENV === \"development\" || process.env.ELIZA_DEV) {\n return null;\n }\n\n if (isBlockedIp(hostname)) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked address.`;\n }\n\n try {\n const results = await dnsLookupAll(hostname, { all: true });\n const addresses = Array.isArray(results) ? results : [results];\n for (const entry of addresses) {\n const ip =\n typeof entry === \"string\"\n ? entry\n : (entry as { address: string }).address;\n if (isBlockedIp(ip)) {\n return (\n `Cloud base URL \"${rawUrl}\" resolves to ${ip}, ` +\n \"which is a blocked internal/metadata address.\"\n );\n }\n }\n } catch {\n return `Cloud base URL \"${rawUrl}\" could not be resolved via DNS.`;\n }\n\n return null;\n}\n",
5
+ "/**\n * Cloud site/API URL normalizer. The implementation moved to\n * `@elizaos/shared/elizacloud/base-url` so host-layer packages can normalize\n * URLs without reverse-importing this plugin.\n */\nexport { normalizeCloudSiteUrl, resolveCloudApiBaseUrl } from \"@elizaos/shared\";\n",
6
+ "import dns from \"node:dns\";\nimport net from \"node:net\";\nimport { promisify } from \"node:util\";\n\nconst dnsLookupAll = promisify(dns.lookup);\n\nconst BLOCKED_IPV4_CIDRS: Array<{ base: number; mask: number }> = [\n cidrV4(\"0.0.0.0\", 8),\n cidrV4(\"10.0.0.0\", 8),\n cidrV4(\"172.16.0.0\", 12),\n cidrV4(\"192.168.0.0\", 16),\n cidrV4(\"100.64.0.0\", 10),\n cidrV4(\"127.0.0.0\", 8),\n cidrV4(\"169.254.0.0\", 16),\n cidrV4(\"192.0.0.0\", 24),\n cidrV4(\"198.18.0.0\", 15),\n cidrV4(\"192.0.2.0\", 24),\n cidrV4(\"198.51.100.0\", 24),\n cidrV4(\"203.0.113.0\", 24),\n cidrV4(\"224.0.0.0\", 4),\n cidrV4(\"240.0.0.0\", 4),\n];\n\nfunction normalizeHostLike(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^\\[|\\]$/g, \"\");\n}\n\nfunction decodeIpv6MappedHex(mapped: string): string | null {\n const parts = mapped.split(\":\");\n if (parts.length < 1 || parts.length > 2) return null;\n\n const parsed = parts.map((part) => {\n if (!/^[0-9a-f]{1,4}$/i.test(part)) return Number.NaN;\n return Number.parseInt(part, 16);\n });\n if (parsed.some((value) => !Number.isFinite(value))) return null;\n\n const [hi, lo] = parsed.length === 1 ? [0, parsed[0]] : parsed;\n const octets = [hi >> 8, hi & 0xff, lo >> 8, lo & 0xff];\n return octets.join(\".\");\n}\n\nfunction canonicalizeIpv6(ip: string): string | null {\n try {\n return new URL(`http://[${ip}]/`).hostname.replace(/^\\[|\\]$/g, \"\");\n } catch {\n return null;\n }\n}\n\nfunction normalizeIpForPolicy(ip: string): string {\n const base = normalizeHostLike(ip).split(\"%\")[0];\n if (!base) return base;\n\n let normalized = base;\n if (net.isIP(normalized) === 6) {\n normalized = canonicalizeIpv6(normalized) ?? normalized;\n }\n\n let mapped: string | null = null;\n if (normalized.startsWith(\"::ffff:\")) {\n mapped = normalized.slice(\"::ffff:\".length);\n } else if (normalized.startsWith(\"0:0:0:0:0:ffff:\")) {\n mapped = normalized.slice(\"0:0:0:0:0:ffff:\".length);\n }\n if (!mapped) return normalized;\n\n if (net.isIP(mapped) === 4) return mapped;\n return decodeIpv6MappedHex(mapped) ?? normalized;\n}\n\nfunction cidrV4(base: string, prefix: number): { base: number; mask: number } {\n const parsed = parseIpv4ToInt(base);\n if (parsed === null) {\n throw new Error(`Invalid CIDR base IPv4 address: ${base}`);\n }\n const shift = 32 - prefix;\n const mask = shift === 32 ? 0 : (0xffffffff << shift) >>> 0;\n return { base: parsed & mask, mask };\n}\n\nfunction parseIpv4ToInt(ip: string): number | null {\n const parts = ip.split(\".\");\n if (parts.length !== 4) return null;\n\n let value = 0;\n for (const part of parts) {\n if (!/^\\d{1,3}$/.test(part)) return null;\n const octet = Number.parseInt(part, 10);\n if (!Number.isInteger(octet) || octet < 0 || octet > 255) return null;\n value = (value << 8) | octet;\n }\n\n return value >>> 0;\n}\n\nfunction isBlockedIpv4(ip: string): boolean {\n const asInt = parseIpv4ToInt(ip);\n if (asInt === null) return true;\n return BLOCKED_IPV4_CIDRS.some((cidr) => (asInt & cidr.mask) === cidr.base);\n}\n\nfunction isBlockedIpv6(ip: string): boolean {\n const normalized = ip.toLowerCase();\n return (\n normalized === \"::\" ||\n normalized === \"::1\" ||\n /^fe[89ab][0-9a-f]:/.test(normalized) ||\n /^f[cd][0-9a-f]{2}:/i.test(normalized) ||\n normalized.startsWith(\"ff\")\n );\n}\n\nfunction isBlockedIp(ip: string): boolean {\n const normalized = normalizeIpForPolicy(ip);\n const family = net.isIP(normalized);\n if (family === 4) return isBlockedIpv4(normalized);\n if (family === 6) return isBlockedIpv6(normalized);\n return false;\n}\n\nexport async function validateCloudBaseUrl(\n rawUrl: string,\n): Promise<string | null> {\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (parsed.protocol !== \"https:\") {\n return `Cloud base URL must use HTTPS, got \"${parsed.protocol}\" in \"${rawUrl}\"`;\n }\n\n const hostname = normalizeHostLike(parsed.hostname);\n if (!hostname) {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (\n hostname === \"localhost\" ||\n hostname.endsWith(\".localhost\") ||\n hostname.endsWith(\".local\")\n ) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked local hostname.`;\n }\n\n // Dev-mode bypass: skip IP-range blocking but keep URL format checks above.\n const elizaDev = process.env.ELIZA_DEV?.trim().toLowerCase();\n if (\n process.env.NODE_ENV === \"development\" ||\n elizaDev === \"1\" ||\n elizaDev === \"true\" ||\n elizaDev === \"yes\"\n ) {\n return null;\n }\n\n if (isBlockedIp(hostname)) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked address.`;\n }\n\n try {\n const results = await dnsLookupAll(hostname, { all: true });\n const addresses = Array.isArray(results) ? results : [results];\n for (const entry of addresses) {\n const ip =\n typeof entry === \"string\"\n ? entry\n : (entry as { address: string }).address;\n if (isBlockedIp(ip)) {\n return (\n `Cloud base URL \"${rawUrl}\" resolves to ${ip}, ` +\n \"which is a blocked internal/metadata address.\"\n );\n }\n }\n } catch {\n return `Cloud base URL \"${rawUrl}\" could not be resolved via DNS.`;\n }\n\n return null;\n}\n",
7
7
  "/**\n * Cloud API key + base URL resolution.\n *\n * Resolves the Eliza Cloud API key and base URL from (in priority order):\n * 1. Explicit `config.cloud.apiKey` / `config.cloud.baseUrl`\n * 2. Runtime settings + character secrets (`ELIZAOS_CLOUD_API_KEY`)\n * 3. Process env (`ELIZAOS_CLOUD_API_KEY`, `ELIZAOS_CLOUD_BASE_URL`)\n *\n * Previously these helpers lived in `packages/agent/src/api/wallet-rpc.ts`\n * because the wallet uses Cloud RPC proxies. They are NOT wallet-specific —\n * cloud auth is consumed by cloud-status, cloud-billing, cloud-compat,\n * health, x-relay, and travel-provider-relay routes. Hosting them under\n * `cloud/` matches their actual ownership.\n */\n\nimport type { ElizaConfig } from \"../lib/config-like\";\n\nexport const DEFAULT_CLOUD_API_BASE_URL = \"https://elizacloud.ai/api/v1\";\n\nexport type CloudApiKeyRuntimeLike = {\n getSetting?: (key: string) => unknown;\n character?: {\n secrets?: Record<string, unknown>;\n } | null;\n} | null;\n\nexport function normalizeCloudSecret(\n value: string | null | undefined,\n): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction resolveRuntimeCloudApiKey(\n runtime?: CloudApiKeyRuntimeLike,\n): string | null {\n const fromSetting = runtime?.getSetting?.(\"ELIZAOS_CLOUD_API_KEY\");\n if (typeof fromSetting === \"string\") {\n return normalizeCloudSecret(fromSetting);\n }\n\n const fromSecrets = runtime?.character?.secrets?.ELIZAOS_CLOUD_API_KEY;\n return typeof fromSecrets === \"string\"\n ? normalizeCloudSecret(fromSecrets)\n : null;\n}\n\nexport function resolveCloudApiBaseUrl(\n rawBaseUrl?: string | null,\n): string | null {\n const candidate =\n normalizeCloudSecret(rawBaseUrl ?? process.env.ELIZAOS_CLOUD_BASE_URL) ??\n DEFAULT_CLOUD_API_BASE_URL;\n try {\n const parsed = new URL(candidate);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return null;\n }\n parsed.hash = \"\";\n parsed.search = \"\";\n const normalizedBase = parsed.toString().replace(/\\/+$/, \"\");\n return normalizedBase.endsWith(\"/api/v1\")\n ? normalizedBase\n : `${normalizedBase}/api/v1`;\n } catch {\n return null;\n }\n}\n\nexport function resolveCloudApiKey(\n config?: Pick<ElizaConfig, \"cloud\"> | null,\n runtime?: CloudApiKeyRuntimeLike,\n): string | null {\n return normalizeCloudSecret(\n config?.cloud?.apiKey ??\n resolveRuntimeCloudApiKey(runtime) ??\n process.env.ELIZAOS_CLOUD_API_KEY,\n );\n}\n",
8
- "import {\n isCloudInferenceSelectedInConfig,\n isElizaCloudServiceSelectedInConfig,\n migrateLegacyRuntimeConfig,\n} from \"@elizaos/core\";\nimport type { AgentRuntime, Service } from \"@elizaos/core\";\nimport { resolveCloudApiBaseUrl as resolveCanonicalCloudApiBaseUrl } from \"../cloud/base-url.js\";\nimport { resolveCloudApiKey } from \"../cloud/cloud-api-key.js\";\nimport { validateCloudBaseUrl } from \"../cloud/validate-url.js\";\nimport type { RouteHelpers, RouteRequestMeta } from \"../lib/http\";\n\nconst DEFAULT_CLOUD_API_BASE_URL = \"https://www.elizacloud.ai/api/v1\";\nconst CLOUD_BILLING_URL =\n \"https://www.elizacloud.ai/dashboard/settings?tab=billing\";\n\ninterface CloudAuthIdentityService {\n isAuthenticated: () => boolean;\n getUserId?: () => string | undefined;\n getOrganizationId?: () => string | undefined;\n}\n\ninterface CloudAuthCreditsService {\n isAuthenticated: () => boolean;\n getClient: () => { get: <T>(path: string) => Promise<T> };\n}\n\nexport interface CloudConfigLike {\n cloud?: {\n enabled?: boolean;\n apiKey?: string;\n baseUrl?: string;\n };\n}\n\nexport interface CloudStatusRouteContext\n extends RouteRequestMeta,\n Pick<RouteHelpers, \"json\"> {\n config: CloudConfigLike;\n runtime: AgentRuntime | null;\n}\n\nfunction resolveCloudApiBaseUrl(rawBaseUrl?: string): string {\n return resolveCanonicalCloudApiBaseUrl(\n rawBaseUrl ?? DEFAULT_CLOUD_API_BASE_URL,\n );\n}\n\n/**\n * Coerce an Eliza Cloud `balance` field into a number. The cloud API\n * returns `balance` as `string | number` — string when upstream is using\n * fixed-precision decimals, number when arithmetic'd. Treat both as the\n * same dollar amount.\n */\nfunction coerceCloudBalance(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nasync function fetchCloudCreditsByApiKey(\n baseUrl: string,\n apiKey: string,\n): Promise<number | null> {\n const response = await fetch(`${baseUrl}/credits/balance`, {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n redirect: \"manual\",\n signal: AbortSignal.timeout(10_000),\n });\n\n if (response.status >= 300 && response.status < 400) {\n throw new Error(\n \"Cloud credits request was redirected; redirects are not allowed\",\n );\n }\n\n const creditResponse = (await response.json().catch(() => ({}))) as Record<\n string,\n unknown\n >;\n\n if (!response.ok) {\n const message =\n typeof creditResponse.error === \"string\" && creditResponse.error.trim()\n ? creditResponse.error\n : `HTTP ${response.status}`;\n throw new Error(message);\n }\n\n const balance =\n coerceCloudBalance(creditResponse.balance) ??\n coerceCloudBalance(\n (creditResponse.data as Record<string, unknown> | undefined)?.balance,\n );\n return balance;\n}\n\nexport async function handleCloudStatusRoutes(\n ctx: CloudStatusRouteContext,\n): Promise<boolean> {\n const { res, method, pathname, config, runtime, json } = ctx;\n\n if (method === \"GET\" && pathname === \"/api/cloud/status\") {\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n const cloudEnabled = isCloudInferenceSelectedInConfig(\n config as Record<string, unknown>,\n );\n const cloudVoiceProxyAvailable = isElizaCloudServiceSelectedInConfig(\n config as Record<string, unknown>,\n \"tts\",\n );\n const configApiKey = resolveCloudApiKey(config, runtime);\n const hasApiKey = Boolean(configApiKey);\n const cloudAuth = runtime\n ? runtime.getService<Service & CloudAuthIdentityService>(\"CLOUD_AUTH\")\n : null;\n const authConnected = Boolean(cloudAuth?.isAuthenticated());\n\n if (authConnected || hasApiKey) {\n json(res, {\n connected: true,\n enabled: cloudEnabled,\n cloudVoiceProxyAvailable,\n hasApiKey,\n userId: authConnected ? cloudAuth?.getUserId?.() : undefined,\n organizationId: authConnected\n ? cloudAuth?.getOrganizationId?.()\n : undefined,\n topUpUrl: CLOUD_BILLING_URL,\n reason: authConnected\n ? undefined\n : runtime\n ? \"api_key_present_not_authenticated\"\n : \"api_key_present_runtime_not_started\",\n });\n return true;\n }\n\n if (!runtime) {\n json(res, {\n connected: false,\n enabled: cloudEnabled,\n cloudVoiceProxyAvailable,\n hasApiKey,\n reason: \"runtime_not_started\",\n });\n return true;\n }\n\n json(res, {\n connected: false,\n enabled: cloudEnabled,\n cloudVoiceProxyAvailable,\n hasApiKey,\n reason: \"not_authenticated\",\n });\n return true;\n }\n\n if (method === \"GET\" && pathname === \"/api/cloud/credits\") {\n const cloudAuth = runtime\n ? runtime.getService<Service & CloudAuthCreditsService>(\"CLOUD_AUTH\")\n : null;\n const configApiKey = resolveCloudApiKey(config, runtime);\n\n if (!cloudAuth?.isAuthenticated()) {\n if (!configApiKey) {\n json(res, { balance: null, connected: false });\n return true;\n }\n\n const resolvedBaseUrl = resolveCloudApiBaseUrl(config.cloud?.baseUrl);\n const baseUrlRejection = await validateCloudBaseUrl(resolvedBaseUrl);\n if (baseUrlRejection) {\n json(res, { balance: null, connected: true, error: baseUrlRejection });\n return true;\n }\n\n const balance = await fetchCloudCreditsByApiKey(\n resolvedBaseUrl,\n configApiKey,\n );\n if (typeof balance !== \"number\") {\n throw new Error(\"unexpected response\");\n }\n const low = balance < 2.0;\n const critical = balance < 0.5;\n json(res, {\n connected: true,\n balance,\n low,\n critical,\n topUpUrl: CLOUD_BILLING_URL,\n });\n return true;\n }\n\n const client = cloudAuth.getClient();\n const creditResponse =\n await client.get<Record<string, unknown>>(\"/credits/balance\");\n const balance =\n coerceCloudBalance(creditResponse?.balance) ??\n coerceCloudBalance(\n (creditResponse?.data as Record<string, unknown> | undefined)?.balance,\n );\n if (typeof balance !== \"number\") {\n throw new Error(\n `Unexpected response shape: ${JSON.stringify(creditResponse)}`,\n );\n }\n\n const low = balance < 2.0;\n const critical = balance < 0.5;\n json(res, {\n connected: true,\n balance,\n low,\n critical,\n topUpUrl: CLOUD_BILLING_URL,\n });\n return true;\n }\n\n return false;\n}\n"
8
+ "import {\n isCloudInferenceSelectedInConfig,\n isElizaCloudServiceSelectedInConfig,\n migrateLegacyRuntimeConfig,\n} from \"@elizaos/core\";\nimport type {\n AgentRuntime,\n RouteHelpers,\n RouteRequestMeta,\n Service,\n} from \"@elizaos/core\";\nimport { resolveCloudApiBaseUrl as resolveCanonicalCloudApiBaseUrl } from \"../cloud/base-url.js\";\nimport { resolveCloudApiKey } from \"../cloud/cloud-api-key.js\";\nimport { validateCloudBaseUrl } from \"../cloud/validate-url.js\";\n\nconst DEFAULT_CLOUD_API_BASE_URL = \"https://www.elizacloud.ai/api/v1\";\nconst CLOUD_BILLING_URL =\n \"https://www.elizacloud.ai/dashboard/settings?tab=billing\";\n\ninterface CloudAuthIdentityService {\n isAuthenticated: () => boolean;\n getUserId?: () => string | undefined;\n getOrganizationId?: () => string | undefined;\n}\n\ninterface CloudAuthCreditsService {\n isAuthenticated: () => boolean;\n getClient: () => { get: <T>(path: string) => Promise<T> };\n}\n\nexport interface CloudConfigLike {\n cloud?: {\n enabled?: boolean;\n apiKey?: string;\n baseUrl?: string;\n };\n}\n\nexport interface CloudStatusRouteContext\n extends RouteRequestMeta,\n Pick<RouteHelpers, \"json\"> {\n config: CloudConfigLike;\n runtime: AgentRuntime | null;\n}\n\nfunction resolveCloudApiBaseUrl(rawBaseUrl?: string): string {\n return resolveCanonicalCloudApiBaseUrl(\n rawBaseUrl ?? DEFAULT_CLOUD_API_BASE_URL,\n );\n}\n\n/**\n * Coerce an Eliza Cloud `balance` field into a number. The cloud API\n * returns `balance` as `string | number` — string when upstream is using\n * fixed-precision decimals, number when arithmetic'd. Treat both as the\n * same dollar amount.\n */\nfunction coerceCloudBalance(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nasync function fetchCloudCreditsByApiKey(\n baseUrl: string,\n apiKey: string,\n): Promise<number | null> {\n const response = await fetch(`${baseUrl}/credits/balance`, {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n redirect: \"manual\",\n signal: AbortSignal.timeout(10_000),\n });\n\n if (response.status >= 300 && response.status < 400) {\n throw new Error(\n \"Cloud credits request was redirected; redirects are not allowed\",\n );\n }\n\n const creditResponse = (await response.json().catch(() => ({}))) as Record<\n string,\n unknown\n >;\n\n if (!response.ok) {\n const message =\n typeof creditResponse.error === \"string\" && creditResponse.error.trim()\n ? creditResponse.error\n : `HTTP ${response.status}`;\n throw new Error(message);\n }\n\n const balance =\n coerceCloudBalance(creditResponse.balance) ??\n coerceCloudBalance(\n (creditResponse.data as Record<string, unknown> | undefined)?.balance,\n );\n return balance;\n}\n\nexport async function handleCloudStatusRoutes(\n ctx: CloudStatusRouteContext,\n): Promise<boolean> {\n const { res, method, pathname, config, runtime, json } = ctx;\n\n if (method === \"GET\" && pathname === \"/api/cloud/status\") {\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n const cloudEnabled = isCloudInferenceSelectedInConfig(\n config as Record<string, unknown>,\n );\n const cloudVoiceProxyAvailable = isElizaCloudServiceSelectedInConfig(\n config as Record<string, unknown>,\n \"tts\",\n );\n const configApiKey = resolveCloudApiKey(config, runtime);\n const hasApiKey = Boolean(configApiKey);\n const cloudAuth = runtime\n ? runtime.getService<Service & CloudAuthIdentityService>(\"CLOUD_AUTH\")\n : null;\n const authConnected = Boolean(cloudAuth?.isAuthenticated());\n\n if (authConnected || hasApiKey) {\n json(res, {\n connected: true,\n enabled: cloudEnabled,\n cloudVoiceProxyAvailable,\n hasApiKey,\n userId: authConnected ? cloudAuth?.getUserId?.() : undefined,\n organizationId: authConnected\n ? cloudAuth?.getOrganizationId?.()\n : undefined,\n topUpUrl: CLOUD_BILLING_URL,\n reason: authConnected\n ? undefined\n : runtime\n ? \"api_key_present_not_authenticated\"\n : \"api_key_present_runtime_not_started\",\n });\n return true;\n }\n\n if (!runtime) {\n json(res, {\n connected: false,\n enabled: cloudEnabled,\n cloudVoiceProxyAvailable,\n hasApiKey,\n reason: \"runtime_not_started\",\n });\n return true;\n }\n\n json(res, {\n connected: false,\n enabled: cloudEnabled,\n cloudVoiceProxyAvailable,\n hasApiKey,\n reason: \"not_authenticated\",\n });\n return true;\n }\n\n if (method === \"GET\" && pathname === \"/api/cloud/credits\") {\n const cloudAuth = runtime\n ? runtime.getService<Service & CloudAuthCreditsService>(\"CLOUD_AUTH\")\n : null;\n const configApiKey = resolveCloudApiKey(config, runtime);\n\n if (!cloudAuth?.isAuthenticated()) {\n if (!configApiKey) {\n json(res, { balance: null, connected: false });\n return true;\n }\n\n const resolvedBaseUrl = resolveCloudApiBaseUrl(config.cloud?.baseUrl);\n const baseUrlRejection = await validateCloudBaseUrl(resolvedBaseUrl);\n if (baseUrlRejection) {\n json(res, { balance: null, connected: true, error: baseUrlRejection });\n return true;\n }\n\n const balance = await fetchCloudCreditsByApiKey(\n resolvedBaseUrl,\n configApiKey,\n );\n if (typeof balance !== \"number\") {\n throw new Error(\"unexpected response\");\n }\n const low = balance < 2.0;\n const critical = balance < 0.5;\n json(res, {\n connected: true,\n balance,\n low,\n critical,\n topUpUrl: CLOUD_BILLING_URL,\n });\n return true;\n }\n\n const client = cloudAuth.getClient();\n const creditResponse =\n await client.get<Record<string, unknown>>(\"/credits/balance\");\n const balance =\n coerceCloudBalance(creditResponse?.balance) ??\n coerceCloudBalance(\n (creditResponse?.data as Record<string, unknown> | undefined)?.balance,\n );\n if (typeof balance !== \"number\") {\n throw new Error(\n `Unexpected response shape: ${JSON.stringify(creditResponse)}`,\n );\n }\n\n const low = balance < 2.0;\n const critical = balance < 0.5;\n json(res, {\n connected: true,\n balance,\n low,\n critical,\n topUpUrl: CLOUD_BILLING_URL,\n });\n return true;\n }\n\n return false;\n}\n"
9
9
  ],
10
- "mappings": "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",
11
- "debugId": "C999B4B78B8C30DD64756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "452BB0A3AD20687764756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -17,56 +17,8 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
17
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
18
18
 
19
19
  // src/cloud/base-url.ts
20
- function isLoopbackHost(hostname) {
21
- const normalized = hostname.toLowerCase();
22
- return normalized === "localhost" || normalized === "::1" || normalized === "0:0:0:0:0:0:0:1" || normalized.startsWith("127.");
23
- }
24
- function trimApiPath(pathname) {
25
- const normalized = pathname.trim().replace(/\/+$/, "");
26
- if (!normalized)
27
- return "";
28
- if (normalized === "/api/v1")
29
- return "";
30
- if (normalized.endsWith("/api/v1")) {
31
- return normalized.slice(0, -"/api/v1".length);
32
- }
33
- return normalized;
34
- }
35
- function normalizeCloudSiteUrl(rawUrl) {
36
- const envOverride = process.env.ELIZAOS_CLOUD_BASE_URL?.trim();
37
- const candidate = envOverride || rawUrl?.trim() || DEFAULT_CLOUD_SITE_URL;
38
- try {
39
- const parsed = new URL(candidate);
40
- const pathname = trimApiPath(parsed.pathname);
41
- const host = parsed.hostname.toLowerCase();
42
- const preserveLocalOrigin = isLoopbackHost(host);
43
- parsed.hash = "";
44
- parsed.search = "";
45
- if (!preserveLocalOrigin) {
46
- parsed.protocol = "https:";
47
- parsed.port = "";
48
- }
49
- parsed.pathname = pathname;
50
- if (LEGACY_CLOUD_HOST_ALIASES.has(host)) {
51
- parsed.hostname = "www.elizacloud.ai";
52
- parsed.pathname = "";
53
- }
54
- return parsed.toString().replace(/\/{1,1024}$/, "");
55
- } catch {
56
- const safeCandidate = candidate.length > 8192 ? candidate.slice(0, 8192) : candidate;
57
- return safeCandidate.replace(/\/{1,1024}$/, "");
58
- }
59
- }
60
- function resolveCloudApiBaseUrl(rawUrl) {
61
- return `${normalizeCloudSiteUrl(rawUrl)}/api/v1`;
62
- }
63
- var DEFAULT_CLOUD_SITE_URL = "https://www.elizacloud.ai", LEGACY_CLOUD_HOST_ALIASES;
64
- var init_base_url = __esm(() => {
65
- LEGACY_CLOUD_HOST_ALIASES = new Set([
66
- "elizacloud.ai",
67
- "www.elizacloud.ai"
68
- ]);
69
- });
20
+ import { normalizeCloudSiteUrl, resolveCloudApiBaseUrl } from "@elizaos/shared";
21
+ var init_base_url = () => {};
70
22
 
71
23
  // src/cloud/validate-url.ts
72
24
  import dns from "node:dns";
@@ -177,6 +129,7 @@ async function validateCloudBaseUrl(rawUrl) {
177
129
  if (hostname === "localhost" || hostname.endsWith(".localhost") || hostname.endsWith(".local")) {
178
130
  return `Cloud base URL "${rawUrl}" points to a blocked local hostname.`;
179
131
  }
132
+ const elizaDev = process.env.ELIZA_DEV?.trim().toLowerCase();
180
133
  if (true) {
181
134
  return null;
182
135
  }
@@ -271,7 +224,7 @@ function persistServiceRouting(config, serviceRouting, clearRoutes = []) {
271
224
  delete config.serviceRouting;
272
225
  }
273
226
  }
274
- function applyCanonicalOnboardingConfig(config, args) {
227
+ function applyCanonicalSetupConfig(config, args) {
275
228
  if (args.deploymentTarget !== undefined) {
276
229
  persistDeploymentTarget(config, args.deploymentTarget);
277
230
  }
@@ -298,41 +251,13 @@ function isTimeoutError(error) {
298
251
  }
299
252
 
300
253
  // src/lib/cloud-secrets.ts
301
- function getCloudSecret(key) {
302
- return _cloudSecrets[key] ?? process.env[key];
303
- }
304
- function scrubCloudSecretsFromEnv() {
305
- for (const key of [
306
- "ELIZAOS_CLOUD_API_KEY",
307
- "ELIZAOS_CLOUD_ENABLED"
308
- ]) {
309
- if (process.env[key] !== undefined) {
310
- _cloudSecrets[key] = process.env[key];
311
- delete process.env[key];
312
- }
313
- }
314
- }
315
- function clearCloudSecrets() {
316
- for (const key of [
317
- "ELIZAOS_CLOUD_API_KEY",
318
- "ELIZAOS_CLOUD_ENABLED"
319
- ]) {
320
- delete _cloudSecrets[key];
321
- }
322
- }
323
- function _resetCloudSecretsForTesting() {
324
- for (const key of Object.keys(_cloudSecrets)) {
325
- delete _cloudSecrets[key];
326
- }
327
- }
328
- var _cloudSecrets;
329
- var init_cloud_secrets = __esm(() => {
330
- _cloudSecrets = Object.create(null);
331
- Object.defineProperty(_cloudSecrets, Symbol.toStringTag, {
332
- value: "CloudSecrets",
333
- enumerable: false
334
- });
335
- });
254
+ import {
255
+ clearCloudSecrets,
256
+ getCloudSecret,
257
+ scrubCloudSecretsFromEnv,
258
+ _resetCloudSecretsForTesting
259
+ } from "@elizaos/shared";
260
+ var init_cloud_secrets = () => {};
336
261
 
337
262
  // src/lib/cloud-connection.ts
338
263
  import {
@@ -613,7 +538,7 @@ async function disconnectCloudConnection(args) {
613
538
  const nextCloud = { ...config.cloud ?? {} };
614
539
  delete nextCloud.apiKey;
615
540
  config.cloud = nextCloud;
616
- applyCanonicalOnboardingConfig(config, {
541
+ applyCanonicalSetupConfig(config, {
617
542
  deploymentTarget: { runtime: "local" },
618
543
  linkedAccounts: {
619
544
  elizacloud: {
@@ -642,7 +567,7 @@ async function disconnectCloudConnection(args) {
642
567
  function isCloudStatusReasonApiKeyOnly(reason) {
643
568
  return typeof reason === "string" && CLOUD_STATUS_API_KEY_ONLY_REASONS.has(reason);
644
569
  }
645
- var DEFAULT_CLOUD_API_BASE_URL = "https://www.elizacloud.ai/api/v1", CLOUD_BILLING_URL = "https://www.elizacloud.ai/dashboard/settings?tab=billing", CLOUD_ENV_KEYS, CLOUD_RUNTIME_SECRET_KEYS, CLOUD_RUNTIME_SETTING_KEYS, CLOUD_AUTH_CLEAR_METHODS, CloudCreditsAuthRejectedError, CREDIT_LOW_THRESHOLD, CREDIT_CRITICAL_THRESHOLD, disconnectUnifiedCloudConnection, CLOUD_STATUS_API_KEY_ONLY_REASONS;
570
+ var DEFAULT_CLOUD_API_BASE_URL = "https://www.elizacloud.ai/api/v1", CLOUD_BILLING_URL = "https://www.elizacloud.ai/dashboard/settings?tab=billing", CLOUD_ENV_KEYS, CLOUD_RUNTIME_SECRET_KEYS, CLOUD_RUNTIME_SETTING_KEYS, CLOUD_AUTH_CLEAR_METHODS, CloudCreditsAuthRejectedError, CREDIT_LOW_THRESHOLD, CREDIT_CRITICAL_THRESHOLD, CLOUD_STATUS_API_KEY_ONLY_REASONS;
646
571
  var init_cloud_connection = __esm(() => {
647
572
  init_base_url();
648
573
  init_validate_url();
@@ -706,7 +631,6 @@ var init_cloud_connection = __esm(() => {
706
631
  };
707
632
  CREDIT_LOW_THRESHOLD = Number(process.env.ELIZA_CREDIT_LOW_THRESHOLD ?? "2.0");
708
633
  CREDIT_CRITICAL_THRESHOLD = Number(process.env.ELIZA_CREDIT_CRITICAL_THRESHOLD ?? "0.5");
709
- disconnectUnifiedCloudConnection = disconnectCloudConnection;
710
634
  CLOUD_STATUS_API_KEY_ONLY_REASONS = new Set([
711
635
  "api_key_present_not_authenticated",
712
636
  "api_key_present_runtime_not_started"
@@ -768,4 +692,4 @@ export {
768
692
  handleCloudStatusRoutes
769
693
  };
770
694
 
771
- //# debugId=AF345220F5AD290064756E2164756E21
695
+ //# debugId=45A9D9889666558A64756E2164756E21