@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,168 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { resolveStateDir } from "./state-paths";
4
+
5
+ const CONFIG_ENV_FILENAME = "config.env";
6
+ const BAK_SUFFIX = ".bak";
7
+ const TMP_SUFFIX = ".tmp";
8
+ const KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;
9
+
10
+ const BLOCKED_CONFIG_ENV_KEYS: ReadonlySet<string> = new Set([
11
+ "NODE_OPTIONS",
12
+ "NODE_EXTRA_CA_CERTS",
13
+ "NODE_TLS_REJECT_UNAUTHORIZED",
14
+ "NODE_PATH",
15
+ "LD_PRELOAD",
16
+ "LD_LIBRARY_PATH",
17
+ "DYLD_INSERT_LIBRARIES",
18
+ "DYLD_LIBRARY_PATH",
19
+ "DYLD_FRAMEWORK_PATH",
20
+ "DYLD_FALLBACK_FRAMEWORK_PATH",
21
+ "DYLD_FALLBACK_LIBRARY_PATH",
22
+ "PATH",
23
+ "HOME",
24
+ "SHELL",
25
+ "HTTP_PROXY",
26
+ "HTTPS_PROXY",
27
+ "ALL_PROXY",
28
+ "NO_PROXY",
29
+ "SSL_CERT_FILE",
30
+ "SSL_CERT_DIR",
31
+ "CURL_CA_BUNDLE",
32
+ ]);
33
+
34
+ export interface PersistConfigEnvOptions {
35
+ stateDir?: string;
36
+ }
37
+
38
+ interface ParsedConfigEnv {
39
+ lines: string[];
40
+ index: Map<string, number>;
41
+ }
42
+
43
+ function parseConfigEnv(contents: string): ParsedConfigEnv {
44
+ const lines = contents.length === 0 ? [] : contents.split(/\r?\n/);
45
+ if (lines.length > 0 && lines[lines.length - 1] === "") {
46
+ lines.pop();
47
+ }
48
+ const index = new Map<string, number>();
49
+ for (let i = 0; i < lines.length; i += 1) {
50
+ const line = lines[i] ?? "";
51
+ const trimmed = line.trim();
52
+ if (!trimmed || trimmed.startsWith("#")) continue;
53
+ const eq = line.indexOf("=");
54
+ if (eq <= 0) continue;
55
+ const key = line.slice(0, eq).trim();
56
+ if (KEY_PATTERN.test(key)) index.set(key, i);
57
+ }
58
+ return { lines, index };
59
+ }
60
+
61
+ function serialiseConfigEnv(parsed: ParsedConfigEnv): string {
62
+ return parsed.lines.length === 0 ? "" : `${parsed.lines.join("\n")}\n`;
63
+ }
64
+
65
+ function encodeValue(value: string): string {
66
+ if (value === "") return "";
67
+ const needsQuoting = /[\s#"'\\]|^\s|\s$/.test(value) || /\n|\r/.test(value);
68
+ if (!needsQuoting) return value;
69
+ const escaped = value
70
+ .replace(/\\/g, "\\\\")
71
+ .replace(/"/g, '\\"')
72
+ .replace(/\n/g, "\\n")
73
+ .replace(/\r/g, "\\r");
74
+ return `"${escaped}"`;
75
+ }
76
+
77
+ function validateKey(key: string): void {
78
+ if (!KEY_PATTERN.test(key)) {
79
+ throw new Error(
80
+ `persistConfigEnv: invalid key "${key}" - must match /^[A-Z][A-Z0-9_]*$/`,
81
+ );
82
+ }
83
+ if (BLOCKED_CONFIG_ENV_KEYS.has(key)) {
84
+ throw new Error(
85
+ `persistConfigEnv: key "${key}" is a shell/runtime hijack vector and cannot be written`,
86
+ );
87
+ }
88
+ }
89
+
90
+ async function readIfExists(filePath: string): Promise<string | null> {
91
+ try {
92
+ return await fs.readFile(filePath, "utf8");
93
+ } catch (error) {
94
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return null;
95
+ throw error;
96
+ }
97
+ }
98
+
99
+ async function writeAtomic(filePath: string, contents: string): Promise<void> {
100
+ const tmpPath = `${filePath}${TMP_SUFFIX}`;
101
+ const handle = await fs.open(tmpPath, "w", 0o600);
102
+ try {
103
+ await handle.writeFile(contents, "utf8");
104
+ await handle.sync();
105
+ } finally {
106
+ await handle.close();
107
+ }
108
+ await fs.rename(tmpPath, filePath);
109
+ }
110
+
111
+ let writeChain: Promise<unknown> = Promise.resolve();
112
+
113
+ function serialise<T>(fn: () => Promise<T>): Promise<T> {
114
+ const next = writeChain.then(fn, fn);
115
+ writeChain = next.catch(() => undefined);
116
+ return next;
117
+ }
118
+
119
+ function resolveConfigEnvPath(stateDir?: string): string {
120
+ return path.join(stateDir ?? resolveStateDir(), CONFIG_ENV_FILENAME);
121
+ }
122
+
123
+ export async function persistConfigEnv(
124
+ key: string,
125
+ value: string,
126
+ opts: PersistConfigEnvOptions = {},
127
+ ): Promise<void> {
128
+ validateKey(key);
129
+
130
+ await serialise(async () => {
131
+ const filePath = resolveConfigEnvPath(opts.stateDir);
132
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
133
+
134
+ const existing = (await readIfExists(filePath)) ?? "";
135
+ const parsed = parseConfigEnv(existing);
136
+ const existingIdx = parsed.index.get(key);
137
+ const isDelete = value === "";
138
+
139
+ if (isDelete) {
140
+ if (existingIdx === undefined) {
141
+ delete process.env[key];
142
+ return;
143
+ }
144
+ parsed.lines.splice(existingIdx, 1);
145
+ } else {
146
+ const encoded = `${key}=${encodeValue(value)}`;
147
+ if (existingIdx === undefined) {
148
+ parsed.lines.push(encoded);
149
+ } else {
150
+ parsed.lines[existingIdx] = encoded;
151
+ }
152
+ }
153
+
154
+ if (existing.length > 0) {
155
+ await fs.writeFile(`${filePath}${BAK_SUFFIX}`, existing, {
156
+ encoding: "utf8",
157
+ mode: 0o600,
158
+ });
159
+ }
160
+
161
+ await writeAtomic(filePath, serialiseConfigEnv(parsed));
162
+ if (isDelete) {
163
+ delete process.env[key];
164
+ } else {
165
+ process.env[key] = value;
166
+ }
167
+ });
168
+ }
@@ -0,0 +1,149 @@
1
+ import type {
2
+ DeploymentTargetConfig,
3
+ LinkedAccountFlagsConfig,
4
+ ServiceCapability,
5
+ ServiceRoutingConfig,
6
+ } from "@elizaos/core";
7
+
8
+ export interface CloudProxyConfigLike {
9
+ cloud?: {
10
+ apiKey?: string;
11
+ baseUrl?: string;
12
+ enabled?: boolean;
13
+ serviceKey?: string;
14
+ backup?: {
15
+ autoBackupIntervalMs?: number;
16
+ };
17
+ bridge?: {
18
+ heartbeatIntervalMs?: number;
19
+ };
20
+ };
21
+ }
22
+
23
+ export type CloudConfig = NonNullable<CloudProxyConfigLike["cloud"]>;
24
+
25
+ export type ElizaConfig = Record<string, unknown> &
26
+ CloudProxyConfigLike & {
27
+ deploymentTarget?: DeploymentTargetConfig;
28
+ linkedAccounts?: LinkedAccountFlagsConfig;
29
+ serviceRouting?: ServiceRoutingConfig;
30
+ };
31
+
32
+ export interface AutonomousConfigLike {
33
+ [key: string]: unknown;
34
+ }
35
+
36
+ type MutableElizaConfig = Partial<ElizaConfig> & {
37
+ cloud?: Record<string, unknown>;
38
+ deploymentTarget?: DeploymentTargetConfig;
39
+ linkedAccounts?: LinkedAccountFlagsConfig;
40
+ serviceRouting?: ServiceRoutingConfig;
41
+ };
42
+
43
+ function ensureLinkedAccounts(
44
+ config: MutableElizaConfig,
45
+ ): LinkedAccountFlagsConfig {
46
+ config.linkedAccounts ??= {};
47
+ return config.linkedAccounts;
48
+ }
49
+
50
+ function ensureServiceRouting(
51
+ config: MutableElizaConfig,
52
+ ): ServiceRoutingConfig {
53
+ config.serviceRouting ??= {};
54
+ return config.serviceRouting;
55
+ }
56
+
57
+ function persistDeploymentTarget(
58
+ config: MutableElizaConfig,
59
+ deploymentTarget: DeploymentTargetConfig | null | undefined,
60
+ ): void {
61
+ if (!deploymentTarget) {
62
+ delete config.deploymentTarget;
63
+ return;
64
+ }
65
+ config.deploymentTarget = { ...deploymentTarget };
66
+ }
67
+
68
+ function persistLinkedAccounts(
69
+ config: MutableElizaConfig,
70
+ linkedAccounts: LinkedAccountFlagsConfig | null | undefined,
71
+ ): void {
72
+ if (!linkedAccounts) return;
73
+
74
+ const existing = ensureLinkedAccounts(config);
75
+ for (const [accountId, account] of Object.entries(linkedAccounts)) {
76
+ if (!account || Object.keys(account).length === 0) {
77
+ delete existing[accountId];
78
+ continue;
79
+ }
80
+ existing[accountId] = {
81
+ ...existing[accountId],
82
+ ...account,
83
+ };
84
+ }
85
+
86
+ if (Object.keys(existing).length === 0) {
87
+ delete config.linkedAccounts;
88
+ }
89
+ }
90
+
91
+ function persistServiceRouting(
92
+ config: MutableElizaConfig,
93
+ serviceRouting: ServiceRoutingConfig | null | undefined,
94
+ clearRoutes: readonly ServiceCapability[] = [],
95
+ ): void {
96
+ const existing = ensureServiceRouting(config);
97
+
98
+ for (const capability of clearRoutes) {
99
+ delete existing[capability];
100
+ }
101
+
102
+ if (serviceRouting) {
103
+ for (const [capability, route] of Object.entries(serviceRouting)) {
104
+ const serviceKey = capability as ServiceCapability;
105
+ if (!route || Object.keys(route).length === 0) {
106
+ delete existing[serviceKey];
107
+ continue;
108
+ }
109
+ existing[serviceKey] = { ...route };
110
+ }
111
+ }
112
+
113
+ if (Object.keys(existing).length === 0) {
114
+ delete config.serviceRouting;
115
+ }
116
+ }
117
+
118
+ export function applyCanonicalOnboardingConfig(
119
+ config: MutableElizaConfig,
120
+ args: {
121
+ deploymentTarget?: DeploymentTargetConfig | null;
122
+ linkedAccounts?: LinkedAccountFlagsConfig | null;
123
+ serviceRouting?: ServiceRoutingConfig | null;
124
+ clearRoutes?: readonly ServiceCapability[];
125
+ },
126
+ ): void {
127
+ if (args.deploymentTarget !== undefined) {
128
+ persistDeploymentTarget(config, args.deploymentTarget);
129
+ }
130
+ if (args.linkedAccounts !== undefined) {
131
+ persistLinkedAccounts(config, args.linkedAccounts);
132
+ }
133
+ if (args.serviceRouting !== undefined || args.clearRoutes?.length) {
134
+ persistServiceRouting(config, args.serviceRouting, args.clearRoutes);
135
+ }
136
+ }
137
+
138
+ export function normalizeEnvValue(value: unknown): string | undefined {
139
+ if (typeof value !== "string") return undefined;
140
+ const trimmed = value.trim();
141
+ return trimmed || undefined;
142
+ }
143
+
144
+ export function isTimeoutError(error: unknown): boolean {
145
+ if (!(error instanceof Error)) return false;
146
+ if (error.name === "TimeoutError" || error.name === "AbortError") return true;
147
+ const message = error.message.toLowerCase();
148
+ return message.includes("timed out") || message.includes("timeout");
149
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Mapping from workflow-plugin credential type names → Eliza Cloud connector slugs.
3
+ *
4
+ * The workflow plugin's LLM emits credential type strings (e.g. `gmailOAuth2`,
5
+ * `slackOAuth2Api`) on each node that needs an external account. The cloud
6
+ * exposes per-connector OAuth flows under `/api/v1/eliza/<connector>/...`.
7
+ *
8
+ * This map is the single source of truth for which workflow credential type
9
+ * resolves through which cloud connector + with which OAuth scopes. Add new
10
+ * entries when the cloud gains support for additional connectors; do not
11
+ * scatter cred-type → connector logic elsewhere.
12
+ *
13
+ * Cloud-side endpoint convention (see cloud/apps/api/v1/eliza/<connector>/):
14
+ * POST /api/v1/eliza/<connector>/connect/initiate → { authUrl }
15
+ * GET /api/v1/eliza/<connector>/status → { connected, ... }
16
+ *
17
+ * Not every connector below has a fully-implemented cloud endpoint yet — the
18
+ * provider returns `null` for unmapped types and `needs_auth` (with the
19
+ * cloud-issued OAuth URL) for mapped-but-not-connected accounts. See
20
+ * `cloud-credential-provider.ts` for the resolution logic.
21
+ */
22
+
23
+ export interface CredentialTypeMapping {
24
+ /**
25
+ * Cloud connector slug used in the URL path
26
+ * (`/api/v1/eliza/<connector>/connect/initiate`).
27
+ */
28
+ connector: string;
29
+ /**
30
+ * Optional capability tokens passed to the cloud's `connect/initiate`
31
+ * endpoint. The cloud translates these to provider-specific OAuth scopes
32
+ * (e.g. Google's `google.gmail.send` → `https://www.googleapis.com/auth/gmail.send`).
33
+ */
34
+ capabilities?: string[];
35
+ /**
36
+ * Friendly description used in `needs_auth` UI prompts. The runtime may
37
+ * surface this verbatim to the end-user.
38
+ */
39
+ friendlyName: string;
40
+ }
41
+
42
+ /**
43
+ * Workflow credential type → cloud connector mapping.
44
+ *
45
+ * Names mirror the n8n / workflows-plugin convention used by the LLM in
46
+ * `plugins/plugin-workflow/src/utils/workflow-prompts/workflowGeneration.ts`.
47
+ * Both `gmailOAuth2` and `gmailOAuth2Api` map to the same connector — the
48
+ * workflow resolver does fuzzy `Api`-suffix matching upstream, but we keep
49
+ * both keys here so `checkCredentialTypes` answers truthfully without the
50
+ * caller having to know about that fuzziness.
51
+ */
52
+ export const credTypeToConnector: ReadonlyMap<string, CredentialTypeMapping> = new Map([
53
+ // ─── Google ──────────────────────────────────────────────────────────
54
+ // Cloud endpoint: /api/v1/eliza/google/{connect/initiate,status,disconnect}
55
+ // The cloud's capability tokens are documented in
56
+ // cloud/apps/api/v1/eliza/google/connect/initiate/route.ts.
57
+ [
58
+ "gmailOAuth2",
59
+ {
60
+ connector: "google",
61
+ capabilities: ["google.gmail.triage", "google.gmail.send", "google.gmail.manage"],
62
+ friendlyName: "Gmail",
63
+ },
64
+ ],
65
+ [
66
+ "gmailOAuth2Api",
67
+ {
68
+ connector: "google",
69
+ capabilities: ["google.gmail.triage", "google.gmail.send", "google.gmail.manage"],
70
+ friendlyName: "Gmail",
71
+ },
72
+ ],
73
+ [
74
+ "googleCalendarOAuth2Api",
75
+ {
76
+ connector: "google",
77
+ capabilities: ["google.calendar.read", "google.calendar.write"],
78
+ friendlyName: "Google Calendar",
79
+ },
80
+ ],
81
+ [
82
+ "googleSheetsOAuth2Api",
83
+ {
84
+ connector: "google",
85
+ capabilities: ["google.basic_identity"],
86
+ friendlyName: "Google Sheets",
87
+ },
88
+ ],
89
+
90
+ // ─── GitHub ──────────────────────────────────────────────────────────
91
+ // Cloud endpoint: /api/v1/eliza/github-oauth-complete/ (callback only).
92
+ // The initiate flow is host-driven; the provider returns `needs_auth`
93
+ // pointing at the cloud's GitHub install URL when not connected.
94
+ [
95
+ "githubOAuth2Api",
96
+ {
97
+ connector: "github",
98
+ friendlyName: "GitHub",
99
+ },
100
+ ],
101
+ [
102
+ "githubApi",
103
+ {
104
+ connector: "github",
105
+ friendlyName: "GitHub",
106
+ },
107
+ ],
108
+
109
+ // ─── Discord ─────────────────────────────────────────────────────────
110
+ // Cloud endpoint: /api/v1/eliza/discord/gateway-agent/ (gateway pairing).
111
+ // No OAuth-token-issuance flow yet — provider returns `null` so the
112
+ // workflow resolver falls back to its default missing-connection report.
113
+ [
114
+ "discordApi",
115
+ {
116
+ connector: "discord",
117
+ friendlyName: "Discord",
118
+ },
119
+ ],
120
+ [
121
+ "discordBotApi",
122
+ {
123
+ connector: "discord",
124
+ friendlyName: "Discord (Bot)",
125
+ },
126
+ ],
127
+ ]);
128
+
129
+ /** Set used by `checkCredentialTypes` for O(1) supported-set membership. */
130
+ export const supportedCredTypes: ReadonlySet<string> = new Set(credTypeToConnector.keys());
@@ -0,0 +1,26 @@
1
+ function readBoolFlag(name: string, fallback = false): boolean {
2
+ const raw = process.env[name];
3
+ if (raw === undefined || raw === null || raw === "") return fallback;
4
+ const trimmed = String(raw).trim().toLowerCase();
5
+ if (
6
+ trimmed === "1" ||
7
+ trimmed === "true" ||
8
+ trimmed === "yes" ||
9
+ trimmed === "on"
10
+ ) {
11
+ return true;
12
+ }
13
+ if (
14
+ trimmed === "0" ||
15
+ trimmed === "false" ||
16
+ trimmed === "no" ||
17
+ trimmed === "off"
18
+ ) {
19
+ return false;
20
+ }
21
+ return fallback;
22
+ }
23
+
24
+ export function isCloudWalletEnabled(): boolean {
25
+ return readBoolFlag("ENABLE_CLOUD_WALLET");
26
+ }
@@ -0,0 +1,139 @@
1
+ import type http from "node:http";
2
+
3
+ export interface ReadJsonBodyOptions {
4
+ maxBytes?: number;
5
+ tooLargeMessage?: string;
6
+ destroyOnTooLarge?: boolean;
7
+ requireObject?: boolean;
8
+ }
9
+
10
+ export interface RouteRequestMeta {
11
+ req: http.IncomingMessage;
12
+ res: http.ServerResponse;
13
+ method: string;
14
+ pathname: string;
15
+ }
16
+
17
+ export interface RouteHelpers {
18
+ json: (res: http.ServerResponse, data: unknown, status?: number) => void;
19
+ error: (res: http.ServerResponse, message: string, status?: number) => void;
20
+ readJsonBody: <T extends object>(
21
+ req: http.IncomingMessage,
22
+ res: http.ServerResponse,
23
+ options?: ReadJsonBodyOptions,
24
+ ) => Promise<T | null>;
25
+ }
26
+
27
+ function scrubStackFields(value: unknown): unknown {
28
+ if (value instanceof Error) {
29
+ return { error: value.message || "Internal error" };
30
+ }
31
+ if (Array.isArray(value)) {
32
+ return value.map(scrubStackFields);
33
+ }
34
+ if (value && typeof value === "object") {
35
+ const out: Record<string, unknown> = {};
36
+ for (const [key, nested] of Object.entries(value)) {
37
+ if (key === "stack" || key === "stackTrace") continue;
38
+ out[key] = scrubStackFields(nested);
39
+ }
40
+ return out;
41
+ }
42
+ return value;
43
+ }
44
+
45
+ export function sendJson(
46
+ res: http.ServerResponse,
47
+ body: unknown,
48
+ status = 200,
49
+ ): void {
50
+ if (res.headersSent) return;
51
+ res.statusCode = status;
52
+ res.setHeader("content-type", "application/json; charset=utf-8");
53
+ res.end(JSON.stringify(scrubStackFields(body)));
54
+ }
55
+
56
+ export function sendJsonError(
57
+ res: http.ServerResponse,
58
+ message: string,
59
+ status = 400,
60
+ ): void {
61
+ sendJson(res, { error: message }, status);
62
+ }
63
+
64
+ async function readRequestBody(
65
+ req: http.IncomingMessage,
66
+ options: ReadJsonBodyOptions,
67
+ ): Promise<string | null> {
68
+ const maxBytes = options.maxBytes ?? 1_048_576;
69
+ const chunks: Buffer[] = [];
70
+ let size = 0;
71
+
72
+ for await (const chunk of req) {
73
+ const buffer = typeof chunk === "string" ? Buffer.from(chunk) : chunk;
74
+ size += buffer.length;
75
+ if (size > maxBytes) {
76
+ if (options.destroyOnTooLarge) req.destroy();
77
+ throw new Error(options.tooLargeMessage ?? "Request body too large");
78
+ }
79
+ chunks.push(buffer);
80
+ }
81
+
82
+ if (chunks.length === 0) return null;
83
+ return Buffer.concat(chunks).toString("utf8");
84
+ }
85
+
86
+ export async function readJsonBody<T extends object = Record<string, unknown>>(
87
+ req: http.IncomingMessage,
88
+ res: http.ServerResponse,
89
+ options: ReadJsonBodyOptions = {},
90
+ ): Promise<T | null> {
91
+ const cached = (req as http.IncomingMessage & { body?: unknown }).body;
92
+ if (cached !== undefined) {
93
+ if (
94
+ options.requireObject !== false &&
95
+ (!cached || typeof cached !== "object" || Array.isArray(cached))
96
+ ) {
97
+ sendJsonError(res, "Request body must be a JSON object", 400);
98
+ return null;
99
+ }
100
+ return cached as T;
101
+ }
102
+
103
+ let raw: string | null;
104
+ try {
105
+ raw = await readRequestBody(req, options);
106
+ } catch (error) {
107
+ sendJsonError(
108
+ res,
109
+ error instanceof Error ? error.message : "Failed to read request body",
110
+ 413,
111
+ );
112
+ return null;
113
+ }
114
+
115
+ if (!raw?.trim()) {
116
+ const empty = {} as T;
117
+ (req as http.IncomingMessage & { body?: unknown }).body = empty;
118
+ return empty;
119
+ }
120
+
121
+ let parsed: unknown;
122
+ try {
123
+ parsed = JSON.parse(raw);
124
+ } catch {
125
+ sendJsonError(res, "Invalid JSON in request body", 400);
126
+ return null;
127
+ }
128
+
129
+ if (
130
+ options.requireObject !== false &&
131
+ (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
132
+ ) {
133
+ sendJsonError(res, "Request body must be a JSON object", 400);
134
+ return null;
135
+ }
136
+
137
+ (req as http.IncomingMessage & { body?: unknown }).body = parsed;
138
+ return parsed as T;
139
+ }