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
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../src/routes/apps/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../src/routes/apps/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @file connections.ts
3
+ * @description REST surface for outbound connections (TARGET-057): a principal's own accounts at
4
+ * external services, and the delegations an app owner grants over a shared channel.
5
+ *
6
+ * NOTHING HERE RETURNS A CREDENTIAL. `toPublic()` is the only projection any response uses, and it
7
+ * carries provider, label and status. Not scopes: an app cannot know what a provider's scope names
8
+ * mean, so it asks a capability question and gets a yes or no (decision K1).
9
+ *
10
+ * ABSENT AND NOT-YOURS ANSWER IDENTICALLY. Every lookup compares `principal` against
11
+ * resolveIdentity() and 404s on a mismatch with the same body as a genuinely missing row —
12
+ * otherwise the difference between the two answers enumerates other people's connections.
13
+ *
14
+ * THE CALLBACK IS THE ONE UNAUTHENTICATED ROUTE, and it must be: the provider redirects a browser
15
+ * to it. Its gate is the single-use `state`, which is bound to the principal who started the round
16
+ * and consumed before the code is exchanged.
17
+ * @structure connectionsRouter(config, storage):
18
+ * GET /v1/connections/providers -- discovery (enabled providers + capabilities)
19
+ * POST /v1/connections/start -- begin an authorization
20
+ * GET /v1/connections/callback -- provider redirect (unauthenticated by necessity)
21
+ * GET /v1/connections -- the caller's own connections
22
+ * DELETE /v1/connections/:id -- revoke at the provider, then locally
23
+ * POST /v1/connections/:id/delegations -- grant an app one named action over a channel
24
+ * GET /v1/connections/:id/delegations -- what has been granted over it
25
+ * PATCH /v1/connections/delegations/:did -- the one-gesture stop
26
+ * GET /v1/connections/delegations/:did/quota -- allowance left, BEFORE anything is refused
27
+ * @usage app.use(connectionsRouter(config, storage));
28
+ * @version-history
29
+ * v1.0.0 — 2026-08-02 — TARGET-057 Phase 1e.
30
+ */
31
+ import { Router } from 'express';
32
+ import type { AimeatConfig } from '../config.js';
33
+ import type { Storage } from '../storage/interface.js';
34
+ export declare function connectionsRouter(config: AimeatConfig, storage: Storage): Router;
35
+ //# sourceMappingURL=connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../../src/routes/connections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAyBvD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA+XhF"}
@@ -0,0 +1,406 @@
1
+ /**
2
+ * @file connections.ts
3
+ * @description REST surface for outbound connections (TARGET-057): a principal's own accounts at
4
+ * external services, and the delegations an app owner grants over a shared channel.
5
+ *
6
+ * NOTHING HERE RETURNS A CREDENTIAL. `toPublic()` is the only projection any response uses, and it
7
+ * carries provider, label and status. Not scopes: an app cannot know what a provider's scope names
8
+ * mean, so it asks a capability question and gets a yes or no (decision K1).
9
+ *
10
+ * ABSENT AND NOT-YOURS ANSWER IDENTICALLY. Every lookup compares `principal` against
11
+ * resolveIdentity() and 404s on a mismatch with the same body as a genuinely missing row —
12
+ * otherwise the difference between the two answers enumerates other people's connections.
13
+ *
14
+ * THE CALLBACK IS THE ONE UNAUTHENTICATED ROUTE, and it must be: the provider redirects a browser
15
+ * to it. Its gate is the single-use `state`, which is bound to the principal who started the round
16
+ * and consumed before the code is exchanged.
17
+ * @structure connectionsRouter(config, storage):
18
+ * GET /v1/connections/providers -- discovery (enabled providers + capabilities)
19
+ * POST /v1/connections/start -- begin an authorization
20
+ * GET /v1/connections/callback -- provider redirect (unauthenticated by necessity)
21
+ * GET /v1/connections -- the caller's own connections
22
+ * DELETE /v1/connections/:id -- revoke at the provider, then locally
23
+ * POST /v1/connections/:id/delegations -- grant an app one named action over a channel
24
+ * GET /v1/connections/:id/delegations -- what has been granted over it
25
+ * PATCH /v1/connections/delegations/:did -- the one-gesture stop
26
+ * GET /v1/connections/delegations/:did/quota -- allowance left, BEFORE anything is refused
27
+ * @usage app.use(connectionsRouter(config, storage));
28
+ * @version-history
29
+ * v1.0.0 — 2026-08-02 — TARGET-057 Phase 1e.
30
+ */
31
+ import { Router } from 'express';
32
+ import { randomUUID } from 'node:crypto';
33
+ import { success, error } from '../middleware/envelope.js';
34
+ import { requireAuth, requireScope } from '../auth/middleware.js';
35
+ import { resolveIdentity } from '../utils/gaii.js';
36
+ import { logger } from '../utils/logger.js';
37
+ import { buildOutboundProviders, listProviderMeta, findProvider, } from '../services/connections/providers.js';
38
+ import { requireEncryptionKey } from '../services/connections/credential.js';
39
+ import { startAuthorization, completeAuthorization } from '../services/connections/oauth.js';
40
+ import { revokeConnection, ensureFreshCredential } from '../services/connections/refresh.js';
41
+ import { attachCredential } from '../services/connections/attach.js';
42
+ import { quotaStatus, openPublish, openOwnPublish } from '../services/connections/publish-gate.js';
43
+ import { publishToProvider } from '../services/connections/publish.js';
44
+ /** The ONLY shape a connection leaves this file in. */
45
+ function toPublic(c) {
46
+ return { id: c.id, provider: c.provider, mode: c.mode, accountLabel: c.accountLabel, status: c.status };
47
+ }
48
+ const str = (v) => (typeof v === 'string' ? v.trim() : '');
49
+ export function connectionsRouter(config, storage) {
50
+ const router = Router();
51
+ const providers = buildOutboundProviders(config);
52
+ const resolve = (req) => resolveIdentity(req.auth, config.nodeId);
53
+ /**
54
+ * Build the service context, or explain why not. A missing encryption key is a hard stop rather
55
+ * than a degraded mode: storing someone's token in the clear because a key was absent is worse
56
+ * than refusing to store it.
57
+ */
58
+ function ctx(res) {
59
+ const key = requireEncryptionKey(config);
60
+ if (!key) {
61
+ res.status(503).json(error(config.nodeId, 'NO_ENCRYPTION_KEY', 'This node has no encryption key configured, so it cannot hold an account credential. Set AIMEAT_ENCRYPTION_KEY.'));
62
+ return null;
63
+ }
64
+ return { config, storage, providers, key };
65
+ }
66
+ /** Capability gate. Returns false and answers when connections are switched off on this node. */
67
+ function capabilityOn(res) {
68
+ if (config.connectionsEnabled)
69
+ return true;
70
+ res.status(503).json(error(config.nodeId, 'CONNECTIONS_DISABLED', 'Outbound connections are not enabled on this node (AIMEAT_CONNECTIONS_ENABLED).'));
71
+ return false;
72
+ }
73
+ // ── GET /v1/connections/providers ──
74
+ // Discovery. Disabled providers are omitted, but the reason is available to an operator through
75
+ // the node's own config rather than leaking configuration state to every caller.
76
+ router.get('/v1/connections/providers', requireAuth(), (_req, res) => {
77
+ res.json(success(config.nodeId, { providers: listProviderMeta(providers) }, [
78
+ { description: 'Start connecting an account', method: 'POST', url: '/v1/connections/start' },
79
+ ]));
80
+ });
81
+ // ── GET /v1/connections ── the caller's own, never anyone else's.
82
+ router.get('/v1/connections', requireAuth(), requireScope('connections:read'), async (req, res) => {
83
+ if (!capabilityOn(res))
84
+ return;
85
+ const principal = resolve(req);
86
+ const rows = await storage.listConnections({ principal });
87
+ res.json(success(config.nodeId, { connections: rows.map(toPublic) }));
88
+ });
89
+ // ── POST /v1/connections/start ──
90
+ router.post('/v1/connections/start', requireAuth(), requireScope('connections:write'), async (req, res) => {
91
+ if (!capabilityOn(res))
92
+ return;
93
+ const c = ctx(res);
94
+ if (!c)
95
+ return;
96
+ const provider = str(req.body?.provider);
97
+ if (!provider) {
98
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', 'provider is required'));
99
+ return;
100
+ }
101
+ const mode = req.body?.mode === 'shared' ? 'shared' : 'personal';
102
+ const result = await startAuthorization(c, {
103
+ principal: resolve(req),
104
+ provider,
105
+ instance: str(req.body?.instance) || undefined,
106
+ mode,
107
+ returnUrl: str(req.body?.return_url),
108
+ });
109
+ if (!result.ok) {
110
+ // The reason travels with the refusal. "Disabled" alone leaves an operator nothing to act on.
111
+ res.status(result.code === 'UNKNOWN_PROVIDER' ? 404 : 400)
112
+ .json(error(config.nodeId, result.code, result.reason));
113
+ return;
114
+ }
115
+ res.json(success(config.nodeId, { authorize_url: result.authorizeUrl, state: result.state }));
116
+ });
117
+ // ── POST /v1/connections/attach ──
118
+ // The other half of connecting: a provider with no authorization round, where the user supplies a
119
+ // credential instead. It existed as a provider entry before it existed as a route, which meant
120
+ // Bluesky was advertised in discovery with no way to connect it — the same "the gate is
121
+ // decorative" failure the YouTube case is asserted against.
122
+ router.post('/v1/connections/attach', requireAuth(), requireScope('connections:write'), async (req, res) => {
123
+ if (!capabilityOn(res))
124
+ return;
125
+ const c = ctx(res);
126
+ if (!c)
127
+ return;
128
+ const provider = str(req.body?.provider);
129
+ if (!provider) {
130
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', 'provider is required'));
131
+ return;
132
+ }
133
+ const raw = (req.body?.fields && typeof req.body.fields === 'object' ? req.body.fields : {});
134
+ const fields = {};
135
+ for (const k of Object.keys(raw))
136
+ if (typeof raw[k] === 'string')
137
+ fields[k] = raw[k];
138
+ const result = await attachCredential(c, {
139
+ principal: resolve(req),
140
+ provider,
141
+ mode: req.body?.mode === 'shared' ? 'shared' : 'personal',
142
+ fields,
143
+ });
144
+ if (!result.ok) {
145
+ res.status(result.code === 'UNKNOWN_PROVIDER' ? 404 : 400)
146
+ .json(error(config.nodeId, result.code, result.reason));
147
+ return;
148
+ }
149
+ // The supplied secret is not echoed anywhere in this response, and toPublic() has no field for
150
+ // it at any level.
151
+ res.status(result.created ? 201 : 200)
152
+ .json(success(config.nodeId, { connection: toPublic(result.connection), created: result.created }));
153
+ });
154
+ // ── GET /v1/connections/callback ──
155
+ // Unauthenticated BY NECESSITY: the provider redirects a browser here and that browser may carry
156
+ // no session. The gate is the single-use state, bound to the principal who started the round.
157
+ router.get('/v1/connections/callback', async (req, res) => {
158
+ if (!config.connectionsEnabled) {
159
+ res.status(503).send('Outbound connections are not enabled on this node.');
160
+ return;
161
+ }
162
+ const key = requireEncryptionKey(config);
163
+ if (!key) {
164
+ res.status(503).send('This node has no encryption key configured.');
165
+ return;
166
+ }
167
+ const state = str(req.query.state);
168
+ const code = str(req.query.code);
169
+ const providerError = str(req.query.error);
170
+ if (providerError) {
171
+ // The user pressed cancel, or the provider refused. Not our failure, and not an error page:
172
+ // the state still needs consuming so a stale row does not sit until it expires.
173
+ await storage.deleteVerificationNonce(state).catch((err) => {
174
+ logger.warn('connections: could not clear the state after a provider-side refusal', { error: String(err) });
175
+ });
176
+ res.status(400).send(`The provider did not complete the connection: ${providerError}`);
177
+ return;
178
+ }
179
+ if (!state || !code) {
180
+ res.status(400).send('This connection callback is missing its state or code.');
181
+ return;
182
+ }
183
+ const result = await completeAuthorization({ config, storage, providers, key }, { state, code });
184
+ if (!result.ok) {
185
+ res.status(400).send(`Could not finish connecting: ${result.reason}`);
186
+ return;
187
+ }
188
+ // Back to wherever the flow started, when the starter said where that was. Same-origin only:
189
+ // an absolute URL from the request would make this an open redirect.
190
+ const target = result.returnUrl && result.returnUrl.startsWith('/') ? result.returnUrl : '/profile#access';
191
+ res.redirect(target);
192
+ });
193
+ // ── DELETE /v1/connections/:id ──
194
+ router.delete('/v1/connections/:id', requireAuth(), requireScope('connections:write'), async (req, res) => {
195
+ if (!capabilityOn(res))
196
+ return;
197
+ const c = ctx(res);
198
+ if (!c)
199
+ return;
200
+ const id = req.params.id;
201
+ const conn = await storage.getConnection(id);
202
+ // Identical answer for absent and not-yours: the difference between them is an enumeration.
203
+ if (!conn || conn.principal !== resolve(req)) {
204
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such connection'));
205
+ return;
206
+ }
207
+ const result = await revokeConnection(c, id);
208
+ if (!result.ok) {
209
+ res.status(400).json(error(config.nodeId, result.code, result.reason));
210
+ return;
211
+ }
212
+ // told_provider is reported honestly: the local credential is always gone, but whether the
213
+ // provider was reachable to be told is a fact the owner may want to act on.
214
+ res.json(success(config.nodeId, { revoked: true, told_provider: result.toldProvider }));
215
+ });
216
+ // ── POST /v1/connections/publish ──
217
+ // Gate, then credential, then recipe, then record the outcome. The gate has already written the
218
+ // attempt by the time anything leaves the node, which is what makes a retry safe.
219
+ router.post('/v1/connections/publish', requireAuth(), requireScope('connections:use'), async (req, res) => {
220
+ if (!capabilityOn(res))
221
+ return;
222
+ const c = ctx(res);
223
+ if (!c)
224
+ return;
225
+ const principal = resolve(req);
226
+ const storageKey = str(req.body?.storage_key);
227
+ const caption = typeof req.body?.caption === 'string' ? req.body.caption : '';
228
+ const params = (req.body?.params && typeof req.body.params === 'object' ? req.body.params : {});
229
+ const connectionId = str(req.body?.connection_id);
230
+ const appId = str(req.body?.app_id);
231
+ const action = str(req.body?.action);
232
+ if (!connectionId && !(appId && action)) {
233
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', 'either connection_id (your own account) or app_id + action (a delegated channel) is required'));
234
+ return;
235
+ }
236
+ // Resolved BEFORE the gate opens an attempt: a missing file is the caller's mistake and should
237
+ // not leave a row in flight for something that was never going to be uploaded.
238
+ let file = null;
239
+ if (storageKey) {
240
+ const stored = await storage.getStorageFile(principal, storageKey);
241
+ if (!stored) {
242
+ res.status(404).json(error(config.nodeId, 'NO_SUCH_FILE', `you have no stored file named '${storageKey}'`));
243
+ return;
244
+ }
245
+ file = { bytes: stored.data, mimeType: stored.mimeType, name: storageKey.split('/').pop() ?? storageKey };
246
+ }
247
+ const providerOf = async () => {
248
+ const conn = connectionId ? await storage.getConnection(connectionId) : undefined;
249
+ const p = conn ? findProvider(providers, conn.provider) : undefined;
250
+ return p?.sharedDailyLimit ?? null;
251
+ };
252
+ const gate = connectionId
253
+ ? await openOwnPublish(storage, { publisher: principal, connectionId, storageKey, caption, params }, { sharedDailyLimit: await providerOf() })
254
+ : await openPublish(storage, { publisher: principal, appId, action, storageKey, caption, params }, { sharedDailyLimit: null });
255
+ if (!gate.ok) {
256
+ res.status(gate.code === 'NOT_FOUND' ? 404 : 400).json(error(config.nodeId, gate.code, gate.reason));
257
+ return;
258
+ }
259
+ // A repeat of work already opened. The first attempt's outcome is the answer; starting a second
260
+ // publish here is the double-post this whole mechanism exists to prevent.
261
+ if (gate.replay) {
262
+ res.json(success(config.nodeId, { attempt: gate.attempt, replay: true }));
263
+ return;
264
+ }
265
+ // Waiting states are honest outcomes, not errors: `held` is moderation and `queued` is a spent
266
+ // allowance. Reporting either as a failure teaches a caller to retry, which makes both worse.
267
+ if (gate.attempt.status === 'held' || gate.attempt.status === 'queued') {
268
+ res.json(success(config.nodeId, { attempt: gate.attempt, replay: false }));
269
+ return;
270
+ }
271
+ const fresh = await ensureFreshCredential(c, gate.connection.id);
272
+ if (!fresh.ok) {
273
+ await storage.updatePublishAttempt(gate.attempt.id, { status: 'failed', error: fresh.reason });
274
+ res.status(400).json(error(config.nodeId, fresh.code, fresh.reason));
275
+ return;
276
+ }
277
+ const provider = findProvider(providers, fresh.connection.provider);
278
+ if (!provider) {
279
+ await storage.updatePublishAttempt(gate.attempt.id, { status: 'failed', error: 'provider no longer configured' });
280
+ res.status(400).json(error(config.nodeId, 'PROVIDER_GONE', 'that provider is no longer configured on this node'));
281
+ return;
282
+ }
283
+ const outcome = await publishToProvider({
284
+ provider,
285
+ connection: fresh.connection,
286
+ credential: fresh.credential,
287
+ caption,
288
+ params: gate.params,
289
+ file,
290
+ });
291
+ if (outcome.ok) {
292
+ await storage.updatePublishAttempt(gate.attempt.id, { status: 'done', externalRef: outcome.externalRef });
293
+ await storage.touchConnectionOk(gate.connection.id);
294
+ res.json(success(config.nodeId, {
295
+ attempt: await storage.getPublishAttempt(gate.attempt.id),
296
+ url: outcome.externalRef,
297
+ }));
298
+ return;
299
+ }
300
+ // `rejected` never retries; `failed` may. The distinction is the provider's, not ours.
301
+ await storage.updatePublishAttempt(gate.attempt.id, {
302
+ status: outcome.permanent ? 'rejected' : 'failed',
303
+ error: outcome.reason,
304
+ });
305
+ res.status(502).json(error(config.nodeId, outcome.permanent ? 'REJECTED' : 'PUBLISH_FAILED', outcome.reason));
306
+ });
307
+ // ── POST /v1/connections/:id/delegations ──
308
+ // Granting an app ONE named action over a channel, with the parameters it may not choose already
309
+ // decided. This is deliberately not "let this app use my connection".
310
+ router.post('/v1/connections/:id/delegations', requireAuth(), requireScope('connections:write'), async (req, res) => {
311
+ if (!capabilityOn(res))
312
+ return;
313
+ const id = req.params.id;
314
+ const conn = await storage.getConnection(id);
315
+ if (!conn || conn.principal !== resolve(req)) {
316
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such connection'));
317
+ return;
318
+ }
319
+ if (conn.mode !== 'shared') {
320
+ res.status(400).json(error(config.nodeId, 'NOT_A_SHARED_CHANNEL', 'Only a shared channel can be delegated. A personal connection is used by its owner alone.'));
321
+ return;
322
+ }
323
+ const appId = str(req.body?.app_id);
324
+ const action = str(req.body?.action);
325
+ if (!appId || !action) {
326
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', 'app_id and action are required'));
327
+ return;
328
+ }
329
+ const provider = findProvider(providers, conn.provider);
330
+ if (provider && !provider.capabilities.includes(action)) {
331
+ res.status(400).json(error(config.nodeId, 'UNKNOWN_ACTION', `${conn.provider} has no action '${action}'. Available: ${provider.capabilities.join(', ')}`));
332
+ return;
333
+ }
334
+ const raw = req.body?.per_user_limit;
335
+ const perUserLimit = raw && typeof raw.count === 'number' && raw.count > 0
336
+ ? { count: raw.count, windowHours: typeof raw.window_hours === 'number' && raw.window_hours > 0 ? raw.window_hours : 24 }
337
+ : null;
338
+ // 'hold' is the default and stays the default: content published under the owner's name on
339
+ // their own channel is exactly the case where a preview is worth the friction.
340
+ const moderation = req.body?.moderation === 'auto' ? 'auto' : 'hold';
341
+ const now = new Date().toISOString();
342
+ await storage.upsertDelegation({
343
+ id: randomUUID(),
344
+ connectionId: id,
345
+ appId,
346
+ action,
347
+ fixed: (req.body?.fixed && typeof req.body.fixed === 'object' ? req.body.fixed : {}),
348
+ perUserLimit,
349
+ moderation,
350
+ enabled: req.body?.enabled !== false,
351
+ createdAt: now,
352
+ updatedAt: now,
353
+ });
354
+ const stored = await storage.findDelegation(appId, action);
355
+ res.status(201).json(success(config.nodeId, { delegation: stored }));
356
+ });
357
+ // ── GET /v1/connections/:id/delegations ──
358
+ router.get('/v1/connections/:id/delegations', requireAuth(), requireScope('connections:read'), async (req, res) => {
359
+ if (!capabilityOn(res))
360
+ return;
361
+ const id = req.params.id;
362
+ const conn = await storage.getConnection(id);
363
+ if (!conn || conn.principal !== resolve(req)) {
364
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such connection'));
365
+ return;
366
+ }
367
+ res.json(success(config.nodeId, { delegations: await storage.listDelegations(id) }));
368
+ });
369
+ // ── PATCH /v1/connections/delegations/:did ── the one-gesture stop.
370
+ router.patch('/v1/connections/delegations/:did', requireAuth(), requireScope('connections:write'), async (req, res) => {
371
+ if (!capabilityOn(res))
372
+ return;
373
+ const did = req.params.did;
374
+ const delegation = await storage.getDelegation(did);
375
+ const conn = delegation ? await storage.getConnection(delegation.connectionId) : undefined;
376
+ if (!delegation || !conn || conn.principal !== resolve(req)) {
377
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such delegation'));
378
+ return;
379
+ }
380
+ if (typeof req.body?.enabled !== 'boolean') {
381
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', 'enabled (boolean) is required'));
382
+ return;
383
+ }
384
+ await storage.setDelegationEnabled(did, req.body.enabled);
385
+ res.json(success(config.nodeId, { delegation: await storage.getDelegation(did) }));
386
+ });
387
+ // ── GET /v1/connections/delegations/:did/quota ──
388
+ // Readable BEFORE anything is refused. A ceiling a person only meets by hitting it is
389
+ // indistinguishable from a broken feature.
390
+ router.get('/v1/connections/delegations/:did/quota', requireAuth(), requireScope('connections:read'), async (req, res) => {
391
+ if (!capabilityOn(res))
392
+ return;
393
+ const did = req.params.did;
394
+ const delegation = await storage.getDelegation(did);
395
+ const conn = delegation ? await storage.getConnection(delegation.connectionId) : undefined;
396
+ if (!delegation || !conn || conn.principal !== resolve(req)) {
397
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such delegation'));
398
+ return;
399
+ }
400
+ const provider = findProvider(providers, conn.provider);
401
+ const status = await quotaStatus(storage, did, provider?.sharedDailyLimit ?? null);
402
+ res.json(success(config.nodeId, { quota: status, per_user_limit: delegation.perUserLimit }));
403
+ });
404
+ return router;
405
+ }
406
+ //# sourceMappingURL=connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../../../src/routes/connections.ts"],"names":[],"mappings":"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"}
@@ -163,7 +163,7 @@ import { buildLibsCatalogue } from '../data/library-packs.js';
163
163
  const SDK_LIB_NAMES = [
164
164
  'speech', 'data', 'wallet', 'ai', 'capabilities', 'agents', 'agentface', 'intake', 'organism',
165
165
  'workflows', 'header', 'editor', 'live', 'storage', 'social', 'work', 'commerce', 'exchange',
166
- 'webmcp', 'markdown', 'audio', 'tunnel', 'game', 'iam',
166
+ 'webmcp', 'markdown', 'audio', 'tunnel', 'game', 'iam', 'connect',
167
167
  ];
168
168
  function sendJavascriptLibrary(res, source) {
169
169
  res.set('Cache-Control', 'no-store');
@@ -1 +1 @@
1
- {"version":3,"file":"libs.js","sourceRoot":"","sources":["../../../src/routes/libs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs.js","sourceRoot":"","sources":["../../../src/routes/libs.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@
11
11
  * - GET /v1/messages/conversations/:conversationId -- full thread
12
12
  * - POST /v1/messages/conversations/:conversationId/read -- mark thread read (+ local receipt)
13
13
  * - PATCH /v1/messages/:id/read -- mark one message read (+ local receipt)
14
+ * - POST /v1/messages/:id/attachments/:attId/transcribe -- transcribe a voice attachment
14
15
  * - DELETE /v1/messages/:id -- delete the caller's copy
15
16
  * - GET /v1/messages/requests -- pending first-contact requests
16
17
  * - POST /v1/messages/requests/:contactId/accept -- accept a contact
@@ -31,6 +32,10 @@
31
32
  * read (getDirectMessagesByIds) instead of getDirectMessage per pending contact.
32
33
  * v1.5.0 -- 2026-07-16 -- GET /messages/overview: the inbox mount's 6-request fan-out folded into one
33
34
  * composite (MessagesInboxService, Phase 4). Individual list endpoints stay for interactive re-fetch.
35
+ * v1.7.0 -- 2026-08-01 -- Voice messages: POST /:id/attachments/:attId/transcribe turns a spoken
36
+ * attachment into text with the caller's own key. The result is written to the CALLER's copy of
37
+ * the message only (updateMessageAttachments is owner-keyed), so a reader's transcript never
38
+ * travels back to the sender. Idempotent unless `force`.
34
39
  * v1.6.0 -- 2026-07-21 -- Reading a thread (POST /conversations/:id/read) now also dismisses that
35
40
  * conversation's header-bell notifications (dismissConversationNotifications), so a message you've
36
41
  * opened stops lingering in the bell; owner-scoped 'notifications' emit refreshes the bell live.
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/routes/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAuB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAgB1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CA8W3G"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/routes/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAuB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAkB1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAuc3G"}