doover-js 0.11.0 → 0.13.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 +106 -0
- package/dist/apis/_args.js +5 -5
- package/dist/apis/agents-api.d.ts +4 -4
- package/dist/apis/agents-api.js +2 -2
- package/dist/apis/aggregates-api.d.ts +4 -4
- package/dist/apis/aggregates-api.js +5 -5
- package/dist/apis/alarms-api.d.ts +2 -2
- package/dist/apis/alarms-api.js +3 -3
- package/dist/apis/channels-api.d.ts +3 -3
- package/dist/apis/channels-api.js +6 -6
- package/dist/apis/connections-api.d.ts +2 -2
- package/dist/apis/connections-api.js +6 -6
- package/dist/apis/messages-api.d.ts +4 -4
- package/dist/apis/messages-api.js +11 -11
- package/dist/apis/notifications-api.d.ts +2 -2
- package/dist/apis/notifications-api.js +4 -4
- package/dist/apis/organisations-api.d.ts +2 -2
- package/dist/apis/permissions-api.d.ts +2 -2
- package/dist/apis/permissions-api.js +3 -3
- package/dist/apis/processors-api.d.ts +2 -2
- package/dist/apis/turn-api.d.ts +2 -2
- package/dist/apis/users-api.d.ts +2 -2
- package/dist/auth/auth-store.d.ts +1 -1
- package/dist/auth/build-auth.d.ts +3 -3
- package/dist/auth/build-auth.js +8 -8
- package/dist/auth/cookie-auth.d.ts +1 -1
- package/dist/auth/cookie-auth.js +2 -2
- package/dist/auth/doover-auth.d.ts +2 -2
- package/dist/auth/doover-token-auth.d.ts +3 -3
- package/dist/auth/doover-token-auth.js +13 -13
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.js +15 -0
- package/dist/client/data-client.d.ts +17 -14
- package/dist/client/doover-client.d.ts +9 -7
- package/dist/client/doover-client.js +44 -42
- package/dist/client/errors.d.ts +2 -2
- package/dist/client/errors.js +4 -4
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.js +12 -0
- package/dist/client/local-agent-client.d.ts +3 -3
- package/dist/client/local-agent-client.js +19 -19
- package/dist/client/multiplex-client.d.ts +5 -5
- package/dist/client/multiplex-client.js +25 -25
- package/dist/client/multiplex-gateway.d.ts +3 -3
- package/dist/client/multiplex-merge.d.ts +1 -1
- package/dist/client/network-status.d.ts +17 -0
- package/dist/client/network-status.js +70 -0
- package/dist/client/offline-cache.d.ts +9 -4
- package/dist/client/offline-cache.js +34 -22
- package/dist/client/provenance.d.ts +1 -1
- package/dist/client/request-options.d.ts +1 -1
- package/dist/client/singleton.d.ts +2 -2
- package/dist/client/singleton.js +2 -2
- package/dist/client/status-tracker.d.ts +1 -1
- package/dist/esm/apis/_args.d.ts +16 -0
- package/dist/esm/apis/_args.js +27 -0
- package/dist/esm/apis/agents-api.d.ts +196 -0
- package/dist/esm/apis/agents-api.js +327 -0
- package/dist/esm/apis/aggregates-api.d.ts +67 -0
- package/dist/esm/apis/aggregates-api.js +64 -0
- package/dist/esm/apis/alarms-api.d.ts +48 -0
- package/dist/esm/apis/alarms-api.js +75 -0
- package/dist/esm/apis/channels-api.d.ts +83 -0
- package/dist/esm/apis/channels-api.js +65 -0
- package/dist/esm/apis/connections-api.d.ts +45 -0
- package/dist/esm/apis/connections-api.js +44 -0
- package/dist/esm/apis/messages-api.d.ts +128 -0
- package/dist/esm/apis/messages-api.js +179 -0
- package/dist/esm/apis/notifications-api.d.ts +94 -0
- package/dist/esm/apis/notifications-api.js +153 -0
- package/dist/esm/apis/organisations-api.d.ts +26 -0
- package/dist/esm/apis/organisations-api.js +41 -0
- package/dist/esm/apis/permissions-api.d.ts +17 -0
- package/dist/esm/apis/permissions-api.js +23 -0
- package/dist/esm/apis/processors-api.d.ts +56 -0
- package/dist/esm/apis/processors-api.js +97 -0
- package/dist/esm/apis/turn-api.d.ts +7 -0
- package/dist/esm/apis/turn-api.js +8 -0
- package/dist/esm/apis/users-api.d.ts +8 -0
- package/dist/esm/apis/users-api.js +9 -0
- package/dist/esm/auth/auth-profile.d.ts +45 -0
- package/dist/esm/auth/auth-profile.js +68 -0
- package/dist/esm/auth/auth-store.d.ts +14 -0
- package/dist/esm/auth/build-auth.d.ts +38 -0
- package/dist/esm/auth/build-auth.js +92 -0
- package/dist/esm/auth/cookie-auth.d.ts +91 -0
- package/dist/esm/auth/cookie-auth.js +196 -0
- package/dist/esm/auth/doover-auth.d.ts +52 -0
- package/dist/esm/auth/doover-auth.js +28 -0
- package/dist/esm/auth/doover-token-auth.d.ts +39 -0
- package/dist/esm/auth/doover-token-auth.js +217 -0
- package/dist/esm/auth/errors.d.ts +3 -0
- package/dist/esm/auth/errors.js +6 -0
- package/dist/esm/auth/index.d.ts +10 -0
- package/dist/esm/auth/index.js +6 -0
- package/dist/esm/auth/jwt.d.ts +6 -0
- package/dist/esm/auth/jwt.js +26 -0
- package/dist/esm/client/capabilities.d.ts +10 -0
- package/dist/esm/client/capabilities.js +42 -0
- package/dist/esm/client/data-client.d.ts +107 -0
- package/dist/esm/client/doover-client.d.ts +48 -0
- package/dist/esm/client/doover-client.js +96 -0
- package/dist/esm/client/errors.d.ts +32 -0
- package/dist/esm/client/errors.js +64 -0
- package/dist/esm/client/index.d.ts +6 -0
- package/dist/esm/client/index.js +3 -0
- package/dist/esm/client/local-agent-client.d.ts +65 -0
- package/dist/esm/client/local-agent-client.js +225 -0
- package/dist/esm/client/multiplex-client.d.ts +165 -0
- package/dist/esm/client/multiplex-client.js +842 -0
- package/dist/esm/client/multiplex-gateway.d.ts +49 -0
- package/dist/esm/client/multiplex-gateway.js +110 -0
- package/dist/esm/client/multiplex-merge.d.ts +12 -0
- package/dist/esm/client/multiplex-merge.js +38 -0
- package/dist/esm/client/network-status.d.ts +17 -0
- package/dist/esm/client/network-status.js +66 -0
- package/dist/esm/client/offline-cache.d.ts +167 -0
- package/dist/esm/client/offline-cache.js +769 -0
- package/dist/esm/client/provenance.d.ts +60 -0
- package/dist/esm/client/provenance.js +108 -0
- package/dist/esm/client/request-options.d.ts +23 -0
- package/dist/esm/client/request-options.js +23 -0
- package/dist/esm/client/singleton.d.ts +26 -0
- package/dist/esm/client/singleton.js +54 -0
- package/dist/esm/client/stats.d.ts +79 -0
- package/dist/esm/client/stats.js +155 -0
- package/dist/esm/client/status-tracker.d.ts +24 -0
- package/dist/esm/client/status-tracker.js +86 -0
- package/dist/esm/gateway/gateway-client.d.ts +86 -0
- package/dist/esm/gateway/gateway-client.js +463 -0
- package/dist/esm/gateway/index.d.ts +3 -0
- package/dist/esm/gateway/index.js +1 -0
- package/dist/esm/gateway/types.d.ts +142 -0
- package/dist/esm/http/errors.d.ts +19 -0
- package/dist/esm/http/errors.js +22 -0
- package/dist/esm/http/index.d.ts +3 -0
- package/dist/esm/http/index.js +2 -0
- package/dist/esm/http/rest-client.d.ts +64 -0
- package/dist/esm/http/rest-client.js +181 -0
- package/dist/esm/index.d.ts +64 -0
- package/dist/esm/index.js +38 -0
- package/dist/esm/node/config-manager.d.ts +34 -0
- package/dist/esm/node/config-manager.js +140 -0
- package/dist/esm/node/index.d.ts +1 -0
- package/dist/esm/node/index.js +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/react/context.d.ts +23 -0
- package/dist/esm/react/context.js +28 -0
- package/dist/esm/react/index.d.ts +38 -0
- package/dist/esm/react/index.js +21 -0
- package/dist/esm/react/messageRangeStore.d.ts +93 -0
- package/dist/esm/react/messageRangeStore.js +140 -0
- package/dist/esm/react/sharedQueryClient.d.ts +21 -0
- package/dist/esm/react/sharedQueryClient.js +35 -0
- package/dist/esm/react/useAgentChannel.d.ts +8 -0
- package/dist/esm/react/useAgentChannel.js +9 -0
- package/dist/esm/react/useAgentConnections.d.ts +8 -0
- package/dist/esm/react/useAgentConnections.js +20 -0
- package/dist/esm/react/useAgentTokenState.d.ts +70 -0
- package/dist/esm/react/useAgentTokenState.js +127 -0
- package/dist/esm/react/useChannelAggregate.d.ts +64 -0
- package/dist/esm/react/useChannelAggregate.js +77 -0
- package/dist/esm/react/useChannelMessage.d.ts +45 -0
- package/dist/esm/react/useChannelMessage.js +79 -0
- package/dist/esm/react/useChannelMessages.d.ts +83 -0
- package/dist/esm/react/useChannelMessages.js +214 -0
- package/dist/esm/react/useChannelSubscription.d.ts +27 -0
- package/dist/esm/react/useChannelSubscription.js +30 -0
- package/dist/esm/react/useClientStatus.d.ts +10 -0
- package/dist/esm/react/useClientStatus.js +19 -0
- package/dist/esm/react/useConnectionState.d.ts +26 -0
- package/dist/esm/react/useConnectionState.js +45 -0
- package/dist/esm/react/useDeviceMap.d.ts +109 -0
- package/dist/esm/react/useDeviceMap.js +59 -0
- package/dist/esm/react/useInvocationLogs.d.ts +23 -0
- package/dist/esm/react/useInvocationLogs.js +37 -0
- package/dist/esm/react/useMultiAgentAggregates.d.ts +38 -0
- package/dist/esm/react/useMultiAgentAggregates.js +104 -0
- package/dist/esm/react/useMultiAgentChannelMessages.d.ts +79 -0
- package/dist/esm/react/useMultiAgentChannelMessages.js +169 -0
- package/dist/esm/react/useOfflineStatus.d.ts +8 -0
- package/dist/esm/react/useOfflineStatus.js +37 -0
- package/dist/esm/react/useSendMessage.d.ts +16 -0
- package/dist/esm/react/useSendMessage.js +26 -0
- package/dist/esm/react/useSendRpc.d.ts +68 -0
- package/dist/esm/react/useSendRpc.js +164 -0
- package/dist/esm/react/useTurnCredentials.d.ts +12 -0
- package/dist/esm/react/useTurnCredentials.js +22 -0
- package/dist/esm/react/useUpdateAggregate.d.ts +27 -0
- package/dist/esm/react/useUpdateAggregate.js +39 -0
- package/dist/esm/react/useUpdateMessage.d.ts +38 -0
- package/dist/esm/react/useUpdateMessage.js +36 -0
- package/dist/esm/refine/index.d.ts +72 -0
- package/dist/esm/refine/index.js +215 -0
- package/dist/esm/rpc/errors.d.ts +10 -0
- package/dist/esm/rpc/errors.js +19 -0
- package/dist/esm/rpc/index.d.ts +3 -0
- package/dist/esm/rpc/index.js +2 -0
- package/dist/esm/rpc/rpc-dispatcher.d.ts +41 -0
- package/dist/esm/rpc/rpc-dispatcher.js +141 -0
- package/dist/esm/types/audit.d.ts +53 -0
- package/dist/esm/types/audit.js +11 -0
- package/dist/esm/types/batch.d.ts +85 -0
- package/dist/esm/types/batch.js +42 -0
- package/dist/esm/types/common.d.ts +250 -0
- package/dist/esm/types/connection.d.ts +72 -0
- package/dist/esm/types/connection.js +7 -0
- package/dist/esm/types/index.d.ts +9 -0
- package/dist/esm/types/openapi.d.ts +195 -0
- package/dist/esm/types/provenance.d.ts +45 -0
- package/dist/esm/types/viewer.d.ts +122 -0
- package/dist/esm/utils/snowflake.d.ts +21 -0
- package/dist/esm/utils/snowflake.js +33 -0
- package/dist/esm/viewer/doover-data-provider.d.ts +90 -0
- package/dist/esm/viewer/doover-data-provider.js +189 -0
- package/dist/esm/viewer/path-parsing.d.ts +5 -0
- package/dist/esm/viewer/path-parsing.js +35 -0
- package/dist/gateway/gateway-client.d.ts +5 -5
- package/dist/gateway/gateway-client.js +5 -5
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.js +5 -0
- package/dist/gateway/types.d.ts +1 -1
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.js +9 -0
- package/dist/http/rest-client.d.ts +5 -3
- package/dist/http/rest-client.js +2 -2
- package/dist/index.d.ts +64 -62
- package/dist/index.js +92 -89
- package/dist/node/config-manager.d.ts +2 -2
- package/dist/node/config-manager.js +5 -5
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.js +2 -2
- package/dist/react/context.d.ts +1 -1
- package/dist/react/index.d.ts +38 -38
- package/dist/react/index.js +59 -59
- package/dist/react/messageRangeStore.d.ts +1 -1
- package/dist/react/useAgentChannel.d.ts +3 -3
- package/dist/react/useAgentChannel.js +2 -2
- package/dist/react/useAgentConnections.d.ts +1 -1
- package/dist/react/useAgentConnections.js +2 -2
- package/dist/react/useAgentTokenState.d.ts +3 -3
- package/dist/react/useAgentTokenState.js +8 -8
- package/dist/react/useChannelAggregate.d.ts +3 -3
- package/dist/react/useChannelAggregate.js +8 -8
- package/dist/react/useChannelMessage.d.ts +2 -2
- package/dist/react/useChannelMessage.js +4 -4
- package/dist/react/useChannelMessages.d.ts +3 -3
- package/dist/react/useChannelMessages.js +10 -10
- package/dist/react/useChannelSubscription.d.ts +2 -2
- package/dist/react/useChannelSubscription.js +2 -2
- package/dist/react/useClientStatus.d.ts +1 -1
- package/dist/react/useClientStatus.js +2 -2
- package/dist/react/useConnectionState.js +2 -2
- package/dist/react/useDeviceMap.js +2 -2
- package/dist/react/useInvocationLogs.d.ts +1 -1
- package/dist/react/useInvocationLogs.js +2 -2
- package/dist/react/useMultiAgentAggregates.d.ts +1 -1
- package/dist/react/useMultiAgentAggregates.js +5 -5
- package/dist/react/useMultiAgentChannelMessages.d.ts +1 -1
- package/dist/react/useMultiAgentChannelMessages.js +2 -2
- package/dist/react/useOfflineStatus.d.ts +2 -2
- package/dist/react/useOfflineStatus.js +31 -17
- package/dist/react/useSendMessage.d.ts +2 -2
- package/dist/react/useSendMessage.js +2 -2
- package/dist/react/useSendRpc.d.ts +2 -2
- package/dist/react/useSendRpc.js +2 -2
- package/dist/react/useTurnCredentials.d.ts +2 -2
- package/dist/react/useTurnCredentials.js +2 -2
- package/dist/react/useUpdateAggregate.d.ts +3 -3
- package/dist/react/useUpdateAggregate.js +4 -4
- package/dist/react/useUpdateMessage.d.ts +2 -2
- package/dist/react/useUpdateMessage.js +2 -2
- package/dist/refine/index.d.ts +1 -1
- package/dist/rpc/errors.d.ts +1 -1
- package/dist/rpc/index.d.ts +3 -0
- package/dist/rpc/index.js +7 -0
- package/dist/rpc/rpc-dispatcher.d.ts +4 -4
- package/dist/rpc/rpc-dispatcher.js +2 -2
- package/dist/types/common.d.ts +1 -1
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.js +2 -0
- package/dist/types/openapi.d.ts +1 -1
- package/dist/types/viewer.d.ts +2 -2
- package/dist/viewer/doover-data-provider.d.ts +10 -10
- package/dist/viewer/doover-data-provider.js +25 -25
- package/dist/viewer/path-parsing.d.ts +1 -1
- package/package.json +795 -8
- package/dist/test/api-args.test.js +0 -48
- package/dist/test/api-overloads.test.d.ts +0 -9
- package/dist/test/api-overloads.test.js +0 -330
- package/dist/test/apis.test.js +0 -408
- package/dist/test/auth.test.js +0 -708
- package/dist/test/batch-apis.test.js +0 -183
- package/dist/test/capabilities.test.js +0 -27
- package/dist/test/config-manager.test.js +0 -160
- package/dist/test/data-client-errors.test.js +0 -24
- package/dist/test/data-client-shape.test.js +0 -28
- package/dist/test/doover-client-dataclient.test.d.ts +0 -1
- package/dist/test/doover-client-dataclient.test.js +0 -58
- package/dist/test/doover-client-provenance.test.d.ts +0 -1
- package/dist/test/doover-client-provenance.test.js +0 -32
- package/dist/test/doover-client.test.d.ts +0 -1
- package/dist/test/doover-client.test.js +0 -42
- package/dist/test/doover-data-provider.test.d.ts +0 -1
- package/dist/test/doover-data-provider.test.js +0 -657
- package/dist/test/exports.test.d.ts +0 -1
- package/dist/test/exports.test.js +0 -80
- package/dist/test/gateway-client.test.d.ts +0 -1
- package/dist/test/gateway-client.test.js +0 -474
- package/dist/test/gateway-provenance.test.d.ts +0 -1
- package/dist/test/gateway-provenance.test.js +0 -29
- package/dist/test/gateway-subscriptions.test.d.ts +0 -1
- package/dist/test/gateway-subscriptions.test.js +0 -95
- package/dist/test/helpers.d.ts +0 -32
- package/dist/test/helpers.js +0 -115
- package/dist/test/local-agent-client.test.d.ts +0 -1
- package/dist/test/local-agent-client.test.js +0 -202
- package/dist/test/message-range-store.test.d.ts +0 -1
- package/dist/test/message-range-store.test.js +0 -183
- package/dist/test/multiplex-capabilities.test.d.ts +0 -1
- package/dist/test/multiplex-capabilities.test.js +0 -37
- package/dist/test/multiplex-conflicts.test.d.ts +0 -1
- package/dist/test/multiplex-conflicts.test.js +0 -35
- package/dist/test/multiplex-gateway.test.d.ts +0 -1
- package/dist/test/multiplex-gateway.test.js +0 -103
- package/dist/test/multiplex-merge.test.d.ts +0 -1
- package/dist/test/multiplex-merge.test.js +0 -19
- package/dist/test/multiplex-noncore.test.d.ts +0 -1
- package/dist/test/multiplex-noncore.test.js +0 -82
- package/dist/test/multiplex-passthrough.test.d.ts +0 -1
- package/dist/test/multiplex-passthrough.test.js +0 -35
- package/dist/test/multiplex-reads.test.d.ts +0 -1
- package/dist/test/multiplex-reads.test.js +0 -87
- package/dist/test/multiplex-registry.test.d.ts +0 -1
- package/dist/test/multiplex-registry.test.js +0 -81
- package/dist/test/multiplex-routing.test.d.ts +0 -1
- package/dist/test/multiplex-routing.test.js +0 -45
- package/dist/test/multiplex-status.test.d.ts +0 -1
- package/dist/test/multiplex-status.test.js +0 -63
- package/dist/test/multiplex-writes.test.d.ts +0 -1
- package/dist/test/multiplex-writes.test.js +0 -93
- package/dist/test/offline-cache.test.d.ts +0 -1
- package/dist/test/offline-cache.test.js +0 -289
- package/dist/test/provenance-regression.test.d.ts +0 -1
- package/dist/test/provenance-regression.test.js +0 -45
- package/dist/test/provenance-stamper.test.d.ts +0 -1
- package/dist/test/provenance-stamper.test.js +0 -41
- package/dist/test/provenance-type.test.d.ts +0 -1
- package/dist/test/provenance-type.test.js +0 -15
- package/dist/test/react-channel-messages-forward.test.d.ts +0 -1
- package/dist/test/react-channel-messages-forward.test.js +0 -139
- package/dist/test/react-channel-messages-range.test.d.ts +0 -1
- package/dist/test/react-channel-messages-range.test.js +0 -109
- package/dist/test/react-client-status.test.d.ts +0 -1
- package/dist/test/react-client-status.test.js +0 -35
- package/dist/test/react-dataclient.test.d.ts +0 -1
- package/dist/test/react-dataclient.test.js +0 -28
- package/dist/test/react-exports.test.d.ts +0 -1
- package/dist/test/react-exports.test.js +0 -46
- package/dist/test/react-multiagent-messages.test.d.ts +0 -1
- package/dist/test/react-multiagent-messages.test.js +0 -113
- package/dist/test/react-sources-option.test.d.ts +0 -1
- package/dist/test/react-sources-option.test.js +0 -41
- package/dist/test/react.test.d.ts +0 -1
- package/dist/test/react.test.js +0 -482
- package/dist/test/refine.test.d.ts +0 -1
- package/dist/test/refine.test.js +0 -71
- package/dist/test/rest-client.test.d.ts +0 -1
- package/dist/test/rest-client.test.js +0 -197
- package/dist/test/rpc-dispatcher.test.d.ts +0 -1
- package/dist/test/rpc-dispatcher.test.js +0 -251
- package/dist/test/singleton.test.d.ts +0 -1
- package/dist/test/singleton.test.js +0 -62
- package/dist/test/stats-rpc.test.d.ts +0 -1
- package/dist/test/stats-rpc.test.js +0 -69
- package/dist/test/status-tracker.test.d.ts +0 -1
- package/dist/test/status-tracker.test.js +0 -85
- package/dist/test/users-api.test.d.ts +0 -1
- package/dist/test/users-api.test.js +0 -19
- package/dist/test/utils.test.d.ts +0 -1
- package/dist/test/utils.test.js +0 -64
- /package/dist/{test/api-args.test.d.ts → esm/auth/auth-store.js} +0 -0
- /package/dist/{test/apis.test.d.ts → esm/client/data-client.js} +0 -0
- /package/dist/{test/auth.test.d.ts → esm/gateway/types.js} +0 -0
- /package/dist/{test/batch-apis.test.d.ts → esm/types/common.js} +0 -0
- /package/dist/{test/capabilities.test.d.ts → esm/types/index.js} +0 -0
- /package/dist/{test/config-manager.test.d.ts → esm/types/openapi.js} +0 -0
- /package/dist/{test/data-client-errors.test.d.ts → esm/types/provenance.js} +0 -0
- /package/dist/{test/data-client-shape.test.d.ts → esm/types/viewer.js} +0 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { SourceProvenance } from "./provenance.js";
|
|
2
|
+
import type { Aggregate, Channel, ConnectionDetails, MessageStructure } from "./common.js";
|
|
3
|
+
export interface ChannelIdentifier {
|
|
4
|
+
agentId?: string;
|
|
5
|
+
channelName?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Agent {
|
|
9
|
+
id: string;
|
|
10
|
+
organisation: string;
|
|
11
|
+
name: string;
|
|
12
|
+
display_name: string;
|
|
13
|
+
archived: boolean;
|
|
14
|
+
group: string;
|
|
15
|
+
fa_icon: string;
|
|
16
|
+
type: "device" | "dashboard" | "organisation" | "user";
|
|
17
|
+
fixed_location: {
|
|
18
|
+
latitude: number;
|
|
19
|
+
longitude: number;
|
|
20
|
+
};
|
|
21
|
+
extra_config: Record<string, unknown>;
|
|
22
|
+
connection_determination?: "Online" | "Offline";
|
|
23
|
+
__source?: SourceProvenance;
|
|
24
|
+
}
|
|
25
|
+
export interface User {
|
|
26
|
+
id: string;
|
|
27
|
+
email?: string;
|
|
28
|
+
name?: string;
|
|
29
|
+
__source?: SourceProvenance;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
export interface Theme {
|
|
33
|
+
[key: string]: unknown;
|
|
34
|
+
}
|
|
35
|
+
export interface OrganisationDomain {
|
|
36
|
+
id: string;
|
|
37
|
+
hostname: string;
|
|
38
|
+
default: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface Organisation {
|
|
41
|
+
id: string;
|
|
42
|
+
name: string;
|
|
43
|
+
archived: boolean;
|
|
44
|
+
application_id: string;
|
|
45
|
+
domains: OrganisationDomain[];
|
|
46
|
+
root_group?: unknown;
|
|
47
|
+
retention_period?: number;
|
|
48
|
+
legacy_doover_api_key?: string | null;
|
|
49
|
+
llm_api_key?: string | null;
|
|
50
|
+
extra_config?: Record<string, unknown>;
|
|
51
|
+
theme?: Theme;
|
|
52
|
+
__source?: SourceProvenance;
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
}
|
|
55
|
+
export interface CustomerSite {
|
|
56
|
+
id: string;
|
|
57
|
+
name: string;
|
|
58
|
+
application_id: string;
|
|
59
|
+
archived: boolean;
|
|
60
|
+
theme: Theme;
|
|
61
|
+
}
|
|
62
|
+
export interface PaginatedResponse<T> {
|
|
63
|
+
count: number;
|
|
64
|
+
results: T[];
|
|
65
|
+
next?: string | null;
|
|
66
|
+
previous?: string | null;
|
|
67
|
+
[key: string]: unknown;
|
|
68
|
+
}
|
|
69
|
+
export interface GetAgentsOptions {
|
|
70
|
+
includeArchived?: boolean;
|
|
71
|
+
includeOrganisations?: boolean;
|
|
72
|
+
includeUsers?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* When `true`, normalized organisations and users are appended into the
|
|
75
|
+
* canonical `agents` list (and mirrored to `results` / `count`). Defaults
|
|
76
|
+
* to `false`, which preserves the legacy behaviour of returning only the
|
|
77
|
+
* raw `agents` array.
|
|
78
|
+
*/
|
|
79
|
+
mergeIncludedAsAgents?: boolean;
|
|
80
|
+
}
|
|
81
|
+
export interface AgentsResponse {
|
|
82
|
+
agents?: Agent[];
|
|
83
|
+
results?: Agent[];
|
|
84
|
+
count?: number;
|
|
85
|
+
[key: string]: unknown;
|
|
86
|
+
}
|
|
87
|
+
export interface SubscriptionDetails {
|
|
88
|
+
channel: {
|
|
89
|
+
agent_id: string;
|
|
90
|
+
name: string;
|
|
91
|
+
};
|
|
92
|
+
connection_id: string;
|
|
93
|
+
subscribed_at: number;
|
|
94
|
+
}
|
|
95
|
+
export interface ChannelsDataProvider<TIdentifier extends ChannelIdentifier = ChannelIdentifier> {
|
|
96
|
+
getMe: () => Promise<User>;
|
|
97
|
+
getAgents: (options?: GetAgentsOptions) => Promise<AgentsResponse>;
|
|
98
|
+
getChannels: (identifier: TIdentifier, options?: {
|
|
99
|
+
includeArchived?: boolean;
|
|
100
|
+
}) => Promise<Channel[] | undefined>;
|
|
101
|
+
createChannel: (identifier: TIdentifier, channelName: string, options?: {
|
|
102
|
+
is_private?: boolean;
|
|
103
|
+
}) => Promise<unknown>;
|
|
104
|
+
archiveChannel: (identifier: TIdentifier) => Promise<unknown>;
|
|
105
|
+
unarchiveChannel: (identifier: TIdentifier) => Promise<unknown>;
|
|
106
|
+
getChannel: (identifier: TIdentifier) => Promise<Channel | undefined>;
|
|
107
|
+
subscribeToChannel: (identifier: TIdentifier, callback: (identifier: ChannelIdentifier, message: MessageStructure) => void, aggregateCallback: (identifier: ChannelIdentifier, aggregate: Aggregate) => void) => Promise<void | undefined>;
|
|
108
|
+
unsubscribeFromChannel: (identifier: TIdentifier, callback: (identifier: ChannelIdentifier, message: MessageStructure) => void) => Promise<void | undefined>;
|
|
109
|
+
getAggregate: (identifier: TIdentifier) => Promise<Aggregate | undefined>;
|
|
110
|
+
getMessages: (identifier: TIdentifier, beforeId?: string) => Promise<MessageStructure[] | undefined>;
|
|
111
|
+
deleteMessage: (identifier: TIdentifier, messageId: string) => Promise<unknown>;
|
|
112
|
+
sendMessage: (identifier: TIdentifier, message: object) => Promise<MessageStructure>;
|
|
113
|
+
updateAggregate: (identifier: TIdentifier, message: object) => Promise<Aggregate>;
|
|
114
|
+
putAggregate: (identifier: TIdentifier, message: object) => Promise<Aggregate>;
|
|
115
|
+
getChannelSubscriptions: (identifier: TIdentifier) => Promise<SubscriptionDetails[]>;
|
|
116
|
+
getAgentConnections: (identifier: TIdentifier) => Promise<ConnectionDetails[]>;
|
|
117
|
+
getIdentifierFromPath: (path: string, searchParams: URLSearchParams) => {
|
|
118
|
+
identifier: TIdentifier;
|
|
119
|
+
aggregatePath?: string;
|
|
120
|
+
};
|
|
121
|
+
getAgentInfo: (agentId: string) => Promise<Agent | undefined>;
|
|
122
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snowflake id for a point in time, floored at the epoch.
|
|
3
|
+
*
|
|
4
|
+
* Ids are unsigned, so a pre-epoch time has no id to generate. Returning the
|
|
5
|
+
* negative arithmetic result produced a value the API rejects outright
|
|
6
|
+
* ("expected a snowflake id value"), failing the whole request; `0` is the
|
|
7
|
+
* oldest addressable id, which is what a caller reaching further back wants.
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateSnowflakeIdAtTime(time: {
|
|
10
|
+
valueOf(): number;
|
|
11
|
+
}): string;
|
|
12
|
+
export declare function extractSnowflakeId(id: string): {
|
|
13
|
+
timestamp: number;
|
|
14
|
+
machineId: number;
|
|
15
|
+
sequence: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function addTimestampToMessage<T extends {
|
|
18
|
+
id: string;
|
|
19
|
+
}>(message: T): T & {
|
|
20
|
+
timestamp: number;
|
|
21
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Doover's snowflake epoch: 2025-01-01T00:00:00Z. Nothing predates it. */
|
|
2
|
+
const SNOWFLAKE_EPOCH_MS = 1735689600000;
|
|
3
|
+
/**
|
|
4
|
+
* Snowflake id for a point in time, floored at the epoch.
|
|
5
|
+
*
|
|
6
|
+
* Ids are unsigned, so a pre-epoch time has no id to generate. Returning the
|
|
7
|
+
* negative arithmetic result produced a value the API rejects outright
|
|
8
|
+
* ("expected a snowflake id value"), failing the whole request; `0` is the
|
|
9
|
+
* oldest addressable id, which is what a caller reaching further back wants.
|
|
10
|
+
*/
|
|
11
|
+
export function generateSnowflakeIdAtTime(time) {
|
|
12
|
+
const offsetMs = time.valueOf() - SNOWFLAKE_EPOCH_MS;
|
|
13
|
+
if (Number.isNaN(offsetMs)) {
|
|
14
|
+
throw new TypeError("generateSnowflakeIdAtTime received an invalid time");
|
|
15
|
+
}
|
|
16
|
+
const bigId = BigInt(Math.max(0, offsetMs)) << 22n;
|
|
17
|
+
return bigId.toString();
|
|
18
|
+
}
|
|
19
|
+
export function extractSnowflakeId(id) {
|
|
20
|
+
const offset = 1735689600000n;
|
|
21
|
+
return {
|
|
22
|
+
timestamp: Number((BigInt(id) >> 22n) + offset),
|
|
23
|
+
machineId: Number((BigInt(id) >> 12n) & 1023n),
|
|
24
|
+
sequence: Number(BigInt(id) & 4095n),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function addTimestampToMessage(message) {
|
|
28
|
+
const extracted = extractSnowflakeId(message.id);
|
|
29
|
+
return {
|
|
30
|
+
...message,
|
|
31
|
+
timestamp: extracted.timestamp,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { AgentsApi } from "../apis/agents-api.js";
|
|
2
|
+
import { AggregatesApi, type AggregateMutationParams } from "../apis/aggregates-api.js";
|
|
3
|
+
import { ChannelsApi } from "../apis/channels-api.js";
|
|
4
|
+
import { ConnectionsApi } from "../apis/connections-api.js";
|
|
5
|
+
import { MessagesApi, type ListMessagesParams } from "../apis/messages-api.js";
|
|
6
|
+
import type { DooverAuth } from "../auth/doover-auth.js";
|
|
7
|
+
import { GatewayClient } from "../gateway/gateway-client.js";
|
|
8
|
+
import { RestClient, type DooverClientConfig } from "../http/rest-client.js";
|
|
9
|
+
import type { Aggregate, Channel, ConnectionDetails, JSONValue, MessageStructure, RpcRequest, RpcStatus } from "../types/common.js";
|
|
10
|
+
import type { Agent, AgentsResponse, ChannelIdentifier, ChannelsDataProvider, GetAgentsOptions, SubscriptionDetails, User } from "../types/viewer.js";
|
|
11
|
+
interface SubscriptionEntry {
|
|
12
|
+
messageCallback: (identifier: ChannelIdentifier, message: MessageStructure) => void;
|
|
13
|
+
aggregateCallback: (identifier: ChannelIdentifier, aggregate: Aggregate) => void;
|
|
14
|
+
/**
|
|
15
|
+
* `message` is the full post-update MessageStructure (server-side `.message`
|
|
16
|
+
* field). `request_data` is the diff of just-changed fields, or undefined
|
|
17
|
+
* if the server didn't provide one. Most consumers only need `message`.
|
|
18
|
+
*/
|
|
19
|
+
messageUpdateCallback?: (identifier: ChannelIdentifier, message: MessageStructure, request_data?: JSONValue) => void;
|
|
20
|
+
}
|
|
21
|
+
/** @deprecated Use DooverClient subclients directly. Removed in 0.6.0. */
|
|
22
|
+
export declare class DooverDataProvider implements ChannelsDataProvider<ChannelIdentifier> {
|
|
23
|
+
readonly rest: RestClient;
|
|
24
|
+
readonly gateway: GatewayClient;
|
|
25
|
+
readonly agentsApi: AgentsApi;
|
|
26
|
+
readonly channelsApi: ChannelsApi;
|
|
27
|
+
readonly messagesApi: MessagesApi;
|
|
28
|
+
readonly aggregatesApi: AggregatesApi;
|
|
29
|
+
readonly connectionsApi: ConnectionsApi;
|
|
30
|
+
private readonly controlApiUrl?;
|
|
31
|
+
private bridges;
|
|
32
|
+
private dispatcher?;
|
|
33
|
+
constructor(config: DooverClientConfig, auth?: DooverAuth);
|
|
34
|
+
constructor(injected: {
|
|
35
|
+
rest: RestClient;
|
|
36
|
+
gateway: GatewayClient;
|
|
37
|
+
controlApiUrl?: string;
|
|
38
|
+
});
|
|
39
|
+
/** @deprecated Use `client.users.getMe()` instead. Removed in 0.6.0. */
|
|
40
|
+
getMe(): Promise<User>;
|
|
41
|
+
/** @deprecated Use `client.agents.listAgents(opts)` instead. Removed in 0.6.0. */
|
|
42
|
+
getAgents(options?: GetAgentsOptions): Promise<AgentsResponse>;
|
|
43
|
+
/** @deprecated Use `client.channels.listChannels(id, opts)` instead. Removed in 0.6.0. */
|
|
44
|
+
getChannels(identifier: ChannelIdentifier, options?: {
|
|
45
|
+
includeArchived?: boolean;
|
|
46
|
+
}): Promise<Channel[] | undefined>;
|
|
47
|
+
/** @deprecated Use `client.channels.putChannel(id, name, body)` instead. Removed in 0.6.0. */
|
|
48
|
+
createChannel(identifier: ChannelIdentifier, channelName: string, options?: {
|
|
49
|
+
is_private?: boolean;
|
|
50
|
+
}): Promise<unknown>;
|
|
51
|
+
/** @deprecated Use `client.channels.archiveChannel(id)` instead. Removed in 0.6.0. */
|
|
52
|
+
archiveChannel(identifier: ChannelIdentifier): Promise<unknown>;
|
|
53
|
+
/** @deprecated Use `client.channels.unarchiveChannel(id)` instead. Removed in 0.6.0. */
|
|
54
|
+
unarchiveChannel(identifier: ChannelIdentifier): Promise<unknown>;
|
|
55
|
+
/** @deprecated Use `client.channels.getChannel(id)` instead. Removed in 0.6.0. */
|
|
56
|
+
getChannel(identifier: ChannelIdentifier): Promise<Channel | undefined>;
|
|
57
|
+
/** @deprecated Use `client.gateway.subscribeToChannel(channel, handlers)` instead. Removed in 0.6.0. */
|
|
58
|
+
subscribeToChannel(identifier: ChannelIdentifier, callback: SubscriptionEntry["messageCallback"], aggregateCallback: SubscriptionEntry["aggregateCallback"], messageUpdateCallback?: SubscriptionEntry["messageUpdateCallback"]): Promise<void>;
|
|
59
|
+
/** @deprecated Call the unsubscribe fn returned by `client.gateway.subscribeToChannel`. Removed in 0.6.0. */
|
|
60
|
+
unsubscribeFromChannel(_identifier: ChannelIdentifier, callback: SubscriptionEntry["messageCallback"]): Promise<void>;
|
|
61
|
+
/** @deprecated Compose `client.channels.getChannel(id).then(c => c.aggregate ?? client.aggregates.getAggregate(id))` instead. Removed in 0.6.0. */
|
|
62
|
+
getAggregate(identifier: ChannelIdentifier): Promise<Aggregate | undefined>;
|
|
63
|
+
/** @deprecated Use `client.messages.listMessages(id, { ...opts, order: "asc" })` instead. Removed in 0.6.0. */
|
|
64
|
+
getMessages(identifier: ChannelIdentifier, optionsOrBefore?: string | ListMessagesParams): Promise<MessageStructure[] | undefined>;
|
|
65
|
+
/** @deprecated Use `client.messages.deleteMessage(id, msgId)` instead. Removed in 0.6.0. */
|
|
66
|
+
deleteMessage(identifier: ChannelIdentifier, messageId: string): Promise<unknown>;
|
|
67
|
+
/** @deprecated Use `client.messages.postMessage(id, { data })` instead. Removed in 0.6.0. */
|
|
68
|
+
sendMessage(identifier: ChannelIdentifier, message: object): Promise<MessageStructure>;
|
|
69
|
+
/** @deprecated Use `client.rpc.send(id, req, opts)` instead. Removed in 0.6.0. */
|
|
70
|
+
sendRPC<TRequest = object, TResponse = object, TPending = undefined>(identifier: ChannelIdentifier, rpcRequest: RpcRequest<TRequest>, options?: {
|
|
71
|
+
onStatus?: (status: RpcStatus<TPending>) => void;
|
|
72
|
+
}): Promise<TResponse>;
|
|
73
|
+
/** @deprecated Use `client.aggregates.patchAggregate(id, data, params)` instead. Removed in 0.6.0. */
|
|
74
|
+
updateAggregate(identifier: ChannelIdentifier, message: object, params?: AggregateMutationParams): Promise<Aggregate>;
|
|
75
|
+
/** @deprecated Use `client.aggregates.putAggregate(id, data, params)` instead. Removed in 0.6.0. */
|
|
76
|
+
putAggregate(identifier: ChannelIdentifier, message: object, params?: AggregateMutationParams): Promise<Aggregate>;
|
|
77
|
+
/** @deprecated Use `client.connections.getChannelSubscriptions(id)` instead. Removed in 0.6.0. */
|
|
78
|
+
getChannelSubscriptions(identifier: ChannelIdentifier): Promise<SubscriptionDetails[]>;
|
|
79
|
+
/** @deprecated Use `client.connections.getAgentConnections(id)` instead. Removed in 0.6.0. */
|
|
80
|
+
getAgentConnections(identifier: ChannelIdentifier): Promise<ConnectionDetails[]>;
|
|
81
|
+
/** @deprecated Use the free function `getIdentifierFromPath(path, search)` instead. Removed in 0.6.0. */
|
|
82
|
+
getIdentifierFromPath(path: string, searchParams: URLSearchParams): {
|
|
83
|
+
identifier: ChannelIdentifier;
|
|
84
|
+
aggregatePath?: string;
|
|
85
|
+
};
|
|
86
|
+
/** @deprecated No replacement — this was a synthesized stub. Removed in 0.6.0. */
|
|
87
|
+
getAgentInfo(agentId: string): Promise<Agent | undefined>;
|
|
88
|
+
private requireChannel;
|
|
89
|
+
}
|
|
90
|
+
export {};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { AgentsApi } from "../apis/agents-api.js";
|
|
2
|
+
import { AggregatesApi } from "../apis/aggregates-api.js";
|
|
3
|
+
import { ChannelsApi } from "../apis/channels-api.js";
|
|
4
|
+
import { ConnectionsApi } from "../apis/connections-api.js";
|
|
5
|
+
import { MessagesApi } from "../apis/messages-api.js";
|
|
6
|
+
import { UsersApi } from "../apis/users-api.js";
|
|
7
|
+
import { GatewayClient } from "../gateway/gateway-client.js";
|
|
8
|
+
import { DooverValidationError } from "../http/errors.js";
|
|
9
|
+
import { RestClient } from "../http/rest-client.js";
|
|
10
|
+
import { RpcDispatcher } from "../rpc/rpc-dispatcher.js";
|
|
11
|
+
import { getIdentifierFromPath as parseIdentifierFromPath } from "./path-parsing.js";
|
|
12
|
+
/** @deprecated Use DooverClient subclients directly. Removed in 0.6.0. */
|
|
13
|
+
export class DooverDataProvider {
|
|
14
|
+
// implementation
|
|
15
|
+
constructor(configOrInjected, auth) {
|
|
16
|
+
this.bridges = new Map();
|
|
17
|
+
if ("rest" in configOrInjected && "gateway" in configOrInjected) {
|
|
18
|
+
this.rest = configOrInjected.rest;
|
|
19
|
+
this.gateway = configOrInjected.gateway;
|
|
20
|
+
this.controlApiUrl = configOrInjected.controlApiUrl;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.rest = new RestClient(configOrInjected, auth);
|
|
24
|
+
this.gateway = new GatewayClient(configOrInjected, auth);
|
|
25
|
+
this.controlApiUrl = configOrInjected.controlApiUrl;
|
|
26
|
+
}
|
|
27
|
+
this.agentsApi = new AgentsApi(this.rest, this.controlApiUrl);
|
|
28
|
+
this.channelsApi = new ChannelsApi(this.rest);
|
|
29
|
+
this.messagesApi = new MessagesApi(this.rest);
|
|
30
|
+
this.aggregatesApi = new AggregatesApi(this.rest);
|
|
31
|
+
this.connectionsApi = new ConnectionsApi(this.rest);
|
|
32
|
+
}
|
|
33
|
+
/** @deprecated Use `client.users.getMe()` instead. Removed in 0.6.0. */
|
|
34
|
+
getMe() {
|
|
35
|
+
return new UsersApi(this.rest, this.controlApiUrl).getMe();
|
|
36
|
+
}
|
|
37
|
+
/** @deprecated Use `client.agents.listAgents(opts)` instead. Removed in 0.6.0. */
|
|
38
|
+
async getAgents(options) {
|
|
39
|
+
return this.agentsApi.listAgents(options);
|
|
40
|
+
}
|
|
41
|
+
/** @deprecated Use `client.channels.listChannels(id, opts)` instead. Removed in 0.6.0. */
|
|
42
|
+
async getChannels(identifier, options) {
|
|
43
|
+
if (!identifier.agentId)
|
|
44
|
+
return undefined;
|
|
45
|
+
return this.channelsApi.listChannels(identifier.agentId, {
|
|
46
|
+
include_archived: options?.includeArchived,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** @deprecated Use `client.channels.putChannel(id, name, body)` instead. Removed in 0.6.0. */
|
|
50
|
+
createChannel(identifier, channelName, options) {
|
|
51
|
+
if (!identifier.agentId) {
|
|
52
|
+
throw new DooverValidationError("Identifier must contain agentId");
|
|
53
|
+
}
|
|
54
|
+
return this.channelsApi.putChannel(identifier.agentId, channelName, {
|
|
55
|
+
is_private: options?.is_private ?? false,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** @deprecated Use `client.channels.archiveChannel(id)` instead. Removed in 0.6.0. */
|
|
59
|
+
archiveChannel(identifier) {
|
|
60
|
+
const v = this.requireChannel(identifier);
|
|
61
|
+
return this.channelsApi.archiveChannel(v.agentId, v.channelName);
|
|
62
|
+
}
|
|
63
|
+
/** @deprecated Use `client.channels.unarchiveChannel(id)` instead. Removed in 0.6.0. */
|
|
64
|
+
unarchiveChannel(identifier) {
|
|
65
|
+
const v = this.requireChannel(identifier);
|
|
66
|
+
return this.channelsApi.unarchiveChannel(v.agentId, v.channelName);
|
|
67
|
+
}
|
|
68
|
+
/** @deprecated Use `client.channels.getChannel(id)` instead. Removed in 0.6.0. */
|
|
69
|
+
getChannel(identifier) {
|
|
70
|
+
if (!identifier.agentId || !identifier.channelName) {
|
|
71
|
+
return Promise.resolve(undefined);
|
|
72
|
+
}
|
|
73
|
+
return this.channelsApi.getChannel(identifier.agentId, identifier.channelName);
|
|
74
|
+
}
|
|
75
|
+
/** @deprecated Use `client.gateway.subscribeToChannel(channel, handlers)` instead. Removed in 0.6.0. */
|
|
76
|
+
async subscribeToChannel(identifier, callback, aggregateCallback, messageUpdateCallback) {
|
|
77
|
+
const validated = this.requireChannel(identifier);
|
|
78
|
+
const channel = { agent_id: validated.agentId, name: validated.channelName };
|
|
79
|
+
const off = this.gateway.subscribeToChannel(channel, {
|
|
80
|
+
onMessage: (msg) => callback(identifier, msg),
|
|
81
|
+
onAggregate: (agg) => aggregateCallback(identifier, agg),
|
|
82
|
+
onMessageUpdate: messageUpdateCallback
|
|
83
|
+
? (msg, rd) => messageUpdateCallback(identifier, msg, rd)
|
|
84
|
+
: undefined,
|
|
85
|
+
});
|
|
86
|
+
this.bridges.set(callback, off);
|
|
87
|
+
await this.gateway.connect();
|
|
88
|
+
}
|
|
89
|
+
/** @deprecated Call the unsubscribe fn returned by `client.gateway.subscribeToChannel`. Removed in 0.6.0. */
|
|
90
|
+
async unsubscribeFromChannel(_identifier, callback) {
|
|
91
|
+
const off = this.bridges.get(callback);
|
|
92
|
+
if (!off) {
|
|
93
|
+
throw new DooverValidationError("Not Currently Subscribed to Channel");
|
|
94
|
+
}
|
|
95
|
+
off();
|
|
96
|
+
this.bridges.delete(callback);
|
|
97
|
+
}
|
|
98
|
+
/** @deprecated Compose `client.channels.getChannel(id).then(c => c.aggregate ?? client.aggregates.getAggregate(id))` instead. Removed in 0.6.0. */
|
|
99
|
+
async getAggregate(identifier) {
|
|
100
|
+
if (!identifier.agentId || !identifier.channelName)
|
|
101
|
+
return undefined;
|
|
102
|
+
const ch = await this.channelsApi.getChannel(identifier.agentId, identifier.channelName);
|
|
103
|
+
if (ch.aggregate)
|
|
104
|
+
return ch.aggregate;
|
|
105
|
+
return this.aggregatesApi.getAggregate(identifier.agentId, identifier.channelName);
|
|
106
|
+
}
|
|
107
|
+
/** @deprecated Use `client.messages.listMessages(id, { ...opts, order: "asc" })` instead. Removed in 0.6.0. */
|
|
108
|
+
async getMessages(identifier, optionsOrBefore) {
|
|
109
|
+
if (!identifier.agentId || !identifier.channelName)
|
|
110
|
+
return undefined;
|
|
111
|
+
const params = typeof optionsOrBefore === "string"
|
|
112
|
+
? { before: optionsOrBefore }
|
|
113
|
+
: (optionsOrBefore ?? {});
|
|
114
|
+
return this.messagesApi.listMessages(identifier.agentId, identifier.channelName, {
|
|
115
|
+
...params,
|
|
116
|
+
order: "asc",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/** @deprecated Use `client.messages.deleteMessage(id, msgId)` instead. Removed in 0.6.0. */
|
|
120
|
+
deleteMessage(identifier, messageId) {
|
|
121
|
+
const v = this.requireChannel(identifier);
|
|
122
|
+
return this.messagesApi.deleteMessage(v.agentId, v.channelName, messageId);
|
|
123
|
+
}
|
|
124
|
+
/** @deprecated Use `client.messages.postMessage(id, { data })` instead. Removed in 0.6.0. */
|
|
125
|
+
sendMessage(identifier, message) {
|
|
126
|
+
const v = this.requireChannel(identifier);
|
|
127
|
+
return this.messagesApi.postMessage(v.agentId, v.channelName, {
|
|
128
|
+
data: message,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/** @deprecated Use `client.rpc.send(id, req, opts)` instead. Removed in 0.6.0. */
|
|
132
|
+
sendRPC(identifier, rpcRequest, options) {
|
|
133
|
+
const v = this.requireChannel(identifier);
|
|
134
|
+
if (!this.dispatcher) {
|
|
135
|
+
this.dispatcher = new RpcDispatcher(this.gateway, this.messagesApi);
|
|
136
|
+
}
|
|
137
|
+
return this.dispatcher.send({ agentId: v.agentId, channelName: v.channelName }, rpcRequest, options);
|
|
138
|
+
}
|
|
139
|
+
/** @deprecated Use `client.aggregates.patchAggregate(id, data, params)` instead. Removed in 0.6.0. */
|
|
140
|
+
updateAggregate(identifier, message, params) {
|
|
141
|
+
const v = this.requireChannel(identifier);
|
|
142
|
+
return this.aggregatesApi.patchAggregate(v.agentId, v.channelName, message, params);
|
|
143
|
+
}
|
|
144
|
+
/** @deprecated Use `client.aggregates.putAggregate(id, data, params)` instead. Removed in 0.6.0. */
|
|
145
|
+
putAggregate(identifier, message, params) {
|
|
146
|
+
const v = this.requireChannel(identifier);
|
|
147
|
+
return this.aggregatesApi.putAggregate(v.agentId, v.channelName, message, params);
|
|
148
|
+
}
|
|
149
|
+
/** @deprecated Use `client.connections.getChannelSubscriptions(id)` instead. Removed in 0.6.0. */
|
|
150
|
+
getChannelSubscriptions(identifier) {
|
|
151
|
+
const v = this.requireChannel(identifier);
|
|
152
|
+
return this.connectionsApi.getChannelSubscriptions(v.agentId, v.channelName);
|
|
153
|
+
}
|
|
154
|
+
/** @deprecated Use `client.connections.getAgentConnections(id)` instead. Removed in 0.6.0. */
|
|
155
|
+
getAgentConnections(identifier) {
|
|
156
|
+
if (!identifier.agentId) {
|
|
157
|
+
return Promise.reject(new DooverValidationError("Invalid Identifier"));
|
|
158
|
+
}
|
|
159
|
+
return this.connectionsApi.getAgentConnections(identifier.agentId);
|
|
160
|
+
}
|
|
161
|
+
/** @deprecated Use the free function `getIdentifierFromPath(path, search)` instead. Removed in 0.6.0. */
|
|
162
|
+
getIdentifierFromPath(path, searchParams) {
|
|
163
|
+
return parseIdentifierFromPath(path, searchParams);
|
|
164
|
+
}
|
|
165
|
+
/** @deprecated No replacement — this was a synthesized stub. Removed in 0.6.0. */
|
|
166
|
+
getAgentInfo(agentId) {
|
|
167
|
+
return Promise.resolve({
|
|
168
|
+
id: agentId,
|
|
169
|
+
name: agentId,
|
|
170
|
+
display_name: agentId,
|
|
171
|
+
type: "device",
|
|
172
|
+
fa_icon: "fa-solid fa-robot",
|
|
173
|
+
organisation: "Organisation",
|
|
174
|
+
group: "group",
|
|
175
|
+
archived: false,
|
|
176
|
+
fixed_location: { latitude: 0, longitude: 0 },
|
|
177
|
+
extra_config: {},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
requireChannel(identifier) {
|
|
181
|
+
if (!identifier.agentId || !identifier.channelName) {
|
|
182
|
+
throw new DooverValidationError("Identifier must contain agentId and channelName");
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
agentId: identifier.agentId,
|
|
186
|
+
channelName: identifier.channelName,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function getIdentifierFromPath(path, _searchParams) {
|
|
2
|
+
const cleaned = path.replace(/^\/+|\/+$/g, "");
|
|
3
|
+
const parts = cleaned ? cleaned.split("/") : [];
|
|
4
|
+
if (parts.length === 1) {
|
|
5
|
+
return {
|
|
6
|
+
identifier: {
|
|
7
|
+
agentId: parts[0],
|
|
8
|
+
channelName: undefined,
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (parts.length === 2) {
|
|
13
|
+
return {
|
|
14
|
+
identifier: {
|
|
15
|
+
agentId: parts[0],
|
|
16
|
+
channelName: parts[1],
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (parts.length > 2) {
|
|
21
|
+
return {
|
|
22
|
+
identifier: {
|
|
23
|
+
agentId: parts[0],
|
|
24
|
+
channelName: parts[1],
|
|
25
|
+
},
|
|
26
|
+
aggregatePath: parts.slice(2).join("/"),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
identifier: {
|
|
31
|
+
agentId: undefined,
|
|
32
|
+
channelName: undefined,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { DooverAuth } from "../auth/doover-auth";
|
|
2
|
-
import type { DooverStatsCollector } from "../client/stats";
|
|
3
|
-
import type { DooverClientConfig } from "../http/rest-client";
|
|
4
|
-
import type { GatewayListenerMap, WebSocketSession } from "./types";
|
|
5
|
-
import type { Aggregate, ChannelRef, JSONValue, MessageStructure } from "../types/common";
|
|
1
|
+
import type { DooverAuth } from "../auth/doover-auth.js";
|
|
2
|
+
import type { DooverStatsCollector } from "../client/stats.js";
|
|
3
|
+
import type { DooverClientConfig } from "../http/rest-client.js";
|
|
4
|
+
import type { GatewayListenerMap, WebSocketSession } from "./types.js";
|
|
5
|
+
import type { Aggregate, ChannelRef, JSONValue, MessageStructure } from "../types/common.js";
|
|
6
6
|
export type GatewayProvenanceHook = <T>(value: T, ctx: {
|
|
7
7
|
event: string;
|
|
8
8
|
sessionId?: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GatewayClient = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const errors_js_1 = require("../http/errors.js");
|
|
5
|
+
const snowflake_js_1 = require("../utils/snowflake.js");
|
|
6
6
|
const RECONNECT_BASE_MS = 1000;
|
|
7
7
|
const RECONNECT_CAP_MS = 30000;
|
|
8
8
|
/** Schemes a WebSocket can be opened on — it maps http(s) to ws(s) itself. */
|
|
@@ -347,10 +347,10 @@ class GatewayClient {
|
|
|
347
347
|
this.emit("channelSync", this.stamp(message.d, "channelSync"));
|
|
348
348
|
break;
|
|
349
349
|
case "MessageCreate":
|
|
350
|
-
this.emit("messageCreate", this.stamp((0,
|
|
350
|
+
this.emit("messageCreate", this.stamp((0, snowflake_js_1.addTimestampToMessage)(message.d), "messageCreate"));
|
|
351
351
|
break;
|
|
352
352
|
case "MessageUpdate":
|
|
353
|
-
this.emit("messageUpdate", this.stamp((0,
|
|
353
|
+
this.emit("messageUpdate", this.stamp((0, snowflake_js_1.addTimestampToMessage)(message.d.message), "messageUpdate"), message.d.request_data);
|
|
354
354
|
break;
|
|
355
355
|
case "AggregateUpdate":
|
|
356
356
|
this.emit("aggregateUpdate", this.stamp(message.d, "aggregateUpdate"));
|
|
@@ -402,7 +402,7 @@ class GatewayClient {
|
|
|
402
402
|
}
|
|
403
403
|
send(payload) {
|
|
404
404
|
if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {
|
|
405
|
-
throw new
|
|
405
|
+
throw new errors_js_1.DooverGatewayError("WebSocket is not connected");
|
|
406
406
|
}
|
|
407
407
|
this.socket.send(JSON.stringify(payload));
|
|
408
408
|
this.stats?.recordGatewaySent();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GatewayClient = void 0;
|
|
4
|
+
var gateway_client_js_1 = require("./gateway-client.js");
|
|
5
|
+
Object.defineProperty(exports, "GatewayClient", { enumerable: true, get: function () { return gateway_client_js_1.GatewayClient; } });
|
package/dist/gateway/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Aggregate, Alarm, ChannelRef, JSONValue, MessageStructure } from "../types/common";
|
|
1
|
+
import type { Aggregate, Alarm, ChannelRef, JSONValue, MessageStructure } from "../types/common.js";
|
|
2
2
|
export interface WebSocketSubscription {
|
|
3
3
|
channel: ChannelRef;
|
|
4
4
|
organisation_id?: string | null;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DooverValidationError = exports.DooverGatewayError = exports.DooverApiError = exports.RestClient = void 0;
|
|
4
|
+
var rest_client_js_1 = require("./rest-client.js");
|
|
5
|
+
Object.defineProperty(exports, "RestClient", { enumerable: true, get: function () { return rest_client_js_1.RestClient; } });
|
|
6
|
+
var errors_js_1 = require("./errors.js");
|
|
7
|
+
Object.defineProperty(exports, "DooverApiError", { enumerable: true, get: function () { return errors_js_1.DooverApiError; } });
|
|
8
|
+
Object.defineProperty(exports, "DooverGatewayError", { enumerable: true, get: function () { return errors_js_1.DooverGatewayError; } });
|
|
9
|
+
Object.defineProperty(exports, "DooverValidationError", { enumerable: true, get: function () { return errors_js_1.DooverValidationError; } });
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
1
|
+
import type { NetworkStatusSource } from "../client/network-status.js";
|
|
2
|
+
import type { AuthConfig } from "../auth/build-auth.js";
|
|
3
|
+
import type { DooverAuth } from "../auth/doover-auth.js";
|
|
4
|
+
import type { DooverStatsCollector } from "../client/stats.js";
|
|
4
5
|
export interface DooverClientConfig extends AuthConfig {
|
|
6
|
+
networkStatus?: NetworkStatusSource;
|
|
5
7
|
dataRestUrl: string;
|
|
6
8
|
controlApiUrl: string;
|
|
7
9
|
dataWssUrl: string;
|
package/dist/http/rest-client.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RestClient = void 0;
|
|
4
|
-
const
|
|
4
|
+
const errors_js_1 = require("./errors.js");
|
|
5
5
|
class RestClient {
|
|
6
6
|
constructor(config, auth) {
|
|
7
7
|
this.stats = null;
|
|
@@ -44,7 +44,7 @@ class RestClient {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
if (!response.ok) {
|
|
47
|
-
throw new
|
|
47
|
+
throw new errors_js_1.DooverApiError({
|
|
48
48
|
status: response.status,
|
|
49
49
|
body: payload,
|
|
50
50
|
url: request.url,
|