@aeolus-fleet/gateway 0.35.0 → 0.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (732) hide show
  1. package/README.md +12 -9
  2. package/dist/adapters/fleet/core-version.d.ts +1 -1
  3. package/dist/adapters/fleet/core-version.js +1 -1
  4. package/dist/adapters/fleet/rest-fleet-door.js +51 -7
  5. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  6. package/dist/adapters/http/front-door.d.ts +1 -1
  7. package/dist/adapters/http/front-door.js +5 -3
  8. package/dist/adapters/http/front-door.js.map +1 -1
  9. package/dist/adapters/http/person-tools.js +27 -9
  10. package/dist/adapters/http/person-tools.js.map +1 -1
  11. package/dist/adapters/http/slack-routes.d.ts +2 -0
  12. package/dist/adapters/http/slack-routes.js +11 -10
  13. package/dist/adapters/http/slack-routes.js.map +1 -1
  14. package/dist/adapters/pagasae/email-channel.d.ts +1 -2
  15. package/dist/adapters/pagasae/email-channel.js +3 -3
  16. package/dist/adapters/pagasae/email-channel.js.map +1 -1
  17. package/dist/adapters/prisma/basket-entries.d.ts +4 -0
  18. package/dist/adapters/prisma/basket-entries.js +53 -0
  19. package/dist/adapters/prisma/basket-entries.js.map +1 -0
  20. package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
  21. package/dist/adapters/prisma/fleet-forgetter.js +2 -2
  22. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
  23. package/dist/adapters/prisma/generated/browser.d.ts +15 -4
  24. package/dist/adapters/prisma/generated/client.d.ts +15 -4
  25. package/dist/adapters/prisma/generated/internal/class.d.ts +26 -4
  26. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  27. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  28. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +228 -43
  29. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +42 -9
  30. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  31. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +42 -7
  32. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +42 -9
  33. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  34. package/dist/adapters/prisma/generated/models/BasketEntry.d.ts +1303 -0
  35. package/dist/adapters/prisma/generated/models/BasketEntry.js +2 -0
  36. package/dist/adapters/prisma/generated/models/BasketEntry.js.map +1 -0
  37. package/dist/adapters/prisma/generated/models/ItemOutcome.d.ts +1106 -0
  38. package/dist/adapters/prisma/generated/models/ItemOutcome.js +2 -0
  39. package/dist/adapters/prisma/generated/models/ItemOutcome.js.map +1 -0
  40. package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +125 -1
  41. package/dist/adapters/prisma/generated/models/PartySignInNotice.d.ts +32 -1
  42. package/dist/adapters/prisma/generated/models/Route.d.ts +1038 -0
  43. package/dist/adapters/prisma/generated/models/Route.js +2 -0
  44. package/dist/adapters/prisma/generated/models/Route.js.map +1 -0
  45. package/dist/adapters/prisma/generated/models/SlackLink.d.ts +1 -32
  46. package/dist/adapters/prisma/generated/models/SlackPost.d.ts +33 -58
  47. package/dist/adapters/prisma/generated/models.d.ts +3 -1
  48. package/dist/adapters/prisma/item-outcomes.d.ts +4 -0
  49. package/dist/adapters/prisma/item-outcomes.js +28 -0
  50. package/dist/adapters/prisma/item-outcomes.js.map +1 -0
  51. package/dist/adapters/prisma/opened-deliveries.js +4 -0
  52. package/dist/adapters/prisma/opened-deliveries.js.map +1 -1
  53. package/dist/adapters/prisma/routes.d.ts +4 -0
  54. package/dist/adapters/prisma/routes.js +19 -0
  55. package/dist/adapters/prisma/routes.js.map +1 -0
  56. package/dist/adapters/prisma/sign-in-notices.js +11 -5
  57. package/dist/adapters/prisma/sign-in-notices.js.map +1 -1
  58. package/dist/adapters/prisma/slack-links.js +0 -4
  59. package/dist/adapters/prisma/slack-links.js.map +1 -1
  60. package/dist/adapters/prisma/slack-posts.js +37 -3
  61. package/dist/adapters/prisma/slack-posts.js.map +1 -1
  62. package/dist/adapters/slack/slack-messages.d.ts +2 -0
  63. package/dist/adapters/slack/slack-messages.js +29 -3
  64. package/dist/adapters/slack/slack-messages.js.map +1 -1
  65. package/dist/adapters/trpc/router.d.ts +88 -20
  66. package/dist/adapters/trpc/router.js +47 -18
  67. package/dist/adapters/trpc/router.js.map +1 -1
  68. package/dist/adapters/web-push/web-push.js +1 -1
  69. package/dist/adapters/web-push/web-push.js.map +1 -1
  70. package/dist/app.d.ts +7 -0
  71. package/dist/app.js +88 -22
  72. package/dist/app.js.map +1 -1
  73. package/dist/bin/aeolus-gateway.js +1 -0
  74. package/dist/bin/aeolus-gateway.js.map +1 -1
  75. package/dist/config.d.ts +8 -1
  76. package/dist/config.js +21 -0
  77. package/dist/config.js.map +1 -1
  78. package/dist/core/account-sign-in/start-account-sign-in.d.ts +1 -1
  79. package/dist/core/account-sign-in/start-account-sign-in.js +1 -1
  80. package/dist/core/account-sign-in/start-account-sign-in.js.map +1 -1
  81. package/dist/core/mcp-in/collect-replies.d.ts +2 -0
  82. package/dist/core/mcp-in/collect-replies.js +11 -3
  83. package/dist/core/mcp-in/collect-replies.js.map +1 -1
  84. package/dist/core/mcp-in/ports.d.ts +2 -1
  85. package/dist/core/mcp-out/run-party.d.ts +3 -1
  86. package/dist/core/mcp-out/run-party.js +9 -2
  87. package/dist/core/mcp-out/run-party.js.map +1 -1
  88. package/dist/core/party-grants/complete-party-sign-in.d.ts +5 -3
  89. package/dist/core/party-grants/complete-party-sign-in.js +7 -3
  90. package/dist/core/party-grants/complete-party-sign-in.js.map +1 -1
  91. package/dist/core/party-grants/ports.d.ts +17 -3
  92. package/dist/core/party-grants/tell-sign-in-needed.d.ts +9 -6
  93. package/dist/core/party-grants/tell-sign-in-needed.js +28 -12
  94. package/dist/core/party-grants/tell-sign-in-needed.js.map +1 -1
  95. package/dist/core/people/answer-delivery.d.ts +9 -13
  96. package/dist/core/people/answer-delivery.js +23 -6
  97. package/dist/core/people/answer-delivery.js.map +1 -1
  98. package/dist/core/people/basket.d.ts +104 -0
  99. package/dist/core/people/basket.js +42 -0
  100. package/dist/core/people/basket.js.map +1 -0
  101. package/dist/core/people/count-basket.d.ts +16 -0
  102. package/dist/core/people/count-basket.js +14 -0
  103. package/dist/core/people/count-basket.js.map +1 -0
  104. package/dist/core/people/done-delivery.d.ts +21 -13
  105. package/dist/core/people/done-delivery.js +34 -4
  106. package/dist/core/people/done-delivery.js.map +1 -1
  107. package/dist/core/people/finish-own-step.d.ts +27 -0
  108. package/dist/core/people/finish-own-step.js +67 -0
  109. package/dist/core/people/finish-own-step.js.map +1 -0
  110. package/dist/core/people/inbox-entry.js +1 -1
  111. package/dist/core/people/inbox-entry.js.map +1 -1
  112. package/dist/core/people/item-job.d.ts +9 -0
  113. package/dist/core/people/item-job.js +38 -0
  114. package/dist/core/people/item-job.js.map +1 -0
  115. package/dist/core/people/item-outcome.d.ts +37 -0
  116. package/dist/core/people/item-outcome.js +21 -0
  117. package/dist/core/people/item-outcome.js.map +1 -0
  118. package/dist/core/people/item-state.d.ts +10 -0
  119. package/dist/core/people/item-state.js +17 -0
  120. package/dist/core/people/item-state.js.map +1 -0
  121. package/dist/core/people/open-delivery.d.ts +29 -14
  122. package/dist/core/people/open-delivery.js +108 -19
  123. package/dist/core/people/open-delivery.js.map +1 -1
  124. package/dist/core/people/opened-of.d.ts +30 -9
  125. package/dist/core/people/opened-of.js +25 -4
  126. package/dist/core/people/opened-of.js.map +1 -1
  127. package/dist/core/people/person-crew.d.ts +5 -1
  128. package/dist/core/people/person-crew.js +7 -0
  129. package/dist/core/people/person-crew.js.map +1 -1
  130. package/dist/core/people/ports.d.ts +42 -19
  131. package/dist/core/people/put-in-basket.d.ts +39 -0
  132. package/dist/core/people/put-in-basket.js +57 -0
  133. package/dist/core/people/put-in-basket.js.map +1 -0
  134. package/dist/core/people/read-basket.d.ts +54 -0
  135. package/dist/core/people/read-basket.js +57 -0
  136. package/dist/core/people/read-basket.js.map +1 -0
  137. package/dist/core/people/read-bridge-home.d.ts +47 -0
  138. package/dist/core/people/read-bridge-home.js +53 -0
  139. package/dist/core/people/read-bridge-home.js.map +1 -0
  140. package/dist/core/people/read-inbox.d.ts +11 -6
  141. package/dist/core/people/read-inbox.js +17 -10
  142. package/dist/core/people/read-inbox.js.map +1 -1
  143. package/dist/core/people/read-record.d.ts +48 -0
  144. package/dist/core/people/read-record.js +44 -0
  145. package/dist/core/people/read-record.js.map +1 -0
  146. package/dist/core/people/read-routing.d.ts +26 -0
  147. package/dist/core/people/read-routing.js +22 -0
  148. package/dist/core/people/read-routing.js.map +1 -0
  149. package/dist/core/people/read-wake-channels.d.ts +7 -8
  150. package/dist/core/people/read-wake-channels.js +4 -4
  151. package/dist/core/people/read-wake-channels.js.map +1 -1
  152. package/dist/core/people/remove-from-basket.d.ts +20 -0
  153. package/dist/core/people/remove-from-basket.js +52 -0
  154. package/dist/core/people/remove-from-basket.js.map +1 -0
  155. package/dist/core/people/routing.d.ts +50 -0
  156. package/dist/core/people/routing.js +35 -0
  157. package/dist/core/people/routing.js.map +1 -0
  158. package/dist/core/people/send-basket.d.ts +40 -0
  159. package/dist/core/people/send-basket.js +60 -0
  160. package/dist/core/people/send-basket.js.map +1 -0
  161. package/dist/core/people/send-stored-answers.d.ts +33 -0
  162. package/dist/core/people/send-stored-answers.js +96 -0
  163. package/dist/core/people/send-stored-answers.js.map +1 -0
  164. package/dist/core/people/stale-question.d.ts +28 -0
  165. package/dist/core/people/stale-question.js +26 -0
  166. package/dist/core/people/stale-question.js.map +1 -0
  167. package/dist/core/people/step-outcome.d.ts +18 -0
  168. package/dist/core/people/step-outcome.js +18 -0
  169. package/dist/core/people/step-outcome.js.map +1 -0
  170. package/dist/core/people/turn-route.d.ts +34 -0
  171. package/dist/core/people/turn-route.js +42 -0
  172. package/dist/core/people/turn-route.js.map +1 -0
  173. package/dist/core/people/wake-person.d.ts +15 -7
  174. package/dist/core/people/wake-person.js +54 -28
  175. package/dist/core/people/wake-person.js.map +1 -1
  176. package/dist/core/people/web-push-channel.d.ts +2 -2
  177. package/dist/core/people/web-push-channel.js +3 -3
  178. package/dist/core/people/web-push-channel.js.map +1 -1
  179. package/dist/core/requests/ask-owners.d.ts +1 -1
  180. package/dist/core/requests/ask-owners.js +4 -4
  181. package/dist/core/requests/ask-owners.js.map +1 -1
  182. package/dist/core/requests/list-mine.d.ts +1 -1
  183. package/dist/core/requests/list-mine.js +1 -1
  184. package/dist/core/requests/list-to-decide.d.ts +1 -1
  185. package/dist/core/requests/list-to-decide.js +1 -1
  186. package/dist/core/requests/list-to-decide.js.map +1 -1
  187. package/dist/core/shared/errors.d.ts +1 -1
  188. package/dist/core/shared/errors.js.map +1 -1
  189. package/dist/core/slack/answer-in-slack.d.ts +18 -15
  190. package/dist/core/slack/answer-in-slack.js +39 -20
  191. package/dist/core/slack/answer-in-slack.js.map +1 -1
  192. package/dist/core/slack/complete-link.js +3 -3
  193. package/dist/core/slack/complete-link.js.map +1 -1
  194. package/dist/core/slack/edit-slack-posts.d.ts +23 -0
  195. package/dist/core/slack/edit-slack-posts.js +49 -0
  196. package/dist/core/slack/edit-slack-posts.js.map +1 -0
  197. package/dist/core/slack/ports.d.ts +28 -9
  198. package/dist/core/slack/read-slack-link.d.ts +2 -3
  199. package/dist/core/slack/read-slack-link.js +2 -2
  200. package/dist/core/slack/read-slack-link.js.map +1 -1
  201. package/dist/core/slack/see-in-slack.d.ts +34 -0
  202. package/dist/core/slack/see-in-slack.js +48 -0
  203. package/dist/core/slack/see-in-slack.js.map +1 -0
  204. package/dist/core/slack/send-slack-events.js +1 -1
  205. package/dist/core/slack/send-slack-events.js.map +1 -1
  206. package/dist/core/slack/show-in-slack.d.ts +20 -15
  207. package/dist/core/slack/show-in-slack.js +36 -45
  208. package/dist/core/slack/show-in-slack.js.map +1 -1
  209. package/dist/core/slack/slack-link.d.ts +0 -2
  210. package/dist/core/slack/slack-post-of.d.ts +9 -9
  211. package/dist/core/slack/slack-post-of.js +12 -3
  212. package/dist/core/slack/slack-post-of.js.map +1 -1
  213. package/dist/core/slack/slack-post.d.ts +13 -7
  214. package/dist/core/slack/slack-post.js +2 -2
  215. package/dist/core/slack/slack-post.js.map +1 -1
  216. package/dist/core/slack/slack-press.d.ts +45 -0
  217. package/dist/core/slack/slack-press.js +26 -0
  218. package/dist/core/slack/slack-press.js.map +1 -0
  219. package/dist/core/slack/start-link.d.ts +1 -1
  220. package/dist/core/slack/start-link.js +1 -1
  221. package/dist/core/slack/unlink-slack.d.ts +1 -1
  222. package/dist/core/slack/unlink-slack.js +1 -1
  223. package/dist/core/slack/unlink-slack.js.map +1 -1
  224. package/dist/person-waiters.js +3 -1
  225. package/dist/person-waiters.js.map +1 -1
  226. package/dist/round-worker.d.ts +23 -0
  227. package/dist/round-worker.js +38 -0
  228. package/dist/round-worker.js.map +1 -0
  229. package/package.json +3 -3
  230. package/src/adapters/prisma/migrations/20261101090000_item_outcomes/migration.sql +12 -0
  231. package/src/adapters/prisma/migrations/20261101091000_opened_deliveries_content_type/migration.sql +2 -0
  232. package/src/adapters/prisma/migrations/20261101120000_opened_deliveries_questions/migration.sql +3 -0
  233. package/src/adapters/prisma/migrations/20261101150000_basket_entries/migration.sql +25 -0
  234. package/src/adapters/prisma/migrations/20261101180000_opened_deliveries_steps/migration.sql +2 -0
  235. package/src/adapters/prisma/migrations/20261101181000_party_sign_in_notices_steps/migration.sql +2 -0
  236. package/src/adapters/prisma/migrations/20261102090000_routes/migration.sql +11 -0
  237. package/src/adapters/prisma/migrations/20261102091000_slack_posts_unacknowledged/migration.sql +3 -0
  238. package/src/adapters/prisma/migrations/20261102092000_slack_links_routed/migration.sql +2 -0
  239. package/src/adapters/prisma/migrations/20261102093000_email_channels_routed/migration.sql +2 -0
  240. package/src/adapters/prisma/migrations/20261103090000_slack_posts_edited/migration.sql +5 -0
  241. package/src/adapters/prisma/schema.prisma +71 -15
  242. package/web/.next/BUILD_ID +1 -1
  243. package/web/.next/app-path-routes-manifest.json +8 -4
  244. package/web/.next/build-manifest.json +127 -79
  245. package/web/.next/diagnostics/route-bundle-stats.json +215 -143
  246. package/web/.next/fallback-build-manifest.json +3 -3
  247. package/web/.next/prerender-manifest.json +3 -3
  248. package/web/.next/routes-manifest.json +50 -26
  249. package/web/.next/server/app/(console)/bridge/basket/page/app-paths-manifest.json +3 -0
  250. package/web/.next/server/app/(console)/{overview/requests/[requestId] → bridge/basket}/page/build-manifest.json +4 -4
  251. package/web/.next/server/app/(console)/{overview/requests/[requestId] → bridge/basket}/page/next-font-manifest.json +1 -1
  252. package/web/.next/server/app/(console)/bridge/basket/page/server-reference-manifest.json +75 -0
  253. package/web/.next/server/app/(console)/bridge/basket/page.js +25 -0
  254. package/web/.next/server/app/(console)/bridge/basket/page.js.nft.json +1 -0
  255. package/web/.next/server/app/(console)/bridge/basket/page_client-reference-manifest.js +3 -0
  256. package/web/.next/server/app/(console)/bridge/changes/route/app-paths-manifest.json +3 -0
  257. package/web/.next/server/app/(console)/bridge/changes/route.js +8 -0
  258. package/web/.next/server/app/(console)/{overview/focus → bridge/changes}/route.js.nft.json +1 -1
  259. package/web/.next/server/app/(console)/{overview/focus → bridge/changes}/route_client-reference-manifest.js +1 -1
  260. package/web/.next/server/app/(console)/bridge/done/page/app-paths-manifest.json +3 -0
  261. package/web/.next/server/app/(console)/bridge/done/page/build-manifest.json +23 -0
  262. package/web/.next/server/app/(console)/bridge/done/page/next-font-manifest.json +11 -0
  263. package/web/.next/server/app/(console)/bridge/done/page/server-reference-manifest.json +75 -0
  264. package/web/.next/server/app/(console)/bridge/done/page.js +25 -0
  265. package/web/.next/server/app/(console)/bridge/done/page.js.nft.json +1 -0
  266. package/web/.next/server/app/(console)/bridge/done/page_client-reference-manifest.js +3 -0
  267. package/web/.next/server/app/(console)/bridge/focus/route/app-paths-manifest.json +3 -0
  268. package/web/.next/server/app/(console)/bridge/focus/route.js +8 -0
  269. package/web/.next/server/app/(console)/{overview/changes → bridge/focus}/route.js.nft.json +1 -1
  270. package/web/.next/server/app/(console)/bridge/focus/route_client-reference-manifest.js +3 -0
  271. package/web/.next/server/app/(console)/bridge/page/app-paths-manifest.json +3 -0
  272. package/web/.next/server/app/(console)/{overview → bridge}/page/build-manifest.json +4 -4
  273. package/web/.next/server/app/(console)/{overview → bridge}/page/next-font-manifest.json +1 -1
  274. package/web/.next/server/app/(console)/bridge/page/react-loadable-manifest.json +1 -0
  275. package/web/.next/server/app/(console)/bridge/page/server-reference-manifest.json +65 -0
  276. package/web/.next/server/app/(console)/{overview → bridge}/page.js +11 -11
  277. package/web/.next/server/app/(console)/bridge/page.js.map +5 -0
  278. package/web/.next/server/app/(console)/{overview → bridge}/page.js.nft.json +1 -1
  279. package/web/.next/server/app/(console)/bridge/page_client-reference-manifest.js +3 -0
  280. package/web/.next/server/app/(console)/bridge/settings/page/app-paths-manifest.json +3 -0
  281. package/web/.next/server/app/(console)/bridge/settings/page/build-manifest.json +23 -0
  282. package/web/.next/server/app/(console)/bridge/settings/page/next-font-manifest.json +11 -0
  283. package/web/.next/server/app/(console)/bridge/settings/page/react-loadable-manifest.json +1 -0
  284. package/web/.next/server/app/(console)/bridge/settings/page/server-reference-manifest.json +15 -0
  285. package/web/.next/server/app/(console)/bridge/settings/page.js +23 -0
  286. package/web/.next/server/app/(console)/bridge/settings/page.js.map +5 -0
  287. package/web/.next/server/app/(console)/bridge/settings/page.js.nft.json +1 -0
  288. package/web/.next/server/app/(console)/bridge/settings/page_client-reference-manifest.js +3 -0
  289. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/app-paths-manifest.json +3 -0
  290. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/build-manifest.json +23 -0
  291. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/next-font-manifest.json +11 -0
  292. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/react-loadable-manifest.json +1 -0
  293. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/server-reference-manifest.json +25 -0
  294. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page.js +25 -0
  295. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page.js.map +5 -0
  296. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page.js.nft.json +1 -0
  297. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page_client-reference-manifest.js +3 -0
  298. package/web/.next/server/app/(console)/bridge/settings/routing/page/app-paths-manifest.json +3 -0
  299. package/web/.next/server/app/(console)/bridge/settings/routing/page/build-manifest.json +23 -0
  300. package/web/.next/server/app/(console)/bridge/settings/routing/page/next-font-manifest.json +11 -0
  301. package/web/.next/server/app/(console)/bridge/settings/routing/page/react-loadable-manifest.json +1 -0
  302. package/web/.next/server/app/(console)/bridge/settings/routing/page/server-reference-manifest.json +55 -0
  303. package/web/.next/server/app/(console)/{overview/requests/[requestId] → bridge/settings/routing}/page.js +12 -12
  304. package/web/.next/server/app/(console)/bridge/settings/routing/page.js.map +5 -0
  305. package/web/.next/server/app/(console)/{overview/requests/[requestId] → bridge/settings/routing}/page.js.nft.json +1 -1
  306. package/web/.next/server/app/(console)/bridge/settings/routing/page_client-reference-manifest.js +3 -0
  307. package/web/.next/server/app/(console)/gateway-off/page/build-manifest.json +4 -4
  308. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
  309. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
  310. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
  311. package/web/.next/server/app/(console)/meetings/[meetingId]/page/build-manifest.json +4 -4
  312. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
  313. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +1 -1
  314. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
  315. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
  316. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/build-manifest.json +4 -4
  317. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +16 -16
  318. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  319. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  320. package/web/.next/server/app/(console)/outside-parties/[name]/page/build-manifest.json +4 -4
  321. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +8 -8
  322. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  323. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  324. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/build-manifest.json +4 -4
  325. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +16 -16
  326. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  327. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  328. package/web/.next/server/app/(console)/outside-parties/add/page/build-manifest.json +4 -4
  329. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +10 -10
  330. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  331. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  332. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/build-manifest.json +4 -4
  333. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +2 -2
  334. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  335. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  336. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/build-manifest.json +4 -4
  337. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
  338. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  339. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  340. package/web/.next/server/app/(console)/outside-parties/page/build-manifest.json +4 -4
  341. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  342. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  343. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  344. package/web/.next/server/app/(console)/parties/page/build-manifest.json +4 -4
  345. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +8 -8
  346. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  347. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  348. package/web/.next/server/app/(console)/sign-in/failed/page/build-manifest.json +4 -4
  349. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  350. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  351. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  352. package/web/.next/server/app/(console)/slack/disconnect/page/build-manifest.json +4 -4
  353. package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +8 -8
  354. package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
  355. package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
  356. package/web/.next/server/app/(console)/slack/expose/page/build-manifest.json +4 -4
  357. package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +8 -8
  358. package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
  359. package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
  360. package/web/.next/server/app/(console)/slack/link/route.js.nft.json +1 -1
  361. package/web/.next/server/app/(console)/slack/page/build-manifest.json +4 -4
  362. package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +8 -8
  363. package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
  364. package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
  365. package/web/.next/server/app/(console)/slack/remove/page/build-manifest.json +4 -4
  366. package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +8 -8
  367. package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
  368. package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +1 -1
  369. package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  370. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  371. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  372. package/web/.next/server/app/_global-error.html +1 -1
  373. package/web/.next/server/app/_global-error.rsc +1 -1
  374. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  375. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  376. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  377. package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  378. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  379. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  380. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  381. package/web/.next/server/app/authorize/failed/page/build-manifest.json +4 -4
  382. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  383. package/web/.next/server/app/authorize/failed/page.js +1 -1
  384. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  385. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  386. package/web/.next/server/app/authorize/pick/page/build-manifest.json +4 -4
  387. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  388. package/web/.next/server/app/authorize/pick/page.js +1 -1
  389. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  390. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  391. package/web/.next/server/app/authorize/waiting/approval/page/build-manifest.json +4 -4
  392. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  393. package/web/.next/server/app/authorize/waiting/approval/page.js +1 -1
  394. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  395. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  396. package/web/.next/server/app-paths-manifest.json +8 -4
  397. package/web/.next/server/chunks/0b9d__next-internal_server_app_(console)_bridge_changes_route_actions_0hj8aqohz6bu6.js +3 -0
  398. package/web/.next/server/chunks/{[root-of-the-server]__1tfyrijwfgqlk._.js → [root-of-the-server]__13mh3krxil59c._.js} +2 -2
  399. package/web/.next/server/chunks/[root-of-the-server]__13mh3krxil59c._.js.map +1 -0
  400. package/web/.next/server/chunks/_05qgg3__4kdbm._.js +3 -0
  401. package/web/.next/server/chunks/_05qgg3__4kdbm._.js.map +1 -0
  402. package/web/.next/server/chunks/_0_um96p6psnqx._.js +4 -4
  403. package/web/.next/server/chunks/_0_um96p6psnqx._.js.map +1 -1
  404. package/web/.next/server/chunks/_1uap5tql2vvsb._.js +3 -0
  405. package/web/.next/server/chunks/{_04is-uopj3op9._.js.map → _1uap5tql2vvsb._.js.map} +1 -1
  406. package/web/.next/server/chunks/_1xf83h9norhws._.js +4 -4
  407. package/web/.next/server/chunks/_1xf83h9norhws._.js.map +1 -1
  408. package/web/.next/server/chunks/_20ne4s-e_jzxp._.js +1 -1
  409. package/web/.next/server/chunks/_20ne4s-e_jzxp._.js.map +1 -1
  410. package/web/.next/server/chunks/ssr/01fr_app_(console)_bridge_settings_requests_[requestId]_page_actions_1au-p5lgnv5e-.js +3 -0
  411. package/web/.next/server/chunks/ssr/01fr_app_(console)_bridge_settings_requests_[requestId]_page_actions_1au-p5lgnv5e-.js.map +1 -0
  412. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_bridge_settings_routing_page_actions_136lm_jip4d_x.js +3 -0
  413. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_bridge_settings_routing_page_actions_136lm_jip4d_x.js.map +1 -0
  414. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
  415. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
  416. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
  417. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
  418. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
  419. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
  420. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
  421. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
  422. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
  423. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
  424. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js +1 -1
  425. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -1
  426. package/web/.next/server/chunks/ssr/[root-of-the-server]__00jy4lqrcvxvc._.js +3 -0
  427. package/web/.next/server/chunks/ssr/[root-of-the-server]__00jy4lqrcvxvc._.js.map +1 -0
  428. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js +1 -1
  429. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js +1 -1
  430. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js.map +1 -1
  431. package/web/.next/server/chunks/ssr/{[root-of-the-server]__179upda-y7uap._.js → [root-of-the-server]__0gnfxe62edx95._.js} +1 -1
  432. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-5_al3xk509._.js +3 -0
  433. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-5_al3xk509._.js.map +1 -0
  434. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
  435. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
  436. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +1 -1
  437. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -1
  438. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +1 -1
  439. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -1
  440. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
  441. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
  442. package/web/.next/server/chunks/ssr/[root-of-the-server]__18v7b5ga58a9n._.js +4 -0
  443. package/web/.next/server/chunks/ssr/[root-of-the-server]__18v7b5ga58a9n._.js.map +1 -0
  444. package/web/.next/server/chunks/ssr/[root-of-the-server]__1iqxg48po42ig._.js +3 -0
  445. package/web/.next/server/chunks/ssr/[root-of-the-server]__1iqxg48po42ig._.js.map +1 -0
  446. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +1 -1
  447. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -1
  448. package/web/.next/server/chunks/ssr/[root-of-the-server]__1rf344o33bmi4._.js +3 -0
  449. package/web/.next/server/chunks/ssr/[root-of-the-server]__1rf344o33bmi4._.js.map +1 -0
  450. package/web/.next/server/chunks/ssr/{[root-of-the-server]__04_bc8g0oe4jt._.js → [root-of-the-server]__1yyaeeylnezpi._.js} +1 -1
  451. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  452. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  453. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +4 -4
  454. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
  455. package/web/.next/server/chunks/ssr/_0a_nsm-ye2r6v._.js +4 -0
  456. package/web/.next/server/chunks/ssr/_0a_nsm-ye2r6v._.js.map +1 -0
  457. package/web/.next/server/chunks/ssr/_0h-ua-y4p4u1p._.js +3 -0
  458. package/web/.next/server/chunks/ssr/_0h-ua-y4p4u1p._.js.map +1 -0
  459. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
  460. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
  461. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  462. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  463. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  464. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  465. package/web/.next/server/chunks/ssr/{_1oy13966tft2_._.js → _10-gn6g9yc63s._.js} +2 -2
  466. package/web/.next/server/chunks/ssr/_10-gn6g9yc63s._.js.map +1 -0
  467. package/web/.next/server/chunks/ssr/{_1pf8x2exvfl1z._.js → _177fdczus39s7._.js} +2 -2
  468. package/web/.next/server/chunks/ssr/_177fdczus39s7._.js.map +1 -0
  469. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
  470. package/web/.next/server/chunks/ssr/_1e2o809f0ekry._.js +1 -1
  471. package/web/.next/server/chunks/ssr/_1hmjvjuxx92vo._.js +1 -1
  472. package/web/.next/server/chunks/ssr/_1hmjvjuxx92vo._.js.map +1 -1
  473. package/web/.next/server/chunks/ssr/_1jx41z6kmxtt0._.js +3 -0
  474. package/web/.next/server/chunks/ssr/_1jx41z6kmxtt0._.js.map +1 -0
  475. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  476. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  477. package/web/.next/server/chunks/ssr/_1q2s-hb67yjfb._.js +3 -0
  478. package/web/.next/server/chunks/ssr/_1q2s-hb67yjfb._.js.map +1 -0
  479. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  480. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  481. package/web/.next/server/chunks/ssr/_1yi3j4a16uet-._.js +3 -0
  482. package/web/.next/server/chunks/ssr/_1yi3j4a16uet-._.js.map +1 -0
  483. package/web/.next/server/chunks/ssr/node_modules_01oyodz1bs245._.js +3 -0
  484. package/web/.next/server/chunks/ssr/node_modules_01oyodz1bs245._.js.map +1 -0
  485. package/web/.next/server/chunks/ssr/node_modules_16d4um5s513wz._.js +3 -0
  486. package/web/.next/server/chunks/ssr/node_modules_16d4um5s513wz._.js.map +1 -0
  487. package/web/.next/server/chunks/ssr/{node_modules_@aeolus-fleet_common_dist_header_1id6g-6m2hh0l._.js → node_modules_@aeolus-fleet_common_dist_header_0t_cmi-llaq7g._.js} +2 -2
  488. package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_0t_cmi-llaq7g._.js.map +1 -0
  489. package/web/.next/server/chunks/ssr/{node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js → node_modules_@aeolus-fleet_common_dist_header_1x3s5abk_uj9j._.js} +2 -2
  490. package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1x3s5abk_uj9j._.js.map +1 -0
  491. package/web/.next/server/chunks/ssr/node_modules_next_dist_0hkpfqt9ne626._.js +3 -0
  492. package/web/.next/server/chunks/ssr/node_modules_next_dist_0hkpfqt9ne626._.js.map +1 -0
  493. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_031g89sb4kgzn.js +3 -0
  494. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_031g89sb4kgzn.js.map +1 -0
  495. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09rviehv6rh0n.js +3 -0
  496. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09rviehv6rh0n.js.map +1 -0
  497. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ka8v6_fxug8r.js +3 -0
  498. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ka8v6_fxug8r.js.map +1 -0
  499. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c8zekuy1gkch.js +3 -0
  500. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c8zekuy1gkch.js.map +1 -0
  501. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dhzng2nnu0m7.js +3 -0
  502. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dhzng2nnu0m7.js.map +1 -0
  503. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1rya2ag3z4vug.js +3 -0
  504. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1rya2ag3z4vug.js.map +1 -0
  505. package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js +1 -1
  506. package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js.map +1 -1
  507. package/web/.next/server/chunks/ssr/web_0i_1uraygw2ld._.js +3 -0
  508. package/web/.next/server/chunks/ssr/web_0i_1uraygw2ld._.js.map +1 -0
  509. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
  510. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
  511. package/web/.next/server/chunks/ssr/web_0wz4onhfbq359._.js +3 -0
  512. package/web/.next/server/chunks/ssr/web_0wz4onhfbq359._.js.map +1 -0
  513. package/web/.next/server/chunks/ssr/web_1-hlf1xzemd3-._.js +3 -0
  514. package/web/.next/server/chunks/ssr/web_1-hlf1xzemd3-._.js.map +1 -0
  515. package/web/.next/server/chunks/ssr/web_107a79_nx4jdd._.js +3 -0
  516. package/web/.next/server/chunks/ssr/web_107a79_nx4jdd._.js.map +1 -0
  517. package/web/.next/server/chunks/ssr/web_127_b93avkwaq._.js +3 -0
  518. package/web/.next/server/chunks/ssr/web_127_b93avkwaq._.js.map +1 -0
  519. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_basket_page_actions_102xk3g8eko_q.js +3 -0
  520. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_basket_page_actions_102xk3g8eko_q.js.map +1 -0
  521. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_done_page_actions_0mm90xd2feta2.js +3 -0
  522. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_done_page_actions_0mm90xd2feta2.js.map +1 -0
  523. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_page_actions_082880qz6xa5k.js +3 -0
  524. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_page_actions_082880qz6xa5k.js.map +1 -0
  525. package/web/.next/server/chunks/ssr/web_app_(console)_bridge_error_tsx_0ty_yk1robyaj._.js +3 -0
  526. package/web/.next/server/chunks/ssr/web_app_(console)_bridge_error_tsx_0ty_yk1robyaj._.js.map +1 -0
  527. package/web/.next/server/chunks/ssr/web_app_(console)_bridge_error_tsx_10gkrn3ey8162._.js +3 -0
  528. package/web/.next/server/chunks/ssr/web_app_(console)_bridge_error_tsx_10gkrn3ey8162._.js.map +1 -0
  529. package/web/.next/server/chunks/ssr/web_app_(console)_bridge_settings_page_tsx_0xzphp7k9ge1u._.js +3 -0
  530. package/web/.next/server/chunks/ssr/web_app_(console)_bridge_settings_page_tsx_0xzphp7k9ge1u._.js.map +1 -0
  531. package/web/.next/server/chunks/ssr/web_app_(console)_outside-parties_[name]_change_page_tsx_00bpg0s2eypj9._.js +1 -1
  532. package/web/.next/server/chunks/ssr/web_app_(console)_outside-parties_[name]_retire_page_tsx_1zxy74pr5_2kn._.js +1 -1
  533. package/web/.next/server/chunks/ssr/web_features_0s8erick0xk77._.js +3 -0
  534. package/web/.next/server/chunks/ssr/web_features_0s8erick0xk77._.js.map +1 -0
  535. package/web/.next/server/chunks/ssr/web_features_0wuo5bgp5tabn._.js +3 -0
  536. package/web/.next/server/chunks/ssr/web_features_0wuo5bgp5tabn._.js.map +1 -0
  537. package/web/.next/server/chunks/ssr/web_features_16cy3vmcijydk._.js +3 -0
  538. package/web/.next/server/chunks/ssr/web_features_16cy3vmcijydk._.js.map +1 -0
  539. package/web/.next/server/chunks/ssr/web_features_1iiqi6dhrst33._.js +3 -0
  540. package/web/.next/server/chunks/ssr/web_features_1iiqi6dhrst33._.js.map +1 -0
  541. package/web/.next/server/chunks/ssr/web_features_1n1hy3nwha2vi._.js +3 -0
  542. package/web/.next/server/chunks/ssr/web_features_1n1hy3nwha2vi._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  544. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  545. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  546. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  547. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  548. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  549. package/web/.next/server/chunks/ssr/web_features_bridge_0-mhu0jaig2u3._.js +3 -0
  550. package/web/.next/server/chunks/ssr/web_features_bridge_0-mhu0jaig2u3._.js.map +1 -0
  551. package/web/.next/server/chunks/ssr/web_features_bridge_0219fbfmsi68-._.js +3 -0
  552. package/web/.next/server/chunks/ssr/web_features_bridge_0219fbfmsi68-._.js.map +1 -0
  553. package/web/.next/server/chunks/ssr/web_features_bridge_11jndonu4o8fq._.js +3 -0
  554. package/web/.next/server/chunks/ssr/web_features_bridge_11jndonu4o8fq._.js.map +1 -0
  555. package/web/.next/server/chunks/ssr/web_features_bridge_1mi9qlb-z5iwt._.js +3 -0
  556. package/web/.next/server/chunks/ssr/web_features_bridge_1mi9qlb-z5iwt._.js.map +1 -0
  557. package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js +3 -0
  558. package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js.map +1 -0
  559. package/web/.next/server/chunks/ssr/web_features_bridge_state_0354e3wb0dzx1._.js +3 -0
  560. package/web/.next/server/chunks/ssr/web_features_bridge_state_0354e3wb0dzx1._.js.map +1 -0
  561. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js +3 -0
  562. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map +1 -0
  563. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js +3 -0
  564. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js.map +1 -0
  565. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js +3 -0
  566. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js.map +1 -0
  567. package/web/.next/server/chunks/ssr/web_features_bridge_state_home-panel_tsx_1cc5zdhxogl_2._.js +3 -0
  568. package/web/.next/server/chunks/ssr/web_features_bridge_state_home-panel_tsx_1cc5zdhxogl_2._.js.map +1 -0
  569. package/web/.next/server/chunks/ssr/web_features_bridge_state_live-refresh_tsx_1c1xk-oe0kllv._.js +3 -0
  570. package/web/.next/server/chunks/ssr/web_features_bridge_state_live-refresh_tsx_1c1xk-oe0kllv._.js.map +1 -0
  571. package/web/.next/server/chunks/ssr/web_features_bridge_ui_1y4g3fe75nqn5._.js +3 -0
  572. package/web/.next/server/chunks/ssr/web_features_bridge_ui_1y4g3fe75nqn5._.js.map +1 -0
  573. package/web/.next/server/chunks/ssr/web_features_frame_0pe8cwpxe1egb._.js +1 -1
  574. package/web/.next/server/chunks/ssr/web_features_frame_0pe8cwpxe1egb._.js.map +1 -1
  575. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  576. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  577. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
  578. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
  579. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  580. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  581. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  582. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  583. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +1 -1
  584. package/web/.next/server/chunks/web__next-internal_server_app_(console)_bridge_focus_route_actions_0syd_u8mgzdmi.js +3 -0
  585. package/web/.next/server/middleware-build-manifest.js +127 -79
  586. package/web/.next/server/next-font-manifest.js +1 -1
  587. package/web/.next/server/next-font-manifest.json +24 -8
  588. package/web/.next/server/pages/500.html +1 -1
  589. package/web/.next/server/preview-props.json +3 -3
  590. package/web/.next/server/server-reference-manifest.js +1 -1
  591. package/web/.next/server/server-reference-manifest.json +218 -132
  592. package/web/.next/static/chunks/0az9upwm-8_q9.js +1 -0
  593. package/web/.next/static/chunks/0c1tqlbsvq1dj.js +1 -0
  594. package/web/.next/static/chunks/0fh11dkddwf_2.js +1 -0
  595. package/web/.next/static/chunks/0gbozvd_yh421.js +1 -0
  596. package/web/.next/static/chunks/0l9_oie6xi0kd.js +1 -0
  597. package/web/.next/static/chunks/0m512dxdcrv-b.js +1 -0
  598. package/web/.next/static/chunks/1166rxt6h6ilq.js +1 -0
  599. package/web/.next/static/chunks/1485slb5zus5p.js +1 -0
  600. package/web/.next/static/chunks/180aowme095ds.js +1 -0
  601. package/web/.next/static/chunks/{03239gtej3tj0.js → 24olc0btcvn7q.js} +1 -1
  602. package/web/.next/static/chunks/296w-74ry5lzk.js +1 -0
  603. package/web/.next/static/chunks/2hoi73vy1wqpo.js +1 -0
  604. package/web/.next/static/chunks/2mtfca4qk_s34.js +1 -0
  605. package/web/.next/static/chunks/{3ceatffqhpgpu.js → 2z2auwx1s2mgl.js} +1 -1
  606. package/web/.next/static/chunks/397zvdr6xr5pq.js +1 -0
  607. package/web/.next/static/chunks/{2_e-puldye2do.js → 3db90zxmny2y-.js} +1 -1
  608. package/web/.next/static/chunks/3ow9h8hreko-p.css +3 -0
  609. package/web/.next/static/chunks/3pd8pele5x1o9.js +1 -0
  610. package/web/.next/static/chunks/3srfjz42u14tx.js +1 -0
  611. package/web/.next/static/chunks/{0tmvd_zw45u96.js → 3x0p-z3zdrk_b.js} +1 -1
  612. package/web/.next/static/chunks/3yq9jt4p_0uid.js +1 -0
  613. package/web/.next/trace +1 -1
  614. package/web/.next/trace-build +1 -1
  615. package/web/.next/types/routes.d.ts +10 -6
  616. package/web/.next/types/validator.ts +108 -40
  617. package/web/public/wake-worker.js +4 -4
  618. package/dist/adapters/prisma/email-channels.d.ts +0 -4
  619. package/dist/adapters/prisma/email-channels.js +0 -14
  620. package/dist/adapters/prisma/email-channels.js.map +0 -1
  621. package/dist/adapters/prisma/generated/models/EmailChannel.d.ts +0 -946
  622. package/dist/adapters/prisma/generated/models/EmailChannel.js +0 -2
  623. package/dist/adapters/prisma/generated/models/EmailChannel.js.map +0 -1
  624. package/dist/core/people/turn-email-channel.d.ts +0 -21
  625. package/dist/core/people/turn-email-channel.js +0 -22
  626. package/dist/core/people/turn-email-channel.js.map +0 -1
  627. package/dist/core/slack/show-all-in-slack.d.ts +0 -16
  628. package/dist/core/slack/show-all-in-slack.js +0 -18
  629. package/dist/core/slack/show-all-in-slack.js.map +0 -1
  630. package/web/.next/server/app/(console)/overview/changes/route/app-paths-manifest.json +0 -3
  631. package/web/.next/server/app/(console)/overview/changes/route.js +0 -8
  632. package/web/.next/server/app/(console)/overview/changes/route_client-reference-manifest.js +0 -3
  633. package/web/.next/server/app/(console)/overview/focus/route/app-paths-manifest.json +0 -3
  634. package/web/.next/server/app/(console)/overview/focus/route.js +0 -8
  635. package/web/.next/server/app/(console)/overview/page/app-paths-manifest.json +0 -3
  636. package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +0 -95
  637. package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +0 -3
  638. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/app-paths-manifest.json +0 -3
  639. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +0 -25
  640. package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +0 -3
  641. package/web/.next/server/chunks/0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js +0 -3
  642. package/web/.next/server/chunks/1mb5_next-internal_server_app_(console)_overview_changes_route_actions_0zbq7lqsf5nng.js +0 -3
  643. package/web/.next/server/chunks/[root-of-the-server]__1tfyrijwfgqlk._.js.map +0 -1
  644. package/web/.next/server/chunks/_04is-uopj3op9._.js +0 -3
  645. package/web/.next/server/chunks/_1-fw4-pwzazl4._.js +0 -3
  646. package/web/.next/server/chunks/_1-fw4-pwzazl4._.js.map +0 -1
  647. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +0 -3
  648. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +0 -1
  649. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js +0 -4
  650. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js.map +0 -1
  651. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js +0 -3
  652. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js.map +0 -1
  653. package/web/.next/server/chunks/ssr/_0-boiqan2j4tr._.js +0 -3
  654. package/web/.next/server/chunks/ssr/_0-boiqan2j4tr._.js.map +0 -1
  655. package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js +0 -3
  656. package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js.map +0 -1
  657. package/web/.next/server/chunks/ssr/_0bizyb21i2sl8._.js +0 -3
  658. package/web/.next/server/chunks/ssr/_0bizyb21i2sl8._.js.map +0 -1
  659. package/web/.next/server/chunks/ssr/_1oy13966tft2_._.js.map +0 -1
  660. package/web/.next/server/chunks/ssr/_1pf8x2exvfl1z._.js.map +0 -1
  661. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js +0 -3
  662. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js.map +0 -1
  663. package/web/.next/server/chunks/ssr/node_modules_0_cxkn6vujxay._.js +0 -3
  664. package/web/.next/server/chunks/ssr/node_modules_0_cxkn6vujxay._.js.map +0 -1
  665. package/web/.next/server/chunks/ssr/node_modules_0ue_35q2cegwf._.js +0 -3
  666. package/web/.next/server/chunks/ssr/node_modules_0ue_35q2cegwf._.js.map +0 -1
  667. package/web/.next/server/chunks/ssr/node_modules_15ceu3jhtifcw._.js +0 -3
  668. package/web/.next/server/chunks/ssr/node_modules_15ceu3jhtifcw._.js.map +0 -1
  669. package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1id6g-6m2hh0l._.js.map +0 -1
  670. package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js.map +0 -1
  671. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js +0 -3
  672. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js.map +0 -1
  673. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js +0 -3
  674. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js.map +0 -1
  675. package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js +0 -3
  676. package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js.map +0 -1
  677. package/web/.next/server/chunks/ssr/web_1loiet18xbddu._.js +0 -3
  678. package/web/.next/server/chunks/ssr/web_1loiet18xbddu._.js.map +0 -1
  679. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +0 -3
  680. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +0 -1
  681. package/web/.next/server/chunks/ssr/web_app_(console)_overview_error_tsx_087e7ba8loavc._.js +0 -3
  682. package/web/.next/server/chunks/ssr/web_app_(console)_overview_error_tsx_087e7ba8loavc._.js.map +0 -1
  683. package/web/.next/server/chunks/ssr/web_app_(console)_overview_error_tsx_1nn1jz5nh77af._.js +0 -3
  684. package/web/.next/server/chunks/ssr/web_app_(console)_overview_error_tsx_1nn1jz5nh77af._.js.map +0 -1
  685. package/web/.next/server/chunks/ssr/web_features_0fxkmm4vqke5q._.js +0 -3
  686. package/web/.next/server/chunks/ssr/web_features_0fxkmm4vqke5q._.js.map +0 -1
  687. package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js +0 -3
  688. package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js.map +0 -1
  689. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js +0 -3
  690. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js.map +0 -1
  691. package/web/.next/server/chunks/ssr/web_features_overview_0udx5lm8igils._.js +0 -3
  692. package/web/.next/server/chunks/ssr/web_features_overview_0udx5lm8igils._.js.map +0 -1
  693. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js +0 -3
  694. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js.map +0 -1
  695. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +0 -3
  696. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +0 -1
  697. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js +0 -3
  698. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js.map +0 -1
  699. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +0 -3
  700. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +0 -1
  701. package/web/.next/server/chunks/ssr/web_features_overview_ui_10mb24kjiffea._.js +0 -3
  702. package/web/.next/server/chunks/ssr/web_features_overview_ui_10mb24kjiffea._.js.map +0 -1
  703. package/web/.next/static/chunks/0nhopjmnw_dqt.js +0 -1
  704. package/web/.next/static/chunks/0vlawcs6_kjs1.js +0 -1
  705. package/web/.next/static/chunks/1se0j0htjyep6.js +0 -1
  706. package/web/.next/static/chunks/26vlpatu47xtw.css +0 -3
  707. package/web/.next/static/chunks/287ofedoj_6xl.js +0 -1
  708. package/web/.next/static/chunks/2cd4e71s711ad.js +0 -1
  709. package/web/.next/static/chunks/2ewacyhp73due.js +0 -1
  710. package/web/.next/static/chunks/34kulpk3a-cka.js +0 -1
  711. package/web/.next/static/chunks/3fd167c0-ot3u.js +0 -1
  712. package/web/.next/static/chunks/3knqujtrdi225.js +0 -1
  713. package/web/.next/static/chunks/3l5jtag3-fukc.js +0 -1
  714. package/web/.next/static/chunks/3rxg2mdhxd6yt.js +0 -1
  715. package/web/.next/static/chunks/3v6tr952p9dba.js +0 -1
  716. /package/web/.next/server/app/(console)/{overview → bridge/basket}/page/react-loadable-manifest.json +0 -0
  717. /package/web/.next/server/app/(console)/{overview → bridge/basket}/page.js.map +0 -0
  718. /package/web/.next/server/app/(console)/{overview → bridge}/changes/route/build-manifest.json +0 -0
  719. /package/web/.next/server/app/(console)/{overview → bridge}/changes/route/server-reference-manifest.json +0 -0
  720. /package/web/.next/server/app/(console)/{overview → bridge}/changes/route.js.map +0 -0
  721. /package/web/.next/server/app/(console)/{overview/requests/[requestId] → bridge/done}/page/react-loadable-manifest.json +0 -0
  722. /package/web/.next/server/app/(console)/{overview/requests/[requestId] → bridge/done}/page.js.map +0 -0
  723. /package/web/.next/server/app/(console)/{overview → bridge}/focus/route/build-manifest.json +0 -0
  724. /package/web/.next/server/app/(console)/{overview → bridge}/focus/route/server-reference-manifest.json +0 -0
  725. /package/web/.next/server/app/(console)/{overview → bridge}/focus/route.js.map +0 -0
  726. /package/web/.next/server/chunks/{0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js.map → 0b9d__next-internal_server_app_(console)_bridge_changes_route_actions_0hj8aqohz6bu6.js.map} +0 -0
  727. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__179upda-y7uap._.js.map → [root-of-the-server]__0gnfxe62edx95._.js.map} +0 -0
  728. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__04_bc8g0oe4jt._.js.map → [root-of-the-server]__1yyaeeylnezpi._.js.map} +0 -0
  729. /package/web/.next/server/chunks/{1mb5_next-internal_server_app_(console)_overview_changes_route_actions_0zbq7lqsf5nng.js.map → web__next-internal_server_app_(console)_bridge_focus_route_actions_0syd_u8mgzdmi.js.map} +0 -0
  730. /package/web/.next/static/{R_nPUtDcDp1BPV3QHhaMZ → CMppMkysNciqc8k4TWwia}/_buildManifest.js +0 -0
  731. /package/web/.next/static/{R_nPUtDcDp1BPV3QHhaMZ → CMppMkysNciqc8k4TWwia}/_clientMiddlewareManifest.js +0 -0
  732. /package/web/.next/static/{R_nPUtDcDp1BPV3QHhaMZ → CMppMkysNciqc8k4TWwia}/_ssgManifest.js +0 -0
@@ -1,6 +1,7 @@
1
1
  import type { FleetRefusal } from "../connection/ports.js";
2
2
  import type { Clock } from "../shared/clock.js";
3
3
  import { type Result } from "../shared/result.js";
4
+ import type { RoutingDefaults, Routes } from "./routing.js";
4
5
  import type { FocusedPages, PersonShip, PersonShipDoor, ShownElsewhere, WakeChannel, WakeChannelName, WakesSent } from "./ports.js";
5
6
  /**
6
7
  * What a wake came to: nothing left to wake (settled), a wake held back
@@ -20,11 +21,15 @@ export type WakePerson = (ship: PersonShip, crewToken: string) => Promise<Result
20
21
  * Use case: wakes a person for what waits on their person ship (wake a
21
22
  * person, W3, W8). It takes the ship's deliveries with the gateway as their
22
23
  * waker, leaving the handed ones out so ten held deliveries never shut a new
23
- * one out; those never handed are fresh. Each channel the person turned on
24
- * whose window has passed sends one wake for all of them; each fresh
25
- * delivery is then handed no. 1, naming the first channel that went out, so
26
- * a delivery is woken once. A wake held back by a window, or that no
27
- * channel sent, hands nothing. Each channel's window is kept after the
24
+ * one out; those never handed are fresh. Where each job shows is read anew
25
+ * at every wake (Bridge, section 8), so a change applies at once. Each
26
+ * channel whose window has passed sends one wake for the fresh deliveries
27
+ * of the jobs on for it that arrived since it was turned on (CC20); each is
28
+ * then handed no. 1, naming the first of its channels that went out, so a
29
+ * delivery is woken once (CC13). One no channel shows waits in Bridge,
30
+ * unhanded. A wake held back by a window, or that no channel sent, hands
31
+ * nothing, and while a delivery only a failing channel shows is left, the
32
+ * wake counts as failed. Each channel's window is kept after the
28
33
  * hand-overs, so a gateway that stopped in between wakes again: one wake
29
34
  * more, nothing lost. A fresh delivery sent before a channel's last wake
30
35
  * that is still inside its window is one that wake covers: a hand-over the
@@ -34,8 +39,8 @@ export type WakePerson = (ship: PersonShip, crewToken: string) => Promise<Result
34
39
  * tried again, that channel is not asked again. While a page of the person is in focus, the page
35
40
  * shows what arrives (W6): each fresh delivery is handed through it and no
36
41
  * wake goes out. Before all that, a place beyond the pages that shows
37
- * deliveries itself, as Slack does for a linked person, shows what it
38
- * shows, even while a page is in focus; nothing wakes for those
42
+ * deliveries itself, as Slack does for a linked person, shows what the
43
+ * person routed there, even while a page is in focus; nothing wakes for those
39
44
  * (gateway scopes 9.5 step 5). It is asked at every wake, fresh deliveries
40
45
  * or none, so what it left unfinished is finished, and while anything is
41
46
  * left the wake counts as failed, so it is tried again.
@@ -45,6 +50,9 @@ export declare function createWakePerson(deps: {
45
50
  /** Slack, where the person linked it; none where nothing beyond the pages shows deliveries. */
46
51
  shownElsewhere?: ShownElsewhere;
47
52
  channels: readonly WakeChannel[];
53
+ /** Where each person routed each job (Bridge, section 8), and the defaults where they chose nothing. */
54
+ routes: Routes;
55
+ defaults: RoutingDefaults;
48
56
  wakesSent: WakesSent;
49
57
  focused: FocusedPages;
50
58
  /** How long a page counts in focus since it was last seen so. */
@@ -1,14 +1,19 @@
1
1
  import { RECEIVE_MAX_UPPER_BOUND } from "@aeolus-fleet/common";
2
2
  import { err, ok } from "../shared/result.js";
3
+ import { routingOf } from "./routing.js";
3
4
  /**
4
5
  * Use case: wakes a person for what waits on their person ship (wake a
5
6
  * person, W3, W8). It takes the ship's deliveries with the gateway as their
6
7
  * waker, leaving the handed ones out so ten held deliveries never shut a new
7
- * one out; those never handed are fresh. Each channel the person turned on
8
- * whose window has passed sends one wake for all of them; each fresh
9
- * delivery is then handed no. 1, naming the first channel that went out, so
10
- * a delivery is woken once. A wake held back by a window, or that no
11
- * channel sent, hands nothing. Each channel's window is kept after the
8
+ * one out; those never handed are fresh. Where each job shows is read anew
9
+ * at every wake (Bridge, section 8), so a change applies at once. Each
10
+ * channel whose window has passed sends one wake for the fresh deliveries
11
+ * of the jobs on for it that arrived since it was turned on (CC20); each is
12
+ * then handed no. 1, naming the first of its channels that went out, so a
13
+ * delivery is woken once (CC13). One no channel shows waits in Bridge,
14
+ * unhanded. A wake held back by a window, or that no channel sent, hands
15
+ * nothing, and while a delivery only a failing channel shows is left, the
16
+ * wake counts as failed. Each channel's window is kept after the
12
17
  * hand-overs, so a gateway that stopped in between wakes again: one wake
13
18
  * more, nothing lost. A fresh delivery sent before a channel's last wake
14
19
  * that is still inside its window is one that wake covers: a hand-over the
@@ -18,8 +23,8 @@ import { err, ok } from "../shared/result.js";
18
23
  * tried again, that channel is not asked again. While a page of the person is in focus, the page
19
24
  * shows what arrives (W6): each fresh delivery is handed through it and no
20
25
  * wake goes out. Before all that, a place beyond the pages that shows
21
- * deliveries itself, as Slack does for a linked person, shows what it
22
- * shows, even while a page is in focus; nothing wakes for those
26
+ * deliveries itself, as Slack does for a linked person, shows what the
27
+ * person routed there, even while a page is in focus; nothing wakes for those
23
28
  * (gateway scopes 9.5 step 5). It is asked at every wake, fresh deliveries
24
29
  * or none, so what it left unfinished is finished, and while anything is
25
30
  * left the wake counts as failed, so it is tried again.
@@ -37,10 +42,12 @@ export function createWakePerson(deps) {
37
42
  return taken;
38
43
  }
39
44
  const everyFresh = taken.value.filter(({ handOverNumber }) => handOverNumber === null);
45
+ // Read anew at every wake, so a change of where a job shows applies at once.
46
+ const routing = routingOf(await deps.routes.list(ship), deps.defaults);
40
47
  // Asked even with nothing fresh: it finishes what an earlier wake left unfinished, as after a restart.
41
48
  const shownElsewhere = deps.shownElsewhere === undefined
42
49
  ? ok({ shown: new Set(), isAnyUnfinished: false })
43
- : await deps.shownElsewhere.show(ship, { crewToken, fresh: everyFresh });
50
+ : await deps.shownElsewhere.show(ship, { crewToken, fresh: everyFresh, routing });
44
51
  if (!shownElsewhere.isOk) {
45
52
  return shownElsewhere;
46
53
  }
@@ -48,14 +55,15 @@ export function createWakePerson(deps) {
48
55
  const woken = await wakeFor(ship, {
49
56
  crewToken,
50
57
  allFresh: everyFresh.filter(({ deliveryId }) => !shown.has(deliveryId)),
58
+ routing,
51
59
  });
52
60
  // What it left unfinished is finished at a wake tried again.
53
61
  return isAnyUnfinished && woken.isOk && woken.value.kind === "settled"
54
62
  ? ok({ kind: "failed" })
55
63
  : woken;
56
64
  };
57
- /** Wakes the person for the fresh deliveries nothing beyond the pages showed. */
58
- const wakeFor = async (ship, { crewToken, allFresh }) => {
65
+ /** Wakes the person for the fresh deliveries nothing beyond the pages showed, each through the channels on for its job. */
66
+ const wakeFor = async (ship, { crewToken, allFresh, routing }) => {
59
67
  /** Hands each fresh delivery no. 1 through the channel, up to the first refusal: that refusal, or none. */
60
68
  const handEach = async (fresh, channel) => {
61
69
  for (const { deliveryId } of fresh) {
@@ -77,7 +85,8 @@ export function createWakePerson(deps) {
77
85
  const refused = await handEach(allFresh, "page");
78
86
  return refused === undefined ? ok({ kind: "settled" }) : err(refused);
79
87
  }
80
- const turnedOn = (await Promise.all(deps.channels.map(async (channel) => (await channel.isOn(ship)) ? [channel] : []))).flat();
88
+ const showsOf = (channel) => (delivery) => routing.isShowing(channel.name, delivery);
89
+ const turnedOn = (await Promise.all(deps.channels.map(async (channel) => allFresh.some(showsOf(channel)) && (await channel.isOn(ship)) ? [channel] : []))).flat();
81
90
  if (turnedOn.length === 0) {
82
91
  return ok({ kind: "settled" });
83
92
  }
@@ -92,13 +101,14 @@ export function createWakePerson(deps) {
92
101
  : new Date(lastSentAt.getTime() + channel.windowMs),
93
102
  };
94
103
  }));
104
+ // Only what a channel turned on shows is woken for; the rest waits in Bridge.
105
+ let fresh = allFresh.filter((delivery) => turnedOn.some((channel) => showsOf(channel)(delivery)));
95
106
  // What a wake still inside its window covers was left unhanded by a refusal: hand it through that channel.
96
- let fresh = allFresh;
97
107
  for (const { channel, lastSentAt, endsAt } of windows) {
98
108
  if (lastSentAt === undefined || endsAt.getTime() <= now.getTime()) {
99
109
  continue;
100
110
  }
101
- const covered = fresh.filter(({ sentAt }) => sentAt.getTime() <= lastSentAt.getTime());
111
+ const covered = fresh.filter((delivery) => showsOf(channel)(delivery) && delivery.sentAt.getTime() <= lastSentAt.getTime());
102
112
  const refused = await handEach(covered, channel.name);
103
113
  if (refused !== undefined) {
104
114
  return err(refused);
@@ -109,17 +119,23 @@ export function createWakePerson(deps) {
109
119
  return ok({ kind: "settled" });
110
120
  }
111
121
  const refusedBefore = refusedInAttempt.get(attemptKey(ship)) ?? new Set();
112
- const due = windows
113
- .filter(({ channel, endsAt }) => endsAt.getTime() <= now.getTime() && !refusedBefore.has(channel.name))
114
- .map(({ channel }) => channel);
115
- if (due.length === 0) {
116
- const waiting = windows.filter(({ channel }) => !refusedBefore.has(channel.name));
117
- return ok(waiting.length === 0
122
+ /** The channels still asked that show any of these deliveries, with their windows. */
123
+ const askedFor = (deliveries) => windows.filter(({ channel }) => !refusedBefore.has(channel.name) && deliveries.some(showsOf(channel)));
124
+ /** Held back by the earliest window of a channel still asked that shows any of these deliveries, or settled when none is left. */
125
+ const heldBackFor = (deliveries) => {
126
+ const waiting = askedFor(deliveries);
127
+ return waiting.length === 0
118
128
  ? { kind: "settled" }
119
129
  : {
120
130
  kind: "inWindow",
121
131
  until: new Date(Math.min(...waiting.map(({ endsAt }) => endsAt.getTime()))),
122
- });
132
+ };
133
+ };
134
+ const due = askedFor(fresh)
135
+ .filter(({ endsAt }) => endsAt.getTime() <= now.getTime())
136
+ .map(({ channel }) => channel);
137
+ if (due.length === 0) {
138
+ return ok(heldBackFor(fresh));
123
139
  }
124
140
  const wentOut = [];
125
141
  let isRetryable = false;
@@ -128,7 +144,7 @@ export function createWakePerson(deps) {
128
144
  const lastSentAt = windows.find((window) => window.channel === channel)?.lastSentAt;
129
145
  const woken = await channel.wake(ship, { key: `${channel.name}:${lastSentAt === undefined ? 'first' : lastSentAt.toISOString()}` });
130
146
  if (woken.isOk) {
131
- wentOut.push(channel.name);
147
+ wentOut.push(channel);
132
148
  }
133
149
  else if (woken.error.kind === "refused") {
134
150
  refusedBefore.add(channel.name);
@@ -143,19 +159,29 @@ export function createWakePerson(deps) {
143
159
  isRetryable = true;
144
160
  }
145
161
  }
146
- const [firstOut] = wentOut;
147
- if (firstOut === undefined) {
148
- return ok(isRetryable ? { kind: "failed" } : { kind: "settled" });
162
+ // Each delivery is handed once, naming the first channel on for its job that went out.
163
+ let refused;
164
+ const left = [];
165
+ for (const delivery of fresh) {
166
+ const through = wentOut.find((channel) => showsOf(channel)(delivery));
167
+ if (through === undefined) {
168
+ left.push(delivery);
169
+ }
170
+ else {
171
+ refused ??= await handEach([delivery], through.name);
172
+ }
149
173
  }
150
- const refused = await handEach(fresh, firstOut);
151
174
  // The window is kept only after the hand-overs: a gateway that stopped in between wakes again, as the design says. A refusal keeps it, so no second email follows at once.
152
- for (const channel of wentOut) {
153
- await deps.wakesSent.record({ ship, channel, sentAt: now });
175
+ for (const { name } of wentOut) {
176
+ await deps.wakesSent.record({ ship, channel: name, sentAt: now });
154
177
  }
155
178
  if (refused !== undefined) {
156
179
  return err(refused);
157
180
  }
158
- return ok({ kind: "settled" });
181
+ if (left.length === 0) {
182
+ return ok({ kind: "settled" });
183
+ }
184
+ return ok(isRetryable ? { kind: "failed" } : heldBackFor(left.filter((delivery) => !wentOut.some((channel) => showsOf(channel)(delivery)))));
159
185
  };
160
186
  return async (ship, crewToken) => {
161
187
  const woken = await wakePerson(ship, crewToken);
@@ -1 +1 @@
1
- {"version":3,"file":"wake-person.js","sourceRoot":"","sources":["../../../src/core/people/wake-person.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wake-person.js","sourceRoot":"","sources":["../../../src/core/people/wake-person.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import type { WakeChannel, WebPush, WebPushSubscriptions } from './ports.js';
4
4
  /**
5
5
  * Web push, a channel that wakes a person (wake a person, W1, W4, W8). It is
6
6
  * on while a browser they turned it on in still takes wakes. A wake goes to
7
- * each such browser, saying only the fleet by its name and the overview
7
+ * each such browser, saying only the fleet by its name and the Bridge
8
8
  * link; it went out once one push service took it. A subscription its push
9
9
  * service says is gone takes no wake again.
10
10
  */
@@ -13,5 +13,5 @@ export declare function createWebPushChannel(deps: {
13
13
  webPush: WebPush;
14
14
  clock: Clock;
15
15
  windowMs: number;
16
- overviewUrlOf: (fleetId: FleetId) => string;
16
+ bridgeUrlOf: (fleetId: FleetId) => string;
17
17
  }): WakeChannel;
@@ -2,7 +2,7 @@ import { err, ok } from '../shared/result.js';
2
2
  /**
3
3
  * Web push, a channel that wakes a person (wake a person, W1, W4, W8). It is
4
4
  * on while a browser they turned it on in still takes wakes. A wake goes to
5
- * each such browser, saying only the fleet by its name and the overview
5
+ * each such browser, saying only the fleet by its name and the Bridge
6
6
  * link; it went out once one push service took it. A subscription its push
7
7
  * service says is gone takes no wake again.
8
8
  */
@@ -13,10 +13,10 @@ export function createWebPushChannel(deps) {
13
13
  windowMs: deps.windowMs,
14
14
  isOn: async (ship) => (await takingWakes(ship)).length > 0,
15
15
  wake: async (ship) => {
16
- const overviewUrl = deps.overviewUrlOf(ship.fleetId);
16
+ const bridgeUrl = deps.bridgeUrlOf(ship.fleetId);
17
17
  let isTaken = false;
18
18
  for (const subscription of await takingWakes(ship)) {
19
- const sent = await deps.webPush.send(subscription, { fleetName: subscription.fleetName, overviewUrl });
19
+ const sent = await deps.webPush.send(subscription, { fleetName: subscription.fleetName, bridgeUrl });
20
20
  switch (sent) {
21
21
  case 'sent':
22
22
  isTaken = true;
@@ -1 +1 @@
1
- {"version":3,"file":"web-push-channel.js","sourceRoot":"","sources":["../../../src/core/people/web-push-channel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAG9C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA4I;IAC/K,MAAM,WAAW,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAc,EAAkC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACxL,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,YAAY,IAAI,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;gBACvG,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,MAAM;wBACT,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACpI,MAAM;oBACR,KAAK,QAAQ;wBACX,MAAM;gBACV,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;QACzG,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"web-push-channel.js","sourceRoot":"","sources":["../../../src/core/people/web-push-channel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAG9C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA0I;IAC7K,MAAM,WAAW,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAc,EAAkC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACxL,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,YAAY,IAAI,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;gBACrG,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,MAAM;wBACT,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACpI,MAAM;oBACR,KAAK,QAAQ;wBACX,MAAM;gBACV,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;QACzG,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -24,5 +24,5 @@ export declare function createAskOwners(deps: {
24
24
  sender: CallSender;
25
25
  newQuestionId: () => string;
26
26
  clock: Clock;
27
- overviewUrl: string;
27
+ settingsUrl: string;
28
28
  }): AskOwners;
@@ -2,7 +2,7 @@ import { QUESTION_CONTENT_TYPE, WITHDRAWAL_CONTENT_TYPE } from '@aeolus-fleet/co
2
2
  /** How many requests one round asks about, and how many questions it withdraws, at most. */
3
3
  const QUESTIONS_PER_ROUND = 50;
4
4
  const dayOf = (at) => at.toISOString().slice(0, 'yyyy-mm-dd'.length);
5
- /** The question about one request: it points to the overview, where any approver decides (Q5 b, P6-2 b). */
5
+ /** The question about one request: it points to Bridge's settings, where any approver decides (Q5 b, P6-2 b). */
6
6
  function questionOf(request, ids) {
7
7
  const { subject } = request;
8
8
  const people = request.requesters.length === 1 ? '1 person' : `${String(request.requesters.length)} people`;
@@ -12,8 +12,8 @@ function questionOf(request, ids) {
12
12
  return {
13
13
  id: ids.questionId,
14
14
  title: about.title,
15
- context: `${about.what} Asked by ${people} on ${dayOf(request.askedAt)}; it waits until ${dayOf(request.expiresAt)}, then expires. Any holder of gateway:approve decides on ${ids.overviewUrl}.`,
16
- options: [{ key: 1, label: "Decide on the gateway's page", detail: ids.overviewUrl }],
15
+ context: `${about.what} Asked by ${people} on ${dayOf(request.askedAt)}; it waits until ${dayOf(request.expiresAt)}, then expires. Any holder of gateway:approve decides on ${ids.settingsUrl}.`,
16
+ options: [{ key: 1, label: "Decide on the gateway's page", detail: ids.settingsUrl }],
17
17
  pick: { option: 1, why: 'Approving names the outside party, its owner and its scopes, which the page asks for.' },
18
18
  };
19
19
  }
@@ -43,7 +43,7 @@ export function createAskOwners(deps) {
43
43
  : await deps.sender.send(gateway.crewToken, {
44
44
  to: asked,
45
45
  contentType: QUESTION_CONTENT_TYPE,
46
- payload: JSON.stringify(questionOf(request, { questionId, overviewUrl: deps.overviewUrl })),
46
+ payload: JSON.stringify(questionOf(request, { questionId, settingsUrl: deps.settingsUrl })),
47
47
  idempotencyKey: `${request.requestId}:question`,
48
48
  });
49
49
  if (sent !== undefined && !sent.isOk && sent.error.code === 'UNAVAILABLE') {
@@ -1 +1 @@
1
- {"version":3,"file":"ask-owners.js","sourceRoot":"","sources":["../../../src/core/requests/ask-owners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAOtF,4FAA4F;AAC5F,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAK/B,MAAM,KAAK,GAAG,CAAC,EAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;AAE3E,4GAA4G;AAC5G,SAAS,UAAU,CAAC,OAAuB,EAAE,GAAgD;IAC3F,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;IAC5G,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,KAAK,QAAQ;QACvB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,UAAU,+BAA+B,EAAE,IAAI,EAAE,6DAA6D,EAAE;QACtI,CAAC,CAAC,EAAE,KAAK,EAAE,uBAAuB,OAAO,CAAC,GAAG,eAAe,EAAE,IAAI,EAAE,6EAA6E,EAAE,CAAC;IACxJ,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,UAAU;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,aAAa,MAAM,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,4DAA4D,GAAG,CAAC,WAAW,GAAG;QAChM,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QACrF,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,uFAAuF,EAAE;KAClH,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAQ/B;IACC,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAChE,KAAK,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,mBAAmB,CAAC,EAAE,CAAC;YACrG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/G,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;gBACxG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC1I,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACtE,MAAM,IAAI,GACR,KAAK,KAAK,IAAI;gBACZ,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBACxC,EAAE,EAAE,KAAK;oBACT,WAAW,EAAE,qBAAqB;oBAClC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC3F,cAAc,EAAE,GAAG,OAAO,CAAC,SAAS,WAAW;iBAChD,CAAC,CAAC;YACT,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC1E,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;YACpC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAChI,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,mBAAmB,CAAC,EAAE,CAAC;YACrF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACrD,EAAE,EAAE,QAAQ,CAAC,WAAW;gBACxB,WAAW,EAAE,uBAAuB;gBACpC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC5D,cAAc,EAAE,GAAG,QAAQ,CAAC,SAAS,aAAa;aACnD,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACjG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ask-owners.js","sourceRoot":"","sources":["../../../src/core/requests/ask-owners.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import type { PendingRequest, PendingRequests } from './ports.js';
6
6
  export type ListMine = (actor: Actor) => Promise<Result<PendingRequest[], DomainError<'NOT_AN_ACCOUNT'>>>;
7
7
  /**
8
8
  * Use case: the requests an account asked, in any state, the newest first
9
- * (decision 0056: Your requests on the overview). One still pending past its
9
+ * (decision 0056: Your requests, in Bridge's settings). One still pending past its
10
10
  * 7 days reads as expired, as the store marks it only when it is next
11
11
  * opened. Only an account asks, so any other actor has none.
12
12
  */
@@ -3,7 +3,7 @@ import { ok } from '../shared/result.js';
3
3
  import { stateAt } from './request-state.js';
4
4
  /**
5
5
  * Use case: the requests an account asked, in any state, the newest first
6
- * (decision 0056: Your requests on the overview). One still pending past its
6
+ * (decision 0056: Your requests, in Bridge's settings). One still pending past its
7
7
  * 7 days reads as expired, as the store marks it only when it is next
8
8
  * opened. Only an account asks, so any other actor has none.
9
9
  */
@@ -4,7 +4,7 @@ import { type DomainError } from '../shared/errors.js';
4
4
  import { type Result } from '../shared/result.js';
5
5
  import type { PendingRequest, PendingRequests } from './ports.js';
6
6
  export type ListToDecide = (actor: Actor) => Promise<Result<PendingRequest[], DomainError<'NOT_AN_APPROVER'>>>;
7
- /** Use case: every open request of the fleet, for an actor holding gateway:approve (decision 0056: To decide on the overview). */
7
+ /** Use case: every open request of the fleet, for an actor holding gateway:approve (decision 0056: To decide, in Bridge's settings). */
8
8
  export declare function createListToDecide(deps: {
9
9
  requests: PendingRequests;
10
10
  clock: Clock;
@@ -1,7 +1,7 @@
1
1
  import { refuse } from '../shared/errors.js';
2
2
  import { ok } from '../shared/result.js';
3
3
  import { APPROVING_SCOPE } from '../parties/approver.js';
4
- /** Use case: every open request of the fleet, for an actor holding gateway:approve (decision 0056: To decide on the overview). */
4
+ /** Use case: every open request of the fleet, for an actor holding gateway:approve (decision 0056: To decide, in Bridge's settings). */
5
5
  export function createListToDecide(deps) {
6
6
  return async (actor) => {
7
7
  if (!actor.scopes.includes(APPROVING_SCOPE)) {
@@ -1 +1 @@
1
- {"version":3,"file":"list-to-decide.js","sourceRoot":"","sources":["../../../src/core/requests/list-to-decide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,kIAAkI;AAClI,MAAM,UAAU,kBAAkB,CAAC,IAAiD;IAClF,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,eAAe,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list-to-decide.js","sourceRoot":"","sources":["../../../src/core/requests/list-to-decide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,wIAAwI;AACxI,MAAM,UAAU,kBAAkB,CAAC,IAAiD;IAClF,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,eAAe,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type Err } from './result.js';
2
2
  /** Every reason the gateway's core refuses a request. */
3
- export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'NO_AUTHORIZATION_SERVER' | 'SIGN_IN_CHECK_FAILED' | 'NOT_SIGNED_IN' | 'NO_SIGN_IN' | 'SIGN_IN_FAILED' | 'TURNED_AWAY' | 'AUTHORIZATION_SERVER_UNREACHABLE' | 'NO_DYNAMIC_REGISTRATION' | 'REGISTRATION_REFUSED' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED' | 'UNKNOWN_ALIAS' | 'PAYLOAD_TOO_LARGE' | 'TASK_NOT_FOUND' | 'TASK_TERMINAL' | 'WEBHOOK_REFUSED' | 'PUSH_CONFIG_NOT_FOUND' | 'CONTEXT_MISMATCH' | 'CARD_UNREACHABLE' | 'CARD_INVALID' | 'NOT_A_MESSAGE' | 'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION' | 'NO_SUCH_MEETING' | 'MIC_REFUSED' | 'SCOPE_NOT_LISTED' | 'SLACK_SCOPE_NOT_HELD' | 'SLACK_NOT_CONNECTED' | 'SLACK_TOKEN_REFUSED' | 'SLACK_UNAVAILABLE' | 'OTHER_WORKSPACE' | 'INSTALL_REFUSED' | 'NOT_EXPOSABLE' | 'NO_SUCH_BOT' | 'LINK_REFUSED' | 'SLACK_USER_LINKED' | 'ACCOUNT_LINKED' | 'NOT_LINKED' | 'CONFLICT';
3
+ export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_A_STEP' | 'KEY_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'NO_AUTHORIZATION_SERVER' | 'SIGN_IN_CHECK_FAILED' | 'NOT_SIGNED_IN' | 'NO_SIGN_IN' | 'SIGN_IN_FAILED' | 'TURNED_AWAY' | 'AUTHORIZATION_SERVER_UNREACHABLE' | 'NO_DYNAMIC_REGISTRATION' | 'REGISTRATION_REFUSED' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_QUESTION' | 'NOT_IN_BASKET' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED' | 'UNKNOWN_ALIAS' | 'PAYLOAD_TOO_LARGE' | 'TASK_NOT_FOUND' | 'TASK_TERMINAL' | 'WEBHOOK_REFUSED' | 'PUSH_CONFIG_NOT_FOUND' | 'CONTEXT_MISMATCH' | 'CARD_UNREACHABLE' | 'CARD_INVALID' | 'NOT_A_MESSAGE' | 'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION' | 'NO_SUCH_MEETING' | 'MIC_REFUSED' | 'SCOPE_NOT_LISTED' | 'SLACK_SCOPE_NOT_HELD' | 'SLACK_NOT_CONNECTED' | 'SLACK_TOKEN_REFUSED' | 'SLACK_UNAVAILABLE' | 'OTHER_WORKSPACE' | 'INSTALL_REFUSED' | 'NOT_EXPOSABLE' | 'NO_SUCH_BOT' | 'LINK_REFUSED' | 'SLACK_USER_LINKED' | 'ACCOUNT_LINKED' | 'NOT_LINKED' | 'CONFLICT';
4
4
  /** Why the core refused a request. Adapters map the kind to their own error shape; the message is safe to show. */
5
5
  export interface DomainError<K extends DomainErrorKind = DomainErrorKind> {
6
6
  readonly kind: K;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AA2F5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AA+F5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -1,19 +1,13 @@
1
- import { type MessageId } from '@aeolus-fleet/common';
2
- import type { PersonCrews, PersonShipDoor } from '../people/ports.js';
1
+ import type { ItemOutcomes } from '../people/item-outcome.js';
2
+ import type { InboxChanges, OpenedDeliveries, PersonCrews, PersonShipDoor } from '../people/ports.js';
3
3
  import type { Clock } from '../shared/clock.js';
4
4
  import { type Result } from '../shared/result.js';
5
5
  import type { SlackApps, SlackLinks, SlackMessages, SlackPosts, SlackSignatures } from './ports.js';
6
- import { type SignedRequest } from './slack-request.js';
7
- export type AnswerInSlack = (press: SignedRequest & {
8
- appId: string;
9
- teamId: string;
10
- userId: string;
11
- channel: string;
12
- messageTs: string;
13
- messageId: MessageId;
6
+ import { type SlackPress } from './slack-press.js';
7
+ export type AnswerInSlack = (press: SlackPress & {
14
8
  option: number;
15
9
  }) => Promise<Result<{
16
- kind: 'answered' | 'refused' | 'ignored';
10
+ kind: 'answered' | 'answeredElsewhere' | 'refused' | 'ignored';
17
11
  }, {
18
12
  kind: 'notSigned';
19
13
  }>>;
@@ -22,12 +16,18 @@ export type AnswerInSlack = (press: SignedRequest & {
22
16
  * gateway posted to them in Slack (gateway scopes 9.5 step 2). Signed as an
23
17
  * event is, by the person the question was posted to, the press sends the
24
18
  * answer as their person ship, to the question's sender in reply to it,
25
- * keyed as an answer on the gateway's page is; then the delivery is handled
26
- * and the question reacted to, as a message core stored is. Core's refusal
19
+ * keyed as an answer on the gateway's page is; then the delivery is handled,
20
+ * kept answered in Slack (Bridge, CC4), and the question reacted to, as a message core stored is. Core's refusal
27
21
  * is said in the question's thread. The press names the question's fleet
28
22
  * message, as its button carries it, so a press that comes before the
29
- * gateway kept the post's Slack message is answered too; the delivery not
30
- * acknowledged yet, the press, the person's own act, acknowledges it.
23
+ * gateway kept the post's Slack message is answered too. The press, the
24
+ * person's own act, acknowledges the delivery: Slack posts it without.
25
+ * One answer per question (Bridge, section 9): a question answered in
26
+ * another place first is sent nothing, and the thread says where it was
27
+ * answered; the answer is keyed by the question's uuid, as the basket's is,
28
+ * so two presses at once in two places are stored once. Once handled, the
29
+ * question is no longer opened anywhere, and every page of the person is
30
+ * told, so Bridge and a chat show it answered in Slack (view sync).
31
31
  */
32
32
  export declare function createAnswerInSlack(deps: {
33
33
  apps: Pick<SlackApps, 'findByAppId'>;
@@ -35,6 +35,9 @@ export declare function createAnswerInSlack(deps: {
35
35
  posts: Pick<SlackPosts, 'ofMessage'>;
36
36
  crews: Pick<PersonCrews, 'find'>;
37
37
  door: Pick<PersonShipDoor, 'ack' | 'delivery' | 'reply' | 'handled'>;
38
+ outcomes: ItemOutcomes;
39
+ opened: Pick<OpenedDeliveries, 'remove'>;
40
+ changes: InboxChanges;
38
41
  slack: Pick<SlackMessages, 'react' | 'postInThread'>;
39
42
  signatures: SlackSignatures;
40
43
  clock: Clock;
@@ -1,7 +1,10 @@
1
1
  import { ANSWER_CONTENT_TYPE, questionSchema } from '@aeolus-fleet/common';
2
- import { err, ok } from '../shared/result.js';
3
- import { isSignedBy } from './slack-request.js';
2
+ import { alreadyTextOf } from '../people/opened-of.js';
3
+ import { answerKeyOf } from '../people/basket.js';
4
+ import { KEY_UNAVAILABLE, SEALED_MESSAGE } from '../people/person-crew.js';
5
+ import { ok } from '../shared/result.js';
4
6
  import { STORED_REACTION } from './send-slack-events.js';
7
+ import { pressedOf } from './slack-press.js';
5
8
  /** The question's id in a delivery's payload; none when it is no question. */
6
9
  function questionIdOf(payload) {
7
10
  try {
@@ -17,41 +20,57 @@ function questionIdOf(payload) {
17
20
  * gateway posted to them in Slack (gateway scopes 9.5 step 2). Signed as an
18
21
  * event is, by the person the question was posted to, the press sends the
19
22
  * answer as their person ship, to the question's sender in reply to it,
20
- * keyed as an answer on the gateway's page is; then the delivery is handled
21
- * and the question reacted to, as a message core stored is. Core's refusal
23
+ * keyed as an answer on the gateway's page is; then the delivery is handled,
24
+ * kept answered in Slack (Bridge, CC4), and the question reacted to, as a message core stored is. Core's refusal
22
25
  * is said in the question's thread. The press names the question's fleet
23
26
  * message, as its button carries it, so a press that comes before the
24
- * gateway kept the post's Slack message is answered too; the delivery not
25
- * acknowledged yet, the press, the person's own act, acknowledges it.
27
+ * gateway kept the post's Slack message is answered too. The press, the
28
+ * person's own act, acknowledges the delivery: Slack posts it without.
29
+ * One answer per question (Bridge, section 9): a question answered in
30
+ * another place first is sent nothing, and the thread says where it was
31
+ * answered; the answer is keyed by the question's uuid, as the basket's is,
32
+ * so two presses at once in two places are stored once. Once handled, the
33
+ * question is no longer opened anywhere, and every page of the person is
34
+ * told, so Bridge and a chat show it answered in Slack (view sync).
26
35
  */
27
36
  export function createAnswerInSlack(deps) {
28
- return async ({ appId, teamId, userId, channel, messageTs, messageId, option, body, timestamp, signature }) => {
29
- const app = await deps.apps.findByAppId(appId);
30
- if (!isSignedBy(app, { request: { body, timestamp, signature }, signatures: deps.signatures, clock: deps.clock })) {
31
- return err({ kind: 'notSigned' });
37
+ return async (press) => {
38
+ const { channel, messageTs, option } = press;
39
+ const pressed = await pressedOf(deps, press);
40
+ if (!pressed.isOk) {
41
+ return pressed;
32
42
  }
33
- const link = await deps.links.find(app.fleetId, { teamId, userId });
34
- const kept = link?.stoppedAt === null ? await deps.posts.ofMessage(app.fleetId, { personShipId: link.personShipId, messageId }) : undefined;
35
- const post = kept?.appId === appId && kept.channel === channel ? kept : undefined;
36
- const crew = post === undefined ? undefined : await deps.crews.find(app.fleetId, post.personShipId);
37
- if (post === undefined || post.deliveryId === null || post.senderShipId === null || crew === undefined || app.bot === null) {
43
+ if (pressed.value === undefined) {
38
44
  return ok({ kind: 'ignored' });
39
45
  }
40
- if (post.ackedAt === null) {
41
- // Core reads a delivery again only once acknowledged; a refusal leaves it unread, and the press ignored.
42
- await deps.door.ack(crew.crewToken, post.deliveryId);
46
+ const { app, post, crew } = pressed.value;
47
+ const [earlier] = await deps.outcomes.findMany(app.fleetId, { shipId: post.personShipId, deliveryIds: [post.deliveryId] });
48
+ if (earlier !== undefined) {
49
+ await deps.slack.postInThread(app.bot.token, { channel, threadTs: messageTs, text: alreadyTextOf(earlier) });
50
+ return ok({ kind: 'answeredElsewhere' });
43
51
  }
52
+ // The press, the person's own act, acknowledges it (Bridge, CC6); core reads a delivery again only once acknowledged, so a refusal leaves it unread, and the press ignored.
53
+ await deps.door.ack(crew.crewToken, post.deliveryId);
44
54
  const delivery = await deps.door.delivery(crew.crewToken, post.deliveryId);
55
+ if (!delivery.isOk && delivery.error.code === KEY_UNAVAILABLE) {
56
+ await deps.slack.postInThread(app.bot.token, { channel, threadTs: messageTs, text: SEALED_MESSAGE });
57
+ return ok({ kind: 'refused' });
58
+ }
45
59
  const questionId = delivery.isOk ? questionIdOf(delivery.value.payload) : undefined;
46
60
  if (!delivery.isOk || questionId === undefined) {
47
61
  return ok({ kind: 'ignored' });
48
62
  }
49
- const replied = await deps.door.reply(crew.crewToken, { to: post.senderShipId, inReplyTo: post.messageId, contentType: ANSWER_CONTENT_TYPE, payload: JSON.stringify({ questionId, option }), idempotencyKey: `answer-${post.deliveryId}` });
63
+ const replied = await deps.door.reply(crew.crewToken, { to: post.senderShipId, inReplyTo: post.messageId, contentType: ANSWER_CONTENT_TYPE, payload: JSON.stringify({ questionId, option }), idempotencyKey: answerKeyOf({ questionId }) });
50
64
  if (!replied.isOk) {
51
65
  await deps.slack.postInThread(app.bot.token, { channel, threadTs: messageTs, text: `${delivery.value.senderName} did not take your answer: ${replied.error.message}` });
52
66
  return ok({ kind: 'refused' });
53
67
  }
54
- await deps.door.handled(crew.crewToken, post.deliveryId);
68
+ const handled = await deps.door.handled(crew.crewToken, post.deliveryId);
69
+ if (handled.isOk) {
70
+ await deps.outcomes.save({ fleetId: app.fleetId, shipId: post.personShipId, deliveryId: post.deliveryId, place: 'slack', kind: 'answered', option, at: deps.clock.now() });
71
+ await deps.opened.remove(app.fleetId, { shipId: post.personShipId, deliveryId: post.deliveryId });
72
+ await deps.changes.tell({ fleetId: app.fleetId, shipId: post.personShipId });
73
+ }
55
74
  await deps.slack.react(app.bot.token, { channel, ts: messageTs, name: STORED_REACTION });
56
75
  return ok({ kind: 'answered' });
57
76
  };