percher 1.4.0 → 1.4.1

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 (314) hide show
  1. package/LICENSE +0 -0
  2. package/THIRD-PARTY-NOTICES.txt +0 -0
  3. package/dist/bin/percher.d.ts +0 -0
  4. package/dist/bin/percher.d.ts.map +0 -0
  5. package/dist/bin/percher.js +858 -300
  6. package/dist/bin/percher.js.map +0 -0
  7. package/dist/package.json +5 -5
  8. package/dist/src/ci-env.d.ts +0 -0
  9. package/dist/src/ci-env.d.ts.map +0 -0
  10. package/dist/src/ci-env.js +0 -0
  11. package/dist/src/ci-env.js.map +0 -0
  12. package/dist/src/cli-utils.d.ts +0 -0
  13. package/dist/src/cli-utils.d.ts.map +0 -0
  14. package/dist/src/cli-utils.js +0 -0
  15. package/dist/src/cli-utils.js.map +0 -0
  16. package/dist/src/commands/account.d.ts +0 -0
  17. package/dist/src/commands/account.d.ts.map +0 -0
  18. package/dist/src/commands/account.js +0 -0
  19. package/dist/src/commands/account.js.map +0 -0
  20. package/dist/src/commands/admin.d.ts +0 -0
  21. package/dist/src/commands/admin.d.ts.map +0 -0
  22. package/dist/src/commands/admin.js +0 -0
  23. package/dist/src/commands/admin.js.map +0 -0
  24. package/dist/src/commands/analytics.d.ts +0 -0
  25. package/dist/src/commands/analytics.d.ts.map +0 -0
  26. package/dist/src/commands/analytics.js +0 -0
  27. package/dist/src/commands/analytics.js.map +0 -0
  28. package/dist/src/commands/apps.d.ts +0 -0
  29. package/dist/src/commands/apps.d.ts.map +0 -0
  30. package/dist/src/commands/apps.js +0 -0
  31. package/dist/src/commands/apps.js.map +0 -0
  32. package/dist/src/commands/auth.d.ts +0 -0
  33. package/dist/src/commands/auth.d.ts.map +0 -0
  34. package/dist/src/commands/auth.js +0 -0
  35. package/dist/src/commands/auth.js.map +0 -0
  36. package/dist/src/commands/data-records.d.ts +0 -0
  37. package/dist/src/commands/data-records.d.ts.map +0 -0
  38. package/dist/src/commands/data-records.js +0 -0
  39. package/dist/src/commands/data-records.js.map +0 -0
  40. package/dist/src/commands/data.d.ts +0 -0
  41. package/dist/src/commands/data.d.ts.map +0 -0
  42. package/dist/src/commands/data.js +0 -0
  43. package/dist/src/commands/data.js.map +0 -0
  44. package/dist/src/commands/deploys.d.ts +0 -0
  45. package/dist/src/commands/deploys.d.ts.map +0 -0
  46. package/dist/src/commands/deploys.js +0 -0
  47. package/dist/src/commands/deploys.js.map +0 -0
  48. package/dist/src/commands/env.d.ts +0 -0
  49. package/dist/src/commands/env.d.ts.map +0 -0
  50. package/dist/src/commands/env.js +0 -0
  51. package/dist/src/commands/env.js.map +0 -0
  52. package/dist/src/commands/export.d.ts +0 -0
  53. package/dist/src/commands/export.d.ts.map +0 -0
  54. package/dist/src/commands/export.js +0 -0
  55. package/dist/src/commands/export.js.map +0 -0
  56. package/dist/src/commands/github.d.ts +0 -0
  57. package/dist/src/commands/github.d.ts.map +0 -0
  58. package/dist/src/commands/github.js +0 -0
  59. package/dist/src/commands/github.js.map +0 -0
  60. package/dist/src/commands/hooks.d.ts +0 -0
  61. package/dist/src/commands/hooks.d.ts.map +0 -0
  62. package/dist/src/commands/hooks.js +0 -0
  63. package/dist/src/commands/hooks.js.map +0 -0
  64. package/dist/src/commands/migrate.d.ts +0 -0
  65. package/dist/src/commands/migrate.d.ts.map +0 -0
  66. package/dist/src/commands/migrate.js +0 -0
  67. package/dist/src/commands/migrate.js.map +0 -0
  68. package/dist/src/commands/sharing.d.ts +0 -0
  69. package/dist/src/commands/sharing.d.ts.map +0 -0
  70. package/dist/src/commands/sharing.js +0 -0
  71. package/dist/src/commands/sharing.js.map +0 -0
  72. package/dist/src/commands/status.d.ts +0 -0
  73. package/dist/src/commands/status.d.ts.map +0 -0
  74. package/dist/src/commands/status.js +0 -0
  75. package/dist/src/commands/status.js.map +0 -0
  76. package/dist/src/commands/telemetry.d.ts +0 -0
  77. package/dist/src/commands/telemetry.d.ts.map +0 -0
  78. package/dist/src/commands/telemetry.js +0 -0
  79. package/dist/src/commands/telemetry.js.map +0 -0
  80. package/dist/src/commands/token.d.ts +0 -0
  81. package/dist/src/commands/token.d.ts.map +0 -0
  82. package/dist/src/commands/token.js +0 -0
  83. package/dist/src/commands/token.js.map +0 -0
  84. package/dist/src/commands/transfers.d.ts +0 -0
  85. package/dist/src/commands/transfers.d.ts.map +0 -0
  86. package/dist/src/commands/transfers.js +0 -0
  87. package/dist/src/commands/transfers.js.map +0 -0
  88. package/dist/src/context.d.ts +0 -0
  89. package/dist/src/context.d.ts.map +0 -0
  90. package/dist/src/context.js +0 -0
  91. package/dist/src/context.js.map +0 -0
  92. package/dist/src/env-set-input.d.ts +0 -0
  93. package/dist/src/env-set-input.d.ts.map +0 -0
  94. package/dist/src/env-set-input.js +0 -0
  95. package/dist/src/env-set-input.js.map +0 -0
  96. package/dist/src/index.d.ts +0 -0
  97. package/dist/src/index.d.ts.map +0 -0
  98. package/dist/src/index.js +0 -0
  99. package/dist/src/index.js.map +0 -0
  100. package/dist/src/open.d.ts +0 -0
  101. package/dist/src/open.d.ts.map +0 -0
  102. package/dist/src/open.js +0 -0
  103. package/dist/src/open.js.map +0 -0
  104. package/dist/src/output.d.ts +0 -0
  105. package/dist/src/output.d.ts.map +0 -0
  106. package/dist/src/output.js +0 -0
  107. package/dist/src/output.js.map +0 -0
  108. package/dist/src/prompt-hidden.d.ts +0 -0
  109. package/dist/src/prompt-hidden.d.ts.map +0 -0
  110. package/dist/src/prompt-hidden.js +0 -0
  111. package/dist/src/prompt-hidden.js.map +0 -0
  112. package/dist/src/prompt.d.ts +0 -0
  113. package/dist/src/prompt.d.ts.map +0 -0
  114. package/dist/src/prompt.js +0 -0
  115. package/dist/src/prompt.js.map +0 -0
  116. package/dist/src/security-output.d.ts +0 -0
  117. package/dist/src/security-output.d.ts.map +0 -0
  118. package/dist/src/security-output.js +0 -0
  119. package/dist/src/security-output.js.map +0 -0
  120. package/dist/src/telemetry.d.ts +0 -0
  121. package/dist/src/telemetry.d.ts.map +0 -0
  122. package/dist/src/telemetry.js +0 -0
  123. package/dist/src/telemetry.js.map +0 -0
  124. package/dist/src/version-check.d.ts +0 -0
  125. package/dist/src/version-check.d.ts.map +0 -0
  126. package/dist/src/version-check.js +0 -0
  127. package/dist/src/version-check.js.map +0 -0
  128. package/dist/templates/LICENSE +0 -0
  129. package/dist/templates/astro/Caddyfile +5 -1
  130. package/dist/templates/astro/Dockerfile +14 -15
  131. package/dist/templates/astro/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  132. package/dist/templates/astro/astro.config.mjs +0 -0
  133. package/dist/templates/astro/package.json +0 -0
  134. package/dist/templates/astro/percher.toml +0 -0
  135. package/dist/templates/astro/src/pages/index.astro +0 -0
  136. package/dist/templates/bun/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  137. package/dist/templates/bun/index.ts +0 -0
  138. package/dist/templates/bun/package.json +0 -0
  139. package/dist/templates/bun/percher.toml +0 -0
  140. package/dist/templates/capsule/Caddyfile +0 -0
  141. package/dist/templates/capsule/Dockerfile +9 -14
  142. package/dist/templates/capsule/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  143. package/dist/templates/capsule/index.html +0 -0
  144. package/dist/templates/capsule/package.json +0 -0
  145. package/dist/templates/capsule/pb/schema.json +0 -0
  146. package/dist/templates/capsule/percher.toml +0 -0
  147. package/dist/templates/capsule/src/App.tsx +0 -0
  148. package/dist/templates/capsule/src/components/Auth.tsx +0 -0
  149. package/dist/templates/capsule/src/components/SignInWithGoogle.tsx +0 -0
  150. package/dist/templates/capsule/src/lib/ai-client.ts +0 -0
  151. package/dist/templates/capsule/src/lib/ai.ts +0 -0
  152. package/dist/templates/capsule/src/lib/db.ts +0 -0
  153. package/dist/templates/capsule/src/lib/realtime.ts +0 -0
  154. package/dist/templates/capsule/src/main.tsx +0 -0
  155. package/dist/templates/capsule/tsconfig.json +0 -0
  156. package/dist/templates/capsule/vite.config.ts +0 -0
  157. package/dist/templates/django/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  158. package/dist/templates/django/Procfile +0 -0
  159. package/dist/templates/django/app/__init__.py +0 -0
  160. package/dist/templates/django/app/settings.py +0 -0
  161. package/dist/templates/django/app/urls.py +0 -0
  162. package/dist/templates/django/app/wsgi.py +0 -0
  163. package/dist/templates/django/manage.py +0 -0
  164. package/dist/templates/django/percher.toml +0 -0
  165. package/dist/templates/django/requirements.txt +0 -0
  166. package/dist/templates/dotnet/Dockerfile +0 -0
  167. package/dist/templates/dotnet/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  168. package/dist/templates/dotnet/Program.cs +0 -0
  169. package/dist/templates/dotnet/app.csproj +0 -0
  170. package/dist/templates/dotnet/percher.toml +0 -0
  171. package/dist/templates/eleventy/.eleventy.js +0 -0
  172. package/dist/templates/eleventy/Caddyfile +5 -1
  173. package/dist/templates/eleventy/Dockerfile +14 -15
  174. package/dist/templates/eleventy/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  175. package/dist/templates/eleventy/package.json +0 -0
  176. package/dist/templates/eleventy/percher.toml +0 -0
  177. package/dist/templates/eleventy/src/_includes/base.njk +0 -0
  178. package/dist/templates/eleventy/src/assets/style.css +0 -0
  179. package/dist/templates/eleventy/src/index.md +0 -0
  180. package/dist/templates/elysia/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  181. package/dist/templates/elysia/index.ts +0 -0
  182. package/dist/templates/elysia/package.json +0 -0
  183. package/dist/templates/elysia/percher.toml +0 -0
  184. package/dist/templates/express/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  185. package/dist/templates/express/index.ts +0 -0
  186. package/dist/templates/express/package.json +0 -0
  187. package/dist/templates/express/percher.toml +0 -0
  188. package/dist/templates/fastify/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  189. package/dist/templates/fastify/index.ts +0 -0
  190. package/dist/templates/fastify/package.json +0 -0
  191. package/dist/templates/fastify/percher.toml +0 -0
  192. package/dist/templates/flask/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  193. package/dist/templates/flask/main.py +0 -0
  194. package/dist/templates/flask/percher.toml +0 -0
  195. package/dist/templates/flask/requirements.txt +0 -0
  196. package/dist/templates/go/Dockerfile +0 -0
  197. package/dist/templates/go/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  198. package/dist/templates/go/go.mod +0 -0
  199. package/dist/templates/go/main.go +0 -0
  200. package/dist/templates/go/percher.toml +0 -0
  201. package/dist/templates/hono/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  202. package/dist/templates/hono/index.ts +0 -0
  203. package/dist/templates/hono/package.json +0 -0
  204. package/dist/templates/hono/percher.toml +0 -0
  205. package/dist/templates/htmx/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  206. package/dist/templates/htmx/index.ts +0 -0
  207. package/dist/templates/htmx/package.json +0 -0
  208. package/dist/templates/htmx/percher.toml +0 -0
  209. package/dist/templates/hugo/Caddyfile +0 -0
  210. package/dist/templates/hugo/Dockerfile +9 -14
  211. package/dist/templates/hugo/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  212. package/dist/templates/hugo/content/_index.md +0 -0
  213. package/dist/templates/hugo/hugo.toml +0 -0
  214. package/dist/templates/hugo/layouts/index.html +0 -0
  215. package/dist/templates/hugo/percher.toml +0 -0
  216. package/dist/templates/java/Dockerfile +0 -0
  217. package/dist/templates/java/Main.java +0 -0
  218. package/dist/templates/java/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  219. package/dist/templates/java/percher.toml +0 -0
  220. package/dist/templates/laravel/Dockerfile +0 -0
  221. package/dist/templates/laravel/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  222. package/dist/templates/laravel/composer.json +0 -0
  223. package/dist/templates/laravel/percher.toml +0 -0
  224. package/dist/templates/laravel/public/index.php +0 -0
  225. package/dist/templates/nextjs/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  226. package/dist/templates/nextjs/app/api/health/route.ts +0 -0
  227. package/dist/templates/nextjs/app/layout.tsx +0 -0
  228. package/dist/templates/nextjs/app/page.tsx +0 -0
  229. package/dist/templates/nextjs/next.config.mjs +0 -0
  230. package/dist/templates/nextjs/package.json +0 -0
  231. package/dist/templates/nextjs/percher.toml +0 -0
  232. package/dist/templates/node/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  233. package/dist/templates/node/index.js +0 -0
  234. package/dist/templates/node/package.json +0 -0
  235. package/dist/templates/node/percher.toml +0 -0
  236. package/dist/templates/nuxt/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  237. package/dist/templates/nuxt/app.vue +0 -0
  238. package/dist/templates/nuxt/nuxt.config.ts +0 -0
  239. package/dist/templates/nuxt/package.json +0 -0
  240. package/dist/templates/nuxt/percher.toml +0 -0
  241. package/dist/templates/nuxt/server/api/health.ts +0 -0
  242. package/dist/templates/phoenix/Dockerfile +0 -0
  243. package/dist/templates/phoenix/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  244. package/dist/templates/phoenix/lib/application.ex +0 -0
  245. package/dist/templates/phoenix/lib/router.ex +0 -0
  246. package/dist/templates/phoenix/mix.exs +0 -0
  247. package/dist/templates/phoenix/percher.toml +0 -0
  248. package/dist/templates/preact/Caddyfile +6 -2
  249. package/dist/templates/preact/Dockerfile +14 -15
  250. package/dist/templates/preact/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  251. package/dist/templates/preact/index.html +0 -0
  252. package/dist/templates/preact/package.json +0 -0
  253. package/dist/templates/preact/percher.toml +0 -0
  254. package/dist/templates/preact/src/main.tsx +0 -0
  255. package/dist/templates/preact/vite.config.ts +0 -0
  256. package/dist/templates/python/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  257. package/dist/templates/python/main.py +0 -0
  258. package/dist/templates/python/nixpacks.toml +0 -0
  259. package/dist/templates/python/percher.toml +0 -0
  260. package/dist/templates/python/requirements.txt +0 -0
  261. package/dist/templates/rails/Dockerfile +0 -0
  262. package/dist/templates/rails/Gemfile +0 -0
  263. package/dist/templates/rails/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  264. package/dist/templates/rails/config.ru +0 -0
  265. package/dist/templates/rails/percher.toml +0 -0
  266. package/dist/templates/remix/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  267. package/dist/templates/remix/app/root.tsx +0 -0
  268. package/dist/templates/remix/app/routes/_index.tsx +0 -0
  269. package/dist/templates/remix/app/routes/health.tsx +0 -0
  270. package/dist/templates/remix/package.json +0 -0
  271. package/dist/templates/remix/percher.toml +0 -0
  272. package/dist/templates/remix/vite.config.ts +0 -0
  273. package/dist/templates/rust/Cargo.toml +0 -0
  274. package/dist/templates/rust/Dockerfile +0 -0
  275. package/dist/templates/rust/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  276. package/dist/templates/rust/percher.toml +0 -0
  277. package/dist/templates/rust/src/main.rs +0 -0
  278. package/dist/templates/solid/Caddyfile +6 -2
  279. package/dist/templates/solid/Dockerfile +14 -15
  280. package/dist/templates/solid/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  281. package/dist/templates/solid/index.html +0 -0
  282. package/dist/templates/solid/package.json +0 -0
  283. package/dist/templates/solid/percher.toml +0 -0
  284. package/dist/templates/solid/src/main.tsx +0 -0
  285. package/dist/templates/solid/vite.config.ts +0 -0
  286. package/dist/templates/static/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  287. package/dist/templates/static/index.html +0 -0
  288. package/dist/templates/static/percher.toml +0 -0
  289. package/dist/templates/static/style.css +0 -0
  290. package/dist/templates/sveltekit/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  291. package/dist/templates/sveltekit/package.json +0 -0
  292. package/dist/templates/sveltekit/percher.toml +0 -0
  293. package/dist/templates/sveltekit/src/app.html +0 -0
  294. package/dist/templates/sveltekit/src/routes/+page.svelte +0 -0
  295. package/dist/templates/sveltekit/src/routes/health/+server.ts +0 -0
  296. package/dist/templates/sveltekit/svelte.config.js +0 -0
  297. package/dist/templates/sveltekit/vite.config.js +0 -0
  298. package/dist/templates/vite-react/Caddyfile +6 -2
  299. package/dist/templates/vite-react/Dockerfile +14 -15
  300. package/dist/templates/vite-react/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  301. package/dist/templates/vite-react/index.html +0 -0
  302. package/dist/templates/vite-react/package.json +0 -0
  303. package/dist/templates/vite-react/percher.toml +0 -0
  304. package/dist/templates/vite-react/src/main.tsx +0 -0
  305. package/dist/templates/vite-react/vite.config.ts +0 -0
  306. package/dist/templates/vite-vue/Caddyfile +6 -2
  307. package/dist/templates/vite-vue/Dockerfile +14 -15
  308. package/dist/templates/vite-vue/PERCHER-TEMPLATE-LICENSE.txt +0 -0
  309. package/dist/templates/vite-vue/index.html +0 -0
  310. package/dist/templates/vite-vue/package.json +0 -0
  311. package/dist/templates/vite-vue/percher.toml +0 -0
  312. package/dist/templates/vite-vue/src/main.ts +0 -0
  313. package/dist/templates/vite-vue/vite.config.ts +0 -0
  314. package/package.json +5 -5
@@ -55,7 +55,7 @@ var __exportCjs = (target, getters, setters) => {
55
55
  };
56
56
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
57
57
 
58
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/parser.js
58
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/parser.js
59
59
  var require_parser = __commonJS(function(exports2, module2) {
60
60
  var ParserEND = 1114112;
61
61
 
@@ -185,7 +185,7 @@ var require_parser = __commonJS(function(exports2, module2) {
185
185
  module2.exports = Parser;
186
186
  });
187
187
 
188
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-datetime.js
188
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-datetime.js
189
189
  var require_create_datetime = __commonJS(function(exports2, module2) {
190
190
  module2.exports = (value) => {
191
191
  const date = new Date(value);
@@ -197,7 +197,7 @@ var require_create_datetime = __commonJS(function(exports2, module2) {
197
197
  };
198
198
  });
199
199
 
200
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/format-num.js
200
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/format-num.js
201
201
  var require_format_num = __commonJS(function(exports2, module2) {
202
202
  module2.exports = (d, num) => {
203
203
  num = String(num);
@@ -207,7 +207,7 @@ var require_format_num = __commonJS(function(exports2, module2) {
207
207
  };
208
208
  });
209
209
 
210
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-datetime-float.js
210
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-datetime-float.js
211
211
  var require_create_datetime_float = __commonJS(function(exports2, module2) {
212
212
  var f = require_format_num();
213
213
 
@@ -232,7 +232,7 @@ var require_create_datetime_float = __commonJS(function(exports2, module2) {
232
232
  };
233
233
  });
234
234
 
235
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-date.js
235
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-date.js
236
236
  var require_create_date = __commonJS(function(exports2, module2) {
237
237
  var f = require_format_num();
238
238
  var DateTime = global.Date;
@@ -256,7 +256,7 @@ var require_create_date = __commonJS(function(exports2, module2) {
256
256
  };
257
257
  });
258
258
 
259
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-time.js
259
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/create-time.js
260
260
  var require_create_time = __commonJS(function(exports2, module2) {
261
261
  var f = require_format_num();
262
262
 
@@ -279,7 +279,7 @@ var require_create_time = __commonJS(function(exports2, module2) {
279
279
  };
280
280
  });
281
281
 
282
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/toml-parser.js
282
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/lib/toml-parser.js
283
283
  var require_toml_parser = __commonJS(function(exports, module) {
284
284
  module.exports = makeParserClass(require_parser());
285
285
  module.exports.makeParserClass = makeParserClass;
@@ -1587,7 +1587,7 @@ var require_toml_parser = __commonJS(function(exports, module) {
1587
1587
  }
1588
1588
  });
1589
1589
 
1590
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-pretty-error.js
1590
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-pretty-error.js
1591
1591
  var require_parse_pretty_error = __commonJS(function(exports2, module2) {
1592
1592
  module2.exports = prettyError;
1593
1593
  function prettyError(err, buf) {
@@ -1627,7 +1627,7 @@ var require_parse_pretty_error = __commonJS(function(exports2, module2) {
1627
1627
  }
1628
1628
  });
1629
1629
 
1630
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-string.js
1630
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-string.js
1631
1631
  var require_parse_string = __commonJS(function(exports2, module2) {
1632
1632
  module2.exports = parseString;
1633
1633
  var TOMLParser = require_toml_parser();
@@ -1646,7 +1646,7 @@ var require_parse_string = __commonJS(function(exports2, module2) {
1646
1646
  }
1647
1647
  });
1648
1648
 
1649
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-async.js
1649
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-async.js
1650
1650
  var require_parse_async = __commonJS(function(exports2, module2) {
1651
1651
  module2.exports = parseAsync;
1652
1652
  var TOMLParser = require_toml_parser();
@@ -1678,7 +1678,7 @@ var require_parse_async = __commonJS(function(exports2, module2) {
1678
1678
  }
1679
1679
  });
1680
1680
 
1681
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-stream.js
1681
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse-stream.js
1682
1682
  var require_parse_stream = __commonJS(function(exports2, module2) {
1683
1683
  module2.exports = parseStream;
1684
1684
  var stream = __require("stream");
@@ -1757,7 +1757,7 @@ var require_parse_stream = __commonJS(function(exports2, module2) {
1757
1757
  }
1758
1758
  });
1759
1759
 
1760
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse.js
1760
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/parse.js
1761
1761
  var require_parse = __commonJS(function(exports2, module2) {
1762
1762
  module2.exports = require_parse_string();
1763
1763
  module2.exports.async = require_parse_async();
@@ -1765,7 +1765,7 @@ var require_parse = __commonJS(function(exports2, module2) {
1765
1765
  module2.exports.prettyError = require_parse_pretty_error();
1766
1766
  });
1767
1767
 
1768
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/stringify.js
1768
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/stringify.js
1769
1769
  var require_stringify = __commonJS(function(exports2, module2) {
1770
1770
  module2.exports = stringify;
1771
1771
  module2.exports.value = stringifyInline;
@@ -2044,7 +2044,7 @@ var require_stringify = __commonJS(function(exports2, module2) {
2044
2044
  }
2045
2045
  });
2046
2046
 
2047
- // ../../node_modules/.bun/fast-fifo@1.3.2/node_modules/fast-fifo/fixed-size.js
2047
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/fast-fifo@1.3.2/node_modules/fast-fifo/fixed-size.js
2048
2048
  var require_fixed_size = __commonJS(function(exports2, module2) {
2049
2049
  module2.exports = class FixedFIFO {
2050
2050
  constructor(hwm) {
@@ -2085,7 +2085,7 @@ var require_fixed_size = __commonJS(function(exports2, module2) {
2085
2085
  };
2086
2086
  });
2087
2087
 
2088
- // ../../node_modules/.bun/fast-fifo@1.3.2/node_modules/fast-fifo/index.js
2088
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/fast-fifo@1.3.2/node_modules/fast-fifo/index.js
2089
2089
  var require_fast_fifo = __commonJS(function(exports2, module2) {
2090
2090
  var FixedFIFO = require_fixed_size();
2091
2091
  module2.exports = class FastFIFO {
@@ -2132,7 +2132,7 @@ var require_fast_fifo = __commonJS(function(exports2, module2) {
2132
2132
  };
2133
2133
  });
2134
2134
 
2135
- // ../../node_modules/.bun/b4a@1.8.0/node_modules/b4a/index.js
2135
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/b4a@1.8.0/node_modules/b4a/index.js
2136
2136
  var require_b4a = __commonJS(function(exports2, module2) {
2137
2137
  function isBuffer(value) {
2138
2138
  return Buffer.isBuffer(value) || value instanceof Uint8Array;
@@ -2288,7 +2288,7 @@ var require_b4a = __commonJS(function(exports2, module2) {
2288
2288
  };
2289
2289
  });
2290
2290
 
2291
- // ../../node_modules/.bun/text-decoder@1.2.7/node_modules/text-decoder/lib/pass-through-decoder.js
2291
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/text-decoder@1.2.7/node_modules/text-decoder/lib/pass-through-decoder.js
2292
2292
  var require_pass_through_decoder = __commonJS(function(exports2, module2) {
2293
2293
  var b4a = require_b4a();
2294
2294
  module2.exports = class PassThroughDecoder {
@@ -2307,7 +2307,7 @@ var require_pass_through_decoder = __commonJS(function(exports2, module2) {
2307
2307
  };
2308
2308
  });
2309
2309
 
2310
- // ../../node_modules/.bun/text-decoder@1.2.7/node_modules/text-decoder/lib/utf8-decoder.js
2310
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/text-decoder@1.2.7/node_modules/text-decoder/lib/utf8-decoder.js
2311
2311
  var require_utf8_decoder = __commonJS(function(exports2, module2) {
2312
2312
  var b4a = require_b4a();
2313
2313
  module2.exports = class UTF8Decoder {
@@ -2481,7 +2481,7 @@ var require_utf8_decoder = __commonJS(function(exports2, module2) {
2481
2481
  }
2482
2482
  });
2483
2483
 
2484
- // ../../node_modules/.bun/text-decoder@1.2.7/node_modules/text-decoder/index.js
2484
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/text-decoder@1.2.7/node_modules/text-decoder/index.js
2485
2485
  var require_text_decoder = __commonJS(function(exports2, module2) {
2486
2486
  var PassThroughDecoder = require_pass_through_decoder();
2487
2487
  var UTF8Decoder = require_utf8_decoder();
@@ -2542,7 +2542,7 @@ var require_text_decoder = __commonJS(function(exports2, module2) {
2542
2542
  }
2543
2543
  });
2544
2544
 
2545
- // ../../node_modules/.bun/streamx@2.25.0/node_modules/streamx/index.js
2545
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/streamx@2.25.0/node_modules/streamx/index.js
2546
2546
  var require_streamx = __commonJS(function(exports2, module2) {
2547
2547
  var { EventEmitter } = __require("events");
2548
2548
  var STREAM_DESTROYED = new Error("Stream was destroyed");
@@ -3617,7 +3617,7 @@ var require_streamx = __commonJS(function(exports2, module2) {
3617
3617
  };
3618
3618
  });
3619
3619
 
3620
- // ../../node_modules/.bun/b4a@1.8.1/node_modules/b4a/index.js
3620
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/b4a@1.8.1/node_modules/b4a/index.js
3621
3621
  var require_b4a2 = __commonJS(function(exports2, module2) {
3622
3622
  function isBuffer(value) {
3623
3623
  return Buffer.isBuffer(value) || value instanceof Uint8Array;
@@ -3773,7 +3773,7 @@ var require_b4a2 = __commonJS(function(exports2, module2) {
3773
3773
  };
3774
3774
  });
3775
3775
 
3776
- // ../../node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/headers.js
3776
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/headers.js
3777
3777
  var require_headers = __commonJS(function(exports2) {
3778
3778
  var b4a = require_b4a2();
3779
3779
  var ZEROS = "0000000000000000000";
@@ -4069,7 +4069,7 @@ var require_headers = __commonJS(function(exports2) {
4069
4069
  }
4070
4070
  });
4071
4071
 
4072
- // ../../node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/extract.js
4072
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/extract.js
4073
4073
  var require_extract = __commonJS(function(exports2, module2) {
4074
4074
  var { Writable, Readable, getStreamError } = require_streamx();
4075
4075
  var FIFO = require_fast_fifo();
@@ -4437,7 +4437,7 @@ var require_extract = __commonJS(function(exports2, module2) {
4437
4437
  }
4438
4438
  });
4439
4439
 
4440
- // ../../node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/constants.js
4440
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/constants.js
4441
4441
  var require_constants = __commonJS(function(exports2, module2) {
4442
4442
  var constants = {
4443
4443
  S_IFMT: 61440,
@@ -4454,7 +4454,7 @@ var require_constants = __commonJS(function(exports2, module2) {
4454
4454
  }
4455
4455
  });
4456
4456
 
4457
- // ../../node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/pack.js
4457
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/pack.js
4458
4458
  var require_pack = __commonJS(function(exports2, module2) {
4459
4459
  var { Readable, Writable, getStreamError } = require_streamx();
4460
4460
  var b4a = require_b4a2();
@@ -4854,7 +4854,7 @@ var package_default;
4854
4854
  var init_package = __esm(() => {
4855
4855
  package_default = {
4856
4856
  name: "@percher/client",
4857
- version: "1.4.0",
4857
+ version: "1.4.1",
4858
4858
  description: "Official TypeScript SDK for Percher: deploy apps, manage env vars, stream logs, and automate hosting workflows.",
4859
4859
  keywords: [
4860
4860
  "percher",
@@ -4895,8 +4895,8 @@ var init_package = __esm(() => {
4895
4895
  typecheck: "tsc --noEmit"
4896
4896
  },
4897
4897
  dependencies: {
4898
- "@percher/shared": "^1.3.0",
4899
- "@percher/toml": "^1.0.5"
4898
+ "@percher/shared": "^1.3.1",
4899
+ "@percher/toml": "^1.0.6"
4900
4900
  },
4901
4901
  devDependencies: {
4902
4902
  "bun-types": "^1.1.0",
@@ -5013,8 +5013,8 @@ class Http {
5013
5013
  get(path, opts) {
5014
5014
  return this.request("GET", path, undefined, opts?.signal);
5015
5015
  }
5016
- post(path, body) {
5017
- return this.request("POST", path, body);
5016
+ post(path, body, opts) {
5017
+ return this.request("POST", path, body, opts?.signal);
5018
5018
  }
5019
5019
  put(path, body) {
5020
5020
  return this.request("PUT", path, body);
@@ -5043,6 +5043,154 @@ class Http {
5043
5043
  throw await this.parseError(res);
5044
5044
  return res;
5045
5045
  }
5046
+ async exportCapability(method, path, capability, signal) {
5047
+ if (!/^pce_[A-Za-z0-9_-]{43}$/.test(capability) || !(method === "GET" && path === "/export/v2/status" || method === "POST" && (path === "/export/v2/prepare" || path === "/export/v2/grants"))) {
5048
+ throw new PercherApiError("Invalid export request.", {
5049
+ status: 400,
5050
+ code: "EXPORT_INVALID_REQUEST"
5051
+ });
5052
+ }
5053
+ const headers = this.buildHeaders();
5054
+ headers.Authorization = `Bearer ${capability}`;
5055
+ const operationSignal = signal ? AbortSignal.any([signal, AbortSignal.timeout(30000)]) : AbortSignal.timeout(30000);
5056
+ let res;
5057
+ try {
5058
+ operationSignal.throwIfAborted();
5059
+ res = await this.fetchImpl(`${this.apiUrl}${path}`, {
5060
+ method,
5061
+ headers,
5062
+ signal: operationSignal,
5063
+ redirect: "error"
5064
+ });
5065
+ } catch {
5066
+ signal?.throwIfAborted();
5067
+ throw new NetworkError("Export preparation request failed.");
5068
+ }
5069
+ if (!res.ok) {
5070
+ throw await this.exportError(res, operationSignal, signal, "Export request refused. Check its status before retrying.");
5071
+ }
5072
+ const validStatus = path.endsWith("/grants") ? res.status === 201 : path.endsWith("/prepare") ? res.status === 200 || res.status === 202 : res.status === 200;
5073
+ if (!validStatus || res.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase() !== "application/json" || !res.body) {
5074
+ res.body?.cancel().catch(() => {});
5075
+ throw new PercherApiError("Invalid export response.", {
5076
+ status: 502,
5077
+ code: "EXPORT_INVALID_RESPONSE"
5078
+ });
5079
+ }
5080
+ const reader = res.body.getReader();
5081
+ const abortRead = () => {
5082
+ reader.cancel().catch(() => {});
5083
+ };
5084
+ operationSignal.addEventListener("abort", abortRead, { once: true });
5085
+ if (operationSignal.aborted)
5086
+ abortRead();
5087
+ const chunks = [];
5088
+ let length = 0;
5089
+ try {
5090
+ for (;; ) {
5091
+ operationSignal.throwIfAborted();
5092
+ const part = await reader.read();
5093
+ if (part.done)
5094
+ break;
5095
+ length += part.value.byteLength;
5096
+ if (length > 8192)
5097
+ throw new Error;
5098
+ chunks.push(part.value);
5099
+ }
5100
+ operationSignal.throwIfAborted();
5101
+ const bytes = new Uint8Array(length);
5102
+ let offset = 0;
5103
+ for (const chunk of chunks) {
5104
+ bytes.set(chunk, offset);
5105
+ offset += chunk.byteLength;
5106
+ }
5107
+ return JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
5108
+ } catch {
5109
+ reader.cancel().catch(() => {});
5110
+ signal?.throwIfAborted();
5111
+ throw new PercherApiError("Invalid export response.", {
5112
+ status: 502,
5113
+ code: "EXPORT_INVALID_RESPONSE"
5114
+ });
5115
+ } finally {
5116
+ operationSignal.removeEventListener("abort", abortRead);
5117
+ reader.releaseLock();
5118
+ }
5119
+ }
5120
+ async exportDownload(path, signal) {
5121
+ if (!/^\/export\/download\/pcd_[A-Za-z0-9_-]{43}$/.test(path)) {
5122
+ throw new PercherApiError("Invalid export download.", {
5123
+ status: 400,
5124
+ code: "EXPORT_INVALID_REQUEST"
5125
+ });
5126
+ }
5127
+ let res;
5128
+ try {
5129
+ signal?.throwIfAborted();
5130
+ res = await this.fetchImpl(`${this.apiUrl}${path}`, {
5131
+ headers: { ...this.buildHeaders(), Accept: "application/gzip" },
5132
+ signal,
5133
+ redirect: "error"
5134
+ });
5135
+ } catch {
5136
+ signal?.throwIfAborted();
5137
+ throw new NetworkError("Export download failed.");
5138
+ }
5139
+ if (!res.ok) {
5140
+ const operationSignal = signal ? AbortSignal.any([signal, AbortSignal.timeout(30000)]) : AbortSignal.timeout(30000);
5141
+ throw await this.exportError(res, operationSignal, signal, "Export download refused. Request a new download grant if it was spent.");
5142
+ }
5143
+ return res;
5144
+ }
5145
+ async exportError(res, operationSignal, callerSignal, message) {
5146
+ const invalid = () => new PercherApiError("Invalid export response.", {
5147
+ status: 502,
5148
+ code: "EXPORT_INVALID_RESPONSE"
5149
+ });
5150
+ if (!res.body)
5151
+ return invalid();
5152
+ const reader = res.body.getReader();
5153
+ const cancel = () => {
5154
+ reader.cancel().catch(() => {});
5155
+ };
5156
+ operationSignal.addEventListener("abort", cancel, { once: true });
5157
+ if (operationSignal.aborted)
5158
+ cancel();
5159
+ try {
5160
+ const chunks = [];
5161
+ let length = 0;
5162
+ for (;; ) {
5163
+ operationSignal.throwIfAborted();
5164
+ const part = await reader.read();
5165
+ if (part.done)
5166
+ break;
5167
+ length += part.value.byteLength;
5168
+ if (length > 8192)
5169
+ throw new Error;
5170
+ chunks.push(part.value);
5171
+ }
5172
+ operationSignal.throwIfAborted();
5173
+ const bytes = new Uint8Array(length);
5174
+ let offset = 0;
5175
+ for (const chunk of chunks) {
5176
+ bytes.set(chunk, offset);
5177
+ offset += chunk.byteLength;
5178
+ }
5179
+ const raw = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
5180
+ const error = raw && typeof raw === "object" && !Array.isArray(raw) ? raw.error : null;
5181
+ const code = error && typeof error === "object" && !Array.isArray(error) ? error.code : null;
5182
+ if (typeof code !== "string" || !EXPORT_ERROR_CODES.has(code))
5183
+ return invalid();
5184
+ return new PercherApiError(message, { status: res.status, code });
5185
+ } catch {
5186
+ cancel();
5187
+ callerSignal?.throwIfAborted();
5188
+ return invalid();
5189
+ } finally {
5190
+ operationSignal.removeEventListener("abort", cancel);
5191
+ reader.releaseLock();
5192
+ }
5193
+ }
5046
5194
  async getBinary(path) {
5047
5195
  const headers = this.buildHeaders();
5048
5196
  let res;
@@ -5166,10 +5314,32 @@ class Http {
5166
5314
  });
5167
5315
  }
5168
5316
  }
5169
- var BODY_SNIPPET_MAX = 120;
5317
+ var BODY_SNIPPET_MAX = 120, EXPORT_ERROR_CODES;
5170
5318
  var init_http = __esm(() => {
5171
5319
  init_package();
5172
5320
  init_errors();
5321
+ EXPORT_ERROR_CODES = new Set([
5322
+ "EXPORT_NOT_FOUND",
5323
+ "EXPORT_CONFLICT",
5324
+ "EXPORT_BUSY",
5325
+ "EXPORT_NOT_READY",
5326
+ "EXPORT_DISPATCH_BUSY",
5327
+ "EXPORT_DELIVERY_BUSY",
5328
+ "EXPORT_DELIVERY_NOT_FOUND",
5329
+ "EXPORT_DELIVERY_EXHAUSTED",
5330
+ "EXPORT_DELIVERY_UNAVAILABLE",
5331
+ "EXPORT_DELIVERY_ABORTED",
5332
+ "EXPORT_GRANT_SPENT",
5333
+ "EXPORT_EXPIRED",
5334
+ "EXPORT_RATE_LIMIT",
5335
+ "EXPORT_CAPACITY",
5336
+ "EXPORT_LEDGER_UNAVAILABLE",
5337
+ "EXPORT_LOCK_UNAVAILABLE",
5338
+ "EXPORT_UNAVAILABLE",
5339
+ "EXPORT_V2_UNAVAILABLE",
5340
+ "UNAUTHORIZED",
5341
+ "FORBIDDEN"
5342
+ ]);
5173
5343
  });
5174
5344
 
5175
5345
  // ../client/dist/resources/account.js
@@ -5244,6 +5414,30 @@ class AnonResource {
5244
5414
  }
5245
5415
  }
5246
5416
 
5417
+ // ../client/dist/resources/apps-publish.js
5418
+ function publishInline(http, input) {
5419
+ const params = new URLSearchParams;
5420
+ params.set("name", input.name);
5421
+ params.set("runtime", input.runtime);
5422
+ if (input.framework)
5423
+ params.set("framework", input.framework);
5424
+ if (input.check)
5425
+ params.set("check", "1");
5426
+ else if (input.type === "preview")
5427
+ params.set("type", "preview");
5428
+ if (input.note)
5429
+ params.set("note", input.note);
5430
+ if (input.noCache)
5431
+ params.set("noCache", "1");
5432
+ const headers = {};
5433
+ if (input.tarballHash)
5434
+ headers["X-Tarball-Hash"] = input.tarballHash;
5435
+ if (input.emitBytes !== undefined && Number.isFinite(input.emitBytes) && input.emitBytes >= 0) {
5436
+ headers["X-Percher-Emit-Bytes"] = String(Math.round(input.emitBytes));
5437
+ }
5438
+ return http.postBinary(`/apps/publish?${params.toString()}`, input.tarball, headers);
5439
+ }
5440
+
5247
5441
  // ../client/dist/resources/apps-types.js
5248
5442
  function isDeployAlreadyInProgress(res) {
5249
5443
  return res.status === "already_in_progress";
@@ -5303,27 +5497,11 @@ class AppsResource {
5303
5497
  }
5304
5498
  return this.http.postBinary(`/apps/${encodeURIComponent(id)}/deploys${qs ? `?${qs}` : ""}`, input.tarball, headers);
5305
5499
  }
5500
+ publishPatch(appRef, input) {
5501
+ return this.http.post(`/apps/${encodeURIComponent(appRef)}/publish/patch`, input);
5502
+ }
5306
5503
  publishInline(input) {
5307
- const params = new URLSearchParams;
5308
- params.set("name", input.name);
5309
- params.set("runtime", input.runtime);
5310
- if (input.framework)
5311
- params.set("framework", input.framework);
5312
- if (input.check)
5313
- params.set("check", "1");
5314
- else if (input.type === "preview")
5315
- params.set("type", "preview");
5316
- if (input.note)
5317
- params.set("note", input.note);
5318
- if (input.noCache)
5319
- params.set("noCache", "1");
5320
- const headers = {};
5321
- if (input.tarballHash)
5322
- headers["X-Tarball-Hash"] = input.tarballHash;
5323
- if (input.emitBytes !== undefined && Number.isFinite(input.emitBytes) && input.emitBytes >= 0) {
5324
- headers["X-Percher-Emit-Bytes"] = String(Math.round(input.emitBytes));
5325
- }
5326
- return this.http.postBinary(`/apps/publish?${params.toString()}`, input.tarball, headers);
5504
+ return publishInline(this.http, input);
5327
5505
  }
5328
5506
  promotePreview(appRef, deployId) {
5329
5507
  return this.http.post(`/apps/${encodeURIComponent(appRef)}/deploys/${encodeURIComponent(deployId)}/promote`, {});
@@ -5825,11 +6003,91 @@ class EnvScanResource {
5825
6003
  }
5826
6004
 
5827
6005
  // ../client/dist/resources/export.js
6006
+ function invalid() {
6007
+ throw new PercherApiError("Server did not provide a valid export v2 response. No legacy export was downloaded.", { status: 502, code: "EXPORT_INVALID_RESPONSE" });
6008
+ }
6009
+ function record2(value, keys) {
6010
+ if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).sort().join("|") !== keys.sort().join("|"))
6011
+ return invalid();
6012
+ return value;
6013
+ }
6014
+ function instant(value) {
6015
+ return typeof value === "string" && value.length === 24 && Number.isFinite(Date.parse(value)) && new Date(value).toISOString() === value;
6016
+ }
6017
+ function identifier(value) {
6018
+ return typeof value === "string" && /^[A-Za-z0-9_-]{1,128}$/.test(value);
6019
+ }
6020
+ function status(value) {
6021
+ const v = record2(value, ["operationId", "state", "revision", "deadline", "cleanupReason"]);
6022
+ if (!identifier(v.operationId) || typeof v.state !== "string" || !["NOT_REQUESTED", "REQUESTED", "PREPARING", "READY", "CLEANUP_REQUIRED"].includes(v.state) || typeof v.revision !== "number" || !Number.isSafeInteger(v.revision) || v.revision < 0 || typeof v.deadline !== "number" || !Number.isSafeInteger(v.deadline) || v.deadline <= 0 || (v.state === "CLEANUP_REQUIRED" ? typeof v.cleanupReason !== "string" || !["INTERRUPTED", "AUTHORITY_LOST", "EXPIRED", "PROCESSOR_FAILED"].includes(v.cleanupReason) : v.cleanupReason !== null))
6023
+ return invalid();
6024
+ return Object.freeze({ ...v });
6025
+ }
6026
+
5828
6027
  class ExportResource {
5829
6028
  http;
5830
6029
  constructor(http) {
5831
6030
  this.http = http;
5832
6031
  }
6032
+ async mintV2(appRef, options) {
6033
+ const value = await this.http.post(`/apps/${encodeURIComponent(appRef)}/export/mint`, { protocolVersion: 2, deliveryKind: options?.deliveryKind ?? "cli" }, { signal: options?.signal });
6034
+ const v = record2(value, [
6035
+ "protocolVersion",
6036
+ "operationId",
6037
+ "tokenId",
6038
+ "preparationToken",
6039
+ "expiresAt",
6040
+ "ttlSeconds",
6041
+ "includeSecrets"
6042
+ ]);
6043
+ if (v.protocolVersion !== 2 || !identifier(v.operationId) || !identifier(v.tokenId) || typeof v.preparationToken !== "string" || !/^pce_[A-Za-z0-9_-]{43}$/.test(v.preparationToken) || !instant(v.expiresAt) || Date.parse(v.expiresAt) > Date.now() + 900000 || v.ttlSeconds !== 900 || v.includeSecrets !== false)
6044
+ return invalid();
6045
+ if (Date.parse(v.expiresAt) <= Date.now())
6046
+ throw new PercherApiError("Export preparation expired. Start a new export.", {
6047
+ status: 410,
6048
+ code: "EXPORT_EXPIRED"
6049
+ });
6050
+ return Object.freeze({ ...v });
6051
+ }
6052
+ async prepareV2(capability, signal) {
6053
+ return status(await this.http.exportCapability("POST", "/export/v2/prepare", capability, signal));
6054
+ }
6055
+ async statusV2(capability, signal) {
6056
+ return status(await this.http.exportCapability("GET", "/export/v2/status", capability, signal));
6057
+ }
6058
+ async grantV2(capability, signal, options) {
6059
+ const v = record2(await this.http.exportCapability("POST", "/export/v2/grants", capability, signal), ["downloadUrl", "expiresAt"]);
6060
+ if (typeof v.downloadUrl !== "string" || !instant(v.expiresAt) || Date.parse(v.expiresAt) <= Date.now())
6061
+ return invalid();
6062
+ this.v2DownloadPath(v.downloadUrl, options?.publicDownloadOrigin);
6063
+ return Object.freeze({ downloadUrl: v.downloadUrl, expiresAt: v.expiresAt });
6064
+ }
6065
+ v2DownloadPath(downloadUrl, publicDownloadOrigin) {
6066
+ try {
6067
+ const base = new URL(this.http.baseUrl());
6068
+ const expected = publicDownloadOrigin === undefined ? base.origin : publicDownloadOrigin;
6069
+ const configured = new URL(expected);
6070
+ if (!["http:", "https:"].includes(configured.protocol) || configured.origin !== expected)
6071
+ return invalid();
6072
+ const url = new URL(downloadUrl, configured);
6073
+ if (url.origin !== expected || url.username || url.password || url.search || url.hash || !/^\/export\/download\/pcd_[A-Za-z0-9_-]{43}$/.test(url.pathname))
6074
+ return invalid();
6075
+ return url.pathname;
6076
+ } catch {
6077
+ return invalid();
6078
+ }
6079
+ }
6080
+ async downloadV2(downloadUrl, signal) {
6081
+ const res = await this.http.exportDownload(this.v2DownloadPath(downloadUrl), signal);
6082
+ const size = res.headers.get("x-export-bytes");
6083
+ const contentLength = res.headers.get("content-length");
6084
+ const sha256 = res.headers.get("x-export-sha256");
6085
+ if (res.status !== 200 || res.headers.get("content-type") !== "application/gzip" || !res.body || res.body.locked || !size || !/^[1-9][0-9]*$/.test(size) || !Number.isSafeInteger(Number(size)) || Number(size) > 2 ** 40 || contentLength !== null && contentLength !== size || !sha256 || !/^[a-f0-9]{64}$/.test(sha256) || ![null, "identity"].includes(res.headers.get("content-encoding"))) {
6086
+ res.body?.cancel().catch(() => {});
6087
+ return invalid();
6088
+ }
6089
+ return { response: res, bytes: Number(size), sha256 };
6090
+ }
5833
6091
  mint(appRef, options) {
5834
6092
  return this.http.post(`/apps/${encodeURIComponent(appRef)}/export/mint`, {
5835
6093
  deliveryKind: options?.deliveryKind
@@ -5852,6 +6110,9 @@ class ExportResource {
5852
6110
  return this.http.get(`/apps/${encodeURIComponent(appRef)}/export/git/check`);
5853
6111
  }
5854
6112
  }
6113
+ var init_export = __esm(() => {
6114
+ init_errors();
6115
+ });
5855
6116
 
5856
6117
  // ../client/dist/resources/hooks.js
5857
6118
  class HooksResource {
@@ -6107,6 +6368,30 @@ class InvitesResource {
6107
6368
  }
6108
6369
  }
6109
6370
 
6371
+ // ../client/dist/resources/source.js
6372
+ class SourceResource {
6373
+ http;
6374
+ constructor(http) {
6375
+ this.http = http;
6376
+ }
6377
+ base(appRef, version) {
6378
+ return `/apps/${encodeURIComponent(appRef)}/versions/${encodeURIComponent(version)}`;
6379
+ }
6380
+ listFiles(appRef, version = "live") {
6381
+ return this.http.get(`${this.base(appRef, version)}/files`);
6382
+ }
6383
+ getFile(appRef, path, version = "live") {
6384
+ const qs = new URLSearchParams({ path }).toString();
6385
+ return this.http.get(`${this.base(appRef, version)}/file?${qs}`);
6386
+ }
6387
+ getConfig(appRef, sha) {
6388
+ return this.http.get(`${this.base(appRef, sha)}/config`);
6389
+ }
6390
+ getManifest(appRef, sha) {
6391
+ return this.http.get(`${this.base(appRef, sha)}/manifest`);
6392
+ }
6393
+ }
6394
+
6110
6395
  // ../client/dist/resources/support.js
6111
6396
  class SupportResource {
6112
6397
  http;
@@ -6210,6 +6495,7 @@ class PercherClient {
6210
6495
  invites;
6211
6496
  transfers;
6212
6497
  support;
6498
+ source;
6213
6499
  constructor(options = {}) {
6214
6500
  const bothExplicit = options.apiUrl !== undefined && options.token !== undefined;
6215
6501
  const defaults = bothExplicit ? undefined : loadConfig();
@@ -6243,6 +6529,7 @@ class PercherClient {
6243
6529
  this.invites = new InvitesResource(http);
6244
6530
  this.transfers = new TransfersResource(http);
6245
6531
  this.support = new SupportResource(http);
6532
+ this.source = new SourceResource(http);
6246
6533
  }
6247
6534
  }
6248
6535
  var init_client = __esm(() => {
@@ -6251,6 +6538,7 @@ var init_client = __esm(() => {
6251
6538
  init_apps();
6252
6539
  init_auth();
6253
6540
  init_data();
6541
+ init_export();
6254
6542
  init_logs();
6255
6543
  });
6256
6544
 
@@ -6430,11 +6718,12 @@ var init_dist = __esm(() => {
6430
6718
  init_apps();
6431
6719
  init_auth();
6432
6720
  init_data();
6721
+ init_export();
6433
6722
  init_logs();
6434
6723
  init_telemetry_consent();
6435
6724
  });
6436
6725
 
6437
- // ../../node_modules/.bun/ignore@7.0.5/node_modules/ignore/index.js
6726
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ignore@7.0.5/node_modules/ignore/index.js
6438
6727
  var require_ignore = __commonJS(function(exports2, module2) {
6439
6728
  function makeArray(subject) {
6440
6729
  return Array.isArray(subject) ? subject : [subject];
@@ -6761,7 +7050,7 @@ var require_ignore = __commonJS(function(exports2, module2) {
6761
7050
  define2(module2.exports, Symbol.for("setupWindows"), setupWindows);
6762
7051
  });
6763
7052
 
6764
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/utils/intersection.js
7053
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/utils/intersection.js
6765
7054
  var require_intersection = __commonJS(function(exports2, module2) {
6766
7055
  module2.exports = function(arrays) {
6767
7056
  const result = new Set(arrays[0]);
@@ -6783,7 +7072,7 @@ var require_intersection = __commonJS(function(exports2, module2) {
6783
7072
  };
6784
7073
  });
6785
7074
 
6786
- // ../../node_modules/.bun/tslib@2.8.1/node_modules/tslib/tslib.js
7075
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/tslib@2.8.1/node_modules/tslib/tslib.js
6787
7076
  var require_tslib = __commonJS(function(exports2, module2) {
6788
7077
  var __extends;
6789
7078
  var __assign;
@@ -7388,7 +7677,7 @@ var require_tslib = __commonJS(function(exports2, module2) {
7388
7677
  });
7389
7678
  });
7390
7679
 
7391
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/shared.js
7680
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/shared.js
7392
7681
  var require_shared = __commonJS(function(exports2) {
7393
7682
  Object.defineProperty(exports2, "__esModule", { value: true });
7394
7683
  exports2.maybeSetModuleExports = undefined;
@@ -7458,7 +7747,7 @@ var require_shared = __commonJS(function(exports2) {
7458
7747
  exports2.maybeSetModuleExports = maybeSetModuleExports;
7459
7748
  });
7460
7749
 
7461
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/types.js
7750
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/types.js
7462
7751
  var require_types = __commonJS(function(exports2, module2) {
7463
7752
  Object.defineProperty(exports2, "__esModule", { value: true });
7464
7753
  exports2.Def = undefined;
@@ -8120,7 +8409,7 @@ var require_types = __commonJS(function(exports2, module2) {
8120
8409
  });
8121
8410
  });
8122
8411
 
8123
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/path.js
8412
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/path.js
8124
8413
  var require_path = __commonJS(function(exports2, module2) {
8125
8414
  Object.defineProperty(exports2, "__esModule", { value: true });
8126
8415
  var tslib_1 = require_tslib();
@@ -8421,7 +8710,7 @@ var require_path = __commonJS(function(exports2, module2) {
8421
8710
  });
8422
8711
  });
8423
8712
 
8424
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/scope.js
8713
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/scope.js
8425
8714
  var require_scope = __commonJS(function(exports2, module2) {
8426
8715
  Object.defineProperty(exports2, "__esModule", { value: true });
8427
8716
  var tslib_1 = require_tslib();
@@ -8689,7 +8978,7 @@ var require_scope = __commonJS(function(exports2, module2) {
8689
8978
  });
8690
8979
  });
8691
8980
 
8692
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/node-path.js
8981
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/node-path.js
8693
8982
  var require_node_path = __commonJS(function(exports2, module2) {
8694
8983
  Object.defineProperty(exports2, "__esModule", { value: true });
8695
8984
  var tslib_1 = require_tslib();
@@ -9044,7 +9333,7 @@ var require_node_path = __commonJS(function(exports2, module2) {
9044
9333
  });
9045
9334
  });
9046
9335
 
9047
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/path-visitor.js
9336
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/path-visitor.js
9048
9337
  var require_path_visitor = __commonJS(function(exports2, module2) {
9049
9338
  Object.defineProperty(exports2, "__esModule", { value: true });
9050
9339
  var tslib_1 = require_tslib();
@@ -9335,7 +9624,7 @@ var require_path_visitor = __commonJS(function(exports2, module2) {
9335
9624
  });
9336
9625
  });
9337
9626
 
9338
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/equiv.js
9627
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/equiv.js
9339
9628
  var require_equiv = __commonJS(function(exports2, module2) {
9340
9629
  Object.defineProperty(exports2, "__esModule", { value: true });
9341
9630
  var tslib_1 = require_tslib();
@@ -9486,7 +9775,7 @@ var require_equiv = __commonJS(function(exports2, module2) {
9486
9775
  });
9487
9776
  });
9488
9777
 
9489
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/fork.js
9778
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/fork.js
9490
9779
  var require_fork = __commonJS(function(exports2, module2) {
9491
9780
  Object.defineProperty(exports2, "__esModule", { value: true });
9492
9781
  var tslib_1 = require_tslib();
@@ -9544,7 +9833,7 @@ var require_fork = __commonJS(function(exports2, module2) {
9544
9833
  });
9545
9834
  });
9546
9835
 
9547
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/core.js
9836
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/core.js
9548
9837
  var require_core = __commonJS(function(exports2, module2) {
9549
9838
  Object.defineProperty(exports2, "__esModule", { value: true });
9550
9839
  var shared_1 = require_shared();
@@ -9599,7 +9888,7 @@ var require_core = __commonJS(function(exports2, module2) {
9599
9888
  });
9600
9889
  });
9601
9890
 
9602
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/es2016.js
9891
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/es2016.js
9603
9892
  var require_es2016 = __commonJS(function(exports2, module2) {
9604
9893
  Object.defineProperty(exports2, "__esModule", { value: true });
9605
9894
  var tslib_1 = require_tslib();
@@ -9621,7 +9910,7 @@ var require_es2016 = __commonJS(function(exports2, module2) {
9621
9910
  });
9622
9911
  });
9623
9912
 
9624
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/es2020.js
9913
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/es2020.js
9625
9914
  var require_es2020 = __commonJS(function(exports2, module2) {
9626
9915
  Object.defineProperty(exports2, "__esModule", { value: true });
9627
9916
  var tslib_1 = require_tslib();
@@ -9640,7 +9929,7 @@ var require_es2020 = __commonJS(function(exports2, module2) {
9640
9929
  });
9641
9930
  });
9642
9931
 
9643
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/es2021.js
9932
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/operators/es2021.js
9644
9933
  var require_es2021 = __commonJS(function(exports2, module2) {
9645
9934
  Object.defineProperty(exports2, "__esModule", { value: true });
9646
9935
  var tslib_1 = require_tslib();
@@ -9662,7 +9951,7 @@ var require_es2021 = __commonJS(function(exports2, module2) {
9662
9951
  });
9663
9952
  });
9664
9953
 
9665
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/core.js
9954
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/core.js
9666
9955
  var require_core2 = __commonJS(function(exports2, module2) {
9667
9956
  Object.defineProperty(exports2, "__esModule", { value: true });
9668
9957
  var tslib_1 = require_tslib();
@@ -9751,7 +10040,7 @@ var require_core2 = __commonJS(function(exports2, module2) {
9751
10040
  });
9752
10041
  });
9753
10042
 
9754
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es6.js
10043
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es6.js
9755
10044
  var require_es6 = __commonJS(function(exports2, module2) {
9756
10045
  Object.defineProperty(exports2, "__esModule", { value: true });
9757
10046
  var tslib_1 = require_tslib();
@@ -9816,7 +10105,7 @@ var require_es6 = __commonJS(function(exports2, module2) {
9816
10105
  });
9817
10106
  });
9818
10107
 
9819
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2016.js
10108
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2016.js
9820
10109
  var require_es20162 = __commonJS(function(exports2, module2) {
9821
10110
  Object.defineProperty(exports2, "__esModule", { value: true });
9822
10111
  var tslib_1 = require_tslib();
@@ -9833,7 +10122,7 @@ var require_es20162 = __commonJS(function(exports2, module2) {
9833
10122
  });
9834
10123
  });
9835
10124
 
9836
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2017.js
10125
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2017.js
9837
10126
  var require_es2017 = __commonJS(function(exports2, module2) {
9838
10127
  Object.defineProperty(exports2, "__esModule", { value: true });
9839
10128
  var tslib_1 = require_tslib();
@@ -9854,7 +10143,7 @@ var require_es2017 = __commonJS(function(exports2, module2) {
9854
10143
  });
9855
10144
  });
9856
10145
 
9857
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2018.js
10146
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2018.js
9858
10147
  var require_es2018 = __commonJS(function(exports2, module2) {
9859
10148
  Object.defineProperty(exports2, "__esModule", { value: true });
9860
10149
  var tslib_1 = require_tslib();
@@ -9880,7 +10169,7 @@ var require_es2018 = __commonJS(function(exports2, module2) {
9880
10169
  });
9881
10170
  });
9882
10171
 
9883
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2019.js
10172
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2019.js
9884
10173
  var require_es2019 = __commonJS(function(exports2, module2) {
9885
10174
  Object.defineProperty(exports2, "__esModule", { value: true });
9886
10175
  var tslib_1 = require_tslib();
@@ -9901,7 +10190,7 @@ var require_es2019 = __commonJS(function(exports2, module2) {
9901
10190
  });
9902
10191
  });
9903
10192
 
9904
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2020.js
10193
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2020.js
9905
10194
  var require_es20202 = __commonJS(function(exports2, module2) {
9906
10195
  Object.defineProperty(exports2, "__esModule", { value: true });
9907
10196
  var tslib_1 = require_tslib();
@@ -9932,7 +10221,7 @@ var require_es20202 = __commonJS(function(exports2, module2) {
9932
10221
  });
9933
10222
  });
9934
10223
 
9935
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2021.js
10224
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2021.js
9936
10225
  var require_es20212 = __commonJS(function(exports2, module2) {
9937
10226
  Object.defineProperty(exports2, "__esModule", { value: true });
9938
10227
  var tslib_1 = require_tslib();
@@ -9949,7 +10238,7 @@ var require_es20212 = __commonJS(function(exports2, module2) {
9949
10238
  });
9950
10239
  });
9951
10240
 
9952
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2022.js
10241
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es2022.js
9953
10242
  var require_es2022 = __commonJS(function(exports2, module2) {
9954
10243
  Object.defineProperty(exports2, "__esModule", { value: true });
9955
10244
  var tslib_1 = require_tslib();
@@ -9968,7 +10257,7 @@ var require_es2022 = __commonJS(function(exports2, module2) {
9968
10257
  });
9969
10258
  });
9970
10259
 
9971
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es-proposals.js
10260
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/es-proposals.js
9972
10261
  var require_es_proposals = __commonJS(function(exports2, module2) {
9973
10262
  Object.defineProperty(exports2, "__esModule", { value: true });
9974
10263
  var tslib_1 = require_tslib();
@@ -10007,7 +10296,7 @@ var require_es_proposals = __commonJS(function(exports2, module2) {
10007
10296
  });
10008
10297
  });
10009
10298
 
10010
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/jsx.js
10299
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/jsx.js
10011
10300
  var require_jsx = __commonJS(function(exports2, module2) {
10012
10301
  Object.defineProperty(exports2, "__esModule", { value: true });
10013
10302
  var tslib_1 = require_tslib();
@@ -10053,7 +10342,7 @@ var require_jsx = __commonJS(function(exports2, module2) {
10053
10342
  });
10054
10343
  });
10055
10344
 
10056
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/type-annotations.js
10345
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/type-annotations.js
10057
10346
  var require_type_annotations = __commonJS(function(exports2, module2) {
10058
10347
  Object.defineProperty(exports2, "__esModule", { value: true });
10059
10348
  var tslib_1 = require_tslib();
@@ -10083,7 +10372,7 @@ var require_type_annotations = __commonJS(function(exports2, module2) {
10083
10372
  });
10084
10373
  });
10085
10374
 
10086
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/flow.js
10375
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/flow.js
10087
10376
  var require_flow = __commonJS(function(exports2, module2) {
10088
10377
  Object.defineProperty(exports2, "__esModule", { value: true });
10089
10378
  var tslib_1 = require_tslib();
@@ -10189,7 +10478,7 @@ var require_flow = __commonJS(function(exports2, module2) {
10189
10478
  });
10190
10479
  });
10191
10480
 
10192
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/esprima.js
10481
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/esprima.js
10193
10482
  var require_esprima = __commonJS(function(exports2, module2) {
10194
10483
  Object.defineProperty(exports2, "__esModule", { value: true });
10195
10484
  var tslib_1 = require_tslib();
@@ -10218,7 +10507,7 @@ var require_esprima = __commonJS(function(exports2, module2) {
10218
10507
  });
10219
10508
  });
10220
10509
 
10221
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/babel-core.js
10510
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/babel-core.js
10222
10511
  var require_babel_core = __commonJS(function(exports2, module2) {
10223
10512
  Object.defineProperty(exports2, "__esModule", { value: true });
10224
10513
  var tslib_1 = require_tslib();
@@ -10327,7 +10616,7 @@ var require_babel_core = __commonJS(function(exports2, module2) {
10327
10616
  });
10328
10617
  });
10329
10618
 
10330
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/babel.js
10619
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/babel.js
10331
10620
  var require_babel = __commonJS(function(exports2, module2) {
10332
10621
  Object.defineProperty(exports2, "__esModule", { value: true });
10333
10622
  var tslib_1 = require_tslib();
@@ -10349,7 +10638,7 @@ var require_babel = __commonJS(function(exports2, module2) {
10349
10638
  });
10350
10639
  });
10351
10640
 
10352
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/typescript.js
10641
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/def/typescript.js
10353
10642
  var require_typescript = __commonJS(function(exports2, module2) {
10354
10643
  Object.defineProperty(exports2, "__esModule", { value: true });
10355
10644
  var tslib_1 = require_tslib();
@@ -10476,7 +10765,7 @@ var require_typescript = __commonJS(function(exports2, module2) {
10476
10765
  });
10477
10766
  });
10478
10767
 
10479
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/gen/namedTypes.js
10768
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/gen/namedTypes.js
10480
10769
  var require_namedTypes = __commonJS(function(exports2) {
10481
10770
  Object.defineProperty(exports2, "__esModule", { value: true });
10482
10771
  exports2.namedTypes = undefined;
@@ -10484,7 +10773,7 @@ var require_namedTypes = __commonJS(function(exports2) {
10484
10773
  (function(namedTypes) {})(namedTypes = exports2.namedTypes || (exports2.namedTypes = {}));
10485
10774
  });
10486
10775
 
10487
- // ../../node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/main.js
10776
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/ast-types@0.16.1/node_modules/ast-types/lib/main.js
10488
10777
  var require_main = __commonJS(function(exports2) {
10489
10778
  Object.defineProperty(exports2, "__esModule", { value: true });
10490
10779
  exports2.visit = exports2.use = exports2.Type = exports2.someField = exports2.PathVisitor = exports2.Path = exports2.NodePath = exports2.namedTypes = exports2.getSupertypeNames = exports2.getFieldValue = exports2.getFieldNames = exports2.getBuilderName = exports2.finalize = exports2.eachField = exports2.defineMethod = exports2.builtInTypes = exports2.builders = exports2.astNodesAreEquivalent = undefined;
@@ -10546,7 +10835,7 @@ var require_main = __commonJS(function(exports2) {
10546
10835
  Object.assign(namedTypes_1.namedTypes, n);
10547
10836
  });
10548
10837
 
10549
- // ../../node_modules/.bun/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/tiny-invariant.cjs.js
10838
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/tiny-invariant.cjs.js
10550
10839
  var require_tiny_invariant_cjs = __commonJS(function(exports2, module2) {
10551
10840
  var isProduction = false;
10552
10841
  var prefix = "Invariant failed";
@@ -10564,7 +10853,7 @@ var require_tiny_invariant_cjs = __commonJS(function(exports2, module2) {
10564
10853
  module2.exports = invariant;
10565
10854
  });
10566
10855
 
10567
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64.js
10856
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64.js
10568
10857
  var require_base64 = __commonJS(function(exports2) {
10569
10858
  var intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
10570
10859
  exports2.encode = function(number) {
@@ -10603,7 +10892,7 @@ var require_base64 = __commonJS(function(exports2) {
10603
10892
  };
10604
10893
  });
10605
10894
 
10606
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js
10895
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js
10607
10896
  var require_base64_vlq = __commonJS(function(exports2) {
10608
10897
  var base64 = require_base64();
10609
10898
  var VLQ_BASE_SHIFT = 5;
@@ -10655,7 +10944,7 @@ var require_base64_vlq = __commonJS(function(exports2) {
10655
10944
  };
10656
10945
  });
10657
10946
 
10658
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/util.js
10947
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/util.js
10659
10948
  var require_util = __commonJS(function(exports2) {
10660
10949
  function getArg(aArgs, aName, aDefaultValue) {
10661
10950
  if (aName in aArgs) {
@@ -10954,7 +11243,7 @@ var require_util = __commonJS(function(exports2) {
10954
11243
  exports2.computeSourceURL = computeSourceURL;
10955
11244
  });
10956
11245
 
10957
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/array-set.js
11246
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/array-set.js
10958
11247
  var require_array_set = __commonJS(function(exports2) {
10959
11248
  var util = require_util();
10960
11249
  var has = Object.prototype.hasOwnProperty;
@@ -11022,7 +11311,7 @@ var require_array_set = __commonJS(function(exports2) {
11022
11311
  exports2.ArraySet = ArraySet;
11023
11312
  });
11024
11313
 
11025
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js
11314
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js
11026
11315
  var require_mapping_list = __commonJS(function(exports2) {
11027
11316
  var util = require_util();
11028
11317
  function generatedPositionAfter(mappingA, mappingB) {
@@ -11059,7 +11348,7 @@ var require_mapping_list = __commonJS(function(exports2) {
11059
11348
  exports2.MappingList = MappingList;
11060
11349
  });
11061
11350
 
11062
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js
11351
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js
11063
11352
  var require_source_map_generator = __commonJS(function(exports2) {
11064
11353
  var base64VLQ = require_base64_vlq();
11065
11354
  var util = require_util();
@@ -11329,7 +11618,7 @@ var require_source_map_generator = __commonJS(function(exports2) {
11329
11618
  exports2.SourceMapGenerator = SourceMapGenerator;
11330
11619
  });
11331
11620
 
11332
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/binary-search.js
11621
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/binary-search.js
11333
11622
  var require_binary_search = __commonJS(function(exports2) {
11334
11623
  exports2.GREATEST_LOWER_BOUND = 1;
11335
11624
  exports2.LEAST_UPPER_BOUND = 2;
@@ -11376,7 +11665,7 @@ var require_binary_search = __commonJS(function(exports2) {
11376
11665
  };
11377
11666
  });
11378
11667
 
11379
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js
11668
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js
11380
11669
  var require_quick_sort = __commonJS(function(exports2) {
11381
11670
  function swap(ary, x, y) {
11382
11671
  var temp = ary[x];
@@ -11409,7 +11698,7 @@ var require_quick_sort = __commonJS(function(exports2) {
11409
11698
  };
11410
11699
  });
11411
11700
 
11412
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js
11701
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js
11413
11702
  var require_source_map_consumer = __commonJS(function(exports2) {
11414
11703
  var util = require_util();
11415
11704
  var binarySearch = require_binary_search();
@@ -11978,7 +12267,7 @@ var require_source_map_consumer = __commonJS(function(exports2) {
11978
12267
  exports2.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
11979
12268
  });
11980
12269
 
11981
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-node.js
12270
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-node.js
11982
12271
  var require_source_node = __commonJS(function(exports2) {
11983
12272
  var SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
11984
12273
  var util = require_util();
@@ -12232,14 +12521,14 @@ var require_source_node = __commonJS(function(exports2) {
12232
12521
  exports2.SourceNode = SourceNode;
12233
12522
  });
12234
12523
 
12235
- // ../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/source-map.js
12524
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/source-map@0.6.1/node_modules/source-map/source-map.js
12236
12525
  var require_source_map = __commonJS(function(exports2) {
12237
12526
  exports2.SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
12238
12527
  exports2.SourceMapConsumer = require_source_map_consumer().SourceMapConsumer;
12239
12528
  exports2.SourceNode = require_source_node().SourceNode;
12240
12529
  });
12241
12530
 
12242
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/util.js
12531
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/util.js
12243
12532
  var require_util2 = __commonJS(function(exports2) {
12244
12533
  Object.defineProperty(exports2, "__esModule", { value: true });
12245
12534
  exports2.isTrailingCommaEnabled = exports2.getParentExportDeclaration = exports2.isExportDeclaration = exports2.fixFaultyLocations = exports2.getTrueLoc = exports2.composeSourceMaps = exports2.copyPos = exports2.comparePos = exports2.getUnionOfKeys = exports2.getOption = exports2.isBrowser = exports2.getLineTerminator = undefined;
@@ -12518,7 +12807,7 @@ var require_util2 = __commonJS(function(exports2) {
12518
12807
  exports2.isTrailingCommaEnabled = isTrailingCommaEnabled;
12519
12808
  });
12520
12809
 
12521
- // ../../node_modules/.bun/esprima@4.0.1/node_modules/esprima/dist/esprima.js
12810
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/esprima@4.0.1/node_modules/esprima/dist/esprima.js
12522
12811
  var require_esprima2 = __commonJS(function(exports2, module2) {
12523
12812
  (function webpackUniversalModuleDefinition(root, factory) {
12524
12813
  if (typeof exports2 === "object" && typeof module2 === "object")
@@ -18658,7 +18947,7 @@ var require_esprima2 = __commonJS(function(exports2, module2) {
18658
18947
  });
18659
18948
  });
18660
18949
 
18661
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/parsers/esprima.js
18950
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/parsers/esprima.js
18662
18951
  var require_esprima3 = __commonJS(function(exports2) {
18663
18952
  Object.defineProperty(exports2, "__esModule", { value: true });
18664
18953
  exports2.parse = undefined;
@@ -18684,7 +18973,7 @@ var require_esprima3 = __commonJS(function(exports2) {
18684
18973
  exports2.parse = parse;
18685
18974
  });
18686
18975
 
18687
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/options.js
18976
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/options.js
18688
18977
  var require_options = __commonJS(function(exports2) {
18689
18978
  Object.defineProperty(exports2, "__esModule", { value: true });
18690
18979
  exports2.normalize = undefined;
@@ -18741,7 +19030,7 @@ var require_options = __commonJS(function(exports2) {
18741
19030
  exports2.normalize = normalize;
18742
19031
  });
18743
19032
 
18744
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/mapping.js
19033
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/mapping.js
18745
19034
  var require_mapping = __commonJS(function(exports2) {
18746
19035
  Object.defineProperty(exports2, "__esModule", { value: true });
18747
19036
  var tslib_1 = require_tslib();
@@ -18924,7 +19213,7 @@ var require_mapping = __commonJS(function(exports2) {
18924
19213
  }
18925
19214
  });
18926
19215
 
18927
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/lines.js
19216
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/lines.js
18928
19217
  var require_lines = __commonJS(function(exports2) {
18929
19218
  Object.defineProperty(exports2, "__esModule", { value: true });
18930
19219
  exports2.concat = exports2.fromString = exports2.countSpaces = exports2.Lines = undefined;
@@ -19538,7 +19827,7 @@ var require_lines = __commonJS(function(exports2) {
19538
19827
  var emptyLines = fromString("");
19539
19828
  });
19540
19829
 
19541
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/comments.js
19830
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/comments.js
19542
19831
  var require_comments = __commonJS(function(exports2) {
19543
19832
  Object.defineProperty(exports2, "__esModule", { value: true });
19544
19833
  exports2.printComments = exports2.attach = undefined;
@@ -19788,7 +20077,7 @@ var require_comments = __commonJS(function(exports2) {
19788
20077
  exports2.printComments = printComments;
19789
20078
  });
19790
20079
 
19791
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/parser.js
20080
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/parser.js
19792
20081
  var require_parser2 = __commonJS(function(exports2) {
19793
20082
  Object.defineProperty(exports2, "__esModule", { value: true });
19794
20083
  exports2.parse = undefined;
@@ -19975,7 +20264,7 @@ var require_parser2 = __commonJS(function(exports2) {
19975
20264
  };
19976
20265
  });
19977
20266
 
19978
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/fast-path.js
20267
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/fast-path.js
19979
20268
  var require_fast_path = __commonJS(function(exports2) {
19980
20269
  Object.defineProperty(exports2, "__esModule", { value: true });
19981
20270
  var tslib_1 = require_tslib();
@@ -20407,7 +20696,7 @@ var require_fast_path = __commonJS(function(exports2) {
20407
20696
  exports2.default = FastPath;
20408
20697
  });
20409
20698
 
20410
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/patcher.js
20699
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/patcher.js
20411
20700
  var require_patcher = __commonJS(function(exports2) {
20412
20701
  Object.defineProperty(exports2, "__esModule", { value: true });
20413
20702
  exports2.getReprinter = exports2.Patcher = undefined;
@@ -20705,7 +20994,7 @@ var require_patcher = __commonJS(function(exports2) {
20705
20994
  }
20706
20995
  });
20707
20996
 
20708
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/lib/printer.js
20997
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/lib/printer.js
20709
20998
  var require_printer = __commonJS(function(exports2) {
20710
20999
  Object.defineProperty(exports2, "__esModule", { value: true });
20711
21000
  exports2.Printer = undefined;
@@ -22973,7 +23262,7 @@ while`);
22973
23262
  }
22974
23263
  });
22975
23264
 
22976
- // ../../node_modules/.bun/recast@0.23.11/node_modules/recast/main.js
23265
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/recast@0.23.11/node_modules/recast/main.js
22977
23266
  var require_main2 = __commonJS(function(exports2) {
22978
23267
  Object.defineProperty(exports2, "__esModule", { value: true });
22979
23268
  exports2.run = exports2.prettyPrint = exports2.print = exports2.visit = exports2.types = exports2.parse = undefined;
@@ -23022,7 +23311,7 @@ var require_main2 = __commonJS(function(exports2) {
23022
23311
  }
23023
23312
  });
23024
23313
 
23025
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/utils/union.js
23314
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/utils/union.js
23026
23315
  var require_union = __commonJS(function(exports2, module2) {
23027
23316
  module2.exports = function(arrays) {
23028
23317
  const result = new Set(arrays[0]);
@@ -23037,7 +23326,7 @@ var require_union = __commonJS(function(exports2, module2) {
23037
23326
  };
23038
23327
  });
23039
23328
 
23040
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/Collection.js
23329
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/Collection.js
23041
23330
  var require_Collection = __commonJS(function(exports2) {
23042
23331
  var assert = __require("assert");
23043
23332
  var intersection = require_intersection();
@@ -23266,7 +23555,7 @@ There are existing registrations for that method with `;
23266
23555
  exports2.setDefaultCollectionType = setDefaultCollectionType;
23267
23556
  });
23268
23557
 
23269
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/matchNode.js
23558
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/matchNode.js
23270
23559
  var require_matchNode = __commonJS(function(exports2, module2) {
23271
23560
  var hasOwn = Object.prototype.hasOwnProperty.call.bind(Object.prototype.hasOwnProperty);
23272
23561
  function matchNode(haystack, needle) {
@@ -23286,7 +23575,7 @@ var require_matchNode = __commonJS(function(exports2, module2) {
23286
23575
  module2.exports = matchNode;
23287
23576
  });
23288
23577
 
23289
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/utils/once.js
23578
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/utils/once.js
23290
23579
  var require_once = __commonJS(function(exports2, module2) {
23291
23580
  module2.exports = function(func) {
23292
23581
  let called = false;
@@ -23301,7 +23590,7 @@ var require_once = __commonJS(function(exports2, module2) {
23301
23590
  };
23302
23591
  });
23303
23592
 
23304
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/Node.js
23593
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/Node.js
23305
23594
  var require_Node = __commonJS(function(exports2) {
23306
23595
  var Collection = require_Collection();
23307
23596
  var matchNode = require_matchNode();
@@ -23400,7 +23689,7 @@ var require_Node = __commonJS(function(exports2) {
23400
23689
  exports2.register = once(register);
23401
23690
  });
23402
23691
 
23403
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/VariableDeclarator.js
23692
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/VariableDeclarator.js
23404
23693
  var require_VariableDeclarator = __commonJS(function(exports2) {
23405
23694
  var Collection = require_Collection();
23406
23695
  var NodeCollection = require_Node();
@@ -23496,7 +23785,7 @@ var require_VariableDeclarator = __commonJS(function(exports2) {
23496
23785
  exports2.filters = filterMethods;
23497
23786
  });
23498
23787
 
23499
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/JSXElement.js
23788
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/JSXElement.js
23500
23789
  var require_JSXElement = __commonJS(function(exports2) {
23501
23790
  var Collection = require_Collection();
23502
23791
  var NodeCollection = require_Node();
@@ -23615,7 +23904,7 @@ var require_JSXElement = __commonJS(function(exports2) {
23615
23904
  exports2.mappings = mappingMethods;
23616
23905
  });
23617
23906
 
23618
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/ImportDeclaration.js
23907
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/ImportDeclaration.js
23619
23908
  var require_ImportDeclaration = __commonJS(function(exports2) {
23620
23909
  var Collection = require_Collection();
23621
23910
  var NodeCollection = require_Node();
@@ -23662,7 +23951,7 @@ var require_ImportDeclaration = __commonJS(function(exports2) {
23662
23951
  exports2.register = once(register);
23663
23952
  });
23664
23953
 
23665
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/index.js
23954
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/collections/index.js
23666
23955
  var require_collections = __commonJS(function(exports2, module2) {
23667
23956
  module2.exports = {
23668
23957
  Node: require_Node(),
@@ -23672,7 +23961,7 @@ var require_collections = __commonJS(function(exports2, module2) {
23672
23961
  };
23673
23962
  });
23674
23963
 
23675
- // ../../node_modules/.bun/@babel+parser@7.29.3/node_modules/@babel/parser/lib/index.js
23964
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@babel+parser@7.29.3/node_modules/@babel/parser/lib/index.js
23676
23965
  var require_lib = __commonJS(function(exports2) {
23677
23966
  Object.defineProperty(exports2, "__esModule", {
23678
23967
  value: true
@@ -38472,7 +38761,7 @@ var require_lib = __commonJS(function(exports2) {
38472
38761
  exports2.tokTypes = tokTypes;
38473
38762
  });
38474
38763
 
38475
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/babylon.js
38764
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/babylon.js
38476
38765
  var require_babylon = __commonJS(function(exports2, module2) {
38477
38766
  var babylon = require_lib();
38478
38767
  var defaultOptions = {
@@ -38517,7 +38806,7 @@ var require_babylon = __commonJS(function(exports2, module2) {
38517
38806
  };
38518
38807
  });
38519
38808
 
38520
- // ../../node_modules/.bun/flow-parser@0.314.0/node_modules/flow-parser/flow_parser.js
38809
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/flow-parser@0.314.0/node_modules/flow-parser/flow_parser.js
38521
38810
  var require_flow_parser = __commonJS(function(exports2) {
38522
38811
  (function(a) {
38523
38812
  typeof globalThis !== "object" && (this ? b() : (a.defineProperty(a.prototype, "_T_", { configurable: true, get: b }), _T_));
@@ -86788,7 +87077,7 @@ var require_flow_parser = __commonJS(function(exports2) {
86788
87077
  })(globalThis);
86789
87078
  });
86790
87079
 
86791
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/flow.js
87080
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/flow.js
86792
87081
  var require_flow2 = __commonJS(function(exports2, module2) {
86793
87082
  var flowParser = require_flow_parser();
86794
87083
  var defaultOptions = {
@@ -86811,7 +87100,7 @@ var require_flow2 = __commonJS(function(exports2, module2) {
86811
87100
  };
86812
87101
  });
86813
87102
 
86814
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/tsOptions.js
87103
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/tsOptions.js
86815
87104
  var require_tsOptions = __commonJS(function(exports2, module2) {
86816
87105
  module2.exports = {
86817
87106
  sourceType: "module",
@@ -86848,7 +87137,7 @@ var require_tsOptions = __commonJS(function(exports2, module2) {
86848
87137
  };
86849
87138
  });
86850
87139
 
86851
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/ts.js
87140
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/ts.js
86852
87141
  var require_ts = __commonJS(function(exports2, module2) {
86853
87142
  var babylon = require_lib();
86854
87143
  var options = require_tsOptions();
@@ -86861,7 +87150,7 @@ var require_ts = __commonJS(function(exports2, module2) {
86861
87150
  };
86862
87151
  });
86863
87152
 
86864
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/tsx.js
87153
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/tsx.js
86865
87154
  var require_tsx = __commonJS(function(exports2, module2) {
86866
87155
  var babylon = require_lib();
86867
87156
  var baseOptions = require_tsOptions();
@@ -86876,7 +87165,7 @@ var require_tsx = __commonJS(function(exports2, module2) {
86876
87165
  };
86877
87166
  });
86878
87167
 
86879
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/babel5Compat.js
87168
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/parser/babel5Compat.js
86880
87169
  var require_babel5Compat = __commonJS(function(exports2, module2) {
86881
87170
  var babylon = require_lib();
86882
87171
  var options = {
@@ -86912,7 +87201,7 @@ var require_babel5Compat = __commonJS(function(exports2, module2) {
86912
87201
  };
86913
87202
  });
86914
87203
 
86915
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/getParser.js
87204
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/getParser.js
86916
87205
  var require_getParser = __commonJS(function(exports2, module2) {
86917
87206
  module2.exports = function getParser(parserName, options) {
86918
87207
  switch (parserName) {
@@ -86931,7 +87220,7 @@ var require_getParser = __commonJS(function(exports2, module2) {
86931
87220
  };
86932
87221
  });
86933
87222
 
86934
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/template.js
87223
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/template.js
86935
87224
  var require_template = __commonJS(function(exports2, module2) {
86936
87225
  var recast = require_main2();
86937
87226
  var builders = recast.types.builders;
@@ -87032,7 +87321,7 @@ var require_template = __commonJS(function(exports2, module2) {
87032
87321
  };
87033
87322
  });
87034
87323
 
87035
- // ../../node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/core.js
87324
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/jscodeshift@17.4.0/node_modules/jscodeshift/src/core.js
87036
87325
  var require_core3 = __commonJS(function(exports2, module2) {
87037
87326
  var Collection = require_Collection();
87038
87327
  var collections = require_collections();
@@ -87129,7 +87418,7 @@ var require_core3 = __commonJS(function(exports2, module2) {
87129
87418
  module2.exports = enrichCore(core, getParser());
87130
87419
  });
87131
87420
 
87132
- // ../../node_modules/.bun/isexe@2.0.0/node_modules/isexe/windows.js
87421
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/isexe@2.0.0/node_modules/isexe/windows.js
87133
87422
  var require_windows = __commonJS(function(exports2, module2) {
87134
87423
  module2.exports = isexe;
87135
87424
  isexe.sync = sync;
@@ -87167,7 +87456,7 @@ var require_windows = __commonJS(function(exports2, module2) {
87167
87456
  }
87168
87457
  });
87169
87458
 
87170
- // ../../node_modules/.bun/isexe@2.0.0/node_modules/isexe/mode.js
87459
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/isexe@2.0.0/node_modules/isexe/mode.js
87171
87460
  var require_mode = __commonJS(function(exports2, module2) {
87172
87461
  module2.exports = isexe;
87173
87462
  isexe.sync = sync;
@@ -87198,7 +87487,7 @@ var require_mode = __commonJS(function(exports2, module2) {
87198
87487
  }
87199
87488
  });
87200
87489
 
87201
- // ../../node_modules/.bun/isexe@2.0.0/node_modules/isexe/index.js
87490
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/isexe@2.0.0/node_modules/isexe/index.js
87202
87491
  var require_isexe = __commonJS(function(exports2, module2) {
87203
87492
  var fs = __require("fs");
87204
87493
  var core;
@@ -87251,7 +87540,7 @@ var require_isexe = __commonJS(function(exports2, module2) {
87251
87540
  }
87252
87541
  });
87253
87542
 
87254
- // ../../node_modules/.bun/which@2.0.2/node_modules/which/which.js
87543
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/which@2.0.2/node_modules/which/which.js
87255
87544
  var require_which = __commonJS(function(exports2, module2) {
87256
87545
  var isWindows = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys";
87257
87546
  var path = __require("path");
@@ -87342,7 +87631,7 @@ var require_which = __commonJS(function(exports2, module2) {
87342
87631
  which.sync = whichSync;
87343
87632
  });
87344
87633
 
87345
- // ../../node_modules/.bun/path-key@3.1.1/node_modules/path-key/index.js
87634
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/path-key@3.1.1/node_modules/path-key/index.js
87346
87635
  var require_path_key = __commonJS(function(exports2, module2) {
87347
87636
  var pathKey = (options = {}) => {
87348
87637
  const environment = options.env || process.env;
@@ -87356,7 +87645,7 @@ var require_path_key = __commonJS(function(exports2, module2) {
87356
87645
  module2.exports.default = pathKey;
87357
87646
  });
87358
87647
 
87359
- // ../../node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js
87648
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js
87360
87649
  var require_resolveCommand = __commonJS(function(exports2, module2) {
87361
87650
  var path = __require("path");
87362
87651
  var which = require_which();
@@ -87393,7 +87682,7 @@ var require_resolveCommand = __commonJS(function(exports2, module2) {
87393
87682
  module2.exports = resolveCommand;
87394
87683
  });
87395
87684
 
87396
- // ../../node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js
87685
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js
87397
87686
  var require_escape = __commonJS(function(exports2, module2) {
87398
87687
  var metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
87399
87688
  function escapeCommand(arg) {
@@ -87415,12 +87704,12 @@ var require_escape = __commonJS(function(exports2, module2) {
87415
87704
  exports2.argument = escapeArgument;
87416
87705
  });
87417
87706
 
87418
- // ../../node_modules/.bun/shebang-regex@3.0.0/node_modules/shebang-regex/index.js
87707
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/shebang-regex@3.0.0/node_modules/shebang-regex/index.js
87419
87708
  var require_shebang_regex = __commonJS(function(exports2, module2) {
87420
87709
  module2.exports = /^#!(.*)/;
87421
87710
  });
87422
87711
 
87423
- // ../../node_modules/.bun/shebang-command@2.0.0/node_modules/shebang-command/index.js
87712
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/shebang-command@2.0.0/node_modules/shebang-command/index.js
87424
87713
  var require_shebang_command = __commonJS(function(exports2, module2) {
87425
87714
  var shebangRegex = require_shebang_regex();
87426
87715
  module2.exports = (string = "") => {
@@ -87437,7 +87726,7 @@ var require_shebang_command = __commonJS(function(exports2, module2) {
87437
87726
  };
87438
87727
  });
87439
87728
 
87440
- // ../../node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js
87729
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js
87441
87730
  var require_readShebang = __commonJS(function(exports2, module2) {
87442
87731
  var fs = __require("fs");
87443
87732
  var shebangCommand = require_shebang_command();
@@ -87455,7 +87744,7 @@ var require_readShebang = __commonJS(function(exports2, module2) {
87455
87744
  module2.exports = readShebang;
87456
87745
  });
87457
87746
 
87458
- // ../../node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js
87747
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js
87459
87748
  var require_parse2 = __commonJS(function(exports2, module2) {
87460
87749
  var path = __require("path");
87461
87750
  var resolveCommand = require_resolveCommand();
@@ -87514,7 +87803,7 @@ var require_parse2 = __commonJS(function(exports2, module2) {
87514
87803
  module2.exports = parse;
87515
87804
  });
87516
87805
 
87517
- // ../../node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js
87806
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js
87518
87807
  var require_enoent = __commonJS(function(exports2, module2) {
87519
87808
  var isWin = process.platform === "win32";
87520
87809
  function notFoundError(original, syscall) {
@@ -87561,7 +87850,7 @@ var require_enoent = __commonJS(function(exports2, module2) {
87561
87850
  };
87562
87851
  });
87563
87852
 
87564
- // ../../node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/index.js
87853
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/cross-spawn@7.0.6/node_modules/cross-spawn/index.js
87565
87854
  var require_cross_spawn = __commonJS(function(exports2, module2) {
87566
87855
  var cp = __require("child_process");
87567
87856
  var parse = require_parse2();
@@ -87585,14 +87874,14 @@ var require_cross_spawn = __commonJS(function(exports2, module2) {
87585
87874
  module2.exports._enoent = enoent;
87586
87875
  });
87587
87876
 
87588
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js
87877
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js
87589
87878
  var require_can_promise = __commonJS(function(exports2, module2) {
87590
87879
  module2.exports = function() {
87591
87880
  return typeof Promise === "function" && Promise.prototype && Promise.prototype.then;
87592
87881
  };
87593
87882
  });
87594
87883
 
87595
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js
87884
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js
87596
87885
  var require_utils = __commonJS(function(exports2) {
87597
87886
  var toSJISFunction;
87598
87887
  var CODEWORDS_COUNT = [
@@ -87670,7 +87959,7 @@ var require_utils = __commonJS(function(exports2) {
87670
87959
  };
87671
87960
  });
87672
87961
 
87673
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js
87962
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js
87674
87963
  var require_error_correction_level = __commonJS(function(exports2) {
87675
87964
  exports2.L = { bit: 1 };
87676
87965
  exports2.M = { bit: 0 };
@@ -87713,7 +88002,7 @@ var require_error_correction_level = __commonJS(function(exports2) {
87713
88002
  };
87714
88003
  });
87715
88004
 
87716
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js
88005
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js
87717
88006
  var require_bit_buffer = __commonJS(function(exports2, module2) {
87718
88007
  function BitBuffer() {
87719
88008
  this.buffer = [];
@@ -87746,7 +88035,7 @@ var require_bit_buffer = __commonJS(function(exports2, module2) {
87746
88035
  module2.exports = BitBuffer;
87747
88036
  });
87748
88037
 
87749
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js
88038
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js
87750
88039
  var require_bit_matrix = __commonJS(function(exports2, module2) {
87751
88040
  function BitMatrix(size) {
87752
88041
  if (!size || size < 1) {
@@ -87774,7 +88063,7 @@ var require_bit_matrix = __commonJS(function(exports2, module2) {
87774
88063
  module2.exports = BitMatrix;
87775
88064
  });
87776
88065
 
87777
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js
88066
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js
87778
88067
  var require_alignment_pattern = __commonJS(function(exports2) {
87779
88068
  var getSymbolSize = require_utils().getSymbolSize;
87780
88069
  exports2.getRowColCoords = function getRowColCoords(version) {
@@ -87806,7 +88095,7 @@ var require_alignment_pattern = __commonJS(function(exports2) {
87806
88095
  };
87807
88096
  });
87808
88097
 
87809
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js
88098
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js
87810
88099
  var require_finder_pattern = __commonJS(function(exports2) {
87811
88100
  var getSymbolSize = require_utils().getSymbolSize;
87812
88101
  var FINDER_PATTERN_SIZE = 7;
@@ -87820,7 +88109,7 @@ var require_finder_pattern = __commonJS(function(exports2) {
87820
88109
  };
87821
88110
  });
87822
88111
 
87823
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js
88112
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js
87824
88113
  var require_mask_pattern = __commonJS(function(exports2) {
87825
88114
  exports2.Patterns = {
87826
88115
  PATTERN000: 0,
@@ -87969,7 +88258,7 @@ var require_mask_pattern = __commonJS(function(exports2) {
87969
88258
  };
87970
88259
  });
87971
88260
 
87972
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js
88261
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js
87973
88262
  var require_error_correction_code = __commonJS(function(exports2) {
87974
88263
  var ECLevel = require_error_correction_level();
87975
88264
  var EC_BLOCKS_TABLE = [
@@ -88326,7 +88615,7 @@ var require_error_correction_code = __commonJS(function(exports2) {
88326
88615
  };
88327
88616
  });
88328
88617
 
88329
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js
88618
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js
88330
88619
  var require_galois_field = __commonJS(function(exports2) {
88331
88620
  var EXP_TABLE = new Uint8Array(512);
88332
88621
  var LOG_TABLE = new Uint8Array(256);
@@ -88359,7 +88648,7 @@ var require_galois_field = __commonJS(function(exports2) {
88359
88648
  };
88360
88649
  });
88361
88650
 
88362
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js
88651
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js
88363
88652
  var require_polynomial = __commonJS(function(exports2) {
88364
88653
  var GF = require_galois_field();
88365
88654
  exports2.mul = function mul2(p1, p2) {
@@ -88394,7 +88683,7 @@ var require_polynomial = __commonJS(function(exports2) {
88394
88683
  };
88395
88684
  });
88396
88685
 
88397
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js
88686
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js
88398
88687
  var require_reed_solomon_encoder = __commonJS(function(exports2, module2) {
88399
88688
  var Polynomial = require_polynomial();
88400
88689
  function ReedSolomonEncoder(degree) {
@@ -88425,14 +88714,14 @@ var require_reed_solomon_encoder = __commonJS(function(exports2, module2) {
88425
88714
  module2.exports = ReedSolomonEncoder;
88426
88715
  });
88427
88716
 
88428
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js
88717
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js
88429
88718
  var require_version_check = __commonJS(function(exports2) {
88430
88719
  exports2.isValid = function isValid(version) {
88431
88720
  return !isNaN(version) && version >= 1 && version <= 40;
88432
88721
  };
88433
88722
  });
88434
88723
 
88435
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js
88724
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js
88436
88725
  var require_regex = __commonJS(function(exports2) {
88437
88726
  var numeric = "[0-9]+";
88438
88727
  var alphanumeric = "[A-Z $%*+\\-./:]+";
@@ -88459,7 +88748,7 @@ var require_regex = __commonJS(function(exports2) {
88459
88748
  };
88460
88749
  });
88461
88750
 
88462
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js
88751
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js
88463
88752
  var require_mode2 = __commonJS(function(exports2) {
88464
88753
  var VersionCheck = require_version_check();
88465
88754
  var Regex = require_regex();
@@ -88546,7 +88835,7 @@ var require_mode2 = __commonJS(function(exports2) {
88546
88835
  };
88547
88836
  });
88548
88837
 
88549
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js
88838
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js
88550
88839
  var require_version = __commonJS(function(exports2) {
88551
88840
  var Utils = require_utils();
88552
88841
  var ECCode = require_error_correction_code();
@@ -88641,7 +88930,7 @@ var require_version = __commonJS(function(exports2) {
88641
88930
  };
88642
88931
  });
88643
88932
 
88644
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js
88933
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js
88645
88934
  var require_format_info = __commonJS(function(exports2) {
88646
88935
  var Utils = require_utils();
88647
88936
  var G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0;
@@ -88657,7 +88946,7 @@ var require_format_info = __commonJS(function(exports2) {
88657
88946
  };
88658
88947
  });
88659
88948
 
88660
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js
88949
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js
88661
88950
  var require_numeric_data = __commonJS(function(exports2, module2) {
88662
88951
  var Mode = require_mode2();
88663
88952
  function NumericData(data) {
@@ -88690,7 +88979,7 @@ var require_numeric_data = __commonJS(function(exports2, module2) {
88690
88979
  module2.exports = NumericData;
88691
88980
  });
88692
88981
 
88693
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js
88982
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js
88694
88983
  var require_alphanumeric_data = __commonJS(function(exports2, module2) {
88695
88984
  var Mode = require_mode2();
88696
88985
  var ALPHA_NUM_CHARS = [
@@ -88767,7 +89056,7 @@ var require_alphanumeric_data = __commonJS(function(exports2, module2) {
88767
89056
  module2.exports = AlphanumericData;
88768
89057
  });
88769
89058
 
88770
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js
89059
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js
88771
89060
  var require_byte_data = __commonJS(function(exports2, module2) {
88772
89061
  var Mode = require_mode2();
88773
89062
  function ByteData(data) {
@@ -88795,7 +89084,7 @@ var require_byte_data = __commonJS(function(exports2, module2) {
88795
89084
  module2.exports = ByteData;
88796
89085
  });
88797
89086
 
88798
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js
89087
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js
88799
89088
  var require_kanji_data = __commonJS(function(exports2, module2) {
88800
89089
  var Mode = require_mode2();
88801
89090
  var Utils = require_utils();
@@ -88831,7 +89120,7 @@ var require_kanji_data = __commonJS(function(exports2, module2) {
88831
89120
  module2.exports = KanjiData;
88832
89121
  });
88833
89122
 
88834
- // ../../node_modules/.bun/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js
89123
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js
88835
89124
  var require_dijkstra = __commonJS(function(exports2, module2) {
88836
89125
  var dijkstra = {
88837
89126
  single_source_shortest_paths: function(graph, s, d) {
@@ -88916,7 +89205,7 @@ var require_dijkstra = __commonJS(function(exports2, module2) {
88916
89205
  }
88917
89206
  });
88918
89207
 
88919
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js
89208
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js
88920
89209
  var require_segments = __commonJS(function(exports2) {
88921
89210
  var Mode = require_mode2();
88922
89211
  var NumericData = require_numeric_data();
@@ -89100,7 +89389,7 @@ var require_segments = __commonJS(function(exports2) {
89100
89389
  };
89101
89390
  });
89102
89391
 
89103
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js
89392
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js
89104
89393
  var require_qrcode = __commonJS(function(exports2) {
89105
89394
  var Utils = require_utils();
89106
89395
  var ECLevel = require_error_correction_level();
@@ -89360,7 +89649,7 @@ var require_qrcode = __commonJS(function(exports2) {
89360
89649
  };
89361
89650
  });
89362
89651
 
89363
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/chunkstream.js
89652
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/chunkstream.js
89364
89653
  var require_chunkstream = __commonJS(function(exports2, module2) {
89365
89654
  var util = __require("util");
89366
89655
  var Stream = __require("stream");
@@ -89492,7 +89781,7 @@ var require_chunkstream = __commonJS(function(exports2, module2) {
89492
89781
  };
89493
89782
  });
89494
89783
 
89495
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/interlace.js
89784
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/interlace.js
89496
89785
  var require_interlace = __commonJS(function(exports2) {
89497
89786
  var imagePasses = [
89498
89787
  {
@@ -89565,7 +89854,7 @@ var require_interlace = __commonJS(function(exports2) {
89565
89854
  };
89566
89855
  });
89567
89856
 
89568
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/paeth-predictor.js
89857
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/paeth-predictor.js
89569
89858
  var require_paeth_predictor = __commonJS(function(exports2, module2) {
89570
89859
  module2.exports = function paethPredictor(left, above, upLeft) {
89571
89860
  let paeth = left + above - upLeft;
@@ -89582,7 +89871,7 @@ var require_paeth_predictor = __commonJS(function(exports2, module2) {
89582
89871
  };
89583
89872
  });
89584
89873
 
89585
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-parse.js
89874
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-parse.js
89586
89875
  var require_filter_parse = __commonJS(function(exports2, module2) {
89587
89876
  var interlaceUtils = require_interlace();
89588
89877
  var paethPredictor = require_paeth_predictor();
@@ -89717,7 +90006,7 @@ var require_filter_parse = __commonJS(function(exports2, module2) {
89717
90006
  };
89718
90007
  });
89719
90008
 
89720
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-parse-async.js
90009
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-parse-async.js
89721
90010
  var require_filter_parse_async = __commonJS(function(exports2, module2) {
89722
90011
  var util = __require("util");
89723
90012
  var ChunkStream = require_chunkstream();
@@ -89740,7 +90029,7 @@ var require_filter_parse_async = __commonJS(function(exports2, module2) {
89740
90029
  util.inherits(FilterAsync, ChunkStream);
89741
90030
  });
89742
90031
 
89743
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/constants.js
90032
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/constants.js
89744
90033
  var require_constants2 = __commonJS(function(exports2, module2) {
89745
90034
  module2.exports = {
89746
90035
  PNG_SIGNATURE: [137, 80, 78, 71, 13, 10, 26, 10],
@@ -89767,7 +90056,7 @@ var require_constants2 = __commonJS(function(exports2, module2) {
89767
90056
  };
89768
90057
  });
89769
90058
 
89770
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/crc.js
90059
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/crc.js
89771
90060
  var require_crc = __commonJS(function(exports2, module2) {
89772
90061
  var crcTable = [];
89773
90062
  (function() {
@@ -89804,7 +90093,7 @@ var require_crc = __commonJS(function(exports2, module2) {
89804
90093
  };
89805
90094
  });
89806
90095
 
89807
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/parser.js
90096
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/parser.js
89808
90097
  var require_parser3 = __commonJS(function(exports2, module2) {
89809
90098
  var constants = require_constants2();
89810
90099
  var CrcCalculator = require_crc();
@@ -90021,7 +90310,7 @@ var require_parser3 = __commonJS(function(exports2, module2) {
90021
90310
  };
90022
90311
  });
90023
90312
 
90024
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/bitmapper.js
90313
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/bitmapper.js
90025
90314
  var require_bitmapper = __commonJS(function(exports2) {
90026
90315
  var interlaceUtils = require_interlace();
90027
90316
  var pixelBppMapper = [
@@ -90232,7 +90521,7 @@ var require_bitmapper = __commonJS(function(exports2) {
90232
90521
  };
90233
90522
  });
90234
90523
 
90235
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/format-normaliser.js
90524
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/format-normaliser.js
90236
90525
  var require_format_normaliser = __commonJS(function(exports2, module2) {
90237
90526
  function dePalette(indata, outdata, width, height, palette) {
90238
90527
  let pxPos = 0;
@@ -90308,7 +90597,7 @@ var require_format_normaliser = __commonJS(function(exports2, module2) {
90308
90597
  };
90309
90598
  });
90310
90599
 
90311
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/parser-async.js
90600
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/parser-async.js
90312
90601
  var require_parser_async = __commonJS(function(exports2, module2) {
90313
90602
  var util = __require("util");
90314
90603
  var zlib = __require("zlib");
@@ -90430,7 +90719,7 @@ var require_parser_async = __commonJS(function(exports2, module2) {
90430
90719
  };
90431
90720
  });
90432
90721
 
90433
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/bitpacker.js
90722
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/bitpacker.js
90434
90723
  var require_bitpacker = __commonJS(function(exports2, module2) {
90435
90724
  var constants = require_constants2();
90436
90725
  module2.exports = function(dataIn, width, height, options) {
@@ -90559,7 +90848,7 @@ var require_bitpacker = __commonJS(function(exports2, module2) {
90559
90848
  };
90560
90849
  });
90561
90850
 
90562
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-pack.js
90851
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-pack.js
90563
90852
  var require_filter_pack = __commonJS(function(exports2, module2) {
90564
90853
  var paethPredictor = require_paeth_predictor();
90565
90854
  function filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {
@@ -90698,7 +90987,7 @@ var require_filter_pack = __commonJS(function(exports2, module2) {
90698
90987
  };
90699
90988
  });
90700
90989
 
90701
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/packer.js
90990
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/packer.js
90702
90991
  var require_packer = __commonJS(function(exports2, module2) {
90703
90992
  var constants = require_constants2();
90704
90993
  var CrcStream = require_crc();
@@ -90786,7 +91075,7 @@ var require_packer = __commonJS(function(exports2, module2) {
90786
91075
  };
90787
91076
  });
90788
91077
 
90789
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/packer-async.js
91078
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/packer-async.js
90790
91079
  var require_packer_async = __commonJS(function(exports2, module2) {
90791
91080
  var util = __require("util");
90792
91081
  var Stream = __require("stream");
@@ -90819,7 +91108,7 @@ var require_packer_async = __commonJS(function(exports2, module2) {
90819
91108
  };
90820
91109
  });
90821
91110
 
90822
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/sync-inflate.js
91111
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/sync-inflate.js
90823
91112
  var require_sync_inflate = __commonJS(function(exports2, module2) {
90824
91113
  var assert = __require("assert").ok;
90825
91114
  var zlib = __require("zlib");
@@ -90938,7 +91227,7 @@ var require_sync_inflate = __commonJS(function(exports2, module2) {
90938
91227
  exports2.inflateSync = inflateSync;
90939
91228
  });
90940
91229
 
90941
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/sync-reader.js
91230
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/sync-reader.js
90942
91231
  var require_sync_reader = __commonJS(function(exports2, module2) {
90943
91232
  var SyncReader = module2.exports = function(buffer) {
90944
91233
  this._buffer = buffer;
@@ -90972,7 +91261,7 @@ var require_sync_reader = __commonJS(function(exports2, module2) {
90972
91261
  };
90973
91262
  });
90974
91263
 
90975
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-parse-sync.js
91264
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/filter-parse-sync.js
90976
91265
  var require_filter_parse_sync = __commonJS(function(exports2) {
90977
91266
  var SyncReader = require_sync_reader();
90978
91267
  var Filter = require_filter_parse();
@@ -90992,7 +91281,7 @@ var require_filter_parse_sync = __commonJS(function(exports2) {
90992
91281
  };
90993
91282
  });
90994
91283
 
90995
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/parser-sync.js
91284
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/parser-sync.js
90996
91285
  var require_parser_sync = __commonJS(function(exports2, module2) {
90997
91286
  var hasSyncZlib = true;
90998
91287
  var zlib = __require("zlib");
@@ -91078,7 +91367,7 @@ var require_parser_sync = __commonJS(function(exports2, module2) {
91078
91367
  };
91079
91368
  });
91080
91369
 
91081
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/packer-sync.js
91370
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/packer-sync.js
91082
91371
  var require_packer_sync = __commonJS(function(exports2, module2) {
91083
91372
  var hasSyncZlib = true;
91084
91373
  var zlib = __require("zlib");
@@ -91111,7 +91400,7 @@ var require_packer_sync = __commonJS(function(exports2, module2) {
91111
91400
  };
91112
91401
  });
91113
91402
 
91114
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/png-sync.js
91403
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/png-sync.js
91115
91404
  var require_png_sync = __commonJS(function(exports2) {
91116
91405
  var parse = require_parser_sync();
91117
91406
  var pack = require_packer_sync();
@@ -91123,7 +91412,7 @@ var require_png_sync = __commonJS(function(exports2) {
91123
91412
  };
91124
91413
  });
91125
91414
 
91126
- // ../../node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/png.js
91415
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/pngjs@5.0.0/node_modules/pngjs/lib/png.js
91127
91416
  var require_png = __commonJS(function(exports2) {
91128
91417
  var util = __require("util");
91129
91418
  var Stream = __require("stream");
@@ -91247,7 +91536,7 @@ var require_png = __commonJS(function(exports2) {
91247
91536
  };
91248
91537
  });
91249
91538
 
91250
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js
91539
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js
91251
91540
  var require_utils2 = __commonJS(function(exports2) {
91252
91541
  function hex2rgba(hex) {
91253
91542
  if (typeof hex === "number") {
@@ -91328,7 +91617,7 @@ var require_utils2 = __commonJS(function(exports2) {
91328
91617
  };
91329
91618
  });
91330
91619
 
91331
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/png.js
91620
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/png.js
91332
91621
  var require_png2 = __commonJS(function(exports2) {
91333
91622
  var fs = __require("fs");
91334
91623
  var PNG = require_png().PNG;
@@ -91395,7 +91684,7 @@ var require_png2 = __commonJS(function(exports2) {
91395
91684
  };
91396
91685
  });
91397
91686
 
91398
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utf8.js
91687
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utf8.js
91399
91688
  var require_utf8 = __commonJS(function(exports2) {
91400
91689
  var Utils = require_utils2();
91401
91690
  var BLOCK_CHAR = {
@@ -91460,7 +91749,7 @@ var require_utf8 = __commonJS(function(exports2) {
91460
91749
  };
91461
91750
  });
91462
91751
 
91463
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/terminal/terminal.js
91752
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/terminal/terminal.js
91464
91753
  var require_terminal = __commonJS(function(exports2) {
91465
91754
  exports2.render = function(qrData, options, cb) {
91466
91755
  const size = qrData.modules.size;
@@ -91489,7 +91778,7 @@ var require_terminal = __commonJS(function(exports2) {
91489
91778
  };
91490
91779
  });
91491
91780
 
91492
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/terminal/terminal-small.js
91781
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/terminal/terminal-small.js
91493
91782
  var require_terminal_small = __commonJS(function(exports2) {
91494
91783
  var backgroundWhite = "\x1B[47m";
91495
91784
  var backgroundBlack = "\x1B[40m";
@@ -91548,7 +91837,7 @@ var require_terminal_small = __commonJS(function(exports2) {
91548
91837
  };
91549
91838
  });
91550
91839
 
91551
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/terminal.js
91840
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/terminal.js
91552
91841
  var require_terminal2 = __commonJS(function(exports2) {
91553
91842
  var big = require_terminal();
91554
91843
  var small = require_terminal_small();
@@ -91560,7 +91849,7 @@ var require_terminal2 = __commonJS(function(exports2) {
91560
91849
  };
91561
91850
  });
91562
91851
 
91563
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js
91852
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js
91564
91853
  var require_svg_tag = __commonJS(function(exports2) {
91565
91854
  var Utils = require_utils2();
91566
91855
  function getColorAttrib(color, attrib) {
@@ -91619,7 +91908,7 @@ var require_svg_tag = __commonJS(function(exports2) {
91619
91908
  };
91620
91909
  });
91621
91910
 
91622
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg.js
91911
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg.js
91623
91912
  var require_svg = __commonJS(function(exports2) {
91624
91913
  var svgTagRenderer = require_svg_tag();
91625
91914
  exports2.render = svgTagRenderer.render;
@@ -91635,7 +91924,7 @@ var require_svg = __commonJS(function(exports2) {
91635
91924
  };
91636
91925
  });
91637
91926
 
91638
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js
91927
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js
91639
91928
  var require_canvas = __commonJS(function(exports2) {
91640
91929
  var Utils = require_utils2();
91641
91930
  function clearCanvas(ctx, canvas, size) {
@@ -91688,7 +91977,7 @@ var require_canvas = __commonJS(function(exports2) {
91688
91977
  };
91689
91978
  });
91690
91979
 
91691
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/browser.js
91980
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/browser.js
91692
91981
  var require_browser = __commonJS(function(exports2) {
91693
91982
  var canPromise = require_can_promise();
91694
91983
  var QRCode = require_qrcode();
@@ -91756,7 +92045,7 @@ var require_browser = __commonJS(function(exports2) {
91756
92045
  });
91757
92046
  });
91758
92047
 
91759
- // ../../node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/server.js
92048
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/qrcode@1.5.4/node_modules/qrcode/lib/server.js
91760
92049
  function checkParams(text, opts, cb) {
91761
92050
  if (typeof text === "undefined") {
91762
92051
  throw new Error("String required as first argument");
@@ -91853,7 +92142,7 @@ var init_qr = __esm(() => {
91853
92142
  init_server();
91854
92143
  });
91855
92144
 
91856
- // ../../node_modules/.bun/picocolors@1.1.1/node_modules/picocolors/picocolors.js
92145
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/picocolors@1.1.1/node_modules/picocolors/picocolors.js
91857
92146
  var require_picocolors = __commonJS(function(exports2, module2) {
91858
92147
  var p = process || {};
91859
92148
  var argv = p.argv || [];
@@ -92148,7 +92437,7 @@ async function promptHidden(question) {
92148
92437
  }
92149
92438
  var init_prompt_hidden = () => {};
92150
92439
 
92151
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/toml.js
92440
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/toml.js
92152
92441
  var exports_toml = {};
92153
92442
  __exportCjs(exports_toml, {
92154
92443
  parse: () => $parse,
@@ -92158,7 +92447,7 @@ __exportCjs(exports_toml, {
92158
92447
  stringify: (value) => $stringify = value
92159
92448
  });
92160
92449
 
92161
- // ../../node_modules/.bun/cac@7.0.0/node_modules/cac/dist/index.js
92450
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/cac@7.0.0/node_modules/cac/dist/index.js
92162
92451
  function toArr(any) {
92163
92452
  return any == null ? [] : Array.isArray(any) ? any : [any];
92164
92453
  }
@@ -93059,6 +93348,34 @@ var PROXY_LOWERCASE_ALIASES = new Set([
93059
93348
  // ../shared/dist/runtime.js
93060
93349
  var DEFAULT_NODE_VERSION_MAJOR = "24";
93061
93350
  var DEFAULT_NODE_VERSION_LABEL = `${DEFAULT_NODE_VERSION_MAJOR} LTS`;
93351
+ // ../shared/dist/secret-source-paths.js
93352
+ var SECRET_BASENAMES = new Set([
93353
+ ".npmrc",
93354
+ ".pypirc",
93355
+ ".netrc",
93356
+ "_netrc",
93357
+ ".git-credentials",
93358
+ ".htpasswd",
93359
+ ".pgpass",
93360
+ ".my.cnf",
93361
+ ".dev.vars",
93362
+ "id_rsa",
93363
+ "id_dsa",
93364
+ "id_ecdsa",
93365
+ "id_ed25519",
93366
+ "credentials.json",
93367
+ "secrets.toml",
93368
+ "wp-config.php"
93369
+ ]);
93370
+ var SECRET_PREFIXES = [".env.", ".dev.vars."];
93371
+ var SECRET_EXTENSIONS = [".pem", ".key", ".p12", ".pfx", ".jks", ".keystore"];
93372
+ var SECRET_DIRS = new Set([".ssh", ".aws", ".gnupg"]);
93373
+ var SECRET_PATH_SUFFIXES = [".docker/config.json", ".kube/config"];
93374
+ var STATIC_CREDENTIAL_PATH_PATTERN = `(?i)(?:^|/)(?:${[
93375
+ ...[...SECRET_BASENAMES, ".env", ...SECRET_DIRS, ...SECRET_PATH_SUFFIXES].map((p) => p.replaceAll(".", "[.]")),
93376
+ ...SECRET_PREFIXES.map((p) => `${p.replaceAll(".", "[.]")}[^/]*`),
93377
+ ...SECRET_EXTENSIONS.map((p) => `[^/]*${p.replaceAll(".", "[.]")}`)
93378
+ ].join("|")})(?:/|$)`;
93062
93379
  // ../shared/dist/signup-day.js
93063
93380
  var stockholmDate = new Intl.DateTimeFormat("sv-SE", {
93064
93381
  timeZone: "Europe/Stockholm",
@@ -93076,6 +93393,47 @@ var stockholmClock = new Intl.DateTimeFormat("en-GB", {
93076
93393
  second: "2-digit",
93077
93394
  hourCycle: "h23"
93078
93395
  });
93396
+ // ../shared/dist/static-platform-paths.js
93397
+ var STATIC_PLATFORM_ROOT_PATTERNS = [
93398
+ "percher.toml",
93399
+ ".percherignore",
93400
+ "pb",
93401
+ "Dockerfile",
93402
+ "Caddyfile",
93403
+ ".git",
93404
+ ".env",
93405
+ ".env.*",
93406
+ ".percher-*"
93407
+ ];
93408
+ var STATIC_PLATFORM_PATH_REGEX = `(?i)(?:^/+(?:${STATIC_PLATFORM_ROOT_PATTERNS.map((p) => p.replaceAll(".", "[.]").replaceAll("*", "[^/]*")).join("|")})(?:/|$)|${STATIC_CREDENTIAL_PATH_PATTERN.slice(4)})`;
93409
+ var reserved = new RegExp(STATIC_PLATFORM_PATH_REGEX.slice(4), "i");
93410
+ function isStaticPlatformPath(path) {
93411
+ const segments = [];
93412
+ for (const segment of path.replaceAll("\\", "/").split("/")) {
93413
+ if (!segment || segment === ".")
93414
+ continue;
93415
+ if (segment === "..")
93416
+ segments.pop();
93417
+ else
93418
+ segments.push(segment);
93419
+ }
93420
+ return reserved.test(`/${segments.join("/")}`);
93421
+ }
93422
+ function normalizeStaticOutputDir(output) {
93423
+ const value = output ?? "";
93424
+ if (typeof value !== "string" || value.startsWith("/") || value.includes("\\") || /^[a-z]:/i.test(value) || [...value].some((ch) => ch.charCodeAt(0) < 32 || ch.charCodeAt(0) === 127) || value.split("/").includes(".."))
93425
+ throw new Error("Static output must stay inside the project as a relative directory.");
93426
+ const normalized = value.split("/").filter((p) => p && p !== ".").join("/") || ".";
93427
+ if (isStaticPlatformPath(normalized))
93428
+ throw new Error("Static output cannot select reserved platform content.");
93429
+ return normalized;
93430
+ }
93431
+ function staticPlatformDenyDirectives() {
93432
+ return [
93433
+ `@percher_platform path_regexp percher_platform ${STATIC_PLATFORM_PATH_REGEX}`,
93434
+ "respond @percher_platform 404"
93435
+ ];
93436
+ }
93079
93437
  // ../shared/dist/switches.js
93080
93438
  var ONE = ["1"];
93081
93439
  var TRUE = ["true"];
@@ -93090,6 +93448,10 @@ var bool = (name, readers, purpose, enabled, def = "disabled", disabled = OFF_SP
93090
93448
  default: def
93091
93449
  });
93092
93450
  var SWITCHES = [
93451
+ bool("PERCHER_PB_CREDENTIAL_LEDGER", ["api", "worker"], "serialize owner PocketBase reset with durable credential evidence", ONE, "disabled"),
93452
+ bool("PERCHER_EXPORT_V2", ["api", "dashboard"], "prepare verified encrypted exports before separate one-use binary delivery", ONE, "disabled"),
93453
+ bool("PERCHER_BACKUP_VOLUME_REQUIRED", ["api", "worker"], "require verified backup Volume identity; missing or invalid state never falls back to root storage", ONE, "disabled", ["0"]),
93454
+ bool("PERCHER_DOCKER_REQUIRE_SECRET_MOUNTS", ["api", "worker"], "refuse private Docker build arguments after owners migrate to secret mounts (rollout gate; default off)", ONE),
93093
93455
  bool("PERCHER_NODE_USE_DOCKERFILE", ["api"], 'Node/Bun apps build through the Percher Dockerfile instead of Nixpacks (default; "0" is the emergency lever)', ONE, "enabled", ["0"]),
93094
93456
  bool("PERCHER_PYTHON_USE_DOCKERFILE", ["api"], 'Python apps build through the Percher Dockerfile instead of Nixpacks (default; "0" is the emergency lever)', ONE, "enabled", ["0"]),
93095
93457
  bool("PERCHER_OPS_BUILD_TRIAGE", ["api"], "append the internal cold-build triage block to build logs", ONE),
@@ -93231,11 +93593,11 @@ function generateName(input) {
93231
93593
  // ../toml/dist/parse.js
93232
93594
  import { readFile } from "node:fs/promises";
93233
93595
 
93234
- // ../../node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/toml.js
93596
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/@iarna+toml@2.2.5/node_modules/@iarna/toml/toml.js
93235
93597
  var $parse = require_parse();
93236
93598
  var $stringify = require_stringify();
93237
93599
 
93238
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/core.js
93600
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/core.js
93239
93601
  var NEVER = Object.freeze({
93240
93602
  status: "aborted"
93241
93603
  });
@@ -93311,7 +93673,7 @@ function config(newConfig) {
93311
93673
  Object.assign(globalConfig, newConfig);
93312
93674
  return globalConfig;
93313
93675
  }
93314
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/util.js
93676
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/util.js
93315
93677
  function getEnumValues(entries) {
93316
93678
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
93317
93679
  const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -93734,7 +94096,7 @@ function issue(...args) {
93734
94096
  return { ...iss };
93735
94097
  }
93736
94098
 
93737
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/errors.js
94099
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/errors.js
93738
94100
  var initializer = (inst, def) => {
93739
94101
  inst.name = "$ZodError";
93740
94102
  Object.defineProperty(inst, "_zod", {
@@ -93800,7 +94162,7 @@ function formatError(error, mapper = (issue) => issue.message) {
93800
94162
  return fieldErrors;
93801
94163
  }
93802
94164
 
93803
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/parse.js
94165
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/parse.js
93804
94166
  var _parse = (_Err) => (schema, value, _ctx, _params) => {
93805
94167
  const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
93806
94168
  const result = schema._zod.run({ value, issues: [] }, ctx);
@@ -93877,7 +94239,7 @@ var _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {
93877
94239
  var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
93878
94240
  return _safeParseAsync(_Err)(schema, value, _ctx);
93879
94241
  };
93880
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/regexes.js
94242
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/regexes.js
93881
94243
  var cuid = /^[cC][^\s-]{8,}$/;
93882
94244
  var cuid2 = /^[0-9a-z]+$/;
93883
94245
  var ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;
@@ -93933,7 +94295,7 @@ var boolean = /^(?:true|false)$/i;
93933
94295
  var lowercase = /^[^A-Z]*$/;
93934
94296
  var uppercase = /^[^a-z]*$/;
93935
94297
 
93936
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/checks.js
94298
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/checks.js
93937
94299
  var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
93938
94300
  var _a;
93939
94301
  inst._zod ?? (inst._zod = {});
@@ -94322,7 +94684,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins
94322
94684
  };
94323
94685
  });
94324
94686
 
94325
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/doc.js
94687
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/doc.js
94326
94688
  class Doc {
94327
94689
  constructor(args = []) {
94328
94690
  this.content = [];
@@ -94360,14 +94722,14 @@ class Doc {
94360
94722
  }
94361
94723
  }
94362
94724
 
94363
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/versions.js
94725
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/versions.js
94364
94726
  var version = {
94365
94727
  major: 4,
94366
94728
  minor: 3,
94367
94729
  patch: 6
94368
94730
  };
94369
94731
 
94370
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/schemas.js
94732
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/schemas.js
94371
94733
  var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
94372
94734
  var _a;
94373
94735
  inst ?? (inst = {});
@@ -95669,7 +96031,7 @@ function handleRefineResult(result, payload, input, inst) {
95669
96031
  payload.issues.push(issue(_iss));
95670
96032
  }
95671
96033
  }
95672
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/en.js
96034
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/en.js
95673
96035
  var error = () => {
95674
96036
  const Sizable = {
95675
96037
  string: { unit: "characters", verb: "to have" },
@@ -95775,7 +96137,7 @@ function en_default() {
95775
96137
  localeError: error()
95776
96138
  };
95777
96139
  }
95778
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/registries.js
96140
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/registries.js
95779
96141
  var _a;
95780
96142
  var $output = Symbol("ZodOutput");
95781
96143
  var $input = Symbol("ZodInput");
@@ -95825,7 +96187,7 @@ function registry() {
95825
96187
  }
95826
96188
  (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
95827
96189
  var globalRegistry = globalThis.__zod_globalRegistry;
95828
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/api.js
96190
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/api.js
95829
96191
  function _string(Class, params) {
95830
96192
  return new Class({
95831
96193
  type: "string",
@@ -96274,7 +96636,7 @@ function _check(fn, params) {
96274
96636
  ch._zod.check = fn;
96275
96637
  return ch;
96276
96638
  }
96277
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js
96639
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js
96278
96640
  function initializeContext(params) {
96279
96641
  let target = params?.target ?? "draft-2020-12";
96280
96642
  if (target === "draft-4")
@@ -96619,7 +96981,7 @@ var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) =
96619
96981
  extractDefs(ctx, schema);
96620
96982
  return finalize(ctx, schema);
96621
96983
  };
96622
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js
96984
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js
96623
96985
  var formatMap = {
96624
96986
  guid: "uuid",
96625
96987
  url: "uri",
@@ -96945,7 +97307,7 @@ var optionalProcessor = (schema, ctx, _json, params) => {
96945
97307
  const seen = ctx.seen.get(schema);
96946
97308
  seen.ref = def.innerType;
96947
97309
  };
96948
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/iso.js
97310
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/iso.js
96949
97311
  var ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => {
96950
97312
  $ZodISODateTime.init(inst, def);
96951
97313
  ZodStringFormat.init(inst, def);
@@ -96975,7 +97337,7 @@ function duration2(params) {
96975
97337
  return _isoDuration(ZodISODuration, params);
96976
97338
  }
96977
97339
 
96978
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/errors.js
97340
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/errors.js
96979
97341
  var initializer2 = (inst, issues) => {
96980
97342
  $ZodError.init(inst, issues);
96981
97343
  inst.name = "ZodError";
@@ -97010,7 +97372,7 @@ var ZodRealError = $constructor("ZodError", initializer2, {
97010
97372
  Parent: Error
97011
97373
  });
97012
97374
 
97013
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/parse.js
97375
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/parse.js
97014
97376
  var parse3 = /* @__PURE__ */ _parse(ZodRealError);
97015
97377
  var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
97016
97378
  var safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -97024,7 +97386,7 @@ var safeDecode = /* @__PURE__ */ _safeDecode(ZodRealError);
97024
97386
  var safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
97025
97387
  var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
97026
97388
 
97027
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/schemas.js
97389
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/schemas.js
97028
97390
  var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
97029
97391
  $ZodType.init(inst, def);
97030
97392
  Object.assign(inst["~standard"], {
@@ -97629,7 +97991,7 @@ function refine(fn, _params = {}) {
97629
97991
  function superRefine(fn) {
97630
97992
  return _superRefine(fn);
97631
97993
  }
97632
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/compat.js
97994
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/compat.js
97633
97995
  var ZodIssueCode = {
97634
97996
  invalid_type: "invalid_type",
97635
97997
  too_big: "too_big",
@@ -97645,7 +98007,7 @@ var ZodIssueCode = {
97645
98007
  };
97646
98008
  var ZodFirstPartyTypeKind;
97647
98009
  (function(ZodFirstPartyTypeKind) {})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
97648
- // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/external.js
98010
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/external.js
97649
98011
  config(en_default());
97650
98012
  // ../toml/dist/schema.js
97651
98013
  var appSchema = object({
@@ -98171,7 +98533,7 @@ import { posix } from "node:path";
98171
98533
  import { Transform } from "node:stream";
98172
98534
  import { createGunzip } from "node:zlib";
98173
98535
 
98174
- // ../../node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/index.js
98536
+ // ../../../../../../../../../../../home/matti/percher-ci-b2/node_modules/.bun/tar-stream@3.1.9/node_modules/tar-stream/index.js
98175
98537
  var $extract = require_extract();
98176
98538
  var $pack = require_pack();
98177
98539
 
@@ -99232,7 +99594,7 @@ import { join as join9, resolve as resolve5 } from "node:path";
99232
99594
  // ../core/dist/templates.js
99233
99595
  import { existsSync as existsSync5, mkdirSync as mkdirSync6, readdirSync, readFileSync as readFileSync6, statSync, writeFileSync as writeFileSync6 } from "node:fs";
99234
99596
  import { basename as basename2, join as join8, normalize, relative as relative2, resolve as resolve4 } from "node:path";
99235
- var __dirname = "C:\\dev\\Percher-npm-1.4.0-20261023\\packages\\core\\dist";
99597
+ var __dirname = "/mnt/c/dev/Percher-lc-evidence/hardening-20261031/security-assessment/npm-release/ci/linux-source/packages/core/dist";
99236
99598
  var TEMPLATES_DIR = resolve4(import.meta.dirname ?? __dirname, "../templates");
99237
99599
  var PLACEHOLDER = "__APP_NAME__";
99238
99600
  function listTemplates() {
@@ -99621,6 +99983,30 @@ init_dist();
99621
99983
 
99622
99984
  // ../core/dist/structured-error-codes.js
99623
99985
  var MAPPINGS = {
99986
+ APP_IMAGE_VOLUME_UNSUPPORTED: {
99987
+ errorClass: "app_image_volume_unsupported",
99988
+ phase: "start",
99989
+ cause: "app_image_volume_unsupported",
99990
+ title: "Unsupported image volumes",
99991
+ explanation: () => "The image declares volumes outside Percher's managed mount destinations.",
99992
+ suggestion: "Check the Dockerfile and base image. Use an image that declares VOLUME only at /app/data, /tmp or /var/tmp. /app/data is persistent; /tmp and /var/tmp are bounded temporary storage. Remove other declarations or choose another base image, then publish again."
99993
+ },
99994
+ IMAGE_MOUNT_ATTESTATION_UNAVAILABLE: {
99995
+ errorClass: "infra_unavailable",
99996
+ phase: "infra",
99997
+ cause: "image_mount_attestation_unavailable",
99998
+ title: "Image mount verification unavailable",
99999
+ explanation: () => "Percher could not verify the image and managed mounts. This is a platform failure.",
100000
+ suggestion: "Retry later. If it persists, contact support."
100001
+ },
100002
+ BUILD_SECRETS_MIGRATION_REQUIRED: {
100003
+ errorClass: "build_secret_migration",
100004
+ phase: "build",
100005
+ cause: "docker_build_secret_migration",
100006
+ title: "Migrate Dockerfile build secrets",
100007
+ explanation: () => "Percher refused private Docker build arguments because they can persist in image history and cache.",
100008
+ suggestion: "Replace private ARG/ENV consumers with RUN --mount=type=secret,id=KEY,env=KEY,required=true. Add # percher: build-secrets=mount after all parser directives, before the first instruction; keep the keys in [build] pass_env. Do not print or save values. See https://percher.app/docs/env-vars#build-time."
100009
+ },
99624
100010
  SECURITY_GATE_BLOCKED: {
99625
100011
  errorClass: "security_blocked",
99626
100012
  phase: "build",
@@ -100063,6 +100449,16 @@ function unprovenPlatformClaim(failure) {
100063
100449
  }
100064
100450
  function recoveryFromErrorClass(errorClass, failure) {
100065
100451
  switch (errorClass) {
100452
+ case "app_image_volume_unsupported":
100453
+ return recoveryAsk({
100454
+ prompt: "The image declares unsupported volumes. Check the Dockerfile and base image: VOLUME may name only /app/data, /tmp or /var/tmp. /app/data is persistent; /tmp and /var/tmp are bounded temporary storage. Remove other declarations or choose another base image before publishing again.",
100455
+ reasonCode: "app_image_volume_unsupported"
100456
+ });
100457
+ case "build_secret_migration":
100458
+ return recoveryAsk({
100459
+ prompt: "This Dockerfile needs build-secret migration. Replace each private ARG/ENV consumer with RUN --mount=type=secret,id=KEY,env=KEY,required=true, then add # percher: build-secrets=mount after all parser directives, before the first instruction. Keep the keys in [build] pass_env. Do not print or save secret values. Review https://percher.app/docs/env-vars#build-time before publishing again.",
100460
+ reasonCode: "build_failed"
100461
+ });
100066
100462
  case "security_blocked":
100067
100463
  return recoveryAsk({
100068
100464
  prompt: "Publication was blocked by security policy. Review the vulnerability details, update affected app dependencies or wait for Percher's platform fix before publishing again.",
@@ -101087,8 +101483,8 @@ import { join as join13 } from "node:path";
101087
101483
  // ../core/dist/tarball.js
101088
101484
  var import_ignore = __toESM(require_ignore(), 1);
101089
101485
  import { createHash as createHash2 } from "node:crypto";
101090
- import { existsSync as existsSync6, readdirSync as readdirSync2, readFileSync as readFileSync7, statSync as statSync2 } from "node:fs";
101091
- import { join as join11, relative as relative4, sep as sep2 } from "node:path";
101486
+ import { closeSync as closeSync2, constants, existsSync as existsSync6, fstatSync, lstatSync as lstatSync2, openSync as openSync2, readdirSync as readdirSync2, readFileSync as readFileSync7, realpathSync } from "node:fs";
101487
+ import { isAbsolute as isAbsolute2, join as join11, relative as relative4, sep as sep2 } from "node:path";
101092
101488
  import { Readable } from "node:stream";
101093
101489
  import { createGzip } from "node:zlib";
101094
101490
  function isFilesOptions(options) {
@@ -101109,6 +101505,31 @@ var DEFAULT_IGNORE = [
101109
101505
  ".DS_Store"
101110
101506
  ];
101111
101507
  var ALWAYS_IGNORE_SECRETS = [".env", ".env.*"];
101508
+ function inspectSourcePath(root, path, entry = lstatSync2(path)) {
101509
+ if (entry.isSymbolicLink()) {
101510
+ throw new Error(`Refusing symlink in publish source: ${relative4(root, path)}`);
101511
+ }
101512
+ const rel = relative4(root, realpathSync(path));
101513
+ if (isAbsolute2(rel) || rel === ".." || rel.startsWith(`..${sep2}`)) {
101514
+ throw new Error("Publish source must stay inside the selected project");
101515
+ }
101516
+ return entry;
101517
+ }
101518
+ function readSourceFile(root, path) {
101519
+ const entry = inspectSourcePath(root, path);
101520
+ if (!entry.isFile())
101521
+ throw new Error("Publish source must contain regular files");
101522
+ const fd = openSync2(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
101523
+ try {
101524
+ const opened = fstatSync(fd);
101525
+ if (!opened.isFile() || opened.dev !== entry.dev || opened.ino !== entry.ino) {
101526
+ throw new Error("Publish source changed while packaging");
101527
+ }
101528
+ return readFileSync7(fd);
101529
+ } finally {
101530
+ closeSync2(fd);
101531
+ }
101532
+ }
101112
101533
  function* walk(dir, baseDir, ig) {
101113
101534
  const entries = readdirSync2(dir);
101114
101535
  for (const name of entries) {
@@ -101116,10 +101537,11 @@ function* walk(dir, baseDir, ig) {
101116
101537
  const rel = relative4(baseDir, full).split(sep2).join("/");
101117
101538
  if (ig.ignores(rel))
101118
101539
  continue;
101119
- const stats = statSync2(full);
101540
+ const stats = lstatSync2(full);
101541
+ if ((stats.isDirectory() || stats.isSymbolicLink()) && ig.ignores(`${rel}/`))
101542
+ continue;
101543
+ inspectSourcePath(baseDir, full, stats);
101120
101544
  if (stats.isDirectory()) {
101121
- if (ig.ignores(`${rel}/`))
101122
- continue;
101123
101545
  yield* walk(full, baseDir, ig);
101124
101546
  } else if (stats.isFile()) {
101125
101547
  yield rel;
@@ -101155,6 +101577,9 @@ function buildTarball(fileBuffers) {
101155
101577
  contentHasher.update(`PATH:${f.path.length}:${f.path}
101156
101578
  `);
101157
101579
  contentHasher.update(`SIZE:${f.size}
101580
+ `);
101581
+ if (f.mode !== undefined)
101582
+ contentHasher.update(`MODE:${f.mode.toString(8)}
101158
101583
  `);
101159
101584
  contentHasher.update(f.data);
101160
101585
  contentHasher.update(`
@@ -101165,7 +101590,11 @@ function buildTarball(fileBuffers) {
101165
101590
  (async () => {
101166
101591
  for (const file of fileBuffers) {
101167
101592
  await new Promise((resolve, reject) => {
101168
- pack.entry({ name: file.path, size: file.data.length }, file.data, (err) => err ? reject(err) : resolve());
101593
+ pack.entry({
101594
+ name: file.path,
101595
+ size: file.data.length,
101596
+ ...file.mode !== undefined ? { mode: file.mode } : {}
101597
+ }, file.data, (err) => err ? reject(err) : resolve());
101169
101598
  });
101170
101599
  }
101171
101600
  pack.finalize();
@@ -101199,22 +101628,23 @@ async function createTarball(options) {
101199
101628
  if (isFilesOptions(options)) {
101200
101629
  return createTarballFromFiles(options.files, options.config);
101201
101630
  }
101631
+ const root = realpathSync(options.cwd);
101202
101632
  const ig = import_ignore.default();
101203
101633
  ig.add(DEFAULT_IGNORE);
101204
- const gitignorePath = join11(options.cwd, ".gitignore");
101634
+ const gitignorePath = join11(root, ".gitignore");
101205
101635
  if (existsSync6(gitignorePath)) {
101206
- ig.add(readFileSync7(gitignorePath, "utf8"));
101636
+ ig.add(readSourceFile(root, gitignorePath).toString("utf8"));
101207
101637
  }
101208
- const percherignorePath = join11(options.cwd, ".percherignore");
101638
+ const percherignorePath = join11(root, ".percherignore");
101209
101639
  if (existsSync6(percherignorePath)) {
101210
- ig.add(readFileSync7(percherignorePath, "utf8"));
101640
+ ig.add(readSourceFile(root, percherignorePath).toString("utf8"));
101211
101641
  }
101212
101642
  if (options.extraIgnore)
101213
101643
  ig.add(options.extraIgnore);
101214
101644
  ig.add(ALWAYS_IGNORE_SECRETS);
101215
101645
  const fileBuffers = [];
101216
- for (const rel of walk(options.cwd, options.cwd, ig)) {
101217
- const data = readFileSync7(join11(options.cwd, rel));
101646
+ for (const rel of walk(root, root, ig)) {
101647
+ const data = readSourceFile(root, join11(root, rel));
101218
101648
  fileBuffers.push({ path: rel, size: data.length, data });
101219
101649
  }
101220
101650
  return buildTarball(fileBuffers);
@@ -101229,14 +101659,21 @@ function createTarballFromFiles(files, _config) {
101229
101659
  }
101230
101660
  seen.add(path);
101231
101661
  const data = Buffer.from(file.data);
101232
- fileBuffers.push({ path, size: data.length, data });
101662
+ if (file.mode !== undefined && file.mode !== 420 && file.mode !== 493)
101663
+ throw new Error("unsupported source file mode");
101664
+ fileBuffers.push({
101665
+ path,
101666
+ size: data.length,
101667
+ data,
101668
+ ...file.mode !== undefined ? { mode: file.mode } : {}
101669
+ });
101233
101670
  }
101234
101671
  return buildTarball(fileBuffers);
101235
101672
  }
101236
101673
 
101237
101674
  // ../core/dist/watcher.js
101238
101675
  var import_ignore2 = __toESM(require_ignore(), 1);
101239
- import { existsSync as existsSync7, lstatSync as lstatSync2, readFileSync as readFileSync8, watch } from "node:fs";
101676
+ import { existsSync as existsSync7, lstatSync as lstatSync3, readFileSync as readFileSync8, watch } from "node:fs";
101240
101677
  import { join as join12, sep as sep3 } from "node:path";
101241
101678
  var DEFAULT_IGNORE2 = [
101242
101679
  "node_modules",
@@ -101272,7 +101709,7 @@ function createWatcher(options) {
101272
101709
  if (ig.ignores(rel))
101273
101710
  return;
101274
101711
  try {
101275
- if (lstatSync2(join12(options.cwd, rel)).isDirectory() && ig.ignores(`${rel}/`))
101712
+ if (lstatSync3(join12(options.cwd, rel)).isDirectory() && ig.ignores(`${rel}/`))
101276
101713
  return;
101277
101714
  } catch {}
101278
101715
  pending.add(rel);
@@ -101843,6 +102280,10 @@ async function doctor(ctx, input = {}) {
101843
102280
  checks.push({ name: "App", status: "skip", message: reason });
101844
102281
  return summarize(checks, { appProvided: !!input.app, tomlProblems });
101845
102282
  }
102283
+ return doctorServer(ctx, { ...input, app: appName }, checks, !!input.app);
102284
+ }
102285
+ async function doctorServer(ctx, input, checks = [], appProvided = true) {
102286
+ const appName = input.app;
101846
102287
  let appStatus;
101847
102288
  let lastDeployStatus;
101848
102289
  let lastDeployId;
@@ -102112,7 +102553,7 @@ ${rc.errors.map((e) => ` • [${e.kind}] ${e.text}${e.url ? ` (${e.url}${e.line
102112
102553
  }
102113
102554
  return summarize(checks, {
102114
102555
  appName,
102115
- appProvided: !!input.app,
102556
+ appProvided,
102116
102557
  appStatus,
102117
102558
  lastDeployStatus,
102118
102559
  lastDeployId,
@@ -102684,10 +103125,11 @@ async function envList(ctx, input = {}) {
102684
103125
  return { values, detailed };
102685
103126
  }
102686
103127
  // ../core/dist/commands/export.js
102687
- import { randomUUID as randomUUID2 } from "node:crypto";
103128
+ init_dist();
103129
+ import { createHash as createHash3, randomUUID as randomUUID2 } from "node:crypto";
102688
103130
  import { createWriteStream as createWriteStream2 } from "node:fs";
102689
103131
  import { rename as rename2, unlink as unlink2 } from "node:fs/promises";
102690
- import { isAbsolute as isAbsolute2, resolve as resolvePath } from "node:path";
103132
+ import { isAbsolute as isAbsolute3, resolve as resolvePath } from "node:path";
102691
103133
  var exportInputSchema = object({
102692
103134
  app: string2().optional(),
102693
103135
  out: string2().optional(),
@@ -102707,9 +103149,10 @@ function resolveAppName3(ctx, provided) {
102707
103149
  }
102708
103150
  return name;
102709
103151
  }
102710
- async function streamToFile(outPath, source) {
103152
+ async function streamToFile(outPath, source, options) {
103153
+ options?.signal?.throwIfAborted();
102711
103154
  const tmpPath = `${outPath}.part-${randomUUID2()}`;
102712
- const out = createWriteStream2(tmpPath);
103155
+ const out = createWriteStream2(tmpPath, { flags: "wx", mode: 384 });
102713
103156
  const reader = source.getReader();
102714
103157
  const closed = new Promise((resolve) => out.once("close", () => resolve()));
102715
103158
  let onWriteError;
@@ -102718,14 +103161,31 @@ async function streamToFile(outPath, source) {
102718
103161
  });
102719
103162
  out.once("error", onWriteError);
102720
103163
  writeFailed.catch(() => {});
103164
+ const hash = options ? createHash3("sha256") : undefined;
103165
+ const abort = () => {
103166
+ const reason = options?.signal?.reason instanceof Error ? options.signal.reason : new Error("Export aborted");
103167
+ out.destroy(reason);
103168
+ reader.cancel(reason).catch(() => {});
103169
+ };
103170
+ options?.signal?.addEventListener("abort", abort, { once: true });
103171
+ if (options?.signal?.aborted)
103172
+ abort();
102721
103173
  let bytes = 0;
102722
103174
  try {
102723
103175
  for (;; ) {
102724
103176
  const { done, value } = await Promise.race([reader.read(), writeFailed]);
103177
+ options?.signal?.throwIfAborted();
102725
103178
  if (done)
102726
103179
  break;
102727
103180
  if (value && value.byteLength > 0) {
103181
+ if (options && value.byteLength > options.bytes - bytes)
103182
+ throw new PercherApiError("Export size did not match its verified header.", {
103183
+ status: 502,
103184
+ code: "EXPORT_INTEGRITY_FAILED"
103185
+ });
102728
103186
  bytes += value.byteLength;
103187
+ hash?.update(value);
103188
+ options?.signal?.throwIfAborted();
102729
103189
  if (!out.write(value)) {
102730
103190
  await Promise.race([
102731
103191
  new Promise((resolve) => out.once("drain", resolve)),
@@ -102734,15 +103194,24 @@ async function streamToFile(outPath, source) {
102734
103194
  }
102735
103195
  }
102736
103196
  }
103197
+ options?.signal?.throwIfAborted();
102737
103198
  await new Promise((resolve, reject) => {
102738
103199
  out.end((err) => err ? reject(err) : resolve());
102739
103200
  });
102740
103201
  await closed;
103202
+ options?.signal?.throwIfAborted();
103203
+ if (options && (bytes !== options.bytes || hash?.digest("hex") !== options.sha256))
103204
+ throw new PercherApiError("Export checksum or size verification failed. The previous file was preserved.", { status: 502, code: "EXPORT_INTEGRITY_FAILED" });
102741
103205
  } catch (err) {
103206
+ reader.cancel().catch(() => {});
102742
103207
  out.destroy();
102743
103208
  await closed;
102744
103209
  await unlink2(tmpPath).catch(() => {});
103210
+ options?.signal?.throwIfAborted();
102745
103211
  throw err;
103212
+ } finally {
103213
+ options?.signal?.removeEventListener("abort", abort);
103214
+ reader.releaseLock();
102746
103215
  }
102747
103216
  try {
102748
103217
  await rename2(tmpPath, outPath);
@@ -102753,35 +103222,93 @@ async function streamToFile(outPath, source) {
102753
103222
  return { bytes };
102754
103223
  }
102755
103224
  function resolveOutPath(ctxCwd, filename) {
102756
- if (isAbsolute2(filename))
103225
+ if (isAbsolute3(filename))
102757
103226
  return filename;
102758
103227
  return resolvePath(ctxCwd, filename);
102759
103228
  }
102760
103229
  async function exportApp(ctx, input) {
102761
103230
  const name = resolveAppName3(ctx, input.app);
102762
- const mint = await ctx.client.export.mint(name, { deliveryKind: input.deliveryKind });
102763
- const dl = await ctx.client.export.download(mint.downloadUrl);
102764
- if (!dl.body) {
102765
- throw new PercherCoreError("Export download returned an empty body", {
102766
- code: "export.empty-body",
102767
- hint: "Try again — the link is single-use, so a new mint is required."
103231
+ const started = Date.now();
103232
+ const controller = new AbortController;
103233
+ const expired = () => controller.abort(new PercherApiError("Export preparation expired. Start a new export.", {
103234
+ status: 410,
103235
+ code: "EXPORT_EXPIRED"
103236
+ }));
103237
+ let timer = setTimeout(expired, 900000);
103238
+ let response;
103239
+ try {
103240
+ const mint = await ctx.client.export.mintV2(name, {
103241
+ deliveryKind: input.deliveryKind,
103242
+ signal: controller.signal
103243
+ });
103244
+ const originalDeadline = Date.parse(mint.expiresAt);
103245
+ const localDeadline = Math.min(originalDeadline, started + 900000);
103246
+ clearTimeout(timer);
103247
+ if (localDeadline <= Date.now())
103248
+ expired();
103249
+ else
103250
+ timer = setTimeout(expired, localDeadline - Date.now());
103251
+ controller.signal.throwIfAborted();
103252
+ let state = await ctx.client.export.prepareV2(mint.preparationToken, controller.signal);
103253
+ let revision = -1;
103254
+ let polls = 0;
103255
+ for (;; ) {
103256
+ controller.signal.throwIfAborted();
103257
+ if (Date.now() >= localDeadline) {
103258
+ expired();
103259
+ controller.signal.throwIfAborted();
103260
+ }
103261
+ if (state.operationId !== mint.operationId || state.deadline !== originalDeadline || state.revision < revision)
103262
+ throw new PercherApiError("Export preparation status changed unexpectedly.", {
103263
+ status: 502,
103264
+ code: "EXPORT_INVALID_RESPONSE"
103265
+ });
103266
+ revision = state.revision;
103267
+ if (state.state === "READY")
103268
+ break;
103269
+ if (state.state === "CLEANUP_REQUIRED")
103270
+ throw new PercherApiError("Export preparation requires cleanup. Contact support before retrying.", { status: 409, code: "EXPORT_CLEANUP_REQUIRED" });
103271
+ if (state.state === "NOT_REQUESTED")
103272
+ throw new PercherApiError("Export preparation was not queued. Retry later.", {
103273
+ status: 409,
103274
+ code: "EXPORT_NOT_REQUESTED"
103275
+ });
103276
+ if (++polls > 900) {
103277
+ expired();
103278
+ controller.signal.throwIfAborted();
103279
+ }
103280
+ await abortableSleep(Math.min(1000, localDeadline - Date.now()), controller.signal);
103281
+ controller.signal.throwIfAborted();
103282
+ state = await ctx.client.export.statusV2(mint.preparationToken, controller.signal);
103283
+ }
103284
+ const grant = await ctx.client.export.grantV2(mint.preparationToken, controller.signal);
103285
+ if (Date.parse(grant.expiresAt) > originalDeadline)
103286
+ throw new PercherApiError("Export grant exceeded the preparation deadline.", {
103287
+ status: 502,
103288
+ code: "EXPORT_INVALID_RESPONSE"
103289
+ });
103290
+ const download = await ctx.client.export.downloadV2(grant.downloadUrl, controller.signal);
103291
+ response = download.response;
103292
+ if (!response.body)
103293
+ throw new PercherCoreError("Export download returned an empty body", {
103294
+ code: "export.empty-body"
103295
+ });
103296
+ const headerName = response.headers.get("Content-Disposition")?.match(/filename="?([^";]+)"?/)?.[1];
103297
+ const safeHeader = headerName && /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(headerName) ? headerName : undefined;
103298
+ const fallback = `${name.replace(/[^A-Za-z0-9._-]/g, "_")}-export.tar.gz`;
103299
+ const outPath = resolveOutPath(ctx.cwd, input.out ?? safeHeader ?? fallback);
103300
+ const { bytes } = await streamToFile(outPath, response.body, {
103301
+ signal: controller.signal,
103302
+ bytes: download.bytes,
103303
+ sha256: download.sha256
102768
103304
  });
103305
+ return { appName: name, outPath, bytes, expiresAt: mint.expiresAt, includedSecrets: false };
103306
+ } finally {
103307
+ clearTimeout(timer);
103308
+ controller.abort();
103309
+ if (response?.body && !response.body.locked)
103310
+ response.body.cancel().catch(() => {});
102769
103311
  }
102770
- const filenameFromHeader = (() => {
102771
- const cd = dl.headers.get("Content-Disposition") ?? "";
102772
- const m = cd.match(/filename="?([^";]+)"?/);
102773
- return m?.[1];
102774
- })();
102775
- const filename = input.out ?? filenameFromHeader ?? `${name}-export.tar.gz`;
102776
- const outPath = resolveOutPath(ctx.cwd, filename);
102777
- const { bytes } = await streamToFile(outPath, dl.body);
102778
- return {
102779
- appName: name,
102780
- outPath,
102781
- bytes,
102782
- expiresAt: mint.expiresAt,
102783
- includedSecrets: false
102784
- };
102785
103312
  }
102786
103313
  async function exportGitBundle(ctx, input) {
102787
103314
  const name = resolveAppName3(ctx, input.app);
@@ -103136,6 +103663,16 @@ var INIT_TEMPLATE_FRAMEWORKS = new Set([
103136
103663
  "vite"
103137
103664
  ]);
103138
103665
  function renderStaticFrameworkDockerfile(input) {
103666
+ const outputDir = normalizeStaticOutputDir(input.outputDir);
103667
+ const sanitize = [
103668
+ 'const fs=require("node:fs"),path=require("node:path")',
103669
+ "const root=fs.realpathSync(process.argv[1]),dir=fs.realpathSync(process.argv[2]),dest=process.argv[3]",
103670
+ `const deny=new RegExp(${JSON.stringify(STATIC_PLATFORM_PATH_REGEX.slice(4))},"i")`,
103671
+ 'const reserved=p=>deny.test("/"+p.split(path.sep).join("/"))',
103672
+ 'if((dir!==root&&!dir.startsWith(root+path.sep))||reserved(path.relative(root,dir)))throw Error("Static output escapes the project or selects platform content")',
103673
+ 'if(fs.existsSync(dest))throw Error("Reserved static staging directory already exists")',
103674
+ 'fs.cpSync(dir,dest,{recursive:true,filter:p=>{if(reserved(path.relative(dir,p))||reserved(path.relative(root,p)))return false;if(fs.lstatSync(p).isSymbolicLink())throw Error("Static content cannot contain symlinks");return true}})'
103675
+ ].join(";");
103139
103676
  return `# Multi-stage build: a Bun stage compiles the static bundle, then a
103140
103677
  # minimal Caddy image serves it. This project uses runtime = "docker"
103141
103678
  # (not "static") because Percher's static runtime serves pre-built
@@ -103148,27 +103685,26 @@ WORKDIR /app
103148
103685
  COPY . .
103149
103686
  RUN bun install && bun run build
103150
103687
 
103688
+ # Preserve build inputs for deployment; only this filtered copy reaches /srv.
103689
+ FROM build AS static-content
103690
+ RUN bun -e ${shellQuote(sanitize)} '/app' ${shellQuote(`/app/${outputDir}`)} '/percher-static-content'
103691
+
103151
103692
  # --- Serve stage: minimal Caddy image --------------------------------
103152
103693
  # Build pinned Caddy source with refreshed security modules. The scratch
103153
103694
  # runtime carries no shell, package manager, or file capabilities and listens
103154
103695
  # on the unprivileged port :${STATIC_DOCKER_PORT}.
103155
103696
  FROM golang:1.26.10-alpine3.23@sha256:0525c952defebc693cdaf62cdf43afa32be5a7f377e99260642ea19c240c708e AS caddy-source
103156
- ADD --checksum=sha256:78e660d838e45c0b8c89338b325946238f153641aa9925df9ef2ad5e8eced31b \\
103157
- https://github.com/caddyserver/caddy/commit/b2693fb63a30e6d7be0972c3645e9a2c0a500e93.patch /tmp/caddy-cel-go.patch
103158
- RUN go mod download github.com/caddyserver/caddy/v2@v2.11.4 \\
103159
- && cp -R /go/pkg/mod/github.com/caddyserver/caddy/v2@v2.11.4 /src \\
103697
+ RUN go mod download github.com/caddyserver/caddy/v2@v2.11.7 \\
103698
+ && cp -R /go/pkg/mod/github.com/caddyserver/caddy/v2@v2.11.7 /src \\
103160
103699
  && chmod -R u+w /src
103161
103700
  WORKDIR /src
103162
- RUN apk add --no-cache patch \\
103163
- && patch -p1 < /tmp/caddy-cel-go.patch \\
103164
- && go get github.com/go-chi/chi/v5@v5.3.0 github.com/google/cel-go@v0.29.2 \\
103165
- github.com/klauspost/compress@v1.18.7 go.opentelemetry.io/otel@v1.45.0 \\
103166
- go.opentelemetry.io/otel/sdk/log@v0.21.0 \\
103167
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc@v0.21.0 \\
103168
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp@v0.21.0 \\
103169
- go.opentelemetry.io/otel/exporters/stdout/stdoutlog@v0.21.0 \\
103170
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@v1.45.0 \\
103171
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp@v1.45.0 \\
103701
+ RUN go get github.com/go-chi/chi/v5@v5.3.2 github.com/klauspost/compress@v1.20.1 \\
103702
+ go.opentelemetry.io/otel@v1.46.0 go.opentelemetry.io/otel/sdk/log@v0.22.0 \\
103703
+ go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc@v0.22.0 \\
103704
+ go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp@v0.22.0 \\
103705
+ go.opentelemetry.io/otel/exporters/stdout/stdoutlog@v0.22.0 \\
103706
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@v1.46.0 \\
103707
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp@v1.46.0 \\
103172
103708
  golang.org/x/crypto@v0.57.0 golang.org/x/net@v0.60.0 \\
103173
103709
  golang.org/x/text@v0.42.0 google.golang.org/grpc@v1.83.2 \\
103174
103710
  && go mod tidy \\
@@ -103184,7 +103720,7 @@ COPY --from=caddy-source /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-ce
103184
103720
  COPY --from=caddy-source /out/caddy /usr/bin/caddy
103185
103721
  COPY --from=caddy-source /out/percher-healthcheck /usr/bin/percher-healthcheck
103186
103722
  COPY Caddyfile /etc/caddy/Caddyfile
103187
- COPY --from=build /app/${input.outputDir} /srv
103723
+ COPY --from=static-content /percher-static-content /srv
103188
103724
  LABEL dev.percher.health-client="static-http-v1"
103189
103725
  # HOME points at the writable tmpfs so non-root Caddy can persist its
103190
103726
  # XDG state (storage-clean lock, config autosave) under Percher's
@@ -103196,11 +103732,17 @@ CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile
103196
103732
  `;
103197
103733
  }
103198
103734
  function renderStaticFrameworkCaddyfile(input) {
103199
- const directives = ["bind 0.0.0.0", "root * /srv", "encode gzip zstd"];
103735
+ const directives = [
103736
+ "bind 0.0.0.0",
103737
+ "root * /srv",
103738
+ "encode gzip zstd",
103739
+ "route {",
103740
+ ...staticPlatformDenyDirectives().map((line) => ` ${line}`)
103741
+ ];
103200
103742
  if (input.spa) {
103201
- directives.push("try_files {path} /index.html");
103743
+ directives.push("\ttry_files {path} /index.html");
103202
103744
  }
103203
- directives.push("file_server");
103745
+ directives.push("\tfile_server", "}");
103204
103746
  const body = directives.map((d) => ` ${d}`).join(`
103205
103747
  `);
103206
103748
  return `:${STATIC_DOCKER_PORT} {
@@ -103217,6 +103759,9 @@ function readGoPins(dockerfile) {
103217
103759
  }
103218
103760
  return { go: /^FROM golang:(\d+\.\d+\.\d+)/m.exec(dockerfile)?.[1] ?? null, modules };
103219
103761
  }
103762
+ function shellQuote(value) {
103763
+ return "'" + value.replaceAll("'", "'\\''") + "'";
103764
+ }
103220
103765
 
103221
103766
  // ../core/dist/commands/import-project.js
103222
103767
  var importInputSchema = object({
@@ -106509,7 +107054,7 @@ function applyRewrite(path, replacement, kind, pattern, note, flags, state) {
106509
107054
  // ../core/dist/commands/migrate-supabase-walker.js
106510
107055
  var import_ignore3 = __toESM(require_ignore(), 1);
106511
107056
  import { mkdir as mkdir2, readdir, readFile as readFile3, stat as stat2, writeFile as writeFile2 } from "node:fs/promises";
106512
- import { dirname as dirname6, isAbsolute as isAbsolute3, join as join19, relative as relative5, resolve as resolve7, sep as sep4 } from "node:path";
107057
+ import { dirname as dirname6, isAbsolute as isAbsolute4, join as join19, relative as relative5, resolve as resolve7, sep as sep4 } from "node:path";
106513
107058
  var REWRITABLE_EXTENSIONS = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"]);
106514
107059
  var DEFAULT_EXCLUDES = [
106515
107060
  "node_modules",
@@ -106820,7 +107365,7 @@ async function writeWalkResult(input) {
106820
107365
  const abs = resolve7(targetAbs, file.relativePath);
106821
107366
  const rel = relative5(targetAbs, abs);
106822
107367
  const isParentTraversal = rel === ".." || rel.startsWith(`..${sep4}`) || rel.startsWith("../");
106823
- if (rel.length === 0 || isParentTraversal || isAbsolute3(rel)) {
107368
+ if (rel.length === 0 || isParentTraversal || isAbsolute4(rel)) {
106824
107369
  throw new Error(`writeWalkResult refused path-traversing file "${file.relativePath}" → "${abs}" (would escape targetDir "${targetAbs}").`);
106825
107370
  }
106826
107371
  await mkdir2(dirname6(abs), { recursive: true });
@@ -107557,7 +108102,7 @@ function failure3(rootAbs, mode, err, suggestion) {
107557
108102
  }
107558
108103
  // ../core/dist/commands/migrate-supabase-schema.js
107559
108104
  import { mkdir as mkdir4, writeFile as writeFile4 } from "node:fs/promises";
107560
- import { isAbsolute as isAbsolute4, join as join22, relative as relative8, resolve as resolve10 } from "node:path";
108105
+ import { isAbsolute as isAbsolute5, join as join22, relative as relative8, resolve as resolve10 } from "node:path";
107561
108106
 
107562
108107
  // ../core/dist/commands/migrate-supabase-scripts.js
107563
108108
  function generateDataImportScripts(preview) {
@@ -108070,7 +108615,7 @@ async function migrateSupabaseSchema(ctx, input) {
108070
108615
  }
108071
108616
  function resolveOutputDir(cwd, requested) {
108072
108617
  const raw = requested ?? "./migration-preview";
108073
- return isAbsolute4(raw) ? raw : resolve10(cwd, raw);
108618
+ return isAbsolute5(raw) ? raw : resolve10(cwd, raw);
108074
108619
  }
108075
108620
  async function writePreviewFiles(ctx, outputDir, preview) {
108076
108621
  await mkdir4(outputDir, { recursive: true });
@@ -108316,9 +108861,9 @@ import { existsSync as existsSync15 } from "node:fs";
108316
108861
  import { join as join25 } from "node:path";
108317
108862
 
108318
108863
  // ../shared/dist/pow.js
108319
- import { createHash as createHash3 } from "node:crypto";
108864
+ import { createHash as createHash4 } from "node:crypto";
108320
108865
  function digest(nonce, solution) {
108321
- return createHash3("sha256").update(`${nonce}:${solution}`).digest("hex");
108866
+ return createHash4("sha256").update(`${nonce}:${solution}`).digest("hex");
108322
108867
  }
108323
108868
  function leadingZeroBits(hexDigest) {
108324
108869
  let bits = 0;
@@ -108717,7 +109262,7 @@ async function runDeployWithRetry(opts) {
108717
109262
 
108718
109263
  // ../core/dist/commands/env-scan.js
108719
109264
  init_dist();
108720
- import { readdirSync as readdirSync3, readFileSync as readFileSync11, statSync as statSync3 } from "node:fs";
109265
+ import { readdirSync as readdirSync3, readFileSync as readFileSync11, statSync as statSync2 } from "node:fs";
108721
109266
  import { join as join23 } from "node:path";
108722
109267
  function platformInjectedClientEnvKeys(config) {
108723
109268
  const data = config.data;
@@ -108811,7 +109356,7 @@ function* walkDir(dir, base) {
108811
109356
  const full = join23(dir, name);
108812
109357
  let st;
108813
109358
  try {
108814
- st = statSync3(full);
109359
+ st = statSync2(full);
108815
109360
  } catch {
108816
109361
  continue;
108817
109362
  }
@@ -110290,6 +110835,19 @@ var publishInlineInputSchema = object({
110290
110835
  noCache: boolean2().optional().describe("Skip the image cache and force a fresh build."),
110291
110836
  waitForLive: boolean2().optional().describe("If true (default), block until the deploy is live or failed. If false, return as soon as it is queued so the agent can resume with percher_wait_for_deploy.")
110292
110837
  });
110838
+ // ../core/dist/commands/publish-patch.js
110839
+ var publishPatchInputSchema = object({
110840
+ app: string2().min(1).describe("Explicit app name or id. No local-state fallback."),
110841
+ expectedBase: string2().regex(/^[0-9a-f]{40}$/).describe("Full live version commit from percher_versions; prefixes and branch names are refused."),
110842
+ files: array(object({
110843
+ path: string2().min(1).max(1024),
110844
+ content: string2(),
110845
+ encoding: _enum(["utf8", "base64"]).optional()
110846
+ }).strict()).max(2000),
110847
+ delete: array(string2().min(1).max(1024)).max(2000),
110848
+ dryRun: boolean2().optional().describe("Classify requested changes without creating a deployment or returning unchanged source."),
110849
+ confirm: boolean2().optional().describe("Required true for publishing, after the user requested the change.")
110850
+ }).strict().refine((input) => input.dryRun === true || input.confirm === true, "Publishing requires confirm: true.");
110293
110851
  // ../core/dist/commands/push.js
110294
110852
  init_dist();
110295
110853
  import { existsSync as existsSync16 } from "node:fs";
@@ -111511,7 +112069,7 @@ async function sleep(ctx, input = {}) {
111511
112069
  var statusInputSchema = object({
111512
112070
  json: boolean2().optional()
111513
112071
  });
111514
- async function status(ctx, _input = {}) {
112072
+ async function status2(ctx, _input = {}) {
111515
112073
  let health;
111516
112074
  try {
111517
112075
  health = await ctx.client.platform.health();
@@ -114242,7 +114800,7 @@ function registerSharingCommands(cli, ctx) {
114242
114800
  var import_picocolors15 = __toESM(require_picocolors(), 1);
114243
114801
  function registerStatusCommands(cli, ctx) {
114244
114802
  cli.command("status", "Show Percher platform status (API + worker health)").option("--json", "Output JSON instead of formatted text").action(async (options) => {
114245
- const result = await status(ctx, { json: Boolean(options.json) });
114803
+ const result = await status2(ctx, { json: Boolean(options.json) });
114246
114804
  if (options.json) {
114247
114805
  await writeLine2(ctx, JSON.stringify(result, null, 2));
114248
114806
  if (result.verdict === "unreachable")
@@ -114291,7 +114849,7 @@ import { createInterface } from "node:readline";
114291
114849
  // package.json
114292
114850
  var package_default2 = {
114293
114851
  name: "percher",
114294
- version: "1.4.0",
114852
+ version: "1.4.1",
114295
114853
  description: "CLI for the Percher hosting platform — publish apps with one command",
114296
114854
  type: "module",
114297
114855
  bin: {
@@ -114319,10 +114877,10 @@ var package_default2 = {
114319
114877
  typecheck: "tsc --noEmit"
114320
114878
  },
114321
114879
  dependencies: {
114322
- "@percher/shared": "^1.3.0",
114323
- "@percher/client": "^1.4.0",
114324
- "@percher/core": "^1.4.0",
114325
- "@percher/toml": "^1.0.5",
114880
+ "@percher/shared": "^1.3.1",
114881
+ "@percher/client": "^1.4.1",
114882
+ "@percher/core": "^1.4.1",
114883
+ "@percher/toml": "^1.0.6",
114326
114884
  cac: "^7.0.0",
114327
114885
  picocolors: "^1.1.1"
114328
114886
  },