@brass-build/client 0.1.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 +255 -0
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +836 -0
- package/dist/api-fetch.d.ts +16 -0
- package/dist/api-fetch.d.ts.map +1 -0
- package/dist/api-fetch.js +97 -0
- package/dist/api-fetch.js.map +1 -0
- package/dist/api-headers.d.ts +3 -0
- package/dist/api-headers.d.ts.map +1 -0
- package/dist/api-headers.js +25 -0
- package/dist/api-headers.js.map +1 -0
- package/dist/auth-flow.d.ts +23 -0
- package/dist/auth-flow.d.ts.map +1 -0
- package/dist/auth-flow.js +76 -0
- package/dist/auth-flow.js.map +1 -0
- package/dist/client.d.ts +106 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +1278 -0
- package/dist/client.js.map +1 -0
- package/dist/doc-url-sync.d.ts +19 -0
- package/dist/doc-url-sync.d.ts.map +1 -0
- package/dist/doc-url-sync.js +181 -0
- package/dist/doc-url-sync.js.map +1 -0
- package/dist/document-branches.d.ts +32 -0
- package/dist/document-branches.d.ts.map +1 -0
- package/dist/document-branches.js +89 -0
- package/dist/document-branches.js.map +1 -0
- package/dist/document-checkpoints.d.ts +24 -0
- package/dist/document-checkpoints.d.ts.map +1 -0
- package/dist/document-checkpoints.js +115 -0
- package/dist/document-checkpoints.js.map +1 -0
- package/dist/document-commands.d.ts +93 -0
- package/dist/document-commands.d.ts.map +1 -0
- package/dist/document-commands.js +423 -0
- package/dist/document-commands.js.map +1 -0
- package/dist/document-signals.d.ts +53 -0
- package/dist/document-signals.d.ts.map +1 -0
- package/dist/document-signals.js +114 -0
- package/dist/document-signals.js.map +1 -0
- package/dist/document-streams.d.ts +22 -0
- package/dist/document-streams.d.ts.map +1 -0
- package/dist/document-streams.js +98 -0
- package/dist/document-streams.js.map +1 -0
- package/dist/document-thumbnail-capture.d.ts +27 -0
- package/dist/document-thumbnail-capture.d.ts.map +1 -0
- package/dist/document-thumbnail-capture.js +160 -0
- package/dist/document-thumbnail-capture.js.map +1 -0
- package/dist/documents-namespace.d.ts +134 -0
- package/dist/documents-namespace.d.ts.map +1 -0
- package/dist/documents-namespace.js +190 -0
- package/dist/documents-namespace.js.map +1 -0
- package/dist/documents.d.ts +146 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +2045 -0
- package/dist/documents.js.map +1 -0
- package/dist/emitter.d.ts +15 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +90 -0
- package/dist/emitter.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +22 -0
- package/dist/errors.js.map +1 -0
- package/dist/export-guest.d.ts +9 -0
- package/dist/export-guest.d.ts.map +1 -0
- package/dist/export-guest.js +225 -0
- package/dist/export-guest.js.map +1 -0
- package/dist/fetch-retry.d.ts +16 -0
- package/dist/fetch-retry.d.ts.map +1 -0
- package/dist/fetch-retry.js +90 -0
- package/dist/fetch-retry.js.map +1 -0
- package/dist/guest-link.d.ts +3 -0
- package/dist/guest-link.d.ts.map +1 -0
- package/dist/guest-link.js +13 -0
- package/dist/guest-link.js.map +1 -0
- package/dist/handles.d.ts +57 -0
- package/dist/handles.d.ts.map +1 -0
- package/dist/handles.js +1375 -0
- package/dist/handles.js.map +1 -0
- package/dist/hosted-runtime.d.ts +33 -0
- package/dist/hosted-runtime.d.ts.map +1 -0
- package/dist/hosted-runtime.js +99 -0
- package/dist/hosted-runtime.js.map +1 -0
- package/dist/hosted-ui.d.ts +84 -0
- package/dist/hosted-ui.d.ts.map +1 -0
- package/dist/hosted-ui.js +673 -0
- package/dist/hosted-ui.js.map +1 -0
- package/dist/importer.d.ts +22 -0
- package/dist/importer.d.ts.map +1 -0
- package/dist/importer.js +54 -0
- package/dist/importer.js.map +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/dist/init-keys.d.ts +3 -0
- package/dist/init-keys.d.ts.map +1 -0
- package/dist/init-keys.js +13 -0
- package/dist/init-keys.js.map +1 -0
- package/dist/internal.d.ts +6 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +17 -0
- package/dist/internal.js.map +1 -0
- package/dist/jwt.d.ts +3 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +22 -0
- package/dist/jwt.js.map +1 -0
- package/dist/launch-context.d.ts +4 -0
- package/dist/launch-context.d.ts.map +1 -0
- package/dist/launch-context.js +44 -0
- package/dist/launch-context.js.map +1 -0
- package/dist/login-hint.d.ts +4 -0
- package/dist/login-hint.d.ts.map +1 -0
- package/dist/login-hint.js +63 -0
- package/dist/login-hint.js.map +1 -0
- package/dist/mutate-batching.d.ts +14 -0
- package/dist/mutate-batching.d.ts.map +1 -0
- package/dist/mutate-batching.js +65 -0
- package/dist/mutate-batching.js.map +1 -0
- package/dist/open-document.d.ts +127 -0
- package/dist/open-document.d.ts.map +1 -0
- package/dist/open-document.js +2121 -0
- package/dist/open-document.js.map +1 -0
- package/dist/page-title.d.ts +3 -0
- package/dist/page-title.d.ts.map +1 -0
- package/dist/page-title.js +32 -0
- package/dist/page-title.js.map +1 -0
- package/dist/perf.d.ts +9 -0
- package/dist/perf.d.ts.map +1 -0
- package/dist/perf.js +39 -0
- package/dist/perf.js.map +1 -0
- package/dist/presence.d.ts +62 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +331 -0
- package/dist/presence.js.map +1 -0
- package/dist/record-paging.d.ts +99 -0
- package/dist/record-paging.d.ts.map +1 -0
- package/dist/record-paging.js +220 -0
- package/dist/record-paging.js.map +1 -0
- package/dist/schema-conflict-dialog.d.ts +10 -0
- package/dist/schema-conflict-dialog.d.ts.map +1 -0
- package/dist/schema-conflict-dialog.js +164 -0
- package/dist/schema-conflict-dialog.js.map +1 -0
- package/dist/selection-persistence.d.ts +5 -0
- package/dist/selection-persistence.d.ts.map +1 -0
- package/dist/selection-persistence.js +90 -0
- package/dist/selection-persistence.js.map +1 -0
- package/dist/serializer.d.ts +3 -0
- package/dist/serializer.d.ts.map +1 -0
- package/dist/serializer.js +2 -0
- package/dist/serializer.js.map +1 -0
- package/dist/session-persistence.d.ts +4 -0
- package/dist/session-persistence.d.ts.map +1 -0
- package/dist/session-persistence.js +68 -0
- package/dist/session-persistence.js.map +1 -0
- package/dist/session-toolbar.d.ts +62 -0
- package/dist/session-toolbar.d.ts.map +1 -0
- package/dist/session-toolbar.js +1205 -0
- package/dist/session-toolbar.js.map +1 -0
- package/dist/session.d.ts +69 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +926 -0
- package/dist/session.js.map +1 -0
- package/dist/tail-ops.d.ts +28 -0
- package/dist/tail-ops.d.ts.map +1 -0
- package/dist/tail-ops.js +46 -0
- package/dist/tail-ops.js.map +1 -0
- package/dist/topic-lifecycle.d.ts +41 -0
- package/dist/topic-lifecycle.d.ts.map +1 -0
- package/dist/topic-lifecycle.js +169 -0
- package/dist/topic-lifecycle.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/undo.d.ts +18 -0
- package/dist/undo.d.ts.map +1 -0
- package/dist/undo.js +110 -0
- package/dist/undo.js.map +1 -0
- package/dist/version-bar.d.ts +22 -0
- package/dist/version-bar.d.ts.map +1 -0
- package/dist/version-bar.js +169 -0
- package/dist/version-bar.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/vite.d.ts +15 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +36 -0
- package/dist/vite.js.map +1 -0
- package/dist/ws-client.d.ts +53 -0
- package/dist/ws-client.d.ts.map +1 -0
- package/dist/ws-client.js +604 -0
- package/dist/ws-client.js.map +1 -0
- package/dist/ws-frame-limit.d.ts +21 -0
- package/dist/ws-frame-limit.d.ts.map +1 -0
- package/dist/ws-frame-limit.js +40 -0
- package/dist/ws-frame-limit.js.map +1 -0
- package/docs/app-manifest.md +65 -0
- package/docs/custom-chrome.md +147 -0
- package/docs/hosted-ui-advanced.md +77 -0
- package/docs/imported-documents.md +261 -0
- package/docs/presence.md +129 -0
- package/docs/schemas.md +135 -0
- package/docs/streams.md +248 -0
- package/package.json +60 -0
- package/scripts/prepare.mjs +50 -0
- package/src/api-fetch.ts +127 -0
- package/src/api-headers.ts +28 -0
- package/src/auth-flow.ts +125 -0
- package/src/client.ts +1457 -0
- package/src/doc-url-sync.ts +183 -0
- package/src/document-branches.ts +124 -0
- package/src/document-checkpoints.ts +135 -0
- package/src/document-commands.ts +651 -0
- package/src/document-signals.ts +234 -0
- package/src/document-streams.ts +132 -0
- package/src/document-thumbnail-capture.ts +191 -0
- package/src/documents-namespace.ts +516 -0
- package/src/documents.ts +2426 -0
- package/src/emitter.ts +129 -0
- package/src/errors.ts +45 -0
- package/src/export-guest.ts +282 -0
- package/src/fetch-retry.ts +119 -0
- package/src/guest-link.ts +14 -0
- package/src/handles.ts +1731 -0
- package/src/hosted-runtime.ts +109 -0
- package/src/hosted-ui.ts +1020 -0
- package/src/importer.ts +89 -0
- package/src/index.ts +267 -0
- package/src/init-keys.ts +15 -0
- package/src/internal.ts +23 -0
- package/src/jwt.ts +18 -0
- package/src/launch-context.ts +43 -0
- package/src/login-hint.ts +60 -0
- package/src/mutate-batching.ts +63 -0
- package/src/open-document.ts +2869 -0
- package/src/page-title.ts +33 -0
- package/src/perf.ts +46 -0
- package/src/presence.ts +471 -0
- package/src/record-paging.ts +270 -0
- package/src/schema-conflict-dialog.ts +176 -0
- package/src/selection-persistence.ts +98 -0
- package/src/serializer.ts +15 -0
- package/src/session-persistence.ts +69 -0
- package/src/session-toolbar.ts +1457 -0
- package/src/session.ts +1262 -0
- package/src/tail-ops.ts +63 -0
- package/src/topic-lifecycle.ts +217 -0
- package/src/types.ts +75 -0
- package/src/undo.ts +125 -0
- package/src/version-bar.ts +221 -0
- package/src/version.ts +8 -0
- package/src/vite.ts +49 -0
- package/src/ws-client.ts +678 -0
- package/src/ws-frame-limit.ts +52 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// The parent (SDK) half of the version-preview bar's iframe bridge.
|
|
2
|
+
//
|
|
3
|
+
// Unlike the hosted dialogs (`hosted-ui.ts`, a modal open -> result ->
|
|
4
|
+
// close), this mounts the platform-served `/embed/version-bar` page INLINE
|
|
5
|
+
// as a persistent strip and keeps a long-lived, bidirectional channel open
|
|
6
|
+
// for the whole preview. The platform owns the bar's UI and features
|
|
7
|
+
// (Prev / Next, browse, branch-from); the SDK stays a thin router of the
|
|
8
|
+
// embed's intents to the active Document's internal methods, so the bar can
|
|
9
|
+
// grow with no SDK or app change.
|
|
10
|
+
//
|
|
11
|
+
// Bridge protocol (shared envelope `__brass_embed: 1`):
|
|
12
|
+
// host -> iframe: init{surface,params} | version-changed{version}
|
|
13
|
+
// iframe -> host: ready | resize{height} | preview{version}
|
|
14
|
+
// | return-to-head | fork{fromVersion} | browse
|
|
15
|
+
// | error{code,message}
|
|
16
|
+
const ENVELOPE = '__brass_embed';
|
|
17
|
+
const PROTOCOL_VERSION = 1;
|
|
18
|
+
// Collapsed until the embed reports `ready`, so the load moment shows a
|
|
19
|
+
// themed placeholder strip rather than an empty white iframe (no flash, no
|
|
20
|
+
// layout jump: the placeholder reserves the strip's height).
|
|
21
|
+
const READY_HEIGHT = 44;
|
|
22
|
+
const MIN_HEIGHT = 32;
|
|
23
|
+
const MAX_HEIGHT = 200;
|
|
24
|
+
function clampHeight(h) {
|
|
25
|
+
if (!Number.isFinite(h))
|
|
26
|
+
return READY_HEIGHT;
|
|
27
|
+
return Math.max(MIN_HEIGHT, Math.min(MAX_HEIGHT, Math.round(h)));
|
|
28
|
+
}
|
|
29
|
+
export function createVersionBarFrame(root, deps) {
|
|
30
|
+
const origin = new URL(deps.dashboardBaseUrl).origin;
|
|
31
|
+
const base = deps.dashboardBaseUrl.replace(/\/$/, '');
|
|
32
|
+
const theme = deps.theme ?? 'light';
|
|
33
|
+
// A themed placeholder strip shown until the embed is ready, so the bar
|
|
34
|
+
// occupies its height immediately (graceful load, no flash).
|
|
35
|
+
const placeholder = document.createElement('div');
|
|
36
|
+
placeholder.className = 'b-version-loading';
|
|
37
|
+
placeholder.textContent = 'Loading version controls...';
|
|
38
|
+
const iframe = document.createElement('iframe');
|
|
39
|
+
const url = new URL(`${base}/embed/version-bar`);
|
|
40
|
+
url.searchParams.set('theme', theme);
|
|
41
|
+
iframe.src = url.toString();
|
|
42
|
+
iframe.title = 'Document version';
|
|
43
|
+
Object.assign(iframe.style, {
|
|
44
|
+
display: 'block',
|
|
45
|
+
border: '0',
|
|
46
|
+
width: '100%',
|
|
47
|
+
height: '0',
|
|
48
|
+
colorScheme: theme === 'auto' ? 'light dark' : theme,
|
|
49
|
+
background: 'transparent',
|
|
50
|
+
});
|
|
51
|
+
root.append(placeholder, iframe);
|
|
52
|
+
let ctx = null;
|
|
53
|
+
let ready = false;
|
|
54
|
+
// The version last delivered to the embed (via `init` or `version-changed`).
|
|
55
|
+
// The host re-renders on many events (a commit, a saving-count bump, ...),
|
|
56
|
+
// each calling `update`, but only an ACTUAL version change should reach the
|
|
57
|
+
// embed. Posting on every render would flood the bar with echoes and let a
|
|
58
|
+
// stale one clobber its optimistic state; `undefined` = nothing delivered yet.
|
|
59
|
+
let deliveredVersion = undefined;
|
|
60
|
+
function postInit() {
|
|
61
|
+
const sid = deps.getSessionToken?.();
|
|
62
|
+
if (!ctx)
|
|
63
|
+
return;
|
|
64
|
+
iframe.contentWindow?.postMessage({
|
|
65
|
+
[ENVELOPE]: PROTOCOL_VERSION,
|
|
66
|
+
type: 'init',
|
|
67
|
+
surface: 'version-bar',
|
|
68
|
+
params: {
|
|
69
|
+
docId: ctx.docId,
|
|
70
|
+
...(ctx.branch !== undefined ? { branch: ctx.branch } : {}),
|
|
71
|
+
version: ctx.version,
|
|
72
|
+
...(ctx.branchName !== undefined ? { branchName: ctx.branchName } : {}),
|
|
73
|
+
...(sid ? { sessionToken: sid } : {}),
|
|
74
|
+
},
|
|
75
|
+
}, origin);
|
|
76
|
+
deliveredVersion = ctx.version;
|
|
77
|
+
}
|
|
78
|
+
function onMessage(event) {
|
|
79
|
+
if (event.origin !== origin)
|
|
80
|
+
return;
|
|
81
|
+
if (event.source !== iframe.contentWindow)
|
|
82
|
+
return;
|
|
83
|
+
const data = event.data;
|
|
84
|
+
if (!data || data[ENVELOPE] !== PROTOCOL_VERSION)
|
|
85
|
+
return;
|
|
86
|
+
switch (data['type']) {
|
|
87
|
+
case 'ready': {
|
|
88
|
+
ready = true;
|
|
89
|
+
placeholder.style.display = 'none';
|
|
90
|
+
iframe.style.height = `${READY_HEIGHT}px`;
|
|
91
|
+
postInit();
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case 'resize': {
|
|
95
|
+
const h = data['height'];
|
|
96
|
+
if (typeof h === 'number')
|
|
97
|
+
iframe.style.height = `${clampHeight(h)}px`;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
case 'preview': {
|
|
101
|
+
const v = data['version'];
|
|
102
|
+
if (typeof v === 'number' && Number.isInteger(v) && v >= 0) {
|
|
103
|
+
deps.checkoutVersion(v);
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case 'return-to-head': {
|
|
108
|
+
deps.returnToHead();
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
case 'fork': {
|
|
112
|
+
const v = data['fromVersion'];
|
|
113
|
+
const name = data['name'];
|
|
114
|
+
if (typeof v === 'number' && Number.isInteger(v) && v >= 0) {
|
|
115
|
+
deps.fork(v, typeof name === 'string' && name ? name : undefined);
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case 'browse': {
|
|
120
|
+
deps.browse();
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
case 'close': {
|
|
124
|
+
deps.close();
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'error': {
|
|
128
|
+
// The embed could not render (e.g. not signed in in this context).
|
|
129
|
+
// Collapse rather than leave a dead strip; the app still gates its
|
|
130
|
+
// own editing on `doc.readOnly`.
|
|
131
|
+
placeholder.style.display = 'none';
|
|
132
|
+
iframe.style.height = '0';
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
window.addEventListener('message', onMessage);
|
|
138
|
+
return {
|
|
139
|
+
update(next) {
|
|
140
|
+
const prev = ctx;
|
|
141
|
+
ctx = next;
|
|
142
|
+
// A document / branch switch needs a fresh `init`, which the embed
|
|
143
|
+
// only honors once, so recreate on that; a same-doc version step
|
|
144
|
+
// just pushes the new version down.
|
|
145
|
+
if (prev && (prev.docId !== next.docId || prev.branch !== next.branch)) {
|
|
146
|
+
// Reload the iframe: reset ready, restore the placeholder, and the
|
|
147
|
+
// new page will `ready` -> we re-`init` with the new context.
|
|
148
|
+
ready = false;
|
|
149
|
+
deliveredVersion = undefined;
|
|
150
|
+
placeholder.style.display = '';
|
|
151
|
+
iframe.style.height = '0';
|
|
152
|
+
iframe.src = url.toString();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Only an actual version change reaches the embed (dedup), so a
|
|
156
|
+
// re-render that didn't move the version can't clobber the bar's state.
|
|
157
|
+
if (ready && next.version !== deliveredVersion) {
|
|
158
|
+
deliveredVersion = next.version;
|
|
159
|
+
iframe.contentWindow?.postMessage({ [ENVELOPE]: PROTOCOL_VERSION, type: 'version-changed', version: next.version }, origin);
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
destroy() {
|
|
163
|
+
window.removeEventListener('message', onMessage);
|
|
164
|
+
iframe.remove();
|
|
165
|
+
placeholder.remove();
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=version-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-bar.js","sourceRoot":"","sources":["../src/version-bar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,aAAa,cAAuB,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// The package version the SDK reports to the backend (the `client`
|
|
2
|
+
// query param on /refresh and on the WS connect URL), so the platform
|
|
3
|
+
// can measure the version distribution of deployed apps and time
|
|
4
|
+
// compatibility windows against it. A unit test pins this to
|
|
5
|
+
// package.json's version; the release bump touches both together.
|
|
6
|
+
export const SDK_VERSION = '0.1.0';
|
|
7
|
+
export const SDK_CLIENT_ID = `sdk/${SDK_VERSION}`;
|
|
8
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,sEAAsE;AACtE,iEAAiE;AACjE,6DAA6D;AAC7D,kEAAkE;AAClE,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,WAAW,EAAE,CAAC"}
|
package/dist/vite.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface ViteUserConfig {
|
|
2
|
+
optimizeDeps?: {
|
|
3
|
+
exclude?: string[];
|
|
4
|
+
esbuildOptions?: {
|
|
5
|
+
target?: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
interface VitePlugin {
|
|
10
|
+
name: string;
|
|
11
|
+
config(config: ViteUserConfig): ViteUserConfig;
|
|
12
|
+
}
|
|
13
|
+
export declare function brassVite(): VitePlugin;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=vite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAkBA,UAAU,cAAc;IACtB,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,cAAc,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACtC,CAAC;CACH;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAAC;CAChD;AAED,wBAAgB,SAAS,IAAI,UAAU,CAkBtC"}
|
package/dist/vite.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Vite plugin encapsulating the bundler config the SDK's WASM runtime
|
|
2
|
+
// needs, so users never name the underlying WASM dep in their own
|
|
3
|
+
// `vite.config.ts`.
|
|
4
|
+
//
|
|
5
|
+
// Vite's dep-prebundling targets older browsers by default and fails on the
|
|
6
|
+
// WASM dep's top-level await (`Top-level await is not available in the
|
|
7
|
+
// configured target environment for loro-crdt/bundler/loro_wasm.js`). The
|
|
8
|
+
// plugin excludes the dep from prebundling (leaving it for the build-time
|
|
9
|
+
// WASM loaders) and bumps the prebundle target to es2022.
|
|
10
|
+
//
|
|
11
|
+
// `vite-plugin-wasm` and `vite-plugin-top-level-await` remain the caller's
|
|
12
|
+
// responsibility: they must land before `brassVite()` in the plugin list.
|
|
13
|
+
// Names of the WASM-shipping deps the SDK pulls in. Append rather
|
|
14
|
+
// than replace when adding a new WASM dep: a consumer who has both
|
|
15
|
+
// installed during a migration window needs both excluded.
|
|
16
|
+
const WASM_DEPS = ['loro-crdt'];
|
|
17
|
+
export function brassVite() {
|
|
18
|
+
return {
|
|
19
|
+
name: 'brass-build:vite',
|
|
20
|
+
config(config) {
|
|
21
|
+
const existingExclude = config.optimizeDeps?.exclude ?? [];
|
|
22
|
+
const exclude = Array.from(new Set([...existingExclude, ...WASM_DEPS]));
|
|
23
|
+
const existingTarget = config.optimizeDeps?.esbuildOptions?.target;
|
|
24
|
+
// Don't downgrade if a consumer has already pinned a newer
|
|
25
|
+
// target; only raise from the Vite default (which lacks TLA).
|
|
26
|
+
const target = existingTarget ?? 'es2022';
|
|
27
|
+
return {
|
|
28
|
+
optimizeDeps: {
|
|
29
|
+
exclude,
|
|
30
|
+
esbuildOptions: { target },
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=vite.js.map
|
package/dist/vite.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,kEAAkE;AAClE,oBAAoB;AACpB,EAAE;AACF,4EAA4E;AAC5E,uEAAuE;AACvE,0EAA0E;AAC1E,0EAA0E;AAC1E,0DAA0D;AAC1D,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAE1E,kEAAkE;AAClE,mEAAmE;AACnE,2DAA2D;AAC3D,MAAM,SAAS,GAAsB,CAAC,WAAW,CAAC,CAAC;AAcnD,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,MAAM,CAAC,MAAM;YACX,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC;YACnE,2DAA2D;YAC3D,8DAA8D;YAC9D,MAAM,MAAM,GAAG,cAAc,IAAI,QAAQ,CAAC;YAC1C,OAAO;gBACL,YAAY,EAAE;oBACZ,OAAO;oBACP,cAAc,EAAE,EAAE,MAAM,EAAE;iBAC3B;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
interface WsClientOptions {
|
|
2
|
+
wsBaseUrl: string;
|
|
3
|
+
appId: string;
|
|
4
|
+
getAccessToken: () => Promise<string | null>;
|
|
5
|
+
getAppAssertion?: () => Promise<string | null>;
|
|
6
|
+
getGuestLinkToken?: () => string | null;
|
|
7
|
+
webSocketImpl?: typeof WebSocket;
|
|
8
|
+
fireError: (error: Error) => void;
|
|
9
|
+
}
|
|
10
|
+
export type WsTopicCallback = (frame: unknown) => void;
|
|
11
|
+
export declare class BrassWsClient {
|
|
12
|
+
private readonly opts;
|
|
13
|
+
private ws;
|
|
14
|
+
private connecting;
|
|
15
|
+
private connectEpoch;
|
|
16
|
+
private topics;
|
|
17
|
+
private listeners;
|
|
18
|
+
private outboundQueue;
|
|
19
|
+
private pendingTopicSends;
|
|
20
|
+
private heldOverflowReported;
|
|
21
|
+
private reconnectAttempt;
|
|
22
|
+
private reconnectStartedAt;
|
|
23
|
+
private reconnectTimer;
|
|
24
|
+
private outboundOverflowReported;
|
|
25
|
+
private heartbeatTimer;
|
|
26
|
+
private closedByUser;
|
|
27
|
+
private visibilityListener;
|
|
28
|
+
private onlineListener;
|
|
29
|
+
constructor(opts: WsClientOptions);
|
|
30
|
+
subscribe(topic: string, callback: WsTopicCallback): () => void;
|
|
31
|
+
private dispatch;
|
|
32
|
+
private runEffect;
|
|
33
|
+
send(frame: unknown): void;
|
|
34
|
+
close(): void;
|
|
35
|
+
private ensureConnected;
|
|
36
|
+
private buildUrl;
|
|
37
|
+
private buildGuestUrl;
|
|
38
|
+
private onOpen;
|
|
39
|
+
private flushOutbound;
|
|
40
|
+
private onMessage;
|
|
41
|
+
private onClose;
|
|
42
|
+
private scheduleReconnect;
|
|
43
|
+
private resume;
|
|
44
|
+
private isHidden;
|
|
45
|
+
private ensureLifecycleListeners;
|
|
46
|
+
private removeLifecycleListeners;
|
|
47
|
+
private startHeartbeat;
|
|
48
|
+
private stopHeartbeat;
|
|
49
|
+
private sendIfOpen;
|
|
50
|
+
private sendFrame;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=ws-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"AAmCA,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAQ7C,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAO/C,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAGxC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;IAGjC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAevD,qBAAa,aAAa;IA+CZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IA9CjC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,UAAU,CAAS;IAO3B,OAAO,CAAC,YAAY,CAAK;IAOzB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,SAAS,CAAgC;IAIjD,OAAO,CAAC,aAAa,CAAiB;IAQtC,OAAO,CAAC,iBAAiB,CAAgC;IAGzD,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,cAAc,CAA8C;IAIpE,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,cAAc,CAA6B;gBAEtB,IAAI,EAAE,eAAe;IAKlD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI;IAsC/D,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,SAAS;IAsCjB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAgE1B,KAAK,IAAI,IAAI;YAgCC,eAAe;IA6E7B,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,SAAS;IA8DjB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,SAAS;CASlB"}
|