@brass-build/client 0.4.1 → 0.5.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 (323) hide show
  1. package/AGENTS.md +124 -45
  2. package/CHANGELOG.md +80 -4
  3. package/README.md +666 -179
  4. package/dist/api-fetch.d.ts +8 -0
  5. package/dist/api-fetch.d.ts.map +1 -1
  6. package/dist/api-fetch.js +35 -8
  7. package/dist/api-fetch.js.map +1 -1
  8. package/dist/batched-get.d.ts +11 -0
  9. package/dist/batched-get.d.ts.map +1 -0
  10. package/dist/batched-get.js +92 -0
  11. package/dist/batched-get.js.map +1 -0
  12. package/dist/call-service.d.ts +4 -0
  13. package/dist/call-service.d.ts.map +1 -1
  14. package/dist/call-service.js +66 -3
  15. package/dist/call-service.js.map +1 -1
  16. package/dist/client.d.ts +48 -2
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +918 -115
  19. package/dist/client.js.map +1 -1
  20. package/dist/document-checkpoints.d.ts +25 -2
  21. package/dist/document-checkpoints.d.ts.map +1 -1
  22. package/dist/document-checkpoints.js +258 -61
  23. package/dist/document-checkpoints.js.map +1 -1
  24. package/dist/document-commands.d.ts.map +1 -1
  25. package/dist/document-commands.js +5 -3
  26. package/dist/document-commands.js.map +1 -1
  27. package/dist/document-contents.d.ts +10 -0
  28. package/dist/document-contents.d.ts.map +1 -1
  29. package/dist/document-contents.js +23 -1
  30. package/dist/document-contents.js.map +1 -1
  31. package/dist/document-set-subscription.d.ts +56 -0
  32. package/dist/document-set-subscription.d.ts.map +1 -0
  33. package/dist/document-set-subscription.js +240 -0
  34. package/dist/document-set-subscription.js.map +1 -0
  35. package/dist/document-signals.d.ts +6 -0
  36. package/dist/document-signals.d.ts.map +1 -1
  37. package/dist/document-signals.js +31 -1
  38. package/dist/document-signals.js.map +1 -1
  39. package/dist/document-streams.d.ts +36 -2
  40. package/dist/document-streams.d.ts.map +1 -1
  41. package/dist/document-streams.js +69 -18
  42. package/dist/document-streams.js.map +1 -1
  43. package/dist/document-thumbnail-capture.d.ts +12 -2
  44. package/dist/document-thumbnail-capture.d.ts.map +1 -1
  45. package/dist/document-thumbnail-capture.js +103 -27
  46. package/dist/document-thumbnail-capture.js.map +1 -1
  47. package/dist/documents-namespace.d.ts +92 -10
  48. package/dist/documents-namespace.d.ts.map +1 -1
  49. package/dist/documents-namespace.js +285 -39
  50. package/dist/documents-namespace.js.map +1 -1
  51. package/dist/documents.d.ts +173 -8
  52. package/dist/documents.d.ts.map +1 -1
  53. package/dist/documents.js +1778 -310
  54. package/dist/documents.js.map +1 -1
  55. package/dist/errors.d.ts +3 -3
  56. package/dist/errors.d.ts.map +1 -1
  57. package/dist/errors.js.map +1 -1
  58. package/dist/fetch-retry.d.ts +1 -0
  59. package/dist/fetch-retry.d.ts.map +1 -1
  60. package/dist/fetch-retry.js +2 -0
  61. package/dist/fetch-retry.js.map +1 -1
  62. package/dist/file-choice.d.ts +2 -0
  63. package/dist/file-choice.d.ts.map +1 -0
  64. package/dist/file-choice.js +27 -0
  65. package/dist/file-choice.js.map +1 -0
  66. package/dist/guest-link.d.ts +18 -1
  67. package/dist/guest-link.d.ts.map +1 -1
  68. package/dist/guest-link.js +329 -1
  69. package/dist/guest-link.js.map +1 -1
  70. package/dist/handle-types.d.ts +67 -5
  71. package/dist/handle-types.d.ts.map +1 -1
  72. package/dist/handles.d.ts +15 -19
  73. package/dist/handles.d.ts.map +1 -1
  74. package/dist/handles.js +231 -76
  75. package/dist/handles.js.map +1 -1
  76. package/dist/hosted-ui.d.ts +61 -0
  77. package/dist/hosted-ui.d.ts.map +1 -1
  78. package/dist/hosted-ui.js +94 -42
  79. package/dist/hosted-ui.js.map +1 -1
  80. package/dist/import-contract.d.ts +74 -0
  81. package/dist/import-contract.d.ts.map +1 -0
  82. package/dist/import-contract.js +163 -0
  83. package/dist/import-contract.js.map +1 -0
  84. package/dist/import-guest.d.ts +9 -0
  85. package/dist/import-guest.d.ts.map +1 -0
  86. package/dist/import-guest.js +155 -0
  87. package/dist/import-guest.js.map +1 -0
  88. package/dist/import-report.d.ts +17 -0
  89. package/dist/import-report.d.ts.map +1 -0
  90. package/dist/import-report.js +7 -0
  91. package/dist/import-report.js.map +1 -0
  92. package/dist/importer-wait.d.ts +2 -0
  93. package/dist/importer-wait.d.ts.map +1 -0
  94. package/dist/importer-wait.js +5 -0
  95. package/dist/importer-wait.js.map +1 -0
  96. package/dist/importer.d.ts +18 -4
  97. package/dist/importer.d.ts.map +1 -1
  98. package/dist/importer.js +322 -105
  99. package/dist/importer.js.map +1 -1
  100. package/dist/in-development.d.ts +2 -0
  101. package/dist/in-development.d.ts.map +1 -0
  102. package/dist/in-development.js +10 -0
  103. package/dist/in-development.js.map +1 -0
  104. package/dist/index.d.ts +16 -8
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +24 -8
  107. package/dist/index.js.map +1 -1
  108. package/dist/init-keys.d.ts +1 -1
  109. package/dist/init-keys.d.ts.map +1 -1
  110. package/dist/init-keys.js +6 -1
  111. package/dist/init-keys.js.map +1 -1
  112. package/dist/input-documents.d.ts +67 -0
  113. package/dist/input-documents.d.ts.map +1 -0
  114. package/dist/input-documents.js +693 -0
  115. package/dist/input-documents.js.map +1 -0
  116. package/dist/inputs-status.d.ts +80 -0
  117. package/dist/inputs-status.d.ts.map +1 -0
  118. package/dist/inputs-status.js +460 -0
  119. package/dist/inputs-status.js.map +1 -0
  120. package/dist/inputs.d.ts +2 -0
  121. package/dist/inputs.d.ts.map +1 -0
  122. package/dist/inputs.js +793 -0
  123. package/dist/inputs.js.map +1 -0
  124. package/dist/internal.d.ts +6 -1
  125. package/dist/internal.d.ts.map +1 -1
  126. package/dist/internal.js +4 -1
  127. package/dist/internal.js.map +1 -1
  128. package/dist/join-content.d.ts +33 -0
  129. package/dist/join-content.d.ts.map +1 -0
  130. package/dist/join-content.js +114 -0
  131. package/dist/join-content.js.map +1 -0
  132. package/dist/join-stamp.d.ts +3 -0
  133. package/dist/join-stamp.d.ts.map +1 -0
  134. package/dist/join-stamp.js +12 -0
  135. package/dist/join-stamp.js.map +1 -0
  136. package/dist/manifest-drift.d.ts +9 -0
  137. package/dist/manifest-drift.d.ts.map +1 -0
  138. package/dist/manifest-drift.js +46 -0
  139. package/dist/manifest-drift.js.map +1 -0
  140. package/dist/open-document.d.ts +109 -2
  141. package/dist/open-document.d.ts.map +1 -1
  142. package/dist/open-document.js +1822 -811
  143. package/dist/open-document.js.map +1 -1
  144. package/dist/page-restore.d.ts +12 -0
  145. package/dist/page-restore.d.ts.map +1 -0
  146. package/dist/page-restore.js +23 -0
  147. package/dist/page-restore.js.map +1 -0
  148. package/dist/placement.d.ts +13 -0
  149. package/dist/placement.d.ts.map +1 -0
  150. package/dist/placement.js +34 -0
  151. package/dist/placement.js.map +1 -0
  152. package/dist/presence.d.ts +1 -0
  153. package/dist/presence.d.ts.map +1 -1
  154. package/dist/presence.js +16 -4
  155. package/dist/presence.js.map +1 -1
  156. package/dist/read-only-document.d.ts +87 -0
  157. package/dist/read-only-document.d.ts.map +1 -0
  158. package/dist/read-only-document.js +4 -0
  159. package/dist/read-only-document.js.map +1 -0
  160. package/dist/record-paging.d.ts +63 -6
  161. package/dist/record-paging.d.ts.map +1 -1
  162. package/dist/record-paging.js +122 -29
  163. package/dist/record-paging.js.map +1 -1
  164. package/dist/references.d.ts +40 -0
  165. package/dist/references.d.ts.map +1 -0
  166. package/dist/references.js +135 -0
  167. package/dist/references.js.map +1 -0
  168. package/dist/request-lane.d.ts +5 -0
  169. package/dist/request-lane.d.ts.map +1 -0
  170. package/dist/request-lane.js +48 -0
  171. package/dist/request-lane.js.map +1 -0
  172. package/dist/sealed-arrow.d.ts +170 -0
  173. package/dist/sealed-arrow.d.ts.map +1 -0
  174. package/dist/sealed-arrow.js +769 -0
  175. package/dist/sealed-arrow.js.map +1 -0
  176. package/dist/sealed-cache.d.ts +21 -0
  177. package/dist/sealed-cache.d.ts.map +1 -0
  178. package/dist/sealed-cache.js +247 -0
  179. package/dist/sealed-cache.js.map +1 -0
  180. package/dist/sealed-encode.d.ts +87 -0
  181. package/dist/sealed-encode.d.ts.map +1 -0
  182. package/dist/sealed-encode.js +876 -0
  183. package/dist/sealed-encode.js.map +1 -0
  184. package/dist/sealed-handles.d.ts +45 -0
  185. package/dist/sealed-handles.d.ts.map +1 -0
  186. package/dist/sealed-handles.js +408 -0
  187. package/dist/sealed-handles.js.map +1 -0
  188. package/dist/sealed-store.d.ts +242 -0
  189. package/dist/sealed-store.d.ts.map +1 -0
  190. package/dist/sealed-store.js +1155 -0
  191. package/dist/sealed-store.js.map +1 -0
  192. package/dist/serializer.d.ts +6 -15
  193. package/dist/serializer.d.ts.map +1 -1
  194. package/dist/session-toolbar.d.ts +20 -5
  195. package/dist/session-toolbar.d.ts.map +1 -1
  196. package/dist/session-toolbar.js +419 -67
  197. package/dist/session-toolbar.js.map +1 -1
  198. package/dist/session.d.ts +38 -1
  199. package/dist/session.d.ts.map +1 -1
  200. package/dist/session.js +562 -79
  201. package/dist/session.js.map +1 -1
  202. package/dist/sha256.d.ts +3 -0
  203. package/dist/sha256.d.ts.map +1 -0
  204. package/dist/sha256.js +74 -0
  205. package/dist/sha256.js.map +1 -0
  206. package/dist/stable-handles.d.ts +19 -0
  207. package/dist/stable-handles.d.ts.map +1 -0
  208. package/dist/stable-handles.js +193 -0
  209. package/dist/stable-handles.js.map +1 -0
  210. package/dist/staged-seal.d.ts +2 -0
  211. package/dist/staged-seal.d.ts.map +1 -0
  212. package/dist/staged-seal.js +76 -0
  213. package/dist/staged-seal.js.map +1 -0
  214. package/dist/subscriber-delivery.d.ts +8 -0
  215. package/dist/subscriber-delivery.d.ts.map +1 -0
  216. package/dist/subscriber-delivery.js +31 -0
  217. package/dist/subscriber-delivery.js.map +1 -0
  218. package/dist/tail-op-import.d.ts +10 -0
  219. package/dist/tail-op-import.d.ts.map +1 -0
  220. package/dist/tail-op-import.js +33 -0
  221. package/dist/tail-op-import.js.map +1 -0
  222. package/dist/topic-lifecycle.d.ts +6 -0
  223. package/dist/topic-lifecycle.d.ts.map +1 -1
  224. package/dist/topic-lifecycle.js +32 -2
  225. package/dist/topic-lifecycle.js.map +1 -1
  226. package/dist/trial-replace-dialog.d.ts +10 -0
  227. package/dist/trial-replace-dialog.d.ts.map +1 -0
  228. package/dist/trial-replace-dialog.js +153 -0
  229. package/dist/trial-replace-dialog.js.map +1 -0
  230. package/dist/types.d.ts +8 -1
  231. package/dist/types.d.ts.map +1 -1
  232. package/dist/undo.d.ts +60 -5
  233. package/dist/undo.d.ts.map +1 -1
  234. package/dist/undo.js +344 -75
  235. package/dist/undo.js.map +1 -1
  236. package/dist/version-bar.d.ts +1 -0
  237. package/dist/version-bar.d.ts.map +1 -1
  238. package/dist/version-bar.js +2 -1
  239. package/dist/version-bar.js.map +1 -1
  240. package/dist/version.d.ts +2 -2
  241. package/dist/version.js +1 -1
  242. package/dist/ws-client.d.ts +21 -0
  243. package/dist/ws-client.d.ts.map +1 -1
  244. package/dist/ws-client.js +192 -8
  245. package/dist/ws-client.js.map +1 -1
  246. package/dist/ws-frame-limit.d.ts +1 -0
  247. package/dist/ws-frame-limit.d.ts.map +1 -1
  248. package/dist/ws-frame-limit.js.map +1 -1
  249. package/docs/app-manifest.md +121 -17
  250. package/docs/custom-chrome.md +24 -16
  251. package/docs/hosted-ui-advanced.md +38 -6
  252. package/docs/imported-documents.md +104 -51
  253. package/docs/presence.md +16 -4
  254. package/docs/schemas.md +8 -5
  255. package/docs/services.md +6 -6
  256. package/docs/streams.md +139 -150
  257. package/docs/text-fields.md +26 -19
  258. package/package.json +5 -2
  259. package/src/api-fetch.ts +53 -3
  260. package/src/auth-flow.ts +1 -1
  261. package/src/batched-get.ts +117 -0
  262. package/src/call-service.ts +78 -3
  263. package/src/client.ts +1022 -112
  264. package/src/document-checkpoints.ts +307 -65
  265. package/src/document-commands.ts +5 -5
  266. package/src/document-contents.ts +27 -1
  267. package/src/document-set-subscription.ts +274 -0
  268. package/src/document-signals.ts +47 -5
  269. package/src/document-streams.ts +85 -16
  270. package/src/document-thumbnail-capture.ts +118 -32
  271. package/src/documents-namespace.ts +539 -84
  272. package/src/documents.ts +2017 -348
  273. package/src/errors.ts +17 -6
  274. package/src/fetch-retry.ts +5 -0
  275. package/src/file-choice.ts +26 -0
  276. package/src/guest-link.ts +362 -1
  277. package/src/handle-types.ts +73 -47
  278. package/src/handles.ts +253 -83
  279. package/src/hosted-ui.ts +211 -50
  280. package/src/import-contract.ts +227 -0
  281. package/src/import-guest.ts +193 -0
  282. package/src/import-report.ts +24 -0
  283. package/src/importer-wait.ts +4 -0
  284. package/src/importer.ts +386 -131
  285. package/src/in-development.ts +10 -0
  286. package/src/index.ts +76 -16
  287. package/src/init-keys.ts +6 -1
  288. package/src/input-documents.ts +819 -0
  289. package/src/inputs-status.ts +598 -0
  290. package/src/inputs.ts +1090 -0
  291. package/src/internal.ts +7 -0
  292. package/src/join-content.ts +135 -0
  293. package/src/join-stamp.ts +12 -0
  294. package/src/manifest-drift.ts +54 -0
  295. package/src/open-document.ts +2346 -930
  296. package/src/page-restore.ts +38 -0
  297. package/src/placement.ts +54 -0
  298. package/src/presence.ts +21 -5
  299. package/src/read-only-document.ts +133 -0
  300. package/src/record-paging.ts +147 -25
  301. package/src/references.ts +207 -0
  302. package/src/request-lane.ts +59 -0
  303. package/src/sealed-arrow.ts +843 -0
  304. package/src/sealed-cache.ts +267 -0
  305. package/src/sealed-encode.ts +1015 -0
  306. package/src/sealed-handles.ts +486 -0
  307. package/src/sealed-store.ts +1330 -0
  308. package/src/serializer.ts +8 -20
  309. package/src/session-toolbar.ts +463 -72
  310. package/src/session.ts +740 -99
  311. package/src/sha256.ts +65 -0
  312. package/src/stable-handles.ts +235 -0
  313. package/src/staged-seal.ts +90 -0
  314. package/src/subscriber-delivery.ts +37 -0
  315. package/src/tail-op-import.ts +30 -0
  316. package/src/topic-lifecycle.ts +38 -2
  317. package/src/trial-replace-dialog.ts +163 -0
  318. package/src/types.ts +6 -6
  319. package/src/undo.ts +386 -73
  320. package/src/version-bar.ts +5 -1
  321. package/src/version.ts +1 -1
  322. package/src/ws-client.ts +208 -16
  323. package/src/ws-frame-limit.ts +1 -0
@@ -0,0 +1,155 @@
1
+ // Import-guest: the app side of a platform-run import. Brass loads the app's
2
+ // own bundle with the import-mode URL flag in a headless browser it hosts,
3
+ // hands it the file over the `__brass_embed` envelope, and takes back what
4
+ // the registered importer produced, already encoded in the frozen form the
5
+ // platform seals. The mirror of `export-guest.ts`: Brass is the framer, the
6
+ // app's SDK is the guest, and the guest never authenticates or calls the API.
7
+ import { encodeImportStreams, encodeStreamBundle, readImportResult, } from './import-contract.js';
8
+ import { EMBED_ENVELOPE, EMBED_PROTOCOL_VERSION } from './embed-protocol.js';
9
+ import { SDK_VERSION } from './version.js';
10
+ export const IMPORT_MODE_PARAM = '__brass_import';
11
+ // How long to wait for a late `registerImporter` before answering
12
+ // `no_importer`.
13
+ const IMPORTER_WAIT_MS = 10_000;
14
+ export function isImportMode(search) {
15
+ return new URLSearchParams(search).has(IMPORT_MODE_PARAM);
16
+ }
17
+ function toImportFile(file) {
18
+ return {
19
+ name: file.name,
20
+ content_type: file.content_type,
21
+ byte_size: file.bytes.byteLength,
22
+ bytes: () => Promise.resolve(file.bytes),
23
+ };
24
+ }
25
+ // Start listening as an import guest. Called from `Brass.init` only when
26
+ // `isImportMode(location.search)` is true.
27
+ export function startImportGuest() {
28
+ let importer = null;
29
+ let pending = null;
30
+ let done = false;
31
+ let waitTimer;
32
+ function reply(hostOrigin, requestId, outcome) {
33
+ const send = (answer) => window.parent.postMessage({ [EMBED_ENVELOPE]: EMBED_PROTOCOL_VERSION, type: 'import-result', requestId, ...answer }, hostOrigin);
34
+ try {
35
+ send(outcome);
36
+ }
37
+ catch {
38
+ // A report the browser cannot clone (one holding a function, say) is
39
+ // left behind, so the framer still receives the content.
40
+ if (outcome.ok && outcome.report !== undefined) {
41
+ const { report: _unsent, ...content } = outcome;
42
+ try {
43
+ send(content);
44
+ return;
45
+ }
46
+ catch {
47
+ // Answered as a failure below.
48
+ }
49
+ }
50
+ send({ ok: false, code: 'importer_failed', message: 'The import result could not be sent.' });
51
+ }
52
+ }
53
+ async function run() {
54
+ if (done || !pending || !importer)
55
+ return;
56
+ done = true;
57
+ if (waitTimer !== undefined)
58
+ clearTimeout(waitTimer);
59
+ const { hostOrigin, requestId, file } = pending;
60
+ let outcome;
61
+ try {
62
+ const result = readImportResult(await importer(toImportFile(file)));
63
+ const streams = result === null ? [] : await encodeImportStreams(result);
64
+ if (result === null || streams.length === 0) {
65
+ outcome = { ok: false, code: 'empty', message: 'The importer returned no content.' };
66
+ }
67
+ else {
68
+ outcome = {
69
+ ok: true,
70
+ bundle: encodeStreamBundle(streams),
71
+ entries: streams.reduce((sum, s) => sum + s.entries, 0),
72
+ ...(result.report !== undefined ? { report: result.report } : {}),
73
+ };
74
+ }
75
+ }
76
+ catch (err) {
77
+ outcome = {
78
+ ok: false,
79
+ code: 'importer_failed',
80
+ message: err instanceof Error ? err.message : 'The importer failed.',
81
+ };
82
+ }
83
+ reply(hostOrigin, requestId, outcome);
84
+ }
85
+ function onMessage(event) {
86
+ if (event.source !== window.parent)
87
+ return;
88
+ const data = event.data;
89
+ if (!data || typeof data !== 'object' || !(EMBED_ENVELOPE in data))
90
+ return;
91
+ if (pending !== null)
92
+ return;
93
+ const requestId = typeof data['requestId'] === 'string' ? data['requestId'] : '';
94
+ // Anything the framer sends that this guest cannot serve is answered at
95
+ // once, so the framer never waits out its own timeout on it.
96
+ const unsupported = () => reply(event.origin, requestId, {
97
+ ok: false,
98
+ code: 'unsupported_request',
99
+ message: 'This app cannot serve that import request.',
100
+ });
101
+ if (data[EMBED_ENVELOPE] !== EMBED_PROTOCOL_VERSION || data['type'] !== 'import-request') {
102
+ unsupported();
103
+ return;
104
+ }
105
+ const files = data['files'];
106
+ // The request carries a list, and an importer reads one file.
107
+ if (requestId === '' || !Array.isArray(files) || files.length !== 1) {
108
+ unsupported();
109
+ return;
110
+ }
111
+ const file = files[0];
112
+ if (typeof file?.['name'] !== 'string' ||
113
+ typeof file['content_type'] !== 'string' ||
114
+ !(file['bytes'] instanceof Uint8Array)) {
115
+ unsupported();
116
+ return;
117
+ }
118
+ pending = {
119
+ requestId,
120
+ file: { name: file['name'], content_type: file['content_type'], bytes: file['bytes'] },
121
+ hostOrigin: event.origin,
122
+ };
123
+ if (importer) {
124
+ void run();
125
+ }
126
+ else {
127
+ waitTimer = setTimeout(() => {
128
+ if (done || !pending)
129
+ return;
130
+ done = true;
131
+ reply(pending.hostOrigin, pending.requestId, {
132
+ ok: false,
133
+ code: 'no_importer',
134
+ message: 'No importer registered.',
135
+ });
136
+ }, IMPORTER_WAIT_MS);
137
+ }
138
+ }
139
+ window.addEventListener('message', onMessage);
140
+ // `accepts` names the forms a request may hand the file in.
141
+ window.parent.postMessage({ [EMBED_ENVELOPE]: EMBED_PROTOCOL_VERSION, type: 'ready', sdk: SDK_VERSION, accepts: ['bytes'] }, '*');
142
+ return {
143
+ setImporter(next) {
144
+ importer = next;
145
+ if (pending)
146
+ void run();
147
+ },
148
+ dispose() {
149
+ window.removeEventListener('message', onMessage);
150
+ if (waitTimer !== undefined)
151
+ clearTimeout(waitTimer);
152
+ },
153
+ };
154
+ }
155
+ //# sourceMappingURL=import-guest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-guest.js","sourceRoot":"","sources":["../src/import-guest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** `skipped`: content the file holds that the import did not read.
2
+ * `assumed`: a value the file did not give, which the import supplied.
3
+ * `missing`: something the file names that the import did not receive. */
4
+ export type ImportFindingKind = 'skipped' | 'assumed' | 'missing';
5
+ /** One thing an import skipped, assumed or did not receive. */
6
+ export interface ImportFinding {
7
+ kind: ImportFindingKind;
8
+ /** One complete sentence, shown to the reader verbatim. */
9
+ message: string;
10
+ }
11
+ /** What an importer made of a file. A clean import returns none. */
12
+ export interface ImportReport {
13
+ /** One sentence stating what was read, shown above the findings. */
14
+ summary?: string;
15
+ findings: ImportFinding[];
16
+ }
17
+ //# sourceMappingURL=import-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-report.d.ts","sourceRoot":"","sources":["../src/import-report.ts"],"names":[],"mappings":"AAMA;;2EAE2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAElE,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B"}
@@ -0,0 +1,7 @@
1
+ // What an importer made of a file. `Brass.registerImporter`'s importer may
2
+ // return one, and the platform's own importers write the same shape; it
3
+ // reaches readers as `doc.importReport` on the document it describes.
4
+ //
5
+ // A clean import returns nothing: a report with no findings is not stored.
6
+ export {};
7
+ //# sourceMappingURL=import-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-report.js","sourceRoot":"","sources":["../src/import-report.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wEAAwE;AACxE,sEAAsE;AACtE,EAAE;AACF,2EAA2E"}
@@ -0,0 +1,2 @@
1
+ export declare const importerWaitRejections: WeakSet<object>;
2
+ //# sourceMappingURL=importer-wait.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-wait.d.ts","sourceRoot":"","sources":["../src/importer-wait.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,iBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // The rejections of opens that stopped waiting for this app's
2
+ // `registerImporter`. A follower keeps an input refused this way for the
3
+ // registration, where an input another app imports waits for its import.
4
+ export const importerWaitRejections = new WeakSet();
5
+ //# sourceMappingURL=importer-wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-wait.js","sourceRoot":"","sources":["../src/importer-wait.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,yEAAyE;AACzE,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAAU,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { Document } from './documents.js';
2
- import type { DocumentSourceBlob } from './documents-namespace.js';
3
- export type DocumentImporter = (source: DocumentSourceBlob, doc: Document) => void | Promise<void>;
2
+ import type { ImportReport } from './import-report.js';
3
+ import { ImportResultError, type DocumentImporter, type ImportFile, type ImportResult } from './import-contract.js';
4
+ export type { DocumentImporter, ImportFile, ImportResult };
4
5
  export interface ImportClaimResponse {
5
6
  claimed?: boolean;
6
7
  already_imported?: boolean;
@@ -8,15 +9,28 @@ export interface ImportClaimResponse {
8
9
  app_id: string;
9
10
  schema_hash: string;
10
11
  };
12
+ import_failed?: boolean;
13
+ message?: string;
14
+ }
15
+ export interface ImportFailedResponse {
16
+ import_failed: true;
17
+ message: string;
11
18
  }
12
19
  export interface ImportRunnerDeps {
13
20
  claimImport(docId: string): Promise<ImportClaimResponse>;
14
- completeImport(docId: string): Promise<unknown>;
21
+ stageImport(docId: string, bundle: Uint8Array): Promise<string>;
22
+ completeImport(docId: string, report: ImportReport | undefined, uploadKey: string): Promise<unknown>;
23
+ failImport(docId: string, message: string): Promise<ImportFailedResponse>;
15
24
  reportError(error: Error): void;
16
25
  }
17
26
  export interface ImportRunner {
18
27
  setImporter(importer: DocumentImporter): void;
19
- attempt(doc: Document): Promise<void>;
28
+ attempt(doc: Document, options?: {
29
+ reloadInPlace?: boolean;
30
+ }): Promise<void>;
20
31
  }
32
+ export declare const STALLED_HOLDER_MS: number;
33
+ export declare const IMPORTER_RUN_CEILING_MS: number;
21
34
  export declare function createImportRunner(deps: ImportRunnerDeps): ImportRunner;
35
+ export { ImportResultError };
22
36
  //# sourceMappingURL=importer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAcnE,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,kBAAkB,EAC1B,GAAG,EAAE,QAAQ,KACV,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAM1B,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAkCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAkNvE"}
1
+ {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,iBAAiB,EAIjB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAa9B,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAO3D,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAGzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC1E,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAG9C,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E;AA4BD,eAAO,MAAM,iBAAiB,QAAa,CAAC;AAc5C,eAAO,MAAM,uBAAuB,QAAc,CAAC;AAUnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CA6XvE;AA8DD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}