Files
soroush.asadi 0c461ff841
Build backend images / build content-svc (push) Failing after 53s
Build backend images / build file-svc (push) Failing after 58s
Build backend images / build gateway (push) Failing after 1m1s
Build backend images / build identity-svc (push) Failing after 57s
Build backend images / build notification-svc (push) Failing after 59s
Build backend images / build render-svc (push) Failing after 49s
Build backend images / build studio-svc (push) Failing after 49s
fix(import): IgnoreQueryFilters so revive sees soft-deleted scenes; clear AE crash state
- AepImportService: the global Scene HasQueryFilter(DeletedAt==null) was hiding
  soft-deleted rows, so the revive never matched and the importer re-inserted →
  scenes_project_id_key violation. Add .IgnoreQueryFilters() to the load. (apply
  now revives + returns 200, verified.)
- node-agent: ClearAECrashState() deletes AE's SCRPriorState.json before each
  launch so the 'Crash Repair Options' dialog can't hang a headless scan/render.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:20:41 +03:30

17 lines
1.3 KiB
JavaScript

import crypto from "node:crypto";
const GW = "http://172.28.144.1:8088";
const SECRET = "p9Xv7Lm2Qq8Nz4TfKc1Hs6YwRe3Ud0BafwefWEFw324234QEWF";
const PID = "90571220-e6b2-44f3-b5a2-ed65999bf525";
const b64 = (b) => Buffer.from(b).toString("base64url");
const now = Math.floor(Date.now() / 1000);
const h = b64(JSON.stringify({ alg: "HS256", typ: "JWT" }));
const p = b64(JSON.stringify({ sub: "00000000-0000-0000-0000-0000000000aa", tenant_id: "00000000-0000-0000-0000-0000000000bb", tenant_slug: "flatrender", is_admin: "true", role: "Admin", iss: "flatrender-identity", aud: "flatrender", exp: now + 3600, iat: now }));
const sig = crypto.createHmac("sha256", SECRET).update(`${h}.${p}`).digest("base64url");
const H = { "Content-Type": "application/json", Authorization: `Bearer ${h}.${p}.${sig}` };
const scan = { source: "ae-jsx", scenes: [{ key: "c1", title: "Scene 1", scene_type: "Normal", elements: [{ key: "frl_c1t1", title: "frl_c1t1", type: "Text", default_value: "hello" }], colors: [] }], shared_colors: [] };
const res = await fetch(`${GW}/v1/projects/${PID}/scan/apply`, { method: "POST", headers: H, body: JSON.stringify({ scan, options: { overwrite_existing: true } }) });
console.log("apply status:", res.status);
console.log("body:", (await res.text()).slice(0, 400));