@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,90 @@
1
+ // Bounded transient-retry for HTTP requests, with the replay policy as an
2
+ // explicit argument so the read path and the one write path we replay share
3
+ // a single implementation instead of hand-rolling a loop per call site.
4
+ //
5
+ // A cold Brass API container can reject a request at the gateway with a
6
+ // transient 5xx (503 while the API scales into a concurrent burst, 502 /
7
+ // 504 on a cold-start blip) or 429 (a short rate spike). These are not
8
+ // the caller's error and clear within a second or two, so a single hard
9
+ // failure on a document open reads as "the app is broken" when a brief
10
+ // wait-and-retry would have succeeded.
11
+ //
12
+ // What is safe to replay depends on whether the request is idempotent,
13
+ // which is why the policy is a parameter rather than a constant:
14
+ //
15
+ // - A GET is idempotent, so replaying it is always safe: retry the whole
16
+ // transient 5xx / 429 set AND a thrown network error (`RETRY_READ`).
17
+ // - A write is NOT idempotent, so only a 503 is safe to replay: the API
18
+ // gateway returns a 503 BEFORE the request reaches the handler (a transient
19
+ // throttle / scale-up / deploy-window blip), so the write never ran and
20
+ // a replay cannot double-apply it. A 502 / 504 / 429 or a network throw
21
+ // might mean the handler ran, so those stay hard failures (`RETRY_WRITE_503`).
22
+ // - A 500 is never retried under either policy: an unhandled server error
23
+ // is usually deterministic, so a replay just doubles the cost without
24
+ // changing the outcome.
25
+ // A 4xx other than 429 (403 app_not_installed, 404) is a definitive answer
26
+ // and is never in a policy's replay set.
27
+ // Idempotent GET: replay the full transient set and network throws.
28
+ export const RETRY_READ = {
29
+ replayStatuses: new Set([429, 502, 503, 504]),
30
+ replayNetworkErrors: true,
31
+ };
32
+ // Non-idempotent write: replay ONLY a pre-handler 503, never a network throw.
33
+ export const RETRY_WRITE_503 = {
34
+ replayStatuses: new Set([503]),
35
+ replayNetworkErrors: false,
36
+ };
37
+ // Idempotent write: replay the full transient set AND a network throw, exactly
38
+ // like a read. Safe only when the request carries a STABLE idempotency key the
39
+ // server dedupes on, so a replay the handler already applied returns the
40
+ // original result instead of applying twice. This is what lets document create
41
+ // stop assuming a 503 is always pre-handler (`RETRY_WRITE_503`'s constraint):
42
+ // with a key, even a post-handler 503 or a network throw is replay-safe.
43
+ export const RETRY_IDEMPOTENT_WRITE = {
44
+ replayStatuses: new Set([429, 502, 503, 504]),
45
+ replayNetworkErrors: true,
46
+ };
47
+ const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
48
+ // Run `doFetch` (which performs one request) up to `maxAttempts` times,
49
+ // replaying per `policy` with exponential backoff plus jitter between tries.
50
+ // Returns the last Response (replayable or not) so the caller keeps its own
51
+ // status handling; rethrows the last network error only if the policy replays
52
+ // throws and every attempt threw. A network throw the policy does not replay
53
+ // propagates immediately.
54
+ export async function fetchWithRetry(doFetch, options = {}) {
55
+ const policy = options.policy ?? RETRY_READ;
56
+ const maxAttempts = options.maxAttempts ?? 3;
57
+ const baseDelayMs = options.baseDelayMs ?? 300;
58
+ const sleep = options.sleep ?? defaultSleep;
59
+ let lastError;
60
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
61
+ let response;
62
+ try {
63
+ response = await doFetch();
64
+ }
65
+ catch (err) {
66
+ // A network-level throw is only replayable for an idempotent request;
67
+ // a write policy rethrows it rather than risk a double-apply.
68
+ if (!policy.replayNetworkErrors)
69
+ throw err;
70
+ lastError = err;
71
+ }
72
+ if (response && !policy.replayStatuses.has(response.status)) {
73
+ return response;
74
+ }
75
+ if (attempt === maxAttempts) {
76
+ if (response)
77
+ return response;
78
+ throw lastError;
79
+ }
80
+ options.onRetry?.(attempt, response);
81
+ // Exponential backoff with jitter so a burst of clients that all
82
+ // failed together do not re-collide on the same retry tick.
83
+ const backoff = baseDelayMs * 2 ** (attempt - 1);
84
+ const jitter = Math.random() * baseDelayMs;
85
+ await sleep(backoff + jitter);
86
+ }
87
+ // Unreachable: the loop returns or throws on the final attempt.
88
+ throw lastError ?? new Error('fetchWithRetry: no attempts made');
89
+ }
90
+ //# sourceMappingURL=fetch-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-retry.js","sourceRoot":"","sources":["../src/fetch-retry.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,wEAAwE;AACxE,EAAE;AACF,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,wEAAwE;AACxE,uEAAuE;AACvE,uCAAuC;AACvC,EAAE;AACF,uEAAuE;AACvE,iEAAiE;AACjE,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,wEAAwE;AACxE,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,iFAAiF;AACjF,0EAA0E;AAC1E,wEAAwE;AACxE,0BAA0B;AAC1B,2EAA2E;AAC3E,yCAAyC;AAWzC,oEAAoE;AACpE,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,mBAAmB,EAAE,IAAI;CAC1B,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9B,mBAAmB,EAAE,KAAK;CAC3B,CAAC;AAEF,+EAA+E;AAC/E,+EAA+E;AAC/E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAgB;IACjD,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,mBAAmB,EAAE,IAAI;CAC1B,CAAC;AAgBF,MAAM,YAAY,GAAG,CAAC,EAAU,EAAiB,EAAE,CACjD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD,wEAAwE;AACxE,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,0BAA0B;AAC1B,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAgC,EAChC,UAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC;IAE5C,IAAI,SAAkB,CAAC;IACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAC3D,IAAI,QAA8B,CAAC;QACnC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,OAAO,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sEAAsE;YACtE,8DAA8D;YAC9D,IAAI,CAAC,MAAM,CAAC,mBAAmB;gBAAE,MAAM,GAAG,CAAC;YAC3C,SAAS,GAAG,GAAG,CAAC;QAClB,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5B,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC9B,MAAM,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,iEAAiE;QACjE,4DAA4D;QAC5D,MAAM,OAAO,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC;QAC3C,MAAM,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,gEAAgE;IAChE,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const GUEST_LINK_PARAM = "brass_link";
2
+ export declare function readGuestLinkToken(search: string): string | null;
3
+ //# sourceMappingURL=guest-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest-link.d.ts","sourceRoot":"","sources":["../src/guest-link.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE"}
@@ -0,0 +1,13 @@
1
+ // The anonymous "anyone with the link" boot signal. When Brass routes a
2
+ // no-sign-in share link into an app, it appends `?brass_link=<token>` to
3
+ // the app's URL. `Brass.init` reads it here and opens the document
4
+ // read-only through the token (`GET /links/:token/view`), with no sign-in.
5
+ //
6
+ // Pure + search-string-in so it stays testable, mirroring
7
+ // `isExportMode(search)`.
8
+ export const GUEST_LINK_PARAM = 'brass_link';
9
+ export function readGuestLinkToken(search) {
10
+ const value = new URLSearchParams(search).get(GUEST_LINK_PARAM);
11
+ return value && value.trim() !== '' ? value : null;
12
+ }
13
+ //# sourceMappingURL=guest-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest-link.js","sourceRoot":"","sources":["../src/guest-link.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,mEAAmE;AACnE,2EAA2E;AAC3E,EAAE;AACF,0DAA0D;AAC1D,0BAA0B;AAE1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChE,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { LoroList, LoroMap } from 'loro-crdt';
2
+ import { MutateBatcher } from './mutate-batching.js';
3
+ export interface Change<T = unknown> {
4
+ readonly set: ReadonlyMap<string, T>;
5
+ readonly deleted: readonly string[];
6
+ readonly order?: readonly string[];
7
+ }
8
+ export type ChangeSource = 'local' | 'remote' | 'undo' | 'redo' | 'checkout';
9
+ export interface ChangeOrigin {
10
+ readonly source: ChangeSource;
11
+ }
12
+ export type MapSubscriber<T = unknown> = (change: Change<T>, origin?: ChangeOrigin) => void;
13
+ export type ListSubscriber = () => void;
14
+ export type HandleUnsubscribe = () => void;
15
+ export interface HandleOwner {
16
+ assertWritable(): void;
17
+ ensureLocalUpdatesSubscribed(): void;
18
+ commitMutate(): void;
19
+ originOf(event: unknown): ChangeSource;
20
+ }
21
+ export interface MapHandle<T = unknown> {
22
+ read(): Record<string, T>;
23
+ get(entryKey: string): T | undefined;
24
+ keys(): string[];
25
+ has(entryKey: string): boolean;
26
+ mutate(fn: (draft: Record<string, T>) => void): void;
27
+ subscribe(cb: MapSubscriber<T>): HandleUnsubscribe;
28
+ map<U>(entryKey: string): MapHandle<U>;
29
+ list<U>(entryKey: string): ListHandle<U>;
30
+ }
31
+ export interface ListHandle<T = unknown> {
32
+ read(): T[];
33
+ length(): number;
34
+ mutate(fn: (draft: T[]) => void): void;
35
+ subscribe(cb: ListSubscriber): HandleUnsubscribe;
36
+ }
37
+ export interface OrderedMapHandle<T = unknown> {
38
+ read(): Record<string, T>;
39
+ get(entryKey: string): T | undefined;
40
+ has(entryKey: string): boolean;
41
+ keys(): string[];
42
+ ordered(): {
43
+ key: string;
44
+ value: T;
45
+ }[];
46
+ mutate(fn: (draft: Record<string, T>) => void): void;
47
+ subscribe(cb: MapSubscriber<T>): HandleUnsubscribe;
48
+ }
49
+ export declare function wrapLoroMapProxy(loroMap: LoroMap, batcher?: MutateBatcher): Record<string, unknown>;
50
+ export declare function createRootMapHandle<T>(root: LoroMap, owner: HandleOwner, pageCount?: () => number, pagingScheme?: () => number): MapHandle<T>;
51
+ export declare function createRootListHandle<T>(root: LoroList, owner: HandleOwner): ListHandle<T>;
52
+ export declare function rebindRootMapAnchor(handle: MapHandle<unknown>, next: LoroMap): void;
53
+ export declare function rebindRootListAnchor(handle: ListHandle<unknown>, next: LoroList): void;
54
+ export declare function resyncRootHandle(handle: MapHandle<unknown> | ListHandle<unknown>): void;
55
+ export declare function teardownRootHandle(handle: MapHandle<unknown> | ListHandle<unknown>): void;
56
+ export declare function createOrderedMapHandle<T>(map: MapHandle<T>, order: ListHandle<string>, owner: HandleOwner): OrderedMapHandle<T>;
57
+ //# sourceMappingURL=handles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../src/handles.ts"],"names":[],"mappings":"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"}