@helix3/helix-cli 0.1.14-helix3.170 → 0.1.14-helix3.172
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/dist/api.d.ts +4 -0
- package/dist/api.js +14 -0
- package/dist/api.js.map +1 -1
- package/dist/continuum/cli.d.ts +4 -0
- package/dist/continuum/cli.js +35 -1
- package/dist/continuum/cli.js.map +1 -1
- package/dist/continuum/client.d.ts +6 -0
- package/dist/continuum/client.js +6 -0
- package/dist/continuum/client.js.map +1 -1
- package/dist/continuum/index.d.ts +2 -0
- package/dist/continuum/index.js +2 -0
- package/dist/continuum/index.js.map +1 -1
- package/dist/continuum/pull.d.ts +22 -0
- package/dist/continuum/pull.js +43 -0
- package/dist/continuum/pull.js.map +1 -0
- package/dist/continuum/sourceBundle.d.ts +18 -0
- package/dist/continuum/sourceBundle.js +160 -0
- package/dist/continuum/sourceBundle.js.map +1 -0
- package/dist/continuum/workflow.js +32 -3
- package/dist/continuum/workflow.js.map +1 -1
- package/dist/device.js +1 -1
- package/dist/device.js.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/api.d.ts
CHANGED
|
@@ -18,6 +18,10 @@ export declare class HelixApi {
|
|
|
18
18
|
setToken(token: string): void;
|
|
19
19
|
request<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
20
20
|
requestItem<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
21
|
+
requestBytes(path: string): Promise<{
|
|
22
|
+
bytes: Uint8Array;
|
|
23
|
+
mediaType: string;
|
|
24
|
+
}>;
|
|
21
25
|
postMultipart<T>(path: string, form: FormData): Promise<T>;
|
|
22
26
|
sendMultipart<T>(method: string, path: string, form: FormData): Promise<T>;
|
|
23
27
|
static forCredentials(creds: CliCredentials): HelixApi;
|
package/dist/api.js
CHANGED
|
@@ -59,6 +59,20 @@ class HelixApi {
|
|
|
59
59
|
const envelope = await this.request(method, path, body);
|
|
60
60
|
return envelope.item;
|
|
61
61
|
}
|
|
62
|
+
async requestBytes(path) {
|
|
63
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
64
|
+
method: 'GET',
|
|
65
|
+
headers: this.token ? { authorization: `Bearer ${this.token}` } : {},
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok) {
|
|
68
|
+
const problem = (await res.json().catch(() => ({})));
|
|
69
|
+
throw new ApiError(res.status, problem);
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
bytes: new Uint8Array(await res.arrayBuffer()),
|
|
73
|
+
mediaType: res.headers.get('content-type')?.split(';', 1)[0] ?? 'application/octet-stream',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
62
76
|
// multipart/form-data POST — for the endpoints that take file parts alongside
|
|
63
77
|
// JSON (universal-item uploads). Deliberately does NOT set content-type: the
|
|
64
78
|
// boundary is generated by the runtime and a hand-written header loses it,
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/continuum/cli.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ type CliObject = {
|
|
|
17
17
|
export type ContinuumPackagePublicationFile = Omit<ContinuumPublicationIntent, 'sourceDigest' | 'objects'> & {
|
|
18
18
|
sourceDigest?: string;
|
|
19
19
|
objects: CliObject[];
|
|
20
|
+
sourceDirectory?: {
|
|
21
|
+
path: string;
|
|
22
|
+
audience?: 'private' | 'public';
|
|
23
|
+
};
|
|
20
24
|
};
|
|
21
25
|
export type ContinuumWorldPublicationFile<T> = {
|
|
22
26
|
projectId: string;
|
package/dist/continuum/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
7
7
|
const node_buffer_1 = require("node:buffer");
|
|
8
8
|
const node_path_1 = require("node:path");
|
|
9
9
|
const promises_1 = require("node:fs/promises");
|
|
10
|
+
const sourceBundle_1 = require("./sourceBundle");
|
|
10
11
|
const MAX_DESCRIPTOR_BYTES = 16 * 1024 * 1024;
|
|
11
12
|
const MAX_INLINE_OBJECT_BYTES = 1024 * 1024;
|
|
12
13
|
async function readContinuumPublicationFile(path) {
|
|
@@ -15,7 +16,7 @@ async function readContinuumPublicationFile(path) {
|
|
|
15
16
|
const descriptorPath = descriptor.path;
|
|
16
17
|
const bytes = descriptor.bytes;
|
|
17
18
|
const input = JSON.parse(node_buffer_1.Buffer.from(bytes).toString('utf8'));
|
|
18
|
-
|
|
19
|
+
let sourceDigest = (input.sourceDigest ?? (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex')).toLowerCase();
|
|
19
20
|
const objectPublications = [];
|
|
20
21
|
const descriptorDirectory = await (0, promises_1.realpath)((0, node_path_1.dirname)(descriptorPath));
|
|
21
22
|
for (const object of input.objects ?? []) {
|
|
@@ -32,6 +33,39 @@ async function readContinuumPublicationFile(path) {
|
|
|
32
33
|
objectPublications.push({ reference: object.reference, source: object.source });
|
|
33
34
|
}
|
|
34
35
|
}
|
|
36
|
+
if (input.sourceDirectory !== undefined) {
|
|
37
|
+
if (!input.sourceDirectory || typeof input.sourceDirectory.path !== 'string' || !input.sourceDirectory.path || input.sourceDirectory.path.includes('\0')) {
|
|
38
|
+
throw new TypeError('sourceDirectory.path must be a non-empty descriptor-relative directory');
|
|
39
|
+
}
|
|
40
|
+
if (!input.packageVersion)
|
|
41
|
+
throw new TypeError('sourceDirectory requires packageVersion');
|
|
42
|
+
const sourcePath = (0, node_path_1.resolve)(descriptorDirectory, input.sourceDirectory.path);
|
|
43
|
+
const sourceMetadata = await (0, promises_1.lstat)(sourcePath);
|
|
44
|
+
if (sourceMetadata.isSymbolicLink() || !sourceMetadata.isDirectory())
|
|
45
|
+
throw new TypeError('sourceDirectory must be a real directory');
|
|
46
|
+
const sourceRealPath = await (0, promises_1.realpath)(sourcePath);
|
|
47
|
+
const confinement = (0, node_path_1.relative)(descriptorDirectory, sourceRealPath);
|
|
48
|
+
if (confinement === '..' || confinement.startsWith(`..${node_path_1.sep}`) || (0, node_path_1.isAbsolute)(confinement)) {
|
|
49
|
+
throw new TypeError('sourceDirectory escapes the descriptor directory');
|
|
50
|
+
}
|
|
51
|
+
const built = await (0, sourceBundle_1.buildContinuumSourceBundle)(sourceRealPath);
|
|
52
|
+
const previous = input.packageVersion.source;
|
|
53
|
+
input.packageVersion.source = built.reference;
|
|
54
|
+
input.packageVersion.expectedClosure = {
|
|
55
|
+
objectCount: input.packageVersion.expectedClosure.objectCount + (previous ? 0 : 1),
|
|
56
|
+
totalBytes: input.packageVersion.expectedClosure.totalBytes - (previous?.bytes ?? 0) + built.reference.bytes,
|
|
57
|
+
};
|
|
58
|
+
objectPublications.push({
|
|
59
|
+
reference: built.reference,
|
|
60
|
+
source: {
|
|
61
|
+
kind: 'inline',
|
|
62
|
+
bytes: built.bytes,
|
|
63
|
+
filename: 'continuum-source-bundle.json',
|
|
64
|
+
audience: input.sourceDirectory.audience ?? 'private',
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
sourceDigest = (0, node_crypto_1.createHash)('sha256').update(bytes).update('\0').update(built.bytes).digest('hex');
|
|
68
|
+
}
|
|
35
69
|
return { input, sourceDigest, objectPublications };
|
|
36
70
|
}
|
|
37
71
|
async function readSafeRegularFile(path, maxBytes, label) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/continuum/cli.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/continuum/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ContinuumPackage, ContinuumPackageVersion, ContinuumPackageVersionReference, Listing, WorldRelease } from '@hypersoniclabs/helix-manifest';
|
|
2
2
|
import { HelixApi } from '../api';
|
|
3
3
|
import type { ContinuumLease, ContinuumObjectRecord, ContinuumPublicationApi } from './types';
|
|
4
|
+
import type { ContinuumPackageInspection } from './pull';
|
|
4
5
|
/** Thin transport only. Creator policy and compilation stay out of the backend client. */
|
|
5
6
|
export declare class HelixContinuumApi implements ContinuumPublicationApi {
|
|
6
7
|
private readonly api;
|
|
@@ -18,6 +19,11 @@ export declare class HelixContinuumApi implements ContinuumPublicationApi {
|
|
|
18
19
|
visibility?: 'private' | 'public';
|
|
19
20
|
}): Promise<unknown>;
|
|
20
21
|
createPackageVersion(packageId: string, version: ContinuumPackageVersion): Promise<unknown>;
|
|
22
|
+
inspectPackageVersion(packageId: string, version: string): Promise<ContinuumPackageInspection>;
|
|
23
|
+
readPackageObject(packageId: string, version: string, cid: string): Promise<{
|
|
24
|
+
bytes: Uint8Array;
|
|
25
|
+
mediaType: string;
|
|
26
|
+
}>;
|
|
21
27
|
acquirePackageVersionLease(packageId: string, version: string, input: {
|
|
22
28
|
leaseOwner: string;
|
|
23
29
|
ttlSeconds: number;
|
package/dist/continuum/client.js
CHANGED
|
@@ -52,6 +52,12 @@ class HelixContinuumApi {
|
|
|
52
52
|
async createPackageVersion(packageId, version) {
|
|
53
53
|
return this.api.request('POST', `/api/v1/continuum/packages/${encodeURIComponent(packageId)}/versions`, version);
|
|
54
54
|
}
|
|
55
|
+
async inspectPackageVersion(packageId, version) {
|
|
56
|
+
return this.api.request('GET', `/api/v1/continuum/packages/${encodeURIComponent(packageId)}/versions/${encodeURIComponent(version)}`);
|
|
57
|
+
}
|
|
58
|
+
async readPackageObject(packageId, version, cid) {
|
|
59
|
+
return this.api.requestBytes(`/api/v1/continuum/packages/${encodeURIComponent(packageId)}/versions/${encodeURIComponent(version)}/objects/${encodeURIComponent(cid)}`);
|
|
60
|
+
}
|
|
55
61
|
async acquirePackageVersionLease(packageId, version, input) {
|
|
56
62
|
return unwrap(await this.api.request('POST', `/api/v1/continuum/packages/${encodeURIComponent(packageId)}/versions/${encodeURIComponent(version)}/lease`, input));
|
|
57
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/continuum/client.ts"],"names":[],"mappings":";;;AAAA,6CAAqC;AACrC,6CAAyC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/continuum/client.ts"],"names":[],"mappings":"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"}
|
package/dist/continuum/index.js
CHANGED
|
@@ -18,6 +18,8 @@ __exportStar(require("./authoring"), exports);
|
|
|
18
18
|
__exportStar(require("./client"), exports);
|
|
19
19
|
__exportStar(require("./cli"), exports);
|
|
20
20
|
__exportStar(require("./identity"), exports);
|
|
21
|
+
__exportStar(require("./pull"), exports);
|
|
22
|
+
__exportStar(require("./sourceBundle"), exports);
|
|
21
23
|
__exportStar(require("./state"), exports);
|
|
22
24
|
__exportStar(require("./types"), exports);
|
|
23
25
|
__exportStar(require("./workflow"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/continuum/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,2CAAyB;AACzB,wCAAsB;AACtB,6CAA2B;AAC3B,0CAAwB;AACxB,0CAAwB;AACxB,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/continuum/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,2CAAyB;AACzB,wCAAsB;AACtB,6CAA2B;AAC3B,yCAAuB;AACvB,iDAA+B;AAC/B,0CAAwB;AACxB,0CAAwB;AACxB,6CAA2B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ContinuumPackageVersion } from '@hypersoniclabs/helix-manifest';
|
|
2
|
+
export type ContinuumPackageInspection = {
|
|
3
|
+
packageId: string;
|
|
4
|
+
version: string;
|
|
5
|
+
manifestCid: string;
|
|
6
|
+
manifest: ContinuumPackageVersion;
|
|
7
|
+
};
|
|
8
|
+
export interface ContinuumSourcePullApi {
|
|
9
|
+
inspectPackageVersion(packageId: string, version: string): Promise<ContinuumPackageInspection>;
|
|
10
|
+
readPackageObject(packageId: string, version: string, cid: string): Promise<{
|
|
11
|
+
bytes: Uint8Array;
|
|
12
|
+
mediaType: string;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export declare function pullContinuumPackageSource(api: ContinuumSourcePullApi, packageId: string, version: string, outputDirectory: string): Promise<{
|
|
16
|
+
packageId: string;
|
|
17
|
+
version: string;
|
|
18
|
+
manifestCid: string;
|
|
19
|
+
sourceCid: string;
|
|
20
|
+
directory: string;
|
|
21
|
+
files: string[];
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pullContinuumPackageSource = pullContinuumPackageSource;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const helix_manifest_1 = require("@hypersoniclabs/helix-manifest");
|
|
6
|
+
const promises_1 = require("node:fs/promises");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const helix_manifest_2 = require("@hypersoniclabs/helix-manifest");
|
|
9
|
+
const sourceBundle_1 = require("./sourceBundle");
|
|
10
|
+
async function pullContinuumPackageSource(api, packageId, version, outputDirectory) {
|
|
11
|
+
const inspection = await api.inspectPackageVersion(packageId, version);
|
|
12
|
+
const validation = (0, helix_manifest_1.validateContinuumPackageVersion)(inspection.manifest);
|
|
13
|
+
if (!validation.valid)
|
|
14
|
+
throw new TypeError(`Package Version is invalid: ${validation.errors.join('; ')}`);
|
|
15
|
+
const manifest = validation.manifest;
|
|
16
|
+
if (!manifest.source)
|
|
17
|
+
throw new TypeError('Package Version has no creator source bundle; it must be converted before it can be pulled for remix');
|
|
18
|
+
const downloaded = await api.readPackageObject(packageId, version, manifest.source.cid);
|
|
19
|
+
if (downloaded.mediaType !== manifest.source.mediaType || downloaded.bytes.byteLength !== manifest.source.bytes || (0, helix_manifest_1.cidFromBytes)(downloaded.bytes) !== manifest.source.cid) {
|
|
20
|
+
throw new TypeError('downloaded source bundle does not match its exact Package descriptor');
|
|
21
|
+
}
|
|
22
|
+
const bundle = (0, sourceBundle_1.parseContinuumSourceBundle)(downloaded.bytes);
|
|
23
|
+
const output = (0, node_path_1.resolve)(outputDirectory);
|
|
24
|
+
try {
|
|
25
|
+
await (0, promises_1.lstat)(output);
|
|
26
|
+
throw new TypeError('pull output directory already exists');
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error.code !== 'ENOENT')
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
await (0, promises_1.mkdir)(output, { recursive: true, mode: 0o700 });
|
|
33
|
+
const files = await (0, sourceBundle_1.extractContinuumSourceBundle)(bundle, (0, node_path_1.resolve)(output, 'source'));
|
|
34
|
+
const metadata = {
|
|
35
|
+
schema: 'helix.creator.continuum-pull/1',
|
|
36
|
+
source: { packageId, version, manifestCid: inspection.manifestCid, sourceCid: manifest.source.cid },
|
|
37
|
+
editDirectory: 'source',
|
|
38
|
+
publish: 'Edit the self-contained source, then run the package compiler or included publication descriptor to create a new immutable Package Version.',
|
|
39
|
+
};
|
|
40
|
+
await (0, promises_1.writeFile)((0, node_path_1.resolve)(output, 'continuum-pull.json'), node_buffer_1.Buffer.from((0, helix_manifest_2.canonicalJsonBytes)(metadata)), { mode: 0o600, flag: 'wx' });
|
|
41
|
+
return { packageId, version, manifestCid: inspection.manifestCid, sourceCid: manifest.source.cid, directory: output, files };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/continuum/pull.ts"],"names":[],"mappings":";;AAmBA,gEAiCC;AApDD,6CAAqC;AACrC,mEAA6H;AAC7H,+CAA2D;AAC3D,yCAAoC;AACpC,mEAAoE;AACpE,iDAA0F;AAcnF,KAAK,UAAU,0BAA0B,CAC9C,GAA2B,EAC3B,SAAiB,EACjB,OAAe,EACf,eAAuB;IAEvB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,IAAA,gDAA+B,EAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,UAAU,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1G,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,sGAAsG,CAAC,CAAC;IAClJ,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxF,IAAI,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,IAAA,6BAAY,EAAC,UAAU,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1K,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,eAAe,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAA,gBAAK,EAAC,MAAM,CAAC,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;IACD,MAAM,IAAA,gBAAK,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,IAAA,2CAA4B,EAAC,MAAM,EAAE,IAAA,mBAAO,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,gCAAgC;QACxC,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;QACnG,aAAa,EAAE,QAAQ;QACvB,OAAO,EAAE,6IAA6I;KACvJ,CAAC;IACF,MAAM,IAAA,oBAAS,EAAC,IAAA,mBAAO,EAAC,MAAM,EAAE,qBAAqB,CAAC,EAAE,oBAAM,CAAC,IAAI,CAAC,IAAA,mCAAkB,EAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChI,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC/H,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ContinuumObjectReference } from '@hypersoniclabs/helix-manifest';
|
|
2
|
+
export declare const CONTINUUM_SOURCE_BUNDLE_SCHEMA: "helix.continuum.source-bundle/1";
|
|
3
|
+
export declare const CONTINUUM_SOURCE_BUNDLE_MEDIA_TYPE: "application/vnd.helix.source-bundle+json;version=1";
|
|
4
|
+
export type ContinuumSourceBundle = {
|
|
5
|
+
schema: typeof CONTINUUM_SOURCE_BUNDLE_SCHEMA;
|
|
6
|
+
files: Array<{
|
|
7
|
+
path: string;
|
|
8
|
+
mediaType: string;
|
|
9
|
+
base64: string;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
12
|
+
export declare function buildContinuumSourceBundle(directory: string): Promise<{
|
|
13
|
+
bundle: ContinuumSourceBundle;
|
|
14
|
+
bytes: Uint8Array;
|
|
15
|
+
reference: ContinuumObjectReference;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function parseContinuumSourceBundle(bytes: Uint8Array): ContinuumSourceBundle;
|
|
18
|
+
export declare function extractContinuumSourceBundle(bundle: ContinuumSourceBundle, outputDirectory: string): Promise<string[]>;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONTINUUM_SOURCE_BUNDLE_MEDIA_TYPE = exports.CONTINUUM_SOURCE_BUNDLE_SCHEMA = void 0;
|
|
4
|
+
exports.buildContinuumSourceBundle = buildContinuumSourceBundle;
|
|
5
|
+
exports.parseContinuumSourceBundle = parseContinuumSourceBundle;
|
|
6
|
+
exports.extractContinuumSourceBundle = extractContinuumSourceBundle;
|
|
7
|
+
const node_buffer_1 = require("node:buffer");
|
|
8
|
+
const helix_manifest_1 = require("@hypersoniclabs/helix-manifest");
|
|
9
|
+
const promises_1 = require("node:fs/promises");
|
|
10
|
+
const node_path_1 = require("node:path");
|
|
11
|
+
exports.CONTINUUM_SOURCE_BUNDLE_SCHEMA = 'helix.continuum.source-bundle/1';
|
|
12
|
+
exports.CONTINUUM_SOURCE_BUNDLE_MEDIA_TYPE = 'application/vnd.helix.source-bundle+json;version=1';
|
|
13
|
+
const MAX_FILES = 256;
|
|
14
|
+
const MAX_FILE_BYTES = 512 * 1024;
|
|
15
|
+
const MAX_BUNDLE_BYTES = 1024 * 1024;
|
|
16
|
+
async function buildContinuumSourceBundle(directory) {
|
|
17
|
+
const rootMetadata = await (0, promises_1.lstat)(directory);
|
|
18
|
+
if (rootMetadata.isSymbolicLink() || !rootMetadata.isDirectory()) {
|
|
19
|
+
throw new TypeError('sourceDirectory must be a real directory');
|
|
20
|
+
}
|
|
21
|
+
const root = await (0, promises_1.realpath)(directory);
|
|
22
|
+
const files = [];
|
|
23
|
+
async function visit(current) {
|
|
24
|
+
const entries = await (0, promises_1.readdir)(current, { withFileTypes: true });
|
|
25
|
+
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
const absolute = (0, node_path_1.join)(current, entry.name);
|
|
28
|
+
const metadata = await (0, promises_1.lstat)(absolute);
|
|
29
|
+
if (metadata.isSymbolicLink())
|
|
30
|
+
throw new TypeError(`source file must not be a symbolic link: ${entry.name}`);
|
|
31
|
+
if (metadata.isDirectory()) {
|
|
32
|
+
await visit(absolute);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (!metadata.isFile())
|
|
36
|
+
throw new TypeError(`source entry must be a regular file: ${entry.name}`);
|
|
37
|
+
if (metadata.size > MAX_FILE_BYTES)
|
|
38
|
+
throw new TypeError(`source file exceeds ${MAX_FILE_BYTES} bytes: ${entry.name}`);
|
|
39
|
+
const resolved = await (0, promises_1.realpath)(absolute);
|
|
40
|
+
const path = portableRelative(root, resolved);
|
|
41
|
+
if (files.length >= MAX_FILES)
|
|
42
|
+
throw new TypeError(`source bundle exceeds ${MAX_FILES} files`);
|
|
43
|
+
files.push({
|
|
44
|
+
path,
|
|
45
|
+
mediaType: sourceMediaType(path),
|
|
46
|
+
base64: node_buffer_1.Buffer.from(await (0, promises_1.readFile)(resolved)).toString('base64'),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
await visit(root);
|
|
51
|
+
const bundle = { schema: exports.CONTINUUM_SOURCE_BUNDLE_SCHEMA, files };
|
|
52
|
+
const bytes = (0, helix_manifest_1.canonicalJsonBytes)(bundle);
|
|
53
|
+
if (bytes.byteLength > MAX_BUNDLE_BYTES)
|
|
54
|
+
throw new TypeError(`source bundle exceeds ${MAX_BUNDLE_BYTES} bytes`);
|
|
55
|
+
return {
|
|
56
|
+
bundle,
|
|
57
|
+
bytes,
|
|
58
|
+
reference: {
|
|
59
|
+
cid: (0, helix_manifest_1.cidFromBytes)(bytes),
|
|
60
|
+
bytes: bytes.byteLength,
|
|
61
|
+
mediaType: exports.CONTINUUM_SOURCE_BUNDLE_MEDIA_TYPE,
|
|
62
|
+
role: 'source-bundle',
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function parseContinuumSourceBundle(bytes) {
|
|
67
|
+
if (bytes.byteLength > MAX_BUNDLE_BYTES)
|
|
68
|
+
throw new TypeError(`source bundle exceeds ${MAX_BUNDLE_BYTES} bytes`);
|
|
69
|
+
const value = (0, helix_manifest_1.parseCanonicalJson)(node_buffer_1.Buffer.from(bytes).toString('utf8'));
|
|
70
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
71
|
+
throw new TypeError('source bundle must be an object');
|
|
72
|
+
const candidate = value;
|
|
73
|
+
if (candidate.schema !== exports.CONTINUUM_SOURCE_BUNDLE_SCHEMA || !Array.isArray(candidate.files)) {
|
|
74
|
+
throw new TypeError('source bundle schema is invalid');
|
|
75
|
+
}
|
|
76
|
+
if (candidate.files.length > MAX_FILES)
|
|
77
|
+
throw new TypeError(`source bundle exceeds ${MAX_FILES} files`);
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
const files = candidate.files.map((entry, index) => {
|
|
80
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry))
|
|
81
|
+
throw new TypeError(`source bundle file ${index} is invalid`);
|
|
82
|
+
const file = entry;
|
|
83
|
+
if (typeof file.path !== 'string')
|
|
84
|
+
throw new TypeError(`source bundle file ${index} path is invalid`);
|
|
85
|
+
validatePortablePath(file.path);
|
|
86
|
+
if (seen.has(file.path))
|
|
87
|
+
throw new TypeError(`source bundle contains duplicate path: ${file.path}`);
|
|
88
|
+
seen.add(file.path);
|
|
89
|
+
if (typeof file.mediaType !== 'string' || !file.mediaType)
|
|
90
|
+
throw new TypeError(`source bundle file ${file.path} mediaType is invalid`);
|
|
91
|
+
if (typeof file.base64 !== 'string')
|
|
92
|
+
throw new TypeError(`source bundle file ${file.path} base64 is invalid`);
|
|
93
|
+
const decoded = node_buffer_1.Buffer.from(file.base64, 'base64');
|
|
94
|
+
if (decoded.byteLength > MAX_FILE_BYTES || decoded.toString('base64') !== file.base64) {
|
|
95
|
+
throw new TypeError(`source bundle file ${file.path} bytes are invalid`);
|
|
96
|
+
}
|
|
97
|
+
return { path: file.path, mediaType: file.mediaType, base64: file.base64 };
|
|
98
|
+
});
|
|
99
|
+
const bundle = { schema: exports.CONTINUUM_SOURCE_BUNDLE_SCHEMA, files };
|
|
100
|
+
if (!node_buffer_1.Buffer.from((0, helix_manifest_1.canonicalJsonBytes)(bundle)).equals(node_buffer_1.Buffer.from(bytes))) {
|
|
101
|
+
throw new TypeError('source bundle bytes are not canonical');
|
|
102
|
+
}
|
|
103
|
+
return bundle;
|
|
104
|
+
}
|
|
105
|
+
async function extractContinuumSourceBundle(bundle, outputDirectory) {
|
|
106
|
+
try {
|
|
107
|
+
await (0, promises_1.lstat)(outputDirectory);
|
|
108
|
+
throw new TypeError('source output directory already exists');
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error.code !== 'ENOENT')
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
await (0, promises_1.mkdir)(outputDirectory, { recursive: true, mode: 0o700 });
|
|
115
|
+
const root = (0, node_path_1.resolve)(outputDirectory);
|
|
116
|
+
const written = [];
|
|
117
|
+
for (const file of bundle.files) {
|
|
118
|
+
validatePortablePath(file.path);
|
|
119
|
+
const target = (0, node_path_1.resolve)(root, ...file.path.split('/'));
|
|
120
|
+
const confinement = (0, node_path_1.relative)(root, target);
|
|
121
|
+
if (confinement === '..' || confinement.startsWith(`..${node_path_1.sep}`))
|
|
122
|
+
throw new TypeError(`source path escapes output: ${file.path}`);
|
|
123
|
+
await (0, promises_1.mkdir)((0, node_path_1.dirname)(target), { recursive: true, mode: 0o700 });
|
|
124
|
+
await (0, promises_1.writeFile)(target, node_buffer_1.Buffer.from(file.base64, 'base64'), { mode: 0o600, flag: 'wx' });
|
|
125
|
+
written.push(target);
|
|
126
|
+
}
|
|
127
|
+
return written;
|
|
128
|
+
}
|
|
129
|
+
function validatePortablePath(path) {
|
|
130
|
+
if (!path || path.length > 240 || path.includes('\\') || path.startsWith('/') || path.includes('\0')) {
|
|
131
|
+
throw new TypeError(`source bundle path is unsafe: ${path}`);
|
|
132
|
+
}
|
|
133
|
+
const parts = path.split('/');
|
|
134
|
+
if (parts.some((part) => !part || part === '.' || part === '..'))
|
|
135
|
+
throw new TypeError(`source bundle path is unsafe: ${path}`);
|
|
136
|
+
}
|
|
137
|
+
function portableRelative(root, path) {
|
|
138
|
+
const result = (0, node_path_1.relative)(root, path);
|
|
139
|
+
if (result === '..' || result.startsWith(`..${node_path_1.sep}`))
|
|
140
|
+
throw new TypeError('source file escapes sourceDirectory');
|
|
141
|
+
const portable = result.split(node_path_1.sep).join('/');
|
|
142
|
+
validatePortablePath(portable);
|
|
143
|
+
return portable;
|
|
144
|
+
}
|
|
145
|
+
function sourceMediaType(path) {
|
|
146
|
+
if (path.endsWith('.json'))
|
|
147
|
+
return 'application/json';
|
|
148
|
+
if (path.endsWith('.ts'))
|
|
149
|
+
return 'text/typescript';
|
|
150
|
+
if (path.endsWith('.js') || path.endsWith('.mjs'))
|
|
151
|
+
return 'text/javascript';
|
|
152
|
+
if (path.endsWith('.md'))
|
|
153
|
+
return 'text/markdown';
|
|
154
|
+
if (path.endsWith('.html'))
|
|
155
|
+
return 'text/html';
|
|
156
|
+
if (path.endsWith('.css'))
|
|
157
|
+
return 'text/css';
|
|
158
|
+
return 'application/octet-stream';
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=sourceBundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceBundle.js","sourceRoot":"","sources":["../../src/continuum/sourceBundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,7 @@ class ContinuumPublisher {
|
|
|
48
48
|
let checkpoint = existing ?? base();
|
|
49
49
|
let objectsPublished = 0;
|
|
50
50
|
let objectsReused = Object.keys(checkpoint.objects).length;
|
|
51
|
+
let versionSealed = false;
|
|
51
52
|
for (const object of normalized.objects) {
|
|
52
53
|
if ((0, state_1.checkpointHasObject)(checkpoint, object.reference.cid))
|
|
53
54
|
continue;
|
|
@@ -61,8 +62,17 @@ class ContinuumPublisher {
|
|
|
61
62
|
checkpoint = await this.checkpoints.update(jobId, base, (state) => { state.packageCreated = true; });
|
|
62
63
|
}
|
|
63
64
|
if (!checkpoint.versionCreated) {
|
|
64
|
-
await this.api.createPackageVersion(input.package.id, input.packageVersion);
|
|
65
|
-
|
|
65
|
+
const created = await this.api.createPackageVersion(input.package.id, input.packageVersion);
|
|
66
|
+
const lifecycle = packageVersionLifecycle(created);
|
|
67
|
+
if (lifecycle === 'revoked') {
|
|
68
|
+
throw new Error('The exact Continuum Package Version is revoked');
|
|
69
|
+
}
|
|
70
|
+
checkpoint = await this.checkpoints.update(jobId, base, (state) => {
|
|
71
|
+
state.versionCreated = true;
|
|
72
|
+
if (lifecycle === 'sealed' || lifecycle === 'superseded') {
|
|
73
|
+
state.sealed = true;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
66
76
|
}
|
|
67
77
|
if (!checkpoint.sealed) {
|
|
68
78
|
const leaseOwner = `creator:${jobId.slice(0, 24)}`;
|
|
@@ -89,6 +99,7 @@ class ContinuumPublisher {
|
|
|
89
99
|
checkpoint = await this.checkpoints.update(jobId, base, (state) => { state.lease = { owner: leaseOwner, fencingToken: lease.fencingToken }; });
|
|
90
100
|
await this.api.sealPackageVersion(input.package.id, input.packageVersion.version, { leaseOwner, fencingToken: lease.fencingToken });
|
|
91
101
|
}
|
|
102
|
+
versionSealed = true;
|
|
92
103
|
checkpoint = await this.checkpoints.update(jobId, base, (state) => { state.sealed = true; });
|
|
93
104
|
}
|
|
94
105
|
const packagePin = {
|
|
@@ -142,7 +153,7 @@ class ContinuumPublisher {
|
|
|
142
153
|
...(input.world ? { worldReleaseId: input.world.release.id } : {}),
|
|
143
154
|
actions: {
|
|
144
155
|
objectsPublished, objectsReused, packageCreated: !existing?.packageCreated,
|
|
145
|
-
versionCreated: !existing?.versionCreated, versionSealed
|
|
156
|
+
versionCreated: !existing?.versionCreated, versionSealed,
|
|
146
157
|
vaultAssetVersionPinned: Boolean(input.vaultAssetVersionPin && !existing?.vaultAssetVersionPinned),
|
|
147
158
|
universalItemPinned: Boolean(input.universalItemPin && !existing?.universalItemPinned),
|
|
148
159
|
listingsCreated,
|
|
@@ -359,6 +370,24 @@ function preflight(input) {
|
|
|
359
370
|
function assertPackageReferenceUuid(reference, label) {
|
|
360
371
|
(0, identity_1.assertContinuumUuid)(reference.packageId, `${label} Package id`);
|
|
361
372
|
}
|
|
373
|
+
function packageVersionLifecycle(value) {
|
|
374
|
+
const unwrapped = value &&
|
|
375
|
+
typeof value === 'object' &&
|
|
376
|
+
'item' in value &&
|
|
377
|
+
value.item &&
|
|
378
|
+
typeof value.item === 'object'
|
|
379
|
+
? value.item
|
|
380
|
+
: value;
|
|
381
|
+
if (!unwrapped || typeof unwrapped !== 'object')
|
|
382
|
+
return undefined;
|
|
383
|
+
const lifecycle = unwrapped.lifecycle;
|
|
384
|
+
return lifecycle === 'draft' ||
|
|
385
|
+
lifecycle === 'sealed' ||
|
|
386
|
+
lifecycle === 'superseded' ||
|
|
387
|
+
lifecycle === 'revoked'
|
|
388
|
+
? lifecycle
|
|
389
|
+
: undefined;
|
|
390
|
+
}
|
|
362
391
|
function normalizeWorldCompilation(input, projectId, sourceDigest) {
|
|
363
392
|
if (!input.world)
|
|
364
393
|
throw new TypeError('world publication requires compilation.world');
|