@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.
Files changed (378) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +220 -0
  3. package/auto-enable.ts +17 -0
  4. package/dist/browser/index.browser.js +2 -21
  5. package/dist/browser/index.browser.js.map +5 -37
  6. package/dist/cjs/index.d.ts +2 -2
  7. package/dist/cjs/index.node.cjs +12173 -2271
  8. package/dist/cjs/index.node.js.map +135 -27
  9. package/dist/cloud/auth.d.ts +19 -0
  10. package/dist/cloud/auth.d.ts.map +1 -0
  11. package/dist/cloud/auth.js +330 -0
  12. package/dist/cloud/auth.js.map +12 -0
  13. package/dist/cloud/backup.d.ts +18 -0
  14. package/dist/cloud/backup.d.ts.map +1 -0
  15. package/dist/cloud/backup.js +63 -0
  16. package/dist/cloud/backup.js.map +10 -0
  17. package/dist/cloud/base-url.d.ts +3 -0
  18. package/dist/cloud/base-url.d.ts.map +1 -0
  19. package/dist/cloud/base-url.js +77 -0
  20. package/dist/cloud/base-url.js.map +10 -0
  21. package/dist/cloud/bridge-client.d.ts +126 -0
  22. package/dist/cloud/bridge-client.d.ts.map +1 -0
  23. package/dist/cloud/bridge-client.js +432 -0
  24. package/dist/cloud/bridge-client.js.map +11 -0
  25. package/dist/cloud/cloud-api-key.d.ts +26 -0
  26. package/dist/cloud/cloud-api-key.d.ts.map +1 -0
  27. package/dist/cloud/cloud-api-key.js +60 -0
  28. package/dist/cloud/cloud-api-key.js.map +10 -0
  29. package/dist/cloud/cloud-manager.d.ts +33 -0
  30. package/dist/cloud/cloud-manager.d.ts.map +1 -0
  31. package/dist/cloud/cloud-manager.js +853 -0
  32. package/dist/cloud/cloud-manager.js.map +16 -0
  33. package/dist/cloud/cloud-proxy.d.ts +20 -0
  34. package/dist/cloud/cloud-proxy.d.ts.map +1 -0
  35. package/dist/cloud/cloud-proxy.js +54 -0
  36. package/dist/cloud/cloud-proxy.js.map +10 -0
  37. package/dist/cloud/cloud-wallet.d.ts +94 -0
  38. package/dist/cloud/cloud-wallet.d.ts.map +1 -0
  39. package/dist/cloud/cloud-wallet.js +5195 -0
  40. package/dist/cloud/cloud-wallet.js.map +92 -0
  41. package/dist/cloud/index.d.ts +9 -0
  42. package/dist/cloud/index.d.ts.map +1 -0
  43. package/dist/cloud/index.js +30 -0
  44. package/dist/cloud/index.js.map +9 -0
  45. package/dist/cloud/reconnect.d.ts +26 -0
  46. package/dist/cloud/reconnect.d.ts.map +1 -0
  47. package/dist/cloud/reconnect.js +104 -0
  48. package/dist/cloud/reconnect.js.map +10 -0
  49. package/dist/cloud/validate-url.d.ts +2 -0
  50. package/dist/cloud/validate-url.d.ts.map +1 -0
  51. package/dist/cloud/validate-url.js +174 -0
  52. package/dist/cloud/validate-url.js.map +10 -0
  53. package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
  54. package/dist/cloud-providers/cloud-status.js +78 -0
  55. package/dist/cloud-providers/cloud-status.js.map +10 -0
  56. package/dist/cloud-providers/container-health.d.ts.map +1 -1
  57. package/dist/cloud-providers/container-health.js +74 -0
  58. package/dist/cloud-providers/container-health.js.map +10 -0
  59. package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
  60. package/dist/cloud-providers/credit-balance.js +85 -0
  61. package/dist/cloud-providers/credit-balance.js.map +10 -0
  62. package/dist/cloud-providers/index.d.ts.map +1 -1
  63. package/dist/cloud-providers/index.js +24 -0
  64. package/dist/cloud-providers/index.js.map +9 -0
  65. package/dist/cloud-providers/model-registry.d.ts.map +1 -1
  66. package/dist/cloud-providers/model-registry.js +71 -0
  67. package/dist/cloud-providers/model-registry.js.map +10 -0
  68. package/dist/index.browser.d.ts +4 -2
  69. package/dist/index.browser.d.ts.map +1 -1
  70. package/dist/index.d.ts +18 -0
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +12851 -0
  73. package/dist/index.js.map +145 -0
  74. package/dist/index.node.d.ts +15 -2
  75. package/dist/index.node.d.ts.map +1 -1
  76. package/dist/init.d.ts.map +1 -1
  77. package/dist/init.js +169 -0
  78. package/dist/init.js.map +12 -0
  79. package/dist/lib/cloud-connection.d.ts +78 -0
  80. package/dist/lib/cloud-connection.d.ts.map +1 -0
  81. package/dist/lib/cloud-connection.js +731 -0
  82. package/dist/lib/cloud-connection.js.map +14 -0
  83. package/dist/lib/cloud-secrets.d.ts +23 -0
  84. package/dist/lib/cloud-secrets.d.ts.map +1 -0
  85. package/dist/lib/cloud-secrets.js +64 -0
  86. package/dist/lib/cloud-secrets.js.map +10 -0
  87. package/dist/lib/config-env.d.ts +5 -0
  88. package/dist/lib/config-env.d.ts.map +1 -0
  89. package/dist/lib/config-env.js +191 -0
  90. package/dist/lib/config-env.js.map +11 -0
  91. package/dist/lib/config-like.d.ts +40 -0
  92. package/dist/lib/config-like.d.ts.map +1 -0
  93. package/dist/lib/config-like.js +103 -0
  94. package/dist/lib/config-like.js.map +10 -0
  95. package/dist/lib/credential-type-map.d.ts +53 -0
  96. package/dist/lib/credential-type-map.d.ts.map +1 -0
  97. package/dist/lib/credential-type-map.js +88 -0
  98. package/dist/lib/credential-type-map.js.map +10 -0
  99. package/dist/lib/feature-flags.d.ts +2 -0
  100. package/dist/lib/feature-flags.d.ts.map +1 -0
  101. package/dist/lib/feature-flags.js +40 -0
  102. package/dist/lib/feature-flags.js.map +10 -0
  103. package/dist/lib/http.d.ts +22 -0
  104. package/dist/lib/http.d.ts.map +1 -0
  105. package/dist/lib/http.js +107 -0
  106. package/dist/lib/http.js.map +10 -0
  107. package/dist/lib/server-cloud-tts.d.ts +34 -0
  108. package/dist/lib/server-cloud-tts.d.ts.map +1 -0
  109. package/dist/lib/server-cloud-tts.js +549 -0
  110. package/dist/lib/server-cloud-tts.js.map +13 -0
  111. package/dist/lib/state-paths.d.ts +4 -0
  112. package/dist/lib/state-paths.d.ts.map +1 -0
  113. package/dist/lib/state-paths.js +52 -0
  114. package/dist/lib/state-paths.js.map +10 -0
  115. package/dist/lib/tts-debug.d.ts +4 -0
  116. package/dist/lib/tts-debug.d.ts.map +1 -0
  117. package/dist/lib/tts-debug.js +57 -0
  118. package/dist/lib/tts-debug.js.map +10 -0
  119. package/dist/models/embeddings.d.ts.map +1 -1
  120. package/dist/models/embeddings.js +319 -0
  121. package/dist/models/embeddings.js.map +13 -0
  122. package/dist/models/image.d.ts.map +1 -1
  123. package/dist/models/image.js +374 -0
  124. package/dist/models/image.js.map +14 -0
  125. package/dist/models/index.d.ts +1 -2
  126. package/dist/models/index.d.ts.map +1 -1
  127. package/dist/models/index.js +1386 -0
  128. package/dist/models/index.js.map +20 -0
  129. package/dist/models/research.d.ts.map +1 -1
  130. package/dist/models/research.js +324 -0
  131. package/dist/models/research.js.map +13 -0
  132. package/dist/models/speech.d.ts.map +1 -1
  133. package/dist/models/speech.js +273 -0
  134. package/dist/models/speech.js.map +13 -0
  135. package/dist/models/text.d.ts +5 -2
  136. package/dist/models/text.d.ts.map +1 -1
  137. package/dist/models/text.js +803 -0
  138. package/dist/models/text.js.map +15 -0
  139. package/dist/models/tokenization.d.ts.map +1 -1
  140. package/dist/models/tokenization.js +65 -0
  141. package/dist/models/tokenization.js.map +10 -0
  142. package/dist/models/transcription.d.ts.map +1 -1
  143. package/dist/models/transcription.js +283 -0
  144. package/dist/models/transcription.js.map +13 -0
  145. package/dist/node/index.d.ts +2 -2
  146. package/dist/node/index.node.js +12171 -2266
  147. package/dist/node/index.node.js.map +135 -27
  148. package/dist/onboarding.d.ts +35 -0
  149. package/dist/onboarding.d.ts.map +1 -0
  150. package/dist/onboarding.js +883 -0
  151. package/dist/onboarding.js.map +14 -0
  152. package/dist/plugin.d.ts +20 -0
  153. package/dist/plugin.d.ts.map +1 -0
  154. package/dist/plugin.js +7611 -0
  155. package/dist/plugin.js.map +104 -0
  156. package/dist/providers/openai.d.ts.map +1 -1
  157. package/dist/providers/openai.js +127 -0
  158. package/dist/providers/openai.js.map +11 -0
  159. package/dist/register-routes.d.ts +2 -0
  160. package/dist/register-routes.d.ts.map +1 -0
  161. package/dist/register-routes.js +7612 -0
  162. package/dist/register-routes.js.map +105 -0
  163. package/dist/routes/cloud-billing-routes.d.ts +9 -0
  164. package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
  165. package/dist/routes/cloud-billing-routes.js +807 -0
  166. package/dist/routes/cloud-billing-routes.js.map +14 -0
  167. package/dist/routes/cloud-compat-routes.d.ts +10 -0
  168. package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
  169. package/dist/routes/cloud-compat-routes.js +538 -0
  170. package/dist/routes/cloud-compat-routes.js.map +14 -0
  171. package/dist/routes/cloud-features-routes.d.ts +9 -0
  172. package/dist/routes/cloud-features-routes.d.ts.map +1 -0
  173. package/dist/routes/cloud-features-routes.js +124 -0
  174. package/dist/routes/cloud-features-routes.js.map +11 -0
  175. package/dist/routes/cloud-provisioning.d.ts +14 -0
  176. package/dist/routes/cloud-provisioning.d.ts.map +1 -0
  177. package/dist/routes/cloud-provisioning.js +37 -0
  178. package/dist/routes/cloud-provisioning.js.map +10 -0
  179. package/dist/routes/cloud-relay-routes.d.ts +22 -0
  180. package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
  181. package/dist/routes/cloud-relay-routes.js +60 -0
  182. package/dist/routes/cloud-relay-routes.js.map +10 -0
  183. package/dist/routes/cloud-routes-autonomous.d.ts +83 -0
  184. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
  185. package/dist/routes/cloud-routes-autonomous.js +6134 -0
  186. package/dist/routes/cloud-routes-autonomous.js.map +97 -0
  187. package/dist/routes/cloud-routes.d.ts +35 -0
  188. package/dist/routes/cloud-routes.d.ts.map +1 -0
  189. package/dist/routes/cloud-routes.js +6888 -0
  190. package/dist/routes/cloud-routes.js.map +100 -0
  191. package/dist/routes/cloud-status-routes-autonomous.d.ts +15 -0
  192. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
  193. package/dist/routes/cloud-status-routes-autonomous.js +396 -0
  194. package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
  195. package/dist/routes/cloud-status-routes.d.ts +4 -0
  196. package/dist/routes/cloud-status-routes.d.ts.map +1 -0
  197. package/dist/routes/cloud-status-routes.js +771 -0
  198. package/dist/routes/cloud-status-routes.js.map +15 -0
  199. package/dist/services/cloud-auth.d.ts +140 -5
  200. package/dist/services/cloud-auth.d.ts.map +1 -1
  201. package/dist/services/cloud-auth.js +363 -0
  202. package/dist/services/cloud-auth.js.map +12 -0
  203. package/dist/services/cloud-backup.d.ts.map +1 -1
  204. package/dist/services/cloud-backup.js +176 -0
  205. package/dist/services/cloud-backup.js.map +11 -0
  206. package/dist/services/cloud-bootstrap.d.ts +38 -0
  207. package/dist/services/cloud-bootstrap.d.ts.map +1 -0
  208. package/dist/services/cloud-bootstrap.js +84 -0
  209. package/dist/services/cloud-bootstrap.js.map +10 -0
  210. package/dist/services/cloud-bridge.d.ts +1 -1
  211. package/dist/services/cloud-bridge.d.ts.map +1 -1
  212. package/dist/services/cloud-bridge.js +308 -0
  213. package/dist/services/cloud-bridge.js.map +11 -0
  214. package/dist/services/cloud-container.d.ts.map +1 -1
  215. package/dist/services/cloud-container.js +241 -0
  216. package/dist/services/cloud-container.js.map +11 -0
  217. package/dist/services/cloud-credential-provider.d.ts +55 -0
  218. package/dist/services/cloud-credential-provider.d.ts.map +1 -0
  219. package/dist/services/cloud-credential-provider.js +190 -0
  220. package/dist/services/cloud-credential-provider.js.map +11 -0
  221. package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
  222. package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
  223. package/dist/services/cloud-managed-gateway-relay.js +479 -0
  224. package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
  225. package/dist/services/cloud-model-registry.d.ts.map +1 -1
  226. package/dist/services/cloud-model-registry.js +175 -0
  227. package/dist/services/cloud-model-registry.js.map +10 -0
  228. package/dist/services/index.d.ts +3 -1
  229. package/dist/services/index.d.ts.map +1 -1
  230. package/dist/services/index.js +29 -0
  231. package/dist/services/index.js.map +9 -0
  232. package/dist/types/cloud.d.ts +41 -19
  233. package/dist/types/cloud.d.ts.map +1 -1
  234. package/dist/types/cloud.js +52 -0
  235. package/dist/types/cloud.js.map +10 -0
  236. package/dist/types/index.d.ts +1 -1
  237. package/dist/types/index.d.ts.map +1 -1
  238. package/dist/types/index.js +24 -0
  239. package/dist/types/index.js.map +9 -0
  240. package/dist/utils/cloud-api.d.ts +2 -27
  241. package/dist/utils/cloud-api.d.ts.map +1 -1
  242. package/dist/utils/cloud-api.js +33 -0
  243. package/dist/utils/cloud-api.js.map +10 -0
  244. package/dist/utils/cloud-sdk/client.d.ts +133 -0
  245. package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
  246. package/dist/utils/cloud-sdk/client.js +3561 -0
  247. package/dist/utils/cloud-sdk/client.js.map +13 -0
  248. package/dist/utils/cloud-sdk/http.d.ts +37 -0
  249. package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
  250. package/dist/utils/cloud-sdk/http.js +237 -0
  251. package/dist/utils/cloud-sdk/http.js.map +11 -0
  252. package/dist/utils/cloud-sdk/index.d.ts +6 -0
  253. package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
  254. package/dist/utils/cloud-sdk/index.js +29 -0
  255. package/dist/utils/cloud-sdk/index.js.map +9 -0
  256. package/dist/utils/cloud-sdk/public-routes.d.ts +5377 -0
  257. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
  258. package/dist/utils/cloud-sdk/public-routes.js +2950 -0
  259. package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
  260. package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
  261. package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
  262. package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
  263. package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
  264. package/dist/utils/cloud-sdk/types.d.ts +655 -0
  265. package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
  266. package/dist/utils/cloud-sdk/types.js +29 -0
  267. package/dist/utils/cloud-sdk/types.js.map +10 -0
  268. package/dist/utils/config.d.ts +7 -3
  269. package/dist/utils/config.d.ts.map +1 -1
  270. package/dist/utils/config.js +137 -0
  271. package/dist/utils/config.js.map +10 -0
  272. package/dist/utils/events.d.ts.map +1 -1
  273. package/dist/utils/events.js +43 -0
  274. package/dist/utils/events.js.map +10 -0
  275. package/dist/utils/helpers.d.ts.map +1 -1
  276. package/dist/utils/helpers.js +103 -0
  277. package/dist/utils/helpers.js.map +10 -0
  278. package/dist/utils/responses-output.d.ts +13 -0
  279. package/dist/utils/responses-output.d.ts.map +1 -0
  280. package/dist/utils/responses-output.js +102 -0
  281. package/dist/utils/responses-output.js.map +10 -0
  282. package/dist/utils/sdk-client.d.ts +5 -0
  283. package/dist/utils/sdk-client.d.ts.map +1 -0
  284. package/dist/utils/sdk-client.js +144 -0
  285. package/dist/utils/sdk-client.js.map +11 -0
  286. package/package.json +108 -19
  287. package/src/cloud/auth.ts +175 -0
  288. package/src/cloud/backup.ts +46 -0
  289. package/src/cloud/base-url.ts +62 -0
  290. package/src/cloud/bridge-client.ts +602 -0
  291. package/src/cloud/cloud-api-key.ts +80 -0
  292. package/src/cloud/cloud-manager.ts +163 -0
  293. package/src/cloud/cloud-proxy.ts +52 -0
  294. package/src/cloud/cloud-wallet.ts +341 -0
  295. package/src/cloud/index.ts +28 -0
  296. package/src/cloud/reconnect.ts +111 -0
  297. package/src/cloud/validate-url.ts +181 -0
  298. package/src/cloud-providers/cloud-status.ts +75 -0
  299. package/src/cloud-providers/container-health.ts +68 -0
  300. package/src/cloud-providers/credit-balance.ts +70 -0
  301. package/src/cloud-providers/index.ts +3 -0
  302. package/src/cloud-providers/model-registry.ts +74 -0
  303. package/src/index.browser.ts +10 -0
  304. package/src/index.node.ts +39 -0
  305. package/src/index.ts +347 -0
  306. package/src/init.ts +39 -0
  307. package/src/lib/cloud-connection.ts +663 -0
  308. package/src/lib/cloud-secrets.ts +58 -0
  309. package/src/lib/config-env.ts +168 -0
  310. package/src/lib/config-like.ts +149 -0
  311. package/src/lib/credential-type-map.ts +130 -0
  312. package/src/lib/feature-flags.ts +26 -0
  313. package/src/lib/http.ts +139 -0
  314. package/src/lib/server-cloud-tts.ts +609 -0
  315. package/src/lib/state-paths.ts +28 -0
  316. package/src/lib/tts-debug.ts +34 -0
  317. package/src/models/embeddings.ts +234 -0
  318. package/src/models/image.ts +219 -0
  319. package/src/models/index.ts +16 -0
  320. package/src/models/research.ts +265 -0
  321. package/src/models/speech.ts +78 -0
  322. package/src/models/text.ts +899 -0
  323. package/src/models/tokenization.ts +67 -0
  324. package/src/models/transcription.ts +97 -0
  325. package/src/onboarding.ts +396 -0
  326. package/src/plugin.ts +243 -0
  327. package/src/providers/openai.ts +16 -0
  328. package/src/register-routes.ts +6 -0
  329. package/src/routes/cloud-billing-routes.ts +754 -0
  330. package/src/routes/cloud-compat-routes.ts +314 -0
  331. package/src/routes/cloud-features-routes.ts +57 -0
  332. package/src/routes/cloud-provisioning.ts +37 -0
  333. package/src/routes/cloud-relay-routes.ts +89 -0
  334. package/src/routes/cloud-routes-autonomous.ts +996 -0
  335. package/src/routes/cloud-routes.ts +576 -0
  336. package/src/routes/cloud-status-routes-autonomous.ts +234 -0
  337. package/src/routes/cloud-status-routes.ts +73 -0
  338. package/src/services/cloud-auth.ts +567 -0
  339. package/src/services/cloud-backup.ts +208 -0
  340. package/src/services/cloud-bootstrap.ts +108 -0
  341. package/src/services/cloud-bridge.ts +386 -0
  342. package/src/services/cloud-container.ts +297 -0
  343. package/src/services/cloud-credential-provider.ts +210 -0
  344. package/src/services/cloud-managed-gateway-relay.ts +663 -0
  345. package/src/services/cloud-model-registry.ts +202 -0
  346. package/src/services/index.ts +17 -0
  347. package/{types → src/types}/cloud.ts +52 -29
  348. package/{types → src/types}/index.ts +6 -0
  349. package/src/utils/cloud-api.ts +10 -0
  350. package/src/utils/cloud-sdk/client.ts +735 -0
  351. package/src/utils/cloud-sdk/http.ts +291 -0
  352. package/src/utils/cloud-sdk/index.ts +23 -0
  353. package/src/utils/cloud-sdk/public-routes.ts +5070 -0
  354. package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
  355. package/src/utils/cloud-sdk/types.ts +762 -0
  356. package/src/utils/config.ts +174 -0
  357. package/src/utils/events.ts +37 -0
  358. package/src/utils/helpers.ts +107 -0
  359. package/src/utils/responses-output.ts +115 -0
  360. package/src/utils/sdk-client.ts +37 -0
  361. package/dist/actions/check-credits.d.ts +0 -6
  362. package/dist/actions/check-credits.d.ts.map +0 -1
  363. package/dist/actions/freeze-agent.d.ts +0 -9
  364. package/dist/actions/freeze-agent.d.ts.map +0 -1
  365. package/dist/actions/index.d.ts +0 -5
  366. package/dist/actions/index.d.ts.map +0 -1
  367. package/dist/actions/provision-agent.d.ts +0 -8
  368. package/dist/actions/provision-agent.d.ts.map +0 -1
  369. package/dist/actions/resume-agent.d.ts +0 -9
  370. package/dist/actions/resume-agent.d.ts.map +0 -1
  371. package/dist/build.d.ts +0 -3
  372. package/dist/build.d.ts.map +0 -1
  373. package/dist/generated/specs/specs.d.ts +0 -55
  374. package/dist/generated/specs/specs.d.ts.map +0 -1
  375. package/dist/models/object.d.ts +0 -4
  376. package/dist/models/object.d.ts.map +0 -1
  377. package/dist/utils/forwarded-settings.d.ts +0 -8
  378. package/dist/utils/forwarded-settings.d.ts.map +0 -1
@@ -0,0 +1,314 @@
1
+ import type http from "node:http";
2
+ import type { AgentRuntime, Service } from "@elizaos/core";
3
+ import { logger } from "@elizaos/core";
4
+ import { normalizeCloudSiteUrl } from "../cloud/base-url.js";
5
+ import { resolveCloudApiKey } from "../cloud/cloud-api-key.js";
6
+ import { validateCloudBaseUrl } from "../cloud/validate-url.js";
7
+ import type { CloudProxyConfigLike } from "../lib/config-like";
8
+ import { sendJson, sendJsonError } from "../lib/http";
9
+
10
+ export interface CloudCompatRouteState {
11
+ config: CloudProxyConfigLike;
12
+ runtime?: AgentRuntime | null;
13
+ }
14
+
15
+ const PROXY_TIMEOUT_MS = 15_000;
16
+ const MAX_BODY_BYTES = 1_048_576;
17
+ const JSON_CONTENT_TYPE_RE = /\b(?:application\/json|[^;\s]+\+json)\b/i;
18
+
19
+ interface CloudAuthApiKeyService {
20
+ isAuthenticated: () => boolean;
21
+ getApiKey?: () => string | undefined;
22
+ }
23
+
24
+ export function resolveCloudBaseUrl(config: CloudProxyConfigLike): string {
25
+ return normalizeCloudSiteUrl(config.cloud?.baseUrl);
26
+ }
27
+
28
+ function normalizeCloudApiKey(value: string | null | undefined): string | null {
29
+ if (typeof value !== "string") return null;
30
+ const trimmed = value.trim();
31
+ if (!trimmed || trimmed.toUpperCase() === "[REDACTED]") {
32
+ return null;
33
+ }
34
+ return trimmed;
35
+ }
36
+
37
+ function resolveProxyApiKey(state: CloudCompatRouteState): string | null {
38
+ const cloudAuth = state.runtime
39
+ ? state.runtime.getService<Service & CloudAuthApiKeyService>("CLOUD_AUTH")
40
+ : null;
41
+ const runtimeApiKey =
42
+ cloudAuth?.isAuthenticated() === true
43
+ ? normalizeCloudApiKey(cloudAuth.getApiKey?.())
44
+ : null;
45
+
46
+ return runtimeApiKey ?? resolveCloudApiKey(state.config, state.runtime);
47
+ }
48
+
49
+ function buildAuthHeaders(
50
+ config: CloudProxyConfigLike,
51
+ apiKeyOverride?: string | null,
52
+ ): Record<string, string> {
53
+ const serviceKey = config.cloud?.serviceKey?.trim();
54
+ const apiKey =
55
+ normalizeCloudApiKey(apiKeyOverride) ?? resolveCloudApiKey(config);
56
+
57
+ const headers: Record<string, string> = {
58
+ "Content-Type": "application/json",
59
+ Accept: "application/json",
60
+ };
61
+
62
+ if (serviceKey) {
63
+ headers["X-Service-Key"] = serviceKey;
64
+ }
65
+ if (apiKey) {
66
+ headers.Authorization = `Bearer ${apiKey}`;
67
+ }
68
+
69
+ return headers;
70
+ }
71
+
72
+ function readBody(req: http.IncomingMessage): Promise<string | undefined> {
73
+ return new Promise<string | undefined>((resolve, reject) => {
74
+ const chunks: Buffer[] = [];
75
+ let size = 0;
76
+ req.on("data", (chunk: Buffer) => {
77
+ size += chunk.length;
78
+ if (size > MAX_BODY_BYTES) {
79
+ reject(new Error("Request body too large"));
80
+ return;
81
+ }
82
+ chunks.push(chunk);
83
+ });
84
+ req.on("end", () =>
85
+ resolve(
86
+ chunks.length > 0 ? Buffer.concat(chunks).toString("utf-8") : undefined,
87
+ ),
88
+ );
89
+ req.on("error", reject);
90
+ });
91
+ }
92
+
93
+ async function fetchUpstream(
94
+ url: string,
95
+ method: string,
96
+ headers: Record<string, string>,
97
+ body: string | undefined,
98
+ ): Promise<Response> {
99
+ const res = await fetch(url, {
100
+ method,
101
+ headers,
102
+ body,
103
+ redirect: "manual",
104
+ signal: AbortSignal.timeout(PROXY_TIMEOUT_MS),
105
+ });
106
+
107
+ if (res.status >= 300 && res.status < 400) {
108
+ throw Object.assign(new Error("redirect"), { code: "REDIRECT" });
109
+ }
110
+
111
+ return res;
112
+ }
113
+
114
+ function summarizeUpstreamBody(bodyText: string): string {
115
+ const trimmed = bodyText.trim();
116
+ if (!trimmed) return "";
117
+ return trimmed.length > 300 ? `${trimmed.slice(0, 297)}...` : trimmed;
118
+ }
119
+
120
+ function isResourceCompatPath(pathname: string): boolean {
121
+ return pathname.split("/").filter(Boolean).length >= 5;
122
+ }
123
+
124
+ function sendUpstreamNotFound(
125
+ res: http.ServerResponse,
126
+ pathname: string,
127
+ upstreamBody?: unknown,
128
+ ): void {
129
+ if (isResourceCompatPath(pathname)) {
130
+ sendJson(
131
+ res,
132
+ upstreamBody ?? {
133
+ success: false,
134
+ error: "Eliza Cloud returned 404 for this API route.",
135
+ code: "CLOUD_ROUTE_NOT_FOUND",
136
+ },
137
+ 404,
138
+ );
139
+ return;
140
+ }
141
+
142
+ sendJson(
143
+ res,
144
+ {
145
+ success: false,
146
+ error: "This Cloud feature is not available yet.",
147
+ code: "CLOUD_NOT_READY",
148
+ },
149
+ 404,
150
+ );
151
+ }
152
+
153
+ async function parseUpstreamJsonResponse(
154
+ upstreamRes: Response,
155
+ method: string,
156
+ ): Promise<
157
+ | { kind: "head" }
158
+ | { kind: "empty" }
159
+ | { kind: "json"; body: unknown }
160
+ | { kind: "invalid-json"; bodyText: string }
161
+ | { kind: "non-json"; bodyText: string }
162
+ > {
163
+ if (method === "HEAD") {
164
+ return { kind: "head" };
165
+ }
166
+
167
+ const bodyText = await upstreamRes.text();
168
+ if (bodyText.trim().length === 0) {
169
+ return { kind: "empty" };
170
+ }
171
+
172
+ const contentType = upstreamRes.headers.get("content-type");
173
+ const expectsJson = JSON_CONTENT_TYPE_RE.test(contentType ?? "");
174
+
175
+ if (!expectsJson && !/^\s*[[{]/.test(bodyText)) {
176
+ return { kind: "non-json", bodyText };
177
+ }
178
+
179
+ try {
180
+ return { kind: "json", body: JSON.parse(bodyText) };
181
+ } catch {
182
+ return expectsJson
183
+ ? { kind: "invalid-json", bodyText }
184
+ : { kind: "non-json", bodyText };
185
+ }
186
+ }
187
+
188
+ function handleUpstreamError(error: unknown, res: http.ServerResponse): void {
189
+ if (error instanceof Error) {
190
+ const errorCode = (error as { code?: string }).code;
191
+ if (errorCode === "REDIRECT") {
192
+ sendJsonError(res, "Eliza Cloud returned an unexpected redirect.", 502);
193
+ return;
194
+ }
195
+ if (error.name === "TimeoutError" || error.name === "AbortError") {
196
+ sendJsonError(res, "Eliza Cloud request timed out.", 504);
197
+ return;
198
+ }
199
+ if (error.message === "Request body too large") {
200
+ sendJsonError(res, error.message, 413);
201
+ return;
202
+ }
203
+ sendJsonError(
204
+ res,
205
+ `Failed to reach Eliza Cloud: ${error.message || "Unknown error"}`,
206
+ 502,
207
+ );
208
+ return;
209
+ }
210
+
211
+ sendJsonError(res, "Failed to reach Eliza Cloud.", 502);
212
+ }
213
+
214
+ /** Paths under /api/cloud/v1/ are forwarded directly as /api/v1/ on the cloud backend. */
215
+ const CLOUD_V1_PREFIX = "/api/cloud/v1/";
216
+
217
+ export async function handleCloudCompatRoute(
218
+ req: http.IncomingMessage,
219
+ res: http.ServerResponse,
220
+ pathname: string,
221
+ method: string,
222
+ state: CloudCompatRouteState,
223
+ ): Promise<boolean> {
224
+ const isCompatRoute = pathname.startsWith("/api/cloud/compat/");
225
+ const isV1Route = pathname.startsWith(CLOUD_V1_PREFIX);
226
+ if (!isCompatRoute && !isV1Route) return false;
227
+
228
+ const apiKey = resolveProxyApiKey(state);
229
+ if (!apiKey) {
230
+ sendJsonError(
231
+ res,
232
+ "Not connected to Eliza Cloud. Please log in first.",
233
+ 401,
234
+ );
235
+ return true;
236
+ }
237
+
238
+ const baseUrl = resolveCloudBaseUrl(state.config);
239
+ const urlError = await validateCloudBaseUrl(baseUrl);
240
+ if (urlError) {
241
+ sendJsonError(res, urlError, 502);
242
+ return true;
243
+ }
244
+
245
+ // /api/cloud/compat/* → /api/compat/* (existing mapping)
246
+ // /api/cloud/v1/* → /api/v1/* (eliza v1 endpoints, e.g. pairing-token)
247
+ // Both branches strip the leading `/api/cloud` and re-prefix `/api`. The
248
+ // earlier v1 branch used `.slice("/api/cloud".length)` which left
249
+ // `/v1/...` (no `/api/` prefix), causing upstream to return 405 for
250
+ // valid POSTs to e.g. /api/v1/app/agents/{id}/provision.
251
+ const compatPath = pathname.replace("/api/cloud", "/api");
252
+ const fullUrl = req.url ?? pathname;
253
+ const qsIndex = fullUrl.indexOf("?");
254
+ const queryString = qsIndex >= 0 ? fullUrl.slice(qsIndex) : "";
255
+ const upstreamUrl = `${baseUrl}${compatPath}${queryString}`;
256
+ const headers = buildAuthHeaders(state.config, apiKey);
257
+
258
+ try {
259
+ let body: string | undefined;
260
+ if (method !== "GET" && method !== "HEAD") {
261
+ body = await readBody(req);
262
+ }
263
+
264
+ const upstreamRes = await fetchUpstream(upstreamUrl, method, headers, body);
265
+ const parsed = await parseUpstreamJsonResponse(upstreamRes, method);
266
+
267
+ if (parsed.kind === "head") {
268
+ res.statusCode = upstreamRes.status;
269
+ res.end();
270
+ return true;
271
+ }
272
+
273
+ if (parsed.kind === "json") {
274
+ if (upstreamRes.status === 404) {
275
+ sendUpstreamNotFound(res, pathname, parsed.body);
276
+ return true;
277
+ }
278
+ sendJson(res, parsed.body, upstreamRes.status);
279
+ return true;
280
+ }
281
+
282
+ if (upstreamRes.status === 404) {
283
+ sendUpstreamNotFound(res, pathname);
284
+ return true;
285
+ }
286
+
287
+ const upstreamStatus = upstreamRes.ok ? 502 : upstreamRes.status;
288
+ if (parsed.kind === "empty") {
289
+ const message = upstreamRes.ok
290
+ ? "Eliza Cloud returned an empty response."
291
+ : `Eliza Cloud returned HTTP ${upstreamRes.status} with an empty response body.`;
292
+ sendJsonError(res, message, upstreamStatus);
293
+ return true;
294
+ }
295
+
296
+ const message =
297
+ parsed.kind === "invalid-json"
298
+ ? "Eliza Cloud returned malformed JSON."
299
+ : "Eliza Cloud returned a non-JSON response.";
300
+ const detail = summarizeUpstreamBody(parsed.bodyText);
301
+ logger.warn(
302
+ `[cloud-compat] ${message} ${method} ${compatPath} (${upstreamRes.status})${detail ? `: ${detail}` : ""}`,
303
+ );
304
+ sendJsonError(
305
+ res,
306
+ detail ? `${message} ${detail}` : message,
307
+ upstreamStatus,
308
+ );
309
+ return true;
310
+ } catch (error) {
311
+ handleUpstreamError(error, res);
312
+ return true;
313
+ }
314
+ }
@@ -0,0 +1,57 @@
1
+ import type http from "node:http";
2
+ import type { AgentRuntime } from "@elizaos/core";
3
+ import type { CloudProxyConfigLike } from "../lib/config-like";
4
+ import { sendJsonError } from "../lib/http";
5
+
6
+ const LIFEOPS_CLOUD_FEATURES_MODULE: string =
7
+ "@elizaos/app-lifeops";
8
+
9
+ export interface CloudFeaturesRouteState {
10
+ config: CloudProxyConfigLike;
11
+ runtime?: AgentRuntime | null;
12
+ }
13
+
14
+ type CloudFeaturesRoutesModule = {
15
+ handleCloudFeaturesRoute?: (
16
+ req: http.IncomingMessage,
17
+ res: http.ServerResponse,
18
+ pathname: string,
19
+ method: string,
20
+ state: CloudFeaturesRouteState,
21
+ ) => Promise<boolean> | boolean;
22
+ };
23
+
24
+ export async function handleCloudFeaturesRoute(
25
+ req: http.IncomingMessage,
26
+ res: http.ServerResponse,
27
+ pathname: string,
28
+ method: string,
29
+ state: CloudFeaturesRouteState,
30
+ ): Promise<boolean> {
31
+ if (
32
+ pathname !== "/api/cloud/features" &&
33
+ pathname !== "/api/cloud/features/sync"
34
+ ) {
35
+ return false;
36
+ }
37
+
38
+ try {
39
+ const loaded = (await import(
40
+ /* @vite-ignore */ LIFEOPS_CLOUD_FEATURES_MODULE
41
+ )) as CloudFeaturesRoutesModule;
42
+ if (typeof loaded.handleCloudFeaturesRoute !== "function") {
43
+ sendJsonError(res, "LifeOps cloud feature routes are not available", 503);
44
+ return true;
45
+ }
46
+ return await loaded.handleCloudFeaturesRoute(
47
+ req,
48
+ res,
49
+ pathname,
50
+ method,
51
+ state,
52
+ );
53
+ } catch {
54
+ sendJsonError(res, "LifeOps cloud feature routes are not available", 503);
55
+ return true;
56
+ }
57
+ }
@@ -0,0 +1,37 @@
1
+ function hasValue(value: string | undefined): boolean {
2
+ return Boolean(value?.trim());
3
+ }
4
+
5
+ function hasCompatApiToken(): boolean {
6
+ return hasValue(process.env.ELIZA_API_TOKEN);
7
+ }
8
+
9
+ function hasCloudApiKeyProvisioning(): boolean {
10
+ return (
11
+ process.env.ELIZAOS_CLOUD_ENABLED === "true" &&
12
+ hasValue(process.env.ELIZAOS_CLOUD_API_KEY)
13
+ );
14
+ }
15
+
16
+ /**
17
+ * Platform-managed cloud containers should skip local pairing and onboarding UI.
18
+ *
19
+ * In production we may have either:
20
+ * - a Steward sidecar token (older / sidecar-managed path),
21
+ * - an inbound API token injected directly into the container, or
22
+ * - cloud-managed API-key access injected into the runtime environment.
23
+ *
24
+ * Requiring the cloud flag plus one of those credentials keeps accidental local
25
+ * env leakage from triggering cloud behavior, while still matching real deployed
26
+ * cloud containers.
27
+ */
28
+ export function isCloudProvisionedContainer(): boolean {
29
+ const hasCloudFlag = process.env.ELIZA_CLOUD_PROVISIONED === "1";
30
+
31
+ return (
32
+ hasCloudFlag &&
33
+ (hasValue(process.env.STEWARD_AGENT_TOKEN) ||
34
+ hasCompatApiToken() ||
35
+ hasCloudApiKeyProvisioning())
36
+ );
37
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Cloud gateway relay status route.
3
+ *
4
+ * Exposes the current state of the CloudManagedGatewayRelayService
5
+ * so the UI can show whether this local instance is registered with
6
+ * Eliza Cloud and actively receiving routed messages.
7
+ *
8
+ * GET /api/cloud/relay-status
9
+ *
10
+ * The relay service lives in plugin-elizacloud and registers itself
11
+ * as a runtime service named "cloud-managed-gateway-relay". We query
12
+ * it via the runtime.getService interface to avoid a build-time dep.
13
+ */
14
+
15
+ import type http from "node:http";
16
+ import type { RouteHelpers } from "../lib/http";
17
+
18
+ interface RelayServiceLike {
19
+ getSessionInfo(): {
20
+ sessionId: string | null;
21
+ organizationId: string | null;
22
+ userId: string | null;
23
+ agentName: string | null;
24
+ platform: string | null;
25
+ lastSeenAt: string | null;
26
+ status: "idle" | "registered" | "polling" | "error" | "stopped";
27
+ };
28
+ }
29
+
30
+ export interface CloudRelayRouteState {
31
+ runtime?: {
32
+ getService(type: string): unknown;
33
+ };
34
+ }
35
+
36
+ export async function handleCloudRelayRoute(
37
+ _req: http.IncomingMessage,
38
+ res: http.ServerResponse,
39
+ pathname: string,
40
+ method: string,
41
+ state: CloudRelayRouteState,
42
+ helpers: RouteHelpers,
43
+ ): Promise<boolean> {
44
+ if (method !== "GET" || pathname !== "/api/cloud/relay-status") {
45
+ return false;
46
+ }
47
+
48
+ if (!state.runtime) {
49
+ helpers.json(res, {
50
+ available: false,
51
+ status: "no_runtime",
52
+ reason: "Runtime not initialized",
53
+ });
54
+ return true;
55
+ }
56
+
57
+ // Try known service names used across package boundaries.
58
+ const service = (state.runtime.getService("CLOUD_MANAGED_GATEWAY_RELAY") ??
59
+ state.runtime.getService("cloud-managed-gateway-relay") ??
60
+ state.runtime.getService(
61
+ "cloudManagedGatewayRelay",
62
+ )) as RelayServiceLike | null;
63
+
64
+ if (!service || typeof service.getSessionInfo !== "function") {
65
+ helpers.json(res, {
66
+ available: false,
67
+ status: "not_registered",
68
+ reason:
69
+ "Gateway relay service not active. Connect to Eliza Cloud in Settings to enable instance routing.",
70
+ });
71
+ return true;
72
+ }
73
+
74
+ try {
75
+ const info = service.getSessionInfo();
76
+ helpers.json(res, {
77
+ available: true,
78
+ ...info,
79
+ });
80
+ } catch (err) {
81
+ helpers.json(res, {
82
+ available: false,
83
+ status: "error",
84
+ reason: err instanceof Error ? err.message : String(err),
85
+ });
86
+ }
87
+
88
+ return true;
89
+ }