@hypersoniclabs/helix-cli 0.1.23 → 0.1.24-helix3.438
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/character/fbx.d.ts +9 -0
- package/dist/character/fbx.js +37 -1
- package/dist/character/fbx.js.map +1 -1
- package/dist/character/importCharacter.js +1 -0
- package/dist/character/importCharacter.js.map +1 -1
- package/dist/character/meshyToHelixMap.d.ts +4 -0
- package/dist/character/meshyToHelixMap.js +64 -1
- package/dist/character/meshyToHelixMap.js.map +1 -1
- package/dist/character/stages/retarget.d.ts +18 -0
- package/dist/character/stages/retarget.js.map +1 -1
- package/dist/character/stages/retargetClip.js +62 -7
- package/dist/character/stages/retargetClip.js.map +1 -1
- package/dist/config.js +7 -3
- package/dist/config.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/itemSetVersion.d.ts +35 -0
- package/dist/itemSetVersion.js +81 -5
- package/dist/itemSetVersion.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/vehicle/inspectionSheets.js +1 -1
- package/dist/vehicle/inspectionSheets.js.map +1 -1
- package/dist/vehicle/simulateRuntime.js +4 -4
- package/dist/vehicle/simulateRuntime.js.map +1 -1
- package/dist/visualQa/vehicle.js +1 -0
- package/dist/visualQa/vehicle.js.map +1 -1
- package/dist/visualQa/vehicleInspection.d.ts +40 -0
- package/dist/visualQa/vehicleInspection.js +139 -10
- package/dist/visualQa/vehicleInspection.js.map +1 -1
- package/dist/visualQa/vehicleLamps.d.ts +3 -1
- package/dist/visualQa/vehicleLamps.js +7 -4
- package/dist/visualQa/vehicleLamps.js.map +1 -1
- package/package.json +3 -3
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
package/dist/itemSetVersion.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export type SetItemVersionOptions = {
|
|
|
14
14
|
};
|
|
15
15
|
export type SetItemVersionResult = {
|
|
16
16
|
itemId: string;
|
|
17
|
+
/** 'update' (a new revision) or 'rollback' (an earlier revision made current again). */
|
|
18
|
+
move?: 'update' | 'rollback';
|
|
19
|
+
/** A vehicle move: the sha256 of the vehiclePackage rider sent with the pin. */
|
|
20
|
+
vehiclePackageSha256?: string;
|
|
21
|
+
regressions?: unknown[];
|
|
17
22
|
revision: number;
|
|
18
23
|
packagePin: PackagePin;
|
|
19
24
|
previousRevision: number | null;
|
|
@@ -26,14 +31,44 @@ type Requester = {
|
|
|
26
31
|
};
|
|
27
32
|
/** The request body, validated; a pure function so the wire shape is tested without a network. */
|
|
28
33
|
export declare function buildSetVersionBody(pin: PackagePin, options: SetItemVersionOptions): Record<string, unknown>;
|
|
34
|
+
type ItemRow = {
|
|
35
|
+
continuumPackagePin?: {
|
|
36
|
+
packageId?: string;
|
|
37
|
+
version?: string;
|
|
38
|
+
} | null;
|
|
39
|
+
properties?: Record<string, unknown> | null;
|
|
40
|
+
};
|
|
41
|
+
type RootRef = {
|
|
42
|
+
cid?: string;
|
|
43
|
+
bytes?: number;
|
|
44
|
+
mediaType?: string;
|
|
45
|
+
role?: string;
|
|
46
|
+
};
|
|
29
47
|
/** Resolve {packageId, version, manifestCid} for `version` of the item's pinned Package from the public API. */
|
|
30
48
|
export declare function resolvePackagePin(api: Requester, itemId: string, version: string, deps?: {
|
|
31
49
|
publicGet?: <T>(path: string) => Promise<T>;
|
|
50
|
+
item?: ItemRow;
|
|
32
51
|
}): Promise<PackagePin>;
|
|
33
52
|
/** The route a move is posted to: the creator's, or (`--as-admin`) the admin one for an item somebody else created. */
|
|
34
53
|
export declare function setVersionPath(itemId: string, asAdmin: boolean | undefined): string;
|
|
54
|
+
export declare const VEHICLE_DEFINITION_ROLE = "vehicle-definition";
|
|
55
|
+
type ShelfRow = {
|
|
56
|
+
revision: number;
|
|
57
|
+
current: boolean;
|
|
58
|
+
packagePin: PackagePin;
|
|
59
|
+
};
|
|
60
|
+
/** The item's own revision of `version`, if it ever had one (then the move is a rollback, not an update). */
|
|
61
|
+
export declare function revisionOf(shelf: {
|
|
62
|
+
versions?: ShelfRow[];
|
|
63
|
+
} | null, packageId: string | undefined, version: string): ShelfRow | undefined;
|
|
64
|
+
/** The sealed vehicle root of a Package Version, verified against its manifest descriptor: the `vehiclePackage` rider. */
|
|
65
|
+
export declare function sealedVehicleRoot(itemId: string, pin: PackagePin, root: RootRef | undefined, fetchObject: (sha: string) => Promise<Uint8Array | undefined>): Promise<{
|
|
66
|
+
vehiclePackage: Record<string, unknown>;
|
|
67
|
+
sha256: string;
|
|
68
|
+
}>;
|
|
35
69
|
export declare function setItemVersion(itemId: string, options: SetItemVersionOptions, credentials: CliCredentials, deps?: {
|
|
36
70
|
api?: Requester;
|
|
71
|
+
fetchObject?: (sha: string) => Promise<Uint8Array | undefined>;
|
|
37
72
|
}): Promise<SetItemVersionResult>;
|
|
38
73
|
/** Terminal lines for a refused move. A 422 leads with the server's message (it names the next command), then the
|
|
39
74
|
* `remedy` and any hosted render the refusal queued. Anything else renders as the generic API error. */
|
package/dist/itemSetVersion.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VEHICLE_DEFINITION_ROLE = void 0;
|
|
3
4
|
exports.buildSetVersionBody = buildSetVersionBody;
|
|
4
5
|
exports.resolvePackagePin = resolvePackagePin;
|
|
5
6
|
exports.setVersionPath = setVersionPath;
|
|
7
|
+
exports.revisionOf = revisionOf;
|
|
8
|
+
exports.sealedVehicleRoot = sealedVehicleRoot;
|
|
6
9
|
exports.setItemVersion = setItemVersion;
|
|
7
10
|
exports.renderSetVersionError = renderSetVersionError;
|
|
8
11
|
exports.renderSetVersionSuccess = renderSetVersionSuccess;
|
|
@@ -12,7 +15,16 @@ exports.renderSetVersionSuccess = renderSetVersionSuccess;
|
|
|
12
15
|
// first. Wire: GET public Package Version (pin) -> POST /api/v1/universal-items/:id/versions { packagePin, reason, … }.
|
|
13
16
|
// `--as-admin` (platform admins, items another account created) posts the same body to
|
|
14
17
|
// POST /api/v1/admin/universal-items/:id/versions; the server applies the same gates, including visual QA.
|
|
18
|
+
//
|
|
19
|
+
// A SIGNED VEHICLE has a second identity: the engine draws the car from `properties.vehiclePackage`, not from the pin.
|
|
20
|
+
// A pin-only move leaves every owner on the old car (the 993 and R34 each got a pin-only orphan revision this way), so
|
|
21
|
+
// for a vehicle the move carries the target version's sealed root (role vehicle-definition) as `vehiclePackage` — the
|
|
22
|
+
// same rider `vehicle publish --item` sends — and refuses when the version has no such root.
|
|
23
|
+
// A version the item ALREADY HAD is a rollback: PUT /api/v1/universal-items/:id/versions/current { revision, reason }
|
|
24
|
+
// (the POST route answers 409 "already revision N"); the server restores that revision's retained vehiclePackage.
|
|
25
|
+
const node_crypto_1 = require("node:crypto");
|
|
15
26
|
const api_1 = require("./api");
|
|
27
|
+
const platform_1 = require("./vehicle/platform");
|
|
16
28
|
const moveUx_1 = require("./visualQa/moveUx");
|
|
17
29
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
18
30
|
/** The request body, validated; a pure function so the wire shape is tested without a network. */
|
|
@@ -28,9 +40,16 @@ function buildSetVersionBody(pin, options) {
|
|
|
28
40
|
...(options.expectedCurrentVersionId ? { expectedCurrentVersionId: options.expectedCurrentVersionId } : {}),
|
|
29
41
|
};
|
|
30
42
|
}
|
|
43
|
+
async function getItemRow(api, itemId) {
|
|
44
|
+
const body = await api.request('GET', `/api/v1/universal-items/${itemId}`);
|
|
45
|
+
return body?.item ?? body;
|
|
46
|
+
}
|
|
31
47
|
/** Resolve {packageId, version, manifestCid} for `version` of the item's pinned Package from the public API. */
|
|
32
48
|
async function resolvePackagePin(api, itemId, version, deps = {}) {
|
|
33
|
-
|
|
49
|
+
return (await resolvePackageVersion(api, itemId, version, deps)).pin;
|
|
50
|
+
}
|
|
51
|
+
async function resolvePackageVersion(api, itemId, version, deps = {}) {
|
|
52
|
+
const item = deps.item ?? await getItemRow(api, itemId);
|
|
34
53
|
const packageId = item?.continuumPackagePin?.packageId;
|
|
35
54
|
if (!packageId)
|
|
36
55
|
throw new Error(`Item ${itemId} has no Continuum package pin, so there is no package to take --package-version from.`);
|
|
@@ -43,7 +62,7 @@ async function resolvePackagePin(api, itemId, version, deps = {}) {
|
|
|
43
62
|
throw new Error(`Package ${packageId} answered with version ${ver.version}, not ${version}.`);
|
|
44
63
|
if (ver.lifecycle && ver.lifecycle !== 'sealed' && ver.lifecycle !== 'superseded')
|
|
45
64
|
throw new Error(`Package ${packageId} version ${version} is ${ver.lifecycle}, not sealed; only a sealed version can be pinned.`);
|
|
46
|
-
return { packageId, version, manifestCid: ver.manifestCid };
|
|
65
|
+
return { pin: { packageId, version, manifestCid: ver.manifestCid }, root: ver.manifest?.root };
|
|
47
66
|
}
|
|
48
67
|
catch (error) {
|
|
49
68
|
if (!(error instanceof api_1.ApiError) || error.status !== 404)
|
|
@@ -56,6 +75,36 @@ async function resolvePackagePin(api, itemId, version, deps = {}) {
|
|
|
56
75
|
function setVersionPath(itemId, asAdmin) {
|
|
57
76
|
return asAdmin ? `/api/v1/admin/universal-items/${itemId}/versions` : `/api/v1/universal-items/${itemId}/versions`;
|
|
58
77
|
}
|
|
78
|
+
exports.VEHICLE_DEFINITION_ROLE = 'vehicle-definition';
|
|
79
|
+
/** The item's own revision of `version`, if it ever had one (then the move is a rollback, not an update). */
|
|
80
|
+
function revisionOf(shelf, packageId, version) {
|
|
81
|
+
return (shelf?.versions ?? []).find((v) => v.packagePin?.version === version && (!packageId || v.packagePin?.packageId === packageId));
|
|
82
|
+
}
|
|
83
|
+
const sha256Hex = (bytes) => (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex');
|
|
84
|
+
/** The sealed vehicle root of a Package Version, verified against its manifest descriptor: the `vehiclePackage` rider. */
|
|
85
|
+
async function sealedVehicleRoot(itemId, pin, root, fetchObject) {
|
|
86
|
+
const resume = `seal the version with the car's definition as its root and move it with the publish resume: \`helix vehicle publish <car dir> --item ${itemId} --package-version <next> --reason …\``;
|
|
87
|
+
if (!root?.cid || root.role !== exports.VEHICLE_DEFINITION_ROLE) {
|
|
88
|
+
throw new Error(`${pin.packageId}@${pin.version} has no sealed vehicle definition (its root is ${root?.role ?? root?.mediaType ?? 'unknown'}), so moving this vehicle to it would leave owners on the old car (properties.vehiclePackage) under the new pin. Refusing; ${resume}`);
|
|
89
|
+
}
|
|
90
|
+
const sha = root.cid.replace(/^cid:sha256:/, '');
|
|
91
|
+
const bytes = await fetchObject(sha);
|
|
92
|
+
if (!bytes)
|
|
93
|
+
throw new Error(`the sealed vehicle definition ${root.cid} of ${pin.packageId}@${pin.version} is not publicly readable; ${resume}`);
|
|
94
|
+
if (sha256Hex(bytes) !== sha || (typeof root.bytes === 'number' && bytes.length !== root.bytes)) {
|
|
95
|
+
throw new Error(`the bytes served for ${root.cid} do not match the manifest's descriptor; refusing to send a rider that is not the sealed root`);
|
|
96
|
+
}
|
|
97
|
+
let parsed;
|
|
98
|
+
try {
|
|
99
|
+
parsed = JSON.parse(Buffer.from(bytes).toString('utf8'));
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
throw new Error(`the sealed vehicle definition ${root.cid} is not JSON (${error.message})`);
|
|
103
|
+
}
|
|
104
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
105
|
+
throw new Error(`the sealed vehicle definition ${root.cid} is not a JSON object`);
|
|
106
|
+
return { vehiclePackage: parsed, sha256: sha };
|
|
107
|
+
}
|
|
59
108
|
async function setItemVersion(itemId, options, credentials, deps = {}) {
|
|
60
109
|
if (!UUID_RE.test(itemId))
|
|
61
110
|
throw new Error('Item ID must be a UUID.');
|
|
@@ -63,9 +112,32 @@ async function setItemVersion(itemId, options, credentials, deps = {}) {
|
|
|
63
112
|
if (!version)
|
|
64
113
|
throw new Error('--package-version is required, e.g. --package-version 1.0.12');
|
|
65
114
|
const api = deps.api ?? api_1.HelixApi.forCredentials(credentials);
|
|
66
|
-
const
|
|
115
|
+
const item = await getItemRow(api, itemId);
|
|
116
|
+
const signedVehicle = !!item?.properties && typeof item.properties.vehiclePackage === 'object' && item.properties.vehiclePackage !== null;
|
|
117
|
+
// A version this item already had: put that revision back (the server restores a vehicle's retained rider).
|
|
118
|
+
const shelf = await api.request('GET', `/api/v1/universal-items/${itemId}/versions`).catch(() => null);
|
|
119
|
+
const earlier = revisionOf(shelf, item?.continuumPackagePin?.packageId, version);
|
|
120
|
+
if (earlier) {
|
|
121
|
+
if (earlier.current)
|
|
122
|
+
throw new Error(`${itemId} is already on ${earlier.packagePin.packageId}@${version} (revision ${earlier.revision}); nothing to move.`);
|
|
123
|
+
if (options.asAdmin) {
|
|
124
|
+
throw new Error(`${version} is revision ${earlier.revision} of this item, so this is a rollback, and the backend has no admin rollback route (only PUT /api/v1/universal-items/${itemId}/versions/current, for the item's creator). The creator runs: helix item set-version ${itemId} --package-version ${version} --reason …`);
|
|
125
|
+
}
|
|
126
|
+
const reason = buildSetVersionBody(earlier.packagePin, options).reason;
|
|
127
|
+
const rolled = await api.request('PUT', `/api/v1/universal-items/${itemId}/versions/current`, { revision: earlier.revision, reason });
|
|
128
|
+
return { ...rolled, move: 'rollback' };
|
|
129
|
+
}
|
|
130
|
+
const { pin, root } = await resolvePackageVersion(api, itemId, version, { item });
|
|
67
131
|
const body = buildSetVersionBody(pin, options);
|
|
68
|
-
|
|
132
|
+
let vehiclePackageSha256;
|
|
133
|
+
if (signedVehicle) {
|
|
134
|
+
const fetchObject = deps.fetchObject ?? ((sha) => (0, platform_1.fetchPublicObject)(credentials.apiUrl, sha));
|
|
135
|
+
const rider = await sealedVehicleRoot(itemId, pin, root, fetchObject);
|
|
136
|
+
body.vehiclePackage = rider.vehiclePackage;
|
|
137
|
+
vehiclePackageSha256 = rider.sha256;
|
|
138
|
+
}
|
|
139
|
+
const moved = await api.request('POST', setVersionPath(itemId, options.asAdmin), body);
|
|
140
|
+
return { ...moved, move: 'update', ...(vehiclePackageSha256 ? { vehiclePackageSha256 } : {}) };
|
|
69
141
|
}
|
|
70
142
|
/** Terminal lines for a refused move. A 422 leads with the server's message (it names the next command), then the
|
|
71
143
|
* `remedy` and any hosted render the refusal queued. Anything else renders as the generic API error. */
|
|
@@ -85,9 +157,13 @@ function renderSetVersionError(error) {
|
|
|
85
157
|
return lines.join('\n');
|
|
86
158
|
}
|
|
87
159
|
function renderSetVersionSuccess(r) {
|
|
88
|
-
const lines = [`✔ ${r.itemId} is now on ${r.packagePin.packageId}@${r.packagePin.version} — revision ${r.previousRevision ?? '?'} → ${r.revision}`];
|
|
160
|
+
const lines = [`✔ ${r.itemId} is now on ${r.packagePin.packageId}@${r.packagePin.version} — revision ${r.previousRevision ?? '?'} → ${r.revision}${r.move === 'rollback' ? ' (rolled back to an earlier revision)' : ''}`];
|
|
89
161
|
if (r.previousPackagePin)
|
|
90
162
|
lines.push(` previous: ${r.previousPackagePin.packageId}@${r.previousPackagePin.version}`);
|
|
163
|
+
if (r.vehiclePackageSha256)
|
|
164
|
+
lines.push(` vehicle: properties.vehiclePackage moved with the pin (sealed root sha256 ${r.vehiclePackageSha256.slice(0, 12)}…)`);
|
|
165
|
+
if (Array.isArray(r.regressions) && r.regressions.length)
|
|
166
|
+
lines.push(` ⚠ the rollback takes away ${r.regressions.length} thing(s) owners had: ${JSON.stringify(r.regressions).slice(0, 300)}`);
|
|
91
167
|
lines.push(' same item id, same owner(s); existing owners see the change at their next spawn/session start.');
|
|
92
168
|
return lines;
|
|
93
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemSetVersion.js","sourceRoot":"","sources":["../src/itemSetVersion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"itemSetVersion.js","sourceRoot":"","sources":["../src/itemSetVersion.ts"],"names":[],"mappings":"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"}
|