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.
Files changed (220) hide show
  1. package/README.md +17 -26
  2. package/dist/auth/device-flow.d.ts +10 -0
  3. package/dist/auth/device-flow.d.ts.map +1 -1
  4. package/dist/auth/device-flow.js +39 -1
  5. package/dist/auth/device-flow.js.map +1 -1
  6. package/dist/commands/doctor.d.ts.map +1 -1
  7. package/dist/commands/doctor.js +3 -1
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/video.d.ts +5 -0
  10. package/dist/commands/video.d.ts.map +1 -0
  11. package/dist/commands/video.js +117 -0
  12. package/dist/commands/video.js.map +1 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +5 -2
  15. package/dist/config.js.map +1 -1
  16. package/dist/environment.d.ts.map +1 -1
  17. package/dist/environment.js +4 -2
  18. package/dist/environment.js.map +1 -1
  19. package/dist/kit/core/bind.d.ts +12 -0
  20. package/dist/kit/core/bind.d.ts.map +1 -0
  21. package/dist/kit/core/bind.js +77 -0
  22. package/dist/kit/core/bind.js.map +1 -0
  23. package/dist/kit/core/canonical.d.ts +30 -0
  24. package/dist/kit/core/canonical.d.ts.map +1 -0
  25. package/dist/kit/core/canonical.js +67 -0
  26. package/dist/kit/core/canonical.js.map +1 -0
  27. package/dist/kit/core/check.d.ts +22 -0
  28. package/dist/kit/core/check.d.ts.map +1 -0
  29. package/dist/kit/core/check.js +53 -0
  30. package/dist/kit/core/check.js.map +1 -0
  31. package/dist/kit/core/device.d.ts +17 -0
  32. package/dist/kit/core/device.d.ts.map +1 -0
  33. package/dist/kit/core/device.js +153 -0
  34. package/dist/kit/core/device.js.map +1 -0
  35. package/dist/kit/core/errors.d.ts +22 -0
  36. package/dist/kit/core/errors.d.ts.map +1 -0
  37. package/dist/kit/core/errors.js +49 -0
  38. package/dist/kit/core/errors.js.map +1 -0
  39. package/dist/kit/core/files.d.ts +49 -0
  40. package/dist/kit/core/files.d.ts.map +1 -0
  41. package/dist/kit/core/files.js +213 -0
  42. package/dist/kit/core/files.js.map +1 -0
  43. package/dist/kit/core/host.d.ts +26 -0
  44. package/dist/kit/core/host.d.ts.map +1 -0
  45. package/dist/kit/core/host.js +10 -0
  46. package/dist/kit/core/host.js.map +1 -0
  47. package/dist/kit/core/log.d.ts +17 -0
  48. package/dist/kit/core/log.d.ts.map +1 -0
  49. package/dist/kit/core/log.js +82 -0
  50. package/dist/kit/core/log.js.map +1 -0
  51. package/dist/kit/core/paths.d.ts +27 -0
  52. package/dist/kit/core/paths.d.ts.map +1 -0
  53. package/dist/kit/core/paths.js +103 -0
  54. package/dist/kit/core/paths.js.map +1 -0
  55. package/dist/kit/core/pieces.d.ts +84 -0
  56. package/dist/kit/core/pieces.d.ts.map +1 -0
  57. package/dist/kit/core/pieces.js +374 -0
  58. package/dist/kit/core/pieces.js.map +1 -0
  59. package/dist/kit/core/progress-reporter.d.ts +30 -0
  60. package/dist/kit/core/progress-reporter.d.ts.map +1 -0
  61. package/dist/kit/core/progress-reporter.js +106 -0
  62. package/dist/kit/core/progress-reporter.js.map +1 -0
  63. package/dist/kit/core/progress.d.ts +22 -0
  64. package/dist/kit/core/progress.d.ts.map +1 -0
  65. package/dist/kit/core/progress.js +90 -0
  66. package/dist/kit/core/progress.js.map +1 -0
  67. package/dist/kit/core/run.d.ts +35 -0
  68. package/dist/kit/core/run.d.ts.map +1 -0
  69. package/dist/kit/core/run.js +850 -0
  70. package/dist/kit/core/run.js.map +1 -0
  71. package/dist/kit/core/save.d.ts +43 -0
  72. package/dist/kit/core/save.d.ts.map +1 -0
  73. package/dist/kit/core/save.js +265 -0
  74. package/dist/kit/core/save.js.map +1 -0
  75. package/dist/kit/core/schema.d.ts +5 -0
  76. package/dist/kit/core/schema.d.ts.map +1 -0
  77. package/dist/kit/core/schema.js +183 -0
  78. package/dist/kit/core/schema.js.map +1 -0
  79. package/dist/kit/core/secrets.d.ts +9 -0
  80. package/dist/kit/core/secrets.d.ts.map +1 -0
  81. package/dist/kit/core/secrets.js +60 -0
  82. package/dist/kit/core/secrets.js.map +1 -0
  83. package/dist/kit/core/style.d.ts +59 -0
  84. package/dist/kit/core/style.d.ts.map +1 -0
  85. package/dist/kit/core/style.js +179 -0
  86. package/dist/kit/core/style.js.map +1 -0
  87. package/dist/kit/core/toolchain.d.ts +52 -0
  88. package/dist/kit/core/toolchain.d.ts.map +1 -0
  89. package/dist/kit/core/toolchain.js +321 -0
  90. package/dist/kit/core/toolchain.js.map +1 -0
  91. package/dist/kit/core/version.d.ts +18 -0
  92. package/dist/kit/core/version.d.ts.map +1 -0
  93. package/dist/kit/core/version.js +33 -0
  94. package/dist/kit/core/version.js.map +1 -0
  95. package/dist/kit/env.d.ts +42 -0
  96. package/dist/kit/env.d.ts.map +1 -0
  97. package/dist/kit/env.js +76 -0
  98. package/dist/kit/env.js.map +1 -0
  99. package/dist/kit/line/client.d.ts +82 -0
  100. package/dist/kit/line/client.d.ts.map +1 -0
  101. package/dist/kit/line/client.js +325 -0
  102. package/dist/kit/line/client.js.map +1 -0
  103. package/dist/kit/line/types.d.ts +178 -0
  104. package/dist/kit/line/types.d.ts.map +1 -0
  105. package/dist/kit/line/types.js +18 -0
  106. package/dist/kit/line/types.js.map +1 -0
  107. package/dist/kit/maker/browser.d.ts +114 -0
  108. package/dist/kit/maker/browser.d.ts.map +1 -0
  109. package/dist/kit/maker/browser.js +547 -0
  110. package/dist/kit/maker/browser.js.map +1 -0
  111. package/dist/kit/maker/encode.d.ts +27 -0
  112. package/dist/kit/maker/encode.d.ts.map +1 -0
  113. package/dist/kit/maker/encode.js +58 -0
  114. package/dist/kit/maker/encode.js.map +1 -0
  115. package/dist/kit/maker/images.d.ts +14 -0
  116. package/dist/kit/maker/images.d.ts.map +1 -0
  117. package/dist/kit/maker/images.js +174 -0
  118. package/dist/kit/maker/images.js.map +1 -0
  119. package/dist/kit/maker/inputs.d.ts +81 -0
  120. package/dist/kit/maker/inputs.d.ts.map +1 -0
  121. package/dist/kit/maker/inputs.js +235 -0
  122. package/dist/kit/maker/inputs.js.map +1 -0
  123. package/dist/kit/maker/make.d.ts +19 -0
  124. package/dist/kit/maker/make.d.ts.map +1 -0
  125. package/dist/kit/maker/make.js +272 -0
  126. package/dist/kit/maker/make.js.map +1 -0
  127. package/dist/kit/maker/page.d.ts +19 -0
  128. package/dist/kit/maker/page.d.ts.map +1 -0
  129. package/dist/kit/maker/page.js +276 -0
  130. package/dist/kit/maker/page.js.map +1 -0
  131. package/dist/kit/maker/parts/html-frames/1.0.0/part.json +183 -0
  132. package/dist/kit/maker/parts/html-frames/src/part.d.ts +3 -0
  133. package/dist/kit/maker/parts/html-frames/src/part.d.ts.map +1 -0
  134. package/dist/kit/maker/parts/html-frames/src/part.js +10 -0
  135. package/dist/kit/maker/parts/html-frames/src/part.js.map +1 -0
  136. package/dist/kit/maker/runtime.d.ts +7 -0
  137. package/dist/kit/maker/runtime.d.ts.map +1 -0
  138. package/dist/kit/maker/runtime.js +571 -0
  139. package/dist/kit/maker/runtime.js.map +1 -0
  140. package/dist/kit/maker/unzip.d.ts +3 -0
  141. package/dist/kit/maker/unzip.d.ts.map +1 -0
  142. package/dist/kit/maker/unzip.js +133 -0
  143. package/dist/kit/maker/unzip.js.map +1 -0
  144. package/dist/kit/parts/catalog.d.ts +47 -0
  145. package/dist/kit/parts/catalog.d.ts.map +1 -0
  146. package/dist/kit/parts/catalog.js +198 -0
  147. package/dist/kit/parts/catalog.js.map +1 -0
  148. package/dist/kit/parts/fs-safe.d.ts +32 -0
  149. package/dist/kit/parts/fs-safe.d.ts.map +1 -0
  150. package/dist/kit/parts/fs-safe.js +185 -0
  151. package/dist/kit/parts/fs-safe.js.map +1 -0
  152. package/dist/kit/parts/loader.d.ts +50 -0
  153. package/dist/kit/parts/loader.d.ts.map +1 -0
  154. package/dist/kit/parts/loader.js +395 -0
  155. package/dist/kit/parts/loader.js.map +1 -0
  156. package/dist/kit/parts/semver.d.ts +6 -0
  157. package/dist/kit/parts/semver.d.ts.map +1 -0
  158. package/dist/kit/parts/semver.js +44 -0
  159. package/dist/kit/parts/semver.js.map +1 -0
  160. package/dist/program.d.ts.map +1 -1
  161. package/dist/program.js +6 -6
  162. package/dist/program.js.map +1 -1
  163. package/dist/skills/installer.d.ts +22 -0
  164. package/dist/skills/installer.d.ts.map +1 -1
  165. package/dist/skills/installer.js +56 -8
  166. package/dist/skills/installer.js.map +1 -1
  167. package/dist/skills/master-skill.d.ts +11 -70
  168. package/dist/skills/master-skill.d.ts.map +1 -1
  169. package/dist/skills/master-skill.js +120 -2900
  170. package/dist/skills/master-skill.js.map +1 -1
  171. package/dist/skills/package-freshness.d.ts +19 -0
  172. package/dist/skills/package-freshness.d.ts.map +1 -1
  173. package/dist/skills/package-freshness.js +37 -2
  174. package/dist/skills/package-freshness.js.map +1 -1
  175. package/dist/skills/routes.d.ts +7 -2
  176. package/dist/skills/routes.d.ts.map +1 -1
  177. package/dist/skills/routes.js +21 -25
  178. package/dist/skills/routes.js.map +1 -1
  179. package/dist/skills/server-entry-skills.d.ts +14 -0
  180. package/dist/skills/server-entry-skills.d.ts.map +1 -0
  181. package/dist/skills/server-entry-skills.js +119 -0
  182. package/dist/skills/server-entry-skills.js.map +1 -0
  183. package/dist/skills/staging-content.js +1 -1
  184. package/package.json +10 -6
  185. package/skills/goose-ads/SKILL.md +27 -605
  186. package/skills/goose-product-photos/SKILL.md +24 -217
  187. package/skills/goose-video/SKILL.md +23 -610
  188. package/skills/goose-video-local/SKILL.md +3 -1609
  189. package/skills/gooseworks/SKILL.md +58 -529
  190. package/skills/make-custom-video/SKILL.md +23 -725
  191. package/skills/manifest.json +7 -7
  192. package/skills/routes.json +10 -24
  193. package/dist/commands/video-local.d.ts +0 -9
  194. package/dist/commands/video-local.d.ts.map +0 -1
  195. package/dist/commands/video-local.js +0 -83
  196. package/dist/commands/video-local.js.map +0 -1
  197. package/dist/commands/video-save.d.ts +0 -3
  198. package/dist/commands/video-save.d.ts.map +0 -1
  199. package/dist/commands/video-save.js +0 -83
  200. package/dist/commands/video-save.js.map +0 -1
  201. package/dist/lib/video-local-captions.d.ts +0 -83
  202. package/dist/lib/video-local-captions.d.ts.map +0 -1
  203. package/dist/lib/video-local-captions.js +0 -261
  204. package/dist/lib/video-local-captions.js.map +0 -1
  205. package/dist/lib/video-local-runtime.d.ts +0 -8
  206. package/dist/lib/video-local-runtime.d.ts.map +0 -1
  207. package/dist/lib/video-local-runtime.js +0 -201
  208. package/dist/lib/video-local-runtime.js.map +0 -1
  209. package/dist/lib/video-save-mcp.d.ts +0 -9
  210. package/dist/lib/video-save-mcp.d.ts.map +0 -1
  211. package/dist/lib/video-save-mcp.js +0 -162
  212. package/dist/lib/video-save-mcp.js.map +0 -1
  213. package/dist/lib/video-save.d.ts +0 -77
  214. package/dist/lib/video-save.d.ts.map +0 -1
  215. package/dist/lib/video-save.js +0 -440
  216. package/dist/lib/video-save.js.map +0 -1
  217. package/dist/skills/custom-video-skill.d.ts +0 -3
  218. package/dist/skills/custom-video-skill.d.ts.map +0 -1
  219. package/dist/skills/custom-video-skill.js +0 -6
  220. package/dist/skills/custom-video-skill.js.map +0 -1
@@ -0,0 +1,321 @@
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.REQUIRED_ENCODERS = exports.REQUIRED_FILTERS = void 0;
37
+ exports.childEnv = childEnv;
38
+ exports.listedNames = listedNames;
39
+ exports.probeFfmpeg = probeFfmpeg;
40
+ exports.probeFfprobe = probeFfprobe;
41
+ exports.inspectFfmpeg = inspectFfmpeg;
42
+ exports.toolchainId = toolchainId;
43
+ exports.parseProbe = parseProbe;
44
+ exports.encodeArgs = encodeArgs;
45
+ exports.kitTools = kitTools;
46
+ // The kit's ffmpeg and ffprobe: found, checked and, when missing, set up in
47
+ // ~/.gooseworks/kit/bin (never a system install). A worker image sets
48
+ // FFMPEG_PATH and FFPROBE_PATH; the kit then uses those copies as they are and
49
+ // never downloads a second one.
50
+ const child_process_1 = require("child_process");
51
+ const fs_1 = require("fs");
52
+ const path = __importStar(require("path"));
53
+ const zlib_1 = require("zlib");
54
+ const canonical_1 = require("./canonical");
55
+ const errors_1 = require("./errors");
56
+ const paths_1 = require("./paths");
57
+ /** What every video needs from ffmpeg: libass to draw captions, libx264 to encode. */
58
+ exports.REQUIRED_FILTERS = ['ass', 'subtitles'];
59
+ exports.REQUIRED_ENCODERS = ['libx264'];
60
+ const BUILD = 'b6.1.1';
61
+ const RELEASE = `https://github.com/eugeneware/ffmpeg-static/releases/download/${BUILD}`;
62
+ /** Pinned static builds, checked by sha256 before they are used. */
63
+ const PINNED = {
64
+ 'darwin-arm64': {
65
+ ffmpeg: { url: `${RELEASE}/ffmpeg-darwin-arm64.gz`, gz_sha256: '8923876afa8db5585022d7860ec7e589af192f441c56793971276d450ed3bbfa', gz_bytes: 19246198, bin_sha256: 'a90e3db6a3fd35f6074b013f948b1aa45b31c6375489d39e572bea3f18336584' },
66
+ ffprobe: { url: `${RELEASE}/ffprobe-darwin-arm64.gz`, gz_sha256: 'd986a8ec7b030899fe66a8a288ed809a3543338705a3ce178cfb85869c5d80be', gz_bytes: 19207077, bin_sha256: 'bb2db6f5d8cef919da12fbf592119a987202a8c060a886f3cab091f9cab90b64' },
67
+ },
68
+ 'darwin-x64': {
69
+ ffmpeg: { url: `${RELEASE}/ffmpeg-darwin-x64.gz`, gz_sha256: '929b375c1182d956c51f7ac25e0b2b0411fb01f6f407aa15c9758efeb4242106', gz_bytes: 25296431, bin_sha256: 'ebdddc936f61e14049a2d4b549a412b8a40deeff6540e58a9f2a2da9e6b18894' },
70
+ ffprobe: { url: `${RELEASE}/ffprobe-darwin-x64.gz`, gz_sha256: 'd4da574d6e2e197bd259b47d69cf262df9e312af24ad960444f6d806d3d4c186', gz_bytes: 25239438, bin_sha256: 'fa3add0ce901f7241abe0dfc0155d958fc834aca3f8ce61f87cc712ae669c1e0' },
71
+ },
72
+ 'linux-arm64': {
73
+ ffmpeg: { url: `${RELEASE}/ffmpeg-linux-arm64.gz`, gz_sha256: '754a678672298bc68156adff58aa7385a592c2b30b1d0ae8750c45c915c4bac0', gz_bytes: 25568691, bin_sha256: '6bb182d0d75d23028db82e9e4f723ca69b853d055698486e6984ddb2c06fb8ce' },
74
+ ffprobe: { url: `${RELEASE}/ffprobe-linux-arm64.gz`, gz_sha256: '2ab6aba60ee84412dff9188720703376cb4e7aaf7e0b5e43aa8249f2acae5bf8', gz_bytes: 25493573, bin_sha256: 'd17ae9b4c297d48e2521ba14e417bb0537c6ff77c584cdbcd6bb0d8d0307a2e8' },
75
+ },
76
+ 'linux-x64': {
77
+ ffmpeg: { url: `${RELEASE}/ffmpeg-linux-x64.gz`, gz_sha256: 'bfe8a8fc511530457b528c48d77b5737527b504a3797a9bc4866aeca69c2dffa', gz_bytes: 29354986, bin_sha256: 'e7e7fb30477f717e6f55f9180a70386c62677ef8a4d4d1a5d948f4098aa3eb99' },
78
+ ffprobe: { url: `${RELEASE}/ffprobe-linux-x64.gz`, gz_sha256: '25d9b6ccb05e3d9de9e04e31e2506d8dd7f9f0418981965ac6df12e8d3afd067', gz_bytes: 29276839, bin_sha256: '4f231a1960d83e403d08f7971e271707bec278a9ae18e21b8b5b03186668450d' },
79
+ },
80
+ };
81
+ /** The environment ffmpeg and ffprobe run with: nothing secret, nothing from the person's shell. */
82
+ function childEnv(env = process.env) {
83
+ const out = {};
84
+ for (const name of ['PATH', 'HOME', 'TMPDIR', 'LANG', 'LC_ALL', 'TZ'])
85
+ if (env[name])
86
+ out[name] = env[name];
87
+ return out;
88
+ }
89
+ function runQuiet(bin, args) {
90
+ try {
91
+ const r = (0, child_process_1.spawnSync)(bin, args, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], env: childEnv(), timeout: 20_000, maxBuffer: 8 * 1024 * 1024 });
92
+ return { ok: r.status === 0, out: `${r.stdout ?? ''}${r.stderr ?? ''}` };
93
+ }
94
+ catch {
95
+ return { ok: false, out: '' };
96
+ }
97
+ }
98
+ /** Names from `ffmpeg -filters` or `-encoders`: the word after the flags column. */
99
+ function listedNames(output) {
100
+ const names = new Set();
101
+ for (const line of output.split('\n')) {
102
+ const match = /^\s*[A-Z.|]{2,}\s+([A-Za-z0-9_]+)\s/.exec(line);
103
+ if (match)
104
+ names.add(match[1]);
105
+ }
106
+ return [...names].sort();
107
+ }
108
+ function versionOf(output) {
109
+ const match = /version\s+(\S+)/.exec(output);
110
+ return match ? match[1].slice(0, 100) : null;
111
+ }
112
+ /** Checks one ffmpeg build: it runs, and it has libass and libx264. */
113
+ function probeFfmpeg(bin, bundled) {
114
+ const version = runQuiet(bin, ['-hide_banner', '-version']);
115
+ if (!version.ok)
116
+ return { path: null, report: { ok: false, version: null, bundled }, problem: 'the video tools do not start' };
117
+ const filters = listedNames(runQuiet(bin, ['-hide_banner', '-filters']).out);
118
+ const encoders = listedNames(runQuiet(bin, ['-hide_banner', '-encoders']).out);
119
+ const missing = [...exports.REQUIRED_FILTERS.filter((f) => !filters.includes(f)), ...exports.REQUIRED_ENCODERS.filter((e) => !encoders.includes(e))];
120
+ const report = {
121
+ ok: missing.length === 0,
122
+ version: versionOf(version.out),
123
+ bundled,
124
+ ...(bundled ? {} : { filters: filters.slice(0, 1000), encoders: encoders.slice(0, 500) }),
125
+ };
126
+ const gaps = [
127
+ ...(exports.REQUIRED_FILTERS.some((f) => missing.includes(f)) ? ['can’t draw captions'] : []),
128
+ ...(exports.REQUIRED_ENCODERS.some((e) => missing.includes(e)) ? ['can’t save videos'] : []),
129
+ ];
130
+ return { path: missing.length ? null : bin, report, filters, encoders, ...(gaps.length ? { problem: `the video tools here ${gaps.join(' and ')}` } : {}) };
131
+ }
132
+ function probeFfprobe(bin, bundled) {
133
+ const version = runQuiet(bin, ['-hide_banner', '-version']);
134
+ if (!version.ok)
135
+ return { path: null, report: { ok: false, version: null, bundled }, problem: 'the video probe does not start' };
136
+ return { path: bin, report: { ok: true, version: versionOf(version.out), bundled } };
137
+ }
138
+ function onPath(name) {
139
+ const r = runQuiet(process.platform === 'win32' ? 'where' : 'which', [name]);
140
+ const first = r.out.split('\n')[0]?.trim();
141
+ return r.ok && first ? first : null;
142
+ }
143
+ function bundledPaths(home) {
144
+ const dir = path.join((0, paths_1.kitBinDir)(home), `ffmpeg-${BUILD}`);
145
+ return { dir, ffmpeg: path.join(dir, 'ffmpeg'), ffprobe: path.join(dir, 'ffprobe') };
146
+ }
147
+ /** Downloads and checks one pinned binary into the kit's own folder. */
148
+ async function installPinned(file, target, download) {
149
+ const gz = await download(file.url, file.gz_bytes + 1024);
150
+ if (gz.length !== file.gz_bytes || (0, canonical_1.sha256Hex)(gz) !== file.gz_sha256)
151
+ throw new Error('A downloaded video tool did not match its checksum.');
152
+ const bin = (0, zlib_1.gunzipSync)(gz);
153
+ if ((0, canonical_1.sha256Hex)(bin) !== file.bin_sha256)
154
+ throw new Error('A downloaded video tool did not match its checksum.');
155
+ (0, fs_1.mkdirSync)(path.dirname(target), { recursive: true, mode: 0o700 });
156
+ const temp = `${target}.${process.pid}.pending`;
157
+ (0, fs_1.writeFileSync)(temp, bin, { mode: 0o755 });
158
+ (0, fs_1.chmodSync)(temp, 0o755);
159
+ (0, fs_1.renameSync)(temp, target);
160
+ }
161
+ /**
162
+ * Finds ffmpeg and ffprobe in this order: the image's copies (FFMPEG_PATH,
163
+ * FFPROBE_PATH), the kit's own, a fresh download of the pinned build, then
164
+ * the computer's own copies when they have what videos need.
165
+ */
166
+ async function inspectFfmpeg(opts) {
167
+ const env = opts.env ?? process.env;
168
+ if (env.FFMPEG_PATH || env.FFPROBE_PATH) {
169
+ return {
170
+ ffmpeg: env.FFMPEG_PATH ? probeFfmpeg(env.FFMPEG_PATH, false) : { path: null, report: { ok: false, version: null, bundled: false }, problem: 'FFMPEG_PATH is not set' },
171
+ ffprobe: env.FFPROBE_PATH ? probeFfprobe(env.FFPROBE_PATH, false) : { path: null, report: { ok: false, version: null, bundled: false }, problem: 'FFPROBE_PATH is not set' },
172
+ };
173
+ }
174
+ const own = bundledPaths(opts.home);
175
+ const pinned = PINNED[`${process.platform}-${process.arch}`];
176
+ let setupProblem;
177
+ if (pinned && opts.setup && (!(0, fs_1.existsSync)(own.ffmpeg) || !(0, fs_1.existsSync)(own.ffprobe))) {
178
+ opts.say?.('Setting up the video tools (about 50 MB, once)…');
179
+ try {
180
+ if (!(0, fs_1.existsSync)(own.ffmpeg))
181
+ await installPinned(pinned.ffmpeg, own.ffmpeg, opts.download);
182
+ if (!(0, fs_1.existsSync)(own.ffprobe))
183
+ await installPinned(pinned.ffprobe, own.ffprobe, opts.download);
184
+ }
185
+ catch (error) {
186
+ setupProblem = error instanceof Error ? error.message : 'the video tools could not be set up';
187
+ }
188
+ }
189
+ if ((0, fs_1.existsSync)(own.ffmpeg) && (0, fs_1.existsSync)(own.ffprobe)) {
190
+ const ffmpeg = probeFfmpeg(own.ffmpeg, true);
191
+ const ffprobe = probeFfprobe(own.ffprobe, true);
192
+ if (ffmpeg.report.ok && ffprobe.report.ok)
193
+ return { ffmpeg, ffprobe };
194
+ // A pinned build that can't make videos here is removed, not used.
195
+ (0, fs_1.rmSync)(own.dir, { recursive: true, force: true });
196
+ setupProblem = ffmpeg.problem ?? ffprobe.problem;
197
+ }
198
+ const systemFfmpeg = onPath('ffmpeg');
199
+ const systemFfprobe = onPath('ffprobe');
200
+ const ffmpeg = systemFfmpeg ? probeFfmpeg(systemFfmpeg, false) : { path: null, report: { ok: false, version: null, bundled: false }, problem: setupProblem ?? (pinned ? 'the video tools are not set up yet' : 'this computer’s system is not supported for the video tools') };
201
+ const ffprobe = systemFfprobe ? probeFfprobe(systemFfprobe, false) : { path: null, report: { ok: false, version: null, bundled: false }, problem: setupProblem ?? 'the video probe is not set up yet' };
202
+ return { ffmpeg, ffprobe };
203
+ }
204
+ /** "ffmpeg-<version>/chromium-<version>": part of every step hash. */
205
+ function toolchainId(tools, browserVersion) {
206
+ return `ffmpeg-${tools.ffmpeg.report.version ?? 'none'}/chromium-${browserVersion ?? 'none'}`;
207
+ }
208
+ function numberOf(value) {
209
+ const n = typeof value === 'string' ? Number(value) : typeof value === 'number' ? value : NaN;
210
+ return Number.isFinite(n) && n > 0 ? n : undefined;
211
+ }
212
+ function rate(value) {
213
+ if (typeof value !== 'string' || !value.includes('/'))
214
+ return numberOf(value);
215
+ const [a, b] = value.split('/').map(Number);
216
+ return a > 0 && b > 0 ? Math.round((a / b) * 1000) / 1000 : undefined;
217
+ }
218
+ /** ffprobe's answer for one file. */
219
+ function parseProbe(json) {
220
+ const data = JSON.parse(json);
221
+ const streams = data.streams ?? [];
222
+ const video = streams.find((s) => s.codec_type === 'video');
223
+ const audio = streams.find((s) => s.codec_type === 'audio');
224
+ const info = { has_audio: !!audio, has_video: !!video };
225
+ const duration = numberOf(data.format?.duration);
226
+ if (duration !== undefined)
227
+ info.duration_s = duration;
228
+ if (video) {
229
+ const width = numberOf(video.width);
230
+ const height = numberOf(video.height);
231
+ const fps = rate(video.avg_frame_rate) ?? rate(video.r_frame_rate);
232
+ if (width)
233
+ info.width = width;
234
+ if (height)
235
+ info.height = height;
236
+ if (fps)
237
+ info.fps = fps;
238
+ if (typeof video.codec_name === 'string')
239
+ info.video_codec = video.codec_name;
240
+ }
241
+ if (audio && typeof audio.codec_name === 'string')
242
+ info.audio_codec = audio.codec_name;
243
+ return info;
244
+ }
245
+ /** Encoder flags that pin every setting that changes the output bytes, threads included. */
246
+ function encodeArgs(preset) {
247
+ const exact = ['-fflags', '+bitexact', '-flags', '+bitexact', '-map_metadata', '-1'];
248
+ switch (preset) {
249
+ case 'h264-master':
250
+ return ['-c:v', 'libx264', '-preset', 'medium', '-crf', '18', '-pix_fmt', 'yuv420p', '-threads', '1', '-x264-params', 'threads=1:lookahead-threads=1', '-movflags', '+faststart', ...exact];
251
+ case 'h264-intermediate':
252
+ return ['-c:v', 'libx264', '-preset', 'veryfast', '-crf', '12', '-pix_fmt', 'yuv420p', '-threads', '1', '-x264-params', 'threads=1:lookahead-threads=1', ...exact];
253
+ case 'aac':
254
+ return ['-c:a', 'aac', '-b:a', '192k', '-threads', '1', ...exact];
255
+ }
256
+ }
257
+ /** The tools a part gets: the two binaries only, no shell, killed on abort. */
258
+ function kitTools(chain, signal) {
259
+ const exec = (bin, args, options = {}) => new Promise((resolve, reject) => {
260
+ if (bin !== 'ffmpeg' && bin !== 'ffprobe')
261
+ return reject(new errors_1.PartError('bad_input', 'only ffmpeg and ffprobe can run'));
262
+ if (signal.aborted)
263
+ return reject(new errors_1.PartError('stopped'));
264
+ const child = (0, child_process_1.spawn)(bin === 'ffmpeg' ? chain.ffmpeg : chain.ffprobe, args, {
265
+ cwd: options.cwd,
266
+ env: childEnv(),
267
+ shell: false,
268
+ stdio: [options.stdin ? 'pipe' : 'ignore', 'pipe', 'pipe'],
269
+ });
270
+ const out = [];
271
+ const err = [];
272
+ let size = 0;
273
+ const keep = (into) => (chunk) => {
274
+ size += chunk.length;
275
+ if (size <= 64 * 1024 * 1024)
276
+ into.push(chunk);
277
+ };
278
+ child.stdout?.on('data', keep(out));
279
+ child.stderr?.on('data', keep(err));
280
+ let ended = null;
281
+ const kill = (why) => {
282
+ ended = why;
283
+ child.kill('SIGKILL');
284
+ };
285
+ const onAbort = () => kill(new errors_1.PartError('stopped'));
286
+ signal.addEventListener('abort', onAbort, { once: true });
287
+ const timer = options.timeoutMs ? setTimeout(() => kill(new errors_1.PartError('timeout', `${bin} ran too long`)), options.timeoutMs) : null;
288
+ child.on('error', (error) => {
289
+ signal.removeEventListener('abort', onAbort);
290
+ if (timer)
291
+ clearTimeout(timer);
292
+ reject(new errors_1.PartError('tool_failed', error.message));
293
+ });
294
+ child.on('close', (code) => {
295
+ signal.removeEventListener('abort', onAbort);
296
+ if (timer)
297
+ clearTimeout(timer);
298
+ const stdout = Buffer.concat(out).toString('utf8');
299
+ const stderr = Buffer.concat(err).toString('utf8');
300
+ if (ended)
301
+ return reject(ended);
302
+ if (code !== 0)
303
+ return reject(new errors_1.PartError('tool_failed', `${bin} exited with ${code}: ${stderr.slice(-2000)}`));
304
+ resolve({ stdout, stderr });
305
+ });
306
+ if (options.stdin && child.stdin)
307
+ child.stdin.end(Buffer.from(options.stdin));
308
+ });
309
+ return {
310
+ ffmpeg: chain.ffmpeg,
311
+ ffprobe: chain.ffprobe,
312
+ toolchain: chain.toolchain,
313
+ exec,
314
+ probe: async (file) => {
315
+ const { stdout } = await exec('ffprobe', ['-v', 'error', '-print_format', 'json', '-show_format', '-show_streams', file], { timeoutMs: 60_000 });
316
+ return parseProbe(stdout);
317
+ },
318
+ encodeArgs,
319
+ };
320
+ }
321
+ //# sourceMappingURL=toolchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolchain.js","sourceRoot":"","sources":["../../../src/kit/core/toolchain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /** The kit core's version. Bump it with every kit change, by the rule above. */
2
+ export declare const KIT_VERSION = "1.0.0";
3
+ /** Part interface versions this kit runs (part-interface.md section 2). */
4
+ export declare const KIT_INTERFACES: readonly number[];
5
+ export { compareVersions, isExactVersion, satisfiesKitRange } from '../parts/semver';
6
+ /** Why this kit cannot run a part's interface, or null when it can. */
7
+ export declare function interfaceRefusal(part: {
8
+ id: string;
9
+ version: string;
10
+ interface?: number;
11
+ }): string | null;
12
+ /** Why this kit cannot run a part with this kit range, or null when it can. */
13
+ export declare function kitRangeRefusal(part: {
14
+ id: string;
15
+ version: string;
16
+ kit: string;
17
+ }, kitVersion?: string): string | null;
18
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/kit/core/version.ts"],"names":[],"mappings":"AAUA,gFAAgF;AAChF,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAAQ,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAErF,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAGzG;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,UAAU,SAAc,GAAG,MAAM,GAAG,IAAI,CAE3H"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.satisfiesKitRange = exports.isExactVersion = exports.compareVersions = exports.KIT_INTERFACES = exports.KIT_VERSION = void 0;
4
+ exports.interfaceRefusal = interfaceRefusal;
5
+ exports.kitRangeRefusal = kitRangeRefusal;
6
+ // The kit's own version and the part interfaces it runs (MV-37).
7
+ //
8
+ // Semver for the kit: a patch fixes the core without changing what a part
9
+ // sees; a minor adds to the part context or the line client; a major removes
10
+ // or changes something a published part relies on. Parts say which kits can
11
+ // run them (`kit` in part.json and in the video's lock), and the core refuses
12
+ // a part whose range leaves this kit out before anything is spent. Versions
13
+ // and ranges are read by one implementation, src/kit/parts/semver.ts.
14
+ const semver_1 = require("../parts/semver");
15
+ /** The kit core's version. Bump it with every kit change, by the rule above. */
16
+ exports.KIT_VERSION = '1.0.0';
17
+ /** Part interface versions this kit runs (part-interface.md section 2). */
18
+ exports.KIT_INTERFACES = [1];
19
+ var semver_2 = require("../parts/semver");
20
+ Object.defineProperty(exports, "compareVersions", { enumerable: true, get: function () { return semver_2.compareVersions; } });
21
+ Object.defineProperty(exports, "isExactVersion", { enumerable: true, get: function () { return semver_2.isExactVersion; } });
22
+ Object.defineProperty(exports, "satisfiesKitRange", { enumerable: true, get: function () { return semver_2.satisfiesKitRange; } });
23
+ /** Why this kit cannot run a part's interface, or null when it can. */
24
+ function interfaceRefusal(part) {
25
+ if (part.interface !== undefined && exports.KIT_INTERFACES.includes(part.interface))
26
+ return null;
27
+ return `Part ${part.id} ${part.version} needs part interface ${part.interface}; this kit runs ${exports.KIT_INTERFACES.join(', ')}.`;
28
+ }
29
+ /** Why this kit cannot run a part with this kit range, or null when it can. */
30
+ function kitRangeRefusal(part, kitVersion = exports.KIT_VERSION) {
31
+ return (0, semver_1.satisfiesKitRange)(kitVersion, part.kit) ? null : `Part ${part.id} ${part.version} runs on kit ${part.kit}; this kit is ${kitVersion}.`;
32
+ }
33
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/kit/core/version.ts"],"names":[],"mappings":";;;AAmBA,4CAGC;AAGD,0CAEC;AA3BD,iEAAiE;AACjE,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,sEAAsE;AACtE,4CAAoD;AAEpD,gFAAgF;AACnE,QAAA,WAAW,GAAG,OAAO,CAAC;AAEnC,2EAA2E;AAC9D,QAAA,cAAc,GAAsB,CAAC,CAAC,CAAC,CAAC;AAErD,0CAAqF;AAA5E,yGAAA,eAAe,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAE3D,uEAAuE;AACvE,SAAgB,gBAAgB,CAAC,IAAyD;IACxF,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,sBAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzF,OAAO,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,yBAAyB,IAAI,CAAC,SAAS,mBAAmB,sBAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/H,CAAC;AAED,+EAA+E;AAC/E,SAAgB,eAAe,CAAC,IAAkD,EAAE,UAAU,GAAG,mBAAW;IAC1G,OAAO,IAAA,0BAAiB,EAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,GAAG,iBAAiB,UAAU,GAAG,CAAC;AAChJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ export declare const KIT_ENV: {
2
+ /** Where the private line lives. The CLI's existing API setting. */
3
+ readonly apiBase: "GOOSEWORKS_API_BASE";
4
+ /** The video's line token on a worker. Memory only: never printed, logged or written. */
5
+ readonly lineToken: "GOOSEWORKS_VIDEO_LINE_TOKEN";
6
+ /** "1" on a worker: report kind "worker", never open a browser or ask a question. */
7
+ readonly worker: "GOOSEWORKS_KIT_WORKER";
8
+ /** "1": never update itself; the worker image pins the kit. */
9
+ readonly noSelfUpdate: "GOOSEWORKS_KIT_NO_SELF_UPDATE";
10
+ /** "<job_id>:<attempt>:<run_id>…", sent back unchanged on every line call. */
11
+ readonly workerId: "GOOSEWORKS_KIT_WORKER_ID";
12
+ };
13
+ export declare const KIT_DEV_ENV: {
14
+ /** A local goose-skills checkout to load parts from, without the lock's hashes. */
15
+ readonly partsDir: "GOOSE_KIT_PARTS_DIR";
16
+ /** A local folder of style files. */
17
+ readonly stylesDir: "GOOSE_KIT_STYLES_DIR";
18
+ /** Replaces ~/.gooseworks for the kit's save folders. */
19
+ readonly home: "GOOSE_KIT_HOME";
20
+ };
21
+ export type KitEnvironment = 'production' | 'staging' | 'local';
22
+ export interface KitSettings {
23
+ apiBase: string;
24
+ environment: KitEnvironment;
25
+ worker: boolean;
26
+ /** Only on a worker. */
27
+ lineToken?: string;
28
+ workerId?: string;
29
+ noSelfUpdate: boolean;
30
+ partsDir?: string;
31
+ stylesDir?: string;
32
+ }
33
+ /** The API origin the kit talks to: GOOSEWORKS_API_BASE, else the selected environment's. */
34
+ export declare function kitApiBase(env?: NodeJS.ProcessEnv): string;
35
+ /** Which server an API origin is. Anything not staging or local counts as production. */
36
+ export declare function apiEnvironment(apiBase: string): KitEnvironment;
37
+ /**
38
+ * Reads the kit's settings once. The line token is removed from `env` as it
39
+ * is read, so no child process the kit starts can see it.
40
+ */
41
+ export declare function readKitEnv(env?: NodeJS.ProcessEnv): KitSettings;
42
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/kit/env.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO;IAClB,oEAAoE;;IAEpE,yFAAyF;;IAEzF,qFAAqF;;IAErF,+DAA+D;;IAE/D,8EAA8E;;CAEtE,CAAC;AAEX,eAAO,MAAM,WAAW;IACtB,mFAAmF;;IAEnF,qCAAqC;;IAErC,yDAAyD;;CAEjD,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAEvE;AAED,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAU9D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,WAAW,CAe5E"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KIT_DEV_ENV = exports.KIT_ENV = void 0;
4
+ exports.kitApiBase = kitApiBase;
5
+ exports.apiEnvironment = apiEnvironment;
6
+ exports.readKitEnv = readKitEnv;
7
+ // The settings the video kit reads from its environment, named once.
8
+ //
9
+ // The five worker settings match gooseworks-app
10
+ // apps/api/src/trigger-render/lib/kit-make-contract.ts (KIT_ENV), which sets
11
+ // them on a worker (part-interface.md section 13). Change both sides together.
12
+ // The dev folders work only against staging or a local server.
13
+ const environment_1 = require("../environment");
14
+ exports.KIT_ENV = {
15
+ /** Where the private line lives. The CLI's existing API setting. */
16
+ apiBase: 'GOOSEWORKS_API_BASE',
17
+ /** The video's line token on a worker. Memory only: never printed, logged or written. */
18
+ lineToken: 'GOOSEWORKS_VIDEO_LINE_TOKEN',
19
+ /** "1" on a worker: report kind "worker", never open a browser or ask a question. */
20
+ worker: 'GOOSEWORKS_KIT_WORKER',
21
+ /** "1": never update itself; the worker image pins the kit. */
22
+ noSelfUpdate: 'GOOSEWORKS_KIT_NO_SELF_UPDATE',
23
+ /** "<job_id>:<attempt>:<run_id>…", sent back unchanged on every line call. */
24
+ workerId: 'GOOSEWORKS_KIT_WORKER_ID',
25
+ };
26
+ exports.KIT_DEV_ENV = {
27
+ /** A local goose-skills checkout to load parts from, without the lock's hashes. */
28
+ partsDir: 'GOOSE_KIT_PARTS_DIR',
29
+ /** A local folder of style files. */
30
+ stylesDir: 'GOOSE_KIT_STYLES_DIR',
31
+ /** Replaces ~/.gooseworks for the kit's save folders. */
32
+ home: 'GOOSE_KIT_HOME',
33
+ };
34
+ const PRODUCTION_API = 'https://api.gooseworks.ai';
35
+ const STAGING_API = 'https://api.staging.gooseworks.ai';
36
+ const LOCAL_HOSTS = ['localhost', '127.0.0.1', '[::1]'];
37
+ /** The API origin the kit talks to: GOOSEWORKS_API_BASE, else the selected environment's. */
38
+ function kitApiBase(env = process.env) {
39
+ return env[exports.KIT_ENV.apiBase] || ((0, environment_1.getEnvironment)() === 'staging' ? STAGING_API : PRODUCTION_API);
40
+ }
41
+ /** Which server an API origin is. Anything not staging or local counts as production. */
42
+ function apiEnvironment(apiBase) {
43
+ let host;
44
+ try {
45
+ host = new URL(apiBase).hostname;
46
+ }
47
+ catch {
48
+ return 'production';
49
+ }
50
+ if (LOCAL_HOSTS.includes(host))
51
+ return 'local';
52
+ if (host.endsWith('.staging.gooseworks.ai'))
53
+ return 'staging';
54
+ return 'production';
55
+ }
56
+ /**
57
+ * Reads the kit's settings once. The line token is removed from `env` as it
58
+ * is read, so no child process the kit starts can see it.
59
+ */
60
+ function readKitEnv(env = process.env) {
61
+ const apiBase = kitApiBase(env);
62
+ const worker = env[exports.KIT_ENV.worker] === '1';
63
+ const lineToken = env[exports.KIT_ENV.lineToken] || undefined;
64
+ delete env[exports.KIT_ENV.lineToken];
65
+ return {
66
+ apiBase,
67
+ environment: apiEnvironment(apiBase),
68
+ worker,
69
+ lineToken: worker ? lineToken : undefined,
70
+ workerId: env[exports.KIT_ENV.workerId] || undefined,
71
+ noSelfUpdate: env[exports.KIT_ENV.noSelfUpdate] === '1',
72
+ partsDir: env[exports.KIT_DEV_ENV.partsDir] || undefined,
73
+ stylesDir: env[exports.KIT_DEV_ENV.stylesDir] || undefined,
74
+ };
75
+ }
76
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/kit/env.ts"],"names":[],"mappings":";;;AAiDA,gCAEC;AAGD,wCAUC;AAMD,gCAeC;AArFD,qEAAqE;AACrE,EAAE;AACF,gDAAgD;AAChD,6EAA6E;AAC7E,+EAA+E;AAC/E,+DAA+D;AAC/D,gDAAgD;AAEnC,QAAA,OAAO,GAAG;IACrB,oEAAoE;IACpE,OAAO,EAAE,qBAAqB;IAC9B,yFAAyF;IACzF,SAAS,EAAE,6BAA6B;IACxC,qFAAqF;IACrF,MAAM,EAAE,uBAAuB;IAC/B,+DAA+D;IAC/D,YAAY,EAAE,+BAA+B;IAC7C,8EAA8E;IAC9E,QAAQ,EAAE,0BAA0B;CAC5B,CAAC;AAEE,QAAA,WAAW,GAAG;IACzB,mFAAmF;IACnF,QAAQ,EAAE,qBAAqB;IAC/B,qCAAqC;IACrC,SAAS,EAAE,sBAAsB;IACjC,yDAAyD;IACzD,IAAI,EAAE,gBAAgB;CACd,CAAC;AAgBX,MAAM,cAAc,GAAG,2BAA2B,CAAC;AACnD,MAAM,WAAW,GAAG,mCAAmC,CAAC;AACxD,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAExD,6FAA6F;AAC7F,SAAgB,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,OAAO,GAAG,CAAC,eAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAA,4BAAc,GAAE,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AACjG,CAAC;AAED,yFAAyF;AACzF,SAAgB,cAAc,CAAC,OAAe;IAC5C,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,CAAC,eAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;IAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,eAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IACtD,OAAO,GAAG,CAAC,eAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,OAAO;QACL,OAAO;QACP,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC;QACpC,MAAM;QACN,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACzC,QAAQ,EAAE,GAAG,CAAC,eAAO,CAAC,QAAQ,CAAC,IAAI,SAAS;QAC5C,YAAY,EAAE,GAAG,CAAC,eAAO,CAAC,YAAY,CAAC,KAAK,GAAG;QAC/C,QAAQ,EAAE,GAAG,CAAC,mBAAW,CAAC,QAAQ,CAAC,IAAI,SAAS;QAChD,SAAS,EAAE,GAAG,CAAC,mBAAW,CAAC,SAAS,CAAC,IAAI,SAAS;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { type DeviceAnswer, type DeviceReport, type HostableType, type LineErrorBody, type LineNext, type PieceAnswer, type PieceRequest, type ProgressAnswer, type ProgressRequest, type Slot, type UploadCheck, type UploadRequest, type UploadSlot } from './types';
2
+ export declare class LineError extends Error {
3
+ readonly status: number;
4
+ readonly code: string;
5
+ readonly next: LineNext;
6
+ readonly fix: string;
7
+ readonly retryAfterSeconds?: number;
8
+ readonly details?: Record<string, unknown>;
9
+ constructor(body: LineErrorBody, status: number);
10
+ }
11
+ export type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;
12
+ export declare const sleep: Sleep;
13
+ /** A signal that aborts when any of these does, or after `timeoutMs`. */
14
+ export declare function linkedSignal(signals: Array<AbortSignal | undefined>, timeoutMs?: number): {
15
+ signal: AbortSignal;
16
+ done: () => void;
17
+ };
18
+ export interface LineOptions {
19
+ apiBase: string;
20
+ deviceId: string;
21
+ /** GOOSEWORKS_KIT_WORKER_ID, sent back unchanged on every line call. */
22
+ workerId?: string;
23
+ /** The CLI login (a customer's computer). */
24
+ login?: string;
25
+ /** The video's line token (a worker, which has no login). */
26
+ lineToken?: string;
27
+ fetch?: typeof fetch;
28
+ sleep?: Sleep;
29
+ /** Asks again at most this many times when the line says retry. */
30
+ maxRetries?: number;
31
+ }
32
+ export declare class VideoLine {
33
+ #private;
34
+ readonly deviceId: string;
35
+ readonly workerId: string | undefined;
36
+ private readonly origin;
37
+ private readonly fetchImpl;
38
+ private readonly wait;
39
+ private readonly maxRetries;
40
+ constructor(opts: LineOptions);
41
+ get isWorker(): boolean;
42
+ get hasLogin(): boolean;
43
+ /** Text with this line's token and login, and anything shaped like a secret, removed. */
44
+ redact(text: string): string;
45
+ /** (a) `gooseworks video check` on a customer's computer: the kit's login only. */
46
+ reportDevice(report: DeviceReport): Promise<DeviceAnswer>;
47
+ /**
48
+ * (a) The hand-over at the start of `video make <id>`. A customer's computer
49
+ * signs with the login of the person who said yes; a worker with the line
50
+ * token. The answer's token and lease stay in this object.
51
+ */
52
+ handOver(projectId: string, report: DeviceReport): Promise<DeviceAnswer>;
53
+ /** (b) One paid piece. `piece_busy` and every non-retry refusal are thrown. */
54
+ orderPiece(projectId: string, request: PieceRequest, signal?: AbortSignal): Promise<PieceAnswer>;
55
+ /** (c) Progress, which is also the sign of life. */
56
+ progress(projectId: string, request: ProgressRequest, signal?: AbortSignal): Promise<ProgressAnswer>;
57
+ /** Hosts a local file a provider must fetch; returns the payload's `gooseworks-file:<id>` name. */
58
+ hostFile(projectId: string, file: {
59
+ sha256: string;
60
+ bytes: number;
61
+ content_type: HostableType;
62
+ filename: string;
63
+ }, data: Buffer, signal?: AbortSignal): Promise<string>;
64
+ /** A fresh short-lived link to a file the line hosts for this video (a plan's image or footage). */
65
+ hostedFileLink(projectId: string, fileId: string, signal?: AbortSignal): Promise<string>;
66
+ /** (d) A slot for the finished file. */
67
+ openUpload(projectId: string, request: UploadRequest, signal?: AbortSignal): Promise<UploadSlot>;
68
+ /** (d) The file is in its slot: our server checks it. Safe to repeat. */
69
+ finishUpload(projectId: string, uploadId: string, signal?: AbortSignal): Promise<UploadCheck>;
70
+ /** PUTs bytes to a slot with exactly the headers the line returned. Never the token. */
71
+ put(slot: Slot['put'], data: Buffer, signal?: AbortSignal): Promise<void>;
72
+ /**
73
+ * Downloads a file. Only a link on our own API origin is signed in (the
74
+ * style package), with this video's line token once it is handed over;
75
+ * a provider's or storage link gets no sign-in at all.
76
+ */
77
+ download(url: string, maxBytes: number, signal?: AbortSignal): Promise<Buffer>;
78
+ private headers;
79
+ private call;
80
+ private errorBody;
81
+ }
82
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/kit/line/client.ts"],"names":[],"mappings":"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"}