@brass-build/client 0.1.0 → 0.2.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/AGENTS.md +72 -63
- package/CHANGELOG.md +86 -0
- package/README.md +317 -231
- package/dist/auth-flow.d.ts +10 -1
- package/dist/auth-flow.d.ts.map +1 -1
- package/dist/auth-flow.js +64 -20
- package/dist/auth-flow.js.map +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +217 -75
- package/dist/client.js.map +1 -1
- package/dist/document-engine.d.ts +4 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +9 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-streams.d.ts +8 -1
- package/dist/document-streams.d.ts.map +1 -1
- package/dist/document-streams.js +79 -8
- package/dist/document-streams.js.map +1 -1
- package/dist/documents-namespace.d.ts.map +1 -1
- package/dist/documents-namespace.js +19 -3
- package/dist/documents-namespace.js.map +1 -1
- package/dist/documents.d.ts +43 -14
- package/dist/documents.d.ts.map +1 -1
- package/dist/documents.js +871 -223
- package/dist/documents.js.map +1 -1
- package/dist/embed-protocol.d.ts +3 -0
- package/dist/embed-protocol.d.ts.map +1 -0
- package/dist/embed-protocol.js +26 -0
- package/dist/embed-protocol.js.map +1 -0
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +8 -1
- package/dist/emitter.js.map +1 -1
- package/dist/export-guest.d.ts.map +1 -1
- package/dist/export-guest.js +14 -6
- package/dist/export-guest.js.map +1 -1
- package/dist/fetch-deadline.d.ts +22 -0
- package/dist/fetch-deadline.d.ts.map +1 -0
- package/dist/fetch-deadline.js +96 -0
- package/dist/fetch-deadline.js.map +1 -0
- package/dist/fetch-retry.d.ts +1 -0
- package/dist/fetch-retry.d.ts.map +1 -1
- package/dist/fetch-retry.js +12 -5
- package/dist/fetch-retry.js.map +1 -1
- package/dist/handle-types.d.ts +150 -0
- package/dist/handle-types.d.ts.map +1 -0
- package/dist/handle-types.js +8 -0
- package/dist/handle-types.js.map +1 -0
- package/dist/handles.d.ts +48 -48
- package/dist/handles.d.ts.map +1 -1
- package/dist/handles.js +3122 -501
- package/dist/handles.js.map +1 -1
- package/dist/hosted-runtime.d.ts.map +1 -1
- package/dist/hosted-runtime.js +8 -12
- package/dist/hosted-runtime.js.map +1 -1
- package/dist/hosted-ui.d.ts +0 -1
- package/dist/hosted-ui.d.ts.map +1 -1
- package/dist/hosted-ui.js +29 -24
- package/dist/hosted-ui.js.map +1 -1
- package/dist/importer.d.ts.map +1 -1
- package/dist/importer.js +253 -8
- package/dist/importer.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/join-coverage.d.ts +12 -0
- package/dist/join-coverage.d.ts.map +1 -0
- package/dist/join-coverage.js +37 -0
- package/dist/join-coverage.js.map +1 -0
- package/dist/jwt.d.ts.map +1 -1
- package/dist/jwt.js +5 -1
- package/dist/jwt.js.map +1 -1
- package/dist/launch-context.js +2 -2
- package/dist/launch-context.js.map +1 -1
- package/dist/mutate-batching.d.ts +25 -2
- package/dist/mutate-batching.d.ts.map +1 -1
- package/dist/mutate-batching.js +57 -10
- package/dist/mutate-batching.js.map +1 -1
- package/dist/open-document.d.ts +15 -1
- package/dist/open-document.d.ts.map +1 -1
- package/dist/open-document.js +1851 -321
- package/dist/open-document.js.map +1 -1
- package/dist/presence.d.ts +28 -0
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +149 -7
- package/dist/presence.js.map +1 -1
- package/dist/record-paging.d.ts +336 -71
- package/dist/record-paging.d.ts.map +1 -1
- package/dist/record-paging.js +591 -127
- package/dist/record-paging.js.map +1 -1
- package/dist/selection-persistence.d.ts.map +1 -1
- package/dist/selection-persistence.js +11 -1
- package/dist/selection-persistence.js.map +1 -1
- package/dist/serializer.d.ts +30 -1
- package/dist/serializer.d.ts.map +1 -1
- package/dist/session-persistence.d.ts.map +1 -1
- package/dist/session-persistence.js +9 -8
- package/dist/session-persistence.js.map +1 -1
- package/dist/session-toolbar.d.ts +0 -1
- package/dist/session-toolbar.d.ts.map +1 -1
- package/dist/session-toolbar.js +226 -75
- package/dist/session-toolbar.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +87 -18
- package/dist/session.js.map +1 -1
- package/dist/tail-ops.d.ts +14 -4
- package/dist/tail-ops.d.ts.map +1 -1
- package/dist/tail-ops.js +75 -15
- package/dist/tail-ops.js.map +1 -1
- package/dist/topic-lifecycle.d.ts +4 -0
- package/dist/topic-lifecycle.d.ts.map +1 -1
- package/dist/topic-lifecycle.js +25 -1
- package/dist/topic-lifecycle.js.map +1 -1
- package/dist/types.d.ts +47 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/undo.d.ts +2 -3
- package/dist/undo.d.ts.map +1 -1
- package/dist/undo.js +11 -0
- package/dist/undo.js.map +1 -1
- package/dist/unload-guard.d.ts +5 -0
- package/dist/unload-guard.d.ts.map +1 -0
- package/dist/unload-guard.js +88 -0
- package/dist/unload-guard.js.map +1 -0
- package/dist/version-bar.d.ts +4 -3
- package/dist/version-bar.d.ts.map +1 -1
- package/dist/version-bar.js +140 -19
- package/dist/version-bar.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/dist/vite.d.ts +18 -2
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +133 -8
- package/dist/vite.js.map +1 -1
- package/dist/ws-client.d.ts +23 -3
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +339 -89
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-frame-limit.d.ts.map +1 -1
- package/dist/ws-frame-limit.js +19 -12
- package/dist/ws-frame-limit.js.map +1 -1
- package/docs/app-manifest.md +7 -8
- package/docs/custom-chrome.md +17 -20
- package/docs/hosted-ui-advanced.md +14 -17
- package/docs/imported-documents.md +53 -197
- package/docs/presence.md +45 -21
- package/docs/schemas.md +12 -17
- package/docs/streams.md +55 -57
- package/package.json +4 -3
- package/src/auth-flow.ts +90 -23
- package/src/client.ts +225 -78
- package/src/document-engine.ts +15 -0
- package/src/document-signals.ts +7 -7
- package/src/document-streams.ts +95 -9
- package/src/documents-namespace.ts +18 -3
- package/src/documents.ts +983 -277
- package/src/embed-protocol.ts +25 -0
- package/src/emitter.ts +8 -1
- package/src/export-guest.ts +15 -9
- package/src/fetch-deadline.ts +119 -0
- package/src/fetch-retry.ts +14 -5
- package/src/handle-types.ts +303 -0
- package/src/handles.ts +3406 -683
- package/src/hosted-runtime.ts +8 -12
- package/src/hosted-ui.ts +28 -32
- package/src/importer.ts +261 -8
- package/src/index.ts +29 -18
- package/src/internal.ts +1 -0
- package/src/join-coverage.ts +42 -0
- package/src/jwt.ts +8 -1
- package/src/launch-context.ts +2 -2
- package/src/mutate-batching.ts +60 -11
- package/src/open-document.ts +2355 -515
- package/src/presence.ts +210 -11
- package/src/record-paging.ts +687 -137
- package/src/selection-persistence.ts +10 -1
- package/src/serializer.ts +33 -1
- package/src/session-persistence.ts +9 -8
- package/src/session-toolbar.ts +249 -80
- package/src/session.ts +91 -17
- package/src/tail-ops.ts +76 -10
- package/src/topic-lifecycle.ts +31 -1
- package/src/types.ts +56 -4
- package/src/undo.ts +13 -5
- package/src/unload-guard.ts +91 -0
- package/src/version-bar.ts +163 -25
- package/src/version.ts +1 -1
- package/src/vite.ts +175 -10
- package/src/ws-client.ts +392 -92
- package/src/ws-frame-limit.ts +19 -12
package/dist/jwt.js
CHANGED
|
@@ -6,7 +6,11 @@ export function decodeIdToken(idToken) {
|
|
|
6
6
|
if (!payloadPart)
|
|
7
7
|
return null;
|
|
8
8
|
try {
|
|
9
|
-
|
|
9
|
+
// A JWT payload is UTF-8, and `atob` answers one latin1 character per
|
|
10
|
+
// byte, so a claim with any non-ASCII character (an accented name in
|
|
11
|
+
// `email`) needs the bytes decoded rather than the string used as is.
|
|
12
|
+
const bytes = Uint8Array.from(atob(payloadPart.replace(/-/g, '+').replace(/_/g, '/')), (ch) => ch.charCodeAt(0));
|
|
13
|
+
const json = new TextDecoder().decode(bytes);
|
|
10
14
|
const claims = JSON.parse(json);
|
|
11
15
|
if (typeof claims.sub !== 'string')
|
|
12
16
|
return null;
|
package/dist/jwt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,sEAAsE;QACtE,qEAAqE;QACrE,sEAAsE;QACtE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAC3B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CACzB,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuC,CAAC;QACtE,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAChD,MAAM,IAAI,GAAc,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QAC5C,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/launch-context.js
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
// collide with an app's own query string, and stripped from the address bar
|
|
11
11
|
// on read so it does not linger in history or a referrer.
|
|
12
12
|
//
|
|
13
|
-
// The dashboard writes this parameter
|
|
14
|
-
//
|
|
13
|
+
// The dashboard writes this parameter when it opens an app, and the published
|
|
14
|
+
// SDK cannot import the dashboard's source, so the name is spelled in both
|
|
15
15
|
// places.
|
|
16
16
|
export const LAUNCH_ORGANIZATION_PARAM = 'brass_org';
|
|
17
17
|
// Pure + search-string-in so it stays testable, mirroring
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch-context.js","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,iEAAiE;AACjE,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AACxE,0EAA0E;AAC1E,2CAA2C;AAC3C,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,0DAA0D;AAC1D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"launch-context.js","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,iEAAiE;AACjE,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AACxE,0EAA0E;AAC1E,2CAA2C;AAC3C,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,0DAA0D;AAC1D,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,UAAU;AAEV,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;AAErD,0DAA0D;AAC1D,gCAAgC;AAChC,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpC,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAED,2EAA2E;AAC3E,wEAAwE;AACxE,0EAA0E;AAC1E,sBAAsB;AACtB,MAAM,UAAU,2BAA2B;IACzC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,cAAc,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxE,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -6,9 +6,32 @@ export declare const MUTATE_BATCH_JSON_BUDGET_CHARS: number;
|
|
|
6
6
|
export declare class MutateBatcher {
|
|
7
7
|
private readonly _flush;
|
|
8
8
|
private _chars;
|
|
9
|
-
|
|
9
|
+
private _keys;
|
|
10
|
+
private _before;
|
|
11
|
+
constructor(_flush: (keys: readonly string[]) => void);
|
|
12
|
+
/** Register work to run immediately before every commit this batcher
|
|
13
|
+
* takes, including the caller's final one via `flushNow`. */
|
|
14
|
+
onFlush(before: () => void): void;
|
|
15
|
+
/** Name the record keys a write that has just landed covers. Called AFTER
|
|
16
|
+
* the write, so a key is never named to a commit that precedes it. */
|
|
17
|
+
noteKeys(keys: Iterable<string>): void;
|
|
10
18
|
/** Account for one assignment, from the proxy's set trap. */
|
|
11
19
|
record(value: unknown): void;
|
|
12
|
-
|
|
20
|
+
/** Account for a write whose caller already knows its size in the same
|
|
21
|
+
* unit `record` charges, the UNCOMPRESSED JSON the write carries.
|
|
22
|
+
*
|
|
23
|
+
* A page is stored gzipped, so charging the bytes it occupies would price
|
|
24
|
+
* the same records about five times cheaper than the map path prices them,
|
|
25
|
+
* and the same write would produce ops an order of magnitude apart
|
|
26
|
+
* depending on whether the store was already paged when it arrived. The
|
|
27
|
+
* budget answers for the records a commit carries, so a page charges what
|
|
28
|
+
* it packs. */
|
|
29
|
+
recordChars(chars: number): void;
|
|
30
|
+
/** Account for one deletion. What a delete puts in the op is its KEY, so
|
|
31
|
+
* that is what it costs: charging a flat nominal instead prices a bulk
|
|
32
|
+
* delete at a fraction of the bytes it writes, and a store big enough to
|
|
33
|
+
* page is big enough for the difference to carry the whole delete into one
|
|
34
|
+
* op. */
|
|
35
|
+
recordDelete(key: string): void;
|
|
13
36
|
}
|
|
14
37
|
//# sourceMappingURL=mutate-batching.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate-batching.d.ts","sourceRoot":"","sources":["../src/mutate-batching.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mutate-batching.d.ts","sourceRoot":"","sources":["../src/mutate-batching.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,8BAA8B,QAAa,CAAC;AAkBzD;;;GAGG;AACH,qBAAa,aAAa;IAeZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdnC,OAAO,CAAC,MAAM,CAAK;IAQnB,OAAO,CAAC,KAAK,CAAgB;IAI7B,OAAO,CAAC,OAAO,CAA6B;gBAEf,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI;IAEtE;kEAC8D;IAC9D,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC;2EACuE;IACvE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAItC,6DAA6D;IAC7D,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5B;;;;;;;;oBAQgB;IAChB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAchC;;;;cAIU;IACV,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAGhC"}
|
package/dist/mutate-batching.js
CHANGED
|
@@ -11,12 +11,17 @@
|
|
|
11
11
|
// as several updates instead of one, so they can see it part-applied. It
|
|
12
12
|
// converges normally and stays one undo step.
|
|
13
13
|
// A batch closes once the values assigned since the last commit reach
|
|
14
|
-
// roughly this much JSON,
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
|
|
14
|
+
// roughly this much JSON, so op size tracks the budget rather than the
|
|
15
|
+
// mutation, for narrow and wide records alike.
|
|
16
|
+
//
|
|
17
|
+
// The budget answers to STORAGE, not to the socket: an op past the frame cap
|
|
18
|
+
// takes the HTTP write, which carries about 190x a frame. What storage meters
|
|
19
|
+
// is op COUNT (a seq allocation and HEAD update on the document's one
|
|
20
|
+
// partition, plus an entry in the join's tail budget). Measured on a
|
|
21
|
+
// 500,000-element write, 48 KB produces 526 ops and 512 KB produces 158, past
|
|
22
|
+
// which the budget stops binding for that shape, while encode time stays flat
|
|
23
|
+
// throughout: a smaller budget spends op count and buys nothing.
|
|
24
|
+
export const MUTATE_BATCH_JSON_BUDGET_CHARS = 512 * 1024;
|
|
20
25
|
/** Rough size of one assigned value. Runs on every assignment, so it only
|
|
21
26
|
* has to be proportional; an unserializable value counts as nominal
|
|
22
27
|
* rather than throwing, since the assignment itself is where that error
|
|
@@ -43,23 +48,65 @@ function approximateChars(value) {
|
|
|
43
48
|
export class MutateBatcher {
|
|
44
49
|
_flush;
|
|
45
50
|
_chars = 0;
|
|
51
|
+
// The record keys whose writes have landed since the last commit, handed to
|
|
52
|
+
// the flush so a caller with something to land BESIDE those records (an
|
|
53
|
+
// ordered map's order entries) can name exactly the ones this commit
|
|
54
|
+
// carries. A paged write assembles its whole overlay before it writes any of
|
|
55
|
+
// it, so the mutation's added keys are all known by the time the first
|
|
56
|
+
// commit comes round; without this the order list would be appended whole at
|
|
57
|
+
// that first commit, which is the oversized op the split exists to avoid.
|
|
58
|
+
_keys = [];
|
|
59
|
+
// Run just before each commit. A paged write registers one here to seal
|
|
60
|
+
// the pages it has accumulated, so they ride the same commit rather than
|
|
61
|
+
// arriving after it.
|
|
62
|
+
_before = null;
|
|
46
63
|
constructor(_flush) {
|
|
47
64
|
this._flush = _flush;
|
|
48
65
|
}
|
|
66
|
+
/** Register work to run immediately before every commit this batcher
|
|
67
|
+
* takes, including the caller's final one via `flushNow`. */
|
|
68
|
+
onFlush(before) {
|
|
69
|
+
this._before = before;
|
|
70
|
+
}
|
|
71
|
+
/** Name the record keys a write that has just landed covers. Called AFTER
|
|
72
|
+
* the write, so a key is never named to a commit that precedes it. */
|
|
73
|
+
noteKeys(keys) {
|
|
74
|
+
for (const key of keys)
|
|
75
|
+
this._keys.push(key);
|
|
76
|
+
}
|
|
49
77
|
/** Account for one assignment, from the proxy's set trap. */
|
|
50
78
|
record(value) {
|
|
51
|
-
|
|
79
|
+
this.recordChars(approximateChars(value));
|
|
80
|
+
}
|
|
81
|
+
/** Account for a write whose caller already knows its size in the same
|
|
82
|
+
* unit `record` charges, the UNCOMPRESSED JSON the write carries.
|
|
83
|
+
*
|
|
84
|
+
* A page is stored gzipped, so charging the bytes it occupies would price
|
|
85
|
+
* the same records about five times cheaper than the map path prices them,
|
|
86
|
+
* and the same write would produce ops an order of magnitude apart
|
|
87
|
+
* depending on whether the store was already paged when it arrived. The
|
|
88
|
+
* budget answers for the records a commit carries, so a page charges what
|
|
89
|
+
* it packs. */
|
|
90
|
+
recordChars(chars) {
|
|
52
91
|
// Commit BEFORE adding, so one assignment larger than the whole budget
|
|
53
92
|
// lands in a batch of its own instead of dragging its neighbours over
|
|
54
93
|
// the line with it.
|
|
55
94
|
if (this._chars > 0 && this._chars + chars > MUTATE_BATCH_JSON_BUDGET_CHARS) {
|
|
56
|
-
this.
|
|
95
|
+
this._before?.();
|
|
96
|
+
const keys = this._keys;
|
|
97
|
+
this._keys = [];
|
|
98
|
+
this._flush(keys);
|
|
57
99
|
this._chars = 0;
|
|
58
100
|
}
|
|
59
101
|
this._chars += chars;
|
|
60
102
|
}
|
|
61
|
-
|
|
62
|
-
|
|
103
|
+
/** Account for one deletion. What a delete puts in the op is its KEY, so
|
|
104
|
+
* that is what it costs: charging a flat nominal instead prices a bulk
|
|
105
|
+
* delete at a fraction of the bytes it writes, and a store big enough to
|
|
106
|
+
* page is big enough for the difference to carry the whole delete into one
|
|
107
|
+
* op. */
|
|
108
|
+
recordDelete(key) {
|
|
109
|
+
this.record(key);
|
|
63
110
|
}
|
|
64
111
|
}
|
|
65
112
|
//# sourceMappingURL=mutate-batching.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate-batching.js","sourceRoot":"","sources":["../src/mutate-batching.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qEAAqE;AACrE,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,sEAAsE;AACtE,yBAAyB;AACzB,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,8CAA8C;AAE9C,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"mutate-batching.js","sourceRoot":"","sources":["../src/mutate-batching.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qEAAqE;AACrE,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,sEAAsE;AACtE,yBAAyB;AACzB,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,8CAA8C;AAE9C,sEAAsE;AACtE,uEAAuE;AACvE,+CAA+C;AAC/C,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,sEAAsE;AACtE,qEAAqE;AACrE,8EAA8E;AAC9E,8EAA8E;AAC9E,iEAAiE;AACjE,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,GAAG,IAAI,CAAC;AAEzD;;;eAGe;AACf,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC;IACvB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAQ,KAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,aAAa;IAeK;IAdrB,MAAM,GAAG,CAAC,CAAC;IACnB,4EAA4E;IAC5E,wEAAwE;IACxE,qEAAqE;IACrE,6EAA6E;IAC7E,uEAAuE;IACvE,6EAA6E;IAC7E,0EAA0E;IAClE,KAAK,GAAa,EAAE,CAAC;IAC7B,wEAAwE;IACxE,yEAAyE;IACzE,qBAAqB;IACb,OAAO,GAAwB,IAAI,CAAC;IAE5C,YAA6B,MAAyC;QAAzC,WAAM,GAAN,MAAM,CAAmC;IAAG,CAAC;IAE1E;kEAC8D;IAC9D,OAAO,CAAC,MAAkB;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;2EACuE;IACvE,QAAQ,CAAC,IAAsB;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAAC,KAAc;QACnB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;oBAQgB;IAChB,WAAW,CAAC,KAAa;QACvB,uEAAuE;QACvE,sEAAsE;QACtE,oBAAoB;QACpB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,8BAA8B,EAAE,CAAC;YAC5E,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACvB,CAAC;IAED;;;;cAIU;IACV,YAAY,CAAC,GAAW;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;CACF"}
|
package/dist/open-document.d.ts
CHANGED
|
@@ -46,7 +46,9 @@ export interface DocumentSnapshotResponse {
|
|
|
46
46
|
op_blob_b64: string;
|
|
47
47
|
}>;
|
|
48
48
|
current_seq?: number;
|
|
49
|
+
snapshot_seq?: number;
|
|
49
50
|
snapshot_version_vector?: string;
|
|
51
|
+
can_edit?: boolean;
|
|
50
52
|
status?: DocumentWorkStatus;
|
|
51
53
|
drive?: DocumentDriveSummaryWire;
|
|
52
54
|
}
|
|
@@ -83,8 +85,16 @@ export interface DocumentAtVersionResponse {
|
|
|
83
85
|
current_seq: number;
|
|
84
86
|
}
|
|
85
87
|
export interface OpenDocumentWsClient {
|
|
86
|
-
subscribe(topic: string, callback: WsTopicCallback
|
|
88
|
+
subscribe(topic: string, callback: WsTopicCallback, options?: {
|
|
89
|
+
ownsFrameRetry?: boolean;
|
|
90
|
+
onEnded?: (info: {
|
|
91
|
+
reason: string;
|
|
92
|
+
}) => void;
|
|
93
|
+
}): () => void;
|
|
87
94
|
send(frame: unknown): void;
|
|
95
|
+
readonly reconnectCount?: number;
|
|
96
|
+
readonly pageHidden?: boolean;
|
|
97
|
+
readonly connected?: boolean;
|
|
88
98
|
}
|
|
89
99
|
export interface OpenDocumentFactoryOptions {
|
|
90
100
|
appId: string;
|
|
@@ -106,6 +116,7 @@ export interface OpenDocumentFactoryOptions {
|
|
|
106
116
|
};
|
|
107
117
|
hostedUiProvider?: HostedUiProvider;
|
|
108
118
|
launchOrganizationId?: () => string | null;
|
|
119
|
+
identity?: () => string | null;
|
|
109
120
|
reportError?: (err: Error) => void;
|
|
110
121
|
}
|
|
111
122
|
export type OpenedDocument = Document & {
|
|
@@ -124,4 +135,7 @@ export declare function createOpenDocument(opts: OpenDocumentFactoryOptions): Do
|
|
|
124
135
|
export declare function _resetParkCacheForTesting(): void;
|
|
125
136
|
export declare const PERIODIC_REVERIFY_INTERVAL_MS: number;
|
|
126
137
|
export declare const MISSED_OP_RESYNC_DELAY_MS = 2000;
|
|
138
|
+
export declare const RESEND_BASE_DELAY_MS = 1500;
|
|
139
|
+
export declare const RESEND_MAX_DELAY_MS = 30000;
|
|
140
|
+
export declare const RESEND_FORCE_CEILING_MS = 60000;
|
|
127
141
|
//# sourceMappingURL=open-document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-document.d.ts","sourceRoot":"","sources":["../src/open-document.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAEvB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"open-document.d.ts","sourceRoot":"","sources":["../src/open-document.ts"],"names":[],"mappings":"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"}
|