@components-kit/open-workbook 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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/assets/backend/dist/addin-rpc-client.d.ts +17 -0
  4. package/assets/backend/dist/addin-rpc-client.d.ts.map +1 -0
  5. package/assets/backend/dist/addin-rpc-client.js +66 -0
  6. package/assets/backend/dist/addin-rpc-client.js.map +1 -0
  7. package/assets/backend/dist/addin-websocket-server.d.ts +13 -0
  8. package/assets/backend/dist/addin-websocket-server.d.ts.map +1 -0
  9. package/assets/backend/dist/addin-websocket-server.js +199 -0
  10. package/assets/backend/dist/addin-websocket-server.js.map +1 -0
  11. package/assets/backend/dist/file-bridge.d.ts +2 -0
  12. package/assets/backend/dist/file-bridge.d.ts.map +1 -0
  13. package/assets/backend/dist/file-bridge.js +15 -0
  14. package/assets/backend/dist/file-bridge.js.map +1 -0
  15. package/assets/backend/dist/index.d.ts +4 -0
  16. package/assets/backend/dist/index.d.ts.map +1 -0
  17. package/assets/backend/dist/index.js +17 -0
  18. package/assets/backend/dist/index.js.map +1 -0
  19. package/assets/backend/dist/native-file-bridge-server.d.ts +28 -0
  20. package/assets/backend/dist/native-file-bridge-server.d.ts.map +1 -0
  21. package/assets/backend/dist/native-file-bridge-server.js +496 -0
  22. package/assets/backend/dist/native-file-bridge-server.js.map +1 -0
  23. package/assets/backend/dist/native-file-bridge.d.ts +20 -0
  24. package/assets/backend/dist/native-file-bridge.d.ts.map +1 -0
  25. package/assets/backend/dist/native-file-bridge.js +140 -0
  26. package/assets/backend/dist/native-file-bridge.js.map +1 -0
  27. package/assets/backend/dist/runtime-service.d.ts +3167 -0
  28. package/assets/backend/dist/runtime-service.d.ts.map +1 -0
  29. package/assets/backend/dist/runtime-service.js +6003 -0
  30. package/assets/backend/dist/runtime-service.js.map +1 -0
  31. package/assets/backend/dist/session-registry.d.ts +20 -0
  32. package/assets/backend/dist/session-registry.d.ts.map +1 -0
  33. package/assets/backend/dist/session-registry.js +53 -0
  34. package/assets/backend/dist/session-registry.js.map +1 -0
  35. package/assets/backend/dist/state-store.d.ts +26 -0
  36. package/assets/backend/dist/state-store.d.ts.map +1 -0
  37. package/assets/backend/dist/state-store.js +44 -0
  38. package/assets/backend/dist/state-store.js.map +1 -0
  39. package/assets/excel-addin/dist/connection.d.ts +26 -0
  40. package/assets/excel-addin/dist/connection.d.ts.map +1 -0
  41. package/assets/excel-addin/dist/connection.js +320 -0
  42. package/assets/excel-addin/dist/connection.js.map +1 -0
  43. package/assets/excel-addin/dist/excel-executor.d.ts +225 -0
  44. package/assets/excel-addin/dist/excel-executor.d.ts.map +1 -0
  45. package/assets/excel-addin/dist/excel-executor.js +2487 -0
  46. package/assets/excel-addin/dist/excel-executor.js.map +1 -0
  47. package/assets/excel-addin/dist/taskpane.d.ts +2 -0
  48. package/assets/excel-addin/dist/taskpane.d.ts.map +1 -0
  49. package/assets/excel-addin/dist/taskpane.js +28 -0
  50. package/assets/excel-addin/dist/taskpane.js.map +1 -0
  51. package/assets/excel-addin/manifest.xml +93 -0
  52. package/assets/excel-addin/public/taskpane.css +47 -0
  53. package/assets/excel-addin/public/taskpane.html +35 -0
  54. package/assets/excel-addin/scripts/dev-server.mjs +128 -0
  55. package/assets/instructions/open-workbook-excel/SKILL.md +52 -0
  56. package/assets/instructions/open-workbook-excel/references/multi-agent.md +43 -0
  57. package/assets/instructions/open-workbook-excel/references/performance.md +41 -0
  58. package/assets/instructions/open-workbook-excel/references/reliability.md +76 -0
  59. package/assets/instructions/open-workbook-excel/references/tool-selection.md +82 -0
  60. package/assets/instructions/open-workbook-excel/references/workflows.md +93 -0
  61. package/assets/mcp-server/dist/catalog.d.ts +5 -0
  62. package/assets/mcp-server/dist/catalog.d.ts.map +1 -0
  63. package/assets/mcp-server/dist/catalog.js +8 -0
  64. package/assets/mcp-server/dist/catalog.js.map +1 -0
  65. package/assets/mcp-server/dist/index.d.ts +3 -0
  66. package/assets/mcp-server/dist/index.d.ts.map +1 -0
  67. package/assets/mcp-server/dist/index.js +3779 -0
  68. package/assets/mcp-server/dist/index.js.map +1 -0
  69. package/dist/index.d.ts +3 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +721 -0
  72. package/dist/index.js.map +1 -0
  73. package/package.json +56 -0
@@ -0,0 +1,496 @@
1
+ import { spawn } from "node:child_process";
2
+ import { access, mkdir } from "node:fs/promises";
3
+ import { createServer } from "node:http";
4
+ import { homedir } from "node:os";
5
+ import path from "node:path";
6
+ import { runtimeError } from "@components-kit/open-workbook-protocol";
7
+ export function startNativeFileBridgeServer(options) {
8
+ const route = options.path ?? "/v1/workbook-file";
9
+ const shutdownPath = options.shutdownPath ?? "/shutdown";
10
+ const adapter = options.adapter ?? createPlatformNativeHostBridgeAdapter();
11
+ let handle;
12
+ const server = createServer((request, response) => {
13
+ if (request.method === "GET" && request.url === "/status") {
14
+ sendJson(response, 200, {
15
+ ok: true,
16
+ bridge: "open-workbook-native-file-bridge",
17
+ route,
18
+ adapter: adapter.getStatus()
19
+ });
20
+ return;
21
+ }
22
+ if (request.method === "POST" && request.url === shutdownPath) {
23
+ sendJson(response, 200, { ok: true });
24
+ setTimeout(() => {
25
+ void handle?.close();
26
+ }, 25);
27
+ return;
28
+ }
29
+ if (request.method === "POST" && request.url === route) {
30
+ void handleWorkbookFileBridgeHttpRequest(request, response, adapter);
31
+ return;
32
+ }
33
+ sendJson(response, 404, { ok: false, error: "not_found" });
34
+ });
35
+ return new Promise((resolve, reject) => {
36
+ server.once("error", reject);
37
+ server.listen(options.port, options.host, () => {
38
+ server.off("error", reject);
39
+ const address = server.address();
40
+ const port = typeof address === "object" && address !== null ? address.port : options.port;
41
+ handle = {
42
+ url: `http://${options.host}:${port}`,
43
+ route,
44
+ close: async () => {
45
+ await new Promise((closeResolve) => server.close(() => closeResolve()));
46
+ }
47
+ };
48
+ resolve(handle);
49
+ });
50
+ });
51
+ }
52
+ export async function handleWorkbookFileBridgeRequest(request, adapter) {
53
+ const validationError = validateBridgeRequest(request);
54
+ if (validationError) {
55
+ return bridgeError(request, validationError);
56
+ }
57
+ switch (request.operation) {
58
+ case "workbook.save_as":
59
+ return adapter.saveAs(request);
60
+ case "workbook.export_copy":
61
+ return adapter.exportCopy ? adapter.exportCopy(request) : bridgeError(request, "Native export_copy is not implemented by this bridge adapter.");
62
+ case "workbook.restore_file_backup":
63
+ return adapter.restoreFileBackup ? adapter.restoreFileBackup(request) : bridgeError(request, "Native restore_file_backup is not implemented by this bridge adapter.");
64
+ }
65
+ }
66
+ export function createPlatformNativeHostBridgeAdapter(platform = process.platform, execute = executeNativeCommand) {
67
+ return {
68
+ getStatus: () => ({
69
+ platform,
70
+ saveAsSupported: platform === "darwin" || platform === "win32",
71
+ exportCopySupported: platform === "darwin" || platform === "win32",
72
+ restoreFileBackupSupported: platform === "darwin" || platform === "win32",
73
+ operations: {
74
+ "workbook.save_as": platform === "darwin" || platform === "win32",
75
+ "workbook.export_copy": platform === "darwin" || platform === "win32",
76
+ "workbook.restore_file_backup": platform === "darwin" || platform === "win32"
77
+ },
78
+ allowedDirs: allowedTargetDirectories()
79
+ }),
80
+ saveAs: async (request) => {
81
+ const prepared = await prepareTargetFileRequest(request, "workbook.save_as");
82
+ if (!prepared.ok) {
83
+ return prepared.response;
84
+ }
85
+ if (platform === "darwin") {
86
+ return saveAsWithAppleScript(prepared.request, execute);
87
+ }
88
+ if (platform === "win32") {
89
+ return saveAsWithPowerShell(prepared.request, execute);
90
+ }
91
+ return bridgeError(request, `Native Save As is not supported on ${platform}.`);
92
+ },
93
+ exportCopy: async (request) => {
94
+ const prepared = await prepareTargetFileRequest(request, "workbook.export_copy");
95
+ if (!prepared.ok) {
96
+ return prepared.response;
97
+ }
98
+ if (platform === "darwin") {
99
+ return saveCopyAsWithAppleScript(prepared.request, execute);
100
+ }
101
+ if (platform === "win32") {
102
+ return saveCopyAsWithPowerShell(prepared.request, execute);
103
+ }
104
+ return bridgeError(request, `Native Export Copy is not supported on ${platform}.`);
105
+ },
106
+ restoreFileBackup: async (request) => {
107
+ const prepared = await prepareRestoreFileRequest(request);
108
+ if (!prepared.ok) {
109
+ return prepared.response;
110
+ }
111
+ if (platform === "darwin") {
112
+ return restoreFileBackupWithAppleScript(prepared.request, execute);
113
+ }
114
+ if (platform === "win32") {
115
+ return restoreFileBackupWithPowerShell(prepared.request, execute);
116
+ }
117
+ return bridgeError(request, `Native Restore File Backup is not supported on ${platform}.`);
118
+ }
119
+ };
120
+ }
121
+ async function handleWorkbookFileBridgeHttpRequest(request, response, adapter) {
122
+ try {
123
+ const payload = await readJsonBody(request, 1024 * 1024);
124
+ const result = await handleWorkbookFileBridgeRequest(payload, adapter);
125
+ sendJson(response, 200, result);
126
+ }
127
+ catch (error) {
128
+ sendJson(response, 400, {
129
+ ok: false,
130
+ error: error instanceof Error ? error.message : String(error)
131
+ });
132
+ }
133
+ }
134
+ async function prepareTargetFileRequest(request, operation) {
135
+ if (!request.targetPath) {
136
+ return { ok: false, response: bridgeError(request, `targetPath is required for ${operation}.`) };
137
+ }
138
+ const resolvedTargetPath = path.resolve(request.targetPath);
139
+ const pathError = validateTargetPath(resolvedTargetPath);
140
+ if (pathError) {
141
+ return { ok: false, response: bridgeError(request, pathError) };
142
+ }
143
+ try {
144
+ await mkdir(path.dirname(resolvedTargetPath), { recursive: true });
145
+ }
146
+ catch (error) {
147
+ return {
148
+ ok: false,
149
+ response: bridgeError(request, `Failed to create target directory for ${operation}: ${error instanceof Error ? error.message : String(error)}`)
150
+ };
151
+ }
152
+ return {
153
+ ok: true,
154
+ request: {
155
+ ...request,
156
+ targetPath: resolvedTargetPath
157
+ }
158
+ };
159
+ }
160
+ async function prepareRestoreFileRequest(request) {
161
+ const backupPath = request.backupPath ?? request.targetPath;
162
+ if (!backupPath) {
163
+ return { ok: false, response: bridgeError(request, "backupPath or targetPath is required for workbook.restore_file_backup.") };
164
+ }
165
+ const restoreMode = request.restoreMode ?? "open-as-new";
166
+ if (restoreMode === "restore-into-open-workbook") {
167
+ return { ok: false, response: bridgeError(request, "restore-into-open-workbook is not supported by the native bridge. Use open-as-new or replace-open-workbook.") };
168
+ }
169
+ const resolvedBackupPath = path.resolve(backupPath);
170
+ const backupPathError = validateTargetPath(resolvedBackupPath);
171
+ if (backupPathError) {
172
+ return { ok: false, response: bridgeError(request, backupPathError.replace("targetPath", "backupPath")) };
173
+ }
174
+ try {
175
+ await access(resolvedBackupPath);
176
+ }
177
+ catch {
178
+ return { ok: false, response: bridgeError(request, `Backup file does not exist: ${resolvedBackupPath}`) };
179
+ }
180
+ const prepared = {
181
+ ...request,
182
+ backupPath: resolvedBackupPath,
183
+ targetPath: resolvedBackupPath,
184
+ restoreMode
185
+ };
186
+ if (request.restoreTargetPath !== undefined) {
187
+ const resolvedRestoreTargetPath = path.resolve(request.restoreTargetPath);
188
+ const targetPathError = validateTargetPath(resolvedRestoreTargetPath);
189
+ if (targetPathError) {
190
+ return { ok: false, response: bridgeError(request, targetPathError.replace("targetPath", "restoreTargetPath")) };
191
+ }
192
+ prepared.restoreTargetPath = resolvedRestoreTargetPath;
193
+ }
194
+ return { ok: true, request: prepared };
195
+ }
196
+ async function saveAsWithAppleScript(request, execute) {
197
+ const script = `
198
+ on run argv
199
+ set workbookName to item 1 of argv
200
+ set targetPath to item 2 of argv
201
+ tell application "Microsoft Excel"
202
+ if it is not running then error "Microsoft Excel is not running"
203
+ set targetWorkbook to missing value
204
+ repeat with candidateWorkbook in workbooks
205
+ if (name of candidateWorkbook as string) is workbookName or (full name of candidateWorkbook as string) is workbookName then
206
+ set targetWorkbook to candidateWorkbook
207
+ exit repeat
208
+ end if
209
+ end repeat
210
+ if targetWorkbook is missing value then error "Workbook not found: " & workbookName
211
+ save workbook as targetWorkbook filename targetPath
212
+ end tell
213
+ end run
214
+ `;
215
+ return nativeSaveAsResult(request, await execute("osascript", ["-e", script, request.workbookId, request.targetPath]));
216
+ }
217
+ async function saveAsWithPowerShell(request, execute) {
218
+ const script = `
219
+ $workbookName = $args[0]
220
+ $targetPath = $args[1]
221
+ $excel = [Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
222
+ $targetWorkbook = $null
223
+ foreach ($workbook in $excel.Workbooks) {
224
+ if ($workbook.Name -eq $workbookName -or $workbook.FullName -eq $workbookName) {
225
+ $targetWorkbook = $workbook
226
+ break
227
+ }
228
+ }
229
+ if ($null -eq $targetWorkbook) {
230
+ throw "Workbook not found: $workbookName"
231
+ }
232
+ $targetWorkbook.SaveAs($targetPath)
233
+ `;
234
+ return nativeSaveAsResult(request, await execute("powershell.exe", ["-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", script, request.workbookId, request.targetPath]));
235
+ }
236
+ async function saveCopyAsWithAppleScript(request, execute) {
237
+ const script = `
238
+ on run argv
239
+ set workbookName to item 1 of argv
240
+ set targetPath to item 2 of argv
241
+ tell application "Microsoft Excel"
242
+ if it is not running then error "Microsoft Excel is not running"
243
+ set targetWorkbook to missing value
244
+ repeat with candidateWorkbook in workbooks
245
+ if (name of candidateWorkbook as string) is workbookName or (full name of candidateWorkbook as string) is workbookName then
246
+ set targetWorkbook to candidateWorkbook
247
+ exit repeat
248
+ end if
249
+ end repeat
250
+ if targetWorkbook is missing value then error "Workbook not found: " & workbookName
251
+ activate object targetWorkbook
252
+ do Visual Basic "ActiveWorkbook.SaveCopyAs " & quote & my escapeForVbaString(targetPath) & quote
253
+ end tell
254
+ end run
255
+
256
+ on escapeForVbaString(valueText)
257
+ set oldDelimiters to AppleScript's text item delimiters
258
+ set AppleScript's text item delimiters to quote
259
+ set valueParts to text items of valueText
260
+ set AppleScript's text item delimiters to quote & quote
261
+ set escapedText to valueParts as text
262
+ set AppleScript's text item delimiters to oldDelimiters
263
+ return escapedText
264
+ end escapeForVbaString
265
+ `;
266
+ return nativeSaveAsResult(request, await execute("osascript", ["-e", script, request.workbookId, request.targetPath]));
267
+ }
268
+ async function saveCopyAsWithPowerShell(request, execute) {
269
+ const script = `
270
+ $workbookName = $args[0]
271
+ $targetPath = $args[1]
272
+ $excel = [Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
273
+ $targetWorkbook = $null
274
+ foreach ($workbook in $excel.Workbooks) {
275
+ if ($workbook.Name -eq $workbookName -or $workbook.FullName -eq $workbookName) {
276
+ $targetWorkbook = $workbook
277
+ break
278
+ }
279
+ }
280
+ if ($null -eq $targetWorkbook) {
281
+ throw "Workbook not found: $workbookName"
282
+ }
283
+ $targetWorkbook.SaveCopyAs($targetPath)
284
+ `;
285
+ return nativeSaveAsResult(request, await execute("powershell.exe", ["-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", script, request.workbookId, request.targetPath]));
286
+ }
287
+ async function restoreFileBackupWithAppleScript(request, execute) {
288
+ const script = `
289
+ on run argv
290
+ set workbookName to item 1 of argv
291
+ set backupPath to item 2 of argv
292
+ set restoreMode to item 3 of argv
293
+ set explicitTargetPath to item 4 of argv
294
+ tell application "Microsoft Excel"
295
+ if it is not running then error "Microsoft Excel is not running"
296
+ if restoreMode is "open-as-new" then
297
+ open workbook workbook file name backupPath
298
+ return backupPath
299
+ end if
300
+ if restoreMode is not "replace-open-workbook" then error "Unsupported restore mode: " & restoreMode
301
+ set targetWorkbook to missing value
302
+ repeat with candidateWorkbook in workbooks
303
+ if (name of candidateWorkbook as string) is workbookName or (full name of candidateWorkbook as string) is workbookName then
304
+ set targetWorkbook to candidateWorkbook
305
+ exit repeat
306
+ end if
307
+ end repeat
308
+ if targetWorkbook is missing value then error "Workbook not found: " & workbookName
309
+ if explicitTargetPath is "" then
310
+ set restoreTargetPath to full name of targetWorkbook as string
311
+ else
312
+ set restoreTargetPath to explicitTargetPath
313
+ end if
314
+ close targetWorkbook saving no
315
+ do shell script "/bin/cp -f " & quoted form of backupPath & " " & quoted form of restoreTargetPath
316
+ open workbook workbook file name restoreTargetPath
317
+ return restoreTargetPath
318
+ end tell
319
+ end run
320
+ `;
321
+ return nativeRestoreResult(request, await execute("osascript", ["-e", script, request.workbookId, request.backupPath, request.restoreMode, request.restoreTargetPath ?? ""]));
322
+ }
323
+ async function restoreFileBackupWithPowerShell(request, execute) {
324
+ const script = `
325
+ $workbookName = $args[0]
326
+ $backupPath = $args[1]
327
+ $restoreMode = $args[2]
328
+ $explicitTargetPath = $args[3]
329
+ $excel = [Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
330
+ if ($restoreMode -eq "open-as-new") {
331
+ $excel.Workbooks.Open($backupPath) | Out-Null
332
+ Write-Output $backupPath
333
+ exit 0
334
+ }
335
+ if ($restoreMode -ne "replace-open-workbook") {
336
+ throw "Unsupported restore mode: $restoreMode"
337
+ }
338
+ $targetWorkbook = $null
339
+ foreach ($workbook in $excel.Workbooks) {
340
+ if ($workbook.Name -eq $workbookName -or $workbook.FullName -eq $workbookName) {
341
+ $targetWorkbook = $workbook
342
+ break
343
+ }
344
+ }
345
+ if ($null -eq $targetWorkbook) {
346
+ throw "Workbook not found: $workbookName"
347
+ }
348
+ if ([string]::IsNullOrWhiteSpace($explicitTargetPath)) {
349
+ $restoreTargetPath = $targetWorkbook.FullName
350
+ } else {
351
+ $restoreTargetPath = $explicitTargetPath
352
+ }
353
+ $targetWorkbook.Close($false)
354
+ Copy-Item -LiteralPath $backupPath -Destination $restoreTargetPath -Force
355
+ $excel.Workbooks.Open($restoreTargetPath) | Out-Null
356
+ Write-Output $restoreTargetPath
357
+ `;
358
+ return nativeRestoreResult(request, await execute("powershell.exe", ["-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", script, request.workbookId, request.backupPath, request.restoreMode, request.restoreTargetPath ?? ""]));
359
+ }
360
+ function nativeSaveAsResult(request, result) {
361
+ if (result.code === 0) {
362
+ return {
363
+ ok: true,
364
+ operation: request.operation,
365
+ workbookId: request.workbookId,
366
+ targetPath: request.targetPath,
367
+ ...(request.sourceBackupId !== undefined ? { sourceBackupId: request.sourceBackupId } : {}),
368
+ filePath: request.targetPath,
369
+ metadata: {
370
+ stdout: result.stdout.trim()
371
+ }
372
+ };
373
+ }
374
+ return bridgeError(request, result.stderr.trim() || result.stdout.trim() || `Native command exited with code ${result.code}.`);
375
+ }
376
+ function nativeRestoreResult(request, result) {
377
+ if (result.code === 0) {
378
+ const restoredPath = result.stdout.trim() || request.restoreTargetPath || request.backupPath || request.targetPath;
379
+ const response = {
380
+ ok: true,
381
+ operation: request.operation,
382
+ workbookId: request.workbookId,
383
+ ...(request.targetPath !== undefined ? { targetPath: request.targetPath } : {}),
384
+ ...(request.backupPath !== undefined ? { backupPath: request.backupPath } : {}),
385
+ ...(request.restoreTargetPath !== undefined ? { restoreTargetPath: request.restoreTargetPath } : {}),
386
+ ...(request.restoreMode !== undefined ? { restoreMode: request.restoreMode } : {}),
387
+ ...(request.sourceBackupId !== undefined ? { sourceBackupId: request.sourceBackupId } : {}),
388
+ metadata: {
389
+ stdout: result.stdout.trim()
390
+ }
391
+ };
392
+ if (restoredPath !== undefined) {
393
+ response.filePath = restoredPath;
394
+ }
395
+ return response;
396
+ }
397
+ return bridgeError(request, result.stderr.trim() || result.stdout.trim() || `Native command exited with code ${result.code}.`);
398
+ }
399
+ function validateBridgeRequest(request) {
400
+ if (!request || typeof request !== "object") {
401
+ return "Bridge request must be a JSON object.";
402
+ }
403
+ if (request.operation !== "workbook.save_as" && request.operation !== "workbook.export_copy" && request.operation !== "workbook.restore_file_backup") {
404
+ return "Unsupported workbook file bridge operation.";
405
+ }
406
+ if (!request.workbookId || typeof request.workbookId !== "string") {
407
+ return "workbookId is required.";
408
+ }
409
+ return undefined;
410
+ }
411
+ function validateTargetPath(targetPath) {
412
+ const resolved = path.resolve(targetPath);
413
+ const allowedDirs = allowedTargetDirectories();
414
+ if (allowedDirs.length === 0) {
415
+ return undefined;
416
+ }
417
+ if (allowedDirs.some((directory) => isPathWithin(resolved, directory))) {
418
+ return undefined;
419
+ }
420
+ return `targetPath is outside allowed bridge directories: ${allowedDirs.join(", ")}`;
421
+ }
422
+ function allowedTargetDirectories() {
423
+ const raw = process.env.OPEN_WORKBOOK_FILE_BRIDGE_ALLOWED_DIRS;
424
+ if (!raw) {
425
+ return [];
426
+ }
427
+ return raw
428
+ .split(path.delimiter)
429
+ .map((entry) => path.resolve(entry.replace(/^~(?=$|\/|\\)/, homedir())))
430
+ .filter(Boolean);
431
+ }
432
+ function isPathWithin(targetPath, directory) {
433
+ const relative = path.relative(directory, targetPath);
434
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
435
+ }
436
+ function bridgeError(request, message) {
437
+ return {
438
+ ok: false,
439
+ operation: request.operation ?? "workbook.save_as",
440
+ workbookId: (request.workbookId ?? "unknown"),
441
+ ...(request.targetPath !== undefined ? { targetPath: request.targetPath } : {}),
442
+ ...(request.backupPath !== undefined ? { backupPath: request.backupPath } : {}),
443
+ ...(request.restoreTargetPath !== undefined ? { restoreTargetPath: request.restoreTargetPath } : {}),
444
+ ...(request.restoreMode !== undefined ? { restoreMode: request.restoreMode } : {}),
445
+ ...(request.sourceBackupId !== undefined ? { sourceBackupId: request.sourceBackupId } : {}),
446
+ error: runtimeError("OPERATION_FAILED", message, { retryable: false }).message
447
+ };
448
+ }
449
+ function readJsonBody(request, maxBytes) {
450
+ return new Promise((resolve, reject) => {
451
+ const chunks = [];
452
+ let bytes = 0;
453
+ request.on("data", (chunk) => {
454
+ bytes += chunk.length;
455
+ if (bytes > maxBytes) {
456
+ reject(new Error("Bridge request body is too large."));
457
+ request.destroy();
458
+ return;
459
+ }
460
+ chunks.push(chunk);
461
+ });
462
+ request.on("end", () => {
463
+ try {
464
+ resolve(JSON.parse(Buffer.concat(chunks).toString("utf8")));
465
+ }
466
+ catch {
467
+ reject(new Error("Bridge request body must be valid JSON."));
468
+ }
469
+ });
470
+ request.on("error", reject);
471
+ });
472
+ }
473
+ function sendJson(response, status, payload) {
474
+ response.writeHead(status, { "content-type": "application/json" });
475
+ response.end(JSON.stringify(payload));
476
+ }
477
+ function executeNativeCommand(command, args) {
478
+ return new Promise((resolve) => {
479
+ const child = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
480
+ const stdout = [];
481
+ const stderr = [];
482
+ child.stdout.on("data", (chunk) => stdout.push(chunk));
483
+ child.stderr.on("data", (chunk) => stderr.push(chunk));
484
+ child.on("error", (error) => {
485
+ resolve({ code: 1, stdout: "", stderr: error.message });
486
+ });
487
+ child.on("close", (code) => {
488
+ resolve({
489
+ code: code ?? 1,
490
+ stdout: Buffer.concat(stdout).toString("utf8"),
491
+ stderr: Buffer.concat(stderr).toString("utf8")
492
+ });
493
+ });
494
+ });
495
+ }
496
+ //# sourceMappingURL=native-file-bridge-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-file-bridge-server.js","sourceRoot":"","sources":["../src/native-file-bridge-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,YAAY,EAIb,MAAM,wCAAwC,CAAC;AAyBhD,MAAM,UAAU,2BAA2B,CAAC,OAAsC;IAChF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,mBAAmB,CAAC;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,WAAW,CAAC;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,qCAAqC,EAAE,CAAC;IAC3E,IAAI,MAAgD,CAAC;IACrD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QAChD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACtB,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,kCAAkC;gBAC1C,KAAK;gBACL,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE;aAC7B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;YAC9D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,UAAU,CAAC,GAAG,EAAE;gBACd,KAAK,MAAM,EAAE,KAAK,EAAE,CAAC;YACvB,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACvD,KAAK,mCAAmC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3F,MAAM,GAAG;gBACP,GAAG,EAAE,UAAU,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBACrC,KAAK;gBACL,KAAK,EAAE,KAAK,IAAI,EAAE;oBAChB,MAAM,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBAChF,CAAC;aACF,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAAkC,EAClC,OAAoC;IAEpC,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,KAAK,kBAAkB;YACrB,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,KAAK,sBAAsB;YACzB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,+DAA+D,CAAC,CAAC;QAClJ,KAAK,8BAA8B;YACjC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,uEAAuE,CAAC,CAAC;IAC1K,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,WAA4B,OAAO,CAAC,QAAQ,EAC5C,UAAiC,oBAAoB;IAErD,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YAChB,QAAQ;YACR,eAAe,EAAE,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO;YAC9D,mBAAmB,EAAE,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO;YAClE,0BAA0B,EAAE,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO;YACzE,UAAU,EAAE;gBACV,kBAAkB,EAAE,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO;gBACjE,sBAAsB,EAAE,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO;gBACrE,8BAA8B,EAAE,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO;aAC9E;YACD,WAAW,EAAE,wBAAwB,EAAE;SACxC,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC7E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,QAAQ,CAAC;YAC3B,CAAC;YACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,OAAO,oBAAoB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,WAAW,CAAC,OAAO,EAAE,sCAAsC,QAAQ,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5B,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;YACjF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,QAAQ,CAAC;YAC3B,CAAC;YACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,yBAAyB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,OAAO,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,WAAW,CAAC,OAAO,EAAE,0CAA0C,QAAQ,GAAG,CAAC,CAAC;QACrF,CAAC;QACD,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,QAAQ,CAAC;YAC3B,CAAC;YACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,gCAAgC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,OAAO,+BAA+B,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,WAAW,CAAC,OAAO,EAAE,kDAAkD,QAAQ,GAAG,CAAC,CAAC;QAC7F,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mCAAmC,CAChD,OAAwB,EACxB,QAAwB,EACxB,OAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAA4B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAUD,KAAK,UAAU,wBAAwB,CACrC,OAAkC,EAClC,SAAsD;IAEtD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,8BAA8B,SAAS,GAAG,CAAC,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IAClE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,yCAAyC,SAAS,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;SAChJ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE;YACP,GAAG,OAAO;YACV,UAAU,EAAE,kBAAkB;SAC/B;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,OAAkC;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,wEAAwE,CAAC,EAAE,CAAC;IACjI,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC;IACzD,IAAI,WAAW,KAAK,4BAA4B,EAAE,CAAC;QACjD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,6GAA6G,CAAC,EAAE,CAAC;IACtK,CAAC;IACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAC/D,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;IAC5G,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,+BAA+B,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAC5G,CAAC;IACD,MAAM,QAAQ,GAA2H;QACvI,GAAG,OAAO;QACV,UAAU,EAAE,kBAAkB;QAC9B,UAAU,EAAE,kBAAkB;QAC9B,WAAW;KACZ,CAAC;IACF,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,yBAAyB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC1E,MAAM,eAAe,GAAG,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;QACtE,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QACnH,CAAC;QACD,QAAQ,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,OAAkC,EAAE,OAA8B;IACrG,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;CAiBhB,CAAC;IACA,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC;AAC1H,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAAkC,EAAE,OAA8B;IACpG,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;CAehB,CAAC;IACA,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC;AACjL,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,OAAkC,EAAE,OAA8B;IACzG,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BhB,CAAC;IACA,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC;AAC1H,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAAkC,EAAE,OAA8B;IACxG,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;CAehB,CAAC;IACA,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC;AACjL,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,OAA+H,EAC/H,OAA8B;IAE9B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgChB,CAAC;IACA,OAAO,mBAAmB,CACxB,OAAO,EACP,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CACzI,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,OAA+H,EAC/H,OAA8B;IAE9B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiChB,CAAC;IACA,OAAO,mBAAmB,CACxB,OAAO,EACP,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAChM,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAkC,EAAE,MAAkD;IAChH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAW;YAC/B,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,QAAQ,EAAE,OAAO,CAAC,UAAW;YAC7B,QAAQ,EAAE;gBACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;aAC7B;SACF,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,mCAAmC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACjI,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAkC,EAAE,MAAkD;IACjH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;QACnH,MAAM,QAAQ,GAA+B;YAC3C,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpG,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,QAAQ,EAAE;gBACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;aAC7B;SACF,CAAC;QACF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,QAAQ,CAAC,QAAQ,GAAG,YAAY,CAAC;QACnC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,mCAAmC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACjI,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAkC;IAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,uCAAuC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,kBAAkB,IAAI,OAAO,CAAC,SAAS,KAAK,sBAAsB,IAAI,OAAO,CAAC,SAAS,KAAK,8BAA8B,EAAE,CAAC;QACrJ,OAAO,6CAA6C,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,yBAAyB,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;IAC/C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,qDAAqD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;IAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG;SACP,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;SACrB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;SACvE,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB,EAAE,SAAiB;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACtD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,WAAW,CAAC,OAA2C,EAAE,OAAe;IAC/E,OAAO;QACL,EAAE,EAAE,KAAK;QACT,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;QAClD,UAAU,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,CAAe;QAC3D,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,KAAK,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO;KAC/E,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAI,OAAwB,EAAE,QAAgB;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACnC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACrB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAM,CAAC,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,QAAwB,EAAE,MAAc,EAAE,OAAgB;IAC1E,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACnE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,IAAc;IAC3D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC;gBACN,IAAI,EAAE,IAAI,IAAI,CAAC;gBACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;aAC/C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { WorkbookFileBridgeRequest, WorkbookFileBridgeResponse, WorkbookFileBridgeStatus } from "@components-kit/open-workbook-protocol";
2
+ export interface NativeFileBridgeOptions {
3
+ url?: string;
4
+ path?: string;
5
+ timeoutMs?: number;
6
+ fetchImpl?: typeof fetch;
7
+ }
8
+ export declare class NativeFileBridge {
9
+ private readonly url;
10
+ private readonly path;
11
+ private readonly timeoutMs;
12
+ private readonly fetchImpl;
13
+ constructor(options?: NativeFileBridgeOptions);
14
+ getStatus(): WorkbookFileBridgeStatus;
15
+ probeStatus(): Promise<WorkbookFileBridgeStatus>;
16
+ request(input: WorkbookFileBridgeRequest): Promise<WorkbookFileBridgeResponse>;
17
+ private operationUrl;
18
+ private statusUrl;
19
+ }
20
+ //# sourceMappingURL=native-file-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-file-bridge.d.ts","sourceRoot":"","sources":["../src/native-file-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;gBAEzC,OAAO,GAAE,uBAA4B;IAOjD,SAAS,IAAI,wBAAwB;IAe/B,WAAW,IAAI,OAAO,CAAC,wBAAwB,CAAC;IA+ChD,OAAO,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA0DpF,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;CAIlB"}