@aeolus-fleet/gateway 0.29.2 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -3
- package/dist/adapters/a2a/a2a-agents.d.ts +6 -0
- package/dist/adapters/a2a/a2a-agents.js +238 -0
- package/dist/adapters/a2a/a2a-agents.js.map +1 -0
- package/dist/adapters/a2a/agent-cards.d.ts +4 -0
- package/dist/adapters/a2a/agent-cards.js +90 -0
- package/dist/adapters/a2a/agent-cards.js.map +1 -0
- package/dist/adapters/crypto/agent-keys.d.ts +3 -0
- package/dist/adapters/crypto/agent-keys.js +13 -0
- package/dist/adapters/crypto/agent-keys.js.map +1 -0
- package/dist/adapters/crypto/call-keys.js +2 -0
- package/dist/adapters/crypto/call-keys.js.map +1 -1
- package/dist/adapters/fleet/core-version.d.ts +1 -1
- package/dist/adapters/fleet/core-version.js +1 -1
- package/dist/adapters/fleet/fleet-ships.d.ts +3 -1
- package/dist/adapters/fleet/fleet-ships.js +19 -10
- package/dist/adapters/fleet/fleet-ships.js.map +1 -1
- package/dist/adapters/fleet/rest-fleet-door.d.ts +4 -2
- package/dist/adapters/fleet/rest-fleet-door.js +65 -6
- package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
- package/dist/adapters/http/a2a-cards.d.ts +24 -0
- package/dist/adapters/http/a2a-cards.js +62 -0
- package/dist/adapters/http/a2a-cards.js.map +1 -0
- package/dist/adapters/http/a2a-endpoint.d.ts +28 -0
- package/dist/adapters/http/a2a-endpoint.js +424 -0
- package/dist/adapters/http/a2a-endpoint.js.map +1 -0
- package/dist/adapters/http/a2a-streams.d.ts +28 -0
- package/dist/adapters/http/a2a-streams.js +74 -0
- package/dist/adapters/http/a2a-streams.js.map +1 -0
- package/dist/adapters/http/a2a-tasks.d.ts +18 -0
- package/dist/adapters/http/a2a-tasks.js +117 -0
- package/dist/adapters/http/a2a-tasks.js.map +1 -0
- package/dist/adapters/http/front-door.js +8 -4
- package/dist/adapters/http/front-door.js.map +1 -1
- package/dist/adapters/http/live.d.ts +3 -1
- package/dist/adapters/http/live.js +6 -2
- package/dist/adapters/http/live.js.map +1 -1
- package/dist/adapters/http/oauth-routes.d.ts +1 -1
- package/dist/adapters/http/oauth-routes.js +16 -3
- package/dist/adapters/http/oauth-routes.js.map +1 -1
- package/dist/adapters/http/person-tools.d.ts +4 -7
- package/dist/adapters/http/person-tools.js +75 -10
- package/dist/adapters/http/person-tools.js.map +1 -1
- package/dist/adapters/mcp/mcp-servers.js +2 -0
- package/dist/adapters/mcp/mcp-servers.js.map +1 -1
- package/dist/adapters/pagasae/email-channel.d.ts +8 -0
- package/dist/adapters/pagasae/email-channel.js +37 -0
- package/dist/adapters/pagasae/email-channel.js.map +1 -0
- package/dist/adapters/pagasae/pagasae-client.js +6 -2
- package/dist/adapters/pagasae/pagasae-client.js.map +1 -1
- package/dist/adapters/prisma/agent-calls.d.ts +3 -0
- package/dist/adapters/prisma/agent-calls.js +49 -0
- package/dist/adapters/prisma/agent-calls.js.map +1 -0
- package/dist/adapters/prisma/changes.d.ts +17 -8
- package/dist/adapters/prisma/changes.js +18 -5
- package/dist/adapters/prisma/changes.js.map +1 -1
- package/dist/adapters/prisma/client-calls.d.ts +1 -1
- package/dist/adapters/prisma/client-calls.js +83 -21
- package/dist/adapters/prisma/client-calls.js.map +1 -1
- package/dist/adapters/prisma/email-channels.d.ts +4 -0
- package/dist/adapters/prisma/email-channels.js +14 -0
- package/dist/adapters/prisma/email-channels.js.map +1 -0
- package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
- package/dist/adapters/prisma/fleet-forgetter.js +2 -2
- package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
- package/dist/adapters/prisma/focused-pages.d.ts +4 -0
- package/dist/adapters/prisma/focused-pages.js +13 -0
- package/dist/adapters/prisma/focused-pages.js.map +1 -0
- package/dist/adapters/prisma/generated/browser.d.ts +45 -0
- package/dist/adapters/prisma/generated/client.d.ts +45 -0
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +54 -54
- package/dist/adapters/prisma/generated/internal/class.d.ts +99 -0
- package/dist/adapters/prisma/generated/internal/class.js +4 -4
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +783 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +101 -3
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +107 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +101 -3
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/A2aAgentCall.d.ts +1203 -0
- package/dist/adapters/prisma/generated/models/A2aAgentCall.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aAgentCall.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aAgentReply.d.ts +1003 -0
- package/dist/adapters/prisma/generated/models/A2aAgentReply.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aAgentReply.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aPush.d.ts +1413 -0
- package/dist/adapters/prisma/generated/models/A2aPush.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aPush.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aPushConfig.d.ts +1322 -0
- package/dist/adapters/prisma/generated/models/A2aPushConfig.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aPushConfig.js.map +1 -0
- package/dist/adapters/prisma/generated/models/A2aTask.d.ts +1002 -0
- package/dist/adapters/prisma/generated/models/A2aTask.js +2 -0
- package/dist/adapters/prisma/generated/models/A2aTask.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ClientCall.d.ts +136 -15
- package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +0 -7
- package/dist/adapters/prisma/generated/models/EmailChannel.d.ts +946 -0
- package/dist/adapters/prisma/generated/models/EmailChannel.js +2 -0
- package/dist/adapters/prisma/generated/models/EmailChannel.js.map +1 -0
- package/dist/adapters/prisma/generated/models/FocusedPage.d.ts +974 -0
- package/dist/adapters/prisma/generated/models/FocusedPage.js +2 -0
- package/dist/adapters/prisma/generated/models/FocusedPage.js.map +1 -0
- package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +47 -41
- package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +32 -8
- package/dist/adapters/prisma/generated/models/Party.d.ts +90 -3
- package/dist/adapters/prisma/generated/models/WakeSent.d.ts +975 -0
- package/dist/adapters/prisma/generated/models/WakeSent.js +2 -0
- package/dist/adapters/prisma/generated/models/WakeSent.js.map +1 -0
- package/dist/adapters/prisma/generated/models/WebPushSubscription.d.ts +1115 -0
- package/dist/adapters/prisma/generated/models/WebPushSubscription.js +2 -0
- package/dist/adapters/prisma/generated/models/WebPushSubscription.js.map +1 -0
- package/dist/adapters/prisma/generated/models.d.ts +9 -0
- package/dist/adapters/prisma/oauth-stores.js +3 -2
- package/dist/adapters/prisma/oauth-stores.js.map +1 -1
- package/dist/adapters/prisma/party-store.js +35 -6
- package/dist/adapters/prisma/party-store.js.map +1 -1
- package/dist/adapters/prisma/person-crews.js +9 -0
- package/dist/adapters/prisma/person-crews.js.map +1 -1
- package/dist/adapters/prisma/push-store.d.ts +3 -0
- package/dist/adapters/prisma/push-store.js +102 -0
- package/dist/adapters/prisma/push-store.js.map +1 -0
- package/dist/adapters/prisma/waiter-locks.d.ts +4 -0
- package/dist/adapters/prisma/waiter-locks.js +72 -0
- package/dist/adapters/prisma/waiter-locks.js.map +1 -0
- package/dist/adapters/prisma/wakes-sent.d.ts +4 -0
- package/dist/adapters/prisma/wakes-sent.js +10 -0
- package/dist/adapters/prisma/wakes-sent.js.map +1 -0
- package/dist/adapters/prisma/web-push-subscriptions.d.ts +3 -0
- package/dist/adapters/prisma/web-push-subscriptions.js +33 -0
- package/dist/adapters/prisma/web-push-subscriptions.js.map +1 -0
- package/dist/adapters/trpc/router.d.ts +460 -9
- package/dist/adapters/trpc/router.js +269 -13
- package/dist/adapters/trpc/router.js.map +1 -1
- package/dist/adapters/web-push/web-push.d.ts +9 -0
- package/dist/adapters/web-push/web-push.js +70 -0
- package/dist/adapters/web-push/web-push.js.map +1 -0
- package/dist/adapters/webhooks/allowed-lookup.d.ts +14 -0
- package/dist/adapters/webhooks/allowed-lookup.js +28 -0
- package/dist/adapters/webhooks/allowed-lookup.js.map +1 -0
- package/dist/adapters/webhooks/host-resolver.d.ts +3 -0
- package/dist/adapters/webhooks/host-resolver.js +13 -0
- package/dist/adapters/webhooks/host-resolver.js.map +1 -0
- package/dist/adapters/webhooks/webhook-poster.d.ts +6 -0
- package/dist/adapters/webhooks/webhook-poster.js +67 -0
- package/dist/adapters/webhooks/webhook-poster.js.map +1 -0
- package/dist/app.d.ts +12 -0
- package/dist/app.js +277 -14
- package/dist/app.js.map +1 -1
- package/dist/bin/aeolus-gateway.js +3 -0
- package/dist/bin/aeolus-gateway.js.map +1 -1
- package/dist/config.d.ts +14 -0
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -1
- package/dist/core/a2a-in/authenticate-a2a-client.d.ts +23 -0
- package/dist/core/a2a-in/authenticate-a2a-client.js +21 -0
- package/dist/core/a2a-in/authenticate-a2a-client.js.map +1 -0
- package/dist/core/a2a-in/deliver-pushes.d.ts +24 -0
- package/dist/core/a2a-in/deliver-pushes.js +48 -0
- package/dist/core/a2a-in/deliver-pushes.js.map +1 -0
- package/dist/core/a2a-in/find-reached-ship.d.ts +18 -0
- package/dist/core/a2a-in/find-reached-ship.js +20 -0
- package/dist/core/a2a-in/find-reached-ship.js.map +1 -0
- package/dist/core/a2a-in/follow-a2a-task.d.ts +25 -0
- package/dist/core/a2a-in/follow-a2a-task.js +23 -0
- package/dist/core/a2a-in/follow-a2a-task.js.map +1 -0
- package/dist/core/a2a-in/inbound-message.d.ts +30 -0
- package/dist/core/a2a-in/inbound-message.js +33 -0
- package/dist/core/a2a-in/inbound-message.js.map +1 -0
- package/dist/core/a2a-in/list-a2a-tasks.d.ts +18 -0
- package/dist/core/a2a-in/list-a2a-tasks.js +14 -0
- package/dist/core/a2a-in/list-a2a-tasks.js.map +1 -0
- package/dist/core/a2a-in/list-push-configs.d.ts +20 -0
- package/dist/core/a2a-in/list-push-configs.js +18 -0
- package/dist/core/a2a-in/list-push-configs.js.map +1 -0
- package/dist/core/a2a-in/list-reached-ships.d.ts +25 -0
- package/dist/core/a2a-in/list-reached-ships.js +22 -0
- package/dist/core/a2a-in/list-reached-ships.js.map +1 -0
- package/dist/core/a2a-in/notice-task-changes.d.ts +19 -0
- package/dist/core/a2a-in/notice-task-changes.js +17 -0
- package/dist/core/a2a-in/notice-task-changes.js.map +1 -0
- package/dist/core/a2a-in/ports.d.ts +124 -0
- package/dist/core/a2a-in/ports.js +2 -0
- package/dist/core/a2a-in/ports.js.map +1 -0
- package/dist/core/a2a-in/push-config-view.d.ts +8 -0
- package/dist/core/a2a-in/push-config-view.js +2 -0
- package/dist/core/a2a-in/push-config-view.js.map +1 -0
- package/dist/core/a2a-in/push-to-webhooks.d.ts +19 -0
- package/dist/core/a2a-in/push-to-webhooks.js +19 -0
- package/dist/core/a2a-in/push-to-webhooks.js.map +1 -0
- package/dist/core/a2a-in/read-a2a-task.d.ts +12 -0
- package/dist/core/a2a-in/read-a2a-task.js +11 -0
- package/dist/core/a2a-in/read-a2a-task.js.map +1 -0
- package/dist/core/a2a-in/read-push-config.d.ts +16 -0
- package/dist/core/a2a-in/read-push-config.js +14 -0
- package/dist/core/a2a-in/read-push-config.js.map +1 -0
- package/dist/core/a2a-in/remove-push-config.d.ts +15 -0
- package/dist/core/a2a-in/remove-push-config.js +13 -0
- package/dist/core/a2a-in/remove-push-config.js.map +1 -0
- package/dist/core/a2a-in/send-a2a-message.d.ts +34 -0
- package/dist/core/a2a-in/send-a2a-message.js +106 -0
- package/dist/core/a2a-in/send-a2a-message.js.map +1 -0
- package/dist/core/a2a-in/set-push-config.d.ts +30 -0
- package/dist/core/a2a-in/set-push-config.js +27 -0
- package/dist/core/a2a-in/set-push-config.js.map +1 -0
- package/dist/core/a2a-in/subscribe-to-a2a-task.d.ts +18 -0
- package/dist/core/a2a-in/subscribe-to-a2a-task.js +17 -0
- package/dist/core/a2a-in/subscribe-to-a2a-task.js.map +1 -0
- package/dist/core/a2a-in/task-view.d.ts +51 -0
- package/dist/core/a2a-in/task-view.js +49 -0
- package/dist/core/a2a-in/task-view.js.map +1 -0
- package/dist/core/a2a-in/webhook-address.d.ts +7 -0
- package/dist/core/a2a-in/webhook-address.js +17 -0
- package/dist/core/a2a-in/webhook-address.js.map +1 -0
- package/dist/core/a2a-in/webhook.d.ts +6 -0
- package/dist/core/a2a-in/webhook.js +80 -0
- package/dist/core/a2a-in/webhook.js.map +1 -0
- package/dist/core/a2a-out/agent-endpoint.d.ts +10 -0
- package/dist/core/a2a-out/agent-endpoint.js +10 -0
- package/dist/core/a2a-out/agent-endpoint.js.map +1 -0
- package/dist/core/a2a-out/agent-event.d.ts +41 -0
- package/dist/core/a2a-out/agent-event.js +64 -0
- package/dist/core/a2a-out/agent-event.js.map +1 -0
- package/dist/core/a2a-out/agent-message.d.ts +36 -0
- package/dist/core/a2a-out/agent-message.js +36 -0
- package/dist/core/a2a-out/agent-message.js.map +1 -0
- package/dist/core/a2a-out/agent-statement.d.ts +10 -0
- package/dist/core/a2a-out/agent-statement.js +45 -0
- package/dist/core/a2a-out/agent-statement.js.map +1 -0
- package/dist/core/a2a-out/follow-agent-task.d.ts +40 -0
- package/dist/core/a2a-out/follow-agent-task.js +125 -0
- package/dist/core/a2a-out/follow-agent-task.js.map +1 -0
- package/dist/core/a2a-out/hand-a2a-message.d.ts +36 -0
- package/dist/core/a2a-out/hand-a2a-message.js +132 -0
- package/dist/core/a2a-out/hand-a2a-message.js.map +1 -0
- package/dist/core/a2a-out/mark-a2a-agent.d.ts +24 -0
- package/dist/core/a2a-out/mark-a2a-agent.js +24 -0
- package/dist/core/a2a-out/mark-a2a-agent.js.map +1 -0
- package/dist/core/a2a-out/ports.d.ts +200 -0
- package/dist/core/a2a-out/ports.js +2 -0
- package/dist/core/a2a-out/ports.js.map +1 -0
- package/dist/core/a2a-out/read-agent-statement.d.ts +13 -0
- package/dist/core/a2a-out/read-agent-statement.js +13 -0
- package/dist/core/a2a-out/read-agent-statement.js.map +1 -0
- package/dist/core/a2a-out/run-a2a-agent.d.ts +26 -0
- package/dist/core/a2a-out/run-a2a-agent.js +46 -0
- package/dist/core/a2a-out/run-a2a-agent.js.map +1 -0
- package/dist/core/a2a-out/state-a2a-agent.d.ts +26 -0
- package/dist/core/a2a-out/state-a2a-agent.js +31 -0
- package/dist/core/a2a-out/state-a2a-agent.js.map +1 -0
- package/dist/core/mcp-in/call-tool.js +2 -0
- package/dist/core/mcp-in/call-tool.js.map +1 -1
- package/dist/core/mcp-in/client-call.d.ts +35 -4
- package/dist/core/mcp-in/client-call.js +57 -10
- package/dist/core/mcp-in/client-call.js.map +1 -1
- package/dist/core/mcp-in/collect-replies.d.ts +4 -3
- package/dist/core/mcp-in/collect-replies.js +4 -0
- package/dist/core/mcp-in/collect-replies.js.map +1 -1
- package/dist/core/mcp-in/ports.d.ts +52 -3
- package/dist/core/mcp-out/hand-call.d.ts +5 -1
- package/dist/core/mcp-out/hand-call.js +9 -1
- package/dist/core/mcp-out/hand-call.js.map +1 -1
- package/dist/core/mcp-out/run-party.d.ts +29 -7
- package/dist/core/mcp-out/run-party.js +14 -6
- package/dist/core/mcp-out/run-party.js.map +1 -1
- package/dist/core/mcp-out/state-party.d.ts +4 -2
- package/dist/core/mcp-out/state-party.js +10 -3
- package/dist/core/mcp-out/state-party.js.map +1 -1
- package/dist/core/mcp-out/statement.d.ts +2 -1
- package/dist/core/mcp-out/statement.js.map +1 -1
- package/dist/core/meetings/change-own-mic.d.ts +24 -0
- package/dist/core/meetings/change-own-mic.js +21 -0
- package/dist/core/meetings/change-own-mic.js.map +1 -0
- package/dist/core/meetings/mic-standing.d.ts +18 -0
- package/dist/core/meetings/mic-standing.js +11 -0
- package/dist/core/meetings/mic-standing.js.map +1 -0
- package/dist/core/meetings/ports.d.ts +70 -0
- package/dist/core/meetings/ports.js +2 -0
- package/dist/core/meetings/ports.js.map +1 -0
- package/dist/core/meetings/read-meeting.d.ts +30 -0
- package/dist/core/meetings/read-meeting.js +26 -0
- package/dist/core/meetings/read-meeting.js.map +1 -0
- package/dist/core/oauth/exchange-id-jag.d.ts +28 -0
- package/dist/core/oauth/exchange-id-jag.js +66 -0
- package/dist/core/oauth/exchange-id-jag.js.map +1 -0
- package/dist/core/oauth/exchange-token.d.ts +25 -11
- package/dist/core/oauth/exchange-token.js +50 -3
- package/dist/core/oauth/exchange-token.js.map +1 -1
- package/dist/core/oauth/ports.d.ts +17 -6
- package/dist/core/oauth/register-client.js +1 -1
- package/dist/core/oauth/register-client.js.map +1 -1
- package/dist/core/parties/add-a2a-agent.d.ts +34 -0
- package/dist/core/parties/add-a2a-agent.js +45 -0
- package/dist/core/parties/add-a2a-agent.js.map +1 -0
- package/dist/core/parties/add-a2a-client.d.ts +30 -0
- package/dist/core/parties/add-a2a-client.js +47 -0
- package/dist/core/parties/add-a2a-client.js.map +1 -0
- package/dist/core/parties/add-client-party.d.ts +38 -0
- package/dist/core/parties/add-client-party.js +40 -0
- package/dist/core/parties/add-client-party.js.map +1 -0
- package/dist/core/parties/approve-party.d.ts +43 -2
- package/dist/core/parties/approve-party.js +9 -5
- package/dist/core/parties/approve-party.js.map +1 -1
- package/dist/core/parties/approver.d.ts +7 -0
- package/dist/core/parties/approver.js +9 -0
- package/dist/core/parties/approver.js.map +1 -0
- package/dist/core/parties/check-server.d.ts +2 -1
- package/dist/core/parties/check-server.js +1 -1
- package/dist/core/parties/check-server.js.map +1 -1
- package/dist/core/parties/crew-party.d.ts +18 -4
- package/dist/core/parties/crew-party.js +36 -4
- package/dist/core/parties/crew-party.js.map +1 -1
- package/dist/core/parties/party.d.ts +23 -1
- package/dist/core/parties/party.js +17 -4
- package/dist/core/parties/party.js.map +1 -1
- package/dist/core/parties/ports.d.ts +16 -0
- package/dist/core/parties/read-party-tools.d.ts +4 -3
- package/dist/core/parties/read-party-tools.js +4 -2
- package/dist/core/parties/read-party-tools.js.map +1 -1
- package/dist/core/parties/shown-party.d.ts +8 -0
- package/dist/core/parties/shown-party.js +4 -0
- package/dist/core/parties/shown-party.js.map +1 -1
- package/dist/core/parties/switch-tool.d.ts +29 -0
- package/dist/core/parties/switch-tool.js +33 -0
- package/dist/core/parties/switch-tool.js.map +1 -0
- package/dist/core/parties/tool-switches.d.ts +27 -0
- package/dist/core/parties/tool-switches.js +17 -0
- package/dist/core/parties/tool-switches.js.map +1 -0
- package/dist/core/people/answer-delivery.d.ts +2 -1
- package/dist/core/people/answer-delivery.js.map +1 -1
- package/dist/core/people/done-delivery.d.ts +2 -1
- package/dist/core/people/done-delivery.js.map +1 -1
- package/dist/core/people/focus-page.d.ts +18 -0
- package/dist/core/people/focus-page.js +20 -0
- package/dist/core/people/focus-page.js.map +1 -0
- package/dist/core/people/inbox-entry.d.ts +2 -2
- package/dist/core/people/inbox-entry.js +9 -2
- package/dist/core/people/inbox-entry.js.map +1 -1
- package/dist/core/people/open-delivery.d.ts +6 -2
- package/dist/core/people/open-delivery.js +3 -1
- package/dist/core/people/open-delivery.js.map +1 -1
- package/dist/core/people/opened-of.d.ts +7 -2
- package/dist/core/people/opened-of.js +6 -1
- package/dist/core/people/opened-of.js.map +1 -1
- package/dist/core/people/person-crew.d.ts +2 -0
- package/dist/core/people/person-crew.js +6 -2
- package/dist/core/people/person-crew.js.map +1 -1
- package/dist/core/people/ports.d.ts +158 -5
- package/dist/core/people/read-wake-channels.d.ts +42 -0
- package/dist/core/people/read-wake-channels.js +21 -0
- package/dist/core/people/read-wake-channels.js.map +1 -0
- package/dist/core/people/turn-email-channel.d.ts +21 -0
- package/dist/core/people/turn-email-channel.js +22 -0
- package/dist/core/people/turn-email-channel.js.map +1 -0
- package/dist/core/people/turn-off-web-push.d.ts +13 -0
- package/dist/core/people/turn-off-web-push.js +14 -0
- package/dist/core/people/turn-off-web-push.js.map +1 -0
- package/dist/core/people/turn-on-web-push.d.ts +35 -0
- package/dist/core/people/turn-on-web-push.js +49 -0
- package/dist/core/people/turn-on-web-push.js.map +1 -0
- package/dist/core/people/wait-on-person-ship.d.ts +44 -0
- package/dist/core/people/wait-on-person-ship.js +92 -0
- package/dist/core/people/wait-on-person-ship.js.map +1 -0
- package/dist/core/people/wake-person.d.ts +40 -0
- package/dist/core/people/wake-person.js +74 -0
- package/dist/core/people/wake-person.js.map +1 -0
- package/dist/core/people/web-push-channel.d.ts +17 -0
- package/dist/core/people/web-push-channel.js +35 -0
- package/dist/core/people/web-push-channel.js.map +1 -0
- package/dist/core/requests/decide-request.d.ts +0 -2
- package/dist/core/requests/decide-request.js +3 -6
- package/dist/core/requests/decide-request.js.map +1 -1
- package/dist/core/requests/list-to-decide.js +1 -1
- package/dist/core/requests/list-to-decide.js.map +1 -1
- package/dist/core/shared/errors.d.ts +1 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/sign-in/ports.d.ts +13 -0
- package/dist/core/vault/credential.d.ts +6 -2
- package/dist/party-workers.d.ts +9 -1
- package/dist/party-workers.js +37 -5
- package/dist/party-workers.js.map +1 -1
- package/dist/person-waiters.d.ts +30 -0
- package/dist/person-waiters.js +89 -0
- package/dist/person-waiters.js.map +1 -0
- package/package.json +7 -3
- package/src/adapters/prisma/migrations/20261023120000_party_bearer_hash/migration.sql +4 -0
- package/src/adapters/prisma/migrations/20261023130000_client_credentials/migration.sql +5 -0
- package/src/adapters/prisma/migrations/20261023200000_a2a_tasks/migration.sql +20 -0
- package/src/adapters/prisma/migrations/20261023210000_tool_switches/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261024090000_a2a_pushes/migration.sql +37 -0
- package/src/adapters/prisma/migrations/20261024100000_party_is_repeatable/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261024110000_a2a_agent_calls/migration.sql +29 -0
- package/src/adapters/prisma/migrations/20261024115000_wakes/migration.sql +17 -0
- package/src/adapters/prisma/migrations/20261024120000_focused_pages/migration.sql +11 -0
- package/src/adapters/prisma/migrations/20261024130000_web_push_subscriptions/migration.sql +14 -0
- package/src/adapters/prisma/schema.prisma +159 -5
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +4 -0
- package/web/.next/build-manifest.json +39 -3
- package/web/.next/diagnostics/route-bundle-stats.json +91 -42
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/next-minimal-server.js.nft.json +1 -1
- package/web/.next/next-server.js.nft.json +1 -1
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/routes-manifest.json +26 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +35 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +21 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.map +5 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +24 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +10 -8
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +22 -2
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js +8 -5
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +24 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +9 -6
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +26 -6
- package/web/.next/server/app/(console)/outside-parties/add/page.js +10 -5
- package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +25 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +20 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.map +5 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +25 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +21 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.map +5 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/outside-parties/page.js +3 -3
- package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/overview/changes/route.js +3 -2
- package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/focus/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/overview/focus/route/build-manifest.json +12 -0
- package/web/.next/server/app/(console)/overview/focus/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/(console)/overview/focus/route.js +7 -0
- package/web/.next/server/app/(console)/overview/focus/route.js.map +5 -0
- package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -0
- package/web/.next/server/app/(console)/overview/focus/route_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +34 -4
- package/web/.next/server/app/(console)/overview/page.js +5 -5
- package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +2 -2
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/(console)/parties/page.js +2 -2
- package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page.js +3 -3
- package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page.js +3 -3
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js +3 -3
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/failed/page.js +2 -2
- package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/pick/page.js +2 -2
- package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page.js +2 -2
- package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +4 -0
- package/web/.next/server/chunks/0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js +3 -0
- package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js +3 -0
- package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__0k8jiujb_0xtx._.js → [root-of-the-server]__0ykc8bq_c06a1._.js} +22 -22
- package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +1 -0
- package/web/.next/server/chunks/_04is-uopj3op9._.js +3 -0
- package/web/.next/server/chunks/_04is-uopj3op9._.js.map +1 -0
- package/web/.next/server/chunks/_1-fw4-pwzazl4._.js +3 -0
- package/web/.next/server/chunks/_1-fw4-pwzazl4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js → [root-of-the-server]__0-og0bl8lr2xq._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js.map → [root-of-the-server]__0-og0bl8lr2xq._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1yydhn6iokbm4._.js.map → [root-of-the-server]__07udzu2zwg_74._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js → [root-of-the-server]__0a68v9ynev4q6._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js.map → [root-of-the-server]__0a68v9ynev4q6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1vkw2kvzx6fpw._.js.map → [root-of-the-server]__0l2_dk9d4o01n._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1imel8atfb770._.js.map → [root-of-the-server]__0rr5u24i9tjyc._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1m9atpy0vkbmj._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0dywrno7zb0r_._.js.map → [root-of-the-server]__1m9atpy0vkbmj._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__216xd8otb96uo._.js.map → [root-of-the-server]__1w5swo8gmjyx6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1wl0vw-n8lbkn._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js +3 -0
- package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +2 -2
- package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js +4 -0
- package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +4 -0
- package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_08hq6z46rczo0._.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js +3 -0
- package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js +1 -1
- package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js +1 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_ui_action-button_tsx_14-5f45xbzbi6._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_overview_ui_action-button_tsx_14-5f45xbzbi6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +39 -3
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +12 -0
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/preview-props.json +3 -3
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +150 -24
- package/web/.next/static/chunks/183mifyxtyab5.css +3 -0
- package/web/.next/static/chunks/1bnlc-p1_cm01.js +1 -0
- package/web/.next/static/chunks/1juj2_tl8d16x.js +1 -0
- package/web/.next/static/chunks/1jvae6c-4jwji.js +1 -0
- package/web/.next/static/chunks/1pafc2gfswboo.js +1 -0
- package/web/.next/static/chunks/2-t4g6oq6tjkg.js +1 -0
- package/web/.next/static/chunks/21s2_ccrw90ok.js +1 -0
- package/web/.next/static/chunks/2hsi-sahla2aj.js +1 -0
- package/web/.next/static/chunks/2l27ty2dy2pb4.js +1 -0
- package/web/.next/static/chunks/2n2qsek2y94y5.js +1 -0
- package/web/.next/static/chunks/3o8h4o3utbvgc.js +1 -0
- package/web/.next/static/chunks/3tss77vu57zju.js +1 -0
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/routes.d.ts +6 -2
- package/web/.next/types/validator.ts +61 -0
- package/web/public/wake-worker.js +17 -0
- package/web/.next/server/chunks/[externals]__12s2uxrv8n30f._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0k8jiujb_0xtx._.js.map +0 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js +0 -3
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0dywrno7zb0r_._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1imel8atfb770._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1vkw2kvzx6fpw._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yydhn6iokbm4._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__216xd8otb96uo._.js +0 -3
- package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js +0 -4
- package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js +0 -4
- package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js +0 -4
- package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js +0 -3
- package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js +0 -3
- package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js.map +0 -1
- package/web/.next/static/chunks/1l1gmjf-hz7u_.css +0 -3
- package/web/.next/static/chunks/1ma7v1viiz247.js +0 -1
- package/web/.next/static/chunks/1tfvu44eel7g5.js +0 -1
- package/web/.next/static/chunks/2bg4wnfhuftsq.js +0 -1
- package/web/.next/static/chunks/2yplpvvjibfqw.js +0 -1
- package/web/.next/static/chunks/34syicr_5c5u1.js +0 -1
- package/web/.next/static/chunks/43zbq11isnos4.js +0 -1
- /package/web/.next/server/chunks/{[externals]__12s2uxrv8n30f._.js.map → 0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js.map} +0 -0
- /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → 3whgLnRJ9iJe_25h6KGzQ}/_buildManifest.js +0 -0
- /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → 3whgLnRJ9iJe_25h6KGzQ}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → 3whgLnRJ9iJe_25h6KGzQ}/_ssgManifest.js +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* messaging (decisions 0054, 0057): the fleet's calls it makes as their
|
|
4
4
|
* account, and the one crew every client of the person shares.
|
|
5
5
|
*/
|
|
6
|
-
import type { DeliveryId, FleetId, MessageId, ShipId, ShipKind } from '@aeolus-fleet/common';
|
|
6
|
+
import type { DeliveryId, FleetId, MeetingId, MessageId, ShipId, ShipKind } from '@aeolus-fleet/common';
|
|
7
7
|
import type { FleetRefusal } from '../connection/ports.js';
|
|
8
8
|
import type { DiscoveredStatement } from '../mcp-in/ports.js';
|
|
9
9
|
import type { Result } from '../shared/result.js';
|
|
@@ -29,12 +29,43 @@ export interface PersonCrew {
|
|
|
29
29
|
readonly crewToken: string;
|
|
30
30
|
readonly crewedAt: Date;
|
|
31
31
|
}
|
|
32
|
+
/** A person ship, by its fleet and id. */
|
|
33
|
+
export interface PersonShip {
|
|
34
|
+
readonly fleetId: FleetId;
|
|
35
|
+
readonly shipId: ShipId;
|
|
36
|
+
}
|
|
32
37
|
export interface PersonCrews {
|
|
38
|
+
/** The person ships it holds a crew for, of every fleet, by fleet and ship, after the one given (wake a person, W7). */
|
|
39
|
+
crewed(page: {
|
|
40
|
+
after: PersonShip | null;
|
|
41
|
+
limit: number;
|
|
42
|
+
}): Promise<PersonShip[]>;
|
|
33
43
|
find(fleetId: FleetId, shipId: ShipId): Promise<PersonCrew | undefined>;
|
|
34
44
|
save(crew: PersonCrew): Promise<void>;
|
|
35
45
|
/** Forgets a crew that no longer works, as when its lease ended, so the ship is crewed again. */
|
|
36
46
|
drop(fleetId: FleetId, shipId: ShipId): Promise<void>;
|
|
37
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Outbound port: the lock of each person ship's waiter, held by one gateway
|
|
50
|
+
* instance at a time (wake a person, W9). An instance that loses its hold,
|
|
51
|
+
* as when its connection to the database ends, loses every lock it held.
|
|
52
|
+
*/
|
|
53
|
+
export interface WaiterLocks {
|
|
54
|
+
/** Takes the ship's lock unless another instance holds it: whether it holds it now. */
|
|
55
|
+
take(ship: PersonShip): Promise<boolean>;
|
|
56
|
+
give(ship: PersonShip): Promise<void>;
|
|
57
|
+
/** Hears each loss of every lock this instance held. */
|
|
58
|
+
onLost(listener: () => void): void;
|
|
59
|
+
}
|
|
60
|
+
/** A change to a person ship's inbox: its pages read it again (wake a person, #1014). */
|
|
61
|
+
export interface InboxChange {
|
|
62
|
+
readonly fleetId: FleetId;
|
|
63
|
+
readonly shipId: ShipId;
|
|
64
|
+
}
|
|
65
|
+
/** Outbound port: tells every gateway instance that a person ship's inbox changed, carrying nothing of it. */
|
|
66
|
+
export interface InboxChanges {
|
|
67
|
+
tell(change: InboxChange): Promise<void>;
|
|
68
|
+
}
|
|
38
69
|
/** A delivery to the person ship, as the fleet's push receive hands it. */
|
|
39
70
|
export interface PersonDelivery {
|
|
40
71
|
readonly deliveryId: DeliveryId;
|
|
@@ -47,6 +78,12 @@ export interface PersonDelivery {
|
|
|
47
78
|
readonly questionTitle: string | null;
|
|
48
79
|
readonly sentAt: Date;
|
|
49
80
|
readonly inReplyTo: MessageId | null;
|
|
81
|
+
/** The meeting its message was contributed to or tells of; none outside a meeting (decision 0061). */
|
|
82
|
+
readonly meetingId: MeetingId | null;
|
|
83
|
+
}
|
|
84
|
+
/** A delivery as the person ship's push receive hands it: with the last number it was handed with under this lease, null while never handed (decision 0040). */
|
|
85
|
+
export interface PushedPersonDelivery extends PersonDelivery {
|
|
86
|
+
readonly handOverNumber: number | null;
|
|
50
87
|
}
|
|
51
88
|
/** What a person ship may send to now, as the fleet's discover answers it: each ship by name, with what it offers, and each type. */
|
|
52
89
|
export interface PersonDiscovery {
|
|
@@ -61,24 +98,35 @@ export interface PersonDiscovery {
|
|
|
61
98
|
readonly reachable: number;
|
|
62
99
|
}[];
|
|
63
100
|
}
|
|
64
|
-
/** Who a person's message is for: one ship by its name,
|
|
101
|
+
/** Who a person's message is for: one ship by its name, any ship of a type, or every other participant of a meeting, a contribution (decision 0061). */
|
|
65
102
|
export type PersonSelector = {
|
|
66
103
|
readonly kind: 'ship';
|
|
67
104
|
readonly name: string;
|
|
68
105
|
} | {
|
|
69
106
|
readonly kind: 'type';
|
|
70
107
|
readonly type: string;
|
|
108
|
+
} | {
|
|
109
|
+
readonly kind: 'meeting';
|
|
110
|
+
readonly meetingId: MeetingId;
|
|
71
111
|
};
|
|
72
112
|
/** Outbound port: the fleet's calls the gateway makes as the crew of a person ship. */
|
|
73
113
|
export interface PersonShipDoor {
|
|
74
|
-
/**
|
|
75
|
-
|
|
114
|
+
/**
|
|
115
|
+
* How many deliveries wait for the ship: at once, or with a wait while the
|
|
116
|
+
* count is still the one the crew knows, up to the fleet's longest wait
|
|
117
|
+
* (wake a person, W5), or less when told. Stopping the signal ends the wait.
|
|
118
|
+
*/
|
|
119
|
+
inbox(crewToken: string, wait?: {
|
|
120
|
+
knownWaiting: number;
|
|
121
|
+
signal: AbortSignal;
|
|
122
|
+
atMostMs?: number;
|
|
123
|
+
}): Promise<Result<{
|
|
76
124
|
waiting: number;
|
|
77
125
|
}, FleetRefusal>>;
|
|
78
126
|
/** The ship's deliveries, up to max, its own held ones again first. */
|
|
79
127
|
pushReceive(crewToken: string, take: {
|
|
80
128
|
max: number;
|
|
81
|
-
}): Promise<Result<
|
|
129
|
+
}): Promise<Result<PushedPersonDelivery[], FleetRefusal>>;
|
|
82
130
|
/** Acknowledges a delivery the person opened: their own act confirms it (interop 5.1). */
|
|
83
131
|
ack(crewToken: string, deliveryId: DeliveryId): Promise<Result<undefined, FleetRefusal>>;
|
|
84
132
|
/** Reads a delivery the ship acknowledged again, whole, while it is not handled, recording nothing (decision 0040). */
|
|
@@ -93,6 +141,12 @@ export interface PersonShipDoor {
|
|
|
93
141
|
}): Promise<Result<undefined, FleetRefusal>>;
|
|
94
142
|
/** Reports the person dealt with the delivery. */
|
|
95
143
|
handled(crewToken: string, deliveryId: DeliveryId): Promise<Result<undefined, FleetRefusal>>;
|
|
144
|
+
/** Hands the delivery over to the person with its number, naming the channel the wake went through (interop 5.1). */
|
|
145
|
+
handed(crewToken: string, handOver: {
|
|
146
|
+
deliveryId: DeliveryId;
|
|
147
|
+
handOverNumber: number;
|
|
148
|
+
channel: HandOverChannel;
|
|
149
|
+
}): Promise<Result<'handed' | 'acknowledged' | 'undeliverable', FleetRefusal>>;
|
|
96
150
|
/** The ships and types the ship may send to now: the fleet checks its scopes and the network rules. */
|
|
97
151
|
discover(crewToken: string): Promise<Result<PersonDiscovery, FleetRefusal>>;
|
|
98
152
|
/** Sends the person's own message, once under its key. */
|
|
@@ -139,3 +193,102 @@ export interface OpenedDeliveries {
|
|
|
139
193
|
deliveryId: string;
|
|
140
194
|
}): Promise<void>;
|
|
141
195
|
}
|
|
196
|
+
/** The channels a person may turn on to be woken (wake a person, W1), as a hand-over names them. */
|
|
197
|
+
export type WakeChannelName = 'email' | 'web-push';
|
|
198
|
+
/** What a delivery is handed to the person through: a wake's channel, or a page of theirs in focus, which shows it (W6). */
|
|
199
|
+
export type HandOverChannel = WakeChannelName | 'page';
|
|
200
|
+
/**
|
|
201
|
+
* Outbound port: one way to wake a person (wake a person, W1, W4): it says
|
|
202
|
+
* only that something waits in the fleet, with the overview's link, and
|
|
203
|
+
* goes out at most once per its window (W3, W10).
|
|
204
|
+
*/
|
|
205
|
+
export interface WakeChannel {
|
|
206
|
+
readonly name: WakeChannelName;
|
|
207
|
+
/** The least time between two wakes it sends one person ship, from the gateway's configuration (W10). */
|
|
208
|
+
readonly windowMs: number;
|
|
209
|
+
/** Whether the person turned it on (W8): nothing is on by default. */
|
|
210
|
+
isOn(ship: PersonShip): Promise<boolean>;
|
|
211
|
+
/** Sends the wake: whether it went out. */
|
|
212
|
+
wake(ship: PersonShip): Promise<Result<undefined, {
|
|
213
|
+
reason: string;
|
|
214
|
+
}>>;
|
|
215
|
+
}
|
|
216
|
+
/** Outbound port: when each channel last woke each person ship, so the window holds across restarts and instances (W3). */
|
|
217
|
+
export interface WakesSent {
|
|
218
|
+
lastSentAt(ship: PersonShip, channel: WakeChannelName): Promise<Date | undefined>;
|
|
219
|
+
record(wake: {
|
|
220
|
+
ship: PersonShip;
|
|
221
|
+
channel: WakeChannelName;
|
|
222
|
+
sentAt: Date;
|
|
223
|
+
}): Promise<void>;
|
|
224
|
+
}
|
|
225
|
+
/** Outbound port: whether each person turned email on to be woken for their person ship (W8), by fleet and person ship. */
|
|
226
|
+
export interface EmailChannels {
|
|
227
|
+
isOn(ship: PersonShip): Promise<boolean>;
|
|
228
|
+
turn(ship: PersonShip, switched: {
|
|
229
|
+
isOn: boolean;
|
|
230
|
+
at: Date;
|
|
231
|
+
}): Promise<void>;
|
|
232
|
+
}
|
|
233
|
+
/** A page of a person in focus (wake a person, W6): by its own id, with when it was last seen in focus. */
|
|
234
|
+
export interface FocusedPage {
|
|
235
|
+
readonly fleetId: FleetId;
|
|
236
|
+
readonly shipId: ShipId;
|
|
237
|
+
readonly pageId: string;
|
|
238
|
+
readonly seenAt: Date;
|
|
239
|
+
}
|
|
240
|
+
/** Outbound port: the pages in focus of every gateway instance, so the waiter of a ship sees them wherever it runs. */
|
|
241
|
+
export interface FocusedPages {
|
|
242
|
+
/** Keeps it, or keeps when it was seen anew. */
|
|
243
|
+
save(page: FocusedPage): Promise<void>;
|
|
244
|
+
remove(fleetId: FleetId, pageId: string): Promise<void>;
|
|
245
|
+
/** Whether any page of the person ship's person was seen in focus since then. */
|
|
246
|
+
isAnyInFocus(ship: PersonShip, since: Date): Promise<boolean>;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* A browser a person turned web push on in (wake a person, W8): its push
|
|
250
|
+
* service's endpoint and keys, and the fleet's name its wakes say, as the
|
|
251
|
+
* person's sign-in named it when they turned it on. A subscription its push
|
|
252
|
+
* service said is gone takes no wake again, and the overview says so.
|
|
253
|
+
*/
|
|
254
|
+
export interface WebPushSubscription {
|
|
255
|
+
readonly fleetId: FleetId;
|
|
256
|
+
readonly shipId: ShipId;
|
|
257
|
+
readonly endpoint: string;
|
|
258
|
+
readonly keys: {
|
|
259
|
+
readonly p256dh: string;
|
|
260
|
+
readonly auth: string;
|
|
261
|
+
};
|
|
262
|
+
/** The browser, as its person sees it named, such as Firefox on Linux. */
|
|
263
|
+
readonly browser: string;
|
|
264
|
+
readonly fleetName: string;
|
|
265
|
+
readonly addedAt: Date;
|
|
266
|
+
readonly goneAt: Date | null;
|
|
267
|
+
}
|
|
268
|
+
/** Outbound port: the browsers each person turned web push on in, by fleet, person ship and endpoint. */
|
|
269
|
+
export interface WebPushSubscriptions {
|
|
270
|
+
/** The person ship's, oldest added first. */
|
|
271
|
+
list(fleetId: FleetId, shipId: ShipId): Promise<WebPushSubscription[]>;
|
|
272
|
+
/** Keeps it, or keeps it anew when its endpoint was kept before. */
|
|
273
|
+
save(subscription: WebPushSubscription): Promise<void>;
|
|
274
|
+
markGone(fleetId: FleetId, gone: {
|
|
275
|
+
shipId: ShipId;
|
|
276
|
+
endpoint: string;
|
|
277
|
+
goneAt: Date;
|
|
278
|
+
}): Promise<void>;
|
|
279
|
+
remove(fleetId: FleetId, removed: {
|
|
280
|
+
shipId: ShipId;
|
|
281
|
+
endpoint: string;
|
|
282
|
+
}): Promise<void>;
|
|
283
|
+
}
|
|
284
|
+
/** What a wake says (W4): something waits in the fleet, by its name, and the link to the gateway's overview. Nothing else. */
|
|
285
|
+
export interface Wake {
|
|
286
|
+
readonly fleetName: string;
|
|
287
|
+
readonly overviewUrl: string;
|
|
288
|
+
}
|
|
289
|
+
/** How a push service took a wake: sent, gone (it answered 404 or 410: the subscription ended), or failed otherwise. */
|
|
290
|
+
export type WebPushSent = 'sent' | 'gone' | 'failed';
|
|
291
|
+
/** Outbound port: sends a wake to one browser through its push service. */
|
|
292
|
+
export interface WebPush {
|
|
293
|
+
send(subscription: WebPushSubscription, wake: Wake): Promise<WebPushSent>;
|
|
294
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Result } from '../shared/result.js';
|
|
2
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
3
|
+
import { type PersonCaller, type PersonCrewError } from './person-crew.js';
|
|
4
|
+
import type { EmailChannels, WebPushSubscriptions } from './ports.js';
|
|
5
|
+
/** A browser a person turned web push on in, as the overview lists it: gone once its push service ended the subscription. */
|
|
6
|
+
export interface WebPushBrowser {
|
|
7
|
+
readonly endpoint: string;
|
|
8
|
+
readonly browser: string;
|
|
9
|
+
readonly addedAt: Date;
|
|
10
|
+
readonly isGone: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The channels that wake a person, as their overview shows them: email
|
|
14
|
+
* offered or not, and on or not; web push with the gateway's public push
|
|
15
|
+
* key a browser subscribes with, none where it is not offered, and the
|
|
16
|
+
* browsers they turned it on in.
|
|
17
|
+
*/
|
|
18
|
+
export interface WakeChannels {
|
|
19
|
+
readonly email: {
|
|
20
|
+
readonly isOffered: boolean;
|
|
21
|
+
readonly isOn: boolean;
|
|
22
|
+
};
|
|
23
|
+
readonly webPush: {
|
|
24
|
+
readonly publicKey: string | null;
|
|
25
|
+
readonly browsers: readonly WebPushBrowser[];
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export type ReadWakeChannels = (caller: PersonCaller) => Promise<Result<WakeChannels, PersonCrewError>>;
|
|
29
|
+
/**
|
|
30
|
+
* Use case: the channels that wake a person when something waits for their
|
|
31
|
+
* person ship (wake a person, W8). Email is offered only where the gateway
|
|
32
|
+
* can ask pagasae to send it, web push only where it holds push keys;
|
|
33
|
+
* nothing is on by default. A browser's keys are never shown.
|
|
34
|
+
*/
|
|
35
|
+
export declare function createReadWakeChannels(deps: {
|
|
36
|
+
crewPersonShip: CrewPersonShip;
|
|
37
|
+
emailChannels: EmailChannels;
|
|
38
|
+
isEmailOffered: boolean;
|
|
39
|
+
subscriptions: WebPushSubscriptions;
|
|
40
|
+
/** The gateway's public push key; none where it holds no push keys. */
|
|
41
|
+
webPushKey: string | null;
|
|
42
|
+
}): ReadWakeChannels;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ok } from '../shared/result.js';
|
|
2
|
+
import { personCrewOf } from './person-crew.js';
|
|
3
|
+
/**
|
|
4
|
+
* Use case: the channels that wake a person when something waits for their
|
|
5
|
+
* person ship (wake a person, W8). Email is offered only where the gateway
|
|
6
|
+
* can ask pagasae to send it, web push only where it holds push keys;
|
|
7
|
+
* nothing is on by default. A browser's keys are never shown.
|
|
8
|
+
*/
|
|
9
|
+
export function createReadWakeChannels(deps) {
|
|
10
|
+
return async (caller) => {
|
|
11
|
+
const crew = await personCrewOf(deps.crewPersonShip, caller);
|
|
12
|
+
if (!crew.isOk) {
|
|
13
|
+
return crew;
|
|
14
|
+
}
|
|
15
|
+
const ship = { fleetId: caller.fleetId, shipId: crew.value.shipId };
|
|
16
|
+
const isOn = deps.isEmailOffered && (await deps.emailChannels.isOn(ship));
|
|
17
|
+
const browsers = deps.webPushKey === null ? [] : (await deps.subscriptions.list(ship.fleetId, ship.shipId)).map(({ endpoint, browser, addedAt, goneAt }) => ({ endpoint, browser, addedAt, isGone: goneAt !== null }));
|
|
18
|
+
return ok({ email: { isOffered: deps.isEmailOffered, isOn }, webPush: { publicKey: deps.webPushKey, browsers } });
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=read-wake-channels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-wake-channels.js","sourceRoot":"","sources":["../../../src/core/people/read-wake-channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAwBzF;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAOtC;IACC,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACxM,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Clock } from '../shared/clock.js';
|
|
2
|
+
import { type DomainError } from '../shared/errors.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
5
|
+
import { type PersonCaller, type PersonCrewError } from './person-crew.js';
|
|
6
|
+
import type { EmailChannels } from './ports.js';
|
|
7
|
+
export type TurnEmailChannel = (turn: {
|
|
8
|
+
caller: PersonCaller;
|
|
9
|
+
isOn: boolean;
|
|
10
|
+
}) => Promise<Result<undefined, PersonCrewError | DomainError<'CHANNEL_NOT_OFFERED'>>>;
|
|
11
|
+
/**
|
|
12
|
+
* Use case: a person turns email on or off, to be woken when something
|
|
13
|
+
* waits for their person ship (wake a person, W8), kept by fleet and person
|
|
14
|
+
* ship. Turning it on is refused where the gateway cannot send email.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTurnEmailChannel(deps: {
|
|
17
|
+
crewPersonShip: CrewPersonShip;
|
|
18
|
+
emailChannels: EmailChannels;
|
|
19
|
+
isEmailOffered: boolean;
|
|
20
|
+
clock: Clock;
|
|
21
|
+
}): TurnEmailChannel;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { personCrewOf } from './person-crew.js';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: a person turns email on or off, to be woken when something
|
|
6
|
+
* waits for their person ship (wake a person, W8), kept by fleet and person
|
|
7
|
+
* ship. Turning it on is refused where the gateway cannot send email.
|
|
8
|
+
*/
|
|
9
|
+
export function createTurnEmailChannel(deps) {
|
|
10
|
+
return async ({ caller, isOn }) => {
|
|
11
|
+
if (isOn && !deps.isEmailOffered) {
|
|
12
|
+
return refuse('CHANNEL_NOT_OFFERED', 'This gateway sends no email');
|
|
13
|
+
}
|
|
14
|
+
const crew = await personCrewOf(deps.crewPersonShip, caller);
|
|
15
|
+
if (!crew.isOk) {
|
|
16
|
+
return crew;
|
|
17
|
+
}
|
|
18
|
+
await deps.emailChannels.turn({ fleetId: caller.fleetId, shipId: crew.value.shipId }, { isOn, at: deps.clock.now() });
|
|
19
|
+
return ok(undefined);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=turn-email-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-email-channel.js","sourceRoot":"","sources":["../../../src/core/people/turn-email-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAKzF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA6G;IAClJ,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QAChC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtH,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Result } from '../shared/result.js';
|
|
2
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
3
|
+
import { type PersonCaller, type PersonCrewError } from './person-crew.js';
|
|
4
|
+
import type { WebPushSubscriptions } from './ports.js';
|
|
5
|
+
export type TurnOffWebPush = (input: {
|
|
6
|
+
caller: PersonCaller;
|
|
7
|
+
endpoint: string;
|
|
8
|
+
}) => Promise<Result<undefined, PersonCrewError>>;
|
|
9
|
+
/** Use case: a person removes a browser they turned web push on in (wake a person, W8): it takes no wake again. */
|
|
10
|
+
export declare function createTurnOffWebPush(deps: {
|
|
11
|
+
crewPersonShip: CrewPersonShip;
|
|
12
|
+
subscriptions: WebPushSubscriptions;
|
|
13
|
+
}): TurnOffWebPush;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ok } from '../shared/result.js';
|
|
2
|
+
import { personCrewOf } from './person-crew.js';
|
|
3
|
+
/** Use case: a person removes a browser they turned web push on in (wake a person, W8): it takes no wake again. */
|
|
4
|
+
export function createTurnOffWebPush(deps) {
|
|
5
|
+
return async ({ caller, endpoint }) => {
|
|
6
|
+
const crew = await personCrewOf(deps.crewPersonShip, caller);
|
|
7
|
+
if (!crew.isOk) {
|
|
8
|
+
return crew;
|
|
9
|
+
}
|
|
10
|
+
await deps.subscriptions.remove(caller.fleetId, { shipId: crew.value.shipId, endpoint });
|
|
11
|
+
return ok(undefined);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=turn-off-web-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-off-web-push.js","sourceRoot":"","sources":["../../../src/core/people/turn-off-web-push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAKzF,mHAAmH;AACnH,MAAM,UAAU,oBAAoB,CAAC,IAA6E;IAChH,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzF,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HostResolver } from '../a2a-in/ports.js';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
6
|
+
import { type PersonCaller, type PersonCrewError } from './person-crew.js';
|
|
7
|
+
import type { WebPushSubscriptions } from './ports.js';
|
|
8
|
+
export interface WebPushTurnedOn {
|
|
9
|
+
readonly caller: PersonCaller;
|
|
10
|
+
/** The fleet's name its wakes say, as the person's sign-in names it. */
|
|
11
|
+
readonly fleetName: string;
|
|
12
|
+
readonly endpoint: string;
|
|
13
|
+
readonly keys: {
|
|
14
|
+
readonly p256dh: string;
|
|
15
|
+
readonly auth: string;
|
|
16
|
+
};
|
|
17
|
+
readonly browser: string;
|
|
18
|
+
}
|
|
19
|
+
export type TurnOnWebPush = (input: WebPushTurnedOn) => Promise<Result<undefined, PersonCrewError | DomainError<'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION'>>>;
|
|
20
|
+
/**
|
|
21
|
+
* Use case: a person turns web push on for a browser (wake a person, W8),
|
|
22
|
+
* with the subscription the browser's push service gave it: kept for their
|
|
23
|
+
* person ship, a browser turned on again kept anew. A push service is
|
|
24
|
+
* reached over https at public addresses only, as A2A webhooks are: an
|
|
25
|
+
* endpoint whose host is, or resolves to, any private, loopback or
|
|
26
|
+
* link-local address is refused. Refused where the gateway holds no push
|
|
27
|
+
* keys.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createTurnOnWebPush(deps: {
|
|
30
|
+
crewPersonShip: CrewPersonShip;
|
|
31
|
+
subscriptions: WebPushSubscriptions;
|
|
32
|
+
resolver: HostResolver;
|
|
33
|
+
isWebPushOffered: boolean;
|
|
34
|
+
clock: Clock;
|
|
35
|
+
}): TurnOnWebPush;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { reachOf } from '../a2a-in/webhook-address.js';
|
|
2
|
+
import { refuse } from '../shared/errors.js';
|
|
3
|
+
import { ok } from '../shared/result.js';
|
|
4
|
+
import { personCrewOf } from './person-crew.js';
|
|
5
|
+
/** The longest push service endpoint the gateway keeps. */
|
|
6
|
+
const ENDPOINT_MAX_LENGTH = 2048;
|
|
7
|
+
/** The longest browser name, as the page names it. */
|
|
8
|
+
const BROWSER_MAX_LENGTH = 100;
|
|
9
|
+
/** A browser's P-256 public key (65 bytes) and auth secret (16 bytes), base64url as its PushSubscription states them, padded or not. */
|
|
10
|
+
const P256DH = /^[A-Za-z0-9_-]{87}=?$/;
|
|
11
|
+
const AUTH = /^[A-Za-z0-9_-]{22}(==)?$/;
|
|
12
|
+
function isHttpsUrl(text) {
|
|
13
|
+
return URL.canParse(text) && new URL(text).protocol === 'https:';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Use case: a person turns web push on for a browser (wake a person, W8),
|
|
17
|
+
* with the subscription the browser's push service gave it: kept for their
|
|
18
|
+
* person ship, a browser turned on again kept anew. A push service is
|
|
19
|
+
* reached over https at public addresses only, as A2A webhooks are: an
|
|
20
|
+
* endpoint whose host is, or resolves to, any private, loopback or
|
|
21
|
+
* link-local address is refused. Refused where the gateway holds no push
|
|
22
|
+
* keys.
|
|
23
|
+
*/
|
|
24
|
+
export function createTurnOnWebPush(deps) {
|
|
25
|
+
return async ({ caller, fleetName, endpoint, keys, browser }) => {
|
|
26
|
+
if (!deps.isWebPushOffered) {
|
|
27
|
+
return refuse('CHANNEL_NOT_OFFERED', 'This gateway sends no web push');
|
|
28
|
+
}
|
|
29
|
+
if (endpoint.length > ENDPOINT_MAX_LENGTH || !isHttpsUrl(endpoint)) {
|
|
30
|
+
return refuse('INVALID_SUBSCRIPTION', `The push service's endpoint must be an https URL of at most ${String(ENDPOINT_MAX_LENGTH)} characters`);
|
|
31
|
+
}
|
|
32
|
+
if (!P256DH.test(keys.p256dh) || !AUTH.test(keys.auth)) {
|
|
33
|
+
return refuse('INVALID_SUBSCRIPTION', "The browser's push keys are not a P-256 public key and an auth secret of 16 bytes");
|
|
34
|
+
}
|
|
35
|
+
if (browser.length === 0 || browser.length > BROWSER_MAX_LENGTH) {
|
|
36
|
+
return refuse('INVALID_SUBSCRIPTION', `The browser's name must hold 1 to ${String(BROWSER_MAX_LENGTH)} characters`);
|
|
37
|
+
}
|
|
38
|
+
if ((await reachOf(deps.resolver, new URL(endpoint))) !== 'public') {
|
|
39
|
+
return refuse('INVALID_SUBSCRIPTION', "The push service's endpoint must resolve to public addresses only");
|
|
40
|
+
}
|
|
41
|
+
const crew = await personCrewOf(deps.crewPersonShip, caller);
|
|
42
|
+
if (!crew.isOk) {
|
|
43
|
+
return crew;
|
|
44
|
+
}
|
|
45
|
+
await deps.subscriptions.save({ fleetId: caller.fleetId, shipId: crew.value.shipId, endpoint, keys, browser, fleetName, addedAt: deps.clock.now(), goneAt: null });
|
|
46
|
+
return ok(undefined);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=turn-on-web-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-on-web-push.js","sourceRoot":"","sources":["../../../src/core/people/turn-on-web-push.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAGzF,2DAA2D;AAC3D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,sDAAsD;AACtD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,wIAAwI;AACxI,MAAM,MAAM,GAAG,uBAAuB,CAAC;AACvC,MAAM,IAAI,GAAG,0BAA0B,CAAC;AAaxC,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA8I;IAChL,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,OAAO,MAAM,CAAC,sBAAsB,EAAE,+DAA+D,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACjJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,sBAAsB,EAAE,mFAAmF,CAAC,CAAC;QAC7H,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC,sBAAsB,EAAE,qCAAqC,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACtH,CAAC;QACD,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnE,OAAO,MAAM,CAAC,sBAAsB,EAAE,mEAAmE,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnK,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Sleep } from '../mcp-out/run-party.js';
|
|
3
|
+
import type { Clock } from '../shared/clock.js';
|
|
4
|
+
import type { InboxChanges, PersonCrews, PersonShipDoor } from './ports.js';
|
|
5
|
+
import type { WakePerson } from './wake-person.js';
|
|
6
|
+
/**
|
|
7
|
+
* Why a waiter ended: the ship's crew no longer works and was dropped, the
|
|
8
|
+
* gateway holds no crew for the ship, or it was stopped.
|
|
9
|
+
*/
|
|
10
|
+
export type WaiterEnd = {
|
|
11
|
+
readonly reason: 'crewEnded';
|
|
12
|
+
} | {
|
|
13
|
+
readonly reason: 'noCrew';
|
|
14
|
+
} | {
|
|
15
|
+
readonly reason: 'stopped';
|
|
16
|
+
};
|
|
17
|
+
export type WaitOnPersonShip = (ship: {
|
|
18
|
+
fleetId: FleetId;
|
|
19
|
+
shipId: ShipId;
|
|
20
|
+
}, signal: AbortSignal) => Promise<WaiterEnd>;
|
|
21
|
+
/**
|
|
22
|
+
* Use case: the waiter of a person ship the gateway crews (wake a person,
|
|
23
|
+
* W5, W7). It looks once at the ship's inbox, then asks the fleet to wait
|
|
24
|
+
* while the count is the one it knows, and tells the person's pages at its
|
|
25
|
+
* first look and each time the count changed. When something waits at its
|
|
26
|
+
* first look, and each time the count rose, it wakes the person (W3); a
|
|
27
|
+
* wake a window held back is asked for again once the window ends, and one
|
|
28
|
+
* that failed after a wait, longer each time. It reads the crew it holds anew for every call, so
|
|
29
|
+
* a ship crewed again goes on with its new crew; a crew that no longer works
|
|
30
|
+
* is dropped, so the next sign-in crews again, and the waiter ends. While
|
|
31
|
+
* the fleet does not answer, it waits longer each time.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createWaitOnPersonShip(deps: {
|
|
34
|
+
crews: PersonCrews;
|
|
35
|
+
door: Pick<PersonShipDoor, 'inbox'>;
|
|
36
|
+
changes: InboxChanges;
|
|
37
|
+
wakePerson: WakePerson;
|
|
38
|
+
clock: Clock;
|
|
39
|
+
sleep: Sleep;
|
|
40
|
+
/** How long to wait after each refusal in a row; the last repeats. */
|
|
41
|
+
againWaitsMs: readonly number[];
|
|
42
|
+
/** How long to wait before a wake that failed is tried again, each in a row; the last repeats. */
|
|
43
|
+
wakeAgainWaitsMs: readonly number[];
|
|
44
|
+
}): WaitOnPersonShip;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { isEndedCrew } from './person-crew.js';
|
|
2
|
+
/**
|
|
3
|
+
* Use case: the waiter of a person ship the gateway crews (wake a person,
|
|
4
|
+
* W5, W7). It looks once at the ship's inbox, then asks the fleet to wait
|
|
5
|
+
* while the count is the one it knows, and tells the person's pages at its
|
|
6
|
+
* first look and each time the count changed. When something waits at its
|
|
7
|
+
* first look, and each time the count rose, it wakes the person (W3); a
|
|
8
|
+
* wake a window held back is asked for again once the window ends, and one
|
|
9
|
+
* that failed after a wait, longer each time. It reads the crew it holds anew for every call, so
|
|
10
|
+
* a ship crewed again goes on with its new crew; a crew that no longer works
|
|
11
|
+
* is dropped, so the next sign-in crews again, and the waiter ends. While
|
|
12
|
+
* the fleet does not answer, it waits longer each time.
|
|
13
|
+
*/
|
|
14
|
+
export function createWaitOnPersonShip(deps) {
|
|
15
|
+
return async (ship, signal) => {
|
|
16
|
+
const { fleetId, shipId } = ship;
|
|
17
|
+
let knownWaiting;
|
|
18
|
+
let refusedInARow = 0;
|
|
19
|
+
/** When to ask for a wake again though the count did not rise: a window ended, or a failed wake waited out. */
|
|
20
|
+
let wakeAgainAt;
|
|
21
|
+
let failedWakesInARow = 0;
|
|
22
|
+
// Read as a call, as the signal aborts between awaits.
|
|
23
|
+
const isStopped = () => signal.aborted;
|
|
24
|
+
/** Drops the crew that no longer works, unless the ship was crewed again meanwhile: whether it was dropped. */
|
|
25
|
+
const isDropped = async (crewToken) => {
|
|
26
|
+
const held = await deps.crews.find(fleetId, shipId);
|
|
27
|
+
if (held?.crewToken !== crewToken) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
await deps.crews.drop(fleetId, shipId);
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
const waitOf = (waitsMs, inARow) => waitsMs[Math.min(inARow, waitsMs.length - 1)] ?? 0;
|
|
34
|
+
while (!isStopped()) {
|
|
35
|
+
const crew = await deps.crews.find(fleetId, shipId);
|
|
36
|
+
if (crew === undefined) {
|
|
37
|
+
return { reason: 'noCrew' };
|
|
38
|
+
}
|
|
39
|
+
// A wake held back is asked for again once due, so the wait ends by then.
|
|
40
|
+
const atMostMs = wakeAgainAt === undefined ? undefined : Math.max(0, wakeAgainAt.getTime() - deps.clock.now().getTime());
|
|
41
|
+
const answered = await deps.door.inbox(crew.crewToken, knownWaiting === undefined ? undefined : { knownWaiting, signal, ...(atMostMs === undefined ? {} : { atMostMs }) });
|
|
42
|
+
if (isStopped()) {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
if (!answered.isOk) {
|
|
46
|
+
if (isEndedCrew(answered.error)) {
|
|
47
|
+
if (await isDropped(crew.crewToken)) {
|
|
48
|
+
return { reason: 'crewEnded' };
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
await deps.sleep(waitOf(deps.againWaitsMs, refusedInARow), signal);
|
|
53
|
+
refusedInARow += 1;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
refusedInARow = 0;
|
|
57
|
+
const { waiting } = answered.value;
|
|
58
|
+
// The first look tells too: a page may have read the inbox before the waiter started.
|
|
59
|
+
if (waiting !== knownWaiting) {
|
|
60
|
+
await deps.changes.tell(ship);
|
|
61
|
+
}
|
|
62
|
+
const hasRisen = waiting > (knownWaiting ?? 0);
|
|
63
|
+
knownWaiting = waiting;
|
|
64
|
+
const isWakeDue = wakeAgainAt !== undefined && wakeAgainAt.getTime() <= deps.clock.now().getTime();
|
|
65
|
+
if (!hasRisen && !isWakeDue) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const woken = await deps.wakePerson(ship, crew.crewToken);
|
|
69
|
+
if (!woken.isOk && isEndedCrew(woken.error) && (await isDropped(crew.crewToken))) {
|
|
70
|
+
return { reason: 'crewEnded' };
|
|
71
|
+
}
|
|
72
|
+
// A wake the fleet refused counts as one that failed: tried again after a wait.
|
|
73
|
+
const outcome = woken.isOk ? woken.value : { kind: 'failed' };
|
|
74
|
+
switch (outcome.kind) {
|
|
75
|
+
case 'settled':
|
|
76
|
+
wakeAgainAt = undefined;
|
|
77
|
+
failedWakesInARow = 0;
|
|
78
|
+
break;
|
|
79
|
+
case 'inWindow':
|
|
80
|
+
wakeAgainAt = outcome.until;
|
|
81
|
+
failedWakesInARow = 0;
|
|
82
|
+
break;
|
|
83
|
+
case 'failed':
|
|
84
|
+
wakeAgainAt = new Date(deps.clock.now().getTime() + waitOf(deps.wakeAgainWaitsMs, failedWakesInARow));
|
|
85
|
+
failedWakesInARow += 1;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { reason: 'stopped' };
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=wait-on-person-ship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-on-person-ship.js","sourceRoot":"","sources":["../../../src/core/people/wait-on-person-ship.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAY/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAWtC;IACC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,YAAgC,CAAC;QACrC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,+GAA+G;QAC/G,IAAI,WAA6B,CAAC;QAClC,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,uDAAuD;QACvD,MAAM,SAAS,GAAG,GAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,+GAA+G;QAC/G,MAAM,SAAS,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;YAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACpD,IAAI,IAAI,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,OAA0B,EAAE,MAAc,EAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1H,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACpD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC9B,CAAC;YACD,0EAA0E;YAC1E,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACzH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3K,IAAI,SAAS,EAAE,EAAE,CAAC;gBAChB,MAAM;YACR,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;wBACpC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;oBACjC,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;gBACnE,aAAa,IAAI,CAAC,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;YACnC,sFAAsF;YACtF,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;YAC/C,YAAY,GAAG,OAAO,CAAC;YACvB,MAAM,SAAS,GAAG,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YACnG,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACjF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjC,CAAC;YACD,gFAAgF;YAChF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,QAAQ,EAAY,CAAC;YACzE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,SAAS;oBACZ,WAAW,GAAG,SAAS,CAAC;oBACxB,iBAAiB,GAAG,CAAC,CAAC;oBACtB,MAAM;gBACR,KAAK,UAAU;oBACb,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;oBAC5B,iBAAiB,GAAG,CAAC,CAAC;oBACtB,MAAM;gBACR,KAAK,QAAQ;oBACX,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,CAAC;oBACtG,iBAAiB,IAAI,CAAC,CAAC;oBACvB,MAAM;YACV,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { FleetRefusal } from '../connection/ports.js';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { FocusedPages, PersonShip, PersonShipDoor, WakeChannel, WakesSent } from './ports.js';
|
|
5
|
+
/**
|
|
6
|
+
* What a wake came to: nothing left to wake (settled), a wake held back
|
|
7
|
+
* until the earliest window of a channel turned on ends (inWindow), or no
|
|
8
|
+
* channel sent it, so it is tried again (failed).
|
|
9
|
+
*/
|
|
10
|
+
export type WakeOutcome = {
|
|
11
|
+
readonly kind: 'settled';
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'inWindow';
|
|
14
|
+
readonly until: Date;
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'failed';
|
|
17
|
+
};
|
|
18
|
+
export type WakePerson = (ship: PersonShip, crewToken: string) => Promise<Result<WakeOutcome, FleetRefusal>>;
|
|
19
|
+
/**
|
|
20
|
+
* Use case: wakes a person for what waits on their person ship (wake a
|
|
21
|
+
* person, W3, W8). It takes the ship's deliveries with the gateway as their
|
|
22
|
+
* waker; those never handed are fresh. Each channel the person turned on
|
|
23
|
+
* whose window has passed sends one wake for all of them; each fresh
|
|
24
|
+
* delivery is then handed no. 1, naming the first channel that went out, so
|
|
25
|
+
* a delivery is woken once. A wake held back by a window, or that no
|
|
26
|
+
* channel sent, hands nothing. Each channel's window is kept after the
|
|
27
|
+
* hand-overs, so a gateway that stopped in between wakes again: one wake
|
|
28
|
+
* more, nothing lost. While a page of the person is in focus, the page
|
|
29
|
+
* shows what arrives (W6): each fresh delivery is handed through it and no
|
|
30
|
+
* wake goes out.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createWakePerson(deps: {
|
|
33
|
+
door: Pick<PersonShipDoor, 'pushReceive' | 'handed'>;
|
|
34
|
+
channels: readonly WakeChannel[];
|
|
35
|
+
wakesSent: WakesSent;
|
|
36
|
+
focused: FocusedPages;
|
|
37
|
+
/** How long a page counts in focus since it was last seen so. */
|
|
38
|
+
focusFreshMs: number;
|
|
39
|
+
clock: Clock;
|
|
40
|
+
}): WakePerson;
|