@abloatai/transaction 0.59.1 → 0.60.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/dist/auth/apiKey.d.ts +10 -11
- package/dist/auth/apiKey.d.ts.map +1 -1
- package/dist/auth/apiKey.js +15 -29
- package/dist/auth/apiKey.js.map +1 -1
- package/dist/auth/browserCredentialSafety.js +1 -1
- package/dist/auth/browserCredentialSafety.js.map +1 -1
- package/dist/auth/capabilityLifecycle.d.ts +1 -1
- package/dist/auth/capabilityLifecycle.d.ts.map +1 -1
- package/dist/auth/capabilityLifecycle.js +2 -1
- package/dist/auth/capabilityLifecycle.js.map +1 -1
- package/dist/auth/credentialEndpoint.js +1 -1
- package/dist/auth/credentialEndpoint.js.map +1 -1
- package/dist/auth/credentialResult.d.ts +2 -1
- package/dist/auth/credentialResult.d.ts.map +1 -1
- package/dist/auth/credentialResult.js.map +1 -1
- package/dist/claims/events.d.ts +1 -1
- package/dist/claims/events.d.ts.map +1 -1
- package/dist/client/ablo.d.ts +15 -11
- package/dist/client/ablo.d.ts.map +1 -1
- package/dist/client/ablo.js +5 -14
- package/dist/client/ablo.js.map +1 -1
- package/dist/client/resources/httpResources.d.ts +1 -169
- package/dist/client/resources/httpResources.d.ts.map +1 -1
- package/dist/client/resources/httpResources.js +1 -1
- package/dist/client/resources/httpResources.js.map +1 -1
- package/dist/client/resources/modelOperations.d.ts +0 -9
- package/dist/client/resources/modelOperations.d.ts.map +1 -1
- package/dist/client/surface.d.ts +2 -2
- package/dist/client/surface.d.ts.map +1 -1
- package/dist/client/surface.js +8 -3
- package/dist/client/surface.js.map +1 -1
- package/dist/commit/contract.d.ts +10 -10
- package/dist/commit/recordRuntime.d.ts +3 -2
- package/dist/commit/recordRuntime.d.ts.map +1 -1
- package/dist/commit/recordRuntime.js +1 -0
- package/dist/commit/recordRuntime.js.map +1 -1
- package/dist/coordination/index.d.ts +2 -2
- package/dist/coordination/index.d.ts.map +1 -1
- package/dist/coordination/index.js +3 -4
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/schema.d.ts +3 -47
- package/dist/coordination/schema.d.ts.map +1 -1
- package/dist/coordination/schema.js +7 -69
- package/dist/coordination/schema.js.map +1 -1
- package/dist/errorCodes.d.ts +2 -2
- package/dist/errorCodes.d.ts.map +1 -1
- package/dist/errorCodes.js +5 -9
- package/dist/errorCodes.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/sessions/client.d.ts +29 -0
- package/dist/sessions/client.d.ts.map +1 -0
- package/dist/sessions/client.js +69 -0
- package/dist/sessions/client.js.map +1 -0
- package/dist/sessions/contract.d.ts +97 -0
- package/dist/sessions/contract.d.ts.map +1 -0
- package/dist/sessions/contract.js +5 -0
- package/dist/sessions/contract.js.map +1 -0
- package/dist/{auth/sessionMint.d.ts → sessions/create.d.ts} +4 -4
- package/dist/sessions/create.d.ts.map +1 -0
- package/dist/{auth/sessionMint.js → sessions/create.js} +11 -10
- package/dist/sessions/create.js.map +1 -0
- package/dist/sessions/handler.d.ts +23 -0
- package/dist/sessions/handler.d.ts.map +1 -0
- package/dist/sessions/handler.js +55 -0
- package/dist/sessions/handler.js.map +1 -0
- package/dist/sessions/index.d.ts +14 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +14 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/{transport/connection/credentialLifecycle.d.ts → sessions/lifecycle.d.ts} +6 -6
- package/dist/sessions/lifecycle.d.ts.map +1 -0
- package/dist/{transport/connection/credentialLifecycle.js → sessions/lifecycle.js} +5 -5
- package/dist/sessions/lifecycle.js.map +1 -0
- package/dist/sessions/source.d.ts +24 -0
- package/dist/sessions/source.d.ts.map +1 -0
- package/dist/sessions/source.js +56 -0
- package/dist/sessions/source.js.map +1 -0
- package/dist/transport/connection/index.d.ts +0 -1
- package/dist/transport/connection/index.d.ts.map +1 -1
- package/dist/transport/connection/index.js +0 -1
- package/dist/transport/connection/index.js.map +1 -1
- package/dist/transport/connection/manager.d.ts +1 -1
- package/dist/transport/connection/manager.d.ts.map +1 -1
- package/dist/transport/http/client.d.ts +44 -16
- package/dist/transport/http/client.d.ts.map +1 -1
- package/dist/transport/http/client.js +125 -12
- package/dist/transport/http/client.js.map +1 -1
- package/dist/transport/http/options.d.ts +4 -1
- package/dist/transport/http/options.d.ts.map +1 -1
- package/dist/transport/http/transport.d.ts +25 -10
- package/dist/transport/http/transport.d.ts.map +1 -1
- package/dist/transport/http/transport.js +102 -56
- package/dist/transport/http/transport.js.map +1 -1
- package/dist/transport/websocket/commitFrames.d.ts +5 -5
- package/dist/transport/websocket/commitFrames.d.ts.map +1 -1
- package/dist/transport/websocket/commitFrames.js +1 -0
- package/dist/transport/websocket/commitFrames.js.map +1 -1
- package/dist/transport/websocket/contextSubscription.d.ts +6 -0
- package/dist/transport/websocket/contextSubscription.d.ts.map +1 -0
- package/dist/transport/websocket/contextSubscription.js +45 -0
- package/dist/transport/websocket/contextSubscription.js.map +1 -0
- package/dist/transport/websocket/frameHandlers.d.ts +0 -14
- package/dist/transport/websocket/frameHandlers.d.ts.map +1 -1
- package/dist/transport/websocket/frameHandlers.js +1 -71
- package/dist/transport/websocket/frameHandlers.js.map +1 -1
- package/dist/transport/websocket/session.d.ts +4 -0
- package/dist/transport/websocket/session.d.ts.map +1 -0
- package/dist/transport/websocket/session.js +425 -0
- package/dist/transport/websocket/session.js.map +1 -0
- package/dist/transport/websocket/sessionContract.d.ts +78 -0
- package/dist/transport/websocket/sessionContract.d.ts.map +1 -0
- package/dist/transport/websocket/sessionContract.js +2 -0
- package/dist/transport/websocket/sessionContract.js.map +1 -0
- package/dist/transport/websocket/transport.d.ts +27 -42
- package/dist/transport/websocket/transport.d.ts.map +1 -1
- package/dist/transport/websocket/transport.js +77 -102
- package/dist/transport/websocket/transport.js.map +1 -1
- package/dist/wire/inboundFrames.d.ts +0 -10
- package/dist/wire/inboundFrames.d.ts.map +1 -1
- package/dist/wire/inboundFrames.js +1 -6
- package/dist/wire/inboundFrames.js.map +1 -1
- package/package.json +7 -1
- package/src/auth/apiKey.ts +25 -44
- package/src/auth/browserCredentialSafety.ts +1 -1
- package/src/auth/capabilityLifecycle.ts +3 -2
- package/src/auth/credentialEndpoint.ts +1 -1
- package/src/auth/credentialResult.ts +2 -0
- package/src/claims/events.ts +1 -2
- package/src/client/ablo.ts +23 -13
- package/src/client/resources/httpResources.ts +2 -174
- package/src/client/resources/modelOperations.ts +0 -10
- package/src/client/surface.ts +9 -4
- package/src/commit/recordRuntime.ts +4 -2
- package/src/coordination/index.ts +2 -9
- package/src/coordination/schema.ts +7 -81
- package/src/errorCodes.ts +8 -13
- package/src/errors.ts +18 -1
- package/src/index.ts +1 -0
- package/src/sessions/client.ts +121 -0
- package/src/sessions/contract.ts +116 -0
- package/src/{auth/sessionMint.ts → sessions/create.ts} +13 -12
- package/src/sessions/handler.ts +96 -0
- package/src/sessions/index.ts +13 -0
- package/src/{transport/connection/credentialLifecycle.ts → sessions/lifecycle.ts} +5 -5
- package/src/sessions/source.ts +94 -0
- package/src/transport/connection/index.ts +0 -1
- package/src/transport/connection/manager.ts +1 -1
- package/src/transport/http/client.ts +183 -26
- package/src/transport/http/options.ts +4 -1
- package/src/transport/http/transport.ts +140 -78
- package/src/transport/websocket/commitFrames.ts +5 -5
- package/src/transport/websocket/contextSubscription.ts +55 -0
- package/src/transport/websocket/frameHandlers.ts +0 -102
- package/src/transport/websocket/session.ts +522 -0
- package/src/transport/websocket/sessionContract.ts +106 -0
- package/src/transport/websocket/transport.ts +85 -137
- package/src/wire/inboundFrames.ts +0 -6
- package/dist/auth/sessionMint.d.ts.map +0 -1
- package/dist/auth/sessionMint.js.map +0 -1
- package/dist/transport/connection/credentialLifecycle.d.ts.map +0 -1
- package/dist/transport/connection/credentialLifecycle.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session subsystem.
|
|
3
|
+
*
|
|
4
|
+
* Start here and descend into the public contract, issuance, server handler,
|
|
5
|
+
* source normalization, or credential lifecycle. Transports consume the
|
|
6
|
+
* normalized access contract and do not reconstruct session policy.
|
|
7
|
+
*/
|
|
8
|
+
export * from './contract.js';
|
|
9
|
+
export * from './client.js';
|
|
10
|
+
export * from './create.js';
|
|
11
|
+
export * from './handler.js';
|
|
12
|
+
export * from './source.js';
|
|
13
|
+
export * from './lifecycle.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session subsystem.
|
|
3
|
+
*
|
|
4
|
+
* Start here and descend into the public contract, issuance, server handler,
|
|
5
|
+
* source normalization, or credential lifecycle. Transports consume the
|
|
6
|
+
* normalized access contract and do not reconstruct session policy.
|
|
7
|
+
*/
|
|
8
|
+
export * from './contract.js';
|
|
9
|
+
export * from './client.js';
|
|
10
|
+
export * from './create.js';
|
|
11
|
+
export * from './handler.js';
|
|
12
|
+
export * from './source.js';
|
|
13
|
+
export * from './lifecycle.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Keeps the short-lived access credential fresh. It owns the re-mint hook, a
|
|
3
3
|
* single-flight guard that stops concurrent triggers from minting more than
|
|
4
|
-
* once, and
|
|
5
|
-
* — that renews the credential ahead of expiry. It reaches the rest of the
|
|
4
|
+
* once, and proactive refresh — an expiry-aware timer plus a browser OS-wake
|
|
5
|
+
* listener — that renews the credential ahead of expiry. It reaches the rest of the
|
|
6
6
|
* client only through the small {@link CredentialLifecycleContext} interface,
|
|
7
7
|
* so the two can reference each other without an import cycle.
|
|
8
8
|
*/
|
|
9
|
-
import type { RecoveryClass } from '
|
|
10
|
-
import { type Logger } from '
|
|
11
|
-
import { type CredentialProvider, type CredentialProviderResult } from '
|
|
9
|
+
import type { RecoveryClass } from '../errorCodes.js';
|
|
10
|
+
import { type Logger } from '../logger.js';
|
|
11
|
+
import { type CredentialProvider, type CredentialProviderResult } from '../auth/credentialResult.js';
|
|
12
12
|
/**
|
|
13
13
|
* Tri-state outcome of a credential re-mint, mirroring the `getToken`
|
|
14
14
|
* contract (see {@link CredentialLifecycle.refresh}).
|
|
@@ -175,4 +175,4 @@ export declare class CredentialLifecycle {
|
|
|
175
175
|
/** Tear down the proactive credential lifecycle (idempotent). */
|
|
176
176
|
stop(): void;
|
|
177
177
|
}
|
|
178
|
-
//# sourceMappingURL=
|
|
178
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/sessions/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAE/D;0DAC0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAErD;;kDAEkD;AAClD,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAE1D,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQvF;AAUD;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC;kEAC8D;IAC9D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,0EAA0E;IAC1E,cAAc,IAAI,IAAI,CAAC;IACvB;gCAC4B;IAC5B,oBAAoB,IAAI,IAAI,CAAC;CAC9B;AAED,qBAAa,mBAAmB;IAoC5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IApCzB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mBAAmB,CAAoC;IAE/D;6EACyE;IACzE,OAAO,CAAC,yBAAyB,CAAkD;IAEnF;;wDAEoD;IACpD,OAAO,CAAC,2BAA2B,CAA6B;IAEhE;;;0BAGsB;IACtB,OAAO,CAAC,qBAAqB,CAAuB;IAEpD;;;mEAG+D;IAC/D,OAAO,CAAC,iBAAiB,CAA6B;gBAGnC,GAAG,EAAE,0BAA0B,EAC/B,MAAM,GAAE,MAAmB;IAG9C;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;IAIzD,kFAAkF;IAClF,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO;IAShD;;;;;;;;;;;;;;;OAeG;IACG,OAAO,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAkDlD;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;;;;;;;;;;;;;;OAeG;IACG,wBAAwB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAY3F;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAqFhF,iEAAiE;IACjE,IAAI,IAAI,IAAI;CAIb"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Keeps the short-lived access credential fresh. It owns the re-mint hook, a
|
|
3
3
|
* single-flight guard that stops concurrent triggers from minting more than
|
|
4
|
-
* once, and
|
|
5
|
-
* — that renews the credential ahead of expiry. It reaches the rest of the
|
|
4
|
+
* once, and proactive refresh — an expiry-aware timer plus a browser OS-wake
|
|
5
|
+
* listener — that renews the credential ahead of expiry. It reaches the rest of the
|
|
6
6
|
* client only through the small {@link CredentialLifecycleContext} interface,
|
|
7
7
|
* so the two can reference each other without an import cycle.
|
|
8
8
|
*/
|
|
9
|
-
import { noopLogger } from '
|
|
10
|
-
import { credentialExpiry, credentialToken, } from '
|
|
9
|
+
import { noopLogger } from '../logger.js';
|
|
10
|
+
import { credentialExpiry, credentialToken, } from '../auth/credentialResult.js';
|
|
11
11
|
/** The fallback pre-roll interval, and also its ceiling: 10 minutes, which sits
|
|
12
12
|
* comfortably inside the server's 15-minute default credential lifetime. Used
|
|
13
13
|
* as-is when the refresher reports no expiry. */
|
|
@@ -321,4 +321,4 @@ export class CredentialLifecycle {
|
|
|
321
321
|
this.credentialLifecycleTeardown = null;
|
|
322
322
|
}
|
|
323
323
|
}
|
|
324
|
-
//# sourceMappingURL=
|
|
324
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/sessions/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime lifecycle for a renewable session supplied to `Ablo({ session })`.
|
|
3
|
+
*
|
|
4
|
+
* A session provider mints a credential, while this boundary decides when to
|
|
5
|
+
* reuse it. Keeping that policy here prevents HTTP requests and the WebSocket
|
|
6
|
+
* bootstrap from independently minting duplicate sessions for the same actor.
|
|
7
|
+
*/
|
|
8
|
+
import type { CredentialProvider, CredentialProviderResult } from '../auth/credentialResult.js';
|
|
9
|
+
import type { SessionProvider, SessionSource } from './contract.js';
|
|
10
|
+
/** Cache one minted session until it approaches expiry; concurrent refreshes share one mint. */
|
|
11
|
+
export declare function cachedSessionProvider(provider: SessionProvider): CredentialProvider;
|
|
12
|
+
/** The one credential input a live transport consumes. */
|
|
13
|
+
export interface SessionAccess {
|
|
14
|
+
readonly renewable: boolean;
|
|
15
|
+
credential(): Promise<CredentialProviderResult>;
|
|
16
|
+
}
|
|
17
|
+
/** Normalize a static or renewable session before it reaches a transport. */
|
|
18
|
+
export declare function createSessionAccess(source: SessionSource | null | undefined, credential: () => Promise<CredentialProviderResult>): SessionAccess;
|
|
19
|
+
/** Resolve the public session forms into the credential shape auth consumes. */
|
|
20
|
+
export declare function resolveSessionCredential(source: SessionSource, options: {
|
|
21
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
22
|
+
readonly dangerouslyAllowBrowser?: boolean;
|
|
23
|
+
}): string | CredentialProvider;
|
|
24
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/sessions/source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,eAAe,EAEf,aAAa,EACd,MAAM,eAAe,CAAC;AAevB,gGAAgG;AAChG,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,kBAAkB,CAcnF;AAED,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,UAAU,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACjD;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EACxC,UAAU,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,GAClD,aAAa,CAOf;AAED,gFAAgF;AAChF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IACP,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACzC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC5C,GACA,MAAM,GAAG,kBAAkB,CAmB7B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime lifecycle for a renewable session supplied to `Ablo({ session })`.
|
|
3
|
+
*
|
|
4
|
+
* A session provider mints a credential, while this boundary decides when to
|
|
5
|
+
* reuse it. Keeping that policy here prevents HTTP requests and the WebSocket
|
|
6
|
+
* bootstrap from independently minting duplicate sessions for the same actor.
|
|
7
|
+
*/
|
|
8
|
+
import { AbloValidationError } from '../errors.js';
|
|
9
|
+
import { createEndpointCredentialResolver, isCredentialEndpoint, } from '../auth/credentialEndpoint.js';
|
|
10
|
+
import { protectBrowserCredentialProvider } from '../auth/browserCredentialSafety.js';
|
|
11
|
+
const SESSION_REFRESH_SKEW_MS = 30_000;
|
|
12
|
+
function remainsUsable(session, now) {
|
|
13
|
+
const expiresAt = Date.parse(session.expiresAt);
|
|
14
|
+
return Number.isFinite(expiresAt) && expiresAt - now > SESSION_REFRESH_SKEW_MS;
|
|
15
|
+
}
|
|
16
|
+
/** Cache one minted session until it approaches expiry; concurrent refreshes share one mint. */
|
|
17
|
+
export function cachedSessionProvider(provider) {
|
|
18
|
+
let current = null;
|
|
19
|
+
let refreshing = null;
|
|
20
|
+
return async () => {
|
|
21
|
+
if (current && remainsUsable(current, Date.now()))
|
|
22
|
+
return current;
|
|
23
|
+
refreshing ??= provider().then((next) => {
|
|
24
|
+
current = next;
|
|
25
|
+
return next;
|
|
26
|
+
}).finally(() => {
|
|
27
|
+
refreshing = null;
|
|
28
|
+
});
|
|
29
|
+
return refreshing;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Normalize a static or renewable session before it reaches a transport. */
|
|
33
|
+
export function createSessionAccess(source, credential) {
|
|
34
|
+
return {
|
|
35
|
+
renewable: typeof source === 'function'
|
|
36
|
+
|| (typeof source === 'object' && source !== null && 'endpoint' in source),
|
|
37
|
+
credential,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** Resolve the public session forms into the credential shape auth consumes. */
|
|
41
|
+
export function resolveSessionCredential(source, options) {
|
|
42
|
+
if (typeof source === 'function') {
|
|
43
|
+
return protectBrowserCredentialProvider(cachedSessionProvider(source), options.dangerouslyAllowBrowser);
|
|
44
|
+
}
|
|
45
|
+
if (!('endpoint' in source))
|
|
46
|
+
return source.token;
|
|
47
|
+
if (!isCredentialEndpoint(source.endpoint)) {
|
|
48
|
+
throw new AbloValidationError('`session.endpoint` expects a URL or path such as \'/api/ablo-session\'.', { code: 'invalid_options', param: 'session.endpoint' });
|
|
49
|
+
}
|
|
50
|
+
return protectBrowserCredentialProvider(createEndpointCredentialResolver(source.endpoint, {
|
|
51
|
+
fetch: options.fetch,
|
|
52
|
+
timeoutMs: source.timeoutMs,
|
|
53
|
+
allowCrossOrigin: source.allowCrossOrigin,
|
|
54
|
+
}), options.dangerouslyAllowBrowser);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/sessions/source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AAEtF,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,SAAS,aAAa,CAAC,OAA6C,EAAE,GAAW;IAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,uBAAuB,CAAC;AACjF,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CAAC,QAAyB;IAC7D,IAAI,OAAO,GAAgD,IAAI,CAAC;IAChE,IAAI,UAAU,GAA0C,IAAI,CAAC;IAE7D,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAAE,OAAO,OAAO,CAAC;QAClE,UAAU,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACtC,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACd,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAQD,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CACjC,MAAwC,EACxC,UAAmD;IAEnD,OAAO;QACL,SAAS,EACP,OAAO,MAAM,KAAK,UAAU;eACzB,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,UAAU,IAAI,MAAM,CAAC;QAC5E,UAAU;KACX,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,wBAAwB,CACtC,MAAqB,EACrB,OAGC;IAED,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,gCAAgC,CACrC,qBAAqB,CAAC,MAAM,CAAC,EAC7B,OAAO,CAAC,uBAAuB,CAChC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IACjD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,mBAAmB,CAC3B,yEAAyE,EACzE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CACvD,CAAC;IACJ,CAAC;IACD,OAAO,gCAAgC,CAAC,gCAAgC,CAAC,MAAM,CAAC,QAAQ,EAAE;QACxF,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transport/connection/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transport/connection/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transport/connection/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transport/connection/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"}
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
*/
|
|
42
42
|
import { probeNetwork, type ProbeResult } from './networkProbe.js';
|
|
43
43
|
import type { AuthTokenGetter } from '../../auth/credentialSource.js';
|
|
44
|
-
import type { CredentialRefreshOutcome } from '
|
|
44
|
+
import type { CredentialRefreshOutcome } from '../../sessions/lifecycle.js';
|
|
45
45
|
import { type Logger } from '../../logger.js';
|
|
46
46
|
import { type TransportObservability } from '../../observability.js';
|
|
47
47
|
export type ConnectionState = 'connected' | 'offline' | 'probing_network' | 'validating_session' | 'refreshing_credential' | 'reconnecting' | 'backoff' | 'waiting_for_network' | 'auth_blocked' | 'session_expired';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/transport/connection/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/transport/connection/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { HttpClientConfig } from './options.js';
|
|
2
|
-
import type { CommitResource, HttpClaimApi, HttpClaimsResource, HttpLogsResource, ModelReadOptions, ModelList
|
|
2
|
+
import type { CommitResource, HttpClaimApi, HttpClaimsResource, HttpLogsResource, ModelReadOptions, ModelList } from '../../client/resources/httpResources.js';
|
|
3
3
|
import type { ModelCreateParams, ModelCreateManyParams, ModelDeleteParams, ServerReadOptions, ListAllOptions, ModelReadParams, ModelUpdateParams } from '../../client/resources/modelOperations.js';
|
|
4
4
|
import type { Schema, SchemaRecord, InferModel, InferCreate } from '../../schema/schema.js';
|
|
5
5
|
import { type ModelUpdater, type FunctionalUpdateOptions } from '../../client/resources/functionalUpdate.js';
|
|
6
|
+
import type { JsonValue } from '../../types/streams.js';
|
|
6
7
|
import type { ReadDependency } from '../../coordination/schema.js';
|
|
7
8
|
import type { EffectiveAuthority } from '../../auth/capability.js';
|
|
9
|
+
import type { WebSocketObservedDelta } from '../websocket/sessionContract.js';
|
|
10
|
+
import type { CoreSyncEventMap } from '../websocket/transport.js';
|
|
8
11
|
export interface AbloHttpClientOptions<S extends SchemaRecord> extends HttpClientConfig<S> {
|
|
9
12
|
/**
|
|
10
13
|
* Per-request deadline. A black-holed HTTP request otherwise has no platform
|
|
@@ -12,6 +15,16 @@ export interface AbloHttpClientOptions<S extends SchemaRecord> extends HttpClien
|
|
|
12
15
|
* @default 30_000
|
|
13
16
|
*/
|
|
14
17
|
readonly timeoutMs?: number;
|
|
18
|
+
/** Initial groups observed by a session-backed WebSocket client. */
|
|
19
|
+
readonly groups?: readonly string[];
|
|
20
|
+
/** Application frame names accepted by `subscribe` on the WebSocket transport. */
|
|
21
|
+
readonly collaborationEvents?: readonly string[];
|
|
22
|
+
/** Durable resume position for WebSocket observation. */
|
|
23
|
+
readonly cursorStore?: import('../../client/contract.js').ObserveCursorStore;
|
|
24
|
+
readonly cursorKey?: string;
|
|
25
|
+
readonly reconnectDelay?: number;
|
|
26
|
+
readonly maxReconnectDelay?: number;
|
|
27
|
+
readonly connectTimeoutMs?: number;
|
|
15
28
|
}
|
|
16
29
|
declare const capturedRowBrand: unique symbol;
|
|
17
30
|
/** A point-read row whose exact watermark is privately retained by its client. */
|
|
@@ -30,7 +43,7 @@ export type HttpModelMutationParams<P> = Omit<P, 'reads'> & {
|
|
|
30
43
|
* coordinated writes.
|
|
31
44
|
* It deliberately omits the stateful client's local-only
|
|
32
45
|
* reads (the `local` namespace) and live subscriptions (`onChange`), which need
|
|
33
|
-
* a
|
|
46
|
+
* a local graph and a persistent socket; those are absent from the type, so
|
|
34
47
|
* reaching for one is a compile error rather than a runtime gap.
|
|
35
48
|
*
|
|
36
49
|
* This is also the base the reactive per-model surface is composed from, rather
|
|
@@ -101,7 +114,7 @@ export interface HttpModelClient<T, C = T> {
|
|
|
101
114
|
}
|
|
102
115
|
/**
|
|
103
116
|
* The type of the stateless HTTP client: a typed {@link HttpModelClient} per
|
|
104
|
-
* schema model, plus `commits
|
|
117
|
+
* schema model, plus `commits` and lifecycle operations. It
|
|
105
118
|
* exposes only what request/response transport can do, so reaching for a
|
|
106
119
|
* stateful-only capability — the `local` reads, `onChange`, or the synchronous
|
|
107
120
|
* `claim.state`/`queue`/`reorder` reads — is a compile error rather than a value
|
|
@@ -134,21 +147,36 @@ export type AbloHttpClient<S extends SchemaRecord> = {
|
|
|
134
147
|
dispose(): Promise<void>;
|
|
135
148
|
/** Resolves the bearer credential this client authenticates with, or `null` if none is set. */
|
|
136
149
|
getAuthToken(): Promise<string | null>;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
150
|
+
};
|
|
151
|
+
/** The same typed resource client, with server-pushed capabilities carried by WebSocket. */
|
|
152
|
+
export type AbloWebSocketClient<S extends SchemaRecord> = AbloHttpClient<S> & {
|
|
153
|
+
observe(options?: {
|
|
154
|
+
signal?: AbortSignal;
|
|
155
|
+
}): AsyncIterable<WebSocketObservedDelta>;
|
|
156
|
+
subscribe<K extends keyof CoreSyncEventMap>(event: K, listener: (...args: CoreSyncEventMap[K]) => void): () => void;
|
|
157
|
+
updateSubscription(groups: readonly string[], options?: {
|
|
158
|
+
timeoutMs?: number;
|
|
159
|
+
}): Promise<{
|
|
160
|
+
groups: string[];
|
|
161
|
+
}>;
|
|
162
|
+
readonly presence: {
|
|
163
|
+
update(input?: {
|
|
164
|
+
readonly status?: 'online' | 'away' | 'offline';
|
|
165
|
+
readonly customStatus?: string;
|
|
166
|
+
readonly timezone?: string;
|
|
167
|
+
readonly activity?: Readonly<Record<string, JsonValue>>;
|
|
168
|
+
}): Promise<void>;
|
|
169
|
+
};
|
|
170
|
+
readonly collaboration: {
|
|
171
|
+
send(event: string, payload: Readonly<Record<string, JsonValue>>): Promise<void>;
|
|
172
|
+
};
|
|
144
173
|
};
|
|
145
174
|
/**
|
|
146
|
-
* Builds the
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* credential is the identity.
|
|
175
|
+
* Builds the typed headless client. An API-key identity uses HTTP. A session
|
|
176
|
+
* identity uses one lazily opened WebSocket by default for commits and live
|
|
177
|
+
* coordination until `dispose()`; point reads and administration remain HTTP.
|
|
150
178
|
*/
|
|
151
|
-
/** @internal Constructed only through the public `Ablo(
|
|
152
|
-
export declare function createAbloHttpClient<S extends SchemaRecord>(options: AbloHttpClientOptions<S>): AbloHttpClient<S>;
|
|
179
|
+
/** @internal Constructed only through the public `Ablo()` factory. */
|
|
180
|
+
export declare function createAbloHttpClient<S extends SchemaRecord>(options: AbloHttpClientOptions<S>): AbloHttpClient<S> | AbloWebSocketClient<S>;
|
|
153
181
|
export {};
|
|
154
182
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/transport/http/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/transport/http/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,14 +18,15 @@
|
|
|
18
18
|
* stateful client offers.
|
|
19
19
|
*/
|
|
20
20
|
import { createHttpTransport, } from './transport.js';
|
|
21
|
-
import { modelWireNames } from '../../auth/capability.js';
|
|
22
21
|
import { collectModelList, modelList } from '../../client/resources/httpResources.js';
|
|
23
22
|
import { resolveCreateId } from '../../client/resources/modelCreate.js';
|
|
24
23
|
import { omittedModelError } from '../../schema/select.js';
|
|
25
24
|
import { reconcileFunctionalUpdate, } from '../../client/resources/functionalUpdate.js';
|
|
26
25
|
import { AbloConnectionError, AbloValidationError } from '../../errors.js';
|
|
27
26
|
import { capturePointRead, createReadSetContext, kReadEvidence, prepareReadSet, } from '../../commit/readSetContext.js';
|
|
28
|
-
import { recordHttpCommitReceipt } from '../../commit/recordRuntime.js';
|
|
27
|
+
import { recordHttpCommitReceipt, recordWebSocketCommitReceipt, } from '../../commit/recordRuntime.js';
|
|
28
|
+
import { createWebSocketSession, } from '../websocket/session.js';
|
|
29
|
+
import { subscribeWebSocketReadChanges } from '../websocket/contextSubscription.js';
|
|
29
30
|
/**
|
|
30
31
|
* Private transport members that pass straight through the facade. Everything
|
|
31
32
|
* else must be a declared schema model; there is no dynamic fallback namespace.
|
|
@@ -39,7 +40,6 @@ const PROTOCOL_MEMBERS = new Set([
|
|
|
39
40
|
'logs',
|
|
40
41
|
'identity',
|
|
41
42
|
'getAuthToken',
|
|
42
|
-
'sessions',
|
|
43
43
|
]);
|
|
44
44
|
/** Narrows a bare property name to a transport key so the facade can index it typed. */
|
|
45
45
|
function isProtocolMember(prop) {
|
|
@@ -189,29 +189,95 @@ function createHttpModelClient(protocol, modelName, clientIdentity, readSetConte
|
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
191
|
/**
|
|
192
|
-
* Builds the
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
* credential is the identity.
|
|
192
|
+
* Builds the typed headless client. An API-key identity uses HTTP. A session
|
|
193
|
+
* identity uses one lazily opened WebSocket by default for commits and live
|
|
194
|
+
* coordination until `dispose()`; point reads and administration remain HTTP.
|
|
196
195
|
*/
|
|
197
|
-
/** @internal Constructed only through the public `Ablo(
|
|
196
|
+
/** @internal Constructed only through the public `Ablo()` factory. */
|
|
198
197
|
export function createAbloHttpClient(options) {
|
|
199
198
|
const { schema, onCommitReceipt, ...rest } = options;
|
|
199
|
+
const usesWebSocket = options.transport === 'websocket'
|
|
200
|
+
|| (options.transport === undefined && options.session != null);
|
|
200
201
|
const readSetContext = createReadSetContext();
|
|
201
202
|
const transport = createHttpTransport({
|
|
202
203
|
...rest,
|
|
203
|
-
// Derived from the schema this client is bound to, never assembled by hand
|
|
204
|
-
// — see `auth/capability.ts`.
|
|
205
|
-
modelTypenames: modelWireNames(schema.models),
|
|
206
204
|
onCommitReceipt: (observation) => {
|
|
207
205
|
recordHttpCommitReceipt(readSetContext, observation);
|
|
208
206
|
onCommitReceipt?.(observation);
|
|
209
207
|
},
|
|
208
|
+
...(usesWebSocket ? {
|
|
209
|
+
dispatchCommit: async (input) => {
|
|
210
|
+
const receipt = await (await webSocketSession()).commit(input);
|
|
211
|
+
recordWebSocketCommitReceipt(readSetContext, {
|
|
212
|
+
receipt,
|
|
213
|
+
operations: input.operations,
|
|
214
|
+
reads: input.reads,
|
|
215
|
+
});
|
|
216
|
+
return receipt;
|
|
217
|
+
},
|
|
218
|
+
dispatchClaim: async (input) => (await webSocketSession()).claim(input),
|
|
219
|
+
releaseDispatchedClaim: (input) => {
|
|
220
|
+
void webSocketSession().then((session) => session.release(input));
|
|
221
|
+
},
|
|
222
|
+
} : {}),
|
|
210
223
|
});
|
|
211
224
|
const schemaModels = new Set(Object.keys(schema.models));
|
|
212
225
|
const clientIdentity = {};
|
|
213
226
|
const omittedModels = new Set(schema.omittedModels ?? []);
|
|
214
227
|
const models = new Map();
|
|
228
|
+
let webSocket = null;
|
|
229
|
+
let webSocketPromise = null;
|
|
230
|
+
const webSocketOpen = new AbortController();
|
|
231
|
+
let disposed = false;
|
|
232
|
+
const webSocketSession = () => {
|
|
233
|
+
if (disposed) {
|
|
234
|
+
return Promise.reject(new AbloConnectionError('This Ablo client is disposed.'));
|
|
235
|
+
}
|
|
236
|
+
if (webSocket)
|
|
237
|
+
return Promise.resolve(webSocket);
|
|
238
|
+
if (webSocketPromise)
|
|
239
|
+
return webSocketPromise;
|
|
240
|
+
webSocketPromise = (async () => {
|
|
241
|
+
await transport.ready();
|
|
242
|
+
const session = await createWebSocketSession({
|
|
243
|
+
baseUrl: rest.baseURL ?? undefined,
|
|
244
|
+
access: transport.access,
|
|
245
|
+
syncGroups: options.groups,
|
|
246
|
+
collaborationEvents: options.collaborationEvents,
|
|
247
|
+
cursorStore: options.cursorStore,
|
|
248
|
+
cursorKey: options.cursorKey,
|
|
249
|
+
reconnectDelay: options.reconnectDelay,
|
|
250
|
+
maxReconnectDelay: options.maxReconnectDelay,
|
|
251
|
+
connectTimeoutMs: options.connectTimeoutMs,
|
|
252
|
+
}, webSocketOpen.signal);
|
|
253
|
+
if (disposed) {
|
|
254
|
+
await session.close();
|
|
255
|
+
throw new AbloConnectionError('This Ablo client is disposed.');
|
|
256
|
+
}
|
|
257
|
+
webSocket = session;
|
|
258
|
+
return session;
|
|
259
|
+
})().finally(() => {
|
|
260
|
+
webSocketPromise = null;
|
|
261
|
+
});
|
|
262
|
+
return webSocketPromise;
|
|
263
|
+
};
|
|
264
|
+
const ready = async () => {
|
|
265
|
+
await transport.ready();
|
|
266
|
+
if (usesWebSocket)
|
|
267
|
+
await webSocketSession();
|
|
268
|
+
};
|
|
269
|
+
const dispose = async () => {
|
|
270
|
+
if (disposed)
|
|
271
|
+
return;
|
|
272
|
+
disposed = true;
|
|
273
|
+
webSocketOpen.abort();
|
|
274
|
+
const opening = webSocketPromise;
|
|
275
|
+
if (webSocket)
|
|
276
|
+
await webSocket.close();
|
|
277
|
+
else
|
|
278
|
+
await opening?.then((session) => session.close()).catch(() => undefined);
|
|
279
|
+
await transport.dispose();
|
|
280
|
+
};
|
|
215
281
|
const model = (name) => {
|
|
216
282
|
const cached = models.get(name);
|
|
217
283
|
if (cached)
|
|
@@ -243,13 +309,51 @@ export function createAbloHttpClient(options) {
|
|
|
243
309
|
return {
|
|
244
310
|
context: readSetContext,
|
|
245
311
|
client: clientIdentity,
|
|
246
|
-
onChange:
|
|
312
|
+
onChange: (reads, listener) => usesWebSocket
|
|
313
|
+
? subscribeWhenConnected(webSocketSession, reads, listener)
|
|
314
|
+
: transport.onChange(reads, listener),
|
|
247
315
|
};
|
|
248
316
|
}
|
|
249
317
|
if (typeof prop !== 'string')
|
|
250
318
|
return undefined;
|
|
251
319
|
if (prop === 'commits')
|
|
252
320
|
return commits;
|
|
321
|
+
if (prop === 'ready')
|
|
322
|
+
return ready;
|
|
323
|
+
if (prop === 'dispose')
|
|
324
|
+
return dispose;
|
|
325
|
+
if (usesWebSocket && prop === 'observe') {
|
|
326
|
+
return async function* (observeOptions) {
|
|
327
|
+
yield* (await webSocketSession()).observe(observeOptions);
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
if (usesWebSocket && prop === 'subscribe') {
|
|
331
|
+
return (event, listener) => {
|
|
332
|
+
let stop;
|
|
333
|
+
let cancelled = false;
|
|
334
|
+
void webSocketSession().then((session) => {
|
|
335
|
+
if (!cancelled)
|
|
336
|
+
stop = session.subscribe(event, listener);
|
|
337
|
+
});
|
|
338
|
+
return () => { cancelled = true; stop?.(); };
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
if (usesWebSocket && prop === 'updateSubscription') {
|
|
342
|
+
return async (groups, subscriptionOptions) => {
|
|
343
|
+
const result = await (await webSocketSession()).updateSubscription(groups, subscriptionOptions);
|
|
344
|
+
return { groups: result.syncGroups };
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
if (usesWebSocket && prop === 'presence') {
|
|
348
|
+
return {
|
|
349
|
+
update: async (input) => (await webSocketSession()).presence.update(input),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
if (usesWebSocket && prop === 'collaboration') {
|
|
353
|
+
return {
|
|
354
|
+
send: async (event, payload) => (await webSocketSession()).collaboration.send(event, payload),
|
|
355
|
+
};
|
|
356
|
+
}
|
|
253
357
|
// Real protocol members pass through unchanged.
|
|
254
358
|
if (isProtocolMember(prop)) {
|
|
255
359
|
return transport[prop];
|
|
@@ -271,4 +375,13 @@ export function createAbloHttpClient(options) {
|
|
|
271
375
|
// method on this type is missing at runtime.
|
|
272
376
|
return facade;
|
|
273
377
|
}
|
|
378
|
+
function subscribeWhenConnected(session, reads, listener) {
|
|
379
|
+
let stop;
|
|
380
|
+
let cancelled = false;
|
|
381
|
+
void session().then((connected) => {
|
|
382
|
+
if (!cancelled)
|
|
383
|
+
stop = subscribeWebSocketReadChanges(connected, reads, listener);
|
|
384
|
+
});
|
|
385
|
+
return () => { cancelled = true; stop?.(); };
|
|
386
|
+
}
|
|
274
387
|
//# sourceMappingURL=client.js.map
|