@aeolus-fleet/gateway 0.32.2 → 0.34.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 (880) hide show
  1. package/README.md +34 -5
  2. package/dist/adapters/crypto/party-sign-in-seals.d.ts +3 -0
  3. package/dist/adapters/crypto/party-sign-in-seals.js +15 -0
  4. package/dist/adapters/crypto/party-sign-in-seals.js.map +1 -0
  5. package/dist/adapters/crypto/slack-install-seals.d.ts +3 -0
  6. package/dist/adapters/crypto/slack-install-seals.js +15 -0
  7. package/dist/adapters/crypto/slack-install-seals.js.map +1 -0
  8. package/dist/adapters/crypto/slack-link-seals.d.ts +3 -0
  9. package/dist/adapters/crypto/slack-link-seals.js +15 -0
  10. package/dist/adapters/crypto/slack-link-seals.js.map +1 -0
  11. package/dist/adapters/crypto/slack-signatures.d.ts +3 -0
  12. package/dist/adapters/crypto/slack-signatures.js +14 -0
  13. package/dist/adapters/crypto/slack-signatures.js.map +1 -0
  14. package/dist/adapters/fleet/rest-fleet-door.js +2 -2
  15. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  16. package/dist/adapters/fleet/ship-names.d.ts +7 -0
  17. package/dist/adapters/fleet/ship-names.js +25 -0
  18. package/dist/adapters/fleet/ship-names.js.map +1 -0
  19. package/dist/adapters/fleet/slack-ships.d.ts +15 -0
  20. package/dist/adapters/fleet/slack-ships.js +32 -0
  21. package/dist/adapters/fleet/slack-ships.js.map +1 -0
  22. package/dist/adapters/http/mcp-endpoint.js +1 -1
  23. package/dist/adapters/http/mcp-endpoint.js.map +1 -1
  24. package/dist/adapters/http/oauth-routes.d.ts +4 -1
  25. package/dist/adapters/http/oauth-routes.js +21 -9
  26. package/dist/adapters/http/oauth-routes.js.map +1 -1
  27. package/dist/adapters/http/openai-apps-challenge.d.ts +10 -0
  28. package/dist/adapters/http/openai-apps-challenge.js +9 -0
  29. package/dist/adapters/http/openai-apps-challenge.js.map +1 -0
  30. package/dist/adapters/http/party-sign-in-routes.d.ts +25 -0
  31. package/dist/adapters/http/party-sign-in-routes.js +45 -0
  32. package/dist/adapters/http/party-sign-in-routes.js.map +1 -0
  33. package/dist/adapters/http/person-tools.d.ts +24 -1
  34. package/dist/adapters/http/person-tools.js +43 -11
  35. package/dist/adapters/http/person-tools.js.map +1 -1
  36. package/dist/adapters/http/slack-routes.d.ts +15 -0
  37. package/dist/adapters/http/slack-routes.js +188 -0
  38. package/dist/adapters/http/slack-routes.js.map +1 -0
  39. package/dist/adapters/mcp/mcp-servers.js +22 -4
  40. package/dist/adapters/mcp/mcp-servers.js.map +1 -1
  41. package/dist/adapters/oauth/authorization-servers.d.ts +2 -0
  42. package/dist/adapters/oauth/authorization-servers.js +127 -0
  43. package/dist/adapters/oauth/authorization-servers.js.map +1 -0
  44. package/dist/adapters/oauth/party-sign-ins.d.ts +2 -0
  45. package/dist/adapters/oauth/party-sign-ins.js +152 -0
  46. package/dist/adapters/oauth/party-sign-ins.js.map +1 -0
  47. package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
  48. package/dist/adapters/prisma/fleet-forgetter.js +2 -2
  49. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
  50. package/dist/adapters/prisma/generated/browser.d.ts +35 -0
  51. package/dist/adapters/prisma/generated/client.d.ts +35 -0
  52. package/dist/adapters/prisma/generated/internal/class.d.ts +77 -0
  53. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  54. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  55. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +629 -1
  56. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +97 -1
  57. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  58. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +103 -0
  59. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +97 -1
  60. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  61. package/dist/adapters/prisma/generated/models/PartyGrant.d.ts +1276 -0
  62. package/dist/adapters/prisma/generated/models/PartyGrant.js +2 -0
  63. package/dist/adapters/prisma/generated/models/PartyGrant.js.map +1 -0
  64. package/dist/adapters/prisma/generated/models/PartySignInNotice.d.ts +1003 -0
  65. package/dist/adapters/prisma/generated/models/PartySignInNotice.js +2 -0
  66. package/dist/adapters/prisma/generated/models/PartySignInNotice.js.map +1 -0
  67. package/dist/adapters/prisma/generated/models/SlackApp.d.ts +1229 -0
  68. package/dist/adapters/prisma/generated/models/SlackApp.js +2 -0
  69. package/dist/adapters/prisma/generated/models/SlackApp.js.map +1 -0
  70. package/dist/adapters/prisma/generated/models/SlackEvent.d.ts +1232 -0
  71. package/dist/adapters/prisma/generated/models/SlackEvent.js +2 -0
  72. package/dist/adapters/prisma/generated/models/SlackEvent.js.map +1 -0
  73. package/dist/adapters/prisma/generated/models/SlackLink.d.ts +1126 -0
  74. package/dist/adapters/prisma/generated/models/SlackLink.js +2 -0
  75. package/dist/adapters/prisma/generated/models/SlackLink.js.map +1 -0
  76. package/dist/adapters/prisma/generated/models/SlackPost.d.ts +1174 -0
  77. package/dist/adapters/prisma/generated/models/SlackPost.js +2 -0
  78. package/dist/adapters/prisma/generated/models/SlackPost.js.map +1 -0
  79. package/dist/adapters/prisma/generated/models/SlackWorkspace.d.ts +1143 -0
  80. package/dist/adapters/prisma/generated/models/SlackWorkspace.js +2 -0
  81. package/dist/adapters/prisma/generated/models/SlackWorkspace.js.map +1 -0
  82. package/dist/adapters/prisma/generated/models.d.ts +7 -0
  83. package/dist/adapters/prisma/party-grants.d.ts +10 -0
  84. package/dist/adapters/prisma/party-grants.js +118 -0
  85. package/dist/adapters/prisma/party-grants.js.map +1 -0
  86. package/dist/adapters/prisma/party-store.js +21 -2
  87. package/dist/adapters/prisma/party-store.js.map +1 -1
  88. package/dist/adapters/prisma/sign-in-notices.d.ts +8 -0
  89. package/dist/adapters/prisma/sign-in-notices.js +22 -0
  90. package/dist/adapters/prisma/sign-in-notices.js.map +1 -0
  91. package/dist/adapters/prisma/slack-events.d.ts +8 -0
  92. package/dist/adapters/prisma/slack-events.js +55 -0
  93. package/dist/adapters/prisma/slack-events.js.map +1 -0
  94. package/dist/adapters/prisma/slack-links.d.ts +8 -0
  95. package/dist/adapters/prisma/slack-links.js +49 -0
  96. package/dist/adapters/prisma/slack-links.js.map +1 -0
  97. package/dist/adapters/prisma/slack-posts.d.ts +4 -0
  98. package/dist/adapters/prisma/slack-posts.js +38 -0
  99. package/dist/adapters/prisma/slack-posts.js.map +1 -0
  100. package/dist/adapters/prisma/slack-stores.d.ts +6 -0
  101. package/dist/adapters/prisma/slack-stores.js +115 -0
  102. package/dist/adapters/prisma/slack-stores.js.map +1 -0
  103. package/dist/adapters/slack/slack-call.d.ts +15 -0
  104. package/dist/adapters/slack/slack-call.js +41 -0
  105. package/dist/adapters/slack/slack-call.js.map +1 -0
  106. package/dist/adapters/slack/slack-messages.d.ts +4 -0
  107. package/dist/adapters/slack/slack-messages.js +53 -0
  108. package/dist/adapters/slack/slack-messages.js.map +1 -0
  109. package/dist/adapters/slack/slack-sign-in.d.ts +4 -0
  110. package/dist/adapters/slack/slack-sign-in.js +33 -0
  111. package/dist/adapters/slack/slack-sign-in.js.map +1 -0
  112. package/dist/adapters/slack/slack-tooling.d.ts +6 -0
  113. package/dist/adapters/slack/slack-tooling.js +68 -0
  114. package/dist/adapters/slack/slack-tooling.js.map +1 -0
  115. package/dist/adapters/trpc/router.d.ts +286 -10
  116. package/dist/adapters/trpc/router.js +263 -11
  117. package/dist/adapters/trpc/router.js.map +1 -1
  118. package/dist/app.d.ts +6 -0
  119. package/dist/app.js +225 -21
  120. package/dist/app.js.map +1 -1
  121. package/dist/bin/aeolus-gateway.js +2 -0
  122. package/dist/bin/aeolus-gateway.js.map +1 -1
  123. package/dist/config.d.ts +8 -0
  124. package/dist/config.js +4 -0
  125. package/dist/config.js.map +1 -1
  126. package/dist/core/connection/connect.d.ts +12 -0
  127. package/dist/core/connection/connect.js +11 -4
  128. package/dist/core/connection/connect.js.map +1 -1
  129. package/dist/core/connection/declare-gateway-scopes.d.ts +15 -0
  130. package/dist/core/connection/declare-gateway-scopes.js +23 -0
  131. package/dist/core/connection/declare-gateway-scopes.js.map +1 -0
  132. package/dist/core/connection/ports.d.ts +5 -0
  133. package/dist/core/mcp-out/grant-calls.d.ts +69 -0
  134. package/dist/core/mcp-out/grant-calls.js +98 -0
  135. package/dist/core/mcp-out/grant-calls.js.map +1 -0
  136. package/dist/core/mcp-out/hand-call.d.ts +6 -1
  137. package/dist/core/mcp-out/hand-call.js +23 -2
  138. package/dist/core/mcp-out/hand-call.js.map +1 -1
  139. package/dist/core/mcp-out/ports.d.ts +6 -2
  140. package/dist/core/mcp-out/state-party.d.ts +5 -2
  141. package/dist/core/mcp-out/state-party.js +7 -2
  142. package/dist/core/mcp-out/state-party.js.map +1 -1
  143. package/dist/core/oauth/exchange-token.d.ts +1 -0
  144. package/dist/core/oauth/exchange-token.js +4 -3
  145. package/dist/core/oauth/exchange-token.js.map +1 -1
  146. package/dist/core/oauth/read-authorization.d.ts +3 -3
  147. package/dist/core/oauth/read-authorization.js +6 -5
  148. package/dist/core/oauth/read-authorization.js.map +1 -1
  149. package/dist/core/parties/add-sign-in-server.d.ts +25 -0
  150. package/dist/core/parties/add-sign-in-server.js +70 -0
  151. package/dist/core/parties/add-sign-in-server.js.map +1 -0
  152. package/dist/core/parties/approve-party.d.ts +2 -2
  153. package/dist/core/parties/check-approving.d.ts +3 -3
  154. package/dist/core/parties/check-approving.js +2 -2
  155. package/dist/core/parties/check-approving.js.map +1 -1
  156. package/dist/core/parties/party.d.ts +3 -2
  157. package/dist/core/parties/party.js +4 -1
  158. package/dist/core/parties/party.js.map +1 -1
  159. package/dist/core/parties/ports.d.ts +49 -0
  160. package/dist/core/parties/read-party-tools.d.ts +5 -2
  161. package/dist/core/parties/read-party-tools.js +7 -2
  162. package/dist/core/parties/read-party-tools.js.map +1 -1
  163. package/dist/core/parties/retire-party.d.ts +5 -1
  164. package/dist/core/parties/retire-party.js +6 -1
  165. package/dist/core/parties/retire-party.js.map +1 -1
  166. package/dist/core/parties/shown-party.d.ts +2 -2
  167. package/dist/core/parties/sign-in-servers.d.ts +4 -0
  168. package/dist/core/parties/sign-in-servers.js +13 -0
  169. package/dist/core/parties/sign-in-servers.js.map +1 -0
  170. package/dist/core/parties/switch-tools.d.ts +3 -1
  171. package/dist/core/parties/switch-tools.js +5 -1
  172. package/dist/core/parties/switch-tools.js.map +1 -1
  173. package/dist/core/party-grants/approved-sign-in-party.d.ts +17 -0
  174. package/dist/core/party-grants/approved-sign-in-party.js +21 -0
  175. package/dist/core/party-grants/approved-sign-in-party.js.map +1 -0
  176. package/dist/core/party-grants/call-grant.d.ts +46 -0
  177. package/dist/core/party-grants/call-grant.js +30 -0
  178. package/dist/core/party-grants/call-grant.js.map +1 -0
  179. package/dist/core/party-grants/complete-party-sign-in.d.ts +52 -0
  180. package/dist/core/party-grants/complete-party-sign-in.js +95 -0
  181. package/dist/core/party-grants/complete-party-sign-in.js.map +1 -0
  182. package/dist/core/party-grants/end-account-grants.d.ts +18 -0
  183. package/dist/core/party-grants/end-account-grants.js +16 -0
  184. package/dist/core/party-grants/end-account-grants.js.map +1 -0
  185. package/dist/core/party-grants/end-grant.d.ts +23 -0
  186. package/dist/core/party-grants/end-grant.js +33 -0
  187. package/dist/core/party-grants/end-grant.js.map +1 -0
  188. package/dist/core/party-grants/end-party-grants.d.ts +19 -0
  189. package/dist/core/party-grants/end-party-grants.js +31 -0
  190. package/dist/core/party-grants/end-party-grants.js.map +1 -0
  191. package/dist/core/party-grants/end-retired-persons-grants.d.ts +19 -0
  192. package/dist/core/party-grants/end-retired-persons-grants.js +30 -0
  193. package/dist/core/party-grants/end-retired-persons-grants.js.map +1 -0
  194. package/dist/core/party-grants/keep-grants-alive.d.ts +18 -0
  195. package/dist/core/party-grants/keep-grants-alive.js +19 -0
  196. package/dist/core/party-grants/keep-grants-alive.js.map +1 -0
  197. package/dist/core/party-grants/list-grants.d.ts +30 -0
  198. package/dist/core/party-grants/list-grants.js +34 -0
  199. package/dist/core/party-grants/list-grants.js.map +1 -0
  200. package/dist/core/party-grants/listing-connection.d.ts +29 -0
  201. package/dist/core/party-grants/listing-connection.js +17 -0
  202. package/dist/core/party-grants/listing-connection.js.map +1 -0
  203. package/dist/core/party-grants/party-grant.d.ts +50 -0
  204. package/dist/core/party-grants/party-grant.js +26 -0
  205. package/dist/core/party-grants/party-grant.js.map +1 -0
  206. package/dist/core/party-grants/ports.d.ts +180 -0
  207. package/dist/core/party-grants/ports.js +2 -0
  208. package/dist/core/party-grants/ports.js.map +1 -0
  209. package/dist/core/party-grants/read-own-grant.d.ts +33 -0
  210. package/dist/core/party-grants/read-own-grant.js +23 -0
  211. package/dist/core/party-grants/read-own-grant.js.map +1 -0
  212. package/dist/core/party-grants/refresh-grant.d.ts +41 -0
  213. package/dist/core/party-grants/refresh-grant.js +58 -0
  214. package/dist/core/party-grants/refresh-grant.js.map +1 -0
  215. package/dist/core/party-grants/remove-grant.d.ts +21 -0
  216. package/dist/core/party-grants/remove-grant.js +25 -0
  217. package/dist/core/party-grants/remove-grant.js.map +1 -0
  218. package/dist/core/party-grants/remove-own-grant.d.ts +17 -0
  219. package/dist/core/party-grants/remove-own-grant.js +21 -0
  220. package/dist/core/party-grants/remove-own-grant.js.map +1 -0
  221. package/dist/core/party-grants/sign-in-party.d.ts +23 -0
  222. package/dist/core/party-grants/sign-in-party.js +22 -0
  223. package/dist/core/party-grants/sign-in-party.js.map +1 -0
  224. package/dist/core/party-grants/start-party-sign-in.d.ts +31 -0
  225. package/dist/core/party-grants/start-party-sign-in.js +31 -0
  226. package/dist/core/party-grants/start-party-sign-in.js.map +1 -0
  227. package/dist/core/party-grants/tell-sign-in-needed.d.ts +29 -0
  228. package/dist/core/party-grants/tell-sign-in-needed.js +27 -0
  229. package/dist/core/party-grants/tell-sign-in-needed.js.map +1 -0
  230. package/dist/core/people/ports.d.ts +23 -2
  231. package/dist/core/people/wake-person.d.ts +9 -2
  232. package/dist/core/people/wake-person.js +33 -9
  233. package/dist/core/people/wake-person.js.map +1 -1
  234. package/dist/core/shared/errors.d.ts +1 -1
  235. package/dist/core/shared/errors.js.map +1 -1
  236. package/dist/core/sign-in/start-sign-in.d.ts +4 -1
  237. package/dist/core/sign-in/start-sign-in.js +8 -2
  238. package/dist/core/sign-in/start-sign-in.js.map +1 -1
  239. package/dist/core/slack/answer-in-slack.d.ts +41 -0
  240. package/dist/core/slack/answer-in-slack.js +59 -0
  241. package/dist/core/slack/answer-in-slack.js.map +1 -0
  242. package/dist/core/slack/complete-install.d.ts +27 -0
  243. package/dist/core/slack/complete-install.js +36 -0
  244. package/dist/core/slack/complete-install.js.map +1 -0
  245. package/dist/core/slack/complete-link.d.ts +41 -0
  246. package/dist/core/slack/complete-link.js +64 -0
  247. package/dist/core/slack/complete-link.js.map +1 -0
  248. package/dist/core/slack/connect-slack.d.ts +34 -0
  249. package/dist/core/slack/connect-slack.js +54 -0
  250. package/dist/core/slack/connect-slack.js.map +1 -0
  251. package/dist/core/slack/disconnect-slack.d.ts +21 -0
  252. package/dist/core/slack/disconnect-slack.js +31 -0
  253. package/dist/core/slack/disconnect-slack.js.map +1 -0
  254. package/dist/core/slack/expose-ship.d.ts +35 -0
  255. package/dist/core/slack/expose-ship.js +59 -0
  256. package/dist/core/slack/expose-ship.js.map +1 -0
  257. package/dist/core/slack/follow-exposed-ships.d.ts +20 -0
  258. package/dist/core/slack/follow-exposed-ships.js +43 -0
  259. package/dist/core/slack/follow-exposed-ships.js.map +1 -0
  260. package/dist/core/slack/gateway-bot.d.ts +20 -0
  261. package/dist/core/slack/gateway-bot.js +22 -0
  262. package/dist/core/slack/gateway-bot.js.map +1 -0
  263. package/dist/core/slack/kept-slack-event.d.ts +32 -0
  264. package/dist/core/slack/kept-slack-event.js +5 -0
  265. package/dist/core/slack/kept-slack-event.js.map +1 -0
  266. package/dist/core/slack/list-exposable.d.ts +25 -0
  267. package/dist/core/slack/list-exposable.js +32 -0
  268. package/dist/core/slack/list-exposable.js.map +1 -0
  269. package/dist/core/slack/ports.d.ts +287 -0
  270. package/dist/core/slack/ports.js +2 -0
  271. package/dist/core/slack/ports.js.map +1 -0
  272. package/dist/core/slack/read-slack-link.d.ts +23 -0
  273. package/dist/core/slack/read-slack-link.js +20 -0
  274. package/dist/core/slack/read-slack-link.js.map +1 -0
  275. package/dist/core/slack/read-slack.d.ts +42 -0
  276. package/dist/core/slack/read-slack.js +35 -0
  277. package/dist/core/slack/read-slack.js.map +1 -0
  278. package/dist/core/slack/remove-bot.d.ts +24 -0
  279. package/dist/core/slack/remove-bot.js +33 -0
  280. package/dist/core/slack/remove-bot.js.map +1 -0
  281. package/dist/core/slack/rotate-configuration-tokens.d.ts +13 -0
  282. package/dist/core/slack/rotate-configuration-tokens.js +14 -0
  283. package/dist/core/slack/rotate-configuration-tokens.js.map +1 -0
  284. package/dist/core/slack/send-slack-events.d.ts +32 -0
  285. package/dist/core/slack/send-slack-events.js +106 -0
  286. package/dist/core/slack/send-slack-events.js.map +1 -0
  287. package/dist/core/slack/ship-bot.d.ts +23 -0
  288. package/dist/core/slack/ship-bot.js +25 -0
  289. package/dist/core/slack/ship-bot.js.map +1 -0
  290. package/dist/core/slack/show-all-in-slack.d.ts +16 -0
  291. package/dist/core/slack/show-all-in-slack.js +18 -0
  292. package/dist/core/slack/show-all-in-slack.js.map +1 -0
  293. package/dist/core/slack/show-in-slack.d.ts +38 -0
  294. package/dist/core/slack/show-in-slack.js +154 -0
  295. package/dist/core/slack/show-in-slack.js.map +1 -0
  296. package/dist/core/slack/slack-app.d.ts +77 -0
  297. package/dist/core/slack/slack-app.js +53 -0
  298. package/dist/core/slack/slack-app.js.map +1 -0
  299. package/dist/core/slack/slack-event.d.ts +51 -0
  300. package/dist/core/slack/slack-event.js +18 -0
  301. package/dist/core/slack/slack-event.js.map +1 -0
  302. package/dist/core/slack/slack-link.d.ts +20 -0
  303. package/dist/core/slack/slack-link.js +2 -0
  304. package/dist/core/slack/slack-link.js.map +1 -0
  305. package/dist/core/slack/slack-markdown.d.ts +13 -0
  306. package/dist/core/slack/slack-markdown.js +27 -0
  307. package/dist/core/slack/slack-markdown.js.map +1 -0
  308. package/dist/core/slack/slack-post-of.d.ts +27 -0
  309. package/dist/core/slack/slack-post-of.js +71 -0
  310. package/dist/core/slack/slack-post-of.js.map +1 -0
  311. package/dist/core/slack/slack-post.d.ts +40 -0
  312. package/dist/core/slack/slack-post.js +13 -0
  313. package/dist/core/slack/slack-post.js.map +1 -0
  314. package/dist/core/slack/slack-request.d.ts +17 -0
  315. package/dist/core/slack/slack-request.js +10 -0
  316. package/dist/core/slack/slack-request.js.map +1 -0
  317. package/dist/core/slack/slack-workspace.d.ts +36 -0
  318. package/dist/core/slack/slack-workspace.js +7 -0
  319. package/dist/core/slack/slack-workspace.js.map +1 -0
  320. package/dist/core/slack/start-install.d.ts +43 -0
  321. package/dist/core/slack/start-install.js +57 -0
  322. package/dist/core/slack/start-install.js.map +1 -0
  323. package/dist/core/slack/start-link.d.ts +32 -0
  324. package/dist/core/slack/start-link.js +46 -0
  325. package/dist/core/slack/start-link.js.map +1 -0
  326. package/dist/core/slack/stop-slack-link.d.ts +16 -0
  327. package/dist/core/slack/stop-slack-link.js +9 -0
  328. package/dist/core/slack/stop-slack-link.js.map +1 -0
  329. package/dist/core/slack/take-access-token.d.ts +25 -0
  330. package/dist/core/slack/take-access-token.js +45 -0
  331. package/dist/core/slack/take-access-token.js.map +1 -0
  332. package/dist/core/slack/take-slack-event.d.ts +49 -0
  333. package/dist/core/slack/take-slack-event.js +81 -0
  334. package/dist/core/slack/take-slack-event.js.map +1 -0
  335. package/dist/core/slack/unlink-slack.d.ts +9 -0
  336. package/dist/core/slack/unlink-slack.js +9 -0
  337. package/dist/core/slack/unlink-slack.js.map +1 -0
  338. package/dist/core/vault/credential.d.ts +34 -0
  339. package/dist/grant-worker.d.ts +20 -0
  340. package/dist/grant-worker.js +24 -0
  341. package/dist/grant-worker.js.map +1 -0
  342. package/dist/slack-event-worker.d.ts +21 -0
  343. package/dist/slack-event-worker.js +38 -0
  344. package/dist/slack-event-worker.js.map +1 -0
  345. package/dist/slack-token-worker.d.ts +19 -0
  346. package/dist/slack-token-worker.js +24 -0
  347. package/dist/slack-token-worker.js.map +1 -0
  348. package/package.json +3 -2
  349. package/src/adapters/prisma/migrations/20261027090000_slack_workspaces/migration.sql +30 -0
  350. package/src/adapters/prisma/migrations/20261027150000_slack_bots/migration.sql +6 -0
  351. package/src/adapters/prisma/migrations/20261027200000_slack_links/migration.sql +15 -0
  352. package/src/adapters/prisma/migrations/20261028090000_slack_events/migration.sql +18 -0
  353. package/src/adapters/prisma/migrations/20261028150000_slack_posts/migration.sql +25 -0
  354. package/src/adapters/prisma/migrations/20261028230000_party_grants/migration.sql +18 -0
  355. package/src/adapters/prisma/migrations/20261029080000_party_sign_in_notices/migration.sql +10 -0
  356. package/src/adapters/prisma/migrations/20261029120000_party_grants_lost/migration.sql +3 -0
  357. package/src/adapters/prisma/migrations/20261029130000_party_grants_refreshed/migration.sql +6 -0
  358. package/src/adapters/prisma/migrations/20261030090000_party_grants_of_account/migration.sql +2 -0
  359. package/src/adapters/prisma/migrations/20261030100000_slack_events_unmatched_answers/migration.sql +2 -0
  360. package/src/adapters/prisma/schema.prisma +148 -0
  361. package/web/.next/BUILD_ID +1 -1
  362. package/web/.next/app-path-routes-manifest.json +8 -1
  363. package/web/.next/build-manifest.json +51 -3
  364. package/web/.next/diagnostics/route-bundle-stats.json +145 -72
  365. package/web/.next/fallback-build-manifest.json +3 -3
  366. package/web/.next/prerender-manifest.json +67 -3
  367. package/web/.next/routes-manifest.json +42 -0
  368. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
  369. package/web/.next/server/app/(console)/gateway-off/page.js +6 -6
  370. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
  371. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
  372. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
  373. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +6 -6
  374. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
  375. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
  376. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +48 -8
  377. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +8 -8
  378. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  379. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  380. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +44 -4
  381. package/web/.next/server/app/(console)/outside-parties/[name]/page.js +8 -8
  382. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  383. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  384. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +48 -8
  385. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +8 -8
  386. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  387. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  388. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +46 -6
  389. package/web/.next/server/app/(console)/outside-parties/add/page.js +9 -8
  390. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  391. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  392. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +2 -2
  393. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +7 -7
  394. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  395. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  396. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
  397. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +7 -7
  398. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  399. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  400. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  401. package/web/.next/server/app/(console)/outside-parties/page.js +6 -6
  402. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  403. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  404. package/web/.next/server/app/(console)/overview/changes/route.js +3 -2
  405. package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
  406. package/web/.next/server/app/(console)/overview/focus/route.js +3 -2
  407. package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -1
  408. package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +27 -7
  409. package/web/.next/server/app/(console)/overview/page.js +8 -8
  410. package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  411. package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  412. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
  413. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +6 -6
  414. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
  415. package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
  416. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +8 -8
  417. package/web/.next/server/app/(console)/parties/page.js +7 -7
  418. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  419. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  420. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  421. package/web/.next/server/app/(console)/sign-in/failed/page.js +6 -6
  422. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  423. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  424. package/web/.next/server/app/(console)/slack/disconnect/page/app-paths-manifest.json +3 -0
  425. package/web/.next/server/app/(console)/slack/disconnect/page/build-manifest.json +23 -0
  426. package/web/.next/server/app/(console)/slack/disconnect/page/next-font-manifest.json +11 -0
  427. package/web/.next/server/app/(console)/slack/disconnect/page/react-loadable-manifest.json +1 -0
  428. package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +65 -0
  429. package/web/.next/server/app/(console)/slack/disconnect/page.js +22 -0
  430. package/web/.next/server/app/(console)/slack/disconnect/page.js.map +5 -0
  431. package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -0
  432. package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +3 -0
  433. package/web/.next/server/app/(console)/slack/expose/page/app-paths-manifest.json +3 -0
  434. package/web/.next/server/app/(console)/slack/expose/page/build-manifest.json +23 -0
  435. package/web/.next/server/app/(console)/slack/expose/page/next-font-manifest.json +11 -0
  436. package/web/.next/server/app/(console)/slack/expose/page/react-loadable-manifest.json +1 -0
  437. package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +65 -0
  438. package/web/.next/server/app/(console)/slack/expose/page.js +22 -0
  439. package/web/.next/server/app/(console)/slack/expose/page.js.map +5 -0
  440. package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -0
  441. package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +3 -0
  442. package/web/.next/server/app/(console)/slack/link/route/app-paths-manifest.json +3 -0
  443. package/web/.next/server/app/(console)/slack/link/route/build-manifest.json +12 -0
  444. package/web/.next/server/app/(console)/slack/link/route/server-reference-manifest.json +4 -0
  445. package/web/.next/server/app/(console)/slack/link/route.js +8 -0
  446. package/web/.next/server/app/(console)/slack/link/route.js.map +5 -0
  447. package/web/.next/server/app/(console)/slack/link/route.js.nft.json +1 -0
  448. package/web/.next/server/app/(console)/slack/link/route_client-reference-manifest.js +3 -0
  449. package/web/.next/server/app/(console)/slack/page/app-paths-manifest.json +3 -0
  450. package/web/.next/server/app/(console)/slack/page/build-manifest.json +23 -0
  451. package/web/.next/server/app/(console)/slack/page/next-font-manifest.json +11 -0
  452. package/web/.next/server/app/(console)/slack/page/react-loadable-manifest.json +1 -0
  453. package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +65 -0
  454. package/web/.next/server/app/(console)/slack/page.js +22 -0
  455. package/web/.next/server/app/(console)/slack/page.js.map +5 -0
  456. package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -0
  457. package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +3 -0
  458. package/web/.next/server/app/(console)/slack/remove/page/app-paths-manifest.json +3 -0
  459. package/web/.next/server/app/(console)/slack/remove/page/build-manifest.json +23 -0
  460. package/web/.next/server/app/(console)/slack/remove/page/next-font-manifest.json +11 -0
  461. package/web/.next/server/app/(console)/slack/remove/page/react-loadable-manifest.json +1 -0
  462. package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +65 -0
  463. package/web/.next/server/app/(console)/slack/remove/page.js +22 -0
  464. package/web/.next/server/app/(console)/slack/remove/page.js.map +5 -0
  465. package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -0
  466. package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +3 -0
  467. package/web/.next/server/app/_global-error/page.js +1 -1
  468. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  469. package/web/.next/server/app/_global-error.html +1 -1
  470. package/web/.next/server/app/_global-error.rsc +1 -1
  471. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  472. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  473. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  474. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  475. package/web/.next/server/app/_not-found/page.js +6 -6
  476. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  477. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  478. package/web/.next/server/app/apple-icon.png/route/app-paths-manifest.json +3 -0
  479. package/web/.next/server/app/apple-icon.png/route/build-manifest.json +12 -0
  480. package/web/.next/server/app/apple-icon.png/route.js +8 -0
  481. package/web/.next/server/app/apple-icon.png/route.js.map +5 -0
  482. package/web/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
  483. package/web/.next/server/app/apple-icon.png.body +0 -0
  484. package/web/.next/server/app/apple-icon.png.meta +1 -0
  485. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  486. package/web/.next/server/app/authorize/failed/page.js +5 -5
  487. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  488. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  489. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  490. package/web/.next/server/app/authorize/pick/page.js +4 -4
  491. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  492. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  493. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  494. package/web/.next/server/app/authorize/waiting/approval/page.js +6 -6
  495. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  496. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  497. package/web/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
  498. package/web/.next/server/app/icon.svg/route/build-manifest.json +12 -0
  499. package/web/.next/server/app/icon.svg/route.js +8 -0
  500. package/web/.next/server/app/icon.svg/route.js.map +5 -0
  501. package/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
  502. package/web/.next/server/app/icon.svg.body +19 -0
  503. package/web/.next/server/app/icon.svg.meta +1 -0
  504. package/web/.next/server/app-paths-manifest.json +8 -1
  505. package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js +315 -0
  506. package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js.map +1 -0
  507. package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js +315 -0
  508. package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js.map +1 -0
  509. package/web/.next/server/chunks/[root-of-the-server]__1tfyrijwfgqlk._.js +3 -0
  510. package/web/.next/server/chunks/[root-of-the-server]__1tfyrijwfgqlk._.js.map +1 -0
  511. package/web/.next/server/chunks/_0_um96p6psnqx._.js +57 -0
  512. package/web/.next/server/chunks/_0_um96p6psnqx._.js.map +1 -0
  513. package/web/.next/server/chunks/_0xw0b7avhvg75._.js +3 -0
  514. package/web/.next/server/chunks/_0xw0b7avhvg75._.js.map +1 -0
  515. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js +3 -0
  516. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js.map +1 -0
  517. package/web/.next/server/chunks/_1xf83h9norhws._.js +57 -0
  518. package/web/.next/server/chunks/_1xf83h9norhws._.js.map +1 -0
  519. package/web/.next/server/chunks/_20ne4s-e_jzxp._.js +3 -0
  520. package/web/.next/server/chunks/_20ne4s-e_jzxp._.js.map +1 -0
  521. package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.js +10 -0
  522. package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.js.map +1 -0
  523. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
  524. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
  525. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
  526. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
  527. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
  528. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
  529. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
  530. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
  531. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
  532. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
  533. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
  534. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
  535. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js +4 -0
  536. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -0
  537. package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js +3 -0
  538. package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js.map +1 -0
  539. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js +3 -0
  540. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js.map +1 -0
  541. package/web/.next/server/chunks/ssr/{[root-of-the-server]__14w0fxvc_of17._.js → [root-of-the-server]__07ba2bfe20c_p._.js} +2 -2
  542. package/web/.next/server/chunks/ssr/[root-of-the-server]__07ba2bfe20c_p._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js +4 -0
  544. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js.map +1 -0
  545. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0-og0bl8lr2xq._.js → [root-of-the-server]__0a8db18tyk__5._.js} +2 -2
  546. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0-og0bl8lr2xq._.js.map → [root-of-the-server]__0a8db18tyk__5._.js.map} +1 -1
  547. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js +3 -0
  548. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js.map +1 -0
  549. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js +3 -0
  550. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js.map +1 -0
  551. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js +3 -0
  552. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js.map +1 -0
  553. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js +4 -0
  554. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js.map +1 -0
  555. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
  556. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
  557. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js +3 -0
  558. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js.map +1 -0
  559. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js +3 -0
  560. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js.map +1 -0
  561. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1gb-3dttuacyz._.js → [root-of-the-server]__0y0jwufd7xjsv._.js} +1 -1
  562. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +4 -0
  563. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -0
  564. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +4 -0
  565. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -0
  566. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
  567. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
  568. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1m9atpy0vkbmj._.js → [root-of-the-server]__19ecatcacd6t9._.js} +1 -1
  569. package/web/.next/server/chunks/ssr/[root-of-the-server]__1aojrh3-9jh9r._.js +3 -0
  570. package/web/.next/server/chunks/ssr/[root-of-the-server]__1aojrh3-9jh9r._.js.map +1 -0
  571. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1w5swo8gmjyx6._.js → [root-of-the-server]__1kynqd8xcwg2b._.js} +2 -2
  572. package/web/.next/server/chunks/ssr/[root-of-the-server]__1kynqd8xcwg2b._.js.map +1 -0
  573. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js +3 -0
  574. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js.map +1 -0
  575. package/web/.next/server/chunks/ssr/{[root-of-the-server]__160zc0ja_jjnu._.js → [root-of-the-server]__1q14l5_4hp9h3._.js} +2 -2
  576. package/web/.next/server/chunks/ssr/[root-of-the-server]__1q14l5_4hp9h3._.js.map +1 -0
  577. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js +3 -0
  578. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js.map +1 -0
  579. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +4 -0
  580. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -0
  581. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js +3 -0
  582. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js.map +1 -0
  583. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js +3 -0
  584. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js.map +1 -0
  585. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js +3 -0
  586. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js.map +1 -0
  587. package/web/.next/server/chunks/ssr/_0-boiqan2j4tr._.js +3 -0
  588. package/web/.next/server/chunks/ssr/{_0w2ptjht34s6t._.js.map → _0-boiqan2j4tr._.js.map} +1 -1
  589. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  590. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  591. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +1 -1
  592. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
  593. package/web/.next/server/chunks/ssr/_0bizyb21i2sl8._.js +3 -0
  594. package/web/.next/server/chunks/ssr/{_00dg5cvqofspn._.js.map → _0bizyb21i2sl8._.js.map} +1 -1
  595. package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js +3 -0
  596. package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js.map +1 -0
  597. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
  598. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
  599. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  600. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  601. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  602. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  603. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
  604. package/web/.next/server/chunks/ssr/_1cnvrfjlqx00k._.js +3 -0
  605. package/web/.next/server/chunks/ssr/_1cnvrfjlqx00k._.js.map +1 -0
  606. package/web/.next/server/chunks/ssr/{_0bhvvyz0q_0ja._.js → _1e2o809f0ekry._.js} +2 -2
  607. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  608. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  609. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  610. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  611. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js +3 -0
  612. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js.map +1 -0
  613. package/web/.next/server/chunks/ssr/node_modules_0ettht2so2tkh._.js +3 -0
  614. package/web/.next/server/chunks/ssr/node_modules_0ettht2so2tkh._.js.map +1 -0
  615. package/web/.next/server/chunks/ssr/node_modules_0keape0zsobyj._.js +3 -0
  616. package/web/.next/server/chunks/ssr/node_modules_0keape0zsobyj._.js.map +1 -0
  617. package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js +3 -0
  618. package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js.map +1 -0
  619. package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js +3 -0
  620. package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js.map +1 -0
  621. package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1lbvjrzg8s2ox._.js +3 -0
  622. package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1lbvjrzg8s2ox._.js.map +1 -0
  623. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js +3 -0
  624. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js.map +1 -0
  625. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js +3 -0
  626. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js.map +1 -0
  627. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js +3 -0
  628. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js.map +1 -0
  629. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js +3 -0
  630. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js.map +1 -0
  631. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js +3 -0
  632. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js.map +1 -0
  633. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js +3 -0
  634. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js.map +1 -0
  635. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js +3 -0
  636. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js.map +1 -0
  637. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js +3 -0
  638. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js.map +1 -0
  639. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js +3 -0
  640. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js.map +1 -0
  641. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js +3 -0
  642. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js.map +1 -0
  643. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js +3 -0
  644. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js.map +1 -0
  645. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js +3 -0
  646. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js.map +1 -0
  647. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js +3 -0
  648. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js.map +1 -0
  649. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js +3 -0
  650. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js.map +1 -0
  651. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js +3 -0
  652. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js.map +1 -0
  653. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js +3 -0
  654. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js.map +1 -0
  655. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js +3 -0
  656. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js.map +1 -0
  657. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js +3 -0
  658. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js.map +1 -0
  659. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js +3 -0
  660. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js.map +1 -0
  661. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js +3 -0
  662. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js.map +1 -0
  663. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js +3 -0
  664. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js.map +1 -0
  665. package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js +3 -0
  666. package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js.map +1 -0
  667. package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js +3 -0
  668. package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js.map +1 -0
  669. package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js +3 -0
  670. package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js.map +1 -0
  671. package/web/.next/server/chunks/ssr/web_0qgev3ti257yj._.js +3 -0
  672. package/web/.next/server/chunks/ssr/{web_0_jk9eione6lx._.js.map → web_0qgev3ti257yj._.js.map} +1 -1
  673. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
  674. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
  675. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
  676. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
  677. package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js +3 -0
  678. package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js.map +1 -0
  679. package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js +3 -0
  680. package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js.map +1 -0
  681. package/web/.next/server/chunks/ssr/web_features_077oo3gzcibvf._.js +3 -0
  682. package/web/.next/server/chunks/ssr/web_features_077oo3gzcibvf._.js.map +1 -0
  683. package/web/.next/server/chunks/ssr/web_features_08yw0utky5j17._.js +3 -0
  684. package/web/.next/server/chunks/ssr/{web_features_19v3mlx8c_h1-._.js.map → web_features_08yw0utky5j17._.js.map} +1 -1
  685. package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js +3 -0
  686. package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js.map +1 -0
  687. package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js +3 -0
  688. package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js.map +1 -0
  689. package/web/.next/server/chunks/ssr/web_features_0mi9a9pdzkdji._.js +3 -0
  690. package/web/.next/server/chunks/ssr/web_features_0mi9a9pdzkdji._.js.map +1 -0
  691. package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js +3 -0
  692. package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js.map +1 -0
  693. package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js +3 -0
  694. package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js.map +1 -0
  695. package/web/.next/server/chunks/ssr/web_features_1m5g9a6mwrsd-._.js +3 -0
  696. package/web/.next/server/chunks/ssr/{web_features_085cv0gogrxxf._.js.map → web_features_1m5g9a6mwrsd-._.js.map} +1 -1
  697. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js +3 -0
  698. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js.map +1 -0
  699. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  700. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  701. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  702. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  703. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  704. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  705. package/web/.next/server/chunks/ssr/{web_features_forms_1d1jyea2jni9o._.js → web_features_forms_1muc8tmsxjj_k._.js} +2 -2
  706. package/web/.next/server/chunks/ssr/{web_features_forms_1d1jyea2jni9o._.js.map → web_features_forms_1muc8tmsxjj_k._.js.map} +1 -1
  707. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +1 -1
  708. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map +1 -1
  709. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  710. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  711. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
  712. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
  713. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  714. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  715. package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js +3 -0
  716. package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js.map +1 -0
  717. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  718. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
  719. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js +3 -0
  720. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js.map +1 -0
  721. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
  722. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
  723. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js +3 -0
  724. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js.map +1 -0
  725. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
  726. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
  727. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  728. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +3 -0
  729. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js.map +1 -0
  730. package/web/.next/server/chunks/web__next-internal_server_app_(console)_slack_link_route_actions_16zgisics858w.js +3 -0
  731. package/web/.next/server/chunks/web__next-internal_server_app_(console)_slack_link_route_actions_16zgisics858w.js.map +1 -0
  732. package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js +3 -0
  733. package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js.map +1 -0
  734. package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js +3 -0
  735. package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js.map +1 -0
  736. package/web/.next/server/middleware-build-manifest.js +51 -3
  737. package/web/.next/server/next-font-manifest.js +1 -1
  738. package/web/.next/server/next-font-manifest.json +16 -0
  739. package/web/.next/server/pages/500.html +1 -1
  740. package/web/.next/server/preview-props.json +3 -3
  741. package/web/.next/server/server-reference-manifest.js +1 -1
  742. package/web/.next/server/server-reference-manifest.json +264 -30
  743. package/web/.next/static/chunks/015ume9uk4hla.js +1 -0
  744. package/web/.next/static/chunks/0ji7rkz0ll9gh.js +1 -0
  745. package/web/.next/static/chunks/0nhopjmnw_dqt.js +1 -0
  746. package/web/.next/static/chunks/0psup8zn8e6k5.js +1 -0
  747. package/web/.next/static/chunks/0vlawcs6_kjs1.js +1 -0
  748. package/web/.next/static/chunks/0zbcy0_3jemrv.js +1 -0
  749. package/web/.next/static/chunks/1s8b8jpg4jai9.js +1 -0
  750. package/web/.next/static/chunks/20t1nmdiq805b.js +1 -0
  751. package/web/.next/static/chunks/26vlpatu47xtw.css +3 -0
  752. package/web/.next/static/chunks/2gghdkr64z9f9.js +1 -0
  753. package/web/.next/static/chunks/2s_dov6h7kus5.js +1 -0
  754. package/web/.next/static/chunks/{1jvae6c-4jwji.js → 2x86i673xcv4t.js} +1 -1
  755. package/web/.next/static/chunks/{1tgs1j0j-1qlh.js → 31-hltzmw_9fi.js} +1 -1
  756. package/web/.next/static/chunks/35bmc8wm29tr6.js +1 -0
  757. package/web/.next/static/chunks/3hvo3apdq-ckk.js +1 -0
  758. package/web/.next/static/chunks/3rxg2mdhxd6yt.js +1 -0
  759. package/web/.next/static/chunks/42cpzi5s1o44m.js +1 -0
  760. package/web/.next/static/media/apple-icon.3jccaq3p5-lh-.png +0 -0
  761. package/web/.next/static/media/icon.0h5hy2etdmq_n.svg +19 -0
  762. package/web/.next/trace +1 -1
  763. package/web/.next/trace-build +1 -1
  764. package/web/.next/types/routes.d.ts +7 -2
  765. package/web/.next/types/validator.ts +78 -0
  766. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js +0 -369
  767. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +0 -1
  768. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js +0 -3
  769. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js.map +0 -1
  770. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js +0 -3
  771. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js.map +0 -1
  772. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +0 -3
  773. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js.map +0 -1
  774. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js +0 -3
  775. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js.map +0 -1
  776. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +0 -3
  777. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js.map +0 -1
  778. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +0 -4
  779. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +0 -1
  780. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +0 -3
  781. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js.map +0 -1
  782. package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js +0 -4
  783. package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js.map +0 -1
  784. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +0 -3
  785. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js.map +0 -1
  786. package/web/.next/server/chunks/ssr/[root-of-the-server]__14w0fxvc_of17._.js.map +0 -1
  787. package/web/.next/server/chunks/ssr/[root-of-the-server]__160zc0ja_jjnu._.js.map +0 -1
  788. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js +0 -3
  789. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js.map +0 -1
  790. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +0 -4
  791. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js.map +0 -1
  792. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +0 -3
  793. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +0 -1
  794. package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js.map +0 -1
  795. package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.js +0 -3
  796. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js +0 -3
  797. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js.map +0 -1
  798. package/web/.next/server/chunks/ssr/_0w2ptjht34s6t._.js +0 -3
  799. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js +0 -3
  800. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js.map +0 -1
  801. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js +0 -3
  802. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js.map +0 -1
  803. package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js +0 -3
  804. package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js.map +0 -1
  805. package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js +0 -3
  806. package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js.map +0 -1
  807. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js +0 -3
  808. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js.map +0 -1
  809. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +0 -3
  810. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +0 -1
  811. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js +0 -3
  812. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js.map +0 -1
  813. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +0 -3
  814. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +0 -1
  815. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +0 -3
  816. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +0 -1
  817. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js +0 -3
  818. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js.map +0 -1
  819. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js +0 -3
  820. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js.map +0 -1
  821. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js +0 -3
  822. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js.map +0 -1
  823. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js +0 -3
  824. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js.map +0 -1
  825. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js +0 -3
  826. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js.map +0 -1
  827. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js +0 -3
  828. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js.map +0 -1
  829. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +0 -3
  830. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +0 -1
  831. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js +0 -3
  832. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js.map +0 -1
  833. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +0 -3
  834. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +0 -1
  835. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js +0 -3
  836. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js.map +0 -1
  837. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js +0 -3
  838. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js.map +0 -1
  839. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js +0 -3
  840. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js.map +0 -1
  841. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +0 -3
  842. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +0 -1
  843. package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js +0 -3
  844. package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js +0 -3
  845. package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js.map +0 -1
  846. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +0 -3
  847. package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js +0 -3
  848. package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js.map +0 -1
  849. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +0 -3
  850. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +0 -1
  851. package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js +0 -3
  852. package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js.map +0 -1
  853. package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +0 -3
  854. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +0 -3
  855. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +0 -1
  856. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js +0 -3
  857. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js.map +0 -1
  858. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js +0 -3
  859. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js.map +0 -1
  860. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +0 -3
  861. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +0 -1
  862. package/web/.next/static/chunks/0ke_2_la1glwa.js +0 -1
  863. package/web/.next/static/chunks/0ul9rtulfiph6.js +0 -1
  864. package/web/.next/static/chunks/19wvmglfgof0u.js +0 -1
  865. package/web/.next/static/chunks/1yj875esaesyh.css +0 -3
  866. package/web/.next/static/chunks/2d283cu3en9cy.js +0 -1
  867. package/web/.next/static/chunks/2hj3-kl1ggnu_.js +0 -1
  868. package/web/.next/static/chunks/2i3ydqqupow_x.js +0 -1
  869. package/web/.next/static/chunks/2n4bf_2r9lysd.js +0 -1
  870. package/web/.next/static/chunks/2ngyis59r3qta.js +0 -1
  871. package/web/.next/static/chunks/2riya89_i0je8.js +0 -1
  872. package/web/.next/static/chunks/3_pwm8b3mf4mf.js +0 -1
  873. package/web/.next/static/chunks/3bl-e3zhidrrz.js +0 -1
  874. package/web/.next/static/chunks/3x_8doukmdfpu.js +0 -1
  875. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1gb-3dttuacyz._.js.map → [root-of-the-server]__0y0jwufd7xjsv._.js.map} +0 -0
  876. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1m9atpy0vkbmj._.js.map → [root-of-the-server]__19ecatcacd6t9._.js.map} +0 -0
  877. /package/web/.next/server/chunks/ssr/{_0bhvvyz0q_0ja._.js.map → _1e2o809f0ekry._.js.map} +0 -0
  878. /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → yf1Q3fTAV4eQiroxoYbih}/_buildManifest.js +0 -0
  879. /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → yf1Q3fTAV4eQiroxoYbih}/_clientMiddlewareManifest.js +0 -0
  880. /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → yf1Q3fTAV4eQiroxoYbih}/_ssgManifest.js +0 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * An event Slack sends for one of the gateway's apps, as its door reads it:
3
+ * the event's type and the fields the gateway acts on, null where Slack
4
+ * sent none.
5
+ */
6
+ export interface SlackEventFields {
7
+ /** Slack's id of the event, the same on each of its retries. */
8
+ readonly eventId: string;
9
+ readonly type: string;
10
+ /** The workspace the event is in. */
11
+ readonly teamId: string;
12
+ readonly userId: string | null;
13
+ readonly channel: string | null;
14
+ /** im for a direct message with the bot. */
15
+ readonly channelType: string | null;
16
+ /** Set on an edit, a deletion, a join and the like; file_share on a new message with files. */
17
+ readonly subtype: string | null;
18
+ /** Set on a bot's own message. */
19
+ readonly botId: string | null;
20
+ /** The message's text in Slack's markup. */
21
+ readonly text: string;
22
+ /** The message's own timestamp, its id in the conversation. */
23
+ readonly ts: string | null;
24
+ /** The thread's first message, when the message is in a thread. */
25
+ readonly threadTs: string | null;
26
+ /** The files shared with it, each by its name and its link in Slack. */
27
+ readonly files: readonly SlackFile[];
28
+ }
29
+ export interface SlackFile {
30
+ readonly name: string;
31
+ readonly permalink: string;
32
+ }
33
+ /** A person's new message to a bot: who wrote it, in which workspace, where, and what. */
34
+ export interface PersonMessage {
35
+ readonly eventId: string;
36
+ readonly teamId: string;
37
+ readonly userId: string;
38
+ readonly channel: string;
39
+ readonly ts: string;
40
+ readonly threadTs: string | null;
41
+ readonly text: string;
42
+ readonly files: readonly SlackFile[];
43
+ }
44
+ /**
45
+ * The person's new message an event carries (gateway scopes 9.4 step 2): a
46
+ * direct message to the bot, or a mention of it in a channel. A bot's
47
+ * message (L21), an edit, a deletion or a join is none.
48
+ */
49
+ export declare function personMessageOf(event: SlackEventFields): PersonMessage | undefined;
50
+ /** Whether the event says the app is no longer in Slack (gateway scopes 9.2). */
51
+ export declare function isRemovedEvent(event: SlackEventFields): boolean;
@@ -0,0 +1,18 @@
1
+ /** The subtype of a new message with files; any other subtype is no new message. */
2
+ const FILE_SHARE = 'file_share';
3
+ /**
4
+ * The person's new message an event carries (gateway scopes 9.4 step 2): a
5
+ * direct message to the bot, or a mention of it in a channel. A bot's
6
+ * message (L21), an edit, a deletion or a join is none.
7
+ */
8
+ export function personMessageOf(event) {
9
+ const { eventId, type, teamId, userId, channel, channelType, subtype, botId, text, ts, threadTs, files } = event;
10
+ const isNew = (subtype === null || subtype === FILE_SHARE) && botId === null;
11
+ const isToBot = type === 'app_mention' || (type === 'message' && channelType === 'im');
12
+ return isNew && isToBot && userId !== null && channel !== null && ts !== null ? { eventId, teamId, userId, channel, ts, threadTs, text, files } : undefined;
13
+ }
14
+ /** Whether the event says the app is no longer in Slack (gateway scopes 9.2). */
15
+ export function isRemovedEvent(event) {
16
+ return event.type === 'app_uninstalled' || event.type === 'tokens_revoked';
17
+ }
18
+ //# sourceMappingURL=slack-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-event.js","sourceRoot":"","sources":["../../../src/core/slack/slack-event.ts"],"names":[],"mappings":"AA8CA,oFAAoF;AACpF,MAAM,UAAU,GAAG,YAAY,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAuB;IACrD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACjH,MAAM,KAAK,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,UAAU,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,KAAK,aAAa,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,CAAC,CAAC;IACvF,OAAO,KAAK,IAAI,OAAO,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9J,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,OAAO,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
2
+ /**
3
+ * A person's Slack account linked to their account in a fleet (gateway
4
+ * scopes 9.3), kept by the fleet, the Slack workspace and user, and the
5
+ * person ship their messages are: one Slack user to one account per fleet,
6
+ * one Slack user per account. A disabled account's link stops (0055).
7
+ */
8
+ export interface SlackLink {
9
+ readonly fleetId: FleetId;
10
+ readonly teamId: string;
11
+ readonly slackUserId: string;
12
+ /** The person's name in Slack as Sign in with Slack gave it. */
13
+ readonly slackName: string;
14
+ readonly accountId: string;
15
+ readonly personShipId: ShipId;
16
+ readonly linkedAt: Date;
17
+ readonly stoppedAt: Date | null;
18
+ /** Show everything that waits in Slack (B5): messages from ships that are not bots too, off until turned on (W8). */
19
+ readonly isShowingAll: boolean;
20
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=slack-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-link.js","sourceRoot":"","sources":["../../../src/core/slack/slack-link.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { SlackFile } from './slack-event.js';
2
+ /**
3
+ * A person's Slack message as the Markdown the gateway sends to the fleet
4
+ * (gateway scopes 9.4 step 5): the mention of the bot removed, Slack's bold
5
+ * and strike, links, people and channels turned into Markdown, Slack's
6
+ * escapes undone, and each shared file added as its Slack link. Italics and
7
+ * code read the same in both.
8
+ */
9
+ export declare function markdownOf(message: {
10
+ text: string;
11
+ botUserId: string;
12
+ files: readonly SlackFile[];
13
+ }): string;
@@ -0,0 +1,27 @@
1
+ /** Slack's escapes in a message's text, and what each stands for. */
2
+ const ESCAPES = [['&lt;', '<'], ['&gt;', '>'], ['&amp;', '&']];
3
+ /**
4
+ * A person's Slack message as the Markdown the gateway sends to the fleet
5
+ * (gateway scopes 9.4 step 5): the mention of the bot removed, Slack's bold
6
+ * and strike, links, people and channels turned into Markdown, Slack's
7
+ * escapes undone, and each shared file added as its Slack link. Italics and
8
+ * code read the same in both.
9
+ */
10
+ export function markdownOf(message) {
11
+ const { text, botUserId, files } = message;
12
+ let markdown = text
13
+ .replaceAll(new RegExp(`<@${botUserId}(\\|[^>]*)?>`, 'g'), '')
14
+ .replaceAll(/<@[A-Z0-9]+\|([^>]+)>/g, '@$1')
15
+ .replaceAll(/<@([A-Z0-9]+)>/g, '@$1')
16
+ .replaceAll(/<#[A-Z0-9]+\|([^>]+)>/g, '#$1')
17
+ .replaceAll(/<(https?:[^|>]+)\|([^>]+)>/g, '[$2]($1)')
18
+ .replaceAll(/<(https?:[^>]+)>/g, '$1')
19
+ .replaceAll(/(^|[\s(])\*([^*\n]+)\*(?=$|[\s).,!?:;])/g, '$1**$2**')
20
+ .replaceAll(/(^|[\s(])~([^~\n]+)~(?=$|[\s).,!?:;])/g, '$1~~$2~~');
21
+ for (const [escape, character] of ESCAPES) {
22
+ markdown = markdown.replaceAll(escape, character);
23
+ }
24
+ const links = files.map(({ name, permalink }) => `[${name}](${permalink})`);
25
+ return [markdown.trim(), ...links].filter((part) => part !== '').join('\n\n');
26
+ }
27
+ //# sourceMappingURL=slack-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-markdown.js","sourceRoot":"","sources":["../../../src/core/slack/slack-markdown.ts"],"names":[],"mappings":"AAEA,qEAAqE;AACrE,MAAM,OAAO,GAA2C,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAEvG;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,OAAyE;IAClG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC3C,IAAI,QAAQ,GAAG,IAAI;SAChB,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,SAAS,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;SAC7D,UAAU,CAAC,wBAAwB,EAAE,KAAK,CAAC;SAC3C,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC;SACpC,UAAU,CAAC,wBAAwB,EAAE,KAAK,CAAC;SAC3C,UAAU,CAAC,6BAA6B,EAAE,UAAU,CAAC;SACrD,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC;SACrC,UAAU,CAAC,0CAA0C,EAAE,UAAU,CAAC;SAClE,UAAU,CAAC,wCAAwC,EAAE,UAAU,CAAC,CAAC;IACpE,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,SAAS,GAAG,CAAC,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { PersonDelivery } from '../people/ports.js';
2
+ import type { SlackButton } from './ports.js';
3
+ /** The most a Slack message shows in full. */
4
+ export declare const MESSAGE_MAX_LENGTH = 40000;
5
+ /** The most one block of a Slack message shows. */
6
+ export declare const BLOCK_MAX_LENGTH = 3000;
7
+ /** What a delivery shows as in Slack: its text in Slack's markup and a button per option, or a link to the gateway for what Slack does not show in full. */
8
+ export type SlackShown = {
9
+ readonly kind: 'shown';
10
+ readonly text: string;
11
+ readonly buttons: readonly SlackButton[];
12
+ } | {
13
+ readonly kind: 'link';
14
+ readonly text: string;
15
+ };
16
+ /**
17
+ * What a delivery shows as in Slack (gateway scopes 9.5 step 2): text and
18
+ * Markdown as text, Markdown in Slack's markup; a question as its title and
19
+ * context, one button per option; JSON as a code block. Another content
20
+ * type, or more than Slack shows in full (40,000 characters, a block 3,000),
21
+ * goes as a link to the gateway's pages. The gateway's own bot heads it
22
+ * with the sender's name.
23
+ */
24
+ export declare function slackPostOf(delivery: PersonDelivery, shown: {
25
+ overviewUrl: string;
26
+ isHeadedBySender: boolean;
27
+ }): SlackShown;
@@ -0,0 +1,71 @@
1
+ import { QUESTION_CONTENT_TYPE, questionSchema } from '@aeolus-fleet/common';
2
+ /** The most a Slack message shows in full. */
3
+ export const MESSAGE_MAX_LENGTH = 40_000;
4
+ /** The most one block of a Slack message shows. */
5
+ export const BLOCK_MAX_LENGTH = 3_000;
6
+ /** The content type's essence, its parameters gone. */
7
+ function essenceOf(contentType) {
8
+ return (contentType.split(';')[0] ?? '').trim().toLowerCase();
9
+ }
10
+ /** Text as Slack shows it as it is: its control characters escaped. */
11
+ function escaped(text) {
12
+ return text.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
13
+ }
14
+ /** Markdown in Slack's markup: bold, strike, links and headings; italics, code and lists read the same. */
15
+ function slackMarkupOf(markdown) {
16
+ return escaped(markdown)
17
+ .replaceAll(/\[([^\]]+)\]\((https?:[^)\s]+)\)/g, '<$2|$1>')
18
+ .replaceAll(/\*\*([^*\n]+)\*\*/g, '*$1*')
19
+ .replaceAll(/__([^_\n]+)__/g, '*$1*')
20
+ .replaceAll(/~~([^~\n]+)~~/g, '~$1~')
21
+ .replaceAll(/^#{1,6} +(.+)$/gm, '*$1*');
22
+ }
23
+ /**
24
+ * What a delivery shows as in Slack (gateway scopes 9.5 step 2): text and
25
+ * Markdown as text, Markdown in Slack's markup; a question as its title and
26
+ * context, one button per option; JSON as a code block. Another content
27
+ * type, or more than Slack shows in full (40,000 characters, a block 3,000),
28
+ * goes as a link to the gateway's pages. The gateway's own bot heads it
29
+ * with the sender's name.
30
+ */
31
+ export function slackPostOf(delivery, shown) {
32
+ const { senderName, contentType, payload } = delivery;
33
+ const link = { kind: 'link', text: `${escaped(senderName)} sent you a message Slack does not show in full: <${shown.overviewUrl}|open it in the gateway>` };
34
+ const headed = (text) => (shown.isHeadedBySender ? `*${escaped(senderName)}*\n${text}` : text);
35
+ const essence = essenceOf(contentType);
36
+ let text;
37
+ let buttons = [];
38
+ if (essence === 'text/plain') {
39
+ text = escaped(payload);
40
+ }
41
+ else if (essence === 'text/markdown') {
42
+ text = slackMarkupOf(payload);
43
+ }
44
+ else if (essence === 'application/json') {
45
+ text = `\`\`\`${payload}\`\`\``;
46
+ }
47
+ else if (essence === QUESTION_CONTENT_TYPE) {
48
+ let parsed;
49
+ try {
50
+ parsed = JSON.parse(payload);
51
+ }
52
+ catch {
53
+ return link;
54
+ }
55
+ const question = questionSchema.safeParse(parsed);
56
+ if (!question.success) {
57
+ return link;
58
+ }
59
+ text = `*${escaped(question.data.title)}*\n${escaped(question.data.context)}`;
60
+ buttons = question.data.options.map(({ key, label }) => ({ text: label, option: key }));
61
+ if (headed(text).length > BLOCK_MAX_LENGTH) {
62
+ return link;
63
+ }
64
+ }
65
+ else {
66
+ return link;
67
+ }
68
+ const full = headed(text);
69
+ return full.length > MESSAGE_MAX_LENGTH ? link : { kind: 'shown', text: full, buttons };
70
+ }
71
+ //# sourceMappingURL=slack-post-of.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-post-of.js","sourceRoot":"","sources":["../../../src/core/slack/slack-post-of.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { DeliveryId, FleetId, MessageId, ShipId } from '@aeolus-fleet/common';
2
+ /**
3
+ * A fleet message as it is in Slack, for a person ship (gateway scopes
4
+ * 9.5): a delivery the gateway posts there, or the person's own message
5
+ * sent from there. It keeps where it is, by the bot's app, the conversation
6
+ * and its Slack message, so a reply goes into that conversation or thread
7
+ * and an answer in a thread replies to it. A delivery's post is kept before
8
+ * it is handed, then given its Slack message once Slack accepted it, then
9
+ * acknowledged: a post the gateway did not finish is finished at the next
10
+ * wake.
11
+ */
12
+ export interface SlackPost {
13
+ readonly fleetId: FleetId;
14
+ readonly personShipId: ShipId;
15
+ readonly messageId: MessageId;
16
+ /** The delivery posted; none for the person's own message. */
17
+ readonly deliveryId: DeliveryId | null;
18
+ /** The ship that sent the delivery; none for the person's own message. */
19
+ readonly senderShipId: ShipId | null;
20
+ readonly appId: string;
21
+ readonly channel: string;
22
+ /** The Slack message, once Slack accepted the post. */
23
+ readonly ts: string | null;
24
+ /** The thread it is in, if any. */
25
+ readonly threadTs: string | null;
26
+ /** A link posted for what Slack does not show in full: handed only, as a wake (B4). */
27
+ readonly isLinkOnly: boolean;
28
+ readonly ackedAt: Date | null;
29
+ }
30
+ /**
31
+ * Whether the post is a delivery not yet in Slack that starts a thread in
32
+ * the conversation: a reply in a thread there that matches no post may be
33
+ * under it, before the gateway keeps its Slack message.
34
+ */
35
+ export declare function isAwaitingSlackIn(post: SlackPost, conversation: {
36
+ appId: string;
37
+ channel: string;
38
+ }): boolean;
39
+ /** Whether the post is a delivery the gateway did not finish: not yet in Slack, or not yet acknowledged. */
40
+ export declare function isUnfinished(post: SlackPost): boolean;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Whether the post is a delivery not yet in Slack that starts a thread in
3
+ * the conversation: a reply in a thread there that matches no post may be
4
+ * under it, before the gateway keeps its Slack message.
5
+ */
6
+ export function isAwaitingSlackIn(post, conversation) {
7
+ return post.deliveryId !== null && post.ts === null && post.threadTs === null && post.appId === conversation.appId && post.channel === conversation.channel;
8
+ }
9
+ /** Whether the post is a delivery the gateway did not finish: not yet in Slack, or not yet acknowledged. */
10
+ export function isUnfinished(post) {
11
+ return post.deliveryId !== null && (post.ts === null || (!post.isLinkOnly && post.ackedAt === null));
12
+ }
13
+ //# sourceMappingURL=slack-post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-post.js","sourceRoot":"","sources":["../../../src/core/slack/slack-post.ts"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe,EAAE,YAAgD;IACjG,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC;AAC9J,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Clock } from '../shared/clock.js';
2
+ import type { SlackSignatures } from './ports.js';
3
+ import type { SlackApp } from './slack-app.js';
4
+ /** How far a request's timestamp may be from now (gateway scopes 9.4 step 1). */
5
+ export declare const EVENT_SKEW_MS: number;
6
+ /** A request Slack sends for one of the gateway's apps: its raw body as signed, its timestamp and its signature. */
7
+ export interface SignedRequest {
8
+ readonly body: string;
9
+ readonly timestamp: string;
10
+ readonly signature: string;
11
+ }
12
+ /** Whether Slack signed the request with the app's signing secret, its timestamp within 5 minutes of now: an event, or a press of a button. */
13
+ export declare function isSignedBy(app: SlackApp | undefined, signed: {
14
+ request: SignedRequest;
15
+ signatures: SlackSignatures;
16
+ clock: Clock;
17
+ }): app is SlackApp;
@@ -0,0 +1,10 @@
1
+ /** How far a request's timestamp may be from now (gateway scopes 9.4 step 1). */
2
+ export const EVENT_SKEW_MS = 5 * 60 * 1000;
3
+ const SECOND_MS = 1000;
4
+ /** Whether Slack signed the request with the app's signing secret, its timestamp within 5 minutes of now: an event, or a press of a button. */
5
+ export function isSignedBy(app, signed) {
6
+ const { request } = signed;
7
+ const sentAt = Number(request.timestamp) * SECOND_MS;
8
+ return app !== undefined && Number.isFinite(sentAt) && Math.abs(signed.clock.now().getTime() - sentAt) <= EVENT_SKEW_MS && signed.signatures.isSigned({ secret: app.signingSecret, ...request });
9
+ }
10
+ //# sourceMappingURL=slack-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-request.js","sourceRoot":"","sources":["../../../src/core/slack/slack-request.ts"],"names":[],"mappings":"AAIA,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,MAAM,SAAS,GAAG,IAAI,CAAC;AASvB,+IAA+I;AAC/I,MAAM,UAAU,UAAU,CAAC,GAAyB,EAAE,MAA6E;IACjI,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACrD,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,aAAa,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACnM,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
2
+ /**
3
+ * Slack's app configuration token (gateway scopes 9.1): an access token that
4
+ * makes and removes apps, for 12 hours, and a single-use refresh token that
5
+ * turns into the next pair. It belongs to the Slack user who issued it, and
6
+ * changes only the apps it made.
7
+ */
8
+ export interface ConfigurationToken {
9
+ readonly accessToken: string;
10
+ readonly refreshToken: string;
11
+ readonly expiresAt: Date;
12
+ }
13
+ /** How long before its access token ends the gateway rotates a configuration token, so a pass that runs late still finds it fresh. */
14
+ export declare const ROTATION_MARGIN_MS: number;
15
+ /** Whether the access token works for at least the rotation margin from now; else the gateway rotates it first. */
16
+ export declare function isFresh(token: ConfigurationToken, now: Date): boolean;
17
+ /**
18
+ * A fleet's Slack workspace, connected by an actor holding gateway:slack
19
+ * (one workspace per fleet; a workspace may serve several fleets, P-B4).
20
+ * Its name is known once Slack named it, at the gateway's bot's install.
21
+ * A refused configuration token stays refused until someone connects again:
22
+ * bots already installed keep working on their own bot tokens.
23
+ */
24
+ export interface SlackWorkspace {
25
+ readonly fleetId: FleetId;
26
+ readonly teamId: string;
27
+ readonly teamName: string | null;
28
+ /** The person ship of the account that connected it, by its name then. */
29
+ readonly connectedBy: {
30
+ readonly shipId: ShipId;
31
+ readonly name: string;
32
+ };
33
+ readonly connectedAt: Date;
34
+ readonly token: ConfigurationToken;
35
+ readonly isTokenRefused: boolean;
36
+ }
@@ -0,0 +1,7 @@
1
+ /** How long before its access token ends the gateway rotates a configuration token, so a pass that runs late still finds it fresh. */
2
+ export const ROTATION_MARGIN_MS = 60 * 60 * 1000;
3
+ /** Whether the access token works for at least the rotation margin from now; else the gateway rotates it first. */
4
+ export function isFresh(token, now) {
5
+ return token.expiresAt.getTime() - now.getTime() > ROTATION_MARGIN_MS;
6
+ }
7
+ //# sourceMappingURL=slack-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-workspace.js","sourceRoot":"","sources":["../../../src/core/slack/slack-workspace.ts"],"names":[],"mappings":"AAcA,sIAAsI;AACtI,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjD,mHAAmH;AACnH,MAAM,UAAU,OAAO,CAAC,KAAyB,EAAE,GAAS;IAC1D,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC;AACxE,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { Actor } from '../actors/authenticate-actor.js';
2
+ import type { ActorCredential, CredentialOf } from '../actors/credential-of.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { InstallStates, SlackApps, SlackShips, SlackTooling, SlackWorkspaces } from './ports.js';
7
+ import type { SlackAddresses } from './slack-app.js';
8
+ import { type TakeAccessToken } from './take-access-token.js';
9
+ /** How long an install the gateway started may take to come back. */
10
+ export declare const INSTALL_MS: number;
11
+ export type StartInstallRefusal = DomainError<'SLACK_SCOPE_NOT_HELD' | 'SLACK_NOT_CONNECTED' | 'SLACK_TOKEN_REFUSED' | 'SLACK_UNAVAILABLE' | 'NO_SUCH_BOT' | 'NOT_REACHABLE' | 'FLEET_UNAVAILABLE'>;
12
+ /** Install for the gateway's own bot, named after the fleet if it is made now, or for a ship's bot by its app id. */
13
+ export type StartInstall = (input: {
14
+ actor: Actor;
15
+ as: ActorCredential;
16
+ bot: {
17
+ kind: 'gateway';
18
+ fleetName: string;
19
+ } | {
20
+ kind: 'ship';
21
+ appId: string;
22
+ };
23
+ }) => Promise<Result<{
24
+ url: string;
25
+ }, StartInstallRefusal>>;
26
+ /**
27
+ * Use case: an actor holding gateway:slack presses Install (gateway scopes
28
+ * 9.1, 9.2): Slack's install screen for the bot, with the install's state
29
+ * sealed for ten minutes, and the bot waits for its install. For the
30
+ * gateway's bot, one Slack did not make at connect is made first; a ship's
31
+ * bot needs the actor within manage reach of the ship.
32
+ */
33
+ export declare function createStartInstall(deps: {
34
+ slack: Pick<SlackTooling, 'makeApp'>;
35
+ apps: Pick<SlackApps, 'gatewayBot' | 'find' | 'save'>;
36
+ workspaces: Pick<SlackWorkspaces, 'find'>;
37
+ takeAccessToken: TakeAccessToken;
38
+ states: InstallStates;
39
+ ships: Pick<SlackShips, 'read' | 'checkManage'>;
40
+ credentialOf: CredentialOf;
41
+ clock: Clock;
42
+ addresses: SlackAddresses;
43
+ }): StartInstall;
@@ -0,0 +1,57 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { SLACK_SCOPE } from './connect-slack.js';
4
+ import { gatewayBotOf } from './gateway-bot.js';
5
+ import { managedShipBot } from './ship-bot.js';
6
+ import { slackUnavailableMessage } from './take-access-token.js';
7
+ /** How long an install the gateway started may take to come back. */
8
+ export const INSTALL_MS = 10 * 60 * 1000;
9
+ /**
10
+ * Use case: an actor holding gateway:slack presses Install (gateway scopes
11
+ * 9.1, 9.2): Slack's install screen for the bot, with the install's state
12
+ * sealed for ten minutes, and the bot waits for its install. For the
13
+ * gateway's bot, one Slack did not make at connect is made first; a ship's
14
+ * bot needs the actor within manage reach of the ship.
15
+ */
16
+ export function createStartInstall(deps) {
17
+ return async ({ actor, as, bot: asked }) => {
18
+ if (!actor.scopes.includes(SLACK_SCOPE)) {
19
+ return refuse('SLACK_SCOPE_NOT_HELD', `Installing a Slack bot needs ${SLACK_SCOPE}`);
20
+ }
21
+ const { fleetId } = actor;
22
+ if ((await deps.workspaces.find(fleetId)) === undefined) {
23
+ return refuse('SLACK_NOT_CONNECTED', 'The fleet is connected to no Slack workspace');
24
+ }
25
+ let bot;
26
+ if (asked.kind === 'ship') {
27
+ const shipBot = await managedShipBot(deps, { actor, as, appId: asked.appId });
28
+ if (!shipBot.isOk) {
29
+ return shipBot;
30
+ }
31
+ bot = shipBot.value;
32
+ }
33
+ else {
34
+ bot = await deps.apps.gatewayBot(fleetId);
35
+ }
36
+ if (bot === undefined && asked.kind === 'gateway') {
37
+ const accessToken = await deps.takeAccessToken(fleetId);
38
+ if (!accessToken.isOk) {
39
+ return accessToken;
40
+ }
41
+ const made = await gatewayBotOf(deps, { fleetId, fleetName: asked.fleetName, accessToken: accessToken.value });
42
+ if (!made.isOk) {
43
+ return refuse('SLACK_UNAVAILABLE', made.error.kind === 'refused' ? `Slack did not make the gateway's bot (${made.error.error})` : slackUnavailableMessage(made.error));
44
+ }
45
+ bot = made.value;
46
+ }
47
+ if (bot === undefined) {
48
+ return refuse('NO_SUCH_BOT', "The gateway's bot is not made");
49
+ }
50
+ const now = deps.clock.now();
51
+ await deps.apps.save({ ...bot, installStartedAt: now });
52
+ const url = new URL(bot.installUrl);
53
+ url.searchParams.set('state', deps.states.seal({ fleetId, appId: bot.appId, expiresAt: new Date(now.getTime() + INSTALL_MS) }));
54
+ return ok({ url: url.toString() });
55
+ };
56
+ }
57
+ //# sourceMappingURL=start-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-install.js","sourceRoot":"","sources":["../../../src/core/slack/start-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { Actor } from '../actors/authenticate-actor.js';
2
+ import type { CrewPersonShip } from '../people/crew-person-ship.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { LinkStates, SlackApps, SlackSignIn, SlackWorkspaces } from './ports.js';
7
+ /** How long a link the gateway started may take to come back from Slack. */
8
+ export declare const LINK_MS: number;
9
+ export type StartLinkRefusal = DomainError<'NOT_A_PERSON' | 'SLACK_NOT_CONNECTED' | 'NO_SUCH_BOT' | 'FLEET_UNAVAILABLE'>;
10
+ export type StartLink = (input: {
11
+ actor: Actor;
12
+ }) => Promise<Result<{
13
+ url: string;
14
+ }, StartLinkRefusal>>;
15
+ /**
16
+ * Use case: a person presses Link Slack, on the Overview or in the answer a
17
+ * bot gave them in Slack (gateway scopes 9.3): Sign in with Slack through
18
+ * the fleet's own bot's app, for the fleet's workspace, with the link's
19
+ * state sealed for ten minutes. Only an account with a person ship in the
20
+ * fleet links. The gateway crews that ship now, with the account's token it
21
+ * holds only while the person is here, so their messages from Slack can be
22
+ * sent as it later.
23
+ */
24
+ export declare function createStartLink(deps: {
25
+ workspaces: Pick<SlackWorkspaces, 'find'>;
26
+ apps: Pick<SlackApps, 'gatewayBot'>;
27
+ signIn: Pick<SlackSignIn, 'authorizeUrl'>;
28
+ states: LinkStates;
29
+ crewPersonShip: CrewPersonShip;
30
+ clock: Clock;
31
+ linkRedirectUrl: string;
32
+ }): StartLink;
@@ -0,0 +1,46 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /** How long a link the gateway started may take to come back from Slack. */
4
+ export const LINK_MS = 10 * 60 * 1000;
5
+ const NO_PERSON_SHIP = 'Your account has no person ship in this fleet';
6
+ /**
7
+ * Use case: a person presses Link Slack, on the Overview or in the answer a
8
+ * bot gave them in Slack (gateway scopes 9.3): Sign in with Slack through
9
+ * the fleet's own bot's app, for the fleet's workspace, with the link's
10
+ * state sealed for ten minutes. Only an account with a person ship in the
11
+ * fleet links. The gateway crews that ship now, with the account's token it
12
+ * holds only while the person is here, so their messages from Slack can be
13
+ * sent as it later.
14
+ */
15
+ export function createStartLink(deps) {
16
+ return async ({ actor }) => {
17
+ if (actor.kind !== 'account' || actor.personShipId === null || actor.accountToken === null) {
18
+ return refuse('NOT_A_PERSON', NO_PERSON_SHIP);
19
+ }
20
+ const { fleetId, accountId, personShipId, accountToken } = actor;
21
+ const workspace = await deps.workspaces.find(fleetId);
22
+ if (workspace === undefined) {
23
+ return refuse('SLACK_NOT_CONNECTED', 'The fleet is connected to no Slack workspace');
24
+ }
25
+ const bot = await deps.apps.gatewayBot(fleetId);
26
+ if (bot === undefined) {
27
+ return refuse('NO_SUCH_BOT', "The fleet's own Slack bot is not made");
28
+ }
29
+ const crewed = await deps.crewPersonShip({ fleetId, signedIn: { accountToken, personShipId } });
30
+ if (!crewed.isOk) {
31
+ switch (crewed.error.kind) {
32
+ case 'noPersonShip':
33
+ return refuse('NOT_A_PERSON', NO_PERSON_SHIP);
34
+ case 'fleetRefused':
35
+ return refuse('FLEET_UNAVAILABLE', `The fleet did not crew your person ship: ${crewed.error.message}`);
36
+ case 'signedOut':
37
+ case 'pagasaeUnavailable':
38
+ case 'notConnected':
39
+ return refuse('FLEET_UNAVAILABLE', 'The fleet did not crew your person ship: try again in a moment');
40
+ }
41
+ }
42
+ const state = deps.states.seal({ fleetId, accountId, personShipId, expiresAt: new Date(deps.clock.now().getTime() + LINK_MS) });
43
+ return ok({ url: deps.signIn.authorizeUrl({ clientId: bot.clientId, redirectUrl: deps.linkRedirectUrl, state, teamId: workspace.teamId }) });
44
+ };
45
+ }
46
+ //# sourceMappingURL=start-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-link.js","sourceRoot":"","sources":["../../../src/core/slack/start-link.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC,MAAM,cAAc,GAAG,+CAA+C,CAAC;AAMvE;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAQ/B;IACC,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC3F,OAAO,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QACjE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,qBAAqB,EAAE,8CAA8C,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,aAAa,EAAE,uCAAuC,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,QAAQ,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC1B,KAAK,cAAc;oBACjB,OAAO,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;gBAChD,KAAK,cAAc;oBACjB,OAAO,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzG,KAAK,WAAW,CAAC;gBACjB,KAAK,oBAAoB,CAAC;gBAC1B,KAAK,cAAc;oBACjB,OAAO,MAAM,CAAC,mBAAmB,EAAE,gEAAgE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAChI,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/I,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { Clock } from '../shared/clock.js';
3
+ import type { SlackLinks } from './ports.js';
4
+ export type StopSlackLink = (account: {
5
+ fleetId: FleetId;
6
+ accountId: string;
7
+ }) => Promise<void>;
8
+ /**
9
+ * Use case: pagasae disabled the account (0055), so its Slack link stops
10
+ * (gateway scopes 9.3). It is kept, stopped from when it first stopped, so
11
+ * its Slack user is answered that the account cannot message the fleet now.
12
+ */
13
+ export declare function createStopSlackLink(deps: {
14
+ links: Pick<SlackLinks, 'stop'>;
15
+ clock: Clock;
16
+ }): StopSlackLink;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Use case: pagasae disabled the account (0055), so its Slack link stops
3
+ * (gateway scopes 9.3). It is kept, stopped from when it first stopped, so
4
+ * its Slack user is answered that the account cannot message the fleet now.
5
+ */
6
+ export function createStopSlackLink(deps) {
7
+ return ({ fleetId, accountId }) => deps.links.stop(fleetId, { accountId, at: deps.clock.now() });
8
+ }
9
+ //# sourceMappingURL=stop-slack-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-slack-link.js","sourceRoot":"","sources":["../../../src/core/slack/stop-slack-link.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAuD;IACzF,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACnG,CAAC"}