@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,241 @@
1
+ import { createRequire } from "node:module";
2
+ var __defProp = Object.defineProperty;
3
+ var __returnValue = (v) => v;
4
+ function __exportSetter(name, newValue) {
5
+ this[name] = __returnValue.bind(null, newValue);
6
+ }
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true,
12
+ configurable: true,
13
+ set: __exportSetter.bind(all, name)
14
+ });
15
+ };
16
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
18
+
19
+ // src/types/cloud.ts
20
+ import {
21
+ CloudApiError,
22
+ InsufficientCreditsError
23
+ } from "@elizaos/cloud-sdk";
24
+ var DEFAULT_CLOUD_CONFIG = {
25
+ enabled: false,
26
+ baseUrl: "https://www.elizacloud.ai/api/v1",
27
+ inferenceMode: "cloud",
28
+ autoProvision: false,
29
+ bridge: {
30
+ reconnectIntervalMs: 3000,
31
+ maxReconnectAttempts: 20,
32
+ heartbeatIntervalMs: 30000
33
+ },
34
+ backup: {
35
+ autoBackupIntervalMs: 3600000,
36
+ maxSnapshots: 10
37
+ },
38
+ container: {
39
+ defaultImage: "elizaos/agent:latest",
40
+ defaultArchitecture: "arm64",
41
+ defaultCpu: 1792,
42
+ defaultMemory: 1792,
43
+ defaultPort: 3000
44
+ }
45
+ };
46
+
47
+ // src/services/cloud-container.ts
48
+ import { logger, Service } from "@elizaos/core";
49
+ class CloudContainerService extends Service {
50
+ static serviceType = "CLOUD_CONTAINER";
51
+ capabilityDescription = "ElizaCloud container provisioning and lifecycle management";
52
+ authService;
53
+ containerDefaults = DEFAULT_CLOUD_CONFIG.container;
54
+ tracked = new Map;
55
+ static async start(runtime) {
56
+ const service = new CloudContainerService(runtime);
57
+ await service.initialize();
58
+ return service;
59
+ }
60
+ async stop() {
61
+ for (const [, tracked] of this.tracked) {
62
+ if (tracked.pollingTimer)
63
+ clearTimeout(tracked.pollingTimer);
64
+ if (tracked.healthTimer)
65
+ clearInterval(tracked.healthTimer);
66
+ }
67
+ this.tracked.clear();
68
+ }
69
+ async initialize() {
70
+ const auth = this.runtime.getService("CLOUD_AUTH");
71
+ if (!auth) {
72
+ logger.debug("[CloudContainer] CloudAuthService not available, container operations will fail");
73
+ return;
74
+ }
75
+ this.authService = auth;
76
+ if (this.authService.isAuthenticated()) {
77
+ const containers = await this.listContainers();
78
+ for (const container of containers) {
79
+ this.tracked.set(container.id, {
80
+ container,
81
+ pollingTimer: null,
82
+ healthTimer: null
83
+ });
84
+ if (container.status === "pending" || container.status === "building" || container.status === "deploying") {
85
+ this.startPolling(container.id);
86
+ }
87
+ if (container.status === "running") {
88
+ this.startHealthMonitoring(container.id);
89
+ }
90
+ }
91
+ logger.info(`[CloudContainer] Loaded ${containers.length} existing container(s)`);
92
+ }
93
+ }
94
+ getClient() {
95
+ return this.authService.getClient();
96
+ }
97
+ async createContainer(request) {
98
+ const client = this.getClient();
99
+ const defaults = this.containerDefaults;
100
+ const payload = {
101
+ name: request.name,
102
+ project_name: request.project_name,
103
+ description: request.description,
104
+ port: request.port ?? defaults.defaultPort,
105
+ desired_count: request.desired_count ?? 1,
106
+ cpu: request.cpu ?? defaults.defaultCpu,
107
+ memory: request.memory ?? defaults.defaultMemory,
108
+ environment_vars: request.environment_vars ?? {},
109
+ health_check_path: request.health_check_path ?? "/health",
110
+ ecr_image_uri: request.ecr_image_uri,
111
+ ecr_repository_uri: request.ecr_repository_uri,
112
+ image_tag: request.image_tag,
113
+ architecture: request.architecture ?? defaults.defaultArchitecture
114
+ };
115
+ const response = await client.post("/containers", payload);
116
+ this.tracked.set(response.data.id, {
117
+ container: response.data,
118
+ pollingTimer: null,
119
+ healthTimer: null
120
+ });
121
+ this.startPolling(response.data.id);
122
+ logger.info(`[CloudContainer] Created container "${request.name}" (id=${response.data.id}, stack=${response.stackName})`);
123
+ return response;
124
+ }
125
+ async listContainers() {
126
+ const client = this.getClient();
127
+ const response = await client.get("/containers");
128
+ return response.data;
129
+ }
130
+ async getContainer(containerId) {
131
+ const client = this.getClient();
132
+ const response = await client.get(`/containers/${containerId}`);
133
+ const existing = this.tracked.get(containerId);
134
+ if (existing) {
135
+ existing.container = response.data;
136
+ }
137
+ return response.data;
138
+ }
139
+ async deleteContainer(containerId) {
140
+ const client = this.getClient();
141
+ await client.delete(`/containers/${containerId}`);
142
+ const tracked = this.tracked.get(containerId);
143
+ if (tracked) {
144
+ if (tracked.pollingTimer)
145
+ clearTimeout(tracked.pollingTimer);
146
+ if (tracked.healthTimer)
147
+ clearInterval(tracked.healthTimer);
148
+ this.tracked.delete(containerId);
149
+ }
150
+ logger.info(`[CloudContainer] Deleted container ${containerId}`);
151
+ }
152
+ startPolling(containerId) {
153
+ const tracked = this.tracked.get(containerId);
154
+ if (!tracked)
155
+ return;
156
+ let attempt = 0;
157
+ const maxAttempts = 120;
158
+ const baseInterval = 5000;
159
+ const maxInterval = 30000;
160
+ const poll = async () => {
161
+ attempt++;
162
+ if (attempt > maxAttempts) {
163
+ logger.error(`[CloudContainer] Polling timed out for container ${containerId} after ${maxAttempts} attempts`);
164
+ return;
165
+ }
166
+ const container = await this.getContainer(containerId);
167
+ const status = container.status;
168
+ logger.debug(`[CloudContainer] Poll #${attempt} for ${containerId}: status=${status}`);
169
+ if (status === "running") {
170
+ logger.info(`[CloudContainer] Container ${containerId} is now running at ${container.load_balancer_url}`);
171
+ this.startHealthMonitoring(containerId);
172
+ return;
173
+ }
174
+ if (status === "failed" || status === "stopped" || status === "suspended") {
175
+ logger.warn(`[CloudContainer] Container ${containerId} reached terminal state: ${status}`);
176
+ if (container.error_message) {
177
+ logger.error(`[CloudContainer] Error: ${container.error_message}`);
178
+ }
179
+ return;
180
+ }
181
+ const delay = Math.min(baseInterval * 2 ** Math.min(attempt - 1, 3), maxInterval);
182
+ tracked.pollingTimer = setTimeout(poll, delay);
183
+ };
184
+ tracked.pollingTimer = setTimeout(poll, baseInterval);
185
+ }
186
+ async waitForDeployment(containerId, timeoutMs = 900000) {
187
+ const deadline = Date.now() + timeoutMs;
188
+ let interval = 5000;
189
+ const maxInterval = 30000;
190
+ while (Date.now() < deadline) {
191
+ const container = await this.getContainer(containerId);
192
+ if (container.status === "running")
193
+ return container;
194
+ if (container.status === "failed") {
195
+ throw new Error(`Container deployment failed: ${container.error_message ?? "unknown error"}`);
196
+ }
197
+ if (container.status === "stopped" || container.status === "suspended") {
198
+ throw new Error(`Container reached terminal state: ${container.status}`);
199
+ }
200
+ await new Promise((resolve) => setTimeout(resolve, interval));
201
+ interval = Math.min(interval * 1.5, maxInterval);
202
+ }
203
+ throw new Error(`Container deployment timed out after ${Math.round(timeoutMs / 1000)}s`);
204
+ }
205
+ startHealthMonitoring(containerId) {
206
+ const tracked = this.tracked.get(containerId);
207
+ if (!tracked || tracked.healthTimer)
208
+ return;
209
+ const interval = 60000;
210
+ tracked.healthTimer = setInterval(() => {
211
+ this.getContainerHealth(containerId).then((health) => {
212
+ if (!health.data.healthy) {
213
+ logger.warn(`[CloudContainer] Container ${containerId} unhealthy: ${health.data.status}`);
214
+ }
215
+ }).catch((err) => {
216
+ logger.error(`[CloudContainer] Health check failed for ${containerId}: ${err.message}`);
217
+ });
218
+ }, interval);
219
+ }
220
+ async getContainerHealth(containerId) {
221
+ const client = this.getClient();
222
+ return client.get(`/containers/${containerId}/health`);
223
+ }
224
+ getTrackedContainers() {
225
+ return Array.from(this.tracked.values()).map((t) => t.container);
226
+ }
227
+ getTrackedContainer(containerId) {
228
+ return this.tracked.get(containerId)?.container;
229
+ }
230
+ isContainerRunning(containerId) {
231
+ return this.tracked.get(containerId)?.container.status === "running";
232
+ }
233
+ getContainerUrl(containerId) {
234
+ return this.tracked.get(containerId)?.container.load_balancer_url ?? null;
235
+ }
236
+ }
237
+ export {
238
+ CloudContainerService
239
+ };
240
+
241
+ //# debugId=AB03C756166CD3A464756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/types/cloud.ts", "../src/services/cloud-container.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Cloud-specific types for ElizaCloud integration.\n *\n * These types mirror the eliza-cloud-v2 database schemas and API contracts\n * for containers, auth, credits, bridge messaging, and agent state snapshots.\n */\n\n// ─── Container Types ────────────────────────────────────────────────────────\n\nexport type ContainerStatus =\n | \"pending\"\n | \"building\"\n | \"deploying\"\n | \"running\"\n | \"stopped\"\n | \"failed\"\n | \"suspended\";\n\nexport type ContainerBillingStatus =\n | \"active\"\n | \"warning\"\n | \"suspended\"\n | \"shutdown_pending\"\n | \"archived\";\n\nexport type ContainerArchitecture = \"arm64\" | \"x86_64\";\n\nexport interface CloudContainer {\n id: string;\n name: string;\n project_name: string;\n description: string | null;\n organization_id: string;\n user_id: string;\n status: ContainerStatus;\n image_tag: string | null;\n port: number;\n desired_count: number;\n cpu: number;\n memory: number;\n architecture: ContainerArchitecture;\n environment_vars: Record<string, string>;\n health_check_path: string;\n load_balancer_url: string | null;\n ecr_repository_uri: string | null;\n ecr_image_tag: string | null;\n cloudformation_stack_name: string | null;\n billing_status: ContainerBillingStatus;\n total_billed: string;\n last_deployed_at: string | null;\n last_health_check: string | null;\n deployment_log: string | null;\n error_message: string | null;\n metadata: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateContainerRequest {\n name: string;\n project_name: string;\n description?: string;\n port?: number;\n desired_count?: number;\n cpu?: number;\n memory?: number;\n environment_vars?: Record<string, string>;\n health_check_path?: string;\n ecr_image_uri: string;\n ecr_repository_uri?: string;\n image_tag?: string;\n architecture?: ContainerArchitecture;\n}\n\nexport interface CreateContainerResponse {\n success: boolean;\n data: CloudContainer;\n message: string;\n creditsDeducted: number;\n creditsRemaining: number;\n stackName: string;\n polling: {\n endpoint: string;\n intervalMs: number;\n expectedDurationMs: number;\n };\n}\n\nexport interface ContainerListResponse {\n success: boolean;\n data: CloudContainer[];\n}\n\nexport interface ContainerGetResponse {\n success: boolean;\n data: CloudContainer;\n}\n\nexport interface ContainerDeleteResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface ContainerHealthResponse {\n success: boolean;\n data: {\n status: string;\n healthy: boolean;\n lastCheck: string | null;\n uptime: number | null;\n };\n}\n\n// ─── Auth Types ─────────────────────────────────────────────────────────────\n\nexport type DevicePlatform = \"ios\" | \"android\" | \"macos\" | \"windows\" | \"linux\" | \"web\";\n\nexport interface DeviceAuthRequest {\n deviceId: string;\n platform: DevicePlatform;\n appVersion: string;\n deviceName?: string;\n}\n\nexport interface DeviceAuthResponse {\n success: boolean;\n data: {\n apiKey: string;\n userId: string;\n organizationId: string;\n credits: number;\n isNew: boolean;\n };\n}\n\nexport interface CloudCredentials {\n apiKey: string;\n userId: string;\n organizationId: string;\n authenticatedAt: number;\n}\n\n// ─── Credits Types ──────────────────────────────────────────────────────────\n\nexport interface CreditBalanceResponse {\n success: boolean;\n data: {\n balance: number;\n currency: string;\n };\n}\n\nexport interface CreditSummaryResponse {\n success: boolean;\n data: {\n balance: number;\n totalSpent: number;\n totalAdded: number;\n recentTransactions: CreditTransaction[];\n };\n}\n\nexport interface CreditTransaction {\n id: string;\n amount: number;\n description: string;\n type: \"credit\" | \"debit\";\n created_at: string;\n}\n\n// ─── Bridge Types ───────────────────────────────────────────────────────────\n\nexport type BridgeConnectionState = \"disconnected\" | \"connecting\" | \"connected\" | \"reconnecting\";\n\nexport interface BridgeMessage {\n jsonrpc: \"2.0\";\n id?: string | number;\n method?: string;\n params?: Record<string, unknown>;\n result?: unknown;\n error?: BridgeError;\n}\n\nexport interface BridgeError {\n code: number;\n message: string;\n data?: unknown;\n}\n\nexport type BridgeMessageHandler = (message: BridgeMessage) => void;\n\nexport interface BridgeConnection {\n containerId: string;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n}\n\n// ─── Managed Gateway Relay Types ───────────────────────────────────────────\n\nexport interface GatewayRelaySession {\n id: string;\n organizationId: string;\n userId: string;\n runtimeAgentId: string;\n agentName: string | null;\n platform: \"local-runtime\";\n createdAt: string;\n lastSeenAt: string;\n}\n\nexport interface GatewayRelayRequest {\n jsonrpc: \"2.0\";\n id?: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\nexport interface GatewayRelayResponse {\n jsonrpc: \"2.0\";\n id?: string | number;\n result?: Record<string, unknown>;\n error?: BridgeError;\n}\n\nexport interface GatewayRelayRequestEnvelope {\n requestId: string;\n rpc: GatewayRelayRequest;\n queuedAt: string;\n}\n\nexport interface RegisterGatewayRelaySessionResponse {\n success: boolean;\n data: {\n session: GatewayRelaySession;\n };\n}\n\nexport interface PollGatewayRelayResponse {\n success: boolean;\n data: {\n request: GatewayRelayRequestEnvelope | null;\n };\n}\n\n// ─── Snapshot / Backup Types ────────────────────────────────────────────────\n\nexport type SnapshotType = \"manual\" | \"auto\" | \"pre-eviction\";\n\nexport interface AgentSnapshot {\n id: string;\n containerId: string;\n organizationId: string;\n snapshotType: SnapshotType;\n storageUrl: string;\n sizeBytes: number;\n agentConfig: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface CreateSnapshotRequest {\n snapshotType?: SnapshotType;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateSnapshotResponse {\n success: boolean;\n data: AgentSnapshot;\n}\n\nexport interface SnapshotListResponse {\n success: boolean;\n data: AgentSnapshot[];\n}\n\nexport interface RestoreSnapshotRequest {\n snapshotId: string;\n}\n\nexport interface RestoreSnapshotResponse {\n success: boolean;\n message: string;\n}\n\n// ─── Cloud Config Types ─────────────────────────────────────────────────────\n\nexport type InferenceMode = \"cloud\" | \"byok\" | \"local\";\n\nexport interface CloudPluginConfig {\n /** Enable ElizaCloud integration. */\n enabled: boolean;\n /** ElizaCloud API base URL. */\n baseUrl: string;\n /** Stored API key for authenticated requests. */\n apiKey?: string;\n /** Device ID used for auto-signup authentication. */\n deviceId?: string;\n /** Platform identifier. */\n platform?: DevicePlatform;\n /** Inference mode: cloud (ElizaCloud proxied), byok (user keys), local (no cloud). */\n inferenceMode: InferenceMode;\n /** Auto-deploy agents to cloud on creation. */\n autoProvision: boolean;\n /** Bridge reconnection settings. */\n bridge: {\n reconnectIntervalMs: number;\n maxReconnectAttempts: number;\n heartbeatIntervalMs: number;\n };\n /** Auto-backup settings. */\n backup: {\n autoBackupIntervalMs: number;\n maxSnapshots: number;\n };\n /** Default container settings for new deployments. */\n container: {\n defaultImage: string;\n defaultArchitecture: ContainerArchitecture;\n defaultCpu: number;\n defaultMemory: number;\n defaultPort: number;\n };\n}\n\nexport const DEFAULT_CLOUD_CONFIG: CloudPluginConfig = {\n enabled: false,\n baseUrl: \"https://www.elizacloud.ai/api/v1\",\n inferenceMode: \"cloud\",\n autoProvision: false,\n bridge: {\n reconnectIntervalMs: 3000,\n maxReconnectAttempts: 20,\n heartbeatIntervalMs: 30_000,\n },\n backup: {\n autoBackupIntervalMs: 3_600_000, // 1 hour\n maxSnapshots: 10,\n },\n container: {\n defaultImage: \"elizaos/agent:latest\",\n defaultArchitecture: \"arm64\",\n defaultCpu: 1792,\n defaultMemory: 1792,\n defaultPort: 3000,\n },\n};\n\n// ─── API Error Types ────────────────────────────────────────────────────────\n\nexport type { CloudApiErrorBody } from \"@elizaos/cloud-sdk\";\nexport {\n CloudApiError,\n InsufficientCreditsError,\n} from \"@elizaos/cloud-sdk\";\n",
6
+ "/**\n * CloudContainerService — Manages container lifecycle through ElizaCloud API.\n *\n * Handles creation, listing, status polling, health monitoring, and deletion\n * of ECS-backed containers. Deployments are async (CloudFormation takes 8-12\n * minutes), so `waitForDeployment` polls with exponential backoff.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n CloudContainer,\n ContainerDeleteResponse,\n ContainerGetResponse,\n ContainerHealthResponse,\n ContainerListResponse,\n CreateContainerRequest,\n CreateContainerResponse,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudApiClient } from \"../utils/cloud-api\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\n/** Active containers tracked locally for quick access. */\ninterface TrackedContainer {\n container: CloudContainer;\n pollingTimer: ReturnType<typeof setTimeout> | null;\n healthTimer: ReturnType<typeof setInterval> | null;\n}\n\nexport class CloudContainerService extends Service {\n static serviceType = \"CLOUD_CONTAINER\";\n capabilityDescription = \"ElizaCloud container provisioning and lifecycle management\";\n\n private authService!: CloudAuthService;\n private readonly containerDefaults = DEFAULT_CLOUD_CONFIG.container;\n private tracked: Map<string, TrackedContainer> = new Map();\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudContainerService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [, tracked] of this.tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n }\n this.tracked.clear();\n }\n\n private async initialize(): Promise<void> {\n // Get auth service reference\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\n \"[CloudContainer] CloudAuthService not available, container operations will fail\"\n );\n return;\n }\n this.authService = auth as CloudAuthService;\n\n // Load existing containers\n if (this.authService.isAuthenticated()) {\n const containers = await this.listContainers();\n for (const container of containers) {\n this.tracked.set(container.id, {\n container,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Resume polling for containers that are still deploying\n if (\n container.status === \"pending\" ||\n container.status === \"building\" ||\n container.status === \"deploying\"\n ) {\n this.startPolling(container.id);\n }\n\n // Start health monitoring for running containers\n if (container.status === \"running\") {\n this.startHealthMonitoring(container.id);\n }\n }\n logger.info(`[CloudContainer] Loaded ${containers.length} existing container(s)`);\n }\n }\n\n private getClient(): CloudApiClient {\n return this.authService.getClient();\n }\n\n // ─── CRUD ───────────────────────────────────────────────────────────────\n\n async createContainer(request: CreateContainerRequest): Promise<CreateContainerResponse> {\n const client = this.getClient();\n const defaults = this.containerDefaults;\n\n const payload: Record<string, unknown> = {\n name: request.name,\n project_name: request.project_name,\n description: request.description,\n port: request.port ?? defaults.defaultPort,\n desired_count: request.desired_count ?? 1,\n cpu: request.cpu ?? defaults.defaultCpu,\n memory: request.memory ?? defaults.defaultMemory,\n environment_vars: request.environment_vars ?? {},\n health_check_path: request.health_check_path ?? \"/health\",\n ecr_image_uri: request.ecr_image_uri,\n ecr_repository_uri: request.ecr_repository_uri,\n image_tag: request.image_tag,\n architecture: request.architecture ?? defaults.defaultArchitecture,\n };\n\n const response = await client.post<CreateContainerResponse>(\"/containers\", payload);\n\n // Track the new container\n this.tracked.set(response.data.id, {\n container: response.data,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Start polling for deployment completion\n this.startPolling(response.data.id);\n\n logger.info(\n `[CloudContainer] Created container \"${request.name}\" (id=${response.data.id}, stack=${response.stackName})`\n );\n\n return response;\n }\n\n async listContainers(): Promise<CloudContainer[]> {\n const client = this.getClient();\n const response = await client.get<ContainerListResponse>(\"/containers\");\n return response.data;\n }\n\n async getContainer(containerId: string): Promise<CloudContainer> {\n const client = this.getClient();\n const response = await client.get<ContainerGetResponse>(`/containers/${containerId}`);\n\n // Update local tracking\n const existing = this.tracked.get(containerId);\n if (existing) {\n existing.container = response.data;\n }\n\n return response.data;\n }\n\n async deleteContainer(containerId: string): Promise<void> {\n const client = this.getClient();\n await client.delete<ContainerDeleteResponse>(`/containers/${containerId}`);\n\n // Stop tracking\n const tracked = this.tracked.get(containerId);\n if (tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n this.tracked.delete(containerId);\n }\n\n logger.info(`[CloudContainer] Deleted container ${containerId}`);\n }\n\n // ─── Deployment Polling ────────────────────────────────────────────────\n\n /**\n * Poll container status until it reaches a terminal state (running, failed, stopped).\n * Uses exponential backoff: 5s, 10s, 20s, 30s, 30s, ...\n */\n private startPolling(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked) return;\n\n let attempt = 0;\n const maxAttempts = 120; // ~1 hour with backoff\n const baseInterval = 5_000;\n const maxInterval = 30_000;\n\n const poll = async () => {\n attempt++;\n if (attempt > maxAttempts) {\n logger.error(\n `[CloudContainer] Polling timed out for container ${containerId} after ${maxAttempts} attempts`\n );\n return;\n }\n\n const container = await this.getContainer(containerId);\n const status = container.status;\n\n logger.debug(`[CloudContainer] Poll #${attempt} for ${containerId}: status=${status}`);\n\n if (status === \"running\") {\n logger.info(\n `[CloudContainer] Container ${containerId} is now running at ${container.load_balancer_url}`\n );\n this.startHealthMonitoring(containerId);\n return;\n }\n\n if (status === \"failed\" || status === \"stopped\" || status === \"suspended\") {\n logger.warn(`[CloudContainer] Container ${containerId} reached terminal state: ${status}`);\n if (container.error_message) {\n logger.error(`[CloudContainer] Error: ${container.error_message}`);\n }\n return;\n }\n\n // Schedule next poll with exponential backoff\n const delay = Math.min(baseInterval * 2 ** Math.min(attempt - 1, 3), maxInterval);\n tracked.pollingTimer = setTimeout(poll, delay);\n };\n\n tracked.pollingTimer = setTimeout(poll, baseInterval);\n }\n\n /**\n * Wait for a container to reach \"running\" status. Returns the updated container.\n * This is the synchronous API for actions that need to block.\n */\n async waitForDeployment(containerId: string, timeoutMs = 900_000): Promise<CloudContainer> {\n const deadline = Date.now() + timeoutMs;\n let interval = 5_000;\n const maxInterval = 30_000;\n\n while (Date.now() < deadline) {\n const container = await this.getContainer(containerId);\n\n if (container.status === \"running\") return container;\n if (container.status === \"failed\") {\n throw new Error(\n `Container deployment failed: ${container.error_message ?? \"unknown error\"}`\n );\n }\n if (container.status === \"stopped\" || container.status === \"suspended\") {\n throw new Error(`Container reached terminal state: ${container.status}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n interval = Math.min(interval * 1.5, maxInterval);\n }\n\n throw new Error(`Container deployment timed out after ${Math.round(timeoutMs / 1000)}s`);\n }\n\n // ─── Health Monitoring ─────────────────────────────────────────────────\n\n private startHealthMonitoring(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked || tracked.healthTimer) return;\n\n const interval = 60_000; // Check every 60 seconds\n\n tracked.healthTimer = setInterval(() => {\n this.getContainerHealth(containerId)\n .then((health) => {\n if (!health.data.healthy) {\n logger.warn(\n `[CloudContainer] Container ${containerId} unhealthy: ${health.data.status}`\n );\n }\n })\n .catch((err: Error) => {\n logger.error(`[CloudContainer] Health check failed for ${containerId}: ${err.message}`);\n });\n }, interval);\n }\n\n async getContainerHealth(containerId: string): Promise<ContainerHealthResponse> {\n const client = this.getClient();\n return client.get<ContainerHealthResponse>(`/containers/${containerId}/health`);\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n getTrackedContainers(): CloudContainer[] {\n return Array.from(this.tracked.values()).map((t) => t.container);\n }\n\n getTrackedContainer(containerId: string): CloudContainer | undefined {\n return this.tracked.get(containerId)?.container;\n }\n\n isContainerRunning(containerId: string): boolean {\n return this.tracked.get(containerId)?.container.status === \"running\";\n }\n\n getContainerUrl(containerId: string): string | null {\n return this.tracked.get(containerId)?.container.load_balancer_url ?? null;\n }\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "AB03C756166CD3A464756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * CloudCredentialProvider — bridges plugin-workflow's `CredentialProvider`
3
+ * service slot to Eliza Cloud's per-connector OAuth surface.
4
+ *
5
+ * Resolution path on `resolve(userId, credType)`:
6
+ * 1. Look up `credType` in `credTypeToConnector` — return `null` for unmapped.
7
+ * 2. GET `/eliza/<connector>/status` via the authenticated cloud client to
8
+ * check whether the user already has an active connection.
9
+ * 3. When connected → see `RAW_TOKEN_GAP` below; we currently return
10
+ * `needs_auth` because the cloud does not expose raw OAuth tokens.
11
+ * 4. When not connected → POST `/eliza/<connector>/connect/initiate` with
12
+ * the mapped `capabilities`; return `needs_auth` with the authUrl the
13
+ * cloud issued. The workflow plugin surfaces this to the user.
14
+ *
15
+ * RAW_TOKEN_GAP
16
+ * -------------
17
+ * Plugin-workflow's `credential_data` shape requires the actual access token
18
+ * (so the workflow engine can inject it into a node's HTTP calls). The cloud
19
+ * connector endpoints (Google / GitHub / Discord) intentionally do **not**
20
+ * vend raw tokens to the local plugin — they hold the token server-side and
21
+ * proxy connector calls under `/eliza/<connector>/<action>` (e.g.
22
+ * `/eliza/google/gmail/send`). Bridging that proxy model into the workflow
23
+ * engine is a separate piece of work (either: extend the workflow engine to
24
+ * dispatch through cloud proxies, or add a token-vending endpoint cloud-side
25
+ * for clients with a verified pairing). Until then this provider is honest:
26
+ * it confirms the connection exists and either reports it cannot inject
27
+ * (`null` / `needs_auth`) or — once the cloud exposes a vending endpoint —
28
+ * fetches and returns the credential payload.
29
+ *
30
+ * No fallbacks. No fake tokens. The provider fails closed.
31
+ */
32
+ import { type IAgentRuntime, Service } from "@elizaos/core";
33
+ export type CredentialProviderResult = {
34
+ status: "credential_data";
35
+ data: Record<string, unknown>;
36
+ } | {
37
+ status: "needs_auth";
38
+ authUrl: string;
39
+ } | null;
40
+ export interface CheckCredentialTypesResult {
41
+ supported: string[];
42
+ unsupported: string[];
43
+ }
44
+ export declare class CloudCredentialProvider extends Service {
45
+ static readonly serviceType = "workflow_credential_provider";
46
+ capabilityDescription: string;
47
+ static start(runtime: IAgentRuntime): Promise<CloudCredentialProvider>;
48
+ stop(): Promise<void>;
49
+ resolve(_userId: string, credType: string): Promise<CredentialProviderResult>;
50
+ checkCredentialTypes(credTypes: string[]): CheckCredentialTypesResult;
51
+ private getCloudClient;
52
+ private fetchConnectorStatus;
53
+ private initiateConnectorAuth;
54
+ }
55
+ //# sourceMappingURL=cloud-credential-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-credential-provider.d.ts","sourceRoot":"","sources":["../../src/services/cloud-credential-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAU,OAAO,EAAE,MAAM,eAAe,CAAC;AAQpE,MAAM,MAAM,wBAAwB,GAChC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC5D;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzC,IAAI,CAAC;AAET,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAoCD,qBAAa,uBAAwB,SAAQ,OAAO;IAClD,gBAAyB,WAAW,kCAAqC;IAEhE,qBAAqB,SACoD;WAErE,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI7D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA2CnF,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,0BAA0B;IAerE,OAAO,CAAC,cAAc;YAYR,oBAAoB;YAWpB,qBAAqB;CAmBpC"}
@@ -0,0 +1,190 @@
1
+ import { createRequire } from "node:module";
2
+ var __defProp = Object.defineProperty;
3
+ var __returnValue = (v) => v;
4
+ function __exportSetter(name, newValue) {
5
+ this[name] = __returnValue.bind(null, newValue);
6
+ }
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true,
12
+ configurable: true,
13
+ set: __exportSetter.bind(all, name)
14
+ });
15
+ };
16
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
18
+
19
+ // src/lib/credential-type-map.ts
20
+ var credTypeToConnector = new Map([
21
+ [
22
+ "gmailOAuth2",
23
+ {
24
+ connector: "google",
25
+ capabilities: ["google.gmail.triage", "google.gmail.send", "google.gmail.manage"],
26
+ friendlyName: "Gmail"
27
+ }
28
+ ],
29
+ [
30
+ "gmailOAuth2Api",
31
+ {
32
+ connector: "google",
33
+ capabilities: ["google.gmail.triage", "google.gmail.send", "google.gmail.manage"],
34
+ friendlyName: "Gmail"
35
+ }
36
+ ],
37
+ [
38
+ "googleCalendarOAuth2Api",
39
+ {
40
+ connector: "google",
41
+ capabilities: ["google.calendar.read", "google.calendar.write"],
42
+ friendlyName: "Google Calendar"
43
+ }
44
+ ],
45
+ [
46
+ "googleSheetsOAuth2Api",
47
+ {
48
+ connector: "google",
49
+ capabilities: ["google.basic_identity"],
50
+ friendlyName: "Google Sheets"
51
+ }
52
+ ],
53
+ [
54
+ "githubOAuth2Api",
55
+ {
56
+ connector: "github",
57
+ friendlyName: "GitHub"
58
+ }
59
+ ],
60
+ [
61
+ "githubApi",
62
+ {
63
+ connector: "github",
64
+ friendlyName: "GitHub"
65
+ }
66
+ ],
67
+ [
68
+ "discordApi",
69
+ {
70
+ connector: "discord",
71
+ friendlyName: "Discord"
72
+ }
73
+ ],
74
+ [
75
+ "discordBotApi",
76
+ {
77
+ connector: "discord",
78
+ friendlyName: "Discord (Bot)"
79
+ }
80
+ ]
81
+ ]);
82
+ var supportedCredTypes = new Set(credTypeToConnector.keys());
83
+
84
+ // src/services/cloud-credential-provider.ts
85
+ import { logger, Service } from "@elizaos/core";
86
+ var WORKFLOW_CREDENTIAL_PROVIDER_TYPE = "workflow_credential_provider";
87
+ function isCloudAuthLike(value) {
88
+ if (!value || typeof value !== "object") {
89
+ return false;
90
+ }
91
+ return typeof Reflect.get(value, "getClient") === "function";
92
+ }
93
+ function isCloudClientLike(value) {
94
+ if (!value || typeof value !== "object") {
95
+ return false;
96
+ }
97
+ const get = Reflect.get(value, "get");
98
+ const post = Reflect.get(value, "post");
99
+ return (get === undefined || typeof get === "function") && (post === undefined || typeof post === "function");
100
+ }
101
+
102
+ class CloudCredentialProvider extends Service {
103
+ static serviceType = WORKFLOW_CREDENTIAL_PROVIDER_TYPE;
104
+ capabilityDescription = "Resolves workflow node credentials via the user's paired Eliza Cloud account.";
105
+ static async start(runtime) {
106
+ return new CloudCredentialProvider(runtime);
107
+ }
108
+ async stop() {}
109
+ async resolve(_userId, credType) {
110
+ const mapping = credTypeToConnector.get(credType);
111
+ if (!mapping) {
112
+ return null;
113
+ }
114
+ const client = this.getCloudClient();
115
+ if (!client) {
116
+ logger.debug({ src: "plugin:elizacloud:credential-provider", credType }, "CLOUD_AUTH unavailable — cannot resolve workflow credentials");
117
+ return null;
118
+ }
119
+ const status = await this.fetchConnectorStatus(client, mapping.connector);
120
+ if (!status.connected) {
121
+ const authUrl = status.authUrl ?? await this.initiateConnectorAuth(client, mapping.connector, mapping.capabilities);
122
+ if (!authUrl) {
123
+ return null;
124
+ }
125
+ return { status: "needs_auth", authUrl };
126
+ }
127
+ const reauthUrl = await this.initiateConnectorAuth(client, mapping.connector, mapping.capabilities);
128
+ if (reauthUrl) {
129
+ return { status: "needs_auth", authUrl: reauthUrl };
130
+ }
131
+ return null;
132
+ }
133
+ checkCredentialTypes(credTypes) {
134
+ const supported = [];
135
+ const unsupported = [];
136
+ for (const t of credTypes) {
137
+ if (supportedCredTypes.has(t)) {
138
+ supported.push(t);
139
+ } else {
140
+ unsupported.push(t);
141
+ }
142
+ }
143
+ return { supported, unsupported };
144
+ }
145
+ getCloudClient() {
146
+ const cloudAuth = this.runtime.getService("CLOUD_AUTH");
147
+ if (!isCloudAuthLike(cloudAuth)) {
148
+ return null;
149
+ }
150
+ const client = cloudAuth.getClient?.();
151
+ if (!isCloudClientLike(client)) {
152
+ return null;
153
+ }
154
+ return client;
155
+ }
156
+ async fetchConnectorStatus(client, connector) {
157
+ if (typeof client.get !== "function") {
158
+ return { connected: false };
159
+ }
160
+ const raw = await client.get(`/eliza/${connector}/status`);
161
+ return shapeConnectorStatus(raw);
162
+ }
163
+ async initiateConnectorAuth(client, connector, capabilities) {
164
+ if (typeof client.post !== "function") {
165
+ return null;
166
+ }
167
+ const body = {};
168
+ if (capabilities && capabilities.length > 0) {
169
+ body.capabilities = [...capabilities];
170
+ }
171
+ const raw = await client.post(`/eliza/${connector}/connect/initiate`, body);
172
+ const authUrl = raw?.authUrl;
173
+ return typeof authUrl === "string" && authUrl.length > 0 ? authUrl : null;
174
+ }
175
+ }
176
+ function shapeConnectorStatus(raw) {
177
+ if (!raw || typeof raw !== "object") {
178
+ return { connected: false };
179
+ }
180
+ const obj = raw;
181
+ const connected = obj.connected === true;
182
+ const reason = typeof obj.reason === "string" ? obj.reason : undefined;
183
+ const authUrl = typeof obj.authUrl === "string" ? obj.authUrl : undefined;
184
+ return { connected, reason, authUrl };
185
+ }
186
+ export {
187
+ CloudCredentialProvider
188
+ };
189
+
190
+ //# debugId=652A321E521EC52464756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lib/credential-type-map.ts", "../src/services/cloud-credential-provider.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Mapping from workflow-plugin credential type names → Eliza Cloud connector slugs.\n *\n * The workflow plugin's LLM emits credential type strings (e.g. `gmailOAuth2`,\n * `slackOAuth2Api`) on each node that needs an external account. The cloud\n * exposes per-connector OAuth flows under `/api/v1/eliza/<connector>/...`.\n *\n * This map is the single source of truth for which workflow credential type\n * resolves through which cloud connector + with which OAuth scopes. Add new\n * entries when the cloud gains support for additional connectors; do not\n * scatter cred-type → connector logic elsewhere.\n *\n * Cloud-side endpoint convention (see cloud/apps/api/v1/eliza/<connector>/):\n * POST /api/v1/eliza/<connector>/connect/initiate → { authUrl }\n * GET /api/v1/eliza/<connector>/status → { connected, ... }\n *\n * Not every connector below has a fully-implemented cloud endpoint yet — the\n * provider returns `null` for unmapped types and `needs_auth` (with the\n * cloud-issued OAuth URL) for mapped-but-not-connected accounts. See\n * `cloud-credential-provider.ts` for the resolution logic.\n */\n\nexport interface CredentialTypeMapping {\n /**\n * Cloud connector slug used in the URL path\n * (`/api/v1/eliza/<connector>/connect/initiate`).\n */\n connector: string;\n /**\n * Optional capability tokens passed to the cloud's `connect/initiate`\n * endpoint. The cloud translates these to provider-specific OAuth scopes\n * (e.g. Google's `google.gmail.send` → `https://www.googleapis.com/auth/gmail.send`).\n */\n capabilities?: string[];\n /**\n * Friendly description used in `needs_auth` UI prompts. The runtime may\n * surface this verbatim to the end-user.\n */\n friendlyName: string;\n}\n\n/**\n * Workflow credential type → cloud connector mapping.\n *\n * Names mirror the n8n / workflows-plugin convention used by the LLM in\n * `plugins/plugin-workflow/src/utils/workflow-prompts/workflowGeneration.ts`.\n * Both `gmailOAuth2` and `gmailOAuth2Api` map to the same connector — the\n * workflow resolver does fuzzy `Api`-suffix matching upstream, but we keep\n * both keys here so `checkCredentialTypes` answers truthfully without the\n * caller having to know about that fuzziness.\n */\nexport const credTypeToConnector: ReadonlyMap<string, CredentialTypeMapping> = new Map([\n // ─── Google ──────────────────────────────────────────────────────────\n // Cloud endpoint: /api/v1/eliza/google/{connect/initiate,status,disconnect}\n // The cloud's capability tokens are documented in\n // cloud/apps/api/v1/eliza/google/connect/initiate/route.ts.\n [\n \"gmailOAuth2\",\n {\n connector: \"google\",\n capabilities: [\"google.gmail.triage\", \"google.gmail.send\", \"google.gmail.manage\"],\n friendlyName: \"Gmail\",\n },\n ],\n [\n \"gmailOAuth2Api\",\n {\n connector: \"google\",\n capabilities: [\"google.gmail.triage\", \"google.gmail.send\", \"google.gmail.manage\"],\n friendlyName: \"Gmail\",\n },\n ],\n [\n \"googleCalendarOAuth2Api\",\n {\n connector: \"google\",\n capabilities: [\"google.calendar.read\", \"google.calendar.write\"],\n friendlyName: \"Google Calendar\",\n },\n ],\n [\n \"googleSheetsOAuth2Api\",\n {\n connector: \"google\",\n capabilities: [\"google.basic_identity\"],\n friendlyName: \"Google Sheets\",\n },\n ],\n\n // ─── GitHub ──────────────────────────────────────────────────────────\n // Cloud endpoint: /api/v1/eliza/github-oauth-complete/ (callback only).\n // The initiate flow is host-driven; the provider returns `needs_auth`\n // pointing at the cloud's GitHub install URL when not connected.\n [\n \"githubOAuth2Api\",\n {\n connector: \"github\",\n friendlyName: \"GitHub\",\n },\n ],\n [\n \"githubApi\",\n {\n connector: \"github\",\n friendlyName: \"GitHub\",\n },\n ],\n\n // ─── Discord ─────────────────────────────────────────────────────────\n // Cloud endpoint: /api/v1/eliza/discord/gateway-agent/ (gateway pairing).\n // No OAuth-token-issuance flow yet — provider returns `null` so the\n // workflow resolver falls back to its default missing-connection report.\n [\n \"discordApi\",\n {\n connector: \"discord\",\n friendlyName: \"Discord\",\n },\n ],\n [\n \"discordBotApi\",\n {\n connector: \"discord\",\n friendlyName: \"Discord (Bot)\",\n },\n ],\n]);\n\n/** Set used by `checkCredentialTypes` for O(1) supported-set membership. */\nexport const supportedCredTypes: ReadonlySet<string> = new Set(credTypeToConnector.keys());\n",
6
+ "/**\n * CloudCredentialProvider — bridges plugin-workflow's `CredentialProvider`\n * service slot to Eliza Cloud's per-connector OAuth surface.\n *\n * Resolution path on `resolve(userId, credType)`:\n * 1. Look up `credType` in `credTypeToConnector` — return `null` for unmapped.\n * 2. GET `/eliza/<connector>/status` via the authenticated cloud client to\n * check whether the user already has an active connection.\n * 3. When connected → see `RAW_TOKEN_GAP` below; we currently return\n * `needs_auth` because the cloud does not expose raw OAuth tokens.\n * 4. When not connected → POST `/eliza/<connector>/connect/initiate` with\n * the mapped `capabilities`; return `needs_auth` with the authUrl the\n * cloud issued. The workflow plugin surfaces this to the user.\n *\n * RAW_TOKEN_GAP\n * -------------\n * Plugin-workflow's `credential_data` shape requires the actual access token\n * (so the workflow engine can inject it into a node's HTTP calls). The cloud\n * connector endpoints (Google / GitHub / Discord) intentionally do **not**\n * vend raw tokens to the local plugin — they hold the token server-side and\n * proxy connector calls under `/eliza/<connector>/<action>` (e.g.\n * `/eliza/google/gmail/send`). Bridging that proxy model into the workflow\n * engine is a separate piece of work (either: extend the workflow engine to\n * dispatch through cloud proxies, or add a token-vending endpoint cloud-side\n * for clients with a verified pairing). Until then this provider is honest:\n * it confirms the connection exists and either reports it cannot inject\n * (`null` / `needs_auth`) or — once the cloud exposes a vending endpoint —\n * fetches and returns the credential payload.\n *\n * No fallbacks. No fake tokens. The provider fails closed.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport { credTypeToConnector, supportedCredTypes } from \"../lib/credential-type-map\";\nimport type { CloudAuthLike } from \"../lib/cloud-connection\";\n\n// Inlined to avoid a hard compile-time dep on @elizaos/plugin-workflow.\n// The runtime duck-types the service via the shared service-type string.\nconst WORKFLOW_CREDENTIAL_PROVIDER_TYPE = \"workflow_credential_provider\";\n\nexport type CredentialProviderResult =\n | { status: \"credential_data\"; data: Record<string, unknown> }\n | { status: \"needs_auth\"; authUrl: string }\n | null;\n\nexport interface CheckCredentialTypesResult {\n supported: string[];\n unsupported: string[];\n}\n\ninterface CloudConnectorStatus {\n connected: boolean;\n reason?: string;\n authUrl?: string;\n}\n\ninterface CloudConnectInitiateResponse {\n authUrl?: string;\n}\n\ninterface CloudClientLike {\n get?: (path: string) => Promise<unknown>;\n post?: (path: string, body?: unknown) => Promise<unknown>;\n}\n\nfunction isCloudAuthLike(value: unknown): value is CloudAuthLike {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n return typeof Reflect.get(value, \"getClient\") === \"function\";\n}\n\nfunction isCloudClientLike(value: unknown): value is CloudClientLike {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const get = Reflect.get(value, \"get\");\n const post = Reflect.get(value, \"post\");\n return (\n (get === undefined || typeof get === \"function\") &&\n (post === undefined || typeof post === \"function\")\n );\n}\n\nexport class CloudCredentialProvider extends Service {\n static override readonly serviceType = WORKFLOW_CREDENTIAL_PROVIDER_TYPE;\n\n override capabilityDescription =\n \"Resolves workflow node credentials via the user's paired Eliza Cloud account.\";\n\n static async start(runtime: IAgentRuntime): Promise<CloudCredentialProvider> {\n return new CloudCredentialProvider(runtime);\n }\n\n override async stop(): Promise<void> {\n // No-op: holds no per-instance state.\n }\n\n async resolve(_userId: string, credType: string): Promise<CredentialProviderResult> {\n const mapping = credTypeToConnector.get(credType);\n if (!mapping) {\n return null;\n }\n\n const client = this.getCloudClient();\n if (!client) {\n logger.debug(\n { src: \"plugin:elizacloud:credential-provider\", credType },\n \"CLOUD_AUTH unavailable — cannot resolve workflow credentials\",\n );\n return null;\n }\n\n const status = await this.fetchConnectorStatus(client, mapping.connector);\n\n if (!status.connected) {\n const authUrl =\n status.authUrl ??\n (await this.initiateConnectorAuth(client, mapping.connector, mapping.capabilities));\n if (!authUrl) {\n return null;\n }\n return { status: \"needs_auth\", authUrl };\n }\n\n // Connected, but the cloud does not expose raw tokens — see RAW_TOKEN_GAP\n // in the file header. We re-prompt for explicit user-side auth so the\n // workflow plugin reports \"missing connection\" instead of silently\n // injecting a stale or empty credential. When the cloud adds a token\n // vending endpoint, fetch + return `credential_data` here.\n const reauthUrl = await this.initiateConnectorAuth(\n client,\n mapping.connector,\n mapping.capabilities,\n );\n if (reauthUrl) {\n return { status: \"needs_auth\", authUrl: reauthUrl };\n }\n return null;\n }\n\n checkCredentialTypes(credTypes: string[]): CheckCredentialTypesResult {\n const supported: string[] = [];\n const unsupported: string[] = [];\n for (const t of credTypes) {\n if (supportedCredTypes.has(t)) {\n supported.push(t);\n } else {\n unsupported.push(t);\n }\n }\n return { supported, unsupported };\n }\n\n // ─── internals ───────────────────────────────────────────────────────\n\n private getCloudClient(): CloudClientLike | null {\n const cloudAuth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!isCloudAuthLike(cloudAuth)) {\n return null;\n }\n const client = cloudAuth.getClient?.();\n if (!isCloudClientLike(client)) {\n return null;\n }\n return client;\n }\n\n private async fetchConnectorStatus(\n client: CloudClientLike,\n connector: string,\n ): Promise<CloudConnectorStatus> {\n if (typeof client.get !== \"function\") {\n return { connected: false };\n }\n const raw = await client.get(`/eliza/${connector}/status`);\n return shapeConnectorStatus(raw);\n }\n\n private async initiateConnectorAuth(\n client: CloudClientLike,\n connector: string,\n capabilities: readonly string[] | undefined,\n ): Promise<string | null> {\n if (typeof client.post !== \"function\") {\n return null;\n }\n const body: Record<string, unknown> = {};\n if (capabilities && capabilities.length > 0) {\n body.capabilities = [...capabilities];\n }\n const raw = (await client.post(\n `/eliza/${connector}/connect/initiate`,\n body,\n )) as CloudConnectInitiateResponse | null;\n const authUrl = raw?.authUrl;\n return typeof authUrl === \"string\" && authUrl.length > 0 ? authUrl : null;\n }\n}\n\nfunction shapeConnectorStatus(raw: unknown): CloudConnectorStatus {\n if (!raw || typeof raw !== \"object\") {\n return { connected: false };\n }\n const obj = raw as Record<string, unknown>;\n const connected = obj.connected === true;\n const reason = typeof obj.reason === \"string\" ? obj.reason : undefined;\n const authUrl = typeof obj.authUrl === \"string\" ? obj.authUrl : undefined;\n return { connected, reason, authUrl };\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "652A321E521EC52464756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,38 @@
1
+ import { type IAgentRuntime, Service } from "@elizaos/core";
2
+ type RelayRuntimeStatus = "idle" | "registered" | "polling" | "error" | "stopped";
3
+ export declare class CloudManagedGatewayRelayService extends Service {
4
+ static serviceType: string;
5
+ capabilityDescription: string;
6
+ private authService;
7
+ private loopPromise;
8
+ private currentSessionId;
9
+ private stopping;
10
+ private activeAbortController;
11
+ private relayStatus;
12
+ private lastSeenAt;
13
+ static start(runtime: IAgentRuntime): Promise<Service>;
14
+ stop(): Promise<void>;
15
+ private initialize;
16
+ getSessionInfo(): {
17
+ sessionId: string | null;
18
+ organizationId: string | null;
19
+ userId: string | null;
20
+ agentName: string | null;
21
+ platform: string | null;
22
+ lastSeenAt: string | null;
23
+ status: RelayRuntimeStatus;
24
+ };
25
+ startRelayLoopIfReady(): boolean;
26
+ private runLoop;
27
+ private getAgentName;
28
+ private getClient;
29
+ private requestJson;
30
+ private registerSession;
31
+ private disconnectSession;
32
+ private pollNextRequest;
33
+ private submitResponse;
34
+ private handleRequest;
35
+ private handleMessageSend;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=cloud-managed-gateway-relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-managed-gateway-relay.d.ts","sourceRoot":"","sources":["../../src/services/cloud-managed-gateway-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,aAAa,EAIlB,OAAO,EAER,MAAM,eAAe,CAAC;AAgBvB,KAAK,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AA0KlF,qBAAa,+BAAgC,SAAQ,OAAO;IAC1D,MAAM,CAAC,WAAW,SAAiC;IACnD,qBAAqB,SACgF;IAErG,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,qBAAqB,CAAgC;IAC7D,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,UAAU,CAAuB;WAE5B,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAMtD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAsBb,UAAU;IAwCxB,cAAc,IAAI;QAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,kBAAkB,CAAC;KAC5B;IAoBD,qBAAqB,IAAI,OAAO;YAoBlB,OAAO;IA6CrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;YAQH,WAAW;YA6BX,eAAe;YAsBf,iBAAiB;YAkBjB,eAAe;YAqBf,cAAc;YAsBd,aAAa;YAgCb,iBAAiB;CAqIhC"}