@elizaos/plugin-elizacloud 2.0.0-alpha.8 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +220 -0
  3. package/auto-enable.ts +17 -0
  4. package/dist/browser/index.browser.js +2 -21
  5. package/dist/browser/index.browser.js.map +5 -38
  6. package/dist/cjs/index.d.ts +2 -2
  7. package/dist/cjs/index.node.cjs +12165 -2277
  8. package/dist/cjs/index.node.js.map +135 -28
  9. package/dist/cloud/auth.d.ts +19 -0
  10. package/dist/cloud/auth.d.ts.map +1 -0
  11. package/dist/cloud/auth.js +330 -0
  12. package/dist/cloud/auth.js.map +12 -0
  13. package/dist/cloud/backup.d.ts +18 -0
  14. package/dist/cloud/backup.d.ts.map +1 -0
  15. package/dist/cloud/backup.js +63 -0
  16. package/dist/cloud/backup.js.map +10 -0
  17. package/dist/cloud/base-url.d.ts +3 -0
  18. package/dist/cloud/base-url.d.ts.map +1 -0
  19. package/dist/cloud/base-url.js +77 -0
  20. package/dist/cloud/base-url.js.map +10 -0
  21. package/dist/cloud/bridge-client.d.ts +126 -0
  22. package/dist/cloud/bridge-client.d.ts.map +1 -0
  23. package/dist/cloud/bridge-client.js +432 -0
  24. package/dist/cloud/bridge-client.js.map +11 -0
  25. package/dist/cloud/cloud-api-key.d.ts +26 -0
  26. package/dist/cloud/cloud-api-key.d.ts.map +1 -0
  27. package/dist/cloud/cloud-api-key.js +60 -0
  28. package/dist/cloud/cloud-api-key.js.map +10 -0
  29. package/dist/cloud/cloud-manager.d.ts +33 -0
  30. package/dist/cloud/cloud-manager.d.ts.map +1 -0
  31. package/dist/cloud/cloud-manager.js +853 -0
  32. package/dist/cloud/cloud-manager.js.map +16 -0
  33. package/dist/cloud/cloud-proxy.d.ts +20 -0
  34. package/dist/cloud/cloud-proxy.d.ts.map +1 -0
  35. package/dist/cloud/cloud-proxy.js +54 -0
  36. package/dist/cloud/cloud-proxy.js.map +10 -0
  37. package/dist/cloud/cloud-wallet.d.ts +94 -0
  38. package/dist/cloud/cloud-wallet.d.ts.map +1 -0
  39. package/dist/cloud/cloud-wallet.js +5195 -0
  40. package/dist/cloud/cloud-wallet.js.map +92 -0
  41. package/dist/cloud/index.d.ts +9 -0
  42. package/dist/cloud/index.d.ts.map +1 -0
  43. package/dist/cloud/index.js +30 -0
  44. package/dist/cloud/index.js.map +9 -0
  45. package/dist/cloud/reconnect.d.ts +26 -0
  46. package/dist/cloud/reconnect.d.ts.map +1 -0
  47. package/dist/cloud/reconnect.js +104 -0
  48. package/dist/cloud/reconnect.js.map +10 -0
  49. package/dist/cloud/validate-url.d.ts +2 -0
  50. package/dist/cloud/validate-url.d.ts.map +1 -0
  51. package/dist/cloud/validate-url.js +174 -0
  52. package/dist/cloud/validate-url.js.map +10 -0
  53. package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
  54. package/dist/cloud-providers/cloud-status.js +78 -0
  55. package/dist/cloud-providers/cloud-status.js.map +10 -0
  56. package/dist/cloud-providers/container-health.d.ts.map +1 -1
  57. package/dist/cloud-providers/container-health.js +74 -0
  58. package/dist/cloud-providers/container-health.js.map +10 -0
  59. package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
  60. package/dist/cloud-providers/credit-balance.js +85 -0
  61. package/dist/cloud-providers/credit-balance.js.map +10 -0
  62. package/dist/cloud-providers/index.d.ts.map +1 -1
  63. package/dist/cloud-providers/index.js +24 -0
  64. package/dist/cloud-providers/index.js.map +9 -0
  65. package/dist/cloud-providers/model-registry.d.ts.map +1 -1
  66. package/dist/cloud-providers/model-registry.js +71 -0
  67. package/dist/cloud-providers/model-registry.js.map +10 -0
  68. package/dist/index.browser.d.ts +4 -3
  69. package/dist/index.browser.d.ts.map +1 -1
  70. package/dist/index.d.ts +18 -0
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +12851 -0
  73. package/dist/index.js.map +145 -0
  74. package/dist/index.node.d.ts +14 -2
  75. package/dist/index.node.d.ts.map +1 -1
  76. package/dist/init.d.ts.map +1 -1
  77. package/dist/init.js +169 -0
  78. package/dist/init.js.map +12 -0
  79. package/dist/lib/cloud-connection.d.ts +78 -0
  80. package/dist/lib/cloud-connection.d.ts.map +1 -0
  81. package/dist/lib/cloud-connection.js +731 -0
  82. package/dist/lib/cloud-connection.js.map +14 -0
  83. package/dist/lib/cloud-secrets.d.ts +23 -0
  84. package/dist/lib/cloud-secrets.d.ts.map +1 -0
  85. package/dist/lib/cloud-secrets.js +64 -0
  86. package/dist/lib/cloud-secrets.js.map +10 -0
  87. package/dist/lib/config-env.d.ts +5 -0
  88. package/dist/lib/config-env.d.ts.map +1 -0
  89. package/dist/lib/config-env.js +191 -0
  90. package/dist/lib/config-env.js.map +11 -0
  91. package/dist/lib/config-like.d.ts +40 -0
  92. package/dist/lib/config-like.d.ts.map +1 -0
  93. package/dist/lib/config-like.js +103 -0
  94. package/dist/lib/config-like.js.map +10 -0
  95. package/dist/lib/credential-type-map.d.ts +53 -0
  96. package/dist/lib/credential-type-map.d.ts.map +1 -0
  97. package/dist/lib/credential-type-map.js +88 -0
  98. package/dist/lib/credential-type-map.js.map +10 -0
  99. package/dist/lib/feature-flags.d.ts +2 -0
  100. package/dist/lib/feature-flags.d.ts.map +1 -0
  101. package/dist/lib/feature-flags.js +40 -0
  102. package/dist/lib/feature-flags.js.map +10 -0
  103. package/dist/lib/http.d.ts +22 -0
  104. package/dist/lib/http.d.ts.map +1 -0
  105. package/dist/lib/http.js +107 -0
  106. package/dist/lib/http.js.map +10 -0
  107. package/dist/lib/server-cloud-tts.d.ts +34 -0
  108. package/dist/lib/server-cloud-tts.d.ts.map +1 -0
  109. package/dist/lib/server-cloud-tts.js +549 -0
  110. package/dist/lib/server-cloud-tts.js.map +13 -0
  111. package/dist/lib/state-paths.d.ts +4 -0
  112. package/dist/lib/state-paths.d.ts.map +1 -0
  113. package/dist/lib/state-paths.js +52 -0
  114. package/dist/lib/state-paths.js.map +10 -0
  115. package/dist/lib/tts-debug.d.ts +4 -0
  116. package/dist/lib/tts-debug.d.ts.map +1 -0
  117. package/dist/lib/tts-debug.js +57 -0
  118. package/dist/lib/tts-debug.js.map +10 -0
  119. package/dist/models/embeddings.d.ts.map +1 -1
  120. package/dist/models/embeddings.js +319 -0
  121. package/dist/models/embeddings.js.map +13 -0
  122. package/dist/models/image.d.ts.map +1 -1
  123. package/dist/models/image.js +374 -0
  124. package/dist/models/image.js.map +14 -0
  125. package/dist/models/index.d.ts +1 -2
  126. package/dist/models/index.d.ts.map +1 -1
  127. package/dist/models/index.js +1386 -0
  128. package/dist/models/index.js.map +20 -0
  129. package/dist/models/research.d.ts.map +1 -1
  130. package/dist/models/research.js +324 -0
  131. package/dist/models/research.js.map +13 -0
  132. package/dist/models/speech.d.ts.map +1 -1
  133. package/dist/models/speech.js +273 -0
  134. package/dist/models/speech.js.map +13 -0
  135. package/dist/models/text.d.ts +5 -2
  136. package/dist/models/text.d.ts.map +1 -1
  137. package/dist/models/text.js +803 -0
  138. package/dist/models/text.js.map +15 -0
  139. package/dist/models/tokenization.d.ts.map +1 -1
  140. package/dist/models/tokenization.js +65 -0
  141. package/dist/models/tokenization.js.map +10 -0
  142. package/dist/models/transcription.d.ts.map +1 -1
  143. package/dist/models/transcription.js +283 -0
  144. package/dist/models/transcription.js.map +13 -0
  145. package/dist/node/index.d.ts +2 -2
  146. package/dist/node/index.node.js +12170 -2266
  147. package/dist/node/index.node.js.map +135 -28
  148. package/dist/onboarding.d.ts +35 -0
  149. package/dist/onboarding.d.ts.map +1 -0
  150. package/dist/onboarding.js +883 -0
  151. package/dist/onboarding.js.map +14 -0
  152. package/dist/plugin.d.ts +20 -0
  153. package/dist/plugin.d.ts.map +1 -0
  154. package/dist/plugin.js +7611 -0
  155. package/dist/plugin.js.map +104 -0
  156. package/dist/providers/openai.d.ts.map +1 -1
  157. package/dist/providers/openai.js +127 -0
  158. package/dist/providers/openai.js.map +11 -0
  159. package/dist/register-routes.d.ts +2 -0
  160. package/dist/register-routes.d.ts.map +1 -0
  161. package/dist/register-routes.js +7612 -0
  162. package/dist/register-routes.js.map +105 -0
  163. package/dist/routes/cloud-billing-routes.d.ts +9 -0
  164. package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
  165. package/dist/routes/cloud-billing-routes.js +807 -0
  166. package/dist/routes/cloud-billing-routes.js.map +14 -0
  167. package/dist/routes/cloud-compat-routes.d.ts +10 -0
  168. package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
  169. package/dist/routes/cloud-compat-routes.js +538 -0
  170. package/dist/routes/cloud-compat-routes.js.map +14 -0
  171. package/dist/routes/cloud-features-routes.d.ts +9 -0
  172. package/dist/routes/cloud-features-routes.d.ts.map +1 -0
  173. package/dist/routes/cloud-features-routes.js +124 -0
  174. package/dist/routes/cloud-features-routes.js.map +11 -0
  175. package/dist/routes/cloud-provisioning.d.ts +14 -0
  176. package/dist/routes/cloud-provisioning.d.ts.map +1 -0
  177. package/dist/routes/cloud-provisioning.js +37 -0
  178. package/dist/routes/cloud-provisioning.js.map +10 -0
  179. package/dist/routes/cloud-relay-routes.d.ts +22 -0
  180. package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
  181. package/dist/routes/cloud-relay-routes.js +60 -0
  182. package/dist/routes/cloud-relay-routes.js.map +10 -0
  183. package/dist/routes/cloud-routes-autonomous.d.ts +83 -0
  184. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
  185. package/dist/routes/cloud-routes-autonomous.js +6134 -0
  186. package/dist/routes/cloud-routes-autonomous.js.map +97 -0
  187. package/dist/routes/cloud-routes.d.ts +35 -0
  188. package/dist/routes/cloud-routes.d.ts.map +1 -0
  189. package/dist/routes/cloud-routes.js +6888 -0
  190. package/dist/routes/cloud-routes.js.map +100 -0
  191. package/dist/routes/cloud-status-routes-autonomous.d.ts +15 -0
  192. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
  193. package/dist/routes/cloud-status-routes-autonomous.js +396 -0
  194. package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
  195. package/dist/routes/cloud-status-routes.d.ts +4 -0
  196. package/dist/routes/cloud-status-routes.d.ts.map +1 -0
  197. package/dist/routes/cloud-status-routes.js +771 -0
  198. package/dist/routes/cloud-status-routes.js.map +15 -0
  199. package/dist/services/cloud-auth.d.ts +140 -5
  200. package/dist/services/cloud-auth.d.ts.map +1 -1
  201. package/dist/services/cloud-auth.js +363 -0
  202. package/dist/services/cloud-auth.js.map +12 -0
  203. package/dist/services/cloud-backup.d.ts.map +1 -1
  204. package/dist/services/cloud-backup.js +176 -0
  205. package/dist/services/cloud-backup.js.map +11 -0
  206. package/dist/services/cloud-bootstrap.d.ts +38 -0
  207. package/dist/services/cloud-bootstrap.d.ts.map +1 -0
  208. package/dist/services/cloud-bootstrap.js +84 -0
  209. package/dist/services/cloud-bootstrap.js.map +10 -0
  210. package/dist/services/cloud-bridge.d.ts +1 -1
  211. package/dist/services/cloud-bridge.d.ts.map +1 -1
  212. package/dist/services/cloud-bridge.js +308 -0
  213. package/dist/services/cloud-bridge.js.map +11 -0
  214. package/dist/services/cloud-container.d.ts.map +1 -1
  215. package/dist/services/cloud-container.js +241 -0
  216. package/dist/services/cloud-container.js.map +11 -0
  217. package/dist/services/cloud-credential-provider.d.ts +55 -0
  218. package/dist/services/cloud-credential-provider.d.ts.map +1 -0
  219. package/dist/services/cloud-credential-provider.js +190 -0
  220. package/dist/services/cloud-credential-provider.js.map +11 -0
  221. package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
  222. package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
  223. package/dist/services/cloud-managed-gateway-relay.js +479 -0
  224. package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
  225. package/dist/services/cloud-model-registry.d.ts.map +1 -1
  226. package/dist/services/cloud-model-registry.js +175 -0
  227. package/dist/services/cloud-model-registry.js.map +10 -0
  228. package/dist/services/index.d.ts +3 -1
  229. package/dist/services/index.d.ts.map +1 -1
  230. package/dist/services/index.js +29 -0
  231. package/dist/services/index.js.map +9 -0
  232. package/dist/types/cloud.d.ts +41 -19
  233. package/dist/types/cloud.d.ts.map +1 -1
  234. package/dist/types/cloud.js +52 -0
  235. package/dist/types/cloud.js.map +10 -0
  236. package/dist/types/index.d.ts +1 -1
  237. package/dist/types/index.d.ts.map +1 -1
  238. package/dist/types/index.js +24 -0
  239. package/dist/types/index.js.map +9 -0
  240. package/dist/utils/cloud-api.d.ts +2 -27
  241. package/dist/utils/cloud-api.d.ts.map +1 -1
  242. package/dist/utils/cloud-api.js +33 -0
  243. package/dist/utils/cloud-api.js.map +10 -0
  244. package/dist/utils/cloud-sdk/client.d.ts +133 -0
  245. package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
  246. package/dist/utils/cloud-sdk/client.js +3561 -0
  247. package/dist/utils/cloud-sdk/client.js.map +13 -0
  248. package/dist/utils/cloud-sdk/http.d.ts +37 -0
  249. package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
  250. package/dist/utils/cloud-sdk/http.js +237 -0
  251. package/dist/utils/cloud-sdk/http.js.map +11 -0
  252. package/dist/utils/cloud-sdk/index.d.ts +6 -0
  253. package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
  254. package/dist/utils/cloud-sdk/index.js +29 -0
  255. package/dist/utils/cloud-sdk/index.js.map +9 -0
  256. package/dist/utils/cloud-sdk/public-routes.d.ts +5377 -0
  257. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
  258. package/dist/utils/cloud-sdk/public-routes.js +2950 -0
  259. package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
  260. package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
  261. package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
  262. package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
  263. package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
  264. package/dist/utils/cloud-sdk/types.d.ts +655 -0
  265. package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
  266. package/dist/utils/cloud-sdk/types.js +29 -0
  267. package/dist/utils/cloud-sdk/types.js.map +10 -0
  268. package/dist/utils/config.d.ts +7 -3
  269. package/dist/utils/config.d.ts.map +1 -1
  270. package/dist/utils/config.js +137 -0
  271. package/dist/utils/config.js.map +10 -0
  272. package/dist/utils/events.d.ts.map +1 -1
  273. package/dist/utils/events.js +43 -0
  274. package/dist/utils/events.js.map +10 -0
  275. package/dist/utils/helpers.d.ts.map +1 -1
  276. package/dist/utils/helpers.js +103 -0
  277. package/dist/utils/helpers.js.map +10 -0
  278. package/dist/utils/responses-output.d.ts +13 -0
  279. package/dist/utils/responses-output.d.ts.map +1 -0
  280. package/dist/utils/responses-output.js +102 -0
  281. package/dist/utils/responses-output.js.map +10 -0
  282. package/dist/utils/sdk-client.d.ts +5 -0
  283. package/dist/utils/sdk-client.d.ts.map +1 -0
  284. package/dist/utils/sdk-client.js +144 -0
  285. package/dist/utils/sdk-client.js.map +11 -0
  286. package/package.json +108 -19
  287. package/src/cloud/auth.ts +175 -0
  288. package/src/cloud/backup.ts +46 -0
  289. package/src/cloud/base-url.ts +62 -0
  290. package/src/cloud/bridge-client.ts +602 -0
  291. package/src/cloud/cloud-api-key.ts +80 -0
  292. package/src/cloud/cloud-manager.ts +163 -0
  293. package/src/cloud/cloud-proxy.ts +52 -0
  294. package/src/cloud/cloud-wallet.ts +341 -0
  295. package/src/cloud/index.ts +28 -0
  296. package/src/cloud/reconnect.ts +111 -0
  297. package/src/cloud/validate-url.ts +181 -0
  298. package/src/cloud-providers/cloud-status.ts +75 -0
  299. package/src/cloud-providers/container-health.ts +68 -0
  300. package/src/cloud-providers/credit-balance.ts +70 -0
  301. package/src/cloud-providers/index.ts +3 -0
  302. package/src/cloud-providers/model-registry.ts +74 -0
  303. package/src/index.browser.ts +10 -0
  304. package/src/index.node.ts +39 -0
  305. package/src/index.ts +347 -0
  306. package/src/init.ts +39 -0
  307. package/src/lib/cloud-connection.ts +663 -0
  308. package/src/lib/cloud-secrets.ts +58 -0
  309. package/src/lib/config-env.ts +168 -0
  310. package/src/lib/config-like.ts +149 -0
  311. package/src/lib/credential-type-map.ts +130 -0
  312. package/src/lib/feature-flags.ts +26 -0
  313. package/src/lib/http.ts +139 -0
  314. package/src/lib/server-cloud-tts.ts +609 -0
  315. package/src/lib/state-paths.ts +28 -0
  316. package/src/lib/tts-debug.ts +34 -0
  317. package/src/models/embeddings.ts +234 -0
  318. package/src/models/image.ts +219 -0
  319. package/src/models/index.ts +16 -0
  320. package/src/models/research.ts +265 -0
  321. package/src/models/speech.ts +78 -0
  322. package/src/models/text.ts +899 -0
  323. package/src/models/tokenization.ts +67 -0
  324. package/src/models/transcription.ts +97 -0
  325. package/src/onboarding.ts +396 -0
  326. package/src/plugin.ts +243 -0
  327. package/src/providers/openai.ts +16 -0
  328. package/src/register-routes.ts +6 -0
  329. package/src/routes/cloud-billing-routes.ts +754 -0
  330. package/src/routes/cloud-compat-routes.ts +314 -0
  331. package/src/routes/cloud-features-routes.ts +57 -0
  332. package/src/routes/cloud-provisioning.ts +37 -0
  333. package/src/routes/cloud-relay-routes.ts +89 -0
  334. package/src/routes/cloud-routes-autonomous.ts +996 -0
  335. package/src/routes/cloud-routes.ts +576 -0
  336. package/src/routes/cloud-status-routes-autonomous.ts +234 -0
  337. package/src/routes/cloud-status-routes.ts +73 -0
  338. package/src/services/cloud-auth.ts +567 -0
  339. package/src/services/cloud-backup.ts +208 -0
  340. package/src/services/cloud-bootstrap.ts +108 -0
  341. package/src/services/cloud-bridge.ts +386 -0
  342. package/src/services/cloud-container.ts +297 -0
  343. package/src/services/cloud-credential-provider.ts +210 -0
  344. package/src/services/cloud-managed-gateway-relay.ts +663 -0
  345. package/src/services/cloud-model-registry.ts +202 -0
  346. package/src/services/index.ts +17 -0
  347. package/{types → src/types}/cloud.ts +52 -29
  348. package/{types → src/types}/index.ts +6 -0
  349. package/src/utils/cloud-api.ts +10 -0
  350. package/src/utils/cloud-sdk/client.ts +735 -0
  351. package/src/utils/cloud-sdk/http.ts +291 -0
  352. package/src/utils/cloud-sdk/index.ts +23 -0
  353. package/src/utils/cloud-sdk/public-routes.ts +5070 -0
  354. package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
  355. package/src/utils/cloud-sdk/types.ts +762 -0
  356. package/src/utils/config.ts +174 -0
  357. package/src/utils/events.ts +37 -0
  358. package/src/utils/helpers.ts +107 -0
  359. package/src/utils/responses-output.ts +115 -0
  360. package/src/utils/sdk-client.ts +37 -0
  361. package/dist/actions/check-credits.d.ts +0 -6
  362. package/dist/actions/check-credits.d.ts.map +0 -1
  363. package/dist/actions/freeze-agent.d.ts +0 -9
  364. package/dist/actions/freeze-agent.d.ts.map +0 -1
  365. package/dist/actions/index.d.ts +0 -5
  366. package/dist/actions/index.d.ts.map +0 -1
  367. package/dist/actions/provision-agent.d.ts +0 -8
  368. package/dist/actions/provision-agent.d.ts.map +0 -1
  369. package/dist/actions/resume-agent.d.ts +0 -9
  370. package/dist/actions/resume-agent.d.ts.map +0 -1
  371. package/dist/build.d.ts +0 -3
  372. package/dist/build.d.ts.map +0 -1
  373. package/dist/generated/specs/specs.d.ts +0 -55
  374. package/dist/generated/specs/specs.d.ts.map +0 -1
  375. package/dist/models/object.d.ts +0 -4
  376. package/dist/models/object.d.ts.map +0 -1
  377. package/dist/utils/forwarded-settings.d.ts +0 -8
  378. package/dist/utils/forwarded-settings.d.ts.map +0 -1
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Eliza Cloud login flow — reuses the CLI auth session pattern:
3
+ * create session, open browser, poll until authenticated, return API key.
4
+ */
5
+ export interface CloudLoginResult {
6
+ apiKey: string;
7
+ keyPrefix: string;
8
+ expiresAt: string | null;
9
+ }
10
+ export interface CloudLoginOptions {
11
+ baseUrl?: string;
12
+ timeoutMs?: number;
13
+ requestTimeoutMs?: number;
14
+ pollIntervalMs?: number;
15
+ onBrowserUrl?: (url: string) => void;
16
+ onPollStatus?: (status: string) => void;
17
+ }
18
+ export declare function cloudLogin(options?: CloudLoginOptions): Promise<CloudLoginResult>;
19
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cloud/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AA2BD,wBAAsB,UAAU,CAC9B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA0H3B"}
@@ -0,0 +1,330 @@
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/cloud/base-url.ts
20
+ function isLoopbackHost(hostname) {
21
+ const normalized = hostname.toLowerCase();
22
+ return normalized === "localhost" || normalized === "::1" || normalized === "0:0:0:0:0:0:0:1" || normalized.startsWith("127.");
23
+ }
24
+ function trimApiPath(pathname) {
25
+ const normalized = pathname.trim().replace(/\/+$/, "");
26
+ if (!normalized)
27
+ return "";
28
+ if (normalized === "/api/v1")
29
+ return "";
30
+ if (normalized.endsWith("/api/v1")) {
31
+ return normalized.slice(0, -"/api/v1".length);
32
+ }
33
+ return normalized;
34
+ }
35
+ function normalizeCloudSiteUrl(rawUrl) {
36
+ const envOverride = process.env.ELIZAOS_CLOUD_BASE_URL?.trim();
37
+ const candidate = envOverride || rawUrl?.trim() || DEFAULT_CLOUD_SITE_URL;
38
+ try {
39
+ const parsed = new URL(candidate);
40
+ const pathname = trimApiPath(parsed.pathname);
41
+ const host = parsed.hostname.toLowerCase();
42
+ const preserveLocalOrigin = isLoopbackHost(host);
43
+ parsed.hash = "";
44
+ parsed.search = "";
45
+ if (!preserveLocalOrigin) {
46
+ parsed.protocol = "https:";
47
+ parsed.port = "";
48
+ }
49
+ parsed.pathname = pathname;
50
+ if (LEGACY_CLOUD_HOST_ALIASES.has(host)) {
51
+ parsed.hostname = "www.elizacloud.ai";
52
+ parsed.pathname = "";
53
+ }
54
+ return parsed.toString().replace(/\/{1,1024}$/, "");
55
+ } catch {
56
+ const safeCandidate = candidate.length > 8192 ? candidate.slice(0, 8192) : candidate;
57
+ return safeCandidate.replace(/\/{1,1024}$/, "");
58
+ }
59
+ }
60
+ function resolveCloudApiBaseUrl(rawUrl) {
61
+ return `${normalizeCloudSiteUrl(rawUrl)}/api/v1`;
62
+ }
63
+ var DEFAULT_CLOUD_SITE_URL = "https://www.elizacloud.ai", LEGACY_CLOUD_HOST_ALIASES;
64
+ var init_base_url = __esm(() => {
65
+ LEGACY_CLOUD_HOST_ALIASES = new Set([
66
+ "elizacloud.ai",
67
+ "www.elizacloud.ai"
68
+ ]);
69
+ });
70
+
71
+ // src/cloud/validate-url.ts
72
+ import dns from "node:dns";
73
+ import net from "node:net";
74
+ import { promisify } from "node:util";
75
+ function normalizeHostLike(value) {
76
+ return value.trim().toLowerCase().replace(/^\[|\]$/g, "");
77
+ }
78
+ function decodeIpv6MappedHex(mapped) {
79
+ const parts = mapped.split(":");
80
+ if (parts.length < 1 || parts.length > 2)
81
+ return null;
82
+ const parsed = parts.map((part) => {
83
+ if (!/^[0-9a-f]{1,4}$/i.test(part))
84
+ return Number.NaN;
85
+ return Number.parseInt(part, 16);
86
+ });
87
+ if (parsed.some((value) => !Number.isFinite(value)))
88
+ return null;
89
+ const [hi, lo] = parsed.length === 1 ? [0, parsed[0]] : parsed;
90
+ const octets = [hi >> 8, hi & 255, lo >> 8, lo & 255];
91
+ return octets.join(".");
92
+ }
93
+ function canonicalizeIpv6(ip) {
94
+ try {
95
+ return new URL(`http://[${ip}]/`).hostname.replace(/^\[|\]$/g, "");
96
+ } catch {
97
+ return null;
98
+ }
99
+ }
100
+ function normalizeIpForPolicy(ip) {
101
+ const base = normalizeHostLike(ip).split("%")[0];
102
+ if (!base)
103
+ return base;
104
+ let normalized = base;
105
+ if (net.isIP(normalized) === 6) {
106
+ normalized = canonicalizeIpv6(normalized) ?? normalized;
107
+ }
108
+ let mapped = null;
109
+ if (normalized.startsWith("::ffff:")) {
110
+ mapped = normalized.slice("::ffff:".length);
111
+ } else if (normalized.startsWith("0:0:0:0:0:ffff:")) {
112
+ mapped = normalized.slice("0:0:0:0:0:ffff:".length);
113
+ }
114
+ if (!mapped)
115
+ return normalized;
116
+ if (net.isIP(mapped) === 4)
117
+ return mapped;
118
+ return decodeIpv6MappedHex(mapped) ?? normalized;
119
+ }
120
+ function cidrV4(base, prefix) {
121
+ const parsed = parseIpv4ToInt(base);
122
+ if (parsed === null) {
123
+ throw new Error(`Invalid CIDR base IPv4 address: ${base}`);
124
+ }
125
+ const shift = 32 - prefix;
126
+ const mask = shift === 32 ? 0 : 4294967295 << shift >>> 0;
127
+ return { base: parsed & mask, mask };
128
+ }
129
+ function parseIpv4ToInt(ip) {
130
+ const parts = ip.split(".");
131
+ if (parts.length !== 4)
132
+ return null;
133
+ let value = 0;
134
+ for (const part of parts) {
135
+ if (!/^\d{1,3}$/.test(part))
136
+ return null;
137
+ const octet = Number.parseInt(part, 10);
138
+ if (!Number.isInteger(octet) || octet < 0 || octet > 255)
139
+ return null;
140
+ value = value << 8 | octet;
141
+ }
142
+ return value >>> 0;
143
+ }
144
+ function isBlockedIpv4(ip) {
145
+ const asInt = parseIpv4ToInt(ip);
146
+ if (asInt === null)
147
+ return true;
148
+ return BLOCKED_IPV4_CIDRS.some((cidr) => (asInt & cidr.mask) === cidr.base);
149
+ }
150
+ function isBlockedIpv6(ip) {
151
+ const normalized = ip.toLowerCase();
152
+ return normalized === "::" || normalized === "::1" || /^fe[89ab][0-9a-f]:/.test(normalized) || /^f[cd][0-9a-f]{2}:/i.test(normalized) || normalized.startsWith("ff");
153
+ }
154
+ function isBlockedIp(ip) {
155
+ const normalized = normalizeIpForPolicy(ip);
156
+ const family = net.isIP(normalized);
157
+ if (family === 4)
158
+ return isBlockedIpv4(normalized);
159
+ if (family === 6)
160
+ return isBlockedIpv6(normalized);
161
+ return false;
162
+ }
163
+ async function validateCloudBaseUrl(rawUrl) {
164
+ let parsed;
165
+ try {
166
+ parsed = new URL(rawUrl);
167
+ } catch {
168
+ return `Invalid cloud base URL: "${rawUrl}"`;
169
+ }
170
+ if (parsed.protocol !== "https:") {
171
+ return `Cloud base URL must use HTTPS, got "${parsed.protocol}" in "${rawUrl}"`;
172
+ }
173
+ const hostname = normalizeHostLike(parsed.hostname);
174
+ if (!hostname) {
175
+ return `Invalid cloud base URL: "${rawUrl}"`;
176
+ }
177
+ if (hostname === "localhost" || hostname.endsWith(".localhost") || hostname.endsWith(".local")) {
178
+ return `Cloud base URL "${rawUrl}" points to a blocked local hostname.`;
179
+ }
180
+ if (true) {
181
+ return null;
182
+ }
183
+ if (isBlockedIp(hostname)) {
184
+ return `Cloud base URL "${rawUrl}" points to a blocked address.`;
185
+ }
186
+ try {
187
+ const results = await dnsLookupAll(hostname, { all: true });
188
+ const addresses = Array.isArray(results) ? results : [results];
189
+ for (const entry of addresses) {
190
+ const ip = typeof entry === "string" ? entry : entry.address;
191
+ if (isBlockedIp(ip)) {
192
+ return `Cloud base URL "${rawUrl}" resolves to ${ip}, ` + "which is a blocked internal/metadata address.";
193
+ }
194
+ }
195
+ } catch {
196
+ return `Cloud base URL "${rawUrl}" could not be resolved via DNS.`;
197
+ }
198
+ return null;
199
+ }
200
+ var dnsLookupAll, BLOCKED_IPV4_CIDRS;
201
+ var init_validate_url = __esm(() => {
202
+ dnsLookupAll = promisify(dns.lookup);
203
+ BLOCKED_IPV4_CIDRS = [
204
+ cidrV4("0.0.0.0", 8),
205
+ cidrV4("10.0.0.0", 8),
206
+ cidrV4("172.16.0.0", 12),
207
+ cidrV4("192.168.0.0", 16),
208
+ cidrV4("100.64.0.0", 10),
209
+ cidrV4("127.0.0.0", 8),
210
+ cidrV4("169.254.0.0", 16),
211
+ cidrV4("192.0.0.0", 24),
212
+ cidrV4("198.18.0.0", 15),
213
+ cidrV4("192.0.2.0", 24),
214
+ cidrV4("198.51.100.0", 24),
215
+ cidrV4("203.0.113.0", 24),
216
+ cidrV4("224.0.0.0", 4),
217
+ cidrV4("240.0.0.0", 4)
218
+ ];
219
+ });
220
+
221
+ // src/cloud/auth.ts
222
+ init_base_url();
223
+ init_validate_url();
224
+ import crypto from "node:crypto";
225
+ import { logger } from "@elizaos/core";
226
+ var DEFAULT_CLOUD_REQUEST_TIMEOUT_MS = 1e4;
227
+ function isRedirectResponse(response) {
228
+ return response.status >= 300 && response.status < 400;
229
+ }
230
+ function isTimeoutError(err) {
231
+ if (!(err instanceof Error))
232
+ return false;
233
+ if (err.name === "TimeoutError" || err.name === "AbortError")
234
+ return true;
235
+ const msg = err.message.toLowerCase();
236
+ return msg.includes("timed out") || msg.includes("timeout");
237
+ }
238
+ async function fetchWithTimeout(input, init, timeoutMs) {
239
+ return fetch(input, {
240
+ ...init,
241
+ redirect: "manual",
242
+ signal: AbortSignal.timeout(timeoutMs)
243
+ });
244
+ }
245
+ async function cloudLogin(options = {}) {
246
+ const baseUrl = normalizeCloudSiteUrl(options.baseUrl);
247
+ const urlError = await validateCloudBaseUrl(baseUrl);
248
+ if (urlError) {
249
+ throw new Error(urlError);
250
+ }
251
+ const timeoutMs = options.timeoutMs ?? 300000;
252
+ const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_CLOUD_REQUEST_TIMEOUT_MS;
253
+ const pollIntervalMs = options.pollIntervalMs ?? 2000;
254
+ const sessionId = crypto.randomUUID();
255
+ logger.info("[cloud-auth] Creating auth session...");
256
+ let createResponse;
257
+ try {
258
+ createResponse = await fetchWithTimeout(`${baseUrl}/api/auth/cli-session`, {
259
+ method: "POST",
260
+ headers: { "Content-Type": "application/json" },
261
+ body: JSON.stringify({ sessionId })
262
+ }, requestTimeoutMs);
263
+ } catch (err) {
264
+ if (isTimeoutError(err)) {
265
+ throw new Error(`Cloud login request timed out while creating session (>${requestTimeoutMs}ms).`);
266
+ }
267
+ throw new Error(`Failed to create auth session: ${String(err)}`);
268
+ }
269
+ if (!createResponse.ok) {
270
+ if (isRedirectResponse(createResponse)) {
271
+ throw new Error("Cloud login request was redirected; redirects are not allowed.");
272
+ }
273
+ const errorText = await createResponse.text();
274
+ throw new Error(`Failed to create auth session (HTTP ${createResponse.status}): ${errorText}`);
275
+ }
276
+ const browserUrl = `${baseUrl}/auth/cli-login?session=${encodeURIComponent(sessionId)}`;
277
+ logger.info(`[cloud-auth] Browser URL: ${browserUrl}`);
278
+ options.onBrowserUrl?.(browserUrl);
279
+ const deadline = Date.now() + timeoutMs;
280
+ while (Date.now() < deadline) {
281
+ const remainingBeforeSleep = deadline - Date.now();
282
+ if (remainingBeforeSleep <= 0)
283
+ break;
284
+ await new Promise((resolve) => setTimeout(resolve, Math.min(pollIntervalMs, remainingBeforeSleep)));
285
+ const remaining = deadline - Date.now();
286
+ if (remaining <= 0)
287
+ break;
288
+ let pollResponse;
289
+ try {
290
+ pollResponse = await fetchWithTimeout(`${baseUrl}/api/auth/cli-session/${encodeURIComponent(sessionId)}`, {}, Math.min(requestTimeoutMs, remaining));
291
+ } catch (err) {
292
+ if (isTimeoutError(err)) {
293
+ if (remaining <= requestTimeoutMs) {
294
+ break;
295
+ }
296
+ throw new Error(`Cloud login polling request timed out (>${Math.min(requestTimeoutMs, remaining)}ms).`);
297
+ }
298
+ throw new Error(`Cloud login polling failed: ${String(err)}`);
299
+ }
300
+ if (!pollResponse.ok) {
301
+ if (isRedirectResponse(pollResponse)) {
302
+ throw new Error("Cloud login polling request was redirected; redirects are not allowed.");
303
+ }
304
+ if (pollResponse.status === 404) {
305
+ throw new Error("Auth session expired or not found. Please try again.");
306
+ }
307
+ options.onPollStatus?.("error");
308
+ continue;
309
+ }
310
+ const data = await pollResponse.json();
311
+ options.onPollStatus?.(data.status);
312
+ if (data.status === "authenticated" && data.apiKey) {
313
+ logger.info("[cloud-auth] Authentication complete");
314
+ return {
315
+ apiKey: data.apiKey,
316
+ keyPrefix: data.keyPrefix ?? "",
317
+ expiresAt: data.expiresAt ?? null
318
+ };
319
+ }
320
+ if (data.status === "authenticated" && !data.apiKey) {
321
+ throw new Error("Auth session was completed but the API key was already retrieved. Please try logging in again.");
322
+ }
323
+ }
324
+ throw new Error(`Cloud login timed out. The browser login was not completed within ${Math.round(timeoutMs / 1000)} seconds.`);
325
+ }
326
+ export {
327
+ cloudLogin
328
+ };
329
+
330
+ //# debugId=FE8D7066E15F125A64756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cloud/base-url.ts", "../src/cloud/validate-url.ts", "../src/cloud/auth.ts"],
4
+ "sourcesContent": [
5
+ "const DEFAULT_CLOUD_SITE_URL = \"https://www.elizacloud.ai\";\n\nconst LEGACY_CLOUD_HOST_ALIASES = new Set([\n \"elizacloud.ai\",\n \"www.elizacloud.ai\",\n]);\n\nfunction isLoopbackHost(hostname: string): boolean {\n const normalized = hostname.toLowerCase();\n return (\n normalized === \"localhost\" ||\n normalized === \"::1\" ||\n normalized === \"0:0:0:0:0:0:0:1\" ||\n normalized.startsWith(\"127.\")\n );\n}\n\nfunction trimApiPath(pathname: string): string {\n const normalized = pathname.trim().replace(/\\/+$/, \"\");\n if (!normalized) return \"\";\n if (normalized === \"/api/v1\") return \"\";\n if (normalized.endsWith(\"/api/v1\")) {\n return normalized.slice(0, -\"/api/v1\".length);\n }\n return normalized;\n}\n\nexport function normalizeCloudSiteUrl(rawUrl?: string): string {\n // Allow cloud-provisioned containers to override the base URL via env var\n const envOverride = process.env.ELIZAOS_CLOUD_BASE_URL?.trim();\n const candidate = envOverride || rawUrl?.trim() || DEFAULT_CLOUD_SITE_URL;\n\n try {\n const parsed = new URL(candidate);\n const pathname = trimApiPath(parsed.pathname);\n const host = parsed.hostname.toLowerCase();\n const preserveLocalOrigin = isLoopbackHost(host);\n\n parsed.hash = \"\";\n parsed.search = \"\";\n if (!preserveLocalOrigin) {\n parsed.protocol = \"https:\";\n parsed.port = \"\";\n }\n parsed.pathname = pathname;\n\n if (LEGACY_CLOUD_HOST_ALIASES.has(host)) {\n parsed.hostname = \"www.elizacloud.ai\";\n parsed.pathname = \"\";\n }\n\n return parsed.toString().replace(/\\/{1,1024}$/, \"\");\n } catch {\n const safeCandidate =\n candidate.length > 8192 ? candidate.slice(0, 8192) : candidate;\n return safeCandidate.replace(/\\/{1,1024}$/, \"\");\n }\n}\n\nexport function resolveCloudApiBaseUrl(rawUrl?: string): string {\n return `${normalizeCloudSiteUrl(rawUrl)}/api/v1`;\n}\n",
6
+ "import dns from \"node:dns\";\nimport net from \"node:net\";\nimport { promisify } from \"node:util\";\n\nconst dnsLookupAll = promisify(dns.lookup);\n\nconst BLOCKED_IPV4_CIDRS: Array<{ base: number; mask: number }> = [\n cidrV4(\"0.0.0.0\", 8),\n cidrV4(\"10.0.0.0\", 8),\n cidrV4(\"172.16.0.0\", 12),\n cidrV4(\"192.168.0.0\", 16),\n cidrV4(\"100.64.0.0\", 10),\n cidrV4(\"127.0.0.0\", 8),\n cidrV4(\"169.254.0.0\", 16),\n cidrV4(\"192.0.0.0\", 24),\n cidrV4(\"198.18.0.0\", 15),\n cidrV4(\"192.0.2.0\", 24),\n cidrV4(\"198.51.100.0\", 24),\n cidrV4(\"203.0.113.0\", 24),\n cidrV4(\"224.0.0.0\", 4),\n cidrV4(\"240.0.0.0\", 4),\n];\n\nfunction normalizeHostLike(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^\\[|\\]$/g, \"\");\n}\n\nfunction decodeIpv6MappedHex(mapped: string): string | null {\n const parts = mapped.split(\":\");\n if (parts.length < 1 || parts.length > 2) return null;\n\n const parsed = parts.map((part) => {\n if (!/^[0-9a-f]{1,4}$/i.test(part)) return Number.NaN;\n return Number.parseInt(part, 16);\n });\n if (parsed.some((value) => !Number.isFinite(value))) return null;\n\n const [hi, lo] = parsed.length === 1 ? [0, parsed[0]] : parsed;\n const octets = [hi >> 8, hi & 0xff, lo >> 8, lo & 0xff];\n return octets.join(\".\");\n}\n\nfunction canonicalizeIpv6(ip: string): string | null {\n try {\n return new URL(`http://[${ip}]/`).hostname.replace(/^\\[|\\]$/g, \"\");\n } catch {\n return null;\n }\n}\n\nfunction normalizeIpForPolicy(ip: string): string {\n const base = normalizeHostLike(ip).split(\"%\")[0];\n if (!base) return base;\n\n let normalized = base;\n if (net.isIP(normalized) === 6) {\n normalized = canonicalizeIpv6(normalized) ?? normalized;\n }\n\n let mapped: string | null = null;\n if (normalized.startsWith(\"::ffff:\")) {\n mapped = normalized.slice(\"::ffff:\".length);\n } else if (normalized.startsWith(\"0:0:0:0:0:ffff:\")) {\n mapped = normalized.slice(\"0:0:0:0:0:ffff:\".length);\n }\n if (!mapped) return normalized;\n\n if (net.isIP(mapped) === 4) return mapped;\n return decodeIpv6MappedHex(mapped) ?? normalized;\n}\n\nfunction cidrV4(base: string, prefix: number): { base: number; mask: number } {\n const parsed = parseIpv4ToInt(base);\n if (parsed === null) {\n throw new Error(`Invalid CIDR base IPv4 address: ${base}`);\n }\n const shift = 32 - prefix;\n const mask = shift === 32 ? 0 : (0xffffffff << shift) >>> 0;\n return { base: parsed & mask, mask };\n}\n\nfunction parseIpv4ToInt(ip: string): number | null {\n const parts = ip.split(\".\");\n if (parts.length !== 4) return null;\n\n let value = 0;\n for (const part of parts) {\n if (!/^\\d{1,3}$/.test(part)) return null;\n const octet = Number.parseInt(part, 10);\n if (!Number.isInteger(octet) || octet < 0 || octet > 255) return null;\n value = (value << 8) | octet;\n }\n\n return value >>> 0;\n}\n\nfunction isBlockedIpv4(ip: string): boolean {\n const asInt = parseIpv4ToInt(ip);\n if (asInt === null) return true;\n return BLOCKED_IPV4_CIDRS.some((cidr) => (asInt & cidr.mask) === cidr.base);\n}\n\nfunction isBlockedIpv6(ip: string): boolean {\n const normalized = ip.toLowerCase();\n return (\n normalized === \"::\" ||\n normalized === \"::1\" ||\n /^fe[89ab][0-9a-f]:/.test(normalized) ||\n /^f[cd][0-9a-f]{2}:/i.test(normalized) ||\n normalized.startsWith(\"ff\")\n );\n}\n\nfunction isBlockedIp(ip: string): boolean {\n const normalized = normalizeIpForPolicy(ip);\n const family = net.isIP(normalized);\n if (family === 4) return isBlockedIpv4(normalized);\n if (family === 6) return isBlockedIpv6(normalized);\n return false;\n}\n\nexport async function validateCloudBaseUrl(\n rawUrl: string,\n): Promise<string | null> {\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (parsed.protocol !== \"https:\") {\n return `Cloud base URL must use HTTPS, got \"${parsed.protocol}\" in \"${rawUrl}\"`;\n }\n\n const hostname = normalizeHostLike(parsed.hostname);\n if (!hostname) {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (\n hostname === \"localhost\" ||\n hostname.endsWith(\".localhost\") ||\n hostname.endsWith(\".local\")\n ) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked local hostname.`;\n }\n\n // Dev-mode bypass: skip IP-range blocking but keep URL format checks above.\n if (process.env.NODE_ENV === \"development\" || process.env.ELIZA_DEV) {\n return null;\n }\n\n if (isBlockedIp(hostname)) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked address.`;\n }\n\n try {\n const results = await dnsLookupAll(hostname, { all: true });\n const addresses = Array.isArray(results) ? results : [results];\n for (const entry of addresses) {\n const ip =\n typeof entry === \"string\"\n ? entry\n : (entry as { address: string }).address;\n if (isBlockedIp(ip)) {\n return (\n `Cloud base URL \"${rawUrl}\" resolves to ${ip}, ` +\n \"which is a blocked internal/metadata address.\"\n );\n }\n }\n } catch {\n return `Cloud base URL \"${rawUrl}\" could not be resolved via DNS.`;\n }\n\n return null;\n}\n",
7
+ "/**\n * Eliza Cloud login flow — reuses the CLI auth session pattern:\n * create session, open browser, poll until authenticated, return API key.\n */\n\nimport crypto from \"node:crypto\";\nimport { logger } from \"@elizaos/core\";\nimport { normalizeCloudSiteUrl } from \"./base-url.js\";\nimport { validateCloudBaseUrl } from \"./validate-url.js\";\n\nexport interface CloudLoginResult {\n apiKey: string;\n keyPrefix: string;\n expiresAt: string | null;\n}\n\nexport interface CloudLoginOptions {\n baseUrl?: string;\n timeoutMs?: number;\n requestTimeoutMs?: number;\n pollIntervalMs?: number;\n onBrowserUrl?: (url: string) => void;\n onPollStatus?: (status: string) => void;\n}\n\nconst DEFAULT_CLOUD_REQUEST_TIMEOUT_MS = 10_000;\n\nfunction isRedirectResponse(response: Response): boolean {\n return response.status >= 300 && response.status < 400;\n}\n\nfunction isTimeoutError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n if (err.name === \"TimeoutError\" || err.name === \"AbortError\") return true;\n const msg = err.message.toLowerCase();\n return msg.includes(\"timed out\") || msg.includes(\"timeout\");\n}\n\nasync function fetchWithTimeout(\n input: string,\n init: RequestInit,\n timeoutMs: number,\n): Promise<Response> {\n return fetch(input, {\n ...init,\n redirect: \"manual\",\n signal: AbortSignal.timeout(timeoutMs),\n });\n}\n\nexport async function cloudLogin(\n options: CloudLoginOptions = {},\n): Promise<CloudLoginResult> {\n const baseUrl = normalizeCloudSiteUrl(options.baseUrl);\n const urlError = await validateCloudBaseUrl(baseUrl);\n if (urlError) {\n throw new Error(urlError);\n }\n const timeoutMs = options.timeoutMs ?? 300_000;\n const requestTimeoutMs =\n options.requestTimeoutMs ?? DEFAULT_CLOUD_REQUEST_TIMEOUT_MS;\n const pollIntervalMs = options.pollIntervalMs ?? 2_000;\n const sessionId = crypto.randomUUID();\n\n logger.info(\"[cloud-auth] Creating auth session...\");\n\n let createResponse: Response;\n try {\n createResponse = await fetchWithTimeout(\n `${baseUrl}/api/auth/cli-session`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ sessionId }),\n },\n requestTimeoutMs,\n );\n } catch (err) {\n if (isTimeoutError(err)) {\n throw new Error(\n `Cloud login request timed out while creating session (>${requestTimeoutMs}ms).`,\n );\n }\n throw new Error(`Failed to create auth session: ${String(err)}`);\n }\n\n if (!createResponse.ok) {\n if (isRedirectResponse(createResponse)) {\n throw new Error(\n \"Cloud login request was redirected; redirects are not allowed.\",\n );\n }\n const errorText = await createResponse.text();\n throw new Error(\n `Failed to create auth session (HTTP ${createResponse.status}): ${errorText}`,\n );\n }\n\n const browserUrl = `${baseUrl}/auth/cli-login?session=${encodeURIComponent(sessionId)}`;\n logger.info(`[cloud-auth] Browser URL: ${browserUrl}`);\n options.onBrowserUrl?.(browserUrl);\n\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n const remainingBeforeSleep = deadline - Date.now();\n if (remainingBeforeSleep <= 0) break;\n await new Promise((resolve) =>\n setTimeout(resolve, Math.min(pollIntervalMs, remainingBeforeSleep)),\n );\n\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n\n let pollResponse: Response;\n try {\n pollResponse = await fetchWithTimeout(\n `${baseUrl}/api/auth/cli-session/${encodeURIComponent(sessionId)}`,\n {},\n Math.min(requestTimeoutMs, remaining),\n );\n } catch (err) {\n if (isTimeoutError(err)) {\n if (remaining <= requestTimeoutMs) {\n break;\n }\n throw new Error(\n `Cloud login polling request timed out (>${Math.min(requestTimeoutMs, remaining)}ms).`,\n );\n }\n throw new Error(`Cloud login polling failed: ${String(err)}`);\n }\n\n if (!pollResponse.ok) {\n if (isRedirectResponse(pollResponse)) {\n throw new Error(\n \"Cloud login polling request was redirected; redirects are not allowed.\",\n );\n }\n if (pollResponse.status === 404) {\n throw new Error(\"Auth session expired or not found. Please try again.\");\n }\n options.onPollStatus?.(\"error\");\n continue;\n }\n\n const data = (await pollResponse.json()) as {\n status: string;\n apiKey?: string;\n keyPrefix?: string;\n expiresAt?: string;\n };\n\n options.onPollStatus?.(data.status);\n\n if (data.status === \"authenticated\" && data.apiKey) {\n logger.info(\"[cloud-auth] Authentication complete\");\n return {\n apiKey: data.apiKey,\n keyPrefix: data.keyPrefix ?? \"\",\n expiresAt: data.expiresAt ?? null,\n };\n }\n\n if (data.status === \"authenticated\" && !data.apiKey) {\n throw new Error(\n \"Auth session was completed but the API key was already retrieved. Please try logging in again.\",\n );\n }\n }\n\n throw new Error(\n `Cloud login timed out. The browser login was not completed within ${Math.round(timeoutMs / 1000)} seconds.`,\n );\n}\n"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "FE8D7066E15F125A64756E2164756E21",
11
+ "names": []
12
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Periodic state backup scheduler for cloud sandboxes.
3
+ * Default interval: 60s. Configurable via cloud.backup.autoBackupIntervalMs.
4
+ */
5
+ import type { ElizaCloudClient } from "./bridge-client.js";
6
+ export declare class BackupScheduler {
7
+ private client;
8
+ private agentId;
9
+ private intervalMs;
10
+ private timer;
11
+ private running;
12
+ constructor(client: ElizaCloudClient, agentId: string, intervalMs?: number);
13
+ start(): void;
14
+ stop(): void;
15
+ isRunning(): boolean;
16
+ finalSnapshot(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/cloud/backup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;gBAGd,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAe;IAGrC,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAQZ,SAAS,IAAI,OAAO;IAId,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAKrC"}
@@ -0,0 +1,63 @@
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/cloud/backup.ts
20
+ import { logger } from "@elizaos/core";
21
+
22
+ class BackupScheduler {
23
+ client;
24
+ agentId;
25
+ intervalMs;
26
+ timer = null;
27
+ running = false;
28
+ constructor(client, agentId, intervalMs = 60000) {
29
+ this.client = client;
30
+ this.agentId = agentId;
31
+ this.intervalMs = intervalMs;
32
+ }
33
+ start() {
34
+ if (this.timer)
35
+ return;
36
+ this.running = true;
37
+ this.timer = setInterval(() => {
38
+ this.client.snapshot(this.agentId).catch((err) => {
39
+ logger.warn(`[cloud-backup] Auto-backup failed: ${String(err)}`);
40
+ });
41
+ }, this.intervalMs);
42
+ }
43
+ stop() {
44
+ if (this.timer) {
45
+ clearInterval(this.timer);
46
+ this.timer = null;
47
+ }
48
+ this.running = false;
49
+ }
50
+ isRunning() {
51
+ return this.running;
52
+ }
53
+ async finalSnapshot() {
54
+ await this.client.snapshot(this.agentId).catch((err) => {
55
+ logger.warn(`[cloud-backup] Final snapshot failed: ${String(err)}`);
56
+ });
57
+ }
58
+ }
59
+ export {
60
+ BackupScheduler
61
+ };
62
+
63
+ //# debugId=60D6AF2255AAB74B64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cloud/backup.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Periodic state backup scheduler for cloud sandboxes.\n * Default interval: 60s. Configurable via cloud.backup.autoBackupIntervalMs.\n */\n\nimport { logger } from \"@elizaos/core\";\nimport type { ElizaCloudClient } from \"./bridge-client.js\";\n\nexport class BackupScheduler {\n private timer: ReturnType<typeof setInterval> | null = null;\n private running = false;\n\n constructor(\n private client: ElizaCloudClient,\n private agentId: string,\n private intervalMs: number = 60_000,\n ) {}\n\n start(): void {\n if (this.timer) return;\n this.running = true;\n this.timer = setInterval(() => {\n this.client.snapshot(this.agentId).catch((err) => {\n logger.warn(`[cloud-backup] Auto-backup failed: ${String(err)}`);\n });\n }, this.intervalMs);\n }\n\n stop(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n this.running = false;\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n async finalSnapshot(): Promise<void> {\n await this.client.snapshot(this.agentId).catch((err) => {\n logger.warn(`[cloud-backup] Final snapshot failed: ${String(err)}`);\n });\n }\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAKA;AAAA;AAGO,MAAM,gBAAgB;AAAA,EAKjB;AAAA,EACA;AAAA,EACA;AAAA,EANF,QAA+C;AAAA,EAC/C,UAAU;AAAA,EAElB,WAAW,CACD,QACA,SACA,aAAqB,OAC7B;AAAA,IAHQ;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAGV,KAAK,GAAS;AAAA,IACZ,IAAI,KAAK;AAAA,MAAO;AAAA,IAChB,KAAK,UAAU;AAAA,IACf,KAAK,QAAQ,YAAY,MAAM;AAAA,MAC7B,KAAK,OAAO,SAAS,KAAK,OAAO,EAAE,MAAM,CAAC,QAAQ;AAAA,QAChD,OAAO,KAAK,sCAAsC,OAAO,GAAG,GAAG;AAAA,OAChE;AAAA,OACA,KAAK,UAAU;AAAA;AAAA,EAGpB,IAAI,GAAS;AAAA,IACX,IAAI,KAAK,OAAO;AAAA,MACd,cAAc,KAAK,KAAK;AAAA,MACxB,KAAK,QAAQ;AAAA,IACf;AAAA,IACA,KAAK,UAAU;AAAA;AAAA,EAGjB,SAAS,GAAY;AAAA,IACnB,OAAO,KAAK;AAAA;AAAA,OAGR,cAAa,GAAkB;AAAA,IACnC,MAAM,KAAK,OAAO,SAAS,KAAK,OAAO,EAAE,MAAM,CAAC,QAAQ;AAAA,MACtD,OAAO,KAAK,yCAAyC,OAAO,GAAG,GAAG;AAAA,KACnE;AAAA;AAEL;",
8
+ "debugId": "60D6AF2255AAB74B64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ export declare function normalizeCloudSiteUrl(rawUrl?: string): string;
2
+ export declare function resolveCloudApiBaseUrl(rawUrl?: string): string;
3
+ //# sourceMappingURL=base-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-url.d.ts","sourceRoot":"","sources":["../../src/cloud/base-url.ts"],"names":[],"mappings":"AA2BA,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA8B7D;AAED,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,77 @@
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/cloud/base-url.ts
20
+ function isLoopbackHost(hostname) {
21
+ const normalized = hostname.toLowerCase();
22
+ return normalized === "localhost" || normalized === "::1" || normalized === "0:0:0:0:0:0:0:1" || normalized.startsWith("127.");
23
+ }
24
+ function trimApiPath(pathname) {
25
+ const normalized = pathname.trim().replace(/\/+$/, "");
26
+ if (!normalized)
27
+ return "";
28
+ if (normalized === "/api/v1")
29
+ return "";
30
+ if (normalized.endsWith("/api/v1")) {
31
+ return normalized.slice(0, -"/api/v1".length);
32
+ }
33
+ return normalized;
34
+ }
35
+ function normalizeCloudSiteUrl(rawUrl) {
36
+ const envOverride = process.env.ELIZAOS_CLOUD_BASE_URL?.trim();
37
+ const candidate = envOverride || rawUrl?.trim() || DEFAULT_CLOUD_SITE_URL;
38
+ try {
39
+ const parsed = new URL(candidate);
40
+ const pathname = trimApiPath(parsed.pathname);
41
+ const host = parsed.hostname.toLowerCase();
42
+ const preserveLocalOrigin = isLoopbackHost(host);
43
+ parsed.hash = "";
44
+ parsed.search = "";
45
+ if (!preserveLocalOrigin) {
46
+ parsed.protocol = "https:";
47
+ parsed.port = "";
48
+ }
49
+ parsed.pathname = pathname;
50
+ if (LEGACY_CLOUD_HOST_ALIASES.has(host)) {
51
+ parsed.hostname = "www.elizacloud.ai";
52
+ parsed.pathname = "";
53
+ }
54
+ return parsed.toString().replace(/\/{1,1024}$/, "");
55
+ } catch {
56
+ const safeCandidate = candidate.length > 8192 ? candidate.slice(0, 8192) : candidate;
57
+ return safeCandidate.replace(/\/{1,1024}$/, "");
58
+ }
59
+ }
60
+ function resolveCloudApiBaseUrl(rawUrl) {
61
+ return `${normalizeCloudSiteUrl(rawUrl)}/api/v1`;
62
+ }
63
+ var DEFAULT_CLOUD_SITE_URL = "https://www.elizacloud.ai", LEGACY_CLOUD_HOST_ALIASES;
64
+ var init_base_url = __esm(() => {
65
+ LEGACY_CLOUD_HOST_ALIASES = new Set([
66
+ "elizacloud.ai",
67
+ "www.elizacloud.ai"
68
+ ]);
69
+ });
70
+ init_base_url();
71
+
72
+ export {
73
+ resolveCloudApiBaseUrl,
74
+ normalizeCloudSiteUrl
75
+ };
76
+
77
+ //# debugId=2F65A77CD700E43164756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cloud/base-url.ts"],
4
+ "sourcesContent": [
5
+ "const DEFAULT_CLOUD_SITE_URL = \"https://www.elizacloud.ai\";\n\nconst LEGACY_CLOUD_HOST_ALIASES = new Set([\n \"elizacloud.ai\",\n \"www.elizacloud.ai\",\n]);\n\nfunction isLoopbackHost(hostname: string): boolean {\n const normalized = hostname.toLowerCase();\n return (\n normalized === \"localhost\" ||\n normalized === \"::1\" ||\n normalized === \"0:0:0:0:0:0:0:1\" ||\n normalized.startsWith(\"127.\")\n );\n}\n\nfunction trimApiPath(pathname: string): string {\n const normalized = pathname.trim().replace(/\\/+$/, \"\");\n if (!normalized) return \"\";\n if (normalized === \"/api/v1\") return \"\";\n if (normalized.endsWith(\"/api/v1\")) {\n return normalized.slice(0, -\"/api/v1\".length);\n }\n return normalized;\n}\n\nexport function normalizeCloudSiteUrl(rawUrl?: string): string {\n // Allow cloud-provisioned containers to override the base URL via env var\n const envOverride = process.env.ELIZAOS_CLOUD_BASE_URL?.trim();\n const candidate = envOverride || rawUrl?.trim() || DEFAULT_CLOUD_SITE_URL;\n\n try {\n const parsed = new URL(candidate);\n const pathname = trimApiPath(parsed.pathname);\n const host = parsed.hostname.toLowerCase();\n const preserveLocalOrigin = isLoopbackHost(host);\n\n parsed.hash = \"\";\n parsed.search = \"\";\n if (!preserveLocalOrigin) {\n parsed.protocol = \"https:\";\n parsed.port = \"\";\n }\n parsed.pathname = pathname;\n\n if (LEGACY_CLOUD_HOST_ALIASES.has(host)) {\n parsed.hostname = \"www.elizacloud.ai\";\n parsed.pathname = \"\";\n }\n\n return parsed.toString().replace(/\\/{1,1024}$/, \"\");\n } catch {\n const safeCandidate =\n candidate.length > 8192 ? candidate.slice(0, 8192) : candidate;\n return safeCandidate.replace(/\\/{1,1024}$/, \"\");\n }\n}\n\nexport function resolveCloudApiBaseUrl(rawUrl?: string): string {\n return `${normalizeCloudSiteUrl(rawUrl)}/api/v1`;\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAOA,SAAS,cAAc,CAAC,UAA2B;AAAA,EACjD,MAAM,aAAa,SAAS,YAAY;AAAA,EACxC,OACE,eAAe,eACf,eAAe,SACf,eAAe,qBACf,WAAW,WAAW,MAAM;AAAA;AAIhC,SAAS,WAAW,CAAC,UAA0B;AAAA,EAC7C,MAAM,aAAa,SAAS,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAAA,EACrD,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,IAAI,eAAe;AAAA,IAAW,OAAO;AAAA,EACrC,IAAI,WAAW,SAAS,SAAS,GAAG;AAAA,IAClC,OAAO,WAAW,MAAM,GAAG,CAAC,UAAU,MAAM;AAAA,EAC9C;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,qBAAqB,CAAC,QAAyB;AAAA,EAE7D,MAAM,cAAc,QAAQ,IAAI,wBAAwB,KAAK;AAAA,EAC7D,MAAM,YAAY,eAAe,QAAQ,KAAK,KAAK;AAAA,EAEnD,IAAI;AAAA,IACF,MAAM,SAAS,IAAI,IAAI,SAAS;AAAA,IAChC,MAAM,WAAW,YAAY,OAAO,QAAQ;AAAA,IAC5C,MAAM,OAAO,OAAO,SAAS,YAAY;AAAA,IACzC,MAAM,sBAAsB,eAAe,IAAI;AAAA,IAE/C,OAAO,OAAO;AAAA,IACd,OAAO,SAAS;AAAA,IAChB,IAAI,CAAC,qBAAqB;AAAA,MACxB,OAAO,WAAW;AAAA,MAClB,OAAO,OAAO;AAAA,IAChB;AAAA,IACA,OAAO,WAAW;AAAA,IAElB,IAAI,0BAA0B,IAAI,IAAI,GAAG;AAAA,MACvC,OAAO,WAAW;AAAA,MAClB,OAAO,WAAW;AAAA,IACpB;AAAA,IAEA,OAAO,OAAO,SAAS,EAAE,QAAQ,eAAe,EAAE;AAAA,IAClD,MAAM;AAAA,IACN,MAAM,gBACJ,UAAU,SAAS,OAAO,UAAU,MAAM,GAAG,IAAI,IAAI;AAAA,IACvD,OAAO,cAAc,QAAQ,eAAe,EAAE;AAAA;AAAA;AAI3C,SAAS,sBAAsB,CAAC,QAAyB;AAAA,EAC9D,OAAO,GAAG,sBAAsB,MAAM;AAAA;AAAA,IA5DlC,yBAAyB,6BAEzB;AAAA;AAAA,8BAA4B,IAAI,IAAI;AAAA,IACxC;AAAA,IACA;AAAA,EACF,CAAC;AAAA;",
8
+ "debugId": "2F65A77CD700E43164756E2164756E21",
9
+ "names": []
10
+ }