@aeolus-fleet/core 0.26.1 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/adapters/http/request-credentials.d.ts +2 -9
- package/dist/adapters/http/request-credentials.js +8 -1
- package/dist/adapters/http/request-credentials.js.map +1 -1
- package/dist/adapters/http/server.js +2 -1
- package/dist/adapters/http/server.js.map +1 -1
- package/dist/adapters/mcp/mcp-endpoint.js +11 -1
- package/dist/adapters/mcp/mcp-endpoint.js.map +1 -1
- package/dist/adapters/prisma/generated/browser.d.ts +14 -0
- package/dist/adapters/prisma/generated/client.d.ts +14 -0
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +30 -0
- package/dist/adapters/prisma/generated/enums.d.ts +10 -0
- package/dist/adapters/prisma/generated/enums.js +10 -1
- package/dist/adapters/prisma/generated/enums.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/class.d.ts +22 -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 +186 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +27 -2
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +27 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +27 -2
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/Delivery.d.ts +71 -1
- package/dist/adapters/prisma/generated/models/Fleet.d.ts +558 -0
- package/dist/adapters/prisma/generated/models/Lease.d.ts +172 -1
- package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +185 -21
- package/dist/adapters/prisma/generated/models/PluginConnection.d.ts +1180 -0
- package/dist/adapters/prisma/generated/models/PluginConnection.js +2 -0
- package/dist/adapters/prisma/generated/models/PluginConnection.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ReachRefusal.d.ts +71 -1
- package/dist/adapters/prisma/generated/models/ScopeNamespace.d.ts +1220 -0
- package/dist/adapters/prisma/generated/models/ScopeNamespace.js +2 -0
- package/dist/adapters/prisma/generated/models/ScopeNamespace.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Ship.d.ts +1269 -51
- package/dist/adapters/prisma/generated/models.d.ts +2 -0
- package/dist/adapters/prisma/health.js +27 -7
- package/dist/adapters/prisma/health.js.map +1 -1
- package/dist/adapters/prisma/history.js +18 -72
- package/dist/adapters/prisma/history.js.map +1 -1
- package/dist/adapters/prisma/messaging.js +31 -35
- package/dist/adapters/prisma/messaging.js.map +1 -1
- package/dist/adapters/prisma/network.js +45 -15
- package/dist/adapters/prisma/network.js.map +1 -1
- package/dist/adapters/prisma/overdue.js +4 -3
- package/dist/adapters/prisma/overdue.js.map +1 -1
- package/dist/adapters/prisma/plugin-connections.d.ts +4 -0
- package/dist/adapters/prisma/plugin-connections.js +20 -0
- package/dist/adapters/prisma/plugin-connections.js.map +1 -0
- package/dist/adapters/prisma/registry.js +68 -13
- package/dist/adapters/prisma/registry.js.map +1 -1
- package/dist/adapters/prisma/rows.d.ts +3 -0
- package/dist/adapters/prisma/rows.js +22 -7
- package/dist/adapters/prisma/rows.js.map +1 -1
- package/dist/adapters/prisma/scope-namespaces.d.ts +4 -0
- package/dist/adapters/prisma/scope-namespaces.js +39 -0
- package/dist/adapters/prisma/scope-namespaces.js.map +1 -0
- package/dist/adapters/prisma/unit-of-work.d.ts +3 -1
- package/dist/adapters/prisma/unit-of-work.js +4 -0
- package/dist/adapters/prisma/unit-of-work.js.map +1 -1
- package/dist/adapters/rest/rest-api.js +2 -2
- package/dist/adapters/rest/rest-api.js.map +1 -1
- package/dist/adapters/trpc/console.d.ts +1 -1
- package/dist/adapters/trpc/console.js +6 -4
- package/dist/adapters/trpc/console.js.map +1 -1
- package/dist/adapters/trpc/context.d.ts +28 -4
- package/dist/adapters/trpc/fleet.d.ts +243 -90
- package/dist/adapters/trpc/fleet.js +146 -57
- package/dist/adapters/trpc/fleet.js.map +1 -1
- package/dist/adapters/trpc/router.d.ts +366 -86
- package/dist/adapters/trpc/ship-contract.js +5 -0
- package/dist/adapters/trpc/ship-contract.js.map +1 -1
- package/dist/adapters/trpc/ship-protocol.js +7 -5
- package/dist/adapters/trpc/ship-protocol.js.map +1 -1
- package/dist/adapters/trpc/ship.d.ts +156 -3
- package/dist/adapters/trpc/ship.js +89 -8
- package/dist/adapters/trpc/ship.js.map +1 -1
- package/dist/adapters/trpc/trpc.d.ts +13 -9
- package/dist/adapters/trpc/trpc.js +90 -26
- package/dist/adapters/trpc/trpc.js.map +1 -1
- package/dist/domain/messaging/check-inbox.d.ts +5 -5
- package/dist/domain/messaging/check-inbox.js +9 -7
- package/dist/domain/messaging/check-inbox.js.map +1 -1
- package/dist/domain/messaging/delivery.d.ts +8 -2
- package/dist/domain/messaging/delivery.js +14 -9
- package/dist/domain/messaging/delivery.js.map +1 -1
- package/dist/domain/messaging/dismiss-delivery.d.ts +9 -4
- package/dist/domain/messaging/dismiss-delivery.js +26 -19
- package/dist/domain/messaging/dismiss-delivery.js.map +1 -1
- package/dist/domain/messaging/hand-over-delivery.d.ts +1 -0
- package/dist/domain/messaging/hand-over-delivery.js +1 -0
- package/dist/domain/messaging/hand-over-delivery.js.map +1 -1
- package/dist/domain/messaging/message.d.ts +11 -5
- package/dist/domain/messaging/message.js +11 -4
- package/dist/domain/messaging/message.js.map +1 -1
- package/dist/domain/messaging/overdue.d.ts +2 -0
- package/dist/domain/messaging/overdue.js +3 -0
- package/dist/domain/messaging/overdue.js.map +1 -1
- package/dist/domain/messaging/ping-ship.d.ts +3 -3
- package/dist/domain/messaging/ping-ship.js +6 -2
- package/dist/domain/messaging/ping-ship.js.map +1 -1
- package/dist/domain/messaging/ports.d.ts +11 -3
- package/dist/domain/messaging/push-receive-deliveries.d.ts +4 -1
- package/dist/domain/messaging/push-receive-deliveries.js +5 -3
- package/dist/domain/messaging/push-receive-deliveries.js.map +1 -1
- package/dist/domain/messaging/receive-deliveries.d.ts +23 -0
- package/dist/domain/messaging/receive-deliveries.js +6 -3
- package/dist/domain/messaging/receive-deliveries.js.map +1 -1
- package/dist/domain/messaging/receive-reply.d.ts +32 -0
- package/dist/domain/messaging/receive-reply.js +25 -0
- package/dist/domain/messaging/receive-reply.js.map +1 -0
- package/dist/domain/messaging/resend-delivery.d.ts +5 -2
- package/dist/domain/messaging/resend-delivery.js +8 -4
- package/dist/domain/messaging/resend-delivery.js.map +1 -1
- package/dist/domain/messaging/send-message.d.ts +9 -2
- package/dist/domain/messaging/send-message.js +12 -2
- package/dist/domain/messaging/send-message.js.map +1 -1
- package/dist/domain/messaging/send-request.d.ts +3 -1
- package/dist/domain/messaging/send-request.js +4 -2
- package/dist/domain/messaging/send-request.js.map +1 -1
- package/dist/domain/registry/assign-label.d.ts +2 -1
- package/dist/domain/registry/assign-label.js +3 -2
- package/dist/domain/registry/assign-label.js.map +1 -1
- package/dist/domain/registry/check-reach.d.ts +69 -6
- package/dist/domain/registry/check-reach.js +109 -12
- package/dist/domain/registry/check-reach.js.map +1 -1
- package/dist/domain/registry/commission-ship.d.ts +21 -8
- package/dist/domain/registry/commission-ship.js +55 -10
- package/dist/domain/registry/commission-ship.js.map +1 -1
- package/dist/domain/registry/connect-plugin.d.ts +30 -0
- package/dist/domain/registry/connect-plugin.js +35 -0
- package/dist/domain/registry/connect-plugin.js.map +1 -0
- package/dist/domain/registry/crew-request.d.ts +1 -1
- package/dist/domain/registry/declare-scopes.d.ts +38 -0
- package/dist/domain/registry/declare-scopes.js +34 -0
- package/dist/domain/registry/declare-scopes.js.map +1 -0
- package/dist/domain/registry/declared-network-rules.d.ts +2 -1
- package/dist/domain/registry/declared-network-rules.js +11 -5
- package/dist/domain/registry/declared-network-rules.js.map +1 -1
- package/dist/domain/registry/discover.d.ts +29 -0
- package/dist/domain/registry/discover.js +54 -0
- package/dist/domain/registry/discover.js.map +1 -0
- package/dist/domain/registry/explain-reach.d.ts +13 -12
- package/dist/domain/registry/explain-reach.js +35 -12
- package/dist/domain/registry/explain-reach.js.map +1 -1
- package/dist/domain/registry/get-ship.d.ts +11 -3
- package/dist/domain/registry/get-ship.js +8 -2
- package/dist/domain/registry/get-ship.js.map +1 -1
- package/dist/domain/registry/get-starting-prompt.d.ts +18 -2
- package/dist/domain/registry/get-starting-prompt.js +7 -7
- package/dist/domain/registry/get-starting-prompt.js.map +1 -1
- package/dist/domain/registry/grant-scopes.d.ts +34 -0
- package/dist/domain/registry/grant-scopes.js +35 -0
- package/dist/domain/registry/grant-scopes.js.map +1 -0
- package/dist/domain/registry/label.d.ts +12 -7
- package/dist/domain/registry/label.js +21 -4
- package/dist/domain/registry/label.js.map +1 -1
- package/dist/domain/registry/leases.d.ts +6 -3
- package/dist/domain/registry/leases.js +7 -5
- package/dist/domain/registry/leases.js.map +1 -1
- package/dist/domain/registry/list-fleet.d.ts +19 -6
- package/dist/domain/registry/list-fleet.js +18 -3
- package/dist/domain/registry/list-fleet.js.map +1 -1
- package/dist/domain/registry/list-scopes.d.ts +24 -0
- package/dist/domain/registry/list-scopes.js +22 -0
- package/dist/domain/registry/list-scopes.js.map +1 -0
- package/dist/domain/registry/managed-or-assigned.d.ts +25 -0
- package/dist/domain/registry/managed-or-assigned.js +23 -0
- package/dist/domain/registry/managed-or-assigned.js.map +1 -0
- package/dist/domain/registry/named-namespaces.d.ts +19 -0
- package/dist/domain/registry/named-namespaces.js +19 -0
- package/dist/domain/registry/named-namespaces.js.map +1 -0
- package/dist/domain/registry/network-settings.d.ts +95 -24
- package/dist/domain/registry/network-settings.js +146 -46
- package/dist/domain/registry/network-settings.js.map +1 -1
- package/dist/domain/registry/plugin-connection.d.ts +48 -0
- package/dist/domain/registry/plugin-connection.js +35 -0
- package/dist/domain/registry/plugin-connection.js.map +1 -0
- package/dist/domain/registry/ports.d.ts +75 -1
- package/dist/domain/registry/public.d.ts +3 -2
- package/dist/domain/registry/public.js +3 -2
- package/dist/domain/registry/public.js.map +1 -1
- package/dist/domain/registry/reach-refusal.d.ts +12 -4
- package/dist/domain/registry/read-assigned-crew-requests.d.ts +12 -3
- package/dist/domain/registry/read-assigned-crew-requests.js +8 -8
- package/dist/domain/registry/read-assigned-crew-requests.js.map +1 -1
- package/dist/domain/registry/read-built-in-rules.d.ts +20 -0
- package/dist/domain/registry/read-built-in-rules.js +24 -0
- package/dist/domain/registry/read-built-in-rules.js.map +1 -0
- package/dist/domain/registry/read-clear-requests.d.ts +5 -3
- package/dist/domain/registry/read-clear-requests.js +7 -5
- package/dist/domain/registry/read-clear-requests.js.map +1 -1
- package/dist/domain/registry/read-network-plugin.d.ts +23 -0
- package/dist/domain/registry/read-network-plugin.js +15 -0
- package/dist/domain/registry/read-network-plugin.js.map +1 -0
- package/dist/domain/registry/read-on-behalf.d.ts +20 -0
- package/dist/domain/registry/read-on-behalf.js +31 -0
- package/dist/domain/registry/read-on-behalf.js.map +1 -0
- package/dist/domain/registry/read-reach.d.ts +64 -0
- package/dist/domain/registry/read-reach.js +83 -0
- package/dist/domain/registry/read-reach.js.map +1 -0
- package/dist/domain/registry/recrew-ship.d.ts +3 -2
- package/dist/domain/registry/recrew-ship.js +8 -1
- package/dist/domain/registry/recrew-ship.js.map +1 -1
- package/dist/domain/registry/release-ship.d.ts +10 -5
- package/dist/domain/registry/release-ship.js +11 -8
- package/dist/domain/registry/release-ship.js.map +1 -1
- package/dist/domain/registry/remove-crew-request.d.ts +4 -3
- package/dist/domain/registry/remove-crew-request.js +6 -1
- package/dist/domain/registry/remove-crew-request.js.map +1 -1
- package/dist/domain/registry/rename-ship.d.ts +7 -5
- package/dist/domain/registry/rename-ship.js +9 -3
- package/dist/domain/registry/rename-ship.js.map +1 -1
- package/dist/domain/registry/request-crew.d.ts +5 -4
- package/dist/domain/registry/request-crew.js +6 -1
- package/dist/domain/registry/request-crew.js.map +1 -1
- package/dist/domain/registry/request-worktree-clear.d.ts +3 -2
- package/dist/domain/registry/request-worktree-clear.js +6 -1
- package/dist/domain/registry/request-worktree-clear.js.map +1 -1
- package/dist/domain/registry/retire-ship.d.ts +17 -7
- package/dist/domain/registry/retire-ship.js +48 -5
- package/dist/domain/registry/retire-ship.js.map +1 -1
- package/dist/domain/registry/scope-grant.d.ts +53 -0
- package/dist/domain/registry/scope-grant.js +74 -0
- package/dist/domain/registry/scope-grant.js.map +1 -0
- package/dist/domain/registry/scope-namespace.d.ts +68 -0
- package/dist/domain/registry/scope-namespace.js +82 -0
- package/dist/domain/registry/scope-namespace.js.map +1 -0
- package/dist/domain/registry/set-built-in-rule.d.ts +28 -0
- package/dist/domain/registry/set-built-in-rule.js +33 -0
- package/dist/domain/registry/set-built-in-rule.js.map +1 -0
- package/dist/domain/registry/set-network-rules.d.ts +3 -3
- package/dist/domain/registry/set-network-rules.js +2 -2
- package/dist/domain/registry/set-owner.d.ts +30 -0
- package/dist/domain/registry/set-owner.js +37 -0
- package/dist/domain/registry/set-owner.js.map +1 -0
- package/dist/domain/registry/set-statement.d.ts +27 -0
- package/dist/domain/registry/set-statement.js +28 -0
- package/dist/domain/registry/set-statement.js.map +1 -0
- package/dist/domain/registry/ship.d.ts +74 -10
- package/dist/domain/registry/ship.js +128 -10
- package/dist/domain/registry/ship.js.map +1 -1
- package/dist/domain/registry/statement.d.ts +32 -0
- package/dist/domain/registry/statement.js +39 -0
- package/dist/domain/registry/statement.js.map +1 -0
- package/dist/domain/registry/unassign-label.js +1 -1
- package/dist/domain/registry/unassign-label.js.map +1 -1
- package/dist/domain/registry/whoami.d.ts +5 -1
- package/dist/domain/registry/whoami.js +7 -4
- package/dist/domain/registry/whoami.js.map +1 -1
- package/dist/domain/shared/caller.d.ts +5 -2
- package/dist/domain/shared/caller.js.map +1 -1
- package/dist/domain/shared/delivery-way.d.ts +9 -5
- package/dist/domain/shared/delivery-way.js +17 -5
- package/dist/domain/shared/delivery-way.js.map +1 -1
- package/dist/domain/shared/errors.d.ts +1 -1
- package/dist/domain/shared/errors.js.map +1 -1
- package/dist/domain/shared/events-read.d.ts +16 -0
- package/dist/domain/shared/events-read.js +15 -0
- package/dist/domain/shared/events-read.js.map +1 -0
- package/dist/domain/shared/follow-fleet.d.ts +8 -2
- package/dist/domain/shared/follow-fleet.js +14 -4
- package/dist/domain/shared/follow-fleet.js.map +1 -1
- package/dist/domain/shared/health.d.ts +11 -2
- package/dist/domain/shared/health.js +11 -3
- package/dist/domain/shared/health.js.map +1 -1
- package/dist/domain/shared/history.d.ts +11 -42
- package/dist/domain/shared/history.js +9 -0
- package/dist/domain/shared/history.js.map +1 -1
- package/dist/domain/shared/read-fleet-events.d.ts +8 -2
- package/dist/domain/shared/read-fleet-events.js +10 -4
- package/dist/domain/shared/read-fleet-events.js.map +1 -1
- package/dist/domain/shared/read-health.d.ts +5 -1
- package/dist/domain/shared/read-health.js +13 -2
- package/dist/domain/shared/read-health.js.map +1 -1
- package/dist/domain/shared/read-inbox.d.ts +6 -3
- package/dist/domain/shared/read-inbox.js +14 -4
- package/dist/domain/shared/read-inbox.js.map +1 -1
- package/dist/domain/shared/read-message.d.ts +6 -2
- package/dist/domain/shared/read-message.js +6 -2
- package/dist/domain/shared/read-message.js.map +1 -1
- package/dist/domain/shared/read-needs-attention.d.ts +4 -1
- package/dist/domain/shared/read-needs-attention.js +8 -3
- package/dist/domain/shared/read-needs-attention.js.map +1 -1
- package/dist/domain/shared/read-sent-message.d.ts +31 -0
- package/dist/domain/shared/read-sent-message.js +28 -0
- package/dist/domain/shared/read-sent-message.js.map +1 -0
- package/dist/domain/shared/read-ship-messages.d.ts +6 -2
- package/dist/domain/shared/read-ship-messages.js +7 -2
- package/dist/domain/shared/read-ship-messages.js.map +1 -1
- package/dist/domain/shared/read-ship-timeline.d.ts +5 -2
- package/dist/domain/shared/read-ship-timeline.js +11 -6
- package/dist/domain/shared/read-ship-timeline.js.map +1 -1
- package/dist/domain/shared/read-ship-way.d.ts +11 -4
- package/dist/domain/shared/read-ship-way.js +9 -2
- package/dist/domain/shared/read-ship-way.js.map +1 -1
- package/dist/domain/shared/stuck.d.ts +10 -1
- package/dist/domain/shared/stuck.js +5 -3
- package/dist/domain/shared/stuck.js.map +1 -1
- package/dist/testing/container-images.d.ts +14 -0
- package/dist/testing/container-images.js +18 -0
- package/dist/testing/container-images.js.map +1 -0
- package/dist/testing/database.d.ts +14 -0
- package/dist/testing/database.js +48 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/fleet.d.ts +13 -0
- package/dist/testing/fleet.js +17 -0
- package/dist/testing/fleet.js.map +1 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/keys.d.ts +1 -0
- package/dist/testing/keys.js +7 -0
- package/dist/testing/keys.js.map +1 -0
- package/dist/testing/migrate-lock.d.ts +12 -0
- package/dist/testing/migrate-lock.js +51 -0
- package/dist/testing/migrate-lock.js.map +1 -0
- package/dist/testing/migrated-template.d.ts +12 -0
- package/dist/testing/migrated-template.js +29 -0
- package/dist/testing/migrated-template.js.map +1 -0
- package/dist/testing/postgres-container.d.ts +16 -0
- package/dist/testing/postgres-container.js +30 -0
- package/dist/testing/postgres-container.js.map +1 -0
- package/dist/testing/postgres-global-setup.d.ts +15 -0
- package/dist/testing/postgres-global-setup.js +20 -0
- package/dist/testing/postgres-global-setup.js.map +1 -0
- package/dist/testing/prisma-cli.d.ts +5 -0
- package/dist/testing/prisma-cli.js +15 -0
- package/dist/testing/prisma-cli.js.map +1 -0
- package/dist/testing/result.d.ts +5 -0
- package/dist/testing/result.js +15 -0
- package/dist/testing/result.js.map +1 -0
- package/dist/wiring.d.ts +26 -4
- package/dist/wiring.js +51 -18
- package/dist/wiring.js.map +1 -1
- package/package.json +28 -2
- package/src/adapters/prisma/migrations/20261018100000_force_scope/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261018110000_forced_delivery/migration.sql +4 -0
- package/src/adapters/prisma/migrations/20261018120000_person_and_app_ships/migration.sql +3 -0
- package/src/adapters/prisma/migrations/20261018130000_owners/migration.sql +14 -0
- package/src/adapters/prisma/migrations/20261018140000_owners_on_reach_refusals/migration.sql +14 -0
- package/src/adapters/prisma/migrations/20261018150000_network_verbs/migration.sql +9 -0
- package/src/adapters/prisma/migrations/20261018160000_built_in_rules/migration.sql +13 -0
- package/src/adapters/prisma/migrations/20261018170000_network_rules_a_list/migration.sql +5 -0
- package/src/adapters/prisma/migrations/20261018180000_verb_on_reach_refusals/migration.sql +4 -0
- package/src/adapters/prisma/migrations/20261018200000_lease_statements/migration.sql +3 -0
- package/src/adapters/prisma/migrations/20261018210000_declare_and_grant_scopes/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261018220000_plugin_scopes/migration.sql +14 -0
- package/src/adapters/prisma/migrations/20261018230000_scope_namespaces/migration.sql +20 -0
- package/src/adapters/prisma/migrations/20261018240000_trierarch_plugin_crew_run/migration.sql +44 -0
- package/src/adapters/prisma/migrations/20261018250000_scope_catalogue/migration.sql +67 -0
- package/src/adapters/prisma/migrations/20261019090000_reach_refusal_asked_by/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261019100000_on_behalf_scope/migration.sql +61 -0
- package/src/adapters/prisma/migrations/20261019110000_events_fleet_id_occurred_at/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261019130000_plugin_connections/migration.sql +54 -0
- package/src/adapters/prisma/migrations/20261019150000_network_plugin_registered_at/migration.sql +23 -0
- package/src/adapters/prisma/migrations/20261019160000_lease_waker/migration.sql +4 -0
- package/src/adapters/prisma/schema.prisma +81 -7
- package/dist/domain/shared/read-no-ship-can-take.d.ts +0 -13
- package/dist/domain/shared/read-no-ship-can-take.js +0 -12
- package/dist/domain/shared/read-no-ship-can-take.js.map +0 -1
- package/dist/domain/shared/read-overdue.d.ts +0 -13
- package/dist/domain/shared/read-overdue.js +0 -12
- package/dist/domain/shared/read-overdue.js.map +0 -1
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { refuse } from '../shared/errors.js';
|
|
2
2
|
import { ok } from '../shared/result.js';
|
|
3
3
|
/**
|
|
4
|
-
* Use case: tells the caller which ship it crews: id, fleet, name and
|
|
4
|
+
* Use case: tells the caller which ship it crews: id, fleet, name, type and
|
|
5
|
+
* owner.
|
|
5
6
|
* Any caller may ask, whatever its scopes: it learns only about itself.
|
|
6
7
|
*/
|
|
7
8
|
export function createWhoami(deps) {
|
|
8
9
|
return async (caller) => {
|
|
9
10
|
const ship = await deps.ships.find(caller.fleetId, caller.shipId);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
if (!ship) {
|
|
12
|
+
return refuse('SHIP_NOT_FOUND', `Ship ${caller.shipId} does not exist`);
|
|
13
|
+
}
|
|
14
|
+
const owner = ship.owner === null ? undefined : await deps.ships.find(caller.fleetId, ship.owner);
|
|
15
|
+
return ok({ shipId: ship.id, fleetId: ship.fleetId, name: ship.name, type: ship.type, ownerShipId: owner?.id ?? null, ownerName: owner?.name ?? null });
|
|
13
16
|
};
|
|
14
17
|
}
|
|
15
18
|
//# sourceMappingURL=whoami.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/domain/registry/whoami.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/domain/registry/whoami.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAgBtD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAA6C;IACxE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClG,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1J,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ConsoleSessionId, FleetId, LeaseId, Scope, ShipId, ShipKind } from '@aeolus-fleet/common';
|
|
1
|
+
import type { ConsoleSessionId, FleetId, LeaseId, Scope, ScopeName, ShipId, ShipKind } from '@aeolus-fleet/common';
|
|
2
2
|
/**
|
|
3
3
|
* Who is calling. Every caller is a ship (ADR 0012), resolved from its crew
|
|
4
4
|
* token or from a console session. Kind and scopes come from the server, never
|
|
@@ -8,9 +8,12 @@ export interface Caller {
|
|
|
8
8
|
shipId: ShipId;
|
|
9
9
|
fleetId: FleetId;
|
|
10
10
|
kind: ShipKind;
|
|
11
|
-
scopes
|
|
11
|
+
/** Core scopes and plugin scopes; core checks only its own (decision 0046). */
|
|
12
|
+
scopes: readonly ScopeName[];
|
|
12
13
|
/** Set when the caller signed in through the console rather than calling with a crew token. */
|
|
13
14
|
consoleSessionId?: ConsoleSessionId;
|
|
15
|
+
/** The plugin ship that reads on behalf of this ship, with this ship's read reach (decision 0034); absent for a ship's own call. */
|
|
16
|
+
askedBy?: ShipId;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* A caller that came with the crew token `register` gave it: one session
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caller.js","sourceRoot":"","sources":["../../../src/domain/shared/caller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"caller.js","sourceRoot":"","sources":["../../../src/domain/shared/caller.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAY;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,SAAS,IAAI,MAAM,CAAC;AAC7B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ComputerSide, type CrewStatus, type DeliveryHolder, type DeliveryState, type LeaseEndReason, type OverdueClock, type ShipId, type TurnState } from '@aeolus-fleet/common';
|
|
1
|
+
import { type ComputerSide, type CrewStatus, type DeliveryHolder, type DeliveryState, type LeaseEndReason, type LeaseWaker, type OverdueClock, type ShipId, type TurnState } from '@aeolus-fleet/common';
|
|
2
2
|
import type { Location } from '../registry/public.js';
|
|
3
3
|
import type { SequencedEvent } from './events.js';
|
|
4
4
|
import { type DeliveryChange, type HistoryParty } from './history.js';
|
|
@@ -15,6 +15,8 @@ export interface WayLease {
|
|
|
15
15
|
trierarch: HistoryParty | null;
|
|
16
16
|
/** From its first push receive until it ends. */
|
|
17
17
|
isPushed: boolean;
|
|
18
|
+
/** What wakes the ship, as its first push receive stated it (interop 5.1); null when it stated none. */
|
|
19
|
+
waker: LeaseWaker | null;
|
|
18
20
|
isEnded: boolean;
|
|
19
21
|
/** Why it ended, as its LeaseRevoked says; null while open. */
|
|
20
22
|
endReason: LeaseEndReason | null;
|
|
@@ -54,11 +56,13 @@ export interface DeliveryWay {
|
|
|
54
56
|
crew: WayCrew | null;
|
|
55
57
|
}
|
|
56
58
|
/**
|
|
57
|
-
* The part that receives and hands over for a pushed lease's session:
|
|
58
|
-
*
|
|
59
|
-
*
|
|
59
|
+
* The part that receives and hands over for a pushed lease's session: what
|
|
60
|
+
* its first push receive stated wakes it (interop 5.1), else its trierarch,
|
|
61
|
+
* or else the plugin watcher of a session crewed by hand. A trierarch stated
|
|
62
|
+
* by a session no trierarch crewed names none to show, so it reads as the
|
|
63
|
+
* lease shows. A pull lease has none: its agent receives itself.
|
|
60
64
|
*/
|
|
61
|
-
export declare function computerSideOf(lease: Pick<WayLease, 'isPushed' | 'trierarch'>): ComputerSide | null;
|
|
65
|
+
export declare function computerSideOf(lease: Pick<WayLease, 'isPushed' | 'trierarch' | 'waker'>): ComputerSide | null;
|
|
62
66
|
/**
|
|
63
67
|
* One step of a delivery's way from its event: the ship it names, where a
|
|
64
68
|
* hand-over's session ran, the computer side that received it or handed it
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { OVERDUE_CLOCKS, } from '@aeolus-fleet/common';
|
|
2
2
|
import { isDeliveryChangeType } from './history.js';
|
|
3
3
|
/**
|
|
4
|
-
* The part that receives and hands over for a pushed lease's session:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The part that receives and hands over for a pushed lease's session: what
|
|
5
|
+
* its first push receive stated wakes it (interop 5.1), else its trierarch,
|
|
6
|
+
* or else the plugin watcher of a session crewed by hand. A trierarch stated
|
|
7
|
+
* by a session no trierarch crewed names none to show, so it reads as the
|
|
8
|
+
* lease shows. A pull lease has none: its agent receives itself.
|
|
7
9
|
*/
|
|
8
10
|
export function computerSideOf(lease) {
|
|
9
11
|
if (!lease.isPushed) {
|
|
10
12
|
return null;
|
|
11
13
|
}
|
|
12
|
-
|
|
14
|
+
switch (lease.waker) {
|
|
15
|
+
case 'personApp':
|
|
16
|
+
case 'gateway':
|
|
17
|
+
case 'adapter':
|
|
18
|
+
case 'pluginWatcher':
|
|
19
|
+
return { kind: lease.waker };
|
|
20
|
+
case 'trierarch':
|
|
21
|
+
case null:
|
|
22
|
+
return lease.trierarch ? { kind: 'trierarch', trierarch: lease.trierarch } : { kind: 'pluginWatcher' };
|
|
23
|
+
}
|
|
13
24
|
}
|
|
14
25
|
function isOverdueClock(value) {
|
|
15
26
|
return OVERDUE_CLOCKS.some((clock) => clock === value);
|
|
@@ -27,7 +38,7 @@ export function deliveryStepOf(event, read) {
|
|
|
27
38
|
}
|
|
28
39
|
const lease = typeof details.leaseId === 'string' ? read.leases.get(details.leaseId) : undefined;
|
|
29
40
|
const isTakenBySession = type === 'DeliveryReceived' || type === 'DeliveryHanded';
|
|
30
|
-
const { attempts, handOverNumber, clock, minutes } = details;
|
|
41
|
+
const { attempts, handOverNumber, channel, clock, minutes } = details;
|
|
31
42
|
return [
|
|
32
43
|
{
|
|
33
44
|
seq: event.seq,
|
|
@@ -39,6 +50,7 @@ export function deliveryStepOf(event, read) {
|
|
|
39
50
|
attempts: typeof attempts === 'number' ? attempts : null,
|
|
40
51
|
by: isTakenBySession && lease ? computerSideOf(lease) : null,
|
|
41
52
|
handOverNumber: typeof handOverNumber === 'number' ? handOverNumber : null,
|
|
53
|
+
channel: typeof channel === 'string' ? channel : null,
|
|
42
54
|
isAgain: details.again === true,
|
|
43
55
|
isOnceMore: details.onceMore === true,
|
|
44
56
|
overdue: type === 'DeliveryOverdue' && isOverdueClock(clock) && typeof minutes === 'number' ? { clock, minutes } : null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-way.js","sourceRoot":"","sources":["../../../src/domain/shared/delivery-way.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,
|
|
1
|
+
{"version":3,"file":"delivery-way.js","sourceRoot":"","sources":["../../../src/domain/shared/delivery-way.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Err } from './result.js';
|
|
2
2
|
/** Every reason the domain refuses a request. */
|
|
3
|
-
export type DomainErrorKind = 'ASSIGNEE_NOT_ACTIVE' | 'CLEAR_REQUEST_LIMIT_REACHED' | 'CLEAR_REQUEST_NOT_FOUND' | 'CREW_REQUEST_ALREADY_ASSIGNED' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER' | 'CREW_REQUEST_NOT_FOUND' | 'CREW_REQUEST_NOT_RELEASING' | 'CREW_REQUEST_RELEASING' | 'CREW_REQUEST_FINAL' | 'CREW_REQUEST_SETTINGS_CHANGED' | 'CREW_REQUEST_SETTINGS_INVALID' | 'CREW_REQUEST_SETTINGS_TOO_LARGE' | 'DELIVERY_HANDED_ONCE_MORE' | 'DELIVERY_HELD_BY_ANOTHER_SHIP' | 'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_A_PING' | 'DELIVERY_NOT_ACKNOWLEDGED' | 'DELIVERY_NOT_HANDED_ONCE_MORE' | 'DELIVERY_NOT_IN_FLIGHT' | 'DELIVERY_NOT_OPEN' | 'DELIVERY_NOT_UNDELIVERABLE' | 'FLEET_ALREADY_EXISTS' | 'FLEET_LIMIT_REACHED' | 'FLEET_NOT_FOUND' | 'FLEET_HAS_NO_VIEWER' | 'NOTICE_NOT_FOUND' | 'NOTICE_NOT_DISMISSIBLE' | 'GUIDE_NOT_FOUND' | 'GUIDE_STEP_NOT_FOUND' | 'IDEMPOTENCY_KEY_REUSED' | 'IN_REPLY_TO_NOT_FOUND' | 'MESSAGE_LIMIT_REACHED' | 'MODEL_REQUIRED' | 'INVALID_HARNESS' | 'MODEL_FROM_ARGO' | 'INVALID_CONTENT_TYPE' | 'INVALID_EMAIL' | 'INVALID_FLEET_NAME' | 'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT' | 'INVALID_IDEMPOTENCY_KEY' | 'INVALID_INBOX_WAIT' | 'INVALID_LABEL_KEY' | 'INVALID_LABEL_VALUE' | 'INVALID_LABEL_VALUES' | 'INVALID_LIMIT' | 'INVALID_LOCATION' | 'INVALID_NETWORK_RULES' | 'INVALID_PASSWORD' | 'INVALID_RECEIVE_MAX' | 'INVALID_CREW_REQUEST_REASON' | 'INVALID_REPORT_DETAILS' | 'INVALID_REPORT_NOTE' | 'INVALID_REPORT_STATE' | 'INVALID_SHIP_NAME' | 'INVALID_SHIP_NOTE' | 'INVALID_SHIP_TYPE' | 'LABEL_CARRIED' | 'LABEL_KEY_TAKEN' | 'LABEL_NOT_FOUND' | 'LABEL_VALUE_CARRIED' | 'LABEL_VALUE_NOT_FOUND' | 'LEASE_ENDED' | 'MESSAGE_NOT_FOUND' | 'NETWORK_PLUGIN_REGISTERED' | 'NOT_A_TRIERARCH' | 'NOT_THE_LABEL_OWNER' | 'NOT_REACHABLE' | 'NOT_THE_NETWORK_PLUGIN' | 'NOT_THE_OPERATOR_SHIP' | 'OPERATOR_EMAIL_TAKEN' | 'OPERATOR_HAS_NO_PASSWORD' | 'OPERATOR_SHIP_GETS_NO_STARTING_PROMPT' | 'OPERATOR_SHIP_HAS_NO_SECRET' | 'OPERATOR_SHIP_IS_NOT_PINGED' | 'OPERATOR_SHIP_IS_PERMANENT' | 'PAYLOAD_TOO_LARGE' | 'PING_NOT_RESENT' | 'REPORT_DETAILS_TOO_LARGE' | 'RESERVED_CONTENT_TYPE' | 'SHIP_ALREADY_RETIRED' | 'SHIP_NAME_RESERVED' | 'SHIP_NAME_TAKEN' | 'SHIP_NOT_AWAITING_CREW' | 'SHIP_NOT_CREWED' | 'SHIP_LABEL_LIMIT_REACHED' | 'SHIP_LIMIT_REACHED' | 'SHIP_NOT_FOUND' | 'SIGN_IN_TICKET_INVALID' | 'UNKNOWN_CREW_TOKEN' | 'UNRESOLVABLE_SELECTOR' | 'WRONG_EMAIL_OR_PASSWORD' | 'WRONG_SHIP_ID_OR_SECRET';
|
|
3
|
+
export type DomainErrorKind = 'ASSIGNEE_NOT_ACTIVE' | 'BASE_SCOPE' | 'CLEAR_REQUEST_LIMIT_REACHED' | 'CLEAR_REQUEST_NOT_FOUND' | 'CORE_NAMESPACE' | 'CREW_REQUEST_ALREADY_ASSIGNED' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER' | 'CREW_REQUEST_NOT_FOUND' | 'CREW_REQUEST_NOT_RELEASING' | 'CREW_REQUEST_RELEASING' | 'CREW_REQUEST_FINAL' | 'CREW_REQUEST_SETTINGS_CHANGED' | 'CREW_REQUEST_SETTINGS_INVALID' | 'CREW_REQUEST_SETTINGS_TOO_LARGE' | 'DELIVERY_HANDED_ONCE_MORE' | 'DELIVERY_HELD_BY_ANOTHER_SHIP' | 'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_A_PING' | 'DELIVERY_NOT_ACKNOWLEDGED' | 'DELIVERY_NOT_HANDED_ONCE_MORE' | 'DELIVERY_NOT_IN_FLIGHT' | 'DELIVERY_NOT_OPEN' | 'DELIVERY_NOT_UNDELIVERABLE' | 'FLEET_ALREADY_EXISTS' | 'FLEET_LIMIT_REACHED' | 'FORCE_NOT_ALLOWED' | 'FLEET_NOT_FOUND' | 'FLEET_HAS_NO_VIEWER' | 'INVALID_SCOPE' | 'INVALID_SCOPE_DESCRIPTION' | 'NAMESPACE_TAKEN' | 'NOTICE_NOT_FOUND' | 'NOTICE_NOT_DISMISSIBLE' | 'GUIDE_NOT_FOUND' | 'GUIDE_STEP_NOT_FOUND' | 'IDEMPOTENCY_KEY_REUSED' | 'OWN_SHIP_SCOPES' | 'PLUGIN_SCOPE_NOT_YOURS' | 'SCOPE_HELD' | 'SCOPE_NOT_DECLARED' | 'SCOPE_NOT_HELD' | 'SECOND_NAMESPACE' | 'SHIP_HAS_NO_OWNER' | 'KIND_COMMISSIONED_BY_ARGO_ONLY' | 'IN_REPLY_TO_NOT_FOUND' | 'MESSAGE_LIMIT_REACHED' | 'MODEL_REQUIRED' | 'INVALID_HARNESS' | 'MODEL_FROM_ARGO' | 'MODEL_FROM_PERSON_OR_APP' | 'INVALID_CONTENT_TYPE' | 'INVALID_EMAIL' | 'INVALID_FLEET_NAME' | 'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT' | 'INVALID_IDEMPOTENCY_KEY' | 'INVALID_INBOX_WAIT' | 'INVALID_LABEL_KEY' | 'INVALID_LABEL_VALUE' | 'INVALID_LABEL_VALUES' | 'INVALID_LIMIT' | 'INVALID_LOCATION' | 'INVALID_OWNER' | 'INVALID_NETWORK_RULES' | 'INVALID_PASSWORD' | 'INVALID_RECEIVE_MAX' | 'INVALID_CREW_REQUEST_REASON' | 'INVALID_REPORT_DETAILS' | 'INVALID_REPORT_NOTE' | 'INVALID_REPORT_STATE' | 'INVALID_SHIP_NAME' | 'INVALID_SHIP_NOTE' | 'INVALID_SHIP_TYPE' | 'LABEL_CARRIED' | 'LABEL_KEY_TAKEN' | 'LABEL_NOT_FOUND' | 'LABEL_VALUE_CARRIED' | 'LABEL_VALUE_NOT_FOUND' | 'LEASE_ENDED' | 'MESSAGE_NOT_FOUND' | 'NETWORK_PLUGIN_REGISTERED' | 'NOT_A_TRIERARCH' | 'NOT_AN_AGENT_SHIP' | 'NOT_THE_LABEL_OWNER' | 'NOT_YOUR_SHIP_TO_LABEL' | 'NOT_REACHABLE' | 'NOT_THE_NETWORK_PLUGIN' | 'BUILT_IN_RULE_FIXED' | 'NOT_THE_OPERATOR_SHIP' | 'OPERATOR_EMAIL_TAKEN' | 'OPERATOR_HAS_NO_PASSWORD' | 'OPERATOR_SHIP_GETS_NO_STARTING_PROMPT' | 'OPERATOR_SHIP_HAS_NO_SECRET' | 'OPERATOR_SHIP_IS_NOT_PINGED' | 'OPERATOR_SHIP_IS_PERMANENT' | 'PAYLOAD_TOO_LARGE' | 'PING_NOT_RESENT' | 'REPORT_DETAILS_TOO_LARGE' | 'RESERVED_CONTENT_TYPE' | 'SHIP_ALREADY_RETIRED' | 'SHIP_NAME_RESERVED' | 'SHIP_NAME_TAKEN' | 'SHIP_NOT_AWAITING_CREW' | 'SHIP_NOT_CREWED' | 'SHIP_LABEL_LIMIT_REACHED' | 'SHIP_LIMIT_REACHED' | 'SHIP_NOT_FOUND' | 'SHIP_NOT_READ_ON_BEHALF' | 'SHIP_SCOPES_FIXED' | 'SIGN_IN_TICKET_INVALID' | 'TOO_MANY_SCOPES' | 'UNKNOWN_CREW_TOKEN' | 'UNRESOLVABLE_SELECTOR' | 'WRONG_EMAIL_OR_PASSWORD' | 'WRONG_SHIP_ID_OR_SECRET';
|
|
4
4
|
/**
|
|
5
5
|
* Why the domain refused a request. Adapters map the kind to their own error
|
|
6
6
|
* shape (a tRPC code, an exit code); the message is safe to show a caller.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/domain/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/domain/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAiI5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type ReadReach } from '../registry/public.js';
|
|
3
|
+
import type { SequencedEvent } from './events.js';
|
|
4
|
+
import type { ShipHistory } from './history.js';
|
|
5
|
+
/**
|
|
6
|
+
* The events a read reach reads (decision 0034): a message's through its
|
|
7
|
+
* parties, any other through the ship it concerns, one that concerns neither
|
|
8
|
+
* by every reader. In their order.
|
|
9
|
+
*/
|
|
10
|
+
export declare function eventsRead(deps: {
|
|
11
|
+
history: Pick<ShipHistory, 'messageParties'>;
|
|
12
|
+
}, read: {
|
|
13
|
+
fleetId: FleetId;
|
|
14
|
+
reach: ReadReach;
|
|
15
|
+
events: readonly SequencedEvent[];
|
|
16
|
+
}): Promise<SequencedEvent[]>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { readsEvent } from '../registry/public.js';
|
|
2
|
+
/**
|
|
3
|
+
* The events a read reach reads (decision 0034): a message's through its
|
|
4
|
+
* parties, any other through the ship it concerns, one that concerns neither
|
|
5
|
+
* by every reader. In their order.
|
|
6
|
+
*/
|
|
7
|
+
export async function eventsRead(deps, read) {
|
|
8
|
+
const { fleetId, reach, events } = read;
|
|
9
|
+
if (reach.kind === 'every') {
|
|
10
|
+
return [...events];
|
|
11
|
+
}
|
|
12
|
+
const parties = await deps.history.messageParties(fleetId, events.flatMap((event) => (event.messageId === undefined ? [] : [event.messageId])));
|
|
13
|
+
return events.filter((event) => readsEvent(reach, { type: event.type, shipId: event.shipId ?? null, message: (event.messageId === undefined ? undefined : parties.get(event.messageId)) ?? null }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=events-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-read.js","sourceRoot":"","sources":["../../../src/domain/shared/events-read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAkB,MAAM,uBAAuB,CAAC;AAInE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAsD,EACtD,IAA+E;IAE/E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC/C,OAAO,EACP,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CACpF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CACnK,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import type { ReadReachOf } from '../registry/public.js';
|
|
1
2
|
import type { Caller } from './caller.js';
|
|
2
3
|
import type { Clock } from './clock.js';
|
|
3
4
|
import { type DomainError } from './errors.js';
|
|
4
5
|
import type { FleetEventFeed, FleetEventWakeups, SequencedEvent } from './events.js';
|
|
6
|
+
import type { ShipHistory } from './history.js';
|
|
5
7
|
import { type Result } from './result.js';
|
|
6
8
|
export type FollowFleetRefusal = DomainError<'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT'>;
|
|
7
9
|
export interface FleetFollowed {
|
|
8
10
|
/** The events after the position, oldest first. */
|
|
9
11
|
events: SequencedEvent[];
|
|
10
|
-
/** The number to follow from next: the last event's, the position itself when none came, or the newest without one. */
|
|
12
|
+
/** The number to follow from next: the last event's it went through, read or not, the position itself when none came, or the newest without one. */
|
|
11
13
|
lastSeq: number;
|
|
12
14
|
}
|
|
13
15
|
export type FollowFleet = (caller: Caller, input: {
|
|
@@ -23,10 +25,14 @@ export type FollowFleet = (caller: Caller, input: {
|
|
|
23
25
|
* wait, and nothing after the position, it watches its fleet's wake-ups and
|
|
24
26
|
* reads again on each until an event comes or the wait has passed; it starts
|
|
25
27
|
* watching before it reads a second time, so an event committed in between is
|
|
26
|
-
* answered.
|
|
28
|
+
* answered. It answers only the events the caller reads (decision 0034); one
|
|
29
|
+
* it does not read moves the position on and does not end a wait. The
|
|
30
|
+
* caller's scope is checked before this runs.
|
|
27
31
|
*/
|
|
28
32
|
export declare function createFollowFleet(deps: {
|
|
29
33
|
feed: FleetEventFeed;
|
|
30
34
|
clock: Clock;
|
|
31
35
|
wakeups: FleetEventWakeups;
|
|
36
|
+
history: Pick<ShipHistory, 'messageParties'>;
|
|
37
|
+
readReach: ReadReachOf;
|
|
32
38
|
}): FollowFleet;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FOLLOW_MAX_DEFAULT, FOLLOW_MAX_LIMIT, FOLLOW_WAIT_MAX_SECONDS } from '@aeolus-fleet/common';
|
|
2
2
|
import { refuse } from './errors.js';
|
|
3
|
+
import { eventsRead } from './events-read.js';
|
|
3
4
|
import { ok } from './result.js';
|
|
4
5
|
const SECOND_MS = 1_000;
|
|
5
6
|
function checkedMax(max) {
|
|
@@ -22,7 +23,9 @@ function checkedWaitMs(waitSeconds) {
|
|
|
22
23
|
* wait, and nothing after the position, it watches its fleet's wake-ups and
|
|
23
24
|
* reads again on each until an event comes or the wait has passed; it starts
|
|
24
25
|
* watching before it reads a second time, so an event committed in between is
|
|
25
|
-
* answered.
|
|
26
|
+
* answered. It answers only the events the caller reads (decision 0034); one
|
|
27
|
+
* it does not read moves the position on and does not end a wait. The
|
|
28
|
+
* caller's scope is checked before this runs.
|
|
26
29
|
*/
|
|
27
30
|
export function createFollowFleet(deps) {
|
|
28
31
|
return async (caller, input) => {
|
|
@@ -40,20 +43,27 @@ export function createFollowFleet(deps) {
|
|
|
40
43
|
return ok({ events: [], lastSeq: await deps.feed.lastSeq(fleetId) });
|
|
41
44
|
}
|
|
42
45
|
const until = deps.clock.now().getTime() + waitMs.value;
|
|
46
|
+
const reach = await deps.readReach(caller);
|
|
47
|
+
let position = afterSeq;
|
|
43
48
|
let watch;
|
|
44
49
|
try {
|
|
45
50
|
for (;;) {
|
|
46
|
-
const
|
|
51
|
+
const gone = await deps.feed.after(fleetId, { seq: position, limit: max.value });
|
|
52
|
+
position = gone.at(-1)?.seq ?? position;
|
|
53
|
+
const events = await eventsRead(deps, { fleetId, reach, events: gone });
|
|
47
54
|
const remainingMs = until - deps.clock.now().getTime();
|
|
48
55
|
if (events.length > 0 || remainingMs <= 0) {
|
|
49
|
-
return ok({ events, lastSeq:
|
|
56
|
+
return ok({ events, lastSeq: position });
|
|
57
|
+
}
|
|
58
|
+
if (gone.length > 0) {
|
|
59
|
+
continue;
|
|
50
60
|
}
|
|
51
61
|
if (watch === undefined) {
|
|
52
62
|
watch = deps.wakeups.watch(fleetId);
|
|
53
63
|
continue;
|
|
54
64
|
}
|
|
55
65
|
if ((await watch.next(remainingMs)) === 'timedOut') {
|
|
56
|
-
return ok({ events: [], lastSeq:
|
|
66
|
+
return ok({ events: [], lastSeq: position });
|
|
57
67
|
}
|
|
58
68
|
}
|
|
59
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"follow-fleet.js","sourceRoot":"","sources":["../../../src/domain/shared/follow-fleet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"follow-fleet.js","sourceRoot":"","sources":["../../../src/domain/shared/follow-fleet.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,16 +5,18 @@
|
|
|
5
5
|
* hours. Facts read from the fleet's records, never stored.
|
|
6
6
|
*/
|
|
7
7
|
import { type FleetId, type ShipId } from '@aeolus-fleet/common';
|
|
8
|
+
import type { MessageParties } from '../registry/public.js';
|
|
8
9
|
import type { HistoryParty } from './history.js';
|
|
9
10
|
import { type FleetRecords, type StuckPlaceCount } from './stuck.js';
|
|
10
11
|
/** A machine: the trierarch a ship's crew request is assigned to, and when its crew last called. */
|
|
11
12
|
export interface Machine extends HistoryParty {
|
|
12
13
|
lastSeenAt: Date | null;
|
|
13
14
|
}
|
|
14
|
-
/** A delivery acknowledged in the window: when its message was sent and when it was acknowledged. */
|
|
15
|
+
/** A delivery acknowledged in the window: when its message was sent and when it was acknowledged, and its message's parties. */
|
|
15
16
|
export interface AcknowledgedDelivery {
|
|
16
17
|
sentAt: Date;
|
|
17
18
|
acknowledgedAt: Date;
|
|
19
|
+
message: MessageParties;
|
|
18
20
|
}
|
|
19
21
|
/** The deliveries acknowledged in the last 24 hours, the median from send to acknowledgement, and how many in each hour. */
|
|
20
22
|
export interface Acknowledged {
|
|
@@ -73,10 +75,17 @@ export declare function healthSince(now: Date): Date;
|
|
|
73
75
|
export declare function acknowledgedSince(now: Date): Date;
|
|
74
76
|
/** Counts the deliveries acknowledged in the 24 hours up to `now`, with their median wait and how many in each hour. */
|
|
75
77
|
export declare function acknowledgedOf(deliveries: readonly AcknowledgedDelivery[], now: Date): Acknowledged;
|
|
76
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Reads the fleet's health at `now`: its records over the trend's hours and
|
|
80
|
+
* its acknowledged in the last 24, counting only the deliveries whose message
|
|
81
|
+
* `reads` keeps, every one without it. A ship `readsShip` leaves out is shown
|
|
82
|
+
* by name only, without the machine behind it (decision 0034).
|
|
83
|
+
*/
|
|
77
84
|
export declare function readHealthOf(records: HealthRecords, read: {
|
|
78
85
|
fleetId: FleetId;
|
|
79
86
|
now: Date;
|
|
87
|
+
reads?: (message: MessageParties) => boolean;
|
|
88
|
+
readsShip?: (shipId: ShipId) => boolean;
|
|
80
89
|
}): Promise<Health>;
|
|
81
90
|
export declare function healthOf(facts: HealthFacts, read: {
|
|
82
91
|
acknowledged: Acknowledged;
|
|
@@ -36,10 +36,18 @@ export function acknowledgedOf(deliveries, now) {
|
|
|
36
36
|
});
|
|
37
37
|
return { count: inWindow.length, medianMs: medianOf(inWindow.map((delivery) => delivery.acknowledgedAt.getTime() - delivery.sentAt.getTime())), perHour };
|
|
38
38
|
}
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Reads the fleet's health at `now`: its records over the trend's hours and
|
|
41
|
+
* its acknowledged in the last 24, counting only the deliveries whose message
|
|
42
|
+
* `reads` keeps, every one without it. A ship `readsShip` leaves out is shown
|
|
43
|
+
* by name only, without the machine behind it (decision 0034).
|
|
44
|
+
*/
|
|
40
45
|
export async function readHealthOf(records, read) {
|
|
41
|
-
const
|
|
42
|
-
|
|
46
|
+
const { fleetId, now, reads = () => true, readsShip = () => true } = read;
|
|
47
|
+
const [facts, acknowledged] = await Promise.all([records.read(fleetId, healthSince(now)), records.acknowledged(fleetId, acknowledgedSince(now))]);
|
|
48
|
+
const deliveries = facts.deliveries.filter(({ senderId, recipient, claimedBy }) => reads({ senderId, recipient, claimedBy }));
|
|
49
|
+
const machines = facts.machines.filter(({ shipId }) => readsShip(shipId));
|
|
50
|
+
return healthOf({ ...facts, deliveries, machines }, { acknowledged: acknowledgedOf(acknowledged.filter((delivery) => reads(delivery.message)), now), now });
|
|
43
51
|
}
|
|
44
52
|
export function healthOf(facts, read) {
|
|
45
53
|
const shown = (place) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/domain/shared/health.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAA6B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/domain/shared/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DELIVERY_HISTORY_TYPES, type ComputerSide, type LeaseEndReason, type InboxFilter, type DeliveryId, type DeliveryState, type EventId, type EventType, type FleetId, type MessageId, type ShipId } from '@aeolus-fleet/common';
|
|
2
|
-
import type { OverdueClock
|
|
3
|
-
import type { Location } from '../registry/public.js';
|
|
2
|
+
import type { OverdueClock } from '../messaging/public.js';
|
|
3
|
+
import type { Location, MessageParties } from '../registry/public.js';
|
|
4
4
|
import type { StandingOverdue, WayCrew, WayLease } from './delivery-way.js';
|
|
5
5
|
import type { EventDetails } from './events.js';
|
|
6
6
|
/**
|
|
@@ -41,6 +41,11 @@ export interface TimelineEntry {
|
|
|
41
41
|
} | null;
|
|
42
42
|
details: EventDetails;
|
|
43
43
|
}
|
|
44
|
+
/** A message's parties as read reach sees them; for a type, `claimedBy` is the ship that claimed it, if one has. */
|
|
45
|
+
export declare function partiesOf(message: {
|
|
46
|
+
sender: HistoryParty;
|
|
47
|
+
recipient: HistoryRecipient;
|
|
48
|
+
}, claimedBy: HistoryParty | null): MessageParties;
|
|
44
49
|
/** A message as a read shows it: whether it is a ping, told by its content type, so no reader repeats that rule. */
|
|
45
50
|
export type WithPing<T extends {
|
|
46
51
|
contentType: string;
|
|
@@ -54,14 +59,6 @@ export declare function withPing<T extends {
|
|
|
54
59
|
export type ShownTimelineEntry = Omit<TimelineEntry, 'message'> & {
|
|
55
60
|
message: WithPing<NonNullable<TimelineEntry['message']>> | null;
|
|
56
61
|
};
|
|
57
|
-
/** A delivery no ship can take as it is answered, its message telling whether it is a ping. */
|
|
58
|
-
export type ShownNoShipCanTakeEntry = Omit<NoShipCanTakeEntry, 'message'> & {
|
|
59
|
-
message: WithPing<NoShipCanTakeEntry['message']>;
|
|
60
|
-
};
|
|
61
|
-
/** An overdue delivery as it is answered, its message telling whether it is a ping. */
|
|
62
|
-
export type ShownOverdueEntry = Omit<OverdueEntry, 'message'> & {
|
|
63
|
-
message: WithPing<OverdueEntry['message']>;
|
|
64
|
-
};
|
|
65
62
|
/** A delivery in Needs attention as it is answered, its message telling whether it is a ping. */
|
|
66
63
|
export type ShownNeedsAttentionEntry = Omit<NeedsAttentionEntry, 'message'> & {
|
|
67
64
|
message: WithPing<NeedsAttentionEntry['message']>;
|
|
@@ -106,6 +103,8 @@ export interface DeliveryChange {
|
|
|
106
103
|
by: ComputerSide | null;
|
|
107
104
|
/** The number of a pushed hand-over; none for a plain receive's. */
|
|
108
105
|
handOverNumber: number | null;
|
|
106
|
+
/** The channel a pushed hand-over went through, as its computer side named it (interop 5.1). */
|
|
107
|
+
channel: string | null;
|
|
109
108
|
/** A push receive of a delivery its crew already held. */
|
|
110
109
|
isAgain: boolean;
|
|
111
110
|
/** A confirmed message handed once more after its turn died. */
|
|
@@ -168,30 +167,6 @@ export interface NeedsAttentionEntry {
|
|
|
168
167
|
}
|
|
169
168
|
/** The delivery states Needs attention lists, each waiting for the operator to resend or dismiss it. */
|
|
170
169
|
export type NeedsAttentionState = Extract<DeliveryState, 'undeliverable' | 'notHandled'>;
|
|
171
|
-
/**
|
|
172
|
-
* A delivery argo was told is overdue (decision 0040): the ship whose clock
|
|
173
|
-
* ran out, the state it waits in, which clock, when argo was told, and its
|
|
174
|
-
* whole message. Listed until it clears by itself.
|
|
175
|
-
*/
|
|
176
|
-
export interface OverdueEntry {
|
|
177
|
-
deliveryId: DeliveryId;
|
|
178
|
-
ship: HistoryParty;
|
|
179
|
-
state: WaitingState;
|
|
180
|
-
clock: OverdueClock;
|
|
181
|
-
minutes: number;
|
|
182
|
-
toldAt: Date;
|
|
183
|
-
message: Omit<HistoryMessage, 'delivery'>;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* A pending delivery to a type no active ship can take (decision 0041): none
|
|
187
|
-
* of the type is left, or none of the ships its sender may reach (decision
|
|
188
|
-
* 0034). Its type and its whole message; listed until a ship can take it.
|
|
189
|
-
*/
|
|
190
|
-
export interface NoShipCanTakeEntry {
|
|
191
|
-
deliveryId: DeliveryId;
|
|
192
|
-
type: string;
|
|
193
|
-
message: Omit<HistoryMessage, 'delivery'>;
|
|
194
|
-
}
|
|
195
170
|
/** A reply the inbox's ship sent to a message in its inbox. */
|
|
196
171
|
export interface InboxReply {
|
|
197
172
|
id: MessageId;
|
|
@@ -236,14 +211,6 @@ export interface ShipHistory {
|
|
|
236
211
|
message(fleetId: FleetId, messageId: MessageId): Promise<MessageRead | undefined>;
|
|
237
212
|
/** Every undeliverable or not handled delivery, oldest first by since when. */
|
|
238
213
|
needsAttention(fleetId: FleetId): Promise<NeedsAttentionEntry[]>;
|
|
239
|
-
/**
|
|
240
|
-
* Every delivery argo was told is overdue that still stands, oldest told
|
|
241
|
-
* first: still in the state it was told in, on the lease it was told on,
|
|
242
|
-
* which has not ended.
|
|
243
|
-
*/
|
|
244
|
-
overdue(fleetId: FleetId): Promise<OverdueEntry[]>;
|
|
245
|
-
/** Every pending delivery to a type no active ship can take, oldest sent first. */
|
|
246
|
-
noShipCanTake(fleetId: FleetId): Promise<NoShipCanTakeEntry[]>;
|
|
247
214
|
/** What the ship's side of the way is read from: the open lease of the session crewing it and what waits for it. */
|
|
248
215
|
shipWay(fleetId: FleetId, shipId: ShipId): Promise<ShipWayRead | undefined>;
|
|
249
216
|
/** The messages addressed to the ship itself that the filter keeps, newest first. */
|
|
@@ -251,4 +218,6 @@ export interface ShipHistory {
|
|
|
251
218
|
shipId: ShipId;
|
|
252
219
|
filter: InboxFilter;
|
|
253
220
|
}): Promise<InboxEntry[]>;
|
|
221
|
+
/** Each message's parties as read reach sees them, by id; a message the fleet does not have is left out. */
|
|
222
|
+
messageParties(fleetId: FleetId, messageIds: readonly MessageId[]): Promise<ReadonlyMap<MessageId, MessageParties>>;
|
|
254
223
|
}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { DELIVERY_HISTORY_TYPES, isPingContentType, } from '@aeolus-fleet/common';
|
|
2
|
+
/** A message's parties as read reach sees them; for a type, `claimedBy` is the ship that claimed it, if one has. */
|
|
3
|
+
export function partiesOf(message, claimedBy) {
|
|
4
|
+
const { sender, recipient } = message;
|
|
5
|
+
return {
|
|
6
|
+
senderId: sender.id,
|
|
7
|
+
recipient: recipient.kind === 'ship' ? { kind: 'ship', shipId: recipient.ship.id } : recipient,
|
|
8
|
+
claimedBy: claimedBy?.id ?? null,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
2
11
|
export function withPing(message) {
|
|
3
12
|
return { ...message, isPing: isPingContentType(message.contentType) };
|
|
4
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/domain/shared/history.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAWlB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/domain/shared/history.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAWlB,MAAM,sBAAsB,CAAC;AAqC9B,oHAAoH;AACpH,MAAM,UAAU,SAAS,CAAC,OAA8D,EAAE,SAA8B;IACtH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtC,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,SAAS,EAAE,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9F,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;KACjC,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,QAAQ,CAAoC,OAAU;IACpE,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;AACxE,CAAC;AAgCD,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC;AA6GD,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,KAAoB;IAChE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ,CAAC;QAC3E,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,cAAc,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { ReadReachOf } from '../registry/public.js';
|
|
1
2
|
import type { Caller } from './caller.js';
|
|
2
3
|
import type { FleetEventFeed, SequencedEvent } from './events.js';
|
|
4
|
+
import type { ShipHistory } from './history.js';
|
|
3
5
|
/**
|
|
4
6
|
* The most missed events a browser is sent one by one. Further behind, loading
|
|
5
7
|
* the fleet again is cheaper than replaying its history.
|
|
@@ -13,6 +15,7 @@ export declare const REPLAY_LIMIT = 1000;
|
|
|
13
15
|
export type FleetEventsRead = {
|
|
14
16
|
kind: 'events';
|
|
15
17
|
events: SequencedEvent[];
|
|
18
|
+
lastSeq: number;
|
|
16
19
|
} | {
|
|
17
20
|
kind: 'resync';
|
|
18
21
|
seq: number;
|
|
@@ -21,9 +24,12 @@ export type ReadFleetEvents = (caller: Caller, afterSeq: number | undefined) =>
|
|
|
21
24
|
/**
|
|
22
25
|
* Use case: the caller's fleet events after a position, for the live fleet
|
|
23
26
|
* view. Without a position, or more than REPLAY_LIMIT behind, the browser is
|
|
24
|
-
* told to load the fleet again.
|
|
25
|
-
*
|
|
27
|
+
* told to load the fleet again. Only the events the caller reads (decision
|
|
28
|
+
* 0034), with the number of the last it went through, read or not, to follow
|
|
29
|
+
* from next. The caller's scope (fleet:read) is checked before this runs.
|
|
26
30
|
*/
|
|
27
31
|
export declare function createReadFleetEvents(deps: {
|
|
28
32
|
feed: FleetEventFeed;
|
|
33
|
+
history: Pick<ShipHistory, 'messageParties'>;
|
|
34
|
+
readReach: ReadReachOf;
|
|
29
35
|
}): ReadFleetEvents;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { eventsRead } from './events-read.js';
|
|
1
2
|
/**
|
|
2
3
|
* The most missed events a browser is sent one by one. Further behind, loading
|
|
3
4
|
* the fleet again is cheaper than replaying its history.
|
|
@@ -6,8 +7,9 @@ export const REPLAY_LIMIT = 1000;
|
|
|
6
7
|
/**
|
|
7
8
|
* Use case: the caller's fleet events after a position, for the live fleet
|
|
8
9
|
* view. Without a position, or more than REPLAY_LIMIT behind, the browser is
|
|
9
|
-
* told to load the fleet again.
|
|
10
|
-
*
|
|
10
|
+
* told to load the fleet again. Only the events the caller reads (decision
|
|
11
|
+
* 0034), with the number of the last it went through, read or not, to follow
|
|
12
|
+
* from next. The caller's scope (fleet:read) is checked before this runs.
|
|
11
13
|
*/
|
|
12
14
|
export function createReadFleetEvents(deps) {
|
|
13
15
|
const resync = async (caller) => ({
|
|
@@ -18,8 +20,12 @@ export function createReadFleetEvents(deps) {
|
|
|
18
20
|
if (afterSeq === undefined) {
|
|
19
21
|
return resync(caller);
|
|
20
22
|
}
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
+
const gone = await deps.feed.after(caller.fleetId, { seq: afterSeq, limit: REPLAY_LIMIT + 1 });
|
|
24
|
+
if (gone.length > REPLAY_LIMIT) {
|
|
25
|
+
return resync(caller);
|
|
26
|
+
}
|
|
27
|
+
const events = await eventsRead(deps, { fleetId: caller.fleetId, reach: await deps.readReach(caller), events: gone });
|
|
28
|
+
return { kind: 'events', events, lastSeq: gone.at(-1)?.seq ?? afterSeq };
|
|
23
29
|
};
|
|
24
30
|
}
|
|
25
31
|
//# sourceMappingURL=read-fleet-events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-fleet-events.js","sourceRoot":"","sources":["../../../src/domain/shared/read-fleet-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-fleet-events.js","sourceRoot":"","sources":["../../../src/domain/shared/read-fleet-events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAWjC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAoG;IACxI,MAAM,MAAM,GAAG,KAAK,EAAE,MAAc,EAA4B,EAAE,CAAC,CAAC;QAClE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;KAC7C,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QAChC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}
|