@privos_ai/app-server 0.8.4 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +76 -1
  2. package/dist/cli/commands/lint.d.ts +8 -0
  3. package/dist/cli/commands/lint.d.ts.map +1 -0
  4. package/dist/cli/commands/lint.js +24 -0
  5. package/dist/cli/commands/lint.js.map +1 -0
  6. package/dist/cli/commands/publish.d.ts +20 -0
  7. package/dist/cli/commands/publish.d.ts.map +1 -0
  8. package/dist/cli/commands/publish.js +365 -0
  9. package/dist/cli/commands/publish.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +36 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/cli/lib/authorize.d.ts +80 -0
  15. package/dist/cli/lib/authorize.d.ts.map +1 -0
  16. package/dist/cli/lib/authorize.js +86 -0
  17. package/dist/cli/lib/authorize.js.map +1 -0
  18. package/dist/cli/lib/manifest.d.ts +30 -0
  19. package/dist/cli/lib/manifest.d.ts.map +1 -0
  20. package/dist/cli/lib/manifest.js +61 -0
  21. package/dist/cli/lib/manifest.js.map +1 -0
  22. package/dist/cli/lib/output.d.ts +66 -0
  23. package/dist/cli/lib/output.d.ts.map +1 -0
  24. package/dist/cli/lib/output.js +61 -0
  25. package/dist/cli/lib/output.js.map +1 -0
  26. package/dist/cli/lib/package-source.d.ts +63 -0
  27. package/dist/cli/lib/package-source.d.ts.map +1 -0
  28. package/dist/cli/lib/package-source.js +219 -0
  29. package/dist/cli/lib/package-source.js.map +1 -0
  30. package/dist/cli/lib/portal-client.d.ts +38 -0
  31. package/dist/cli/lib/portal-client.d.ts.map +1 -0
  32. package/dist/cli/lib/portal-client.js +87 -0
  33. package/dist/cli/lib/portal-client.js.map +1 -0
  34. package/dist/cli/lib/upload.d.ts +54 -0
  35. package/dist/cli/lib/upload.d.ts.map +1 -0
  36. package/dist/cli/lib/upload.js +75 -0
  37. package/dist/cli/lib/upload.js.map +1 -0
  38. package/dist/index.d.ts +6 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +2 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/manifest-lint-cli.js +5 -16
  43. package/dist/manifest-lint-cli.js.map +1 -1
  44. package/dist/relay/relay-client.d.ts.map +1 -1
  45. package/dist/relay/relay-client.js +25 -5
  46. package/dist/relay/relay-client.js.map +1 -1
  47. package/dist/runtime.d.ts +38 -0
  48. package/dist/runtime.d.ts.map +1 -1
  49. package/dist/runtime.js +92 -5
  50. package/dist/runtime.js.map +1 -1
  51. package/dist/ui/asset-filename-rule.d.ts +18 -0
  52. package/dist/ui/asset-filename-rule.d.ts.map +1 -0
  53. package/dist/ui/asset-filename-rule.js +39 -0
  54. package/dist/ui/asset-filename-rule.js.map +1 -0
  55. package/dist/ui/assets-manifest.d.ts +19 -0
  56. package/dist/ui/assets-manifest.d.ts.map +1 -0
  57. package/dist/ui/assets-manifest.js +128 -0
  58. package/dist/ui/assets-manifest.js.map +1 -0
  59. package/dist/ui/serve-built-ui.d.ts +28 -0
  60. package/dist/ui/serve-built-ui.d.ts.map +1 -0
  61. package/dist/ui/serve-built-ui.js +131 -0
  62. package/dist/ui/serve-built-ui.js.map +1 -0
  63. package/dist/ui/shell-watchdog.d.ts +12 -0
  64. package/dist/ui/shell-watchdog.d.ts.map +1 -0
  65. package/dist/ui/shell-watchdog.js +25 -0
  66. package/dist/ui/shell-watchdog.js.map +1 -0
  67. package/package.json +3 -1
  68. package/skill/README.md +14 -0
  69. package/skill/SKILL.md +124 -0
  70. package/skill/references/errors.md +68 -0
@@ -0,0 +1,219 @@
1
+ import crypto from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { spawnSync } from 'node:child_process';
6
+ export class PackagePolicyError extends Error {
7
+ code;
8
+ details;
9
+ constructor(message, code, details = []) {
10
+ super(message);
11
+ this.code = code;
12
+ this.details = details;
13
+ this.name = 'PackagePolicyError';
14
+ }
15
+ }
16
+ export const ENTRY_LIMIT = 20_000;
17
+ export const MAX_FILE_BYTES = 50 * 1024 * 1024;
18
+ export const MAX_TOTAL_BYTES = 200 * 1024 * 1024;
19
+ const REQUIRED_ROOT_ENTRIES = ['privos-app.json', 'Dockerfile'];
20
+ // Mirrors the awk rules in `scripts/package-source.sh`'s `bad_entries` check.
21
+ const DENIED_DIR_PATTERN = /(^|\/)(node_modules|dist|dist-source|\.recyclebin|\.git)(\/|$)|(^|\/)\.privos\/skills(\/|$)/;
22
+ const DENIED_ENV_PATTERN = /(^|\/)\.env(\.|$)/;
23
+ const PARENT_TRAVERSAL_PATTERN = /\.\./;
24
+ const CREDENTIAL_ENTRY_PATTERN = /(^|\/)id_rsa|\.pem$|\.key$/;
25
+ export function isDeniedArchiveEntry(entryName) {
26
+ return (DENIED_DIR_PATTERN.test(entryName)
27
+ || DENIED_ENV_PATTERN.test(entryName)
28
+ || PARENT_TRAVERSAL_PATTERN.test(entryName)
29
+ || CREDENTIAL_ENTRY_PATTERN.test(entryName)
30
+ || entryName.toLowerCase().includes('credentials'));
31
+ }
32
+ /**
33
+ * Reads entry names + uncompressed sizes from a ZIP's central directory —
34
+ * the same source `unzip -Z1` reads from, never from `git ls-tree` (a git
35
+ * tree cannot reflect `.gitattributes export-ignore` or `--allow-dirty`
36
+ * untracked additions the way the produced archive does).
37
+ */
38
+ export function readZipCentralDirectoryEntries(buffer) {
39
+ const EOCD_SIGNATURE = 0x06054b50;
40
+ const CENTRAL_DIRECTORY_SIGNATURE = 0x02014b50;
41
+ const EOCD_MIN_SIZE = 22;
42
+ const MAX_COMMENT_SIZE = 65_535;
43
+ let eocdOffset = -1;
44
+ const searchFloor = Math.max(0, buffer.length - EOCD_MIN_SIZE - MAX_COMMENT_SIZE);
45
+ for (let offset = buffer.length - EOCD_MIN_SIZE; offset >= searchFloor; offset -= 1) {
46
+ if (buffer.readUInt32LE(offset) === EOCD_SIGNATURE) {
47
+ eocdOffset = offset;
48
+ break;
49
+ }
50
+ }
51
+ if (eocdOffset < 0)
52
+ throw new PackagePolicyError('Archive is not a valid ZIP file (no end-of-central-directory record found).', 'INVALID_ZIP');
53
+ const totalEntries = buffer.readUInt16LE(eocdOffset + 10);
54
+ const centralDirectoryOffset = buffer.readUInt32LE(eocdOffset + 16);
55
+ const entries = [];
56
+ let offset = centralDirectoryOffset;
57
+ for (let index = 0; index < totalEntries; index += 1) {
58
+ if (offset + 46 > buffer.length || buffer.readUInt32LE(offset) !== CENTRAL_DIRECTORY_SIGNATURE) {
59
+ throw new PackagePolicyError('Archive central directory is corrupt or truncated.', 'INVALID_ZIP');
60
+ }
61
+ const uncompressedSize = buffer.readUInt32LE(offset + 24);
62
+ const nameLength = buffer.readUInt16LE(offset + 28);
63
+ const extraLength = buffer.readUInt16LE(offset + 30);
64
+ const commentLength = buffer.readUInt16LE(offset + 32);
65
+ const nameStart = offset + 46;
66
+ const name = buffer.toString('utf8', nameStart, nameStart + nameLength);
67
+ entries.push({ name, uncompressedSize, isDirectory: name.endsWith('/') });
68
+ offset = nameStart + nameLength + extraLength + commentLength;
69
+ }
70
+ return entries;
71
+ }
72
+ /** Pure policy evaluation over an already-read entry list — kept separate from I/O for fast unit tests. */
73
+ export function evaluateArchiveEntries(entries) {
74
+ const names = entries.map((entry) => entry.name);
75
+ for (const required of REQUIRED_ROOT_ENTRIES) {
76
+ if (!names.includes(required)) {
77
+ throw new PackagePolicyError(`Archive is missing required root entry: ${required}`, 'MISSING_REQUIRED_ENTRY', [required]);
78
+ }
79
+ }
80
+ const denied = names.filter(isDeniedArchiveEntry);
81
+ if (denied.length > 0) {
82
+ throw new PackagePolicyError('Unsafe or denied paths found in source archive.', 'DENIED_PATH_IN_ARCHIVE', denied);
83
+ }
84
+ if (entries.length > ENTRY_LIMIT) {
85
+ throw new PackagePolicyError(`Archive holds ${entries.length} entries; marketplace limit is ${ENTRY_LIMIT}.`, 'ENTRY_LIMIT_EXCEEDED');
86
+ }
87
+ const oversizedFiles = entries.filter((entry) => !entry.isDirectory && entry.uncompressedSize > MAX_FILE_BYTES).map((entry) => entry.name);
88
+ if (oversizedFiles.length > 0) {
89
+ throw new PackagePolicyError(`Archive contains file(s) exceeding the ${MAX_FILE_BYTES} byte per-file limit.`, 'FILE_SIZE_EXCEEDED', oversizedFiles);
90
+ }
91
+ }
92
+ /** Recursively scans the worktree for credential-like files, mirroring the `find` guard in `scripts/package-source.sh`. */
93
+ export function findCredentialLikeFiles(root) {
94
+ const skipDirectories = new Set(['.git', 'node_modules', 'dist-source']);
95
+ const matches = [];
96
+ const walk = (dir) => {
97
+ let dirEntries;
98
+ try {
99
+ dirEntries = fs.readdirSync(dir, { withFileTypes: true });
100
+ }
101
+ catch {
102
+ return;
103
+ }
104
+ for (const entry of dirEntries) {
105
+ const fullPath = path.join(dir, entry.name);
106
+ if (entry.isSymbolicLink())
107
+ continue;
108
+ if (entry.isDirectory()) {
109
+ if (skipDirectories.has(entry.name))
110
+ continue;
111
+ walk(fullPath);
112
+ continue;
113
+ }
114
+ if (!entry.isFile())
115
+ continue;
116
+ const name = entry.name;
117
+ const lowerName = name.toLowerCase();
118
+ const isDottedEnv = name.startsWith('.env.') && name !== '.env.example';
119
+ const isPem = name.endsWith('.pem');
120
+ const isKeyFile = name.endsWith('.key');
121
+ const isIdRsa = name.startsWith('id_rsa');
122
+ const isCredentialsFile = lowerName.includes('credentials');
123
+ if (isDottedEnv || isPem || isKeyFile || isIdRsa || isCredentialsFile) {
124
+ matches.push(path.relative(root, fullPath));
125
+ }
126
+ }
127
+ };
128
+ walk(root);
129
+ return matches;
130
+ }
131
+ function runGit(args, cwd, env) {
132
+ const result = spawnSync('git', args, { cwd, env: env ?? process.env, encoding: 'utf8', maxBuffer: 1024 * 1024 * 1024 });
133
+ return { stdout: result.stdout ?? '', stderr: result.stderr ?? '', status: result.status };
134
+ }
135
+ /**
136
+ * Packages the git worktree at `options.cwd` into a zip archive, applying the
137
+ * same safety policy as `scripts/package-source.sh` (dirty-tree refusal,
138
+ * credential-file scan, denied-path/entry-count/size limits, required root
139
+ * entries), and reads the produced archive's entries from its ZIP central
140
+ * directory. Throws {@link PackagePolicyError} on any violation.
141
+ */
142
+ export function packageSource(options) {
143
+ const toplevel = runGit(['rev-parse', '--show-toplevel'], options.cwd);
144
+ if (toplevel.status !== 0) {
145
+ throw new PackagePolicyError(`Not inside a git repository: ${options.cwd}`, 'NOT_GIT_REPOSITORY');
146
+ }
147
+ const repoRoot = toplevel.stdout.trim();
148
+ const headRevision = runGit(['rev-parse', 'HEAD'], repoRoot);
149
+ if (headRevision.status !== 0) {
150
+ throw new PackagePolicyError('Unable to resolve HEAD (repository has no commits).', 'NOT_GIT_REPOSITORY');
151
+ }
152
+ const gitRevision = headRevision.stdout.trim();
153
+ if (!options.allowDirty) {
154
+ const status = runGit(['status', '--porcelain', '--untracked-files=all'], repoRoot);
155
+ if (status.stdout.trim().length > 0) {
156
+ throw new PackagePolicyError('Refusing to package a dirty tree. Commit intended source files, or inspect them and use --allow-dirty.', 'DIRTY_TREE');
157
+ }
158
+ }
159
+ const credentialFiles = findCredentialLikeFiles(repoRoot);
160
+ if (credentialFiles.length > 0) {
161
+ throw new PackagePolicyError('Unsafe credential-like files are present in the working tree. Move or remove them before packaging.', 'CREDENTIAL_FILE_FOUND', credentialFiles);
162
+ }
163
+ const outputDir = options.outputDir ?? 'dist-source';
164
+ const outputDirAbsolute = path.join(repoRoot, outputDir);
165
+ fs.mkdirSync(outputDirAbsolute, { recursive: true });
166
+ const safeName = options.name.replaceAll('/', '-');
167
+ const archivePath = path.join(outputDirAbsolute, `${safeName}-${options.version}.zip`);
168
+ let treeish = 'HEAD';
169
+ let tempIndexDir;
170
+ try {
171
+ if (options.allowDirty) {
172
+ tempIndexDir = fs.mkdtempSync(path.join(os.tmpdir(), 'privos-app-package-source-'));
173
+ const indexPath = path.join(tempIndexDir, 'index');
174
+ const gitEnv = { ...process.env, GIT_INDEX_FILE: indexPath };
175
+ const readTree = runGit(['read-tree', 'HEAD'], repoRoot, gitEnv);
176
+ if (readTree.status !== 0)
177
+ throw new PackagePolicyError(`git read-tree failed: ${readTree.stderr.trim()}`, 'GIT_ARCHIVE_FAILED');
178
+ const addAll = runGit(['add', '--all'], repoRoot, gitEnv);
179
+ if (addAll.status !== 0)
180
+ throw new PackagePolicyError(`git add --all failed: ${addAll.stderr.trim()}`, 'GIT_ARCHIVE_FAILED');
181
+ const writeTree = runGit(['write-tree'], repoRoot, gitEnv);
182
+ if (writeTree.status !== 0)
183
+ throw new PackagePolicyError(`git write-tree failed: ${writeTree.stderr.trim()}`, 'GIT_ARCHIVE_FAILED');
184
+ treeish = writeTree.stdout.trim();
185
+ }
186
+ fs.rmSync(archivePath, { force: true });
187
+ const archiveResult = runGit(['archive', '--format=zip', `--output=${archivePath}`, treeish], repoRoot);
188
+ if (archiveResult.status !== 0) {
189
+ throw new PackagePolicyError(`git archive failed: ${archiveResult.stderr.trim()}`, 'GIT_ARCHIVE_FAILED');
190
+ }
191
+ }
192
+ finally {
193
+ if (tempIndexDir)
194
+ fs.rmSync(tempIndexDir, { recursive: true, force: true });
195
+ }
196
+ const archiveBuffer = fs.readFileSync(archivePath);
197
+ try {
198
+ const zipEntries = readZipCentralDirectoryEntries(archiveBuffer);
199
+ evaluateArchiveEntries(zipEntries);
200
+ if (archiveBuffer.length > MAX_TOTAL_BYTES) {
201
+ throw new PackagePolicyError(`Archive is ${archiveBuffer.length} bytes; marketplace limit is ${MAX_TOTAL_BYTES} bytes.`, 'TOTAL_SIZE_EXCEEDED');
202
+ }
203
+ const sha256 = crypto.createHash('sha256').update(archiveBuffer).digest('hex');
204
+ return {
205
+ archivePath,
206
+ sha256,
207
+ bytes: archiveBuffer.length,
208
+ entries: zipEntries.map((entry) => entry.name),
209
+ filePaths: zipEntries.filter((entry) => !entry.isDirectory).map((entry) => entry.name),
210
+ gitRevision,
211
+ repoRoot,
212
+ };
213
+ }
214
+ catch (error) {
215
+ fs.rmSync(archivePath, { force: true });
216
+ throw error;
217
+ }
218
+ }
219
+ //# sourceMappingURL=package-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-source.js","sourceRoot":"","sources":["../../../src/cli/lib/package-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Thin fetch wrapper for the `/api/cloud/marketplace/*` publish routes: JSON
3
+ * request/response, retry-after-driven backoff on transient 429/5xx, and a
4
+ * typed {@link PortalError} carrying the Portal's `code` for callers that
5
+ * branch on specific wire-contract error codes (`VERSION_SEMVER_EXISTS`,
6
+ * `PUBLISH_GRANT_EXPIRED`, `PUBLISH_GRANT_MISMATCH`, `LISTING_NOT_BOUND`,
7
+ * `LISTING_UNRESOLVED`, RFC 8628 `slow_down`, …).
8
+ */
9
+ export declare class PortalError extends Error {
10
+ readonly status: number;
11
+ readonly code?: string | undefined;
12
+ readonly retryAfterMs?: number | undefined;
13
+ constructor(message: string, status: number, code?: string | undefined, retryAfterMs?: number | undefined);
14
+ }
15
+ export type PortalRequestInit = Readonly<{
16
+ method?: string;
17
+ /** Bearer token: publisher token (`pvp_…`), publish grant (`pvg_…`), or none (anonymous create). */
18
+ token?: string;
19
+ body?: unknown;
20
+ }>;
21
+ export type PortalClientOptions = Readonly<{
22
+ origin: string;
23
+ basePath?: string;
24
+ fetchImpl?: typeof fetch;
25
+ maxRetries?: number;
26
+ sleepImpl?: (ms: number) => Promise<void>;
27
+ }>;
28
+ export declare function parseRetryAfterMs(header: string | null): number | undefined;
29
+ export declare class PortalClient {
30
+ private readonly origin;
31
+ private readonly basePath;
32
+ private readonly fetchImpl;
33
+ private readonly maxRetries;
34
+ private readonly sleepImpl;
35
+ constructor(options: PortalClientOptions);
36
+ request<T>(path: string, init?: PortalRequestInit): Promise<T>;
37
+ }
38
+ //# sourceMappingURL=portal-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-client.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/portal-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,qBAAa,WAAY,SAAQ,KAAK;aAGpB,MAAM,EAAE,MAAM;aACd,IAAI,CAAC,EAAE,MAAM;aACb,YAAY,CAAC,EAAE,MAAM;gBAHrC,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,YAAY,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oGAAoG;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C,CAAC,CAAC;AASH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAM3E;AAED,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;gBAE9C,OAAO,EAAE,mBAAmB;IAQlC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;CAoCxE"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Thin fetch wrapper for the `/api/cloud/marketplace/*` publish routes: JSON
3
+ * request/response, retry-after-driven backoff on transient 429/5xx, and a
4
+ * typed {@link PortalError} carrying the Portal's `code` for callers that
5
+ * branch on specific wire-contract error codes (`VERSION_SEMVER_EXISTS`,
6
+ * `PUBLISH_GRANT_EXPIRED`, `PUBLISH_GRANT_MISMATCH`, `LISTING_NOT_BOUND`,
7
+ * `LISTING_UNRESOLVED`, RFC 8628 `slow_down`, …).
8
+ */
9
+ export class PortalError extends Error {
10
+ status;
11
+ code;
12
+ retryAfterMs;
13
+ constructor(message, status, code, retryAfterMs) {
14
+ super(message);
15
+ this.status = status;
16
+ this.code = code;
17
+ this.retryAfterMs = retryAfterMs;
18
+ this.name = 'PortalError';
19
+ }
20
+ }
21
+ const DEFAULT_BASE_PATH = '/api/cloud/marketplace';
22
+ const DEFAULT_MAX_RETRIES = 5;
23
+ function defaultSleep(ms) {
24
+ return new Promise((resolve) => setTimeout(resolve, ms));
25
+ }
26
+ export function parseRetryAfterMs(header) {
27
+ if (!header)
28
+ return undefined;
29
+ if (/^\d+$/.test(header))
30
+ return Number(header) * 1000;
31
+ const parsed = Date.parse(header);
32
+ if (Number.isNaN(parsed))
33
+ return undefined;
34
+ return Math.max(0, parsed - Date.now());
35
+ }
36
+ export class PortalClient {
37
+ origin;
38
+ basePath;
39
+ fetchImpl;
40
+ maxRetries;
41
+ sleepImpl;
42
+ constructor(options) {
43
+ this.origin = options.origin.replace(/\/+$/, '');
44
+ this.basePath = options.basePath ?? DEFAULT_BASE_PATH;
45
+ this.fetchImpl = options.fetchImpl ?? fetch;
46
+ this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
47
+ this.sleepImpl = options.sleepImpl ?? defaultSleep;
48
+ }
49
+ async request(path, init = {}) {
50
+ const method = init.method ?? 'GET';
51
+ const url = `${this.origin}${this.basePath}${path}`;
52
+ let attempt = 0;
53
+ for (;;) {
54
+ const response = await this.fetchImpl(url, {
55
+ method,
56
+ headers: {
57
+ ...(init.token ? { Authorization: `Bearer ${init.token}` } : {}),
58
+ ...(init.body === undefined ? {} : { 'Content-Type': 'application/json' }),
59
+ },
60
+ body: init.body === undefined ? undefined : JSON.stringify(init.body),
61
+ });
62
+ const text = await response.text();
63
+ let parsed;
64
+ try {
65
+ parsed = text ? JSON.parse(text) : {};
66
+ }
67
+ catch {
68
+ parsed = { raw: text.slice(0, 500) };
69
+ }
70
+ if (response.ok)
71
+ return parsed;
72
+ const record = parsed;
73
+ const code = typeof record?.code === 'string' ? record.code : undefined;
74
+ const retryAfterMs = parseRetryAfterMs(response.headers.get('retry-after'));
75
+ const transient = response.status === 429 || (response.status >= 500 && response.status < 600);
76
+ if (transient && attempt < this.maxRetries) {
77
+ const backoffMs = retryAfterMs ?? Math.min(30_000, 1_000 * 2 ** attempt);
78
+ await this.sleepImpl(backoffMs);
79
+ attempt += 1;
80
+ continue;
81
+ }
82
+ const message = typeof record?.message === 'string' ? record.message : `${method} ${path} failed (${response.status})`;
83
+ throw new PortalError(message, response.status, code, retryAfterMs);
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=portal-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-client.js","sourceRoot":"","sources":["../../../src/cli/lib/portal-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { PortalClient } from './portal-client.js';
2
+ /** Portal's `express.json()` body limit is 10 MB; base64 inflates bytes ~1.37x, so 5 MB parts stay well under it. */
3
+ export declare const DEFAULT_PART_SIZE_BYTES: number;
4
+ export type UploadSession = Readonly<{
5
+ uploadId: string;
6
+ }>;
7
+ export declare function createUploadSession(client: PortalClient, token: string, listingId: string, request: Readonly<{
8
+ fileName: string;
9
+ totalBytes: number;
10
+ paths: readonly string[];
11
+ }>): Promise<UploadSession>;
12
+ /**
13
+ * Uploads `buffer` as base64 parts, one at a time (sequential — never
14
+ * concurrent), retrying transient 5xx/429 per-part via {@link PortalClient}'s
15
+ * own retry-after backoff.
16
+ */
17
+ export declare function uploadPartsSequentially(client: PortalClient, token: string, uploadId: string, buffer: Buffer, partSizeBytes?: number, onProgress?: (part: number, totalParts: number) => void): Promise<number>;
18
+ export type CompleteUploadResult = Readonly<{
19
+ sha256: string;
20
+ uploadId: string;
21
+ manifestDigest: string;
22
+ manifest: Record<string, unknown>;
23
+ }>;
24
+ export declare function completeUpload(client: PortalClient, token: string, uploadId: string): Promise<CompleteUploadResult>;
25
+ export type CreatedVersion = Readonly<{
26
+ id: string;
27
+ semver: string;
28
+ state: string;
29
+ }>;
30
+ export declare function createVersion(client: PortalClient, token: string, listingId: string, request: Readonly<{
31
+ semver: string;
32
+ uploadId: string;
33
+ changelog: string;
34
+ }>): Promise<CreatedVersion>;
35
+ export declare function submitVersion(client: PortalClient, token: string, listingId: string, versionId: string): Promise<void>;
36
+ export type ListingVersion = Readonly<{
37
+ id: string;
38
+ semver: string;
39
+ state: string;
40
+ }> & Record<string, unknown>;
41
+ export type ListingDetail = Readonly<{
42
+ listing: Record<string, unknown>;
43
+ versions: readonly ListingVersion[];
44
+ events?: readonly Record<string, unknown>[];
45
+ }>;
46
+ export declare function getListingDetail(client: PortalClient, token: string, listingId: string): Promise<ListingDetail>;
47
+ export type WaitForPreflightOptions = Readonly<{
48
+ timeoutMs?: number;
49
+ pollMs?: number;
50
+ sleepImpl?: (ms: number) => Promise<void>;
51
+ }>;
52
+ /** Polls listing detail up to `timeoutMs` (default 60 s) while the version sits in `PREFLIGHT_PENDING`. */
53
+ export declare function waitForPreflight(client: PortalClient, token: string, listingId: string, versionId: string, options?: WaitForPreflightOptions): Promise<ListingVersion | undefined>;
54
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /** Portal's `express.json()` body limit is 10 MB; base64 inflates bytes ~1.37x, so 5 MB parts stay well under it. */
2
+ export const DEFAULT_PART_SIZE_BYTES = 5 * 1024 * 1024;
3
+ export async function createUploadSession(client, token, listingId, request) {
4
+ const response = await client.request(`/creator/listings/${listingId}/uploads`, {
5
+ method: 'POST',
6
+ token,
7
+ body: {
8
+ fileName: request.fileName,
9
+ totalBytes: request.totalBytes,
10
+ kind: 'APP_SOURCE',
11
+ paths: request.paths,
12
+ },
13
+ });
14
+ const upload = response.upload;
15
+ const uploadId = upload?.id;
16
+ if (typeof uploadId !== 'string' || !uploadId)
17
+ throw new Error('Portal did not return an upload session id.');
18
+ return { uploadId };
19
+ }
20
+ /**
21
+ * Uploads `buffer` as base64 parts, one at a time (sequential — never
22
+ * concurrent), retrying transient 5xx/429 per-part via {@link PortalClient}'s
23
+ * own retry-after backoff.
24
+ */
25
+ export async function uploadPartsSequentially(client, token, uploadId, buffer, partSizeBytes = DEFAULT_PART_SIZE_BYTES, onProgress) {
26
+ const totalParts = Math.max(1, Math.ceil(buffer.length / partSizeBytes));
27
+ for (let index = 0; index < totalParts; index += 1) {
28
+ const start = index * partSizeBytes;
29
+ const end = Math.min(buffer.length, start + partSizeBytes);
30
+ const chunk = buffer.subarray(start, end);
31
+ await client.request(`/creator/uploads/${uploadId}/parts/${index + 1}`, {
32
+ method: 'PUT',
33
+ token,
34
+ body: { dataBase64: chunk.toString('base64') },
35
+ });
36
+ onProgress?.(index + 1, totalParts);
37
+ }
38
+ return totalParts;
39
+ }
40
+ export async function completeUpload(client, token, uploadId) {
41
+ const response = await client.request(`/creator/uploads/${uploadId}/complete`, { method: 'POST', token, body: {} });
42
+ return {
43
+ sha256: String(response.sha256),
44
+ uploadId: String(response.uploadId ?? uploadId),
45
+ manifestDigest: String(response.manifestDigest),
46
+ manifest: response.manifest ?? {},
47
+ };
48
+ }
49
+ export async function createVersion(client, token, listingId, request) {
50
+ const response = await client.request(`/creator/listings/${listingId}/versions`, { method: 'POST', token, body: request });
51
+ const version = response.version;
52
+ return { id: String(version.id), semver: String(version.semver), state: String(version.state) };
53
+ }
54
+ export async function submitVersion(client, token, listingId, versionId) {
55
+ await client.request(`/creator/listings/${listingId}/submit`, { method: 'POST', token, body: { versionId } });
56
+ }
57
+ export async function getListingDetail(client, token, listingId) {
58
+ return client.request(`/creator/listings/${listingId}`, { method: 'GET', token });
59
+ }
60
+ /** Polls listing detail up to `timeoutMs` (default 60 s) while the version sits in `PREFLIGHT_PENDING`. */
61
+ export async function waitForPreflight(client, token, listingId, versionId, options = {}) {
62
+ const timeoutMs = options.timeoutMs ?? 60_000;
63
+ const pollMs = options.pollMs ?? 1_000;
64
+ const sleepImpl = options.sleepImpl ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
65
+ const deadline = Date.now() + timeoutMs;
66
+ let detail = await getListingDetail(client, token, listingId);
67
+ let version = detail.versions.find((item) => item.id === versionId);
68
+ while (version?.state === 'PREFLIGHT_PENDING' && Date.now() < deadline) {
69
+ await sleepImpl(pollMs);
70
+ detail = await getListingDetail(client, token, listingId);
71
+ version = detail.versions.find((item) => item.id === versionId);
72
+ }
73
+ return version;
74
+ }
75
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/cli/lib/upload.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export { verifyUserToken, verifyPrivosUser, clearJwksCache, } from './auth/user-
12
12
  export type { JsonRpcId, JsonRpcErrorObject, McpRequest, McpNotification, McpResponse, ApplicationMcpRequest, ApplicationMcpMethod, } from './protocol/types.js';
13
13
  export { PARSE_ERROR, INVALID_REQUEST, METHOD_NOT_FOUND, INVALID_PARAMS, INTERNAL_ERROR, SERVER_BUSY, jsonRpcError, normalizeThrownError, } from './protocol/errors.js';
14
14
  export { parseJsonRpcMessage, parseJsonText, isMcpNotificationMethod, } from './protocol/dispatch.js';
15
- export type { AppMcpHandler, AppErrorMapper, CallerCredentialExtractor, CallerCredentialResolution, UiResourceProvider, RuntimeLimits, AppServerRuntimeOptions, DispatchOutcome, RelayCallerAuthSurface, } from './runtime.js';
15
+ export type { AppMcpHandler, AppErrorMapper, CallerCredentialExtractor, CallerCredentialResolution, UiResourceProvider, UiAssetContent, RuntimeLimits, AppServerRuntimeOptions, DispatchOutcome, RelayCallerAuthSurface, } from './runtime.js';
16
16
  export { AppServerRuntime, DEFAULT_MAX_MESSAGE_BYTES, DEFAULT_MAX_BUFFERED_BYTES, encodeInFlightId, extractDirectCallerCredential, relayCallerAuthSurface, resolveCallerCredential, ephemeralSessionScope, } from './runtime.js';
17
17
  export { createDirectRouter } from './direct/express-router.js';
18
18
  export type { DirectRouterOptions } from './direct/express-router.js';
@@ -45,4 +45,9 @@ export { createPinnedPortalJwksResolverV3, createPublisherRuntimeTrustProvisioni
45
45
  export type { PublisherPortalJwksResolutionV3, PublisherPortalJwksResolverV3, PublisherRuntimeTrustActiveEvidenceV3, PublisherRuntimeTrustDurableStoreV3, PublisherRuntimeTrustEvidenceV3, PublisherRuntimeTrustOperationV3, PublisherRuntimeTrustPreparedEvidenceV3, PublisherRuntimeTrustProvisioningRequestV3, PublisherRuntimeTrustProvisioningRouterOptionsV3, PublisherRuntimeTrustStoreMutationV3, } from './workload/publisher-runtime-trust.js';
46
46
  export { canonicalJson, canonicalJsonValue, lintManifest, lintManifestV2, sha256CanonicalJson, SUPPORTED_MANIFEST_SCHEMA_VERSIONS, } from './manifest-tools.js';
47
47
  export type { ManifestLintResult } from './manifest-tools.js';
48
+ export { serveBuiltUi } from './ui/serve-built-ui.js';
49
+ export type { ServeBuiltUi, ServeBuiltUiOptions } from './ui/serve-built-ui.js';
50
+ export { MCP_UI_ASSET_FILENAME_RE, MCP_UI_ASSET_EXTENSIONS, deriveAssetUriPrefix, } from './ui/asset-filename-rule.js';
51
+ export type { McpUiAssetExtension } from './ui/asset-filename-rule.js';
52
+ export type { AssetManifestEntry, AssetsManifest } from './ui/assets-manifest.js';
48
53
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -23,4 +23,6 @@ export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError,
23
23
  export { BoundedRuntimeDispatchReplayConsumerV3, assertRuntimeDispatchRelayAffinityV3, assertRuntimeDispatchTrustConfigurationV3, extractRuntimeDispatchRelayEnvelopeV3, isExactRuntimeReadinessRpcV3, isUnsignedRuntimeReadinessRpcV3, parseRuntimeDispatchTrustV3Json, sha256RuntimeDispatchBodyV3, verifyClusterDispatchAssertionV3, verifyDispatchAssertion, verifyRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.js';
24
24
  export { createPinnedPortalJwksResolverV3, createPublisherRuntimeTrustProvisioningRouterV3, SingleProcessFilePublisherRuntimeTrustStoreV3, } from './workload/publisher-runtime-trust.js';
25
25
  export { canonicalJson, canonicalJsonValue, lintManifest, lintManifestV2, sha256CanonicalJson, SUPPORTED_MANIFEST_SCHEMA_VERSIONS, } from './manifest-tools.js';
26
+ export { serveBuiltUi } from './ui/serve-built-ui.js';
27
+ export { MCP_UI_ASSET_FILENAME_RE, MCP_UI_ASSET_EXTENSIONS, deriveAssetUriPrefix, } from './ui/asset-filename-rule.js';
26
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQxE,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,8BAA8B,EAC9B,6BAA6B,GAC7B,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,GAC1B,MAAM,kCAAkC,CAAC;AAO1C,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,cAAc,GACd,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACN,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,uBAAuB,GACvB,MAAM,wBAAwB,CAAC;AAchC,OAAO,EACN,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACN,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EACN,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;AAYjC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EACN,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACN,gCAAgC,EAChC,wCAAwC,EACxC,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,gCAAgC,EAChC,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,oCAAoC,EACpC,wCAAwC,GACxC,MAAM,gCAAgC,CAAC;AAQxC,OAAO,EACN,+BAA+B,EAC/B,8BAA8B,EAC9B,sCAAsC,EACtC,sCAAsC,EACtC,sBAAsB,EACtB,yBAAyB,EACzB,uCAAuC,EACvC,qCAAqC,GACrC,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EACN,wBAAwB,EACxB,8BAA8B,GAC9B,MAAM,iCAAiC,CAAC;AAOzC,OAAO,EACN,4BAA4B,EAC5B,yBAAyB,EACzB,yCAAyC,EACzC,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,8BAA8B,EAC9B,sCAAsC,GACtC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACN,uBAAuB,EACvB,2CAA2C,EAC3C,oCAAoC,EACpC,6BAA6B,EAC7B,2BAA2B,GAC3B,MAAM,mCAAmC,CAAC;AAO3C,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AASlE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQzE,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,yBAAyB,GACzB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EACN,sCAAsC,EACtC,oCAAoC,EACpC,yCAAyC,EACzC,qCAAqC,EACrC,4BAA4B,EAC5B,+BAA+B,EAC/B,+BAA+B,EAC/B,2BAA2B,EAC3B,gCAAgC,EAChC,uBAAuB,EACvB,gCAAgC,GAChC,MAAM,kCAAkC,CAAC;AAkB1C,OAAO,EACN,gCAAgC,EAChC,+CAA+C,EAC/C,6CAA6C,GAC7C,MAAM,uCAAuC,CAAC;AAc/C,OAAO,EACN,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kCAAkC,GAClC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EACN,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,GACpB,MAAM,6BAA6B,CAAC"}
@@ -1,18 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { lintManifest } from './manifest-tools.js';
5
- const manifestPath = path.resolve(process.argv[2] || 'privos-app.json');
6
- let manifest;
7
- try {
8
- manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
9
- }
10
- catch {
11
- console.error(JSON.stringify({ valid: false, errors: [`Unable to read valid JSON from ${manifestPath}`] }, null, 2));
12
- process.exit(1);
13
- }
14
- const result = lintManifest(manifest);
15
- console.log(JSON.stringify({ manifestPath, ...result }, null, 2));
16
- if (!result.valid)
17
- process.exit(1);
2
+ // Compatibility alias for `privos-app lint`: kept as its own bin entry
3
+ // (`privos-app-lint`) with byte-identical output and exit code, delegating
4
+ // to the same implementation so the two can never drift.
5
+ import { runLint } from './cli/commands/lint.js';
6
+ process.exit(runLint(process.argv.slice(2)));
18
7
  //# sourceMappingURL=manifest-lint-cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-lint-cli.js","sourceRoot":"","sources":["../src/manifest-lint-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC;AACxE,IAAI,QAAiB,CAAC;AACtB,IAAI,CAAC;IACJ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAAC,MAAM,CAAC;IACR,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,kCAAkC,YAAY,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,IAAI,CAAC,MAAM,CAAC,KAAK;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"manifest-lint-cli.js","sourceRoot":"","sources":["../src/manifest-lint-cli.ts"],"names":[],"mappings":";AACA,uEAAuE;AACvE,2EAA2E;AAC3E,yDAAyD;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}