gooseworks 0.5.0-dev.9.d3e7757f → 0.5.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.
- package/README.md +17 -26
- package/dist/auth/device-flow.d.ts +10 -0
- package/dist/auth/device-flow.d.ts.map +1 -1
- package/dist/auth/device-flow.js +39 -1
- package/dist/auth/device-flow.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +3 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/video.d.ts +5 -0
- package/dist/commands/video.d.ts.map +1 -0
- package/dist/commands/video.js +117 -0
- package/dist/commands/video.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -2
- package/dist/config.js.map +1 -1
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +4 -2
- package/dist/environment.js.map +1 -1
- package/dist/kit/core/bind.d.ts +12 -0
- package/dist/kit/core/bind.d.ts.map +1 -0
- package/dist/kit/core/bind.js +77 -0
- package/dist/kit/core/bind.js.map +1 -0
- package/dist/kit/core/canonical.d.ts +30 -0
- package/dist/kit/core/canonical.d.ts.map +1 -0
- package/dist/kit/core/canonical.js +67 -0
- package/dist/kit/core/canonical.js.map +1 -0
- package/dist/kit/core/check.d.ts +22 -0
- package/dist/kit/core/check.d.ts.map +1 -0
- package/dist/kit/core/check.js +53 -0
- package/dist/kit/core/check.js.map +1 -0
- package/dist/kit/core/device.d.ts +17 -0
- package/dist/kit/core/device.d.ts.map +1 -0
- package/dist/kit/core/device.js +153 -0
- package/dist/kit/core/device.js.map +1 -0
- package/dist/kit/core/errors.d.ts +22 -0
- package/dist/kit/core/errors.d.ts.map +1 -0
- package/dist/kit/core/errors.js +49 -0
- package/dist/kit/core/errors.js.map +1 -0
- package/dist/kit/core/files.d.ts +49 -0
- package/dist/kit/core/files.d.ts.map +1 -0
- package/dist/kit/core/files.js +213 -0
- package/dist/kit/core/files.js.map +1 -0
- package/dist/kit/core/host.d.ts +26 -0
- package/dist/kit/core/host.d.ts.map +1 -0
- package/dist/kit/core/host.js +10 -0
- package/dist/kit/core/host.js.map +1 -0
- package/dist/kit/core/log.d.ts +17 -0
- package/dist/kit/core/log.d.ts.map +1 -0
- package/dist/kit/core/log.js +82 -0
- package/dist/kit/core/log.js.map +1 -0
- package/dist/kit/core/paths.d.ts +27 -0
- package/dist/kit/core/paths.d.ts.map +1 -0
- package/dist/kit/core/paths.js +103 -0
- package/dist/kit/core/paths.js.map +1 -0
- package/dist/kit/core/pieces.d.ts +84 -0
- package/dist/kit/core/pieces.d.ts.map +1 -0
- package/dist/kit/core/pieces.js +374 -0
- package/dist/kit/core/pieces.js.map +1 -0
- package/dist/kit/core/progress-reporter.d.ts +30 -0
- package/dist/kit/core/progress-reporter.d.ts.map +1 -0
- package/dist/kit/core/progress-reporter.js +106 -0
- package/dist/kit/core/progress-reporter.js.map +1 -0
- package/dist/kit/core/progress.d.ts +22 -0
- package/dist/kit/core/progress.d.ts.map +1 -0
- package/dist/kit/core/progress.js +90 -0
- package/dist/kit/core/progress.js.map +1 -0
- package/dist/kit/core/run.d.ts +35 -0
- package/dist/kit/core/run.d.ts.map +1 -0
- package/dist/kit/core/run.js +850 -0
- package/dist/kit/core/run.js.map +1 -0
- package/dist/kit/core/save.d.ts +43 -0
- package/dist/kit/core/save.d.ts.map +1 -0
- package/dist/kit/core/save.js +265 -0
- package/dist/kit/core/save.js.map +1 -0
- package/dist/kit/core/schema.d.ts +5 -0
- package/dist/kit/core/schema.d.ts.map +1 -0
- package/dist/kit/core/schema.js +183 -0
- package/dist/kit/core/schema.js.map +1 -0
- package/dist/kit/core/secrets.d.ts +9 -0
- package/dist/kit/core/secrets.d.ts.map +1 -0
- package/dist/kit/core/secrets.js +60 -0
- package/dist/kit/core/secrets.js.map +1 -0
- package/dist/kit/core/style.d.ts +59 -0
- package/dist/kit/core/style.d.ts.map +1 -0
- package/dist/kit/core/style.js +179 -0
- package/dist/kit/core/style.js.map +1 -0
- package/dist/kit/core/toolchain.d.ts +52 -0
- package/dist/kit/core/toolchain.d.ts.map +1 -0
- package/dist/kit/core/toolchain.js +321 -0
- package/dist/kit/core/toolchain.js.map +1 -0
- package/dist/kit/core/version.d.ts +18 -0
- package/dist/kit/core/version.d.ts.map +1 -0
- package/dist/kit/core/version.js +33 -0
- package/dist/kit/core/version.js.map +1 -0
- package/dist/kit/env.d.ts +42 -0
- package/dist/kit/env.d.ts.map +1 -0
- package/dist/kit/env.js +76 -0
- package/dist/kit/env.js.map +1 -0
- package/dist/kit/line/client.d.ts +82 -0
- package/dist/kit/line/client.d.ts.map +1 -0
- package/dist/kit/line/client.js +325 -0
- package/dist/kit/line/client.js.map +1 -0
- package/dist/kit/line/types.d.ts +178 -0
- package/dist/kit/line/types.d.ts.map +1 -0
- package/dist/kit/line/types.js +18 -0
- package/dist/kit/line/types.js.map +1 -0
- package/dist/kit/maker/browser.d.ts +114 -0
- package/dist/kit/maker/browser.d.ts.map +1 -0
- package/dist/kit/maker/browser.js +547 -0
- package/dist/kit/maker/browser.js.map +1 -0
- package/dist/kit/maker/encode.d.ts +27 -0
- package/dist/kit/maker/encode.d.ts.map +1 -0
- package/dist/kit/maker/encode.js +58 -0
- package/dist/kit/maker/encode.js.map +1 -0
- package/dist/kit/maker/images.d.ts +14 -0
- package/dist/kit/maker/images.d.ts.map +1 -0
- package/dist/kit/maker/images.js +174 -0
- package/dist/kit/maker/images.js.map +1 -0
- package/dist/kit/maker/inputs.d.ts +81 -0
- package/dist/kit/maker/inputs.d.ts.map +1 -0
- package/dist/kit/maker/inputs.js +235 -0
- package/dist/kit/maker/inputs.js.map +1 -0
- package/dist/kit/maker/make.d.ts +19 -0
- package/dist/kit/maker/make.d.ts.map +1 -0
- package/dist/kit/maker/make.js +272 -0
- package/dist/kit/maker/make.js.map +1 -0
- package/dist/kit/maker/page.d.ts +19 -0
- package/dist/kit/maker/page.d.ts.map +1 -0
- package/dist/kit/maker/page.js +276 -0
- package/dist/kit/maker/page.js.map +1 -0
- package/dist/kit/maker/parts/html-frames/1.0.0/part.json +183 -0
- package/dist/kit/maker/parts/html-frames/src/part.d.ts +3 -0
- package/dist/kit/maker/parts/html-frames/src/part.d.ts.map +1 -0
- package/dist/kit/maker/parts/html-frames/src/part.js +10 -0
- package/dist/kit/maker/parts/html-frames/src/part.js.map +1 -0
- package/dist/kit/maker/runtime.d.ts +7 -0
- package/dist/kit/maker/runtime.d.ts.map +1 -0
- package/dist/kit/maker/runtime.js +571 -0
- package/dist/kit/maker/runtime.js.map +1 -0
- package/dist/kit/maker/unzip.d.ts +3 -0
- package/dist/kit/maker/unzip.d.ts.map +1 -0
- package/dist/kit/maker/unzip.js +133 -0
- package/dist/kit/maker/unzip.js.map +1 -0
- package/dist/kit/parts/catalog.d.ts +47 -0
- package/dist/kit/parts/catalog.d.ts.map +1 -0
- package/dist/kit/parts/catalog.js +198 -0
- package/dist/kit/parts/catalog.js.map +1 -0
- package/dist/kit/parts/fs-safe.d.ts +32 -0
- package/dist/kit/parts/fs-safe.d.ts.map +1 -0
- package/dist/kit/parts/fs-safe.js +185 -0
- package/dist/kit/parts/fs-safe.js.map +1 -0
- package/dist/kit/parts/loader.d.ts +50 -0
- package/dist/kit/parts/loader.d.ts.map +1 -0
- package/dist/kit/parts/loader.js +395 -0
- package/dist/kit/parts/loader.js.map +1 -0
- package/dist/kit/parts/semver.d.ts +6 -0
- package/dist/kit/parts/semver.d.ts.map +1 -0
- package/dist/kit/parts/semver.js +44 -0
- package/dist/kit/parts/semver.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +6 -6
- package/dist/program.js.map +1 -1
- package/dist/skills/installer.d.ts +22 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +56 -8
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/master-skill.d.ts +11 -70
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +120 -2900
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/package-freshness.d.ts +19 -0
- package/dist/skills/package-freshness.d.ts.map +1 -1
- package/dist/skills/package-freshness.js +37 -2
- package/dist/skills/package-freshness.js.map +1 -1
- package/dist/skills/routes.d.ts +7 -2
- package/dist/skills/routes.d.ts.map +1 -1
- package/dist/skills/routes.js +21 -25
- package/dist/skills/routes.js.map +1 -1
- package/dist/skills/server-entry-skills.d.ts +14 -0
- package/dist/skills/server-entry-skills.d.ts.map +1 -0
- package/dist/skills/server-entry-skills.js +119 -0
- package/dist/skills/server-entry-skills.js.map +1 -0
- package/dist/skills/staging-content.js +1 -1
- package/package.json +10 -6
- package/skills/goose-ads/SKILL.md +27 -605
- package/skills/goose-product-photos/SKILL.md +24 -217
- package/skills/goose-video/SKILL.md +23 -610
- package/skills/goose-video-local/SKILL.md +3 -1609
- package/skills/gooseworks/SKILL.md +58 -529
- package/skills/make-custom-video/SKILL.md +23 -725
- package/skills/manifest.json +7 -7
- package/skills/routes.json +10 -24
- package/dist/commands/video-local.d.ts +0 -9
- package/dist/commands/video-local.d.ts.map +0 -1
- package/dist/commands/video-local.js +0 -83
- package/dist/commands/video-local.js.map +0 -1
- package/dist/commands/video-save.d.ts +0 -3
- package/dist/commands/video-save.d.ts.map +0 -1
- package/dist/commands/video-save.js +0 -83
- package/dist/commands/video-save.js.map +0 -1
- package/dist/lib/video-local-captions.d.ts +0 -83
- package/dist/lib/video-local-captions.d.ts.map +0 -1
- package/dist/lib/video-local-captions.js +0 -261
- package/dist/lib/video-local-captions.js.map +0 -1
- package/dist/lib/video-local-runtime.d.ts +0 -8
- package/dist/lib/video-local-runtime.d.ts.map +0 -1
- package/dist/lib/video-local-runtime.js +0 -201
- package/dist/lib/video-local-runtime.js.map +0 -1
- package/dist/lib/video-save-mcp.d.ts +0 -9
- package/dist/lib/video-save-mcp.d.ts.map +0 -1
- package/dist/lib/video-save-mcp.js +0 -162
- package/dist/lib/video-save-mcp.js.map +0 -1
- package/dist/lib/video-save.d.ts +0 -77
- package/dist/lib/video-save.d.ts.map +0 -1
- package/dist/lib/video-save.js +0 -440
- package/dist/lib/video-save.js.map +0 -1
- package/dist/skills/custom-video-skill.d.ts +0 -3
- package/dist/skills/custom-video-skill.d.ts.map +0 -1
- package/dist/skills/custom-video-skill.js +0 -6
- package/dist/skills/custom-video-skill.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../../src/kit/core/canonical.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAI1D;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAShD;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAG9H;AAED,iHAAiH;AACjH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAEzG;AAED,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAGrG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canonicalJson = canonicalJson;
|
|
4
|
+
exports.sha256Hex = sha256Hex;
|
|
5
|
+
exports.canonicalHash = canonicalHash;
|
|
6
|
+
exports.isFileRef = isFileRef;
|
|
7
|
+
exports.hashView = hashView;
|
|
8
|
+
exports.stepHash = stepHash;
|
|
9
|
+
exports.pieceHash = pieceHash;
|
|
10
|
+
exports.pieceSeed = pieceSeed;
|
|
11
|
+
// Hashes (part-interface.md section 5). Every hash is sha256 over canonical
|
|
12
|
+
// JSON: keys sorted, no spaces, undefined dropped (the server's canonical-json
|
|
13
|
+
// rule). In the step, piece and seed hashes a FileRef counts only as
|
|
14
|
+
// { media, sha256 }, never its path, so they match across computers and runs.
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
function canonicalJson(value) {
|
|
17
|
+
if (Array.isArray(value))
|
|
18
|
+
return `[${value.map(canonicalJson).join(',')}]`;
|
|
19
|
+
if (value && typeof value === 'object') {
|
|
20
|
+
const entries = Object.entries(value)
|
|
21
|
+
.filter(([, v]) => v !== undefined)
|
|
22
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
23
|
+
return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(',')}}`;
|
|
24
|
+
}
|
|
25
|
+
return JSON.stringify(value);
|
|
26
|
+
}
|
|
27
|
+
function sha256Hex(data) {
|
|
28
|
+
return (0, crypto_1.createHash)('sha256').update(data).digest('hex');
|
|
29
|
+
}
|
|
30
|
+
function canonicalHash(value) {
|
|
31
|
+
return sha256Hex(canonicalJson(value));
|
|
32
|
+
}
|
|
33
|
+
function isFileRef(value) {
|
|
34
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
35
|
+
return false;
|
|
36
|
+
const v = value;
|
|
37
|
+
return v.kind === 'file' && typeof v.sha256 === 'string' && typeof v.media === 'string' && typeof v.path === 'string';
|
|
38
|
+
}
|
|
39
|
+
/** The value as hashes see it: every FileRef reduced to { media, sha256 }. */
|
|
40
|
+
function hashView(value) {
|
|
41
|
+
if (isFileRef(value))
|
|
42
|
+
return { media: value.media, sha256: value.sha256 };
|
|
43
|
+
if (Array.isArray(value))
|
|
44
|
+
return value.map(hashView);
|
|
45
|
+
if (value && typeof value === 'object') {
|
|
46
|
+
const out = {};
|
|
47
|
+
for (const [k, v] of Object.entries(value))
|
|
48
|
+
out[k] = hashView(v);
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
/** Local cache key of one step: { interface, part, toolchain, inputs }. */
|
|
54
|
+
function stepHash(input) {
|
|
55
|
+
const { fix, ...rest } = input;
|
|
56
|
+
return canonicalHash(hashView(fix ? { ...rest, fix } : rest));
|
|
57
|
+
}
|
|
58
|
+
/** The piece hash, sent as the line's inputs_hash: { part, provider, path, body }, before any file is hosted. */
|
|
59
|
+
function pieceHash(input) {
|
|
60
|
+
return canonicalHash(hashView({ part: { id: input.part.id, version: input.part.version }, provider: input.provider, path: input.path, body: input.body }));
|
|
61
|
+
}
|
|
62
|
+
/** A stable 32-bit seed per piece: the first 4 bytes of sha256({ step, part: id, piece, seed }). */
|
|
63
|
+
function pieceSeed(input) {
|
|
64
|
+
const digest = (0, crypto_1.createHash)('sha256').update(canonicalJson(hashView({ step: input.step, part: input.part, piece: input.piece, seed: input.seed ?? null }))).digest();
|
|
65
|
+
return digest.readUInt32BE(0);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/kit/core/canonical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type VideoLine } from '../line/client';
|
|
2
|
+
import type { KitHost } from './host';
|
|
3
|
+
import { type Toolchain } from './toolchain';
|
|
4
|
+
export interface CheckDeps {
|
|
5
|
+
home: string;
|
|
6
|
+
env: NodeJS.ProcessEnv;
|
|
7
|
+
line: VideoLine;
|
|
8
|
+
host: KitHost;
|
|
9
|
+
say: (line: string) => void;
|
|
10
|
+
tools?: Toolchain;
|
|
11
|
+
}
|
|
12
|
+
export type CheckResult = {
|
|
13
|
+
status: 'ready' | 'not_ready';
|
|
14
|
+
ready?: number;
|
|
15
|
+
total?: number;
|
|
16
|
+
} | {
|
|
17
|
+
status: 'update_kit';
|
|
18
|
+
message: string;
|
|
19
|
+
min_version?: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function checkComputer(deps: CheckDeps): Promise<CheckResult>;
|
|
22
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/kit/core/check.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAK5D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,OAAO,GAAG,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAuCzE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkComputer = checkComputer;
|
|
4
|
+
// `gooseworks video check`: is this computer ready to make videos? It checks
|
|
5
|
+
// and sets up the kit's own ffmpeg, ffprobe and browser (in ~/.gooseworks/kit,
|
|
6
|
+
// never a system install), then sends the device report, so the catalogue
|
|
7
|
+
// offers only the styles this computer can make.
|
|
8
|
+
const client_1 = require("../line/client");
|
|
9
|
+
const device_1 = require("./device");
|
|
10
|
+
const toolchain_1 = require("./toolchain");
|
|
11
|
+
/** Free space the line asks for on top of what the kit keeps (gooseworks-app MIN_DISK_MB). */
|
|
12
|
+
const MIN_DISK_MB = 500;
|
|
13
|
+
async function checkComputer(deps) {
|
|
14
|
+
const { say, line } = deps;
|
|
15
|
+
say('Checking this computer for making videos…');
|
|
16
|
+
const tools = deps.tools ?? (await (0, toolchain_1.inspectFfmpeg)({ home: deps.home, env: deps.env, setup: true, download: (u, m) => line.download(u, m), say }));
|
|
17
|
+
const browser = await deps.host.browser.check({ home: deps.home, setup: true, env: deps.env, say });
|
|
18
|
+
const report = await (0, device_1.deviceReport)({ home: deps.home, worker: line.isWorker, tools, browser });
|
|
19
|
+
const toolsOk = tools.ffmpeg.report.ok && tools.ffprobe.report.ok;
|
|
20
|
+
say(toolsOk ? 'Video tools: ready.' : `Video tools: not ready (${tools.ffmpeg.problem ?? tools.ffprobe.problem ?? 'missing'}).`);
|
|
21
|
+
say(browser.ok ? 'Video browser: ready.' : `Video browser: not ready (${browser.problem ?? 'missing'}). Styles that draw in the browser stay hidden.`);
|
|
22
|
+
const gb = (report.disk_free_mb / 1024).toFixed(1);
|
|
23
|
+
say(report.disk_free_mb >= MIN_DISK_MB ? `Free space: ${gb} GB.` : `Free space: ${gb} GB, too little to make videos. Free at least 1 GB.`);
|
|
24
|
+
const ready = toolsOk && report.disk_free_mb >= MIN_DISK_MB;
|
|
25
|
+
if (line.isWorker) {
|
|
26
|
+
// A worker has no login, and the line takes a worker's device report
|
|
27
|
+
// only with the hand-over, so it goes with `video make`.
|
|
28
|
+
say(ready ? 'Ready to make videos.' : 'Not ready to make videos.');
|
|
29
|
+
return { status: ready ? 'ready' : 'not_ready' };
|
|
30
|
+
}
|
|
31
|
+
if (!line.hasLogin) {
|
|
32
|
+
say('Sign in to GooseWorks on this computer, then run this check again so your styles show up.');
|
|
33
|
+
return { status: 'not_ready' };
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const answer = await line.reportDevice(report);
|
|
37
|
+
if (!answer.kit.ok)
|
|
38
|
+
return { status: 'update_kit', message: 'This video kit is older than the oldest one that works.', min_version: answer.kit.min_version };
|
|
39
|
+
const { ready: styles, total } = answer.styles;
|
|
40
|
+
say(ready ? `Ready: ${styles} ${styles === 1 ? 'style' : 'styles'}${total > styles ? ` of ${total}` : ''}.` : `Not ready yet: ${styles} of ${total} styles can be made here.`);
|
|
41
|
+
return { status: ready ? 'ready' : 'not_ready', ready: styles, total };
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (error instanceof client_1.LineError) {
|
|
45
|
+
if (error.next === 'update_kit')
|
|
46
|
+
return { status: 'update_kit', message: [error.message, error.fix].filter(Boolean).join(' ') };
|
|
47
|
+
say([error.message, error.fix].filter(Boolean).join(' '));
|
|
48
|
+
return { status: 'not_ready' };
|
|
49
|
+
}
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/kit/core/check.ts"],"names":[],"mappings":";;AAyBA,sCAuCC;AAhED,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,iDAAiD;AACjD,2CAA2D;AAC3D,qCAAwC;AAExC,2CAA4D;AAE5D,8FAA8F;AAC9F,MAAM,WAAW,GAAG,GAAG,CAAC;AAejB,KAAK,UAAU,aAAa,CAAC,IAAe;IACjD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAA,yBAAa,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACjJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAE9F,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAClE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,2BAA2B,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,CAAC;IACjI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,6BAA6B,OAAO,CAAC,OAAO,IAAI,SAAS,iDAAiD,CAAC,CAAC;IACvJ,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,qDAAqD,CAAC,CAAC;IAC3I,MAAM,KAAK,GAAG,OAAO,IAAI,MAAM,CAAC,YAAY,IAAI,WAAW,CAAC;IAE5D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,qEAAqE;QACrE,yDAAyD;QACzD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,GAAG,CAAC,2FAA2F,CAAC,CAAC;QACjG,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,yDAAyD,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC7J,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/C,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,kBAAkB,MAAM,OAAO,KAAK,2BAA2B,CAAC,CAAC;QAC/K,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAS,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DeviceReport, ToolReport } from '../line/types';
|
|
2
|
+
import type { Toolchain } from './toolchain';
|
|
3
|
+
/** The device id kept in ~/.gooseworks/kit/device.json, made on first use. */
|
|
4
|
+
export declare function deviceId(home: string): Promise<string>;
|
|
5
|
+
/** Part versions in the cache, by id (at most 200 parts, 50 versions each). */
|
|
6
|
+
export declare function cachedParts(home: string): Array<{
|
|
7
|
+
id: string;
|
|
8
|
+
versions: string[];
|
|
9
|
+
}>;
|
|
10
|
+
export declare function freeDiskMb(dir: string): Promise<number>;
|
|
11
|
+
export declare function deviceReport(input: {
|
|
12
|
+
home: string;
|
|
13
|
+
worker: boolean;
|
|
14
|
+
tools: Toolchain;
|
|
15
|
+
browser: ToolReport;
|
|
16
|
+
}): Promise<DeviceReport>;
|
|
17
|
+
//# sourceMappingURL=device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/kit/core/device.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,8EAA8E;AAC9E,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB5D;AAsBD,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiBnF;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK7D;AAYD,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;CACrB,GAAG,OAAO,CAAC,YAAY,CAAC,CAexB"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.deviceId = deviceId;
|
|
37
|
+
exports.cachedParts = cachedParts;
|
|
38
|
+
exports.freeDiskMb = freeDiskMb;
|
|
39
|
+
exports.deviceReport = deviceReport;
|
|
40
|
+
// This computer as the line sees it: a device id made once (never a hardware
|
|
41
|
+
// id) and the device report `video check` and the hand-over send.
|
|
42
|
+
const crypto_1 = require("crypto");
|
|
43
|
+
const fs_1 = require("fs");
|
|
44
|
+
const promises_1 = require("fs/promises");
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const paths_1 = require("./paths");
|
|
47
|
+
const canonical_1 = require("./canonical");
|
|
48
|
+
const save_1 = require("./save");
|
|
49
|
+
const version_1 = require("./version");
|
|
50
|
+
const DEVICE_ID = /^[A-Za-z0-9-]{8,64}$/;
|
|
51
|
+
const PART_ID = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
52
|
+
/** The device id kept in ~/.gooseworks/kit/device.json, made on first use. */
|
|
53
|
+
async function deviceId(home) {
|
|
54
|
+
const file = (0, paths_1.devicePath)(home);
|
|
55
|
+
await (0, promises_1.mkdir)(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
56
|
+
for (let tries = 0; tries < 100; tries++) {
|
|
57
|
+
const raw = await (0, promises_1.readFile)(file, 'utf8').catch((error) => (error.code === 'ENOENT' ? null : Promise.reject(error)));
|
|
58
|
+
const saved = raw === null ? null : parseDevice(raw);
|
|
59
|
+
if (saved)
|
|
60
|
+
return saved;
|
|
61
|
+
const record = JSON.stringify({ device_id: (0, crypto_1.randomUUID)(), created_at: new Date().toISOString() }, null, 2) + '\n';
|
|
62
|
+
if (raw === null) {
|
|
63
|
+
// The first run to create it wins; everyone reads back what was saved.
|
|
64
|
+
await (0, save_1.createExclusive)(file, record);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
// Damaged: one run repairs it; the others wait and read what it saved.
|
|
68
|
+
if ((await (0, save_1.claimJob)(`${file}.repair.${(0, canonical_1.sha256Hex)(raw).slice(0, 32)}`)) === 'mine') {
|
|
69
|
+
const again = await (0, promises_1.readFile)(file, 'utf8').catch(() => null);
|
|
70
|
+
if (again === raw)
|
|
71
|
+
await (0, save_1.atomicWrite)(file, record);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
75
|
+
}
|
|
76
|
+
throw new Error('This computer’s video kit id could not be read.');
|
|
77
|
+
}
|
|
78
|
+
function parseDevice(raw) {
|
|
79
|
+
try {
|
|
80
|
+
const id = JSON.parse(raw).device_id;
|
|
81
|
+
return typeof id === 'string' && DEVICE_ID.test(id) ? id : null;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function hasCopy(versionDir) {
|
|
88
|
+
try {
|
|
89
|
+
// The loader's own working folders (.staging-*, .quarantine, .<key>.lock) start with a dot.
|
|
90
|
+
return (0, fs_1.readdirSync)(versionDir, { withFileTypes: true }).some((entry) => entry.isDirectory() && !entry.name.startsWith('.') && (0, fs_1.existsSync)(path.join(versionDir, entry.name, 'part.json')));
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Part versions in the cache, by id (at most 200 parts, 50 versions each). */
|
|
97
|
+
function cachedParts(home) {
|
|
98
|
+
const root = (0, paths_1.partsCacheDir)(home);
|
|
99
|
+
if (!(0, fs_1.existsSync)(root))
|
|
100
|
+
return [];
|
|
101
|
+
const parts = [];
|
|
102
|
+
for (const id of (0, fs_1.readdirSync)(root).sort()) {
|
|
103
|
+
if (!PART_ID.test(id) || id.length > 64)
|
|
104
|
+
continue;
|
|
105
|
+
const dir = path.join(root, id);
|
|
106
|
+
if (!(0, fs_1.statSync)(dir).isDirectory())
|
|
107
|
+
continue;
|
|
108
|
+
// Each verified copy lives in its own folder: <id>/<version>/<copy key>/part.json.
|
|
109
|
+
const versions = (0, fs_1.readdirSync)(dir)
|
|
110
|
+
.filter((v) => (0, version_1.isExactVersion)(v) && hasCopy(path.join(dir, v)))
|
|
111
|
+
.sort()
|
|
112
|
+
.slice(0, 50);
|
|
113
|
+
if (versions.length)
|
|
114
|
+
parts.push({ id, versions });
|
|
115
|
+
if (parts.length >= 200)
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
return parts;
|
|
119
|
+
}
|
|
120
|
+
async function freeDiskMb(dir) {
|
|
121
|
+
let probe = dir;
|
|
122
|
+
while (!(0, fs_1.existsSync)(probe) && path.dirname(probe) !== probe)
|
|
123
|
+
probe = path.dirname(probe);
|
|
124
|
+
const stats = await (0, promises_1.statfs)(probe);
|
|
125
|
+
return Math.max(0, Math.floor((Number(stats.bavail) * Number(stats.bsize)) / (1024 * 1024)));
|
|
126
|
+
}
|
|
127
|
+
function osOf() {
|
|
128
|
+
if (process.platform === 'darwin' || process.platform === 'linux' || process.platform === 'win32')
|
|
129
|
+
return process.platform;
|
|
130
|
+
throw new Error('This computer’s system is not one the video kit runs on.');
|
|
131
|
+
}
|
|
132
|
+
function archOf() {
|
|
133
|
+
if (process.arch === 'arm64' || process.arch === 'x64')
|
|
134
|
+
return process.arch;
|
|
135
|
+
throw new Error('This computer’s processor is not one the video kit runs on.');
|
|
136
|
+
}
|
|
137
|
+
async function deviceReport(input) {
|
|
138
|
+
const { problem: _ignored, ...browser } = input.browser;
|
|
139
|
+
return {
|
|
140
|
+
device_id: await deviceId(input.home),
|
|
141
|
+
kind: input.worker ? 'worker' : 'computer',
|
|
142
|
+
os: osOf(),
|
|
143
|
+
arch: archOf(),
|
|
144
|
+
kit_version: version_1.KIT_VERSION,
|
|
145
|
+
interfaces: [...version_1.KIT_INTERFACES],
|
|
146
|
+
ffmpeg: input.tools.ffmpeg.report,
|
|
147
|
+
ffprobe: input.tools.ffprobe.report,
|
|
148
|
+
browser,
|
|
149
|
+
disk_free_mb: await freeDiskMb(input.home),
|
|
150
|
+
parts: cachedParts(input.home),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/kit/core/device.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PartError as PartErrorShape, PartErrorCode } from '../part-interface';
|
|
2
|
+
/** Retried once by the core, as attempt 2 with a new idempotency key. */
|
|
3
|
+
export declare const RETRYABLE: ReadonlySet<PartErrorCode>;
|
|
4
|
+
export declare class PartError extends Error implements PartErrorShape {
|
|
5
|
+
readonly code: PartErrorCode;
|
|
6
|
+
readonly detail?: string | undefined;
|
|
7
|
+
readonly retryable: boolean;
|
|
8
|
+
constructor(code: PartErrorCode, detail?: string | undefined);
|
|
9
|
+
}
|
|
10
|
+
/** A part's thrown value as a PartError; anything else a part throws is a tool failure. */
|
|
11
|
+
export declare function asPartError(error: unknown): PartError;
|
|
12
|
+
/**
|
|
13
|
+
* The run ends here: the line said stop, a check refused the video, or the
|
|
14
|
+
* computer can't make it. `message` is plain words for the person (the line's
|
|
15
|
+
* own message and fix when the line said it). The run is saved first.
|
|
16
|
+
*/
|
|
17
|
+
export declare class KitStop extends Error {
|
|
18
|
+
readonly reason: 'stop' | 'update_kit' | 'change_request' | 'refused' | 'failed';
|
|
19
|
+
readonly code?: string | undefined;
|
|
20
|
+
constructor(message: string, reason?: 'stop' | 'update_kit' | 'change_request' | 'refused' | 'failed', code?: string | undefined);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/kit/core/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,IAAI,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEpF,yEAAyE;AACzE,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,aAAa,CAA0D,CAAC;AAM5G,qBAAa,SAAU,SAAQ,KAAM,YAAW,cAAc;IAEhD,QAAQ,CAAC,IAAI,EAAE,aAAa;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IADlE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBACP,IAAI,EAAE,aAAa,EAAW,MAAM,CAAC,EAAE,MAAM,YAAA;CAKnE;AAED,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAMrD;AAED;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,KAAK;IAG9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ;IAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBAFtB,OAAO,EAAE,MAAM,EACN,MAAM,GAAE,MAAM,GAAG,YAAY,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAiB,EAChF,IAAI,CAAC,EAAE,MAAM,YAAA;CAKzB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KitStop = exports.PartError = exports.RETRYABLE = void 0;
|
|
4
|
+
exports.asPartError = asPartError;
|
|
5
|
+
/** Retried once by the core, as attempt 2 with a new idempotency key. */
|
|
6
|
+
exports.RETRYABLE = new Set(['provider_failed', 'tool_failed', 'timeout']);
|
|
7
|
+
const CODES = new Set([
|
|
8
|
+
'bad_input', 'provider_rejected', 'provider_failed', 'over_quote', 'stopped', 'timeout', 'tool_failed', 'output_invalid', 'needs_missing',
|
|
9
|
+
]);
|
|
10
|
+
class PartError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
detail;
|
|
13
|
+
retryable;
|
|
14
|
+
constructor(code, detail) {
|
|
15
|
+
super(detail ? `${code}: ${detail}` : code);
|
|
16
|
+
this.code = code;
|
|
17
|
+
this.detail = detail;
|
|
18
|
+
this.name = 'PartError';
|
|
19
|
+
this.retryable = exports.RETRYABLE.has(code);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.PartError = PartError;
|
|
23
|
+
/** A part's thrown value as a PartError; anything else a part throws is a tool failure. */
|
|
24
|
+
function asPartError(error) {
|
|
25
|
+
if (error instanceof PartError)
|
|
26
|
+
return error;
|
|
27
|
+
const code = error?.code;
|
|
28
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
29
|
+
if (typeof code === 'string' && CODES.has(code))
|
|
30
|
+
return new PartError(code, error.detail ?? detail);
|
|
31
|
+
return new PartError('tool_failed', detail);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The run ends here: the line said stop, a check refused the video, or the
|
|
35
|
+
* computer can't make it. `message` is plain words for the person (the line's
|
|
36
|
+
* own message and fix when the line said it). The run is saved first.
|
|
37
|
+
*/
|
|
38
|
+
class KitStop extends Error {
|
|
39
|
+
reason;
|
|
40
|
+
code;
|
|
41
|
+
constructor(message, reason = 'stop', code) {
|
|
42
|
+
super(message);
|
|
43
|
+
this.reason = reason;
|
|
44
|
+
this.code = code;
|
|
45
|
+
this.name = 'KitStop';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.KitStop = KitStop;
|
|
49
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/kit/core/errors.ts"],"names":[],"mappings":";;;AAoBA,kCAMC;AAvBD,yEAAyE;AAC5D,QAAA,SAAS,GAA+B,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5G,MAAM,KAAK,GAAwB,IAAI,GAAG,CAAC;IACzC,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe;CAC1I,CAAC,CAAC;AAEH,MAAa,SAAU,SAAQ,KAAK;IAEb;IAA8B;IAD1C,SAAS,CAAU;IAC5B,YAAqB,IAAmB,EAAW,MAAe;QAChE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QADzB,SAAI,GAAJ,IAAI,CAAe;QAAW,WAAM,GAAN,MAAM,CAAS;QAEhE,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF;AAPD,8BAOC;AAED,2FAA2F;AAC3F,SAAgB,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,IAAI,GAAI,KAA4B,EAAE,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,SAAS,CAAC,IAAqB,EAAG,KAA6B,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IAC9I,OAAO,IAAI,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAa,OAAQ,SAAQ,KAAK;IAGrB;IACA;IAHX,YACE,OAAe,EACN,SAA0E,MAAM,EAChF,IAAa;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,WAAM,GAAN,MAAM,CAA0E;QAChF,SAAI,GAAJ,IAAI,CAAS;QAGtB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;CACF;AATD,0BASC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { FileRef, MediaInfo, MediaKind } from '../part-interface';
|
|
2
|
+
export declare function mimeOf(file: string): string;
|
|
3
|
+
export declare function mediaOfMime(mime: string): MediaKind;
|
|
4
|
+
export declare function hashFile(file: string): Promise<{
|
|
5
|
+
sha256: string;
|
|
6
|
+
bytes: number;
|
|
7
|
+
}>;
|
|
8
|
+
export type Probe = (file: string) => Promise<MediaInfo>;
|
|
9
|
+
/** A FileRef for a file on disk: hashed, and probed when it is audio, video or an image. */
|
|
10
|
+
export declare function fileRef(file: string, media: MediaKind, probe?: Probe, mime?: string): Promise<FileRef>;
|
|
11
|
+
/** Whether a FileRef's file is still there with the same bytes. */
|
|
12
|
+
export declare function intact(ref: FileRef): Promise<boolean>;
|
|
13
|
+
/** A file frozen with the plan at the yes: { url, sha256, bytes, mime }. */
|
|
14
|
+
export interface FrozenFile {
|
|
15
|
+
url: string;
|
|
16
|
+
sha256: string;
|
|
17
|
+
bytes: number;
|
|
18
|
+
mime: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function isFrozenFile(value: unknown): value is FrozenFile;
|
|
21
|
+
/**
|
|
22
|
+
* A file the line hosts for this video, frozen with the plan:
|
|
23
|
+
* { file_id, ref: "gooseworks-file:<file_id>", sha256, bytes, mime }.
|
|
24
|
+
*/
|
|
25
|
+
export interface LineFile {
|
|
26
|
+
file_id: string;
|
|
27
|
+
ref: string;
|
|
28
|
+
sha256: string;
|
|
29
|
+
bytes: number;
|
|
30
|
+
mime: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function isLineFile(value: unknown): value is LineFile;
|
|
33
|
+
export interface PlanFiles {
|
|
34
|
+
dir: string;
|
|
35
|
+
/** Downloads a link (a frozen file's, or a hosted file's fresh link). */
|
|
36
|
+
download: (url: string, maxBytes: number) => Promise<Buffer>;
|
|
37
|
+
/** A fresh short-lived link to a file the line hosts for this video. */
|
|
38
|
+
hostedLink: (fileId: string) => Promise<string>;
|
|
39
|
+
/** Told about each hosted file once its bytes are checked, so payloads can name it as it is. */
|
|
40
|
+
onHosted?: (sha256: string, ref: string) => void;
|
|
41
|
+
probe?: Probe;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The value with every plan file (a frozen link, or a file the line hosts)
|
|
45
|
+
* downloaded into the run folder, checked against its hash and size, and
|
|
46
|
+
* swapped for its FileRef. One file that fails its check stops the run.
|
|
47
|
+
*/
|
|
48
|
+
export declare function materialize(value: unknown, files: PlanFiles): Promise<unknown>;
|
|
49
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/kit/core/files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAmBvE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CASnD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAavF;AAED,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAEzD,4FAA4F;AAC5F,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB5G;AAED,mEAAmE;AACnE,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ3D;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAKhE;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAc5D;AAID,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,wEAAwE;IACxE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,gGAAgG;IAChG,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAkBD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BpF"}
|