@multiplayer-app/agent 0.1.20 → 0.1.22

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 (298) hide show
  1. package/README.md +14 -7
  2. package/dist/agent/definition.test.js +8 -3
  3. package/dist/agent/definition.test.js.map +1 -1
  4. package/dist/agent/profiles/coding.d.ts +1 -1
  5. package/dist/agent/profiles/coding.d.ts.map +1 -1
  6. package/dist/agent/profiles/coding.js +21 -4
  7. package/dist/agent/profiles/coding.js.map +1 -1
  8. package/dist/agent/profiles/index.js +1 -1
  9. package/dist/agent/profiles/index.js.map +1 -1
  10. package/dist/agent/profiles/research.d.ts.map +1 -1
  11. package/dist/agent/profiles/research.js +2 -2
  12. package/dist/agent/profiles/research.js.map +1 -1
  13. package/dist/agent/turn-history.d.ts.map +1 -1
  14. package/dist/agent/turn-history.js +7 -1
  15. package/dist/agent/turn-history.js.map +1 -1
  16. package/dist/agent/turn-runner.d.ts +8 -0
  17. package/dist/agent/turn-runner.d.ts.map +1 -1
  18. package/dist/agent/turn-runner.js +35 -10
  19. package/dist/agent/turn-runner.js.map +1 -1
  20. package/dist/app/app-host.d.ts +57 -0
  21. package/dist/app/app-host.d.ts.map +1 -0
  22. package/dist/app/app-host.js +252 -0
  23. package/dist/app/app-host.js.map +1 -0
  24. package/dist/app/app-host.test.d.ts +2 -0
  25. package/dist/app/app-host.test.d.ts.map +1 -0
  26. package/dist/app/app-host.test.js +639 -0
  27. package/dist/app/app-host.test.js.map +1 -0
  28. package/dist/app/build-log.d.ts +14 -0
  29. package/dist/app/build-log.d.ts.map +1 -0
  30. package/dist/app/build-log.js +173 -0
  31. package/dist/app/build-log.js.map +1 -0
  32. package/dist/app/build-log.test.d.ts +2 -0
  33. package/dist/app/build-log.test.d.ts.map +1 -0
  34. package/dist/app/build-log.test.js +255 -0
  35. package/dist/app/build-log.test.js.map +1 -0
  36. package/dist/app/config.d.ts +196 -0
  37. package/dist/app/config.d.ts.map +1 -0
  38. package/dist/app/config.js +362 -0
  39. package/dist/app/config.js.map +1 -0
  40. package/dist/app/config.test.d.ts +2 -0
  41. package/dist/app/config.test.d.ts.map +1 -0
  42. package/dist/app/config.test.js +224 -0
  43. package/dist/app/config.test.js.map +1 -0
  44. package/dist/app/detect.d.ts +68 -0
  45. package/dist/app/detect.d.ts.map +1 -0
  46. package/dist/app/detect.js +449 -0
  47. package/dist/app/detect.js.map +1 -0
  48. package/dist/app/detect.test.d.ts +2 -0
  49. package/dist/app/detect.test.d.ts.map +1 -0
  50. package/dist/app/detect.test.js +267 -0
  51. package/dist/app/detect.test.js.map +1 -0
  52. package/dist/app/env.d.ts +5 -0
  53. package/dist/app/env.d.ts.map +1 -0
  54. package/dist/app/env.js +22 -0
  55. package/dist/app/env.js.map +1 -0
  56. package/dist/app/functions-cli.d.ts +3 -0
  57. package/dist/app/functions-cli.d.ts.map +1 -0
  58. package/dist/app/functions-cli.js +27 -0
  59. package/dist/app/functions-cli.js.map +1 -0
  60. package/dist/app/functions-host.d.ts +15 -0
  61. package/dist/app/functions-host.d.ts.map +1 -0
  62. package/dist/app/functions-host.js +276 -0
  63. package/dist/app/functions-host.js.map +1 -0
  64. package/dist/app/functions-host.test.d.ts +2 -0
  65. package/dist/app/functions-host.test.d.ts.map +1 -0
  66. package/dist/app/functions-host.test.js +117 -0
  67. package/dist/app/functions-host.test.js.map +1 -0
  68. package/dist/app/functions-routes.d.ts +23 -0
  69. package/dist/app/functions-routes.d.ts.map +1 -0
  70. package/dist/app/functions-routes.js +85 -0
  71. package/dist/app/functions-routes.js.map +1 -0
  72. package/dist/app/functions-routes.test.d.ts +2 -0
  73. package/dist/app/functions-routes.test.d.ts.map +1 -0
  74. package/dist/app/functions-routes.test.js +40 -0
  75. package/dist/app/functions-routes.test.js.map +1 -0
  76. package/dist/app/manifest.d.ts +17 -0
  77. package/dist/app/manifest.d.ts.map +1 -0
  78. package/dist/app/manifest.js +64 -0
  79. package/dist/app/manifest.js.map +1 -0
  80. package/dist/app/manifest.test.d.ts +2 -0
  81. package/dist/app/manifest.test.d.ts.map +1 -0
  82. package/dist/app/manifest.test.js +173 -0
  83. package/dist/app/manifest.test.js.map +1 -0
  84. package/dist/app/release-artifacts.d.ts +43 -0
  85. package/dist/app/release-artifacts.d.ts.map +1 -0
  86. package/dist/app/release-artifacts.js +239 -0
  87. package/dist/app/release-artifacts.js.map +1 -0
  88. package/dist/app/release-artifacts.test.d.ts +2 -0
  89. package/dist/app/release-artifacts.test.d.ts.map +1 -0
  90. package/dist/app/release-artifacts.test.js +326 -0
  91. package/dist/app/release-artifacts.test.js.map +1 -0
  92. package/dist/app/route-pattern.d.ts +23 -0
  93. package/dist/app/route-pattern.d.ts.map +1 -0
  94. package/dist/app/route-pattern.js +339 -0
  95. package/dist/app/route-pattern.js.map +1 -0
  96. package/dist/app/route-pattern.test.d.ts +2 -0
  97. package/dist/app/route-pattern.test.d.ts.map +1 -0
  98. package/dist/app/route-pattern.test.js +187 -0
  99. package/dist/app/route-pattern.test.js.map +1 -0
  100. package/dist/app/rules.d.ts +61 -0
  101. package/dist/app/rules.d.ts.map +1 -0
  102. package/dist/app/rules.js +90 -0
  103. package/dist/app/rules.js.map +1 -0
  104. package/dist/app/rules.test.d.ts +2 -0
  105. package/dist/app/rules.test.d.ts.map +1 -0
  106. package/dist/app/rules.test.js +69 -0
  107. package/dist/app/rules.test.js.map +1 -0
  108. package/dist/app/runner.d.ts +109 -0
  109. package/dist/app/runner.d.ts.map +1 -0
  110. package/dist/app/runner.js +429 -0
  111. package/dist/app/runner.js.map +1 -0
  112. package/dist/app/site.d.ts +73 -0
  113. package/dist/app/site.d.ts.map +1 -0
  114. package/dist/app/site.js +161 -0
  115. package/dist/app/site.js.map +1 -0
  116. package/dist/app/site.test.d.ts +2 -0
  117. package/dist/app/site.test.d.ts.map +1 -0
  118. package/dist/app/site.test.js +291 -0
  119. package/dist/app/site.test.js.map +1 -0
  120. package/dist/app/static-server.d.ts +20 -0
  121. package/dist/app/static-server.d.ts.map +1 -0
  122. package/dist/app/static-server.js +145 -0
  123. package/dist/app/static-server.js.map +1 -0
  124. package/dist/persistence/conversation-store.d.ts +21 -0
  125. package/dist/persistence/conversation-store.d.ts.map +1 -0
  126. package/dist/persistence/conversation-store.js +59 -0
  127. package/dist/persistence/conversation-store.js.map +1 -0
  128. package/dist/persistence/conversation-store.test.d.ts +2 -0
  129. package/dist/persistence/conversation-store.test.d.ts.map +1 -0
  130. package/dist/persistence/conversation-store.test.js +98 -0
  131. package/dist/persistence/conversation-store.test.js.map +1 -0
  132. package/dist/persistence/git-sync.d.ts +14 -1
  133. package/dist/persistence/git-sync.d.ts.map +1 -1
  134. package/dist/persistence/git-sync.js +73 -17
  135. package/dist/persistence/git-sync.js.map +1 -1
  136. package/dist/persistence/git-sync.test.js +155 -6
  137. package/dist/persistence/git-sync.test.js.map +1 -1
  138. package/dist/persistence/snapshot-sync.d.ts +19 -2
  139. package/dist/persistence/snapshot-sync.d.ts.map +1 -1
  140. package/dist/persistence/snapshot-sync.js +194 -83
  141. package/dist/persistence/snapshot-sync.js.map +1 -1
  142. package/dist/persistence/snapshot-sync.test.js +145 -27
  143. package/dist/persistence/snapshot-sync.test.js.map +1 -1
  144. package/dist/persistence/workspace.d.ts +3 -0
  145. package/dist/persistence/workspace.d.ts.map +1 -1
  146. package/dist/persistence/workspace.js +1 -0
  147. package/dist/persistence/workspace.js.map +1 -1
  148. package/dist/research/extract-texts.d.ts.map +1 -1
  149. package/dist/research/extract-texts.js +6 -13
  150. package/dist/research/extract-texts.js.map +1 -1
  151. package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
  152. package/dist/research/filingramp/attachment-tools.js +7 -4
  153. package/dist/research/filingramp/attachment-tools.js.map +1 -1
  154. package/dist/research/filingramp/shared.d.ts.map +1 -1
  155. package/dist/research/filingramp/shared.js +5 -5
  156. package/dist/research/filingramp/shared.js.map +1 -1
  157. package/dist/runtime/app-mode.d.ts +10 -0
  158. package/dist/runtime/app-mode.d.ts.map +1 -0
  159. package/dist/runtime/app-mode.js +172 -0
  160. package/dist/runtime/app-mode.js.map +1 -0
  161. package/dist/runtime/app-mode.test.d.ts +2 -0
  162. package/dist/runtime/app-mode.test.d.ts.map +1 -0
  163. package/dist/runtime/app-mode.test.js +130 -0
  164. package/dist/runtime/app-mode.test.js.map +1 -0
  165. package/dist/runtime/app-rehearsal.d.ts +2 -0
  166. package/dist/runtime/app-rehearsal.d.ts.map +1 -0
  167. package/dist/runtime/app-rehearsal.js +56 -0
  168. package/dist/runtime/app-rehearsal.js.map +1 -0
  169. package/dist/runtime/build-mode.d.ts +18 -0
  170. package/dist/runtime/build-mode.d.ts.map +1 -0
  171. package/dist/runtime/build-mode.js +108 -0
  172. package/dist/runtime/build-mode.js.map +1 -0
  173. package/dist/runtime/build-mode.test.d.ts +2 -0
  174. package/dist/runtime/build-mode.test.d.ts.map +1 -0
  175. package/dist/runtime/build-mode.test.js +159 -0
  176. package/dist/runtime/build-mode.test.js.map +1 -0
  177. package/dist/runtime/cli.js +7 -2
  178. package/dist/runtime/cli.js.map +1 -1
  179. package/dist/runtime/config.d.ts +4 -0
  180. package/dist/runtime/config.d.ts.map +1 -1
  181. package/dist/runtime/config.js +13 -2
  182. package/dist/runtime/config.js.map +1 -1
  183. package/dist/runtime/guest-server.d.ts +3 -0
  184. package/dist/runtime/guest-server.d.ts.map +1 -0
  185. package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
  186. package/dist/runtime/guest-server.js.map +1 -0
  187. package/dist/runtime/image-hooks.d.ts +5 -0
  188. package/dist/runtime/image-hooks.d.ts.map +1 -0
  189. package/dist/runtime/image-hooks.js +68 -0
  190. package/dist/runtime/image-hooks.js.map +1 -0
  191. package/dist/runtime/image-hooks.test.d.ts +2 -0
  192. package/dist/runtime/image-hooks.test.d.ts.map +1 -0
  193. package/dist/runtime/image-hooks.test.js +74 -0
  194. package/dist/runtime/image-hooks.test.js.map +1 -0
  195. package/dist/runtime/index.d.ts +8 -3
  196. package/dist/runtime/index.d.ts.map +1 -1
  197. package/dist/runtime/index.js +53 -35
  198. package/dist/runtime/index.js.map +1 -1
  199. package/dist/runtime/listening-ports.d.ts +13 -0
  200. package/dist/runtime/listening-ports.d.ts.map +1 -0
  201. package/dist/runtime/listening-ports.js +78 -0
  202. package/dist/runtime/listening-ports.js.map +1 -0
  203. package/dist/runtime/listening-ports.test.d.ts +2 -0
  204. package/dist/runtime/listening-ports.test.d.ts.map +1 -0
  205. package/dist/runtime/listening-ports.test.js +39 -0
  206. package/dist/runtime/listening-ports.test.js.map +1 -0
  207. package/dist/runtime/preview-proxy.d.ts +56 -0
  208. package/dist/runtime/preview-proxy.d.ts.map +1 -0
  209. package/dist/runtime/preview-proxy.js +302 -0
  210. package/dist/runtime/preview-proxy.js.map +1 -0
  211. package/dist/runtime/preview-proxy.test.d.ts +2 -0
  212. package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
  213. package/dist/runtime/preview-proxy.test.js +122 -0
  214. package/dist/runtime/preview-proxy.test.js.map +1 -0
  215. package/dist/runtime/session-mode.d.ts +3 -0
  216. package/dist/runtime/session-mode.d.ts.map +1 -0
  217. package/dist/runtime/session-mode.js +60 -0
  218. package/dist/runtime/session-mode.js.map +1 -0
  219. package/dist/runtime/workload.d.ts +44 -0
  220. package/dist/runtime/workload.d.ts.map +1 -0
  221. package/dist/runtime/workload.js +222 -0
  222. package/dist/runtime/workload.js.map +1 -0
  223. package/dist/runtime/workload.test.d.ts +2 -0
  224. package/dist/runtime/workload.test.d.ts.map +1 -0
  225. package/dist/runtime/workload.test.js +235 -0
  226. package/dist/runtime/workload.test.js.map +1 -0
  227. package/dist/session/conversation.d.ts +3 -2
  228. package/dist/session/conversation.d.ts.map +1 -1
  229. package/dist/session/conversation.js +11 -7
  230. package/dist/session/conversation.js.map +1 -1
  231. package/dist/session/conversation.test.js +2 -3
  232. package/dist/session/conversation.test.js.map +1 -1
  233. package/dist/session/runtime.d.ts +16 -3
  234. package/dist/session/runtime.d.ts.map +1 -1
  235. package/dist/session/runtime.js +80 -13
  236. package/dist/session/runtime.js.map +1 -1
  237. package/dist/session/runtime.test.js +18 -7
  238. package/dist/session/runtime.test.js.map +1 -1
  239. package/dist/session/tools.d.ts.map +1 -1
  240. package/dist/session/tools.js +3 -3
  241. package/dist/session/tools.js.map +1 -1
  242. package/dist/task/loop.d.ts.map +1 -1
  243. package/dist/task/loop.js +6 -4
  244. package/dist/task/loop.js.map +1 -1
  245. package/dist/tools/exec-tools.d.ts +12 -0
  246. package/dist/tools/exec-tools.d.ts.map +1 -1
  247. package/dist/tools/exec-tools.js +46 -3
  248. package/dist/tools/exec-tools.js.map +1 -1
  249. package/dist/tools/exec-tools.test.d.ts +2 -0
  250. package/dist/tools/exec-tools.test.d.ts.map +1 -0
  251. package/dist/tools/exec-tools.test.js +48 -0
  252. package/dist/tools/exec-tools.test.js.map +1 -0
  253. package/dist/tools/fs-tools.d.ts.map +1 -1
  254. package/dist/tools/fs-tools.js +5 -5
  255. package/dist/tools/fs-tools.js.map +1 -1
  256. package/dist/transport/link.d.ts.map +1 -1
  257. package/dist/transport/link.js +16 -5
  258. package/dist/transport/link.js.map +1 -1
  259. package/dist/transport/link.test.js +24 -0
  260. package/dist/transport/link.test.js.map +1 -1
  261. package/dist/transport/protocol.d.ts +215 -3
  262. package/dist/transport/protocol.d.ts.map +1 -1
  263. package/dist/transport/protocol.js +163 -7
  264. package/dist/transport/protocol.js.map +1 -1
  265. package/dist/transport/protocol.test.js +41 -0
  266. package/dist/transport/protocol.test.js.map +1 -1
  267. package/dist/workspace-sync/eligibility.d.ts +14 -0
  268. package/dist/workspace-sync/eligibility.d.ts.map +1 -0
  269. package/dist/workspace-sync/eligibility.js +53 -0
  270. package/dist/workspace-sync/eligibility.js.map +1 -0
  271. package/dist/workspace-sync/merge.d.ts +15 -0
  272. package/dist/workspace-sync/merge.d.ts.map +1 -0
  273. package/dist/workspace-sync/merge.js +66 -0
  274. package/dist/workspace-sync/merge.js.map +1 -0
  275. package/dist/workspace-sync/merge.test.d.ts +2 -0
  276. package/dist/workspace-sync/merge.test.d.ts.map +1 -0
  277. package/dist/workspace-sync/merge.test.js +28 -0
  278. package/dist/workspace-sync/merge.test.js.map +1 -0
  279. package/dist/workspace-sync/workspace-sync.d.ts +48 -0
  280. package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
  281. package/dist/workspace-sync/workspace-sync.js +308 -0
  282. package/dist/workspace-sync/workspace-sync.js.map +1 -0
  283. package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
  284. package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
  285. package/dist/workspace-sync/workspace-sync.test.js +111 -0
  286. package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
  287. package/dist/workspace-sync/write-drafts.d.ts +24 -0
  288. package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
  289. package/dist/workspace-sync/write-drafts.js +87 -0
  290. package/dist/workspace-sync/write-drafts.js.map +1 -0
  291. package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
  292. package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
  293. package/dist/workspace-sync/write-drafts.test.js +36 -0
  294. package/dist/workspace-sync/write-drafts.test.js.map +1 -0
  295. package/package.json +12 -2
  296. package/dist/runtime/lambda-microvm.d.ts +0 -3
  297. package/dist/runtime/lambda-microvm.d.ts.map +0 -1
  298. package/dist/runtime/lambda-microvm.js.map +0 -1
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_http_1 = __importDefault(require("node:http"));
10
+ const node_os_1 = __importDefault(require("node:os"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const node_stream_1 = require("node:stream");
13
+ const node_test_1 = require("node:test");
14
+ const node_zlib_1 = require("node:zlib");
15
+ const workload_1 = require("../runtime/workload");
16
+ const protocol_1 = require("../transport/protocol");
17
+ const release_artifacts_1 = require("./release-artifacts");
18
+ const paths = (files) => files.map((file) => file.path).sort();
19
+ (0, node_test_1.describe)('what goes in a release', () => {
20
+ let dir;
21
+ const write = async (files) => {
22
+ for (const [name, content] of Object.entries(files)) {
23
+ await node_fs_1.promises.mkdir(node_path_1.default.dirname(node_path_1.default.join(dir, name)), { recursive: true });
24
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, name), content);
25
+ }
26
+ };
27
+ (0, node_test_1.beforeEach)(async () => {
28
+ dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'builder-release-'));
29
+ });
30
+ (0, node_test_1.afterEach)(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
31
+ (0, node_test_1.it)('is a static service\'s output, and a server\'s whole folder', async () => {
32
+ await write({
33
+ 'packages/web/src/app.ts': '',
34
+ 'packages/web/dist/index.html': '',
35
+ 'packages/web/dist/assets/a.js': '',
36
+ 'packages/web/dist/node_modules/x/index.js': '',
37
+ 'packages/api/server.ts': '',
38
+ '.builder/conversation.json': '',
39
+ });
40
+ const { site, run } = await (0, release_artifacts_1.collectReleaseFiles)({
41
+ services: {
42
+ web: { root: 'packages/web', outputDirectory: 'dist' },
43
+ api: { root: 'packages/api', startCommand: 'node dist/server.js' },
44
+ },
45
+ }, dir);
46
+ strict_1.default.deepEqual(paths(site), ['packages/web/dist/assets/a.js', 'packages/web/dist/index.html']);
47
+ strict_1.default.deepEqual(run, ['packages/api']);
48
+ });
49
+ (0, node_test_1.it)('leaves out of a site what it would never serve', async () => {
50
+ await write({ 'packages/web/index.html': '', 'packages/web/package.json': '{}', 'packages/web/package-lock.json': '{}', 'packages/web/.env': 'SECRET=1', 'packages/web/node_modules/x.js': '', 'packages/web/docs/package.json': '{}' });
51
+ const { site } = await (0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: 'packages/web', outputDirectory: '.' } } }, dir);
52
+ strict_1.default.deepEqual(paths(site), ['packages/web/docs/package.json', 'packages/web/index.html']);
53
+ });
54
+ (0, node_test_1.it)('takes what\'s around a server in a workspace, which it installs from', async () => {
55
+ await write({ 'pnpm-workspace.yaml': '', 'pnpm-lock.yaml': '', 'packages/shared/index.js': '', 'packages/api/server.js': '' });
56
+ const { run } = await (0, release_artifacts_1.collectReleaseFiles)({ services: { api: { root: 'packages/api', startCommand: 'node server.js' } } }, dir);
57
+ strict_1.default.deepEqual(run, ['.']);
58
+ });
59
+ (0, node_test_1.it)('takes a daemon\'s folder as it does a server\'s', async () => {
60
+ await write({ 'packages/web/index.html': '', 'worker/run.js': '' });
61
+ const { run } = await (0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: 'packages/web', outputDirectory: '.' } }, daemons: { worker: { root: 'worker', command: 'node run.js' } } }, dir);
62
+ strict_1.default.deepEqual(run, ['worker']);
63
+ });
64
+ (0, node_test_1.it)('refuses a server outside the app', async () => {
65
+ await strict_1.default.rejects((0, release_artifacts_1.collectReleaseFiles)({ services: { api: { root: '../elsewhere', startCommand: 'node server.js' } } }, dir), (error) => error instanceof release_artifacts_1.ReleaseOutputError && /outside the app/.test(error.message));
66
+ });
67
+ (0, node_test_1.it)('refuses a static service whose build left nothing, with its name', async () => {
68
+ await write({ 'packages/web/src/app.ts': '' });
69
+ await strict_1.default.rejects((0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: 'packages/web', outputDirectory: 'dist' } } }, dir), (error) => error instanceof release_artifacts_1.ReleaseOutputError && /web: .*packages\/web\/dist/.test(error.message));
70
+ });
71
+ (0, node_test_1.it)('refuses a file over the limit rather than leave it out', async () => {
72
+ await write({ 'dist/index.html': '' });
73
+ const big = await node_fs_1.promises.open(node_path_1.default.join(dir, 'dist/big.bin'), 'w');
74
+ await big.truncate(65 * 1024 * 1024);
75
+ await big.close();
76
+ await strict_1.default.rejects((0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: '.', outputDirectory: 'dist' } } }, dir), (error) => error instanceof release_artifacts_1.ReleaseOutputError && /dist\/big\.bin is 65 MiB/.test(error.message));
77
+ });
78
+ });
79
+ (0, node_test_1.describe)('uploading a release', () => {
80
+ var _a;
81
+ let dir;
82
+ let server;
83
+ let url;
84
+ let received;
85
+ let answer;
86
+ const attempts = new Map();
87
+ const config = {
88
+ services: {
89
+ web: { root: 'web', outputDirectory: 'dist' },
90
+ api: { root: 'api', startCommand: 'node server.js' },
91
+ },
92
+ rewrites: [{ source: '/api/(.*)', destination: { service: 'api' } }, { source: '/(.*)', destination: { service: 'web' } }],
93
+ };
94
+ (0, node_test_1.before)(async () => {
95
+ server = node_http_1.default.createServer((req, res) => {
96
+ const chunks = [];
97
+ req.on('data', (chunk) => chunks.push(chunk));
98
+ req.on('end', () => {
99
+ var _a;
100
+ const attempt = ((_a = attempts.get(req.url)) !== null && _a !== void 0 ? _a : 0) + 1;
101
+ attempts.set(req.url, attempt);
102
+ // As the git service: a release with a manifest is finished, and takes nothing more.
103
+ const finished = received.some((item) => item.url.endsWith('/manifest.json'));
104
+ const status = finished ? 409 : answer(req.url, attempt);
105
+ if (status < 300)
106
+ received.push({ url: req.url, auth: req.headers.authorization, body: Buffer.concat(chunks).toString('utf8'), bytes: Buffer.concat(chunks) });
107
+ res.writeHead(status).end();
108
+ });
109
+ });
110
+ await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
111
+ url = `http://127.0.0.1:${server.address().port}/release-artifacts/a/r`;
112
+ });
113
+ (0, node_test_1.after)(() => {
114
+ server.closeAllConnections();
115
+ server.close();
116
+ });
117
+ (0, node_test_1.beforeEach)(async () => {
118
+ received = [];
119
+ attempts.clear();
120
+ answer = () => 204;
121
+ dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'builder-release-'));
122
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, 'web/dist'), { recursive: true });
123
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, 'api/bin'), { recursive: true });
124
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'web/dist/index.html'), '<h1>web</h1>');
125
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'api/server.js'), 'server');
126
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'api/bin/run'), 'run', { mode: 0o755 });
127
+ await node_fs_1.promises.chmod(dir, 0o755);
128
+ await (0, workload_1.handOverToWorkload)(dir);
129
+ });
130
+ (0, node_test_1.afterEach)(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
131
+ (0, node_test_1.it)('sends the site and what a VM runs apart, with the token, and the manifest last', async () => {
132
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
133
+ const route = (name) => `/release-artifacts/a/r${name}`;
134
+ strict_1.default.deepEqual(received.map((item) => item.url).sort(), [
135
+ route('/files/.builder/builder.json'),
136
+ route('/manifest.json'),
137
+ route('/run.tar.zst'),
138
+ route('/site/web/dist/index.html'),
139
+ ].sort());
140
+ strict_1.default.equal(received[received.length - 1].url, route('/manifest.json'));
141
+ strict_1.default.ok(received.every((item) => item.auth === 'Bearer t'));
142
+ strict_1.default.deepEqual(manifest.site, [{ path: 'web/dist/index.html', size: '<h1>web</h1>'.length, hash: (0, node_crypto_1.createHash)('sha256').update('<h1>web</h1>').digest('base64url') }]);
143
+ const body = (name) => JSON.parse(received.find((item) => item.url === route(name)).body);
144
+ strict_1.default.deepEqual(body('/files/.builder/builder.json'), config);
145
+ strict_1.default.deepEqual(body('/manifest.json').site, manifest.site);
146
+ strict_1.default.deepEqual(Object.keys(body('/manifest.json')).sort(), ['site', 'version'], 'builder.json is the config: one copy');
147
+ });
148
+ (0, node_test_1.describe)('a site\'s text files', () => {
149
+ const JS = 'console.log("a repeated line of a script")\n'.repeat(200);
150
+ const write = (name, content) => node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'web/dist', name), content);
151
+ const uploaded = (route) => { var _a; return (_a = received.find((item) => item.url === `/release-artifacts/a/r${route}`)) === null || _a === void 0 ? void 0 : _a.bytes; };
152
+ (0, node_test_1.it)('get brotli and gzip copies that decompress to the file, and the manifest says so', async () => {
153
+ await write('app.js', JS);
154
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
155
+ strict_1.default.equal((0, node_zlib_1.brotliDecompressSync)(uploaded('/encoded/br/web/dist/app.js')).toString(), JS);
156
+ strict_1.default.equal((0, node_zlib_1.gunzipSync)(uploaded('/encoded/gzip/web/dist/app.js')).toString(), JS);
157
+ strict_1.default.equal(uploaded('/site/web/dist/app.js').toString(), JS);
158
+ const entry = manifest.site.find((file) => file.path === 'web/dist/app.js');
159
+ strict_1.default.deepEqual(entry.encodings, { br: uploaded('/encoded/br/web/dist/app.js').length, gzip: uploaded('/encoded/gzip/web/dist/app.js').length });
160
+ strict_1.default.ok(entry.encodings.br < entry.encodings.gzip);
161
+ strict_1.default.equal(entry.hash, (0, node_crypto_1.createHash)('sha256').update(JS).digest('base64url'));
162
+ });
163
+ (0, node_test_1.it)('don\'t get them under 1 KiB, nor does what\'s already compressed', async () => {
164
+ await write('small.js', 'x'.repeat(1023));
165
+ await write('photo.png', Buffer.alloc(4096, 7));
166
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
167
+ strict_1.default.ok(!received.some((item) => item.url.includes('/encoded/')));
168
+ strict_1.default.ok(manifest.site.every((file) => !file.encodings));
169
+ });
170
+ (0, node_test_1.it)('keep only a copy that came out smaller', async () => {
171
+ var _a;
172
+ await write('random.json', Buffer.from(Array.from({ length: 2048 }, (_, index) => (index * 7919 + 13) % 251)).toString('latin1').repeat(1));
173
+ const random = await node_fs_1.promises.readFile(node_path_1.default.join(dir, 'web/dist/random.json'));
174
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
175
+ const entry = manifest.site.find((file) => file.path === 'web/dist/random.json');
176
+ for (const size of Object.values((_a = entry.encodings) !== null && _a !== void 0 ? _a : {}))
177
+ strict_1.default.ok(size < random.length);
178
+ });
179
+ (0, node_test_1.it)('go up with the same care: a refused copy leaves no manifest', async () => {
180
+ await write('app.js', JS);
181
+ answer = (target) => (target.includes('/encoded/') ? 403 : 204);
182
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir), /403/);
183
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
184
+ });
185
+ });
186
+ (0, node_test_1.describe)('what a VM runs', () => {
187
+ /** The archive it uploaded, unpacked where a VM would. */
188
+ async function uploaded(app = config) {
189
+ await (0, workload_1.handOverToWorkload)(dir);
190
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, app, dir);
191
+ const into = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'builder-unpacked-'));
192
+ await node_fs_1.promises.chmod(into, 0o755);
193
+ await (0, workload_1.handOverToWorkload)(into);
194
+ await (0, workload_1.unpackAsWorkload)(into, node_stream_1.Readable.from([received.find((item) => item.url.endsWith('/run.tar.zst')).bytes]));
195
+ return into;
196
+ }
197
+ const listed = async (root) => (await node_fs_1.promises.readdir(root, { recursive: true, withFileTypes: true }))
198
+ .filter((entry) => !entry.isDirectory())
199
+ .map((entry) => node_path_1.default.relative(root, node_path_1.default.join(entry.parentPath, entry.name)))
200
+ .sort();
201
+ (0, node_test_1.it)('carries the folder as it was built, dependencies and all, less caches and history', async () => {
202
+ const write = async (name, content = 'x') => {
203
+ await node_fs_1.promises.mkdir(node_path_1.default.dirname(node_path_1.default.join(dir, name)), { recursive: true });
204
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, name), content);
205
+ };
206
+ for (const name of [
207
+ 'api/node_modules/x/index.js', 'api/.venv/lib/a.py', 'api/__pycache__/a.pyc', 'api/.next/server.js', 'api/.env',
208
+ 'api/.next/cache/big', 'api/node_modules/.cache/big', 'api/.git/HEAD', 'api/.builder/logs/a.log', 'api/.turbo/a',
209
+ ])
210
+ await write(name);
211
+ const into = await uploaded();
212
+ strict_1.default.deepEqual(await listed(into), [
213
+ 'api/.env', 'api/.next/server.js', 'api/.venv/lib/a.py', 'api/__pycache__/a.pyc', 'api/bin/run',
214
+ 'api/node_modules/x/index.js', 'api/server.js',
215
+ ]);
216
+ strict_1.default.ok(!(await listed(into)).some((name) => name.startsWith('web/')), 'a static service\'s output is the site\'s');
217
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
218
+ });
219
+ (0, node_test_1.it)('keeps what can be run, and links as links, so a package manager\'s layout still works', async () => {
220
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, 'api/node_modules/.pnpm/x'), { recursive: true });
221
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'api/node_modules/.pnpm/x/index.js'), 'dep');
222
+ await node_fs_1.promises.symlink('.pnpm/x', node_path_1.default.join(dir, 'api/node_modules/x'));
223
+ await node_fs_1.promises.link(node_path_1.default.join(dir, 'api/node_modules/.pnpm/x/index.js'), node_path_1.default.join(dir, 'api/hard.js'));
224
+ await node_fs_1.promises.symlink('/usr/bin/env', node_path_1.default.join(dir, 'api/outside'));
225
+ const into = await uploaded();
226
+ strict_1.default.notEqual((await node_fs_1.promises.stat(node_path_1.default.join(into, 'api/bin/run'))).mode & 0o100, 0);
227
+ strict_1.default.equal(await node_fs_1.promises.readlink(node_path_1.default.join(into, 'api/node_modules/x')), '.pnpm/x');
228
+ strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(into, 'api/node_modules/x/index.js'), 'utf8'), 'dep');
229
+ strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(into, 'api/hard.js'), 'utf8'), 'dep');
230
+ strict_1.default.equal(await node_fs_1.promises.readlink(node_path_1.default.join(into, 'api/outside')), '/usr/bin/env');
231
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
232
+ });
233
+ (0, node_test_1.it)('takes a file too big for the site, as it\'s only compressed together', async () => {
234
+ const big = await node_fs_1.promises.open(node_path_1.default.join(dir, 'api/engine.node'), 'w');
235
+ await big.truncate(65 * 1024 * 1024);
236
+ await big.close();
237
+ const into = await uploaded();
238
+ strict_1.default.equal((await node_fs_1.promises.stat(node_path_1.default.join(into, 'api/engine.node'))).size, 65 * 1024 * 1024);
239
+ strict_1.default.ok(received.find((item) => item.url.endsWith('/run.tar.zst')).bytes.length < 1024 * 1024);
240
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
241
+ });
242
+ (0, node_test_1.it)('tries again with the same archive when the service stumbles', async () => {
243
+ answer = (target, attempt) => (target.endsWith('/run.tar.zst') && attempt < 3 ? 503 : 204);
244
+ const into = await uploaded();
245
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/run.tar.zst'), 3);
246
+ strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(into, 'api/server.js'), 'utf8'), 'server');
247
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
248
+ });
249
+ (0, node_test_1.it)('leaves no manifest when it can\'t be stored', async () => {
250
+ answer = (target) => (target.endsWith('/run.tar.zst') ? 400 : 204);
251
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir), /run\.tar\.zst failed: 400/);
252
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/run.tar.zst'), 1);
253
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
254
+ });
255
+ (0, node_test_1.it)('fails the build when the folder it needs isn\'t there', async () => {
256
+ const missing = { services: { api: { root: 'gone', startCommand: 'node server.js' } } };
257
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, missing, dir), /tar failed/);
258
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
259
+ });
260
+ (0, node_test_1.it)('has none for an app that\'s only a site', async () => {
261
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, { services: { web: { root: 'web', outputDirectory: 'dist' } } }, dir);
262
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/run.tar.zst')));
263
+ });
264
+ });
265
+ (0, node_test_1.it)('sends the logs with the output, before the manifest closes the release', async () => {
266
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, '.builder/logs'), { recursive: true });
267
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, '.builder/logs/web.build.log'), 'built');
268
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
269
+ const order = received.map((item) => item.url);
270
+ strict_1.default.ok(order.includes('/release-artifacts/a/r/logs/web.build.log'));
271
+ strict_1.default.equal(order[order.length - 1], '/release-artifacts/a/r/manifest.json');
272
+ });
273
+ (0, node_test_1.it)('writes no manifest when a file can\'t be stored', async () => {
274
+ answer = (target) => (target.includes('/site/') ? 403 : 204);
275
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir), /403/);
276
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
277
+ // Refused: asking again gets the same answer.
278
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/site/web/dist/index.html'), 1);
279
+ });
280
+ (0, node_test_1.it)('tries again when the service stumbles', async () => {
281
+ answer = (target, attempt) => (target.includes('/site/') && attempt < 3 ? 503 : 204);
282
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
283
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/site/web/dist/index.html'), 3);
284
+ });
285
+ (0, node_test_1.it)('sends logs under their own route', async () => {
286
+ const logs = node_path_1.default.join(dir, '.builder/logs');
287
+ await node_fs_1.promises.mkdir(logs, { recursive: true });
288
+ await node_fs_1.promises.writeFile(node_path_1.default.join(logs, 'web.build.log'), 'built');
289
+ await (0, release_artifacts_1.uploadReleaseLogs)({ url, token: 't' }, dir);
290
+ strict_1.default.deepEqual(received.map((item) => [item.url, item.body]), [['/release-artifacts/a/r/logs/web.build.log', 'built']]);
291
+ });
292
+ (0, node_test_1.it)('sends only the end of a log, which is all anyone gets to see, so a noisy build still fits', async () => {
293
+ const logs = node_path_1.default.join(dir, '.builder/logs');
294
+ await node_fs_1.promises.mkdir(logs, { recursive: true });
295
+ await node_fs_1.promises.writeFile(node_path_1.default.join(logs, 'web.build.log'), `the start\n${'x'.repeat(protocol_1.BUILD_LOG_BYTES)}`);
296
+ await (0, release_artifacts_1.uploadReleaseLogs)({ url, token: 't' }, dir);
297
+ strict_1.default.equal(received[0].body.length, protocol_1.BUILD_LOG_BYTES);
298
+ strict_1.default.ok(!received[0].body.includes('the start'));
299
+ });
300
+ (0, node_test_1.it)('skips whatever isn\'t really a log, and that doesn\'t fail the build', async () => {
301
+ const logs = node_path_1.default.join(dir, '.builder/logs');
302
+ await node_fs_1.promises.mkdir(node_path_1.default.join(logs, 'folder.log'), { recursive: true });
303
+ await node_fs_1.promises.symlink('/nowhere', node_path_1.default.join(logs, 'dangling.log'));
304
+ await node_fs_1.promises.writeFile(node_path_1.default.join(logs, 'web.build.log'), 'built');
305
+ await (0, release_artifacts_1.uploadReleaseLogs)({ url, token: 't' }, dir);
306
+ strict_1.default.deepEqual(received.map((item) => [item.url, item.body]), [['/release-artifacts/a/r/logs/web.build.log', 'built']]);
307
+ });
308
+ (0, node_test_1.it)('has nothing to send when there are no logs', async () => {
309
+ await (0, release_artifacts_1.uploadReleaseLogs)({ url, token: 't' }, dir);
310
+ strict_1.default.deepEqual(received, []);
311
+ });
312
+ (0, node_test_1.it)('never publishes what a log folder made a link points at', { skip: ((_a = process.getuid) === null || _a === void 0 ? void 0 : _a.call(process)) !== 0 && 'only root reads as the runtime does' }, async () => {
313
+ const outside = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'outside-'));
314
+ try {
315
+ await node_fs_1.promises.writeFile(node_path_1.default.join(outside, 'environ'), 'RELEASE_UPLOAD_TOKEN=secret', { mode: 0o600 });
316
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, '.builder'), { recursive: true });
317
+ await node_fs_1.promises.symlink(outside, node_path_1.default.join(dir, '.builder/logs'));
318
+ await (0, release_artifacts_1.uploadReleaseLogs)({ url, token: 't' }, dir);
319
+ strict_1.default.deepEqual(received, []);
320
+ }
321
+ finally {
322
+ await node_fs_1.promises.rm(outside, { recursive: true, force: true });
323
+ }
324
+ });
325
+ });
326
+ //# sourceMappingURL=release-artifacts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-artifacts.test.js","sourceRoot":"","sources":["../../src/app/release-artifacts.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface RoutePattern {
2
+ source: string;
3
+ regexp: RegExp;
4
+ /** Each capture group's name: a `:name`, or the position of an unnamed `(…)` group. */
5
+ keys: Array<string | number>;
6
+ /** It can't take more than a number of steps proportional to the path, so it needs no time limit. */
7
+ linear: boolean;
8
+ }
9
+ /** Compiles a `source` pattern; throws an Error saying what is wrong with an invalid or dangerous one. */
10
+ export declare function compileRoute(source: string): RoutePattern;
11
+ /** What is wrong with `source`, in a sentence; undefined when it's fine. */
12
+ export declare function routeSourceProblem(source: string): string | undefined;
13
+ /** Whether `source` compiles. */
14
+ export declare function isValidRouteSource(source: string): boolean;
15
+ /** Whether `source` will run under the time limit. */
16
+ export declare function runsOnTimeLimit(source: string): boolean;
17
+ /** Tests only. */
18
+ export declare function forgetRouteStrikes(): void;
19
+ /** The pattern's values for `pathname` (by key), or undefined when it doesn't match. */
20
+ export declare function matchRoute(pattern: RoutePattern, pathname: string): Map<string | number, string> | undefined;
21
+ /** A rewrite destination with `:name` and `$1`-style references to a match filled in. */
22
+ export declare function fillDestination(destination: string, values: Map<string | number, string>): string;
23
+ //# sourceMappingURL=route-pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-pattern.d.ts","sourceRoot":"","sources":["../../src/app/route-pattern.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,uFAAuF;IACvF,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IAC5B,qGAAqG;IACrG,MAAM,EAAE,OAAO,CAAA;CAChB;AA6JD,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA0BzD;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvD;AA0BD,kBAAkB;AAClB,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAiBD,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAM5G;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAKjG"}