@relayflows/sdk 2.0.29 → 2.0.31

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 (393) hide show
  1. package/dist/agent-artifacts.d.ts.map +1 -1
  2. package/dist/agent-artifacts.js +2 -9
  3. package/dist/agent-artifacts.js.map +1 -1
  4. package/dist/agent-cwd.d.ts +69 -0
  5. package/dist/agent-cwd.d.ts.map +1 -0
  6. package/dist/agent-cwd.js +140 -0
  7. package/dist/agent-cwd.js.map +1 -0
  8. package/dist/artifact-scan-policy.d.ts +35 -0
  9. package/dist/artifact-scan-policy.d.ts.map +1 -0
  10. package/dist/artifact-scan-policy.js +49 -0
  11. package/dist/artifact-scan-policy.js.map +1 -0
  12. package/dist/authored-completion-record.d.ts +35 -0
  13. package/dist/authored-completion-record.d.ts.map +1 -0
  14. package/dist/authored-completion-record.js +92 -0
  15. package/dist/authored-completion-record.js.map +1 -0
  16. package/dist/authored-completion.d.ts +99 -0
  17. package/dist/authored-completion.d.ts.map +1 -0
  18. package/dist/authored-completion.js +184 -0
  19. package/dist/authored-completion.js.map +1 -0
  20. package/dist/authored-flow-error.d.ts +13 -1
  21. package/dist/authored-flow-error.d.ts.map +1 -1
  22. package/dist/authored-flow-error.js +12 -0
  23. package/dist/authored-flow-error.js.map +1 -1
  24. package/dist/authored-flow-executor.d.ts +7 -30
  25. package/dist/authored-flow-executor.d.ts.map +1 -1
  26. package/dist/authored-flow-executor.js +64 -48
  27. package/dist/authored-flow-executor.js.map +1 -1
  28. package/dist/authored-human.d.ts.map +1 -1
  29. package/dist/authored-human.js +1 -3
  30. package/dist/authored-human.js.map +1 -1
  31. package/dist/authored-node-entry.js +4 -1
  32. package/dist/authored-node-entry.js.map +1 -1
  33. package/dist/authored-node-runner.d.ts +9 -1
  34. package/dist/authored-node-runner.d.ts.map +1 -1
  35. package/dist/authored-node-runner.js +92 -17
  36. package/dist/authored-node-runner.js.map +1 -1
  37. package/dist/authored-root.d.ts +5 -0
  38. package/dist/authored-root.d.ts.map +1 -1
  39. package/dist/authored-root.js +20 -2
  40. package/dist/authored-root.js.map +1 -1
  41. package/dist/authored-step-output.d.ts +35 -10
  42. package/dist/authored-step-output.d.ts.map +1 -1
  43. package/dist/authored-step-output.js +108 -40
  44. package/dist/authored-step-output.js.map +1 -1
  45. package/dist/authored-verdict.d.ts +28 -0
  46. package/dist/authored-verdict.d.ts.map +1 -0
  47. package/dist/authored-verdict.js +79 -0
  48. package/dist/authored-verdict.js.map +1 -0
  49. package/dist/authored-worker-step.d.ts +5 -2
  50. package/dist/authored-worker-step.d.ts.map +1 -1
  51. package/dist/authored-worker-step.js +48 -11
  52. package/dist/authored-worker-step.js.map +1 -1
  53. package/dist/bundle-extensions.d.ts.map +1 -1
  54. package/dist/bundle-extensions.js +4 -7
  55. package/dist/bundle-extensions.js.map +1 -1
  56. package/dist/bundle.d.ts.map +1 -1
  57. package/dist/bundle.js +41 -7
  58. package/dist/bundle.js.map +1 -1
  59. package/dist/canonical.d.ts.map +1 -1
  60. package/dist/canonical.js +18 -6
  61. package/dist/canonical.js.map +1 -1
  62. package/dist/cli/check-worker-surface.d.ts +27 -0
  63. package/dist/cli/check-worker-surface.d.ts.map +1 -0
  64. package/dist/cli/check-worker-surface.js +63 -0
  65. package/dist/cli/check-worker-surface.js.map +1 -0
  66. package/dist/cli/check.d.ts +19 -2
  67. package/dist/cli/check.d.ts.map +1 -1
  68. package/dist/cli/check.js +12 -4
  69. package/dist/cli/check.js.map +1 -1
  70. package/dist/cli/cloud-format.d.ts +9 -0
  71. package/dist/cli/cloud-format.d.ts.map +1 -0
  72. package/dist/cli/cloud-format.js +77 -0
  73. package/dist/cli/cloud-format.js.map +1 -0
  74. package/dist/cli/cloud-live.d.ts +39 -0
  75. package/dist/cli/cloud-live.d.ts.map +1 -0
  76. package/dist/cli/cloud-live.js +325 -0
  77. package/dist/cli/cloud-live.js.map +1 -0
  78. package/dist/cli/cloud-read.d.ts +3 -7
  79. package/dist/cli/cloud-read.d.ts.map +1 -1
  80. package/dist/cli/cloud-read.js +14 -266
  81. package/dist/cli/cloud-read.js.map +1 -1
  82. package/dist/cli/cloud-refusal.d.ts +39 -0
  83. package/dist/cli/cloud-refusal.d.ts.map +1 -0
  84. package/dist/cli/cloud-refusal.js +95 -0
  85. package/dist/cli/cloud-refusal.js.map +1 -0
  86. package/dist/cli/cloud-status-view.d.ts +7 -0
  87. package/dist/cli/cloud-status-view.d.ts.map +1 -0
  88. package/dist/cli/cloud-status-view.js +214 -0
  89. package/dist/cli/cloud-status-view.js.map +1 -0
  90. package/dist/cli/direct-run.d.ts.map +1 -1
  91. package/dist/cli/direct-run.js +16 -2
  92. package/dist/cli/direct-run.js.map +1 -1
  93. package/dist/cli/hn-monitor.d.ts +0 -13
  94. package/dist/cli/hn-monitor.d.ts.map +1 -1
  95. package/dist/cli/hn-monitor.js +2 -1
  96. package/dist/cli/hn-monitor.js.map +1 -1
  97. package/dist/cli/local-agent-remedy.d.ts +80 -0
  98. package/dist/cli/local-agent-remedy.d.ts.map +1 -0
  99. package/dist/cli/local-agent-remedy.js +116 -0
  100. package/dist/cli/local-agent-remedy.js.map +1 -0
  101. package/dist/cli/observer-session.d.ts +41 -0
  102. package/dist/cli/observer-session.d.ts.map +1 -0
  103. package/dist/cli/observer-session.js +78 -0
  104. package/dist/cli/observer-session.js.map +1 -0
  105. package/dist/cli/run.d.ts +30 -2
  106. package/dist/cli/run.d.ts.map +1 -1
  107. package/dist/cli/run.js +186 -24
  108. package/dist/cli/run.js.map +1 -1
  109. package/dist/cli/status.d.ts +9 -0
  110. package/dist/cli/status.d.ts.map +1 -1
  111. package/dist/cli/status.js +31 -2
  112. package/dist/cli/status.js.map +1 -1
  113. package/dist/cli/step-evidence.d.ts +90 -0
  114. package/dist/cli/step-evidence.d.ts.map +1 -0
  115. package/dist/cli/step-evidence.js +259 -0
  116. package/dist/cli/step-evidence.js.map +1 -0
  117. package/dist/cli/step-failure.d.ts +14 -4
  118. package/dist/cli/step-failure.d.ts.map +1 -1
  119. package/dist/cli/step-failure.js +41 -76
  120. package/dist/cli/step-failure.js.map +1 -1
  121. package/dist/cli-commands.d.ts +6 -0
  122. package/dist/cli-commands.d.ts.map +1 -1
  123. package/dist/cli-commands.js +2 -0
  124. package/dist/cli-commands.js.map +1 -1
  125. package/dist/cli.d.ts +10 -0
  126. package/dist/cli.d.ts.map +1 -1
  127. package/dist/cli.js +53 -42
  128. package/dist/cli.js.map +1 -1
  129. package/dist/cloud-read.d.ts +15 -0
  130. package/dist/cloud-read.d.ts.map +1 -1
  131. package/dist/cloud-read.js +20 -1
  132. package/dist/cloud-read.js.map +1 -1
  133. package/dist/cloud-run-record.d.ts +27 -0
  134. package/dist/cloud-run-record.d.ts.map +1 -0
  135. package/dist/cloud-run-record.js +56 -0
  136. package/dist/cloud-run-record.js.map +1 -0
  137. package/dist/cloud-run.d.ts +2 -9
  138. package/dist/cloud-run.d.ts.map +1 -1
  139. package/dist/cloud-run.js +3 -20
  140. package/dist/cloud-run.js.map +1 -1
  141. package/dist/communication/local.d.ts.map +1 -1
  142. package/dist/communication/local.js +2 -1
  143. package/dist/communication/local.js.map +1 -1
  144. package/dist/communication/worker.d.ts +1 -1
  145. package/dist/communication/worker.d.ts.map +1 -1
  146. package/dist/communication/worker.js +13 -5
  147. package/dist/communication/worker.js.map +1 -1
  148. package/dist/compile.d.ts.map +1 -1
  149. package/dist/compile.js +28 -6
  150. package/dist/compile.js.map +1 -1
  151. package/dist/direct-input.d.ts.map +1 -1
  152. package/dist/direct-input.js +21 -1
  153. package/dist/direct-input.js.map +1 -1
  154. package/dist/failure-kinds.d.ts +96 -6
  155. package/dist/failure-kinds.d.ts.map +1 -1
  156. package/dist/failure-kinds.js +29 -2
  157. package/dist/failure-kinds.js.map +1 -1
  158. package/dist/flow-extension-compat.d.ts.map +1 -1
  159. package/dist/flow-extension-compat.js +26 -8
  160. package/dist/flow-extension-compat.js.map +1 -1
  161. package/dist/flow-extension-loader.d.ts +7 -0
  162. package/dist/flow-extension-loader.d.ts.map +1 -1
  163. package/dist/flow-extension-loader.js +48 -22
  164. package/dist/flow-extension-loader.js.map +1 -1
  165. package/dist/flow-requirements.d.ts.map +1 -1
  166. package/dist/flow-requirements.js +24 -9
  167. package/dist/flow-requirements.js.map +1 -1
  168. package/dist/fs-descriptor.d.ts +17 -0
  169. package/dist/fs-descriptor.d.ts.map +1 -0
  170. package/dist/fs-descriptor.js +96 -0
  171. package/dist/fs-descriptor.js.map +1 -0
  172. package/dist/gate-contract.d.ts +7 -0
  173. package/dist/gate-contract.d.ts.map +1 -1
  174. package/dist/gate-contract.js +6 -1
  175. package/dist/gate-contract.js.map +1 -1
  176. package/dist/helper-preflight.d.ts.map +1 -1
  177. package/dist/helper-preflight.js +10 -3
  178. package/dist/helper-preflight.js.map +1 -1
  179. package/dist/helper-reference.d.ts +25 -0
  180. package/dist/helper-reference.d.ts.map +1 -0
  181. package/dist/helper-reference.js +129 -0
  182. package/dist/helper-reference.js.map +1 -0
  183. package/dist/hosted-base-snapshot.d.ts +25 -0
  184. package/dist/hosted-base-snapshot.d.ts.map +1 -0
  185. package/dist/hosted-base-snapshot.js +278 -0
  186. package/dist/hosted-base-snapshot.js.map +1 -0
  187. package/dist/hosted-extension-declarations.d.ts +10 -0
  188. package/dist/hosted-extension-declarations.d.ts.map +1 -0
  189. package/dist/hosted-extension-declarations.js +272 -0
  190. package/dist/hosted-extension-declarations.js.map +1 -0
  191. package/dist/hosted-extension-isolation.d.ts +82 -0
  192. package/dist/hosted-extension-isolation.d.ts.map +1 -0
  193. package/dist/hosted-extension-isolation.js +322 -0
  194. package/dist/hosted-extension-isolation.js.map +1 -0
  195. package/dist/hosted-extension-manifest.d.ts +9 -0
  196. package/dist/hosted-extension-manifest.d.ts.map +1 -0
  197. package/dist/hosted-extension-manifest.js +235 -0
  198. package/dist/hosted-extension-manifest.js.map +1 -0
  199. package/dist/hosted-extension-protocol.d.ts +16 -0
  200. package/dist/hosted-extension-protocol.d.ts.map +1 -0
  201. package/dist/hosted-extension-protocol.js +224 -0
  202. package/dist/hosted-extension-protocol.js.map +1 -0
  203. package/dist/hosted-extension-runtime.d.ts +30 -0
  204. package/dist/hosted-extension-runtime.d.ts.map +1 -0
  205. package/dist/hosted-extension-runtime.js +167 -0
  206. package/dist/hosted-extension-runtime.js.map +1 -0
  207. package/dist/hosted-extension-sandbox-source.d.ts +9 -0
  208. package/dist/hosted-extension-sandbox-source.d.ts.map +1 -0
  209. package/dist/hosted-extension-sandbox-source.js +95 -0
  210. package/dist/hosted-extension-sandbox-source.js.map +1 -0
  211. package/dist/hosted-extension-sandbox.d.ts +39 -0
  212. package/dist/hosted-extension-sandbox.d.ts.map +1 -0
  213. package/dist/hosted-extension-sandbox.js +418 -0
  214. package/dist/hosted-extension-sandbox.js.map +1 -0
  215. package/dist/hosted-project.d.ts +3 -0
  216. package/dist/hosted-project.d.ts.map +1 -0
  217. package/dist/hosted-project.js +19 -0
  218. package/dist/hosted-project.js.map +1 -0
  219. package/dist/hosted-promise-safety.d.ts +12 -0
  220. package/dist/hosted-promise-safety.d.ts.map +1 -0
  221. package/dist/hosted-promise-safety.js +63 -0
  222. package/dist/hosted-promise-safety.js.map +1 -0
  223. package/dist/index.d.ts +3 -1
  224. package/dist/index.d.ts.map +1 -1
  225. package/dist/index.js +2 -0
  226. package/dist/index.js.map +1 -1
  227. package/dist/intrinsic-array.d.ts +3 -0
  228. package/dist/intrinsic-array.d.ts.map +1 -0
  229. package/dist/intrinsic-array.js +14 -0
  230. package/dist/intrinsic-array.js.map +1 -0
  231. package/dist/journal-client.d.ts +3 -1
  232. package/dist/journal-client.d.ts.map +1 -1
  233. package/dist/journal-client.js +17 -2
  234. package/dist/journal-client.js.map +1 -1
  235. package/dist/journal-projection.d.ts +16 -0
  236. package/dist/journal-projection.d.ts.map +1 -0
  237. package/dist/journal-projection.js +108 -0
  238. package/dist/journal-projection.js.map +1 -0
  239. package/dist/json-value.d.ts +6 -1
  240. package/dist/json-value.d.ts.map +1 -1
  241. package/dist/json-value.js +155 -36
  242. package/dist/json-value.js.map +1 -1
  243. package/dist/llm-worker.d.ts +9 -0
  244. package/dist/llm-worker.d.ts.map +1 -1
  245. package/dist/llm-worker.js +16 -2
  246. package/dist/llm-worker.js.map +1 -1
  247. package/dist/local-agent.d.ts +1 -1
  248. package/dist/local-agent.d.ts.map +1 -1
  249. package/dist/local-agent.js +4 -3
  250. package/dist/local-agent.js.map +1 -1
  251. package/dist/named-gate-lowering.js +35 -5
  252. package/dist/named-gate-lowering.js.map +1 -1
  253. package/dist/named-gate-preflight.d.ts +27 -0
  254. package/dist/named-gate-preflight.d.ts.map +1 -0
  255. package/dist/named-gate-preflight.js +47 -0
  256. package/dist/named-gate-preflight.js.map +1 -0
  257. package/dist/named-gates.d.ts +1 -1
  258. package/dist/named-gates.d.ts.map +1 -1
  259. package/dist/named-gates.js +3 -0
  260. package/dist/named-gates.js.map +1 -1
  261. package/dist/observer-link.d.ts +7 -0
  262. package/dist/observer-link.d.ts.map +1 -1
  263. package/dist/observer-link.js +3 -1
  264. package/dist/observer-link.js.map +1 -1
  265. package/dist/plugin-store.d.ts +8 -2
  266. package/dist/plugin-store.d.ts.map +1 -1
  267. package/dist/plugin-store.js +233 -56
  268. package/dist/plugin-store.js.map +1 -1
  269. package/dist/preflight.d.ts.map +1 -1
  270. package/dist/preflight.js +7 -0
  271. package/dist/preflight.js.map +1 -1
  272. package/dist/protocol.d.ts +2 -0
  273. package/dist/protocol.d.ts.map +1 -1
  274. package/dist/redact.d.ts +42 -0
  275. package/dist/redact.d.ts.map +1 -1
  276. package/dist/redact.js +128 -0
  277. package/dist/redact.js.map +1 -1
  278. package/dist/run-projection.d.ts +83 -0
  279. package/dist/run-projection.d.ts.map +1 -0
  280. package/dist/run-projection.js +199 -0
  281. package/dist/run-projection.js.map +1 -0
  282. package/dist/semver-range.d.ts.map +1 -1
  283. package/dist/semver-range.js +27 -15
  284. package/dist/semver-range.js.map +1 -1
  285. package/dist/shell-word.d.ts +19 -0
  286. package/dist/shell-word.d.ts.map +1 -0
  287. package/dist/shell-word.js +23 -0
  288. package/dist/shell-word.js.map +1 -0
  289. package/dist/spec.d.ts +52 -3
  290. package/dist/spec.d.ts.map +1 -1
  291. package/dist/spec.js.map +1 -1
  292. package/dist/step-fields.d.ts +1 -1
  293. package/dist/step-fields.js +1 -1
  294. package/dist/step-fields.js.map +1 -1
  295. package/dist/steps-green.d.ts +27 -0
  296. package/dist/steps-green.d.ts.map +1 -0
  297. package/dist/steps-green.js +164 -0
  298. package/dist/steps-green.js.map +1 -0
  299. package/dist/validate.d.ts.map +1 -1
  300. package/dist/validate.js +39 -8
  301. package/dist/validate.js.map +1 -1
  302. package/dist/worker-lease.d.ts +8 -1
  303. package/dist/worker-lease.d.ts.map +1 -1
  304. package/dist/worker-lease.js +34 -4
  305. package/dist/worker-lease.js.map +1 -1
  306. package/dist/worker.d.ts +8 -0
  307. package/dist/worker.d.ts.map +1 -1
  308. package/dist/worker.js +17 -9
  309. package/dist/worker.js.map +1 -1
  310. package/package.json +3 -7
  311. package/src/agent-artifacts.ts +2 -10
  312. package/src/agent-cwd.ts +139 -0
  313. package/src/artifact-scan-policy.ts +51 -0
  314. package/src/authored-completion-record.ts +119 -0
  315. package/src/authored-completion.ts +203 -0
  316. package/src/authored-flow-error.ts +13 -1
  317. package/src/authored-flow-executor.ts +101 -59
  318. package/src/authored-human.ts +1 -4
  319. package/src/authored-node-entry.ts +4 -1
  320. package/src/authored-node-runner.ts +96 -22
  321. package/src/authored-root.ts +20 -2
  322. package/src/authored-step-output.ts +139 -42
  323. package/src/authored-verdict.ts +87 -0
  324. package/src/authored-worker-step.ts +60 -12
  325. package/src/bundle-extensions.ts +6 -5
  326. package/src/bundle.ts +52 -7
  327. package/src/canonical.ts +20 -6
  328. package/src/cli/check-worker-surface.ts +66 -0
  329. package/src/cli/check.ts +35 -4
  330. package/src/cli/cloud-format.ts +82 -0
  331. package/src/cli/cloud-live.ts +366 -0
  332. package/src/cli/cloud-read.ts +13 -282
  333. package/src/cli/cloud-refusal.ts +113 -0
  334. package/src/cli/cloud-status-view.ts +213 -0
  335. package/src/cli/direct-run.ts +19 -2
  336. package/src/cli/hn-monitor.ts +2 -1
  337. package/src/cli/local-agent-remedy.ts +160 -0
  338. package/src/cli/observer-session.ts +107 -0
  339. package/src/cli/run.ts +233 -28
  340. package/src/cli/status.ts +59 -3
  341. package/src/cli/step-evidence.ts +310 -0
  342. package/src/cli/step-failure.ts +57 -81
  343. package/src/cli-commands.ts +2 -0
  344. package/src/cli.ts +64 -44
  345. package/src/cloud-read.ts +25 -1
  346. package/src/cloud-run-record.ts +64 -0
  347. package/src/cloud-run.ts +5 -24
  348. package/src/communication/local.ts +2 -1
  349. package/src/communication/worker.ts +13 -5
  350. package/src/compile.ts +28 -6
  351. package/src/direct-input.ts +22 -1
  352. package/src/failure-kinds.ts +104 -2
  353. package/src/flow-extension-compat.ts +32 -7
  354. package/src/flow-extension-loader.ts +56 -21
  355. package/src/flow-requirements.ts +24 -9
  356. package/src/fs-descriptor.ts +127 -0
  357. package/src/gate-contract.ts +13 -1
  358. package/src/helper-preflight.ts +10 -3
  359. package/src/helper-reference.ts +130 -0
  360. package/src/hosted-base-snapshot.ts +351 -0
  361. package/src/hosted-extension-declarations.ts +387 -0
  362. package/src/hosted-extension-isolation.ts +457 -0
  363. package/src/hosted-extension-manifest.ts +249 -0
  364. package/src/hosted-extension-protocol.ts +262 -0
  365. package/src/hosted-extension-runtime.ts +266 -0
  366. package/src/hosted-extension-sandbox-source.ts +94 -0
  367. package/src/hosted-extension-sandbox.ts +489 -0
  368. package/src/hosted-project.ts +18 -0
  369. package/src/hosted-promise-safety.ts +68 -0
  370. package/src/index.ts +20 -0
  371. package/src/intrinsic-array.ts +14 -0
  372. package/src/journal-client.ts +19 -2
  373. package/src/journal-projection.ts +106 -0
  374. package/src/json-value.ts +184 -32
  375. package/src/llm-worker.ts +16 -2
  376. package/src/local-agent.ts +4 -2
  377. package/src/named-gate-lowering.ts +35 -5
  378. package/src/named-gate-preflight.ts +47 -0
  379. package/src/named-gates.ts +3 -0
  380. package/src/observer-link.ts +10 -1
  381. package/src/plugin-store.ts +323 -56
  382. package/src/preflight.ts +7 -0
  383. package/src/protocol.ts +2 -0
  384. package/src/redact.ts +111 -0
  385. package/src/run-projection.ts +247 -0
  386. package/src/semver-range.ts +39 -14
  387. package/src/shell-word.ts +24 -0
  388. package/src/spec.ts +54 -3
  389. package/src/step-fields.ts +1 -1
  390. package/src/steps-green.ts +168 -0
  391. package/src/validate.ts +35 -8
  392. package/src/worker-lease.ts +35 -5
  393. package/src/worker.ts +27 -11
@@ -0,0 +1,278 @@
1
+ import { constants } from 'node:fs';
2
+ import { chmod, mkdir, mkdtemp, realpath, rm, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
5
+ import { canonicalize } from './canonical.js';
6
+ import { sha256 } from './bundle.js';
7
+ import { closeDescriptor, closeDirectory, descriptorIsDirectory, descriptorIsFile, directoryEntryIsDirectory, directoryEntryIsFile, openDirectory, openDescriptor, readDescriptor, readDirectory, readDirectoryEntry, statDescriptor, } from './fs-descriptor.js';
8
+ import { findHostedProject } from './hosted-project.js';
9
+ import { appendIntrinsicArray } from './intrinsic-array.js';
10
+ import { assertHostedPromiseSafety, frozenHostedPromiseValue, hostedPromiseValue, } from './hosted-promise-safety.js';
11
+ import { PluginError } from './plugin-manifest.js';
12
+ const EXCLUDED_DIRECTORIES = new Set(['.flows', '.git', 'node_modules']);
13
+ const CHMOD = chmod;
14
+ const MKDIR = mkdir;
15
+ const MKDTEMP = mkdtemp;
16
+ const REALPATH = realpath;
17
+ const RM = rm;
18
+ const WRITE_FILE = writeFile;
19
+ const TMPDIR = tmpdir;
20
+ const PATH_DIRNAME = dirname;
21
+ const PATH_IS_ABSOLUTE = isAbsolute;
22
+ const PATH_JOIN = join;
23
+ const PATH_RELATIVE = relative;
24
+ const PATH_RESOLVE = resolve;
25
+ const PATH_SEPARATOR = sep;
26
+ const PROCESS_PLATFORM = process.platform;
27
+ const ARRAY_SORT = Function.prototype.call.bind(Array.prototype.sort);
28
+ const OBJECT_CREATE = Object.create;
29
+ const OBJECT_FREEZE = Object.freeze;
30
+ const OBJECT_GET_OWN_PROPERTY_DESCRIPTOR = Object.getOwnPropertyDescriptor;
31
+ const BIG_INT = BigInt;
32
+ const BUFFER_ALLOC_UNSAFE = Buffer.allocUnsafe;
33
+ const NUMBER = Number;
34
+ const SET_HAS = Function.prototype.call.bind(Set.prototype.has);
35
+ const STRING_LOCALE_COMPARE = Function.prototype.call.bind(String.prototype.localeCompare);
36
+ const STRING_STARTS_WITH = Function.prototype.call.bind(String.prototype.startsWith);
37
+ const MAX_ENTRIES = 10_000;
38
+ const MAX_BYTES = 64 * 1024 * 1024;
39
+ const MAX_DEPTH = 64;
40
+ const READ_FLAGS = constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK;
41
+ const EMPTY_HOSTED_BASE_HOOKS = OBJECT_FREEZE(OBJECT_CREATE(null));
42
+ /**
43
+ * Materialize project source without importing tenant code. Project
44
+ * node_modules is never linked or read. Every admitted source byte is
45
+ * represented in liveDigest and copied to the private identity directory.
46
+ */
47
+ export async function createHostedBaseSnapshot(flowPath, projectRootOverride) {
48
+ assertHostedPromiseSafety('plugin_source_invalid');
49
+ const origin = await REALPATH(PATH_RESOLVE(flowPath));
50
+ const discovered = projectRootOverride ?? findHostedProject(PATH_DIRNAME(origin)) ?? PATH_DIRNAME(origin);
51
+ const projectRoot = await REALPATH(discovered);
52
+ const flowRelative = PATH_RELATIVE(projectRoot, origin);
53
+ if (flowRelative === '' ||
54
+ PATH_IS_ABSOLUTE(flowRelative) ||
55
+ flowRelative === '..' ||
56
+ STRING_STARTS_WITH(flowRelative, `..${PATH_SEPARATOR}`)) {
57
+ throw invalid('Hosted base flow must be a file inside its project root.');
58
+ }
59
+ const liveSources = frozenHostedPromiseValue([OBJECT_FREEZE({ root: projectRoot, prefix: '' })]);
60
+ const files = await readAuthorityFiles(liveSources);
61
+ const liveDigest = sourceDigest(files);
62
+ const liveFlow = sourceFileAt(files, flowRelative);
63
+ if (liveFlow === undefined)
64
+ throw invalid('Hosted base flow is missing from its admitted source.');
65
+ const snapshotRoot = await MKDTEMP(PATH_JOIN(TMPDIR(), 'flows-hosted-base-'));
66
+ await CHMOD(snapshotRoot, 0o700);
67
+ try {
68
+ for (let index = 0; index < files.length; index += 1) {
69
+ const file = files[index];
70
+ const target = PATH_JOIN(snapshotRoot, file.path);
71
+ await MKDIR(PATH_DIRNAME(target), { recursive: true, mode: 0o700 });
72
+ await WRITE_FILE(target, file.bytes, { flag: 'wx', mode: 0o400 });
73
+ }
74
+ const snapshotFiles = await readSnapshotTree(snapshotRoot);
75
+ const snapshotDigest = sourceDigest(snapshotFiles);
76
+ if (snapshotDigest !== liveDigest) {
77
+ throw invalid('Hosted base private snapshot does not match its buffered source.');
78
+ }
79
+ const snapshotFlow = sourceFileAt(snapshotFiles, flowRelative);
80
+ if (snapshotFlow === undefined || snapshotFlow.sha256 !== liveFlow.sha256) {
81
+ throw invalid('Hosted base private snapshot does not contain its buffered flow source.');
82
+ }
83
+ return frozenHostedPromiseValue({
84
+ liveSources,
85
+ liveDigest,
86
+ snapshotRoot,
87
+ snapshotFlowPath: PATH_JOIN(snapshotRoot, flowRelative),
88
+ snapshotFlowSha256: snapshotFlow.sha256,
89
+ });
90
+ }
91
+ catch (error) {
92
+ await RM(snapshotRoot, { recursive: true, force: true });
93
+ throw error;
94
+ }
95
+ }
96
+ export async function hostedBaseSourceDigest(sources, hooks = EMPTY_HOSTED_BASE_HOOKS) {
97
+ assertHostedPromiseSafety('plugin_source_invalid');
98
+ return sourceDigest(await readAuthorityFiles(sources, hooks));
99
+ }
100
+ export async function removeHostedBaseSnapshot(snapshot) {
101
+ await RM(snapshot.snapshotRoot, { recursive: true, force: true });
102
+ }
103
+ async function readAuthorityFiles(sources, hooks = EMPTY_HOSTED_BASE_HOOKS) {
104
+ const budget = { entries: 0, bytes: 0 };
105
+ const files = [];
106
+ for (let sourceIndex = 0; sourceIndex < sources.length; sourceIndex += 1) {
107
+ const source = sources[sourceIndex];
108
+ const sourceFiles = await readTree(source.root, source.prefix, budget, hooks);
109
+ for (let fileIndex = 0; fileIndex < sourceFiles.length; fileIndex += 1) {
110
+ appendIntrinsicArray(files, sourceFiles[fileIndex]);
111
+ }
112
+ }
113
+ ARRAY_SORT(files, (left, right) => STRING_LOCALE_COMPARE(left.path, right.path));
114
+ return frozenHostedPromiseValue(files);
115
+ }
116
+ async function readSnapshotTree(root) {
117
+ const files = [];
118
+ const budget = { entries: 0, bytes: 0 };
119
+ async function visit(directory, prefix) {
120
+ const entries = await readDirectory(directory);
121
+ ARRAY_SORT(entries, (left, right) => STRING_LOCALE_COMPARE(left.name, right.name));
122
+ for (let index = 0; index < entries.length; index += 1) {
123
+ const entry = entries[index];
124
+ budget.entries += 1;
125
+ if (budget.entries > MAX_ENTRIES)
126
+ throw tooLarge();
127
+ const path = prefix === '' ? entry.name : PATH_JOIN(prefix, entry.name);
128
+ const absolute = PATH_JOIN(directory, entry.name);
129
+ if (directoryEntryIsDirectory(entry))
130
+ await visit(absolute, path);
131
+ else if (directoryEntryIsFile(entry)) {
132
+ const descriptor = await openDescriptor(absolute, READ_FLAGS);
133
+ try {
134
+ const before = await statDescriptor(descriptor, { bigint: true });
135
+ if (!descriptorIsFile(before) || before.size < 0n || before.size > BIG_INT(MAX_BYTES - budget.bytes))
136
+ throw tooLarge();
137
+ const expectedBytes = NUMBER(before.size);
138
+ const bytes = await readBounded(descriptor, expectedBytes, path);
139
+ const after = await statDescriptor(descriptor, { bigint: true });
140
+ if (after.size !== before.size || after.mtimeNs !== before.mtimeNs || after.ctimeNs !== before.ctimeNs) {
141
+ throw invalid(`Hosted base snapshot changed while reading "${path}".`);
142
+ }
143
+ budget.bytes += expectedBytes;
144
+ appendIntrinsicArray(files, OBJECT_FREEZE({ path, bytes, sha256: sha256(bytes) }));
145
+ }
146
+ finally {
147
+ await closeDescriptor(descriptor);
148
+ }
149
+ }
150
+ else
151
+ throw invalid(`Hosted base snapshot contains unsupported entry "${path}".`);
152
+ }
153
+ }
154
+ await visit(root, '');
155
+ ARRAY_SORT(files, (left, right) => STRING_LOCALE_COMPARE(left.path, right.path));
156
+ return frozenHostedPromiseValue(files);
157
+ }
158
+ async function readTree(root, prefix, budget, hooks) {
159
+ if (PROCESS_PLATFORM !== 'linux') {
160
+ throw invalid('Hosted base source snapshotting requires Linux.');
161
+ }
162
+ const files = [];
163
+ async function visit(directory, relativeDirectory, depth) {
164
+ if (depth > MAX_DEPTH)
165
+ throw tooLarge();
166
+ const entries = await openDirectory(`/proc/self/fd/${directory}`);
167
+ try {
168
+ for (;;) {
169
+ const entry = await readDirectoryEntry(entries);
170
+ if (entry === null)
171
+ break;
172
+ if (SET_HAS(EXCLUDED_DIRECTORIES, entry.name))
173
+ continue;
174
+ budget.entries += 1;
175
+ if (budget.entries > MAX_ENTRIES)
176
+ throw tooLarge();
177
+ const relativePath = relativeDirectory === '' ? entry.name : PATH_JOIN(relativeDirectory, entry.name);
178
+ const absolutePath = PATH_JOIN(root, relativePath);
179
+ await ownHook(hooks, 'beforeOpen')?.(absolutePath);
180
+ const descriptor = await openDescriptor(`/proc/self/fd/${directory}/${entry.name}`, READ_FLAGS);
181
+ try {
182
+ const before = await statDescriptor(descriptor, { bigint: true });
183
+ if (descriptorIsDirectory(before)) {
184
+ await visit(descriptor, relativePath, depth + 1);
185
+ }
186
+ else if (descriptorIsFile(before)) {
187
+ if (before.size < 0n || before.size > BIG_INT(MAX_BYTES - budget.bytes))
188
+ throw tooLarge();
189
+ const expectedBytes = NUMBER(before.size);
190
+ await ownHook(hooks, 'afterStat')?.(absolutePath);
191
+ const bytes = await readBounded(descriptor, expectedBytes, relativePath);
192
+ const after = await statDescriptor(descriptor, { bigint: true });
193
+ if (after.size !== before.size || after.mtimeNs !== before.mtimeNs || after.ctimeNs !== before.ctimeNs) {
194
+ throw invalid(`Hosted base source changed while reading "${relativePath}".`);
195
+ }
196
+ budget.bytes += expectedBytes;
197
+ appendIntrinsicArray(files, OBJECT_FREEZE({
198
+ path: prefix === '' ? relativePath : PATH_JOIN(prefix, relativePath),
199
+ bytes,
200
+ sha256: sha256(bytes),
201
+ }));
202
+ }
203
+ else {
204
+ throw invalid(`Hosted base authority contains unsupported entry "${relativePath}".`);
205
+ }
206
+ }
207
+ finally {
208
+ await closeDescriptor(descriptor);
209
+ }
210
+ }
211
+ }
212
+ finally {
213
+ await closeDirectory(entries);
214
+ }
215
+ }
216
+ try {
217
+ const rootDescriptor = await openDescriptor(root, READ_FLAGS);
218
+ try {
219
+ if (!descriptorIsDirectory(await statDescriptor(rootDescriptor, { bigint: true }))) {
220
+ throw invalid('Hosted base source root is not a directory.');
221
+ }
222
+ await visit(rootDescriptor, '', 0);
223
+ }
224
+ finally {
225
+ await closeDescriptor(rootDescriptor);
226
+ }
227
+ }
228
+ catch (error) {
229
+ if (error instanceof PluginError)
230
+ throw error;
231
+ throw invalid('Hosted base source or trusted dependency is unreadable.');
232
+ }
233
+ return frozenHostedPromiseValue(files);
234
+ }
235
+ function ownHook(hooks, name) {
236
+ const descriptor = OBJECT_GET_OWN_PROPERTY_DESCRIPTOR(hooks, name);
237
+ return descriptor !== undefined && 'value' in descriptor && typeof descriptor.value === 'function'
238
+ ? descriptor.value
239
+ : undefined;
240
+ }
241
+ async function readBounded(descriptor, expectedBytes, relativePath) {
242
+ const bytes = BUFFER_ALLOC_UNSAFE(expectedBytes);
243
+ let offset = 0;
244
+ while (offset < expectedBytes) {
245
+ const bytesRead = await readDescriptor(descriptor, bytes, offset, expectedBytes - offset, offset);
246
+ if (bytesRead === 0) {
247
+ throw invalid(`Hosted base source changed while reading "${relativePath}".`);
248
+ }
249
+ offset += bytesRead;
250
+ }
251
+ const extra = BUFFER_ALLOC_UNSAFE(1);
252
+ if ((await readDescriptor(descriptor, extra, 0, 1, expectedBytes)) !== 0) {
253
+ throw invalid(`Hosted base source changed while reading "${relativePath}".`);
254
+ }
255
+ return hostedPromiseValue(bytes);
256
+ }
257
+ function tooLarge() {
258
+ return invalid('Hosted base source exceeds the snapshot entry or byte limit.');
259
+ }
260
+ function sourceDigest(files) {
261
+ const records = [];
262
+ for (let index = 0; index < files.length; index += 1) {
263
+ const file = files[index];
264
+ appendIntrinsicArray(records, { path: file.path, sha256: file.sha256 });
265
+ }
266
+ return sha256(canonicalize(records));
267
+ }
268
+ function sourceFileAt(files, path) {
269
+ for (let index = 0; index < files.length; index += 1) {
270
+ if (files[index].path === path)
271
+ return files[index];
272
+ }
273
+ return undefined;
274
+ }
275
+ function invalid(message) {
276
+ return new PluginError('plugin_source_invalid', message);
277
+ }
278
+ //# sourceMappingURL=hosted-base-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-base-snapshot.js","sourceRoot":"","sources":["../src/hosted-base-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type PluginLockEntry } from "./plugin-lock.js";
2
+ import { type PluginSourceRef } from "./plugin-source.js";
3
+ export interface HostedDeclaredExtension {
4
+ readonly ref: string;
5
+ readonly entry: PluginLockEntry;
6
+ readonly source: PluginSourceRef;
7
+ }
8
+ export declare function declarationSignature(declared: readonly HostedDeclaredExtension[]): string;
9
+ export declare function hostedDeclaredExtensions(root: string): readonly HostedDeclaredExtension[];
10
+ //# sourceMappingURL=hosted-extension-declarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-extension-declarations.d.ts","sourceRoot":"","sources":["../src/hosted-extension-declarations.ts"],"names":[],"mappings":"AAeA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqD9E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,GAC3C,MAAM,CAmBR;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,GACX,SAAS,uBAAuB,EAAE,CAgGpC"}
@@ -0,0 +1,272 @@
1
+ import { constants, closeSync, existsSync, fstatSync, openSync, readSync, } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { safePath } from "./bundle.js";
4
+ import { canonicalize } from "./canonical.js";
5
+ import { descriptorIsFile } from "./fs-descriptor.js";
6
+ import { snapshotJsonValue } from "./json-value.js";
7
+ import { PluginError } from "./plugin-manifest.js";
8
+ import { appendIntrinsicArray } from "./intrinsic-array.js";
9
+ import { PLUGIN_LOCK_FILE, PLUGIN_LOCK_VERSION, } from "./plugin-lock.js";
10
+ import { canonicalPluginRef } from "./plugin-source.js";
11
+ const CLOSE_SYNC = closeSync;
12
+ const EXISTS_SYNC = existsSync;
13
+ const FSTAT_SYNC = fstatSync;
14
+ const OPEN_SYNC = openSync;
15
+ const READ_SYNC = readSync;
16
+ const PATH_JOIN = join;
17
+ const ERROR = Error;
18
+ const PLUGIN_ERROR_IS_INSTANCE = Function.prototype.call.bind(Function.prototype[Symbol.hasInstance], PluginError);
19
+ const MAX_DECLARATION_BYTES = 1024 * 1024;
20
+ const BIG_INT = BigInt;
21
+ const BUFFER_ALLOC_UNSAFE = Buffer.allocUnsafe;
22
+ const BUFFER_TO_STRING = Function.prototype.call.bind(Buffer.prototype.toString);
23
+ const NUMBER = Number;
24
+ const DECLARATION_READ_FLAGS = constants.O_RDONLY |
25
+ (constants.O_NOFOLLOW ?? 0) |
26
+ (constants.O_NONBLOCK ?? 0);
27
+ const JSON_PARSE = JSON.parse;
28
+ const ARRAY_IS_ARRAY = Array.isArray;
29
+ const DATE_PARSE = Date.parse;
30
+ const NUMBER_IS_NAN = Number.isNaN;
31
+ const OBJECT_FREEZE = Object.freeze;
32
+ const OBJECT_HAS_OWN = Object.hasOwn;
33
+ const OBJECT_KEYS = Object.keys;
34
+ const REGEXP_TEST = Function.prototype.call.bind(RegExp.prototype.test);
35
+ const SET = Set;
36
+ const SET_ADD = Function.prototype.call.bind(Set.prototype.add);
37
+ const SET_HAS = Function.prototype.call.bind(Set.prototype.has);
38
+ const STRING_STARTS_WITH = Function.prototype.call.bind(String.prototype.startsWith);
39
+ const LOCK_HEX64 = /^[0-9a-f]{64}$/;
40
+ const LOCK_SHA = /^[0-9a-f]{40}$/;
41
+ const LOCK_OWNER = /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38})$/;
42
+ const LOCK_REPO = /^[A-Za-z0-9_.-]{1,100}$/;
43
+ const HTTPS_GITHUB = /^https:\/\/github\.com\//;
44
+ export function declarationSignature(declared) {
45
+ const records = [];
46
+ for (let index = 0; index < declared.length; index += 1) {
47
+ const { ref, entry } = declared[index];
48
+ appendIntrinsicArray(records, {
49
+ ref,
50
+ name: entry.name,
51
+ version: entry.version,
52
+ digest: entry.digest,
53
+ manifestSha256: entry.manifestSha256,
54
+ });
55
+ }
56
+ return canonicalize(records);
57
+ }
58
+ export function hostedDeclaredExtensions(root) {
59
+ if (EXISTS_SYNC(PATH_JOIN(root, "flows.json.tmp")) ||
60
+ EXISTS_SYNC(PATH_JOIN(root, `${PLUGIN_LOCK_FILE}.tmp`))) {
61
+ throw new PluginError("plugin_lock_invalid", "Hosted extension declarations have a pending transaction.");
62
+ }
63
+ let config;
64
+ try {
65
+ config = JSON_PARSE(BUFFER_TO_STRING(readBoundedDeclaration(PATH_JOIN(root, "flows.json")), "utf8"));
66
+ }
67
+ catch (error) {
68
+ if (PLUGIN_ERROR_IS_INSTANCE(error))
69
+ throw error;
70
+ throw new PluginError("plugin_manifest_invalid", "Invalid or oversized flows.json.");
71
+ }
72
+ if (typeof config !== "object" || config === null || ARRAY_IS_ARRAY(config)) {
73
+ throw new PluginError("plugin_manifest_invalid", "flows.json plugins must be strings.");
74
+ }
75
+ const plugins = OBJECT_HAS_OWN(config, "plugins")
76
+ ? config.plugins
77
+ : undefined;
78
+ if (plugins !== undefined && !ARRAY_IS_ARRAY(plugins)) {
79
+ throw new PluginError("plugin_manifest_invalid", "flows.json plugins must be strings.");
80
+ }
81
+ const declared = [];
82
+ if (plugins !== undefined) {
83
+ for (let index = 0; index < plugins.length; index += 1) {
84
+ const ref = plugins[index];
85
+ if (typeof ref !== "string") {
86
+ throw new PluginError("plugin_manifest_invalid", "flows.json plugins must be strings.");
87
+ }
88
+ if (isHostedGithubPluginRef(ref))
89
+ appendIntrinsicArray(declared, ref);
90
+ }
91
+ }
92
+ let lock = OBJECT_FREEZE({
93
+ version: PLUGIN_LOCK_VERSION,
94
+ plugins: OBJECT_FREEZE([]),
95
+ });
96
+ const lockPath = PATH_JOIN(root, PLUGIN_LOCK_FILE);
97
+ if (EXISTS_SYNC(lockPath)) {
98
+ let value;
99
+ try {
100
+ value = JSON_PARSE(BUFFER_TO_STRING(readBoundedDeclaration(lockPath), "utf8"));
101
+ }
102
+ catch (error) {
103
+ if (PLUGIN_ERROR_IS_INSTANCE(error))
104
+ throw error;
105
+ throw new PluginError("plugin_lock_invalid", `${PLUGIN_LOCK_FILE}: not valid or exceeds the hosted size limit.`);
106
+ }
107
+ lock = parseHostedPluginLock(value);
108
+ }
109
+ if (declared.length !== lock.plugins.length) {
110
+ throw new PluginError("plugin_lock_invalid", "Hosted flows.json and flows.lock.json declarations differ.");
111
+ }
112
+ const result = [];
113
+ for (let index = 0; index < lock.plugins.length; index += 1) {
114
+ const entry = lock.plugins[index];
115
+ const source = OBJECT_FREEZE({ ...entry.source, ref: entry.source.sha });
116
+ const ref = canonicalPluginRef(source);
117
+ if (declared[index] !== ref) {
118
+ throw new PluginError("plugin_lock_invalid", "Hosted flows.lock.json order differs from flows.json.plugins.");
119
+ }
120
+ appendIntrinsicArray(result, OBJECT_FREEZE({ ref, entry, source }));
121
+ }
122
+ return OBJECT_FREEZE(result);
123
+ }
124
+ function parseHostedPluginLock(input) {
125
+ let value;
126
+ try {
127
+ value = snapshotJsonValue(input, "hosted plugin lock");
128
+ }
129
+ catch {
130
+ return invalidHostedLock(`expected { version: ${PLUGIN_LOCK_VERSION}, plugins: [] }.`);
131
+ }
132
+ if (!hostedRecord(value) ||
133
+ value.version !== PLUGIN_LOCK_VERSION ||
134
+ !ARRAY_IS_ARRAY(value.plugins) ||
135
+ !hostedHasOnlyKeys(value, ["version", "plugins"])) {
136
+ return invalidHostedLock(`expected { version: ${PLUGIN_LOCK_VERSION}, plugins: [] }.`);
137
+ }
138
+ const names = new SET();
139
+ const plugins = [];
140
+ for (let index = 0; index < value.plugins.length; index += 1) {
141
+ const entry = value.plugins[index];
142
+ if (!hostedRecord(entry) ||
143
+ !hostedHasOnlyKeys(entry, [
144
+ "digest",
145
+ "kind",
146
+ "manifestSha256",
147
+ "name",
148
+ "order",
149
+ "resolvedAt",
150
+ "source",
151
+ "version",
152
+ ]) ||
153
+ entry.kind !== "flow-extension" ||
154
+ typeof entry.name !== "string" ||
155
+ typeof entry.version !== "string" ||
156
+ typeof entry.digest !== "string" ||
157
+ !REGEXP_TEST(LOCK_HEX64, entry.digest) ||
158
+ typeof entry.manifestSha256 !== "string" ||
159
+ !REGEXP_TEST(LOCK_HEX64, entry.manifestSha256) ||
160
+ entry.order !== index + 1 ||
161
+ typeof entry.resolvedAt !== "string" ||
162
+ NUMBER_IS_NAN(DATE_PARSE(entry.resolvedAt)) ||
163
+ !hostedRecord(entry.source) ||
164
+ !hostedHasOnlyKeys(entry.source, [
165
+ "host",
166
+ "owner",
167
+ "repo",
168
+ "sha",
169
+ "path",
170
+ ]) ||
171
+ entry.source.host !== "github" ||
172
+ typeof entry.source.owner !== "string" ||
173
+ !REGEXP_TEST(LOCK_OWNER, entry.source.owner) ||
174
+ typeof entry.source.repo !== "string" ||
175
+ !REGEXP_TEST(LOCK_REPO, entry.source.repo) ||
176
+ entry.source.repo === "." ||
177
+ entry.source.repo === ".." ||
178
+ typeof entry.source.sha !== "string" ||
179
+ !REGEXP_TEST(LOCK_SHA, entry.source.sha) ||
180
+ typeof entry.source.path !== "string" ||
181
+ (entry.source.path !== "" && !safePath(entry.source.path))) {
182
+ return invalidHostedLock(`plugins[${index}] is malformed.`);
183
+ }
184
+ if (SET_HAS(names, entry.name))
185
+ return invalidHostedLock(`plugin ${entry.name} is listed twice.`);
186
+ SET_ADD(names, entry.name);
187
+ appendIntrinsicArray(plugins, OBJECT_FREEZE({
188
+ name: entry.name,
189
+ kind: "flow-extension",
190
+ version: entry.version,
191
+ source: OBJECT_FREEZE({
192
+ host: "github",
193
+ owner: entry.source.owner,
194
+ repo: entry.source.repo,
195
+ sha: entry.source.sha,
196
+ path: entry.source.path,
197
+ }),
198
+ digest: entry.digest,
199
+ manifestSha256: entry.manifestSha256,
200
+ order: entry.order,
201
+ resolvedAt: entry.resolvedAt,
202
+ }));
203
+ }
204
+ return OBJECT_FREEZE({
205
+ version: PLUGIN_LOCK_VERSION,
206
+ plugins: OBJECT_FREEZE(plugins),
207
+ });
208
+ }
209
+ function isHostedGithubPluginRef(value) {
210
+ return (STRING_STARTS_WITH(value, "github:") || REGEXP_TEST(HTTPS_GITHUB, value));
211
+ }
212
+ function hostedRecord(value) {
213
+ return typeof value === "object" && value !== null && !ARRAY_IS_ARRAY(value);
214
+ }
215
+ function hostedHasOnlyKeys(value, allowed) {
216
+ const keys = OBJECT_KEYS(value);
217
+ for (let index = 0; index < keys.length; index += 1) {
218
+ let found = false;
219
+ for (let allowedIndex = 0; allowedIndex < allowed.length; allowedIndex += 1) {
220
+ if (keys[index] === allowed[allowedIndex]) {
221
+ found = true;
222
+ break;
223
+ }
224
+ }
225
+ if (!found)
226
+ return false;
227
+ }
228
+ return true;
229
+ }
230
+ function invalidHostedLock(message) {
231
+ throw new PluginError("plugin_lock_invalid", `${PLUGIN_LOCK_FILE}: ${message}`);
232
+ }
233
+ function readBoundedDeclaration(path) {
234
+ let descriptor;
235
+ try {
236
+ descriptor = OPEN_SYNC(path, DECLARATION_READ_FLAGS);
237
+ const before = FSTAT_SYNC(descriptor, { bigint: true });
238
+ if (!descriptorIsFile(before) ||
239
+ before.size < 0n ||
240
+ before.size > BIG_INT(MAX_DECLARATION_BYTES)) {
241
+ throw new PluginError("plugin_source_invalid", "Hosted extension declaration is not a bounded regular file.");
242
+ }
243
+ const expected = NUMBER(before.size);
244
+ const bytes = BUFFER_ALLOC_UNSAFE(expected);
245
+ let offset = 0;
246
+ while (offset < expected) {
247
+ const count = READ_SYNC(descriptor, bytes, offset, expected - offset, offset);
248
+ if (count === 0)
249
+ throw new ERROR("short read");
250
+ offset += count;
251
+ }
252
+ if (READ_SYNC(descriptor, BUFFER_ALLOC_UNSAFE(1), 0, 1, expected) !== 0)
253
+ throw new ERROR("grew");
254
+ const after = FSTAT_SYNC(descriptor, { bigint: true });
255
+ if (after.size !== before.size ||
256
+ after.mtimeNs !== before.mtimeNs ||
257
+ after.ctimeNs !== before.ctimeNs) {
258
+ throw new ERROR("changed");
259
+ }
260
+ return bytes;
261
+ }
262
+ catch (error) {
263
+ if (PLUGIN_ERROR_IS_INSTANCE(error))
264
+ throw error;
265
+ throw new PluginError("plugin_source_invalid", "Hosted extension declaration is unreadable or changed while reading.");
266
+ }
267
+ finally {
268
+ if (descriptor !== undefined)
269
+ CLOSE_SYNC(descriptor);
270
+ }
271
+ }
272
+ //# sourceMappingURL=hosted-extension-declarations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-extension-declarations.js","sourceRoot":"","sources":["../src/hosted-extension-declarations.ts"],"names":[],"mappings":"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"}