@brass-build/client 0.3.0 → 0.4.1

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.
Files changed (128) hide show
  1. package/AGENTS.md +50 -7
  2. package/CHANGELOG.md +63 -2
  3. package/README.md +233 -77
  4. package/dist/acting-organization.d.ts +131 -0
  5. package/dist/acting-organization.d.ts.map +1 -0
  6. package/dist/acting-organization.js +273 -0
  7. package/dist/acting-organization.js.map +1 -0
  8. package/dist/api-headers.js +7 -7
  9. package/dist/api-headers.js.map +1 -1
  10. package/dist/call-service.d.ts +74 -0
  11. package/dist/call-service.d.ts.map +1 -0
  12. package/dist/call-service.js +253 -0
  13. package/dist/call-service.js.map +1 -0
  14. package/dist/client.d.ts +31 -0
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +611 -12
  17. package/dist/client.js.map +1 -1
  18. package/dist/document-contents.d.ts +15 -0
  19. package/dist/document-contents.d.ts.map +1 -0
  20. package/dist/document-contents.js +88 -0
  21. package/dist/document-contents.js.map +1 -0
  22. package/dist/document-streams.d.ts +4 -2
  23. package/dist/document-streams.d.ts.map +1 -1
  24. package/dist/document-streams.js +6 -0
  25. package/dist/document-streams.js.map +1 -1
  26. package/dist/documents.d.ts +45 -1
  27. package/dist/documents.d.ts.map +1 -1
  28. package/dist/documents.js +305 -22
  29. package/dist/documents.js.map +1 -1
  30. package/dist/export-guest.d.ts.map +1 -1
  31. package/dist/export-guest.js +5 -0
  32. package/dist/export-guest.js.map +1 -1
  33. package/dist/handle-types.d.ts +23 -0
  34. package/dist/handle-types.d.ts.map +1 -1
  35. package/dist/handles.d.ts +1 -1
  36. package/dist/handles.d.ts.map +1 -1
  37. package/dist/handles.js +1 -1
  38. package/dist/handles.js.map +1 -1
  39. package/dist/hosted-ui.d.ts +10 -0
  40. package/dist/hosted-ui.d.ts.map +1 -1
  41. package/dist/hosted-ui.js +115 -30
  42. package/dist/hosted-ui.js.map +1 -1
  43. package/dist/importer.d.ts.map +1 -1
  44. package/dist/importer.js +17 -6
  45. package/dist/importer.js.map +1 -1
  46. package/dist/index.d.ts +8 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +25 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/internal.d.ts +1 -0
  51. package/dist/internal.d.ts.map +1 -1
  52. package/dist/internal.js +1 -0
  53. package/dist/internal.js.map +1 -1
  54. package/dist/mutate-batching.js +2 -2
  55. package/dist/mutate-batching.js.map +1 -1
  56. package/dist/open-document.d.ts +1 -1
  57. package/dist/open-document.d.ts.map +1 -1
  58. package/dist/open-document.js +69 -34
  59. package/dist/open-document.js.map +1 -1
  60. package/dist/presence.d.ts +10 -0
  61. package/dist/presence.d.ts.map +1 -1
  62. package/dist/presence.js.map +1 -1
  63. package/dist/session-toolbar.d.ts +9 -0
  64. package/dist/session-toolbar.d.ts.map +1 -1
  65. package/dist/session-toolbar.js +60 -12
  66. package/dist/session-toolbar.js.map +1 -1
  67. package/dist/tail-ops.js +2 -2
  68. package/dist/tail-ops.js.map +1 -1
  69. package/dist/types.d.ts +0 -42
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/undo.d.ts +1 -1
  72. package/dist/undo.d.ts.map +1 -1
  73. package/dist/undo.js +1 -1
  74. package/dist/undo.js.map +1 -1
  75. package/dist/version-bar.d.ts.map +1 -1
  76. package/dist/version-bar.js +52 -2
  77. package/dist/version-bar.js.map +1 -1
  78. package/dist/version.d.ts +2 -2
  79. package/dist/version.js +1 -1
  80. package/dist/wasm-ready-gate.d.ts +13 -0
  81. package/dist/wasm-ready-gate.d.ts.map +1 -0
  82. package/dist/wasm-ready-gate.js +28 -0
  83. package/dist/wasm-ready-gate.js.map +1 -0
  84. package/dist/wasm-runtime.browser.d.ts +11 -0
  85. package/dist/wasm-runtime.browser.d.ts.map +1 -0
  86. package/dist/wasm-runtime.browser.js +44 -0
  87. package/dist/wasm-runtime.browser.js.map +1 -0
  88. package/dist/wasm-runtime.d.ts +6 -0
  89. package/dist/wasm-runtime.d.ts.map +1 -0
  90. package/dist/wasm-runtime.js +20 -0
  91. package/dist/wasm-runtime.js.map +1 -0
  92. package/docs/app-manifest.md +335 -5
  93. package/docs/custom-chrome.md +3 -0
  94. package/docs/presence.md +12 -0
  95. package/docs/services.md +265 -0
  96. package/docs/text-fields.md +191 -0
  97. package/package.json +4 -5
  98. package/src/acting-organization.ts +390 -0
  99. package/src/api-headers.ts +7 -7
  100. package/src/call-service.ts +354 -0
  101. package/src/client.ts +680 -14
  102. package/src/document-contents.ts +104 -0
  103. package/src/document-streams.ts +15 -1
  104. package/src/documents.ts +340 -20
  105. package/src/export-guest.ts +5 -0
  106. package/src/handle-types.ts +35 -0
  107. package/src/handles.ts +1 -1
  108. package/src/hosted-ui.ts +155 -29
  109. package/src/importer.ts +17 -6
  110. package/src/index.ts +43 -4
  111. package/src/internal.ts +4 -0
  112. package/src/mutate-batching.ts +2 -2
  113. package/src/open-document.ts +79 -38
  114. package/src/presence.ts +6 -0
  115. package/src/session-toolbar.ts +80 -12
  116. package/src/tail-ops.ts +2 -2
  117. package/src/types.ts +6 -4
  118. package/src/undo.ts +1 -1
  119. package/src/version-bar.ts +53 -2
  120. package/src/version.ts +1 -1
  121. package/src/wasm-ready-gate.ts +30 -0
  122. package/src/wasm-runtime.browser.ts +48 -0
  123. package/src/wasm-runtime.ts +21 -0
  124. package/dist/vite.d.ts +0 -31
  125. package/dist/vite.d.ts.map +0 -1
  126. package/dist/vite.js +0 -161
  127. package/dist/vite.js.map +0 -1
  128. 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,14 @@ 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 actingOrganizationResolve;
55
+ private documentOrganizationIds;
47
56
  private serializer;
48
57
  private exportGuest;
49
58
  private openDocuments;
@@ -54,6 +63,7 @@ export declare class BrassClient {
54
63
  signOut(): void;
55
64
  get currentUser(): BrassUser | null;
56
65
  get authStatus(): AuthStatus;
66
+ private knownOrganizationId;
57
67
  get isGuest(): boolean;
58
68
  onUserChange(listener: UserChangeListener): () => void;
59
69
  onError(listener: ErrorListener): () => void;
@@ -86,6 +96,8 @@ export declare class BrassClient {
86
96
  private createDocumentInternal;
87
97
  private createDocumentIdWithConsent;
88
98
  private offerInstallConsent;
99
+ private retireActingOrganizationState;
100
+ private forgetActingOrganization;
89
101
  registerSerializer(serializer: DocumentSerializer): void;
90
102
  registerImporter(importer: DocumentImporter): void;
91
103
  private trackOpenDocument;
@@ -98,12 +110,31 @@ export declare class BrassClient {
98
110
  private getDocumentFactory;
99
111
  private getDocWsClient;
100
112
  getAccessToken(): Promise<string | null>;
113
+ private resolveActingOrganizationId;
114
+ private runActingOrganizationResolve;
115
+ private requireActingOrganizationId;
116
+ private fetchActingOrganization;
117
+ private pickActingOrganization;
118
+ private switchActingOrganization;
119
+ private activeDocumentOrganizationId;
120
+ private setActingOrganization;
121
+ private visibleActingOrganization;
122
+ private watchDocumentForActingOrganization;
123
+ private refreshChromeOrganization;
124
+ private nameStoredOrganization;
125
+ private namedOrganization;
126
+ private emitActingOrganization;
127
+ callService(host: string, path: string, options?: CallServiceOptions): Promise<Response>;
128
+ listServices(): Promise<AppServiceState[] | null>;
129
+ connectService(host: string): Promise<boolean>;
130
+ private offerServiceCredential;
101
131
  getAppAssertion(): Promise<string | null>;
102
132
  private bootstrap;
103
133
  private refresh;
104
134
  private runRefresh;
105
135
  private setTokens;
106
136
  private hydrateProfile;
137
+ private reportUncatchable;
107
138
  private requireInit;
108
139
  private requireAppId;
109
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}