@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,663 @@
1
+ import {
2
+ ChannelType,
3
+ type Content,
4
+ ContentType,
5
+ createMessageMemory,
6
+ createUniqueUuid,
7
+ type HandlerCallback,
8
+ type IAgentRuntime,
9
+ type JsonValue,
10
+ logger,
11
+ type Memory,
12
+ Service,
13
+ type UUID,
14
+ } from "@elizaos/core";
15
+ import type {
16
+ GatewayRelayRequest,
17
+ GatewayRelayRequestEnvelope,
18
+ GatewayRelayResponse,
19
+ PollGatewayRelayResponse,
20
+ RegisterGatewayRelaySessionResponse,
21
+ } from "../types/cloud";
22
+ import type { CloudAuthService } from "./cloud-auth";
23
+
24
+ const POLL_TIMEOUT_MS = 25_000;
25
+ const REQUEST_TIMEOUT_MS = POLL_TIMEOUT_MS + 5_000;
26
+ const RETRY_DELAY_MS = 2_000;
27
+ const IDLE_DELAY_MS = 250;
28
+
29
+ type RelayRequestMethod = "GET" | "POST" | "DELETE";
30
+ type RelayRuntimeStatus = "idle" | "registered" | "polling" | "error" | "stopped";
31
+
32
+ interface RelayRequestJsonOptions {
33
+ method: RelayRequestMethod;
34
+ json?: unknown;
35
+ query?: Record<string, string | number | boolean>;
36
+ timeoutMs?: number;
37
+ }
38
+
39
+ function sleep(ms: number): Promise<void> {
40
+ return new Promise((resolve) => setTimeout(resolve, ms));
41
+ }
42
+
43
+ function isRecord(value: unknown): value is Record<string, unknown> {
44
+ return typeof value === "object" && value !== null && !Array.isArray(value);
45
+ }
46
+
47
+ function isUuidLike(value: string): value is UUID {
48
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
49
+ }
50
+
51
+ function asTrimmedString(value: unknown): string | undefined {
52
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
53
+ }
54
+
55
+ function resolveChannelType(value: unknown): ChannelType {
56
+ const candidate = asTrimmedString(value)?.toUpperCase();
57
+ return candidate && candidate in ChannelType
58
+ ? ChannelType[candidate as keyof typeof ChannelType]
59
+ : ChannelType.DM;
60
+ }
61
+
62
+ function isCloudProvisionedRuntime(): boolean {
63
+ if (typeof process === "undefined") {
64
+ return false;
65
+ }
66
+ return process.env.ELIZA_CLOUD_PROVISIONED === "1";
67
+ }
68
+
69
+ function isNodeHost(): boolean {
70
+ return typeof process !== "undefined" && typeof process.versions?.node === "string";
71
+ }
72
+
73
+ function normalizeAttachments(value: unknown): Content["attachments"] | undefined {
74
+ if (!Array.isArray(value)) {
75
+ return undefined;
76
+ }
77
+
78
+ const attachments = value
79
+ .map((entry, index) => {
80
+ if (!isRecord(entry)) {
81
+ return null;
82
+ }
83
+
84
+ const url = asTrimmedString(entry.url);
85
+ if (!url) {
86
+ return null;
87
+ }
88
+
89
+ const type = asTrimmedString(entry.type)?.toLowerCase();
90
+ return {
91
+ id: asTrimmedString(entry.id) ?? `${index}:${url}`,
92
+ url,
93
+ source: asTrimmedString(entry.source),
94
+ title: asTrimmedString(entry.title),
95
+ description: asTrimmedString(entry.description),
96
+ text: asTrimmedString(entry.text),
97
+ contentType:
98
+ type === "image"
99
+ ? ContentType.IMAGE
100
+ : type === "video"
101
+ ? ContentType.VIDEO
102
+ : type === "audio"
103
+ ? ContentType.AUDIO
104
+ : type === "document"
105
+ ? ContentType.DOCUMENT
106
+ : undefined,
107
+ };
108
+ })
109
+ .filter((entry): entry is NonNullable<typeof entry> => entry !== null);
110
+
111
+ return attachments.length > 0 ? attachments : undefined;
112
+ }
113
+
114
+ function toJsonRecord(value: unknown): Record<string, unknown> | undefined {
115
+ return isRecord(value) ? value : undefined;
116
+ }
117
+
118
+ function toJsonMetadataRecord(value: unknown): Record<string, JsonValue> | undefined {
119
+ if (!isRecord(value)) {
120
+ return undefined;
121
+ }
122
+
123
+ return JSON.parse(JSON.stringify(value)) as Record<string, JsonValue>;
124
+ }
125
+
126
+ type GatewayMessagePayload = {
127
+ text: string;
128
+ roomKey: string;
129
+ channelType: ChannelType;
130
+ source: string;
131
+ senderId: string;
132
+ senderUserName: string;
133
+ senderName: string;
134
+ attachments?: Content["attachments"];
135
+ senderMetadata?: Record<string, unknown>;
136
+ transportMetadata?: Record<string, unknown>;
137
+ };
138
+
139
+ function buildGatewayMessagePayload(
140
+ runtime: IAgentRuntime,
141
+ rpc: GatewayRelayRequest
142
+ ): GatewayMessagePayload | null {
143
+ const params = toJsonRecord(rpc.params);
144
+ const sender = toJsonRecord(params?.sender);
145
+
146
+ const source = asTrimmedString(params?.source) ?? "eliza_cloud_gateway";
147
+ const text = typeof params?.text === "string" ? params.text : "";
148
+ const senderId = asTrimmedString(sender?.id) ?? `${source}:anonymous`;
149
+ const senderUserName = asTrimmedString(sender?.username) ?? senderId;
150
+ const senderName =
151
+ asTrimmedString(sender?.displayName) ?? asTrimmedString(sender?.name) ?? senderUserName;
152
+ const roomKey =
153
+ asTrimmedString(params?.roomId) ??
154
+ `${source}:${senderId}:${String(rpc.id ?? Date.now())}:${runtime.agentId}`;
155
+
156
+ if (!text.trim() && !normalizeAttachments(params?.attachments)?.length) {
157
+ return null;
158
+ }
159
+
160
+ return {
161
+ text: text.trim() || " ",
162
+ roomKey,
163
+ channelType: resolveChannelType(params?.channelType),
164
+ source,
165
+ senderId,
166
+ senderUserName,
167
+ senderName,
168
+ attachments: normalizeAttachments(params?.attachments),
169
+ senderMetadata: toJsonRecord(sender?.metadata),
170
+ transportMetadata: toJsonRecord(params?.metadata),
171
+ };
172
+ }
173
+
174
+ function buildWorldKey(
175
+ source: string,
176
+ metadata: Record<string, unknown> | undefined,
177
+ roomKey: string
178
+ ): string {
179
+ const discord = toJsonRecord(metadata?.discord);
180
+ const guildId = asTrimmedString(discord?.guildId);
181
+ if (guildId) {
182
+ return `gateway:${source}:guild:${guildId}`;
183
+ }
184
+
185
+ const threadId = asTrimmedString(metadata?.threadId);
186
+ if (threadId) {
187
+ return `gateway:${source}:thread:${threadId}`;
188
+ }
189
+
190
+ return `gateway:${source}:room:${roomKey}`;
191
+ }
192
+
193
+ class SessionMissingError extends Error {
194
+ constructor() {
195
+ super("Gateway relay session missing");
196
+ this.name = "SessionMissingError";
197
+ }
198
+ }
199
+
200
+ export class CloudManagedGatewayRelayService extends Service {
201
+ static serviceType = "CLOUD_MANAGED_GATEWAY_RELAY";
202
+ capabilityDescription =
203
+ "Registers a local Eliza runtime with the cloud managed gateway and handles inbound relay traffic";
204
+
205
+ private authService: CloudAuthService | null = null;
206
+ private loopPromise: Promise<void> | null = null;
207
+ private currentSessionId: string | null = null;
208
+ private stopping = false;
209
+ private activeAbortController: AbortController | null = null;
210
+ private relayStatus: RelayRuntimeStatus = "idle";
211
+ private lastSeenAt: string | null = null;
212
+
213
+ static async start(runtime: IAgentRuntime): Promise<Service> {
214
+ const service = new CloudManagedGatewayRelayService(runtime);
215
+ await service.initialize();
216
+ return service;
217
+ }
218
+
219
+ async stop(): Promise<void> {
220
+ this.stopping = true;
221
+ this.relayStatus = "stopped";
222
+ this.activeAbortController?.abort();
223
+
224
+ if (this.loopPromise) {
225
+ await this.loopPromise.catch((error) => {
226
+ logger.debug(
227
+ `[CloudManagedGatewayRelay] Ignoring relay loop shutdown error: ${
228
+ error instanceof Error ? error.message : String(error)
229
+ }`
230
+ );
231
+ });
232
+ }
233
+
234
+ const sessionId = this.currentSessionId;
235
+ this.currentSessionId = null;
236
+ if (sessionId) {
237
+ await this.disconnectSession(sessionId);
238
+ }
239
+ }
240
+
241
+ private async initialize(): Promise<void> {
242
+ if (!isNodeHost()) {
243
+ logger.debug("[CloudManagedGatewayRelay] Skipping gateway relay outside Node.js runtime");
244
+ this.relayStatus = "stopped";
245
+ return;
246
+ }
247
+
248
+ if (isCloudProvisionedRuntime()) {
249
+ logger.debug(
250
+ "[CloudManagedGatewayRelay] Skipping local relay inside provisioned cloud runtime"
251
+ );
252
+ this.relayStatus = "stopped";
253
+ return;
254
+ }
255
+
256
+ if (!this.runtime.messageService) {
257
+ logger.debug("[CloudManagedGatewayRelay] Skipping gateway relay without message service");
258
+ this.relayStatus = "idle";
259
+ return;
260
+ }
261
+
262
+ const auth = this.runtime.getService("CLOUD_AUTH");
263
+ if (!auth) {
264
+ logger.debug("[CloudManagedGatewayRelay] CloudAuthService not available");
265
+ this.relayStatus = "idle";
266
+ return;
267
+ }
268
+
269
+ this.authService = auth as CloudAuthService;
270
+ if (!this.authService.isAuthenticated()) {
271
+ logger.debug(
272
+ "[CloudManagedGatewayRelay] Skipping gateway relay while cloud auth is inactive"
273
+ );
274
+ this.relayStatus = "idle";
275
+ return;
276
+ }
277
+
278
+ this.startRelayLoopIfReady();
279
+ }
280
+
281
+ getSessionInfo(): {
282
+ sessionId: string | null;
283
+ organizationId: string | null;
284
+ userId: string | null;
285
+ agentName: string | null;
286
+ platform: string | null;
287
+ lastSeenAt: string | null;
288
+ status: RelayRuntimeStatus;
289
+ } {
290
+ const auth = this.authService;
291
+ const status =
292
+ this.stopping || this.relayStatus === "stopped"
293
+ ? "stopped"
294
+ : auth?.isAuthenticated() === false
295
+ ? "idle"
296
+ : this.relayStatus;
297
+
298
+ return {
299
+ sessionId: this.currentSessionId,
300
+ organizationId: auth?.getOrganizationId() ?? null,
301
+ userId: auth?.getUserId() ?? null,
302
+ agentName: this.getAgentName(),
303
+ platform: "local-runtime",
304
+ lastSeenAt: this.lastSeenAt,
305
+ status,
306
+ };
307
+ }
308
+
309
+ startRelayLoopIfReady(): boolean {
310
+ if (this.loopPromise && !this.stopping) {
311
+ return true;
312
+ }
313
+
314
+ const auth =
315
+ this.authService ?? (this.runtime.getService("CLOUD_AUTH") as CloudAuthService | null);
316
+ if (!auth?.isAuthenticated() || !this.runtime.messageService) {
317
+ this.relayStatus = "idle";
318
+ return false;
319
+ }
320
+
321
+ this.authService = auth;
322
+ this.stopping = false;
323
+ this.relayStatus = "idle";
324
+ this.loopPromise = this.runLoop();
325
+ logger.info("[CloudManagedGatewayRelay] Local gateway relay loop started");
326
+ return true;
327
+ }
328
+
329
+ private async runLoop(): Promise<void> {
330
+ while (!this.stopping) {
331
+ try {
332
+ if (!this.currentSessionId) {
333
+ this.currentSessionId = await this.registerSession();
334
+ this.relayStatus = "registered";
335
+ this.lastSeenAt = new Date().toISOString();
336
+ continue;
337
+ }
338
+
339
+ this.relayStatus = "polling";
340
+ const request = await this.pollNextRequest(this.currentSessionId);
341
+ this.lastSeenAt = new Date().toISOString();
342
+ if (!request) {
343
+ this.relayStatus = "registered";
344
+ await sleep(IDLE_DELAY_MS);
345
+ continue;
346
+ }
347
+
348
+ const response = await this.handleRequest(request.rpc);
349
+ await this.submitResponse(this.currentSessionId, request.requestId, response);
350
+ this.relayStatus = "registered";
351
+ } catch (error) {
352
+ if (this.stopping) {
353
+ return;
354
+ }
355
+
356
+ if (error instanceof SessionMissingError) {
357
+ this.currentSessionId = null;
358
+ this.relayStatus = "idle";
359
+ await sleep(IDLE_DELAY_MS);
360
+ continue;
361
+ }
362
+
363
+ this.relayStatus = "error";
364
+ logger.warn(
365
+ `[CloudManagedGatewayRelay] Relay loop error: ${
366
+ error instanceof Error ? error.message : String(error)
367
+ }`
368
+ );
369
+ await sleep(RETRY_DELAY_MS);
370
+ }
371
+ }
372
+ }
373
+
374
+ private getAgentName(): string {
375
+ return this.runtime.character?.name?.trim() || "Eliza";
376
+ }
377
+
378
+ private getClient() {
379
+ const client = this.authService?.getClient();
380
+ if (!client) {
381
+ throw new Error("Cloud API client is unavailable");
382
+ }
383
+ return client;
384
+ }
385
+
386
+ private async requestJson<T>(
387
+ path: string,
388
+ options: RelayRequestJsonOptions
389
+ ): Promise<{ status: number; body: T }> {
390
+ const timeoutMs = options.timeoutMs ?? REQUEST_TIMEOUT_MS;
391
+ const controller = new AbortController();
392
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
393
+ this.activeAbortController = controller;
394
+
395
+ try {
396
+ const response = await this.getClient().requestRaw(options.method, path, {
397
+ headers: {
398
+ Accept: "application/json",
399
+ },
400
+ json: options.json,
401
+ query: options.query,
402
+ signal: controller.signal,
403
+ });
404
+
405
+ const body = (await response.json().catch(() => ({}))) as T;
406
+ return { status: response.status, body };
407
+ } finally {
408
+ clearTimeout(timeoutId);
409
+ if (this.activeAbortController === controller) {
410
+ this.activeAbortController = null;
411
+ }
412
+ }
413
+ }
414
+
415
+ private async registerSession(): Promise<string> {
416
+ const { status, body } = await this.requestJson<RegisterGatewayRelaySessionResponse>(
417
+ "/eliza/gateway-relay/sessions",
418
+ {
419
+ method: "POST",
420
+ json: {
421
+ runtimeAgentId: this.runtime.agentId,
422
+ agentName: this.getAgentName(),
423
+ },
424
+ }
425
+ );
426
+
427
+ if (status >= 400 || !body?.success || !body.data?.session?.id) {
428
+ throw new Error(`Failed to register gateway relay session (status=${status})`);
429
+ }
430
+
431
+ logger.info(
432
+ `[CloudManagedGatewayRelay] Registered local runtime for managed gateway (${body.data.session.id})`
433
+ );
434
+ return body.data.session.id;
435
+ }
436
+
437
+ private async disconnectSession(sessionId: string): Promise<void> {
438
+ try {
439
+ await this.requestJson<{ success?: boolean }>(
440
+ `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}`,
441
+ {
442
+ method: "DELETE",
443
+ timeoutMs: 10_000,
444
+ }
445
+ );
446
+ } catch (error) {
447
+ logger.debug(
448
+ `[CloudManagedGatewayRelay] Failed to disconnect relay session ${sessionId}: ${
449
+ error instanceof Error ? error.message : String(error)
450
+ }`
451
+ );
452
+ }
453
+ }
454
+
455
+ private async pollNextRequest(sessionId: string): Promise<GatewayRelayRequestEnvelope | null> {
456
+ const { status, body } = await this.requestJson<PollGatewayRelayResponse>(
457
+ `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}/next`,
458
+ {
459
+ method: "GET",
460
+ query: { timeoutMs: POLL_TIMEOUT_MS },
461
+ timeoutMs: POLL_TIMEOUT_MS + 5_000,
462
+ }
463
+ );
464
+
465
+ if (status === 404) {
466
+ throw new SessionMissingError();
467
+ }
468
+
469
+ if (status >= 400 || !body?.success) {
470
+ throw new Error(`Failed to poll gateway relay session ${sessionId} (status=${status})`);
471
+ }
472
+
473
+ return body.data?.request ?? null;
474
+ }
475
+
476
+ private async submitResponse(
477
+ sessionId: string,
478
+ requestId: string,
479
+ response: GatewayRelayResponse
480
+ ): Promise<void> {
481
+ const { status, body } = await this.requestJson<{ success?: boolean }>(
482
+ `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}/responses`,
483
+ {
484
+ method: "POST",
485
+ json: { requestId, response },
486
+ }
487
+ );
488
+
489
+ if (status === 404) {
490
+ throw new SessionMissingError();
491
+ }
492
+
493
+ if (status >= 400 || body?.success === false) {
494
+ throw new Error(`Failed to submit gateway relay response (status=${status})`);
495
+ }
496
+ }
497
+
498
+ private async handleRequest(rpc: GatewayRelayRequest): Promise<GatewayRelayResponse> {
499
+ switch (rpc.method) {
500
+ case "heartbeat":
501
+ return {
502
+ jsonrpc: "2.0",
503
+ id: rpc.id,
504
+ result: { timestamp: Date.now() },
505
+ };
506
+ case "status.get":
507
+ return {
508
+ jsonrpc: "2.0",
509
+ id: rpc.id,
510
+ result: {
511
+ status: "running",
512
+ runtimeAgentId: this.runtime.agentId,
513
+ agentName: this.getAgentName(),
514
+ },
515
+ };
516
+ case "message.send":
517
+ return this.handleMessageSend(rpc);
518
+ default:
519
+ return {
520
+ jsonrpc: "2.0",
521
+ id: rpc.id,
522
+ error: {
523
+ code: -32601,
524
+ message: `Unsupported relay method: ${rpc.method}`,
525
+ },
526
+ };
527
+ }
528
+ }
529
+
530
+ private async handleMessageSend(rpc: GatewayRelayRequest): Promise<GatewayRelayResponse> {
531
+ if (!this.runtime.messageService) {
532
+ return {
533
+ jsonrpc: "2.0",
534
+ id: rpc.id,
535
+ error: { code: -32603, message: "Message service is not available" },
536
+ };
537
+ }
538
+
539
+ const payload = buildGatewayMessagePayload(this.runtime, rpc);
540
+ if (!payload) {
541
+ return {
542
+ jsonrpc: "2.0",
543
+ id: rpc.id,
544
+ error: { code: -32602, message: "Invalid message relay payload" },
545
+ };
546
+ }
547
+
548
+ const roomId = isUuidLike(payload.roomKey)
549
+ ? payload.roomKey
550
+ : createUniqueUuid(this.runtime, payload.roomKey);
551
+ const worldId = createUniqueUuid(
552
+ this.runtime,
553
+ buildWorldKey(payload.source, payload.transportMetadata, payload.roomKey)
554
+ );
555
+ const entityId = createUniqueUuid(this.runtime, `${payload.source}:${payload.senderId}`);
556
+ const messageServerId = createUniqueUuid(this.runtime, `eliza-cloud-gateway:${payload.source}`);
557
+ const messageId = createUniqueUuid(
558
+ this.runtime,
559
+ `${payload.source}:${payload.roomKey}:${String(rpc.id ?? Date.now())}:inbound`
560
+ );
561
+
562
+ const transportMetadata = toJsonMetadataRecord(payload.transportMetadata);
563
+
564
+ await this.runtime.ensureConnection({
565
+ entityId,
566
+ roomId,
567
+ roomName: payload.roomKey,
568
+ worldId,
569
+ worldName: payload.source,
570
+ userName: payload.senderUserName,
571
+ name: payload.senderName,
572
+ source: payload.source,
573
+ channelId: payload.roomKey,
574
+ type: payload.channelType,
575
+ messageServerId,
576
+ metadata: transportMetadata,
577
+ });
578
+
579
+ const message = createMessageMemory({
580
+ id: messageId,
581
+ entityId,
582
+ agentId: this.runtime.agentId,
583
+ roomId,
584
+ content: {
585
+ text: payload.text,
586
+ source: payload.source,
587
+ channelType: payload.channelType,
588
+ ...(payload.attachments ? { attachments: payload.attachments } : {}),
589
+ },
590
+ });
591
+
592
+ message.metadata = {
593
+ ...(message.metadata as Record<string, JsonValue>),
594
+ entityName: payload.senderName,
595
+ entityUserName: payload.senderUserName,
596
+ ...(payload.senderMetadata
597
+ ? { gatewaySender: toJsonMetadataRecord(payload.senderMetadata) }
598
+ : {}),
599
+ ...(payload.transportMetadata ? { gatewayMetadata: transportMetadata } : {}),
600
+ } as typeof message.metadata;
601
+
602
+ const callbackTexts: string[] = [];
603
+ const callback: HandlerCallback = async (content: Content) => {
604
+ const responseText = typeof content.text === "string" ? content.text : "";
605
+ if (responseText.trim()) {
606
+ callbackTexts.push(responseText);
607
+ }
608
+
609
+ const responseMemory = createMessageMemory({
610
+ id: createUniqueUuid(
611
+ this.runtime,
612
+ `${payload.source}:${payload.roomKey}:${String(
613
+ rpc.id ?? Date.now()
614
+ )}:response:${callbackTexts.length}`
615
+ ),
616
+ entityId: this.runtime.agentId,
617
+ agentId: this.runtime.agentId,
618
+ roomId,
619
+ content: {
620
+ ...content,
621
+ text: responseText,
622
+ source: payload.source,
623
+ channelType: payload.channelType,
624
+ },
625
+ });
626
+
627
+ await this.runtime.createMemory(responseMemory, "messages");
628
+ return [responseMemory as Memory];
629
+ };
630
+
631
+ try {
632
+ const result = await this.runtime.messageService.handleMessage(
633
+ this.runtime,
634
+ message,
635
+ callback
636
+ );
637
+ const replyText =
638
+ callbackTexts[callbackTexts.length - 1] ??
639
+ (typeof result.responseContent?.text === "string"
640
+ ? result.responseContent.text
641
+ : undefined);
642
+
643
+ return {
644
+ jsonrpc: "2.0",
645
+ id: rpc.id,
646
+ result: {
647
+ didRespond: result.didRespond,
648
+ ...(replyText ? { text: replyText } : {}),
649
+ runtimeAgentId: this.runtime.agentId,
650
+ },
651
+ };
652
+ } catch (error) {
653
+ return {
654
+ jsonrpc: "2.0",
655
+ id: rpc.id,
656
+ error: {
657
+ code: -32603,
658
+ message: error instanceof Error ? error.message : String(error),
659
+ },
660
+ };
661
+ }
662
+ }
663
+ }