@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,16 @@
|
|
|
1
|
+
import { BrassError } from './errors.js';
|
|
2
|
+
export interface ApiRequest {
|
|
3
|
+
method?: 'GET' | 'POST' | 'PATCH' | 'DELETE';
|
|
4
|
+
path: string;
|
|
5
|
+
body?: unknown;
|
|
6
|
+
}
|
|
7
|
+
interface ApiFetchOptions {
|
|
8
|
+
apiBaseUrl: string;
|
|
9
|
+
getAccessToken: () => Promise<string | null>;
|
|
10
|
+
getAppAssertion?: () => Promise<string | null>;
|
|
11
|
+
}
|
|
12
|
+
export type ApiFetch = <T>(req: ApiRequest) => Promise<T>;
|
|
13
|
+
export declare function createApiFetch(opts: ApiFetchOptions): ApiFetch;
|
|
14
|
+
export declare function brassErrorFromBody(status: number, parsed: unknown): BrassError;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=api-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-fetch.d.ts","sourceRoot":"","sources":["../src/api-fetch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,WAAW,UAAU;IAEzB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CA4C9D;AAeD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,UAAU,CAkB9E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// The shared HTTP request wrapper: resolve token → 401 if missing →
|
|
2
|
+
// auth header → app-assertion → fetch → parse → throw `BrassError` on
|
|
3
|
+
// non-2xx → return parsed. Read paths that need the raw status without
|
|
4
|
+
// throwing stay hand-written but still throw `BrassError`.
|
|
5
|
+
import { applyAppAssertionHeader, applyClientVersionHeader } from './api-headers.js';
|
|
6
|
+
import { BrassError } from './errors.js';
|
|
7
|
+
import { fetchWithRetry } from './fetch-retry.js';
|
|
8
|
+
export function createApiFetch(opts) {
|
|
9
|
+
const baseUrl = opts.apiBaseUrl.replace(/\/$/, '');
|
|
10
|
+
return async function apiFetch(req) {
|
|
11
|
+
const token = await opts.getAccessToken();
|
|
12
|
+
if (!token) {
|
|
13
|
+
// Reject before fetch: a deterministic 401, no network round-trip.
|
|
14
|
+
throw new BrassError('Not signed in', { status: 401 });
|
|
15
|
+
}
|
|
16
|
+
const headers = { authorization: `Bearer ${token}` };
|
|
17
|
+
if (req.body !== undefined)
|
|
18
|
+
headers['content-type'] = 'application/json';
|
|
19
|
+
applyClientVersionHeader(headers);
|
|
20
|
+
await applyAppAssertionHeader(headers, opts.getAppAssertion);
|
|
21
|
+
const method = req.method ?? 'GET';
|
|
22
|
+
const init = { method, headers };
|
|
23
|
+
if (req.body !== undefined)
|
|
24
|
+
init.body = JSON.stringify(req.body);
|
|
25
|
+
const url = `${baseUrl}${req.path}`;
|
|
26
|
+
// A GET is idempotent, so ride out a cold-API transient 5xx / 429
|
|
27
|
+
// (e.g. a 503 while the API scales into a concurrent read burst)
|
|
28
|
+
// rather than surfacing it as a hard failure; a write is never
|
|
29
|
+
// replayed here.
|
|
30
|
+
const response = method === 'GET'
|
|
31
|
+
? await fetchWithRetry(() => fetch(url, init))
|
|
32
|
+
: await fetch(url, init);
|
|
33
|
+
if (response.status === 204)
|
|
34
|
+
return undefined;
|
|
35
|
+
const text = await response.text();
|
|
36
|
+
let parsed = undefined;
|
|
37
|
+
if (text) {
|
|
38
|
+
try {
|
|
39
|
+
parsed = JSON.parse(text);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Leave `parsed` undefined; a non-2xx falls back to the generic
|
|
43
|
+
// message, a 2xx surfaces as the caller's own malformed-body guard.
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
throw brassErrorFromBody(response.status, parsed);
|
|
48
|
+
}
|
|
49
|
+
return parsed;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function isErrorBody(body) {
|
|
53
|
+
return (typeof body === 'object' &&
|
|
54
|
+
body !== null &&
|
|
55
|
+
typeof body.error === 'string');
|
|
56
|
+
}
|
|
57
|
+
// Build the BrassError for a non-2xx response body. Every SDK fetch
|
|
58
|
+
// (apiFetch and the hand-written document open / create paths) throws
|
|
59
|
+
// through here so the server's machine-readable denials, in particular
|
|
60
|
+
// `code: "app_not_installed"`, survive into the error the caller (and
|
|
61
|
+
// the SDK's own install-consent offer) can branch on.
|
|
62
|
+
export function brassErrorFromBody(status, parsed) {
|
|
63
|
+
const message = isErrorBody(parsed) ? parsed.error : 'Request failed';
|
|
64
|
+
if (isNotInstalledBody(parsed)) {
|
|
65
|
+
return new BrassError(message, {
|
|
66
|
+
status,
|
|
67
|
+
code: 'app_not_installed',
|
|
68
|
+
organizationId: parsed.organization_id,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (isSchemaConflictBody(parsed)) {
|
|
72
|
+
const title = parsed['title'];
|
|
73
|
+
return new BrassError(message, {
|
|
74
|
+
status,
|
|
75
|
+
code: 'schema_conflict',
|
|
76
|
+
...(typeof title === 'string' ? { title } : {}),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return new BrassError(message, { status });
|
|
80
|
+
}
|
|
81
|
+
// The platform refuses to join a document this app's declared schema cannot
|
|
82
|
+
// read, so a bookmark or a reload does not silently open one. The message is
|
|
83
|
+
// the server's own line, which the client's dialog renders verbatim rather
|
|
84
|
+
// than composing a reason of its own out of a shape it would have to keep in
|
|
85
|
+
// step with the platform's.
|
|
86
|
+
function isSchemaConflictBody(value) {
|
|
87
|
+
return (typeof value === 'object' &&
|
|
88
|
+
value !== null &&
|
|
89
|
+
value.code === 'schema_conflict');
|
|
90
|
+
}
|
|
91
|
+
function isNotInstalledBody(value) {
|
|
92
|
+
return (typeof value === 'object' &&
|
|
93
|
+
value !== null &&
|
|
94
|
+
value.code === 'app_not_installed' &&
|
|
95
|
+
typeof value.organization_id === 'string');
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=api-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-fetch.js","sourceRoot":"","sources":["../src/api-fetch.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,sEAAsE;AACtE,uEAAuE;AACvE,2DAA2D;AAE3D,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAkBlD,MAAM,UAAU,cAAc,CAAC,IAAqB;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEnD,OAAO,KAAK,UAAU,QAAQ,CAAI,GAAe;QAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,mEAAmE;YACnE,MAAM,IAAI,UAAU,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,OAAO,GAA2B,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;QAC7E,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QACzE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;QACnC,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACpC,kEAAkE;QAClE,iEAAiE;QACjE,+DAA+D;QAC/D,iBAAiB;QACjB,MAAM,QAAQ,GACZ,MAAM,KAAK,KAAK;YACd,CAAC,CAAC,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9C,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAc,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,GAAY,SAAS,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,gEAAgE;gBAChE,oEAAoE;YACtE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,kBAAkB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,OAAQ,IAA4B,CAAC,KAAK,KAAK,QAAQ,CACxD,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,sEAAsE;AACtE,uEAAuE;AACvE,sEAAsE;AACtE,sDAAsD;AACtD,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,MAAe;IAChE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACtE,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE;YAC7B,MAAM;YACN,IAAI,EAAE,mBAAmB;YACzB,cAAc,EAAE,MAAM,CAAC,eAAe;SACvC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAI,MAAkC,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE;YAC7B,MAAM;YACN,IAAI,EAAE,iBAAiB;YACvB,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,4BAA4B;AAC5B,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA4B,CAAC,IAAI,KAAK,iBAAiB,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA4B,CAAC,IAAI,KAAK,mBAAmB;QAC1D,OAAQ,KAAuC,CAAC,eAAe,KAAK,QAAQ,CAC7E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function applyAppAssertionHeader(headers: Record<string, string>, getAppAssertion?: () => Promise<string | null>): Promise<void>;
|
|
2
|
+
export declare function applyClientVersionHeader(headers: Record<string, string>): void;
|
|
3
|
+
//# sourceMappingURL=api-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-headers.d.ts","sourceRoot":"","sources":["../src/api-headers.ts"],"names":[],"mappings":"AAUA,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC,CAGf;AASD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAE9E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SDK_CLIENT_ID } from './version.js';
|
|
2
|
+
// Attaches the acting-app assertion as `X-Brass-App-Assertion` when one
|
|
3
|
+
// is available; a no-op when the caller has none.
|
|
4
|
+
//
|
|
5
|
+
// MUST only be applied to requests to the Brass data API. Never attach
|
|
6
|
+
// it to other origins, in particular the presigned snapshot/upload
|
|
7
|
+
// URLs the document path fetches, which must carry no Brass headers (a
|
|
8
|
+
// stray header would also break the presigned signature's allowed-header
|
|
9
|
+
// set).
|
|
10
|
+
export async function applyAppAssertionHeader(headers, getAppAssertion) {
|
|
11
|
+
const assertion = await getAppAssertion?.();
|
|
12
|
+
if (assertion)
|
|
13
|
+
headers['x-brass-app-assertion'] = assertion;
|
|
14
|
+
}
|
|
15
|
+
// Attaches the SDK's version as `x-brass-client` (`sdk/<version>`), the same
|
|
16
|
+
// value reported on /refresh and the WS connect URL, so the server sees the
|
|
17
|
+
// deployed SDK version at the data-API surface too. The minimum-version gate
|
|
18
|
+
// reads it at document open to serve a too-old client an upgrade message
|
|
19
|
+
// (rendered verbatim through `session.error`). Same boundary as the
|
|
20
|
+
// app-assertion header: data API only, never a presigned URL. Unconditional, so the
|
|
21
|
+
// version distribution covers read-only apps that never refresh.
|
|
22
|
+
export function applyClientVersionHeader(headers) {
|
|
23
|
+
headers['x-brass-client'] = SDK_CLIENT_ID;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=api-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-headers.js","sourceRoot":"","sources":["../src/api-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wEAAwE;AACxE,kDAAkD;AAClD,EAAE;AACF,uEAAuE;AACvE,mEAAmE;AACnE,uEAAuE;AACvE,yEAAyE;AACzE,QAAQ;AACR,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA+B,EAC/B,eAA8C;IAE9C,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,EAAE,CAAC;IAC5C,IAAI,SAAS;QAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,SAAS,CAAC;AAC9D,CAAC;AAED,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,oEAAoE;AACpE,oFAAoF;AACpF,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CAAC,OAA+B;IACtE,OAAO,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface TokenSet {
|
|
2
|
+
accessToken: string;
|
|
3
|
+
idToken: string;
|
|
4
|
+
expiresAt: number;
|
|
5
|
+
appAssertion?: string;
|
|
6
|
+
}
|
|
7
|
+
export type RefreshCredential = {
|
|
8
|
+
kind: 'cookie';
|
|
9
|
+
} | {
|
|
10
|
+
kind: 'code';
|
|
11
|
+
code: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'sessionToken';
|
|
14
|
+
sessionToken: string;
|
|
15
|
+
};
|
|
16
|
+
export interface RefreshResult {
|
|
17
|
+
tokens: TokenSet;
|
|
18
|
+
sessionToken?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function buildSignInUrl(authBaseUrl: string, appId: string, returnTo: string): string;
|
|
21
|
+
export declare function buildSignedOutOfAppUrl(authBaseUrl: string, appId: string, returnTo: string): string;
|
|
22
|
+
export declare function refreshTokens(authBaseUrl: string, appId: string, credential?: RefreshCredential): Promise<RefreshResult | null>;
|
|
23
|
+
//# sourceMappingURL=auth-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-flow.d.ts","sourceRoot":"","sources":["../src/auth-flow.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAIlB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsBD,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,QAAQ,CAAC;IAIjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK3F;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,iBAAsC,GACjD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAgD/B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { SDK_CLIENT_ID } from './version.js';
|
|
2
|
+
import { fetchWithRetry, RETRY_READ, RETRY_WRITE_503 } from './fetch-retry.js';
|
|
3
|
+
// Fallback token lifetime if a /refresh response omits `expires_in`. The
|
|
4
|
+
// server always sends it (so this is forward-compat robustness), but without a
|
|
5
|
+
// fallback `Date.now() + undefined * 1000` is NaN, and the client's freshness
|
|
6
|
+
// check `expiresAt - leeway > Date.now()` is then always false, so every
|
|
7
|
+
// getAccessToken() would fire a fresh /refresh round-trip. Mirrors the CLI's
|
|
8
|
+
// same guard.
|
|
9
|
+
const DEFAULT_TOKEN_TTL_SECONDS = 3600;
|
|
10
|
+
export function buildSignInUrl(authBaseUrl, appId, returnTo) {
|
|
11
|
+
const url = new URL(`${authBaseUrl}/sign-in`);
|
|
12
|
+
url.searchParams.set('app_id', appId);
|
|
13
|
+
url.searchParams.set('return_to', returnTo);
|
|
14
|
+
return url.toString();
|
|
15
|
+
}
|
|
16
|
+
export function buildSignedOutOfAppUrl(authBaseUrl, appId, returnTo) {
|
|
17
|
+
const url = new URL(`${authBaseUrl}/signed-out-of-app`);
|
|
18
|
+
url.searchParams.set('app_id', appId);
|
|
19
|
+
url.searchParams.set('return_to', returnTo);
|
|
20
|
+
return url.toString();
|
|
21
|
+
}
|
|
22
|
+
export async function refreshTokens(authBaseUrl, appId, credential = { kind: 'cookie' }) {
|
|
23
|
+
// `client` rides a query param, not a header: /refresh is deliberately
|
|
24
|
+
// a CORS simple request (no preflight), and any custom header would
|
|
25
|
+
// trip one. The server folds it into the token_refresh audit so the
|
|
26
|
+
// deployed SDK version distribution is measurable.
|
|
27
|
+
const url = `${authBaseUrl}/refresh?${new URLSearchParams({
|
|
28
|
+
app_id: appId,
|
|
29
|
+
client: SDK_CLIENT_ID,
|
|
30
|
+
}).toString()}`;
|
|
31
|
+
const init = { method: 'POST', credentials: 'include' };
|
|
32
|
+
if (credential.kind !== 'cookie') {
|
|
33
|
+
// A URLSearchParams body sends `Content-Type:
|
|
34
|
+
// application/x-www-form-urlencoded`, which keeps this a CORS
|
|
35
|
+
// "simple request" with no preflight OPTIONS, which the auth API
|
|
36
|
+
// does not serve. A JSON content-type would trip preflight.
|
|
37
|
+
const body = new URLSearchParams();
|
|
38
|
+
if (credential.kind === 'code')
|
|
39
|
+
body.set('brass_code', credential.code);
|
|
40
|
+
else
|
|
41
|
+
body.set('sid', credential.sessionToken);
|
|
42
|
+
init.body = body;
|
|
43
|
+
}
|
|
44
|
+
// Retry a transient failure (a cold-start 5xx / 429, or a network blip)
|
|
45
|
+
// rather than collapsing it into the same `null` a definitive 401 returns:
|
|
46
|
+
// `null` signs the user out and clears the login hint, so without a retry one
|
|
47
|
+
// hourly-refresh blip tears down a live session that was fine server-side. A
|
|
48
|
+
// definitive 401/403 is not in either replay set, so it still returns fast.
|
|
49
|
+
// The one-time `brass_code` exchange is single-use server-side, so its
|
|
50
|
+
// channel replays ONLY a pre-handler 503 (never a network throw, which might
|
|
51
|
+
// mean the code was already consumed); the cookie / sid channels are
|
|
52
|
+
// idempotent and replay the full transient set.
|
|
53
|
+
const policy = credential.kind === 'code' ? RETRY_WRITE_503 : RETRY_READ;
|
|
54
|
+
let response;
|
|
55
|
+
try {
|
|
56
|
+
response = await fetchWithRetry(() => fetch(url, init), { policy });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
if (!response.ok)
|
|
62
|
+
return null;
|
|
63
|
+
const json = (await response.json());
|
|
64
|
+
const result = {
|
|
65
|
+
tokens: {
|
|
66
|
+
accessToken: json.access_token,
|
|
67
|
+
idToken: json.id_token,
|
|
68
|
+
expiresAt: Date.now() + (json.expires_in ?? DEFAULT_TOKEN_TTL_SECONDS) * 1000,
|
|
69
|
+
...(json.app_assertion ? { appAssertion: json.app_assertion } : {}),
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
if (json.session_token)
|
|
73
|
+
result.sessionToken = json.session_token;
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=auth-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-flow.js","sourceRoot":"","sources":["../src/auth-flow.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { type CreateDocumentOptions, type OpenDocumentByIdOptions, type OpenedDocument } from './open-document.js';
|
|
2
|
+
import { type DocumentHistoryResult, type SelectDocumentResult } from './hosted-ui.js';
|
|
3
|
+
import type { DocumentSerializer } from './serializer.js';
|
|
4
|
+
import { type DocumentImporter } from './importer.js';
|
|
5
|
+
import { type DocumentsNamespace } from './documents-namespace.js';
|
|
6
|
+
import { type DocumentSession } from './session.js';
|
|
7
|
+
import { type SessionToolbarHandle, type SessionHeaderHandle, type SessionToolbarOptions, type MountedPiece } from './session-toolbar.js';
|
|
8
|
+
import type { AuthStatus, ErrorListener, BrassInitOptions, BrassUser, UserChangeListener } from './types.js';
|
|
9
|
+
export interface ResolvedBaseUrls {
|
|
10
|
+
authBaseUrl: string;
|
|
11
|
+
apiBaseUrl: string;
|
|
12
|
+
apiBaseUrlConfigured: boolean;
|
|
13
|
+
wsBaseUrl: string | null;
|
|
14
|
+
dashboardBaseUrl: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveBaseUrls(options: BrassInitOptions): ResolvedBaseUrls;
|
|
17
|
+
export declare class BrassClient {
|
|
18
|
+
private appId;
|
|
19
|
+
private authBaseUrl;
|
|
20
|
+
private apiBaseUrl;
|
|
21
|
+
private apiBaseUrlConfigured;
|
|
22
|
+
private wsBaseUrl;
|
|
23
|
+
private _dashboardBaseUrl;
|
|
24
|
+
private hostedUiTheme;
|
|
25
|
+
private openIncompatibleDocuments;
|
|
26
|
+
private syncDocToUrl;
|
|
27
|
+
private docUrlParam;
|
|
28
|
+
private branchUrlParam;
|
|
29
|
+
private syncDocToTitle;
|
|
30
|
+
private originalPageTitle;
|
|
31
|
+
private tokens;
|
|
32
|
+
private user;
|
|
33
|
+
private bootstrapped;
|
|
34
|
+
private listeners;
|
|
35
|
+
private readonly errorListeners;
|
|
36
|
+
private inflightRefresh;
|
|
37
|
+
private initialized;
|
|
38
|
+
private pendingAuthCode;
|
|
39
|
+
private sessionToken;
|
|
40
|
+
private documentsNamespace;
|
|
41
|
+
private documentSession;
|
|
42
|
+
private hostedUiLauncher;
|
|
43
|
+
private documentFactory;
|
|
44
|
+
private guestLinkTokenValue;
|
|
45
|
+
private launchOrganizationId;
|
|
46
|
+
private serializer;
|
|
47
|
+
private exportGuest;
|
|
48
|
+
private openDocuments;
|
|
49
|
+
private readonly importRunner;
|
|
50
|
+
private docWsClient;
|
|
51
|
+
init(appId?: string, options?: BrassInitOptions): Promise<void>;
|
|
52
|
+
signIn(): void;
|
|
53
|
+
signOut(): void;
|
|
54
|
+
get currentUser(): BrassUser | null;
|
|
55
|
+
get authStatus(): AuthStatus;
|
|
56
|
+
get isGuest(): boolean;
|
|
57
|
+
onUserChange(listener: UserChangeListener): () => void;
|
|
58
|
+
onError(listener: ErrorListener): () => void;
|
|
59
|
+
private fireError;
|
|
60
|
+
get documents(): DocumentsNamespace;
|
|
61
|
+
private docsInternal;
|
|
62
|
+
get session(): DocumentSession;
|
|
63
|
+
mountToolbar(container: HTMLElement, options?: SessionToolbarOptions): SessionToolbarHandle;
|
|
64
|
+
mountHeader(container: HTMLElement): SessionHeaderHandle;
|
|
65
|
+
mountFileMenu(container: HTMLElement): MountedPiece;
|
|
66
|
+
mountDocumentTitle(container: HTMLElement): MountedPiece;
|
|
67
|
+
mountUndoRedo(container: HTMLElement): MountedPiece;
|
|
68
|
+
mountPresenceRoster(container: HTMLElement): MountedPiece;
|
|
69
|
+
mountDriveSync(container: HTMLElement): MountedPiece;
|
|
70
|
+
mountAccountMenu(container: HTMLElement): MountedPiece;
|
|
71
|
+
mountVersionPreview(container: HTMLElement): MountedPiece;
|
|
72
|
+
private toolbarDeps;
|
|
73
|
+
selectDocument(): Promise<SelectDocumentResult | null>;
|
|
74
|
+
private selectDocumentInternal;
|
|
75
|
+
private lastSelectedDocument;
|
|
76
|
+
shareDocument(docId: string): Promise<void>;
|
|
77
|
+
documentHistory(docId: string, options?: {
|
|
78
|
+
branch?: string;
|
|
79
|
+
}): Promise<DocumentHistoryResult | null>;
|
|
80
|
+
private getHostedUiLauncher;
|
|
81
|
+
openDocumentById(docId: string, options?: OpenDocumentByIdOptions): Promise<OpenedDocument>;
|
|
82
|
+
private openByLinkInternal;
|
|
83
|
+
private openDocumentInternal;
|
|
84
|
+
createDocument(options?: CreateDocumentOptions): Promise<OpenedDocument>;
|
|
85
|
+
private createDocumentInternal;
|
|
86
|
+
private createDocumentIdWithConsent;
|
|
87
|
+
private offerInstallConsent;
|
|
88
|
+
registerSerializer(serializer: DocumentSerializer): void;
|
|
89
|
+
registerImporter(importer: DocumentImporter): void;
|
|
90
|
+
private trackOpenDocument;
|
|
91
|
+
private serializeForExport;
|
|
92
|
+
private maybeWriteDocIdToUrl;
|
|
93
|
+
private applyPageTitle;
|
|
94
|
+
private getDocumentFactory;
|
|
95
|
+
private getDocWsClient;
|
|
96
|
+
getAccessToken(): Promise<string | null>;
|
|
97
|
+
getAppAssertion(): Promise<string | null>;
|
|
98
|
+
private bootstrap;
|
|
99
|
+
private refresh;
|
|
100
|
+
private runRefresh;
|
|
101
|
+
private setTokens;
|
|
102
|
+
private hydrateProfile;
|
|
103
|
+
private requireInit;
|
|
104
|
+
private requireAppId;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|