@numa-tech/numa 1.18.0 → 1.20.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.
- package/README.md +58 -10
- package/THIRD_PARTY_NOTICES.md +50 -0
- package/dist/oss/commands.d.ts +2 -1
- package/dist/oss/commands.js +44 -23
- package/dist/oss/commands.js.map +1 -1
- package/dist/oss/file-operations.d.ts +57 -0
- package/dist/oss/file-operations.js +269 -0
- package/dist/oss/file-operations.js.map +1 -0
- package/dist/oss/local-picker.d.ts +25 -0
- package/dist/oss/local-picker.js +251 -0
- package/dist/oss/local-picker.js.map +1 -0
- package/dist/oss/transfer-paths.d.ts +16 -0
- package/dist/oss/transfer-paths.js +131 -0
- package/dist/oss/transfer-paths.js.map +1 -0
- package/dist/oss/transfer-queue.d.ts +62 -0
- package/dist/oss/transfer-queue.js +349 -0
- package/dist/oss/transfer-queue.js.map +1 -0
- package/dist/oss/transfer-types.d.ts +54 -0
- package/dist/oss/transfer-types.js +2 -0
- package/dist/oss/transfer-types.js.map +1 -0
- package/dist/oss/transfer-worker.d.ts +3 -0
- package/dist/oss/transfer-worker.js +415 -0
- package/dist/oss/transfer-worker.js.map +1 -0
- package/dist/oss/transfers.d.ts +23 -0
- package/dist/oss/transfers.js +111 -0
- package/dist/oss/transfers.js.map +1 -1
- package/dist/oss/web-icons.d.ts +3 -0
- package/dist/oss/web-icons.js +4 -0
- package/dist/oss/web-icons.js.map +1 -0
- package/dist/oss/web-page.js +510 -65
- package/dist/oss/web-page.js.map +1 -1
- package/dist/oss/web-service.d.ts +45 -0
- package/dist/oss/web-service.js +107 -0
- package/dist/oss/web-service.js.map +1 -0
- package/dist/oss/web.d.ts +16 -0
- package/dist/oss/web.js +320 -79
- package/dist/oss/web.js.map +1 -1
- package/package.json +5 -5
package/dist/oss/web-page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-page.js","sourceRoot":"","sources":["../../src/oss/web-page.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"web-page.js","sourceRoot":"","sources":["../../src/oss/web-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEjE,iGAAiG;AACjG,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;4PAIsN,gBAAgB;;;;;mOAKzC,gBAAgB;;;;;;;;;;;;;2BAaxN,aAAa;eACzB,CAAC;AAEhB,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDpC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqlB9B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { TransferStatus } from './transfer-types.js';
|
|
3
|
+
declare const identitySchema: z.ZodObject<{
|
|
4
|
+
serviceId: z.ZodString;
|
|
5
|
+
pid: z.ZodNumber;
|
|
6
|
+
startedAt: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
declare const recordSchema: z.ZodObject<{
|
|
9
|
+
serviceId: z.ZodString;
|
|
10
|
+
pid: z.ZodNumber;
|
|
11
|
+
startedAt: z.ZodString;
|
|
12
|
+
version: z.ZodLiteral<1>;
|
|
13
|
+
origin: z.ZodString;
|
|
14
|
+
token: z.ZodString;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
declare const infoSchema: z.ZodObject<{
|
|
17
|
+
serviceId: z.ZodString;
|
|
18
|
+
pid: z.ZodNumber;
|
|
19
|
+
startedAt: z.ZodString;
|
|
20
|
+
tasks: z.ZodRecord<z.ZodEnum<{
|
|
21
|
+
cancelled: "cancelled";
|
|
22
|
+
cancelling: "cancelling";
|
|
23
|
+
completed: "completed";
|
|
24
|
+
failed: "failed";
|
|
25
|
+
paused: "paused";
|
|
26
|
+
pausing: "pausing";
|
|
27
|
+
queued: "queued";
|
|
28
|
+
running: "running";
|
|
29
|
+
}>, z.ZodNumber>;
|
|
30
|
+
stopping: z.ZodBoolean;
|
|
31
|
+
activeOperations: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export type OssWebServiceRecord = z.infer<typeof recordSchema>;
|
|
34
|
+
export type OssWebServiceInfo = z.infer<typeof infoSchema>;
|
|
35
|
+
export declare function serviceInfo(identity: z.infer<typeof identitySchema>, jobs: {
|
|
36
|
+
status: TransferStatus;
|
|
37
|
+
}[], stopping: boolean, activeOperations?: number): OssWebServiceInfo;
|
|
38
|
+
/** This token controls only the loopback service; no cloud credentials are persisted. */
|
|
39
|
+
export declare function writeWebService(directory: string, record: OssWebServiceRecord): Promise<void>;
|
|
40
|
+
export declare function removeWebService(directory: string, serviceId: string): Promise<void>;
|
|
41
|
+
export declare function discoverWebService(directory: string): Promise<{
|
|
42
|
+
url: string;
|
|
43
|
+
service: OssWebServiceInfo;
|
|
44
|
+
} | undefined>;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { open, rename, rm } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
const statuses = ['queued', 'running', 'pausing', 'paused', 'cancelling', 'cancelled', 'completed', 'failed'];
|
|
7
|
+
const count = z.number().int().nonnegative().safe();
|
|
8
|
+
const identitySchema = z.object({ serviceId: z.string().uuid(), pid: count.positive(), startedAt: z.string().datetime() });
|
|
9
|
+
const recordSchema = identitySchema.extend({ version: z.literal(1), origin: z.string(), token: z.string().regex(/^[A-Za-z0-9_-]{43}$/u) }).strict();
|
|
10
|
+
const infoSchema = identitySchema.extend({ tasks: z.record(z.enum(statuses), count), stopping: z.boolean(), activeOperations: count.optional() });
|
|
11
|
+
export function serviceInfo(identity, jobs, stopping, activeOperations = 0) {
|
|
12
|
+
const tasks = Object.fromEntries(statuses.map(status => [status, 0]));
|
|
13
|
+
for (const job of jobs)
|
|
14
|
+
tasks[job.status]++;
|
|
15
|
+
return { ...identity, tasks, stopping, activeOperations };
|
|
16
|
+
}
|
|
17
|
+
async function privateText(path, maximum) {
|
|
18
|
+
const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
19
|
+
try {
|
|
20
|
+
const info = await file.stat();
|
|
21
|
+
if (!info.isFile() || info.size > maximum
|
|
22
|
+
|| (process.platform !== 'win32' && ((info.mode & 0o077) !== 0 || info.uid !== process.getuid())))
|
|
23
|
+
throw new Error('Invalid local service record');
|
|
24
|
+
return await file.readFile('utf8');
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
await file.close();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** This token controls only the loopback service; no cloud credentials are persisted. */
|
|
31
|
+
export async function writeWebService(directory, record) {
|
|
32
|
+
const temporary = join(directory, `.service-${randomUUID()}.tmp`);
|
|
33
|
+
const file = await open(temporary, 'wx', 0o600);
|
|
34
|
+
try {
|
|
35
|
+
await file.writeFile(JSON.stringify(recordSchema.parse(record)));
|
|
36
|
+
await file.sync();
|
|
37
|
+
await file.close();
|
|
38
|
+
await rename(temporary, join(directory, 'service.json'));
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
await file.close().catch(() => { });
|
|
42
|
+
await rm(temporary, { force: true });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function removeWebService(directory, serviceId) {
|
|
46
|
+
const path = join(directory, 'service.json');
|
|
47
|
+
let record;
|
|
48
|
+
try {
|
|
49
|
+
record = recordSchema.parse(JSON.parse(await privateText(path, 4096)));
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error.code === 'ENOENT')
|
|
53
|
+
return;
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
if (record.serviceId === serviceId)
|
|
57
|
+
await rm(path, { force: true });
|
|
58
|
+
}
|
|
59
|
+
export async function discoverWebService(directory) {
|
|
60
|
+
try {
|
|
61
|
+
const lockPid = Number((await privateText(join(directory, 'queue.lock'), 100)).trim());
|
|
62
|
+
const record = recordSchema.parse(JSON.parse(await privateText(join(directory, 'service.json'), 4096)));
|
|
63
|
+
if (record.pid !== lockPid)
|
|
64
|
+
return undefined;
|
|
65
|
+
process.kill(record.pid, 0);
|
|
66
|
+
if (!/^http:\/\/127\.0\.0\.1:\d+$/u.test(record.origin))
|
|
67
|
+
return undefined;
|
|
68
|
+
const origin = new URL(record.origin);
|
|
69
|
+
if (origin.origin !== record.origin || !origin.port || Number(origin.port) < 1)
|
|
70
|
+
return undefined;
|
|
71
|
+
const response = await fetch(record.origin + '/api/service', {
|
|
72
|
+
headers: { Authorization: `Bearer ${record.token}` }, redirect: 'error', signal: AbortSignal.timeout(2000)
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok || !response.body) {
|
|
75
|
+
await response.body?.cancel();
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const reader = response.body.getReader();
|
|
79
|
+
const chunks = [];
|
|
80
|
+
let size = 0;
|
|
81
|
+
try {
|
|
82
|
+
for (;;) {
|
|
83
|
+
const chunk = await reader.read();
|
|
84
|
+
if (chunk.done)
|
|
85
|
+
break;
|
|
86
|
+
size += chunk.value.length;
|
|
87
|
+
if (size > 16384)
|
|
88
|
+
return undefined;
|
|
89
|
+
chunks.push(chunk.value);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
await reader.cancel().catch(() => { });
|
|
94
|
+
}
|
|
95
|
+
const { service } = z.object({ ok: z.literal(true), service: infoSchema }).parse(JSON.parse(Buffer.concat(chunks).toString('utf8')));
|
|
96
|
+
if (service.pid !== record.pid || service.serviceId !== record.serviceId || service.startedAt !== record.startedAt || service.stopping)
|
|
97
|
+
return undefined;
|
|
98
|
+
// Recheck ownership after the network call so a process replacement cannot be attached accidentally.
|
|
99
|
+
if (Number((await privateText(join(directory, 'queue.lock'), 100)).trim()) !== record.pid)
|
|
100
|
+
return undefined;
|
|
101
|
+
return { url: `${record.origin}/#token=${record.token}`, service };
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=web-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-service.js","sourceRoot":"","sources":["../../src/oss/web-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AACvH,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AACpD,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3H,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACpJ,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAIlJ,MAAM,UAAU,WAAW,CAAC,QAAwC,EAAE,IAAkC,EAAE,QAAiB,EAAE,gBAAgB,GAAG,CAAC;IAC/I,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAmC,CAAC;IACxG,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5C,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO;eACpC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAO,EAAE,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACtJ,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;AACnC,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,MAA2B;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,UAAU,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACxG,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;AACzF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAC/E,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;IAC9F,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACjG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE;YAC3D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAC3G,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;QACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,MAAM,MAAM,GAAiB,EAAE,CAAC;QAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QACxF,IAAI,CAAC;YACH,SAAS,CAAC;gBAAC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,KAAK,CAAC,IAAI;oBAAE,MAAM;gBAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC9F,IAAI,IAAI,GAAG,KAAK;oBAAE,OAAO,SAAS,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QACnE,CAAC;gBAAS,CAAC;YAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QACpD,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrI,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzJ,qGAAqG;QACrG,IAAI,MAAM,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC5G,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,WAAW,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC/B,CAAC"}
|
package/dist/oss/web.d.ts
CHANGED
|
@@ -1,19 +1,35 @@
|
|
|
1
1
|
import { OssClient } from "./client.js";
|
|
2
2
|
import { OssTransferClient } from "./transfers.js";
|
|
3
3
|
import type { AccessGrant } from "./schemas.js";
|
|
4
|
+
import { type LocalPicker } from "./local-picker.js";
|
|
5
|
+
import type { TransferWorker } from "./transfer-types.js";
|
|
6
|
+
import { type OssWebServiceInfo } from "./web-service.js";
|
|
4
7
|
export interface OssWebOptions {
|
|
5
8
|
grantId: number;
|
|
6
9
|
port?: number;
|
|
7
10
|
openBrowser?: boolean;
|
|
11
|
+
browserOpen?: (url: string) => Promise<unknown>;
|
|
8
12
|
client?: Pick<OssClient, "listGrants" | "issueSession">;
|
|
9
13
|
transfer?: OssTransferClient;
|
|
14
|
+
picker?: LocalPicker;
|
|
15
|
+
taskDirectory?: string;
|
|
16
|
+
taskNamespace?: string;
|
|
17
|
+
taskWorker?: TransferWorker;
|
|
10
18
|
now?: () => number;
|
|
11
19
|
}
|
|
12
20
|
export interface OssWebHandle {
|
|
13
21
|
url: string;
|
|
14
22
|
browserOpened: boolean;
|
|
23
|
+
reused?: boolean;
|
|
24
|
+
service?: OssWebServiceInfo;
|
|
15
25
|
close(): Promise<void>;
|
|
16
26
|
waitUntilClosed(): Promise<void>;
|
|
17
27
|
}
|
|
28
|
+
/** Resolve the current identity before Grant selection, without issuing STS or creating a queue/server. */
|
|
29
|
+
export declare function openExistingOssWeb(options: Pick<OssWebOptions, "openBrowser" | "browserOpen"> & {
|
|
30
|
+
client: Pick<OssClient, "listGrants">;
|
|
31
|
+
taskDirectory: string;
|
|
32
|
+
taskNamespace: string;
|
|
33
|
+
}): Promise<OssWebHandle | undefined>;
|
|
18
34
|
export declare function readyWebGrants(grants: AccessGrant[]): AccessGrant[];
|
|
19
35
|
export declare function startOssWeb(options: OssWebOptions): Promise<OssWebHandle>;
|