@helix3/helix-cli 0.1.14-helix3.161 → 0.1.14-helix3.162

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 CHANGED
@@ -60,6 +60,7 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
60
60
  | `helix assets materials [--resolution <res>] [--human]` | Discover the small built-in material palette. `--resolution` keeps only materials carrying that texture resolution. |
61
61
  | `helix assets material <id> [--resolution <res>] [--human]` | Resolve one material to its immutable map URLs at the resolution you pick (default: the pack's own default). |
62
62
  | `helix assets credits\|check-loaders` | Render asset credits from provenance and reject models requiring unsupported loaders. |
63
+ | `helix character import <body.glb> [--map <json>] [--fit source\|canonical] [--provenance <json>]` | Convert one self-contained third-party humanoid through the public `helix-humanoid@1` pipeline. The command rejects external/remote resources and resource bombs before parsing, generates bounded LODs, and emits a source/license/transformation/checksum receipt beside the output. `--fit canonical` aligns the rest skeleton/proportions; it does not prove that Base Male-targeted garments fit a different body surface. |
63
64
  | `helix character retarget-animation <clip.fbx\|clip.glb>` | Retarget a raw Mixamo/Meshy clip directly to `helix-humanoid@1`. FBX conversion is deterministic and runs inside the CLI; no hidden Blender/DCC pre-export is required. |
64
65
  | `helix world audit\|source-audit\|perf-gate\|prove-live` | Run the blocking world QA, performance, and deployed-build identity gates. |
65
66
  | `helix world scene-source inventory\|compile <helsinki\|bistro> <archive>` | Verify and safely inventory a known CC BY source archive, then compile deterministic local proxy/detail GLBs and an existing-schema Scene v2 package. |
@@ -1,5 +1,6 @@
1
1
  import { type ConformResult } from './stages/conform';
2
2
  import { type Ktx2Mode, type Ktx2Result } from './stages/ktx2';
3
+ import { type CharacterSourceProvenance } from './importTrust';
3
4
  export declare const CANONICAL_BODY_FILENAME = "body-m-default.web.glb";
4
5
  export interface ImportCharacterOptions {
5
6
  /** Source biped character GLB (skinned body, Meshy/Mixamo-style rig). */
@@ -36,6 +37,9 @@ export interface ImportCharacterOptions {
36
37
  lockBorder?: boolean;
37
38
  /** Force (true) or disable (false) the weld+unwrap+rebake path; undefined = auto-detect micro-chart atlases. */
38
39
  bake?: boolean;
40
+ /** 'source' preserves the model's rest shape; 'canonical' aligns it to the pinned HELIX rest
41
+ * joint positions. This proves skeleton/animation compatibility, not garment-envelope fit. */
42
+ fit?: 'source' | 'canonical';
39
43
  /** Seam-weld fallback for floored far LODs on the non-bake path (default true; LOD0 never welds there). */
40
44
  weld?: boolean;
41
45
  /** Slice head-weighted triangles into a separate 'FaceMesh' node per LOD (default true), so the
@@ -45,6 +49,8 @@ export interface ImportCharacterOptions {
45
49
  cwd?: string;
46
50
  /** Progress sink (default console.log). */
47
51
  onProgress?: (message: string) => void;
52
+ /** Optional source/license record. When present it is validated and embedded in the import receipt. */
53
+ provenance?: CharacterSourceProvenance;
48
54
  }
49
55
  export interface ImportCharacterClipResult {
50
56
  name: string;
@@ -76,6 +82,8 @@ export interface ImportCharacterResult {
76
82
  after: number;
77
83
  };
78
84
  clip: ImportCharacterClipResult | null;
85
+ /** Machine-readable source, transform and output receipt written beside the packaged GLB. */
86
+ receiptPath: string;
79
87
  }
80
88
  export interface RetargetAnimationOptions {
81
89
  /** Raw Mixamo/Meshy animation FBX or GLB. */
@@ -8,6 +8,7 @@ exports.CANONICAL_BODY_FILENAME = void 0;
8
8
  exports.findCanonicalBody = findCanonicalBody;
9
9
  exports.retargetAnimation = retargetAnimation;
10
10
  exports.importCharacter = importCharacter;
11
+ const node_crypto_1 = require("node:crypto");
11
12
  const node_fs_1 = require("node:fs");
12
13
  const node_path_1 = require("node:path");
13
14
  const core_1 = require("@gltf-transform/core");
@@ -29,6 +30,8 @@ const mergeLods_1 = require("./stages/mergeLods");
29
30
  const resizeTextures_1 = require("./stages/resizeTextures");
30
31
  const ktx2_1 = require("./stages/ktx2");
31
32
  const fbx_1 = require("./fbx");
33
+ const untrustedSource_1 = require("./untrustedSource");
34
+ const importTrust_1 = require("./importTrust");
32
35
  exports.CANONICAL_BODY_FILENAME = 'body-m-default.web.glb';
33
36
  const DEFAULT_CLIP_NAME = 'locomotion.warriorWalk';
34
37
  /** Canonical bones the conform cannot approximate from neighbours — the map must cover every one
@@ -228,6 +231,9 @@ async function importCharacter(opts) {
228
231
  throw new Error('character import: --lod-tris needs at least one triangle target');
229
232
  if (!(0, node_fs_1.existsSync)(opts.body))
230
233
  throw new Error(`character import: body GLB not found: ${opts.body}`);
234
+ const preflight = (0, untrustedSource_1.preflightCharacterSource)(opts.body);
235
+ log(`source preflight: ${preflight.sizeBytes} bytes, sha256 ${preflight.sha256}, ${preflight.counts.nodes} nodes, ${preflight.counts.primitives} primitives`);
236
+ const provenance = opts.provenance !== undefined ? (0, importTrust_1.validateProvenance)(opts.provenance) : null;
231
237
  let boneMap = opts.map !== undefined ? JSON.parse((0, node_fs_1.readFileSync)(opts.map, 'utf8')) : meshyToHelixMap_1.MESHY_TO_HELIX_MAP;
232
238
  // Canonical skeleton: explicit --canonical > the world's installed pack > the embedded
233
239
  // helix-humanoid@1 snapshot. The snapshot makes the command fully STANDALONE (no engine checkout,
@@ -237,7 +243,7 @@ async function importCharacter(opts) {
237
243
  if (opts.canonical !== undefined && !(0, node_fs_1.existsSync)(opts.canonical))
238
244
  throw new Error(`character import: canonical body GLB not found: ${opts.canonical}`);
239
245
  const outDir = (0, node_path_1.resolve)(cwd, opts.output ?? './character-out');
240
- const name = opts.name ?? (0, node_path_1.basename)(opts.body).replace(/\.(glb|gltf)$/i, '');
246
+ const name = (0, importTrust_1.validateCharacterOutputName)(opts.name ?? (0, node_path_1.basename)(opts.body).replace(/\.(glb|gltf)$/i, ''));
241
247
  (0, node_fs_1.mkdirSync)(outDir, { recursive: true });
242
248
  const io = new core_1.NodeIO().registerExtensions(extensions_1.ALL_EXTENSIONS);
243
249
  const canon = canonicalPath !== null ? (0, conform_1.extractCanonicalSkeleton)(await io.read(canonicalPath)) : (0, canonicalSkeleton_1.vendoredCanonicalSkeleton)();
@@ -245,7 +251,7 @@ async function importCharacter(opts) {
245
251
  log(`canonical skeleton: ${canon.jointNames.length} joints, ${canon.nodes.length} subtree nodes, root '${canon.skeletonRootName}' (${canonSource})`);
246
252
  // 1. Rename the source rig onto helix bone names (drops the map's childless leaf helpers).
247
253
  // Preflight FIRST: fail with a diagnosis while the rig still has its source names.
248
- const body = await io.read(opts.body);
254
+ const body = await io.readBinary(preflight.bytes);
249
255
  if (opts.map === undefined)
250
256
  boneMap = selectDefaultBoneMap(body);
251
257
  log(`bone map: ${boneMap.name} (${Object.keys(boneMap.map).length} bones, drop [${(boneMap.drop ?? []).join(', ')}])`);
@@ -260,7 +266,9 @@ async function importCharacter(opts) {
260
266
  ...boneMap,
261
267
  map: { ...boneMap.map, ...Object.fromEntries(Object.values(boneMap.map).map((helix) => [helix, helix])) },
262
268
  };
263
- const conf = (0, conform_1.conformToHelixRest)(body, canon, conformMap);
269
+ const conf = (0, conform_1.conformToHelixRest)(body, canon, conformMap, {
270
+ mode: opts.fit === 'canonical' ? 'repose' : 'embed',
271
+ });
264
272
  log(`conform: ${(0, node_path_1.basename)(opts.body)} [mode: ${conf.mode}]`);
265
273
  if (conf.unitScale !== 1)
266
274
  log(` ⚠ unit-normalized: source joint worlds scaled by ${conf.unitScale} to match the mesh's units (cm-scale rig)`);
@@ -268,6 +276,8 @@ async function importCharacter(opts) {
268
276
  const san = (0, sanitizeMaterials_1.sanitizeBakedEmissive)(body);
269
277
  if (san.emissiveStripped > 0)
270
278
  log(` stripped baked emissive on ${san.emissiveStripped} material(s)${san.metallicZeroed > 0 ? ` · metallic → 0 on ${san.metallicZeroed}` : ''}`);
279
+ if (san.metadataStripped > 0)
280
+ log(` stripped untrusted material metadata on ${san.metadataStripped} material(s)`);
271
281
  // 3. Package (the engine package-cli flow). The conformed doc is serialized once so each LOD level
272
282
  // decimates a fresh copy, exactly like package-cli re-reading its --body input per level.
273
283
  const conformedBytes = await io.writeBinary(body);
@@ -367,6 +377,35 @@ async function importCharacter(opts) {
367
377
  log(` clip-meta -> ${metaPath}`);
368
378
  clip = { name: clipName, path: clipPath, metaPath, frames: r.frames, duration: r.meta.duration, animatedBones: r.animatedBones };
369
379
  }
380
+ const outputBytes = (0, node_fs_1.readFileSync)(bodyPath);
381
+ const receiptPath = (0, node_path_1.join)(outDir, `${name}.avatar-import.json`);
382
+ (0, node_fs_1.writeFileSync)(receiptPath, JSON.stringify({
383
+ contract: 'helix/avatar-import-receipt@1',
384
+ source: {
385
+ file: (0, node_path_1.basename)(opts.body),
386
+ sha256: preflight.sha256,
387
+ sizeBytes: preflight.sizeBytes,
388
+ counts: preflight.counts,
389
+ provenance,
390
+ },
391
+ output: {
392
+ file: (0, node_path_1.basename)(bodyPath),
393
+ sha256: (0, node_crypto_1.createHash)('sha256').update(outputBytes).digest('hex'),
394
+ sizeBytes: outputBytes.length,
395
+ skeleton: 'helix-humanoid@1',
396
+ lodTriangles: sceneTris(out),
397
+ },
398
+ transforms: {
399
+ boneMap: { name: boneMap.name, version: boneMap.version },
400
+ retargetedBones: Object.keys(ret.renamed).length,
401
+ conformed: { mode: conf.mode, unitScale: conf.unitScale, restAimed: conf.restAimed, verticesProcessed: conf.verticesProcessed, jointsRebuilt: conf.jointsRebuilt },
402
+ textureSizes,
403
+ ktx2: { encoder, modes, before: ktxBefore, after: ktxAfter },
404
+ splitFace: opts.splitFace ?? true,
405
+ },
406
+ limits: untrustedSource_1.CHARACTER_SOURCE_LIMITS,
407
+ }, null, 2));
408
+ log(`receipt: ${receiptPath}`);
370
409
  return {
371
410
  bodyPath,
372
411
  lodTris: sceneTris(out),
@@ -375,6 +414,7 @@ async function importCharacter(opts) {
375
414
  conform: { mode: conf.mode, unitScale: conf.unitScale, restAimed: conf.restAimed, verticesProcessed: conf.verticesProcessed, jointsRebuilt: conf.jointsRebuilt },
376
415
  ktx2: { encoder, modes, before: ktxBefore, after: ktxAfter },
377
416
  clip,
417
+ receiptPath,
378
418
  };
379
419
  }
380
420
  //# sourceMappingURL=importCharacter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"importCharacter.js","sourceRoot":"","sources":["../../src/character/importCharacter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"importCharacter.js","sourceRoot":"","sources":["../../src/character/importCharacter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface CharacterSourceProvenance {
2
+ sourceUrl: string;
3
+ license: string;
4
+ licenseUrl: string;
5
+ attribution?: string;
6
+ author?: string;
7
+ model?: string;
8
+ version?: string;
9
+ }
10
+ export declare function validateProvenance(value: CharacterSourceProvenance): CharacterSourceProvenance;
11
+ export declare function validateCharacterOutputName(name: string): string;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateProvenance = validateProvenance;
4
+ exports.validateCharacterOutputName = validateCharacterOutputName;
5
+ function validateProvenance(value) {
6
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
7
+ throw new Error('character import: provenance must be an object');
8
+ }
9
+ const allowed = new Set(['sourceUrl', 'license', 'licenseUrl', 'attribution', 'author', 'model', 'version']);
10
+ const unknown = Object.keys(value).filter((key) => !allowed.has(key));
11
+ if (unknown.length > 0)
12
+ throw new Error(`character import: unsupported provenance field(s): ${unknown.join(', ')}`);
13
+ for (const key of allowed) {
14
+ const field = value[key];
15
+ if (field !== undefined && typeof field !== 'string')
16
+ throw new Error(`character import: provenance.${key} must be a string`);
17
+ }
18
+ for (const key of ['sourceUrl', 'license', 'licenseUrl']) {
19
+ if (typeof value[key] !== 'string' || value[key].length === 0)
20
+ throw new Error(`character import: provenance.${key} is required`);
21
+ }
22
+ for (const key of ['sourceUrl', 'licenseUrl']) {
23
+ let url;
24
+ try {
25
+ url = new URL(value[key]);
26
+ }
27
+ catch {
28
+ throw new Error(`character import: provenance.${key} must be an absolute http(s) URL`);
29
+ }
30
+ if (url.protocol !== 'https:' && url.protocol !== 'http:')
31
+ throw new Error(`character import: provenance.${key} must use http(s)`);
32
+ }
33
+ if (!/^[A-Za-z0-9][A-Za-z0-9.+-]{0,63}$/.test(value.license)) {
34
+ throw new Error('character import: provenance.license must be a short SPDX identifier (for example CC0-1.0 or CC-BY-4.0)');
35
+ }
36
+ for (const [key, text] of Object.entries(value)) {
37
+ if (typeof text === 'string' && text.length > 1024)
38
+ throw new Error(`character import: provenance.${key} exceeds 1024 characters`);
39
+ }
40
+ return {
41
+ sourceUrl: value.sourceUrl,
42
+ license: value.license,
43
+ licenseUrl: value.licenseUrl,
44
+ ...(value.attribution !== undefined && { attribution: value.attribution }),
45
+ ...(value.author !== undefined && { author: value.author }),
46
+ ...(value.model !== undefined && { model: value.model }),
47
+ ...(value.version !== undefined && { version: value.version }),
48
+ };
49
+ }
50
+ function validateCharacterOutputName(name) {
51
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(name) || name === '.' || name === '..') {
52
+ throw new Error('character import: --name must be a safe basename (letters, digits, dot, underscore, hyphen; no path separators)');
53
+ }
54
+ return name;
55
+ }
56
+ //# sourceMappingURL=importTrust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importTrust.js","sourceRoot":"","sources":["../../src/character/importTrust.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,36 @@ function retargetSkeleton(document, boneMap) {
68
68
  continue;
69
69
  const oldIbm = skin.getInverseBindMatrices();
70
70
  const keep = joints.filter((j) => !(dropSet.has(j.getName()) && j.listChildren().length === 0));
71
+ const newIndexByJoint = new Map(keep.map((joint, index) => [joint, index]));
72
+ const remap = joints.map((joint) => {
73
+ let current = joint;
74
+ while (current !== null) {
75
+ const index = newIndexByJoint.get(current);
76
+ if (index !== undefined)
77
+ return index;
78
+ const parent = parentOf(current);
79
+ current = parent?.propertyType === core_1.PropertyType.NODE ? parent : null;
80
+ }
81
+ throw new Error(`retargetSkeleton: dropped joint '${joint.getName()}' has no retained ancestor`);
82
+ });
83
+ // JOINTS_n stores indices into skin.joints. Removing a helper without
84
+ // rewriting these accessors shifts every later influence and can leave an
85
+ // out-of-range index. Fold any weight on a dropped leaf to its nearest
86
+ // retained ancestor, and preserve the accessor's original integer type.
87
+ for (const node of root.listNodes()) {
88
+ if (node.getSkin() !== skin || node.getMesh() === null)
89
+ continue;
90
+ for (const primitive of node.getMesh().listPrimitives()) {
91
+ for (const semantic of primitive.listSemantics().filter((name) => name.startsWith('JOINTS_'))) {
92
+ const accessor = primitive.getAttribute(semantic);
93
+ const source = accessor.getArray();
94
+ const output = new source.constructor(source.length);
95
+ for (let i = 0; i < source.length; i++)
96
+ output[i] = remap[source[i]];
97
+ accessor.setArray(output);
98
+ }
99
+ }
100
+ }
71
101
  if (oldIbm !== null) {
72
102
  const oldData = oldIbm.getArray();
73
103
  const newData = new Float32Array(keep.length * 16);
@@ -1 +1 @@
1
- {"version":3,"file":"retarget.js","sourceRoot":"","sources":["../../../src/character/stages/retarget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retarget.js","sourceRoot":"","sources":["../../../src/character/stages/retarget.ts"],"names":[],"mappings":";AAAA,oGAAoG;AACpG,gGAAgG;;AAiDhG,4CAYC;AAcD,4CAkFC;AA3JD,+CAA2E;AAqB3E,SAAS,QAAQ,CAAC,IAAU;IAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAY,CAAC,IAAI;YAAE,OAAO,MAAc,CAAC;QACrE,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAY,CAAC,KAAK;YAAE,OAAO,MAAe,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAeD;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,QAAkB,EAAE,OAAgB;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE;QAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9G,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,IAAI;QACzB,OAAO;QACP,cAAc,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,cAAc,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;KACnE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,gBAAgB,CAAC,QAAkB,EAAE,OAAgB;IACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,sGAAsG;IACtG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAQ,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;QAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE1F,yFAAyF;IACzF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACzB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEnC,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,IAAI,OAAO,GAAgB,KAAK,CAAC;YACjC,OAAO,OAAO,KAAK,IAAI,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;gBACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO,GAAG,MAAM,EAAE,YAAY,KAAK,mBAAY,CAAC,IAAI,CAAC,CAAC,CAAE,MAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YACjF,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QACH,sEAAsE;QACtE,0EAA0E;QAC1E,uEAAuE;QACvE,wEAAwE;QACxE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI;gBAAE,SAAS;YACjE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAG,CAAC,cAAc,EAAE,EAAE,CAAC;gBACzD,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;oBAC9F,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAG,CAAC;oBACpC,MAAM,MAAM,GAAG,IAAK,MAAM,CAAC,WAAqD,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAChG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;wBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAE,CAAC;oBACvE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAG,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;gBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,MAAM,EAAE,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,IAAI;gBAAE,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;oBAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvF,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,oGAAoG;IACpG,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC"}
@@ -4,6 +4,8 @@ export interface SanitizeMaterialsResult {
4
4
  emissiveStripped: number;
5
5
  /** of those, materials whose textureless metallic=1 default was dropped to 0 */
6
6
  metallicZeroed: number;
7
+ /** untrusted creator metadata discarded before publication */
8
+ metadataStripped: number;
7
9
  }
8
10
  /**
9
11
  * Meshy exports bake the albedo into the EMISSIVE channel (the same texture as baseColor, factor
@@ -22,7 +22,12 @@ const sameBytes = (a, b) => {
22
22
  function sanitizeBakedEmissive(document) {
23
23
  let emissiveStripped = 0;
24
24
  let metallicZeroed = 0;
25
- for (const mat of document.getRoot().listMaterials()) {
25
+ let metadataStripped = 0;
26
+ for (const [index, mat] of document.getRoot().listMaterials().entries()) {
27
+ if (Object.keys(mat.getExtras()).length > 0 || !/^[A-Za-z0-9._ -]{0,128}$/.test(mat.getName()))
28
+ metadataStripped++;
29
+ mat.setExtras({});
30
+ mat.setName(`material_${index}`);
26
31
  const base = mat.getBaseColorTexture();
27
32
  const emissive = mat.getEmissiveTexture();
28
33
  const f = mat.getEmissiveFactor();
@@ -38,6 +43,6 @@ function sanitizeBakedEmissive(document) {
38
43
  metallicZeroed++;
39
44
  }
40
45
  }
41
- return { emissiveStripped, metallicZeroed };
46
+ return { emissiveStripped, metallicZeroed, metadataStripped };
42
47
  }
43
48
  //# sourceMappingURL=sanitizeMaterials.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeMaterials.js","sourceRoot":"","sources":["../../../src/character/stages/sanitizeMaterials.ts"],"names":[],"mappings":";AAAA,oGAAoG;AACpG,gGAAgG;;AAyBhG,sDAkBC;AAhCD,MAAM,SAAS,GAAG,CAAC,CAAoB,EAAE,CAAoB,EAAW,EAAE;IACxE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,QAAkB;IACtD,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;YAAE,SAAS;QAC3F,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAAE,SAAS;QACpF,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7B,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,gBAAgB,EAAE,CAAC;QACnB,IAAI,GAAG,CAAC,2BAA2B,EAAE,KAAK,IAAI,IAAI,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"sanitizeMaterials.js","sourceRoot":"","sources":["../../../src/character/stages/sanitizeMaterials.ts"],"names":[],"mappings":";AAAA,oGAAoG;AACpG,gGAAgG;;AA2BhG,sDAsBC;AApCD,MAAM,SAAS,GAAG,CAAC,CAAoB,EAAE,CAAoB,EAAW,EAAE;IACxE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,QAAkB;IACtD,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QACxE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAAE,gBAAgB,EAAE,CAAC;QACnH,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAClB,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;YAAE,SAAS;QAC3F,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAAE,SAAS;QACpF,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7B,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,gBAAgB,EAAE,CAAC;QACnB,IAAI,GAAG,CAAC,2BAA2B,EAAE,KAAK,IAAI,IAAI,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACzB,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1,37 @@
1
+ export declare const CHARACTER_SOURCE_LIMITS: {
2
+ readonly maxBytes: number;
3
+ readonly maxJsonBytes: number;
4
+ readonly maxNodes: 10000;
5
+ readonly maxMeshes: 256;
6
+ readonly maxPrimitives: 2048;
7
+ readonly maxAccessors: 8192;
8
+ readonly maxAccessorElements: 5000000;
9
+ readonly maxDecodedAccessorBytes: number;
10
+ readonly maxDecodedCompressedBytes: number;
11
+ readonly maxBufferViews: 8192;
12
+ readonly maxImages: 128;
13
+ readonly maxImageBytes: number;
14
+ readonly maxMaterials: 256;
15
+ readonly maxSkins: 8;
16
+ readonly maxAnimations: 64;
17
+ };
18
+ export interface CharacterSourcePreflight {
19
+ bytes: Uint8Array;
20
+ sha256: string;
21
+ sizeBytes: number;
22
+ counts: {
23
+ nodes: number;
24
+ meshes: number;
25
+ primitives: number;
26
+ accessors: number;
27
+ accessorElements: number;
28
+ decodedAccessorBytes: number;
29
+ bufferViews: number;
30
+ images: number;
31
+ materials: number;
32
+ skins: number;
33
+ animations: number;
34
+ };
35
+ }
36
+ /** Reject hostile/oversized input before glTF-Transform allocates from attacker-controlled counts. */
37
+ export declare function preflightCharacterSource(path: string): CharacterSourcePreflight;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CHARACTER_SOURCE_LIMITS = void 0;
4
+ exports.preflightCharacterSource = preflightCharacterSource;
5
+ // PORTED from helix-web-engine-new/tools/character-pipeline — keep the public CLI gate identical.
6
+ const node_crypto_1 = require("node:crypto");
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ exports.CHARACTER_SOURCE_LIMITS = {
10
+ maxBytes: 64 * 1024 * 1024,
11
+ maxJsonBytes: 8 * 1024 * 1024,
12
+ maxNodes: 10_000,
13
+ maxMeshes: 256,
14
+ maxPrimitives: 2_048,
15
+ maxAccessors: 8_192,
16
+ maxAccessorElements: 5_000_000,
17
+ maxDecodedAccessorBytes: 256 * 1024 * 1024,
18
+ maxDecodedCompressedBytes: 256 * 1024 * 1024,
19
+ maxBufferViews: 8_192,
20
+ maxImages: 128,
21
+ maxImageBytes: 32 * 1024 * 1024,
22
+ maxMaterials: 256,
23
+ maxSkins: 8,
24
+ maxAnimations: 64,
25
+ };
26
+ function fail(message) { throw new Error(`character import preflight: ${message}`); }
27
+ function boundedCount(label, value, max) {
28
+ const count = Array.isArray(value) ? value.length : 0;
29
+ if (count > max)
30
+ fail(`${label} count ${count} exceeds ${max}`);
31
+ return count;
32
+ }
33
+ /** Reject hostile/oversized input before glTF-Transform allocates from attacker-controlled counts. */
34
+ function preflightCharacterSource(path) {
35
+ if ((0, node_path_1.extname)(path).toLowerCase() !== '.glb')
36
+ fail('source must be one self-contained .glb (external .gltf resources are not accepted)');
37
+ const sourceSize = (0, node_fs_1.statSync)(path).size;
38
+ if (sourceSize > exports.CHARACTER_SOURCE_LIMITS.maxBytes)
39
+ fail(`source is ${sourceSize} bytes; limit is ${exports.CHARACTER_SOURCE_LIMITS.maxBytes}`);
40
+ const bytes = (0, node_fs_1.readFileSync)(path);
41
+ if (bytes.length < 20 || bytes.readUInt32LE(0) !== 0x46546c67)
42
+ fail('invalid GLB magic/header');
43
+ if (bytes.readUInt32LE(4) !== 2)
44
+ fail(`unsupported GLB version ${bytes.readUInt32LE(4)} (expected 2)`);
45
+ if (bytes.readUInt32LE(8) !== bytes.length)
46
+ fail('declared GLB length does not match the file');
47
+ let offset = 12, json = null, binChunks = 0;
48
+ while (offset < bytes.length) {
49
+ if (offset + 8 > bytes.length)
50
+ fail('truncated GLB chunk header');
51
+ const length = bytes.readUInt32LE(offset), type = bytes.readUInt32LE(offset + 4);
52
+ offset += 8;
53
+ if (length % 4 !== 0 || offset + length > bytes.length)
54
+ fail('malformed GLB chunk length');
55
+ if (type === 0x4e4f534a) {
56
+ if (json !== null)
57
+ fail('multiple JSON chunks are not accepted');
58
+ if (length > exports.CHARACTER_SOURCE_LIMITS.maxJsonBytes)
59
+ fail(`JSON chunk exceeds ${exports.CHARACTER_SOURCE_LIMITS.maxJsonBytes} bytes`);
60
+ try {
61
+ json = JSON.parse(bytes.subarray(offset, offset + length).toString('utf8').trim());
62
+ }
63
+ catch {
64
+ fail('JSON chunk is invalid');
65
+ }
66
+ }
67
+ else if (type === 0x004e4942) {
68
+ if (++binChunks > 1)
69
+ fail('multiple BIN chunks are not accepted');
70
+ }
71
+ else
72
+ fail(`unknown GLB chunk type 0x${type.toString(16)}`);
73
+ offset += length;
74
+ }
75
+ if (json === null)
76
+ fail('missing JSON chunk');
77
+ const buffers = Array.isArray(json.buffers) ? json.buffers : [];
78
+ const images = Array.isArray(json.images) ? json.images : [];
79
+ for (const entry of [...buffers, ...images])
80
+ if (typeof entry.uri === 'string')
81
+ fail('external, data, and remote URIs are not accepted; embed every resource in the GLB');
82
+ if (buffers.length !== 1 || binChunks !== 1)
83
+ fail('source must contain exactly one embedded binary buffer');
84
+ const nodes = boundedCount('node', json.nodes, exports.CHARACTER_SOURCE_LIMITS.maxNodes);
85
+ const meshes = boundedCount('mesh', json.meshes, exports.CHARACTER_SOURCE_LIMITS.maxMeshes);
86
+ const accessors = boundedCount('accessor', json.accessors, exports.CHARACTER_SOURCE_LIMITS.maxAccessors);
87
+ const bufferViews = boundedCount('bufferView', json.bufferViews, exports.CHARACTER_SOURCE_LIMITS.maxBufferViews);
88
+ const imageCount = boundedCount('image', json.images, exports.CHARACTER_SOURCE_LIMITS.maxImages);
89
+ const materials = boundedCount('material', json.materials, exports.CHARACTER_SOURCE_LIMITS.maxMaterials);
90
+ const skins = boundedCount('skin', json.skins, exports.CHARACTER_SOURCE_LIMITS.maxSkins);
91
+ const animations = boundedCount('animation', json.animations, exports.CHARACTER_SOURCE_LIMITS.maxAnimations);
92
+ const meshRows = Array.isArray(json.meshes) ? json.meshes : [];
93
+ const primitives = meshRows.reduce((sum, mesh) => sum + (Array.isArray(mesh.primitives) ? mesh.primitives.length : 0), 0);
94
+ if (primitives > exports.CHARACTER_SOURCE_LIMITS.maxPrimitives)
95
+ fail(`primitive count ${primitives} exceeds ${exports.CHARACTER_SOURCE_LIMITS.maxPrimitives}`);
96
+ const accessorRows = Array.isArray(json.accessors) ? json.accessors : [];
97
+ let accessorElements = 0, decodedAccessorBytes = 0;
98
+ const components = new Map([['SCALAR', 1], ['VEC2', 2], ['VEC3', 3], ['VEC4', 4], ['MAT2', 4], ['MAT3', 9], ['MAT4', 16]]);
99
+ const componentBytes = new Map([[5120, 1], [5121, 1], [5122, 2], [5123, 2], [5125, 4], [5126, 4]]);
100
+ for (const accessor of accessorRows) {
101
+ if (accessor.sparse !== undefined)
102
+ fail('sparse accessors are not accepted on avatar imports');
103
+ if (!Number.isSafeInteger(accessor.count) || accessor.count < 0)
104
+ fail('accessor count must be a non-negative safe integer');
105
+ accessorElements += accessor.count;
106
+ if (accessorElements > exports.CHARACTER_SOURCE_LIMITS.maxAccessorElements)
107
+ fail(`accessor element total ${accessorElements} exceeds ${exports.CHARACTER_SOURCE_LIMITS.maxAccessorElements}`);
108
+ const width = components.get(accessor.type), bytesPerComponent = componentBytes.get(accessor.componentType);
109
+ if (width === undefined || bytesPerComponent === undefined)
110
+ fail('accessor type/componentType is invalid');
111
+ decodedAccessorBytes += accessor.count * width * bytesPerComponent;
112
+ if (decodedAccessorBytes > exports.CHARACTER_SOURCE_LIMITS.maxDecodedAccessorBytes)
113
+ fail(`decoded accessor footprint ${decodedAccessorBytes} exceeds ${exports.CHARACTER_SOURCE_LIMITS.maxDecodedAccessorBytes}`);
114
+ }
115
+ const viewRows = Array.isArray(json.bufferViews) ? json.bufferViews : [];
116
+ let decodedCompressedBytes = 0;
117
+ for (const rawView of viewRows) {
118
+ const view = rawView;
119
+ const compressed = view.extensions?.EXT_meshopt_compression;
120
+ if (compressed === undefined)
121
+ continue;
122
+ if (!Number.isSafeInteger(compressed.count) || !Number.isSafeInteger(compressed.byteStride) || compressed.count < 0 || compressed.byteStride < 1) {
123
+ fail('EXT_meshopt_compression count/byteStride is invalid');
124
+ }
125
+ decodedCompressedBytes += compressed.count * compressed.byteStride;
126
+ if (!Number.isSafeInteger(decodedCompressedBytes) || decodedCompressedBytes > exports.CHARACTER_SOURCE_LIMITS.maxDecodedCompressedBytes) {
127
+ fail(`decoded compressed buffer footprint ${decodedCompressedBytes} exceeds ${exports.CHARACTER_SOURCE_LIMITS.maxDecodedCompressedBytes}`);
128
+ }
129
+ }
130
+ for (const image of images) {
131
+ if (!Number.isSafeInteger(image.bufferView))
132
+ fail('every image must use an embedded bufferView');
133
+ const view = viewRows[image.bufferView];
134
+ if (view === undefined || !Number.isSafeInteger(view.byteLength))
135
+ fail('image bufferView is invalid');
136
+ if (view.byteLength > exports.CHARACTER_SOURCE_LIMITS.maxImageBytes)
137
+ fail(`embedded image is ${view.byteLength} bytes; per-image limit is ${exports.CHARACTER_SOURCE_LIMITS.maxImageBytes}`);
138
+ }
139
+ const required = Array.isArray(json.extensionsRequired) ? json.extensionsRequired : [];
140
+ const allowedRequired = new Set(['KHR_draco_mesh_compression', 'EXT_meshopt_compression', 'KHR_texture_basisu']);
141
+ const unsupported = required.filter((name) => typeof name === 'string' && !allowedRequired.has(name));
142
+ if (unsupported.length > 0)
143
+ fail(`unsupported required extensions: ${unsupported.join(', ')}`);
144
+ return { bytes, sha256: (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex'), sizeBytes: bytes.length, counts: { nodes, meshes, primitives, accessors, accessorElements, decodedAccessorBytes, bufferViews, images: imageCount, materials, skins, animations } };
145
+ }
146
+ //# sourceMappingURL=untrustedSource.js.map