@elizaos/plugin-elizacloud 2.0.0-alpha.8 → 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 -38
  6. package/dist/cjs/index.d.ts +2 -2
  7. package/dist/cjs/index.node.cjs +12165 -2277
  8. package/dist/cjs/index.node.js.map +135 -28
  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 -3
  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 +14 -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 +12170 -2266
  147. package/dist/node/index.node.js.map +135 -28
  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,602 @@
1
+ /**
2
+ * HTTP client for the Eliza Cloud Eliza Sandbox API.
3
+ */
4
+ import { normalizeCloudSiteUrl } from "./base-url.js";
5
+
6
+ export type CloudChainType = "evm" | "solana";
7
+ export type CloudWalletProvider = "privy" | "steward";
8
+
9
+ export interface CloudWalletDescriptor {
10
+ agentWalletId: string;
11
+ walletAddress: string;
12
+ walletProvider: CloudWalletProvider;
13
+ chainType: CloudChainType;
14
+ balance?: string | number;
15
+ }
16
+
17
+ interface CloudWalletAddresses {
18
+ evm?: string | null;
19
+ solana?: string | null;
20
+ }
21
+
22
+ export interface SignedRpcEnvelope {
23
+ clientAddress: string;
24
+ payload: {
25
+ method: string;
26
+ params: unknown[];
27
+ };
28
+ nonce: string;
29
+ timestamp: number;
30
+ signature: string;
31
+ correlationId?: string;
32
+ }
33
+
34
+ export interface RpcResult {
35
+ [key: string]: unknown;
36
+ }
37
+
38
+ export class CloudBridgeError extends Error {
39
+ constructor(
40
+ message: string,
41
+ public readonly status?: number,
42
+ public readonly body?: string,
43
+ ) {
44
+ super(message);
45
+ this.name = "CloudBridgeError";
46
+ }
47
+ }
48
+
49
+ export class SignatureInvalidError extends CloudBridgeError {
50
+ constructor(message: string, body?: string) {
51
+ super(message, 401, body);
52
+ this.name = "SignatureInvalidError";
53
+ }
54
+ }
55
+
56
+ export class NonceReplayError extends CloudBridgeError {
57
+ constructor(message: string, body?: string) {
58
+ super(message, 409, body);
59
+ this.name = "NonceReplayError";
60
+ }
61
+ }
62
+
63
+ export class SessionExpiredError extends CloudBridgeError {
64
+ constructor(message: string, body?: string) {
65
+ super(message, 410, body);
66
+ this.name = "SessionExpiredError";
67
+ }
68
+ }
69
+
70
+ export class CloudUnavailableError extends CloudBridgeError {
71
+ constructor(message: string, status: number, body?: string) {
72
+ super(message, status, body);
73
+ this.name = "CloudUnavailableError";
74
+ }
75
+ }
76
+
77
+ export interface CloudAgent {
78
+ id: string;
79
+ agentName: string;
80
+ status: string;
81
+ databaseStatus: string;
82
+ bridgeUrl?: string;
83
+ lastBackupAt?: string;
84
+ lastHeartbeatAt?: string;
85
+ errorMessage?: string;
86
+ errorCount?: number;
87
+ createdAt: string;
88
+ updatedAt: string;
89
+ }
90
+
91
+ export interface CloudAgentCreateParams {
92
+ agentName: string;
93
+ agentConfig?: Record<string, unknown>;
94
+ environmentVars?: Record<string, string>;
95
+ }
96
+
97
+ export interface ProvisionInfo {
98
+ id: string;
99
+ agentName: string;
100
+ status: string;
101
+ bridgeUrl?: string;
102
+ healthUrl?: string;
103
+ }
104
+
105
+ export interface BackupInfo {
106
+ id: string;
107
+ snapshotType: string;
108
+ sizeBytes: number | null;
109
+ createdAt: string;
110
+ }
111
+
112
+ export type ChatChannelType =
113
+ | "DM"
114
+ | "GROUP"
115
+ | "VOICE_DM"
116
+ | "VOICE_GROUP"
117
+ | "API";
118
+
119
+ interface ApiResponse<T> {
120
+ success: boolean;
121
+ data?: T;
122
+ error?: string;
123
+ }
124
+
125
+ function formatApiErrorBody(text: string): string | null {
126
+ if (!text) return null;
127
+ try {
128
+ const parsed = JSON.parse(text) as {
129
+ error?: unknown;
130
+ details?: Array<{ message?: unknown }>;
131
+ };
132
+ const baseError =
133
+ typeof parsed.error === "string" && parsed.error.trim().length > 0
134
+ ? parsed.error.trim()
135
+ : null;
136
+ const details = Array.isArray(parsed.details)
137
+ ? parsed.details
138
+ .map((detail) =>
139
+ typeof detail?.message === "string" ? detail.message.trim() : "",
140
+ )
141
+ .filter((message) => message.length > 0)
142
+ : [];
143
+ if (baseError && details.length > 0) {
144
+ return `${baseError}: ${details.join("; ")}`;
145
+ }
146
+ if (baseError) return baseError;
147
+ } catch {
148
+ /* plain text */
149
+ }
150
+
151
+ return text.slice(0, 200) || null;
152
+ }
153
+
154
+ function isRedirectResponse(response: Response): boolean {
155
+ return response.status >= 300 && response.status < 400;
156
+ }
157
+
158
+ function normalizeChainAddress(
159
+ addresses: CloudWalletAddresses | null | undefined,
160
+ chain: CloudChainType,
161
+ ): string | null {
162
+ const value = addresses?.[chain];
163
+ if (typeof value !== "string") return null;
164
+ const trimmed = value.trim();
165
+ return trimmed.length > 0 ? trimmed : null;
166
+ }
167
+
168
+ function looksLikeChainAddress(
169
+ address: string,
170
+ chain: CloudChainType,
171
+ ): boolean {
172
+ if (chain === "evm") {
173
+ return /^0x[a-fA-F0-9]{40}$/.test(address);
174
+ }
175
+
176
+ return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);
177
+ }
178
+
179
+ function resolveRequestedWalletAddress(
180
+ data: {
181
+ walletAddress: string | null;
182
+ walletAddresses?: CloudWalletAddresses | null;
183
+ },
184
+ chain: CloudChainType,
185
+ ): string | null {
186
+ const explicit = normalizeChainAddress(data.walletAddresses, chain);
187
+ if (explicit) return explicit;
188
+ if (typeof data.walletAddress !== "string") return null;
189
+
190
+ const trimmed = data.walletAddress.trim();
191
+ if (!trimmed) return null;
192
+ return looksLikeChainAddress(trimmed, chain) ? trimmed : null;
193
+ }
194
+
195
+ export class ElizaCloudClient {
196
+ private baseUrl: string;
197
+ private apiKey: string;
198
+
199
+ constructor(baseUrl: string, apiKey: string) {
200
+ this.baseUrl = normalizeCloudSiteUrl(baseUrl);
201
+ this.apiKey = apiKey;
202
+ }
203
+
204
+ async listAgents(): Promise<CloudAgent[]> {
205
+ const res = await this.request<CloudAgent[]>("GET", "/api/v1/eliza/agents");
206
+ return res.data ?? [];
207
+ }
208
+
209
+ async createAgent(params: CloudAgentCreateParams): Promise<CloudAgent> {
210
+ const res = await this.request<CloudAgent>(
211
+ "POST",
212
+ "/api/v1/eliza/agents",
213
+ params,
214
+ );
215
+ if (!res.success || !res.data)
216
+ throw new Error(res.error ?? "Failed to create cloud agent");
217
+ return res.data;
218
+ }
219
+
220
+ async getAgent(agentId: string): Promise<CloudAgent> {
221
+ const res = await this.request<CloudAgent>(
222
+ "GET",
223
+ `/api/v1/eliza/agents/${agentId}`,
224
+ );
225
+ if (!res.success || !res.data)
226
+ throw new Error(res.error ?? "Agent not found");
227
+ return res.data;
228
+ }
229
+
230
+ async deleteAgent(agentId: string): Promise<void> {
231
+ const res = await this.request<void>(
232
+ "DELETE",
233
+ `/api/v1/eliza/agents/${agentId}`,
234
+ );
235
+ if (!res.success) throw new Error(res.error ?? "Failed to delete agent");
236
+ }
237
+
238
+ async provision(agentId: string): Promise<ProvisionInfo> {
239
+ const res = await this.request<ProvisionInfo>(
240
+ "POST",
241
+ `/api/v1/eliza/agents/${agentId}/provision`,
242
+ );
243
+ if (!res.success || !res.data)
244
+ throw new Error(res.error ?? "Failed to provision sandbox");
245
+ return res.data;
246
+ }
247
+
248
+ async sendMessage(
249
+ agentId: string,
250
+ text: string,
251
+ roomId = "web-chat",
252
+ channelType: ChatChannelType = "DM",
253
+ ): Promise<string> {
254
+ const url = `${this.baseUrl}/api/v1/eliza/agents/${agentId}/bridge`;
255
+ const response = await fetch(url, {
256
+ method: "POST",
257
+ headers: { "Content-Type": "application/json", "X-Api-Key": this.apiKey },
258
+ body: JSON.stringify({
259
+ jsonrpc: "2.0",
260
+ id: crypto.randomUUID(),
261
+ method: "message.send",
262
+ params: { text, roomId, channelType },
263
+ }),
264
+ redirect: "manual",
265
+ signal: AbortSignal.timeout(60_000),
266
+ });
267
+
268
+ if (isRedirectResponse(response)) {
269
+ throw new Error(
270
+ "Bridge request was redirected; redirects are not allowed",
271
+ );
272
+ }
273
+
274
+ if (!response.ok) {
275
+ const errorText = await response.text().catch(() => "");
276
+ throw new Error(
277
+ `Bridge request failed: HTTP ${response.status} ${errorText.slice(0, 200)}`,
278
+ );
279
+ }
280
+
281
+ const rpc = (await response.json()) as {
282
+ result?: { text?: string };
283
+ error?: { code: number; message: string };
284
+ };
285
+
286
+ if (rpc.error) throw new Error(rpc.error.message);
287
+ return rpc.result?.text ?? "(no response)";
288
+ }
289
+
290
+ async *sendMessageStream(
291
+ agentId: string,
292
+ text: string,
293
+ roomId = "web-chat",
294
+ channelType: ChatChannelType = "DM",
295
+ ): AsyncGenerator<{ type: string; data: Record<string, unknown> }> {
296
+ const url = `${this.baseUrl}/api/v1/eliza/agents/${agentId}/stream`;
297
+ const response = await fetch(url, {
298
+ method: "POST",
299
+ headers: { "Content-Type": "application/json", "X-Api-Key": this.apiKey },
300
+ body: JSON.stringify({
301
+ jsonrpc: "2.0",
302
+ id: crypto.randomUUID(),
303
+ method: "message.send",
304
+ params: { text, roomId, channelType },
305
+ }),
306
+ redirect: "manual",
307
+ });
308
+
309
+ if (isRedirectResponse(response)) {
310
+ throw new Error(
311
+ "Stream request was redirected; redirects are not allowed",
312
+ );
313
+ }
314
+
315
+ if (!response.ok || !response.body) {
316
+ throw new Error(`Stream request failed: HTTP ${response.status}`);
317
+ }
318
+
319
+ const reader = response.body.getReader();
320
+ const decoder = new TextDecoder();
321
+ let buffer = "";
322
+
323
+ for (;;) {
324
+ const { done, value } = await reader.read();
325
+ if (done) break;
326
+
327
+ buffer += decoder.decode(value, { stream: true });
328
+ const parts = buffer.split("\n\n");
329
+ buffer = parts.pop() ?? "";
330
+
331
+ for (const part of parts) {
332
+ if (!part.trim()) continue;
333
+ let eventType = "message";
334
+ let eventData = "";
335
+
336
+ for (const line of part.split("\n")) {
337
+ if (line.startsWith("event: ")) eventType = line.slice(7).trim();
338
+ else if (line.startsWith("data: "))
339
+ eventData += (eventData ? "\n" : "") + line.slice(6);
340
+ }
341
+
342
+ if (eventData) {
343
+ let data: Record<string, unknown>;
344
+ try {
345
+ data = JSON.parse(eventData) as Record<string, unknown>;
346
+ } catch {
347
+ continue;
348
+ }
349
+ yield { type: eventType, data };
350
+ }
351
+ }
352
+ }
353
+ }
354
+
355
+ async snapshot(agentId: string): Promise<BackupInfo> {
356
+ const res = await this.request<BackupInfo>(
357
+ "POST",
358
+ `/api/v1/eliza/agents/${agentId}/snapshot`,
359
+ );
360
+ if (!res.success || !res.data)
361
+ throw new Error(res.error ?? "Snapshot failed");
362
+ return res.data;
363
+ }
364
+
365
+ async listBackups(agentId: string): Promise<BackupInfo[]> {
366
+ const res = await this.request<BackupInfo[]>(
367
+ "GET",
368
+ `/api/v1/eliza/agents/${agentId}/backups`,
369
+ );
370
+ return res.data ?? [];
371
+ }
372
+
373
+ async restore(agentId: string, backupId?: string): Promise<void> {
374
+ const res = await this.request<void>(
375
+ "POST",
376
+ `/api/v1/eliza/agents/${agentId}/restore`,
377
+ backupId ? { backupId } : {},
378
+ );
379
+ if (!res.success) throw new Error(res.error ?? "Restore failed");
380
+ }
381
+
382
+ async heartbeat(agentId: string): Promise<boolean> {
383
+ const url = `${this.baseUrl}/api/v1/eliza/agents/${agentId}/bridge`;
384
+ try {
385
+ const response = await fetch(url, {
386
+ method: "POST",
387
+ headers: {
388
+ "Content-Type": "application/json",
389
+ "X-Api-Key": this.apiKey,
390
+ },
391
+ body: JSON.stringify({ jsonrpc: "2.0", method: "heartbeat" }),
392
+ redirect: "manual",
393
+ signal: AbortSignal.timeout(10_000),
394
+ });
395
+ if (isRedirectResponse(response)) return false;
396
+ return response.ok;
397
+ } catch {
398
+ return false;
399
+ }
400
+ }
401
+
402
+ /**
403
+ * Fetch the cloud-side wallet descriptor for an agent.
404
+ * Uses the standard API-key auth (X-Api-Key).
405
+ */
406
+ async getAgentWallet(
407
+ agentId: string,
408
+ chain: CloudChainType,
409
+ ): Promise<CloudWalletDescriptor> {
410
+ const res = await this.request<{
411
+ agentId?: string;
412
+ walletAddress: string | null;
413
+ walletAddresses?: CloudWalletAddresses | null;
414
+ walletProvider: CloudWalletProvider | null;
415
+ walletStatus?: string;
416
+ balance?: string | number | null;
417
+ chain?: string;
418
+ }>(
419
+ "GET",
420
+ `/api/v1/eliza/agents/${encodeURIComponent(agentId)}/wallet?chain=${encodeURIComponent(chain)}`,
421
+ );
422
+
423
+ if (!res.success || !res.data) {
424
+ throw new CloudBridgeError(res.error ?? "Failed to fetch agent wallet");
425
+ }
426
+
427
+ const data = res.data;
428
+ const walletAddress = resolveRequestedWalletAddress(data, chain);
429
+ if (!walletAddress || !data.walletProvider) {
430
+ throw new CloudBridgeError(
431
+ `Agent has no cloud ${chain} wallet provisioned`,
432
+ );
433
+ }
434
+
435
+ return {
436
+ agentWalletId: data.agentId ?? agentId,
437
+ walletAddress,
438
+ walletProvider: data.walletProvider,
439
+ chainType: chain,
440
+ balance: data.balance ?? undefined,
441
+ };
442
+ }
443
+
444
+ /**
445
+ * Provision a cloud-custodied server wallet tied to a local client address.
446
+ * Idempotent server-side: returns the existing wallet if one already exists
447
+ * for the (user, clientAddress, chain) tuple.
448
+ */
449
+ async provisionWallet(input: {
450
+ chainType: CloudChainType;
451
+ clientAddress: string;
452
+ }): Promise<{
453
+ walletId: string;
454
+ address: string;
455
+ chainType: CloudChainType;
456
+ provider: CloudWalletProvider;
457
+ }> {
458
+ const res = await this.request<{
459
+ id: string;
460
+ address: string;
461
+ chainType: CloudChainType;
462
+ clientAddress: string;
463
+ provider?: CloudWalletProvider;
464
+ }>("POST", "/api/v1/user/wallets/provision", input);
465
+
466
+ if (!res.success || !res.data) {
467
+ throw new CloudBridgeError(res.error ?? "Failed to provision wallet");
468
+ }
469
+
470
+ return {
471
+ walletId: res.data.id,
472
+ address: res.data.address,
473
+ chainType: res.data.chainType,
474
+ provider: res.data.provider ?? "privy",
475
+ };
476
+ }
477
+
478
+ /**
479
+ * Execute a signed RPC envelope through the cloud custodial signer.
480
+ *
481
+ * Auth: body-embedded wallet signature — we MUST NOT send X-Api-Key/Bearer
482
+ * headers here. The cloud verifies the signature against the
483
+ * agentServerWallets.client_address registered at provision time.
484
+ *
485
+ * Error mapping:
486
+ * 401 → SignatureInvalidError
487
+ * 409 → NonceReplayError
488
+ * 410 → SessionExpiredError
489
+ * 5xx → CloudUnavailableError
490
+ */
491
+ async executeRpc(envelope: SignedRpcEnvelope): Promise<RpcResult> {
492
+ const { correlationId, ...body } = envelope;
493
+ const headers: Record<string, string> = {
494
+ "Content-Type": "application/json",
495
+ };
496
+ if (correlationId) {
497
+ headers["X-Correlation-Id"] = correlationId;
498
+ }
499
+
500
+ let response: Response;
501
+ try {
502
+ response = await fetch(`${this.baseUrl}/api/v1/user/wallets/rpc`, {
503
+ method: "POST",
504
+ headers,
505
+ body: JSON.stringify(body),
506
+ redirect: "manual",
507
+ signal: AbortSignal.timeout(60_000),
508
+ });
509
+ } catch (err) {
510
+ throw new CloudUnavailableError(
511
+ `Cloud RPC network error: ${(err as Error).message}`,
512
+ 0,
513
+ );
514
+ }
515
+
516
+ if (isRedirectResponse(response)) {
517
+ throw new CloudBridgeError(
518
+ "Cloud RPC request was redirected; redirects are not allowed",
519
+ response.status,
520
+ );
521
+ }
522
+
523
+ const text = await response.text().catch(() => "");
524
+
525
+ if (response.ok) {
526
+ try {
527
+ const parsed = JSON.parse(text) as ApiResponse<RpcResult>;
528
+ if (!parsed.success || parsed.data === undefined) {
529
+ throw new CloudBridgeError(
530
+ parsed.error ?? "Cloud RPC returned no data",
531
+ response.status,
532
+ text,
533
+ );
534
+ }
535
+ return parsed.data;
536
+ } catch (err) {
537
+ if (err instanceof CloudBridgeError) throw err;
538
+ throw new CloudBridgeError(
539
+ `Cloud RPC returned malformed JSON: ${(err as Error).message}`,
540
+ response.status,
541
+ text,
542
+ );
543
+ }
544
+ }
545
+
546
+ let errMessage = `HTTP ${response.status}`;
547
+ try {
548
+ const parsed = JSON.parse(text) as { error?: string };
549
+ if (parsed.error) errMessage = parsed.error;
550
+ } catch {
551
+ if (text) errMessage = text.slice(0, 200);
552
+ }
553
+
554
+ if (response.status === 401) {
555
+ throw new SignatureInvalidError(errMessage, text);
556
+ }
557
+ if (response.status === 409) {
558
+ throw new NonceReplayError(errMessage, text);
559
+ }
560
+ if (response.status === 410) {
561
+ throw new SessionExpiredError(errMessage, text);
562
+ }
563
+ if (response.status >= 500) {
564
+ throw new CloudUnavailableError(errMessage, response.status, text);
565
+ }
566
+ throw new CloudBridgeError(errMessage, response.status, text);
567
+ }
568
+
569
+ private async request<T>(
570
+ method: string,
571
+ path: string,
572
+ body?: unknown,
573
+ ): Promise<ApiResponse<T>> {
574
+ const headers: Record<string, string> = { "X-Api-Key": this.apiKey };
575
+ if (body !== undefined) headers["Content-Type"] = "application/json";
576
+
577
+ const response = await fetch(`${this.baseUrl}${path}`, {
578
+ method,
579
+ headers,
580
+ body: body !== undefined ? JSON.stringify(body) : undefined,
581
+ redirect: "manual",
582
+ signal: AbortSignal.timeout(30_000),
583
+ });
584
+
585
+ if (isRedirectResponse(response)) {
586
+ return {
587
+ success: false,
588
+ error: "Cloud API request was redirected; redirects are not allowed",
589
+ };
590
+ }
591
+
592
+ if (!response.ok) {
593
+ const text = await response.text().catch(() => "");
594
+ return {
595
+ success: false,
596
+ error: formatApiErrorBody(text) ?? `HTTP ${response.status}`,
597
+ };
598
+ }
599
+
600
+ return (await response.json()) as ApiResponse<T>;
601
+ }
602
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Cloud API key + base URL resolution.
3
+ *
4
+ * Resolves the Eliza Cloud API key and base URL from (in priority order):
5
+ * 1. Explicit `config.cloud.apiKey` / `config.cloud.baseUrl`
6
+ * 2. Runtime settings + character secrets (`ELIZAOS_CLOUD_API_KEY`)
7
+ * 3. Process env (`ELIZAOS_CLOUD_API_KEY`, `ELIZAOS_CLOUD_BASE_URL`)
8
+ *
9
+ * Previously these helpers lived in `packages/agent/src/api/wallet-rpc.ts`
10
+ * because the wallet uses Cloud RPC proxies. They are NOT wallet-specific —
11
+ * cloud auth is consumed by cloud-status, cloud-billing, cloud-compat,
12
+ * health, x-relay, and travel-provider-relay routes. Hosting them under
13
+ * `cloud/` matches their actual ownership.
14
+ */
15
+
16
+ import type { ElizaConfig } from "../lib/config-like";
17
+
18
+ export const DEFAULT_CLOUD_API_BASE_URL = "https://elizacloud.ai/api/v1";
19
+
20
+ export type CloudApiKeyRuntimeLike = {
21
+ getSetting?: (key: string) => unknown;
22
+ character?: {
23
+ secrets?: Record<string, unknown>;
24
+ } | null;
25
+ } | null;
26
+
27
+ export function normalizeCloudSecret(
28
+ value: string | null | undefined,
29
+ ): string | null {
30
+ if (typeof value !== "string") return null;
31
+ const trimmed = value.trim();
32
+ return trimmed.length > 0 ? trimmed : null;
33
+ }
34
+
35
+ function resolveRuntimeCloudApiKey(
36
+ runtime?: CloudApiKeyRuntimeLike,
37
+ ): string | null {
38
+ const fromSetting = runtime?.getSetting?.("ELIZAOS_CLOUD_API_KEY");
39
+ if (typeof fromSetting === "string") {
40
+ return normalizeCloudSecret(fromSetting);
41
+ }
42
+
43
+ const fromSecrets = runtime?.character?.secrets?.ELIZAOS_CLOUD_API_KEY;
44
+ return typeof fromSecrets === "string"
45
+ ? normalizeCloudSecret(fromSecrets)
46
+ : null;
47
+ }
48
+
49
+ export function resolveCloudApiBaseUrl(
50
+ rawBaseUrl?: string | null,
51
+ ): string | null {
52
+ const candidate =
53
+ normalizeCloudSecret(rawBaseUrl ?? process.env.ELIZAOS_CLOUD_BASE_URL) ??
54
+ DEFAULT_CLOUD_API_BASE_URL;
55
+ try {
56
+ const parsed = new URL(candidate);
57
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
58
+ return null;
59
+ }
60
+ parsed.hash = "";
61
+ parsed.search = "";
62
+ const normalizedBase = parsed.toString().replace(/\/+$/, "");
63
+ return normalizedBase.endsWith("/api/v1")
64
+ ? normalizedBase
65
+ : `${normalizedBase}/api/v1`;
66
+ } catch {
67
+ return null;
68
+ }
69
+ }
70
+
71
+ export function resolveCloudApiKey(
72
+ config?: Pick<ElizaConfig, "cloud"> | null,
73
+ runtime?: CloudApiKeyRuntimeLike,
74
+ ): string | null {
75
+ return normalizeCloudSecret(
76
+ config?.cloud?.apiKey ??
77
+ resolveRuntimeCloudApiKey(runtime) ??
78
+ process.env.ELIZAOS_CLOUD_API_KEY,
79
+ );
80
+ }