@brass-build/client 0.4.0 → 0.5.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 +142 -41
- package/CHANGELOG.md +93 -4
- package/README.md +666 -179
- package/dist/acting-organization.d.ts.map +1 -1
- package/dist/acting-organization.js +6 -11
- package/dist/acting-organization.js.map +1 -1
- package/dist/api-fetch.d.ts +8 -0
- package/dist/api-fetch.d.ts.map +1 -1
- package/dist/api-fetch.js +35 -8
- package/dist/api-fetch.js.map +1 -1
- package/dist/batched-get.d.ts +11 -0
- package/dist/batched-get.d.ts.map +1 -0
- package/dist/batched-get.js +92 -0
- package/dist/batched-get.js.map +1 -0
- package/dist/call-service.d.ts +4 -0
- package/dist/call-service.d.ts.map +1 -1
- package/dist/call-service.js +66 -3
- package/dist/call-service.js.map +1 -1
- package/dist/client.d.ts +51 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +982 -124
- package/dist/client.js.map +1 -1
- package/dist/document-checkpoints.d.ts +25 -2
- package/dist/document-checkpoints.d.ts.map +1 -1
- package/dist/document-checkpoints.js +258 -61
- package/dist/document-checkpoints.js.map +1 -1
- package/dist/document-commands.d.ts.map +1 -1
- package/dist/document-commands.js +5 -3
- package/dist/document-commands.js.map +1 -1
- package/dist/document-contents.d.ts +10 -0
- package/dist/document-contents.d.ts.map +1 -1
- package/dist/document-contents.js +23 -1
- package/dist/document-contents.js.map +1 -1
- package/dist/document-set-subscription.d.ts +56 -0
- package/dist/document-set-subscription.d.ts.map +1 -0
- package/dist/document-set-subscription.js +240 -0
- package/dist/document-set-subscription.js.map +1 -0
- package/dist/document-signals.d.ts +6 -0
- package/dist/document-signals.d.ts.map +1 -1
- package/dist/document-signals.js +31 -1
- package/dist/document-signals.js.map +1 -1
- package/dist/document-streams.d.ts +36 -2
- package/dist/document-streams.d.ts.map +1 -1
- package/dist/document-streams.js +69 -18
- package/dist/document-streams.js.map +1 -1
- package/dist/document-thumbnail-capture.d.ts +12 -2
- package/dist/document-thumbnail-capture.d.ts.map +1 -1
- package/dist/document-thumbnail-capture.js +103 -27
- package/dist/document-thumbnail-capture.js.map +1 -1
- package/dist/documents-namespace.d.ts +92 -10
- package/dist/documents-namespace.d.ts.map +1 -1
- package/dist/documents-namespace.js +285 -39
- package/dist/documents-namespace.js.map +1 -1
- package/dist/documents.d.ts +173 -8
- package/dist/documents.d.ts.map +1 -1
- package/dist/documents.js +1778 -310
- package/dist/documents.js.map +1 -1
- package/dist/errors.d.ts +3 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fetch-retry.d.ts +1 -0
- package/dist/fetch-retry.d.ts.map +1 -1
- package/dist/fetch-retry.js +2 -0
- package/dist/fetch-retry.js.map +1 -1
- package/dist/file-choice.d.ts +2 -0
- package/dist/file-choice.d.ts.map +1 -0
- package/dist/file-choice.js +27 -0
- package/dist/file-choice.js.map +1 -0
- package/dist/guest-link.d.ts +18 -1
- package/dist/guest-link.d.ts.map +1 -1
- package/dist/guest-link.js +329 -1
- package/dist/guest-link.js.map +1 -1
- package/dist/handle-types.d.ts +67 -5
- package/dist/handle-types.d.ts.map +1 -1
- package/dist/handles.d.ts +15 -19
- package/dist/handles.d.ts.map +1 -1
- package/dist/handles.js +231 -76
- package/dist/handles.js.map +1 -1
- package/dist/hosted-ui.d.ts +61 -0
- package/dist/hosted-ui.d.ts.map +1 -1
- package/dist/hosted-ui.js +94 -42
- package/dist/hosted-ui.js.map +1 -1
- package/dist/import-contract.d.ts +74 -0
- package/dist/import-contract.d.ts.map +1 -0
- package/dist/import-contract.js +163 -0
- package/dist/import-contract.js.map +1 -0
- package/dist/import-guest.d.ts +9 -0
- package/dist/import-guest.d.ts.map +1 -0
- package/dist/import-guest.js +155 -0
- package/dist/import-guest.js.map +1 -0
- package/dist/import-report.d.ts +17 -0
- package/dist/import-report.d.ts.map +1 -0
- package/dist/import-report.js +7 -0
- package/dist/import-report.js.map +1 -0
- package/dist/importer-wait.d.ts +2 -0
- package/dist/importer-wait.d.ts.map +1 -0
- package/dist/importer-wait.js +5 -0
- package/dist/importer-wait.js.map +1 -0
- package/dist/importer.d.ts +18 -4
- package/dist/importer.d.ts.map +1 -1
- package/dist/importer.js +322 -105
- package/dist/importer.js.map +1 -1
- package/dist/in-development.d.ts +2 -0
- package/dist/in-development.d.ts.map +1 -0
- package/dist/in-development.js +10 -0
- package/dist/in-development.js.map +1 -0
- package/dist/index.d.ts +16 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -8
- package/dist/index.js.map +1 -1
- package/dist/init-keys.d.ts +1 -1
- package/dist/init-keys.d.ts.map +1 -1
- package/dist/init-keys.js +6 -1
- package/dist/init-keys.js.map +1 -1
- package/dist/input-documents.d.ts +67 -0
- package/dist/input-documents.d.ts.map +1 -0
- package/dist/input-documents.js +693 -0
- package/dist/input-documents.js.map +1 -0
- package/dist/inputs-status.d.ts +80 -0
- package/dist/inputs-status.d.ts.map +1 -0
- package/dist/inputs-status.js +460 -0
- package/dist/inputs-status.js.map +1 -0
- package/dist/inputs.d.ts +2 -0
- package/dist/inputs.d.ts.map +1 -0
- package/dist/inputs.js +793 -0
- package/dist/inputs.js.map +1 -0
- package/dist/internal.d.ts +6 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -1
- package/dist/internal.js.map +1 -1
- package/dist/join-content.d.ts +33 -0
- package/dist/join-content.d.ts.map +1 -0
- package/dist/join-content.js +114 -0
- package/dist/join-content.js.map +1 -0
- package/dist/join-stamp.d.ts +3 -0
- package/dist/join-stamp.d.ts.map +1 -0
- package/dist/join-stamp.js +12 -0
- package/dist/join-stamp.js.map +1 -0
- package/dist/manifest-drift.d.ts +9 -0
- package/dist/manifest-drift.d.ts.map +1 -0
- package/dist/manifest-drift.js +46 -0
- package/dist/manifest-drift.js.map +1 -0
- package/dist/open-document.d.ts +109 -2
- package/dist/open-document.d.ts.map +1 -1
- package/dist/open-document.js +1822 -811
- package/dist/open-document.js.map +1 -1
- package/dist/page-restore.d.ts +12 -0
- package/dist/page-restore.d.ts.map +1 -0
- package/dist/page-restore.js +23 -0
- package/dist/page-restore.js.map +1 -0
- package/dist/placement.d.ts +13 -0
- package/dist/placement.d.ts.map +1 -0
- package/dist/placement.js +34 -0
- package/dist/placement.js.map +1 -0
- package/dist/presence.d.ts +1 -0
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +16 -4
- package/dist/presence.js.map +1 -1
- package/dist/read-only-document.d.ts +87 -0
- package/dist/read-only-document.d.ts.map +1 -0
- package/dist/read-only-document.js +4 -0
- package/dist/read-only-document.js.map +1 -0
- package/dist/record-paging.d.ts +63 -6
- package/dist/record-paging.d.ts.map +1 -1
- package/dist/record-paging.js +122 -29
- package/dist/record-paging.js.map +1 -1
- package/dist/references.d.ts +40 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +135 -0
- package/dist/references.js.map +1 -0
- package/dist/request-lane.d.ts +5 -0
- package/dist/request-lane.d.ts.map +1 -0
- package/dist/request-lane.js +48 -0
- package/dist/request-lane.js.map +1 -0
- package/dist/sealed-arrow.d.ts +170 -0
- package/dist/sealed-arrow.d.ts.map +1 -0
- package/dist/sealed-arrow.js +769 -0
- package/dist/sealed-arrow.js.map +1 -0
- package/dist/sealed-cache.d.ts +21 -0
- package/dist/sealed-cache.d.ts.map +1 -0
- package/dist/sealed-cache.js +247 -0
- package/dist/sealed-cache.js.map +1 -0
- package/dist/sealed-encode.d.ts +87 -0
- package/dist/sealed-encode.d.ts.map +1 -0
- package/dist/sealed-encode.js +876 -0
- package/dist/sealed-encode.js.map +1 -0
- package/dist/sealed-handles.d.ts +45 -0
- package/dist/sealed-handles.d.ts.map +1 -0
- package/dist/sealed-handles.js +408 -0
- package/dist/sealed-handles.js.map +1 -0
- package/dist/sealed-store.d.ts +242 -0
- package/dist/sealed-store.d.ts.map +1 -0
- package/dist/sealed-store.js +1155 -0
- package/dist/sealed-store.js.map +1 -0
- package/dist/serializer.d.ts +6 -15
- package/dist/serializer.d.ts.map +1 -1
- package/dist/session-toolbar.d.ts +20 -5
- package/dist/session-toolbar.d.ts.map +1 -1
- package/dist/session-toolbar.js +419 -67
- package/dist/session-toolbar.js.map +1 -1
- package/dist/session.d.ts +38 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +562 -79
- package/dist/session.js.map +1 -1
- package/dist/sha256.d.ts +3 -0
- package/dist/sha256.d.ts.map +1 -0
- package/dist/sha256.js +74 -0
- package/dist/sha256.js.map +1 -0
- package/dist/stable-handles.d.ts +19 -0
- package/dist/stable-handles.d.ts.map +1 -0
- package/dist/stable-handles.js +193 -0
- package/dist/stable-handles.js.map +1 -0
- package/dist/staged-seal.d.ts +2 -0
- package/dist/staged-seal.d.ts.map +1 -0
- package/dist/staged-seal.js +76 -0
- package/dist/staged-seal.js.map +1 -0
- package/dist/subscriber-delivery.d.ts +8 -0
- package/dist/subscriber-delivery.d.ts.map +1 -0
- package/dist/subscriber-delivery.js +31 -0
- package/dist/subscriber-delivery.js.map +1 -0
- package/dist/tail-op-import.d.ts +10 -0
- package/dist/tail-op-import.d.ts.map +1 -0
- package/dist/tail-op-import.js +33 -0
- package/dist/tail-op-import.js.map +1 -0
- package/dist/topic-lifecycle.d.ts +6 -0
- package/dist/topic-lifecycle.d.ts.map +1 -1
- package/dist/topic-lifecycle.js +32 -2
- package/dist/topic-lifecycle.js.map +1 -1
- package/dist/trial-replace-dialog.d.ts +10 -0
- package/dist/trial-replace-dialog.d.ts.map +1 -0
- package/dist/trial-replace-dialog.js +153 -0
- package/dist/trial-replace-dialog.js.map +1 -0
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/undo.d.ts +60 -5
- package/dist/undo.d.ts.map +1 -1
- package/dist/undo.js +344 -75
- package/dist/undo.js.map +1 -1
- package/dist/version-bar.d.ts +1 -0
- package/dist/version-bar.d.ts.map +1 -1
- package/dist/version-bar.js +2 -1
- package/dist/version-bar.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/dist/ws-client.d.ts +21 -0
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +192 -8
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-frame-limit.d.ts +1 -0
- package/dist/ws-frame-limit.d.ts.map +1 -1
- package/dist/ws-frame-limit.js.map +1 -1
- package/docs/app-manifest.md +121 -17
- package/docs/custom-chrome.md +24 -16
- package/docs/hosted-ui-advanced.md +38 -6
- package/docs/imported-documents.md +104 -51
- package/docs/presence.md +16 -4
- package/docs/schemas.md +8 -5
- package/docs/services.md +6 -6
- package/docs/streams.md +139 -150
- package/docs/text-fields.md +26 -19
- package/package.json +5 -2
- package/src/acting-organization.ts +6 -12
- package/src/api-fetch.ts +53 -3
- package/src/auth-flow.ts +1 -1
- package/src/batched-get.ts +117 -0
- package/src/call-service.ts +78 -3
- package/src/client.ts +1092 -121
- package/src/document-checkpoints.ts +307 -65
- package/src/document-commands.ts +5 -5
- package/src/document-contents.ts +27 -1
- package/src/document-set-subscription.ts +274 -0
- package/src/document-signals.ts +47 -5
- package/src/document-streams.ts +85 -16
- package/src/document-thumbnail-capture.ts +118 -32
- package/src/documents-namespace.ts +539 -84
- package/src/documents.ts +2017 -348
- package/src/errors.ts +17 -6
- package/src/fetch-retry.ts +5 -0
- package/src/file-choice.ts +26 -0
- package/src/guest-link.ts +362 -1
- package/src/handle-types.ts +73 -47
- package/src/handles.ts +253 -83
- package/src/hosted-ui.ts +211 -50
- package/src/import-contract.ts +227 -0
- package/src/import-guest.ts +193 -0
- package/src/import-report.ts +24 -0
- package/src/importer-wait.ts +4 -0
- package/src/importer.ts +386 -131
- package/src/in-development.ts +10 -0
- package/src/index.ts +76 -16
- package/src/init-keys.ts +6 -1
- package/src/input-documents.ts +819 -0
- package/src/inputs-status.ts +598 -0
- package/src/inputs.ts +1090 -0
- package/src/internal.ts +7 -0
- package/src/join-content.ts +135 -0
- package/src/join-stamp.ts +12 -0
- package/src/manifest-drift.ts +54 -0
- package/src/open-document.ts +2346 -930
- package/src/page-restore.ts +38 -0
- package/src/placement.ts +54 -0
- package/src/presence.ts +21 -5
- package/src/read-only-document.ts +133 -0
- package/src/record-paging.ts +147 -25
- package/src/references.ts +207 -0
- package/src/request-lane.ts +59 -0
- package/src/sealed-arrow.ts +843 -0
- package/src/sealed-cache.ts +267 -0
- package/src/sealed-encode.ts +1015 -0
- package/src/sealed-handles.ts +486 -0
- package/src/sealed-store.ts +1330 -0
- package/src/serializer.ts +8 -20
- package/src/session-toolbar.ts +463 -72
- package/src/session.ts +740 -99
- package/src/sha256.ts +65 -0
- package/src/stable-handles.ts +235 -0
- package/src/staged-seal.ts +90 -0
- package/src/subscriber-delivery.ts +37 -0
- package/src/tail-op-import.ts +30 -0
- package/src/topic-lifecycle.ts +38 -2
- package/src/trial-replace-dialog.ts +163 -0
- package/src/types.ts +6 -6
- package/src/undo.ts +386 -73
- package/src/version-bar.ts +5 -1
- package/src/version.ts +1 -1
- package/src/ws-client.ts +208 -16
- package/src/ws-frame-limit.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail-op-import.d.ts","sourceRoot":"","sources":["../src/tail-op-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAgB5C;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAMpE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { LoroDoc } from './wasm-runtime.js';
|
|
2
|
+
// An op whose dependencies are missing still imports here (as pending), so a
|
|
3
|
+
// refusal means the bytes are not an update anything could apply.
|
|
4
|
+
function importsIntoEmptyDoc(blob) {
|
|
5
|
+
const probe = new LoroDoc();
|
|
6
|
+
try {
|
|
7
|
+
probe.import(blob);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
probe.free();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Import one op from a join's tail or a live delivery. Bytes that do not decode
|
|
19
|
+
* even into an empty document can never be applied by any peer, and compaction
|
|
20
|
+
* seals past them, so they are skipped: one such op in a tail must not fail
|
|
21
|
+
* every open until that seal. An op that fails only against `engine`'s state
|
|
22
|
+
* throws.
|
|
23
|
+
*/
|
|
24
|
+
export function importTailOp(engine, blob) {
|
|
25
|
+
try {
|
|
26
|
+
engine.import(blob);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (importsIntoEmptyDoc(blob))
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=tail-op-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail-op-import.js","sourceRoot":"","sources":["../src/tail-op-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,6EAA6E;AAC7E,kEAAkE;AAClE,SAAS,mBAAmB,CAAC,IAAgB;IAC3C,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,IAAgB;IAC5D,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,mBAAmB,CAAC,IAAI,CAAC;YAAE,MAAM,GAAG,CAAC;IAC3C,CAAC;AACH,CAAC"}
|
|
@@ -14,12 +14,18 @@ export type TopicEvent = {
|
|
|
14
14
|
type: 'socket_closed';
|
|
15
15
|
} | {
|
|
16
16
|
type: 'subscribed_ack';
|
|
17
|
+
} | {
|
|
18
|
+
type: 'server_ended';
|
|
19
|
+
} | {
|
|
20
|
+
type: 'server_dropped';
|
|
17
21
|
} | {
|
|
18
22
|
type: 'error';
|
|
19
23
|
reason: string;
|
|
20
24
|
};
|
|
21
25
|
export type TopicEffect = {
|
|
22
26
|
kind: 'send_subscribe';
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'resend_subscribe_later';
|
|
23
29
|
} | {
|
|
24
30
|
kind: 'send_unsubscribe';
|
|
25
31
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic-lifecycle.d.ts","sourceRoot":"","sources":["../src/topic-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"topic-lifecycle.d.ts","sourceRoot":"","sources":["../src/topic-lifecycle.ts"],"names":[],"mappings":"AAqCA,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,aAAa,GACb,aAAa,GACb,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAGlB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,UAAiD,CAAC;AAE3E,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GAGxB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAG1B;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAE5B;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAGrB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAI1B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAEtD;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3D;AA0CD,wBAAgB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CA2IrE"}
|
package/dist/topic-lifecycle.js
CHANGED
|
@@ -21,6 +21,14 @@
|
|
|
21
21
|
// that: it describes the frame the server could not process, not the
|
|
22
22
|
// subscription it arrived on, so every live phase keeps its state and hands
|
|
23
23
|
// the error to the topic's callbacks, which hold the frame that drew it.
|
|
24
|
+
// While the subscribe is unacked the subscribe may be the frame that drew it,
|
|
25
|
+
// so the client also sends that again after a backoff (a duplicate subscribe
|
|
26
|
+
// is idempotent on the server).
|
|
27
|
+
//
|
|
28
|
+
// A `server_ended` event (the server evicted every subscriber on the topic
|
|
29
|
+
// and deleted their rows) returns any phase to `idle` and detaches the
|
|
30
|
+
// topic's callbacks, so whoever subscribes next sends a subscribe of its own
|
|
31
|
+
// rather than attaching to a subscription the server no longer holds.
|
|
24
32
|
//
|
|
25
33
|
// Invariant: every transition into `tornDown` emits `send_unsubscribe`,
|
|
26
34
|
// so no server-side subscription row can outlive the client-side state
|
|
@@ -41,6 +49,7 @@ export function isFrameScopedReason(reason) {
|
|
|
41
49
|
return reason === 'unavailable';
|
|
42
50
|
}
|
|
43
51
|
const SEND_SUBSCRIBE = { kind: 'send_subscribe' };
|
|
52
|
+
const RESEND_SUBSCRIBE_LATER = { kind: 'resend_subscribe_later' };
|
|
44
53
|
const FLUSH_HELD = { kind: 'flush_held' };
|
|
45
54
|
const DROP_HELD = { kind: 'drop_held' };
|
|
46
55
|
function deliverError(state, reason) {
|
|
@@ -75,6 +84,11 @@ function unsubscribed() {
|
|
|
75
84
|
};
|
|
76
85
|
}
|
|
77
86
|
export function step(state, event) {
|
|
87
|
+
if (event.type === 'server_ended') {
|
|
88
|
+
if (state.phase === 'idle')
|
|
89
|
+
return { state, effects: [] };
|
|
90
|
+
return { state: IDLE_TOPIC, effects: [DROP_HELD, { kind: 'drop_listeners' }] };
|
|
91
|
+
}
|
|
78
92
|
switch (state.phase) {
|
|
79
93
|
case 'idle':
|
|
80
94
|
if (event.type === 'user_subscribe') {
|
|
@@ -93,7 +107,13 @@ export function step(state, event) {
|
|
|
93
107
|
};
|
|
94
108
|
case 'error':
|
|
95
109
|
if (isFrameScopedReason(event.reason)) {
|
|
96
|
-
return
|
|
110
|
+
return {
|
|
111
|
+
state,
|
|
112
|
+
effects: [
|
|
113
|
+
{ kind: 'deliver_error', reason: event.reason },
|
|
114
|
+
RESEND_SUBSCRIBE_LATER,
|
|
115
|
+
],
|
|
116
|
+
};
|
|
97
117
|
}
|
|
98
118
|
// Never established on this connection: the rejection is final.
|
|
99
119
|
return tearDown(state, event.reason);
|
|
@@ -129,6 +149,10 @@ export function step(state, event) {
|
|
|
129
149
|
return tearDown(state, event.reason);
|
|
130
150
|
case 'subscribed_ack':
|
|
131
151
|
return { state, effects: [FLUSH_HELD] };
|
|
152
|
+
// Subscribe again, holding frames until it is acked. It spends no
|
|
153
|
+
// retry: the report arrives once per heartbeat, so it cannot loop.
|
|
154
|
+
case 'server_dropped':
|
|
155
|
+
return { state: { ...state, phase: 'subscribing' }, effects: [SEND_SUBSCRIBE] };
|
|
132
156
|
case 'socket_open':
|
|
133
157
|
return reopened();
|
|
134
158
|
case 'socket_closed':
|
|
@@ -143,7 +167,13 @@ export function step(state, event) {
|
|
|
143
167
|
switch (event.type) {
|
|
144
168
|
case 'error':
|
|
145
169
|
if (isFrameScopedReason(event.reason)) {
|
|
146
|
-
return
|
|
170
|
+
return {
|
|
171
|
+
state,
|
|
172
|
+
effects: [
|
|
173
|
+
{ kind: 'deliver_error', reason: event.reason },
|
|
174
|
+
RESEND_SUBSCRIBE_LATER,
|
|
175
|
+
],
|
|
176
|
+
};
|
|
147
177
|
}
|
|
148
178
|
// An eviction draws errors for EVERY frame in flight against the
|
|
149
179
|
// reaped row; the trailing ones land while the retry's subscribe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic-lifecycle.js","sourceRoot":"","sources":["../src/topic-lifecycle.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,oEAAoE;AACpE,0EAA0E;AAC1E,kEAAkE;AAClE,EAAE;AACF,UAAU;AACV,8DAA8D;AAC9D,wEAAwE;AACxE,yEAAyE;AACzE,yCAAyC;AACzC,2EAA2E;AAC3E,mEAAmE;AACnE,yEAAyE;AACzE,oEAAoE;AACpE,2EAA2E;AAC3E,wEAAwE;AACxE,uEAAuE;AACvE,gDAAgD;AAChD,EAAE;AACF,2EAA2E;AAC3E,qEAAqE;AACrE,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,kDAAkD;AAgBlD,MAAM,CAAC,MAAM,UAAU,GAAe,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"topic-lifecycle.js","sourceRoot":"","sources":["../src/topic-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type TrialReplaceChoice = 'sign-in' | 'leave' | 'cancel';
|
|
2
|
+
/** The prompt's sentence for a document the platform removes at `expiresAt`. */
|
|
3
|
+
export declare function trialReplaceMessage(expiresAt: Date, now?: number): string;
|
|
4
|
+
/**
|
|
5
|
+
* Ask whether to sign in before leaving an edited document. Resolves
|
|
6
|
+
* `'cancel'` on Cancel, on Escape, and when there is no DOM to ask in, since
|
|
7
|
+
* each of those leaves the document on screen.
|
|
8
|
+
*/
|
|
9
|
+
export declare function askReplaceTrial(expiresAt: Date): Promise<TrialReplaceChoice>;
|
|
10
|
+
//# sourceMappingURL=trial-replace-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial-replace-dialog.d.ts","sourceRoot":"","sources":["../src/trial-replace-dialog.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAkEhE,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAOrF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0E5E"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
// The prompt shown before New or Upload replaces a document a visitor made
|
|
2
|
+
// without an account and has edited. Signing in is what keeps it: the
|
|
3
|
+
// document is claimed into the account the visitor signs in with.
|
|
4
|
+
//
|
|
5
|
+
// SDK-rendered for the same reasons as the schema-conflict prompt: it asks
|
|
6
|
+
// one question about the document already on this page and needs no session.
|
|
7
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
8
|
+
const STYLE = `
|
|
9
|
+
.brass-tr-backdrop {
|
|
10
|
+
position: fixed;
|
|
11
|
+
inset: 0;
|
|
12
|
+
margin: 0;
|
|
13
|
+
border: 0;
|
|
14
|
+
width: auto;
|
|
15
|
+
height: auto;
|
|
16
|
+
max-width: none;
|
|
17
|
+
max-height: none;
|
|
18
|
+
z-index: 2147483646;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
padding: 1rem;
|
|
23
|
+
background: rgba(20, 18, 13, 0.45);
|
|
24
|
+
font: 15px/1.5 system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
25
|
+
}
|
|
26
|
+
.brass-tr-backdrop::backdrop {
|
|
27
|
+
background: transparent;
|
|
28
|
+
}
|
|
29
|
+
.brass-tr-panel {
|
|
30
|
+
background: Canvas;
|
|
31
|
+
color: CanvasText;
|
|
32
|
+
color-scheme: light dark;
|
|
33
|
+
max-width: 26rem;
|
|
34
|
+
width: 100%;
|
|
35
|
+
padding: 1.25rem;
|
|
36
|
+
border-radius: 0.75rem;
|
|
37
|
+
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.28);
|
|
38
|
+
}
|
|
39
|
+
.brass-tr-title {
|
|
40
|
+
margin: 0 0 0.5rem;
|
|
41
|
+
font-size: 1.0625rem;
|
|
42
|
+
font-weight: 600;
|
|
43
|
+
}
|
|
44
|
+
.brass-tr-body {
|
|
45
|
+
margin: 0 0 1.25rem;
|
|
46
|
+
}
|
|
47
|
+
.brass-tr-actions {
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-wrap: wrap;
|
|
50
|
+
justify-content: flex-end;
|
|
51
|
+
gap: 0.5rem;
|
|
52
|
+
}
|
|
53
|
+
.brass-tr-actions button {
|
|
54
|
+
font: inherit;
|
|
55
|
+
min-height: 2.5rem;
|
|
56
|
+
padding: 0 0.875rem;
|
|
57
|
+
border-radius: 0.375rem;
|
|
58
|
+
border: 1px solid rgba(128, 128, 128, 0.4);
|
|
59
|
+
background: transparent;
|
|
60
|
+
color: inherit;
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
}
|
|
63
|
+
.brass-tr-actions button.brass-tr-go {
|
|
64
|
+
border-color: transparent;
|
|
65
|
+
background: CanvasText;
|
|
66
|
+
color: Canvas;
|
|
67
|
+
}
|
|
68
|
+
`;
|
|
69
|
+
/** The prompt's sentence for a document the platform removes at `expiresAt`. */
|
|
70
|
+
export function trialReplaceMessage(expiresAt, now = Date.now()) {
|
|
71
|
+
const days = Math.max(1, Math.ceil((expiresAt.getTime() - now) / DAY_MS));
|
|
72
|
+
return ('You are not signed in, so your work is kept only at its link. ' +
|
|
73
|
+
`It will be removed in ${days} ${days === 1 ? 'day' : 'days'}. ` +
|
|
74
|
+
'Sign in to keep it in your account.');
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Ask whether to sign in before leaving an edited document. Resolves
|
|
78
|
+
* `'cancel'` on Cancel, on Escape, and when there is no DOM to ask in, since
|
|
79
|
+
* each of those leaves the document on screen.
|
|
80
|
+
*/
|
|
81
|
+
export function askReplaceTrial(expiresAt) {
|
|
82
|
+
if (typeof document === 'undefined')
|
|
83
|
+
return Promise.resolve('cancel');
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
const host = document.createElement('div');
|
|
86
|
+
const shadow = host.attachShadow({ mode: 'open' });
|
|
87
|
+
const style = document.createElement('style');
|
|
88
|
+
style.textContent = STYLE;
|
|
89
|
+
const backdrop = document.createElement('dialog');
|
|
90
|
+
backdrop.className = 'brass-tr-backdrop';
|
|
91
|
+
const panel = document.createElement('div');
|
|
92
|
+
panel.className = 'brass-tr-panel';
|
|
93
|
+
panel.setAttribute('role', 'alertdialog');
|
|
94
|
+
panel.setAttribute('aria-modal', 'true');
|
|
95
|
+
panel.setAttribute('aria-labelledby', 'brass-tr-title');
|
|
96
|
+
const titleEl = document.createElement('h2');
|
|
97
|
+
titleEl.className = 'brass-tr-title';
|
|
98
|
+
titleEl.id = 'brass-tr-title';
|
|
99
|
+
titleEl.textContent = 'Keep your work?';
|
|
100
|
+
const body = document.createElement('p');
|
|
101
|
+
body.className = 'brass-tr-body';
|
|
102
|
+
body.textContent = trialReplaceMessage(expiresAt);
|
|
103
|
+
const actions = document.createElement('div');
|
|
104
|
+
actions.className = 'brass-tr-actions';
|
|
105
|
+
const cancel = document.createElement('button');
|
|
106
|
+
cancel.type = 'button';
|
|
107
|
+
cancel.textContent = 'Cancel';
|
|
108
|
+
const leave = document.createElement('button');
|
|
109
|
+
leave.type = 'button';
|
|
110
|
+
leave.textContent = 'Continue without it';
|
|
111
|
+
const signIn = document.createElement('button');
|
|
112
|
+
signIn.type = 'button';
|
|
113
|
+
signIn.className = 'brass-tr-go';
|
|
114
|
+
signIn.textContent = 'Sign in';
|
|
115
|
+
const opener = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
116
|
+
let settled = false;
|
|
117
|
+
const settle = (choice) => {
|
|
118
|
+
if (settled)
|
|
119
|
+
return;
|
|
120
|
+
settled = true;
|
|
121
|
+
document.removeEventListener('keydown', onKey, true);
|
|
122
|
+
if (backdrop.open)
|
|
123
|
+
backdrop.close();
|
|
124
|
+
host.remove();
|
|
125
|
+
if (opener?.isConnected)
|
|
126
|
+
opener.focus();
|
|
127
|
+
resolve(choice);
|
|
128
|
+
};
|
|
129
|
+
function onKey(event) {
|
|
130
|
+
if (event.key === 'Escape')
|
|
131
|
+
settle('cancel');
|
|
132
|
+
}
|
|
133
|
+
cancel.addEventListener('click', () => settle('cancel'));
|
|
134
|
+
leave.addEventListener('click', () => settle('leave'));
|
|
135
|
+
signIn.addEventListener('click', () => settle('sign-in'));
|
|
136
|
+
document.addEventListener('keydown', onKey, true);
|
|
137
|
+
backdrop.addEventListener('cancel', (event) => {
|
|
138
|
+
event.preventDefault();
|
|
139
|
+
settle('cancel');
|
|
140
|
+
});
|
|
141
|
+
actions.append(cancel, leave, signIn);
|
|
142
|
+
panel.append(titleEl, body, actions);
|
|
143
|
+
backdrop.append(panel);
|
|
144
|
+
shadow.append(style, backdrop);
|
|
145
|
+
document.body.append(host);
|
|
146
|
+
if (typeof backdrop.showModal === 'function')
|
|
147
|
+
backdrop.showModal();
|
|
148
|
+
// Cancel leaves everything as it was, so it takes focus: Enter on a
|
|
149
|
+
// prompt nobody read keeps the document on screen.
|
|
150
|
+
cancel.focus();
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=trial-replace-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial-replace-dialog.js","sourceRoot":"","sources":["../src/trial-replace-dialog.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,7 +11,14 @@ export interface BrassInitOptions {
|
|
|
11
11
|
wsBaseUrl?: string;
|
|
12
12
|
dashboardBaseUrl?: string;
|
|
13
13
|
hostedUiTheme?: HostedUiTheme;
|
|
14
|
-
|
|
14
|
+
/** How the session opens documents. `readOnly: true` opens every document
|
|
15
|
+
* the session opens read-only (the URL on boot and reload, Open, a followed
|
|
16
|
+
* link, `session.open`), and `doc.reopen()` reopens the bound one for
|
|
17
|
+
* editing. A document the session creates opens editable. Default
|
|
18
|
+
* editable. */
|
|
19
|
+
open?: {
|
|
20
|
+
readOnly?: boolean;
|
|
21
|
+
};
|
|
15
22
|
syncDocToUrl?: boolean;
|
|
16
23
|
docUrlParam?: string;
|
|
17
24
|
branchUrlParam?: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAI/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,UAAU,CAAC,EAAE,MAAM,CAAC;IAOpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAK1B,aAAa,CAAC,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAI/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,UAAU,CAAC,EAAE,MAAM,CAAC;IAOpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAK1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;oBAIgB;IAChB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAQ9B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,cAAc,CAAC,EAAE,MAAM,CAAC;IAOxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAWD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;AAE1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;AAKlE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IAGpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
package/dist/undo.d.ts
CHANGED
|
@@ -1,17 +1,72 @@
|
|
|
1
1
|
import { type LoroDoc } from './wasm-runtime.js';
|
|
2
2
|
import type { UndoControllerOptions } from './types.js';
|
|
3
3
|
export declare const PAGING_COMMIT_ORIGIN = "brass.paging";
|
|
4
|
+
export declare const NON_UNDOABLE_COMMIT_ORIGIN = "brass.auto";
|
|
4
5
|
export declare class UndoController {
|
|
5
6
|
private readonly _mgr;
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
private
|
|
7
|
+
private readonly _maxSteps;
|
|
8
|
+
private _clock;
|
|
9
|
+
private readonly _hooks;
|
|
10
|
+
private _redoRetired;
|
|
11
|
+
private _replaying;
|
|
12
|
+
private _popped;
|
|
13
|
+
private _foreign;
|
|
14
|
+
private _restoring;
|
|
15
|
+
private _poppedOwn;
|
|
16
|
+
private _undoSteps;
|
|
17
|
+
private _floor;
|
|
18
|
+
private _undoTags;
|
|
19
|
+
private _redoTags;
|
|
20
|
+
private readonly _itemCap;
|
|
21
|
+
constructor(loroDoc: LoroDoc, options?: UndoControllerOptions, clock?: UndoClock, hooks?: UndoControllerHooks);
|
|
22
|
+
private topTag;
|
|
23
|
+
private recordUndoStep;
|
|
24
|
+
undo(beforeEach?: () => void): boolean;
|
|
25
|
+
redo(beforeEach?: () => void): boolean;
|
|
26
|
+
replayStep(dir: 'undo' | 'redo', tag: number, beforeEach?: () => void): boolean;
|
|
27
|
+
peek(dir: 'undo' | 'redo'): number | undefined;
|
|
28
|
+
get floor(): number;
|
|
29
|
+
useClock(clock: UndoClock): void;
|
|
30
|
+
retireRedo(): void;
|
|
31
|
+
private hasLiveRedo;
|
|
32
|
+
private replay;
|
|
11
33
|
canUndo(): boolean;
|
|
12
34
|
canRedo(): boolean;
|
|
13
35
|
sealStep(): void;
|
|
14
36
|
clear(): void;
|
|
15
37
|
free(): void;
|
|
16
38
|
}
|
|
39
|
+
export interface UndoClock {
|
|
40
|
+
step: number;
|
|
41
|
+
}
|
|
42
|
+
export interface UndoControllerHooks {
|
|
43
|
+
onFreshCommit?: () => void;
|
|
44
|
+
onStackChange?: () => void;
|
|
45
|
+
}
|
|
46
|
+
export interface UndoGroupMember {
|
|
47
|
+
}
|
|
48
|
+
export interface UndoGroupOwner {
|
|
49
|
+
blocked(): boolean;
|
|
50
|
+
notify(): void;
|
|
51
|
+
memberCommitted(): void;
|
|
52
|
+
}
|
|
53
|
+
export declare class UndoGroup implements UndoClock {
|
|
54
|
+
step: number;
|
|
55
|
+
private readonly _members;
|
|
56
|
+
private _owner;
|
|
57
|
+
private _notifyQueued;
|
|
58
|
+
setOwner(member: UndoGroupMember, hooks: UndoGroupOwner): void;
|
|
59
|
+
isOwner(member: UndoGroupMember): boolean;
|
|
60
|
+
add(member: UndoGroupMember): void;
|
|
61
|
+
delete(member: UndoGroupMember): void;
|
|
62
|
+
seal(): void;
|
|
63
|
+
changed(): void;
|
|
64
|
+
freshCommit(from: UndoGroupMember): void;
|
|
65
|
+
private eligible;
|
|
66
|
+
private floor;
|
|
67
|
+
private next;
|
|
68
|
+
canUndo(): boolean;
|
|
69
|
+
canRedo(): boolean;
|
|
70
|
+
replay(dir: 'undo' | 'redo'): boolean;
|
|
71
|
+
}
|
|
17
72
|
//# sourceMappingURL=undo.d.ts.map
|
package/dist/undo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../src/undo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../src/undo.ts"],"names":[],"mappings":"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"}
|