@synopackageland/sdk 0.0.0-stage → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -2
  3. package/dist/i18n/authorization/de.json +37 -0
  4. package/dist/i18n/authorization/en.json +37 -0
  5. package/dist/i18n/authorization/es.json +37 -0
  6. package/dist/i18n/authorization/fr.json +37 -0
  7. package/dist/i18n/authorization/it.json +37 -0
  8. package/dist/i18n/authorization/ja.json +37 -0
  9. package/dist/i18n/authorization/ko.json +37 -0
  10. package/dist/i18n/authorization/zh-CN.json +37 -0
  11. package/dist/i18n/authorization/zh-TW.json +37 -0
  12. package/dist/i18n/background/de.json +75 -0
  13. package/dist/i18n/background/en.json +75 -0
  14. package/dist/i18n/background/es.json +75 -0
  15. package/dist/i18n/background/fr.json +75 -0
  16. package/dist/i18n/background/it.json +75 -0
  17. package/dist/i18n/background/ja.json +75 -0
  18. package/dist/i18n/background/ko.json +75 -0
  19. package/dist/i18n/background/zh-CN.json +75 -0
  20. package/dist/i18n/background/zh-TW.json +75 -0
  21. package/dist/i18n/delegate/de.json +49 -0
  22. package/dist/i18n/delegate/en.json +49 -0
  23. package/dist/i18n/delegate/es.json +49 -0
  24. package/dist/i18n/delegate/fr.json +49 -0
  25. package/dist/i18n/delegate/it.json +49 -0
  26. package/dist/i18n/delegate/ja.json +49 -0
  27. package/dist/i18n/delegate/ko.json +49 -0
  28. package/dist/i18n/delegate/zh-CN.json +49 -0
  29. package/dist/i18n/delegate/zh-TW.json +49 -0
  30. package/dist/i18n/files/de.json +41 -0
  31. package/dist/i18n/files/en.json +41 -0
  32. package/dist/i18n/files/es.json +41 -0
  33. package/dist/i18n/files/fr.json +41 -0
  34. package/dist/i18n/files/it.json +41 -0
  35. package/dist/i18n/files/ja.json +41 -0
  36. package/dist/i18n/files/ko.json +41 -0
  37. package/dist/i18n/files/zh-CN.json +41 -0
  38. package/dist/i18n/files/zh-TW.json +41 -0
  39. package/dist/i18n/identity/de.json +27 -0
  40. package/dist/i18n/identity/en.json +27 -0
  41. package/dist/i18n/identity/es.json +27 -0
  42. package/dist/i18n/identity/fr.json +27 -0
  43. package/dist/i18n/identity/it.json +27 -0
  44. package/dist/i18n/identity/ja.json +27 -0
  45. package/dist/i18n/identity/ko.json +27 -0
  46. package/dist/i18n/identity/zh-CN.json +27 -0
  47. package/dist/i18n/identity/zh-TW.json +27 -0
  48. package/dist/i18n/save/de.json +42 -0
  49. package/dist/i18n/save/en.json +42 -0
  50. package/dist/i18n/save/es.json +42 -0
  51. package/dist/i18n/save/fr.json +42 -0
  52. package/dist/i18n/save/it.json +42 -0
  53. package/dist/i18n/save/ja.json +42 -0
  54. package/dist/i18n/save/ko.json +42 -0
  55. package/dist/i18n/save/zh-CN.json +42 -0
  56. package/dist/i18n/save/zh-TW.json +42 -0
  57. package/dist/i18n/shell/de.json +4 -0
  58. package/dist/i18n/shell/en.json +4 -0
  59. package/dist/i18n/shell/es.json +4 -0
  60. package/dist/i18n/shell/fr.json +4 -0
  61. package/dist/i18n/shell/it.json +4 -0
  62. package/dist/i18n/shell/ja.json +4 -0
  63. package/dist/i18n/shell/ko.json +4 -0
  64. package/dist/i18n/shell/zh-CN.json +4 -0
  65. package/dist/i18n/shell/zh-TW.json +4 -0
  66. package/dist/index.js +2627 -0
  67. package/dist/src/authorization/AuthorizationGate.vue.d.ts +22 -0
  68. package/dist/src/authorization/i18n.d.ts +3 -0
  69. package/dist/src/background/BackgroundPanel.vue.d.ts +7 -0
  70. package/dist/src/background/i18n.d.ts +79 -0
  71. package/dist/src/background/picker-provider.d.ts +3 -0
  72. package/dist/src/background/request-key.d.ts +1 -0
  73. package/dist/src/context.d.ts +114 -0
  74. package/dist/src/delegate/BackgroundSavePanel.vue.d.ts +18 -0
  75. package/dist/src/delegate/DelegatePanel.vue.d.ts +7 -0
  76. package/dist/src/delegate/ExecutorSettings.vue.d.ts +13 -0
  77. package/dist/src/delegate/copy.d.ts +101 -0
  78. package/dist/src/delegate/executor-setup.d.ts +16 -0
  79. package/dist/src/delegate/facade.d.ts +8 -0
  80. package/dist/src/delegate/long-running.d.ts +74 -0
  81. package/dist/src/delegate/save-copy.d.ts +126 -0
  82. package/dist/src/delegate/scoped-picker.d.ts +3 -0
  83. package/dist/src/delegate/use-executor-setup.d.ts +4 -0
  84. package/dist/src/files/FileBrowser.vue.d.ts +17 -0
  85. package/dist/src/files/FilesPage.vue.d.ts +7 -0
  86. package/dist/src/files/transfers.d.ts +9 -0
  87. package/dist/src/i18n.d.ts +7 -0
  88. package/dist/src/identity/LoginPage.vue.d.ts +8 -0
  89. package/dist/src/identity/i18n.d.ts +31 -0
  90. package/dist/src/identity/session.d.ts +20 -0
  91. package/dist/src/index.d.ts +24 -0
  92. package/dist/src/nas/NasPicker.vue.d.ts +22 -0
  93. package/dist/src/nas/contract.d.ts +27 -0
  94. package/dist/src/nas/i18n.d.ts +2 -0
  95. package/dist/src/nas/locale.d.ts +45 -0
  96. package/dist/src/nas/provider.d.ts +3 -0
  97. package/dist/src/nas/use-request.d.ts +6 -0
  98. package/dist/src/portal/PortalSettings.vue.d.ts +7 -0
  99. package/dist/src/protocol/codec.d.ts +17 -0
  100. package/dist/src/protocol/v1.d.ts +518 -0
  101. package/dist/src/shell/AppShell.vue.d.ts +26 -0
  102. package/dist/src/shell/i18n.d.ts +7 -0
  103. package/dist/src/shell/pages.d.ts +7 -0
  104. package/dist/src/vue.d.ts +15 -0
  105. package/dist/style.css +1 -0
  106. package/dist/vue.js +2331 -0
  107. package/package.json +64 -4
  108. package/spec/protocol/v1/README.md +112 -0
  109. package/spec/protocol/v1/errors.json +454 -0
  110. package/spec/protocol/v1/schema/delegate.audit.json +11 -0
  111. package/spec/protocol/v1/schema/delegate.create.json +49 -0
  112. package/spec/protocol/v1/schema/delegate.disable.json +11 -0
  113. package/spec/protocol/v1/schema/delegate.enable.json +11 -0
  114. package/spec/protocol/v1/schema/delegate.list.json +11 -0
  115. package/spec/protocol/v1/schema/delegate.revoke.json +23 -0
  116. package/spec/protocol/v1/schema/files.cancelOperation.json +24 -0
  117. package/spec/protocol/v1/schema/files.checkPermission.json +30 -0
  118. package/spec/protocol/v1/schema/files.copy.json +42 -0
  119. package/spec/protocol/v1/schema/files.createFolder.json +38 -0
  120. package/spec/protocol/v1/schema/files.delete.json +36 -0
  121. package/spec/protocol/v1/schema/files.info.json +30 -0
  122. package/spec/protocol/v1/schema/files.list.json +30 -0
  123. package/spec/protocol/v1/schema/files.move.json +42 -0
  124. package/spec/protocol/v1/schema/files.moveFromStaging.json +47 -0
  125. package/spec/protocol/v1/schema/files.operationStatus.json +24 -0
  126. package/spec/protocol/v1/schema/files.read.json +35 -0
  127. package/spec/protocol/v1/schema/files.rename.json +35 -0
  128. package/spec/protocol/v1/schema/files.taskCancel.json +29 -0
  129. package/spec/protocol/v1/schema/files.taskStatus.json +29 -0
  130. package/spec/protocol/v1/schema/files.write.json +46 -0
  131. package/spec/protocol/v1/schema/root.run.json +19 -0
  132. package/spec/protocol/v1/schema/status.json +11 -0
  133. package/spec/protocol/v1/vectors/delegate.jsonl +16 -0
  134. package/spec/protocol/v1/vectors/envelope.jsonl +11 -0
  135. package/spec/protocol/v1/vectors/files.jsonl +10 -0
  136. package/spec/protocol/v1/vectors/status.jsonl +2 -0
@@ -0,0 +1,518 @@
1
+ /** Every protocol v1 code with its kind, whether a retry may succeed, and the HTTP status an adapter should use. */
2
+ export declare const protocolCodes: {
3
+ /** The DSM session in auth is missing, invalid or expired. */
4
+ readonly AUTH_DENIED: {
5
+ readonly kind: "refusal";
6
+ readonly retryable: false;
7
+ readonly httpStatus: 401;
8
+ };
9
+ /** The DSM account cannot be delegated: system account, expired, or not the caller. */
10
+ readonly INELIGIBLE: {
11
+ readonly kind: "refusal";
12
+ readonly retryable: false;
13
+ readonly httpStatus: 403;
14
+ };
15
+ /** DSM Application Privileges do not allow the account to use the app or File Station. */
16
+ readonly APP_DENIED: {
17
+ readonly kind: "refusal";
18
+ readonly retryable: false;
19
+ readonly httpStatus: 403;
20
+ };
21
+ /** The operation needs a DSM administrator. */
22
+ readonly ADMIN_REQUIRED: {
23
+ readonly kind: "refusal";
24
+ readonly retryable: false;
25
+ readonly httpStatus: 403;
26
+ };
27
+ /** The grant does not exist, belongs to another user or package, or was revoked. */
28
+ readonly DELEGATION_DENIED: {
29
+ readonly kind: "refusal";
30
+ readonly retryable: false;
31
+ readonly httpStatus: 403;
32
+ };
33
+ /** The path is outside the grant or the approved folder scope. */
34
+ readonly SCOPE_DENIED: {
35
+ readonly kind: "refusal";
36
+ readonly retryable: false;
37
+ readonly httpStatus: 403;
38
+ };
39
+ /** The operation is not in the approved policy. */
40
+ readonly POLICY_DENIED: {
41
+ readonly kind: "refusal";
42
+ readonly retryable: false;
43
+ readonly httpStatus: 403;
44
+ };
45
+ /** The socket peer is not the package user or root. */
46
+ readonly PEER_DENIED: {
47
+ readonly kind: "refusal";
48
+ readonly retryable: false;
49
+ readonly httpStatus: 403;
50
+ };
51
+ /** The delegated user cannot access the path in DSM. */
52
+ readonly PERMISSION_DENIED: {
53
+ readonly kind: "refusal";
54
+ readonly retryable: false;
55
+ readonly httpStatus: 403;
56
+ };
57
+ /** The executor does not know the operation. */
58
+ readonly UNKNOWN_OP: {
59
+ readonly kind: "refusal";
60
+ readonly retryable: false;
61
+ readonly httpStatus: 400;
62
+ };
63
+ /** The request or its params are not valid. */
64
+ readonly INVALID_REQUEST: {
65
+ readonly kind: "refusal";
66
+ readonly retryable: false;
67
+ readonly httpStatus: 400;
68
+ };
69
+ /** The request line is larger than 64 KiB. */
70
+ readonly REQUEST_TOO_LARGE: {
71
+ readonly kind: "refusal";
72
+ readonly retryable: false;
73
+ readonly httpStatus: 413;
74
+ };
75
+ /** The executor is paused, for example while the package stops or upgrades. */
76
+ readonly EXECUTOR_PAUSED: {
77
+ readonly kind: "refusal";
78
+ readonly retryable: true;
79
+ readonly httpStatus: 503;
80
+ };
81
+ /** The executor could not read or write its protected state. */
82
+ readonly STORAGE_ERROR: {
83
+ readonly kind: "refusal";
84
+ readonly retryable: true;
85
+ readonly httpStatus: 500;
86
+ };
87
+ /** The executor failed unexpectedly. */
88
+ readonly INTERNAL: {
89
+ readonly kind: "refusal";
90
+ readonly retryable: true;
91
+ readonly httpStatus: 500;
92
+ };
93
+ /** The executor could not write the file. */
94
+ readonly WRITE_FAILED: {
95
+ readonly kind: "refusal";
96
+ readonly retryable: true;
97
+ readonly httpStatus: 500;
98
+ };
99
+ /** The executor could not copy the file into staging. */
100
+ readonly READ_FAILED: {
101
+ readonly kind: "refusal";
102
+ readonly retryable: true;
103
+ readonly httpStatus: 500;
104
+ };
105
+ /** A DSM call made by the executor failed. */
106
+ readonly DSM_FAILED: {
107
+ readonly kind: "refusal";
108
+ readonly retryable: true;
109
+ readonly httpStatus: 502;
110
+ };
111
+ /** The root operation exited with a non-zero status or failed to run. */
112
+ readonly ROOT_FAILED: {
113
+ readonly kind: "refusal";
114
+ readonly retryable: false;
115
+ readonly httpStatus: 500;
116
+ };
117
+ /** The destination volume is full. */
118
+ readonly NO_SPACE: {
119
+ readonly kind: "refusal";
120
+ readonly retryable: false;
121
+ readonly httpStatus: 507;
122
+ };
123
+ /** The folder scope approval is out of date. */
124
+ readonly SCOPE_APPROVAL_STALE: {
125
+ readonly kind: "refusal";
126
+ readonly retryable: false;
127
+ readonly httpStatus: 409;
128
+ };
129
+ /** The DSM account or folder the grant is bound to changed. */
130
+ readonly IDENTITY_CHANGED: {
131
+ readonly kind: "refusal";
132
+ readonly retryable: false;
133
+ readonly httpStatus: 409;
134
+ };
135
+ /** An administrator must confirm the folder scope first. */
136
+ readonly "needs-scope-confirmation": {
137
+ readonly kind: "refusal";
138
+ readonly retryable: false;
139
+ readonly httpStatus: 409;
140
+ };
141
+ /** An administrator turned the integration off. */
142
+ readonly disabled: {
143
+ readonly kind: "refusal";
144
+ readonly retryable: false;
145
+ readonly httpStatus: 409;
146
+ };
147
+ /** The destination key is not in the policy. */
148
+ readonly "invalid-destination": {
149
+ readonly kind: "refusal";
150
+ readonly retryable: false;
151
+ readonly httpStatus: 400;
152
+ };
153
+ /** The size is missing, negative or too large. */
154
+ readonly "invalid-size": {
155
+ readonly kind: "refusal";
156
+ readonly retryable: false;
157
+ readonly httpStatus: 400;
158
+ };
159
+ /** The same job id was sent again with different input. */
160
+ readonly "operation-conflict": {
161
+ readonly kind: "refusal";
162
+ readonly retryable: false;
163
+ readonly httpStatus: 409;
164
+ };
165
+ /** The operation is not known for this grant and caller. */
166
+ readonly "operation-not-found": {
167
+ readonly kind: "refusal";
168
+ readonly retryable: false;
169
+ readonly httpStatus: 404;
170
+ };
171
+ /** A file with that name already exists and conflict does not allow replacing it. */
172
+ readonly "destination-exists": {
173
+ readonly kind: "refusal";
174
+ readonly retryable: false;
175
+ readonly httpStatus: 409;
176
+ };
177
+ /** A name or path is empty, reserved, too long or contains a forbidden character. */
178
+ readonly "invalid-path": {
179
+ readonly kind: "refusal";
180
+ readonly retryable: false;
181
+ readonly httpStatus: 400;
182
+ };
183
+ /** The name has more than 16 folders. */
184
+ readonly "path-too-deep": {
185
+ readonly kind: "refusal";
186
+ readonly retryable: false;
187
+ readonly httpStatus: 400;
188
+ };
189
+ /** A folder in the name exists as a file or symlink, or is on another volume. */
190
+ readonly "destination-not-directory": {
191
+ readonly kind: "refusal";
192
+ readonly retryable: false;
193
+ readonly httpStatus: 409;
194
+ };
195
+ /** The volume refused a name as too long. */
196
+ readonly "name-too-long": {
197
+ readonly kind: "refusal";
198
+ readonly retryable: false;
199
+ readonly httpStatus: 400;
200
+ };
201
+ /** The path does not exist. */
202
+ readonly "not-found": {
203
+ readonly kind: "refusal";
204
+ readonly retryable: false;
205
+ readonly httpStatus: 404;
206
+ };
207
+ /** The path is a folder or a special file. */
208
+ readonly "not-a-file": {
209
+ readonly kind: "refusal";
210
+ readonly retryable: false;
211
+ readonly httpStatus: 400;
212
+ };
213
+ /** The path is a folder and recursive is not set. */
214
+ readonly "recursive-required": {
215
+ readonly kind: "refusal";
216
+ readonly retryable: false;
217
+ readonly httpStatus: 400;
218
+ };
219
+ /** The Shared Folder has no recycle bin and permanent is not set. */
220
+ readonly "recycle-bin-disabled": {
221
+ readonly kind: "refusal";
222
+ readonly retryable: false;
223
+ readonly httpStatus: 409;
224
+ };
225
+ /** The task belongs to another job, or the executor restarted. */
226
+ readonly "task-not-found": {
227
+ readonly kind: "refusal";
228
+ readonly retryable: false;
229
+ readonly httpStatus: 404;
230
+ };
231
+ /** The executor already tracks 64 tasks. */
232
+ readonly "too-many-tasks": {
233
+ readonly kind: "refusal";
234
+ readonly retryable: true;
235
+ readonly httpStatus: 429;
236
+ };
237
+ /** The executor operation queue is full. */
238
+ readonly "queue-full": {
239
+ readonly kind: "refusal";
240
+ readonly retryable: true;
241
+ readonly httpStatus: 429;
242
+ };
243
+ /** The file is larger than max_bytes. */
244
+ readonly "limit-exceeded": {
245
+ readonly kind: "refusal";
246
+ readonly retryable: false;
247
+ readonly httpStatus: 413;
248
+ };
249
+ /** The operation was canceled; reason says why. */
250
+ readonly OPERATION_CANCELED: {
251
+ readonly kind: "outcome";
252
+ readonly retryable: false;
253
+ readonly httpStatus: 409;
254
+ };
255
+ /** Cancel was requested and the copy has not stopped yet. */
256
+ readonly CANCEL_REQUESTED: {
257
+ readonly kind: "outcome";
258
+ readonly retryable: false;
259
+ readonly httpStatus: 202;
260
+ };
261
+ /** The operation ended but its partial file is not removed yet. */
262
+ readonly CLEANUP_PENDING: {
263
+ readonly kind: "outcome";
264
+ readonly retryable: true;
265
+ readonly httpStatus: 500;
266
+ };
267
+ /** The grant was revoked. */
268
+ readonly "grant-revoked": {
269
+ readonly kind: "reason";
270
+ readonly retryable: false;
271
+ readonly httpStatus: 409;
272
+ };
273
+ /** A newer grant replaced this destination. */
274
+ readonly "destination-replaced": {
275
+ readonly kind: "reason";
276
+ readonly retryable: false;
277
+ readonly httpStatus: 409;
278
+ };
279
+ /** An administrator disabled the integration. */
280
+ readonly "integration-disabled": {
281
+ readonly kind: "reason";
282
+ readonly retryable: false;
283
+ readonly httpStatus: 409;
284
+ };
285
+ /** The grant failed revalidation against DSM. */
286
+ readonly "validation-denied": {
287
+ readonly kind: "reason";
288
+ readonly retryable: false;
289
+ readonly httpStatus: 403;
290
+ };
291
+ /** The approved folder scope changed. */
292
+ readonly "scope-changed": {
293
+ readonly kind: "reason";
294
+ readonly retryable: false;
295
+ readonly httpStatus: 409;
296
+ };
297
+ /** Protected state could not be written. */
298
+ readonly "storage-error": {
299
+ readonly kind: "reason";
300
+ readonly retryable: true;
301
+ readonly httpStatus: 500;
302
+ };
303
+ /** The owner canceled the operation. */
304
+ readonly "operation-canceled-by-user": {
305
+ readonly kind: "reason";
306
+ readonly retryable: false;
307
+ readonly httpStatus: 409;
308
+ };
309
+ /** The operation ran past its deadline. */
310
+ readonly "operation-deadline-exceeded": {
311
+ readonly kind: "reason";
312
+ readonly retryable: true;
313
+ readonly httpStatus: 504;
314
+ };
315
+ /** The client could not connect to the executor socket. */
316
+ readonly EXECUTOR_UNAVAILABLE: {
317
+ readonly kind: "client";
318
+ readonly retryable: true;
319
+ readonly httpStatus: 503;
320
+ };
321
+ /** The executor did not answer in time. */
322
+ readonly EXECUTOR_TIMEOUT: {
323
+ readonly kind: "client";
324
+ readonly retryable: true;
325
+ readonly httpStatus: 504;
326
+ };
327
+ /** The request or reply is larger than 64 KiB. */
328
+ readonly EXECUTOR_TOO_LARGE: {
329
+ readonly kind: "client";
330
+ readonly retryable: false;
331
+ readonly httpStatus: 413;
332
+ };
333
+ /** The executor reply is not a valid v1 response. */
334
+ readonly EXECUTOR_PROTOCOL: {
335
+ readonly kind: "client";
336
+ readonly retryable: false;
337
+ readonly httpStatus: 502;
338
+ };
339
+ };
340
+ export type ProtocolCode = keyof typeof protocolCodes;
341
+ export type RefusalCode = "AUTH_DENIED" | "INELIGIBLE" | "APP_DENIED" | "ADMIN_REQUIRED" | "DELEGATION_DENIED" | "SCOPE_DENIED" | "POLICY_DENIED" | "PEER_DENIED" | "PERMISSION_DENIED" | "UNKNOWN_OP" | "INVALID_REQUEST" | "REQUEST_TOO_LARGE" | "EXECUTOR_PAUSED" | "STORAGE_ERROR" | "INTERNAL" | "WRITE_FAILED" | "READ_FAILED" | "DSM_FAILED" | "ROOT_FAILED" | "NO_SPACE" | "SCOPE_APPROVAL_STALE" | "IDENTITY_CHANGED" | "needs-scope-confirmation" | "disabled" | "invalid-destination" | "invalid-size" | "operation-conflict" | "operation-not-found" | "destination-exists" | "invalid-path" | "path-too-deep" | "destination-not-directory" | "name-too-long" | "not-found" | "not-a-file" | "recursive-required" | "recycle-bin-disabled" | "task-not-found" | "too-many-tasks" | "queue-full" | "limit-exceeded";
342
+ export type OutcomeCode = "OPERATION_CANCELED" | "CANCEL_REQUESTED" | "CLEANUP_PENDING";
343
+ export type ReasonCode = "grant-revoked" | "destination-replaced" | "integration-disabled" | "validation-denied" | "scope-changed" | "storage-error" | "operation-canceled-by-user" | "operation-deadline-exceeded";
344
+ export type ClientCode = "EXECUTOR_UNAVAILABLE" | "EXECUTOR_TIMEOUT" | "EXECUTOR_TOO_LARGE" | "EXECUTOR_PROTOCOL";
345
+ /** delegate.audit: Administrator: read the audit log. Since 0.9.0. */
346
+ export interface DelegateAuditParams {
347
+ }
348
+ /** delegate.create: Create a time-limited grant (job_id, ttl_seconds) or an until-revoked destination grant (destination, lifetime). Since 0.9.0. */
349
+ export interface DelegateCreateParams {
350
+ job_id?: string;
351
+ ops: string[];
352
+ scope: string;
353
+ path: string;
354
+ ttl_seconds?: number;
355
+ destination?: string;
356
+ lifetime?: "until-revoked";
357
+ }
358
+ /** delegate.disable: Administrator: turn the integration off and cancel grants. Since 0.9.0. */
359
+ export interface DelegateDisableParams {
360
+ }
361
+ /** delegate.enable: Administrator: turn the integration on. Since 0.9.0. */
362
+ export interface DelegateEnableParams {
363
+ }
364
+ /** delegate.list: List the caller's grants for this package. Since 0.9.0. */
365
+ export interface DelegateListParams {
366
+ }
367
+ /** delegate.revoke: Revoke a grant: with auth by its owner (or an administrator for time-limited grants), without auth by job_id. Since 0.9.0. */
368
+ export interface DelegateRevokeParams {
369
+ delegation_id: string;
370
+ job_id?: string;
371
+ }
372
+ /** files.cancelOperation: Cancel an asynchronous operation. Since 0.9.0. */
373
+ export interface FilesCancelOperationParams {
374
+ delegation_id: string;
375
+ job_id: string;
376
+ }
377
+ /** files.checkPermission: Check write permission for the delegated user. Since 0.9.0. */
378
+ export interface FilesCheckPermissionParams {
379
+ delegation_id: string;
380
+ job_id: string;
381
+ path: string;
382
+ }
383
+ /** files.copy: Start a File Station copy task. Since 0.9.0. */
384
+ export interface FilesCopyParams {
385
+ delegation_id: string;
386
+ job_id: string;
387
+ path: string;
388
+ dest_dir: string;
389
+ conflict?: "fail" | "overwrite" | "rename";
390
+ }
391
+ /** files.createFolder: Create a folder; parents creates missing ancestors in scope. Since 0.9.0. */
392
+ export interface FilesCreateFolderParams {
393
+ delegation_id: string;
394
+ job_id: string;
395
+ path: string;
396
+ name: string;
397
+ parents?: boolean;
398
+ }
399
+ /** files.delete: Start a File Station delete task. Since 0.9.0. */
400
+ export interface FilesDeleteParams {
401
+ delegation_id: string;
402
+ job_id: string;
403
+ path: string;
404
+ recursive?: boolean;
405
+ permanent?: boolean;
406
+ }
407
+ /** files.info: Describe a path as the delegated user. Since 0.9.0. */
408
+ export interface FilesInfoParams {
409
+ delegation_id: string;
410
+ job_id: string;
411
+ path: string;
412
+ }
413
+ /** files.list: List a folder as the delegated user. Since 0.9.0. */
414
+ export interface FilesListParams {
415
+ delegation_id: string;
416
+ job_id: string;
417
+ path: string;
418
+ }
419
+ /** files.move: Start a File Station move task. Since 0.9.0. */
420
+ export interface FilesMoveParams {
421
+ delegation_id: string;
422
+ job_id: string;
423
+ path: string;
424
+ dest_dir: string;
425
+ conflict?: "fail" | "overwrite" | "rename";
426
+ }
427
+ /** files.moveFromStaging: Admit an asynchronous move from staging into an until-revoked destination. Since 0.9.0. */
428
+ export interface FilesMoveFromStagingParams {
429
+ delegation_id: string;
430
+ job_id: string;
431
+ staging: string;
432
+ name: string;
433
+ size: number;
434
+ conflict?: "fail" | "overwrite" | "rename";
435
+ }
436
+ /** files.operationStatus: Read an asynchronous operation. Since 0.9.0. */
437
+ export interface FilesOperationStatusParams {
438
+ delegation_id: string;
439
+ job_id: string;
440
+ }
441
+ /** files.read: Copy a file into staging as the delegated user. Since 0.9.0. */
442
+ export interface FilesReadParams {
443
+ delegation_id: string;
444
+ job_id: string;
445
+ path: string;
446
+ max_bytes?: number;
447
+ }
448
+ /** files.rename: Rename through File Station as the delegated user. Since 0.9.0. */
449
+ export interface FilesRenameParams {
450
+ delegation_id: string;
451
+ job_id: string;
452
+ path: string;
453
+ name: string;
454
+ }
455
+ /** files.taskCancel: Cancel a copy, move or delete task. Since 0.9.0. */
456
+ export interface FilesTaskCancelParams {
457
+ delegation_id: string;
458
+ job_id: string;
459
+ task_id: string;
460
+ }
461
+ /** files.taskStatus: Status of a copy, move or delete task. Since 0.9.0. */
462
+ export interface FilesTaskStatusParams {
463
+ delegation_id: string;
464
+ job_id: string;
465
+ task_id: string;
466
+ }
467
+ /** files.write: Publish a staged file synchronously. Since 0.9.0. */
468
+ export interface FilesWriteParams {
469
+ delegation_id: string;
470
+ job_id: string;
471
+ staging: string;
472
+ dest_dir: string;
473
+ name: string;
474
+ conflict?: "fail" | "overwrite" | "rename";
475
+ }
476
+ /** root.run: Administrator: run a root operation pinned by digest in the policy. Since 0.9.0. */
477
+ export interface RootRunParams {
478
+ name: string;
479
+ }
480
+ /** status: Executor readiness, protocol version, digests and the folder scope selection. Since 0.9.0. */
481
+ export interface StatusParams {
482
+ }
483
+ /** The params of each op. */
484
+ export interface ProtocolParams {
485
+ "delegate.audit": DelegateAuditParams;
486
+ "delegate.create": DelegateCreateParams;
487
+ "delegate.disable": DelegateDisableParams;
488
+ "delegate.enable": DelegateEnableParams;
489
+ "delegate.list": DelegateListParams;
490
+ "delegate.revoke": DelegateRevokeParams;
491
+ "files.cancelOperation": FilesCancelOperationParams;
492
+ "files.checkPermission": FilesCheckPermissionParams;
493
+ "files.copy": FilesCopyParams;
494
+ "files.createFolder": FilesCreateFolderParams;
495
+ "files.delete": FilesDeleteParams;
496
+ "files.info": FilesInfoParams;
497
+ "files.list": FilesListParams;
498
+ "files.move": FilesMoveParams;
499
+ "files.moveFromStaging": FilesMoveFromStagingParams;
500
+ "files.operationStatus": FilesOperationStatusParams;
501
+ "files.read": FilesReadParams;
502
+ "files.rename": FilesRenameParams;
503
+ "files.taskCancel": FilesTaskCancelParams;
504
+ "files.taskStatus": FilesTaskStatusParams;
505
+ "files.write": FilesWriteParams;
506
+ "root.run": RootRunParams;
507
+ "status": StatusParams;
508
+ }
509
+ export type ProtocolOp = keyof ProtocolParams;
510
+ /** Each op's auth requirement and its params, all and required. */
511
+ export declare const protocolSchemas: {
512
+ readonly [Op in ProtocolOp]: {
513
+ readonly auth: 'required' | 'optional';
514
+ readonly params: readonly (keyof ProtocolParams[Op])[];
515
+ readonly required: readonly (keyof ProtocolParams[Op])[];
516
+ };
517
+ };
518
+ export declare const protocolOps: ProtocolOp[];
@@ -0,0 +1,26 @@
1
+ import type { ShellPage } from './pages';
2
+ type __VLS_Props = {
3
+ locale: string;
4
+ modelValue: ShellPage;
5
+ pages: readonly ShellPage[];
6
+ description?: string;
7
+ };
8
+ declare var __VLS_29: {}, __VLS_31: {};
9
+ type __VLS_Slots = {} & {
10
+ actions?: (props: typeof __VLS_29) => any;
11
+ } & {
12
+ default?: (props: typeof __VLS_31) => any;
13
+ };
14
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ "update:modelValue": (value: ShellPage) => any;
16
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
17
+ "onUpdate:modelValue"?: ((value: ShellPage) => any) | undefined;
18
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
+ declare const _default: typeof __VLS_export;
21
+ export default _default;
22
+ type __VLS_WithSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
@@ -0,0 +1,7 @@
1
+ import en from '../../i18n/shell/en.json';
2
+ export type ShellCopy = typeof en;
3
+ export declare const shellCatalogs: Record<import("..").UiLocale, {
4
+ status: string;
5
+ background: string;
6
+ }>;
7
+ export declare function shellCopy(locale: string): ShellCopy;
@@ -0,0 +1,7 @@
1
+ export type ShellPage = 'status' | 'background';
2
+ export interface ShellFeatureFlags {
3
+ background?: boolean;
4
+ }
5
+ export declare function shellPages(features: ShellFeatureFlags): ShellPage[];
6
+ /** Keeps a selection that still exists; otherwise the first page wins. */
7
+ export declare function activePage(current: ShellPage | undefined, pages: readonly ShellPage[]): ShellPage;
@@ -0,0 +1,15 @@
1
+ export * from './index';
2
+ export { ExecutorSetupKey, useExecutorSetup } from './delegate/use-executor-setup';
3
+ export { createSession, type IdentitySession, type SessionSubject } from './identity/session';
4
+ export { useNasRequest } from './nas/use-request';
5
+ export { default as AppShell } from './shell/AppShell.vue';
6
+ export { default as FilesPage } from './files/FilesPage.vue';
7
+ export { default as FileBrowser } from './files/FileBrowser.vue';
8
+ export { default as NasPicker } from './nas/NasPicker.vue';
9
+ export { default as PortalSettings } from './portal/PortalSettings.vue';
10
+ export { default as LoginPage } from './identity/LoginPage.vue';
11
+ export { default as BackgroundPanel } from './background/BackgroundPanel.vue';
12
+ export { default as ExecutorSettings } from './delegate/ExecutorSettings.vue';
13
+ export { default as DelegatePanel } from './delegate/DelegatePanel.vue';
14
+ export { default as BackgroundSavePanel } from './delegate/BackgroundSavePanel.vue';
15
+ export { default as AuthorizationGate } from './authorization/AuthorizationGate.vue';
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .app-shell[data-v-05f63ca5]{height:100%;min-width:0;grid-template-rows:minmax(0,1fr)}.app-shell[data-v-05f63ca5]>div{min-height:0}.app-shell[data-v-05f63ca5] main{display:flex;flex-direction:column;overflow:hidden}.app-page[data-v-05f63ca5]{flex:1 1 auto;min-height:0;overflow-y:auto}.app-page-content[data-v-05f63ca5]{padding-bottom:var(--ui-space-6, 24px)}.file-browser[data-v-f1aee828]{min-width:0;color:var(--ui-text)}.file-toolbar[data-v-f1aee828]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px);margin-block:var(--ui-space-3, 12px)}.file-columns[data-v-f1aee828]{display:grid;grid-template-columns:minmax(140px,1fr) minmax(0,3fr);gap:var(--ui-space-3, 12px)}.file-tree[data-v-f1aee828]{min-width:0;max-height:55vh;overflow:auto;border-inline-end:1px solid var(--ui-border)}.file-content[data-v-f1aee828]{min-width:0;overflow:auto}.file-name[data-v-f1aee828]{display:inline-flex;align-items:center;gap:var(--ui-space-2, 8px);overflow-wrap:anywhere}.file-bytes[data-v-f1aee828]{font-variant-numeric:tabular-nums}.file-selection[data-v-f1aee828]{overflow-wrap:anywhere}@media(max-width:600px){.file-columns[data-v-f1aee828]{grid-template-columns:minmax(0,1fr)}.file-content[data-v-f1aee828] th:nth-child(2),.file-content[data-v-f1aee828] td:nth-child(2),.file-content[data-v-f1aee828] th:nth-child(3),.file-content[data-v-f1aee828] td:nth-child(3){display:none}.file-tree[data-v-f1aee828]{max-height:180px;border-inline-end:0;border-bottom:1px solid var(--ui-border)}}.nas-picker-content[data-v-535a0e54]{max-height:65vh;overflow:auto}.save-message[data-v-535a0e54]{--ui-text-secondary:var(--ui-text)}.save-consent[data-v-535a0e54]{color:var(--ui-text);margin-block:0 var(--ui-space-4,16px)}.files-actions[data-v-97bc5d15]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px)}.files-path[data-v-97bc5d15]{overflow-wrap:anywhere}.identity-login[data-v-f7afcf5e]{max-width:36rem;margin-inline:auto;padding:var(--ui-space-4, 16px);overflow:auto;max-height:100%;color:var(--ui-text);font-family:var(--ui-font-sans);font-size:13px;line-height:1.5}.identity-login p[data-v-f7afcf5e]{margin-block:var(--ui-space-4, 16px);overflow-wrap:anywhere}.integration-jobs[data-v-7954713f]{overflow-wrap:anywhere;min-width:0}.bg-schedules[data-v-7954713f]{margin-block-start:var(--ui-space-6,24px);min-width:0;overflow-wrap:anywhere}.bg-schedules .integration-jobs[data-v-7954713f]{display:grid;gap:var(--ui-space-4,16px);padding-inline-start:var(--ui-space-5,20px)}.bg-schedules .integration-jobs li[data-v-7954713f]{display:flex;flex-direction:column;align-items:flex-start;gap:var(--ui-space-2,8px);min-width:0}.bg-schedules p[data-v-7954713f],.bg-schedules li>span[data-v-7954713f]{min-width:0;max-width:100%}.bg-schedules h3[data-v-7954713f]{font-size:15px;font-weight:600}.bg-schedule-form[data-v-7954713f]{margin-block:var(--ui-space-4,16px)}.delegate-panel[data-v-d79ee942]{min-width:0;overflow-wrap:anywhere}h3[data-v-d79ee942]{font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px)}.section-heading[data-v-d79ee942]{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px)}.records[data-v-d79ee942]{list-style:none;padding:0;margin:0}.records li[data-v-d79ee942]{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border)}.records li>div[data-v-d79ee942],.records li>span[data-v-d79ee942],.destination[data-v-d79ee942]{min-width:0;max-width:100%;overflow-wrap:anywhere}.records p[data-v-d79ee942]{margin:var(--ui-space-2,8px) 0 0}.background-save-panel[data-v-c4022c90]{min-width:0;overflow-wrap:anywhere}.save-message[data-v-c4022c90]{--ui-text-secondary:var(--ui-text)}h3[data-v-c4022c90]{font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px)}.save-actions[data-v-c4022c90],.save-records li[data-v-c4022c90]{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px)}.save-actions[data-v-c4022c90]{justify-content:flex-start}.save-records[data-v-c4022c90]{list-style:none;margin:0;padding:0}.save-records li[data-v-c4022c90]{padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border)}.save-records li>div[data-v-c4022c90]{min-width:0;max-width:100%}.save-records p[data-v-c4022c90]{margin:var(--ui-space-2,8px) 0}.authorization-announcement[data-v-c8a34087]{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.authorization-view[data-v-c8a34087]{display:flex;align-items:flex-start;justify-content:center;min-height:100%;height:100%;box-sizing:border-box;padding:24px;overflow-y:auto;color:var(--ui-text);font-family:var(--ui-font-sans)}.authorization-card[data-v-c8a34087]{display:flex;flex-direction:column;align-items:center;gap:12px;width:100%;max-width:28rem;margin:auto;text-align:center}.authorization-icon[data-v-c8a34087]{display:flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:9999px;background:var(--ui-primary-soft);color:var(--ui-primary)}.authorization-icon-glyph[data-v-c8a34087]{width:24px;height:24px}.authorization-title[data-v-c8a34087]{font-size:16px;font-weight:600;line-height:1.4;color:var(--ui-text);margin:0;text-wrap:balance}.authorization-body[data-v-c8a34087]{max-width:24rem;font-size:13px;line-height:1.6;color:var(--ui-text);margin:0;text-align:center;text-wrap:pretty}.authorization-status[data-v-c8a34087],.authorization-failed[data-v-c8a34087]{width:100%;text-align:left}.authorization-status[data-v-c8a34087],.authorization-failed[data-v-c8a34087]{color:var(--ui-text)}.authorization-actions[data-v-c8a34087]{display:flex;justify-content:center;width:100%;margin-top:4px}.authorization-authorized[data-v-c8a34087]{display:flex;flex-direction:column;height:100%;min-height:0}.authorization-authorized[data-v-c8a34087] .app-shell{flex:1;min-height:0;height:auto}.authorization-ready[data-v-c8a34087]{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:8px 16px;color:var(--ui-text);font:13px var(--ui-font-sans)}@media(max-width:480px){.authorization-view[data-v-c8a34087]{padding:16px}}