@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.
Files changed (157) hide show
  1. package/README.md +24 -1
  2. package/dist/application-onboarding/schemas.d.ts +24 -0
  3. package/dist/application-onboarding/schemas.js +4 -0
  4. package/dist/application-onboarding/schemas.js.map +1 -1
  5. package/dist/application-onboarding/tui-model.d.ts +1 -0
  6. package/dist/application-onboarding/tui-model.js +10 -0
  7. package/dist/application-onboarding/tui-model.js.map +1 -1
  8. package/dist/application-onboarding/tui.js +1 -1
  9. package/dist/application-onboarding/tui.js.map +1 -1
  10. package/dist/authorization/application-client.d.ts +36 -1
  11. package/dist/authorization/application-client.js +4 -2
  12. package/dist/authorization/application-client.js.map +1 -1
  13. package/dist/authorization/application-commands.js +4 -3
  14. package/dist/authorization/application-commands.js.map +1 -1
  15. package/dist/authorization/application-schemas.d.ts +42 -7
  16. package/dist/authorization/application-schemas.js +19 -3
  17. package/dist/authorization/application-schemas.js.map +1 -1
  18. package/dist/business-issuer.js +8 -0
  19. package/dist/business-issuer.js.map +1 -1
  20. package/dist/cli.js +49 -31
  21. package/dist/cli.js.map +1 -1
  22. package/dist/command-catalog.js +18 -1
  23. package/dist/command-catalog.js.map +1 -1
  24. package/dist/kb/catalog.d.ts +2 -0
  25. package/dist/kb/catalog.js +14 -0
  26. package/dist/kb/catalog.js.map +1 -0
  27. package/dist/kb/client.d.ts +46 -0
  28. package/dist/kb/client.js +272 -0
  29. package/dist/kb/client.js.map +1 -0
  30. package/dist/kb/commands.d.ts +14 -0
  31. package/dist/kb/commands.js +121 -0
  32. package/dist/kb/commands.js.map +1 -0
  33. package/dist/kb/config.d.ts +15 -0
  34. package/dist/kb/config.js +76 -0
  35. package/dist/kb/config.js.map +1 -0
  36. package/dist/kb/errors.d.ts +9 -0
  37. package/dist/kb/errors.js +31 -0
  38. package/dist/kb/errors.js.map +1 -0
  39. package/dist/kb/transfers.d.ts +67 -0
  40. package/dist/kb/transfers.js +257 -0
  41. package/dist/kb/transfers.js.map +1 -0
  42. package/dist/kb/types.d.ts +81 -0
  43. package/dist/kb/types.js +2 -0
  44. package/dist/kb/types.js.map +1 -0
  45. package/dist/kb/upload-state.d.ts +20 -0
  46. package/dist/kb/upload-state.js +135 -0
  47. package/dist/kb/upload-state.js.map +1 -0
  48. package/dist/login-recovery.js +15 -1
  49. package/dist/login-recovery.js.map +1 -1
  50. package/dist/maintenance/modules.js +1 -1
  51. package/dist/maintenance/modules.js.map +1 -1
  52. package/dist/mcp/catalog.js +9 -1
  53. package/dist/mcp/catalog.js.map +1 -1
  54. package/dist/oss/commands.js +20 -0
  55. package/dist/oss/commands.js.map +1 -1
  56. package/dist/oss/download-links.d.ts +28 -0
  57. package/dist/oss/download-links.js +124 -0
  58. package/dist/oss/download-links.js.map +1 -0
  59. package/dist/oss/errors.js +1 -1
  60. package/dist/oss/errors.js.map +1 -1
  61. package/dist/oss/schemas.d.ts +15 -0
  62. package/dist/oss/schemas.js +2 -0
  63. package/dist/oss/schemas.js.map +1 -1
  64. package/dist/oss/signed-url-transfers.d.ts +41 -0
  65. package/dist/oss/signed-url-transfers.js +207 -0
  66. package/dist/oss/signed-url-transfers.js.map +1 -0
  67. package/dist/oss/tools.js +18 -0
  68. package/dist/oss/tools.js.map +1 -1
  69. package/dist/oss/transfer-pool.d.ts +2 -0
  70. package/dist/oss/transfer-pool.js +27 -0
  71. package/dist/oss/transfer-pool.js.map +1 -0
  72. package/dist/oss/transfer-worker.js +8 -17
  73. package/dist/oss/transfer-worker.js.map +1 -1
  74. package/dist/oss/transfers.d.ts +2 -0
  75. package/dist/oss/transfers.js +27 -0
  76. package/dist/oss/transfers.js.map +1 -1
  77. package/dist/oss/web-page.js +60 -5
  78. package/dist/oss/web-page.js.map +1 -1
  79. package/dist/oss/web.js +26 -0
  80. package/dist/oss/web.js.map +1 -1
  81. package/dist/platform-profile.d.ts +1 -1
  82. package/dist/server.d.ts +2 -0
  83. package/dist/server.js +2 -0
  84. package/dist/server.js.map +1 -1
  85. package/dist/tasks/commands.d.ts +9 -0
  86. package/dist/tasks/commands.js +60 -0
  87. package/dist/tasks/commands.js.map +1 -0
  88. package/dist/tasks/oss-query.d.ts +56 -0
  89. package/dist/tasks/oss-query.js +176 -0
  90. package/dist/tasks/oss-query.js.map +1 -0
  91. package/dist/tasks/runtime.d.ts +151 -0
  92. package/dist/tasks/runtime.js +71 -0
  93. package/dist/tasks/runtime.js.map +1 -0
  94. package/dist/tasks/tools.d.ts +3 -0
  95. package/dist/tasks/tools.js +16 -0
  96. package/dist/tasks/tools.js.map +1 -0
  97. package/dist/tasks/types.d.ts +14 -0
  98. package/dist/tasks/types.js +4 -0
  99. package/dist/tasks/types.js.map +1 -0
  100. package/dist/tasks/wecom-notify.d.ts +26 -0
  101. package/dist/tasks/wecom-notify.js +150 -0
  102. package/dist/tasks/wecom-notify.js.map +1 -0
  103. package/docs/agent-tasks.md +103 -0
  104. package/docs/application-default-groups.md +10 -2
  105. package/docs/design/kb-cli.md +94 -0
  106. package/docs/kb-access.md +85 -0
  107. package/package.json +13 -7
  108. package/scripts/export-kb-contract.py +158 -0
  109. package/skills/numa-ai-registry/SKILL.md +2 -2
  110. package/skills/numa-cli/SKILL.md +24 -9
  111. package/skills/numa-cli/agents/openai.yaml +2 -2
  112. package/skills/numa-cli/evals/evals.json +13 -1
  113. package/skills/numa-cli/numa-skill.json +1 -1
  114. package/skills/numa-cli/references/cli-bootstrap.md +8 -8
  115. package/skills/numa-cli/references/cli-mcp.md +28 -20
  116. package/skills/numa-cli/references/pipeline-release.md +9 -9
  117. package/skills/numa-cli/references/skills-command-contract.md +40 -40
  118. package/skills/numa-cli/references/skills-updates.md +13 -13
  119. package/skills/numa-cli/references/skills-workflows.md +4 -4
  120. package/skills/numa-create-application/SKILL.md +1 -1
  121. package/skills/numa-create-application/numa-skill.json +2 -2
  122. package/skills/numa-create-application/references/cli-bootstrap.md +3 -3
  123. package/skills/numa-create-application/references/numa-cli.md +16 -16
  124. package/skills/numa-jenkins-deployment/SKILL.md +8 -8
  125. package/skills/numa-jenkins-deployment/numa-skill.json +2 -2
  126. package/skills/numa-jenkins-deployment/references/cli-bootstrap.md +3 -3
  127. package/skills/numa-jenkins-deployment/references/cli-contract.md +7 -7
  128. package/skills/numa-jenkins-deployment/references/diagnostics.md +2 -2
  129. package/skills/numa-local-flux-deploy/SKILL.md +1 -1
  130. package/skills/numa-local-flux-deploy/numa-skill.json +2 -2
  131. package/skills/numa-local-flux-deploy/references/cli-bootstrap.md +3 -3
  132. package/skills/numa-nacos/SKILL.md +4 -4
  133. package/skills/numa-nacos/numa-skill.json +2 -2
  134. package/skills/numa-nacos/references/cli-bootstrap.md +3 -3
  135. package/skills/numa-nacos/references/command-contract.md +17 -17
  136. package/skills/numa-notion/SKILL.md +4 -4
  137. package/skills/numa-notion/numa-skill.json +2 -2
  138. package/skills/numa-notion/references/agents-automation.md +2 -2
  139. package/skills/numa-notion/references/cli-bootstrap.md +3 -3
  140. package/skills/numa-notion/references/cli.md +17 -17
  141. package/skills/numa-oss-access/SKILL.md +35 -77
  142. package/skills/numa-oss-access/agents/openai.yaml +2 -2
  143. package/skills/numa-oss-access/evals/evals.json +48 -0
  144. package/skills/numa-oss-access/numa-skill.json +2 -2
  145. package/skills/numa-oss-access/references/cli-bootstrap.md +5 -5
  146. package/skills/numa-oss-access/references/download-links.md +42 -0
  147. package/skills/numa-oss-access/references/object-operations.md +95 -0
  148. package/skills/numa-oss-access/references/search-and-mcp.md +17 -11
  149. package/skills/numa-wecom/SKILL.md +27 -62
  150. package/skills/numa-wecom/agents/openai.yaml +2 -2
  151. package/skills/numa-wecom/evals/evals.json +25 -0
  152. package/skills/numa-wecom/numa-skill.json +2 -2
  153. package/skills/numa-wecom/references/cli-bootstrap.md +5 -5
  154. package/skills/numa-wecom/references/legacy-operations.md +71 -0
  155. package/skills/numa-wecom/references/machine-auth.md +7 -7
  156. package/skills/numa-wecom/references/mcp.md +9 -8
  157. 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":"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"}
@@ -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) {
@@ -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,mLAAmL,EACnL,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"}
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"}
@@ -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>>;
@@ -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(),
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/oss/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC9C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACtD,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;CACnC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC9C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,WAAW,EAAE,oBAAoB;CAClC,CAAC,CAAC,WAAW,EAAE,CAAC;AAMjB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;CACnB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,uBAAuB;IAC9B,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC"}
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) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/oss/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/oss/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Shared bounded scheduler. Drain in-flight work before exposing failure. */
2
+ export declare function runTransferPool<T>(items: readonly T[], concurrency: number, work: (item: T) => Promise<void>, signal?: AbortSignal): Promise<void>;
@@ -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