@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.
Files changed (258) hide show
  1. package/AGENTS.md +255 -0
  2. package/CHANGELOG.md +15 -0
  3. package/LICENSE +21 -0
  4. package/README.md +836 -0
  5. package/dist/api-fetch.d.ts +16 -0
  6. package/dist/api-fetch.d.ts.map +1 -0
  7. package/dist/api-fetch.js +97 -0
  8. package/dist/api-fetch.js.map +1 -0
  9. package/dist/api-headers.d.ts +3 -0
  10. package/dist/api-headers.d.ts.map +1 -0
  11. package/dist/api-headers.js +25 -0
  12. package/dist/api-headers.js.map +1 -0
  13. package/dist/auth-flow.d.ts +23 -0
  14. package/dist/auth-flow.d.ts.map +1 -0
  15. package/dist/auth-flow.js +76 -0
  16. package/dist/auth-flow.js.map +1 -0
  17. package/dist/client.d.ts +106 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +1278 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/doc-url-sync.d.ts +19 -0
  22. package/dist/doc-url-sync.d.ts.map +1 -0
  23. package/dist/doc-url-sync.js +181 -0
  24. package/dist/doc-url-sync.js.map +1 -0
  25. package/dist/document-branches.d.ts +32 -0
  26. package/dist/document-branches.d.ts.map +1 -0
  27. package/dist/document-branches.js +89 -0
  28. package/dist/document-branches.js.map +1 -0
  29. package/dist/document-checkpoints.d.ts +24 -0
  30. package/dist/document-checkpoints.d.ts.map +1 -0
  31. package/dist/document-checkpoints.js +115 -0
  32. package/dist/document-checkpoints.js.map +1 -0
  33. package/dist/document-commands.d.ts +93 -0
  34. package/dist/document-commands.d.ts.map +1 -0
  35. package/dist/document-commands.js +423 -0
  36. package/dist/document-commands.js.map +1 -0
  37. package/dist/document-signals.d.ts +53 -0
  38. package/dist/document-signals.d.ts.map +1 -0
  39. package/dist/document-signals.js +114 -0
  40. package/dist/document-signals.js.map +1 -0
  41. package/dist/document-streams.d.ts +22 -0
  42. package/dist/document-streams.d.ts.map +1 -0
  43. package/dist/document-streams.js +98 -0
  44. package/dist/document-streams.js.map +1 -0
  45. package/dist/document-thumbnail-capture.d.ts +27 -0
  46. package/dist/document-thumbnail-capture.d.ts.map +1 -0
  47. package/dist/document-thumbnail-capture.js +160 -0
  48. package/dist/document-thumbnail-capture.js.map +1 -0
  49. package/dist/documents-namespace.d.ts +134 -0
  50. package/dist/documents-namespace.d.ts.map +1 -0
  51. package/dist/documents-namespace.js +190 -0
  52. package/dist/documents-namespace.js.map +1 -0
  53. package/dist/documents.d.ts +146 -0
  54. package/dist/documents.d.ts.map +1 -0
  55. package/dist/documents.js +2045 -0
  56. package/dist/documents.js.map +1 -0
  57. package/dist/emitter.d.ts +15 -0
  58. package/dist/emitter.d.ts.map +1 -0
  59. package/dist/emitter.js +90 -0
  60. package/dist/emitter.js.map +1 -0
  61. package/dist/errors.d.ts +18 -0
  62. package/dist/errors.d.ts.map +1 -0
  63. package/dist/errors.js +22 -0
  64. package/dist/errors.js.map +1 -0
  65. package/dist/export-guest.d.ts +9 -0
  66. package/dist/export-guest.d.ts.map +1 -0
  67. package/dist/export-guest.js +225 -0
  68. package/dist/export-guest.js.map +1 -0
  69. package/dist/fetch-retry.d.ts +16 -0
  70. package/dist/fetch-retry.d.ts.map +1 -0
  71. package/dist/fetch-retry.js +90 -0
  72. package/dist/fetch-retry.js.map +1 -0
  73. package/dist/guest-link.d.ts +3 -0
  74. package/dist/guest-link.d.ts.map +1 -0
  75. package/dist/guest-link.js +13 -0
  76. package/dist/guest-link.js.map +1 -0
  77. package/dist/handles.d.ts +57 -0
  78. package/dist/handles.d.ts.map +1 -0
  79. package/dist/handles.js +1375 -0
  80. package/dist/handles.js.map +1 -0
  81. package/dist/hosted-runtime.d.ts +33 -0
  82. package/dist/hosted-runtime.d.ts.map +1 -0
  83. package/dist/hosted-runtime.js +99 -0
  84. package/dist/hosted-runtime.js.map +1 -0
  85. package/dist/hosted-ui.d.ts +84 -0
  86. package/dist/hosted-ui.d.ts.map +1 -0
  87. package/dist/hosted-ui.js +673 -0
  88. package/dist/hosted-ui.js.map +1 -0
  89. package/dist/importer.d.ts +22 -0
  90. package/dist/importer.d.ts.map +1 -0
  91. package/dist/importer.js +54 -0
  92. package/dist/importer.js.map +1 -0
  93. package/dist/index.d.ts +54 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +132 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/init-keys.d.ts +3 -0
  98. package/dist/init-keys.d.ts.map +1 -0
  99. package/dist/init-keys.js +13 -0
  100. package/dist/init-keys.js.map +1 -0
  101. package/dist/internal.d.ts +6 -0
  102. package/dist/internal.d.ts.map +1 -0
  103. package/dist/internal.js +17 -0
  104. package/dist/internal.js.map +1 -0
  105. package/dist/jwt.d.ts +3 -0
  106. package/dist/jwt.d.ts.map +1 -0
  107. package/dist/jwt.js +22 -0
  108. package/dist/jwt.js.map +1 -0
  109. package/dist/launch-context.d.ts +4 -0
  110. package/dist/launch-context.d.ts.map +1 -0
  111. package/dist/launch-context.js +44 -0
  112. package/dist/launch-context.js.map +1 -0
  113. package/dist/login-hint.d.ts +4 -0
  114. package/dist/login-hint.d.ts.map +1 -0
  115. package/dist/login-hint.js +63 -0
  116. package/dist/login-hint.js.map +1 -0
  117. package/dist/mutate-batching.d.ts +14 -0
  118. package/dist/mutate-batching.d.ts.map +1 -0
  119. package/dist/mutate-batching.js +65 -0
  120. package/dist/mutate-batching.js.map +1 -0
  121. package/dist/open-document.d.ts +127 -0
  122. package/dist/open-document.d.ts.map +1 -0
  123. package/dist/open-document.js +2121 -0
  124. package/dist/open-document.js.map +1 -0
  125. package/dist/page-title.d.ts +3 -0
  126. package/dist/page-title.d.ts.map +1 -0
  127. package/dist/page-title.js +32 -0
  128. package/dist/page-title.js.map +1 -0
  129. package/dist/perf.d.ts +9 -0
  130. package/dist/perf.d.ts.map +1 -0
  131. package/dist/perf.js +39 -0
  132. package/dist/perf.js.map +1 -0
  133. package/dist/presence.d.ts +62 -0
  134. package/dist/presence.d.ts.map +1 -0
  135. package/dist/presence.js +331 -0
  136. package/dist/presence.js.map +1 -0
  137. package/dist/record-paging.d.ts +99 -0
  138. package/dist/record-paging.d.ts.map +1 -0
  139. package/dist/record-paging.js +220 -0
  140. package/dist/record-paging.js.map +1 -0
  141. package/dist/schema-conflict-dialog.d.ts +10 -0
  142. package/dist/schema-conflict-dialog.d.ts.map +1 -0
  143. package/dist/schema-conflict-dialog.js +164 -0
  144. package/dist/schema-conflict-dialog.js.map +1 -0
  145. package/dist/selection-persistence.d.ts +5 -0
  146. package/dist/selection-persistence.d.ts.map +1 -0
  147. package/dist/selection-persistence.js +90 -0
  148. package/dist/selection-persistence.js.map +1 -0
  149. package/dist/serializer.d.ts +3 -0
  150. package/dist/serializer.d.ts.map +1 -0
  151. package/dist/serializer.js +2 -0
  152. package/dist/serializer.js.map +1 -0
  153. package/dist/session-persistence.d.ts +4 -0
  154. package/dist/session-persistence.d.ts.map +1 -0
  155. package/dist/session-persistence.js +68 -0
  156. package/dist/session-persistence.js.map +1 -0
  157. package/dist/session-toolbar.d.ts +62 -0
  158. package/dist/session-toolbar.d.ts.map +1 -0
  159. package/dist/session-toolbar.js +1205 -0
  160. package/dist/session-toolbar.js.map +1 -0
  161. package/dist/session.d.ts +69 -0
  162. package/dist/session.d.ts.map +1 -0
  163. package/dist/session.js +926 -0
  164. package/dist/session.js.map +1 -0
  165. package/dist/tail-ops.d.ts +28 -0
  166. package/dist/tail-ops.d.ts.map +1 -0
  167. package/dist/tail-ops.js +46 -0
  168. package/dist/tail-ops.js.map +1 -0
  169. package/dist/topic-lifecycle.d.ts +41 -0
  170. package/dist/topic-lifecycle.d.ts.map +1 -0
  171. package/dist/topic-lifecycle.js +169 -0
  172. package/dist/topic-lifecycle.js.map +1 -0
  173. package/dist/types.d.ts +22 -0
  174. package/dist/types.d.ts.map +1 -0
  175. package/dist/types.js +2 -0
  176. package/dist/types.js.map +1 -0
  177. package/dist/undo.d.ts +18 -0
  178. package/dist/undo.d.ts.map +1 -0
  179. package/dist/undo.js +110 -0
  180. package/dist/undo.js.map +1 -0
  181. package/dist/version-bar.d.ts +22 -0
  182. package/dist/version-bar.d.ts.map +1 -0
  183. package/dist/version-bar.js +169 -0
  184. package/dist/version-bar.js.map +1 -0
  185. package/dist/version.d.ts +3 -0
  186. package/dist/version.d.ts.map +1 -0
  187. package/dist/version.js +8 -0
  188. package/dist/version.js.map +1 -0
  189. package/dist/vite.d.ts +15 -0
  190. package/dist/vite.d.ts.map +1 -0
  191. package/dist/vite.js +36 -0
  192. package/dist/vite.js.map +1 -0
  193. package/dist/ws-client.d.ts +53 -0
  194. package/dist/ws-client.d.ts.map +1 -0
  195. package/dist/ws-client.js +604 -0
  196. package/dist/ws-client.js.map +1 -0
  197. package/dist/ws-frame-limit.d.ts +21 -0
  198. package/dist/ws-frame-limit.d.ts.map +1 -0
  199. package/dist/ws-frame-limit.js +40 -0
  200. package/dist/ws-frame-limit.js.map +1 -0
  201. package/docs/app-manifest.md +65 -0
  202. package/docs/custom-chrome.md +147 -0
  203. package/docs/hosted-ui-advanced.md +77 -0
  204. package/docs/imported-documents.md +261 -0
  205. package/docs/presence.md +129 -0
  206. package/docs/schemas.md +135 -0
  207. package/docs/streams.md +248 -0
  208. package/package.json +60 -0
  209. package/scripts/prepare.mjs +50 -0
  210. package/src/api-fetch.ts +127 -0
  211. package/src/api-headers.ts +28 -0
  212. package/src/auth-flow.ts +125 -0
  213. package/src/client.ts +1457 -0
  214. package/src/doc-url-sync.ts +183 -0
  215. package/src/document-branches.ts +124 -0
  216. package/src/document-checkpoints.ts +135 -0
  217. package/src/document-commands.ts +651 -0
  218. package/src/document-signals.ts +234 -0
  219. package/src/document-streams.ts +132 -0
  220. package/src/document-thumbnail-capture.ts +191 -0
  221. package/src/documents-namespace.ts +516 -0
  222. package/src/documents.ts +2426 -0
  223. package/src/emitter.ts +129 -0
  224. package/src/errors.ts +45 -0
  225. package/src/export-guest.ts +282 -0
  226. package/src/fetch-retry.ts +119 -0
  227. package/src/guest-link.ts +14 -0
  228. package/src/handles.ts +1731 -0
  229. package/src/hosted-runtime.ts +109 -0
  230. package/src/hosted-ui.ts +1020 -0
  231. package/src/importer.ts +89 -0
  232. package/src/index.ts +267 -0
  233. package/src/init-keys.ts +15 -0
  234. package/src/internal.ts +23 -0
  235. package/src/jwt.ts +18 -0
  236. package/src/launch-context.ts +43 -0
  237. package/src/login-hint.ts +60 -0
  238. package/src/mutate-batching.ts +63 -0
  239. package/src/open-document.ts +2869 -0
  240. package/src/page-title.ts +33 -0
  241. package/src/perf.ts +46 -0
  242. package/src/presence.ts +471 -0
  243. package/src/record-paging.ts +270 -0
  244. package/src/schema-conflict-dialog.ts +176 -0
  245. package/src/selection-persistence.ts +98 -0
  246. package/src/serializer.ts +15 -0
  247. package/src/session-persistence.ts +69 -0
  248. package/src/session-toolbar.ts +1457 -0
  249. package/src/session.ts +1262 -0
  250. package/src/tail-ops.ts +63 -0
  251. package/src/topic-lifecycle.ts +217 -0
  252. package/src/types.ts +75 -0
  253. package/src/undo.ts +125 -0
  254. package/src/version-bar.ts +221 -0
  255. package/src/version.ts +8 -0
  256. package/src/vite.ts +49 -0
  257. package/src/ws-client.ts +678 -0
  258. 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":"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"}
@@ -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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,yEAAyE;AACzE,6EAA6E;AAC7E,cAAc;AACd,MAAM,yBAAyB,GAAG,IAAI,CAAC;AA6CvC,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAa,EAAE,QAAgB;IACjF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,UAAU,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,KAAa,EACb,QAAgB;IAEhB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,oBAAoB,CAAC,CAAC;IACxD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,KAAa,EACb,aAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE;IAElD,uEAAuE;IACvE,oEAAoE;IACpE,oEAAoE;IACpE,mDAAmD;IACnD,MAAM,GAAG,GAAG,GAAG,WAAW,YAAY,IAAI,eAAe,CAAC;QACxD,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,aAAa;KACtB,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChB,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACrE,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjC,8CAA8C;QAC9C,8DAA8D;QAC9D,iEAAiE;QACjE,4DAA4D;QAC5D,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;;YACnE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,wEAAwE;IACxE,2EAA2E;IAC3E,8EAA8E;IAC9E,6EAA6E;IAC7E,4EAA4E;IAC5E,uEAAuE;IACvE,6EAA6E;IAC7E,qEAAqE;IACrE,gDAAgD;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAC;IACxD,MAAM,MAAM,GAAkB;QAC5B,MAAM,EAAE;YACN,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,yBAAyB,CAAC,GAAG,IAAI;YAC7E,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE;KACF,CAAC;IACF,IAAI,IAAI,CAAC,aAAa;QAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -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":"AASA,OAAO,EAGL,KAAK,qBAAqB,EAG1B,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAGL,KAAK,qBAAqB,EAI1B,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAoCvB,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAWL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAwBpB,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IAKnB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAmB3E;AASD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,oBAAoB,CAAS;IAIrC,OAAO,CAAC,SAAS,CAAuB;IAIxC,OAAO,CAAC,iBAAiB,CAA8B;IAIvD,OAAO,CAAC,aAAa,CAA0B;IAG/C,OAAO,CAAC,yBAAyB,CAAS;IAI1C,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,cAAc,CAAoC;IAI1D,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,IAAI,CAA0B;IActC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAiC;IAGlD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+C;IAC9E,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,WAAW,CAAS;IAW5B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,YAAY,CAAuB;IAG3C,OAAO,CAAC,kBAAkB,CAEV;IAGhB,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,eAAe,CAAgC;IAGvD,OAAO,CAAC,mBAAmB,CAAuB;IAIlD,OAAO,CAAC,oBAAoB,CAAuB;IAInD,OAAO,CAAC,UAAU,CAAmC;IAIrD,OAAO,CAAC,WAAW,CAAsC;IAGzD,OAAO,CAAC,aAAa,CAA+B;IAIpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAI1B;IAGH,OAAO,CAAC,WAAW,CAA8B;IAQ3C,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4JzE,MAAM,IAAI,IAAI;IAwBd,OAAO,IAAI,IAAI;IAkCf,IAAI,WAAW,IAAI,SAAS,GAAG,IAAI,CAElC;IAQD,IAAI,UAAU,IAAI,UAAU,CAI3B;IAKD,IAAI,OAAO,IAAI,OAAO,CAErB;IAUD,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAoBtD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAI5C,OAAO,CAAC,SAAS;IAQjB,IAAI,SAAS,IAAI,kBAAkB,CAElC;IAID,OAAO,CAAC,YAAY;IAgBpB,IAAI,OAAO,IAAI,eAAe,CA6D7B;IAMD,YAAY,CACV,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,oBAAoB;IAQvB,WAAW,CAAC,SAAS,EAAE,WAAW,GAAG,mBAAmB;IAQxD,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY;IAGnD,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY;IAGxD,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY;IAGnD,mBAAmB,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY;IAGzD,cAAc,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY;IAGpD,gBAAgB,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY;IAOtD,mBAAmB,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY;IAMzD,OAAO,CAAC,WAAW;IAwBb,cAAc,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAS9C,sBAAsB;IAWpC,OAAO,CAAC,oBAAoB;IAQ5B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,eAAe,CACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAIxC,OAAO,CAAC,mBAAmB;IA2DrB,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,cAAc,CAAC;YAWZ,kBAAkB;YAelB,oBAAoB;IA2E5B,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;YAQhE,sBAAsB;YAuBtB,2BAA2B;YAoB3B,mBAAmB;IAoBjC,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAaxD,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAUlD,OAAO,CAAC,iBAAiB;YAoBX,kBAAkB;IAuBhC,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;IAwF1B,OAAO,CAAC,cAAc;IAmBhB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAexC,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAUjC,SAAS;YA2ET,OAAO;YAyCP,UAAU;IA2BxB,OAAO,CAAC,SAAS;YAgBH,cAAc;IAwB5B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;CAKrB"}