@brass-build/client 0.2.0 → 0.4.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 +26 -5
- package/CHANGELOG.md +61 -2
- package/README.md +247 -87
- package/dist/acting-organization.d.ts +131 -0
- package/dist/acting-organization.d.ts.map +1 -0
- package/dist/acting-organization.js +278 -0
- package/dist/acting-organization.js.map +1 -0
- package/dist/api-headers.js +7 -7
- package/dist/api-headers.js.map +1 -1
- package/dist/call-service.d.ts +74 -0
- package/dist/call-service.d.ts.map +1 -0
- package/dist/call-service.js +253 -0
- package/dist/call-service.js.map +1 -0
- package/dist/client.d.ts +29 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +583 -12
- package/dist/client.js.map +1 -1
- package/dist/document-checkpoints.d.ts +1 -0
- package/dist/document-checkpoints.d.ts.map +1 -1
- package/dist/document-checkpoints.js +27 -0
- package/dist/document-checkpoints.js.map +1 -1
- package/dist/document-contents.d.ts +15 -0
- package/dist/document-contents.d.ts.map +1 -0
- package/dist/document-contents.js +88 -0
- package/dist/document-contents.js.map +1 -0
- package/dist/document-signals.d.ts +31 -1
- package/dist/document-signals.d.ts.map +1 -1
- package/dist/document-signals.js +59 -0
- package/dist/document-signals.js.map +1 -1
- package/dist/document-streams.d.ts +4 -2
- package/dist/document-streams.d.ts.map +1 -1
- package/dist/document-streams.js +6 -0
- package/dist/document-streams.js.map +1 -1
- package/dist/document-thumbnail-capture.d.ts +20 -0
- package/dist/document-thumbnail-capture.d.ts.map +1 -1
- package/dist/document-thumbnail-capture.js +247 -9
- package/dist/document-thumbnail-capture.js.map +1 -1
- package/dist/documents-namespace.d.ts.map +1 -1
- package/dist/documents-namespace.js +3 -0
- package/dist/documents-namespace.js.map +1 -1
- package/dist/documents.d.ts +51 -3
- package/dist/documents.d.ts.map +1 -1
- package/dist/documents.js +415 -36
- package/dist/documents.js.map +1 -1
- package/dist/export-guest.d.ts.map +1 -1
- package/dist/export-guest.js +5 -0
- package/dist/export-guest.js.map +1 -1
- package/dist/handle-types.d.ts +23 -0
- package/dist/handle-types.d.ts.map +1 -1
- package/dist/handles.d.ts +1 -1
- package/dist/handles.d.ts.map +1 -1
- package/dist/handles.js +3 -3
- package/dist/handles.js.map +1 -1
- package/dist/hosted-ui.d.ts +10 -0
- package/dist/hosted-ui.d.ts.map +1 -1
- package/dist/hosted-ui.js +115 -30
- package/dist/hosted-ui.js.map +1 -1
- package/dist/importer.d.ts.map +1 -1
- package/dist/importer.js +28 -66
- package/dist/importer.js.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -1
- package/dist/mutate-batching.js +2 -2
- package/dist/mutate-batching.js.map +1 -1
- package/dist/open-document.d.ts +16 -1
- package/dist/open-document.d.ts.map +1 -1
- package/dist/open-document.js +123 -35
- package/dist/open-document.js.map +1 -1
- package/dist/presence.d.ts +10 -0
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js.map +1 -1
- package/dist/record-paging.d.ts +13 -14
- package/dist/record-paging.d.ts.map +1 -1
- package/dist/record-paging.js +13 -14
- package/dist/record-paging.js.map +1 -1
- package/dist/serializer.d.ts +3 -3
- package/dist/session-toolbar.d.ts +9 -0
- package/dist/session-toolbar.d.ts.map +1 -1
- package/dist/session-toolbar.js +191 -21
- package/dist/session-toolbar.js.map +1 -1
- package/dist/tail-ops.js +2 -2
- package/dist/tail-ops.js.map +1 -1
- package/dist/types.d.ts +0 -42
- package/dist/types.d.ts.map +1 -1
- package/dist/undo.d.ts +1 -1
- package/dist/undo.d.ts.map +1 -1
- package/dist/undo.js +1 -1
- package/dist/undo.js.map +1 -1
- package/dist/version-bar.d.ts.map +1 -1
- package/dist/version-bar.js +75 -4
- package/dist/version-bar.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/dist/wasm-ready-gate.d.ts +13 -0
- package/dist/wasm-ready-gate.d.ts.map +1 -0
- package/dist/wasm-ready-gate.js +28 -0
- package/dist/wasm-ready-gate.js.map +1 -0
- package/dist/wasm-runtime.browser.d.ts +11 -0
- package/dist/wasm-runtime.browser.d.ts.map +1 -0
- package/dist/wasm-runtime.browser.js +44 -0
- package/dist/wasm-runtime.browser.js.map +1 -0
- package/dist/wasm-runtime.d.ts +6 -0
- package/dist/wasm-runtime.d.ts.map +1 -0
- package/dist/wasm-runtime.js +20 -0
- package/dist/wasm-runtime.js.map +1 -0
- package/dist/when-saved.d.ts +2 -0
- package/dist/when-saved.d.ts.map +1 -0
- package/dist/when-saved.js +70 -0
- package/dist/when-saved.js.map +1 -0
- package/dist/ws-client.d.ts +4 -0
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +70 -1
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-frame-limit.d.ts.map +1 -1
- package/dist/ws-frame-limit.js +9 -10
- package/dist/ws-frame-limit.js.map +1 -1
- package/docs/app-manifest.md +335 -5
- package/docs/custom-chrome.md +7 -2
- package/docs/presence.md +12 -0
- package/docs/services.md +265 -0
- package/docs/text-fields.md +191 -0
- package/package.json +4 -5
- package/src/acting-organization.ts +396 -0
- package/src/api-headers.ts +7 -7
- package/src/call-service.ts +354 -0
- package/src/client.ts +655 -15
- package/src/document-checkpoints.ts +30 -0
- package/src/document-contents.ts +104 -0
- package/src/document-signals.ts +113 -1
- package/src/document-streams.ts +15 -1
- package/src/document-thumbnail-capture.ts +253 -9
- package/src/documents-namespace.ts +20 -10
- package/src/documents.ts +460 -33
- package/src/export-guest.ts +5 -0
- package/src/handle-types.ts +35 -0
- package/src/handles.ts +7 -6
- package/src/hosted-ui.ts +155 -29
- package/src/importer.ts +28 -62
- package/src/index.ts +43 -4
- package/src/internal.ts +10 -0
- package/src/mutate-batching.ts +2 -2
- package/src/open-document.ts +179 -39
- package/src/presence.ts +6 -0
- package/src/record-paging.ts +13 -14
- package/src/serializer.ts +3 -3
- package/src/session-toolbar.ts +219 -22
- package/src/tail-ops.ts +2 -2
- package/src/types.ts +6 -4
- package/src/undo.ts +1 -1
- package/src/version-bar.ts +77 -7
- package/src/version.ts +1 -1
- package/src/wasm-ready-gate.ts +30 -0
- package/src/wasm-runtime.browser.ts +48 -0
- package/src/wasm-runtime.ts +21 -0
- package/src/when-saved.ts +66 -0
- package/src/ws-client.ts +70 -1
- package/src/ws-frame-limit.ts +9 -10
- package/dist/vite.d.ts +0 -31
- package/dist/vite.d.ts.map +0 -1
- package/dist/vite.js +0 -161
- package/dist/vite.js.map +0 -1
- package/src/vite.ts +0 -214
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
// One brokered call to an outside service.
|
|
2
|
+
//
|
|
3
|
+
// The app names a HOST its manifest declares and a path on it. Brass holds the
|
|
4
|
+
// credential for that host, attaches it, applies the owner's caps, and returns
|
|
5
|
+
// the service's answer, so the key never reaches the browser.
|
|
6
|
+
import { applyAppAssertionHeader, applyClientVersionHeader } from './api-headers.js';
|
|
7
|
+
import { BrassError } from './errors.js';
|
|
8
|
+
// The headers the app named for the SERVICE travel as the value of one header
|
|
9
|
+
// on the Brass request, rather than spread across it. Two things follow, and
|
|
10
|
+
// they are the reason this shape exists. A browser preflights a cross-origin
|
|
11
|
+
// request header by name, so a vendor header spread onto the request would
|
|
12
|
+
// have to be allow-listed by the api before an app could send it at all, and
|
|
13
|
+
// `anthropic-version` could not be sent; carried as data, one allow-listed
|
|
14
|
+
// name covers every vendor. And what the platform sends the service is then
|
|
15
|
+
// exactly this set, with no rule needed to keep Brass's own headers out of it.
|
|
16
|
+
//
|
|
17
|
+
// Percent-encoded JSON, so a value carrying a newline or a character outside
|
|
18
|
+
// ASCII is representable on the header line that carries it.
|
|
19
|
+
export function encodeServiceHeaders(headers) {
|
|
20
|
+
return encodeURIComponent(JSON.stringify(headers));
|
|
21
|
+
}
|
|
22
|
+
// The path reaches the service verbatim, so a caller's own percent-encoding
|
|
23
|
+
// survives: a service is entitled to whatever encoding it was given. Only the
|
|
24
|
+
// leading separator is the SDK's to normalize, since the caller writing
|
|
25
|
+
// `/v1/messages` and `v1/messages` means the same request.
|
|
26
|
+
//
|
|
27
|
+
// A call at the service's ROOT ends here rather than at a separator with
|
|
28
|
+
// nothing after it, because a trailing slash is a different path to a gateway
|
|
29
|
+
// and to some services, and `callService(host, '/')` is asking for the root
|
|
30
|
+
// rather than for a child of it.
|
|
31
|
+
// A host is case-insensitive to DNS and exact to the lookup that finds the
|
|
32
|
+
// declaration, so the two are reconciled here rather than at each caller: an
|
|
33
|
+
// app that spells one the way its vendor's console does is asking for the
|
|
34
|
+
// service it declared, not for one nothing declares.
|
|
35
|
+
export function normalizeServiceHost(host) {
|
|
36
|
+
return host.toLowerCase();
|
|
37
|
+
}
|
|
38
|
+
export function brokeredCallUrl(apiBaseUrl, organizationId, host, path) {
|
|
39
|
+
const base = apiBaseUrl.replace(/\/$/, '');
|
|
40
|
+
const tail = path.replace(/^\//, '');
|
|
41
|
+
const call = `${base}/organizations/${encodeURIComponent(organizationId)}/call/${encodeURIComponent(host)}`;
|
|
42
|
+
return tail === '' || tail.startsWith('?') ? `${call}${tail}` : `${call}/${tail}`;
|
|
43
|
+
}
|
|
44
|
+
// The path is appended to the broker URL, and a URL parser resolves dot and
|
|
45
|
+
// backslash segments before the request leaves the browser: `../x` and
|
|
46
|
+
// `..\x` climb out of the `/call/<host>/` prefix and land the credentialed
|
|
47
|
+
// request on another Brass route, and a `#` truncates the request at the
|
|
48
|
+
// fragment. The server refuses each of these per DECODED segment
|
|
49
|
+
// (`resolveTargetPath`), but that refusal is unreachable once the parser has
|
|
50
|
+
// already rewritten the path, so the same check runs here before anything is
|
|
51
|
+
// sent. It matches the server's verdicts: whole `/`-segments only (an encoded
|
|
52
|
+
// `%2f` stays inside one segment and is the service's own to decode), the tail
|
|
53
|
+
// after the one leading slash the broker URL itself normalizes.
|
|
54
|
+
export function invalidServicePath(path) {
|
|
55
|
+
const tail = path.replace(/^\//, '');
|
|
56
|
+
// A fragment is dropped by the parser, so the request past it is silently
|
|
57
|
+
// lost; a service path carries a literal `#` as `%23`. Read across the
|
|
58
|
+
// whole tail rather than the pathname, since a `#` after the query starts
|
|
59
|
+
// the fragment exactly as one before it does.
|
|
60
|
+
if (tail.includes('#'))
|
|
61
|
+
return true;
|
|
62
|
+
const pathname = tail.split('?', 1)[0] ?? '';
|
|
63
|
+
// Browsers fold `\` into `/`, so a raw backslash is a separator that this
|
|
64
|
+
// split would miss; the server refuses one outright, and a service path
|
|
65
|
+
// carries a literal backslash as `%5C`.
|
|
66
|
+
if (pathname.includes('\\'))
|
|
67
|
+
return true;
|
|
68
|
+
// A scheme prefix (`https:`) makes the tail an absolute URL to the parser.
|
|
69
|
+
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(pathname))
|
|
70
|
+
return true;
|
|
71
|
+
for (const segment of pathname.split('/')) {
|
|
72
|
+
let decoded;
|
|
73
|
+
try {
|
|
74
|
+
decoded = decodeURIComponent(segment);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
if (decoded === '..' || decoded === '.')
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
// The same shape every other refusal on this path takes: a Response the app
|
|
85
|
+
// reads a `code` off, carrying the server's own code for a path it would
|
|
86
|
+
// itself refuse. Returned before the request is built, so a path that would
|
|
87
|
+
// escape the broker never travels with the caller's credentials.
|
|
88
|
+
function invalidPathRefusal() {
|
|
89
|
+
return new Response(JSON.stringify({
|
|
90
|
+
error: 'The service path is not a valid request path',
|
|
91
|
+
code: 'path_invalid',
|
|
92
|
+
}), { status: 403, headers: { 'content-type': 'application/json' } });
|
|
93
|
+
}
|
|
94
|
+
export async function callService(deps, host, path, options = {}) {
|
|
95
|
+
// Resolved once, before the first send, so a retry below uses the same
|
|
96
|
+
// organization and cannot open the resolve dialog a second time.
|
|
97
|
+
//
|
|
98
|
+
// The chooser is a question for the person exactly as the two dialogs below
|
|
99
|
+
// are, so the one option governs it too.
|
|
100
|
+
const mayAsk = options.requestMissingCredentials === true;
|
|
101
|
+
// Refused before resolving an organization or opening a chooser: a path that
|
|
102
|
+
// cannot reach the service is answered without spending either.
|
|
103
|
+
if (invalidServicePath(path))
|
|
104
|
+
return invalidPathRefusal();
|
|
105
|
+
const organizationId = await deps.resolveOrganization(mayAsk);
|
|
106
|
+
if (organizationId === null)
|
|
107
|
+
return unresolvedOrganization();
|
|
108
|
+
const send = async () => {
|
|
109
|
+
const token = await deps.getAccessToken();
|
|
110
|
+
if (!token)
|
|
111
|
+
throw new BrassError('Not signed in', { status: 401 });
|
|
112
|
+
const headers = {
|
|
113
|
+
authorization: `Bearer ${token}`,
|
|
114
|
+
};
|
|
115
|
+
if (options.headers && Object.keys(options.headers).length > 0) {
|
|
116
|
+
headers['x-brass-service-headers'] = encodeServiceHeaders(options.headers);
|
|
117
|
+
}
|
|
118
|
+
applyClientVersionHeader(headers);
|
|
119
|
+
await applyAppAssertionHeader(headers, deps.getAppAssertion);
|
|
120
|
+
const doFetch = deps.fetchImpl ?? fetch;
|
|
121
|
+
return doFetch(brokeredCallUrl(deps.apiBaseUrl, organizationId, host, path), {
|
|
122
|
+
method: options.method ?? 'POST',
|
|
123
|
+
headers,
|
|
124
|
+
...(options.body !== undefined ? { body: options.body } : {}),
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
const response = await send();
|
|
128
|
+
// The service's own status is the answer, so nothing here throws on one.
|
|
129
|
+
// The exceptions are the refusals that are a question for the person rather
|
|
130
|
+
// than a result for the app: offer the hosted surface that asks it, and send
|
|
131
|
+
// the call again once the answer lands.
|
|
132
|
+
if (response.ok)
|
|
133
|
+
return response;
|
|
134
|
+
if (!mayAsk)
|
|
135
|
+
return response;
|
|
136
|
+
const ask = response.headers.get(BRASS_ASK_HEADER);
|
|
137
|
+
if (ask === 'credential') {
|
|
138
|
+
return (await deps.offerServiceCredential(organizationId, host))
|
|
139
|
+
? send()
|
|
140
|
+
: response;
|
|
141
|
+
}
|
|
142
|
+
if (ask !== 'install')
|
|
143
|
+
return response;
|
|
144
|
+
const denial = await notInstalledDenial(response);
|
|
145
|
+
if (!denial)
|
|
146
|
+
return response;
|
|
147
|
+
return (await deps.offerInstallConsent(denial)) ? send() : response;
|
|
148
|
+
}
|
|
149
|
+
// No organization resolved, for a caller that did not ask for the chooser.
|
|
150
|
+
//
|
|
151
|
+
// Answered as a refusal rather than thrown, because every other refusal on
|
|
152
|
+
// this path arrives as a Response the app reads a `code` off, and a caller
|
|
153
|
+
// reading ahead should not need a second shape for the case where it has not
|
|
154
|
+
// acted yet. The code is the server's own for the same state.
|
|
155
|
+
function unresolvedOrganization() {
|
|
156
|
+
return new Response(JSON.stringify({
|
|
157
|
+
error: 'No organization resolved for this app yet',
|
|
158
|
+
code: 'destination_required',
|
|
159
|
+
}), { status: 409, headers: { 'content-type': 'application/json' } });
|
|
160
|
+
}
|
|
161
|
+
// Which hosted surface a refusal is asking for, in Brass's own words.
|
|
162
|
+
//
|
|
163
|
+
// Brass states this rather than the SDK inferring it from the `code`, for two
|
|
164
|
+
// reasons that both come down to the body being the service's. A declared
|
|
165
|
+
// service answers with whatever status and body it likes, so a refusal shaped
|
|
166
|
+
// like Brass's own would open a dialog the SERVICE asked for; the platform
|
|
167
|
+
// refuses to relay any header under this prefix, so this one is Brass's alone.
|
|
168
|
+
// And two of the codes cover a credential the app's author owns as well as one
|
|
169
|
+
// the reader can supply, which are the same word for a question somebody can
|
|
170
|
+
// answer and one nobody can. Only Brass knows which. A credential-shaped
|
|
171
|
+
// refusal added after this SDK shipped therefore still opens the dialog.
|
|
172
|
+
const BRASS_ASK_HEADER = 'x-brass-ask';
|
|
173
|
+
// Reads the machine-readable install denial out of a refusal, leaving the
|
|
174
|
+
// response untouched for a caller that gets it back: the body is read from a
|
|
175
|
+
// clone, since a caller reading a consumed body sees an empty one.
|
|
176
|
+
async function notInstalledDenial(response) {
|
|
177
|
+
let parsed;
|
|
178
|
+
try {
|
|
179
|
+
parsed = await response.clone().json();
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
if (typeof parsed !== 'object' ||
|
|
185
|
+
parsed === null ||
|
|
186
|
+
parsed.code !== 'app_not_installed' ||
|
|
187
|
+
typeof parsed.organization_id !== 'string') {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const body = parsed;
|
|
191
|
+
return new BrassError(typeof body.error === 'string' ? body.error : 'App not installed', {
|
|
192
|
+
status: response.status,
|
|
193
|
+
code: 'app_not_installed',
|
|
194
|
+
organizationId: body.organization_id,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// Which of this app's declared services would serve a call right now.
|
|
198
|
+
//
|
|
199
|
+
// The platform answers with the CALL's own verdict rather than a second
|
|
200
|
+
// derivation of it, so a host reported ready is one the broker will spend.
|
|
201
|
+
export async function listAppServices(deps, organizationId) {
|
|
202
|
+
const token = await deps.getAccessToken();
|
|
203
|
+
if (!token)
|
|
204
|
+
throw new BrassError('Not signed in', { status: 401 });
|
|
205
|
+
const headers = { authorization: `Bearer ${token}` };
|
|
206
|
+
applyClientVersionHeader(headers);
|
|
207
|
+
await applyAppAssertionHeader(headers, deps.getAppAssertion);
|
|
208
|
+
const base = deps.apiBaseUrl.replace(/\/$/, '');
|
|
209
|
+
const doFetch = deps.fetchImpl ?? fetch;
|
|
210
|
+
const response = await doFetch(`${base}/organizations/${encodeURIComponent(organizationId)}/services`, { method: 'GET', headers });
|
|
211
|
+
if (!response.ok) {
|
|
212
|
+
let message = 'Could not read this app\'s services';
|
|
213
|
+
let notInstalled = false;
|
|
214
|
+
try {
|
|
215
|
+
const body = (await response.json());
|
|
216
|
+
if (typeof body.error === 'string')
|
|
217
|
+
message = body.error;
|
|
218
|
+
notInstalled = body.code === 'app_not_installed';
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// Leaves the generic message, which the status already qualifies.
|
|
222
|
+
}
|
|
223
|
+
// Only the code the SDK itself acts on is typed onto the error. The rest
|
|
224
|
+
// of the platform's refusal vocabulary describes one host rather than this
|
|
225
|
+
// read, and none of it reaches a read that returned nothing.
|
|
226
|
+
//
|
|
227
|
+
// The organization rides the install denial because that is what the
|
|
228
|
+
// hosted install dialog installs into: the read named one organization, so
|
|
229
|
+
// the refusal is about that one and the dialog does not have to ask where
|
|
230
|
+
// a second time.
|
|
231
|
+
throw new BrassError(message, {
|
|
232
|
+
status: response.status,
|
|
233
|
+
...(notInstalled
|
|
234
|
+
? { code: 'app_not_installed', organizationId }
|
|
235
|
+
: {}),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
// An answer that is not the platform's own reaches here as a 200: an edge
|
|
239
|
+
// or a proxy serves its own page under whatever status it chooses. Reading
|
|
240
|
+
// it through the same error type as every refusal on this path leaves one
|
|
241
|
+
// shape for an app to catch, and a `services` that is not a list is read as
|
|
242
|
+
// none rather than handed to the app typed as an array it can iterate.
|
|
243
|
+
let parsed;
|
|
244
|
+
try {
|
|
245
|
+
parsed = await response.json();
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
throw new BrassError('Could not read this app\'s services', { status: 502 });
|
|
249
|
+
}
|
|
250
|
+
const services = parsed?.services;
|
|
251
|
+
return Array.isArray(services) ? services : [];
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=call-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-service.js","sourceRoot":"","sources":["../src/call-service.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type CreateDocumentOptions, type OpenDocumentByIdOptions, type OpenedDo
|
|
|
2
2
|
import { type DocumentHistoryResult, type SelectDocumentResult } from './hosted-ui.js';
|
|
3
3
|
import type { DocumentSerializer } from './serializer.js';
|
|
4
4
|
import { type DocumentImporter } from './importer.js';
|
|
5
|
+
import { type AppServiceState, type CallServiceOptions } from './call-service.js';
|
|
5
6
|
import { type DocumentsNamespace } from './documents-namespace.js';
|
|
6
7
|
import { type DocumentSession } from './session.js';
|
|
7
8
|
import { type SessionToolbarHandle, type SessionHeaderHandle, type SessionToolbarOptions, type MountedPiece } from './session-toolbar.js';
|
|
@@ -44,6 +45,13 @@ export declare class BrassClient {
|
|
|
44
45
|
private documentFactory;
|
|
45
46
|
private guestLinkTokenValue;
|
|
46
47
|
private launchOrganizationId;
|
|
48
|
+
private actingOrganization;
|
|
49
|
+
private documentWatchForActingOrganization;
|
|
50
|
+
private chromeDocumentOrganization;
|
|
51
|
+
private chromeOrganizationToken;
|
|
52
|
+
private organizationNames;
|
|
53
|
+
private actingOrganizationListeners;
|
|
54
|
+
private documentOrganizationIds;
|
|
47
55
|
private serializer;
|
|
48
56
|
private exportGuest;
|
|
49
57
|
private openDocuments;
|
|
@@ -54,6 +62,7 @@ export declare class BrassClient {
|
|
|
54
62
|
signOut(): void;
|
|
55
63
|
get currentUser(): BrassUser | null;
|
|
56
64
|
get authStatus(): AuthStatus;
|
|
65
|
+
private knownOrganizationId;
|
|
57
66
|
get isGuest(): boolean;
|
|
58
67
|
onUserChange(listener: UserChangeListener): () => void;
|
|
59
68
|
onError(listener: ErrorListener): () => void;
|
|
@@ -86,23 +95,43 @@ export declare class BrassClient {
|
|
|
86
95
|
private createDocumentInternal;
|
|
87
96
|
private createDocumentIdWithConsent;
|
|
88
97
|
private offerInstallConsent;
|
|
98
|
+
private forgetActingOrganization;
|
|
89
99
|
registerSerializer(serializer: DocumentSerializer): void;
|
|
90
100
|
registerImporter(importer: DocumentImporter): void;
|
|
91
101
|
private trackOpenDocument;
|
|
92
102
|
private liveOpenDocuments;
|
|
93
103
|
private liveOpenDocument;
|
|
104
|
+
private pushDocumentToDrive;
|
|
94
105
|
private serializeForExport;
|
|
95
106
|
private maybeWriteDocIdToUrl;
|
|
96
107
|
private applyPageTitle;
|
|
97
108
|
private getDocumentFactory;
|
|
98
109
|
private getDocWsClient;
|
|
99
110
|
getAccessToken(): Promise<string | null>;
|
|
111
|
+
private resolveActingOrganizationId;
|
|
112
|
+
private requireActingOrganizationId;
|
|
113
|
+
private fetchActingOrganization;
|
|
114
|
+
private pickActingOrganization;
|
|
115
|
+
private switchActingOrganization;
|
|
116
|
+
private activeDocumentOrganizationId;
|
|
117
|
+
private setActingOrganization;
|
|
118
|
+
private visibleActingOrganization;
|
|
119
|
+
private watchDocumentForActingOrganization;
|
|
120
|
+
private refreshChromeOrganization;
|
|
121
|
+
private nameStoredOrganization;
|
|
122
|
+
private namedOrganization;
|
|
123
|
+
private emitActingOrganization;
|
|
124
|
+
callService(host: string, path: string, options?: CallServiceOptions): Promise<Response>;
|
|
125
|
+
listServices(): Promise<AppServiceState[] | null>;
|
|
126
|
+
connectService(host: string): Promise<boolean>;
|
|
127
|
+
private offerServiceCredential;
|
|
100
128
|
getAppAssertion(): Promise<string | null>;
|
|
101
129
|
private bootstrap;
|
|
102
130
|
private refresh;
|
|
103
131
|
private runRefresh;
|
|
104
132
|
private setTokens;
|
|
105
133
|
private hydrateProfile;
|
|
134
|
+
private reportUncatchable;
|
|
106
135
|
private requireInit;
|
|
107
136
|
private requireAppId;
|
|
108
137
|
}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|