aimeat 2.4.0 → 2.6.0

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 (308) hide show
  1. package/dist/.env.example +33 -0
  2. package/dist/build-stamp.json +13 -0
  3. package/dist/locales/en.json +186 -20
  4. package/dist/locales/fi.json +186 -20
  5. package/dist/public/components/VoiceRecorder.js +116 -0
  6. package/dist/public/connection-done.html +53 -0
  7. package/dist/public/css/components/voice-recorder.css +66 -0
  8. package/dist/public/css/views/inbox.css +41 -0
  9. package/dist/public/css/views/profile.css +171 -95
  10. package/dist/public/css/views/transparency.css +5 -0
  11. package/dist/public/js/services/audio-recorder.js +171 -0
  12. package/dist/public/js/services/messages.js +21 -2
  13. package/dist/public/spa.html +3 -0
  14. package/dist/public/views/landing.js +4 -0
  15. package/dist/public/views/profile/access-tab/connections.js +264 -0
  16. package/dist/public/views/profile/access-tab.js +2 -0
  17. package/dist/public/views/profile/ai-transparency-card.js +22 -17
  18. package/dist/public/views/profile/inbox-tab/components.js +60 -10
  19. package/dist/public/views/profile/inbox-tab/helpers.js +33 -0
  20. package/dist/public/views/profile/inbox-tab/panels.js +6 -1
  21. package/dist/public/views/profile/inbox-tab/use-voice.js +50 -0
  22. package/dist/public/views/profile/inbox-tab/voice-parts.js +111 -0
  23. package/dist/public/views/profile/inbox-tab.js +18 -24
  24. package/dist/public/views/profile/openrouter/budget-panel.js +224 -0
  25. package/dist/public/views/profile/openrouter/model-picker.js +150 -0
  26. package/dist/public/views/profile/openrouter/pricing.js +139 -0
  27. package/dist/public/views/profile/openrouter-settings.js +425 -488
  28. package/dist/public/views/transparency.js +50 -0
  29. package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
  30. package/dist/scripts/build-sdk-libs.js +1 -0
  31. package/dist/scripts/build-sdk-libs.js.map +1 -1
  32. package/dist/scripts/check-ai-disclosure.d.ts.map +1 -1
  33. package/dist/scripts/check-ai-disclosure.js +182 -0
  34. package/dist/scripts/check-ai-disclosure.js.map +1 -1
  35. package/dist/src/cli/connect/ai-provenance-carry.d.ts +247 -0
  36. package/dist/src/cli/connect/ai-provenance-carry.d.ts.map +1 -0
  37. package/dist/src/cli/connect/ai-provenance-carry.js +334 -0
  38. package/dist/src/cli/connect/ai-provenance-carry.js.map +1 -0
  39. package/dist/src/cli/connect/api-client.d.ts +11 -0
  40. package/dist/src/cli/connect/api-client.d.ts.map +1 -1
  41. package/dist/src/cli/connect/api-client.js +2 -0
  42. package/dist/src/cli/connect/api-client.js.map +1 -1
  43. package/dist/src/cli/connect/mcp/local-server.d.ts.map +1 -1
  44. package/dist/src/cli/connect/mcp/local-server.js +11 -0
  45. package/dist/src/cli/connect/mcp/local-server.js.map +1 -1
  46. package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts +2 -0
  47. package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts.map +1 -1
  48. package/dist/src/cli/connect/mcp/tools/agent-messages.js +5 -2
  49. package/dist/src/cli/connect/mcp/tools/agent-messages.js.map +1 -1
  50. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +2 -0
  51. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
  52. package/dist/src/cli/connect/mcp/tools/agent-tasks.js +5 -2
  53. package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
  54. package/dist/src/cli/connect/mcp/tools/apps.d.ts +3 -0
  55. package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
  56. package/dist/src/cli/connect/mcp/tools/apps.js +13 -5
  57. package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
  58. package/dist/src/cli/connect/mcp/tools/boards.d.ts +3 -0
  59. package/dist/src/cli/connect/mcp/tools/boards.d.ts.map +1 -1
  60. package/dist/src/cli/connect/mcp/tools/boards.js +5 -2
  61. package/dist/src/cli/connect/mcp/tools/boards.js.map +1 -1
  62. package/dist/src/cli/connect/mcp/tools/core.d.ts +5 -0
  63. package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
  64. package/dist/src/cli/connect/mcp/tools/core.js +25 -5
  65. package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
  66. package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts +2 -0
  67. package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts.map +1 -1
  68. package/dist/src/cli/connect/mcp/tools/dm-messages.js +11 -6
  69. package/dist/src/cli/connect/mcp/tools/dm-messages.js.map +1 -1
  70. package/dist/src/cli/connect/mcp/tools/exchange.d.ts +2 -0
  71. package/dist/src/cli/connect/mcp/tools/exchange.d.ts.map +1 -1
  72. package/dist/src/cli/connect/mcp/tools/exchange.js +8 -2
  73. package/dist/src/cli/connect/mcp/tools/exchange.js.map +1 -1
  74. package/dist/src/cli/connect/mcp/tools/knowledge.d.ts +3 -0
  75. package/dist/src/cli/connect/mcp/tools/knowledge.d.ts.map +1 -1
  76. package/dist/src/cli/connect/mcp/tools/knowledge.js +7 -3
  77. package/dist/src/cli/connect/mcp/tools/knowledge.js.map +1 -1
  78. package/dist/src/cli/connect/mcp/tools/organisms.d.ts +2 -0
  79. package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
  80. package/dist/src/cli/connect/mcp/tools/organisms.js +7 -2
  81. package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
  82. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts +3 -0
  83. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -1
  84. package/dist/src/cli/connect/mcp/tools/workspaces.js +8 -2
  85. package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -1
  86. package/dist/src/cli/connect/tool-call-defs-core.d.ts +3 -0
  87. package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
  88. package/dist/src/cli/connect/tool-call-defs-core.js +7 -0
  89. package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
  90. package/dist/src/cli/connect/tool-call.d.ts +3 -0
  91. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  92. package/dist/src/cli/connect/tool-call.js +11 -1
  93. package/dist/src/cli/connect/tool-call.js.map +1 -1
  94. package/dist/src/config-types.d.ts +14 -0
  95. package/dist/src/config-types.d.ts.map +1 -1
  96. package/dist/src/config.d.ts.map +1 -1
  97. package/dist/src/config.js +10 -0
  98. package/dist/src/config.js.map +1 -1
  99. package/dist/src/data/public-pages.d.ts +12 -0
  100. package/dist/src/data/public-pages.d.ts.map +1 -1
  101. package/dist/src/data/public-pages.js +12 -0
  102. package/dist/src/data/public-pages.js.map +1 -1
  103. package/dist/src/generated/api-types.d.ts +969 -85
  104. package/dist/src/generated/api-types.d.ts.map +1 -1
  105. package/dist/src/mcp/ai-provenance-input.d.ts +45 -2
  106. package/dist/src/mcp/ai-provenance-input.d.ts.map +1 -1
  107. package/dist/src/mcp/ai-provenance-input.js +48 -2
  108. package/dist/src/mcp/ai-provenance-input.js.map +1 -1
  109. package/dist/src/mcp/apps.d.ts +7 -0
  110. package/dist/src/mcp/apps.d.ts.map +1 -1
  111. package/dist/src/mcp/apps.js +20 -2
  112. package/dist/src/mcp/apps.js.map +1 -1
  113. package/dist/src/models/ai-provenance-schemas.d.ts +7 -1
  114. package/dist/src/models/ai-provenance-schemas.d.ts.map +1 -1
  115. package/dist/src/models/ai-provenance-schemas.js +11 -1
  116. package/dist/src/models/ai-provenance-schemas.js.map +1 -1
  117. package/dist/src/models/connection-schemas.d.ts +203 -0
  118. package/dist/src/models/connection-schemas.d.ts.map +1 -0
  119. package/dist/src/models/connection-schemas.js +33 -0
  120. package/dist/src/models/connection-schemas.js.map +1 -0
  121. package/dist/src/models/message-schemas.d.ts +40 -0
  122. package/dist/src/models/message-schemas.d.ts.map +1 -1
  123. package/dist/src/models/message-schemas.js +23 -0
  124. package/dist/src/models/message-schemas.js.map +1 -1
  125. package/dist/src/routes/ai-provenance.d.ts +6 -0
  126. package/dist/src/routes/ai-provenance.d.ts.map +1 -1
  127. package/dist/src/routes/ai-provenance.js +34 -1
  128. package/dist/src/routes/ai-provenance.js.map +1 -1
  129. package/dist/src/routes/ai-transparency.d.ts +6 -1
  130. package/dist/src/routes/ai-transparency.d.ts.map +1 -1
  131. package/dist/src/routes/ai-transparency.js +17 -3
  132. package/dist/src/routes/ai-transparency.js.map +1 -1
  133. package/dist/src/routes/ai.d.ts +5 -0
  134. package/dist/src/routes/ai.d.ts.map +1 -1
  135. package/dist/src/routes/ai.js +83 -0
  136. package/dist/src/routes/ai.js.map +1 -1
  137. package/dist/src/routes/app-grants.d.ts.map +1 -1
  138. package/dist/src/routes/app-grants.js +4 -0
  139. package/dist/src/routes/app-grants.js.map +1 -1
  140. package/dist/src/routes/apps/drafts.d.ts +3 -0
  141. package/dist/src/routes/apps/drafts.d.ts.map +1 -1
  142. package/dist/src/routes/apps/drafts.js +13 -0
  143. package/dist/src/routes/apps/drafts.js.map +1 -1
  144. package/dist/src/routes/apps/publish.d.ts +5 -0
  145. package/dist/src/routes/apps/publish.d.ts.map +1 -1
  146. package/dist/src/routes/apps/publish.js +21 -5
  147. package/dist/src/routes/apps/publish.js.map +1 -1
  148. package/dist/src/routes/connections.d.ts +35 -0
  149. package/dist/src/routes/connections.d.ts.map +1 -0
  150. package/dist/src/routes/connections.js +406 -0
  151. package/dist/src/routes/connections.js.map +1 -0
  152. package/dist/src/routes/libs.js +1 -1
  153. package/dist/src/routes/libs.js.map +1 -1
  154. package/dist/src/routes/messages.d.ts +5 -0
  155. package/dist/src/routes/messages.d.ts.map +1 -1
  156. package/dist/src/routes/messages.js +92 -0
  157. package/dist/src/routes/messages.js.map +1 -1
  158. package/dist/src/routes/openrouter.d.ts +6 -1
  159. package/dist/src/routes/openrouter.d.ts.map +1 -1
  160. package/dist/src/routes/openrouter.js +37 -7
  161. package/dist/src/routes/openrouter.js.map +1 -1
  162. package/dist/src/routes/upload.d.ts +5 -0
  163. package/dist/src/routes/upload.d.ts.map +1 -1
  164. package/dist/src/routes/upload.js +32 -0
  165. package/dist/src/routes/upload.js.map +1 -1
  166. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  167. package/dist/src/server-bootstrap/routes-loader.js +2 -0
  168. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  169. package/dist/src/services/ai-completion.d.ts +48 -0
  170. package/dist/src/services/ai-completion.d.ts.map +1 -1
  171. package/dist/src/services/ai-completion.js +112 -72
  172. package/dist/src/services/ai-completion.js.map +1 -1
  173. package/dist/src/services/ai-disclosure.d.ts +6 -0
  174. package/dist/src/services/ai-disclosure.d.ts.map +1 -1
  175. package/dist/src/services/ai-disclosure.js +20 -2
  176. package/dist/src/services/ai-disclosure.js.map +1 -1
  177. package/dist/src/services/ai-provenance-page.d.ts +59 -0
  178. package/dist/src/services/ai-provenance-page.d.ts.map +1 -0
  179. package/dist/src/services/ai-provenance-page.js +185 -0
  180. package/dist/src/services/ai-provenance-page.js.map +1 -0
  181. package/dist/src/services/ai-provenance.d.ts +6 -0
  182. package/dist/src/services/ai-provenance.d.ts.map +1 -1
  183. package/dist/src/services/ai-provenance.js +5 -0
  184. package/dist/src/services/ai-provenance.js.map +1 -1
  185. package/dist/src/services/ai-transcription.d.ts +66 -0
  186. package/dist/src/services/ai-transcription.d.ts.map +1 -0
  187. package/dist/src/services/ai-transcription.js +90 -0
  188. package/dist/src/services/ai-transcription.js.map +1 -0
  189. package/dist/src/services/app-publish.d.ts.map +1 -1
  190. package/dist/src/services/app-publish.js +16 -1
  191. package/dist/src/services/app-publish.js.map +1 -1
  192. package/dist/src/services/build-app-prompt.d.ts.map +1 -1
  193. package/dist/src/services/build-app-prompt.js +2 -1
  194. package/dist/src/services/build-app-prompt.js.map +1 -1
  195. package/dist/src/services/connections/attach.d.ts +62 -0
  196. package/dist/src/services/connections/attach.d.ts.map +1 -0
  197. package/dist/src/services/connections/attach.js +168 -0
  198. package/dist/src/services/connections/attach.js.map +1 -0
  199. package/dist/src/services/connections/credential.d.ts +39 -0
  200. package/dist/src/services/connections/credential.d.ts.map +1 -0
  201. package/dist/src/services/connections/credential.js +66 -0
  202. package/dist/src/services/connections/credential.js.map +1 -0
  203. package/dist/src/services/connections/instance.d.ts +65 -0
  204. package/dist/src/services/connections/instance.d.ts.map +1 -0
  205. package/dist/src/services/connections/instance.js +144 -0
  206. package/dist/src/services/connections/instance.js.map +1 -0
  207. package/dist/src/services/connections/oauth.d.ts +77 -0
  208. package/dist/src/services/connections/oauth.d.ts.map +1 -0
  209. package/dist/src/services/connections/oauth.js +290 -0
  210. package/dist/src/services/connections/oauth.js.map +1 -0
  211. package/dist/src/services/connections/providers.d.ts +118 -0
  212. package/dist/src/services/connections/providers.d.ts.map +1 -0
  213. package/dist/src/services/connections/providers.js +260 -0
  214. package/dist/src/services/connections/providers.js.map +1 -0
  215. package/dist/src/services/connections/publish-gate.d.ts +103 -0
  216. package/dist/src/services/connections/publish-gate.d.ts.map +1 -0
  217. package/dist/src/services/connections/publish-gate.js +0 -0
  218. package/dist/src/services/connections/publish-gate.js.map +1 -0
  219. package/dist/src/services/connections/publish.d.ts +60 -0
  220. package/dist/src/services/connections/publish.d.ts.map +1 -0
  221. package/dist/src/services/connections/publish.js +340 -0
  222. package/dist/src/services/connections/publish.js.map +1 -0
  223. package/dist/src/services/connections/refresh.d.ts +55 -0
  224. package/dist/src/services/connections/refresh.d.ts.map +1 -0
  225. package/dist/src/services/connections/refresh.js +307 -0
  226. package/dist/src/services/connections/refresh.js.map +1 -0
  227. package/dist/src/services/markdown-negotiation.d.ts +17 -0
  228. package/dist/src/services/markdown-negotiation.d.ts.map +1 -1
  229. package/dist/src/services/markdown-negotiation.js +15 -0
  230. package/dist/src/services/markdown-negotiation.js.map +1 -1
  231. package/dist/src/services/message-send.d.ts.map +1 -1
  232. package/dist/src/services/message-send.js +16 -2
  233. package/dist/src/services/message-send.js.map +1 -1
  234. package/dist/src/services/openrouter.d.ts +67 -1
  235. package/dist/src/services/openrouter.d.ts.map +1 -1
  236. package/dist/src/services/openrouter.js +102 -11
  237. package/dist/src/services/openrouter.js.map +1 -1
  238. package/dist/src/services/upload-token.d.ts +5 -1
  239. package/dist/src/services/upload-token.d.ts.map +1 -1
  240. package/dist/src/services/upload-token.js +13 -1
  241. package/dist/src/services/upload-token.js.map +1 -1
  242. package/dist/src/services/workflow/engine-util.d.ts +18 -0
  243. package/dist/src/services/workflow/engine-util.d.ts.map +1 -1
  244. package/dist/src/services/workflow/engine-util.js +27 -0
  245. package/dist/src/services/workflow/engine-util.js.map +1 -1
  246. package/dist/src/services/workflow/engine.d.ts.map +1 -1
  247. package/dist/src/services/workflow/engine.js +4 -2
  248. package/dist/src/services/workflow/engine.js.map +1 -1
  249. package/dist/src/storage/interface.d.ts +2 -1
  250. package/dist/src/storage/interface.d.ts.map +1 -1
  251. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +65 -0
  252. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
  253. package/dist/src/storage/providers/postgres-kysely/index.d.ts.map +1 -1
  254. package/dist/src/storage/providers/postgres-kysely/index.js +2 -1
  255. package/dist/src/storage/providers/postgres-kysely/index.js.map +1 -1
  256. package/dist/src/storage/providers/postgres-kysely/methods/connections.d.ts +44 -0
  257. package/dist/src/storage/providers/postgres-kysely/methods/connections.d.ts.map +1 -0
  258. package/dist/src/storage/providers/postgres-kysely/methods/connections.js +308 -0
  259. package/dist/src/storage/providers/postgres-kysely/methods/connections.js.map +1 -0
  260. package/dist/src/storage/providers/postgres-kysely/methods/node-infra.d.ts.map +1 -1
  261. package/dist/src/storage/providers/postgres-kysely/methods/node-infra.js +4 -2
  262. package/dist/src/storage/providers/postgres-kysely/methods/node-infra.js.map +1 -1
  263. package/dist/src/storage/providers/postgres-kysely/migrations/0021_connections.sql +116 -0
  264. package/dist/src/storage/providers/postgres-kysely/migrations/0022_provider_clients.sql +36 -0
  265. package/dist/src/storage/providers/postgres-kysely/migrations/0023_nonce_payload.sql +13 -0
  266. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  267. package/dist/src/storage/providers/sqlite/index.js +2 -1
  268. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  269. package/dist/src/storage/providers/sqlite/methods/community.d.ts.map +1 -1
  270. package/dist/src/storage/providers/sqlite/methods/community.js +2 -1
  271. package/dist/src/storage/providers/sqlite/methods/community.js.map +1 -1
  272. package/dist/src/storage/providers/sqlite/methods/connections.d.ts +60 -0
  273. package/dist/src/storage/providers/sqlite/methods/connections.d.ts.map +1 -0
  274. package/dist/src/storage/providers/sqlite/methods/connections.js +287 -0
  275. package/dist/src/storage/providers/sqlite/methods/connections.js.map +1 -0
  276. package/dist/src/storage/providers/sqlite/schema-tables-1.d.ts.map +1 -1
  277. package/dist/src/storage/providers/sqlite/schema-tables-1.js +4 -0
  278. package/dist/src/storage/providers/sqlite/schema-tables-1.js.map +1 -1
  279. package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts.map +1 -1
  280. package/dist/src/storage/providers/sqlite/schema-tables-3.js +106 -0
  281. package/dist/src/storage/providers/sqlite/schema-tables-3.js.map +1 -1
  282. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  283. package/dist/src/storage/providers/sqlite/schema.js +2 -0
  284. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  285. package/dist/src/storage/repositories/connection.repository.d.ts +124 -0
  286. package/dist/src/storage/repositories/connection.repository.d.ts.map +1 -0
  287. package/dist/src/storage/repositories/connection.repository.js +2 -0
  288. package/dist/src/storage/repositories/connection.repository.js.map +1 -0
  289. package/dist/src/storage/types/agents-messaging.d.ts +19 -0
  290. package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
  291. package/dist/src/storage/types/agents-messaging.js.map +1 -1
  292. package/dist/src/storage/types/auth.d.ts +8 -1
  293. package/dist/src/storage/types/auth.d.ts.map +1 -1
  294. package/dist/src/utils/build-stamp.d.ts +56 -0
  295. package/dist/src/utils/build-stamp.d.ts.map +1 -0
  296. package/dist/src/utils/build-stamp.js +142 -0
  297. package/dist/src/utils/build-stamp.js.map +1 -0
  298. package/dist/src/utils/messaging.d.ts +14 -0
  299. package/dist/src/utils/messaging.d.ts.map +1 -1
  300. package/dist/src/utils/messaging.js +0 -0
  301. package/dist/src/utils/messaging.js.map +1 -1
  302. package/dist/static/sdk-libs/connect/index.js +199 -0
  303. package/dist/static/sdk-libs/connect/notes.js +47 -0
  304. package/dist/static/sdk-libs/connect/panel.js +238 -0
  305. package/dist/static/sdk-libs/data/index.js +63 -11
  306. package/dist/static/sdk-libs/dist/aimeat-connect.js +357 -0
  307. package/dist/static/sdk-libs/dist/aimeat-data.js +40 -9
  308. package/package.json +2 -2
@@ -96,7 +96,8 @@ export function buildAppPrompt(config, opts = {}) {
96
96
  body += '```\n';
97
97
  body += 'Works only when logged in. After a write, read it back to confirm it persisted.\n';
98
98
  body += 'A key is a plain string: `get(key)` / `getPublic(gaii, key)` always return the LATEST value — never append a version, index or `:0`/`:N` suffix to a key, and read back the SAME key you wrote (a store-as-`x` / read-as-`x:0` mismatch just 404s and your UI shows nothing). To page a large list, store it as ONE array under one key (or shard with your OWN explicit id scheme), not a magic version suffix.\n';
99
- body += 'Shared feeds, journals, comments and discussions are ALL built this way — one public key per entry, `getPublic()` to read others\'. Never reach for Boards (deprecated, removal-bound) or organism workspaces as an app\'s data layer. When a rule must be enforced server-side (only-author-can-delete, one-vote-per-user), that logic goes into an extension — see the extension guide, not into boards/organisms.\n\n';
99
+ body += 'Shared feeds, journals, comments and discussions are ALL built this way — one public key per entry, `getPublic()` to read others\'. Never reach for Boards (deprecated, removal-bound) or organism workspaces as an app\'s data layer. When a rule must be enforced server-side (only-author-can-delete, one-vote-per-user), that logic goes into an extension — see the extension guide, not into boards/organisms.\n';
100
+ body += 'If you RENDER content an agent wrote, read it with `getPublicEntry(gaii, key)` instead: it returns the same entry plus `provenance` — how that content was made, including the model and the `sources` the writer declared. `getPublic()` returns the bare value and cannot carry it. Showing agent-written text with no origin, when the node is holding the record that explains it, is the gap the label is meant to close.\n\n';
100
101
  // Reading what the owner's AGENTS produced. This is the single most common "my app shows
101
102
  // nothing" cause for fleet-facing apps: agent output is NOT in the owner's namespace, and an
102
103
  // app-grant token gets no automatic broadening, so an unscoped list() legitimately returns [].
@@ -1 +1 @@
1
- {"version":3,"file":"build-app-prompt.js","sourceRoot":"","sources":["../../../src/services/build-app-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-app-prompt.js","sourceRoot":"","sources":["../../../src/services/build-app-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @file attach.ts
3
+ * @description Connecting an account by SUPPLYING a credential rather than by an authorization
4
+ * round (TARGET-057). The other half of the connect surface, and the one that existed as a
5
+ * provider entry before it existed as a route.
6
+ *
7
+ * THE APP PASSWORD IS KEPT ALONGSIDE THE SESSION, deliberately. A session expires and its refresh
8
+ * token can be rotated away or rejected; the secret the user handed over does not expire, so a
9
+ * dead session can be re-minted without sending them back to a settings page to find something
10
+ * they already gave us. That is the whole practical advantage of a non-expiring credential and
11
+ * throwing it away after the first exchange would waste it.
12
+ *
13
+ * THE SECRET IS NEVER ECHOED. Not in the response, not in an error, not in a log line. The only
14
+ * thing that comes back is the connection, and the connection's projection has no credential in
15
+ * it at any level.
16
+ * @structure attachCredential · mintSession
17
+ * @usage import { attachCredential } from './attach.js';
18
+ * @version-history
19
+ * v1.0.0 — 2026-08-02 — TARGET-057 Phase 6.
20
+ */
21
+ import type { ConnectContext } from './oauth.js';
22
+ import type { ConnectionCredential, ConnectionMode, ConnectionRecord } from '../../models/connection-schemas.js';
23
+ export type AttachResult = {
24
+ ok: true;
25
+ connection: ConnectionRecord;
26
+ created: boolean;
27
+ } | {
28
+ ok: false;
29
+ code: string;
30
+ reason: string;
31
+ };
32
+ /** What a mint produced: the session, plus who it belongs to at the provider. */
33
+ export interface MintedSession {
34
+ credential: ConnectionCredential;
35
+ externalId: string;
36
+ accountLabel: string;
37
+ expiresAt: string | null;
38
+ }
39
+ /**
40
+ * Exchange a supplied secret for a session.
41
+ *
42
+ * Exported because `refresh.ts` needs it too: re-minting from the stored app password is what a
43
+ * session-shaped connection falls back to when its refresh is rejected, and having two copies of
44
+ * this exchange is how the two paths drift.
45
+ */
46
+ export declare function mintSession(providerId: string, fields: Record<string, string>, baseUrl: string): Promise<MintedSession | {
47
+ error: string;
48
+ }>;
49
+ /**
50
+ * Connect an account from a credential the user supplied.
51
+ *
52
+ * Re-attaching an account that is already connected UPDATES that row, exactly as re-authorising
53
+ * does on the OAuth side — which is what makes "my app password stopped working, here is a new one"
54
+ * a repair rather than a way to accumulate duplicates.
55
+ */
56
+ export declare function attachCredential(ctx: ConnectContext, input: {
57
+ principal: string;
58
+ provider: string;
59
+ mode: ConnectionMode;
60
+ fields: Record<string, string>;
61
+ }): Promise<AttachResult>;
62
+ //# sourceMappingURL=attach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../../src/services/connections/attach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EACV,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EACvD,MAAM,oCAAoC,CAAC;AAK5C,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC5D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,oBAAoB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAClE,OAAO,CAAC,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA0E5C;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACnG,OAAO,CAAC,YAAY,CAAC,CAkDvB"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * @file attach.ts
3
+ * @description Connecting an account by SUPPLYING a credential rather than by an authorization
4
+ * round (TARGET-057). The other half of the connect surface, and the one that existed as a
5
+ * provider entry before it existed as a route.
6
+ *
7
+ * THE APP PASSWORD IS KEPT ALONGSIDE THE SESSION, deliberately. A session expires and its refresh
8
+ * token can be rotated away or rejected; the secret the user handed over does not expire, so a
9
+ * dead session can be re-minted without sending them back to a settings page to find something
10
+ * they already gave us. That is the whole practical advantage of a non-expiring credential and
11
+ * throwing it away after the first exchange would waste it.
12
+ *
13
+ * THE SECRET IS NEVER ECHOED. Not in the response, not in an error, not in a log line. The only
14
+ * thing that comes back is the connection, and the connection's projection has no credential in
15
+ * it at any level.
16
+ * @structure attachCredential · mintSession
17
+ * @usage import { attachCredential } from './attach.js';
18
+ * @version-history
19
+ * v1.0.0 — 2026-08-02 — TARGET-057 Phase 6.
20
+ */
21
+ import { randomUUID } from 'node:crypto';
22
+ import { safeFetch } from '../../utils/url-validator.js';
23
+ import { sealCredential } from './credential.js';
24
+ import { findProvider } from './providers.js';
25
+ /** Bluesky's default Personal Data Server. A user on their own PDS supplies it as a field later. */
26
+ const BLUESKY_PDS = 'https://bsky.social';
27
+ /**
28
+ * Exchange a supplied secret for a session.
29
+ *
30
+ * Exported because `refresh.ts` needs it too: re-minting from the stored app password is what a
31
+ * session-shaped connection falls back to when its refresh is rejected, and having two copies of
32
+ * this exchange is how the two paths drift.
33
+ */
34
+ export async function mintSession(providerId, fields, baseUrl) {
35
+ const identifier = (fields.identifier ?? '').trim();
36
+ const password = fields.password ?? '';
37
+ if (!identifier || !password)
38
+ return { error: 'both a handle and a secret are required' };
39
+ if (providerId === 'bluesky') {
40
+ try {
41
+ const r = await safeFetch(`${BLUESKY_PDS}/xrpc/com.atproto.server.createSession`, {
42
+ method: 'POST',
43
+ headers: { 'Content-Type': 'application/json' },
44
+ body: JSON.stringify({ identifier, password }),
45
+ signal: AbortSignal.timeout(15_000),
46
+ });
47
+ if (!r.ok) {
48
+ // Deliberately not the provider's raw body: a failed login response can echo the identifier
49
+ // and sometimes the attempt itself. The actionable half is that the pair was refused.
50
+ return { error: r.status === 401
51
+ ? 'Bluesky refused that handle and app password. Check it is an APP password, not your account password.'
52
+ : `Bluesky refused the sign-in (HTTP ${r.status})` };
53
+ }
54
+ const j = await r.json();
55
+ const accessJwt = typeof j.accessJwt === 'string' ? j.accessJwt : '';
56
+ const did = typeof j.did === 'string' ? j.did : '';
57
+ if (!accessJwt || !did)
58
+ return { error: 'Bluesky returned no usable session' };
59
+ return {
60
+ credential: {
61
+ shape: 'session',
62
+ accessToken: accessJwt,
63
+ ...(typeof j.refreshJwt === 'string' ? { refreshToken: j.refreshJwt } : {}),
64
+ // The secret is kept so a dead session can be re-minted; `pds` so a user on their own
65
+ // server is a field change rather than a code change.
66
+ extra: { appPassword: password, identifier, pds: BLUESKY_PDS, did },
67
+ },
68
+ externalId: did,
69
+ accountLabel: typeof j.handle === 'string' ? `@${j.handle}` : did,
70
+ // AT Proto does not state a lifetime here. Null means "do not pre-emptively refresh"; the
71
+ // 401-then-refresh path handles expiry when it actually arrives.
72
+ expiresAt: null,
73
+ };
74
+ }
75
+ catch (err) {
76
+ return { error: `could not reach Bluesky: ${err.message}` };
77
+ }
78
+ }
79
+ if (providerId === 'fake-static') {
80
+ try {
81
+ const r = await safeFetch(`${baseUrl}/session`, {
82
+ method: 'POST',
83
+ headers: { 'Content-Type': 'application/json' },
84
+ body: JSON.stringify({ identifier, password }),
85
+ signal: AbortSignal.timeout(15_000),
86
+ });
87
+ if (!r.ok)
88
+ return { error: `the test provider refused the credential (HTTP ${r.status})` };
89
+ const j = await r.json();
90
+ const accessJwt = typeof j.accessJwt === 'string' ? j.accessJwt : '';
91
+ const did = typeof j.did === 'string' ? j.did : '';
92
+ if (!accessJwt || !did)
93
+ return { error: 'the test provider returned no usable session' };
94
+ return {
95
+ credential: {
96
+ shape: 'session',
97
+ accessToken: accessJwt,
98
+ ...(typeof j.refreshJwt === 'string' ? { refreshToken: j.refreshJwt } : {}),
99
+ extra: { appPassword: password, identifier, pds: baseUrl, did },
100
+ },
101
+ externalId: did,
102
+ accountLabel: typeof j.handle === 'string' ? `@${j.handle}` : did,
103
+ expiresAt: null,
104
+ };
105
+ }
106
+ catch (err) {
107
+ return { error: `could not reach the test provider: ${err.message}` };
108
+ }
109
+ }
110
+ return { error: `no supplied-credential recipe for ${providerId}` };
111
+ }
112
+ /**
113
+ * Connect an account from a credential the user supplied.
114
+ *
115
+ * Re-attaching an account that is already connected UPDATES that row, exactly as re-authorising
116
+ * does on the OAuth side — which is what makes "my app password stopped working, here is a new one"
117
+ * a repair rather than a way to accumulate duplicates.
118
+ */
119
+ export async function attachCredential(ctx, input) {
120
+ const provider = findProvider(ctx.providers, input.provider);
121
+ if (!provider)
122
+ return { ok: false, code: 'UNKNOWN_PROVIDER', reason: `no provider '${input.provider}'` };
123
+ if (!provider.enabled) {
124
+ return { ok: false, code: 'PROVIDER_DISABLED', reason: provider.disabledReason ?? 'provider is disabled' };
125
+ }
126
+ if (!provider.attachFields) {
127
+ // The two paths never overlap: a provider with an authorization round must go through it, or a
128
+ // caller could skip the consent screen by posting here instead.
129
+ return { ok: false, code: 'NEEDS_AUTHORIZATION', reason: `${provider.id} is connected by approving it at the provider, not by supplying a credential` };
130
+ }
131
+ for (const f of provider.attachFields) {
132
+ if (!input.fields[f.name]) {
133
+ return { ok: false, code: 'MISSING_FIELD', reason: `${f.label} is required` };
134
+ }
135
+ }
136
+ const minted = await mintSession(provider.id, input.fields, ctx.config.connectFakeBaseUrl);
137
+ if ('error' in minted)
138
+ return { ok: false, code: 'ATTACH_FAILED', reason: minted.error };
139
+ const credential = sealCredential(minted.credential, ctx.key);
140
+ const now = new Date().toISOString();
141
+ const existing = await ctx.storage.findConnection(input.principal, provider.id, minted.externalId, null);
142
+ if (existing) {
143
+ await ctx.storage.updateConnectionCredential(existing.id, credential, minted.expiresAt);
144
+ const refreshed = await ctx.storage.getConnection(existing.id);
145
+ return { ok: true, connection: refreshed ?? existing, created: false };
146
+ }
147
+ const connection = {
148
+ id: randomUUID(),
149
+ principal: input.principal,
150
+ mode: input.mode,
151
+ provider: provider.id,
152
+ instance: null,
153
+ accountLabel: minted.accountLabel,
154
+ externalId: minted.externalId,
155
+ credential,
156
+ credentialShape: 'session',
157
+ scopes: provider.scopes,
158
+ expiresAt: minted.expiresAt,
159
+ status: 'active',
160
+ lastOkAt: now,
161
+ lastError: null,
162
+ createdAt: now,
163
+ updatedAt: now,
164
+ };
165
+ await ctx.storage.createConnection(connection);
166
+ return { ok: true, connection, created: true };
167
+ }
168
+ //# sourceMappingURL=attach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../../src/services/connections/attach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM9C,oGAAoG;AACpG,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAc1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAAE,MAA8B,EAAE,OAAe;IAEnE,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;IAE1F,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,GAAG,WAAW,wCAAwC,EAAE;gBAChF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC9C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACV,4FAA4F;gBAC5F,sFAAsF;gBACtF,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK,GAAG;wBAC9B,CAAC,CAAC,uGAAuG;wBACzG,CAAC,CAAC,qCAAqC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;YACzD,CAAC;YACD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAoF,CAAC;YAC3G,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;YAC/E,OAAO;gBACL,UAAU,EAAE;oBACV,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,SAAS;oBACtB,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,sFAAsF;oBACtF,sDAAsD;oBACtD,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;iBACpE;gBACD,UAAU,EAAE,GAAG;gBACf,YAAY,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;gBACjE,0FAA0F;gBAC1F,iEAAiE;gBACjE,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,GAAG,OAAO,UAAU,EAAE;gBAC9C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC9C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,kDAAkD,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;YAC3F,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAoF,CAAC;YAC3G,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC;YACzF,OAAO;gBACL,UAAU,EAAE;oBACV,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,SAAS;oBACtB,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;iBAChE;gBACD,UAAU,EAAE,GAAG;gBACf,YAAY,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;gBACjE,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,sCAAuC,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QACnF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,qCAAqC,UAAU,EAAE,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAmB,EACnB,KAAoG;IAEpG,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IACzG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,IAAI,sBAAsB,EAAE,CAAC;IAC7G,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,+FAA+F;QAC/F,gEAAgE;QAChE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,8EAA8E,EAAE,CAAC;IAC1J,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;QAChF,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3F,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAEzF,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACzG,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,CAAC,OAAO,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACxF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,IAAI,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,UAAU,GAAqB;QACnC,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU;QACV,eAAe,EAAE,SAAS;QAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IACF,MAAM,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @file credential.ts
3
+ * @description Sealing and opening an outbound connection's credential (TARGET-057). The one place
4
+ * a token is turned into ciphertext and back, so there is exactly one place to audit.
5
+ *
6
+ * The whole credential is sealed as a single JSON document rather than field by field. That keeps
7
+ * the three shapes (oauth2 / static / session) storable in one column, and it means a future
8
+ * provider that needs an extra field does not need a migration to hold it.
9
+ *
10
+ * NOTHING HERE LOGS. A decrypt failure returns null with a caller-facing reason; it never prints
11
+ * the ciphertext, the key state or the provider's response. A secret that reaches a log has left
12
+ * the node as surely as one that reaches an API response.
13
+ * @structure sealCredential · openCredential · requireEncryptionKey
14
+ * @usage import { sealCredential, openCredential } from './credential.js';
15
+ * @version-history
16
+ * v1.0.0 — 2026-08-02 — TARGET-057 Phase 1c.
17
+ */
18
+ import type { AimeatConfig } from '../../config.js';
19
+ import type { ConnectionCredential } from '../../models/connection-schemas.js';
20
+ /**
21
+ * The node's master key, or null when none is configured.
22
+ *
23
+ * Callers must refuse the whole operation on null rather than continue. There is no degraded mode
24
+ * here: storing a token in the clear because a key was missing is worse than not storing it, and
25
+ * extension secrets already take this same path.
26
+ */
27
+ export declare function requireEncryptionKey(config: AimeatConfig): Buffer | null;
28
+ /** Seal a credential for storage. Returns `iv:tag:ct`. */
29
+ export declare function sealCredential(credential: ConnectionCredential, key: Buffer): string;
30
+ /**
31
+ * Open a stored credential. Returns null when the ciphertext cannot be read — a rotated key, a
32
+ * truncated column, a row restored from a backup taken under a different key.
33
+ *
34
+ * Null is a legitimate outcome the caller must handle by parking the connection in `needs_reauth`,
35
+ * because the honest statement to the owner is "reconnect this account", not a 500. Throwing here
36
+ * would surface as an unhandled error in whatever background job happened to touch it first.
37
+ */
38
+ export declare function openCredential(ciphertext: string, key: Buffer): ConnectionCredential | null;
39
+ //# sourceMappingURL=credential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../../../src/services/connections/credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAExE;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,UAAU,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAoB3F"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @file credential.ts
3
+ * @description Sealing and opening an outbound connection's credential (TARGET-057). The one place
4
+ * a token is turned into ciphertext and back, so there is exactly one place to audit.
5
+ *
6
+ * The whole credential is sealed as a single JSON document rather than field by field. That keeps
7
+ * the three shapes (oauth2 / static / session) storable in one column, and it means a future
8
+ * provider that needs an extra field does not need a migration to hold it.
9
+ *
10
+ * NOTHING HERE LOGS. A decrypt failure returns null with a caller-facing reason; it never prints
11
+ * the ciphertext, the key state or the provider's response. A secret that reaches a log has left
12
+ * the node as surely as one that reaches an API response.
13
+ * @structure sealCredential · openCredential · requireEncryptionKey
14
+ * @usage import { sealCredential, openCredential } from './credential.js';
15
+ * @version-history
16
+ * v1.0.0 — 2026-08-02 — TARGET-057 Phase 1c.
17
+ */
18
+ import { encrypt, decrypt, getEncryptionKey } from '../encryption.js';
19
+ import { logger } from '../../utils/logger.js';
20
+ /**
21
+ * The node's master key, or null when none is configured.
22
+ *
23
+ * Callers must refuse the whole operation on null rather than continue. There is no degraded mode
24
+ * here: storing a token in the clear because a key was missing is worse than not storing it, and
25
+ * extension secrets already take this same path.
26
+ */
27
+ export function requireEncryptionKey(config) {
28
+ return getEncryptionKey(config);
29
+ }
30
+ /** Seal a credential for storage. Returns `iv:tag:ct`. */
31
+ export function sealCredential(credential, key) {
32
+ return encrypt(JSON.stringify(credential), key);
33
+ }
34
+ /**
35
+ * Open a stored credential. Returns null when the ciphertext cannot be read — a rotated key, a
36
+ * truncated column, a row restored from a backup taken under a different key.
37
+ *
38
+ * Null is a legitimate outcome the caller must handle by parking the connection in `needs_reauth`,
39
+ * because the honest statement to the owner is "reconnect this account", not a 500. Throwing here
40
+ * would surface as an unhandled error in whatever background job happened to touch it first.
41
+ */
42
+ export function openCredential(ciphertext, key) {
43
+ try {
44
+ const parsed = JSON.parse(decrypt(ciphertext, key));
45
+ if (!parsed || typeof parsed !== 'object')
46
+ return null;
47
+ const c = parsed;
48
+ if (typeof c.accessToken !== 'string' || typeof c.shape !== 'string')
49
+ return null;
50
+ return {
51
+ shape: c.shape,
52
+ accessToken: c.accessToken,
53
+ ...(typeof c.refreshToken === 'string' ? { refreshToken: c.refreshToken } : {}),
54
+ ...(c.extra && typeof c.extra === 'object' ? { extra: c.extra } : {}),
55
+ };
56
+ }
57
+ catch {
58
+ // The FACT is logged; the exception is not. A failed decrypt's message can carry fragments of
59
+ // the ciphertext, so passing it to the logger would put key material in the log to satisfy a
60
+ // rule about visibility. An operator needs to know this happened, not what the bytes were —
61
+ // and the caller adds which connection it was when it parks the row in needs_reauth.
62
+ logger.warn('connections: a stored credential could not be opened (rotated key, or a backup restored under another key)');
63
+ return null;
64
+ }
65
+ }
66
+ //# sourceMappingURL=credential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../../../../src/services/connections/credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,cAAc,CAAC,UAAgC,EAAE,GAAW;IAC1E,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,GAAW;IAC5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAY,CAAC;QAC/D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,CAAC,GAAG,MAAuC,CAAC;QAClD,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClF,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,GAAG,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAA+B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChG,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8FAA8F;QAC9F,6FAA6F;QAC7F,4FAA4F;QAC5F,qFAAqF;QACrF,MAAM,CAAC,IAAI,CAAC,4GAA4G,CAAC,CAAC;QAC1H,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @file instance.ts
3
+ * @description Instance-scoped provider support (TARGET-057): normalising a user-supplied instance
4
+ * address, and registering this node as an application at that instance on first contact.
5
+ *
6
+ * THE ADDRESS COMES FROM A USER. That single fact drives this whole file. `mastodon.social` is
7
+ * typed into a box by whoever is connecting, and the node then makes an HTTP request to it. That
8
+ * is an SSRF vector, and the answer is two layers rather than one: normalise and reject
9
+ * syntactically here, then let safeFetch apply the network-level rules (private ranges, redirect
10
+ * re-validation) on every request that follows.
11
+ *
12
+ * LAZY REGISTRATION. There is no way to know which instance the next user arrives from, and there
13
+ * are thousands, so the client credentials cannot be configuration. The node registers itself the
14
+ * first time someone connects from an instance and remembers the result, so the second user
15
+ * reuses the first user's registration rather than minting a parallel one.
16
+ * @structure normalizeInstance · registerAtInstance
17
+ * @usage import { normalizeInstance, registerAtInstance } from './instance.js';
18
+ * @version-history
19
+ * v1.0.0 — 2026-08-02 — TARGET-057 Phase 1c.
20
+ */
21
+ import type { Storage } from '../../storage/interface.js';
22
+ /** A normalised instance origin, or the reason it was refused. */
23
+ export type InstanceResult = {
24
+ ok: true;
25
+ origin: string;
26
+ } | {
27
+ ok: false;
28
+ reason: string;
29
+ };
30
+ /**
31
+ * Normalise `mastodon.social`, `https://mastodon.social/`, `HTTPS://Mastodon.Social` and friends to
32
+ * one canonical origin, or refuse.
33
+ *
34
+ * Canonicalising matters beyond tidiness: the origin is the storage key for the node's registration
35
+ * at that instance, so two spellings of one instance would register twice and hold two client
36
+ * secrets for the same place.
37
+ *
38
+ * HTTPS is forced rather than accepted-if-offered. An instance reached over http would carry the
39
+ * user's authorization code in the clear, and accepting `http://` from a text box is also the
40
+ * easiest way to reach something that is not on the internet at all.
41
+ */
42
+ export declare function normalizeInstance(raw: string): InstanceResult;
43
+ /** Client credentials this node holds at one instance. */
44
+ export interface InstanceClient {
45
+ clientId: string;
46
+ clientSecret: string;
47
+ }
48
+ /**
49
+ * The node's application registration at `origin`, registering it if this is the first contact.
50
+ *
51
+ * Concurrency is handled by the store rather than here: `upsertProviderClient` is insert-if-new and
52
+ * returns whatever is now there, so two users arriving from one instance at the same moment
53
+ * converge on a single registration. The loser of that race has registered an application at the
54
+ * instance that nothing will ever point at, which is untidy at the instance and harmless to us —
55
+ * the alternative, a lock held across a network call to a stranger's server, is worse.
56
+ */
57
+ export declare function registerAtInstance(storage: Storage, key: Buffer, provider: string, origin: string, app: {
58
+ name: string;
59
+ redirectUri: string;
60
+ scopes: string[];
61
+ website: string;
62
+ }): Promise<InstanceClient | {
63
+ error: string;
64
+ }>;
65
+ //# sourceMappingURL=instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../../src/services/connections/instance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,kEAAkE;AAClE,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CA6B7D;AAED,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E,OAAO,CAAC,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAkE7C"}