@senguoyun/dsh-arkme 0.1.31 → 0.1.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +24 -0
  2. package/lib/client.js +2459 -2307
  3. package/lib/client.js.map +1 -1
  4. package/lib/extension-profile-restart-helper.js +17 -5
  5. package/lib/index.js +3911 -104
  6. package/lib/persistent-extension.js +1 -1
  7. package/lib/{persistent-runtime-BJ8konXI.js → persistent-runtime-DUqdJv8K.js} +30114 -768
  8. package/lib/sdk.js +38 -0
  9. package/lib/types/arkme-service.d.ts +25 -10
  10. package/lib/types/arkme-service.d.ts.map +1 -1
  11. package/lib/types/client/ArkmeBillingSettings.d.ts.map +1 -1
  12. package/lib/types/client/ArkmeBotConversationSurface.d.ts.map +1 -1
  13. package/lib/types/client/ArkmeBotSettingsPanel.d.ts.map +1 -1
  14. package/lib/types/client/ArkmeExtensionRecoveryNotice.d.ts +9 -0
  15. package/lib/types/client/ArkmeExtensionRecoveryNotice.d.ts.map +1 -0
  16. package/lib/types/client/ArkmeFooterAction.d.ts +1 -7
  17. package/lib/types/client/ArkmeFooterAction.d.ts.map +1 -1
  18. package/lib/types/client/ArkmeFooterDropdown.d.ts.map +1 -1
  19. package/lib/types/client/ArkmeGroupChatControls.d.ts +17 -1
  20. package/lib/types/client/ArkmeGroupChatControls.d.ts.map +1 -1
  21. package/lib/types/client/ArkmeLinkText.d.ts +13 -0
  22. package/lib/types/client/ArkmeLinkText.d.ts.map +1 -0
  23. package/lib/types/client/ArkmeLongArticleDialog.d.ts.map +1 -1
  24. package/lib/types/client/ArkmeMarketplace.d.ts +2 -1
  25. package/lib/types/client/ArkmeMarketplace.d.ts.map +1 -1
  26. package/lib/types/client/ArkmePersistentShell.d.ts.map +1 -1
  27. package/lib/types/client/ArkmeProductNavigation.d.ts.map +1 -1
  28. package/lib/types/client/ArkmeQuickAdd.d.ts.map +1 -1
  29. package/lib/types/client/ArkmeRichContent.d.ts +4 -21
  30. package/lib/types/client/ArkmeRichContent.d.ts.map +1 -1
  31. package/lib/types/client/ArkmeRichText.d.ts +12 -0
  32. package/lib/types/client/ArkmeRichText.d.ts.map +1 -0
  33. package/lib/types/client/ArkmeSearchSurface.d.ts.map +1 -1
  34. package/lib/types/client/ArkmeSettingsSurface.d.ts +4 -19
  35. package/lib/types/client/ArkmeSettingsSurface.d.ts.map +1 -1
  36. package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
  37. package/lib/types/client/ArkmeUpdateSurfaces.d.ts +38 -5
  38. package/lib/types/client/ArkmeUpdateSurfaces.d.ts.map +1 -1
  39. package/lib/types/client/ArkmeVirtualWorkspace.d.ts.map +1 -1
  40. package/lib/types/client/api.d.ts +1 -1
  41. package/lib/types/client/api.d.ts.map +1 -1
  42. package/lib/types/client/bot-chat-directory-projection.d.ts +7 -0
  43. package/lib/types/client/bot-chat-directory-projection.d.ts.map +1 -0
  44. package/lib/types/client/desktop-quarantine-status.d.ts +3 -0
  45. package/lib/types/client/desktop-quarantine-status.d.ts.map +1 -0
  46. package/lib/types/client/index.d.ts +0 -2
  47. package/lib/types/client/index.d.ts.map +1 -1
  48. package/lib/types/client/link-metadata-client.d.ts +20 -0
  49. package/lib/types/client/link-metadata-client.d.ts.map +1 -0
  50. package/lib/types/client/realtime-client-events.d.ts +4 -1
  51. package/lib/types/client/realtime-client-events.d.ts.map +1 -1
  52. package/lib/types/client/redesign/contacts/AlphabeticalContactList.d.ts +3 -3
  53. package/lib/types/client/redesign/contacts/AlphabeticalContactList.d.ts.map +1 -1
  54. package/lib/types/client/redesign/contacts/ContactDirectorySurface.d.ts +3 -3
  55. package/lib/types/client/redesign/contacts/ContactDirectorySurface.d.ts.map +1 -1
  56. package/lib/types/client/related-recordings.d.ts +3 -0
  57. package/lib/types/client/related-recordings.d.ts.map +1 -1
  58. package/lib/types/client/text-link-parser.d.ts +10 -0
  59. package/lib/types/client/text-link-parser.d.ts.map +1 -0
  60. package/lib/types/client/text-link-tlds.d.ts +2 -0
  61. package/lib/types/client/text-link-tlds.d.ts.map +1 -0
  62. package/lib/types/client/ui-controller.d.ts.map +1 -1
  63. package/lib/types/client/update-presentation.d.ts +1 -1
  64. package/lib/types/client/update-presentation.d.ts.map +1 -1
  65. package/lib/types/client/update-ui-controller.d.ts +1 -1
  66. package/lib/types/client/update-ui-controller.d.ts.map +1 -1
  67. package/lib/types/dsh-host-capabilities.d.ts +10 -0
  68. package/lib/types/dsh-host-capabilities.d.ts.map +1 -0
  69. package/lib/types/dsh-remote/api-proxy-adapter.d.ts +250 -0
  70. package/lib/types/dsh-remote/api-proxy-adapter.d.ts.map +1 -0
  71. package/lib/types/dsh-remote/channel-manager.d.ts +45 -0
  72. package/lib/types/dsh-remote/channel-manager.d.ts.map +1 -0
  73. package/lib/types/dsh-remote/command-ledger.d.ts +60 -0
  74. package/lib/types/dsh-remote/command-ledger.d.ts.map +1 -0
  75. package/lib/types/dsh-remote/control-plane.d.ts +17 -0
  76. package/lib/types/dsh-remote/control-plane.d.ts.map +1 -0
  77. package/lib/types/dsh-remote/crypto.d.ts +11 -0
  78. package/lib/types/dsh-remote/crypto.d.ts.map +1 -0
  79. package/lib/types/dsh-remote/default-socket-factory.d.ts +8 -0
  80. package/lib/types/dsh-remote/default-socket-factory.d.ts.map +1 -0
  81. package/lib/types/dsh-remote/dsh-event-contract.d.ts +29 -0
  82. package/lib/types/dsh-remote/dsh-event-contract.d.ts.map +1 -0
  83. package/lib/types/dsh-remote/errors.d.ts +9 -0
  84. package/lib/types/dsh-remote/errors.d.ts.map +1 -0
  85. package/lib/types/dsh-remote/host.d.ts +85 -0
  86. package/lib/types/dsh-remote/host.d.ts.map +1 -0
  87. package/lib/types/dsh-remote/protocol-v1.d.ts +6 -0
  88. package/lib/types/dsh-remote/protocol-v1.d.ts.map +1 -0
  89. package/lib/types/dsh-remote/realtime-transport.d.ts +84 -0
  90. package/lib/types/dsh-remote/realtime-transport.d.ts.map +1 -0
  91. package/lib/types/dsh-remote/runtime-secret-broker.d.ts +28 -0
  92. package/lib/types/dsh-remote/runtime-secret-broker.d.ts.map +1 -0
  93. package/lib/types/dsh-remote/runtime-store.d.ts +39 -0
  94. package/lib/types/dsh-remote/runtime-store.d.ts.map +1 -0
  95. package/lib/types/dsh-remote/transport-fragment.d.ts +10 -0
  96. package/lib/types/dsh-remote/transport-fragment.d.ts.map +1 -0
  97. package/lib/types/dsh-remote/types.d.ts +164 -0
  98. package/lib/types/dsh-remote/types.d.ts.map +1 -0
  99. package/lib/types/extensions/desktop-quarantine.d.ts +79 -0
  100. package/lib/types/extensions/desktop-quarantine.d.ts.map +1 -0
  101. package/lib/types/extensions/profile-installer.d.ts +5 -0
  102. package/lib/types/extensions/profile-installer.d.ts.map +1 -1
  103. package/lib/types/extensions/profile-restart-helper.d.ts +3 -1
  104. package/lib/types/extensions/profile-restart-helper.d.ts.map +1 -1
  105. package/lib/types/harness-embed-route.d.ts +11 -1
  106. package/lib/types/harness-embed-route.d.ts.map +1 -1
  107. package/lib/types/host-api.d.ts +5 -1
  108. package/lib/types/host-api.d.ts.map +1 -1
  109. package/lib/types/index.d.ts +15 -0
  110. package/lib/types/index.d.ts.map +1 -1
  111. package/lib/types/keychain-store.d.ts +33 -0
  112. package/lib/types/keychain-store.d.ts.map +1 -1
  113. package/lib/types/link-metadata.d.ts +9 -0
  114. package/lib/types/link-metadata.d.ts.map +1 -0
  115. package/lib/types/managed-ai/adapter.d.ts +2 -0
  116. package/lib/types/managed-ai/adapter.d.ts.map +1 -1
  117. package/lib/types/sdk/index.d.ts +9 -2
  118. package/lib/types/sdk/index.d.ts.map +1 -1
  119. package/lib/types/services/bot-conversation-service.d.ts +59 -0
  120. package/lib/types/services/bot-conversation-service.d.ts.map +1 -0
  121. package/lib/types/services/bot-service.d.ts +11 -29
  122. package/lib/types/services/bot-service.d.ts.map +1 -1
  123. package/lib/types/services/chat-service.d.ts +30 -5
  124. package/lib/types/services/chat-service.d.ts.map +1 -1
  125. package/lib/types/services/contact-directory-service.d.ts.map +1 -1
  126. package/lib/types/services/link-metadata-service.d.ts +73 -0
  127. package/lib/types/services/link-metadata-service.d.ts.map +1 -0
  128. package/lib/types/services/related-recording-service.d.ts +1 -0
  129. package/lib/types/services/related-recording-service.d.ts.map +1 -1
  130. package/lib/types/services/service.d.ts +4 -2
  131. package/lib/types/services/service.d.ts.map +1 -1
  132. package/lib/types/tools/ports/bots.d.ts +1 -1
  133. package/lib/types/tools/ports/bots.d.ts.map +1 -1
  134. package/lib/types/types.d.ts +55 -21
  135. package/lib/types/types.d.ts.map +1 -1
  136. package/package.json +24 -23
@@ -0,0 +1,250 @@
1
+ import { type DshRemoteCapability, type DshRemotePendingInteraction, type DshRemoteSessionSummary, type DshRemoteSnapshot, type DshRemoteWorkspaceView } from './types.js';
2
+ import { type DshRemoteHistoryEntry } from './dsh-event-contract.js';
3
+ export type { DshRemoteHistoryEntry } from './dsh-event-contract.js';
4
+ interface RpcSuccess<T> {
5
+ rpcId: string;
6
+ result: {
7
+ ok: true;
8
+ value: T;
9
+ };
10
+ }
11
+ interface RpcFailure {
12
+ rpcId: string;
13
+ result: {
14
+ ok: false;
15
+ error: {
16
+ code: string;
17
+ message: string;
18
+ details?: unknown;
19
+ };
20
+ };
21
+ }
22
+ type RpcResponse<T> = RpcSuccess<T> | RpcFailure;
23
+ interface WorkspaceApiLike {
24
+ list?(request: {
25
+ rpcId: string;
26
+ payload: Record<string, never>;
27
+ }): Promise<RpcResponse<{
28
+ items: Array<{
29
+ workspaceId: string;
30
+ path: string;
31
+ title: string;
32
+ sessionIds: string[];
33
+ }>;
34
+ archivedSessionIds?: string[];
35
+ }>>;
36
+ }
37
+ interface SessionsApiLike {
38
+ list?(request: {
39
+ rpcId: string;
40
+ payload: {
41
+ cursor?: string;
42
+ };
43
+ }): Promise<RpcResponse<{
44
+ items: Array<{
45
+ sessionId: string;
46
+ updatedAt: number;
47
+ running: boolean;
48
+ blank: boolean;
49
+ cwd?: string;
50
+ projections?: {
51
+ asOfSeq: number;
52
+ values: Record<string, unknown>;
53
+ };
54
+ }>;
55
+ }>>;
56
+ create?(request: {
57
+ rpcId: string;
58
+ payload: {
59
+ workspaceId: string;
60
+ sessionId: string;
61
+ };
62
+ }): Promise<RpcResponse<{
63
+ sessionId: string;
64
+ }>>;
65
+ history?(request: {
66
+ rpcId: string;
67
+ payload: {
68
+ sessionId: string;
69
+ beforeSeq?: number;
70
+ maxMessages: number;
71
+ };
72
+ }): Promise<RpcResponse<{
73
+ events: Array<{
74
+ event: {
75
+ type: string;
76
+ seq: number;
77
+ time: number;
78
+ data: unknown;
79
+ sourceEventSeqs?: number[];
80
+ surfaceOp?: unknown;
81
+ ignorable?: true;
82
+ };
83
+ view?: unknown;
84
+ }>;
85
+ hasMore: boolean;
86
+ projections?: {
87
+ asOfSeq: number;
88
+ values: Record<string, unknown>;
89
+ };
90
+ }>>;
91
+ prompt?(request: {
92
+ rpcId: string;
93
+ payload: {
94
+ sessionId: string;
95
+ mode: 'queue' | 'steer';
96
+ content: Array<{
97
+ type: 'text';
98
+ text: string;
99
+ }>;
100
+ };
101
+ }): Promise<RpcResponse<{
102
+ accepted: true;
103
+ }>>;
104
+ cancel?(request: {
105
+ rpcId: string;
106
+ payload: {
107
+ sessionId: string;
108
+ };
109
+ }): Promise<RpcResponse<{
110
+ accepted: true;
111
+ }>>;
112
+ }
113
+ interface EventsApiLike {
114
+ mux?(request: {
115
+ rpcId: string;
116
+ payload: {
117
+ since?: Record<string, number>;
118
+ };
119
+ }, signal: AbortSignal): AsyncIterable<{
120
+ rpcId: string;
121
+ payload: Record<string, unknown>;
122
+ }>;
123
+ }
124
+ export type DshRemoteApiProjectionEvent = {
125
+ kind: 'session-event';
126
+ sessionId: string;
127
+ entry: DshRemoteHistoryEntry;
128
+ } | {
129
+ kind: 'interactions';
130
+ pendingInteractions: DshRemotePendingInteraction[];
131
+ } | {
132
+ kind: 'mux-baseline';
133
+ sessionId: string;
134
+ lastSeq: number;
135
+ pendingInteractions: DshRemotePendingInteraction[];
136
+ };
137
+ export interface DshPublicApiProxyLike {
138
+ workspace?: WorkspaceApiLike;
139
+ sessions?: SessionsApiLike;
140
+ events?: EventsApiLike;
141
+ respond?(message: {
142
+ type: 'client-response';
143
+ rpcId: string;
144
+ result: {
145
+ ok: true;
146
+ value: unknown;
147
+ };
148
+ }): Promise<{
149
+ accepted: true;
150
+ } | {
151
+ accepted: false;
152
+ reason: string;
153
+ }>;
154
+ }
155
+ export declare class DshApiProxyAdapter {
156
+ private readonly api;
157
+ private readonly options;
158
+ private readonly pendingInteractions;
159
+ private readonly interactionListeners;
160
+ private readonly projectionListeners;
161
+ private eventController;
162
+ private eventLoop;
163
+ constructor(api: DshPublicApiProxyLike, options?: {
164
+ eventRetryBaseMillis?: number;
165
+ });
166
+ capabilities(): DshRemoteCapability[];
167
+ workspaces(): Promise<DshRemoteWorkspaceView[]>;
168
+ workspacePage(input?: {
169
+ limit?: number;
170
+ cursor?: string;
171
+ }): Promise<{
172
+ items: DshRemoteWorkspaceView[];
173
+ nextCursor?: string;
174
+ }>;
175
+ sessions(input?: {
176
+ workspaceId?: string;
177
+ limit?: number;
178
+ cursor?: string;
179
+ }): Promise<{
180
+ items: DshRemoteSessionSummary[];
181
+ nextCursor?: string;
182
+ }>;
183
+ history(input: {
184
+ sessionId: string;
185
+ beforeSeq?: number;
186
+ limit?: number;
187
+ }): Promise<{
188
+ entries: DshRemoteHistoryEntry[];
189
+ hasMore: boolean;
190
+ nextCursor?: number;
191
+ projectionAsOfSeq?: number;
192
+ }>;
193
+ historyContainsRpcId(entries: readonly DshRemoteHistoryEntry[], rpcIdValue: string): boolean;
194
+ createSession(input: {
195
+ workspaceId: string;
196
+ dshRpcId: string;
197
+ }): Promise<{
198
+ sessionId: string;
199
+ }>;
200
+ reconcileCreatedSession(input: {
201
+ workspaceId: string;
202
+ dshRpcId: string;
203
+ }): Promise<{
204
+ sessionId: string;
205
+ } | undefined>;
206
+ prompt(input: {
207
+ sessionId: string;
208
+ mode: 'queue' | 'steer';
209
+ content: unknown;
210
+ dshRpcId: string;
211
+ }): Promise<{
212
+ accepted: true;
213
+ }>;
214
+ cancel(input: {
215
+ sessionId: string;
216
+ dshRpcId: string;
217
+ }): Promise<{
218
+ accepted: true;
219
+ }>;
220
+ answerQuestion(input: {
221
+ interactionRpcRef: string;
222
+ sessionId: string;
223
+ answer: unknown;
224
+ }): Promise<void>;
225
+ answerApproval(input: {
226
+ interactionRpcRef: string;
227
+ sessionId: string;
228
+ approvalId: string;
229
+ outcome: 'allowed-once' | 'rejected';
230
+ }): Promise<void>;
231
+ pending(): DshRemotePendingInteraction[];
232
+ subscribeInteractions(listener: (interactions: DshRemotePendingInteraction[]) => void): () => void;
233
+ subscribeProjectionEvents(listener: (event: DshRemoteApiProjectionEvent) => void): () => void;
234
+ startEvents(): () => void;
235
+ stopEvents(): void;
236
+ private maintainEvents;
237
+ snapshot(input?: {
238
+ limit?: number;
239
+ cursor?: string;
240
+ }): Promise<DshRemoteSnapshot>;
241
+ private consumeEvents;
242
+ private requireSession;
243
+ private textContent;
244
+ private respond;
245
+ private emitInteractions;
246
+ private emitProjection;
247
+ private unsupported;
248
+ private resolved;
249
+ }
250
+ //# sourceMappingURL=api-proxy-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-proxy-adapter.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/api-proxy-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { DshRemoteRuntimeSecretBroker } from './runtime-secret-broker.js';
2
+ import type { DshRemoteRealtimeTransport, DshRemoteResponse, DshRemoteTrustedEventMetadata } from './types.js';
3
+ export interface DshRemoteHostChannelManagerOptions {
4
+ accountId: string;
5
+ profileRef: string;
6
+ hostClientRef: string;
7
+ runtimeRef: string;
8
+ realtime: DshRemoteRealtimeTransport;
9
+ secretBroker: DshRemoteRuntimeSecretBroker;
10
+ dispatch: (request: unknown, context: {
11
+ serviceLeaseGeneration: number;
12
+ metadata: DshRemoteTrustedEventMetadata;
13
+ }) => Promise<DshRemoteResponse>;
14
+ onFatal: (error: unknown) => void;
15
+ }
16
+ /**
17
+ * Owns the single account-scoped Runtime channel. The Host subscribes with
18
+ * generation 0 before registration, then activates the exact positive lease
19
+ * returned by Realtime. No controller identity or pairing state exists here.
20
+ */
21
+ export declare class DshRemoteHostChannelManager {
22
+ private readonly options;
23
+ private readonly controller;
24
+ private unsubscribe;
25
+ private target;
26
+ private lastTransportSequence;
27
+ private persistedTransportSequence;
28
+ private outboundTail;
29
+ private readonly pendingEvents;
30
+ private closed;
31
+ constructor(options: DshRemoteHostChannelManagerOptions);
32
+ prepare(): Promise<void>;
33
+ activate(serviceLeaseGeneration: number): Promise<void>;
34
+ status(): {
35
+ runtimeRef: string;
36
+ serviceLeaseGeneration: number;
37
+ ready: boolean;
38
+ };
39
+ close(): Promise<void>;
40
+ publishProjectionEvent(envelope: Record<string, unknown>, commandId: string): Promise<void>;
41
+ private handle;
42
+ private publishPayload;
43
+ private persistCursor;
44
+ }
45
+ //# sourceMappingURL=channel-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-manager.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/channel-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AAEzE,OAAO,KAAK,EAEV,0BAA0B,EAC1B,iBAAiB,EAEjB,6BAA6B,EAC9B,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,0BAA0B,CAAA;IACpC,YAAY,EAAE,4BAA4B,CAAA;IAC1C,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;QACpC,sBAAsB,EAAE,MAAM,CAAA;QAC9B,QAAQ,EAAE,6BAA6B,CAAA;KACxC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAChC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CAClC;AAED;;;;GAIG;AACH,qBAAa,2BAA2B;IAU1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,qBAAqB,CAAI;IACjC,OAAO,CAAC,0BAA0B,CAAI;IACtC,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4F;IAC1H,OAAO,CAAC,MAAM,CAAQ;gBAEO,OAAO,EAAE,kCAAkC;IASlE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBxB,QAAQ,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7D,MAAM,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,sBAAsB,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;IAQ1E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKnF,MAAM;YA6BN,cAAc;YAuBd,aAAa;CAQ5B"}
@@ -0,0 +1,60 @@
1
+ import { DshRemoteError } from './errors.js';
2
+ import type { DshRemoteOperation } from './types.js';
3
+ export type DshRemoteLedgerState = 'pending' | 'completed' | 'outcome_unknown';
4
+ export interface DshRemoteLedgerIdentity {
5
+ accountId: string;
6
+ runtimeRef: string;
7
+ requestRef: string;
8
+ operation: DshRemoteOperation;
9
+ arguments: Record<string, unknown>;
10
+ executeBeforeMillis: number;
11
+ }
12
+ export interface DshRemoteLedgerEntry extends Omit<DshRemoteLedgerIdentity, 'arguments'> {
13
+ argumentsHash: string;
14
+ state: DshRemoteLedgerState;
15
+ dshRpcId: string;
16
+ payload: Record<string, unknown>;
17
+ createdAtMillis: number;
18
+ updatedAtMillis: number;
19
+ }
20
+ export declare class DshRemoteCommandLedger {
21
+ private readonly path;
22
+ private readonly database;
23
+ private readonly key;
24
+ private readonly now;
25
+ constructor(directory: string, key: Uint8Array, options?: {
26
+ now?: () => number;
27
+ });
28
+ begin(input: DshRemoteLedgerIdentity): {
29
+ duplicate: boolean;
30
+ entry: DshRemoteLedgerEntry;
31
+ };
32
+ complete(identity: Pick<DshRemoteLedgerIdentity, 'accountId' | 'runtimeRef' | 'requestRef'>, result: Record<string, unknown>): DshRemoteLedgerEntry;
33
+ completeRejected(identity: Pick<DshRemoteLedgerIdentity, 'accountId' | 'runtimeRef' | 'requestRef'>, error: Pick<DshRemoteError, 'code' | 'message' | 'retryable'>): DshRemoteLedgerEntry;
34
+ markOutcomeUnknown(identity: Pick<DshRemoteLedgerIdentity, 'accountId' | 'runtimeRef' | 'requestRef'>, reason: string): DshRemoteLedgerEntry;
35
+ get(identity: Pick<DshRemoteLedgerIdentity, 'accountId' | 'runtimeRef' | 'requestRef'>): DshRemoteLedgerEntry | undefined;
36
+ pending(accountId: string, nowMillis?: number): DshRemoteLedgerEntry[];
37
+ /**
38
+ * Returns every unsettled command still inside the v4 reconciliation window.
39
+ *
40
+ * An expired execute_before only prevents executing the command again. It must
41
+ * not hide the crash window where DSH accepted the stable rpcId before the Host
42
+ * persisted the result. Callers must inspect DSH history and either complete
43
+ * the entry or mark outcome_unknown; they must never re-dispatch these rows.
44
+ */
45
+ unsettledForReconciliation(accountId: string, nowMillis?: number, reconciliationWindowMillis?: number): DshRemoteLedgerEntry[];
46
+ cleanup(options?: {
47
+ retentionMillis?: number;
48
+ maxCommands?: number;
49
+ }): number;
50
+ close(): void;
51
+ private validateIdentity;
52
+ private identity;
53
+ private requireIdentity;
54
+ private entry;
55
+ private appendEvent;
56
+ private eventAad;
57
+ private transaction;
58
+ private secureFiles;
59
+ }
60
+ //# sourceMappingURL=command-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-ledger.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/command-ledger.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,CAAA;AAE9E,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,kBAAkB,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC;IACtF,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;CACxB;AA+BD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAGhC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,UAAU,EACf,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAyCtC,KAAK,CAAC,KAAK,EAAE,uBAAuB,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,oBAAoB,CAAA;KAAE;IA6B1F,QAAQ,CACN,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,EAClF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,oBAAoB;IAYvB,gBAAgB,CACd,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,EAClF,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,GAC5D,oBAAoB;IAMvB,kBAAkB,CAChB,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,EAClF,MAAM,EAAE,MAAM,GACb,oBAAoB;IASvB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,oBAAoB,GAAG,SAAS;IAMzH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,SAAa,GAAG,oBAAoB,EAAE;IAW1E;;;;;;;OAOG;IACH,0BAA0B,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,SAAa,EACtB,0BAA0B,SAAmB,GAC5C,oBAAoB,EAAE;IAczB,OAAO,CAAC,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM;IAkBjF,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,17 @@
1
+ import { DshRemoteError } from './errors.js';
2
+ import type { DshRemoteControlPlane } from './types.js';
3
+ export interface DshRemoteHttpRequester {
4
+ post(path: string, body: Record<string, unknown>, signal?: AbortSignal): Promise<Record<string, unknown>>;
5
+ }
6
+ export declare class DshRemoteHttpControlPlane implements DshRemoteControlPlane {
7
+ private readonly request;
8
+ constructor(request: DshRemoteHttpRequester);
9
+ private post;
10
+ registerDesktop(input: Record<string, unknown>, signal?: AbortSignal): Promise<Record<string, unknown>>;
11
+ registerRuntime(desktopRef: string, input: Record<string, unknown>, signal?: AbortSignal): Promise<Record<string, unknown>>;
12
+ syncWorkspaces(input: Record<string, unknown>, signal?: AbortSignal): Promise<Record<string, unknown>>;
13
+ syncSessions(input: Record<string, unknown>, signal?: AbortSignal): Promise<Record<string, unknown>>;
14
+ appendSessionEvents(input: Record<string, unknown>, signal?: AbortSignal): Promise<Record<string, unknown>>;
15
+ }
16
+ export declare function mapDshRemoteControlPlaneError(error: unknown): DshRemoteError;
17
+ //# sourceMappingURL=control-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/control-plane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2B,MAAM,aAAa,CAAA;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAIvD,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1G;AAQD,qBAAa,yBAA0B,YAAW,qBAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,sBAAsB;YAE9C,IAAI;IAKZ,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIvG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI3H,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAItG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIpG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAIlH;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAoB5E"}
@@ -0,0 +1,11 @@
1
+ export declare function encodeBase64Url(value: Uint8Array | string): string;
2
+ export declare function decodeBase64Url(value: string): Buffer;
3
+ export declare function canonicalJson(value: unknown): string;
4
+ export declare function hChaCha20(key: Uint8Array, nonce: Uint8Array): Buffer;
5
+ export interface XChaChaCiphertext {
6
+ nonce: string;
7
+ ciphertext: string;
8
+ }
9
+ export declare function encryptXChaCha20Poly1305(key: Uint8Array, plaintext: Uint8Array | string, aad: Uint8Array | string, nonce?: Uint8Array): XChaChaCiphertext;
10
+ export declare function decryptXChaCha20Poly1305(key: Uint8Array, input: XChaChaCiphertext, aad: Uint8Array | string): Buffer;
11
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/crypto.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAkBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAiBD,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAwBpE;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,GAAG,MAAM,EAC9B,GAAG,EAAE,UAAU,GAAG,MAAM,EACxB,KAAK,GAAE,UAA4B,GAClC,iBAAiB,CASnB;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,UAAU,GAAG,MAAM,GACvB,MAAM,CAgBR"}
@@ -0,0 +1,8 @@
1
+ import type { DshRemoteSocketLike } from './realtime-transport.js';
2
+ export declare function dshRemoteRealtimeEndpoint(realtimeBaseUrl: string): string;
3
+ export declare function createDefaultDshRemoteSocket(input: {
4
+ realtimeBaseUrl: string;
5
+ accessToken: string;
6
+ signal: AbortSignal;
7
+ }): DshRemoteSocketLike;
8
+ //# sourceMappingURL=default-socket-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-socket-factory.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/default-socket-factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAElE,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CASzE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,WAAW,CAAA;CACpB,GAAG,mBAAmB,CAiBtB"}
@@ -0,0 +1,29 @@
1
+ export type DshRemoteJsonValue = null | boolean | number | string | DshRemoteJsonValue[] | {
2
+ [key: string]: DshRemoteJsonValue;
3
+ };
4
+ export interface DshRemoteSessionEvent {
5
+ type: string;
6
+ seq: number;
7
+ time: number;
8
+ data: DshRemoteJsonValue;
9
+ sourceEventSeqs?: number[];
10
+ surfaceOp?: DshRemoteJsonValue;
11
+ ignorable?: true;
12
+ }
13
+ export interface DshRemoteToolEventView {
14
+ for: 'call' | 'result';
15
+ view: {
16
+ [key: string]: DshRemoteJsonValue;
17
+ };
18
+ }
19
+ /** The public DSH replay unit used by both sessions.history and events.mux. */
20
+ export interface DshRemoteHistoryEntry {
21
+ event: DshRemoteSessionEvent;
22
+ view?: DshRemoteToolEventView;
23
+ }
24
+ export declare function snapshotDshHistoryEntry(value: {
25
+ event: unknown;
26
+ view?: unknown;
27
+ }): DshRemoteHistoryEntry;
28
+ export declare function dshHistoryEntryUserRpcId(entry: DshRemoteHistoryEntry): string | undefined;
29
+ //# sourceMappingURL=dsh-event-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsh-event-contract.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/dsh-event-contract.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAC1B,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,kBAAkB,EAAE,GACpB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAAE,CAAA;AAEzC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,kBAAkB,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAA;IAC9B,SAAS,CAAC,EAAE,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;IACtB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;KAAE,CAAA;CAC5C;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,qBAAqB,CAAA;IAC5B,IAAI,CAAC,EAAE,sBAAsB,CAAA;CAC9B;AA0BD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,GAAG,qBAAqB,CAqCxB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAWzF"}
@@ -0,0 +1,9 @@
1
+ export type DshRemoteErrorCode = 'REMOTE_LOGIN_REQUIRED' | 'RUNTIME_OFFLINE' | 'RUNTIME_LIMIT_REACHED' | 'HOST_CHANNEL_NOT_READY' | 'CAPABILITY_UNSUPPORTED' | 'WORKSPACE_UNAVAILABLE' | 'SESSION_NOT_FOUND' | 'COMMAND_EXPIRED' | 'COMMAND_OUTCOME_UNKNOWN' | 'INTERACTION_RESOLVED' | 'CONNECTION_REPLACED' | 'HOST_GENERATION_STALE' | 'SESSION_STATE_CHANGED' | 'REPLAY_GAP' | 'REMOTE_PROTOCOL_UNSUPPORTED' | 'REMOTE_REQUEST_INVALID' | 'REMOTE_INVALID_RESPONSE' | 'REMOTE_NOT_FOUND' | 'REMOTE_PROJECTION_CONFLICT' | 'REMOTE_REALTIME_UNAVAILABLE' | 'REMOTE_NETWORK_UNAVAILABLE' | 'REMOTE_STORAGE_FAILED' | 'REMOTE_TRANSPORT_FAILED';
2
+ export declare class DshRemoteError extends Error {
3
+ readonly code: DshRemoteErrorCode;
4
+ readonly retryable: boolean;
5
+ readonly details: Record<string, unknown>;
6
+ constructor(code: DshRemoteErrorCode, message: string, retryable?: boolean, details?: Record<string, unknown>, options?: ErrorOptions);
7
+ }
8
+ export declare function asDshRemoteError(error: unknown): DshRemoteError;
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,uBAAuB,GACvB,iBAAiB,GACjB,uBAAuB,GACvB,wBAAwB,GACxB,wBAAwB,GACxB,uBAAuB,GACvB,mBAAmB,GACnB,iBAAiB,GACjB,yBAAyB,GACzB,sBAAsB,GACtB,qBAAqB,GACrB,uBAAuB,GACvB,uBAAuB,GACvB,YAAY,GACZ,6BAA6B,GAC7B,wBAAwB,GACxB,yBAAyB,GACzB,kBAAkB,GAClB,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,GAC5B,uBAAuB,GACvB,yBAAyB,CAAA;AAE7B,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,kBAAkB;IAEjC,QAAQ,CAAC,SAAS;IAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHhC,IAAI,EAAE,kBAAkB,EACjC,OAAO,EAAE,MAAM,EACN,SAAS,UAAQ,EACjB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAC9C,OAAO,CAAC,EAAE,YAAY;CAKzB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAS/D"}
@@ -0,0 +1,85 @@
1
+ import { DshApiProxyAdapter } from './api-proxy-adapter.js';
2
+ import { DshRemoteCommandLedger } from './command-ledger.js';
3
+ import { DshRemoteRuntimeStore } from './runtime-store.js';
4
+ import { DshRemoteRuntimeSecretBroker } from './runtime-secret-broker.js';
5
+ import { type DshRemoteControlPlane, type DshRemoteHostFacade, type DshRemoteRealtimeTransport, type DshRemoteResponse, type DshRemoteStatus, type DshRemoteTrustedEventMetadata } from './types.js';
6
+ interface HostSession {
7
+ userId: number;
8
+ clientId: number;
9
+ }
10
+ interface HostRuntimeContext {
11
+ serviceLeaseGeneration: number;
12
+ metadata: DshRemoteTrustedEventMetadata;
13
+ }
14
+ export interface ArkmeRemoteRealtimeHostOptions {
15
+ featureEnabled: boolean;
16
+ transportAvailable?: boolean;
17
+ profileRef: string;
18
+ hostClientRef: string;
19
+ displayName?: string;
20
+ platform?: NodeJS.Platform;
21
+ readSession: () => Promise<HostSession | undefined>;
22
+ secretBroker: DshRemoteRuntimeSecretBroker;
23
+ runtimeStore: DshRemoteRuntimeStore;
24
+ controlPlane: DshRemoteControlPlane;
25
+ realtime: DshRemoteRealtimeTransport;
26
+ apiProxy: DshApiProxyAdapter;
27
+ ledgerForAccount: (accountId: string, key: Buffer) => Promise<DshRemoteCommandLedger> | DshRemoteCommandLedger;
28
+ now?: () => number;
29
+ }
30
+ /**
31
+ * Account-login Host facade. Backend owns durable discovery/projections,
32
+ * Realtime owns the short-lived Host lease, and DSH remains session truth.
33
+ */
34
+ export declare class ArkmeRemoteRealtimeHost implements DshRemoteHostFacade {
35
+ private readonly options;
36
+ private readonly now;
37
+ private readonly listeners;
38
+ private runtime;
39
+ private accountId;
40
+ private clientId;
41
+ private ledger;
42
+ private started;
43
+ private connected;
44
+ private serviceLeaseGeneration;
45
+ private revision;
46
+ private stopEvents;
47
+ private stopProjectionEvents;
48
+ private channelManager;
49
+ private stopTransportDisconnect;
50
+ private reconnectTimer;
51
+ private reconnecting;
52
+ private sessionTimer;
53
+ private connectionError;
54
+ private lastProjectionSyncAttemptMillis;
55
+ private projectionVersion;
56
+ constructor(options: ArkmeRemoteRealtimeHostOptions);
57
+ start(): Promise<void>;
58
+ stop(): Promise<void>;
59
+ getStatus(): DshRemoteStatus;
60
+ renameDesktop(displayName: string): Promise<DshRemoteStatus>;
61
+ subscribe(listener: (status: DshRemoteStatus) => void): () => void;
62
+ /** Entry used only by the authenticated Realtime channel bridge. */
63
+ dispatchAuthorizedRequest(value: unknown, context: HostRuntimeContext): Promise<DshRemoteResponse>;
64
+ private syncSessionSafely;
65
+ private syncSession;
66
+ private ensureAutomaticConnection;
67
+ private scheduleSessionSync;
68
+ private deactivateAccount;
69
+ private startApiProxyEvents;
70
+ private stopApiProxyEvents;
71
+ private publishProjectionEvent;
72
+ private handleTransportDisconnect;
73
+ private connectHost;
74
+ private syncProjectionSnapshotSafely;
75
+ private nextProjectionVersion;
76
+ private syncProjectionSnapshot;
77
+ private dispatch;
78
+ private dispatchWrite;
79
+ private reconcileUnsettled;
80
+ private requireReady;
81
+ private requireConnected;
82
+ private bump;
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAoC,MAAM,wBAAwB,CAAA;AAE7F,OAAO,EAAE,sBAAsB,EAA6B,MAAM,qBAAqB,CAAA;AAGvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAIL,KAAK,qBAAqB,EAE1B,KAAK,mBAAmB,EAExB,KAAK,0BAA0B,EAE/B,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACpB,KAAK,6BAA6B,EACnC,MAAM,YAAY,CAAA;AAEnB,UAAU,WAAW;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAC1D,UAAU,kBAAkB;IAC1B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,QAAQ,EAAE,6BAA6B,CAAA;CACxC;AAED,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,OAAO,CAAA;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,WAAW,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAA;IACnD,YAAY,EAAE,4BAA4B,CAAA;IAC1C,YAAY,EAAE,qBAAqB,CAAA;IACnC,YAAY,EAAE,qBAAqB,CAAA;IACnC,QAAQ,EAAE,0BAA0B,CAAA;IACpC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAAA;IAC9G,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAsED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAsBrD,OAAO,CAAC,QAAQ,CAAC,OAAO;IArBpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+C;IACzE,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,sBAAsB,CAAI;IAClC,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,uBAAuB,CAA0B;IACzD,OAAO,CAAC,cAAc,CAA2C;IACjE,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,+BAA+B,CAAI;IAC3C,OAAO,CAAC,iBAAiB,CAAI;gBAEA,OAAO,EAAE,8BAA8B;IAI9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,SAAS,IAAI,eAAe;IA2BtB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAclE,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI;IAMlE,oEAAoE;IAC9D,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAkC1F,iBAAiB;YAQjB,WAAW;YA6BX,yBAAyB;IAmBvC,OAAO,CAAC,mBAAmB;YASb,iBAAiB;IAyB/B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;YAOZ,sBAAsB;IAkEpC,OAAO,CAAC,yBAAyB;YA4BnB,WAAW;YA2EX,4BAA4B;IAa1C,OAAO,CAAC,qBAAqB;YAKf,sBAAsB;YAwGtB,QAAQ;YA0CR,aAAa;YA4Eb,kBAAkB;IAqChC,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,IAAI;CAKb"}
@@ -0,0 +1,6 @@
1
+ import { type DshRemoteRequest } from './types.js';
2
+ export declare function parseDshRemoteRequest(value: unknown, options: {
3
+ expectedHostGeneration: number;
4
+ nowMillis?: number;
5
+ }): DshRemoteRequest;
6
+ //# sourceMappingURL=protocol-v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-v1.d.ts","sourceRoot":"","sources":["../../../src/dsh-remote/protocol-v1.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAA;AA+FnB,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;IAAE,sBAAsB,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,gBAAgB,CAoClB"}