@aeolus-fleet/gateway 0.38.1 → 0.38.2

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 (258) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/trpc/router.d.ts +10 -0
  3. package/dist/adapters/trpc/router.js +2 -0
  4. package/dist/adapters/trpc/router.js.map +1 -1
  5. package/dist/app.js +2 -0
  6. package/dist/app.js.map +1 -1
  7. package/dist/core/people/read-item.d.ts +31 -0
  8. package/dist/core/people/read-item.js +77 -0
  9. package/dist/core/people/read-item.js.map +1 -0
  10. package/package.json +1 -1
  11. package/web/.next/BUILD_ID +1 -1
  12. package/web/.next/build-manifest.json +3 -3
  13. package/web/.next/diagnostics/route-bundle-stats.json +73 -73
  14. package/web/.next/fallback-build-manifest.json +3 -3
  15. package/web/.next/prerender-manifest.json +3 -3
  16. package/web/.next/server/app/(bridge)/bridge/basket/page/server-reference-manifest.json +10 -10
  17. package/web/.next/server/app/(bridge)/bridge/basket/page.js.nft.json +1 -1
  18. package/web/.next/server/app/(bridge)/bridge/basket/page_client-reference-manifest.js +1 -1
  19. package/web/.next/server/app/(bridge)/bridge/done/page/server-reference-manifest.json +4 -4
  20. package/web/.next/server/app/(bridge)/bridge/done/page.js.nft.json +1 -1
  21. package/web/.next/server/app/(bridge)/bridge/done/page_client-reference-manifest.js +1 -1
  22. package/web/.next/server/app/(bridge)/bridge/fleet/page/server-reference-manifest.json +3 -3
  23. package/web/.next/server/app/(bridge)/bridge/fleet/page.js.nft.json +1 -1
  24. package/web/.next/server/app/(bridge)/bridge/fleet/page_client-reference-manifest.js +1 -1
  25. package/web/.next/server/app/(bridge)/bridge/messages/page/server-reference-manifest.json +11 -11
  26. package/web/.next/server/app/(bridge)/bridge/messages/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(bridge)/bridge/messages/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(bridge)/bridge/page/server-reference-manifest.json +10 -10
  29. package/web/.next/server/app/(bridge)/bridge/page.js.nft.json +1 -1
  30. package/web/.next/server/app/(bridge)/bridge/page_client-reference-manifest.js +1 -1
  31. package/web/.next/server/app/(bridge)/bridge/settings/page/server-reference-manifest.json +3 -3
  32. package/web/.next/server/app/(bridge)/bridge/settings/page.js.nft.json +1 -1
  33. package/web/.next/server/app/(bridge)/bridge/settings/page_client-reference-manifest.js +1 -1
  34. package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page/server-reference-manifest.json +4 -4
  35. package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page.js.nft.json +1 -1
  36. package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page_client-reference-manifest.js +1 -1
  37. package/web/.next/server/app/(bridge)/bridge/settings/routing/page/server-reference-manifest.json +7 -7
  38. package/web/.next/server/app/(bridge)/bridge/settings/routing/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(bridge)/bridge/settings/routing/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(bridge)/bridge/stay-aware/page/server-reference-manifest.json +10 -10
  41. package/web/.next/server/app/(bridge)/bridge/stay-aware/page.js.nft.json +1 -1
  42. package/web/.next/server/app/(bridge)/bridge/stay-aware/page_client-reference-manifest.js +1 -1
  43. package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page/server-reference-manifest.json +19 -19
  44. package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page.js.nft.json +1 -1
  45. package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  46. package/web/.next/server/app/(bridge)/outside-parties/[name]/page/server-reference-manifest.json +10 -10
  47. package/web/.next/server/app/(bridge)/outside-parties/[name]/page.js.nft.json +1 -1
  48. package/web/.next/server/app/(bridge)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page/server-reference-manifest.json +19 -19
  50. package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(bridge)/outside-parties/add/page/server-reference-manifest.json +12 -12
  53. package/web/.next/server/app/(bridge)/outside-parties/add/page.js.nft.json +1 -1
  54. package/web/.next/server/app/(bridge)/outside-parties/add/page_client-reference-manifest.js +1 -1
  55. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +4 -4
  56. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  57. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page/server-reference-manifest.json +4 -4
  59. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(bridge)/outside-parties/page/server-reference-manifest.json +4 -4
  62. package/web/.next/server/app/(bridge)/outside-parties/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(bridge)/outside-parties/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
  65. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
  68. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +9 -9
  71. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  74. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +9 -9
  77. package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
  78. package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +9 -9
  80. package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +9 -9
  83. package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +9 -9
  86. package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/_global-error.html +1 -1
  89. package/web/.next/server/app/_global-error.rsc +1 -1
  90. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  91. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  92. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  93. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  94. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  95. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  97. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  98. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  100. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  101. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  102. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  103. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  104. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  105. package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js +1 -1
  106. package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js.map +1 -1
  107. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_messages_page_actions_1tg2-lw0i6g9l.js +1 -1
  108. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_messages_page_actions_1tg2-lw0i6g9l.js.map +1 -1
  109. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_settings_page_actions_0_te6h-2xxp7l.js +1 -1
  110. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_settings_page_actions_0_te6h-2xxp7l.js.map +1 -1
  111. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js +1 -1
  112. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js +1 -1
  114. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_change_page_actions_1is-kjq5bubl4.js +1 -1
  116. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_change_page_actions_1is-kjq5bubl4.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_page_actions_1mctxtlzsa7xi.js +1 -1
  118. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_page_actions_1mctxtlzsa7xi.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_retire_page_actions_0xh6ok1un7s9k.js +1 -1
  120. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_retire_page_actions_0xh6ok1un7s9k.js.map +1 -1
  121. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add-a2a-agent_page_actions_1w1q5eavo_loo.js +1 -1
  122. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add-a2a-agent_page_actions_1w1q5eavo_loo.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add_page_actions_0urcbg_r0lo7j.js +1 -1
  124. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add_page_actions_0urcbg_r0lo7j.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__04g-10_lwy-l2._.js +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__0geojgpilsx6e._.js +1 -1
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ktja-0332icp._.js +1 -1
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__0m_acooerfxfb._.js +1 -1
  129. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ovcg5tg3nh49._.js +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ovcg5tg3nh49._.js.map +1 -1
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ro-majrw7piv._.js +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ro-majrw7piv._.js.map +1 -1
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__0zz6fx0keti4r._.js +1 -1
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__0zz6fx0keti4r._.js.map +1 -1
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__14hg5j_bmrdxt._.js +1 -1
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
  137. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__19p4g16n2nh0b._.js +1 -1
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__19p4g16n2nh0b._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__1ncn4wx-1i09m._.js +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__1ncn4wx-1i09m._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__1odtiyyqa5vlq._.js +1 -1
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__1vrtfw4dxnfxt._.js +1 -1
  144. package/web/.next/server/chunks/ssr/{_08jq3ga73wgy1._.js → _0-785idcov4j4._.js} +2 -2
  145. package/web/.next/server/chunks/ssr/{_08jq3ga73wgy1._.js.map → _0-785idcov4j4._.js.map} +1 -1
  146. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  147. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/_0_nfv33ug5g31._.js +1 -1
  149. package/web/.next/server/chunks/ssr/_0_nfv33ug5g31._.js.map +1 -1
  150. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
  151. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/{_090owdv-b-luu._.js → _0nh9w3mh82f53._.js} +2 -2
  153. package/web/.next/server/chunks/ssr/{_090owdv-b-luu._.js.map → _0nh9w3mh82f53._.js.map} +1 -1
  154. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  155. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  157. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/{_0cbvl92sxxpsf._.js → _17pnprd-0lxai._.js} +2 -2
  159. package/web/.next/server/chunks/ssr/{_0cbvl92sxxpsf._.js.map → _17pnprd-0lxai._.js.map} +1 -1
  160. package/web/.next/server/chunks/ssr/_1cs_0d0h7mhw0._.js +1 -1
  161. package/web/.next/server/chunks/ssr/_1cs_0d0h7mhw0._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/_1cxulh-x54r6v._.js +3 -0
  163. package/web/.next/server/chunks/ssr/{_0239h2ocqyibp._.js.map → _1cxulh-x54r6v._.js.map} +1 -1
  164. package/web/.next/server/chunks/ssr/_1j80let80btdj._.js +3 -0
  165. package/web/.next/server/chunks/ssr/{_087cuueeby0hw._.js.map → _1j80let80btdj._.js.map} +1 -1
  166. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  167. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/{_0t-yyzc3pbo8m._.js → _1q5o7l5d6r_f5._.js} +2 -2
  169. package/web/.next/server/chunks/ssr/{_0t-yyzc3pbo8m._.js.map → _1q5o7l5d6r_f5._.js.map} +1 -1
  170. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  171. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/_1unzgziqo0j03._.js +57 -0
  173. package/web/.next/server/chunks/ssr/_1unzgziqo0j03._.js.map +1 -0
  174. package/web/.next/server/chunks/ssr/_1yy6lx5ur8mbz._.js +57 -0
  175. package/web/.next/server/chunks/ssr/_1yy6lx5ur8mbz._.js.map +1 -0
  176. package/web/.next/server/chunks/ssr/web_0a9n7acgjrk5c._.js +1 -1
  177. package/web/.next/server/chunks/ssr/web_0a9n7acgjrk5c._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/web_1vvrekkq5mirt._.js +1 -1
  179. package/web/.next/server/chunks/ssr/web_1vvrekkq5mirt._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js +1 -1
  181. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js +1 -1
  183. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_fleet_page_actions_19wmo6phgvqfk.js +1 -1
  185. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_fleet_page_actions_19wmo6phgvqfk.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js +1 -1
  187. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/{web_features_0fji0qhw-fk8x._.js → web_features_1kv2-nwrqcvkb._.js} +2 -2
  189. package/web/.next/server/chunks/ssr/{web_features_0fji0qhw-fk8x._.js.map → web_features_1kv2-nwrqcvkb._.js.map} +1 -1
  190. package/web/.next/server/chunks/ssr/{web_features_1tbi4ma6mufmp._.js → web_features_1ldqjm-0yawn-._.js} +2 -2
  191. package/web/.next/server/chunks/ssr/{web_features_1tbi4ma6mufmp._.js.map → web_features_1ldqjm-0yawn-._.js.map} +1 -1
  192. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  193. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  195. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  197. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/{web_features_bridge_0zkl4uc3a1wa6._.js → web_features_bridge_1kjza9vdof095._.js} +2 -2
  199. package/web/.next/server/chunks/ssr/{web_features_bridge_0zkl4uc3a1wa6._.js.map → web_features_bridge_1kjza9vdof095._.js.map} +1 -1
  200. package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js +1 -1
  201. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js +1 -1
  202. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js +1 -1
  204. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js +1 -1
  206. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/web_features_bridge_state_message-rows_tsx_1ky4-xa4az_yu._.js +1 -1
  208. package/web/.next/server/chunks/ssr/web_features_bridge_state_message-rows_tsx_1ky4-xa4az_yu._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/web_features_bridge_state_messages-panel_tsx_1yvr_ww639d25._.js +1 -1
  210. package/web/.next/server/chunks/ssr/web_features_bridge_state_messages-panel_tsx_1yvr_ww639d25._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
  212. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  214. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  216. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  217. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +1 -1
  218. package/web/.next/server/middleware-build-manifest.js +3 -3
  219. package/web/.next/server/pages/500.html +1 -1
  220. package/web/.next/server/preview-props.json +3 -3
  221. package/web/.next/server/server-reference-manifest.js +1 -1
  222. package/web/.next/server/server-reference-manifest.json +51 -51
  223. package/web/.next/static/chunks/0d9nwi_5jtx1s.js +1 -0
  224. package/web/.next/static/chunks/{0t63w7558fw1a.js → 0mgpgj4c1qyd-.js} +1 -1
  225. package/web/.next/static/chunks/0r0gremjx2f00.js +1 -0
  226. package/web/.next/static/chunks/{3nifwjh6pf2oa.js → 0u8l5qlnqqouz.js} +1 -1
  227. package/web/.next/static/chunks/{0pypj0_ydhccr.js → 1-fz8siz2ll12.js} +1 -1
  228. package/web/.next/static/chunks/{1js-1nyhxr0b3.js → 1gws30z-w_b5u.js} +1 -1
  229. package/web/.next/static/chunks/{3a347eh56u6w0.js → 1l7xdbkkzyg84.js} +1 -1
  230. package/web/.next/static/chunks/{2h3yztsbjw8sd.js → 1qk1rg1nlwibf.js} +4 -4
  231. package/web/.next/static/chunks/{3tmji77wyx7q4.js → 1y0i5sfbser7m.js} +1 -1
  232. package/web/.next/static/chunks/{1zv4cn94bmk2x.js → 2bwa_vmicucp7.js} +1 -1
  233. package/web/.next/static/chunks/{2vaqwkb5z2wz8.js → 2h_eln166j2qm.js} +1 -1
  234. package/web/.next/static/chunks/2uyfitze_si6t.js +1 -0
  235. package/web/.next/static/chunks/{36ccnz8nhzbm0.js → 2xewn4wc6-r89.js} +1 -1
  236. package/web/.next/static/chunks/{2w5o8qcjwdoqm.js → 2zy50m3u0ncal.js} +1 -1
  237. package/web/.next/static/chunks/363hplgln_a8l.js +1 -0
  238. package/web/.next/static/chunks/3_pcw5v326or4.js +1 -0
  239. package/web/.next/static/chunks/{3qmppgfbfoif6.js → 3jmofkmbej71o.js} +1 -1
  240. package/web/.next/static/chunks/{0-mbc7l-ce37z.js → 3qx9pxz84tr19.js} +1 -1
  241. package/web/.next/static/chunks/3vslm1-mw-xs2.js +1 -0
  242. package/web/.next/trace +1 -1
  243. package/web/.next/trace-build +1 -1
  244. package/web/.next/server/chunks/ssr/_0239h2ocqyibp._.js +0 -3
  245. package/web/.next/server/chunks/ssr/_087cuueeby0hw._.js +0 -3
  246. package/web/.next/server/chunks/ssr/_1e7srghw1_x9p._.js +0 -57
  247. package/web/.next/server/chunks/ssr/_1e7srghw1_x9p._.js.map +0 -1
  248. package/web/.next/server/chunks/ssr/_1q0rhps0nvrq5._.js +0 -57
  249. package/web/.next/server/chunks/ssr/_1q0rhps0nvrq5._.js.map +0 -1
  250. package/web/.next/static/chunks/06tpbp-er8dog.js +0 -1
  251. package/web/.next/static/chunks/1ovt2ef2naqgj.js +0 -1
  252. package/web/.next/static/chunks/24qt7-p52g31c.js +0 -1
  253. package/web/.next/static/chunks/2ukdl2v0q677n.js +0 -1
  254. package/web/.next/static/chunks/33kxvt_kxg5yb.js +0 -1
  255. package/web/.next/static/chunks/38m6y148vwux3.js +0 -1
  256. /package/web/.next/static/{9KCcVgnuuZ1fElZoEqTjx → EmsE5wPdK7fJYQ7DzIz5z}/_buildManifest.js +0 -0
  257. /package/web/.next/static/{9KCcVgnuuZ1fElZoEqTjx → EmsE5wPdK7fJYQ7DzIz5z}/_clientMiddlewareManifest.js +0 -0
  258. /package/web/.next/static/{9KCcVgnuuZ1fElZoEqTjx → EmsE5wPdK7fJYQ7DzIz5z}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/bridge/ui/place-icons.tsx","../../../../../web/features/bridge/hooks/data%3Ae5bba0%20%3Ctext/javascript%3E","../../../../../node_modules/lucide-react/src/icons/message-circle-question-mark.ts","../../../../../web/features/bridge/state/places-panel.tsx","../../../../../web/features/bridge/hooks/data%3A83413a%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/slack-link-path.ts","../../../../../web/features/bridge/services/web-push.ts","../../../../../web/features/bridge/hooks/data%3A8837d9%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A0691cc%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/use-web-push.ts","../../../../../web/features/bridge/ui/place-card.tsx","../../../../../web/features/bridge/state/routing-panel.tsx","../../../../../web/features/bridge/ui/routing-switch.tsx"],"sourcesContent":["import { Bell, CircleQuestionMark, Hand, Hash, Mail, MessageCircleQuestionMark, Ship, Sparkles, type LucideIcon } from 'lucide-react';\n\nimport type { RoutedJob, RoutedPlace } from '../services/routing';\n\n/** Each job's icon in its tone, as the routing mockup draws it: Decide active, Do waiting, the others muted. */\nexport const JOB_ICONS: Readonly<Record<RoutedJob, { readonly Icon: LucideIcon; readonly tone: string }>> = {\n decide: { Icon: CircleQuestionMark, tone: 'text-tone-active-fg' },\n do: { Icon: Hand, tone: 'text-tone-waiting-fg' },\n 'stay-aware': { Icon: Bell, tone: 'text-muted-foreground' },\n 'everything-else': { Icon: MessageCircleQuestionMark, tone: 'text-muted-foreground' },\n};\n\n/** Bridge's icon, the mark of the sidebar. */\nexport const BRIDGE_ICON: LucideIcon = Ship;\n\n/** Each place's icon, as the routing mockup draws it. */\nexport const PLACE_ICONS: Readonly<Record<RoutedPlace, LucideIcon>> = { slack: Hash, chat: Sparkles, 'web-push': Bell, email: Mail };\n","/* __next_internal_action_entry_do_not_use__ [{\"40e6e07086412f2b85d3be4b1961ecab85c19f97c4\":{\"name\":\"turnRoute\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_12=/*#__PURE__*/createServerReference(\"40e6e07086412f2b85d3be4b1961ecab85c19f97c4\",callServer,void 0,findSourceMapURL,\"turnRoute\");export{$$RSC_SERVER_ACTION_12 as turnRoute};","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'message-circle-question-mark',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n key: '1sd12s',\n },\n ],\n ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n ],\n aliases: ['message-circle-question'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessageCircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiIC8+CiAgPHBhdGggZD0iTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzIiAvPgogIDxwYXRoIGQ9Ik0xMiAxN2guMDEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/message-circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircleQuestionMark = createLucideIcon(__iconData);\n\nexport default MessageCircleQuestionMark;\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute, unlinkSlack } from '../hooks/bridge-actions';\nimport type { SlackLink } from '../hooks/read-bridge';\nimport { SLACK_LINK_PATH } from '../hooks/slack-link-path';\nimport { useWebPush } from '../hooks/use-web-push';\nimport type { WakeChannels } from '../services/deliveries';\nimport { chatCardOf, emailCardOf, emailTurnsOf, PLACE_NAMES, slackCardOf, webPushCardOf, type RoutingView } from '../services/routing';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { PlaceCard } from '../ui/place-card';\nimport { PLACE_ICONS } from '../ui/place-icons';\n\nfunction SlackPlace({ fleetId, slackLink }: { fleetId: string; slackLink: SlackLink | null }) {\n const [isUnlinking, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = slackCardOf(slackLink);\n\n const unlink = () => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await unlinkSlack(fleetId);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <PlaceCard place=\"slack\" name={PLACE_NAMES.slack} Icon={PLACE_ICONS.slack} card={card}>\n {card.action === 'link' ? (\n <a\n href={`${SLACK_LINK_PATH}?${new URLSearchParams({ fleet: fleetId }).toString()}`}\n data-testid=\"bridge-slack-link\"\n className=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-caption font-medium text-primary-foreground hover:bg-primary-hover\"\n >\n Link Slack\n </a>\n ) : null}\n {card.action === 'unlink' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-slack-unlink\" isPending={isUnlinking} pendingLabel=\"Unlinking...\" onClick={unlink}>\n Unlink\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction WebPushPlace({ fleetId, webPush }: { fleetId: string; webPush: WakeChannels['webPush'] | undefined }) {\n const browsers = webPush?.browsers ?? [];\n const { isTaken, ownEndpoint, working, failure, turnOn, remove } = useWebPush({ fleetId, webPushKey: webPush?.publicKey ?? null });\n const card = webPushCardOf({ isOffered: webPush !== undefined && webPush.publicKey !== null, isTaken, ownEndpoint, browsers });\n const others = browsers.filter(({ endpoint }) => card.action !== 'remove' || endpoint !== ownEndpoint);\n return (\n <PlaceCard place=\"web-push\" name={PLACE_NAMES['web-push']} Icon={PLACE_ICONS['web-push']} card={card}>\n {card.action === 'remove' && ownEndpoint !== undefined ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-remove\" isPending={working === ownEndpoint} pendingLabel=\"Removing...\" disabled={working !== undefined} onClick={() => { remove(ownEndpoint); }}>\n Remove\n </ActionButton>\n ) : null}\n {card.action === 'turnOn' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-on\" isPending={working === 'on'} pendingLabel=\"Turning on...\" disabled={working !== undefined} onClick={turnOn}>\n Turn on\n </ActionButton>\n ) : null}\n {others.map(({ endpoint, browser, isGone }) => (\n <span key={endpoint} data-testid=\"bridge-web-push-browser\" className=\"flex w-full items-center gap-2 text-caption text-muted-foreground\">\n <span className=\"min-w-0 flex-1\">{isGone ? `${browser}: no longer takes wakes` : `Also on in ${browser}`}</span>\n <button type=\"button\" data-testid=\"bridge-web-push-remove-other\" disabled={working !== undefined} onClick={() => { remove(endpoint); }} className=\"underline hover:text-foreground disabled:opacity-50\">\n {working === endpoint ? 'Removing...' : 'Remove'}\n </button>\n </span>\n ))}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction EmailPlace({ fleetId, routing }: { fleetId: string; routing: RoutingView }) {\n const [isTurning, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = emailCardOf({ isOffered: routing.offered.email, isOnForAnyJob: routing.jobs.some(({ places }) => places.email) });\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTransition(async () => {\n for (const change of emailTurnsOf(routing, isOn)) {\n const outcome = await turnRoute({ fleet: fleetId, ...change });\n if (!outcome.isOk) {\n setFailure(outcome.message);\n return;\n }\n }\n });\n };\n\n return (\n <PlaceCard place=\"email\" name={PLACE_NAMES.email} Icon={PLACE_ICONS.email} card={card}>\n {card.action === 'turnOn' || card.action === 'turnOff' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-email-turn\" isPending={isTurning} pendingLabel={card.action === 'turnOn' ? 'Turning on...' : 'Turning off...'} onClick={() => { turn(card.action === 'turnOn'); }}>\n {card.action === 'turnOn' ? 'Turn on' : 'Turn off'}\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\n/**\n * The places on top of Where things show (Bridge, section 8; the routing\n * mockup), each with its state and its one action: Slack linked or not, the\n * chats connected through the gateway, web push in this browser, and email.\n */\nexport function PlacesPanel({\n fleetId,\n routing,\n slackLink,\n chats,\n webPush,\n}: {\n fleetId: string;\n routing: RoutingView;\n slackLink: SlackLink | null;\n chats: readonly string[];\n webPush: WakeChannels['webPush'] | undefined;\n}) {\n return (\n <section aria-label=\"The places\" className=\"grid gap-2.5 sm:grid-cols-2 lg:grid-cols-4\">\n <SlackPlace fleetId={fleetId} slackLink={slackLink} />\n <PlaceCard place=\"chat\" name={PLACE_NAMES.chat} Icon={PLACE_ICONS.chat} card={chatCardOf(chats)} />\n <WebPushPlace fleetId={fleetId} webPush={webPush} />\n <EmailPlace fleetId={fleetId} routing={routing} />\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40d8c38d8dd398630ef95d175bedc0bf0ac9acb32c\":{\"name\":\"unlinkSlack\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_15=/*#__PURE__*/createServerReference(\"40d8c38d8dd398630ef95d175bedc0bf0ac9acb32c\",callServer,void 0,findSourceMapURL,\"unlinkSlack\");export{$$RSC_SERVER_ACTION_15 as unlinkSlack};","/** Where Link Slack starts (gateway scopes 9.3): the button in Bridge's settings and the button in a bot's answer in Slack (src/core/slack/take-slack-event.ts). */\nexport const SLACK_LINK_PATH = '/slack/link';\n","/**\n * What the section of wakes of Bridge's settings works out in the browser (wake a\n * person, W8): the name a browser it turns web push on in is listed by, the\n * gateway's push key as the browser's push manager takes it, and the\n * subscription the browser sends the gateway.\n */\n\n/** A browser's push subscription as the gateway takes it, with the browser's name. */\nexport interface SubscriptionInput {\n readonly endpoint: string;\n readonly keys: { readonly p256dh: string; readonly auth: string };\n readonly browser: string;\n}\n\n/** The browsers and systems a name is made of, the first that matches counting: Edge and Chrome also say Safari, and Chrome says Chrome. */\nconst BROWSERS: readonly (readonly [RegExp, string])[] = [\n [/Edg\\//, 'Edge'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\nconst SYSTEMS: readonly (readonly [RegExp, string])[] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstOf = (userAgent: string, names: readonly (readonly [RegExp, string])[]): string | undefined => names.find(([pattern]) => pattern.test(userAgent))?.[1];\n\n/** The name a browser is listed by, such as Firefox on Linux, from its user agent. */\nexport function browserNameOf(userAgent: string): string {\n const browser = firstOf(userAgent, BROWSERS);\n const system = firstOf(userAgent, SYSTEMS);\n if (browser === undefined) {\n return 'A browser';\n }\n return system === undefined ? browser : `${browser} on ${system}`;\n}\n\n/** The bytes a base64url key stands for, as the browser's push manager takes the gateway's key. */\nexport function applicationServerKeyOf(key: string): Uint8Array<ArrayBuffer> {\n const binary = atob(key.replaceAll('-', '+').replaceAll('_', '/'));\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n\n/** The subscription to send, from the push manager's own, or none when it gave no endpoint or keys. */\nexport function subscriptionInputOf(subscription: { endpoint?: string; keys?: Record<string, string> }, browser: string): SubscriptionInput | undefined {\n const { endpoint, keys } = subscription;\n const p256dh = keys?.p256dh;\n const auth = keys?.auth;\n return endpoint === undefined || p256dh === undefined || auth === undefined ? undefined : { endpoint, keys: { p256dh, auth }, browser };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60384b6c405e65a6a446b9dbcf1942f6c43673b2e4\":{\"name\":\"turnOffWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_14=/*#__PURE__*/createServerReference(\"60384b6c405e65a6a446b9dbcf1942f6c43673b2e4\",callServer,void 0,findSourceMapURL,\"turnOffWebPush\");export{$$RSC_SERVER_ACTION_14 as turnOffWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"60e30c4d137454dd4725668e5208674e2e3f51b0c7\":{\"name\":\"turnOnWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_13=/*#__PURE__*/createServerReference(\"60e30c4d137454dd4725668e5208674e2e3f51b0c7\",callServer,void 0,findSourceMapURL,\"turnOnWebPush\");export{$$RSC_SERVER_ACTION_13 as turnOnWebPush};","'use client';\n\nimport { useEffect, useState, useTransition } from 'react';\n\nimport type { WakeChannels } from '../services/deliveries';\nimport { applicationServerKeyOf, browserNameOf, subscriptionInputOf } from '../services/web-push';\nimport { turnOffWebPush, turnOnWebPush } from './bridge-actions';\n\n/** The service worker that shows a wake and opens Bridge when it is pressed. */\nconst WORKER_PATH = '/wake-worker.js';\n\n/** Whether this browser takes web push at all. */\nfunction isPushTaken(): boolean {\n return 'serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window;\n}\n\n/** This browser's own push subscription with the gateway's worker, if it has one. */\nasync function ownSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.getRegistration(WORKER_PATH);\n return (await registration?.pushManager.getSubscription()) ?? null;\n}\n\n/** Asks the browser's permission, then subscribes it with the gateway's key: the subscription to send, or why there is none. */\nasync function subscribed(webPushKey: string): Promise<{ readonly isOk: true; readonly value: PushSubscription } | { readonly isOk: false; readonly message: string }> {\n if ((await Notification.requestPermission()) !== 'granted') {\n return { isOk: false, message: 'Your browser did not allow notifications from this site: allow them, then turn web push on again' };\n }\n const registration = await navigator.serviceWorker.register(WORKER_PATH);\n await navigator.serviceWorker.ready;\n return { isOk: true, value: await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKeyOf(webPushKey) }) };\n}\n\n/**\n * Web push in this browser (wake a person, W8): whether it takes web push,\n * its own subscription, turning it on, which asks the browser's permission\n * first, and removing a browser, this one or another.\n */\nexport function useWebPush({ fleetId, webPushKey }: { fleetId: string; webPushKey: string | null }) {\n const [isTaken, setIsTaken] = useState(true);\n const [ownEndpoint, setOwnEndpoint] = useState<string | undefined>();\n const [working, setWorking] = useState<string | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n useEffect(() => {\n if (!isPushTaken()) {\n setIsTaken(false);\n return;\n }\n void ownSubscription().then((own) => {\n setOwnEndpoint(own?.endpoint);\n });\n }, []);\n\n const turnOn = () => {\n if (webPushKey === null) {\n return;\n }\n setWorking('on');\n setFailure(undefined);\n startTransition(async () => {\n try {\n const subscription = await subscribed(webPushKey);\n if (!subscription.isOk) {\n setFailure(subscription.message);\n return;\n }\n const input = subscriptionInputOf(subscription.value.toJSON(), browserNameOf(navigator.userAgent));\n if (input === undefined) {\n setFailure('Your browser gave no push subscription: try again');\n return;\n }\n const outcome = await turnOnWebPush(fleetId, input);\n if (outcome.isOk) {\n setOwnEndpoint(input.endpoint);\n } else {\n setFailure(outcome.message);\n }\n } catch {\n setFailure('Your browser could not turn web push on: try again');\n } finally {\n setWorking(undefined);\n }\n });\n };\n\n const remove = (endpoint: string) => {\n setWorking(endpoint);\n setFailure(undefined);\n startTransition(async () => {\n if (endpoint === ownEndpoint) {\n await (await ownSubscription())?.unsubscribe();\n setOwnEndpoint(undefined);\n }\n const outcome = await turnOffWebPush(fleetId, endpoint);\n setWorking(undefined);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return { isTaken, ownEndpoint, working, failure, turnOn, remove };\n}\n\nexport type WebPushBrowsers = WakeChannels['webPush']['browsers'];\n","import { CircleCheck, CirclePause, type LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport type { PlaceCard as PlaceCardState } from '../services/routing';\n\n/**\n * A place on top of Where things show (the routing mockup): its icon and\n * name, its state on the right, what it does, and its one action below.\n */\nexport function PlaceCard({ place, name, Icon, card, children }: { place: string; name: string; Icon: LucideIcon; card: PlaceCardState; children?: ReactNode }) {\n const StateIcon = card.state.isOk ? CircleCheck : CirclePause;\n return (\n <div data-testid={`bridge-place-${place}`} className=\"flex flex-col gap-1.5 rounded-lg border border-border bg-card px-3 py-2.5\">\n <span className=\"flex items-center gap-2 font-medium\">\n <Icon aria-hidden className=\"size-4 shrink-0\" />\n {name}\n <span data-testid={`bridge-place-${place}-state`} className={`ml-auto inline-flex items-center gap-1 text-caption font-medium ${card.state.isOk ? 'text-tone-ok-fg' : 'text-muted-foreground'}`}>\n <StateIcon aria-hidden className=\"size-3.5\" />\n {card.state.label}\n </span>\n </span>\n <span className=\"text-caption text-muted-foreground\">{card.description}</span>\n {children === undefined ? null : <span className=\"mt-auto flex flex-col items-start gap-1.5\">{children}</span>}\n </div>\n );\n}\n","'use client';\n\nimport { CircleCheck } from 'lucide-react';\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute } from '../hooks/bridge-actions';\nimport { JOB_NAMES, PLACE_NAMES, ROUTED_PLACES, turnedToastOf, type RoutedJob, type RoutedPlace, type RoutingToast, type RoutingView, type WaitingByJob } from '../services/routing';\nimport { Notice } from '../ui/notice';\nimport { BRIDGE_ICON, JOB_ICONS, PLACE_ICONS } from '../ui/place-icons';\nimport { RoutingSwitch } from '../ui/routing-switch';\n\n/** Six columns on desktop: the job, Bridge, then each place. */\nconst ROW = 'sm:grid sm:grid-cols-[1.6fr_repeat(5,1fr)] sm:items-center sm:gap-3';\n\n/** The toast after a change (the routing mockup): what the place now shows. */\nfunction Toast({ toast }: { toast: RoutingToast }) {\n return (\n <div role=\"status\" data-testid=\"bridge-routing-toast\" className=\"flex max-w-[720px] gap-3 rounded-lg border border-border bg-popover py-3.5 pr-3.5 pl-4 text-popover-foreground shadow-lg\">\n <CircleCheck aria-hidden className=\"mt-0.5 size-4 shrink-0 text-tone-ok-fg\" />\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"font-medium\">{toast.title}</span>\n <span className=\"text-caption text-muted-foreground\">{toast.detail}</span>\n </span>\n </div>\n );\n}\n\n/** A place's cell: on desktop the switch in its column, on the phone a line with the place's name and the switch. */\nfunction PlaceCell({ name, children }: { name: string; children: React.ReactNode }) {\n return (\n <span className=\"flex items-center justify-between sm:block\">\n <span className=\"sm:hidden\">{name}</span>\n {children}\n </span>\n );\n}\n\n/**\n * Routing per job (Bridge, section 8; the routing mockup): per job, the\n * places that show it besides Bridge, which always does. A switch turns a\n * place on or off at once; the toast then says what it shows (CC20). A\n * place the gateway does not offer, or Slack before it is linked, cannot be\n * turned on; one on can always be turned off. On desktop a table, on the\n * phone a card per job.\n */\nexport function RoutingPanel({ fleetId, routing, isSlackLinked, waitingByJob }: { fleetId: string; routing: RoutingView; isSlackLinked: boolean; waitingByJob: WaitingByJob }) {\n const [isTurning, startTransition] = useTransition();\n const [turning, setTurning] = useState<string | undefined>();\n const [toast, setToast] = useState<RoutingToast | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const isUsable = (place: RoutedPlace): boolean => routing.offered[place] && (place !== 'slack' || isSlackLinked);\n\n const turn = (change: { job: RoutedJob; place: RoutedPlace; isOn: boolean; isChatOn: boolean }) => {\n setToast(undefined);\n setFailure(undefined);\n setTurning(`${change.job}-${change.place}`);\n startTransition(async () => {\n const { isChatOn, ...route } = change;\n const outcome = await turnRoute({ fleet: fleetId, ...route });\n if (outcome.isOk) {\n setToast(turnedToastOf({ ...route, waiting: waitingByJob[route.job], isChatOn }));\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-3\" aria-label=\"Per job\">\n <div className=\"grid gap-3 sm:gap-0 sm:overflow-hidden sm:rounded-lg sm:border sm:border-border sm:bg-card\">\n <div aria-hidden className={`hidden min-h-8 bg-muted px-4 text-caption font-medium text-muted-foreground ${ROW}`}>\n <span>Job</span>\n <span className=\"inline-flex items-center gap-1.5\">\n <BRIDGE_ICON className=\"size-3.5\" />\n Bridge\n </span>\n {ROUTED_PLACES.map((place) => {\n const Icon = PLACE_ICONS[place];\n return (\n <span key={place} className=\"inline-flex items-center gap-1.5\">\n <Icon className=\"size-3.5\" />\n {PLACE_NAMES[place]}\n </span>\n );\n })}\n </div>\n {routing.jobs.map(({ job, places }) => {\n const { Icon, tone } = JOB_ICONS[job];\n return (\n <div\n key={job}\n data-testid=\"bridge-routing-job\"\n className={`flex flex-col gap-2 rounded-lg border border-border bg-card p-3 sm:min-h-[52px] sm:rounded-none sm:border-0 sm:border-t sm:px-4 sm:py-1.5 ${ROW}`}\n >\n <span className=\"flex flex-col gap-0.5\">\n <span className=\"inline-flex items-center gap-1.5 font-semibold sm:font-medium\">\n <Icon aria-hidden className={`size-4 shrink-0 ${tone}`} />\n {JOB_NAMES[job].name}\n </span>\n <span className=\"text-caption text-muted-foreground max-sm:hidden\">{JOB_NAMES[job].holds}</span>\n </span>\n <PlaceCell name=\"Bridge\">\n <RoutingSwitch isOn label={`Bridge for ${JOB_NAMES[job].name}`} isDisabled aside=\"Always\" testId={`bridge-routing-${job}-bridge`} />\n </PlaceCell>\n {ROUTED_PLACES.map((place) => {\n const isOn = places[place];\n const key = `${job}-${place}`;\n return (\n <PlaceCell key={place} name={PLACE_NAMES[place]}>\n <RoutingSwitch\n isOn={isOn}\n label={`${PLACE_NAMES[place]} for ${JOB_NAMES[job].name}`}\n isDisabled={isTurning || (!isOn && !isUsable(place))}\n isBusy={isTurning && turning === key}\n {...(job === 'everything-else' && place === 'slack' && !isOn ? { aside: 'Bots only' } : {})}\n testId={`bridge-routing-${key}`}\n onTurn={() => {\n turn({ job, place, isOn: !isOn, isChatOn: places.chat });\n }}\n />\n </PlaceCell>\n );\n })}\n </div>\n );\n })}\n </div>\n {toast === undefined ? null : <Toast toast={toast} />}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <p className=\"text-caption text-muted-foreground max-sm:hidden\">While a Bridge page is open in focus, web push and email do not wake you. Slack still posts: you turned it on, and the views stay in step.</p>\n </section>\n );\n}\n","/**\n * A switch for one place of one job (the routing mockup): on or off, small;\n * Bridge's is on and cannot be turned, said beside it as Always; Slack's for\n * everything else, while off, says Bots only beside it.\n */\nexport function RoutingSwitch({\n isOn,\n label,\n isDisabled,\n isBusy = false,\n aside,\n testId,\n onTurn,\n}: {\n isOn: boolean;\n label: string;\n isDisabled: boolean;\n isBusy?: boolean;\n aside?: string;\n testId: string;\n onTurn?: () => void;\n}) {\n return (\n <span className=\"inline-flex items-center gap-2.5\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isOn}\n aria-label={label}\n aria-busy={isBusy}\n disabled={isDisabled}\n data-testid={testId}\n onClick={onTurn}\n className=\"group inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-input p-0.5 aria-checked:bg-primary disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <span aria-hidden className=\"size-3 rounded-full bg-card shadow-sm transition-transform group-aria-checked:translate-x-3\" />\n </button>\n {aside === undefined ? null : <span className=\"text-caption text-muted-foreground\">{aside}</span>}\n </span>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_12","$$RSC_SERVER_ACTION_15","RoutingSwitch","isOn","label","isDisabled","isBusy","aside","testId","onTurn","className","type","role","disabled","onClick","undefined"],"mappings":"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","ignoreList":[2]}
1
+ {"version":3,"sources":["../../../../../web/features/bridge/ui/place-icons.tsx","../../../../../web/features/bridge/hooks/data%3Ae90603%20%3Ctext/javascript%3E","../../../../../node_modules/lucide-react/src/icons/message-circle-question-mark.ts","../../../../../web/features/bridge/state/places-panel.tsx","../../../../../web/features/bridge/hooks/data%3Ad95ccd%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/slack-link-path.ts","../../../../../web/features/bridge/services/web-push.ts","../../../../../web/features/bridge/hooks/data%3A8d8771%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A45ed83%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/use-web-push.ts","../../../../../web/features/bridge/ui/place-card.tsx","../../../../../web/features/bridge/state/routing-panel.tsx","../../../../../web/features/bridge/ui/routing-switch.tsx"],"sourcesContent":["import { Bell, CircleQuestionMark, Hand, Hash, Mail, MessageCircleQuestionMark, Ship, Sparkles, type LucideIcon } from 'lucide-react';\n\nimport type { RoutedJob, RoutedPlace } from '../services/routing';\n\n/** Each job's icon in its tone, as the routing mockup draws it: Decide active, Do waiting, the others muted. */\nexport const JOB_ICONS: Readonly<Record<RoutedJob, { readonly Icon: LucideIcon; readonly tone: string }>> = {\n decide: { Icon: CircleQuestionMark, tone: 'text-tone-active-fg' },\n do: { Icon: Hand, tone: 'text-tone-waiting-fg' },\n 'stay-aware': { Icon: Bell, tone: 'text-muted-foreground' },\n 'everything-else': { Icon: MessageCircleQuestionMark, tone: 'text-muted-foreground' },\n};\n\n/** Bridge's icon, the mark of the sidebar. */\nexport const BRIDGE_ICON: LucideIcon = Ship;\n\n/** Each place's icon, as the routing mockup draws it. */\nexport const PLACE_ICONS: Readonly<Record<RoutedPlace, LucideIcon>> = { slack: Hash, chat: Sparkles, 'web-push': Bell, email: Mail };\n","/* __next_internal_action_entry_do_not_use__ [{\"409c34adc4d955891186c0c193daea56c87d4a4f70\":{\"name\":\"turnRoute\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_12=/*#__PURE__*/createServerReference(\"409c34adc4d955891186c0c193daea56c87d4a4f70\",callServer,void 0,findSourceMapURL,\"turnRoute\");export{$$RSC_SERVER_ACTION_12 as turnRoute};","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'message-circle-question-mark',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n key: '1sd12s',\n },\n ],\n ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n ],\n aliases: ['message-circle-question'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessageCircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiIC8+CiAgPHBhdGggZD0iTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzIiAvPgogIDxwYXRoIGQ9Ik0xMiAxN2guMDEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/message-circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircleQuestionMark = createLucideIcon(__iconData);\n\nexport default MessageCircleQuestionMark;\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute, unlinkSlack } from '../hooks/bridge-actions';\nimport type { SlackLink } from '../hooks/read-bridge';\nimport { SLACK_LINK_PATH } from '../hooks/slack-link-path';\nimport { useWebPush } from '../hooks/use-web-push';\nimport type { WakeChannels } from '../services/deliveries';\nimport { chatCardOf, emailCardOf, emailTurnsOf, PLACE_NAMES, slackCardOf, webPushCardOf, type RoutingView } from '../services/routing';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { PlaceCard } from '../ui/place-card';\nimport { PLACE_ICONS } from '../ui/place-icons';\n\nfunction SlackPlace({ fleetId, slackLink }: { fleetId: string; slackLink: SlackLink | null }) {\n const [isUnlinking, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = slackCardOf(slackLink);\n\n const unlink = () => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await unlinkSlack(fleetId);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <PlaceCard place=\"slack\" name={PLACE_NAMES.slack} Icon={PLACE_ICONS.slack} card={card}>\n {card.action === 'link' ? (\n <a\n href={`${SLACK_LINK_PATH}?${new URLSearchParams({ fleet: fleetId }).toString()}`}\n data-testid=\"bridge-slack-link\"\n className=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-caption font-medium text-primary-foreground hover:bg-primary-hover\"\n >\n Link Slack\n </a>\n ) : null}\n {card.action === 'unlink' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-slack-unlink\" isPending={isUnlinking} pendingLabel=\"Unlinking...\" onClick={unlink}>\n Unlink\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction WebPushPlace({ fleetId, webPush }: { fleetId: string; webPush: WakeChannels['webPush'] | undefined }) {\n const browsers = webPush?.browsers ?? [];\n const { isTaken, ownEndpoint, working, failure, turnOn, remove } = useWebPush({ fleetId, webPushKey: webPush?.publicKey ?? null });\n const card = webPushCardOf({ isOffered: webPush !== undefined && webPush.publicKey !== null, isTaken, ownEndpoint, browsers });\n const others = browsers.filter(({ endpoint }) => card.action !== 'remove' || endpoint !== ownEndpoint);\n return (\n <PlaceCard place=\"web-push\" name={PLACE_NAMES['web-push']} Icon={PLACE_ICONS['web-push']} card={card}>\n {card.action === 'remove' && ownEndpoint !== undefined ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-remove\" isPending={working === ownEndpoint} pendingLabel=\"Removing...\" disabled={working !== undefined} onClick={() => { remove(ownEndpoint); }}>\n Remove\n </ActionButton>\n ) : null}\n {card.action === 'turnOn' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-on\" isPending={working === 'on'} pendingLabel=\"Turning on...\" disabled={working !== undefined} onClick={turnOn}>\n Turn on\n </ActionButton>\n ) : null}\n {others.map(({ endpoint, browser, isGone }) => (\n <span key={endpoint} data-testid=\"bridge-web-push-browser\" className=\"flex w-full items-center gap-2 text-caption text-muted-foreground\">\n <span className=\"min-w-0 flex-1\">{isGone ? `${browser}: no longer takes wakes` : `Also on in ${browser}`}</span>\n <button type=\"button\" data-testid=\"bridge-web-push-remove-other\" disabled={working !== undefined} onClick={() => { remove(endpoint); }} className=\"underline hover:text-foreground disabled:opacity-50\">\n {working === endpoint ? 'Removing...' : 'Remove'}\n </button>\n </span>\n ))}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction EmailPlace({ fleetId, routing }: { fleetId: string; routing: RoutingView }) {\n const [isTurning, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = emailCardOf({ isOffered: routing.offered.email, isOnForAnyJob: routing.jobs.some(({ places }) => places.email) });\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTransition(async () => {\n for (const change of emailTurnsOf(routing, isOn)) {\n const outcome = await turnRoute({ fleet: fleetId, ...change });\n if (!outcome.isOk) {\n setFailure(outcome.message);\n return;\n }\n }\n });\n };\n\n return (\n <PlaceCard place=\"email\" name={PLACE_NAMES.email} Icon={PLACE_ICONS.email} card={card}>\n {card.action === 'turnOn' || card.action === 'turnOff' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-email-turn\" isPending={isTurning} pendingLabel={card.action === 'turnOn' ? 'Turning on...' : 'Turning off...'} onClick={() => { turn(card.action === 'turnOn'); }}>\n {card.action === 'turnOn' ? 'Turn on' : 'Turn off'}\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\n/**\n * The places on top of Where things show (Bridge, section 8; the routing\n * mockup), each with its state and its one action: Slack linked or not, the\n * chats connected through the gateway, web push in this browser, and email.\n */\nexport function PlacesPanel({\n fleetId,\n routing,\n slackLink,\n chats,\n webPush,\n}: {\n fleetId: string;\n routing: RoutingView;\n slackLink: SlackLink | null;\n chats: readonly string[];\n webPush: WakeChannels['webPush'] | undefined;\n}) {\n return (\n <section aria-label=\"The places\" className=\"grid gap-2.5 sm:grid-cols-2 lg:grid-cols-4\">\n <SlackPlace fleetId={fleetId} slackLink={slackLink} />\n <PlaceCard place=\"chat\" name={PLACE_NAMES.chat} Icon={PLACE_ICONS.chat} card={chatCardOf(chats)} />\n <WebPushPlace fleetId={fleetId} webPush={webPush} />\n <EmailPlace fleetId={fleetId} routing={routing} />\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"4024e6fc27987364a89dc128b78cfa40461e40eb7c\":{\"name\":\"unlinkSlack\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_15=/*#__PURE__*/createServerReference(\"4024e6fc27987364a89dc128b78cfa40461e40eb7c\",callServer,void 0,findSourceMapURL,\"unlinkSlack\");export{$$RSC_SERVER_ACTION_15 as unlinkSlack};","/** Where Link Slack starts (gateway scopes 9.3): the button in Bridge's settings and the button in a bot's answer in Slack (src/core/slack/take-slack-event.ts). */\nexport const SLACK_LINK_PATH = '/slack/link';\n","/**\n * What the section of wakes of Bridge's settings works out in the browser (wake a\n * person, W8): the name a browser it turns web push on in is listed by, the\n * gateway's push key as the browser's push manager takes it, and the\n * subscription the browser sends the gateway.\n */\n\n/** A browser's push subscription as the gateway takes it, with the browser's name. */\nexport interface SubscriptionInput {\n readonly endpoint: string;\n readonly keys: { readonly p256dh: string; readonly auth: string };\n readonly browser: string;\n}\n\n/** The browsers and systems a name is made of, the first that matches counting: Edge and Chrome also say Safari, and Chrome says Chrome. */\nconst BROWSERS: readonly (readonly [RegExp, string])[] = [\n [/Edg\\//, 'Edge'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\nconst SYSTEMS: readonly (readonly [RegExp, string])[] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstOf = (userAgent: string, names: readonly (readonly [RegExp, string])[]): string | undefined => names.find(([pattern]) => pattern.test(userAgent))?.[1];\n\n/** The name a browser is listed by, such as Firefox on Linux, from its user agent. */\nexport function browserNameOf(userAgent: string): string {\n const browser = firstOf(userAgent, BROWSERS);\n const system = firstOf(userAgent, SYSTEMS);\n if (browser === undefined) {\n return 'A browser';\n }\n return system === undefined ? browser : `${browser} on ${system}`;\n}\n\n/** The bytes a base64url key stands for, as the browser's push manager takes the gateway's key. */\nexport function applicationServerKeyOf(key: string): Uint8Array<ArrayBuffer> {\n const binary = atob(key.replaceAll('-', '+').replaceAll('_', '/'));\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n\n/** The subscription to send, from the push manager's own, or none when it gave no endpoint or keys. */\nexport function subscriptionInputOf(subscription: { endpoint?: string; keys?: Record<string, string> }, browser: string): SubscriptionInput | undefined {\n const { endpoint, keys } = subscription;\n const p256dh = keys?.p256dh;\n const auth = keys?.auth;\n return endpoint === undefined || p256dh === undefined || auth === undefined ? undefined : { endpoint, keys: { p256dh, auth }, browser };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"6052be75df2875e64a4cc10e0e01706af01bc04763\":{\"name\":\"turnOffWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_14=/*#__PURE__*/createServerReference(\"6052be75df2875e64a4cc10e0e01706af01bc04763\",callServer,void 0,findSourceMapURL,\"turnOffWebPush\");export{$$RSC_SERVER_ACTION_14 as turnOffWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"606b205d3e5fb403566f3ec1a2b42a44c783115c34\":{\"name\":\"turnOnWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_13=/*#__PURE__*/createServerReference(\"606b205d3e5fb403566f3ec1a2b42a44c783115c34\",callServer,void 0,findSourceMapURL,\"turnOnWebPush\");export{$$RSC_SERVER_ACTION_13 as turnOnWebPush};","'use client';\n\nimport { useEffect, useState, useTransition } from 'react';\n\nimport type { WakeChannels } from '../services/deliveries';\nimport { applicationServerKeyOf, browserNameOf, subscriptionInputOf } from '../services/web-push';\nimport { turnOffWebPush, turnOnWebPush } from './bridge-actions';\n\n/** The service worker that shows a wake and opens Bridge when it is pressed. */\nconst WORKER_PATH = '/wake-worker.js';\n\n/** Whether this browser takes web push at all. */\nfunction isPushTaken(): boolean {\n return 'serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window;\n}\n\n/** This browser's own push subscription with the gateway's worker, if it has one. */\nasync function ownSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.getRegistration(WORKER_PATH);\n return (await registration?.pushManager.getSubscription()) ?? null;\n}\n\n/** Asks the browser's permission, then subscribes it with the gateway's key: the subscription to send, or why there is none. */\nasync function subscribed(webPushKey: string): Promise<{ readonly isOk: true; readonly value: PushSubscription } | { readonly isOk: false; readonly message: string }> {\n if ((await Notification.requestPermission()) !== 'granted') {\n return { isOk: false, message: 'Your browser did not allow notifications from this site: allow them, then turn web push on again' };\n }\n const registration = await navigator.serviceWorker.register(WORKER_PATH);\n await navigator.serviceWorker.ready;\n return { isOk: true, value: await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKeyOf(webPushKey) }) };\n}\n\n/**\n * Web push in this browser (wake a person, W8): whether it takes web push,\n * its own subscription, turning it on, which asks the browser's permission\n * first, and removing a browser, this one or another.\n */\nexport function useWebPush({ fleetId, webPushKey }: { fleetId: string; webPushKey: string | null }) {\n const [isTaken, setIsTaken] = useState(true);\n const [ownEndpoint, setOwnEndpoint] = useState<string | undefined>();\n const [working, setWorking] = useState<string | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n useEffect(() => {\n if (!isPushTaken()) {\n setIsTaken(false);\n return;\n }\n void ownSubscription().then((own) => {\n setOwnEndpoint(own?.endpoint);\n });\n }, []);\n\n const turnOn = () => {\n if (webPushKey === null) {\n return;\n }\n setWorking('on');\n setFailure(undefined);\n startTransition(async () => {\n try {\n const subscription = await subscribed(webPushKey);\n if (!subscription.isOk) {\n setFailure(subscription.message);\n return;\n }\n const input = subscriptionInputOf(subscription.value.toJSON(), browserNameOf(navigator.userAgent));\n if (input === undefined) {\n setFailure('Your browser gave no push subscription: try again');\n return;\n }\n const outcome = await turnOnWebPush(fleetId, input);\n if (outcome.isOk) {\n setOwnEndpoint(input.endpoint);\n } else {\n setFailure(outcome.message);\n }\n } catch {\n setFailure('Your browser could not turn web push on: try again');\n } finally {\n setWorking(undefined);\n }\n });\n };\n\n const remove = (endpoint: string) => {\n setWorking(endpoint);\n setFailure(undefined);\n startTransition(async () => {\n if (endpoint === ownEndpoint) {\n await (await ownSubscription())?.unsubscribe();\n setOwnEndpoint(undefined);\n }\n const outcome = await turnOffWebPush(fleetId, endpoint);\n setWorking(undefined);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return { isTaken, ownEndpoint, working, failure, turnOn, remove };\n}\n\nexport type WebPushBrowsers = WakeChannels['webPush']['browsers'];\n","import { CircleCheck, CirclePause, type LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport type { PlaceCard as PlaceCardState } from '../services/routing';\n\n/**\n * A place on top of Where things show (the routing mockup): its icon and\n * name, its state on the right, what it does, and its one action below.\n */\nexport function PlaceCard({ place, name, Icon, card, children }: { place: string; name: string; Icon: LucideIcon; card: PlaceCardState; children?: ReactNode }) {\n const StateIcon = card.state.isOk ? CircleCheck : CirclePause;\n return (\n <div data-testid={`bridge-place-${place}`} className=\"flex flex-col gap-1.5 rounded-lg border border-border bg-card px-3 py-2.5\">\n <span className=\"flex items-center gap-2 font-medium\">\n <Icon aria-hidden className=\"size-4 shrink-0\" />\n {name}\n <span data-testid={`bridge-place-${place}-state`} className={`ml-auto inline-flex items-center gap-1 text-caption font-medium ${card.state.isOk ? 'text-tone-ok-fg' : 'text-muted-foreground'}`}>\n <StateIcon aria-hidden className=\"size-3.5\" />\n {card.state.label}\n </span>\n </span>\n <span className=\"text-caption text-muted-foreground\">{card.description}</span>\n {children === undefined ? null : <span className=\"mt-auto flex flex-col items-start gap-1.5\">{children}</span>}\n </div>\n );\n}\n","'use client';\n\nimport { CircleCheck } from 'lucide-react';\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute } from '../hooks/bridge-actions';\nimport { JOB_NAMES, PLACE_NAMES, ROUTED_PLACES, turnedToastOf, type RoutedJob, type RoutedPlace, type RoutingToast, type RoutingView, type WaitingByJob } from '../services/routing';\nimport { Notice } from '../ui/notice';\nimport { BRIDGE_ICON, JOB_ICONS, PLACE_ICONS } from '../ui/place-icons';\nimport { RoutingSwitch } from '../ui/routing-switch';\n\n/** Six columns on desktop: the job, Bridge, then each place. */\nconst ROW = 'sm:grid sm:grid-cols-[1.6fr_repeat(5,1fr)] sm:items-center sm:gap-3';\n\n/** The toast after a change (the routing mockup): what the place now shows. */\nfunction Toast({ toast }: { toast: RoutingToast }) {\n return (\n <div role=\"status\" data-testid=\"bridge-routing-toast\" className=\"flex max-w-[720px] gap-3 rounded-lg border border-border bg-popover py-3.5 pr-3.5 pl-4 text-popover-foreground shadow-lg\">\n <CircleCheck aria-hidden className=\"mt-0.5 size-4 shrink-0 text-tone-ok-fg\" />\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"font-medium\">{toast.title}</span>\n <span className=\"text-caption text-muted-foreground\">{toast.detail}</span>\n </span>\n </div>\n );\n}\n\n/** A place's cell: on desktop the switch in its column, on the phone a line with the place's name and the switch. */\nfunction PlaceCell({ name, children }: { name: string; children: React.ReactNode }) {\n return (\n <span className=\"flex items-center justify-between sm:block\">\n <span className=\"sm:hidden\">{name}</span>\n {children}\n </span>\n );\n}\n\n/**\n * Routing per job (Bridge, section 8; the routing mockup): per job, the\n * places that show it besides Bridge, which always does. A switch turns a\n * place on or off at once; the toast then says what it shows (CC20). A\n * place the gateway does not offer, or Slack before it is linked, cannot be\n * turned on; one on can always be turned off. On desktop a table, on the\n * phone a card per job.\n */\nexport function RoutingPanel({ fleetId, routing, isSlackLinked, waitingByJob }: { fleetId: string; routing: RoutingView; isSlackLinked: boolean; waitingByJob: WaitingByJob }) {\n const [isTurning, startTransition] = useTransition();\n const [turning, setTurning] = useState<string | undefined>();\n const [toast, setToast] = useState<RoutingToast | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const isUsable = (place: RoutedPlace): boolean => routing.offered[place] && (place !== 'slack' || isSlackLinked);\n\n const turn = (change: { job: RoutedJob; place: RoutedPlace; isOn: boolean; isChatOn: boolean }) => {\n setToast(undefined);\n setFailure(undefined);\n setTurning(`${change.job}-${change.place}`);\n startTransition(async () => {\n const { isChatOn, ...route } = change;\n const outcome = await turnRoute({ fleet: fleetId, ...route });\n if (outcome.isOk) {\n setToast(turnedToastOf({ ...route, waiting: waitingByJob[route.job], isChatOn }));\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-3\" aria-label=\"Per job\">\n <div className=\"grid gap-3 sm:gap-0 sm:overflow-hidden sm:rounded-lg sm:border sm:border-border sm:bg-card\">\n <div aria-hidden className={`hidden min-h-8 bg-muted px-4 text-caption font-medium text-muted-foreground ${ROW}`}>\n <span>Job</span>\n <span className=\"inline-flex items-center gap-1.5\">\n <BRIDGE_ICON className=\"size-3.5\" />\n Bridge\n </span>\n {ROUTED_PLACES.map((place) => {\n const Icon = PLACE_ICONS[place];\n return (\n <span key={place} className=\"inline-flex items-center gap-1.5\">\n <Icon className=\"size-3.5\" />\n {PLACE_NAMES[place]}\n </span>\n );\n })}\n </div>\n {routing.jobs.map(({ job, places }) => {\n const { Icon, tone } = JOB_ICONS[job];\n return (\n <div\n key={job}\n data-testid=\"bridge-routing-job\"\n className={`flex flex-col gap-2 rounded-lg border border-border bg-card p-3 sm:min-h-[52px] sm:rounded-none sm:border-0 sm:border-t sm:px-4 sm:py-1.5 ${ROW}`}\n >\n <span className=\"flex flex-col gap-0.5\">\n <span className=\"inline-flex items-center gap-1.5 font-semibold sm:font-medium\">\n <Icon aria-hidden className={`size-4 shrink-0 ${tone}`} />\n {JOB_NAMES[job].name}\n </span>\n <span className=\"text-caption text-muted-foreground max-sm:hidden\">{JOB_NAMES[job].holds}</span>\n </span>\n <PlaceCell name=\"Bridge\">\n <RoutingSwitch isOn label={`Bridge for ${JOB_NAMES[job].name}`} isDisabled aside=\"Always\" testId={`bridge-routing-${job}-bridge`} />\n </PlaceCell>\n {ROUTED_PLACES.map((place) => {\n const isOn = places[place];\n const key = `${job}-${place}`;\n return (\n <PlaceCell key={place} name={PLACE_NAMES[place]}>\n <RoutingSwitch\n isOn={isOn}\n label={`${PLACE_NAMES[place]} for ${JOB_NAMES[job].name}`}\n isDisabled={isTurning || (!isOn && !isUsable(place))}\n isBusy={isTurning && turning === key}\n {...(job === 'everything-else' && place === 'slack' && !isOn ? { aside: 'Bots only' } : {})}\n testId={`bridge-routing-${key}`}\n onTurn={() => {\n turn({ job, place, isOn: !isOn, isChatOn: places.chat });\n }}\n />\n </PlaceCell>\n );\n })}\n </div>\n );\n })}\n </div>\n {toast === undefined ? null : <Toast toast={toast} />}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <p className=\"text-caption text-muted-foreground max-sm:hidden\">While a Bridge page is open in focus, web push and email do not wake you. Slack still posts: you turned it on, and the views stay in step.</p>\n </section>\n );\n}\n","/**\n * A switch for one place of one job (the routing mockup): on or off, small;\n * Bridge's is on and cannot be turned, said beside it as Always; Slack's for\n * everything else, while off, says Bots only beside it.\n */\nexport function RoutingSwitch({\n isOn,\n label,\n isDisabled,\n isBusy = false,\n aside,\n testId,\n onTurn,\n}: {\n isOn: boolean;\n label: string;\n isDisabled: boolean;\n isBusy?: boolean;\n aside?: string;\n testId: string;\n onTurn?: () => void;\n}) {\n return (\n <span className=\"inline-flex items-center gap-2.5\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isOn}\n aria-label={label}\n aria-busy={isBusy}\n disabled={isDisabled}\n data-testid={testId}\n onClick={onTurn}\n className=\"group inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-input p-0.5 aria-checked:bg-primary disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <span aria-hidden className=\"size-3 rounded-full bg-card shadow-sm transition-transform group-aria-checked:translate-x-3\" />\n </button>\n {aside === undefined ? null : <span className=\"text-caption text-muted-foreground\">{aside}</span>}\n </span>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_12","$$RSC_SERVER_ACTION_15","RoutingSwitch","isOn","label","isDisabled","isBusy","aside","testId","onTurn","className","type","role","disabled","onClick","undefined"],"mappings":"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","ignoreList":[2]}
@@ -1,3 +1,3 @@
1
- module.exports=[43889,a=>{"use strict";var b,c,d=a.i(37936),e=a.i(29517),f=a.i(18558),g=a.i(5246);a.i(70396);var h=a.i(73727),i=a.i(55476),j=a.i(66283),k=a.i(29493),l=a.i(49310),m=a.i(54757),m=m,n=m,o=m,p=a.i(27221),q=a.i(83931),r=a.i(26972),s=m,t=m,u=m,v=m,w=a.i(30174);let x=new TextEncoder;function y(a){return x.encode(a).byteLength}var n=m,z=a.i(1081),A=m,B=m,C=a.i(11365),o=m,m=m,n=m;let D=l.z.enum(["working","blocked","idle"]),E=`A note is one line of at most ${String(200)} characters`;new TextEncoder;let F=A.record(p.z.string(),B.json()),G=r.z.object({kind:p.z.string()}).catchall(B.json()),H=r.z.object({at:C.z.number(),of:C.z.number()});r.z.object({state:D,note:p.z.string().trim().max(200,E).refine(function(a){return!/[\r\n]/.test(a)},E).optional(),details:F.nullable().optional(),detailsPatch:F.nullable().optional(),task:G.nullable().optional(),step:H.nullable().optional()}).refine(a=>void 0===a.details||void 0===a.detailsPatch,{message:"Give details or detailsPatch, not both",path:["detailsPatch"]}),o.strictObject({});let I=r.z.object({state:D,note:p.z.string().nullable(),task:G.nullable(),taskView:r.z.object({canOpen:q.z.boolean(),fleetName:p.z.string().nullable()}).optional(),step:H.nullable(),reportedAt:m.iso.datetime(),reportChangedAt:m.iso.datetime(),detailsVersion:n.int().min(0)}).extend({details:F.nullable()});r.z.object({report:I.nullable(),previousCrew:I.nullable()});let J="application/vnd.aeolus.alert+json",K=l.z.enum(["crew-request-unassigned","delivery-unacknowledged","delivery-overdue","ping-unanswered","report-unchanged","task-not-done"]),L=m.iso.datetime({offset:!0}),M=n.int().min(1),N=o.strictObject({settingsVersion:n.int().min(1),minutes:M,reason:p.z.string().nullable()}),O=o.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),state:l.z.enum(["pending","received","handed"]),awaitingCrew:q.z.boolean(),minutes:M}),P=o.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),overdueEventId:(0,e.f)("event")}),Q=o.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),minutes:M}),R=o.strictObject({reportChangedAt:L,state:l.z.enum(["working","blocked"]),minutes:M,setBy:(0,e.f)("ship")}),S=o.strictObject({task:G,doneBy:L,setBy:(0,e.f)("ship")}),T=[r.z.object({signal:s.literal("crew-request-unassigned"),facts:N}),r.z.object({signal:s.literal("delivery-unacknowledged"),facts:O}),r.z.object({signal:s.literal("delivery-overdue"),facts:P}),r.z.object({signal:s.literal("ping-unanswered"),facts:Q}),r.z.object({signal:s.literal("report-unchanged"),facts:R}),r.z.object({signal:s.literal("task-not-done"),facts:S})],U=t.discriminatedUnion("signal",T),V=u.intersection(r.z.object({alertId:(0,e.f)("alert"),headline:p.z.string().min(1).max(80),body:p.z.string().refine(a=>2048>=y(a),`A body is at most ${String(2048)} bytes`),ship:r.z.object({id:(0,e.f)("ship"),name:p.z.string()}),fleetId:(0,e.f)("fleet"),toldAs:l.z.enum(["owner","setter"]),since:L,raisedAt:L}),U).refine(a=>8192>=y(JSON.stringify(a)),`An alert message is at most ${String(8192)} bytes`);r.z.object({shipId:(0,e.f)("ship"),signal:K,facts:v.union([N,O,P,Q,R,S]),occurrenceKey:p.z.string().min(1).max(200),since:L}).transform(({shipId:a,signal:b,facts:c,occurrenceKey:d,since:e},f)=>{let g=U.safeParse({signal:b,facts:c});return g.success?{shipId:a,occurrenceKey:d,since:e,...g.data}:(f.addIssue({code:"custom",message:"The facts are not the signal's",path:["facts"]}),w.z.NEVER)}),r.z.object({alertId:(0,e.f)("alert")});let W=l.z.enum(["cleared","retired"]),X=u.intersection(r.z.object({id:(0,e.f)("alert"),ship:r.z.object({id:(0,e.f)("ship"),name:p.z.string()}),occurrenceKey:p.z.string(),ownerShipId:(0,e.f)("ship").nullable(),since:m.iso.datetime(),raisedAt:m.iso.datetime(),cleared:r.z.object({at:m.iso.datetime(),why:W}).nullable()}),U);(b=(0,e.f)("alert"),r.z.object({cursor:b.optional(),limit:n.int().min(1).max(500).optional()})).optional(),c=(0,e.f)("alert"),r.z.object({items:z.z.array(X),nextCursor:c.nullable()});var n=m,Y=m,v=m,m=m;function Z(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}let $=n.int().min(1),_=p.z.string().min(1),aa=r.z.object({key:$,label:_,detail:p.z.string().default("")}),ab=r.z.object({id:Y.uuid(),title:_,context:p.z.string(),options:z.z.array(aa).min(1),pick:r.z.object({option:$,why:_})}).refine(({options:a})=>new Set(a.map(({key:a})=>a)).size===a.length,{message:"Every option has its own number",path:["options"]}).refine(({options:a,pick:b})=>a.some(({key:a})=>a===b.option),{message:"The pick names one of the options",path:["pick","option"]}),ac=r.z.object({questionId:Y.uuid()}),ad=r.z.object({questionId:Y.uuid(),question:ab}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]});v.union([r.z.object({option:$,note:_.optional()}),r.z.object({note:_})]);let ae=v.union([r.z.object({questionId:Y.uuid(),option:$,note:_.optional()}),r.z.object({questionId:Y.uuid(),note:_})]),af=r.z.object({messageId:(0,e.f)("message"),sentAt:m.iso.datetime(),option:$.nullable(),note:p.z.string().nullable()});function ag(a){try{return JSON.parse(a)}catch{return}}r.z.object({id:Y.uuid(),title:p.z.string(),context:p.z.string(),options:z.z.array(aa),pick:r.z.object({option:$,why:p.z.string()}),answer:af.nullable()});var ah=m;let ai=r.z.object({label:p.z.string().min(1),url:ah.url({protocol:/^https?$/})});r.z.object({headline:p.z.string().min(1).max(80),body:p.z.string(),link:ai.optional()});var Y=m,ah=m;let aj=p.z.string().min(1),ak=r.z.object({id:Y.uuid(),title:aj,why:p.z.string(),link:ah.url({protocol:/^https?$/}).optional()});r.z.object({stepId:Y.uuid()}),r.z.object({stepId:Y.uuid(),step:ak}).refine(({stepId:a,step:b})=>b.id!==a,{message:"The new step has a uuid of its own",path:["step","id"]});let al=l.z.enum(["done","cannot"]);r.z.object({stepId:Y.uuid(),outcome:al,note:aj.optional()});var am=a.i(51121);function an(a){if("application/vnd.aeolus.question+json"!==Z(a.contentType))return function({contentType:a,payload:b}){if("application/vnd.aeolus.question-withdrawal+json"===Z(a)){let a=ac.safeParse(ag(b));return a.success?{questionId:a.data.questionId,replacement:null}:null}if("application/vnd.aeolus.question-replacement+json"===Z(a)){let a=ad.safeParse(ag(b));return a.success?{questionId:a.data.questionId,replacement:a.data.question}:null}return null}(a)?.replacement??void 0;try{let b=ab.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}let ao=new Map([["application/vnd.aeolus.step+json",ak],["application/vnd.aeolus.step-replacement+json",r.z.object({step:ak}).transform(({step:a})=>a)]]),ap=new Set([J,"application/vnd.aeolus.notice+json"]),aq=r.z.object({body:p.z.string()});var ar=a.i(94705),as=a.i(83588);let at=r.z.object({ship:r.z.object({name:p.z.string().min(1)})});var au=a.i(29660);async function av(a,b){let c;try{c={isOk:!0,value:await b(await (0,j.z)(a))}}catch(c){let b=(0,j.U)(c);if("UNAUTHORIZED"===b)return(0,h.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${au.P}?${new URLSearchParams({[i.n]:a}).toString()}`}).toString()}`);return void 0===b?{isOk:!1,message:"The gateway did not answer: try again in a moment"}:{isOk:!1,message:(0,j.s)(c),code:b}}return(0,f.revalidatePath)(au.P,"layout"),c}async function aw(a,b){return av(a,a=>a.people.record.query({cursor:b}))}async function ax(a,b){let c=(await (0,g.headers)()).get("host")??"";return av(a,async a=>{let{contentType:d,payload:e,meetingId:f,said:g,...h}=await a.people.open.mutate({deliveryId:b});return{...h,title:(0,am.X)(d)?(0,am.R)(h.title):h.title,payload:e,body:function(a){if(void 0!==a.said&&null!==a.said)return a.said;if((0,am.X)(a.contentType)){let b=a.payload.indexOf("\n");return -1===b?"":a.payload.slice(b+1).trim()}let[b=""]=a.contentType.split(";");if(!ap.has(b.trim().toLowerCase()))return a.payload;try{return aq.safeParse(JSON.parse(a.payload)).data?.body??a.payload}catch{return a.payload}}({contentType:d,payload:e,said:g}),question:an({contentType:d,payload:e}),step:function(a,b){let[c=""]=a.contentType.split(";"),d=ao.get(c.trim().toLowerCase());if(void 0!==d)try{let c,e=d.safeParse(JSON.parse(a.payload));if(!e.success)return;let{title:f,why:g,link:h}=e.data;return{title:f,why:g,link:void 0===h?void 0:(c=new URL(h),{href:h,address:`${c.host}${c.pathname.replace(/\/$/,"")}`,isOutside:c.host!==b})}}catch{return}}({contentType:d,payload:e},c),alert:function(a){if(a.contentType===J)try{let b=V.safeParse(JSON.parse(a.payload));return b.success?{ship:b.data.ship,signal:b.data.signal}:void 0}catch{return}}({contentType:d,payload:e}),meetingId:f??void 0,alertShip:function(a){let[b=""]=a.contentType.split(";");if(b.trim().toLowerCase()===J)try{return at.safeParse(JSON.parse(a.payload)).data?.ship.name}catch{return}}({contentType:d,payload:e})}})}async function ay({fleet:a,deliveryId:b,input:c}){let d=function(a){let b=a.note.trim();if(void 0===a.questionId)return""===b?{isOk:!1,message:"Write your answer first"}:{isOk:!0,value:{contentType:"text/plain",payload:b}};let c=ae.safeParse({questionId:a.questionId,...void 0===a.option?{}:{option:a.option},...""===b?{}:{note:b}});return c.success?{isOk:!0,value:{contentType:"application/vnd.aeolus.answer+json",payload:JSON.stringify(c.data)}}:{isOk:!1,message:"Tap an option, or write a note"}}(c);return d.isOk?av(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function az({fleet:a,deliveryId:b,option:c,optionLabel:d,note:e}){return av(a,async a=>{let{option:f,note:g}=await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:d,note:e});return{option:f,note:g}})}async function aA({fleet:a,deliveryId:b,option:c}){return av(a,async a=>{let d=await a.people.open.mutate({deliveryId:b}),e=an(d)?.options.find(({key:a})=>a===c)?.label??null;await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:e,note:""})})}async function aB(a,b){return av(a,async a=>{await a.people.removeFromBasket.mutate({questionId:b})})}async function aC(a){return av(a,a=>a.people.sendBasket.mutate())}async function aD({fleet:a,deliveryId:b,step:c}){return av(a,async a=>{await a.people.done.mutate(void 0===c?{deliveryId:b}:{deliveryId:b,...c})})}async function aE({fleet:a,deliveryId:b,isNew:c}){return av(a,async a=>{c&&await a.people.open.mutate({deliveryId:b}),await a.people.done.mutate({deliveryId:b})})}async function aF({fleet:a,messages:b}){return av(a,async a=>{let c=0,d=[];for(let{deliveryId:e,title:f}of b)try{await a.people.done.mutate({deliveryId:e}),c+=1}catch(a){if("UNAUTHORIZED"===(0,j.U)(a))throw a;d.push(f)}return{done:c,failed:d}})}async function aG(a){return av(a,async a=>{var b;let c,d,[e,f]=await Promise.all([a.people.sendTo.query(),a.people.yourFleet.query().catch(()=>void 0)]);return{sentAs:e.sentAs,ships:(b=e.ships,c=new Map((f?.groups??[]).flatMap(({tiles:a})=>a.map(({name:a,state:b})=>[a,b]))),d=a=>null===a?as.X.length:as.X.indexOf(a),b.map(a=>({name:a,state:c.get(a)??null})).toSorted((a,b)=>d(a.state)-d(b.state)||a.name.localeCompare(b.name)))}})}async function aH({fleet:a,to:b,payload:c,idempotencyKey:d}){return av(a,async a=>(await a.people.send.mutate({to:b,payload:c,idempotencyKey:d}),{storedAt:new Date().toISOString()}))}async function aI({fleet:a,job:b,place:c,isOn:d}){return av(a,async a=>{await a.people.turnRoute.mutate({job:b,place:c,isOn:d})})}async function aJ(a,b){return av(a,async a=>{await a.people.turnOnWebPush.mutate({endpoint:b.endpoint,keys:{p256dh:b.keys.p256dh,auth:b.keys.auth},browser:b.browser})})}async function aK(a,b){return av(a,async a=>{await a.people.turnOffWebPush.mutate({endpoint:b})})}async function aL(a){return av(a,async a=>{await a.slack.unlink.mutate()})}async function aM({fleet:a,requestId:b,input:c}){if("deny"===c.kind)return av(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let d=(0,e.f)("ship").safeParse(c.ownerShipId.trim());if(!d.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:c.name,ownerShipId:d.data,scopes:[...new Set([...ar._,...c.scopes])]},{server:g}=c,h=void 0===g?void 0:(0,k.y)(g);return av(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"approve",party:f,...void 0===g||void 0===h?{}:{server:{credential:h,concurrencyLimit:g.concurrencyLimit}}}})})}(0,a.i(13095).ensureServerEntryExports)([aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM]),(0,d.registerServerReference)(aw,"6024317f25ef2d2e462ceefcb5b526556b7b770194",null),(0,d.registerServerReference)(ax,"606e0d74c6b0d3d1df4de39bd22d9408f01a679551",null),(0,d.registerServerReference)(ay,"400eae2d6cd258045189d51c623c82d36a37f64386",null),(0,d.registerServerReference)(az,"40174e9e0edfb1138ae859a3f77519ab7ee8658099",null),(0,d.registerServerReference)(aA,"407746915cb9e535e2c80db4d3e85e4103bcf54f2b",null),(0,d.registerServerReference)(aB,"60e7e6f4ed489b1e317abedf31af08ac78c4e3ca08",null),(0,d.registerServerReference)(aC,"40e9c41f0b0709783b4c06aff369d7acdf11bbe7c1",null),(0,d.registerServerReference)(aD,"409c12fe0b01d63ebbbc2a12b2b2dfac6477ec3d50",null),(0,d.registerServerReference)(aE,"40e18abbb5c1566937721c8c2adfa555efe588d7c3",null),(0,d.registerServerReference)(aF,"400723c5986b731084f36a98ce2009ab404451a250",null),(0,d.registerServerReference)(aG,"40dfb3b0fea5008368e03e2b6748a198be97757025",null),(0,d.registerServerReference)(aH,"4068e943f9f900961504f9d945c882ab621f07a915",null),(0,d.registerServerReference)(aI,"40e6e07086412f2b85d3be4b1961ecab85c19f97c4",null),(0,d.registerServerReference)(aJ,"60e30c4d137454dd4725668e5208674e2e3f51b0c7",null),(0,d.registerServerReference)(aK,"60384b6c405e65a6a446b9dbcf1942f6c43673b2e4",null),(0,d.registerServerReference)(aL,"40d8c38d8dd398630ef95d175bedc0bf0ac9acb32c",null),(0,d.registerServerReference)(aM,"40151fa6d8c47c556ac1a1feb05564cc0c8fcd9bca",null),a.s(["q",0,ay,"Q",0,aM,"G",0,aD,"X",0,aE,"R",0,aF,"v",0,ax,"y",0,az,"W",0,aA,"F",0,aw,"e",0,aG,"D",0,aB,"K",0,aC,"u",0,aH,"Y",0,aK,"z",0,aJ,"f",0,aI,"Z",0,aL],43889)}];
1
+ module.exports=[43889,a=>{"use strict";var b,c,d=a.i(37936),e=a.i(29517),f=a.i(18558),g=a.i(5246);a.i(70396);var h=a.i(73727),i=a.i(55476),j=a.i(66283),k=a.i(29493),l=a.i(49310),m=a.i(54757),m=m,n=m,o=m,p=a.i(27221),q=a.i(83931),r=a.i(26972),s=m,t=m,u=m,v=m,w=a.i(30174);let x=new TextEncoder;function y(a){return x.encode(a).byteLength}var n=m,z=a.i(1081),A=m,B=m,C=a.i(11365),o=m,m=m,n=m;let D=l.z.enum(["working","blocked","idle"]),E=`A note is one line of at most ${String(200)} characters`;new TextEncoder;let F=A.record(p.z.string(),B.json()),G=r.z.object({kind:p.z.string()}).catchall(B.json()),H=r.z.object({at:C.z.number(),of:C.z.number()});r.z.object({state:D,note:p.z.string().trim().max(200,E).refine(function(a){return!/[\r\n]/.test(a)},E).optional(),details:F.nullable().optional(),detailsPatch:F.nullable().optional(),task:G.nullable().optional(),step:H.nullable().optional()}).refine(a=>void 0===a.details||void 0===a.detailsPatch,{message:"Give details or detailsPatch, not both",path:["detailsPatch"]}),o.strictObject({});let I=r.z.object({state:D,note:p.z.string().nullable(),task:G.nullable(),taskView:r.z.object({canOpen:q.z.boolean(),fleetName:p.z.string().nullable()}).optional(),step:H.nullable(),reportedAt:m.iso.datetime(),reportChangedAt:m.iso.datetime(),detailsVersion:n.int().min(0)}).extend({details:F.nullable()});r.z.object({report:I.nullable(),previousCrew:I.nullable()});let J="application/vnd.aeolus.alert+json",K=l.z.enum(["crew-request-unassigned","delivery-unacknowledged","delivery-overdue","ping-unanswered","report-unchanged","task-not-done"]),L=m.iso.datetime({offset:!0}),M=n.int().min(1),N=o.strictObject({settingsVersion:n.int().min(1),minutes:M,reason:p.z.string().nullable()}),O=o.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),state:l.z.enum(["pending","received","handed"]),awaitingCrew:q.z.boolean(),minutes:M}),P=o.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),overdueEventId:(0,e.f)("event")}),Q=o.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),minutes:M}),R=o.strictObject({reportChangedAt:L,state:l.z.enum(["working","blocked"]),minutes:M,setBy:(0,e.f)("ship")}),S=o.strictObject({task:G,doneBy:L,setBy:(0,e.f)("ship")}),T=[r.z.object({signal:s.literal("crew-request-unassigned"),facts:N}),r.z.object({signal:s.literal("delivery-unacknowledged"),facts:O}),r.z.object({signal:s.literal("delivery-overdue"),facts:P}),r.z.object({signal:s.literal("ping-unanswered"),facts:Q}),r.z.object({signal:s.literal("report-unchanged"),facts:R}),r.z.object({signal:s.literal("task-not-done"),facts:S})],U=t.discriminatedUnion("signal",T),V=u.intersection(r.z.object({alertId:(0,e.f)("alert"),headline:p.z.string().min(1).max(80),body:p.z.string().refine(a=>2048>=y(a),`A body is at most ${String(2048)} bytes`),ship:r.z.object({id:(0,e.f)("ship"),name:p.z.string()}),fleetId:(0,e.f)("fleet"),toldAs:l.z.enum(["owner","setter"]),since:L,raisedAt:L}),U).refine(a=>8192>=y(JSON.stringify(a)),`An alert message is at most ${String(8192)} bytes`);r.z.object({shipId:(0,e.f)("ship"),signal:K,facts:v.union([N,O,P,Q,R,S]),occurrenceKey:p.z.string().min(1).max(200),since:L}).transform(({shipId:a,signal:b,facts:c,occurrenceKey:d,since:e},f)=>{let g=U.safeParse({signal:b,facts:c});return g.success?{shipId:a,occurrenceKey:d,since:e,...g.data}:(f.addIssue({code:"custom",message:"The facts are not the signal's",path:["facts"]}),w.z.NEVER)}),r.z.object({alertId:(0,e.f)("alert")});let W=l.z.enum(["cleared","retired"]),X=u.intersection(r.z.object({id:(0,e.f)("alert"),ship:r.z.object({id:(0,e.f)("ship"),name:p.z.string()}),occurrenceKey:p.z.string(),ownerShipId:(0,e.f)("ship").nullable(),since:m.iso.datetime(),raisedAt:m.iso.datetime(),cleared:r.z.object({at:m.iso.datetime(),why:W}).nullable()}),U);(b=(0,e.f)("alert"),r.z.object({cursor:b.optional(),limit:n.int().min(1).max(500).optional()})).optional(),c=(0,e.f)("alert"),r.z.object({items:z.z.array(X),nextCursor:c.nullable()});var n=m,Y=m,v=m,m=m;function Z(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}let $=n.int().min(1),_=p.z.string().min(1),aa=r.z.object({key:$,label:_,detail:p.z.string().default("")}),ab=r.z.object({id:Y.uuid(),title:_,context:p.z.string(),options:z.z.array(aa).min(1),pick:r.z.object({option:$,why:_})}).refine(({options:a})=>new Set(a.map(({key:a})=>a)).size===a.length,{message:"Every option has its own number",path:["options"]}).refine(({options:a,pick:b})=>a.some(({key:a})=>a===b.option),{message:"The pick names one of the options",path:["pick","option"]}),ac=r.z.object({questionId:Y.uuid()}),ad=r.z.object({questionId:Y.uuid(),question:ab}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]});v.union([r.z.object({option:$,note:_.optional()}),r.z.object({note:_})]);let ae=v.union([r.z.object({questionId:Y.uuid(),option:$,note:_.optional()}),r.z.object({questionId:Y.uuid(),note:_})]),af=r.z.object({messageId:(0,e.f)("message"),sentAt:m.iso.datetime(),option:$.nullable(),note:p.z.string().nullable()});function ag(a){try{return JSON.parse(a)}catch{return}}r.z.object({id:Y.uuid(),title:p.z.string(),context:p.z.string(),options:z.z.array(aa),pick:r.z.object({option:$,why:p.z.string()}),answer:af.nullable()});var ah=m;let ai=r.z.object({label:p.z.string().min(1),url:ah.url({protocol:/^https?$/})});r.z.object({headline:p.z.string().min(1).max(80),body:p.z.string(),link:ai.optional()});var Y=m,ah=m;let aj=p.z.string().min(1),ak=r.z.object({id:Y.uuid(),title:aj,why:p.z.string(),link:ah.url({protocol:/^https?$/}).optional()});r.z.object({stepId:Y.uuid()}),r.z.object({stepId:Y.uuid(),step:ak}).refine(({stepId:a,step:b})=>b.id!==a,{message:"The new step has a uuid of its own",path:["step","id"]});let al=l.z.enum(["done","cannot"]);r.z.object({stepId:Y.uuid(),outcome:al,note:aj.optional()});var am=a.i(51121);function an(a){if("application/vnd.aeolus.question+json"!==Z(a.contentType))return function({contentType:a,payload:b}){if("application/vnd.aeolus.question-withdrawal+json"===Z(a)){let a=ac.safeParse(ag(b));return a.success?{questionId:a.data.questionId,replacement:null}:null}if("application/vnd.aeolus.question-replacement+json"===Z(a)){let a=ad.safeParse(ag(b));return a.success?{questionId:a.data.questionId,replacement:a.data.question}:null}return null}(a)?.replacement??void 0;try{let b=ab.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}let ao=new Map([["application/vnd.aeolus.step+json",ak],["application/vnd.aeolus.step-replacement+json",r.z.object({step:ak}).transform(({step:a})=>a)]]),ap=new Set([J,"application/vnd.aeolus.notice+json"]),aq=r.z.object({body:p.z.string()});var ar=a.i(94705),as=a.i(83588);let at=r.z.object({ship:r.z.object({name:p.z.string().min(1)})});var au=a.i(29660);async function av(a,b){let c;try{c={isOk:!0,value:await b(await (0,j.z)(a))}}catch(c){let b=(0,j.U)(c);if("UNAUTHORIZED"===b)return(0,h.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${au.P}?${new URLSearchParams({[i.n]:a}).toString()}`}).toString()}`);return void 0===b?{isOk:!1,message:"The gateway did not answer: try again in a moment"}:{isOk:!1,message:(0,j.s)(c),code:b}}return(0,f.revalidatePath)(au.P,"layout"),c}async function aw(a,b){return av(a,a=>a.people.record.query({cursor:b}))}async function ax(a,b){let c=(await (0,g.headers)()).get("host")??"";return av(a,async a=>{let{contentType:d,payload:e,meetingId:f,said:g,...h}=await a.people.open.mutate({deliveryId:b});return{...h,title:(0,am.X)(d)?(0,am.R)(h.title):h.title,payload:e,body:function(a){if(void 0!==a.said&&null!==a.said)return a.said;if((0,am.X)(a.contentType)){let b=a.payload.indexOf("\n");return -1===b?"":a.payload.slice(b+1).trim()}let[b=""]=a.contentType.split(";");if(!ap.has(b.trim().toLowerCase()))return a.payload;try{return aq.safeParse(JSON.parse(a.payload)).data?.body??a.payload}catch{return a.payload}}({contentType:d,payload:e,said:g}),question:an({contentType:d,payload:e}),step:function(a,b){let[c=""]=a.contentType.split(";"),d=ao.get(c.trim().toLowerCase());if(void 0!==d)try{let c,e=d.safeParse(JSON.parse(a.payload));if(!e.success)return;let{title:f,why:g,link:h}=e.data;return{title:f,why:g,link:void 0===h?void 0:(c=new URL(h),{href:h,address:`${c.host}${c.pathname.replace(/\/$/,"")}`,isOutside:c.host!==b})}}catch{return}}({contentType:d,payload:e},c),alert:function(a){if(a.contentType===J)try{let b=V.safeParse(JSON.parse(a.payload));return b.success?{ship:b.data.ship,signal:b.data.signal}:void 0}catch{return}}({contentType:d,payload:e}),meetingId:f??void 0,alertShip:function(a){let[b=""]=a.contentType.split(";");if(b.trim().toLowerCase()===J)try{return at.safeParse(JSON.parse(a.payload)).data?.ship.name}catch{return}}({contentType:d,payload:e})}})}async function ay({fleet:a,deliveryId:b,input:c}){let d=function(a){let b=a.note.trim();if(void 0===a.questionId)return""===b?{isOk:!1,message:"Write your answer first"}:{isOk:!0,value:{contentType:"text/plain",payload:b}};let c=ae.safeParse({questionId:a.questionId,...void 0===a.option?{}:{option:a.option},...""===b?{}:{note:b}});return c.success?{isOk:!0,value:{contentType:"application/vnd.aeolus.answer+json",payload:JSON.stringify(c.data)}}:{isOk:!1,message:"Tap an option, or write a note"}}(c);return d.isOk?av(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function az({fleet:a,deliveryId:b,option:c,optionLabel:d,note:e}){return av(a,async a=>{let{option:f,note:g}=await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:d,note:e});return{option:f,note:g}})}async function aA({fleet:a,deliveryId:b,option:c}){return av(a,async a=>{let d=await a.people.open.mutate({deliveryId:b}),e=an(d)?.options.find(({key:a})=>a===c)?.label??null;await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:e,note:""})})}async function aB(a,b){return av(a,async a=>{await a.people.removeFromBasket.mutate({questionId:b})})}async function aC(a){return av(a,a=>a.people.sendBasket.mutate())}async function aD({fleet:a,deliveryId:b,step:c}){return av(a,async a=>{await a.people.done.mutate(void 0===c?{deliveryId:b}:{deliveryId:b,...c})})}async function aE({fleet:a,deliveryId:b,isNew:c}){return av(a,async a=>{c&&await a.people.open.mutate({deliveryId:b}),await a.people.done.mutate({deliveryId:b})})}async function aF({fleet:a,messages:b}){return av(a,async a=>{let c=0,d=[];for(let{deliveryId:e,title:f}of b)try{await a.people.done.mutate({deliveryId:e}),c+=1}catch(a){if("UNAUTHORIZED"===(0,j.U)(a))throw a;d.push(f)}return{done:c,failed:d}})}async function aG(a){return av(a,async a=>{var b;let c,d,[e,f]=await Promise.all([a.people.sendTo.query(),a.people.yourFleet.query().catch(()=>void 0)]);return{sentAs:e.sentAs,ships:(b=e.ships,c=new Map((f?.groups??[]).flatMap(({tiles:a})=>a.map(({name:a,state:b})=>[a,b]))),d=a=>null===a?as.X.length:as.X.indexOf(a),b.map(a=>({name:a,state:c.get(a)??null})).toSorted((a,b)=>d(a.state)-d(b.state)||a.name.localeCompare(b.name)))}})}async function aH({fleet:a,to:b,payload:c,idempotencyKey:d}){return av(a,async a=>(await a.people.send.mutate({to:b,payload:c,idempotencyKey:d}),{storedAt:new Date().toISOString()}))}async function aI({fleet:a,job:b,place:c,isOn:d}){return av(a,async a=>{await a.people.turnRoute.mutate({job:b,place:c,isOn:d})})}async function aJ(a,b){return av(a,async a=>{await a.people.turnOnWebPush.mutate({endpoint:b.endpoint,keys:{p256dh:b.keys.p256dh,auth:b.keys.auth},browser:b.browser})})}async function aK(a,b){return av(a,async a=>{await a.people.turnOffWebPush.mutate({endpoint:b})})}async function aL(a){return av(a,async a=>{await a.slack.unlink.mutate()})}async function aM({fleet:a,requestId:b,input:c}){if("deny"===c.kind)return av(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let d=(0,e.f)("ship").safeParse(c.ownerShipId.trim());if(!d.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:c.name,ownerShipId:d.data,scopes:[...new Set([...ar._,...c.scopes])]},{server:g}=c,h=void 0===g?void 0:(0,k.y)(g);return av(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"approve",party:f,...void 0===g||void 0===h?{}:{server:{credential:h,concurrencyLimit:g.concurrencyLimit}}}})})}(0,a.i(13095).ensureServerEntryExports)([aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM]),(0,d.registerServerReference)(aw,"60df67d7958da9fba6cded6b55d1b8133e8e9a1273",null),(0,d.registerServerReference)(ax,"602390e5d7f0d17092beab792cafdd485bfb28d868",null),(0,d.registerServerReference)(ay,"40db7d83ab9618e36e567bcf66243a9a52614c933c",null),(0,d.registerServerReference)(az,"405f92098d95e14188d3c2e2058e1b73d6468d725b",null),(0,d.registerServerReference)(aA,"40d6d035364bed586c26cd7d80196b6f40cc3ed5af",null),(0,d.registerServerReference)(aB,"60805144861012c3c1c5af3c3730c5ad189ec00cb2",null),(0,d.registerServerReference)(aC,"40fd92d933155d577a39b70ae4a0afd206c15a24b6",null),(0,d.registerServerReference)(aD,"40d1b5efb67059d5ee812d8865798359fb723fb4e4",null),(0,d.registerServerReference)(aE,"40ad18ec34752337ffe6053724250396ebd972f1f0",null),(0,d.registerServerReference)(aF,"40a8b14e3dfa5c1584e9f941eb2549b57be68a09f3",null),(0,d.registerServerReference)(aG,"40573cbebd681c98d6ee072fae41d887c1642f6ab4",null),(0,d.registerServerReference)(aH,"405a8ff8ea3531b360a7e24e4f24204c43124766f4",null),(0,d.registerServerReference)(aI,"409c34adc4d955891186c0c193daea56c87d4a4f70",null),(0,d.registerServerReference)(aJ,"606b205d3e5fb403566f3ec1a2b42a44c783115c34",null),(0,d.registerServerReference)(aK,"6052be75df2875e64a4cc10e0e01706af01bc04763",null),(0,d.registerServerReference)(aL,"4024e6fc27987364a89dc128b78cfa40461e40eb7c",null),(0,d.registerServerReference)(aM,"4048efce3e16159e6437a09edc089ada821405b4c1",null),a.s(["q",0,ay,"Q",0,aM,"G",0,aD,"X",0,aE,"R",0,aF,"v",0,ax,"y",0,az,"W",0,aA,"F",0,aw,"e",0,aG,"D",0,aB,"K",0,aC,"u",0,aH,"Y",0,aK,"z",0,aJ,"f",0,aI,"Z",0,aL],43889)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[80198,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d={name:"arrow-right",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]};d.node;let e=(0,c.f)(d);var f=a.i(70840),g=a.i(52562),h=a.i(93817),i=a.i(97024),j=a.i(2550);let k={name:"clock",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]};k.node;let l=(0,c.f)(k);var m=a.i(58983);let n={name:"pencil",size:24,node:[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]};n.node;let o=(0,c.f)(n);var p=a.i(59542),q=a.i(74746),r=a.i(55596),s=a.i(74215),t=a.i(72131),u=a.i(87365),v=a.i(5050);let w=(0,v.createServerReference)("40e9c41f0b0709783b4c06aff369d7acdf11bbe7c1",v.callServer,void 0,v.findSourceMapURL,"sendBasket");function x(a){return`${new Date(a).toISOString().slice(11,16)} UTC`}let y={bridge:"in Bridge",chat:"in a chat",slack:"in Slack",gateway:"by the gateway"};function z(a){return{desktop:a,phone:a}}function A(a){return 1===a?"1 answer":`${String(a)} answers`}function B(a){return a.length<=1?a.join(""):`${a.slice(0,-1).join(", ")} and ${a.at(-1)??""}`}function C(a){return[...new Set(a.map(({from:a})=>a))]}var D=a.i(32043),E=a.i(10039),F=a.i(91777);let G={sent:i.f,sending:m.f,next:l,unanswered:m.f,refused:h.f,withdrawn:f.f,replaced:p.f,elsewhere:g.f},H={ok:"text-tone-ok-fg",waiting:"text-tone-waiting-fg",attention:"text-tone-attention-fg",off:"text-muted-foreground"};function I({words:a}){return a.desktop===a.phone?(0,b.jsx)("span",{children:a.desktop}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"hidden sm:inline",children:a.desktop}),(0,b.jsx)("span",{className:"sm:hidden",children:a.phone})]})}function J({line:a}){let c=G[a.icon];return(0,b.jsxs)("p",{"data-testid":"bridge-basket-standing",className:"col-span-2 col-start-2 flex items-start gap-1.5 text-meta",children:[(0,b.jsx)(c,{"aria-hidden":!0,className:`mt-0.5 size-3.5 shrink-0 ${H[a.tone]}`}),(0,b.jsx)("span",{children:(0,b.jsx)(I,{words:a.words})})]})}function K({entry:a,line:c,opening:d,working:f,onRemove:g}){let{standing:h}=a,i="withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind,k=void 0!==f||void 0!==d.openingId,l=f?.kind==="remove"&&f.questionId===a.questionId,m="replaced"===h.kind?h.replacementId:null,n=i?"line-through decoration-muted-foreground":"";return(0,b.jsxs)("li",{"data-testid":"bridge-basket-entry","data-standing":h.kind,className:`grid grid-cols-[18px_1fr_auto] items-start gap-x-2.5 gap-y-1.5 border-t border-border p-3 first:border-t-0 sm:px-3.5 ${i?"bg-muted":""}`,children:[(0,b.jsx)(j.f,{"aria-hidden":!0,className:"mt-0.5 size-4 text-tone-active-fg"}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,b.jsx)("span",{className:`font-medium ${n}`,children:a.title}),(0,b.jsxs)("span",{className:"flex flex-wrap items-center gap-1.5 text-caption text-muted-foreground",children:[(0,b.jsxs)("span",{children:["to ",(0,b.jsx)("b",{className:"font-medium text-foreground",children:a.from})]}),(0,b.jsx)("span",{"aria-hidden":!0,className:"hidden text-border sm:inline",children:"·"}),(0,b.jsxs)("span",{className:"hidden sm:inline",children:["asked at ",(0,b.jsx)("time",{dateTime:a.sentAt,children:x(a.sentAt)})]})]}),(0,b.jsxs)("span",{className:`${i?"hidden sm:flex":"flex"} items-center gap-1.5 text-meta ${n}`,children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5 shrink-0 text-primary"}),null===a.option?"Note alone":null===a.optionLabel?`Option ${String(a.option)}`:`${String(a.option)}. ${a.optionLabel}`]}),null===a.note?null:(0,b.jsxs)("span",{className:"text-caption italic text-muted-foreground",children:['"',a.note,'"']})]}),"waiting"===h.kind?(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-change",size:"small","aria-label":"Change",isPending:d.openingId===a.deliveryId,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:a.deliveryId,job:"decide",inBasket:{option:a.option,note:a.note}})},children:[(0,b.jsx)(o,{"aria-hidden":!0,className:"size-3.5"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Change"})]}),(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"ghost","aria-label":"Remove",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:[(0,b.jsx)(s.X,{"aria-hidden":!0,className:"size-4 sm:hidden"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Remove"})]})]}):(0,b.jsx)("span",{}),void 0===c?null:(0,b.jsx)(J,{line:c}),d.failure?.deliveryId===a.deliveryId?(0,b.jsx)("div",{className:"col-span-2 col-start-2",children:(0,b.jsx)(E.f,{message:d.failure.message,isFailure:!0})}):null,"withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind||"refused"===h.kind?(0,b.jsxs)("div",{className:"col-span-2 col-start-2 flex flex-wrap items-center gap-1.5",children:[null===m?null:(0,b.jsxs)(D.i,{"data-testid":"bridge-replacement",size:"small",isPending:d.openingId===m,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:m,job:"decide"})},children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5"}),"Answer the new question"]}),(0,b.jsx)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"replaced"===h.kind?"ghost":"secondary",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:"refused"===h.kind?"Remove and mark done":"Remove"})]}):null]})}function L({foot:a,isSending:c,isWorking:d,onSend:e}){return"none"===a.kind?null:(0,b.jsxs)("div",{"data-testid":"bridge-basket-foot",className:"flex flex-col items-stretch gap-2 border-t border-border bg-card p-3 sm:flex-row sm:items-center sm:gap-3 sm:px-3.5",children:[(0,b.jsx)("p",{className:"flex-1 text-caption text-muted-foreground",children:(0,b.jsx)(I,{words:a.words})}),"send"===a.kind?(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-send",variant:"primary",className:"justify-center",isPending:c,pendingLabel:"Sending...",disabled:d,onClick:e,children:[(0,b.jsx)(q.f,{"aria-hidden":!0,className:"size-4"}),a.label]}):null,"sending"===a.kind?(0,b.jsxs)("button",{type:"button","data-testid":"bridge-basket-sending",disabled:!0,"aria-busy":"true",className:"inline-flex h-9 items-center justify-center gap-2 rounded-md border border-border bg-card px-4 font-medium text-card-foreground",children:[(0,b.jsx)(m.f,{"aria-hidden":!0,className:"size-4 animate-spin"}),a.progress]}):null]})}function M({summary:a}){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-sent",role:"status",className:"flex max-w-[620px] items-start gap-3 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg",children:[(0,b.jsx)(i.f,{"aria-hidden":!0,className:"mt-0.5 size-4 shrink-0 text-tone-ok-fg"}),(0,b.jsxs)("span",{className:"grid gap-1",children:[(0,b.jsx)("span",{className:"font-medium",children:a.title}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:a.description})]})]})}function N(){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-empty",className:"grid max-w-[820px] justify-items-center gap-3 rounded-lg border border-dashed border-border bg-card px-6 py-10 text-center",children:[(0,b.jsx)("span",{className:"inline-flex size-11 items-center justify-center rounded-lg bg-secondary text-muted-foreground",children:(0,b.jsx)(r.f,{"aria-hidden":!0,className:"size-5"})}),(0,b.jsx)("span",{className:"text-heading font-semibold",children:"The basket is empty"}),(0,b.jsx)("span",{className:"max-w-[360px] text-muted-foreground",children:"Pick an option on a question and put it in the basket; it waits here until you send it."})]})}a.s(["BasketPanel",0,function({fleetId:a,basket:c}){let d,e,[f,g]=(0,t.useState)(),[h,i]=(0,t.useState)(),[,j]=(0,t.useTransition)(),k=(d=c.entries.some(({standing:a})=>"sent"===a.kind),e=c.entries.find(({standing:a})=>"sending"===a.kind&&!a.isUnanswered),c.entries.map(a=>(function(a,b){let{standing:c,from:d}=a;switch(c.kind){case"waiting":return;case"sent":{let a=x(c.at);return{icon:"sent",tone:"ok",words:{desktop:`Sent at ${a} and stored. Done.`,phone:`Sent at ${a}. Done.`}}}case"sending":if(c.isUnanswered)return{icon:"unanswered",tone:"waiting",words:{desktop:"The fleet did not answer. Sending again with the same key until it is stored; it arrives once.",phone:"No answer from the fleet. Sending again, same key."}};return b.isSendingNow?{icon:"sending",tone:"waiting",words:z("Sending...")}:{icon:"next",tone:"waiting",words:{desktop:"Next, in the order you added it",phone:"Next"}};case"refused":{let a=`Not sent: ${c.reason}.`,[d=c.reason]=c.reason.split(", so ");return{icon:"refused",tone:"attention",words:{desktop:b.isAnySent?`${a} The others were sent.`:a,phone:`Not sent: ${d}.`}}}case"withdrawn":return{icon:"withdrawn",tone:"off",words:{desktop:`Withdrawn by ${d} at ${x(c.at)}. Not sent; Send skips it.`,phone:`Withdrawn by ${d}. Not sent.`}};case"replaced":{let a=null===c.replacementTitle?".":` with "${c.replacementTitle}"`;return{icon:"replaced",tone:"off",words:{desktop:`Replaced by ${d} at ${x(c.at)}${a} Not sent: its options differ, so answer the new one.`,phone:`Replaced by ${d}. Not sent.`}}}case"dealtElsewhere":return{icon:"elsewhere",tone:"off",words:z(null===c.option?`Done ${y[c.place]}. Nothing is sent from it.`:`Answered ${y[c.place]}: option ${String(c.option)}. Nothing is sent from it.`)}}})(a,{isAnySent:d,isSendingNow:a===e}))),l=function(a){let{entries:b}=a;if(0===b.length||b.some(({standing:a})=>"sent"!==a.kind))return;let c=`To ${B(C(b))}, as you;`;return{title:`${A(b.length)} sent`,description:1===b.length?`${c} stored, and in Done.`:`${c} each stored, each in Done.`}}(c),m=b=>{g({kind:"remove",questionId:b}),i(void 0),j(async()=>{let c=await (0,u.f)(a,b);g(void 0),i(c.isOk?void 0:c.message)})},n=()=>{g({kind:"send"}),i(void 0),j(async()=>{let b=await w(a);g(void 0),i(b.isOk?void 0:b.message)})};return(0,b.jsx)(F.f,{fleetId:a,known:c.entries.map(a=>({deliveryId:a.deliveryId,job:"decide",isAlert:!1,state:"seen",inBasket:{option:a.option,note:a.note}})),children:a=>(0,b.jsxs)("section",{className:"grid gap-4","aria-labelledby":"bridge-basket-heading",children:[(0,b.jsxs)("div",{className:"hidden sm:block",children:[(0,b.jsxs)("h1",{id:"bridge-basket-heading",className:"text-heading font-semibold",children:["Basket ",(0,b.jsx)("span",{"data-testid":"bridge-basket-count",className:"text-primary",children:c.count})]}),(0,b.jsx)("p",{className:"text-caption text-muted-foreground",children:"Answers you picked in Bridge, not sent yet. Nothing goes until you press Send."})]}),void 0===h?null:(0,b.jsx)(E.f,{message:h,isFailure:!0}),void 0===l?null:(0,b.jsx)(M,{summary:l}),0===c.entries.length||void 0!==l?(0,b.jsx)(N,{}):(0,b.jsxs)("div",{className:"max-w-[820px] overflow-hidden rounded-lg border border-border bg-card",children:[(0,b.jsx)("ul",{children:c.entries.map((c,d)=>(0,b.jsx)(K,{entry:c,line:k[d],opening:a,working:f,onRemove:m},c.questionId))}),(0,b.jsx)(L,{foot:function(a){if(a.toSend>0)return function(a){var b;let c=function(a){let b=b=>a.filter(({standing:a})=>a.kind===b).length,c=["withdrawn","replaced"].map(a=>({kind:a,count:b(a)})).filter(({count:a})=>a>0),d=c.map(({kind:a,count:b},d)=>b>1?`the ${String(b)} ${a}`:d===c.length-1?`the ${a} one`:`the ${a}`),e=b("dealtElsewhere"),f=0===e?d:[...d,1===e?"the one answered elsewhere":`the ${String(e)} answered elsewhere`];if(0===f.length)return;let g=B(f),h=1===c.reduce((a,{count:b})=>a+b,e);return`${g.charAt(0).toUpperCase()}${g.slice(1)} ${h?"is":"are"} not sent.`}(a.entries),d=(b=a.toSend,`Send ${A(b)}`);if(void 0!==c)return{kind:"send",words:{desktop:`${String(a.toSend)} to send. ${c}`,phone:c},label:d};let e=a.entries.filter(({standing:a})=>"waiting"===a.kind),f=C(e),g=f.length>1?"each receive their own answer":e.length>1?"receives its own answer to each":"receives its own answer";return{kind:"send",words:{desktop:`${B(f)} ${g}, as you, as if sent one by one.`,phone:"Each asker receives its own answer."},label:d}}(a);let b=a.entries.map(({standing:a})=>a),c=b.filter(({kind:a})=>"sent"===a).length,d=b.filter(({kind:a})=>"sending"===a).length,e=b.filter(({kind:a})=>"refused"===a).length,f=b.some(a=>"sending"===a.kind&&a.isUnanswered);if(d>0&&0===e&&!f)return{kind:"sending",words:{desktop:"You can close Bridge: the gateway keeps sending what is stored as sending.",phone:"You can close Bridge; the gateway keeps sending."},progress:`Sending ${String(c+1)} of ${String(c+d)}`};if(0===d&&0===e)return{kind:"none"};let g=(a,b)=>0===a?[]:[`${String(a)} ${b}`];return{kind:"summary",words:{desktop:`${[...g(c,"sent"),...g(d,"still sending"),...g(e,"not sent")].join(", ")}.`,phone:`${[...g(c,"sent"),...g(d,"sending"),...g(e,"not sent")].join(", ")}.`}}}(c),isSending:f?.kind==="send",isWorking:void 0!==f||void 0!==a.openingId,onSend:n})]})]})})}],80198)}];
1
+ module.exports=[80198,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d={name:"arrow-right",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]};d.node;let e=(0,c.f)(d);var f=a.i(70840),g=a.i(52562),h=a.i(93817),i=a.i(97024),j=a.i(2550);let k={name:"clock",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]};k.node;let l=(0,c.f)(k);var m=a.i(58983);let n={name:"pencil",size:24,node:[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]};n.node;let o=(0,c.f)(n);var p=a.i(59542),q=a.i(74746),r=a.i(55596),s=a.i(74215),t=a.i(72131),u=a.i(3196),v=a.i(5050);let w=(0,v.createServerReference)("40fd92d933155d577a39b70ae4a0afd206c15a24b6",v.callServer,void 0,v.findSourceMapURL,"sendBasket");function x(a){return`${new Date(a).toISOString().slice(11,16)} UTC`}let y={bridge:"in Bridge",chat:"in a chat",slack:"in Slack",gateway:"by the gateway"};function z(a){return{desktop:a,phone:a}}function A(a){return 1===a?"1 answer":`${String(a)} answers`}function B(a){return a.length<=1?a.join(""):`${a.slice(0,-1).join(", ")} and ${a.at(-1)??""}`}function C(a){return[...new Set(a.map(({from:a})=>a))]}var D=a.i(32043),E=a.i(10039),F=a.i(91777);let G={sent:i.f,sending:m.f,next:l,unanswered:m.f,refused:h.f,withdrawn:f.f,replaced:p.f,elsewhere:g.f},H={ok:"text-tone-ok-fg",waiting:"text-tone-waiting-fg",attention:"text-tone-attention-fg",off:"text-muted-foreground"};function I({words:a}){return a.desktop===a.phone?(0,b.jsx)("span",{children:a.desktop}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"hidden sm:inline",children:a.desktop}),(0,b.jsx)("span",{className:"sm:hidden",children:a.phone})]})}function J({line:a}){let c=G[a.icon];return(0,b.jsxs)("p",{"data-testid":"bridge-basket-standing",className:"col-span-2 col-start-2 flex items-start gap-1.5 text-meta",children:[(0,b.jsx)(c,{"aria-hidden":!0,className:`mt-0.5 size-3.5 shrink-0 ${H[a.tone]}`}),(0,b.jsx)("span",{children:(0,b.jsx)(I,{words:a.words})})]})}function K({entry:a,line:c,opening:d,working:f,onRemove:g}){let{standing:h}=a,i="withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind,k=void 0!==f||void 0!==d.openingId,l=f?.kind==="remove"&&f.questionId===a.questionId,m="replaced"===h.kind?h.replacementId:null,n=i?"line-through decoration-muted-foreground":"";return(0,b.jsxs)("li",{"data-testid":"bridge-basket-entry","data-standing":h.kind,className:`grid grid-cols-[18px_1fr_auto] items-start gap-x-2.5 gap-y-1.5 border-t border-border p-3 first:border-t-0 sm:px-3.5 ${i?"bg-muted":""}`,children:[(0,b.jsx)(j.f,{"aria-hidden":!0,className:"mt-0.5 size-4 text-tone-active-fg"}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,b.jsx)("span",{className:`font-medium ${n}`,children:a.title}),(0,b.jsxs)("span",{className:"flex flex-wrap items-center gap-1.5 text-caption text-muted-foreground",children:[(0,b.jsxs)("span",{children:["to ",(0,b.jsx)("b",{className:"font-medium text-foreground",children:a.from})]}),(0,b.jsx)("span",{"aria-hidden":!0,className:"hidden text-border sm:inline",children:"·"}),(0,b.jsxs)("span",{className:"hidden sm:inline",children:["asked at ",(0,b.jsx)("time",{dateTime:a.sentAt,children:x(a.sentAt)})]})]}),(0,b.jsxs)("span",{className:`${i?"hidden sm:flex":"flex"} items-center gap-1.5 text-meta ${n}`,children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5 shrink-0 text-primary"}),null===a.option?"Note alone":null===a.optionLabel?`Option ${String(a.option)}`:`${String(a.option)}. ${a.optionLabel}`]}),null===a.note?null:(0,b.jsxs)("span",{className:"text-caption italic text-muted-foreground",children:['"',a.note,'"']})]}),"waiting"===h.kind?(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-change",size:"small","aria-label":"Change",isPending:d.openingId===a.deliveryId,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:a.deliveryId,job:"decide",inBasket:{option:a.option,note:a.note}})},children:[(0,b.jsx)(o,{"aria-hidden":!0,className:"size-3.5"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Change"})]}),(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"ghost","aria-label":"Remove",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:[(0,b.jsx)(s.X,{"aria-hidden":!0,className:"size-4 sm:hidden"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Remove"})]})]}):(0,b.jsx)("span",{}),void 0===c?null:(0,b.jsx)(J,{line:c}),d.failure?.deliveryId===a.deliveryId?(0,b.jsx)("div",{className:"col-span-2 col-start-2",children:(0,b.jsx)(E.f,{message:d.failure.message,isFailure:!0})}):null,"withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind||"refused"===h.kind?(0,b.jsxs)("div",{className:"col-span-2 col-start-2 flex flex-wrap items-center gap-1.5",children:[null===m?null:(0,b.jsxs)(D.i,{"data-testid":"bridge-replacement",size:"small",isPending:d.openingId===m,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:m,job:"decide"})},children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5"}),"Answer the new question"]}),(0,b.jsx)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"replaced"===h.kind?"ghost":"secondary",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:"refused"===h.kind?"Remove and mark done":"Remove"})]}):null]})}function L({foot:a,isSending:c,isWorking:d,onSend:e}){return"none"===a.kind?null:(0,b.jsxs)("div",{"data-testid":"bridge-basket-foot",className:"flex flex-col items-stretch gap-2 border-t border-border bg-card p-3 sm:flex-row sm:items-center sm:gap-3 sm:px-3.5",children:[(0,b.jsx)("p",{className:"flex-1 text-caption text-muted-foreground",children:(0,b.jsx)(I,{words:a.words})}),"send"===a.kind?(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-send",variant:"primary",className:"justify-center",isPending:c,pendingLabel:"Sending...",disabled:d,onClick:e,children:[(0,b.jsx)(q.f,{"aria-hidden":!0,className:"size-4"}),a.label]}):null,"sending"===a.kind?(0,b.jsxs)("button",{type:"button","data-testid":"bridge-basket-sending",disabled:!0,"aria-busy":"true",className:"inline-flex h-9 items-center justify-center gap-2 rounded-md border border-border bg-card px-4 font-medium text-card-foreground",children:[(0,b.jsx)(m.f,{"aria-hidden":!0,className:"size-4 animate-spin"}),a.progress]}):null]})}function M({summary:a}){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-sent",role:"status",className:"flex max-w-[620px] items-start gap-3 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg",children:[(0,b.jsx)(i.f,{"aria-hidden":!0,className:"mt-0.5 size-4 shrink-0 text-tone-ok-fg"}),(0,b.jsxs)("span",{className:"grid gap-1",children:[(0,b.jsx)("span",{className:"font-medium",children:a.title}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:a.description})]})]})}function N(){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-empty",className:"grid max-w-[820px] justify-items-center gap-3 rounded-lg border border-dashed border-border bg-card px-6 py-10 text-center",children:[(0,b.jsx)("span",{className:"inline-flex size-11 items-center justify-center rounded-lg bg-secondary text-muted-foreground",children:(0,b.jsx)(r.f,{"aria-hidden":!0,className:"size-5"})}),(0,b.jsx)("span",{className:"text-heading font-semibold",children:"The basket is empty"}),(0,b.jsx)("span",{className:"max-w-[360px] text-muted-foreground",children:"Pick an option on a question and put it in the basket; it waits here until you send it."})]})}a.s(["BasketPanel",0,function({fleetId:a,basket:c}){let d,e,[f,g]=(0,t.useState)(),[h,i]=(0,t.useState)(),[,j]=(0,t.useTransition)(),k=(d=c.entries.some(({standing:a})=>"sent"===a.kind),e=c.entries.find(({standing:a})=>"sending"===a.kind&&!a.isUnanswered),c.entries.map(a=>(function(a,b){let{standing:c,from:d}=a;switch(c.kind){case"waiting":return;case"sent":{let a=x(c.at);return{icon:"sent",tone:"ok",words:{desktop:`Sent at ${a} and stored. Done.`,phone:`Sent at ${a}. Done.`}}}case"sending":if(c.isUnanswered)return{icon:"unanswered",tone:"waiting",words:{desktop:"The fleet did not answer. Sending again with the same key until it is stored; it arrives once.",phone:"No answer from the fleet. Sending again, same key."}};return b.isSendingNow?{icon:"sending",tone:"waiting",words:z("Sending...")}:{icon:"next",tone:"waiting",words:{desktop:"Next, in the order you added it",phone:"Next"}};case"refused":{let a=`Not sent: ${c.reason}.`,[d=c.reason]=c.reason.split(", so ");return{icon:"refused",tone:"attention",words:{desktop:b.isAnySent?`${a} The others were sent.`:a,phone:`Not sent: ${d}.`}}}case"withdrawn":return{icon:"withdrawn",tone:"off",words:{desktop:`Withdrawn by ${d} at ${x(c.at)}. Not sent; Send skips it.`,phone:`Withdrawn by ${d}. Not sent.`}};case"replaced":{let a=null===c.replacementTitle?".":` with "${c.replacementTitle}"`;return{icon:"replaced",tone:"off",words:{desktop:`Replaced by ${d} at ${x(c.at)}${a} Not sent: its options differ, so answer the new one.`,phone:`Replaced by ${d}. Not sent.`}}}case"dealtElsewhere":return{icon:"elsewhere",tone:"off",words:z(null===c.option?`Done ${y[c.place]}. Nothing is sent from it.`:`Answered ${y[c.place]}: option ${String(c.option)}. Nothing is sent from it.`)}}})(a,{isAnySent:d,isSendingNow:a===e}))),l=function(a){let{entries:b}=a;if(0===b.length||b.some(({standing:a})=>"sent"!==a.kind))return;let c=`To ${B(C(b))}, as you;`;return{title:`${A(b.length)} sent`,description:1===b.length?`${c} stored, and in Done.`:`${c} each stored, each in Done.`}}(c),m=b=>{g({kind:"remove",questionId:b}),i(void 0),j(async()=>{let c=await (0,u.f)(a,b);g(void 0),i(c.isOk?void 0:c.message)})},n=()=>{g({kind:"send"}),i(void 0),j(async()=>{let b=await w(a);g(void 0),i(b.isOk?void 0:b.message)})};return(0,b.jsx)(F.f,{fleetId:a,known:c.entries.map(a=>({deliveryId:a.deliveryId,job:"decide",isAlert:!1,state:"seen",inBasket:{option:a.option,note:a.note}})),children:a=>(0,b.jsxs)("section",{className:"grid gap-4","aria-labelledby":"bridge-basket-heading",children:[(0,b.jsxs)("div",{className:"hidden sm:block",children:[(0,b.jsxs)("h1",{id:"bridge-basket-heading",className:"text-heading font-semibold",children:["Basket ",(0,b.jsx)("span",{"data-testid":"bridge-basket-count",className:"text-primary",children:c.count})]}),(0,b.jsx)("p",{className:"text-caption text-muted-foreground",children:"Answers you picked in Bridge, not sent yet. Nothing goes until you press Send."})]}),void 0===h?null:(0,b.jsx)(E.f,{message:h,isFailure:!0}),void 0===l?null:(0,b.jsx)(M,{summary:l}),0===c.entries.length||void 0!==l?(0,b.jsx)(N,{}):(0,b.jsxs)("div",{className:"max-w-[820px] overflow-hidden rounded-lg border border-border bg-card",children:[(0,b.jsx)("ul",{children:c.entries.map((c,d)=>(0,b.jsx)(K,{entry:c,line:k[d],opening:a,working:f,onRemove:m},c.questionId))}),(0,b.jsx)(L,{foot:function(a){if(a.toSend>0)return function(a){var b;let c=function(a){let b=b=>a.filter(({standing:a})=>a.kind===b).length,c=["withdrawn","replaced"].map(a=>({kind:a,count:b(a)})).filter(({count:a})=>a>0),d=c.map(({kind:a,count:b},d)=>b>1?`the ${String(b)} ${a}`:d===c.length-1?`the ${a} one`:`the ${a}`),e=b("dealtElsewhere"),f=0===e?d:[...d,1===e?"the one answered elsewhere":`the ${String(e)} answered elsewhere`];if(0===f.length)return;let g=B(f),h=1===c.reduce((a,{count:b})=>a+b,e);return`${g.charAt(0).toUpperCase()}${g.slice(1)} ${h?"is":"are"} not sent.`}(a.entries),d=(b=a.toSend,`Send ${A(b)}`);if(void 0!==c)return{kind:"send",words:{desktop:`${String(a.toSend)} to send. ${c}`,phone:c},label:d};let e=a.entries.filter(({standing:a})=>"waiting"===a.kind),f=C(e),g=f.length>1?"each receive their own answer":e.length>1?"receives its own answer to each":"receives its own answer";return{kind:"send",words:{desktop:`${B(f)} ${g}, as you, as if sent one by one.`,phone:"Each asker receives its own answer."},label:d}}(a);let b=a.entries.map(({standing:a})=>a),c=b.filter(({kind:a})=>"sent"===a).length,d=b.filter(({kind:a})=>"sending"===a).length,e=b.filter(({kind:a})=>"refused"===a).length,f=b.some(a=>"sending"===a.kind&&a.isUnanswered);if(d>0&&0===e&&!f)return{kind:"sending",words:{desktop:"You can close Bridge: the gateway keeps sending what is stored as sending.",phone:"You can close Bridge; the gateway keeps sending."},progress:`Sending ${String(c+1)} of ${String(c+d)}`};if(0===d&&0===e)return{kind:"none"};let g=(a,b)=>0===a?[]:[`${String(a)} ${b}`];return{kind:"summary",words:{desktop:`${[...g(c,"sent"),...g(d,"still sending"),...g(e,"not sent")].join(", ")}.`,phone:`${[...g(c,"sent"),...g(d,"sending"),...g(e,"not sent")].join(", ")}.`}}}(c),isSending:f?.kind==="send",isWorking:void 0!==f||void 0!==a.openingId,onSend:n})]})]})})}],80198)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map