@numa-tech/numa 1.20.3 → 1.20.5
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 +24 -1
- package/dist/application-onboarding/schemas.d.ts +24 -0
- package/dist/application-onboarding/schemas.js +4 -0
- package/dist/application-onboarding/schemas.js.map +1 -1
- package/dist/application-onboarding/tui-model.d.ts +1 -0
- package/dist/application-onboarding/tui-model.js +10 -0
- package/dist/application-onboarding/tui-model.js.map +1 -1
- package/dist/application-onboarding/tui.js +1 -1
- package/dist/application-onboarding/tui.js.map +1 -1
- package/dist/authorization/application-client.d.ts +36 -1
- package/dist/authorization/application-client.js +4 -2
- package/dist/authorization/application-client.js.map +1 -1
- package/dist/authorization/application-commands.js +4 -3
- package/dist/authorization/application-commands.js.map +1 -1
- package/dist/authorization/application-schemas.d.ts +42 -7
- package/dist/authorization/application-schemas.js +19 -3
- package/dist/authorization/application-schemas.js.map +1 -1
- package/dist/business-issuer.js +8 -0
- package/dist/business-issuer.js.map +1 -1
- package/dist/cli.js +49 -31
- package/dist/cli.js.map +1 -1
- package/dist/command-catalog.js +18 -1
- package/dist/command-catalog.js.map +1 -1
- package/dist/kb/catalog.d.ts +2 -0
- package/dist/kb/catalog.js +14 -0
- package/dist/kb/catalog.js.map +1 -0
- package/dist/kb/client.d.ts +46 -0
- package/dist/kb/client.js +272 -0
- package/dist/kb/client.js.map +1 -0
- package/dist/kb/commands.d.ts +14 -0
- package/dist/kb/commands.js +121 -0
- package/dist/kb/commands.js.map +1 -0
- package/dist/kb/config.d.ts +15 -0
- package/dist/kb/config.js +76 -0
- package/dist/kb/config.js.map +1 -0
- package/dist/kb/errors.d.ts +9 -0
- package/dist/kb/errors.js +31 -0
- package/dist/kb/errors.js.map +1 -0
- package/dist/kb/transfers.d.ts +67 -0
- package/dist/kb/transfers.js +257 -0
- package/dist/kb/transfers.js.map +1 -0
- package/dist/kb/types.d.ts +81 -0
- package/dist/kb/types.js +2 -0
- package/dist/kb/types.js.map +1 -0
- package/dist/kb/upload-state.d.ts +20 -0
- package/dist/kb/upload-state.js +135 -0
- package/dist/kb/upload-state.js.map +1 -0
- package/dist/login-recovery.js +15 -1
- package/dist/login-recovery.js.map +1 -1
- package/dist/maintenance/modules.js +1 -1
- package/dist/maintenance/modules.js.map +1 -1
- package/dist/mcp/catalog.js +9 -1
- package/dist/mcp/catalog.js.map +1 -1
- package/dist/oss/commands.js +20 -0
- package/dist/oss/commands.js.map +1 -1
- package/dist/oss/download-links.d.ts +28 -0
- package/dist/oss/download-links.js +124 -0
- package/dist/oss/download-links.js.map +1 -0
- package/dist/oss/errors.js +1 -1
- package/dist/oss/errors.js.map +1 -1
- package/dist/oss/schemas.d.ts +15 -0
- package/dist/oss/schemas.js +2 -0
- package/dist/oss/schemas.js.map +1 -1
- package/dist/oss/signed-url-transfers.d.ts +41 -0
- package/dist/oss/signed-url-transfers.js +207 -0
- package/dist/oss/signed-url-transfers.js.map +1 -0
- package/dist/oss/tools.js +18 -0
- package/dist/oss/tools.js.map +1 -1
- package/dist/oss/transfer-pool.d.ts +2 -0
- package/dist/oss/transfer-pool.js +27 -0
- package/dist/oss/transfer-pool.js.map +1 -0
- package/dist/oss/transfer-worker.js +8 -17
- package/dist/oss/transfer-worker.js.map +1 -1
- package/dist/oss/transfers.d.ts +2 -0
- package/dist/oss/transfers.js +27 -0
- package/dist/oss/transfers.js.map +1 -1
- package/dist/oss/web-page.js +60 -5
- package/dist/oss/web-page.js.map +1 -1
- package/dist/oss/web.js +26 -0
- package/dist/oss/web.js.map +1 -1
- package/dist/platform-profile.d.ts +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/tasks/commands.d.ts +9 -0
- package/dist/tasks/commands.js +60 -0
- package/dist/tasks/commands.js.map +1 -0
- package/dist/tasks/oss-query.d.ts +56 -0
- package/dist/tasks/oss-query.js +176 -0
- package/dist/tasks/oss-query.js.map +1 -0
- package/dist/tasks/runtime.d.ts +151 -0
- package/dist/tasks/runtime.js +71 -0
- package/dist/tasks/runtime.js.map +1 -0
- package/dist/tasks/tools.d.ts +3 -0
- package/dist/tasks/tools.js +16 -0
- package/dist/tasks/tools.js.map +1 -0
- package/dist/tasks/types.d.ts +14 -0
- package/dist/tasks/types.js +4 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/tasks/wecom-notify.d.ts +26 -0
- package/dist/tasks/wecom-notify.js +150 -0
- package/dist/tasks/wecom-notify.js.map +1 -0
- package/docs/agent-tasks.md +103 -0
- package/docs/application-default-groups.md +10 -2
- package/docs/design/kb-cli.md +94 -0
- package/docs/kb-access.md +85 -0
- package/package.json +13 -7
- package/scripts/export-kb-contract.py +158 -0
- package/skills/numa-ai-registry/SKILL.md +2 -2
- package/skills/numa-cli/SKILL.md +24 -9
- package/skills/numa-cli/agents/openai.yaml +2 -2
- package/skills/numa-cli/evals/evals.json +13 -1
- package/skills/numa-cli/numa-skill.json +1 -1
- package/skills/numa-cli/references/cli-bootstrap.md +8 -8
- package/skills/numa-cli/references/cli-mcp.md +28 -20
- package/skills/numa-cli/references/pipeline-release.md +9 -9
- package/skills/numa-cli/references/skills-command-contract.md +40 -40
- package/skills/numa-cli/references/skills-updates.md +13 -13
- package/skills/numa-cli/references/skills-workflows.md +4 -4
- package/skills/numa-create-application/SKILL.md +1 -1
- package/skills/numa-create-application/numa-skill.json +2 -2
- package/skills/numa-create-application/references/cli-bootstrap.md +3 -3
- package/skills/numa-create-application/references/numa-cli.md +16 -16
- package/skills/numa-jenkins-deployment/SKILL.md +8 -8
- package/skills/numa-jenkins-deployment/numa-skill.json +2 -2
- package/skills/numa-jenkins-deployment/references/cli-bootstrap.md +3 -3
- package/skills/numa-jenkins-deployment/references/cli-contract.md +7 -7
- package/skills/numa-jenkins-deployment/references/diagnostics.md +2 -2
- package/skills/numa-local-flux-deploy/SKILL.md +1 -1
- package/skills/numa-local-flux-deploy/numa-skill.json +2 -2
- package/skills/numa-local-flux-deploy/references/cli-bootstrap.md +3 -3
- package/skills/numa-nacos/SKILL.md +4 -4
- package/skills/numa-nacos/numa-skill.json +2 -2
- package/skills/numa-nacos/references/cli-bootstrap.md +3 -3
- package/skills/numa-nacos/references/command-contract.md +17 -17
- package/skills/numa-notion/SKILL.md +4 -4
- package/skills/numa-notion/numa-skill.json +2 -2
- package/skills/numa-notion/references/agents-automation.md +2 -2
- package/skills/numa-notion/references/cli-bootstrap.md +3 -3
- package/skills/numa-notion/references/cli.md +17 -17
- package/skills/numa-oss-access/SKILL.md +35 -77
- package/skills/numa-oss-access/agents/openai.yaml +2 -2
- package/skills/numa-oss-access/evals/evals.json +48 -0
- package/skills/numa-oss-access/numa-skill.json +2 -2
- package/skills/numa-oss-access/references/cli-bootstrap.md +5 -5
- package/skills/numa-oss-access/references/download-links.md +42 -0
- package/skills/numa-oss-access/references/object-operations.md +95 -0
- package/skills/numa-oss-access/references/search-and-mcp.md +17 -11
- package/skills/numa-wecom/SKILL.md +27 -62
- package/skills/numa-wecom/agents/openai.yaml +2 -2
- package/skills/numa-wecom/evals/evals.json +25 -0
- package/skills/numa-wecom/numa-skill.json +2 -2
- package/skills/numa-wecom/references/cli-bootstrap.md +5 -5
- package/skills/numa-wecom/references/legacy-operations.md +71 -0
- package/skills/numa-wecom/references/machine-auth.md +7 -7
- package/skills/numa-wecom/references/mcp.md +9 -8
- package/src/kb/openapi-contract.json +1432 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AccessSession } from './schemas.js';
|
|
3
|
+
import { type OssTransferClient } from './transfers.js';
|
|
4
|
+
export declare const downloadLinksInputSchema: z.ZodObject<{
|
|
5
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
6
|
+
key: z.ZodString;
|
|
7
|
+
directory: z.ZodBoolean;
|
|
8
|
+
}, z.core.$strict>>;
|
|
9
|
+
expires: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
export interface DownloadLinks {
|
|
12
|
+
grantId: number;
|
|
13
|
+
bucket: string;
|
|
14
|
+
requestedExpiresSeconds: number;
|
|
15
|
+
expiresAt: string;
|
|
16
|
+
fileCount: number;
|
|
17
|
+
scanned: number;
|
|
18
|
+
links: {
|
|
19
|
+
key: string;
|
|
20
|
+
sizeBytes?: number;
|
|
21
|
+
url: string;
|
|
22
|
+
expiresAt: string;
|
|
23
|
+
}[];
|
|
24
|
+
}
|
|
25
|
+
/** No writes, archived manifests or partial success. Enumerate and HEAD everything before starting link lifetimes. */
|
|
26
|
+
export declare function createDownloadLinks(transfer: OssTransferClient, session: AccessSession, value: unknown): Promise<DownloadLinks>;
|
|
27
|
+
/** Explicit capability-export boundary: sanitize metadata, retain only the intentionally generated URL fields. */
|
|
28
|
+
export declare function downloadLinksOutput(value: DownloadLinks): DownloadLinks;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OssError, sanitizeOssOutput } from './errors.js';
|
|
3
|
+
import { ossTransferOptions } from './transfers.js';
|
|
4
|
+
export const downloadLinksInputSchema = z.object({
|
|
5
|
+
entries: z.array(z.object({ key: z.string().min(1).max(1024), directory: z.boolean() }).strict()).min(1).max(100),
|
|
6
|
+
expires: z.number().int().min(60).max(3600).default(300)
|
|
7
|
+
}).strict();
|
|
8
|
+
const compare = (a, b) => Buffer.compare(Buffer.from(a), Buffer.from(b));
|
|
9
|
+
const invalid = () => new OssError('Invalid selection or listing response.', 'oss_input_invalid', 400);
|
|
10
|
+
const expired = () => new OssError('STS has insufficient remaining time; renew before generating links.', 'oss_link_expired', 409);
|
|
11
|
+
const limitExceeded = () => new OssError('Selection exceeds 100 files or the directory scan limit. No links were returned. Select fewer files or use batch download.', 'oss_link_limit', 400);
|
|
12
|
+
/** No writes, archived manifests or partial success. Enumerate and HEAD everything before starting link lifetimes. */
|
|
13
|
+
export async function createDownloadLinks(transfer, session, value) {
|
|
14
|
+
const parsed = downloadLinksInputSchema.safeParse(value);
|
|
15
|
+
if (!parsed.success)
|
|
16
|
+
throw invalid();
|
|
17
|
+
const { expires } = parsed.data;
|
|
18
|
+
const limit = 100;
|
|
19
|
+
const sessionEnd = Date.parse(session.expiration);
|
|
20
|
+
if (!Number.isFinite(sessionEnd) || sessionEnd - Date.now() < 15000)
|
|
21
|
+
throw expired();
|
|
22
|
+
const selected = [];
|
|
23
|
+
for (const entry of [...parsed.data.entries].sort((a, b) => compare(a.key, b.key))) {
|
|
24
|
+
if (entry.key !== entry.key.trim() || entry.key.includes('//') || entry.directory !== entry.key.endsWith('/'))
|
|
25
|
+
throw invalid();
|
|
26
|
+
ossTransferOptions(session, entry.key, 'read');
|
|
27
|
+
if (entry.directory)
|
|
28
|
+
ossTransferOptions(session, entry.key, 'list');
|
|
29
|
+
if (!selected.some(parent => parent.key === entry.key || parent.directory && entry.key.startsWith(parent.key)))
|
|
30
|
+
selected.push(entry);
|
|
31
|
+
}
|
|
32
|
+
const keys = new Set();
|
|
33
|
+
let scanned = 0, pages = 0;
|
|
34
|
+
const add = (key) => { keys.add(key); if (keys.size > limit)
|
|
35
|
+
throw limitExceeded(); };
|
|
36
|
+
for (const entry of selected) {
|
|
37
|
+
if (!entry.directory) {
|
|
38
|
+
add(entry.key);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
let marker;
|
|
42
|
+
for (;;) {
|
|
43
|
+
if (sessionEnd - Date.now() < 15000)
|
|
44
|
+
throw expired();
|
|
45
|
+
if (++pages > 100)
|
|
46
|
+
throw limitExceeded();
|
|
47
|
+
const page = await transfer.list(session, entry.key, 200, { marker });
|
|
48
|
+
if (page.objects.length > 200 || page.directories.length)
|
|
49
|
+
throw invalid();
|
|
50
|
+
const sorted = [...page.objects].sort((a, b) => compare(a.key, b.key));
|
|
51
|
+
for (const object of sorted) {
|
|
52
|
+
if (++scanned > 10000)
|
|
53
|
+
throw limitExceeded();
|
|
54
|
+
if (!object.key.startsWith(entry.key) || marker && compare(object.key, marker) <= 0)
|
|
55
|
+
throw invalid();
|
|
56
|
+
ossTransferOptions(session, object.key, 'read');
|
|
57
|
+
if (!object.key.endsWith('/'))
|
|
58
|
+
add(object.key);
|
|
59
|
+
}
|
|
60
|
+
if (!page.truncated)
|
|
61
|
+
break;
|
|
62
|
+
if (!page.nextMarker || !page.nextMarker.startsWith(entry.key) || marker && compare(page.nextMarker, marker) <= 0
|
|
63
|
+
|| sorted.some(object => compare(object.key, page.nextMarker) > 0))
|
|
64
|
+
throw invalid();
|
|
65
|
+
marker = page.nextMarker;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (!keys.size)
|
|
69
|
+
throw new OssError('The selection contains no files.', 'oss_link_empty', 400);
|
|
70
|
+
const objects = [...keys].sort(compare);
|
|
71
|
+
const sizes = new Map();
|
|
72
|
+
let cursor = 0, failure;
|
|
73
|
+
await Promise.all(Array.from({ length: Math.min(4, objects.length) }, async () => {
|
|
74
|
+
while (failure === undefined) {
|
|
75
|
+
const key = objects[cursor++];
|
|
76
|
+
if (key === undefined)
|
|
77
|
+
return;
|
|
78
|
+
try {
|
|
79
|
+
if (sessionEnd - Date.now() < 15000)
|
|
80
|
+
throw expired();
|
|
81
|
+
const metadata = await transfer.stat(session, key);
|
|
82
|
+
if (metadata.key !== key || metadata.status < 200 || metadata.status >= 300)
|
|
83
|
+
throw invalid();
|
|
84
|
+
if (Number.isSafeInteger(metadata.contentLength) && metadata.contentLength >= 0)
|
|
85
|
+
sizes.set(key, metadata.contentLength);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
failure = error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
if (failure !== undefined)
|
|
93
|
+
throw failure;
|
|
94
|
+
const deadline = Math.min(Date.now() + expires * 1000, sessionEnd - 5000);
|
|
95
|
+
if (deadline - Date.now() < 10000)
|
|
96
|
+
throw expired();
|
|
97
|
+
const links = [];
|
|
98
|
+
// One shared deadline; finish validation first so large selections do not consume link validity during HEAD calls.
|
|
99
|
+
for (const key of objects) {
|
|
100
|
+
const url = await transfer.signDownloadUrl(session, key, deadline);
|
|
101
|
+
// V4 uses a second-precision timestamp and duration. Report that actual expiry, not the rounded deadline.
|
|
102
|
+
const query = new URL(url).searchParams;
|
|
103
|
+
const signedAt = query.get('x-oss-date') ?? '';
|
|
104
|
+
const stamp = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/u.exec(signedAt);
|
|
105
|
+
const lifetime = Number(query.get('x-oss-expires'));
|
|
106
|
+
if (!stamp || !Number.isInteger(lifetime) || lifetime < 1 || lifetime > expires)
|
|
107
|
+
throw invalid();
|
|
108
|
+
const end = Date.UTC(+stamp[1], +stamp[2] - 1, +stamp[3], +stamp[4], +stamp[5], +stamp[6]) + lifetime * 1000;
|
|
109
|
+
if (!Number.isFinite(end) || end > deadline || end <= Date.now())
|
|
110
|
+
throw expired();
|
|
111
|
+
links.push({ key, sizeBytes: sizes.get(key), url, expiresAt: new Date(end).toISOString() });
|
|
112
|
+
}
|
|
113
|
+
return { grantId: session.grantId, bucket: session.bucketName, requestedExpiresSeconds: expires,
|
|
114
|
+
expiresAt: links.reduce((earliest, link) => link.expiresAt < earliest ? link.expiresAt : earliest, links[0].expiresAt),
|
|
115
|
+
fileCount: links.length, scanned, links };
|
|
116
|
+
}
|
|
117
|
+
/** Explicit capability-export boundary: sanitize metadata, retain only the intentionally generated URL fields. */
|
|
118
|
+
export function downloadLinksOutput(value) {
|
|
119
|
+
const safe = sanitizeOssOutput({ grantId: value.grantId, bucket: value.bucket, requestedExpiresSeconds: value.requestedExpiresSeconds,
|
|
120
|
+
expiresAt: value.expiresAt, fileCount: value.fileCount, scanned: value.scanned,
|
|
121
|
+
links: value.links.map(link => ({ key: link.key, sizeBytes: link.sizeBytes, expiresAt: link.expiresAt })) });
|
|
122
|
+
return { ...safe, links: safe.links.map((link, index) => ({ ...link, url: value.links[index].url })) };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=download-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download-links.js","sourceRoot":"","sources":["../../src/oss/download-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAA0B,MAAM,gBAAgB,CAAC;AAE5E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;CACzD,CAAC,CAAC,MAAM,EAAE,CAAC;AAKZ,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,wCAAwC,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;AACvG,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,qEAAqE,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACnI,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,4HAA4H,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAE9L,sHAAsH;AACtH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAA2B,EAAE,OAAsB,EAAE,KAAc;IAC3G,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,OAAO,EAAE,CAAC;IACrC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;QAAE,MAAM,OAAO,EAAE,CAAC;IACrF,MAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM,OAAO,EAAE,CAAC;QAC/H,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,SAAS;YAAE,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvI,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK;QAAE,MAAM,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACnD,IAAI,MAA0B,CAAC;QAC/B,SAAS,CAAC;YACR,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAAE,MAAM,OAAO,EAAE,CAAC;YACrD,IAAI,EAAE,KAAK,GAAG,GAAG;gBAAE,MAAM,aAAa,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;gBAAE,MAAM,OAAO,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrE,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;gBAC5B,IAAI,EAAE,OAAO,GAAG,KAAK;oBAAE,MAAM,aAAa,EAAE,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,EAAC,MAAM,CAAC,IAAI,CAAC;oBAAE,MAAM,OAAO,EAAE,CAAC;gBACpG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,MAAM;YAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,EAAC,MAAM,CAAC,IAAI,CAAC;mBAC3G,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAC,IAAI,CAAC,UAAW,CAAC,GAAG,CAAC,CAAC;gBAAE,MAAM,OAAO,EAAE,CAAC;YACtF,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,QAAQ,CAAC,kCAAkC,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAAC,IAAI,MAAM,GAAG,CAAC,EAAE,OAAgB,CAAC;IAC1E,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC9E,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAAC,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO;YAC7D,IAAI,CAAC;gBACH,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAAE,MAAM,OAAO,EAAE,CAAC;gBACrD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAC,GAAG,CAAC,CAAC;gBAClD,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;oBAAE,MAAM,OAAO,EAAE,CAAC;gBAC7F,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,aAAc,IAAI,CAAC;oBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAC,QAAQ,CAAC,aAAc,CAAC,CAAC;YAC3H,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,OAAO,GAAG,KAAK,CAAC;YAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;IACJ,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,OAAO,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;IAC1E,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;QAAE,MAAM,OAAO,EAAE,CAAC;IACnD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,mHAAmH;IACnH,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAC,GAAG,EAAC,QAAQ,CAAC,CAAC;QACjE,0GAA0G;QAC1G,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,iDAAiD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO;YAAE,MAAM,OAAO,EAAE,CAAC;QACjG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,EAAC,CAAC,KAAK,CAAC,CAAC,CAAE,GAAC,CAAC,EAAC,CAAC,KAAK,CAAC,CAAC,CAAE,EAAC,CAAC,KAAK,CAAC,CAAC,CAAE,EAAC,CAAC,KAAK,CAAC,CAAC,CAAE,EAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;QAC5G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;YAAE,MAAM,OAAO,EAAE,CAAC;QAClF,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAC,SAAS,EAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAC,GAAG,EAAC,SAAS,EAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,OAAO,EAAC,OAAO,CAAC,OAAO,EAAC,MAAM,EAAC,OAAO,CAAC,UAAU,EAAC,uBAAuB,EAAC,OAAO;QACxF,SAAS,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAC,IAAI,EAAC,EAAE,CAAA,IAAI,CAAC,SAAS,GAAC,QAAQ,CAAA,CAAC,CAAA,IAAI,CAAC,SAAS,CAAA,CAAC,CAAA,QAAQ,EAAC,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC;QAC5G,SAAS,EAAC,KAAK,CAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACtD,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAC,OAAO,EAAC,KAAK,CAAC,OAAO,EAAC,MAAM,EAAC,KAAK,CAAC,MAAM,EAAC,uBAAuB,EAAC,KAAK,CAAC,uBAAuB;QAC7H,SAAS,EAAC,KAAK,CAAC,SAAS,EAAC,SAAS,EAAC,KAAK,CAAC,SAAS,EAAC,OAAO,EAAC,KAAK,CAAC,OAAO;QACzE,KAAK,EAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAA,EAAE,CAAA,CAAC,EAAC,GAAG,EAAC,IAAI,CAAC,GAAG,EAAC,SAAS,EAAC,IAAI,CAAC,SAAS,EAAC,SAAS,EAAC,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC,EAAC,CAAuF,CAAC;IAC1L,OAAO,EAAC,GAAG,IAAI,EAAC,KAAK,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAC,KAAK,EAAC,EAAE,CAAA,CAAC,EAAC,GAAG,IAAI,EAAC,GAAG,EAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,GAAG,EAAC,CAAC,CAAC,EAAC,CAAC;AAC/F,CAAC"}
|
package/dist/oss/errors.js
CHANGED
|
@@ -7,7 +7,7 @@ import { redactSensitiveText } from "../media/errors.js";
|
|
|
7
7
|
*/
|
|
8
8
|
export function redactOssSensitiveText(value) {
|
|
9
9
|
return redactSensitiveText(value)
|
|
10
|
-
.replace(/([?&\s](?:OSSAccessKeyId|OSSAccessKeySecret|AccessKeyId|AccessKeySecret|SecurityToken|stsToken|security_token|sts_token|access[-_]key[-_]id|access[-_]key[-_]secret)=)[^&#\s]+/giu, "$1[REDACTED]")
|
|
10
|
+
.replace(/([?&\s](?:x-oss-security-token|OSSAccessKeyId|OSSAccessKeySecret|AccessKeyId|AccessKeySecret|SecurityToken|stsToken|security_token|sts_token|access[-_]key[-_]id|access[-_]key[-_]secret)=)[^&#\s]+/giu, "$1[REDACTED]")
|
|
11
11
|
.replace(/(["']?(?:OSSAccessKeyId|OSSAccessKeySecret|AccessKeyId|AccessKeySecret|SecurityToken|stsToken|security_token|sts_token|access[-_]key[-_]id|access[-_]key[-_]secret|credentials?|secret)["']?\s*[:=]\s*)("[^"]*"|'[^']*'|[^\s,;}&#]+)/giu, "$1[REDACTED]");
|
|
12
12
|
}
|
|
13
13
|
function isSensitiveOutputKey(key) {
|
package/dist/oss/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/oss/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,mBAAmB,CAAC,KAAK,CAAC;SAC9B,OAAO,CACN,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/oss/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,mBAAmB,CAAC,KAAK,CAAC;SAC9B,OAAO,CACN,wMAAwM,EACxM,cAAc,CACf;SACA,OAAO,CACN,yOAAyO,EACzO,cAAc,CACf,CAAC;AACN,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACvC,OAAO,6IAA6I,CAAC,IAAI,CAAC,GAAG,CAAC;WACzJ,sGAAsG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,GAAG,GAAG,EAAE;IACxD,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGf,IAAI;IACJ,MAAM;IACN,SAAS;IAJ3B,YACE,OAAe,EACC,IAAY,EACZ,MAAe,EACf,SAAkB;QAElC,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;oBAJvB,IAAI;sBACJ,MAAM;yBACN,SAAS;QAGzB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}
|
package/dist/oss/schemas.d.ts
CHANGED
|
@@ -5,8 +5,16 @@ export declare const ApiErrorSchema: z.ZodObject<{
|
|
|
5
5
|
detail: z.ZodOptional<z.ZodString>;
|
|
6
6
|
requestId: z.ZodOptional<z.ZodString>;
|
|
7
7
|
}, z.core.$loose>;
|
|
8
|
+
export declare const OSS_ACCESS_PRIORITIES: readonly ["HIGHEST", "HIGH", "NORMAL", "LOW", "LOWEST"];
|
|
8
9
|
export declare const AccessGrantSchema: z.ZodObject<{
|
|
9
10
|
grantId: z.ZodNumber;
|
|
11
|
+
accessPriority: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
12
|
+
HIGH: "HIGH";
|
|
13
|
+
HIGHEST: "HIGHEST";
|
|
14
|
+
LOW: "LOW";
|
|
15
|
+
LOWEST: "LOWEST";
|
|
16
|
+
NORMAL: "NORMAL";
|
|
17
|
+
}>>>;
|
|
10
18
|
subjectType: z.ZodString;
|
|
11
19
|
subjectKey: z.ZodString;
|
|
12
20
|
accountCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -31,6 +39,13 @@ export declare const AccessGrantsResponseSchema: z.ZodObject<{
|
|
|
31
39
|
subject: z.ZodString;
|
|
32
40
|
grants: z.ZodArray<z.ZodObject<{
|
|
33
41
|
grantId: z.ZodNumber;
|
|
42
|
+
accessPriority: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
43
|
+
HIGH: "HIGH";
|
|
44
|
+
HIGHEST: "HIGHEST";
|
|
45
|
+
LOW: "LOW";
|
|
46
|
+
LOWEST: "LOWEST";
|
|
47
|
+
NORMAL: "NORMAL";
|
|
48
|
+
}>>>;
|
|
34
49
|
subjectType: z.ZodString;
|
|
35
50
|
subjectKey: z.ZodString;
|
|
36
51
|
accountCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
package/dist/oss/schemas.js
CHANGED
|
@@ -5,8 +5,10 @@ export const ApiErrorSchema = z.object({
|
|
|
5
5
|
detail: z.string().optional(),
|
|
6
6
|
requestId: z.string().optional()
|
|
7
7
|
}).passthrough();
|
|
8
|
+
export const OSS_ACCESS_PRIORITIES = ["HIGHEST", "HIGH", "NORMAL", "LOW", "LOWEST"];
|
|
8
9
|
export const AccessGrantSchema = z.object({
|
|
9
10
|
grantId: z.number().int().positive(),
|
|
11
|
+
accessPriority: z.enum(OSS_ACCESS_PRIORITIES).nullable().optional(),
|
|
10
12
|
subjectType: z.string().min(1),
|
|
11
13
|
subjectKey: z.string().min(1),
|
|
12
14
|
accountCode: z.string().nullable().optional(),
|
package/dist/oss/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/oss/schemas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/oss/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare class SignedTransferError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
constructor(message: string, code: string);
|
|
4
|
+
}
|
|
5
|
+
export interface FileDigest {
|
|
6
|
+
path: string;
|
|
7
|
+
filename: string;
|
|
8
|
+
size_bytes: number;
|
|
9
|
+
sha256: string;
|
|
10
|
+
content_md5: string;
|
|
11
|
+
content_type: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SignedTicket {
|
|
14
|
+
url: string;
|
|
15
|
+
method: string;
|
|
16
|
+
headers: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
export type ByteProgress = (bytes: number, total: number | null) => void;
|
|
19
|
+
/** Check every component, including ancestors of the input. */
|
|
20
|
+
export declare function rejectSymlinks(path: string, missingLeaf?: boolean): Promise<void>;
|
|
21
|
+
export declare function digestFile(path: string, signal?: AbortSignal): Promise<Omit<FileDigest, 'filename' | 'content_type'>>;
|
|
22
|
+
export declare function putSignedFile(ticket: SignedTicket, source: FileDigest, options?: {
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
onProgress?: ByteProgress;
|
|
25
|
+
fetchImpl?: typeof fetch;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
export declare function downloadSignedFile(ticket: SignedTicket & {
|
|
29
|
+
size_bytes: number | null;
|
|
30
|
+
sha256: string | null;
|
|
31
|
+
}, output: string, options?: {
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
onProgress?: ByteProgress;
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
timeoutMs?: number;
|
|
36
|
+
response?: (signal: AbortSignal) => Promise<Response>;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
output: string;
|
|
39
|
+
size_bytes: number;
|
|
40
|
+
sha256: string;
|
|
41
|
+
}>;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { open, lstat, link, unlink } from 'node:fs/promises';
|
|
3
|
+
import { dirname, join, resolve, parse, relative } from 'node:path';
|
|
4
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
5
|
+
import { Readable } from 'node:stream';
|
|
6
|
+
export class SignedTransferError extends Error {
|
|
7
|
+
code;
|
|
8
|
+
constructor(message, code) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.name = 'SignedTransferError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const fail = (message, code = 'kb_transfer_failed') => new SignedTransferError(message, code);
|
|
15
|
+
/** Check every component, including ancestors of the input. */
|
|
16
|
+
export async function rejectSymlinks(path, missingLeaf = false) {
|
|
17
|
+
const full = resolve(path);
|
|
18
|
+
let current = parse(full).root;
|
|
19
|
+
const parts = relative(current, full).split(/[\\/]/u).filter(Boolean);
|
|
20
|
+
for (const [index, part] of parts.entries()) {
|
|
21
|
+
current = join(current, part);
|
|
22
|
+
let stat;
|
|
23
|
+
try {
|
|
24
|
+
stat = await lstat(current);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (missingLeaf && index === parts.length - 1 && error.code === 'ENOENT')
|
|
28
|
+
return;
|
|
29
|
+
throw fail('Local path is unavailable.', 'kb_path_invalid');
|
|
30
|
+
}
|
|
31
|
+
if (stat.isSymbolicLink() || (index < parts.length - 1 && !stat.isDirectory()))
|
|
32
|
+
throw fail('Symbolic links are not accepted.', 'kb_path_invalid');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function digestFile(path, signal) {
|
|
36
|
+
await rejectSymlinks(path);
|
|
37
|
+
const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
38
|
+
try {
|
|
39
|
+
const before = await file.stat();
|
|
40
|
+
if (!before.isFile() || before.size <= 0 || before.size > 100 * 1024 ** 2)
|
|
41
|
+
throw fail('Upload requires nonempty regular files of at most 100 MiB.', 'kb_input_invalid');
|
|
42
|
+
const sha = createHash('sha256'), md5 = createHash('md5');
|
|
43
|
+
let position = 0;
|
|
44
|
+
while (position < before.size) {
|
|
45
|
+
signal?.throwIfAborted();
|
|
46
|
+
const buffer = Buffer.alloc(Math.min(256 * 1024, before.size - position));
|
|
47
|
+
const { bytesRead } = await file.read(buffer, 0, buffer.length, position);
|
|
48
|
+
if (!bytesRead)
|
|
49
|
+
throw fail('Upload source changed.', 'kb_source_changed');
|
|
50
|
+
position += bytesRead;
|
|
51
|
+
sha.update(buffer.subarray(0, bytesRead));
|
|
52
|
+
md5.update(buffer.subarray(0, bytesRead));
|
|
53
|
+
}
|
|
54
|
+
const after = await file.stat(), named = await lstat(path);
|
|
55
|
+
if (after.size !== before.size || after.mtimeMs !== before.mtimeMs || after.ctimeMs !== before.ctimeMs || named.ino !== before.ino || named.dev !== before.dev)
|
|
56
|
+
throw fail('Upload source changed.', 'kb_source_changed');
|
|
57
|
+
return { path: resolve(path), size_bytes: before.size, sha256: sha.digest('hex'), content_md5: md5.digest('base64') };
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
await file.close();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function safeTicket(ticket, method) {
|
|
64
|
+
let url;
|
|
65
|
+
try {
|
|
66
|
+
url = new URL(ticket.url);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
throw fail('Invalid signed transfer URL.', 'kb_protocol_error');
|
|
70
|
+
}
|
|
71
|
+
const loopback = ['127.0.0.1', 'localhost', '[::1]'].includes(url.hostname);
|
|
72
|
+
if ((url.protocol !== 'https:' && !(url.protocol === 'http:' && loopback)) || url.username || url.password || url.hash || ticket.method !== method)
|
|
73
|
+
throw fail('Invalid signed transfer ticket.', 'kb_protocol_error');
|
|
74
|
+
if (Object.keys(ticket.headers).some(key => /^(authorization|proxy-authorization|cookie|x-api-key)$/iu.test(key)))
|
|
75
|
+
throw fail('Signed transfer ticket contains identity headers.', 'kb_protocol_error');
|
|
76
|
+
}
|
|
77
|
+
function transferSignal(signal, timeoutMs = 10 * 60_000) {
|
|
78
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1)
|
|
79
|
+
throw fail('Invalid transfer timeout.', 'kb_input_invalid');
|
|
80
|
+
const timeout = AbortSignal.timeout(timeoutMs);
|
|
81
|
+
return signal ? AbortSignal.any([signal, timeout]) : timeout;
|
|
82
|
+
}
|
|
83
|
+
function checkSignal(signal) {
|
|
84
|
+
if (signal.aborted)
|
|
85
|
+
throw fail(signal.reason?.name === 'TimeoutError' ? 'File transfer timed out.' : 'File transfer interrupted.', signal.reason?.name === 'TimeoutError' ? 'kb_transfer_timeout' : 'kb_aborted');
|
|
86
|
+
}
|
|
87
|
+
export async function putSignedFile(ticket, source, options = {}) {
|
|
88
|
+
const signal = transferSignal(options.signal, options.timeoutMs);
|
|
89
|
+
safeTicket(ticket, 'PUT');
|
|
90
|
+
await rejectSymlinks(source.path);
|
|
91
|
+
const file = await open(source.path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
92
|
+
let stream;
|
|
93
|
+
try {
|
|
94
|
+
const before = await file.stat();
|
|
95
|
+
if (!before.isFile() || before.size !== source.size_bytes)
|
|
96
|
+
throw fail('Upload source changed.', 'kb_source_changed');
|
|
97
|
+
const sha = createHash('sha256'), md5 = createHash('md5');
|
|
98
|
+
let bytes = 0;
|
|
99
|
+
stream = Readable.from((async function* () {
|
|
100
|
+
while (bytes < source.size_bytes) {
|
|
101
|
+
checkSignal(signal);
|
|
102
|
+
const buffer = Buffer.alloc(Math.min(256 * 1024, source.size_bytes - bytes));
|
|
103
|
+
const result = await file.read(buffer, 0, buffer.length, bytes);
|
|
104
|
+
if (!result.bytesRead)
|
|
105
|
+
throw fail('Upload source changed.', 'kb_source_changed');
|
|
106
|
+
const chunk = buffer.subarray(0, result.bytesRead);
|
|
107
|
+
bytes += chunk.length;
|
|
108
|
+
sha.update(chunk);
|
|
109
|
+
md5.update(chunk);
|
|
110
|
+
options.onProgress?.(bytes, source.size_bytes);
|
|
111
|
+
yield chunk;
|
|
112
|
+
}
|
|
113
|
+
})());
|
|
114
|
+
const headers = new Headers(ticket.headers);
|
|
115
|
+
if (headers.has('content-length') && headers.get('content-length') !== String(source.size_bytes))
|
|
116
|
+
throw fail('Signed upload length does not match source.', 'kb_protocol_error');
|
|
117
|
+
headers.set('content-length', String(source.size_bytes));
|
|
118
|
+
let response;
|
|
119
|
+
try {
|
|
120
|
+
response = await (options.fetchImpl ?? fetch)(ticket.url, { method: 'PUT', headers, body: stream, duplex: 'half', redirect: 'manual', signal });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
checkSignal(signal);
|
|
124
|
+
throw fail('Signed upload interrupted. Resume to query server progress.');
|
|
125
|
+
}
|
|
126
|
+
await response.body?.cancel();
|
|
127
|
+
if (!response.ok)
|
|
128
|
+
throw fail('Signed upload rejected. Resume to query server progress.');
|
|
129
|
+
const after = await file.stat(), named = await lstat(source.path);
|
|
130
|
+
if (bytes !== source.size_bytes || sha.digest('hex') !== source.sha256 || md5.digest('base64') !== source.content_md5 || after.size !== before.size || after.mtimeMs !== before.mtimeMs || after.ctimeMs !== before.ctimeMs || named.ino !== before.ino || named.dev !== before.dev)
|
|
131
|
+
throw fail('Upload source changed.', 'kb_source_changed');
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
stream?.destroy();
|
|
135
|
+
await file.close();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export async function downloadSignedFile(ticket, output, options = {}) {
|
|
139
|
+
const signal = transferSignal(options.signal, options.timeoutMs);
|
|
140
|
+
if (!options.response)
|
|
141
|
+
safeTicket(ticket, 'GET');
|
|
142
|
+
output = resolve(output);
|
|
143
|
+
await rejectSymlinks(output, true);
|
|
144
|
+
try {
|
|
145
|
+
await lstat(output);
|
|
146
|
+
throw fail('Download output already exists.', 'kb_output_exists');
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (error.code !== 'ENOENT')
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
const temp = join(dirname(output), `.numa-kb-${randomUUID()}.part`);
|
|
153
|
+
const file = await open(temp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
154
|
+
try {
|
|
155
|
+
let response;
|
|
156
|
+
try {
|
|
157
|
+
response = await (options.response?.(signal) ?? (options.fetchImpl ?? fetch)(ticket.url, { method: 'GET', headers: ticket.headers, redirect: 'manual', signal }));
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
checkSignal(signal);
|
|
161
|
+
throw fail('Download interrupted.');
|
|
162
|
+
}
|
|
163
|
+
if (!response.ok || !response.body) {
|
|
164
|
+
await response.body?.cancel();
|
|
165
|
+
throw fail('Download rejected.');
|
|
166
|
+
}
|
|
167
|
+
let bytes = 0;
|
|
168
|
+
const sha = createHash('sha256');
|
|
169
|
+
try {
|
|
170
|
+
for await (const value of Readable.fromWeb(response.body)) {
|
|
171
|
+
checkSignal(signal);
|
|
172
|
+
const chunk = Buffer.from(value);
|
|
173
|
+
bytes += chunk.length;
|
|
174
|
+
if (ticket.size_bytes !== null && bytes > ticket.size_bytes)
|
|
175
|
+
throw fail('Downloaded length does not match ticket.', 'kb_checksum_mismatch');
|
|
176
|
+
sha.update(chunk);
|
|
177
|
+
await file.writeFile(chunk);
|
|
178
|
+
options.onProgress?.(bytes, ticket.size_bytes);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
if (error instanceof SignedTransferError)
|
|
183
|
+
throw error;
|
|
184
|
+
checkSignal(signal);
|
|
185
|
+
throw fail('Download interrupted.');
|
|
186
|
+
}
|
|
187
|
+
const digest = sha.digest('hex');
|
|
188
|
+
if ((ticket.size_bytes !== null && bytes !== ticket.size_bytes) || (ticket.sha256 && /^[a-f0-9]{64}$/iu.test(ticket.sha256) && digest !== ticket.sha256.toLowerCase()))
|
|
189
|
+
throw fail('Downloaded content does not match ticket.', 'kb_checksum_mismatch');
|
|
190
|
+
await file.sync();
|
|
191
|
+
await rejectSymlinks(output, true);
|
|
192
|
+
try {
|
|
193
|
+
await link(temp, output);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
if (error.code === 'EEXIST')
|
|
197
|
+
throw fail('Download output already exists.', 'kb_output_exists');
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
return { output, size_bytes: bytes, sha256: digest };
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
await file.close();
|
|
204
|
+
await unlink(temp).catch(() => undefined);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=signed-url-transfers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-url-transfers.js","sourceRoot":"","sources":["../../src/oss/signed-url-transfers.ts"],"names":[],"mappings":"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"}
|
package/dist/oss/tools.js
CHANGED
|
@@ -4,6 +4,7 @@ import { OssClient } from "./client.js";
|
|
|
4
4
|
import { OssError, sanitizeOssOutput } from "./errors.js";
|
|
5
5
|
import { OssTransferClient, sessionMetadata } from "./transfers.js";
|
|
6
6
|
import { SEARCH_FIELDS, projectEntries, searchObjects, validateSearchOptions } from "./search.js";
|
|
7
|
+
import { createDownloadLinks, downloadLinksInputSchema, downloadLinksOutput } from "./download-links.js";
|
|
7
8
|
export function registerOssTools(server, dependencies = {}) {
|
|
8
9
|
const client = () => dependencies.clientFactory?.() ?? new OssClient(loadConfig("oss"));
|
|
9
10
|
const transfer = dependencies.transferFactory?.() ?? new OssTransferClient();
|
|
@@ -29,6 +30,23 @@ export function registerOssTools(server, dependencies = {}) {
|
|
|
29
30
|
});
|
|
30
31
|
};
|
|
31
32
|
register("grants", "List OSS Grants for the current user or configured machine identity. Select an enabled, synced Grant for the intended bucket/prefix. Never returns STS credentials.", {}, true, () => client().listGrants());
|
|
33
|
+
server.registerTool("numa_oss_download_links", {
|
|
34
|
+
description: "Export short-lived GET download links only when the user requests links for these exact files/folders. Holders can download without logging in. Folders require list and read permissions and expand to individual links, not ZIP. Default 300 seconds/100 files; maximum 3600 seconds/100 files (hard limit; reject larger selections); STS may shorten validity. No partial list or automatic publishing. confirmed=true records the user's request, not an extra approval step.",
|
|
35
|
+
inputSchema: { grant_id: grant, ...downloadLinksInputSchema.shape, confirmed: z.literal(true) },
|
|
36
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }
|
|
37
|
+
}, async (input) => {
|
|
38
|
+
try {
|
|
39
|
+
const session = await client().issueSession(input.grant_id);
|
|
40
|
+
const data = downloadLinksOutput(await createDownloadLinks(transfer, session, { entries: input.entries, expires: input.expires }));
|
|
41
|
+
const value = { ok: true, data };
|
|
42
|
+
return { content: [{ type: "text", text: JSON.stringify(value) }], structuredContent: value };
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const value = sanitizeOssOutput({ ok: false, error: error instanceof OssError ? { code: error.code, message: error.message, status: error.status }
|
|
46
|
+
: { code: "oss_link_failed", message: "Unable to generate links; check the selected Grant and object permissions." } });
|
|
47
|
+
return { isError: true, content: [{ type: "text", text: JSON.stringify(value) }], structuredContent: value };
|
|
48
|
+
}
|
|
49
|
+
});
|
|
32
50
|
register("list", "List one page within a Grant prefix. delimiter=/ groups immediate subdirectories. Pass nextMarker as marker to continue; limit counts objects and directories together.", {
|
|
33
51
|
...base, prefix: key.optional(), marker: key.optional(), delimiter: z.literal("/").optional(), limit: z.number().int().min(1).max(1000).default(100)
|
|
34
52
|
}, true, async (input) => {
|
package/dist/oss/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/oss/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/oss/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Shared bounded scheduler. Drain in-flight work before exposing failure. */
|
|
2
|
+
export async function runTransferPool(items, concurrency, work, signal) {
|
|
3
|
+
if (!Number.isInteger(concurrency) || concurrency < 1 || concurrency > 32)
|
|
4
|
+
throw new RangeError('Transfer concurrency must be between 1 and 32.');
|
|
5
|
+
let next = 0;
|
|
6
|
+
let failure;
|
|
7
|
+
let failed = false;
|
|
8
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, async () => {
|
|
9
|
+
while (!failed && !signal?.aborted) {
|
|
10
|
+
const index = next++;
|
|
11
|
+
if (index >= items.length)
|
|
12
|
+
return;
|
|
13
|
+
try {
|
|
14
|
+
await work(items[index]);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (!failed)
|
|
18
|
+
failure = error;
|
|
19
|
+
failed = true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}));
|
|
23
|
+
if (failed)
|
|
24
|
+
throw failure;
|
|
25
|
+
signal?.throwIfAborted();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=transfer-pool.js.map
|