diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 04c09f5b..e3eeda0c 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -1,3 +1,4 @@ +{"id":"stackpanel-r7g","title":"Fix broken bun install on main: alchemy-effect catalog reference","description":"Five packages reference `alchemy-effect: catalog:` (apps/api, apps/docs, apps/web, packages/db, packages/infra) but the root package.json#workspaces.catalog has no alchemy-effect entry. Result: bun install --frozen-lockfile fails with 'alchemy-effect@catalog: failed to resolve' on a clean clone of main.\n\nReproduction:\n rm -rf node_modules\n bun install --frozen-lockfile\n # error: alchemy-effect@catalog: failed to resolve (x5)\n\nRoot cause: introduced in commit dda9c459 'refactor: replace AWS EC2 infra with Cloudflare Workers + Neon, add agenix module' — the dep was added to packages but the catalog entry was never added.\n\nFix: add \"alchemy-effect\": \"^0.12.0\" to root package.json#workspaces.catalog (bun.lock already resolves alchemy-effect@0.12.0).\n\nSurfaced while working on PR #15 — could not run vite to regen routeTree.gen.ts after route deletions, had to hand-edit. Worktree node_modules from before the regression still work, masking the issue locally.","status":"closed","priority":1,"issue_type":"bug","owner":"me@cooperm.com","created_at":"2026-04-29T08:31:32Z","created_by":"Cooper Maruyama","updated_at":"2026-04-29T09:16:42Z","closed_at":"2026-04-29T09:16:42Z","close_reason":"Fixed by PR #16 — migrated workspace to alchemy@2.0.0-beta.20 (alchemy-effect rebrand). bun install now resolves cleanly and lockfile regenerates without the catalog miss.","dependency_count":0,"dependent_count":0,"comment_count":0} {"id":"stackpanel-os2.8","title":"Add Hetzner provision regression test with ephemeral instances","description":"Add a reproducible regression test for stackpanel provision using ephemeral Hetzner Cloud instances created on-demand via the hcloud API. The token already exists in SOPS as hetzner_api_key. The implementation should add the hcloud CLI to the devshell, create a disposable-machine test script, load hetzner_api_key from SOPS into HCLOUD_TOKEN, inject a temporary machine via .stack/config.local.nix, run stackpanel provision against it, verify the resulting NixOS host, and always clean up the instance.","design":"Prefer a real end-to-end infrastructure regression test over mocks for the final provision path, but keep verification safe and deterministic where possible. Use existing shell smoke test patterns for script structure and use .stack/config.local.nix for the highest-priority temporary machine override.","acceptance_criteria":"- hcloud is available in the devshell\n- tests/provision-hetzner-e2e.sh provisions an ephemeral CX22 in fsn1 from Debian 12\n- The script exports HCLOUD_TOKEN from the SOPS key hetzner_api_key\n- The script injects machine config via .stack/config.local.nix and cleans up in a trap\n- Justfile exposes a command to run the regression test and a dry-run mode","status":"closed","priority":1,"issue_type":"task","assignee":"Cooper Maruyama","owner":"me@cooperm.com","created_at":"2026-03-29T08:03:28Z","created_by":"Cooper Maruyama","updated_at":"2026-03-29T08:13:29Z","closed_at":"2026-03-29T08:13:29Z","close_reason":"Implemented: added hcloud to devshell, tests/provision-hetzner-e2e.sh, and Justfile entries. Commit d54bdbc7.","labels":["deployment","hetzner","testing"],"dependencies":[{"issue_id":"stackpanel-os2.8","depends_on_id":"stackpanel-os2","type":"parent-child","created_at":"2026-03-29T01:03:27Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"id":"stackpanel-foe.4","title":"P4: Green test matrix on stackpanel","description":"Real deploys (not dry-run) of {docs,web} x {colmena,nixos-rebuild,fly} on stackpanel infra. Ensure docs and web have Nix packages that build to deployable artifacts. Deploy to ovh-usw-1 (direct) for NixOS backends. Add nix flake check validation for deployment outputs. All 6 cells must go green.","status":"open","priority":1,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-03-28T20:39:32Z","created_by":"Cooper Maruyama","updated_at":"2026-03-28T20:39:32Z","dependencies":[{"issue_id":"stackpanel-foe.4","depends_on_id":"stackpanel-foe","type":"parent-child","created_at":"2026-03-28T13:39:32Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-foe.4","depends_on_id":"stackpanel-foe.2","type":"blocks","created_at":"2026-03-28T13:47:41Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-foe.4","depends_on_id":"stackpanel-foe.3","type":"blocks","created_at":"2026-03-28T13:47:42Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":2,"dependent_count":2,"comment_count":0} {"id":"stackpanel-foe.3","title":"P3: Implement Fly as first plugin backend","description":"Create nix/stackpanel/modules/fly/ with meta.nix (features.deployBackend=true) and module.nix. Register deployment.backends.fly. Inject app.fly.* options via appModules (appName, region, vm config). Generate fly.toml using pkgs.lib.generators.toTOML. Implement scripts.deploy (generate fly.toml, call fly deploy) and scripts.dryRun. Add fly config to stackpanel apps for testing. This is the litmus test for the plugin contract.","status":"closed","priority":1,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-03-28T20:39:30Z","created_by":"Cooper Maruyama","updated_at":"2026-04-20T22:37:19Z","closed_at":"2026-04-20T22:37:19Z","close_reason":"Fly backend implemented at nix/stackpanel/deployment/fly/module.nix with Go CLI support in deploy.go.","dependencies":[{"issue_id":"stackpanel-foe.3","depends_on_id":"stackpanel-foe","type":"parent-child","created_at":"2026-03-28T13:39:30Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-foe.3","depends_on_id":"stackpanel-foe.1","type":"blocks","created_at":"2026-03-28T13:47:40Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} @@ -12,6 +13,7 @@ {"id":"stackpanel-os2.1","title":"Add Nix deployment output validation to flake checks","description":"The repo already exposes deployment-oriented flake outputs through nix/stackpanel/lib/deploy.nix and nix/flake/global-outputs.nix, but I could not find matching check coverage that forces broken nixosConfigurations / colmena wiring to fail before someone runs a real deploy. Add validation so deploy regressions are caught during normal flake checks and CI.","design":"Keep the deploy output path pure and reviewable; add checks in the flake/check layer rather than baking deploy-time behavior into runtime commands.","acceptance_criteria":"- nix flake check --impure validates the generated nixosConfigurations for configured machines (or an explicitly documented equivalent check)\n- Broken deploy module wiring fails before runtime deployment commands are attempted\n- Coverage includes unprovisioned-machine stubs vs provisioned hardware/disk layouts where relevant\n- Any added checks are documented near the flake output wiring","status":"closed","priority":1,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-03-28T15:02:34Z","created_by":"Cooper Maruyama","updated_at":"2026-03-28T20:19:29Z","closed_at":"2026-03-28T20:19:29Z","close_reason":"Superseded by pluggable-deploy-backends restructure. Work absorbed into new phase-based tasks. See openspec/changes/pluggable-deploy-backends/","external_ref":"https://linear.app/darkmatterlabs/issue/ENG-378","labels":["deployment"],"dependencies":[{"issue_id":"stackpanel-os2.1","depends_on_id":"stackpanel-os2","type":"parent-child","created_at":"2026-03-28T08:02:33Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0} {"id":"stackpanel-os2.2","title":"Finish structured deploy CLI flags and status output","description":"apps/stackpanel-go/cmd/cli/deploy.go currently supports basic app deploys with --dry-run plus human-readable status, but the design doc calls for env overrides, machine-readable output, and richer status metadata. Finish the command surface so deployment can run cleanly in CI and other tooling without scraping terminal text.","design":"Centralize deploy result formatting in deploy.go and keep non-interactive output first-class from the start.","acceptance_criteria":"- stackpanel deploy \u003capp\u003e supports --env to override deployment.defaultEnv\n- stackpanel deploy status [app] supports --json with stable machine-readable output\n- Success and failure paths include backend/target/env information without relying on TUI-only formatting\n- Add Go tests for flag resolution and JSON/status serialization","status":"closed","priority":1,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-03-28T15:02:34Z","created_by":"Cooper Maruyama","updated_at":"2026-03-28T20:19:29Z","closed_at":"2026-03-28T20:19:29Z","close_reason":"Superseded by pluggable-deploy-backends restructure. Work absorbed into new phase-based tasks. See openspec/changes/pluggable-deploy-backends/","external_ref":"https://linear.app/darkmatterlabs/issue/ENG-379","labels":["deployment"],"dependencies":[{"issue_id":"stackpanel-os2.2","depends_on_id":"stackpanel-os2","type":"parent-child","created_at":"2026-03-28T08:02:34Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.2","depends_on_id":"stackpanel-os2.1","type":"blocks","created_at":"2026-03-28T08:02:38Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0} {"id":"stackpanel-os2","title":"Complete the deployment feature","description":"Deployment is partially implemented across Nix outputs, Go CLI commands, host-specific backends, docs, and the Studio deploy panel. The current repo has the core Nix scaffolding in nix/stackpanel/modules/deploy/module.nix and nix/stackpanel/lib/deploy.nix, app deploy/provision commands in apps/stackpanel-go/cmd/cli/{deploy,provision}.go, and a Colmena-centric UI in apps/web/src/components/studio/panels/deploy/deploy-panel.tsx. This epic tracks the remaining work needed to make deployment feel complete and coherent against docs/design/deploy-command.md and docs/design/provisioning.md.","design":"Use docs/design/deploy-command.md and docs/design/provisioning.md as the design source of truth, but scope child tasks to repo realities already present in code.","acceptance_criteria":"- Break remaining deployment work into executable child issues\n- Finish CLI, backend, provisioning, UI, and docs gaps\n- Land a validated end-to-end deployment story for NixOS machines and supported hosted backends","status":"closed","priority":1,"issue_type":"epic","owner":"me@cooperm.com","created_at":"2026-03-28T15:02:33Z","created_by":"Cooper Maruyama","updated_at":"2026-03-28T20:19:30Z","closed_at":"2026-03-28T20:19:30Z","close_reason":"all steps complete","external_ref":"https://linear.app/darkmatterlabs/issue/ENG-380","labels":["deployment"],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"id":"stackpanel-382","title":"Generate MSW demo fixtures from proto-nix example fields","description":"Replace hand-written MSW handlers in apps/web/src/demo/handlers.ts with fixtures generated from the proto-nix schema 'example' fields.\n\nWhy: PR #15 (demo via endpoint swap) ships the MSW agent with hand-curated fixtures. These will drift from the real entity shapes as schemas evolve. The proto-nix system already supports an 'example' field on every scalar (see nix/stackpanel/db/lib/field.nix proto.withExample), but only nix/stackpanel/db/schemas/theme.proto.nix populates it.\n\nScope:\n1. Migrate apps, services, variables, secrets schemas to mkSpField with populated example values\n2. Add mkExampleData to nix/stackpanel/db/lib/ that walks a proto message and emits a JSON object using each field's example (or a deterministic placeholder if missing)\n3. Add a Nix output (flake.packages.${system}.demoFixtures) that generates apps/web/src/demo/fixtures.generated.json\n4. Wire MSW handlers in apps/web/src/demo/handlers.ts to consume the generated JSON; delete the hand-written fixtures we replace\n\nAcceptance: demo fixture data is auto-derived from the same source-of-truth schemas the agent and TS client already use; adding a new field to a proto-nix schema makes it appear in the demo without touching apps/web.\n\nDiscovered while implementing PR #15 https://github.com/darkmatter/stackpanel/pull/15","status":"open","priority":2,"issue_type":"feature","owner":"me@cooperm.com","created_at":"2026-04-29T08:31:31Z","created_by":"Cooper Maruyama","updated_at":"2026-04-29T08:31:31Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"id":"stackpanel-dh5","title":"docs.stackpanel.com production deploy throws CF 1101 at runtime","description":"Background: cloud-gate-foundation upgraded alchemy-effect 0.9.0 → 0.12.0. apps/web deploys cleanly to local.stackpanel.com. apps/docs production deploy succeeds at the CF API level but every request returns CF error 1101 (Worker exception).\n\nWhat was tried (all merged in feat/cloud-gate-foundation, all still 1101):\n1. Added `--yes` to the deploy step so the React-based Plan UI is skipped (this fixed a separate Symbol.toPrimitive bug; deploy now reaches the upload phase)\n2. Pass full assets config object {directory, config:{notFoundHandling, htmlHandling, runWorkerFirst}} to mirror apps/docs/wrangler.jsonc — alchemy default for bare-string `assets:` was wrong\n3. Pass `isExternal: true` to skip alchemy bootstrap that otherwise wraps `main` in `Layer.effect(tag, entry).asEffect()` — OpenNext exports plain `{ fetch }` shape\n\nBundle size from the upload phase: 40.62 MB unminified. CF Workers Standard limit is 10 MB compressed; 40 MB raw is at the edge.\n\nLikely root cause (untested): rolldown bundle of OpenNext.worker.js inlines the dynamic `import(\"./server-functions/default/handler.mjs\")` instead of preserving as a chunk, producing one oversized file that workerd refuses to fully load. wrangler deploy handles this differently (preserves chunks).\n\nPossible directions:\n- Split via rolldown output options on alchemy side (would require alchemy upstream change)\n- Use a Build resource pattern to feed alchemy a pre-built bundle and skip rolldown entirely\n- Leave docs on plain wrangler deploy (revert alchemy.run.ts for docs) until alchemy ships native OpenNext support\n\napps/web deploys via Cloudflare.Vite which uses viteBuild instead of prepareBundle — that path works.","notes":"Update 2026-04-24 (got CF token with workers tail scope from himitsu cloudflare-api-token):\n\nCaptured the original 1101 root cause via tail:\n No such module \"node:perf_hooks\". imported from \"handler-BwC-NBMH.js\"\n\nFixed by bumping compatibility_date to 2026-03-17 (commit on feat/cloud-gate-foundation). That date is when CF promoted node:perf_hooks to a native module — earlier dates make unenv try to polyfill it, but the polyfill itself does `import \"node:perf_hooks\"` so it cant substitute itself in a chunked bundle.\n\nAfter fix: docs.stackpanel.com homepage returns 200, but /docs/* routes return 500 with a different exception:\n Failed to load external module shiki-db8d315635eb368c/core\n\nRoot cause (different bug): rolldown bundles props.main but Cloudflare Worker config has `unresolvedImport: false` (alchemy-effect/src/Cloudflare/Workers/Worker.ts:715). When OpenNext’s middleware/handler imports its own pre-bundled chunks like `shiki-db8d315635eb368c/core`, rolldown silences the unresolved-import warning, leaves the import literal, and the deployed worker fails to dynamic-import that module name at runtime.\n\nWorkaround paths:\n- Drop alchemy for apps/docs and revert to `wrangler deploy` (the previous wrangler.jsonc approach). Trade-off: lose declarative cert/DNS, but unblocks docs.\n- Patch alchemy/distilled.cloud rolldown plugin to NOT silence unresolved imports (would surface the issue at build time) and bundle shiki inline.\n- Pre-process .open-next/ output before passing to alchemy so all chunks are inlined into a single file.\n\nRecommend option 1 for now and revisit when alchemy adds a no-bundle / pass-through mode for `main`.","status":"open","priority":2,"issue_type":"bug","owner":"me@cooperm.com","created_at":"2026-04-25T03:20:41Z","created_by":"Cooper Maruyama","updated_at":"2026-04-25T04:08:54Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"id":"stackpanel-i5r","title":"Studio: Marketplace browse + install panel","description":"In-studio UI for discovering, purchasing, and installing modules.\n\n## Scope\n\n- apps/web/src/components/studio/panels/marketplace-panel.tsx\n- Sections: Featured, Official (stackpanel's own paid modules), Community, Installed\n- Listing detail view: README, versions, pricing, screenshots (MDX + images from the listing)\n- Install button: free → instant; paid → Polar checkout in a popup, webhook-driven refresh on return\n- Installed view: updates available, usage (if module reports it), remove\n- Calls into the CLI via agent-local endpoints for the actual install/uninstall (so studio doesn't need Nix directly)","acceptance_criteria":"- Browse renders paginated list with search\n- Listing detail shows full MDX description + pricing\n- Free install works without leaving the studio\n- Paid install flow completes end-to-end without manual reload","status":"open","priority":2,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-04-24T03:45:13Z","created_by":"Cooper Maruyama","updated_at":"2026-04-24T03:45:13Z","dependencies":[{"issue_id":"stackpanel-i5r","depends_on_id":"stackpanel-63e","type":"blocks","created_at":"2026-04-23T20:46:09Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-i5r","depends_on_id":"stackpanel-w3r","type":"blocks","created_at":"2026-04-23T20:46:10Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":2,"dependent_count":1,"comment_count":0} {"id":"stackpanel-24e","title":"Revenue accounting: gross / fee / developer net ledger","description":"Ledger that tracks every transaction with platform fee + developer share; source of truth for payouts and future reporting.\n\n## Scope\n\n- Drizzle table: revenue_event(id, license_id FK, event_type enum(purchase|renewal|refund|chargeback), gross_cents, fee_cents, developer_net_cents, currency, polar_event_id unique, occurred_at)\n- Derived view: developer_balance(user_id, module_slug, balance_cents, last_updated) — sum of developer_net_cents minus already-paid-out\n- Populated by the same Polar webhook handler as the license writes\n- Dashboard API: /api/me/revenue — current balance, monthly breakdown, per-module totals\n\n## Rules\n\n- Platform fee: 15% flat at MVP, calculated at write time (can change later without rewriting history)\n- Processing fee (~3%) absorbed from the 15% — developer always gets 85% of gross minus refunds\n- Refund: negative revenue_event, reduces balance\n- Chargeback: negative + lock payout temporarily (resolution flow is Phase 2)","acceptance_criteria":"- Every Polar webhook produces exactly one revenue_event (idempotent)\n- developer_balance view reconciles to sum of events\n- Refunds correctly decrement balance\n- Dashboard API returns accurate per-developer totals","status":"open","priority":2,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-04-24T03:45:08Z","created_by":"Cooper Maruyama","updated_at":"2026-04-24T03:45:08Z","dependencies":[{"issue_id":"stackpanel-24e","depends_on_id":"stackpanel-p4y","type":"blocks","created_at":"2026-04-23T20:46:08Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":1,"dependent_count":4,"comment_count":0} @@ -41,6 +43,8 @@ {"id":"stackpanel-os2.7","title":"Unify deployment docs and migration guides around the current model","description":"The repo currently mixes older provider-centric deployment docs (for example nix/stackpanel/deployment/README.md and apps/docs/content/docs/internal/deployment.mdx) with newer Nix-first deploy/provision design docs. Once the remaining CLI/backend work lands, refresh the public/internal docs so users see one coherent deployment story instead of parallel models.","design":"Document the shipped behavior after the CLI/backend/UI work settles; keep examples aligned with docs/design/deploy-command.md and docs/design/provisioning.md.","acceptance_criteria":"- Public docs cover app deploy, machine-target deploy, provisioning, and hosted-backend flows with current commands/options\n- Internal/module docs stop teaching superseded provider/defaultProvider shapes where they no longer match shipped behavior\n- Migration guidance explains old vs new config shapes and current container/deploy commands\n- Examples and validation steps match actual commands in the repo","status":"closed","priority":2,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-03-28T15:02:38Z","created_by":"Cooper Maruyama","updated_at":"2026-03-28T20:19:30Z","closed_at":"2026-03-28T20:19:30Z","close_reason":"Superseded by pluggable-deploy-backends restructure. Work absorbed into new phase-based tasks. See openspec/changes/pluggable-deploy-backends/","external_ref":"https://linear.app/darkmatterlabs/issue/ENG-381","labels":["deployment"],"dependencies":[{"issue_id":"stackpanel-os2.7","depends_on_id":"stackpanel-os2","type":"parent-child","created_at":"2026-03-28T08:02:38Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.7","depends_on_id":"stackpanel-os2.3","type":"blocks","created_at":"2026-03-28T08:02:42Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.7","depends_on_id":"stackpanel-os2.4","type":"blocks","created_at":"2026-03-28T08:02:42Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.7","depends_on_id":"stackpanel-os2.5","type":"blocks","created_at":"2026-03-28T08:02:43Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.7","depends_on_id":"stackpanel-os2.6","type":"blocks","created_at":"2026-03-28T08:02:43Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":4,"dependent_count":0,"comment_count":0} {"id":"stackpanel-os2.5","title":"Add stackpanel provision --new and config round-trip machine authoring","description":"apps/stackpanel-go/cmd/cli/provision.go handles provisioning for machines that already exist in config, but the provisioning design also calls for a --new workflow that can author a minimal machine entry and preserve Nix path literals for hardwareConfig/diskLayout updates. Add that machine-authoring path so new-machine setup is not a manual edit-before-provision step.","design":"Reuse the repo's existing config-writing/serialization patterns instead of inventing a new config mutator; add tagged path handling if necessary to preserve Nix path types.","acceptance_criteria":"- stackpanel provision --new \u003cname\u003e --host \u003ctarget\u003e creates a minimal machine entry in the canonical Stackpanel config\n- hardwareConfig and diskLayout paths round-trip as Nix path literals instead of quoted absolute strings\n- The provision flow can update the new machine entry after generating hardware config\n- Add tests for config edit / serialization behavior","status":"closed","priority":2,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-03-28T15:02:37Z","created_by":"Cooper Maruyama","updated_at":"2026-03-28T20:19:21Z","closed_at":"2026-03-28T20:19:21Z","close_reason":"Dropped: manual config editing is acceptable, provision --new deferred indefinitely","external_ref":"https://linear.app/darkmatterlabs/issue/ENG-382","labels":["deployment"],"dependencies":[{"issue_id":"stackpanel-os2.5","depends_on_id":"stackpanel-os2","type":"parent-child","created_at":"2026-03-28T08:02:36Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.5","depends_on_id":"stackpanel-os2.1","type":"blocks","created_at":"2026-03-28T08:02:40Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0} {"id":"stackpanel-os2.6","title":"Wire deploy/provision state into the Studio Deploy panel","description":"apps/web/src/components/studio/panels/deploy/deploy-panel.tsx is still Colmena-centric and does not appear to consume the CLI state tracked in .stack/state/deployments.json and .stack/state/machines.json. Update the Studio deploy experience so it reflects the same deploy/provision model and status that the CLI writes.","design":"Expose deploy/provision state through the agent/web API rather than teaching the browser to read local state files directly.","acceptance_criteria":"- The Deploy panel shows machine provisioning state and last deploy state from the supported agent/CLI APIs\n- Users can trigger deploy/provision actions from the panel with clear loading, success, and error states\n- Unsupported or partially configured backends degrade gracefully in the UI\n- Add frontend or integration coverage for the key panel states","status":"closed","priority":2,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-03-28T15:02:37Z","created_by":"Cooper Maruyama","updated_at":"2026-03-28T20:19:29Z","closed_at":"2026-03-28T20:19:29Z","close_reason":"Superseded by pluggable-deploy-backends restructure. Work absorbed into new phase-based tasks. See openspec/changes/pluggable-deploy-backends/","external_ref":"https://linear.app/darkmatterlabs/issue/ENG-383","labels":["deployment"],"dependencies":[{"issue_id":"stackpanel-os2.6","depends_on_id":"stackpanel-os2","type":"parent-child","created_at":"2026-03-28T08:02:37Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.6","depends_on_id":"stackpanel-os2.3","type":"blocks","created_at":"2026-03-28T08:02:40Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.6","depends_on_id":"stackpanel-os2.4","type":"blocks","created_at":"2026-03-28T08:02:41Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-os2.6","depends_on_id":"stackpanel-os2.5","type":"blocks","created_at":"2026-03-28T08:02:41Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":3,"dependent_count":1,"comment_count":0} +{"id":"stackpanel-zhq","title":"Remove now-obsolete actions/cache@v4 of apps/{web,docs}/.alchemy from deploy workflows","description":"In the alchemy-effect → alchemy@2 migration (PR #16), all 5 deploy stacks switched from filesystem-based LocalState to Cloudflare-hosted state via Cloudflare.state(). The .alchemy/state/ directory is no longer used at deploy time.\n\nThe deploy workflows still cache it as a no-op:\n\n .github/workflows/deploy-web.yaml — Restore alchemy state (actions/cache@v4 on apps/web/.alchemy)\n .github/workflows/deploy-docs.yaml — Restore alchemy state (actions/cache@v4 on apps/docs/.alchemy)\n destroy job — actions/cache/restore@v4 of the same paths\n destroy job — Delete cached alchemy state (gh cache delete) cleanup\n\nPlus the explanatory comment block above each cache step describing the LocalState pattern is now misleading.\n\nCleanup:\n- Drop the cache@v4 + cache/restore@v4 steps from both workflows\n- Drop the gh cache delete cleanup step in the destroy jobs\n- Update or remove the now-misleading 'Persist alchemy's LocalState' comment blocks\n- Verify deploy still works without the cache (the Cloudflare state store is the new source of truth and is self-bootstrapping per Cloudflare.state())\n\nShould land after Cloudflare.state() is verified working in CI (depends on stackpanel-r7g / PR #16).","status":"open","priority":3,"issue_type":"chore","owner":"me@cooperm.com","created_at":"2026-04-29T09:17:13Z","created_by":"Cooper Maruyama","updated_at":"2026-04-29T09:17:13Z","dependencies":[{"issue_id":"stackpanel-zhq","depends_on_id":"stackpanel-r7g","type":"discovered-from","created_at":"2026-04-29T02:17:13Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"id":"stackpanel-49t","title":"Restore .open-next/cache asset overlay once alchemy@2 supports AssetsProps.sources","description":"In the alchemy-effect → alchemy@2 migration (PR #16), we deleted the vendored OpenNext asset overlay (vendor/alchemy-effect-opennext-overlay/, scripts/apply-alchemy-effect-opennext-assets.ts, root postinstall hook) because:\n\n1. It was tied to alchemy-effect@0.12.x's file structure and is incompatible with v2's restructured Worker.ts/Assets.ts\n2. The script's own self-disable path explicitly instructs maintainers to delete the hook when no alchemy-effect@0.12.x installs are found\n\napps/docs/alchemy.run.ts had its assets.sources field commented out with a TODO referencing this issue:\n\n assets: {\n directory: '.open-next/assets',\n // TODO(stackpanel): re-enable the .open-next/cache overlay once\n // alchemy@2 natively supports AssetsProps.sources …\n config: { … },\n }\n\nImpact: OpenNext incremental cache misses for cdn-cgi/_next_cache paths fall back to ISR revalidation. Cache hit-rate regression, not a hard breakage.\n\nscripts/ALCHEMY_EFFECT_OPENNEXT_UPSTREAM.md (also deleted) tracked the upstream PR for AssetsProps.sources support — verify whether it landed in alchemy@2's main branch and is just pending a release, or whether it needs to be re-pitched.\n\nResolution path:\n- Option A: wait for upstream alchemy to ship native AssetsProps.sources, then uncomment the field in apps/docs/alchemy.run.ts\n- Option B: re-vendor a v2-compatible overlay (risky — alchemy@2 has restructured Worker.ts/Assets.ts internals)\n- Option C: switch to a different OpenNext cache strategy that doesn't require the overlay\n\nAcceptance: docs deploy serves cdn-cgi/_next_cache assets from Workers Assets directly (Option A or B), or this issue is closed as won't-fix with a documented alternative.","status":"open","priority":3,"issue_type":"feature","owner":"me@cooperm.com","created_at":"2026-04-29T09:17:00Z","created_by":"Cooper Maruyama","updated_at":"2026-04-29T09:17:00Z","dependencies":[{"issue_id":"stackpanel-49t","depends_on_id":"stackpanel-r7g","type":"discovered-from","created_at":"2026-04-29T02:17:00Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"id":"stackpanel-3vi","title":"Docs: module author guide + marketplace policies","description":"Docs that make it obvious how to build, test, price, and publish a module — plus the policies that keep the marketplace trustworthy.\n\n## Scope\n\n### Author guide (apps/docs/content/docs/modules/)\n- 'Build your first module' — scaffolding, module.nix structure, meta.nix fields, ui.nix if applicable\n- 'Test a module locally' — stackpanel link (local dev), running against sample .stack/config.nix\n- 'Package for publication' — tarball layout, signing, manifest requirements\n- 'Price and publish' — free vs paid tradeoffs, pricing UX tips\n- 'Get paid' — Polar Connect onboarding, tax docs, payout schedule\n- 'Versioning + updates' — semver discipline, deprecation policy\n\n### Policies\n- Acceptable use: no crypto miners, no telemetry without disclosure, no license keys hardcoded\n- Refund policy: 14-day no-questions-asked (author can opt into stricter)\n- Takedown policy: security issues → emergency delist within 24h\n- Revenue share + fee structure (the 15% sticker, transparent)\n- Intellectual property: developer retains ownership, grants distribution license","acceptance_criteria":"- Author guide builds with apps/docs\n- Policies are linked from dev portal's publish flow\n- Sample module repo referenced from the 'first module' page","status":"open","priority":3,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-04-24T03:45:46Z","created_by":"Cooper Maruyama","updated_at":"2026-04-24T03:45:46Z","dependencies":[{"issue_id":"stackpanel-3vi","depends_on_id":"stackpanel-02c","type":"blocks","created_at":"2026-04-23T20:46:16Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-3vi","depends_on_id":"stackpanel-c7t","type":"blocks","created_at":"2026-04-23T20:46:15Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-3vi","depends_on_id":"stackpanel-w3r","type":"blocks","created_at":"2026-04-23T20:46:17Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":3,"dependent_count":1,"comment_count":0} {"id":"stackpanel-l1q","title":"Module review workflow + automated Nix static analysis","description":"Prevent malicious or broken modules from reaching users. MVP manual, Phase 2 automated.\n\n## Scope\n\n### MVP: manual review\n- Admin tool (packages/api route + studio admin panel) showing pending listings\n- Reviewer sees: uploaded tarball contents, diff from previous version (if any), links to GitHub repo, automated scan results\n- Approve → listing goes live; Reject → listing status updated with reason visible to author\n- SLA target: 3 business days for initial review\n\n### Phase 2: automated scans\n- Static-analysis pass over module.nix + meta.nix:\n - Flag: import-from-derivation without explicit opt-in\n - Flag: builtins.fetchurl with non-allowlisted host\n - Flag: arbitrary path reads outside module dir\n - Flag: network calls during eval\n- Feed findings into review UI; author sees them pre-submit\n- Optionally: automatic 'verified pure' badge for modules with zero findings\n\n## Why not AI review\n\nPattern-match is more reliable for this than an LLM for the boring 'did they try to phone home during eval' checks. LLM review can come later for README/security claims.","acceptance_criteria":"- Reviewer can approve/reject pending listings\n- Rejected listings show reason to author with re-submit path\n- Static analysis surfaces known-bad patterns in a handful of test cases","status":"open","priority":3,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-04-24T03:45:37Z","created_by":"Cooper Maruyama","updated_at":"2026-04-24T03:45:37Z","dependencies":[{"issue_id":"stackpanel-l1q","depends_on_id":"stackpanel-c7t","type":"blocks","created_at":"2026-04-23T20:46:15Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} {"id":"stackpanel-02c","title":"Developer payout: Polar Connect + KYC onboarding","description":"Pay developers their accrued balance via Polar Connect (Stripe Connect underneath), with KYC + tax form collection at onboarding.\n\n## Scope\n\n- Onboarding flow: first time creating a paid listing → prompt to connect Polar Connect account (redirect OAuth flow)\n- Collect tax info (W-9 US / W-8BEN international) via Polar's Connect UI\n- Payout job (scheduled): once per month, for each developer with balance \u003e= $50, trigger Polar payout; record payout_event(developer_id, amount_cents, polar_transfer_id, status)\n- Emails: onboarding done, first sale, monthly statement\n- Admin tool for manual payout holds (fraud, chargeback disputes)\n\n## Phase 1 fallback\n\nIf Polar Connect isn't ready: accumulate balances, issue manual Wise transfers quarterly while we collect via email. Works for ~20 developers, not for scale.","acceptance_criteria":"- Developer can connect payout account end-to-end\n- Monthly payout runs successfully against test Polar env\n- Balance decrements match transferred amount\n- Tax forms captured before first payout","status":"open","priority":3,"issue_type":"task","owner":"me@cooperm.com","created_at":"2026-04-24T03:45:28Z","created_by":"Cooper Maruyama","updated_at":"2026-04-24T03:45:28Z","dependencies":[{"issue_id":"stackpanel-02c","depends_on_id":"stackpanel-24e","type":"blocks","created_at":"2026-04-23T20:46:13Z","created_by":"Cooper Maruyama","metadata":"{}"},{"issue_id":"stackpanel-02c","depends_on_id":"stackpanel-c7t","type":"blocks","created_at":"2026-04-23T20:46:14Z","created_by":"Cooper Maruyama","metadata":"{}"}],"dependency_count":2,"dependent_count":2,"comment_count":0} diff --git a/.github/workflows/deploy-api.yaml b/.github/workflows/deploy-api.yaml index 0a13a53e..2bfd47cb 100644 --- a/.github/workflows/deploy-api.yaml +++ b/.github/workflows/deploy-api.yaml @@ -119,5 +119,5 @@ jobs: FLY_IO_API_KEY: ${{ secrets.FLY_API_TOKEN }} STAGE: ${{ github.ref_name == 'main' && 'production' || github.ref_name == 'develop' && 'staging' || format('pr-{0}', github.event.pull_request.number) }} working-directory: apps/api - run: bunx alchemy-effect deploy --stage "$STAGE" + run: bunx alchemy deploy --stage "$STAGE" diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml index bf91db08..6b474688 100644 --- a/.github/workflows/deploy-docs.yaml +++ b/.github/workflows/deploy-docs.yaml @@ -77,9 +77,9 @@ jobs: - uses: oven-sh/setup-bun@v2 - name: Install dependencies run: bun install --frozen-lockfile - # Persist alchemy-effect's LocalState (.alchemy/state///) across + # Persist alchemy's LocalState (.alchemy/state///) across # runners so the destroy job on PR close can find the resources to tear down. - # alchemy-effect currently ships only a filesystem state backend; without this + # alchemy currently ships only a filesystem state backend; without this # cache, every runner starts blind and orphans Workers. - name: Restore alchemy state uses: actions/cache@v4 @@ -106,7 +106,7 @@ jobs: SOPS_AGE_KEY: ${{ secrets.SECRETS_AGE_KEY_DEV }} run: | set -euo pipefail - bunx alchemy-effect deploy --stage ${{ needs.stage.outputs.stage }} --yes + bunx alchemy deploy --stage ${{ needs.stage.outputs.stage }} --yes - name: Comment preview URL on PR if: github.event_name == 'pull_request' uses: marocchino/sticky-pull-request-comment@v2 @@ -143,7 +143,7 @@ jobs: SOPS_AGE_KEY: ${{ secrets.SECRETS_AGE_KEY_DEV }} run: | set -euo pipefail - bunx alchemy-effect destroy --stage ${{ needs.stage.outputs.stage }} --yes + bunx alchemy destroy --stage ${{ needs.stage.outputs.stage }} --yes - name: Delete cached alchemy state if: always() env: diff --git a/.github/workflows/deploy-web.yaml b/.github/workflows/deploy-web.yaml index efbc8ebb..9a502e71 100644 --- a/.github/workflows/deploy-web.yaml +++ b/.github/workflows/deploy-web.yaml @@ -79,9 +79,9 @@ jobs: - uses: oven-sh/setup-bun@v2 - name: Install dependencies run: bun install --frozen-lockfile - # Persist alchemy-effect's LocalState (.alchemy/state///) across + # Persist alchemy's LocalState (.alchemy/state///) across # runners so the destroy job on PR close can find the resources to tear down. - # alchemy-effect currently ships only a filesystem state backend; without this + # alchemy currently ships only a filesystem state backend; without this # cache, every runner starts blind and orphans Workers + Neon projects. - name: Restore alchemy state uses: actions/cache@v4 @@ -103,7 +103,7 @@ jobs: SOPS_AGE_KEY: ${{ secrets.SECRETS_AGE_KEY_DEV }} run: | set -euo pipefail - bunx alchemy-effect deploy --stage ${{ needs.stage.outputs.stage }} --yes + bunx alchemy deploy --stage ${{ needs.stage.outputs.stage }} --yes - name: Comment preview URL on PR if: github.event_name == 'pull_request' uses: marocchino/sticky-pull-request-comment@v2 @@ -140,7 +140,7 @@ jobs: SOPS_AGE_KEY: ${{ secrets.SECRETS_AGE_KEY_DEV }} run: | set -euo pipefail - bunx alchemy-effect destroy --stage ${{ needs.stage.outputs.stage }} --yes + bunx alchemy destroy --stage ${{ needs.stage.outputs.stage }} --yes - name: Delete cached alchemy state if: always() env: diff --git a/apps/api/alchemy.run.ts b/apps/api/alchemy.run.ts index d5bc85fc..2276a629 100644 --- a/apps/api/alchemy.run.ts +++ b/apps/api/alchemy.run.ts @@ -16,14 +16,19 @@ // dance. Same Effect-native pattern as apps/web's domain binding via // `@distilled.cloud/cloudflare` Workers. -import { loadDeployEnv, resolveDeployStage } from "@stackpanel/infra/lib/deploy"; +import { + loadDeployEnv, + resolveDeployStage, + selectStateBackend, +} from "@stackpanel/infra/lib/deploy"; import { AppCertificatesAcmeCreate, AppIPAssignmentsList, } from "@distilled.cloud/fly-io/Operations"; import { CredentialsFromEnv as FlyCredentialsFromEnv } from "@distilled.cloud/fly-io"; import * as DNS from "@distilled.cloud/cloudflare/dns"; -import * as Stack from "alchemy-effect/Stack"; +import * as Alchemy from "alchemy"; +import * as Cloudflare from "alchemy/Cloudflare"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -116,4 +121,13 @@ const providers = Layer.mergeAll(FlyCredentialsFromEnv) as unknown as Layer.Laye any >; -export default Stack.make(`${PROJECT}-${SERVICE}`, providers)(program); +export default Alchemy.Stack( + `${PROJECT}-${SERVICE}`, + { + providers, + // dev/PR previews → filesystem state (no Cloudflare creds required); + // staging/prod → shared Cloudflare-hosted state store. + state: selectStateBackend(appEnv), + }, + program, +); diff --git a/apps/api/package.json b/apps/api/package.json index ccc22484..8ded49ac 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -15,7 +15,7 @@ "@distilled.cloud/cloudflare": "catalog:", "@distilled.cloud/fly-io": "catalog:", "@trpc/server": "catalog:", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "effect": "catalog:", "hono": "catalog:" }, diff --git a/apps/docs/alchemy.run.ts b/apps/docs/alchemy.run.ts index f1917f21..3472e707 100644 --- a/apps/docs/alchemy.run.ts +++ b/apps/docs/alchemy.run.ts @@ -1,6 +1,11 @@ -import { loadDeployEnv, resolveDeployStage } from "@stackpanel/infra/lib/deploy"; -import { Cloudflare, Output, Stage } from "alchemy-effect"; -import * as Stack from "alchemy-effect/Stack"; +import { + loadDeployEnv, + resolveDeployStage, + selectStateBackend, +} from "@stackpanel/infra/lib/deploy"; +import * as Alchemy from "alchemy"; +import * as Cloudflare from "alchemy/Cloudflare"; +import * as Output from "alchemy/Output"; import * as Workers from "@distilled.cloud/cloudflare/workers"; import * as Effect from "effect/Effect"; @@ -29,7 +34,7 @@ const hostnameFor = (stage: string): string => stage === "production" ? "docs.stackpanel.com" : `docs.${stage}.stackpanel.com`; const program = Effect.gen(function* () { - const stage = yield* Stage; + const stage = yield* Alchemy.Stage; // OpenNext-on-Cloudflare emits the worker entrypoint and assets directory. // The build is expected to have already run (`bun run build:worker`); this @@ -47,12 +52,13 @@ const program = Effect.gen(function* () { // trailing-slash handling for static MDX routes. assets: { directory: ".open-next/assets", - // OpenNext static incremental cache lives under `.open-next/cache`; preview - // copies it into assets, but CI `build:worker` does not. Mount the cache - // tree at the URL prefix OpenNext expects (`alchemy-effect` asset sources). - sources: [ - { directory: ".open-next/cache", prefix: "cdn-cgi/_next_cache" }, - ], + // TODO(stackpanel): re-enable the `.open-next/cache` overlay once + // `alchemy@2` natively supports `AssetsProps.sources` (or vendor a + // v2-compatible patch). The 0.12.x vendored overlay was removed during + // the alchemy-effect → alchemy@2 rename; see follow-up bd issue. + // Without it, OpenNext incremental cache misses for `cdn-cgi/_next_cache` + // paths fall back to ISR revalidation — degraded cache hit rate, not + // a hard breakage. config: { notFoundHandling: "none", htmlHandling: "auto-trailing-slash", @@ -113,4 +119,13 @@ const program = Effect.gen(function* () { return { url }; }); -export default Stack.make(`${PROJECT}-${SERVICE}`, Cloudflare.providers())(program); +export default Alchemy.Stack( + `${PROJECT}-${SERVICE}`, + { + providers: Cloudflare.providers(), + // dev/PR previews → filesystem state (cached across CI runs); + // staging/prod → shared Cloudflare-hosted state store. + state: selectStateBackend(appEnv), + }, + program, +); diff --git a/apps/docs/package.json b/apps/docs/package.json index 0911bdc5..6acdafcb 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -38,7 +38,8 @@ "@types/node": "^24.10.0", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", + "effect": "catalog:", "mdast-util-mdx-jsx": "^3.2.0", "postcss": "^8.5.6", "tailwindcss": "catalog:", diff --git a/apps/web/alchemy.run.ts b/apps/web/alchemy.run.ts index cd167019..a8a97df5 100644 --- a/apps/web/alchemy.run.ts +++ b/apps/web/alchemy.run.ts @@ -1,7 +1,12 @@ -import { loadDeployEnv, resolveDeployStage } from "@stackpanel/infra/lib/deploy"; +import { + loadDeployEnv, + resolveDeployStage, + selectStateBackend, +} from "@stackpanel/infra/lib/deploy"; import { NeonProject, neonProviders } from "@stackpanel/infra/resources/neon"; -import { Cloudflare, Output, Stage } from "alchemy-effect"; -import * as Stack from "alchemy-effect/Stack"; +import * as Alchemy from "alchemy"; +import * as Cloudflare from "alchemy/Cloudflare"; +import * as Output from "alchemy/Output"; import * as Workers from "@distilled.cloud/cloudflare/workers"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -23,7 +28,7 @@ await loadDeployEnv(SERVICE, appEnv); const STACKPANEL_ZONE = "d34628a3ab639230ff1f6dc1eb640eec"; const program = Effect.gen(function* () { - const stage = yield* Stage; + const stage = yield* Alchemy.Stage; const db = yield* NeonProject("postgres", { name: `${PROJECT}-${stage}`, @@ -103,4 +108,13 @@ const providers = Layer.mergeAll( neonProviders(), ) as Layer.Layer; -export default Stack.make(`${PROJECT}-${SERVICE}`, providers)(program); +export default Alchemy.Stack( + `${PROJECT}-${SERVICE}`, + { + providers, + // dev/PR previews → filesystem state (cached across CI runs); + // staging/prod → shared Cloudflare-hosted state store. + state: selectStateBackend(appEnv), + }, + program, +); diff --git a/apps/web/package.json b/apps/web/package.json index 9592f0f1..73b19e77 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -119,7 +119,7 @@ "@types/react-dom": "19.2.3", "@vitejs/plugin-react": "^5.0.4", "@vitest/coverage-v8": "^4.0.16", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "babel-plugin-react-compiler": "^1.0.0", "happy-dom": "^20.1.0", "jsdom": "^26.0.0", diff --git a/apps/web/src/worker.ts b/apps/web/src/worker.ts index c8390942..7750e1a1 100644 --- a/apps/web/src/worker.ts +++ b/apps/web/src/worker.ts @@ -1,5 +1,5 @@ -import * as Cloudflare from "alchemy-effect/Cloudflare" -import * as D1 from "alchemy-effect/Cloudflare/D1" +import * as Cloudflare from "alchemy/Cloudflare" +import * as D1 from "alchemy/Cloudflare/D1" import * as Effect from "effect/Effect" import { HttpServerRequest } from "effect/unstable/http/HttpServerRequest" import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse" diff --git a/bun.lock b/bun.lock index 1ad4df31..fcb2e9d2 100644 --- a/bun.lock +++ b/bun.lock @@ -5,15 +5,12 @@ "": { "name": "stackpanel", "dependencies": { - "@effect/platform-bun": "4.0.0-beta.48", "@fontsource-variable/open-sans": "^5.2.7", "@intellectronica/ruler": "^0.3.18", "@pulumi/aws": "^7.15.0", "@pulumi/command": "^1.1.3", "db": "^6.0.3", "dotenv": "^17.2.2", - "effect": "4.0.0-beta.48", - "infra": "^1.0.3", "sst": "^3.17.25", "zod": "^4.1.11", }, @@ -23,7 +20,7 @@ "@cloudflare/workers-types": "^4.20250822.0", "@distilled.cloud/cloudflare-rolldown-plugin": "0.2.0", "@distilled.cloud/cloudflare-vite-plugin": "0.1.0", - "@effect/language-service": "^0.77.0", + "@effect/language-service": "^0.85.1", "@gen/config": "workspace:*", "@gen/env": "workspace:*", "@mdx-js/rollup": "^3.1.1", @@ -51,7 +48,7 @@ "@stackpanel/auth": "workspace:*", "@stackpanel/db": "workspace:*", "@trpc/server": "catalog:", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "effect": "catalog:", "hono": "catalog:", }, @@ -103,7 +100,8 @@ "@types/node": "^24.10.0", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", + "effect": "catalog:", "mdast-util-mdx-jsx": "^3.2.0", "postcss": "^8.5.6", "tailwindcss": "catalog:", @@ -250,7 +248,7 @@ "@types/react-dom": "19.2.3", "@vitejs/plugin-react": "^5.0.4", "@vitest/coverage-v8": "^4.0.16", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "babel-plugin-react-compiler": "^1.0.0", "happy-dom": "^20.1.0", "jsdom": "^26.0.0", @@ -336,7 +334,7 @@ "@stackpanel/config": "workspace:*", "@types/pg": "^8.20.0", "@types/react": "^19.2.14", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "drizzle-kit": "^0.31.8", "effect": "catalog:", "wrangler": "^4.81.1", @@ -420,8 +418,7 @@ "@stackpanel/api": "workspace:*", "@stackpanel/config": "workspace:*", "@trpc/client": "catalog:", - "alchemy": "^0.81.2", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "better-auth": "^1.6.1", "effect": "catalog:", "sst": "^3.17.25", @@ -587,8 +584,7 @@ "@trpc/tanstack-react-query": "^11.7.2", "@typescript/native-preview": "latest", "ai": "^5.0.49", - "alchemy": "^0.77.0", - "alchemy-effect": "^0.12.0", + "alchemy": "2.0.0-beta.20", "better-auth": "^1.4.5", "dotenv": "^17.2.2", "effect": "4.0.0-beta.48", @@ -600,19 +596,19 @@ "zod": "^4.1.13", }, "packages": { - "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.71", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-bUWOzrzR0gJKJO/PLGMR4uH2dqEgqGhrsCV+sSpk4KtOEnUQlfjZI/F7BFlqSvVpFbjdgYRRLysAeEZpJ6S1lg=="], + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.72", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-t0j9mggxylA9uP0hi12NlRk2npYh4QkE7JIpws2MdV/18QzHcsT6+TNGIjbOPayLQDjrmRKx78Ym7iZkg9qRxQ=="], - "@ai-sdk/gateway": ["@ai-sdk/gateway@2.0.82", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-vtoCSEBGPcxzChI3eqe9C9AJSlc/WUZp92tzpOqVd4B6Tnu4583S+qR7TknB0tPta15TEoOIkK0ENW6D/DgRJQ=="], + "@ai-sdk/gateway": ["@ai-sdk/gateway@2.0.83", "", { "dependencies": { "@ai-sdk/provider": "2.0.2", "@ai-sdk/provider-utils": "3.0.24", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-qgxu2++9tJTPZtC+VGczu21YNXTtzfrLQunqh7xcCaWSogAluchrGiKFS3IZkX7Se9dEt1yYZ6+d+cGo4cko6Q=="], - "@ai-sdk/google": ["@ai-sdk/google@2.0.70", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-NDMTvMo6vnPHDTA94FBOh3YMv0lxWDohYmFSGYhg0IimHMcOcC1ZV7E2KMLjzHOz5S7uasTITW7V3X5T+ozInQ=="], + "@ai-sdk/google": ["@ai-sdk/google@2.0.71", "", { "dependencies": { "@ai-sdk/provider": "2.0.2", "@ai-sdk/provider-utils": "3.0.24" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-98KQxlPEU1zL0wp/098EQZou36C6hIhiXnhGEatqb1l0xGsta/DsQ614GpRK8nCfeqAO2Q27vLcgX3oltujBbA=="], - "@ai-sdk/openai": ["@ai-sdk/openai@3.0.53", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Wld+Rbc05KaUn08uBt06eEuwcgalcIFtIl32Yp+GxuZXUQwOb6YeAuq+C6da4ch6BurFoqEaLemJVwjBb7x+PQ=="], + "@ai-sdk/openai": ["@ai-sdk/openai@3.0.54", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-j1qrNe/ebUKuE+fETzS+CVnczs11jQBR9y9M6aoKtJZAosg6SZnPC1Bb92e2u6yaSK+88TZoFhiY67uYphPitw=="], - "@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="], + "@ai-sdk/provider": ["@ai-sdk/provider@3.0.9", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-/ngMKqKdL9dSlY/eQ3NFDzzFyw0Hix+cbFFlyuKEKcOgpHdBt/spKUvX/i0wGrDLFPYJeVvv3N0j92LxWRL7yQ=="], - "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.23", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ=="], + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.24", "", { "dependencies": { "@ai-sdk/provider": "2.0.2", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Zq6olgYvpMgfstQNpDwgqDC2wBEE+OnMnMuq4JyIu+aWjL8JJl+6u1sbKJNPxASErWrRlmOPIkat2fHiN4puhA=="], - "@ai-sdk/react": ["@ai-sdk/react@3.0.170", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.23", "ai": "6.0.168", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-YUDn+mK0c8iUz14rCBf1A0zg6SV5b5aSVUz+azF1bdBd1SFXVI19dKYR+PQSpZY+0+z+zs252AAsacUqiO98Kw=="], + "@ai-sdk/react": ["@ai-sdk/react@3.0.171", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.24", "ai": "6.0.169", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-Qj1r9ThvgaduiFJpo41ObqJn7QxyFN79B2fk/KJcR9nVJVmZNljhlvBcq1w3qoa9/R0HbJvN1TgS7Ly3puam8w=="], "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], @@ -664,55 +660,55 @@ "@aws-sdk/client-cloudfront": ["@aws-sdk/client-cloudfront@3.984.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.6", "@aws-sdk/credential-provider-node": "^3.972.5", "@aws-sdk/middleware-host-header": "^3.972.3", "@aws-sdk/middleware-logger": "^3.972.3", "@aws-sdk/middleware-recursion-detection": "^3.972.3", "@aws-sdk/middleware-user-agent": "^3.972.6", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", "@aws-sdk/util-endpoints": "3.984.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.4", "@smithy/config-resolver": "^4.4.6", "@smithy/core": "^3.22.0", "@smithy/fetch-http-handler": "^5.3.9", "@smithy/hash-node": "^4.2.8", "@smithy/invalid-dependency": "^4.2.8", "@smithy/middleware-content-length": "^4.2.8", "@smithy/middleware-endpoint": "^4.4.12", "@smithy/middleware-retry": "^4.4.29", "@smithy/middleware-serde": "^4.2.9", "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.28", "@smithy/util-defaults-mode-node": "^4.2.31", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", "@smithy/util-stream": "^4.5.10", "@smithy/util-utf8": "^4.2.0", "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" } }, "sha512-couDuDLpJtoeWne/nYyJ+I+5ntBVdNgBVRTCoDaXuVV7OC3u/wz5Ps0+GogspEwMLEFoOJ8t691h3YXQtnpQTw=="], - "@aws-sdk/client-cognito-identity": ["@aws-sdk/client-cognito-identity@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-Tr13HNnBBLhag78gA/1kRekaw0BCkM2LVxT//ZFr51jNEhLGjrEU2iGjTiRlef898uedDiJ8I/m7cmSTitlUyw=="], + "@aws-sdk/client-cognito-identity": ["@aws-sdk/client-cognito-identity@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-tTSXUZXzydM0VUoxcrM4YrhhQfFgepfpbRLEq460650rFAC8NsGhGQ6Ixo7UPV6TKEyI/jQcCnQVi4RVM4SkAg=="], "@aws-sdk/client-dynamodb": ["@aws-sdk/client-dynamodb@3.984.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.6", "@aws-sdk/credential-provider-node": "^3.972.5", "@aws-sdk/dynamodb-codec": "^3.972.7", "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", "@aws-sdk/middleware-host-header": "^3.972.3", "@aws-sdk/middleware-logger": "^3.972.3", "@aws-sdk/middleware-recursion-detection": "^3.972.3", "@aws-sdk/middleware-user-agent": "^3.972.6", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", "@aws-sdk/util-endpoints": "3.984.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.4", "@smithy/config-resolver": "^4.4.6", "@smithy/core": "^3.22.0", "@smithy/fetch-http-handler": "^5.3.9", "@smithy/hash-node": "^4.2.8", "@smithy/invalid-dependency": "^4.2.8", "@smithy/middleware-content-length": "^4.2.8", "@smithy/middleware-endpoint": "^4.4.12", "@smithy/middleware-retry": "^4.4.29", "@smithy/middleware-serde": "^4.2.9", "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.28", "@smithy/util-defaults-mode-node": "^4.2.31", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", "@smithy/util-utf8": "^4.2.0", "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" } }, "sha512-8/Oft9MWQtbG6p9f8eY5fsKC2CcO5YVDlwive8eUYS9mEbgnyQxm68OyH26WvsSTykQ9QkIbR+fOG56RsIBODw=="], - "@aws-sdk/client-ec2": ["@aws-sdk/client-ec2@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-sdk-ec2": "^3.972.20", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.16", "tslib": "^2.6.2" } }, "sha512-6IA461ToMENbE/MalbowWLx5UuUVvQlq0WF0r17KuEjaVJ1syjZLq1WTRjCn+1n3GKL1kMoXvlDq/9mSxPFWEA=="], + "@aws-sdk/client-ec2": ["@aws-sdk/client-ec2@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-sdk-ec2": "^3.972.22", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-hfI1tBw6JkH27ownEe5OZJrZLHiAuI8AKMNZ3xQMrq/y0O7bNFgVL4cPkRxQ3II8EDWa+iLpN7ikrykw02nqwg=="], - "@aws-sdk/client-ecr": ["@aws-sdk/client-ecr@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.16", "tslib": "^2.6.2" } }, "sha512-W34UD/ej+epjRMxBahnsmPjMFzPNx7maNKZMsIU9jbuuHcFeamM/BmqCZGNClFiFKu5nNE0MKvl7D+1QVFkd1g=="], + "@aws-sdk/client-ecr": ["@aws-sdk/client-ecr@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-Zuk+nMfT+mb+PkQCCPxrA91gg0MXmLPqYkemCJAr56sDS3GIrnuomB3QNfynnyo4KM00P8aH/5E/3De6F6Yl6w=="], - "@aws-sdk/client-elastic-load-balancing-v2": ["@aws-sdk/client-elastic-load-balancing-v2@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.16", "tslib": "^2.6.2" } }, "sha512-uNjewALsxsQuvuPTcivzEWHti0srxPYobgHVhNPT7/ARqrprqWbPkrLfDDwDxtouiGUlza+hEecPme8Y8723Ng=="], + "@aws-sdk/client-elastic-load-balancing-v2": ["@aws-sdk/client-elastic-load-balancing-v2@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-ejdhnXPAg2mA+q0zI9/6RPG/xjz0XSgGqyfYvOEtuU/rxg5Gm+nVQRfeljAZ3rjf6o/UFaT5LjWVAO5LP+3QnA=="], - "@aws-sdk/client-iam": ["@aws-sdk/client-iam@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.16", "tslib": "^2.6.2" } }, "sha512-DeU8ajiEA4rPqFsXB2D2l8+ydqrgpogaARX2Tgi1KrsnD+I8M/11ErtDdDNClr7ARcGC0kCdP5I54tO5B/pPzQ=="], + "@aws-sdk/client-iam": ["@aws-sdk/client-iam@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-Sju/xqXvgf5u/DFkjI9XjWvaChKu9l3Aav46nnz0KhmBGScFUhx0fWlIayE5hlWfHZDPOWsGpf2wQ8bEka2qyA=="], - "@aws-sdk/client-kms": ["@aws-sdk/client-kms@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-A1YNU+vrnZcmjI1ZvnNwjlMG1uX14FLmG+EqHYZgIhlYJjfS4aMFdLs+jxzkkjEqRaX9VCgXXJZNb5fobrA/4Q=="], + "@aws-sdk/client-kms": ["@aws-sdk/client-kms@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-VDv6dFeAUgTTI2p0YSqiwwdsdh+sw7uwu7oR+KjE49FbiSls/ky0gsDjcE+sAb1ujejvR/FVpnE7NlYlNlTGPg=="], "@aws-sdk/client-lambda": ["@aws-sdk/client-lambda@3.984.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.6", "@aws-sdk/credential-provider-node": "^3.972.5", "@aws-sdk/middleware-host-header": "^3.972.3", "@aws-sdk/middleware-logger": "^3.972.3", "@aws-sdk/middleware-recursion-detection": "^3.972.3", "@aws-sdk/middleware-user-agent": "^3.972.6", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", "@aws-sdk/util-endpoints": "3.984.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.4", "@smithy/config-resolver": "^4.4.6", "@smithy/core": "^3.22.0", "@smithy/eventstream-serde-browser": "^4.2.8", "@smithy/eventstream-serde-config-resolver": "^4.3.8", "@smithy/eventstream-serde-node": "^4.2.8", "@smithy/fetch-http-handler": "^5.3.9", "@smithy/hash-node": "^4.2.8", "@smithy/invalid-dependency": "^4.2.8", "@smithy/middleware-content-length": "^4.2.8", "@smithy/middleware-endpoint": "^4.4.12", "@smithy/middleware-retry": "^4.4.29", "@smithy/middleware-serde": "^4.2.9", "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.28", "@smithy/util-defaults-mode-node": "^4.2.31", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", "@smithy/util-stream": "^4.5.10", "@smithy/util-utf8": "^4.2.0", "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" } }, "sha512-kqwNBIGNxGVhINwgN/UQfdsQkaMjbu9PFV2EhATWouV+RT60uMjK9JENgLDwbgJmEVbbnPsh9HaZ5KKwPSdiDg=="], - "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.1031.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-bucket-endpoint": "^3.972.10", "@aws-sdk/middleware-expect-continue": "^3.972.10", "@aws-sdk/middleware-flexible-checksums": "^3.974.8", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-location-constraint": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-sdk-s3": "^3.972.29", "@aws-sdk/middleware-ssec": "^3.972.10", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/signature-v4-multi-region": "^3.996.17", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/eventstream-serde-browser": "^4.2.14", "@smithy/eventstream-serde-config-resolver": "^4.3.14", "@smithy/eventstream-serde-node": "^4.2.14", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-blob-browser": "^4.2.15", "@smithy/hash-node": "^4.2.14", "@smithy/hash-stream-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/md5-js": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-stream": "^4.5.23", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.16", "tslib": "^2.6.2" } }, "sha512-HflwKSpDl2pwPiH116n9dy1pKW+5yEoiGFor6NO1yADgge+QY5LqluBiHscD7k/o9ib+dgxf6Vg4WsctcRT3OA=="], + "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.1038.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-bucket-endpoint": "^3.972.10", "@aws-sdk/middleware-expect-continue": "^3.972.10", "@aws-sdk/middleware-flexible-checksums": "^3.974.14", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-location-constraint": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-sdk-s3": "^3.972.35", "@aws-sdk/middleware-ssec": "^3.972.10", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/signature-v4-multi-region": "^3.996.23", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/eventstream-serde-browser": "^4.2.14", "@smithy/eventstream-serde-config-resolver": "^4.3.14", "@smithy/eventstream-serde-node": "^4.2.14", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-blob-browser": "^4.2.15", "@smithy/hash-node": "^4.2.14", "@smithy/hash-stream-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/md5-js": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-stream": "^4.5.25", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-k60qm50bWkaqNfCJe1z28WaqgpztE0wbWVMZw6ZJcTOGfrWFhsJeLCEqtkH8w00iEozKx9GQwdQXz4G0sMGdKA=="], "@aws-sdk/client-sqs": ["@aws-sdk/client-sqs@3.984.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.6", "@aws-sdk/credential-provider-node": "^3.972.5", "@aws-sdk/middleware-host-header": "^3.972.3", "@aws-sdk/middleware-logger": "^3.972.3", "@aws-sdk/middleware-recursion-detection": "^3.972.3", "@aws-sdk/middleware-sdk-sqs": "^3.972.5", "@aws-sdk/middleware-user-agent": "^3.972.6", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", "@aws-sdk/util-endpoints": "3.984.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.4", "@smithy/config-resolver": "^4.4.6", "@smithy/core": "^3.22.0", "@smithy/fetch-http-handler": "^5.3.9", "@smithy/hash-node": "^4.2.8", "@smithy/invalid-dependency": "^4.2.8", "@smithy/md5-js": "^4.2.8", "@smithy/middleware-content-length": "^4.2.8", "@smithy/middleware-endpoint": "^4.4.12", "@smithy/middleware-retry": "^4.4.29", "@smithy/middleware-serde": "^4.2.9", "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.28", "@smithy/util-defaults-mode-node": "^4.2.31", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-TDvHpOUWlpanc3xQ5Xw0y8L2hoojBFCCSmXQ/6rKqGOf1ScX3dMA+K9aF0Zp0iwjhSh4VvsHD42esl8XwQZDjA=="], - "@aws-sdk/client-ssm": ["@aws-sdk/client-ssm@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.16", "tslib": "^2.6.2" } }, "sha512-d05WMqhqEF45sNr99E1Zg4Cg0a1dPMKAvKAA0g7weGG4XwFLBDq7gN/D8THMcP62AVBhGqwUFkOVfGeLxgguQQ=="], + "@aws-sdk/client-ssm": ["@aws-sdk/client-ssm@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-xP6CqJkTOvX06+IghNmohu1qvzYQBmdszPHPCkCTJi3FKFQXdKpkSsaeAedBLExLW49GnHg0kVPblMGFFhirXg=="], - "@aws-sdk/client-sts": ["@aws-sdk/client-sts@3.1031.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-95PpEMU8EK4tOIWAVlPrJ2Ie1rb18vo+7Vf/Q233fgRkB4/yRLh5efPN+xQe15sTmrTNQzHcv2+xemsD76Vw+Q=="], + "@aws-sdk/client-sts": ["@aws-sdk/client-sts@3.1038.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/signature-v4-multi-region": "^3.996.23", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-lboBAXDIr+ot5a357mQgaAwgMMYZW7EwO216LTASUHV3UN4YgqskrEcwsDV9765KH9wUDGxFt8rClS4ixaOgiA=="], - "@aws-sdk/core": ["@aws-sdk/core@3.974.0", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws-sdk/xml-builder": "^3.972.18", "@smithy/core": "^3.23.15", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-8j+dMtyDqNXFmi09CBdz8TY6Ltf2jhfHuP6ZvG4zVjndRc6JF0aeBUbRwQLndbptFCsdctRQgdNWecy4TIfXAw=="], + "@aws-sdk/core": ["@aws-sdk/core@3.974.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws-sdk/xml-builder": "^3.972.20", "@smithy/core": "^3.23.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-8Vu7zGxu+39ChR/s5J7nXBw3a2kMHAi0OfKT8ohgTVjX0qYed/8mIfdBb638oBmKrWCwwKjYAM5J/4gMJ8nAJA=="], "@aws-sdk/crc64-nvme": ["@aws-sdk/crc64-nvme@3.972.7", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-QUagVVBbC8gODCF6e1aV0mE2TXWB9Opz4k8EJFdNrujUVQm5R4AjJa1mpOqzwOuROBzqJU9zawzig7M96L8Ejg=="], - "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.23", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.996.20", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-s348nPRtP3ROgG3CwOrG7RmJ6G9vYJMtHKQkesYLEBRG9Oo3TrjlYUZz03ejgt36f55NeOAQKidG8+GXo8/gsg=="], + "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.29", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-fklwtMw+9+1TRNa7KOCaaE9P9ubN6PdKCVlviX/vPRNtnMGIivAFrWcYsAcyw+sHPPioiSCSOHKKAhtOkO6IGg=="], - "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.26", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WBHAMxyPdgeJY6ZGLvq9mJwzZ+GaNUROQbfdVshtMsDVBrZTj5ZuFjKclSjSHvKSHJ4Y4O2yvI/aA/hrJbYfng=="], + "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.32", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-7vA4GHg8NSmQxquJHSBcSM3RgB4ZaaRi6u4+zGFKOmOH6aqlgr2Sda46clkZDYzlirgfY96w15Zj0jh6PT48ng=="], - "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.28", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/types": "^3.973.8", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.5.3", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.23", "tslib": "^2.6.2" } }, "sha512-+1DwCjjpo1WoiZTN08yGitI3nUwZUSQWVWFrW4C46HqZwACjcUQ7C66tnKPBTVxrEYYDOP11A6Afmu1L6ylt3g=="], + "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.34", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "sha512-vBrhWujFCLp1u8ptJRWYlipMutzPptb8pDQ00rKVH9q67T7rGd3VTWIj63aKrlLuY6qSsw1Rt5F/D/7wnNgryA=="], - "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.30", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-env": "^3.972.26", "@aws-sdk/credential-provider-http": "^3.972.28", "@aws-sdk/credential-provider-login": "^3.972.30", "@aws-sdk/credential-provider-process": "^3.972.26", "@aws-sdk/credential-provider-sso": "^3.972.30", "@aws-sdk/credential-provider-web-identity": "^3.972.30", "@aws-sdk/nested-clients": "^3.996.20", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-Fg1oJcoijwOZjTxdbx+ubqbQl8YEQ4Cwhjw6TWzQjuDEvQYNhnCXW2pN7eKtdTrdE4a6+5TVKGSm2I+i2BKIQg=="], + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-env": "^3.972.32", "@aws-sdk/credential-provider-http": "^3.972.34", "@aws-sdk/credential-provider-login": "^3.972.36", "@aws-sdk/credential-provider-process": "^3.972.32", "@aws-sdk/credential-provider-sso": "^3.972.36", "@aws-sdk/credential-provider-web-identity": "^3.972.36", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-FBHyCmV8EB0gUvh1d+CZm87zt2PrdC7OyWexLRoH3I5zWSOUGa+9t58Y5jbxRfwUp3AWpHAFvKY6YzgR845sVA=="], - "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.30", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/nested-clients": "^3.996.20", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-nchIrrI/7dgjG1bW/DEWOJc00K9n+kkl6B8Mk0KO6d4GfWBOXlVr9uHp7CJR9FIrjmov5SGjHXG2q9XAtkRw6Q=="], + "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IFap01lJKxQc0C/OHmZwZQr/cKq0DhrcmKedRrdnnl42D+P0SImnnnWQjv07uIPqpEdtqmkPXb9TiPYTU+prxQ=="], - "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.31", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.26", "@aws-sdk/credential-provider-http": "^3.972.28", "@aws-sdk/credential-provider-ini": "^3.972.30", "@aws-sdk/credential-provider-process": "^3.972.26", "@aws-sdk/credential-provider-sso": "^3.972.30", "@aws-sdk/credential-provider-web-identity": "^3.972.30", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-99OHVQ6eZ5DTxiOWgHdjBMvLqv7xoY4jLK6nZ1NcNSQbAnYZkQNIHi/VqInc9fnmg7of9si/z+waE6YL9OQIlw=="], + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.37", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.32", "@aws-sdk/credential-provider-http": "^3.972.34", "@aws-sdk/credential-provider-ini": "^3.972.36", "@aws-sdk/credential-provider-process": "^3.972.32", "@aws-sdk/credential-provider-sso": "^3.972.36", "@aws-sdk/credential-provider-web-identity": "^3.972.36", "@aws-sdk/types": "^3.973.8", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-/WFixFAAiw8WpmjZcI0l4t3DerXLmVinOIfuotmRZnu2qmsFPoqqmstASz0z8bi1pGdFXzeLzf6bwucM3mZcUQ=="], - "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.26", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-jibxNld3m+vbmQwn98hcQ+fLIVrx3cQuhZlSs1/hix48SjDS5/pjMLwpmtLD/lFnd6ve1AL4o1bZg3X1WRa2SQ=="], + "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.32", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-uZp4tlGbpczV8QxmtIwOpSkcyGtBRR8/T4BAumRKfAt1nwCig3FSCZvrKl6ARDIDVRYn5p2oRcAsfFR01EgMGA=="], - "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.30", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/nested-clients": "^3.996.20", "@aws-sdk/token-providers": "3.1031.0", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-honYIM17F/+QSWJRE84T4u//ofqEi7rLbnwmIpu7fgFX5PML78wbtdSAy5Xwyve3TLpE9/f9zQx0aBVxSjAOPw=="], + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/token-providers": "3.1038.0", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-DsLr0UHMyKzRJKe2bjlwU8q1cfoXg8TIJKV/xwvnalAemiZLOZunFzj/whGnFDZIBVLdnbLiwv5SvRf1+CSwkg=="], - "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.30", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/nested-clients": "^3.996.20", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-CyL4oWUlONQRN2SsYMVrA9Z3i3QfLWTQctI8tuKbjNGCVVDCnJf/yMbSJCOZgpPFRtxh7dgQwvpqwmJm+iytmw=="], + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-uzrURO7frJhHQVVNR5zBJcCYeMYflmXcWBK1+MiBym2Dfjh6nXATrMixrmGZi+97Q7ETZ+y/4lUwAy0Nfnznjw=="], - "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.1031.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.1031.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/credential-provider-cognito-identity": "^3.972.23", "@aws-sdk/credential-provider-env": "^3.972.26", "@aws-sdk/credential-provider-http": "^3.972.28", "@aws-sdk/credential-provider-ini": "^3.972.30", "@aws-sdk/credential-provider-login": "^3.972.30", "@aws-sdk/credential-provider-node": "^3.972.31", "@aws-sdk/credential-provider-process": "^3.972.26", "@aws-sdk/credential-provider-sso": "^3.972.30", "@aws-sdk/credential-provider-web-identity": "^3.972.30", "@aws-sdk/nested-clients": "^3.996.20", "@aws-sdk/types": "^3.973.8", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-SN11xsyj+iggyPpnfTbthZkcSPeX5aHQiAYMzTbOLYOcbhYLS3mDKQvon6bDBLRNOONkmuC/9sQWjuHt8A4f8g=="], + "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.1038.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.1038.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/credential-provider-cognito-identity": "^3.972.29", "@aws-sdk/credential-provider-env": "^3.972.32", "@aws-sdk/credential-provider-http": "^3.972.34", "@aws-sdk/credential-provider-ini": "^3.972.36", "@aws-sdk/credential-provider-login": "^3.972.36", "@aws-sdk/credential-provider-node": "^3.972.37", "@aws-sdk/credential-provider-process": "^3.972.32", "@aws-sdk/credential-provider-sso": "^3.972.36", "@aws-sdk/credential-provider-web-identity": "^3.972.36", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-+B9BuRVPPKF0Q6msVS4vUGOsL4eUg7XYogikp56rUEQVoUVxn5ONyWlnNzsDMTv+BwuBgFo5N7gRZtEToAnSgg=="], - "@aws-sdk/dynamodb-codec": ["@aws-sdk/dynamodb-codec@3.973.0", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@smithy/core": "^3.23.15", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-PUavIwsBQ7kQiti4zn1fa/5Na58Bwd1EhXBuoN/PgSMhbz5jHmssWDMwXQuqKJscFx+grZHwGNYFQWf9DtuOOQ=="], + "@aws-sdk/dynamodb-codec": ["@aws-sdk/dynamodb-codec@3.973.6", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@smithy/core": "^3.23.17", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-iRROKMI/cu6YuH+oOPKtbxhYlybRSGoF/8emZUc6rjFMoQCTrZHEwhCobqDBRnld5WutOESv/4RkEjUTkdHuLA=="], "@aws-sdk/endpoint-cache": ["@aws-sdk/endpoint-cache@3.972.5", "", { "dependencies": { "mnemonist": "0.38.3", "tslib": "^2.6.2" } }, "sha512-itVdge0NozgtgmtbZ25FVwWU3vGlE7x7feE/aOEJNkQfEpbkrF8Rj1QmnK+2blFfYE1xWt/iU+6/jUp/pv1+MA=="], @@ -722,7 +718,7 @@ "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-2Yn0f1Qiq/DjxYR3wfI3LokXnjOhFM7Ssn4LTdFDIxRMCE6I32MAsVnhPX1cUZsuVA9tiZtwwhlSLAtFGxAZlQ=="], - "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.974.8", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/crc64-nvme": "^3.972.7", "@aws-sdk/types": "^3.973.8", "@smithy/is-array-buffer": "^4.2.2", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.23", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-c+bD9J3f56oOPmmseCfT6PhkykiC5vtq0/ZDaK7U1Da/u/b7ZhhidfTHGnqa1pMCro9ZkM4QBcJ70lP7RgnPWg=="], + "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.974.14", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/crc64-nvme": "^3.972.7", "@aws-sdk/types": "^3.973.8", "@smithy/is-array-buffer": "^4.2.2", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.25", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-mhTO3amGzYv/DQNbbqZo6UkHquBHlEEVRZwXmjeRqLmy1l9z3xCiFzglPL7n9JpVc2DZc9kjaraAn3JQrueZbw=="], "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg=="], @@ -732,29 +728,29 @@ "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ=="], - "@aws-sdk/middleware-sdk-ec2": ["@aws-sdk/middleware-sdk-ec2@3.972.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-format-url": "^3.972.10", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-nmkwdX9ImAvVtzBl65GzttDUV6GUL3KNbDs0nk3XYQS6KdQnxuGnvirw1CTCsDrMJOQgMmKY3TEHc0r+zZGc0Q=="], + "@aws-sdk/middleware-sdk-ec2": ["@aws-sdk/middleware-sdk-ec2@3.972.22", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-format-url": "^3.972.10", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-i9BeGH8OIPXmDuu5VZEvq3QVzP2Upt0QJsW/0ziS873CJ+zFiCyobiqQ3QTgJpxIsBBXBswsRQajEG+PvuKxYg=="], - "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-arn-parser": "^3.972.3", "@smithy/core": "^3.23.15", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.23", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-ayk68penP1WDZmyDZVeUQzq+HI3iDq5xezohUxIQoKFKE0KdCnDcxLCNnLanhBfgQDaKiGHVXhxZMDWJAEEBsQ=="], + "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.972.35", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-arn-parser": "^3.972.3", "@smithy/core": "^3.23.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.25", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-lLppaNTAz+wNgLdi4FtHzrlwrGF0ODTnBWHBaFg85SKs0eJ+M+tP5ifrA8f/0lNd+Ak3MC1NGC6RavV3ny4HTg=="], - "@aws-sdk/middleware-sdk-sqs": ["@aws-sdk/middleware-sdk-sqs@3.972.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-yt0w5FKyH8Or7OT/Bp3fDRAtI4/f6uaaRKnW9TmU9qv8c1HFh43C9nQYZ26IcyRm+tYFdrB65yNTav/YThu36A=="], + "@aws-sdk/middleware-sdk-sqs": ["@aws-sdk/middleware-sdk-sqs@3.972.22", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-DtR3mEiOUJcnEX/QuXmvbJto6xvQzp2ftnHb29c0aQYdmmzbKf0gsu9ovx1i/yy4ZR6m0rttTucS0iiP32dlGA=="], "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw=="], - "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.30", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@smithy/core": "^3.23.15", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-retry": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-lCz6JfelhjD6Eco1urXM2rOYRaxROSqeoY6IEKx+soegFJOajmIBCMHTAWuJl25Wf9IAST+i0/yOk9G3rMV26A=="], + "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.36", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@smithy/core": "^3.23.17", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-retry": "^4.3.5", "tslib": "^2.6.2" } }, "sha512-O2beToxguBvrZFFZ+fFgPbbae8MvyIBjQ6lImee4APHEXXNAD5ZJ2ayLF1mb7rsKw86TM81y5czg82bZncjSjg=="], - "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.20", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.0", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/region-config-resolver": "^3.972.12", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.7", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.16", "@smithy/config-resolver": "^4.4.16", "@smithy/core": "^3.23.15", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-retry": "^4.5.3", "@smithy/middleware-serde": "^4.2.18", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.5.3", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.47", "@smithy/util-defaults-mode-node": "^4.2.52", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-bzPdsNQnCh6TvvUmTHLZlL8qgyME6mNiUErcRMyJPywIl1BEu2VZRShel3mUoSh89bOBEXEWtjocDMolFxd/9A=="], + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.997.4", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.6", "@aws-sdk/middleware-host-header": "^3.972.10", "@aws-sdk/middleware-logger": "^3.972.10", "@aws-sdk/middleware-recursion-detection": "^3.972.11", "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/region-config-resolver": "^3.972.13", "@aws-sdk/signature-v4-multi-region": "^3.996.23", "@aws-sdk/types": "^3.973.8", "@aws-sdk/util-endpoints": "^3.996.8", "@aws-sdk/util-user-agent-browser": "^3.972.10", "@aws-sdk/util-user-agent-node": "^3.973.22", "@smithy/config-resolver": "^4.4.17", "@smithy/core": "^3.23.17", "@smithy/fetch-http-handler": "^5.3.17", "@smithy/hash-node": "^4.2.14", "@smithy/invalid-dependency": "^4.2.14", "@smithy/middleware-content-length": "^4.2.14", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-retry": "^4.5.6", "@smithy/middleware-serde": "^4.2.20", "@smithy/middleware-stack": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/node-http-handler": "^4.6.1", "@smithy/protocol-http": "^5.3.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.49", "@smithy/util-defaults-mode-node": "^4.2.54", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.5", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-4Sf+WY1lMJzXlw5MiyCMe/UzdILCwvuaHThbqMXS6dfh9gZy3No360I42RXquOI/ULUOhWy2HCyU0Fp20fQGPQ=="], - "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.12", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/config-resolver": "^4.4.16", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-QQI43Mxd53nBij0pm8HXC+t4IOC6gnhhZfzxE0OATQyO6QfPV4e+aTIRRuAJKA6Nig/cR8eLwPryqYTX9ZrjAQ=="], + "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.13", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/config-resolver": "^4.4.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A=="], - "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.17", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "^3.972.29", "@aws-sdk/types": "^3.973.8", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-qDwhXw+SIM5vMAMgflA8LPRa7xP+/wgXYr++llzCOwp7kkM2v7GGGWzoRW8e1CACaO4ljZd/NSQbsRLKm1sMWw=="], + "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.23", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "^3.972.35", "@aws-sdk/types": "^3.973.8", "@smithy/protocol-http": "^5.3.14", "@smithy/signature-v4": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-wBbys3Y53Ikly556vyADurKpYQHXS7Jjaskbz+Ga9PZCz7PB/9f3VdKbDlz7dqIzn+xwz7L/a6TR4iXcOi8IRw=="], - "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1031.0", "", { "dependencies": { "@aws-sdk/core": "^3.974.0", "@aws-sdk/nested-clients": "^3.996.20", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-zj/PvnbQK/2KJNln5K2QRI9HSsy+B4emz2gbQyUHkk6l7Lidu83P/9tfmC2cJXkcC3vdmyKH2DP3Iw/FDfKQuQ=="], + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1038.0", "", { "dependencies": { "@aws-sdk/core": "^3.974.6", "@aws-sdk/nested-clients": "^3.997.4", "@aws-sdk/types": "^3.973.8", "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-Qniru+9oGGb/HNK/gGZWbV3jsD0k71ngE7qMQ/x6gYNYLd2EOwHCS6E2E6jfkaqO4i0d+nNKmfRy8bNcshKdGQ=="], "@aws-sdk/types": ["@aws-sdk/types@3.973.8", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw=="], "@aws-sdk/util-arn-parser": ["@aws-sdk/util-arn-parser@3.972.3", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA=="], - "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-endpoints": "^3.4.1", "tslib": "^2.6.2" } }, "sha512-ty4LQxN1QC+YhUP28NfEgZDEGXkyqOQy+BDriBozqHsrYO4JMgiPhfizqOGF7P+euBTZ5Ez6SKlLAMCLo8tzmw=="], + "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-endpoints": "^3.4.2", "tslib": "^2.6.2" } }, "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g=="], "@aws-sdk/util-format-url": ["@aws-sdk/util-format-url@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/querystring-builder": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-DEKiHNJVtNxdyTeQspzY+15Po/kHm6sF0Cs4HV9Q2+lplB63+DrvdeiSoOSdWEWAoO2RcY1veoXVDz2tWxWCgQ=="], @@ -762,9 +758,9 @@ "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.8", "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g=="], - "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.16", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.30", "@aws-sdk/types": "^3.973.8", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-ccvu0FNCI0C6OqmxI/tWn7BD8qGooWuURssiIM+6vbksFO8opXR4JOGtGYPj8QYzN/vfwNYrcK344PPbYuvzRg=="], + "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.22", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.36", "@aws-sdk/types": "^3.973.8", "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-YTYqTmOUrwbm1h99Ee4y/mVYpFRl0oSO/amtP5cc1BZZWdaAVWs9zj3TkyRHWvR9aI/ZS8m3mS6awXtYUlWyaw=="], - "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.18", "", { "dependencies": { "@smithy/types": "^4.14.1", "fast-xml-parser": "5.5.8", "tslib": "^2.6.2" } }, "sha512-BMDNVG1ETXRhl1tnisQiYBef3RShJ1kfZA7x7afivTFMLirfHNTb6U71K569HNXhSXbQZsweHvSDZ6euBw8hPA=="], + "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.21", "", { "dependencies": { "@nodable/entities": "2.1.0", "@smithy/types": "^4.14.1", "fast-xml-parser": "5.7.2", "tslib": "^2.6.2" } }, "sha512-qxNiHUtlrsjTeSlrPWiFkWps7uD6YB4eKzg7eLAFH8jbiHTlt0ePNlo2Xu+WlftP38JIcMaIX4jTUjOlE2ySWw=="], "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.4", "", {}, "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ=="], @@ -860,25 +856,25 @@ "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "@base-ui/react": ["@base-ui/react@1.4.0", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.2.7", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-QcqdVbr/+ba2/RAKJIV1PV6S02Q5+r6a4Eym8ndBw+ZbBILkkmQAyRxXCg/pArrHnkrGeU8goe26aw0h6eE8pg=="], + "@base-ui/react": ["@base-ui/react@1.4.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.2.8", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw=="], - "@base-ui/utils": ["@base-ui/utils@0.2.7", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-nXYKhiL/0JafyJE8PfcflipGftOftlIwKd72rU15iZ1M5yqgg5J9P8NHU71GReDuXco5MJA/eVQqUT5WRqX9sA=="], + "@base-ui/utils": ["@base-ui/utils@0.2.8", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ=="], "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], - "@better-auth/core": ["@better-auth/core@1.6.5", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.39.0", "@standard-schema/spec": "^1.1.0", "zod": "^4.3.6" }, "peerDependencies": { "@better-auth/utils": "0.4.0", "@better-fetch/fetch": "1.1.21", "@cloudflare/workers-types": ">=4", "@opentelemetry/api": "^1.9.0", "better-call": "1.3.5", "jose": "^6.1.0", "kysely": "^0.28.5", "nanostores": "^1.0.1" }, "optionalPeers": ["@cloudflare/workers-types"] }, "sha512-T3u4rVsJcMWShG2qfQUlU1HdkQGLYX0+lcR48QV2Cp2kpBOLOTYdt+p6zZtGm2Omx/ReEouRQyKy7pYtahRQuA=="], + "@better-auth/core": ["@better-auth/core@1.6.9", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.39.0", "@standard-schema/spec": "^1.1.0", "zod": "^4.3.6" }, "peerDependencies": { "@better-auth/utils": "0.4.0", "@better-fetch/fetch": "1.1.21", "@cloudflare/workers-types": ">=4", "@opentelemetry/api": "^1.9.0", "better-call": "1.3.5", "jose": "^6.1.0", "kysely": "^0.28.5", "nanostores": "^1.0.1" }, "optionalPeers": ["@cloudflare/workers-types", "@opentelemetry/api"] }, "sha512-ADFk5pwmLybmc+LvYvXJ6M1x2oY/EyYLkwLuH0x28FUq12DfjL0wnE7g+WRDf3yozDO+qIxTpFGXDGwLKbfz0w=="], - "@better-auth/drizzle-adapter": ["@better-auth/drizzle-adapter@1.6.5", "", { "peerDependencies": { "@better-auth/core": "^1.6.5", "@better-auth/utils": "0.4.0", "drizzle-orm": "^0.45.2" }, "optionalPeers": ["drizzle-orm"] }, "sha512-9YjPW35+h66D+QA+YqEJ9pFP97ClLFR+QrTPZojkeP0PTYqpW0ErBK3p1pwRTJG88yK+o3Y4yOwoacMTBxz0jQ=="], + "@better-auth/drizzle-adapter": ["@better-auth/drizzle-adapter@1.6.9", "", { "peerDependencies": { "@better-auth/core": "^1.6.9", "@better-auth/utils": "0.4.0", "drizzle-orm": "^0.45.2" }, "optionalPeers": ["drizzle-orm"] }, "sha512-Lcco5hOGrMgc4XKAkvB6x72eQm4wCcya8IevMg4wBHY9W9GVg8pu23rpRX6VsVQSO4Ux13S7lFwUWtF7/r9aKw=="], - "@better-auth/kysely-adapter": ["@better-auth/kysely-adapter@1.6.5", "", { "peerDependencies": { "@better-auth/core": "^1.6.5", "@better-auth/utils": "0.4.0", "kysely": "^0.28.14" }, "optionalPeers": ["kysely"] }, "sha512-kbevd70qzKNR3ZHF7q6/e0XXYRCXanLB2rvmTd3T8WbNEd9kYMqKjgTGNxL1ri5N+PEDUK6zfHx/HrvaEOfoHw=="], + "@better-auth/kysely-adapter": ["@better-auth/kysely-adapter@1.6.9", "", { "peerDependencies": { "@better-auth/core": "^1.6.9", "@better-auth/utils": "0.4.0", "kysely": "^0.28.14" }, "optionalPeers": ["kysely"] }, "sha512-gyjuuxJtZ4o9G9z9q4kqn24X2kvMSp7F+KHogYxF03SnXY/2WleAcuj57iC4wP3e9mGDbjPOrnM5K6Kr3Ktdpw=="], - "@better-auth/memory-adapter": ["@better-auth/memory-adapter@1.6.5", "", { "peerDependencies": { "@better-auth/core": "^1.6.5", "@better-auth/utils": "0.4.0" } }, "sha512-5qFUpSdQi+RwHSmNyHMSsJIrFjed8d/ASS61L2xyW7sjBLTIuR7JcgS6hif5cQbtPeq+Qz+Wct5q8oKw33qyqQ=="], + "@better-auth/memory-adapter": ["@better-auth/memory-adapter@1.6.9", "", { "peerDependencies": { "@better-auth/core": "^1.6.9", "@better-auth/utils": "0.4.0" } }, "sha512-XmIG4tUnOXZ+KEcWjHUjOI9Z5donD09dC2t/AQTXifAUIqx7cySg86w0KTM09ArzAxRx1fCqO36Wkt5nULnrkQ=="], - "@better-auth/mongo-adapter": ["@better-auth/mongo-adapter@1.6.5", "", { "peerDependencies": { "@better-auth/core": "^1.6.5", "@better-auth/utils": "0.4.0", "mongodb": "^6.0.0 || ^7.0.0" }, "optionalPeers": ["mongodb"] }, "sha512-HvOUFTiSEFSGTzL/vE3FntTwQiZ79O/V+QcsCimR+65Bj3tOqdFaC1G2Yd1dQ9l2YHNXA9SNBrGekbk66RzJMw=="], + "@better-auth/mongo-adapter": ["@better-auth/mongo-adapter@1.6.9", "", { "peerDependencies": { "@better-auth/core": "^1.6.9", "@better-auth/utils": "0.4.0", "mongodb": "^6.0.0 || ^7.0.0" }, "optionalPeers": ["mongodb"] }, "sha512-h+AiRJ/TsBSi+ZDjySASBpbJ/9QCXBre34PSKgCz7QmTHrFM9Cg2EM4AM7LjR5lPXipEE+2rWPBc9wfnUBjhcw=="], - "@better-auth/prisma-adapter": ["@better-auth/prisma-adapter@1.6.5", "", { "peerDependencies": { "@better-auth/core": "^1.6.5", "@better-auth/utils": "0.4.0", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["@prisma/client", "prisma"] }, "sha512-d7PUO5XoimYYDEG/DoYVbOSbyVYJBDuZgvY9pjf8INccBTCD1BzcyEJ9NQil4huXWj4fcNaGOt2FG0OI8NtWOA=="], + "@better-auth/prisma-adapter": ["@better-auth/prisma-adapter@1.6.9", "", { "peerDependencies": { "@better-auth/core": "^1.6.9", "@better-auth/utils": "0.4.0", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["@prisma/client", "prisma"] }, "sha512-XHks01ntK20orqK/jICq8wmEbJ/zT6dct49Fk8zTQKN9QNGDc+Ix5+7z/Kvui0DXGFf790GfvRozquzaLtXa8Q=="], - "@better-auth/telemetry": ["@better-auth/telemetry@1.6.5", "", { "peerDependencies": { "@better-auth/core": "^1.6.5", "@better-auth/utils": "0.4.0", "@better-fetch/fetch": "1.1.21" } }, "sha512-Ag3CjAP+tLretKPq+pYdU/gU4pFIcey/AoNQzw671wV5JQZXrMitS65INi8j8QuYfol2xgQrht5KVlcxGrkhHQ=="], + "@better-auth/telemetry": ["@better-auth/telemetry@1.6.9", "", { "peerDependencies": { "@better-auth/core": "^1.6.9", "@better-auth/utils": "0.4.0", "@better-fetch/fetch": "1.1.21" } }, "sha512-0u5zkhSCAQFoN3DHvUkLHOF6MBbVTDAa6mU8mhPwiysdz1x21vMzhzfaAKN/ZGWaQ09v91/F+2qu42G/bhUV4A=="], "@better-auth/utils": ["@better-auth/utils@0.4.0", "", { "dependencies": { "@noble/hashes": "^2.0.1" } }, "sha512-RpMtLUIQAEWMgdPLNVbIF5ON2mm+CH0U3rCdUCU1VyeAUui4m38DyK7/aXMLZov2YDjG684pS1D0MBllrmgjQA=="], @@ -888,7 +884,7 @@ "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], - "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="], + "@bufbuild/protobuf": ["@bufbuild/protobuf@2.12.0", "", {}, "sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA=="], "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@12.0.0", "", { "dependencies": { "@chevrotain/gast": "12.0.0", "@chevrotain/types": "12.0.0" } }, "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg=="], @@ -906,9 +902,9 @@ "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.2", "", {}, "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ=="], - "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.16.0", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": "1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0" }, "optionalPeers": ["workerd"] }, "sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg=="], + "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.16.1", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": ">1.20260305.0 <2.0.0-0" }, "optionalPeers": ["workerd"] }, "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw=="], - "@cloudflare/vite-plugin": ["@cloudflare/vite-plugin@1.32.3", "", { "dependencies": { "@cloudflare/unenv-preset": "2.16.0", "miniflare": "4.20260415.0", "unenv": "2.0.0-rc.24", "wrangler": "4.83.0", "ws": "8.18.0" }, "peerDependencies": { "vite": "^6.1.0 || ^7.0.0 || ^8.0.0" } }, "sha512-a8ZkCA/SOiJ36jT3LlBLkUb7ZzGInhYJoTY4BMRBGdk+nsh44HavbNvtu/RdaqS5VJEMLM4+LqVIJ+V0ahGeFg=="], + "@cloudflare/vite-plugin": ["@cloudflare/vite-plugin@1.34.0", "", { "dependencies": { "@cloudflare/unenv-preset": "2.16.1", "miniflare": "4.20260426.0", "unenv": "2.0.0-rc.24", "wrangler": "4.86.0", "ws": "8.18.0" }, "peerDependencies": { "vite": "^6.1.0 || ^7.0.0 || ^8.0.0" } }, "sha512-ZsdedDrK5WiJzelgKtgy3FHTbnG1dfrLNDy+5JPqrMx4el63eTYFLV89uI9LefVwyE6BfMz5UHbpYOdRbkUVlg=="], "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260412.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-wcbosMKmJC/GWtW35yMQi2eI68KPbiFufuVxNakZgnrwPS/CpQH3hNp6ssb9828beaXRIbxJE7RGs7nVr6Fsww=="], @@ -920,7 +916,7 @@ "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260412.1", "", { "os": "win32", "cpu": "x64" }, "sha512-EYkN/L+/7seeSmcFXkWrFrffrLJ0r1m3NbRCraBhFwcIos49pD1T0eeMTAuXj0zckOsaYMlsG89QdOXy5MuyRQ=="], - "@cloudflare/workers-types": ["@cloudflare/workers-types@4.20260417.1", "", {}, "sha512-ke3GkFfFyfSxdLRR6LPbnfYAu3RNKqX0eYfu/FNnluBN9rLgYVqT+QEPgSEx1yq7XTOok+Bub1td9xvknaOz4A=="], + "@cloudflare/workers-types": ["@cloudflare/workers-types@4.20260426.1", "", {}, "sha512-cBYeQaWwv/jFV8ualmwp6wIxmAf0rDe2DPPQwPbslKmPHqgv861YpAvm45r05K40QboZgxNQVIPgNkmtHqZeJQ=="], "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], @@ -948,9 +944,9 @@ "@dimforge/rapier2d-simd-compat": ["@dimforge/rapier2d-simd-compat@0.17.3", "", {}, "sha512-bijvwWz6NHsNj5e5i1vtd3dU2pDhthSaTUZSh14DUGGKJfw8eMnlWZsxwHBxB/a3AXVNDjL9abuHw1k9FGR+jg=="], - "@distilled.cloud/aws": ["@distilled.cloud/aws@0.13.0", "", { "dependencies": { "@aws-crypto/crc32": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/credential-providers": "^3.994.0", "@aws-sdk/types": "^3.973.1", "@distilled.cloud/core": "0.13.0", "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "aws4fetch": "^1.0.20", "effect": "4.0.0-beta.58", "fast-xml-parser": "^5.3.2" } }, "sha512-KG28DKZ9oHSCqiGy6dbu+t26MoFwBNergLrQX9RoMrcCvAhYbo/pr5UoRujoWolSkiNMbyLlLWznv0ywn/DxRw=="], + "@distilled.cloud/aws": ["@distilled.cloud/aws@0.13.1", "", { "dependencies": { "@aws-crypto/crc32": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/credential-providers": "^3.994.0", "@aws-sdk/types": "^3.973.1", "@distilled.cloud/core": "0.13.1", "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "aws4fetch": "^1.0.20", "effect": "4.0.0-beta.58", "fast-xml-parser": "^5.3.2" } }, "sha512-421xD7at+sAUq1kcC2tIiV8fGnD/cayJx7sMwxTC2n7CC0TCz1rAXCmUg+QuXKLspsCCULIPP75eZLDSH3PoWQ=="], - "@distilled.cloud/axiom": ["@distilled.cloud/axiom@0.13.0", "", { "dependencies": { "@distilled.cloud/core": "0.13.0", "effect": "4.0.0-beta.58" } }, "sha512-9TLCTRwB9gxniuCCMo9q6Y+tmPkjDELPkcdm3Q4vIVgYZr/OSuvXJVSJhqn+0DGcwPal7uZnxiJcSIt8TU5LMg=="], + "@distilled.cloud/axiom": ["@distilled.cloud/axiom@0.13.1", "", { "dependencies": { "@distilled.cloud/core": "0.13.1", "effect": "4.0.0-beta.58" } }, "sha512-Ig1T77nnzIO7toZ392JUVvCXnLN6YugnElXL5W4ZOvWHsNIjQ0QezDK19Q2FqZtwEgfEFd3UyNedTQCqmoLfgg=="], "@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.10.2", "", { "dependencies": { "@distilled.cloud/core": "0.10.2", "effect": "4.0.0-beta.48" } }, "sha512-IfbqNHlxTeXNsURWVNWTkB8A3fEAw6gfmjDOJj5/vt33YN3vlsy1DXcnweOELTCGs37FRFdpuV0dNVPxSbJnpQ=="], @@ -958,7 +954,7 @@ "@distilled.cloud/cloudflare-vite-plugin": ["@distilled.cloud/cloudflare-vite-plugin@0.1.0", "", { "dependencies": { "@distilled.cloud/cloudflare-rolldown-plugin": "0.2.0" }, "peerDependencies": { "vite": "^8.0.0" } }, "sha512-Brluigro6OXOmGKea8LCbs43u+pI7NsxtvEFLU8eO2Go2hDqcwLQ3fc4YiXq4Y6nRYUpkoiGV2ITynttV+/suA=="], - "@distilled.cloud/core": ["@distilled.cloud/core@0.13.0", "", { "dependencies": { "effect": "4.0.0-beta.58" } }, "sha512-Xu0oGfVUD0SkuKso93g5TkWC0Tjd2imDZyrefdbnLHdkWdPubFodaurwLJj4Kk3lr1n+oYx1dwCafpjbbRxnHQ=="], + "@distilled.cloud/core": ["@distilled.cloud/core@0.13.1", "", { "dependencies": { "effect": "4.0.0-beta.58" } }, "sha512-CncOtnwY3A8KNwp60C18ws2rKrNgC8GrMSNgiO84KilzAVpiCIoeoGW8xF58u/OVviXKfmQcxUBiNB15WFAZBA=="], "@distilled.cloud/fly-io": ["@distilled.cloud/fly-io@0.11.0", "", { "dependencies": { "@distilled.cloud/core": "0.11.0", "effect": "4.0.0-beta.48" } }, "sha512-zJHd0lDSMrnQlgX1BaGNFUvt3wuHTDvmw/v6O0a53dMfHonWnJW5H2RkUG31MZl42bxiHsaF7aFr0bTFuR7YeA=="], @@ -972,9 +968,9 @@ "@ecies/ciphers": ["@ecies/ciphers@0.2.6", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g=="], - "@effect/language-service": ["@effect/language-service@0.77.0", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-QP2bri8DdcK7Eo+SqFS2yNeD0Ch9kKHYxq2jeE9CaPpBknevCNFb3+hT6qSsPt2P6yOkhNP83KMy5Uk7DGBXlg=="], + "@effect/language-service": ["@effect/language-service@0.85.1", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-EXnJjIy6zQ3nUO/MZ+ynWUb8B895KZPotd1++oTs9JjDkplwM7cb6zo8Zq2zU6piwq+KflO7amXbEfj1UMpHkw=="], - "@effect/platform": ["@effect/platform@0.96.0", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.4", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.21.0" } }, "sha512-U7PLhkVzg7zzrgFvyWATOzD6reL87KG/fcdOxgLWBQ/J5CCU6qdPAVG+0o6o+IxcsLoqGwxs+rFxaFzrdtDV1A=="], + "@effect/platform": ["@effect/platform@0.96.1", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.10", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.21.2" } }, "sha512-cjB1QZZYEP8JXCFNGvBLVi0T6YUBQTmOVEUA3SDbiQ6RUO+p6CE3eyD2vMWmrz5nE8yY5QSAuOV9v0boEcUv+A=="], "@effect/platform-bun": ["@effect/platform-bun@4.0.0-beta.48", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0-beta.48" }, "peerDependencies": { "effect": "^4.0.0-beta.48" } }, "sha512-IFECogXd6BW0qtzZgCF9HdwP4tVMhz9D+hwFmGWh5cmqCeDIA2YnmWuhCsJZ9/iNwfpsWv9a68mysAcUFwTS+A=="], @@ -1078,7 +1074,7 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], - "@fontsource-variable/google-sans-code": ["@fontsource-variable/google-sans-code@5.2.3", "", {}, "sha512-2ZQ8UkMMxz/MXve9PY8o5FjTnRZh94Jn5ZfND5mUDWwVh/t0JDgFaIdPPONyNGzlJOgn1Qlyhs2YEMbv5yQpLQ=="], + "@fontsource-variable/google-sans-code": ["@fontsource-variable/google-sans-code@5.2.4", "", {}, "sha512-70i7eS9B7VYT1sJcpU+bYnCrKwWOh8+RCTZNLgzE3crUaDwAqx0hRhd2Hr0ZyStJq88f+CF8/r+YUK0A3gMsPA=="], "@fontsource-variable/inter": ["@fontsource-variable/inter@5.2.8", "", {}, "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ=="], @@ -1110,9 +1106,11 @@ "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], + + "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="], "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], @@ -1124,7 +1122,7 @@ "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], - "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], + "@iconify/utils": ["@iconify/utils@3.1.1", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.2" } }, "sha512-MwzoDtw9rO1x+qfgLTV/IVXsHDBqeYZoMIQC8SfxfYSlaSUG+oWiAcoiB1yajAda6mqblm4/1/w2E8tRu7a7Tw=="], "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], @@ -1178,9 +1176,9 @@ "@inquirer/ansi": ["@inquirer/ansi@2.0.5", "", {}, "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw=="], - "@inquirer/confirm": ["@inquirer/confirm@6.0.11", "", { "dependencies": { "@inquirer/core": "^11.1.8", "@inquirer/type": "^4.0.5" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-pTpHjg0iEIRMYV/7oCZUMf27/383E6Wyhfc/MY+AVQGEoUobffIYWOK9YLP2XFRGz/9i6WlTQh1CkFVIo2Y7XA=="], + "@inquirer/confirm": ["@inquirer/confirm@6.0.12", "", { "dependencies": { "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og=="], - "@inquirer/core": ["@inquirer/core@11.1.8", "", { "dependencies": { "@inquirer/ansi": "^2.0.5", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5", "cli-width": "^4.1.0", "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", "signal-exit": "^4.1.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-/u+yJk2pOKNDOh1ZgdUH2RQaRx6OOH4I0uwL95qPvTFTIL38YBsuSC4r1yXBB3Q6JvNqFFc202gk0Ew79rrcjA=="], + "@inquirer/core": ["@inquirer/core@11.1.9", "", { "dependencies": { "@inquirer/ansi": "^2.0.5", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5", "cli-width": "^4.1.0", "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", "signal-exit": "^4.1.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg=="], "@inquirer/figures": ["@inquirer/figures@2.0.5", "", {}, "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ=="], @@ -1302,15 +1300,15 @@ "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], - "@libsql/client": ["@libsql/client@0.17.2", "", { "dependencies": { "@libsql/core": "^0.17.2", "@libsql/hrana-client": "^0.9.0", "js-base64": "^3.7.5", "libsql": "^0.5.28", "promise-limit": "^2.7.0" } }, "sha512-0aw0S3iQMHvOxfRt5j1atoCCPMT3gjsB2PS8/uxSM1DcDn39xqz6RlgSMxtP8I3JsxIXAFuw7S41baLEw0Zi+Q=="], + "@libsql/client": ["@libsql/client@0.17.3", "", { "dependencies": { "@libsql/core": "^0.17.3", "@libsql/hrana-client": "^0.10.0", "js-base64": "^3.7.5", "libsql": "^0.5.28", "promise-limit": "^2.7.0" } }, "sha512-HXk9wiAoJbKFbyBH4O+aEhN6ir5ERXuXvwE5OD2eR4/5RUa3Pw/8L9zrnVdU+iNJitRvisPWaIwmhkO3bH7giA=="], - "@libsql/core": ["@libsql/core@0.17.2", "", { "dependencies": { "js-base64": "^3.7.5" } }, "sha512-L8qv12HZ/jRBcETVR3rscP0uHNxh+K3EABSde6scCw7zfOdiLqO3MAkJaeE1WovPsjXzsN/JBoZED4+7EZVT3g=="], + "@libsql/core": ["@libsql/core@0.17.3", "", { "dependencies": { "js-base64": "^3.7.5" } }, "sha512-2UjK1i7JBkMduJo4WdvvBxMMvVJ31pArBZNONyz/GCJJAH+1UHat2X6vn10S/WpY5fKzIT98WqYFl2vzWRLOfg=="], "@libsql/darwin-arm64": ["@libsql/darwin-arm64@0.5.29", "", { "os": "darwin", "cpu": "arm64" }, "sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A=="], "@libsql/darwin-x64": ["@libsql/darwin-x64@0.5.29", "", { "os": "darwin", "cpu": "x64" }, "sha512-OtT+KFHsKFy1R5FVadr8FJ2Bb1mghtXTyJkxv0trocq7NuHntSki1eUbxpO5ezJesDvBlqFjnWaYYY516QNLhQ=="], - "@libsql/hrana-client": ["@libsql/hrana-client@0.9.0", "", { "dependencies": { "@libsql/isomorphic-ws": "^0.1.5", "cross-fetch": "^4.0.0", "js-base64": "^3.7.5", "node-fetch": "^3.3.2" } }, "sha512-pxQ1986AuWfPX4oXzBvLwBnfgKDE5OMhAdR/5cZmRaB4Ygz5MecQybvwZupnRz341r2CtFmbk/BhSu7k2Lm+Jw=="], + "@libsql/hrana-client": ["@libsql/hrana-client@0.10.0", "", { "dependencies": { "@libsql/isomorphic-ws": "^0.1.5", "js-base64": "^3.7.5" } }, "sha512-OoA4EMqRAC7kn7V2P6EQqRcpZf2W+AjsNIyCizBg339Tq/aMC7sRnzs3SklderhmQWAqEzvv8A2vhxVmWpkVvw=="], "@libsql/isomorphic-ws": ["@libsql/isomorphic-ws@0.1.5", "", { "dependencies": { "@types/ws": "^8.5.4", "ws": "^8.13.0" } }, "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg=="], @@ -1328,7 +1326,7 @@ "@libsql/win32-x64-msvc": ["@libsql/win32-x64-msvc@0.5.29", "", { "os": "win32", "cpu": "x64" }, "sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg=="], - "@loaderkit/resolve": ["@loaderkit/resolve@1.0.4", "", { "dependencies": { "@braidai/lang": "^1.0.0" } }, "sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A=="], + "@loaderkit/resolve": ["@loaderkit/resolve@1.0.5", "", { "dependencies": { "@braidai/lang": "^1.0.0" } }, "sha512-fhkdGM57xhJ7CO91MUgbQlb0ClP0AJ9vB3yoVnBTslYJqrJOCVEbOprZcxZlexdMbmTBPQqVcQYr+j4oRRtIZA=="], "@logdna/tail-file": ["@logdna/tail-file@2.2.0", "", {}, "sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng=="], @@ -1338,7 +1336,7 @@ "@mermaid-js/parser": ["@mermaid-js/parser@1.1.0", "", { "dependencies": { "langium": "^4.0.0" } }, "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw=="], - "@microlink/react-json-view": ["@microlink/react-json-view@1.31.18", "", { "dependencies": { "react-base16-styling": "~0.10.0", "react-lifecycles-compat": "~3.0.4", "react-textarea-autosize": "~8.5.9" }, "peerDependencies": { "react": ">= 15", "react-dom": ">= 15" } }, "sha512-mvLY1A78LxkIc9wNeWh2jabM+g9FxCIakOHKpkCSQN/ekpKSdUD0dQBCMk9ZiO3BtQNrOwVBeuEH10uhhmrrvw=="], + "@microlink/react-json-view": ["@microlink/react-json-view@1.31.19", "", { "dependencies": { "react-base16-styling": "~0.10.0", "react-lifecycles-compat": "~3.0.4", "react-textarea-autosize": "~8.5.9" }, "peerDependencies": { "react": ">= 15", "react-dom": ">= 15" } }, "sha512-+wG8H0d+JMk4JKxnj2fLHJyX2Vn6GXUp7TL5bT8E/UyErSyGGQNARYcudi0lLn7dAezuWd7UdmRSBJcoJ0/iew=="], "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], @@ -1358,7 +1356,7 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], - "@mswjs/interceptors": ["@mswjs/interceptors@0.41.3", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA=="], + "@mswjs/interceptors": ["@mswjs/interceptors@0.41.6", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-qmDvJIjcNsZ6tXWy2G9yuCgMPTTn35GMA3dPpSLm7QJVpbQzYdw0ALy1bKoivXnEM3U93/OrK+/M719b+fg84Q=="], "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], @@ -1388,6 +1386,8 @@ "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@nodable/entities": ["@nodable/entities@2.1.0", "", {}, "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA=="], + "@node-minify/core": ["@node-minify/core@8.0.6", "", { "dependencies": { "@node-minify/utils": "8.0.6", "glob": "9.3.5", "mkdirp": "1.0.4" } }, "sha512-/vxN46ieWDLU67CmgbArEvOb41zlYFOkOtr9QW9CnTrBLuTyGgkyNWC2y5+khvRw3Br58p2B5ZVSx/PxCTru6g=="], "@node-minify/terser": ["@node-minify/terser@8.0.6", "", { "dependencies": { "@node-minify/utils": "8.0.6", "terser": "5.16.9" } }, "sha512-grQ1ipham743ch2c3++C8Isk6toJnxJSyDiwUI/IWUCh4CZFD6aYVw6UAY40IpCnjrq5aXGwiv5OZJn6Pr0hvg=="], @@ -1402,7 +1402,7 @@ "@npmcli/agent": ["@npmcli/agent@4.0.0", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA=="], - "@npmcli/arborist": ["@npmcli/arborist@9.4.2", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^5.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/map-workspaces": "^5.0.0", "@npmcli/metavuln-calculator": "^9.0.2", "@npmcli/name-from-folder": "^4.0.0", "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/query": "^5.0.0", "@npmcli/redact": "^4.0.0", "@npmcli/run-script": "^10.0.0", "bin-links": "^6.0.0", "cacache": "^20.0.1", "common-ancestor-path": "^2.0.0", "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", "lru-cache": "^11.2.1", "minimatch": "^10.0.3", "nopt": "^9.0.0", "npm-install-checks": "^8.0.0", "npm-package-arg": "^13.0.0", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "pacote": "^21.0.2", "parse-conflict-json": "^5.0.1", "proc-log": "^6.0.0", "proggy": "^4.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "semver": "^7.3.7", "ssri": "^13.0.0", "treeverse": "^3.0.0", "walk-up-path": "^4.0.0" }, "bin": { "arborist": "bin/index.js" } }, "sha512-omJgPyzt11cEGrxzgrECoOyxAunmPMgBFTcAB/FbaB+9iOYhGmRdsQqySV8o0LWQ/l2kTeASUIMR4xJufVwmtw=="], + "@npmcli/arborist": ["@npmcli/arborist@9.4.3", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^5.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/map-workspaces": "^5.0.0", "@npmcli/metavuln-calculator": "^9.0.2", "@npmcli/name-from-folder": "^4.0.0", "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/query": "^5.0.0", "@npmcli/redact": "^4.0.0", "@npmcli/run-script": "^10.0.0", "bin-links": "^6.0.0", "cacache": "^20.0.1", "common-ancestor-path": "^2.0.0", "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", "lru-cache": "^11.2.1", "minimatch": "^10.0.3", "nopt": "^9.0.0", "npm-install-checks": "^8.0.0", "npm-package-arg": "^13.0.0", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "pacote": "^21.0.2", "parse-conflict-json": "^5.0.1", "proc-log": "^6.0.0", "proggy": "^4.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "semver": "^7.3.7", "ssri": "^13.0.0", "treeverse": "^3.0.0", "walk-up-path": "^4.0.0" }, "bin": { "arborist": "bin/index.js" } }, "sha512-YhkR7XFdO7OBr8U1qs7DA7PmhSJXg59rLqd53jmeJ4pYe8WTCAsUZsKqxX7KKPEgAO5K7D/SjbyPUrBes9aP6Q=="], "@npmcli/fs": ["@npmcli/fs@5.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og=="], @@ -1466,11 +1466,11 @@ "@open-draft/until": ["@open-draft/until@2.1.0", "", {}, "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="], - "@opennextjs/aws": ["@opennextjs/aws@3.10.1", "", { "dependencies": { "@ast-grep/napi": "^0.40.5", "@aws-sdk/client-cloudfront": "3.984.0", "@aws-sdk/client-dynamodb": "3.984.0", "@aws-sdk/client-lambda": "3.984.0", "@aws-sdk/client-s3": "3.984.0", "@aws-sdk/client-sqs": "3.984.0", "@node-minify/core": "^8.0.6", "@node-minify/terser": "^8.0.6", "@tsconfig/node18": "^1.0.3", "aws4fetch": "^1.0.20", "chalk": "^5.6.2", "cookie": "^1.0.2", "esbuild": "0.25.4", "express": "^5.1.0", "path-to-regexp": "^6.3.0", "urlpattern-polyfill": "^10.1.0", "yaml": "^2.8.1" }, "peerDependencies": { "next": ">=15.5.15 || >=16.2.3" }, "bin": { "open-next": "dist/index.js" } }, "sha512-Pn8hLuP3M9EWlsZnS/O7Bm41Nt+lIOEsCaW/QJ3KlmIbtAeixnSj1CS80Z9PlQe/LQCe0GnQ8vGJeOdg5a4iWg=="], + "@opennextjs/aws": ["@opennextjs/aws@3.10.4", "", { "dependencies": { "@ast-grep/napi": "^0.40.5", "@aws-sdk/client-cloudfront": "3.984.0", "@aws-sdk/client-dynamodb": "3.984.0", "@aws-sdk/client-lambda": "3.984.0", "@aws-sdk/client-s3": "3.984.0", "@aws-sdk/client-sqs": "3.984.0", "@node-minify/core": "^8.0.6", "@node-minify/terser": "^8.0.6", "@tsconfig/node18": "^1.0.3", "aws4fetch": "^1.0.20", "chalk": "^5.6.2", "cookie": "^1.0.2", "esbuild": "0.25.4", "express": "^5.1.0", "path-to-regexp": "^6.3.0", "urlpattern-polyfill": "^10.1.0", "yaml": "^2.8.1" }, "peerDependencies": { "next": ">=15.5.15 <16 || >=16.2.3" }, "bin": { "open-next": "dist/index.js" } }, "sha512-xVmWHGdptJgVhQivuoeAYqsWpIgGoDEeZJC6AYMgvQYisDicGuS7gh10Z8MEmrgsJxNGdZ0arCCDieGxM88afw=="], - "@opennextjs/cloudflare": ["@opennextjs/cloudflare@1.19.1", "", { "dependencies": { "@ast-grep/napi": "^0.40.5", "@dotenvx/dotenvx": "1.31.0", "@opennextjs/aws": "3.10.1", "cloudflare": "^4.4.1", "comment-json": "^4.5.1", "enquirer": "^2.4.1", "glob": "^12.0.0", "ts-tqdm": "^0.8.6", "yargs": "^18.0.0" }, "peerDependencies": { "next": ">=15.5.15 || >=16.2.3", "wrangler": "^4.65.0" }, "bin": { "opennextjs-cloudflare": "dist/cli/index.js" } }, "sha512-qW6ivDkwDzomX4uBTwIHiSFMvsXjZ2GuVf/GITxGByr8sA3eyx3IMfFjWyaqBHVqcqtJaCiFo8IPxpLHv0jWbg=="], + "@opennextjs/cloudflare": ["@opennextjs/cloudflare@1.19.4", "", { "dependencies": { "@ast-grep/napi": "^0.40.5", "@dotenvx/dotenvx": "1.31.0", "@opennextjs/aws": "3.10.4", "ci-info": "^4.2.0", "cloudflare": "^4.4.1", "comment-json": "^4.5.1", "enquirer": "^2.4.1", "glob": "^12.0.0", "ts-tqdm": "^0.8.6", "yargs": "^18.0.0" }, "peerDependencies": { "next": ">=15.5.15 <16 || >=16.2.3", "wrangler": "^4.84.1" }, "bin": { "opennextjs-cloudflare": "dist/cli/index.js" } }, "sha512-sRJmLFz6DqGzoToSTPyyQhxozXGgF/YsnHpgiCe2XTugfZZnfetMoI4BolFP65XAzIV3tdSSzCb+etK5s8UEUg=="], - "@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], + "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], @@ -1508,21 +1508,21 @@ "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - "@opentui/core": ["@opentui/core@0.1.100", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "marked": "17.0.1", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.100", "@opentui/core-darwin-x64": "0.1.100", "@opentui/core-linux-arm64": "0.1.100", "@opentui/core-linux-x64": "0.1.100", "@opentui/core-win32-arm64": "0.1.100", "@opentui/core-win32-x64": "0.1.100", "bun-webgpu": "0.1.5", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-g6Ft3CcOVpytMzq2AZrnHHeMrmvYeLVCsy/8LqZ30VnPv0zfJ+f1TVi/EFrcl4m0GRPdy6yBOVOMcIAWHSZvtg=="], + "@opentui/core": ["@opentui/core@0.1.107", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "marked": "17.0.1", "string-width": "7.2.0", "strip-ansi": "7.1.2", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.107", "@opentui/core-darwin-x64": "0.1.107", "@opentui/core-linux-arm64": "0.1.107", "@opentui/core-linux-x64": "0.1.107", "@opentui/core-win32-arm64": "0.1.107", "@opentui/core-win32-x64": "0.1.107", "bun-webgpu": "0.1.7", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-gadu9EtNR+sOGyHN0buZryllavkWHRkCcX4yW/1ldp/l7HGS52hvkjYmo+74cuzUcfds/5Rbw2cgiy0Z7RxXmQ=="], - "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.100", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cY70nNjkh53tys4iQ0FDST3CQfN4Rp8zOrT6EW0dH/51KZq2Rg3EhxDpc+qu4zASadR5uuU5i61g8lYyVGeGgw=="], + "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.107", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Yqt2/9Ntw0IdtPA/qmHvXCE16y4Jq5/btCmuzN9/opzqZ5rYGYYVtiBii3LezGcTZYuJQZthjvh8MLPXXwA2EQ=="], - "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.100", "", { "os": "darwin", "cpu": "x64" }, "sha512-RUJa4MPX5BWwXuc5nE+Zc+md8+ITYp5X0ourM4+ReaIIW9pTxSDcIPBba9pkJb3PIADyulUPMmmy5OX+umDJhQ=="], + "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.107", "", { "os": "darwin", "cpu": "x64" }, "sha512-p6yeHsIWRLy/J30nZTyUuwgFYEpk8NS0H0Cmh9P8a1+eHA406MMMP4FAC0YpqlF4SHb7R7LNkUSsfCx9yMtS8w=="], - "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.100", "", { "os": "linux", "cpu": "arm64" }, "sha512-Hznr39cSXg+2sQd+WcTsk67BjyqrZvuTK6f94Uu1ULYZJYCE4KdyNU2NzJSK6ooyosSWXPDsb4kwetTlfypMZg=="], + "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.107", "", { "os": "linux", "cpu": "arm64" }, "sha512-w6MpRTd06KUH4KdgH4x7rVB2I67KE62w3W3jQVBDEMeJejdJVOSwwUdgaTY9ffoHglcZc3WA2PFH1PCpgzna4A=="], - "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.100", "", { "os": "linux", "cpu": "x64" }, "sha512-mssQIwH2DU1aMGSUnTJgahMeAEfF82n2WKeTGabTRkPrcxD/6ML+JFiV9l8/8YA880fBD2Kh1XXGEhN2ZGB5UA=="], + "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.107", "", { "os": "linux", "cpu": "x64" }, "sha512-oxKbIpWZRgY+8KQZ9dXq8lzDEhMVpBMCiZGDiHtK8/DP1MvK5kFE/vtwgUK9YkmT4OSgZsFeojjvyePXV+PcfQ=="], - "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.100", "", { "os": "win32", "cpu": "arm64" }, "sha512-EuLA6+kiIyW/hbo7k56QTc9/QGxg2bYHQ+XPn1UWPf6tmjzbDUwzhw+y52CNJQZpTXtAQSNtxfiYIbigGBd4TQ=="], + "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.107", "", { "os": "win32", "cpu": "arm64" }, "sha512-T7hbLgoTkb5eAsP5GJdTRyDl48WI/hMEtj+BGlIITzSaOBSN7ZPCeblcfUz+uXrdF6g3dF1a9uyEQSJlzeGaKA=="], - "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.100", "", { "os": "win32", "cpu": "x64" }, "sha512-RyiqbKQ15olR8hK4VsPKL3gHrOIIpqEXhUP0jzXJdQQNusmQKlxHyk5EY3R6hi52IgqjjGxwG+ocVeRb4/VTRg=="], + "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.107", "", { "os": "win32", "cpu": "x64" }, "sha512-e/uFLPyKK/hFDvDZtTxp6L3Zx0FWuZv5Gf2qIKf/7FAAadD0hala+K41OJAmYWxu1X3cT5XozKCT8gN/S1N08A=="], - "@opentui/react": ["@opentui/react@0.1.100", "", { "dependencies": { "@opentui/core": "0.1.100", "react-reconciler": "^0.32.0" }, "peerDependencies": { "react": ">=19.0.0", "react-devtools-core": "^7.0.1", "ws": "^8.18.0" } }, "sha512-4mIkrioQE/qMB3ItzZyKMhP6iEMiY0pwqHyeG4ANqY1Qe6xLvzYOfzQ0qG0iVVVM+FSo2YfcwMWKaij9iP3/BA=="], + "@opentui/react": ["@opentui/react@0.1.107", "", { "dependencies": { "@opentui/core": "0.1.107", "react-reconciler": "^0.32.0" }, "peerDependencies": { "react": ">=19.0.0", "react-devtools-core": "^7.0.1", "ws": "^8.18.0" } }, "sha512-BiREndm6Cro9jZvBOJeKGBJwk9KLo9t0UQSUGXxmUiqVKsjItbvawDX3POhxEfjvjKkmBRQ9AQ9wsMiIQYwmhw=="], "@orama/orama": ["@orama/orama@3.1.18", "", {}, "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA=="], @@ -1626,9 +1626,9 @@ "@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="], - "@prisma/client": ["@prisma/client@7.7.0", "", { "dependencies": { "@prisma/client-runtime-utils": "7.7.0" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-5Ar4OsZpJ54s21sy5oDNNW9gQtd4NuxCaiM7+JDTOU07D6VvlpLjYzAVCMB1+JzokN+08dAVomlx+b7bhJd3ww=="], + "@prisma/client": ["@prisma/client@7.8.0", "", { "dependencies": { "@prisma/client-runtime-utils": "7.8.0" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw=="], - "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.7.0", "", {}, "sha512-BLyd0UpFYOtyJFTHm7jS9vesHW7P83abibodQMiIofqjBKzDHQ1VAsQkdfvXyYDkPlONPfOTz7/rv3x/+CQqvQ=="], + "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.8.0", "", {}, "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw=="], "@protobuf-ts/runtime": ["@protobuf-ts/runtime@2.11.1", "", {}, "sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ=="], @@ -1638,7 +1638,7 @@ "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], - "@protobufjs/codegen": ["@protobufjs/codegen@2.0.4", "", {}, "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="], + "@protobufjs/codegen": ["@protobufjs/codegen@2.0.5", "", {}, "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g=="], "@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.0", "", {}, "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="], @@ -1646,19 +1646,19 @@ "@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="], - "@protobufjs/inquire": ["@protobufjs/inquire@1.1.0", "", {}, "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="], + "@protobufjs/inquire": ["@protobufjs/inquire@1.1.1", "", {}, "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew=="], "@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="], "@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="], - "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], + "@protobufjs/utf8": ["@protobufjs/utf8@1.1.1", "", {}, "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg=="], - "@pulumi/aws": ["@pulumi/aws@7.26.0", "", { "dependencies": { "@pulumi/pulumi": "^3.142.0", "mime": "^2.0.0" } }, "sha512-fwxv09yiA9Y6SVVAd+uLnU/jtCbKiUC+4Jh7MvI9Nuq+BCEtikNWMckKaC3vyx9QR2hVU05eTyonf3tzKiKHVQ=="], + "@pulumi/aws": ["@pulumi/aws@7.27.0", "", { "dependencies": { "@pulumi/pulumi": "^3.142.0", "mime": "^2.0.0" } }, "sha512-I3zArWb8F8QVfcWhBBW8h4dB1Omb823G3H2Ej66t0PFyfUHC7t79MDlG0UvoaZqrmXkDG7nFVFB4xdQTZ62R6w=="], "@pulumi/command": ["@pulumi/command@1.2.1", "", { "dependencies": { "@pulumi/pulumi": "^3.142.0" } }, "sha512-mutNDIUYP67yCBYOVIidQyxuTwZDY9v/sx9EGbgIv4PXfyfolOKGgGLeoHEbI1lxRwaw2wbTZ3VNIynDnA5VKA=="], - "@pulumi/pulumi": ["@pulumi/pulumi@3.231.0", "", { "dependencies": { "@grpc/grpc-js": "^1.10.1", "@logdna/tail-file": "^2.0.6", "@npmcli/arborist": "^9.0.0", "@opentelemetry/api": "^1.9", "@opentelemetry/exporter-trace-otlp-grpc": "^0.57", "@opentelemetry/exporter-zipkin": "^1.30", "@opentelemetry/instrumentation": "^0.57", "@opentelemetry/instrumentation-grpc": "^0.57", "@opentelemetry/resources": "^1.30", "@opentelemetry/sdk-trace-base": "^1.30", "@opentelemetry/sdk-trace-node": "^1.30", "@types/google-protobuf": "^3.15.5", "@types/semver": "^7.5.6", "@types/tmp": "^0.2.6", "execa": "^5.1.0", "fdir": "^6.5.0", "google-protobuf": "^3.21.4", "ini": "^2.0.0", "js-yaml": "^3.14.2", "minimist": "^1.2.6", "normalize-package-data": "^6.0.0", "picomatch": "^4.0.0", "require-from-string": "^2.0.1", "semver": "^7.5.2", "source-map-support": "^0.5.6", "tmp": "^0.2.4", "upath": "^1.1.0" }, "peerDependencies": { "ts-node": ">= 7.0.1 < 12", "typescript": ">= 3.8.3 < 7" }, "optionalPeers": ["ts-node", "typescript"] }, "sha512-aAIMkMkbxjGRZ8ldvvm2BPd5JwmJ23QM/vS8iMNpxf8wSDJcIUqx6AtAw2TKTeXlRL4iUMh1xvrXf7APRUwnMg=="], + "@pulumi/pulumi": ["@pulumi/pulumi@3.232.0", "", { "dependencies": { "@grpc/grpc-js": "^1.10.1", "@logdna/tail-file": "^2.0.6", "@npmcli/arborist": "^9.0.0", "@opentelemetry/api": "^1.9", "@opentelemetry/exporter-trace-otlp-grpc": "^0.57", "@opentelemetry/exporter-zipkin": "^1.30", "@opentelemetry/instrumentation": "^0.57", "@opentelemetry/instrumentation-grpc": "^0.57", "@opentelemetry/resources": "^1.30", "@opentelemetry/sdk-trace-base": "^1.30", "@opentelemetry/sdk-trace-node": "^1.30", "@types/google-protobuf": "^3.15.5", "@types/semver": "^7.5.6", "@types/tmp": "^0.2.6", "execa": "^5.1.0", "fdir": "^6.5.0", "google-protobuf": "^3.21.4", "ini": "^2.0.0", "js-yaml": "^3.14.2", "minimist": "^1.2.6", "normalize-package-data": "^6.0.0", "picomatch": "^4.0.0", "require-from-string": "^2.0.1", "semver": "^7.5.2", "source-map-support": "^0.5.6", "tmp": "^0.2.4", "upath": "^1.1.0" }, "peerDependencies": { "ts-node": ">= 7.0.1 < 12", "typescript": ">= 3.8.3 < 7" }, "optionalPeers": ["ts-node", "typescript"] }, "sha512-5Pl48cCwOOZEvG7b6w6sErrD1D/QiEwiPqEtHCIzF/alU0yzFjo95uxNteKFlt0LsnzWsZ58DJHgBe9gurjIFg=="], "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], @@ -1816,55 +1816,55 @@ "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.1", "", { "os": "android", "cpu": "arm" }, "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.2", "", { "os": "android", "cpu": "arm" }, "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.1", "", { "os": "android", "cpu": "arm64" }, "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.2", "", { "os": "android", "cpu": "arm64" }, "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.2", "", { "os": "linux", "cpu": "arm" }, "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.2", "", { "os": "linux", "cpu": "arm" }, "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA=="], - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ=="], + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.2", "", { "os": "linux", "cpu": "none" }, "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A=="], - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw=="], + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.2", "", { "os": "linux", "cpu": "none" }, "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw=="], + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw=="], - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg=="], + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.2", "", { "os": "linux", "cpu": "none" }, "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.2", "", { "os": "linux", "cpu": "none" }, "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.2", "", { "os": "linux", "cpu": "x64" }, "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.2", "", { "os": "linux", "cpu": "x64" }, "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw=="], - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw=="], + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg=="], - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.1", "", { "os": "none", "cpu": "arm64" }, "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA=="], + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.2", "", { "os": "none", "cpu": "arm64" }, "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg=="], - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg=="], + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.2", "", { "os": "win32", "cpu": "x64" }, "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.2", "", { "os": "win32", "cpu": "x64" }, "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA=="], "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], @@ -1916,9 +1916,9 @@ "@smithy/chunked-blob-reader-native": ["@smithy/chunked-blob-reader-native@4.2.3", "", { "dependencies": { "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw=="], - "@smithy/config-resolver": ["@smithy/config-resolver@4.4.16", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.4.1", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-GFlGPNLZKrGfqWpqVb31z7hvYCA9ZscfX1buYnvvMGcRYsQQnhH+4uN6mWWflcD5jB4OXP/LBrdpukEdjl41tg=="], + "@smithy/config-resolver": ["@smithy/config-resolver@4.4.17", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.4.2", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ=="], - "@smithy/core": ["@smithy/core@3.23.15", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.23", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-E7GVCgsQttzfujEZb6Qep005wWf4xiL4x06apFEtzQMWYBPggZh/0cnOxPficw5cuK/YjjkehKoIN4YUaSh0UQ=="], + "@smithy/core": ["@smithy/core@3.23.17", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-stream": "^4.5.25", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ=="], "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.14", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg=="], @@ -1948,17 +1948,17 @@ "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.14", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw=="], - "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.30", "", { "dependencies": { "@smithy/core": "^3.23.15", "@smithy/middleware-serde": "^4.2.18", "@smithy/node-config-provider": "^4.3.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-qS2XqhKeXmdZ4nEQ4cOxIczSP/Y91wPAHYuRwmWDCh975B7/57uxsm5d6sisnUThn2u2FwzMdJNM7AbO1YPsPg=="], + "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.32", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/middleware-serde": "^4.2.20", "@smithy/node-config-provider": "^4.3.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "@smithy/url-parser": "^4.2.14", "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q=="], - "@smithy/middleware-retry": ["@smithy/middleware-retry@4.5.3", "", { "dependencies": { "@smithy/core": "^3.23.15", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/service-error-classification": "^4.2.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-TE8dJNi6JuxzGSxMCVd3i9IEWDndCl3bmluLsBNDWok8olgj65OfkndMhl9SZ7m14c+C5SQn/PcUmrDl57rSFw=="], + "@smithy/middleware-retry": ["@smithy/middleware-retry@4.5.7", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/node-config-provider": "^4.3.14", "@smithy/protocol-http": "^5.3.14", "@smithy/service-error-classification": "^4.3.1", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "@smithy/util-middleware": "^4.2.14", "@smithy/util-retry": "^4.3.6", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg=="], - "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.18", "", { "dependencies": { "@smithy/core": "^3.23.15", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-M6CSgnp3v4tYz9ynj2JHbA60woBZcGqEwNjTKjBsNHPV26R1ZX52+0wW8WsZU18q45jD0tw2wL22S17Ze9LpEw=="], + "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.20", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ=="], "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA=="], "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.14", "", { "dependencies": { "@smithy/property-provider": "^4.2.14", "@smithy/shared-ini-file-loader": "^4.4.9", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg=="], - "@smithy/node-http-handler": ["@smithy/node-http-handler@4.5.3", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/querystring-builder": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-lc5jFL++x17sPhIwMWJ3YOnqmSjw/2Po6VLDlUIXvxVWRuJwRXnJ4jOBBLB0cfI5BB5ehIl02Fxr1PDvk/kxDw=="], + "@smithy/node-http-handler": ["@smithy/node-http-handler@4.6.1", "", { "dependencies": { "@smithy/protocol-http": "^5.3.14", "@smithy/querystring-builder": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg=="], "@smithy/property-provider": ["@smithy/property-provider@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ=="], @@ -1968,13 +1968,13 @@ "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw=="], - "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1" } }, "sha512-vVimoUnGxlx4eLLQbZImdOZFOe+Zh+5ACntv8VxZuGP72LdWu5GV3oEmCahSEReBgRJoWjypFkrehSj7BWx1HQ=="], + "@smithy/service-error-classification": ["@smithy/service-error-classification@4.3.1", "", { "dependencies": { "@smithy/types": "^4.14.1" } }, "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw=="], "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.9", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ=="], "@smithy/signature-v4": ["@smithy/signature-v4@5.3.14", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.14", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA=="], - "@smithy/smithy-client": ["@smithy/smithy-client@4.12.11", "", { "dependencies": { "@smithy/core": "^3.23.15", "@smithy/middleware-endpoint": "^4.4.30", "@smithy/middleware-stack": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.23", "tslib": "^2.6.2" } }, "sha512-wzz/Wa1CH/Tlhxh0s4DQPEcXSxSVfJ59AZcUh9Gu0c6JTlKuwGf4o/3P2TExv0VbtPFt8odIBG+eQGK2+vTECg=="], + "@smithy/smithy-client": ["@smithy/smithy-client@4.12.13", "", { "dependencies": { "@smithy/core": "^3.23.17", "@smithy/middleware-endpoint": "^4.4.32", "@smithy/middleware-stack": "^4.2.14", "@smithy/protocol-http": "^5.3.14", "@smithy/types": "^4.14.1", "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA=="], "@smithy/types": ["@smithy/types@4.14.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg=="], @@ -1990,25 +1990,25 @@ "@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ=="], - "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.47", "", { "dependencies": { "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-zlIuXai3/SHjQUQ8y3g/woLvrH573SK2wNjcDaHu5e9VOcC0JwM1MI0Sq0GZJyN3BwSUneIhpjZ18nsiz5AtQw=="], + "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.49", "", { "dependencies": { "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw=="], - "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.52", "", { "dependencies": { "@smithy/config-resolver": "^4.4.16", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.11", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-cQBz8g68Vnw1W2meXlkb3D/hXJU+Taiyj9P8qLJtjREEV9/Td65xi4A/H1sRQ8EIgX5qbZbvdYPKygKLholZ3w=="], + "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.54", "", { "dependencies": { "@smithy/config-resolver": "^4.4.17", "@smithy/credential-provider-imds": "^4.2.14", "@smithy/node-config-provider": "^4.3.14", "@smithy/property-provider": "^4.2.14", "@smithy/smithy-client": "^4.12.13", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw=="], - "@smithy/util-endpoints": ["@smithy/util-endpoints@3.4.1", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-wMxNDZJrgS5mQV9oxCs4TWl5767VMgOfqfZ3JHyCkMtGC2ykW9iPqMvFur695Otcc5yxLG8OKO/80tsQBxrhXg=="], + "@smithy/util-endpoints": ["@smithy/util-endpoints@3.4.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg=="], "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="], "@smithy/util-middleware": ["@smithy/util-middleware@4.2.14", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw=="], - "@smithy/util-retry": ["@smithy/util-retry@4.3.2", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.14", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-2+KTsJEwTi63NUv4uR9IQ+IFT1yu6Rf6JuoBK2WKaaJ/TRvOiOVGcXAsEqX/TQN2thR9yII21kPUJq1UV/WI2A=="], + "@smithy/util-retry": ["@smithy/util-retry@4.3.6", "", { "dependencies": { "@smithy/service-error-classification": "^4.3.1", "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-p6/FO1n2KxMeQyna067i0uJ6TSbb165ZhnRtCpWh4Foxqbfc6oW+XITaL8QkFJj3KFnDe2URt4gOhgU06EP9ew=="], - "@smithy/util-stream": ["@smithy/util-stream@4.5.23", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.5.3", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-N6on1+ngJ3RznZOnDWNveIwnTSlqxNnXuNAh7ez889ZZaRdXoNRTXKgmYOLe6dB0gCmAVtuRScE1hymQFl4hpg=="], + "@smithy/util-stream": ["@smithy/util-stream@4.5.25", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.17", "@smithy/node-http-handler": "^4.6.1", "@smithy/types": "^4.14.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA=="], "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw=="], "@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], - "@smithy/util-waiter": ["@smithy/util-waiter@4.2.16", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-GtclrKoZ3Lt7jPQ7aTIYKfjY92OgceScftVnkTsG8e1KV8rkvZgN+ny6YSRhd9hxB8rZtwVbmln7NTvE5O3GmQ=="], + "@smithy/util-waiter": ["@smithy/util-waiter@4.3.0", "", { "dependencies": { "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "sha512-JyjYmLAfS+pdxF92o4yLgEoy0zhayKTw73FU1aofLWwLcJw7iSqIY2exGmMTrl/lmZugP5p/zxdFSippJDfKWA=="], "@smithy/uuid": ["@smithy/uuid@1.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g=="], @@ -2064,37 +2064,37 @@ "@tabby_ai/hijri-converter": ["@tabby_ai/hijri-converter@1.0.5", "", {}, "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ=="], - "@tailwindcss/node": ["@tailwindcss/node@4.2.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.2" } }, "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA=="], + "@tailwindcss/node": ["@tailwindcss/node@4.2.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.4" } }, "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.2", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.2", "@tailwindcss/oxide-darwin-arm64": "4.2.2", "@tailwindcss/oxide-darwin-x64": "4.2.2", "@tailwindcss/oxide-freebsd-x64": "4.2.2", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", "@tailwindcss/oxide-linux-x64-musl": "4.2.2", "@tailwindcss/oxide-wasm32-wasi": "4.2.2", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" } }, "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.4", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.4", "@tailwindcss/oxide-darwin-arm64": "4.2.4", "@tailwindcss/oxide-darwin-x64": "4.2.4", "@tailwindcss/oxide-freebsd-x64": "4.2.4", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", "@tailwindcss/oxide-linux-x64-musl": "4.2.4", "@tailwindcss/oxide-wasm32-wasi": "4.2.4", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" } }, "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.2", "", { "os": "android", "cpu": "arm64" }, "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.4", "", { "os": "android", "cpu": "arm64" }, "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2", "", { "os": "linux", "cpu": "arm" }, "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.2", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.4", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.2", "", { "os": "win32", "cpu": "x64" }, "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.4", "", { "os": "win32", "cpu": "x64" }, "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.2.2", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.2.2", "@tailwindcss/oxide": "4.2.2", "postcss": "^8.5.6", "tailwindcss": "4.2.2" } }, "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.2.4", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.2.4", "@tailwindcss/oxide": "4.2.4", "postcss": "^8.5.6", "tailwindcss": "4.2.4" } }, "sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg=="], - "@tailwindcss/vite": ["@tailwindcss/vite@4.2.2", "", { "dependencies": { "@tailwindcss/node": "4.2.2", "@tailwindcss/oxide": "4.2.2", "tailwindcss": "4.2.2" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w=="], + "@tailwindcss/vite": ["@tailwindcss/vite@4.2.4", "", { "dependencies": { "@tailwindcss/node": "4.2.4", "@tailwindcss/oxide": "4.2.4", "tailwindcss": "4.2.4" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw=="], "@tanstack/devtools": ["@tanstack/devtools@0.10.0", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/keyboard": "^1.3.3", "@solid-primitives/resize-observer": "^2.1.3", "@tanstack/devtools-client": "0.0.5", "@tanstack/devtools-event-bus": "0.3.3", "@tanstack/devtools-ui": "0.4.4", "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-UVN6wMntMMfMXk3Ozn7Ytr+SNhhzICqzOqVxmd4P2Kw+WzLkkEtmrBOZICII64eEIOPpRWgs9EG8uWVPQBt4IA=="], @@ -2106,65 +2106,65 @@ "@tanstack/devtools-ui": ["@tanstack/devtools-ui@0.4.4", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg=="], - "@tanstack/form-core": ["@tanstack/form-core@1.29.0", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.1", "@tanstack/pacer-lite": "^0.1.1", "@tanstack/store": "^0.9.1" } }, "sha512-uyeKEdJBfbj0bkBSwvSYVRtWLOaXvfNX3CeVw1HqGOXVLxpBBGAqWdYLc+UoX/9xcoFwFXrjR9QqMPzvwm2yyQ=="], + "@tanstack/form-core": ["@tanstack/form-core@1.29.1", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.1", "@tanstack/pacer-lite": "^0.1.1", "@tanstack/store": "^0.9.1" } }, "sha512-NIYPO36eEu7nSWvMpbFDQaBWyVtnH/C8fsZ3/XpJUT4uOWgmxsiUvHGbTbDNIQTXAKIkhwEl0sUrqBNn2SfUnw=="], "@tanstack/history": ["@tanstack/history@1.161.6", "", {}, "sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg=="], "@tanstack/pacer-lite": ["@tanstack/pacer-lite@0.1.1", "", {}, "sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w=="], - "@tanstack/query-core": ["@tanstack/query-core@5.99.0", "", {}, "sha512-3Jv3WQG0BCcH7G+7lf/bP8QyBfJOXeY+T08Rin3GZ1bshvwlbPt7NrDHMEzGdKIOmOzvIQmxjk28YEQX60k7pQ=="], + "@tanstack/query-core": ["@tanstack/query-core@5.100.6", "", {}, "sha512-Os2CPUr98to98RYm+D4qGqGkiffn7MGSyl2547a4MljVkHE30AMJRqTiyCqBfMwzAx/I91vCkAxp5tHSla6Twg=="], - "@tanstack/query-devtools": ["@tanstack/query-devtools@5.99.0", "", {}, "sha512-m4ufXaJ8FjWXw7xDtyzE/6fkZAyQFg9WrbMrUpt8ZecRJx58jiFOZ2lxZMphZdIpAnIeto/S8stbwLKLusyckQ=="], + "@tanstack/query-devtools": ["@tanstack/query-devtools@5.100.6", "", {}, "sha512-2SiNwlOiAdTbqktCSmwlXZH8x8mckSbES2O0bdr3qZNhdQl5DCtImZx0S3HGeNHWTIkzTaHx2Isg+bD4M3WRIg=="], "@tanstack/react-devtools": ["@tanstack/react-devtools@0.8.6", "", { "dependencies": { "@tanstack/devtools": "0.10.0" }, "peerDependencies": { "@types/react": ">=16.8", "@types/react-dom": ">=16.8", "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-NUvbOlldLDzeL2qMONfLs5Ahb1bmygqyKMqYlNRl/UwAVW+ugIUGgDlXOa+kGt+ksCHO6CUopwEE9973z5tITg=="], - "@tanstack/react-form": ["@tanstack/react-form@1.29.0", "", { "dependencies": { "@tanstack/form-core": "1.29.0", "@tanstack/react-store": "^0.9.1" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-jj425NNX0QKqbUzqSNiYI3HCPHSk2df47acXCJyXczWOTmG81ECZGkgofgqamFsSU9kMiH6Di5RLUnftrlhWSw=="], + "@tanstack/react-form": ["@tanstack/react-form@1.29.1", "", { "dependencies": { "@tanstack/form-core": "1.29.1", "@tanstack/react-store": "^0.9.1" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-hVHk4g0phd0HxRsv2ry6Xt8BqmalT55Q3cokhJBCC1St0hcGZhgwJJbohm9atao45BPG9e55DGvtbwExqZe35g=="], - "@tanstack/react-query": ["@tanstack/react-query@5.99.0", "", { "dependencies": { "@tanstack/query-core": "5.99.0" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-OY2bCqPemT1LlqJ8Y2CUau4KELnIhhG9Ol3ZndPbdnB095pRbPo1cHuXTndg8iIwtoHTgwZjyaDnQ0xD0mYwAw=="], + "@tanstack/react-query": ["@tanstack/react-query@5.100.6", "", { "dependencies": { "@tanstack/query-core": "5.100.6" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-uVSrps0PV16Cxmcn2rvL+dUhwTpTUtiRW347AEeYxMZXO2pZe9ja7E24PAMGoQ5u2g89DD8u4QhOviBk+RN8RA=="], - "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@5.99.0", "", { "dependencies": { "@tanstack/query-devtools": "5.99.0" }, "peerDependencies": { "@tanstack/react-query": "^5.99.0", "react": "^18 || ^19" } }, "sha512-CqqX7LCU9yOfCY/vBURSx2YSD83ryfX+QkfkaKionTfg1s2Hdm572Ro99gW3QPoJjzvsj1HM4pnN4nbDy3MXKA=="], + "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@5.100.6", "", { "dependencies": { "@tanstack/query-devtools": "5.100.6" }, "peerDependencies": { "@tanstack/react-query": "^5.100.6", "react": "^18 || ^19" } }, "sha512-sz3ksMKA2t1rx0+Odzb0x1A3pXH/SVf7fzlzd3sKXzwXz8980f5sbOwfQD6+UfTG8G4Y2KaIg9e3sBn+uC4VTg=="], - "@tanstack/react-router": ["@tanstack/react-router@1.168.22", "", { "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/react-store": "^0.9.3", "@tanstack/router-core": "1.168.15", "isbot": "^5.1.22" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-W2LyfkfJtDCf//jOjZeUBWwOVl8iDRVTECpGHa2M28MT3T5/VVnjgicYNHR/ax0Filk1iU67MRjcjHheTYvK1Q=="], + "@tanstack/react-router": ["@tanstack/react-router@1.168.25", "", { "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/react-store": "^0.9.3", "@tanstack/router-core": "1.168.17", "isbot": "^5.1.22" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-4U/E76dc+fYuLixjV1RLNfqrkQoexSL8MqGNpIHOodtvY3fMPGaALrvDVtBDQYBEU4z5r5fHaV6+kclWAVFP9A=="], "@tanstack/react-router-devtools": ["@tanstack/react-router-devtools@1.166.13", "", { "dependencies": { "@tanstack/router-devtools-core": "1.167.3" }, "peerDependencies": { "@tanstack/react-router": "^1.168.15", "@tanstack/router-core": "^1.168.11", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, "optionalPeers": ["@tanstack/router-core"] }, "sha512-6yKRFFJrEEOiGp5RAAuGCYsl81M4XAhJmLcu9PKj+HZle4A3dsP60lwHoqQYWHMK9nKKFkdXR+D8qxzxqtQbEA=="], - "@tanstack/react-router-ssr-query": ["@tanstack/react-router-ssr-query@1.166.11", "", { "dependencies": { "@tanstack/router-ssr-query-core": "1.167.1" }, "peerDependencies": { "@tanstack/query-core": ">=5.90.0", "@tanstack/react-query": ">=5.90.0", "@tanstack/react-router": ">=1.127.0", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-i81a5avRWgTjSKH5VYttbQ/Y86Il8GIkdcrIlyYUys0Lt1zMCxkTGHH9lBN5ZmhBe3mzwQ+9jOlx9xSxj8Kx0w=="], + "@tanstack/react-router-ssr-query": ["@tanstack/react-router-ssr-query@1.166.12", "", { "dependencies": { "@tanstack/router-ssr-query-core": "1.168.0" }, "peerDependencies": { "@tanstack/query-core": ">=5.90.0", "@tanstack/react-query": ">=5.90.0", "@tanstack/react-router": ">=1.127.0", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-yDUIoEh+PimAcWmk/2BE0EkI8TwLVeToNzoIuwahmTtBUR+ptZPWbtiPjudO8JZ0BhT3odHtuOn1eBOK0/4NAQ=="], "@tanstack/react-router-with-query": ["@tanstack/react-router-with-query@1.130.17", "", { "peerDependencies": { "@tanstack/react-query": ">=5.49.2", "@tanstack/react-router": ">=1.43.2", "@tanstack/router-core": ">=1.114.7", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-TNaSocW20KuPwUojEm130DLWTr9M5hsSzxiu4QqS2jNCnrGLuDrwMHyP+6fq13lG3YuU4u9O1qajxfJIGomZCg=="], - "@tanstack/react-start": ["@tanstack/react-start@1.167.41", "", { "dependencies": { "@tanstack/react-router": "1.168.22", "@tanstack/react-start-client": "1.166.39", "@tanstack/react-start-rsc": "0.0.20", "@tanstack/react-start-server": "1.166.40", "@tanstack/router-utils": "^1.161.6", "@tanstack/start-client-core": "1.167.17", "@tanstack/start-plugin-core": "1.167.35", "@tanstack/start-server-core": "1.167.19", "pathe": "^2.0.3" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0", "vite": ">=7.0.0" }, "bin": { "intent": "bin/intent.js" } }, "sha512-w51yu/VQHNecIgN3ku+EmCxPjVbBftbnucDZBnxns43zPAhL5T5bnaBi0Fx4yJ3sDAmiceWEJD2F6IUaXTlNFA=="], + "@tanstack/react-start": ["@tanstack/react-start@1.167.50", "", { "dependencies": { "@tanstack/react-router": "1.168.25", "@tanstack/react-start-client": "1.166.43", "@tanstack/react-start-rsc": "0.0.29", "@tanstack/react-start-server": "1.166.44", "@tanstack/router-utils": "1.161.7", "@tanstack/start-client-core": "1.167.20", "@tanstack/start-plugin-core": "1.169.6", "@tanstack/start-server-core": "1.167.22", "pathe": "^2.0.3" }, "peerDependencies": { "@rsbuild/core": "^2.0.0", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0", "vite": ">=7.0.0" }, "optionalPeers": ["@rsbuild/core", "vite"], "bin": { "intent": "bin/intent.js" } }, "sha512-WvYvqC+nV0e0ewK1uH8GecC6KixlDm9vk3pdhmgphIFAM/D5iQOZvO3W3e4UW36o0ViAV1rB6Onoqy6ivN8rkA=="], - "@tanstack/react-start-client": ["@tanstack/react-start-client@1.166.39", "", { "dependencies": { "@tanstack/react-router": "1.168.22", "@tanstack/router-core": "1.168.15", "@tanstack/start-client-core": "1.167.17" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-NDao1nwwM4hXiVwQjVO8ZPlL9gZ0yeIl7w0PV+75jz+V9bhXr2nGhBuBw4zBuG7px4fEVmO5E8b7kpjWgCDJtA=="], + "@tanstack/react-start-client": ["@tanstack/react-start-client@1.166.43", "", { "dependencies": { "@tanstack/react-router": "1.168.25", "@tanstack/router-core": "1.168.17", "@tanstack/start-client-core": "1.167.20" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-7quJs9kGbX+Vxa8FJ4mg1oRnUkumL21lUzM05ESeGZPDvPqwF58YL5nrq52o5X46gL9fbI8wDLKgJcwByAHNhA=="], - "@tanstack/react-start-rsc": ["@tanstack/react-start-rsc@0.0.20", "", { "dependencies": { "@tanstack/react-router": "1.168.22", "@tanstack/react-start-server": "1.166.40", "@tanstack/router-core": "1.168.15", "@tanstack/router-utils": "1.161.6", "@tanstack/start-client-core": "1.167.17", "@tanstack/start-fn-stubs": "1.161.6", "@tanstack/start-plugin-core": "1.167.35", "@tanstack/start-server-core": "1.167.19", "@tanstack/start-storage-context": "1.166.29", "pathe": "^2.0.3" }, "peerDependencies": { "@vitejs/plugin-rsc": ">=0.5.20", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, "optionalPeers": ["@vitejs/plugin-rsc"] }, "sha512-KPsaq/asQxu/scMduMuQlwURIXwu+qZ7SO/8xbY/PQ/DJzfp9q1ZEHs9JN7dBEOHcme/YPeHta+UxBapB5Syyw=="], + "@tanstack/react-start-rsc": ["@tanstack/react-start-rsc@0.0.29", "", { "dependencies": { "@tanstack/react-router": "1.168.25", "@tanstack/react-start-server": "1.166.44", "@tanstack/router-core": "1.168.17", "@tanstack/router-utils": "1.161.7", "@tanstack/start-client-core": "1.167.20", "@tanstack/start-fn-stubs": "1.161.6", "@tanstack/start-plugin-core": "1.169.6", "@tanstack/start-server-core": "1.167.22", "@tanstack/start-storage-context": "1.166.31", "pathe": "^2.0.3" }, "peerDependencies": { "@rspack/core": ">=2.0.0-0", "@vitejs/plugin-rsc": ">=0.5.20", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0", "react-server-dom-rspack": ">=0.0.2" }, "optionalPeers": ["@rspack/core", "@vitejs/plugin-rsc", "react-server-dom-rspack"] }, "sha512-nMdtylzgoQvQNH0zfT6ZZRzzgyMMiPxOxI3ElY+A79vq0ZJOaqvzownh/e7XIMv/AngWcx38CgnQkM1rfMtSFg=="], - "@tanstack/react-start-server": ["@tanstack/react-start-server@1.166.40", "", { "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/react-router": "1.168.22", "@tanstack/router-core": "1.168.15", "@tanstack/start-client-core": "1.167.17", "@tanstack/start-server-core": "1.167.19" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-g5OU/eHmT1MleDbebdhNybpYgDu3QeNlemMCyXxEJNewOFM4iBlfoUBdMPhONJDlHQrOBXwMk/RUEFemY94yRw=="], + "@tanstack/react-start-server": ["@tanstack/react-start-server@1.166.44", "", { "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/react-router": "1.168.25", "@tanstack/router-core": "1.168.17", "@tanstack/start-client-core": "1.167.20", "@tanstack/start-server-core": "1.167.22" }, "peerDependencies": { "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" } }, "sha512-ro3s8zWJ0WgWgSkb7VZWyelPrdKvBYImeR5xubqYgP0IRVfmnbYSCY0yZQPNFmv825hv8qMiK4y6NPez7BJRRg=="], "@tanstack/react-store": ["@tanstack/react-store@0.9.3", "", { "dependencies": { "@tanstack/store": "0.9.3", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg=="], "@tanstack/react-table": ["@tanstack/react-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="], - "@tanstack/router-core": ["@tanstack/router-core@1.168.15", "", { "dependencies": { "@tanstack/history": "1.161.6", "cookie-es": "^3.0.0", "seroval": "^1.5.0", "seroval-plugins": "^1.5.0" }, "bin": { "intent": "bin/intent.js" } }, "sha512-Wr0424NDtD8fT/uALobMZ9DdcfsTyXtW5IPR++7zvW8/7RaIOeaqXpVDId8ywaGtqPWLWOfaUg2zUtYtukoXYA=="], + "@tanstack/router-core": ["@tanstack/router-core@1.168.17", "", { "dependencies": { "@tanstack/history": "1.161.6", "cookie-es": "^3.0.0", "seroval": "^1.5.0", "seroval-plugins": "^1.5.0" }, "bin": { "intent": "bin/intent.js" } }, "sha512-VDq7HCqRK3sdpxoETwYoTXTaYi+OVQC197g1fdzaiZBUmhntfjn+PQc15OzTqNNhf8Menk6r6ftmuphybMKdig=="], "@tanstack/router-devtools-core": ["@tanstack/router-devtools-core@1.167.3", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16" }, "peerDependencies": { "@tanstack/router-core": "^1.168.11", "csstype": "^3.0.10" }, "optionalPeers": ["csstype"] }, "sha512-fJ1VMhyQgnoashTrP763c2HRc9kofgF61L7Jb3F6eTHAmCKtGVx8BRtiFt37sr3U0P0jmaaiiSPGP6nT5JtVNg=="], - "@tanstack/router-generator": ["@tanstack/router-generator@1.166.32", "", { "dependencies": { "@babel/types": "^7.28.5", "@tanstack/router-core": "1.168.15", "@tanstack/router-utils": "1.161.6", "@tanstack/virtual-file-routes": "1.161.7", "magic-string": "^0.30.21", "prettier": "^3.5.0", "tsx": "^4.19.2", "zod": "^3.24.2" } }, "sha512-VuusKwEXcgKq+myq1JQfZogY8scTXIIeFls50dJ/UXgCXWp5n14iFreYNlg41wURcak2oA3M+t2TVfD0xUUD6g=="], + "@tanstack/router-generator": ["@tanstack/router-generator@1.166.36", "", { "dependencies": { "@babel/types": "^7.28.5", "@tanstack/router-core": "1.168.17", "@tanstack/router-utils": "1.161.7", "@tanstack/virtual-file-routes": "1.161.7", "jiti": "^2.6.1", "magic-string": "^0.30.21", "prettier": "^3.5.0", "zod": "^3.24.2" } }, "sha512-ce8Sg+ONwdd483kXJBYhTcdIAjEwSlWUOkoLsgPdNUIfA05hdnd9JkNnM4X1OnzpFL8/+TBSMo4WYQp9CHhDPg=="], - "@tanstack/router-plugin": ["@tanstack/router-plugin@1.167.22", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@tanstack/router-core": "1.168.15", "@tanstack/router-generator": "1.166.32", "@tanstack/router-utils": "1.161.6", "@tanstack/virtual-file-routes": "1.161.7", "chokidar": "^3.6.0", "unplugin": "^2.1.2", "zod": "^3.24.2" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", "@tanstack/react-router": "^1.168.21", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0", "vite-plugin-solid": "^2.11.10 || ^3.0.0-0", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"], "bin": { "intent": "bin/intent.js" } }, "sha512-wYPzIvBK8bcmXVUpZfSgGBXOrfBAdF4odKevz6rejio5rEd947NtKDF5R7eYdwlAOmRqYpLJnJ1QHkc5t8bY4w=="], + "@tanstack/router-plugin": ["@tanstack/router-plugin@1.167.28", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@tanstack/router-core": "1.168.17", "@tanstack/router-generator": "1.166.36", "@tanstack/router-utils": "1.161.7", "@tanstack/virtual-file-routes": "1.161.7", "chokidar": "^3.6.0", "unplugin": "^3.0.0", "zod": "^3.24.2" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2 || ^2.0.0", "@tanstack/react-router": "^1.168.25", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0", "vite-plugin-solid": "^2.11.10 || ^3.0.0-0", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"], "bin": { "intent": "bin/intent.js" } }, "sha512-O23ba7JaKvx5Eu0l6iTpknu79QcdkMmoW1VtZdsZe5NoQ6dHHru6caoapDc/uOxmz7h7VYfSuLjs/UYg7EA1cA=="], - "@tanstack/router-ssr-query-core": ["@tanstack/router-ssr-query-core@1.167.1", "", { "peerDependencies": { "@tanstack/query-core": ">=5.90.0", "@tanstack/router-core": ">=1.127.0" } }, "sha512-sJNRHa36lfuHw04akO9C6KU1P1Ncam2Azsk5XlgdQHMFgOtSlFAsuwqAHpyYSwu5Jyxj6P3PmyKYMIm4u8dI7Q=="], + "@tanstack/router-ssr-query-core": ["@tanstack/router-ssr-query-core@1.168.0", "", { "peerDependencies": { "@tanstack/query-core": ">=5.90.0", "@tanstack/router-core": ">=1.127.0" } }, "sha512-5yBUAF1d9z2kOFKoz1spvpvkMSTmRnRXEwi+bGKfrXYmt7CfHu3Pk8KUFMln67uQoKQ9VTkcd5tLkjJVrZ2/AQ=="], - "@tanstack/router-utils": ["@tanstack/router-utils@1.161.6", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ansis": "^4.1.0", "babel-dead-code-elimination": "^1.0.12", "diff": "^8.0.2", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" } }, "sha512-nRcYw+w2OEgK6VfjirYvGyPLOK+tZQz1jkYcmH5AjMamQ9PycnlxZF2aEZtPpNoUsaceX2bHptn6Ub5hGXqNvw=="], + "@tanstack/router-utils": ["@tanstack/router-utils@1.161.7", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ansis": "^4.1.0", "babel-dead-code-elimination": "^1.0.12", "diff": "^8.0.2", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" } }, "sha512-VkY0u7ax/GD0qU6ZLLnfPC+UMxVzxRbvZp4yV4iUSXjgJZ/siAT5/QlLm9FEDJ9QDoC0VD9W7f00tKKreUI7Ng=="], - "@tanstack/start-client-core": ["@tanstack/start-client-core@1.167.17", "", { "dependencies": { "@tanstack/router-core": "1.168.15", "@tanstack/start-fn-stubs": "1.161.6", "@tanstack/start-storage-context": "1.166.29", "seroval": "^1.5.0" }, "bin": { "intent": "bin/intent.js" } }, "sha512-3ZnpQ0LPnhrm/GX+HT7XfRxTcqnmBE1KJd7LtaJNuN13NH0C4ZOWchKLPEed2/gluhgsT6UgWm+Ec0kEFtxSaw=="], + "@tanstack/start-client-core": ["@tanstack/start-client-core@1.167.20", "", { "dependencies": { "@tanstack/router-core": "1.168.17", "@tanstack/start-fn-stubs": "1.161.6", "@tanstack/start-storage-context": "1.166.31", "seroval": "^1.5.0" }, "bin": { "intent": "bin/intent.js" } }, "sha512-QKBAr/TZlJaBFfveNSuycCJDrwE15cukUm5ogpS9e6xNBy6TMDFTWbfAoLKk8qV8TalxyGbUKjUp6YwWE+KMXQ=="], "@tanstack/start-fn-stubs": ["@tanstack/start-fn-stubs@1.161.6", "", {}, "sha512-Y6QSlGiLga8cHfvxGGaonXIlt2bIUTVdH6AMjmpMp7+ANNCp+N96GQbjjhLye3JkaxDfP68x5iZA8NK4imgRig=="], - "@tanstack/start-plugin-core": ["@tanstack/start-plugin-core@1.167.35", "", { "dependencies": { "@babel/code-frame": "7.27.1", "@babel/core": "^7.28.5", "@babel/types": "^7.28.5", "@rolldown/pluginutils": "1.0.0-beta.40", "@tanstack/router-core": "1.168.15", "@tanstack/router-generator": "1.166.32", "@tanstack/router-plugin": "1.167.22", "@tanstack/router-utils": "1.161.6", "@tanstack/start-client-core": "1.167.17", "@tanstack/start-server-core": "1.167.19", "cheerio": "^1.0.0", "exsolve": "^1.0.7", "pathe": "^2.0.3", "picomatch": "^4.0.3", "seroval": "^1.5.0", "source-map": "^0.7.6", "srvx": "^0.11.9", "tinyglobby": "^0.2.15", "ufo": "^1.5.4", "vitefu": "^1.1.1", "xmlbuilder2": "^4.0.3", "zod": "^3.24.2" }, "peerDependencies": { "vite": ">=7.0.0" } }, "sha512-Ww511KfsXd7TbPYzjiUDCMUI5VbO0chmrTgFi1oOUT0jmk5U0Xh9WVIun1cvRmaq+KBZwvWGvmeIn0UwO3mHEA=="], + "@tanstack/start-plugin-core": ["@tanstack/start-plugin-core@1.169.6", "", { "dependencies": { "@babel/code-frame": "7.27.1", "@babel/core": "^7.28.5", "@babel/types": "^7.28.5", "@rolldown/pluginutils": "1.0.0-beta.40", "@tanstack/router-core": "1.168.17", "@tanstack/router-generator": "1.166.36", "@tanstack/router-plugin": "1.167.28", "@tanstack/router-utils": "1.161.7", "@tanstack/start-client-core": "1.167.20", "@tanstack/start-server-core": "1.167.22", "cheerio": "^1.0.0", "exsolve": "^1.0.7", "lightningcss": "^1.32.0", "pathe": "^2.0.3", "picomatch": "^4.0.3", "seroval": "^1.5.0", "source-map": "^0.7.6", "srvx": "^0.11.9", "tinyglobby": "^0.2.15", "ufo": "^1.5.4", "vitefu": "^1.1.1", "xmlbuilder2": "^4.0.3", "zod": "^3.24.2" }, "peerDependencies": { "@rsbuild/core": "^2.0.0", "vite": ">=7.0.0" }, "optionalPeers": ["@rsbuild/core", "vite"] }, "sha512-UhsPkfIi4/8OoJFSYd0MduxjilGYBttHdgqeJCeFZfr/UCV05q28VynUx+zuIG3Pe3Mj2+SKQhQqoJAFPk8nLA=="], - "@tanstack/start-server-core": ["@tanstack/start-server-core@1.167.19", "", { "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/router-core": "1.168.15", "@tanstack/start-client-core": "1.167.17", "@tanstack/start-storage-context": "1.166.29", "h3-v2": "npm:h3@2.0.1-rc.20", "seroval": "^1.5.0" }, "bin": { "intent": "bin/intent.js" } }, "sha512-wzOdfzLsK91CnjoywnEjXSlVlaRVK99HJhyVijNU1TECBI2JEKvW9S6d14YfS4gD4fFH4V86tFYhkcLPe6nzWg=="], + "@tanstack/start-server-core": ["@tanstack/start-server-core@1.167.22", "", { "dependencies": { "@tanstack/history": "1.161.6", "@tanstack/router-core": "1.168.17", "@tanstack/start-client-core": "1.167.20", "@tanstack/start-storage-context": "1.166.31", "h3-v2": "npm:h3@2.0.1-rc.20", "seroval": "^1.5.0" }, "bin": { "intent": "bin/intent.js" } }, "sha512-oTJ/bu5pFuX5vh0OqRfZdXLWauOKIY1w3X+Q9iL6NQ38mhnWGmCVgMxAk+wX7KGSdjmXokpSNbBXTaxk9fcQLA=="], - "@tanstack/start-storage-context": ["@tanstack/start-storage-context@1.166.29", "", { "dependencies": { "@tanstack/router-core": "1.168.15" } }, "sha512-KrJYudc1nbnTY43jdN+hQFMYkhz7+3T+hkgBoGnIP1OspSe6vGQaYGDB4EUXYnkLfyQp+iUuKubgS8hSKeJ0ng=="], + "@tanstack/start-storage-context": ["@tanstack/start-storage-context@1.166.31", "", { "dependencies": { "@tanstack/router-core": "1.168.17" } }, "sha512-HwwPixGNenX1mXJwjJBgWHdxuDj9JHclcbYGeJ130oK2gcyo4RX7AdVsGKV9BCdjv81nODyPYHA9GLzxkp6xfg=="], "@tanstack/store": ["@tanstack/store@0.9.3", "", {}, "sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw=="], @@ -2178,11 +2178,11 @@ "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], - "@trpc/client": ["@trpc/client@11.16.0", "", { "peerDependencies": { "@trpc/server": "11.16.0", "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-TxIzm7OoK3baKZ0XCbuMUbI3GhgjcbKHIc4nWVKaRpCRnbSh0T31BT6fTPYwtnA/Nur8pBCGqC2B4J5hEPiPFQ=="], + "@trpc/client": ["@trpc/client@11.17.0", "", { "peerDependencies": { "@trpc/server": "11.17.0", "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-KpJBFrbKTDeVCFv/3ckL1XBBH5Yssn8hethI/rUy7GIpTj+VzjtPjykDqJpzobuVOz+d26cXCSu1t4I6MYI5Zg=="], - "@trpc/server": ["@trpc/server@11.16.0", "", { "peerDependencies": { "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-XgGuUMddrUTd04+za/WE5GFuZ1/YU9XQG0t3VL5WOIu2JspkOlq6k4RYEiqS6HSJt+S0RXaPdIoE2anIP/BBRQ=="], + "@trpc/server": ["@trpc/server@11.17.0", "", { "peerDependencies": { "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-jbAOUe0PpUTCYqziyu+8vYXZdDXPudZgnEhWCQ2NjKnVEjfE93RqHTt1oycZJv/HNf51YlRXfEEwSIAbb161rw=="], - "@trpc/tanstack-react-query": ["@trpc/tanstack-react-query@11.16.0", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.16.0", "@trpc/server": "11.16.0", "react": ">=18.2.0", "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-kfNYJ5NCk67tmRCO/QWCycJmRamuEKmZf1HRG8yCBl8aTJdTwVq7l6AffFIMab3Q+NmQzwP8XXkAEK/EelKYOA=="], + "@trpc/tanstack-react-query": ["@trpc/tanstack-react-query@11.17.0", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.17.0", "@trpc/server": "11.17.0", "react": ">=18.2.0", "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-OFxjvCgisP0yaCj7lgP6qPaFwJvJDgnrAUxH3cNIPPR89TpYbndn5vsdKNkc7EnvER9b6wq9Yz8aCcPcOBpDXg=="], "@ts-morph/common": ["@ts-morph/common@0.28.1", "", { "dependencies": { "minimatch": "^10.0.1", "path-browserify": "^1.0.1", "tinyglobby": "^0.2.14" } }, "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g=="], @@ -2374,41 +2374,41 @@ "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.2", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/type-utils": "8.58.2", "@typescript-eslint/utils": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.59.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.59.1", "@typescript-eslint/type-utils": "8.59.1", "@typescript-eslint/utils": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.59.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.2", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.59.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.59.1", "@typescript-eslint/types": "8.59.1", "@typescript-eslint/typescript-estree": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.2", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.2", "@typescript-eslint/types": "^8.58.2", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.59.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.59.1", "@typescript-eslint/types": "^8.59.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2" } }, "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.59.1", "", { "dependencies": { "@typescript-eslint/types": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1" } }, "sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.2", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.59.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2", "@typescript-eslint/utils": "8.58.2", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg=="], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.59.1", "", { "dependencies": { "@typescript-eslint/types": "8.59.1", "@typescript-eslint/typescript-estree": "8.59.1", "@typescript-eslint/utils": "8.59.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-klWPBR2ciQHS3f++ug/mVnWKPjBUo7icEL3FAO1lhAR1Z1i5NQYZ1EannMSRYcq5qCv5wNALlXr6fksRHyYl7w=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.58.2", "", {}, "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.59.1", "", {}, "sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.2", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.2", "@typescript-eslint/tsconfig-utils": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/visitor-keys": "8.58.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.59.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.59.1", "@typescript-eslint/tsconfig-utils": "8.59.1", "@typescript-eslint/types": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.2", "@typescript-eslint/types": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA=="], + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.59.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.59.1", "@typescript-eslint/types": "8.59.1", "@typescript-eslint/typescript-estree": "8.59.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.2", "", { "dependencies": { "@typescript-eslint/types": "8.58.2", "eslint-visitor-keys": "^5.0.0" } }, "sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.59.1", "", { "dependencies": { "@typescript-eslint/types": "8.59.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg=="], - "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260417.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260417.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260417.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260417.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260417.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260417.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260417.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260417.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-uIsfMRxtjgMF83TbAcpvHe0rgWVhqDSwCU1EYQT17qQbnOR56NIULneywLjeGKFgOCpn3eszd01/EjzS0n/LkA=="], + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260429.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260429.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260429.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260429.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260429.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260429.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260429.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260429.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-SGKnvs5EA+V1spnraYJqum/lEajE0IQ2bVVPC72hFfWjoCfQ6N7iVYxLUGreiE3VFyQWWQBPgXZrRUFnawVvpQ=="], - "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260417.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TSV/P3OlMs3iua4dus60uphUwuB0DXnx+1nNazpcAhrpi1oAP6SyKcpYR0D+pqa55i+BDUHVAqpj/AP6pWli8Q=="], + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260429.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+Rl8iPf+vYKq0fnb8euEOJxxvE/abEOWmhdllQIe+Shd8xhS7UVi+2WunsP1GyH2Ofc+N8rGYz0/dMnhrRYEZA=="], - "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260417.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-vwjFGTPRH15tiHTPjLpKc9YdCaJoySXsWuosopAeTdzghnM58YOXle8J2+y7Sui5N+5uKCCvu0Dug/thL/IpzA=="], + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260429.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-be6Y7VVJz+usdI1ifCHy5mcldpxf8KXGYoyIp8w5Rd54zUtvtkYEJJWKzV5/bJt4bsQLLcp1i0vD4KJSr06Tmg=="], - "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260417.1", "", { "os": "linux", "cpu": "arm" }, "sha512-/2MG/XnvJMlwfej06NFHZTIOTHuxYCjGRHd+yBclbn6fTUVr3YhlzOZkFj9i2ewir//orOaEVD5u1F4rth8mVg=="], + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260429.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ngN6+qt5bPdp2zzasShoT4UONGXr+tvzHdz4NjuitwhiAF/d70CseXunb4syaudl1a+lJyTHro/ALTC0hRf6vA=="], - "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260417.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Xbx3FANuS28RpwkjmzwASXeUmPJw8g7E/IRATaWfY945nldwnL5W6MACIdUKKPyQJYm4FtgtntorxJrf2O8vYw=="], + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260429.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-44amAEH/VxG6K/hrAmhiyOTnwoTzm7bj0ja7d8sV8Iuocv37oUiSB/8OgJLytLqfIh+Q6kipfTwY6Do3jh6THQ=="], - "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260417.1", "", { "os": "linux", "cpu": "x64" }, "sha512-kA6tz+vBtfXdCrdwfh36pDhzdoCdn42sEIHIr4HpLvkpAfcn/ruRHWPCvcaOVcKAZWwqgOhyE5ENN9uOSKBZPA=="], + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260429.1", "", { "os": "linux", "cpu": "x64" }, "sha512-haAOqc0fJCZkt4RDi0/ZQGBdDfpDzr2N+mEcR+FbiYQD3Y00kOK34hXSrjZafO2kq56ZDWunvCaUTCev0fJDbA=="], - "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260417.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-BHWsdltUYVNu1lHJTim3FofIBQSjn/Jw4BbA0UEiRpOwFi4hXt4SnP4/7M1A2DMmkBAAv/ZVU8vi+uR44CHatg=="], + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260429.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-J5O0tGVGqOZHbqm9ijRnZ5ADfPqYTjFIwZtYKpQL1yj1dZnUzMszO8P3bnOSfYD//DJhZINQyJzpPJxu29uiwQ=="], - "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260417.1", "", { "os": "win32", "cpu": "x64" }, "sha512-93bOoa7KDADhfC5vyhnCKPn2A5lhe2lPGMIC2yWfmueOX+R6DLkl2G8olqh+ocTFHCJRhBv8R/VM1j7FaAxG5A=="], + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260429.1", "", { "os": "win32", "cpu": "x64" }, "sha512-/OZ99Hi/32huvZQ5fdqTwqLvZtKC3QrCXmLuKfMyVuBisV/TSd6LhlFQLolvIpr7/E530mnFZ4sXjgDEzVFqAw=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], @@ -2458,23 +2458,23 @@ "@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="], - "@vitest/coverage-v8": ["@vitest/coverage-v8@4.1.4", "", { "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.4", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "@vitest/browser": "4.1.4", "vitest": "4.1.4" }, "optionalPeers": ["@vitest/browser"] }, "sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w=="], + "@vitest/coverage-v8": ["@vitest/coverage-v8@4.1.5", "", { "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.5", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "peerDependencies": { "@vitest/browser": "4.1.5", "vitest": "4.1.5" }, "optionalPeers": ["@vitest/browser"] }, "sha512-38C0/Ddb7HcRG0Z4/DUem8x57d2p9jYgp18mkaYswEOQBGsI1CG4f/hjm0ZCeaJfWhSZ4k7jgs29V1Zom7Ki9A=="], "@vitest/eslint-plugin": ["@vitest/eslint-plugin@1.6.16", "", { "dependencies": { "@typescript-eslint/scope-manager": "^8.58.0", "@typescript-eslint/utils": "^8.58.0" }, "peerDependencies": { "@typescript-eslint/eslint-plugin": "*", "eslint": ">=8.57.0", "typescript": ">=5.0.0", "vitest": "*" }, "optionalPeers": ["@typescript-eslint/eslint-plugin", "typescript", "vitest"] }, "sha512-2pBN1F1JXq6zTSaYC58CMJa7pGxXIRsLfOioeZM4cPE3pRdSh1ySTSoHPQlOTEF5WgoVzWZQxhGQ3ygT78hOVg=="], - "@vitest/expect": ["@vitest/expect@4.1.4", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.4", "@vitest/utils": "4.1.4", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww=="], + "@vitest/expect": ["@vitest/expect@4.1.5", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.5", "@vitest/utils": "4.1.5", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw=="], - "@vitest/mocker": ["@vitest/mocker@4.1.4", "", { "dependencies": { "@vitest/spy": "4.1.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg=="], + "@vitest/mocker": ["@vitest/mocker@4.1.5", "", { "dependencies": { "@vitest/spy": "4.1.5", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw=="], - "@vitest/pretty-format": ["@vitest/pretty-format@4.1.4", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A=="], + "@vitest/pretty-format": ["@vitest/pretty-format@4.1.5", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g=="], - "@vitest/runner": ["@vitest/runner@4.1.4", "", { "dependencies": { "@vitest/utils": "4.1.4", "pathe": "^2.0.3" } }, "sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ=="], + "@vitest/runner": ["@vitest/runner@4.1.5", "", { "dependencies": { "@vitest/utils": "4.1.5", "pathe": "^2.0.3" } }, "sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ=="], - "@vitest/snapshot": ["@vitest/snapshot@4.1.4", "", { "dependencies": { "@vitest/pretty-format": "4.1.4", "@vitest/utils": "4.1.4", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw=="], + "@vitest/snapshot": ["@vitest/snapshot@4.1.5", "", { "dependencies": { "@vitest/pretty-format": "4.1.5", "@vitest/utils": "4.1.5", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ=="], - "@vitest/spy": ["@vitest/spy@4.1.4", "", {}, "sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ=="], + "@vitest/spy": ["@vitest/spy@4.1.5", "", {}, "sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ=="], - "@vitest/utils": ["@vitest/utils@4.1.4", "", { "dependencies": { "@vitest/pretty-format": "4.1.4", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw=="], + "@vitest/utils": ["@vitest/utils@4.1.5", "", { "dependencies": { "@vitest/pretty-format": "4.1.5", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug=="], "@webgpu/types": ["@webgpu/types@0.1.69", "", {}, "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ=="], @@ -2498,21 +2498,19 @@ "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - "ai": ["ai@5.0.179", "", { "dependencies": { "@ai-sdk/gateway": "2.0.82", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-tuq/r2FH/pBuY3jo0yHF3UglDV73WONGLhW80DuwgO6w0ftPIqRsAm5p9cE3Bu4LfEuCkMXpiUG/pQRzqKRRaA=="], + "ai": ["ai@5.0.180", "", { "dependencies": { "@ai-sdk/gateway": "2.0.83", "@ai-sdk/provider": "2.0.2", "@ai-sdk/provider-utils": "3.0.24", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-tJctEJpgyoJtD8lVDY67r2uuqiWPMNv9BRce5bKeOj7Rf8tkBPAr8MnzwhQD2ZHqdblvA8GcZ/855DsTbGdl0A=="], - "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], + "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], "alchemy": ["alchemy@2.0.0-beta.20", "", { "dependencies": { "@ai-sdk/anthropic": "^3.0.31", "@ai-sdk/openai": "^3.0.23", "@ai-sdk/provider": "^3.0.8", "@aws-sdk/credential-providers": "^3.0.0", "@clack/prompts": "^0.11.0", "@distilled.cloud/aws": "^0.13.0", "@distilled.cloud/axiom": "^0.13.0", "@distilled.cloud/cloudflare": "^0.13.0", "@distilled.cloud/cloudflare-rolldown-plugin": "0.3.0", "@distilled.cloud/cloudflare-vite-plugin": "0.2.0", "@distilled.cloud/core": "^0.13.0", "@effect/vitest": "4.0.0-beta.58", "@libsql/client": "^0.17.0", "@octokit/rest": "^22.0.1", "@smithy/node-config-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.3.4", "@smithy/types": "^4.8.1", "@types/aws-lambda": "^8.10.152", "@types/libsodium-wrappers": "^0.8.2", "ai": "^6.0.62", "aws4fetch": "^1.0.20", "capnp-es": "^0.0.14", "cloudflare": "^5.2.0", "fast-glob": "^3.3.2", "fast-xml-parser": "^5.3.4", "foreground-child": "^4.0.3", "ignore": "^7.0.5", "jszip": "^3.10.1", "libsodium-wrappers": "^0.8.3", "magic-string": "^0.30.21", "picomatch": "^4.0.4", "rolldown": "1.0.0-rc.13", "sonda": "^0.11.1", "web-tree-sitter": "0.25.10", "workerd": "1.20260417.1", "yaml": "^2.0.0" }, "peerDependencies": { "@effect/platform-bun": "4.0.0-beta.58", "@effect/platform-node": "4.0.0-beta.58", "effect": "4.0.0-beta.58", "vite": "^8.0.7" }, "optionalPeers": ["@effect/platform-bun", "@effect/platform-node", "vite"], "bin": { "alchemy": "bin/cli.js" } }, "sha512-jSwrh3PHqwIXM271RaJtEF0uo8c4V5kvvPKHIkYA3eG9RFcMfvME/QoHiYjPDy1kViJAkPwuveM0koB4jubRow=="], - "alchemy-effect": ["alchemy-effect@0.12.0", "", { "dependencies": { "@ai-sdk/anthropic": "^3.0.31", "@ai-sdk/openai": "^3.0.23", "@ai-sdk/provider": "^3.0.8", "@aws-sdk/credential-providers": "^3.0.0", "@distilled.cloud/aws": "^0.10.0", "@distilled.cloud/cloudflare": "^0.10.0", "@distilled.cloud/cloudflare-rolldown-plugin": "0.2.0", "@distilled.cloud/cloudflare-vite-plugin": "0.1.0", "@distilled.cloud/core": "^0.10.0", "@effect/vitest": "4.0.0-beta.48", "@libsql/client": "^0.17.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.3.4", "@smithy/types": "^4.8.1", "@types/aws-lambda": "^8.10.152", "ai": "^6.0.62", "aws4fetch": "^1.0.20", "capnp-es": "^0.0.14", "cloudflare": "^5.2.0", "fast-glob": "^3.3.2", "fast-xml-parser": "^5.3.4", "ignore": "^7.0.5", "jszip": "^3.10.1", "rolldown": "1.0.0-rc.13", "solid-js": "latest", "sonda": "^0.11.1", "web-tree-sitter": "0.25.10", "workerd": "1.20260412.1", "yaml": "^2.0.0" }, "peerDependencies": { "@effect/platform-bun": "*", "@effect/platform-node": "*", "effect": "*", "vite": "^8.0.7" }, "optionalPeers": ["@effect/platform-bun", "@effect/platform-node", "effect", "vite"], "bin": { "alchemy": "bin/alchemy-effect.sh", "alchemy-effect": "bin/alchemy-effect.sh" } }, "sha512-ecbA4YRV7ijCtCgaUf1mfpH4gYrNLqwnHBmlxwg/eutU8GFzv0dN3UGlqnyjVCTWehakqCV5HAEtH7BNNm+1HA=="], - "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], @@ -2600,23 +2598,23 @@ "bare-fs": ["bare-fs@4.7.1", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw=="], - "bare-os": ["bare-os@3.8.7", "", {}, "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w=="], + "bare-os": ["bare-os@3.9.0", "", {}, "sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q=="], "bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], - "bare-stream": ["bare-stream@2.13.0", "", { "dependencies": { "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-abort-controller", "bare-buffer", "bare-events"] }, "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA=="], + "bare-stream": ["bare-stream@2.13.1", "", { "dependencies": { "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-abort-controller", "bare-buffer", "bare-events"] }, "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow=="], - "bare-url": ["bare-url@2.4.0", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA=="], + "bare-url": ["bare-url@2.4.2", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A=="], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.24", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-I2NkZOOrj2XuguvWCK6OVh9GavsNjZjK908Rq3mIBK25+GD8vPX5w2WdxVqnQ7xx3SrZJiCiZFu+/Oz50oSYSA=="], "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - "better-auth": ["better-auth@1.6.5", "", { "dependencies": { "@better-auth/core": "1.6.5", "@better-auth/drizzle-adapter": "1.6.5", "@better-auth/kysely-adapter": "1.6.5", "@better-auth/memory-adapter": "1.6.5", "@better-auth/mongo-adapter": "1.6.5", "@better-auth/prisma-adapter": "1.6.5", "@better-auth/telemetry": "1.6.5", "@better-auth/utils": "0.4.0", "@better-fetch/fetch": "1.1.21", "@noble/ciphers": "^2.1.1", "@noble/hashes": "^2.0.1", "better-call": "1.3.5", "defu": "^6.1.4", "jose": "^6.1.3", "kysely": "^0.28.14", "nanostores": "^1.1.1", "zod": "^4.3.6" }, "peerDependencies": { "@lynx-js/react": "*", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "@sveltejs/kit": "^2.0.0", "@tanstack/react-start": "^1.0.0", "@tanstack/solid-start": "^1.0.0", "better-sqlite3": "^12.0.0", "drizzle-kit": ">=0.31.4", "drizzle-orm": "^0.45.2", "mongodb": "^6.0.0 || ^7.0.0", "mysql2": "^3.0.0", "next": "^14.0.0 || ^15.0.0 || ^16.0.0", "pg": "^8.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "solid-js": "^1.0.0", "svelte": "^4.0.0 || ^5.0.0", "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", "vue": "^3.0.0" }, "optionalPeers": ["@lynx-js/react", "@prisma/client", "@sveltejs/kit", "@tanstack/react-start", "@tanstack/solid-start", "better-sqlite3", "drizzle-kit", "drizzle-orm", "mongodb", "mysql2", "next", "pg", "prisma", "react", "react-dom", "solid-js", "svelte", "vitest", "vue"] }, "sha512-rSt8JtJOJK0MqPShXINCmM6DV30GsDvnCTlIxQIzP9OpUx/umA40nUc4ALZHQyqAPbw1ib/a549kIWw/WyxxKA=="], + "better-auth": ["better-auth@1.6.9", "", { "dependencies": { "@better-auth/core": "1.6.9", "@better-auth/drizzle-adapter": "1.6.9", "@better-auth/kysely-adapter": "1.6.9", "@better-auth/memory-adapter": "1.6.9", "@better-auth/mongo-adapter": "1.6.9", "@better-auth/prisma-adapter": "1.6.9", "@better-auth/telemetry": "1.6.9", "@better-auth/utils": "0.4.0", "@better-fetch/fetch": "1.1.21", "@noble/ciphers": "^2.1.1", "@noble/hashes": "^2.0.1", "better-call": "1.3.5", "defu": "^6.1.4", "jose": "^6.1.3", "kysely": "^0.28.14", "nanostores": "^1.1.1", "zod": "^4.3.6" }, "peerDependencies": { "@lynx-js/react": "*", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "@sveltejs/kit": "^2.0.0", "@tanstack/react-start": "^1.0.0", "@tanstack/solid-start": "^1.0.0", "better-sqlite3": "^12.0.0", "drizzle-kit": ">=0.31.4", "drizzle-orm": "^0.45.2", "mongodb": "^6.0.0 || ^7.0.0", "mysql2": "^3.0.0", "next": "^14.0.0 || ^15.0.0 || ^16.0.0", "pg": "^8.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "solid-js": "^1.0.0", "svelte": "^4.0.0 || ^5.0.0", "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", "vue": "^3.0.0" }, "optionalPeers": ["@lynx-js/react", "@prisma/client", "@sveltejs/kit", "@tanstack/react-start", "@tanstack/solid-start", "better-sqlite3", "drizzle-kit", "drizzle-orm", "mongodb", "mysql2", "next", "pg", "prisma", "react", "react-dom", "solid-js", "svelte", "vitest", "vue"] }, "sha512-EBFURtglyiEZxbx4NJBoqUD8J65dX24yC+6I9AUbIXNgUkt76mshzGbHkxZ3n/lB7Dwq3kBC+hHt0hUQsnL7HA=="], "better-call": ["better-call@1.3.5", "", { "dependencies": { "@better-auth/utils": "^0.4.0", "@better-fetch/fetch": "^1.1.21", "rou3": "^0.7.12", "set-cookie-parser": "^3.0.1" }, "peerDependencies": { "zod": "^4.0.0" }, "optionalPeers": ["zod"] }, "sha512-kOFJkBP7utAQLEYrobZm3vkTH8mXq5GNgvjc5/XEST1ilVHaxXUXfeDeFlqoETMtyqS4+3/h4ONX2i++ebZrvA=="], @@ -2656,17 +2654,17 @@ "bun-ffi-structs": ["bun-ffi-structs@0.1.2", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-Lh1oQAYHDcnesJauieA4UNkWGXY9hYck7OA5IaRwE3Bp6K2F2pJSNYqq+hIy7P3uOvo3km3oxS8304g5gDMl/w=="], - "bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="], + "bun-types": ["bun-types@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA=="], - "bun-webgpu": ["bun-webgpu@0.1.5", "", { "dependencies": { "@webgpu/types": "^0.1.60" }, "optionalDependencies": { "bun-webgpu-darwin-arm64": "^0.1.5", "bun-webgpu-darwin-x64": "^0.1.5", "bun-webgpu-linux-x64": "^0.1.5", "bun-webgpu-win32-x64": "^0.1.5" } }, "sha512-91/K6S5whZKX7CWAm9AylhyKrLGRz6BUiiPiM/kXadSnD4rffljCD/q9cNFftm5YXhx4MvLqw33yEilxogJvwA=="], + "bun-webgpu": ["bun-webgpu@0.1.7", "", { "dependencies": { "@webgpu/types": "^0.1.60" }, "optionalDependencies": { "bun-webgpu-darwin-arm64": "^0.1.7", "bun-webgpu-darwin-x64": "^0.1.7", "bun-webgpu-linux-x64": "^0.1.7", "bun-webgpu-win32-x64": "^0.1.7" } }, "sha512-KUxUp+oQIf7pPBMD4Hv1TUu7DWaOZ4ciKulTk9to9+Uc8yHoYrMW7L2SJCJ4FHHkywgf/7aLRgRx0b7i6DvGIQ=="], - "bun-webgpu-darwin-arm64": ["bun-webgpu-darwin-arm64@0.1.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-lIsDkPzJzPl6yrB5CUOINJFPnTRv6fF/Q8J1mAr43ogSp86WZEg9XZKaT6f3EUJ+9ETogGoMnoj1q0AwHUTbAQ=="], + "bun-webgpu-darwin-arm64": ["bun-webgpu-darwin-arm64@0.1.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mRrFFyHzPWjsTRidAZBRcu808CPQBOUL0P6b4nxLhp+XHcV/mbUHERZMgW9s58tsojQfSdzschiQa8q+JCgRWA=="], - "bun-webgpu-darwin-x64": ["bun-webgpu-darwin-x64@0.1.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-uEddf5U7GvKIkM/BV18rUKtYHL6d0KeqBjNHwfqDH9QgEo9KVSKvJXS5I/sMefk5V5pIYE+8tQhtrREevhocng=="], + "bun-webgpu-darwin-x64": ["bun-webgpu-darwin-x64@0.1.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-g0NXGNgvaVCSH/jCWWlfdiquOHkbUN6vP4zqzSkIxWKQeLnqm3oADcok7SO3yIgI7v5mKpRc/ks7NDEKNH+jNQ=="], - "bun-webgpu-linux-x64": ["bun-webgpu-linux-x64@0.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-Y/f15j9r8ba0xUz+3lATtS74OE+PPzQXO7Do/1eCluJcuOlfa77kMjvBK/ShWnem3Y9xqi59pebTPOGRB+CaJA=="], + "bun-webgpu-linux-x64": ["bun-webgpu-linux-x64@0.1.7", "", { "os": "linux", "cpu": "x64" }, "sha512-UEP7UZdEhx9otvkZczjsszL8ZVlrODANQvgl+C88/bNVmxDoFi7w1fWzGi1sZyakiETjmtFDq2/xCLhbSZxjqw=="], - "bun-webgpu-win32-x64": ["bun-webgpu-win32-x64@0.1.6", "", { "os": "win32", "cpu": "x64" }, "sha512-MHSFAKqizISb+C5NfDrFe3g0Al5Njnu0j/A+oO2Q+bIWX+fUYjBSowiYE1ZXJx65KuryuB+tiM7Qh6cQbVvkEg=="], + "bun-webgpu-win32-x64": ["bun-webgpu-win32-x64@0.1.7", "", { "os": "win32", "cpu": "x64" }, "sha512-KZktiFkBz6sN7PEm1NVdeaLP5Q5X/PlSHZqefY4nNuWtf0LNvh54NhZe7yVv/Plz/nGbv92b0KHMBY3ki/pp6g=="], "bun2nix": ["bun2nix@2.0.8", "", { "dependencies": { "sade": "^1.8.1" }, "bin": { "bun2nix": "index.ts" } }, "sha512-pwq35hA81X1Kjsi5Xo69Aii9aY3zZHhWXwqF1QRz/uB35KzKbwJZ16WrhadiG9/T6bjOsRrPZtzuAyqmlXopLw=="], @@ -2686,7 +2684,7 @@ "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001788", "", {}, "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ=="], + "caniuse-lite": ["caniuse-lite@1.0.30001791", "", {}, "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ=="], "capnp-es": ["capnp-es@0.0.14", "", { "peerDependencies": { "typescript": "^5.7.3" }, "optionalPeers": ["typescript"], "bin": { "capnp-es": "dist/compiler/capnpc-js.mjs", "capnpc-js": "dist/compiler/capnpc-js.mjs", "capnpc-dts": "dist/compiler/capnpc-dts.mjs", "capnpc-ts": "dist/compiler/capnpc-ts.mjs" } }, "sha512-8lWj4GJISiqRSlAJGkWpI4Azib7QY5UDIkqxeHcI7aAnXVk9SFuWxl1Fme+2HhzNANV0WTJqwUZvvXvloc3sBA=="], @@ -2818,8 +2816,6 @@ "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], - "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "crossws": ["crossws@0.4.5", "", { "peerDependencies": { "srvx": ">=0.11.5" }, "optionalPeers": ["srvx"] }, "sha512-wUR89x/Rw7/8t+vn0CmGDYM9TD6VtARGb0LD5jq2wjtMy1vCP4M+sm6N6TigWeTYvnA8MoW29NqqXD0ep0rfBA=="], @@ -3018,7 +3014,7 @@ "effect-query": ["effect-query@1.0.0", "", { "peerDependencies": { "@tanstack/react-query": "^5.90.5", "effect": "^4.0.0-beta.23", "react": ">=18.2.0" } }, "sha512-oaGyubCSC+RwMzh0gY9z7tEErFRArvUkiEsGqfx4jptDyuXewrh9PQeg7P8uTCR1Gxg8V+gW0g7jXBk/9fGzoA=="], - "electron-to-chromium": ["electron-to-chromium@1.5.340", "", {}, "sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA=="], + "electron-to-chromium": ["electron-to-chromium@1.5.344", "", {}, "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg=="], "embla-carousel": ["embla-carousel@8.6.0", "", {}, "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA=="], @@ -3036,7 +3032,7 @@ "encoding-sniffer": ["encoding-sniffer@0.2.1", "", { "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" } }, "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw=="], - "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], + "enhanced-resolve": ["enhanced-resolve@5.21.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA=="], "enquirer": ["enquirer@2.4.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ=="], @@ -3058,7 +3054,7 @@ "es-iterator-helpers": ["es-iterator-helpers@1.3.2", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw=="], - "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], + "es-module-lexer": ["es-module-lexer@2.1.0", "", {}, "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ=="], "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], @@ -3068,7 +3064,7 @@ "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], - "es-toolkit": ["es-toolkit@1.45.1", "", {}, "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw=="], + "es-toolkit": ["es-toolkit@1.46.0", "", {}, "sha512-IToJ6ct9OLl5zz6WsC/1vZEwfSZ7Myil+ygl5Tf30Xjn9AEkzNB4kqp2G7VUJKF1DtTx/ra5M5KLlXvzOg51BA=="], "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], @@ -3158,7 +3154,7 @@ "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], - "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + "eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="], "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], @@ -3174,7 +3170,7 @@ "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], - "express-rate-limit": ["express-rate-limit@8.3.2", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg=="], + "express-rate-limit": ["express-rate-limit@8.4.1", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-NGVYwQSAyEQgzxX1iCM978PP9AdO/hW93gMcF6ZwQCm+rFvLsBH6w4xcXWTcliS8La5EPRN3p9wzItqBwJrfNw=="], "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], @@ -3210,7 +3206,7 @@ "fast-xml-builder": ["fast-xml-builder@1.1.5", "", { "dependencies": { "path-expression-matcher": "^1.1.3" } }, "sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA=="], - "fast-xml-parser": ["fast-xml-parser@5.5.8", "", { "dependencies": { "fast-xml-builder": "^1.1.4", "path-expression-matcher": "^1.2.0", "strnum": "^2.2.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ=="], + "fast-xml-parser": ["fast-xml-parser@5.7.2", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.1.5", "path-expression-matcher": "^1.5.0", "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w=="], "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], @@ -3360,7 +3356,7 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="], "hast": ["hast@1.0.0", "", {}, "sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA=="], @@ -3400,7 +3396,7 @@ "highlight.js": ["highlight.js@10.7.3", "", {}, "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="], - "hono": ["hono@4.12.14", "", {}, "sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w=="], + "hono": ["hono@4.12.15", "", {}, "sha512-qM0jDhFEaCBb4TxoW7f53Qrpv9RBiayUHo0S52JudprkhvpjIrGoU1mnnr29Fvd1U335ZFPZQY1wlkqgfGXyLg=="], "hosted-git-info": ["hosted-git-info@9.0.2", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg=="], @@ -3456,8 +3452,6 @@ "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], - "infra": ["infra@1.0.3", "", {}, "sha512-CrIHexE2OoefZ+cI9RFOyKAmk8YfZtLg532TLoLA7oXJ3fX6uwz3+YvanG+tXPoh8mmGViOwbirM9uqj3LzLUw=="], - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], "ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], @@ -3692,7 +3686,7 @@ "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], - "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], "jsonparse": ["jsonparse@1.3.1", "", {}, "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg=="], @@ -3958,7 +3952,7 @@ "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], - "miniflare": ["miniflare@4.20260415.0", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "sharp": "^0.34.5", "undici": "7.24.8", "workerd": "1.20260415.1", "ws": "8.18.0", "youch": "4.1.0-beta.10" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-JoExRWN4YBI2luA5BoSMFEgi8rQWXUGzo3mtE+58VXCLV3jj/Xnk5Yeqs/IXWz8Es5GJIaq6BtsixDvAxXSIng=="], + "miniflare": ["miniflare@4.20260426.0", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "sharp": "^0.34.5", "undici": "7.24.8", "workerd": "1.20260426.1", "ws": "8.18.0", "youch": "4.1.0-beta.10" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-KM+v76d04qT+NsPfVKVQEgnnuLNE3uzCCl2QKMTJ5OXor5JbBm1vpkQwQ+l7o5ELCrZ74RnyKhJKLiJyUA39Tw=="], "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], @@ -3992,11 +3986,11 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "msgpackr": ["msgpackr@1.11.9", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw=="], + "msgpackr": ["msgpackr@1.11.10", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-iCZNq+HszvF+fC3anCm4nBmWEnbeIAfpDs6IStAEKhQ2YSgkjzVG2FF9XJqwwQh5bH3N9OUTUt4QwVN6MLMLtA=="], "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="], - "msw": ["msw@2.13.4", "", { "dependencies": { "@inquirer/confirm": "^6.0.11", "@mswjs/interceptors": "^0.41.3", "@open-draft/deferred-promise": "^3.0.0", "@types/statuses": "^2.0.6", "cookie": "^1.1.1", "graphql": "^16.13.2", "headers-polyfill": "^5.0.1", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "rettime": "^0.11.7", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.1", "type-fest": "^5.5.0", "until-async": "^3.0.2", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": ">= 4.8.x" }, "optionalPeers": ["typescript"], "bin": { "msw": "cli/index.js" } }, "sha512-fPlKBeFe+8rpcyR3umUmmHuNwu6gc6T3STvkgEa9WDX/HEgal9wDeflpCUAIRtmvaLZM2igfI5y1bZ9G5J26KA=="], + "msw": ["msw@2.13.6", "", { "dependencies": { "@inquirer/confirm": "^6.0.11", "@mswjs/interceptors": "^0.41.3", "@open-draft/deferred-promise": "^3.0.0", "@types/statuses": "^2.0.6", "cookie": "^1.1.1", "graphql": "^16.13.2", "headers-polyfill": "^5.0.1", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "rettime": "^0.11.7", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.1", "type-fest": "^5.5.0", "until-async": "^3.0.2", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": ">= 4.8.x" }, "optionalPeers": ["typescript"], "bin": { "msw": "cli/index.js" } }, "sha512-GAJbQy8Ra/Ydjt0Hb2MGT2qhzd83J3+QZMHdH85uW7r/XkKc846+Ma2PLif5hGvTm5Yqa+wkcstpim0WeLZU9g=="], "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], @@ -4012,7 +4006,7 @@ "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "nanostores": ["nanostores@1.2.0", "", {}, "sha512-F0wCzbsH80G7XXo0Jd9/AVQC7ouWY6idUCTnMwW5t/Rv9W8qmO6endavDwg7TNp5GbugwSukFMVZqzPSrSMndg=="], + "nanostores": ["nanostores@1.3.0", "", {}, "sha512-XPUa/jz+P1oJvN9VBxw4L9MtdFfaH3DAryqPssqhb2kXjmb9npz0dly6rCsgFWOPr4Yg9mTfM3MDZgZZ+7A3lA=="], "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], @@ -4044,13 +4038,13 @@ "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], - "node-gyp": ["node-gyp@12.2.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "make-fetch-happen": "^15.0.0", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ=="], + "node-gyp": ["node-gyp@12.3.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "undici": "^6.25.0", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg=="], "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], - "node-releases": ["node-releases@2.0.37", "", {}, "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg=="], + "node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="], "nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="], @@ -4082,7 +4076,7 @@ "nwsapi": ["nwsapi@2.2.23", "", {}, "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ=="], - "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], + "nypm": ["nypm@0.6.6", "", { "dependencies": { "citty": "^0.2.2", "pathe": "^2.0.3", "tinyexec": "^1.1.1" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -4122,9 +4116,9 @@ "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], + "oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="], - "oniguruma-to-es": ["oniguruma-to-es@4.3.5", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ=="], + "oniguruma-to-es": ["oniguruma-to-es@4.3.6", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="], "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], @@ -4260,7 +4254,7 @@ "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.10", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ=="], + "postcss": ["postcss@8.5.12", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA=="], "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], @@ -4304,7 +4298,7 @@ "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], - "protobufjs": ["protobufjs@7.5.5", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg=="], + "protobufjs": ["protobufjs@7.5.6", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.5", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.1", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-M71sTMB146U3u0di3yup8iM+zv8yPRNQVr1KK4tyBitl3qFvEGucq/rGDRShD2rsJhtN02RJaJ7j5X5hmy8SJg=="], "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], @@ -4334,7 +4328,7 @@ "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], - "react-hook-form": ["react-hook-form@7.72.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-RhwBoy2ygeVZje+C+bwJ8g0NjTdBmDlJvAUHTxRjTmSUKPYsKfMphkS2sgEMotsY03bP358yEYlnUeZy//D9Ig=="], + "react-hook-form": ["react-hook-form@7.74.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-yR6wHr99p9wFv686jhRWVSFhUvDvNbdUf2dKlbno8/VKOCuoNobDGC6S+M2dua9A9Yo8vpcrp8assIYbsZCQ9g=="], "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], @@ -4370,7 +4364,7 @@ "read-pkg-up": ["read-pkg-up@7.0.1", "", { "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" } }, "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="], - "readable-stream": ["readable-stream@2.3.7", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="], + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "readable-web-to-node-stream": ["readable-web-to-node-stream@3.0.4", "", { "dependencies": { "readable-stream": "^4.7.0" } }, "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw=="], @@ -4468,7 +4462,7 @@ "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], - "rettime": ["rettime@0.11.7", "", {}, "sha512-DoAm1WjR1eH7z8sHPtvvUMIZh4/CSKkGCz6CxPqOrEAnOGtOuHSnSE9OC+razqxKuf4ub7pAYyl/vZV0vGs5tg=="], + "rettime": ["rettime@0.11.8", "", {}, "sha512-0fERGXktJTyJ+h8fBEiPxHPEFOu0h15JY7JtwrOVqR5K+vb99ho6IyOo7ekLS3h4sJCzIDy4VWKIbZUfe9njmg=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], @@ -4476,7 +4470,7 @@ "rolldown": ["rolldown@1.0.0-rc.13", "", { "dependencies": { "@oxc-project/types": "=0.123.0", "@rolldown/pluginutils": "1.0.0-rc.13" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.13", "@rolldown/binding-darwin-arm64": "1.0.0-rc.13", "@rolldown/binding-darwin-x64": "1.0.0-rc.13", "@rolldown/binding-freebsd-x64": "1.0.0-rc.13", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.13", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.13", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.13", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.13", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.13", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.13", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.13" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-bvVj8YJmf0rq4pSFmH7laLa6pYrhghv3PRzrCdRAr23g66zOKVJ4wkvFtgohtPLWmthgg8/rkaqRHrpUEh0Zbw=="], - "rollup": ["rollup@4.60.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.1", "@rollup/rollup-android-arm64": "4.60.1", "@rollup/rollup-darwin-arm64": "4.60.1", "@rollup/rollup-darwin-x64": "4.60.1", "@rollup/rollup-freebsd-arm64": "4.60.1", "@rollup/rollup-freebsd-x64": "4.60.1", "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", "@rollup/rollup-linux-arm-musleabihf": "4.60.1", "@rollup/rollup-linux-arm64-gnu": "4.60.1", "@rollup/rollup-linux-arm64-musl": "4.60.1", "@rollup/rollup-linux-loong64-gnu": "4.60.1", "@rollup/rollup-linux-loong64-musl": "4.60.1", "@rollup/rollup-linux-ppc64-gnu": "4.60.1", "@rollup/rollup-linux-ppc64-musl": "4.60.1", "@rollup/rollup-linux-riscv64-gnu": "4.60.1", "@rollup/rollup-linux-riscv64-musl": "4.60.1", "@rollup/rollup-linux-s390x-gnu": "4.60.1", "@rollup/rollup-linux-x64-gnu": "4.60.1", "@rollup/rollup-linux-x64-musl": "4.60.1", "@rollup/rollup-openbsd-x64": "4.60.1", "@rollup/rollup-openharmony-arm64": "4.60.1", "@rollup/rollup-win32-arm64-msvc": "4.60.1", "@rollup/rollup-win32-ia32-msvc": "4.60.1", "@rollup/rollup-win32-x64-gnu": "4.60.1", "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w=="], + "rollup": ["rollup@4.60.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.2", "@rollup/rollup-android-arm64": "4.60.2", "@rollup/rollup-darwin-arm64": "4.60.2", "@rollup/rollup-darwin-x64": "4.60.2", "@rollup/rollup-freebsd-arm64": "4.60.2", "@rollup/rollup-freebsd-x64": "4.60.2", "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", "@rollup/rollup-linux-arm-musleabihf": "4.60.2", "@rollup/rollup-linux-arm64-gnu": "4.60.2", "@rollup/rollup-linux-arm64-musl": "4.60.2", "@rollup/rollup-linux-loong64-gnu": "4.60.2", "@rollup/rollup-linux-loong64-musl": "4.60.2", "@rollup/rollup-linux-ppc64-gnu": "4.60.2", "@rollup/rollup-linux-ppc64-musl": "4.60.2", "@rollup/rollup-linux-riscv64-gnu": "4.60.2", "@rollup/rollup-linux-riscv64-musl": "4.60.2", "@rollup/rollup-linux-s390x-gnu": "4.60.2", "@rollup/rollup-linux-x64-gnu": "4.60.2", "@rollup/rollup-linux-x64-musl": "4.60.2", "@rollup/rollup-openbsd-x64": "4.60.2", "@rollup/rollup-openharmony-arm64": "4.60.2", "@rollup/rollup-win32-arm64-msvc": "4.60.2", "@rollup/rollup-win32-ia32-msvc": "4.60.2", "@rollup/rollup-win32-x64-gnu": "4.60.2", "@rollup/rollup-win32-x64-msvc": "4.60.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ=="], "rou3": ["rou3@0.7.12", "", {}, "sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg=="], @@ -4494,7 +4488,7 @@ "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], @@ -4580,7 +4574,7 @@ "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], - "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], + "socks": ["socks@2.8.8", "", { "dependencies": { "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" } }, "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog=="], "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], @@ -4694,7 +4688,7 @@ "stringify-object": ["stringify-object@5.0.0", "", { "dependencies": { "get-own-enumerable-keys": "^1.0.0", "is-obj": "^3.0.0", "is-regexp": "^3.1.0" } }, "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg=="], - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -4716,7 +4710,7 @@ "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], - "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], + "stylis": ["stylis@4.4.0", "", {}, "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA=="], "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], @@ -4734,9 +4728,9 @@ "tailwind-merge": ["tailwind-merge@2.6.1", "", {}, "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ=="], - "tailwindcss": ["tailwindcss@4.2.2", "", {}, "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q=="], + "tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], - "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], "tar": ["tar@7.5.13", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng=="], @@ -4764,7 +4758,7 @@ "tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="], - "tinyexec": ["tinyexec@1.1.1", "", {}, "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg=="], + "tinyexec": ["tinyexec@1.1.2", "", {}, "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA=="], "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], @@ -4848,7 +4842,7 @@ "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], - "typescript-eslint": ["typescript-eslint@8.58.2", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.2", "@typescript-eslint/parser": "8.58.2", "@typescript-eslint/typescript-estree": "8.58.2", "@typescript-eslint/utils": "8.58.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ=="], + "typescript-eslint": ["typescript-eslint@8.59.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.59.1", "@typescript-eslint/parser": "8.59.1", "@typescript-eslint/typescript-estree": "8.59.1", "@typescript-eslint/utils": "8.59.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-xqDcFVBmlrltH64lklOVp1wYxgJr6LVdg3NamBgH2OOQDLFdTKfIZXF5PfghrnXQKXZGTQs8tr1vL7fJvq8CTQ=="], "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], @@ -4892,7 +4886,7 @@ "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - "unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], + "unplugin": ["unplugin@3.0.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg=="], "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], @@ -4950,13 +4944,13 @@ "victory-vendor": ["victory-vendor@36.9.2", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ=="], - "vite": ["vite@8.0.8", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.8", "rolldown": "1.0.0-rc.15", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw=="], + "vite": ["vite@8.0.10", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.10", "rolldown": "1.0.0-rc.17", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw=="], "vite-tsconfig-paths": ["vite-tsconfig-paths@5.1.4", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w=="], "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], - "vitest": ["vitest@4.1.4", "", { "dependencies": { "@vitest/expect": "4.1.4", "@vitest/mocker": "4.1.4", "@vitest/pretty-format": "4.1.4", "@vitest/runner": "4.1.4", "@vitest/snapshot": "4.1.4", "@vitest/spy": "4.1.4", "@vitest/utils": "4.1.4", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.4", "@vitest/browser-preview": "4.1.4", "@vitest/browser-webdriverio": "4.1.4", "@vitest/coverage-istanbul": "4.1.4", "@vitest/coverage-v8": "4.1.4", "@vitest/ui": "4.1.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg=="], + "vitest": ["vitest@4.1.5", "", { "dependencies": { "@vitest/expect": "4.1.5", "@vitest/mocker": "4.1.5", "@vitest/pretty-format": "4.1.5", "@vitest/runner": "4.1.5", "@vitest/snapshot": "4.1.5", "@vitest/spy": "4.1.5", "@vitest/utils": "4.1.5", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.5", "@vitest/browser-preview": "4.1.5", "@vitest/browser-webdriverio": "4.1.5", "@vitest/coverage-istanbul": "4.1.5", "@vitest/coverage-v8": "4.1.5", "@vitest/ui": "4.1.5", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg=="], "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], @@ -5014,7 +5008,7 @@ "workerd": ["workerd@1.20260412.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260412.1", "@cloudflare/workerd-darwin-arm64": "1.20260412.1", "@cloudflare/workerd-linux-64": "1.20260412.1", "@cloudflare/workerd-linux-arm64": "1.20260412.1", "@cloudflare/workerd-windows-64": "1.20260412.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-k02bqY06EFMphDEQ7UD8x67zT2ZPmXsb3ECarTU7LmYGqt+pJFDlIOOeORt7th9HW/zM8/UOjN69UfjcA63ZpA=="], - "wrangler": ["wrangler@4.83.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.2", "@cloudflare/unenv-preset": "2.16.0", "blake3-wasm": "2.1.5", "esbuild": "0.27.3", "miniflare": "4.20260415.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20260415.1" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20260415.1" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-gw5g3LCiuAqVWxaoKY6+quE0HzAUEFb/FV3oAlNkE1ttd4XP3FiV91XDkkzUCcdqxS4WjhQvPhIDBNdhEi8P0A=="], + "wrangler": ["wrangler@4.86.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.2", "@cloudflare/unenv-preset": "2.16.1", "blake3-wasm": "2.1.5", "esbuild": "0.27.3", "miniflare": "4.20260426.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20260426.1" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20260426.1" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-9aa/gbF/HiUeeUEwyQpW5LDPBEzyt7iaE6xHwm0vk2Ly8A6J+jh03pzchqVnCCWR832mNyA28MD8oAYt0Kfvlw=="], "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], @@ -5076,19 +5070,19 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], + "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.24", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-oXIw1oLmuBILuvHgSj6w5LOV8oSnFRouPSv0MGkG9sRMeukZ9JnMF17kldaRQaRq8lSJIxo6aS3NzWlVmSb+4Q=="], - "@ai-sdk/gateway/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], + "@ai-sdk/gateway/@ai-sdk/provider": ["@ai-sdk/provider@2.0.2", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Epf0oKdUxNRK97Qm4l/Sp05TnwzE8FsyRF5p6nncOp8zH0GTuwK2uZoyzE/3uVjRdZNLyQ6Jw/SBjlOScMQy1Q=="], - "@ai-sdk/google/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], + "@ai-sdk/google/@ai-sdk/provider": ["@ai-sdk/provider@2.0.2", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Epf0oKdUxNRK97Qm4l/Sp05TnwzE8FsyRF5p6nncOp8zH0GTuwK2uZoyzE/3uVjRdZNLyQ6Jw/SBjlOScMQy1Q=="], - "@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], + "@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.24", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-oXIw1oLmuBILuvHgSj6w5LOV8oSnFRouPSv0MGkG9sRMeukZ9JnMF17kldaRQaRq8lSJIxo6aS3NzWlVmSb+4Q=="], - "@ai-sdk/provider-utils/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], + "@ai-sdk/provider-utils/@ai-sdk/provider": ["@ai-sdk/provider@2.0.2", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Epf0oKdUxNRK97Qm4l/Sp05TnwzE8FsyRF5p6nncOp8zH0GTuwK2uZoyzE/3uVjRdZNLyQ6Jw/SBjlOScMQy1Q=="], - "@ai-sdk/react/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], + "@ai-sdk/react/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.24", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-oXIw1oLmuBILuvHgSj6w5LOV8oSnFRouPSv0MGkG9sRMeukZ9JnMF17kldaRQaRq8lSJIxo6aS3NzWlVmSb+4Q=="], - "@ai-sdk/react/ai": ["ai@6.0.168", "", { "dependencies": { "@ai-sdk/gateway": "3.0.104", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-2HqCJuO+1V2aV7vfYs5LFEUfxbkGX+5oa54q/gCCTL7KLTdbxcCu5D7TdLA5kwsrs3Szgjah9q6D9tpjHM3hUQ=="], + "@ai-sdk/react/ai": ["ai@6.0.169", "", { "dependencies": { "@ai-sdk/gateway": "3.0.105", "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-eDAIc8bJJ3Ktk5qvBvWfAK7Uwj6zrOMI9VvQ6yLfF+7HdqnR0TSxgkLuIONrmowB2OujeAuVF9jalpNPJSN57g=="], "@arethetypeswrong/cli/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], @@ -5124,7 +5118,7 @@ "@better-auth/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.40.0", "", {}, "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw=="], - "@better-auth/core/jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="], + "@better-auth/core/jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], "@better-auth/utils/@noble/hashes": ["@noble/hashes@2.2.0", "", {}, "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="], @@ -5170,12 +5164,12 @@ "@grpc/proto-loader/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + "@intellectronica/ruler/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "@isaacs/cliui/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "@istanbuljs/load-nyc-config/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], @@ -5194,6 +5188,8 @@ "@jest/core/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "@jest/core/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@jest/environment/@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="], "@jest/fake-timers/@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="], @@ -5204,6 +5200,8 @@ "@jest/reporters/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "@jest/reporters/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@jest/types/@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="], "@jimp/core/mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], @@ -5240,11 +5238,9 @@ "@jimp/types/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "@libsql/hrana-client/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], - - "@modelcontextprotocol/sdk/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "@modelcontextprotocol/sdk/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], - "@modelcontextprotocol/sdk/jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="], + "@modelcontextprotocol/sdk/jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], "@mswjs/interceptors/@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="], @@ -5340,15 +5336,13 @@ "@stackpanel/db/react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="], - "@stackpanel/infra/alchemy": ["alchemy@0.81.4", "", { "dependencies": { "@aws-sdk/credential-providers": "^3.0.0", "@cloudflare/unenv-preset": "2.7.7", "@cloudflare/workers-types": "^4.20250805.0", "@iarna/toml": "^2.2.5", "@octokit/rest": "^21.1.1", "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.6.0", "aws4fetch": "^1.0.20", "env-paths": "^3.0.0", "esbuild": "^0.25.1", "execa": "^9.6.0", "fast-json-patch": "^3.1.1", "fast-xml-parser": "^5.2.5", "find-process": "^2.0.0", "glob": "^10.0.0", "jszip": "^3.0.0", "libsodium-wrappers": "^0.7.15", "miniflare": "^4.20250906.0", "neverthrow": "^8.2.0", "open": "^10.1.2", "openapi-types": "^12.1.3", "pathe": "^2.0.3", "picocolors": "^1.1.1", "proper-lockfile": "^4.1.2", "signal-exit": "^4.1.0", "unenv": "2.0.0-rc.21", "ws": "^8.18.3", "yaml": "^2.0.0" }, "peerDependencies": { "@astrojs/cloudflare": "^12.6.4", "@aws-sdk/client-dynamodb": "^3.0.0", "@aws-sdk/client-iam": "^3.0.0", "@aws-sdk/client-lambda": "^3.0.0", "@aws-sdk/client-s3": "^3.0.0", "@aws-sdk/client-sesv2": "^3.0.0", "@aws-sdk/client-sqs": "^3.0.0", "@aws-sdk/client-ssm": "^3.0.0", "@aws-sdk/client-sts": "^3.0.0", "@cloudflare/vite-plugin": "^1.13.14", "@coinbase/cdp-sdk": "^0.10.0", "@libsql/client": "^0.15.12", "@opennextjs/cloudflare": "^1.6.5", "astro": "^5.13.2", "drizzle-orm": "^0.44.2", "rwsdk": "^0.1.36", "stripe": "^18.5.0", "vite": ">=6.0.0", "wrangler": "^4.42.2" }, "optionalPeers": ["@astrojs/cloudflare", "@aws-sdk/client-dynamodb", "@aws-sdk/client-iam", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sesv2", "@aws-sdk/client-sqs", "@aws-sdk/client-ssm", "@aws-sdk/client-sts", "@cloudflare/vite-plugin", "@coinbase/cdp-sdk", "@libsql/client", "@opennextjs/cloudflare", "astro", "drizzle-orm", "rwsdk", "stripe", "vite"], "bin": { "alchemy": "bin/alchemy.js" } }, "sha512-/b/Sh9oWvfTVF6RkNU99qHj2ny5fkOGW1+I/4LvpO20Fc5hm0Gmo4mEcmaA1GJtYudj5mqypMvUC7RGNtcY9UQ=="], - "@stackpanel/sdk/alchemy": ["alchemy@0.81.4", "", { "dependencies": { "@aws-sdk/credential-providers": "^3.0.0", "@cloudflare/unenv-preset": "2.7.7", "@cloudflare/workers-types": "^4.20250805.0", "@iarna/toml": "^2.2.5", "@octokit/rest": "^21.1.1", "@smithy/node-config-provider": "^4.0.0", "@smithy/types": "^4.6.0", "aws4fetch": "^1.0.20", "env-paths": "^3.0.0", "esbuild": "^0.25.1", "execa": "^9.6.0", "fast-json-patch": "^3.1.1", "fast-xml-parser": "^5.2.5", "find-process": "^2.0.0", "glob": "^10.0.0", "jszip": "^3.0.0", "libsodium-wrappers": "^0.7.15", "miniflare": "^4.20250906.0", "neverthrow": "^8.2.0", "open": "^10.1.2", "openapi-types": "^12.1.3", "pathe": "^2.0.3", "picocolors": "^1.1.1", "proper-lockfile": "^4.1.2", "signal-exit": "^4.1.0", "unenv": "2.0.0-rc.21", "ws": "^8.18.3", "yaml": "^2.0.0" }, "peerDependencies": { "@astrojs/cloudflare": "^12.6.4", "@aws-sdk/client-dynamodb": "^3.0.0", "@aws-sdk/client-iam": "^3.0.0", "@aws-sdk/client-lambda": "^3.0.0", "@aws-sdk/client-s3": "^3.0.0", "@aws-sdk/client-sesv2": "^3.0.0", "@aws-sdk/client-sqs": "^3.0.0", "@aws-sdk/client-ssm": "^3.0.0", "@aws-sdk/client-sts": "^3.0.0", "@cloudflare/vite-plugin": "^1.13.14", "@coinbase/cdp-sdk": "^0.10.0", "@libsql/client": "^0.15.12", "@opennextjs/cloudflare": "^1.6.5", "astro": "^5.13.2", "drizzle-orm": "^0.44.2", "rwsdk": "^0.1.36", "stripe": "^18.5.0", "vite": ">=6.0.0", "wrangler": "^4.42.2" }, "optionalPeers": ["@astrojs/cloudflare", "@aws-sdk/client-dynamodb", "@aws-sdk/client-iam", "@aws-sdk/client-lambda", "@aws-sdk/client-s3", "@aws-sdk/client-sesv2", "@aws-sdk/client-sqs", "@aws-sdk/client-ssm", "@aws-sdk/client-sts", "@cloudflare/vite-plugin", "@coinbase/cdp-sdk", "@libsql/client", "@opennextjs/cloudflare", "astro", "drizzle-orm", "rwsdk", "stripe", "vite"], "bin": { "alchemy": "bin/alchemy.js" } }, "sha512-/b/Sh9oWvfTVF6RkNU99qHj2ny5fkOGW1+I/4LvpO20Fc5hm0Gmo4mEcmaA1GJtYudj5mqypMvUC7RGNtcY9UQ=="], "@stackpanel/sdk/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], @@ -5362,7 +5356,7 @@ "@tanstack/router-plugin/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "@tanstack/router-plugin/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], + "@tanstack/router-plugin/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@tanstack/router-utils/diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], @@ -5378,8 +5372,6 @@ "@tufjs/models/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "@types/bun/bun-types": ["bun-types@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA=="], - "@types/graceful-fs/@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="], "@types/jest/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], @@ -5402,30 +5394,20 @@ "accepts/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "ai/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], + "ai/@ai-sdk/provider": ["@ai-sdk/provider@2.0.2", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Epf0oKdUxNRK97Qm4l/Sp05TnwzE8FsyRF5p6nncOp8zH0GTuwK2uZoyzE/3uVjRdZNLyQ6Jw/SBjlOScMQy1Q=="], - "ai/@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + "ajv-formats/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], - "ajv-formats/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "alchemy/@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.13.0", "", { "dependencies": { "@distilled.cloud/core": "0.13.0", "effect": "4.0.0-beta.58" } }, "sha512-iHgRiFZfy+zmfM1phyrqMLGBVcfpBfhZU09SRaYOlbnhI94VsoTXodk9JZK/rPrJjiXOGhmF2G084kbLPNzkNw=="], + "alchemy/@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.13.1", "", { "dependencies": { "@distilled.cloud/core": "0.13.1", "effect": "4.0.0-beta.58" } }, "sha512-DfZI0cO+hBAuzvO+rA/vuCXo63qr5SLG9XoOoN7PUoI6g0KNRPyY3gqKM+EZTiJ80EHY3eJ5k6k5uiw7qMlsog=="], "alchemy/@distilled.cloud/cloudflare-rolldown-plugin": ["@distilled.cloud/cloudflare-rolldown-plugin@0.3.0", "", { "dependencies": { "@cloudflare/unenv-preset": "^2.16.0", "unenv": "^2.0.0-rc.24" }, "peerDependencies": { "rolldown": "^1.0.0-rc.9" } }, "sha512-6DIPmARCtlWR/ZsPYkaQzWV1AcUBYs9fs/NRnRMxVjKKJo0YtmCYICJ2dggWxZ6nmhukYEWK3GpMPZfq6WlGdw=="], "alchemy/@distilled.cloud/cloudflare-vite-plugin": ["@distilled.cloud/cloudflare-vite-plugin@0.2.0", "", { "dependencies": { "@distilled.cloud/cloudflare-rolldown-plugin": "0.2.0" }, "peerDependencies": { "vite": "^7.0.0 || ^8.0.0" } }, "sha512-yLk+q5EUQthiVU5nIEyF8mL1CujaO8bZp5Z7DQsxKkqwtwKLXapXjDsnknAGwv5xJuEyZG9rbSKNY2cVVRPdZQ=="], - "alchemy/ai": ["ai@6.0.168", "", { "dependencies": { "@ai-sdk/gateway": "3.0.104", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-2HqCJuO+1V2aV7vfYs5LFEUfxbkGX+5oa54q/gCCTL7KLTdbxcCu5D7TdLA5kwsrs3Szgjah9q6D9tpjHM3hUQ=="], + "alchemy/ai": ["ai@6.0.169", "", { "dependencies": { "@ai-sdk/gateway": "3.0.105", "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-eDAIc8bJJ3Ktk5qvBvWfAK7Uwj6zrOMI9VvQ6yLfF+7HdqnR0TSxgkLuIONrmowB2OujeAuVF9jalpNPJSN57g=="], "alchemy/workerd": ["workerd@1.20260417.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260417.1", "@cloudflare/workerd-darwin-arm64": "1.20260417.1", "@cloudflare/workerd-linux-64": "1.20260417.1", "@cloudflare/workerd-linux-arm64": "1.20260417.1", "@cloudflare/workerd-windows-64": "1.20260417.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-X7YnHxHVGsp1wMN14FSHzNwe5VHJQdnrkwSu5pCcA+TFxLfiA3KOXyymdopMROH1AZVQ3ggX70ha/qE+7Uq5sw=="], - "alchemy-effect/@distilled.cloud/aws": ["@distilled.cloud/aws@0.10.2", "", { "dependencies": { "@aws-crypto/crc32": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/credential-providers": "^3.994.0", "@aws-sdk/types": "^3.973.1", "@distilled.cloud/core": "0.10.2", "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "aws4fetch": "^1.0.20", "effect": "4.0.0-beta.48", "fast-xml-parser": "^5.3.2" } }, "sha512-4HxtkXMnR80yEikp4EVGlYIjz4iq0JBn1E7O5UFV3iEY73k47aqHDBrHi0uEGCXl7bYjbCdznRl5P+oZStFOXQ=="], - - "alchemy-effect/@distilled.cloud/core": ["@distilled.cloud/core@0.10.2", "", { "dependencies": { "effect": "4.0.0-beta.48" } }, "sha512-j7phS+p6yx4pyacMe1askeJ8v/mu8etwUvAH/9RlUYJYP9vuY+U38XwEO6KLFXWFGT6Y9xXdH8El3BjiYwQlRQ=="], - - "alchemy-effect/@effect/vitest": ["@effect/vitest@4.0.0-beta.48", "", { "peerDependencies": { "effect": "^4.0.0-beta.48", "vitest": "^3.0.0 || ^4.0.0" } }, "sha512-ONG24EIfUXTrJzIDJctIr6y6JOeml97eoZ53WRUNdwp/tHIAU+U3ME5uUdmtLBKSFeyivYjXGPvEP2DW8f/bCQ=="], - - "alchemy-effect/ai": ["ai@6.0.168", "", { "dependencies": { "@ai-sdk/gateway": "3.0.104", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-2HqCJuO+1V2aV7vfYs5LFEUfxbkGX+5oa54q/gCCTL7KLTdbxcCu5D7TdLA5kwsrs3Szgjah9q6D9tpjHM3hUQ=="], - "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], "api/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], @@ -5440,15 +5422,17 @@ "better-auth/@noble/hashes": ["@noble/hashes@2.2.0", "", {}, "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="], - "better-auth/jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="], + "better-auth/jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], "bin-links/write-file-atomic": ["write-file-atomic@7.0.1", "", { "dependencies": { "signal-exit": "^4.0.1" } }, "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg=="], + "buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "bun-types/@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="], "chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "cheerio/undici": ["undici@7.24.8", "", {}, "sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ=="], + "cheerio/undici": ["undici@7.25.0", "", {}, "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ=="], "cheerio/whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], @@ -5462,8 +5446,6 @@ "cli-table3/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "cliui/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "cloudflare/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], "cmdk/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], @@ -5504,6 +5486,8 @@ "encoding-sniffer/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "enquirer/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -5540,7 +5524,7 @@ "fumadocs-core/path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], - "fumadocs-mdx/esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], + "fumadocs-mdx/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], "fumadocs-mdx/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], @@ -5642,15 +5626,13 @@ "mariadb/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "marked-terminal/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "marked-terminal/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "marked-terminal/marked": ["marked@14.0.0", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ=="], "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "mermaid/dompurify": ["dompurify@3.4.0", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg=="], + "mermaid/dompurify": ["dompurify@3.4.1", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw=="], "mermaid/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], @@ -5660,7 +5642,7 @@ "miniflare/undici": ["undici@7.24.8", "", {}, "sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ=="], - "miniflare/workerd": ["workerd@1.20260415.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260415.1", "@cloudflare/workerd-darwin-arm64": "1.20260415.1", "@cloudflare/workerd-linux-64": "1.20260415.1", "@cloudflare/workerd-linux-arm64": "1.20260415.1", "@cloudflare/workerd-windows-64": "1.20260415.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-phyPjRnx+mQDfkhN9ENPioL1L0SdhYs4S0YmJK/xF9Oga+ykNfdSy1MHnsOj8yqnOV96zcVQMx32dJ0r3pq0jQ=="], + "miniflare/workerd": ["workerd@1.20260426.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260426.1", "@cloudflare/workerd-darwin-arm64": "1.20260426.1", "@cloudflare/workerd-linux-64": "1.20260426.1", "@cloudflare/workerd-linux-arm64": "1.20260426.1", "@cloudflare/workerd-windows-64": "1.20260426.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-ELvGgN8c9oo+E6EPyecxk1TEf6/eAK4TxxQTW5mQ87C7jbjCzhMbg0P2ije49UBHV0dkBYPJcJvcklUltipl2A=="], "miniflare/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], @@ -5676,13 +5658,15 @@ "msw/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "mysql/readable-stream": ["readable-stream@2.3.7", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="], + "mysql8/bignumber.js": ["bignumber.js@7.2.1", "", {}, "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ=="], "mysql8/readable-stream": ["readable-stream@2.3.6", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw=="], "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], - "nitro/undici": ["undici@7.24.8", "", {}, "sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ=="], + "nitro/undici": ["undici@7.25.0", "", {}, "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ=="], "node-exports-info/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5690,6 +5674,8 @@ "node-gyp/env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + "node-gyp/undici": ["undici@6.25.0", "", {}, "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg=="], + "node-gyp/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], "normalize-package-data/hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], @@ -5712,8 +5698,6 @@ "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "ora/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "parse-bmfont-xml/xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], @@ -5728,6 +5712,8 @@ "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], + "pretty-format/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "pretty-format/react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], @@ -5784,7 +5770,7 @@ "send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "shadcn/@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.61.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.2", "which": "^4.0.0", "yocto-spinner": "^1.1.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-utL3cpZoFzflyqUkjYbxYujI6STBTmO5LFn4bbin/NZnRWN6wQ7eErhr3/Vpa5h/jicPFC6kTa42r940mQftJQ=="], + "shadcn/@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.64.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.4", "which": "^4.0.0", "yocto-spinner": "^1.1.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-6+xRpZaWuHXEqnhBjae+VmQI9Uaqw5Uzu/ScpO+W7ww9Zp3lHSNBoNjFcUxhrCyc7pRGQzyDjhKzloqrPHERiQ=="], "shadcn/diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], @@ -5798,10 +5784,12 @@ "shadcn/ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="], - "shadcn/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], + "shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "simple-swizzle/is-arrayish": ["is-arrayish@0.3.4", "", {}, "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA=="], + "socks/ip-address": ["ip-address@10.1.1", "", {}, "sha512-1FMu8/N15Ck1BL551Jf42NYIoin2unWjLQ2Fze/DXryJRl5twqtwNHlO39qERGbIOcKYWHdgRryhOC+NG4eaLw=="], + "sonda/open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="], "sops-age/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], @@ -5820,14 +5808,16 @@ "streamdown/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], - "streamdown/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], - "streamdown/tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], - "string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "string-length/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -5840,7 +5830,7 @@ "ts-node/diff": ["diff@4.0.4", "", {}, "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ=="], - "tsx/esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], + "tsx/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], "type-is/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], @@ -5848,13 +5838,13 @@ "validate-npm-package-license/spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], - "vite/rolldown": ["rolldown@1.0.0-rc.15", "", { "dependencies": { "@oxc-project/types": "=0.124.0", "@rolldown/pluginutils": "1.0.0-rc.15" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.15", "@rolldown/binding-darwin-arm64": "1.0.0-rc.15", "@rolldown/binding-darwin-x64": "1.0.0-rc.15", "@rolldown/binding-freebsd-x64": "1.0.0-rc.15", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.15", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.15", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.15", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g=="], + "vite/rolldown": ["rolldown@1.0.0-rc.17", "", { "dependencies": { "@oxc-project/types": "=0.127.0", "@rolldown/pluginutils": "1.0.0-rc.17" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-x64": "1.0.0-rc.17", "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA=="], "web/@cloudflare/workers-types": ["@cloudflare/workers-types@4.20251225.0", "", {}, "sha512-ZZl0cNLFcsBRFKtMftKWOsfAybUYSeiTMzpQV1NlTVlByHAs1rGQt45Jw/qz8LrfHoq9PGTieSj9W350Gi4Pvg=="], "web/@types/react": ["@types/react@19.2.7", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg=="], - "web/ai": ["ai@6.0.168", "", { "dependencies": { "@ai-sdk/gateway": "3.0.104", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-2HqCJuO+1V2aV7vfYs5LFEUfxbkGX+5oa54q/gCCTL7KLTdbxcCu5D7TdLA5kwsrs3Szgjah9q6D9tpjHM3hUQ=="], + "web/ai": ["ai@6.0.169", "", { "dependencies": { "@ai-sdk/gateway": "3.0.105", "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-eDAIc8bJJ3Ktk5qvBvWfAK7Uwj6zrOMI9VvQ6yLfF+7HdqnR0TSxgkLuIONrmowB2OujeAuVF9jalpNPJSN57g=="], "web/drizzle-orm": ["drizzle-orm@0.44.7", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ=="], @@ -5870,16 +5860,16 @@ "wrangler/esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], - "wrangler/workerd": ["workerd@1.20260415.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260415.1", "@cloudflare/workerd-darwin-arm64": "1.20260415.1", "@cloudflare/workerd-linux-64": "1.20260415.1", "@cloudflare/workerd-linux-arm64": "1.20260415.1", "@cloudflare/workerd-windows-64": "1.20260415.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-phyPjRnx+mQDfkhN9ENPioL1L0SdhYs4S0YmJK/xF9Oga+ykNfdSy1MHnsOj8yqnOV96zcVQMx32dJ0r3pq0jQ=="], + "wrangler/workerd": ["workerd@1.20260426.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260426.1", "@cloudflare/workerd-darwin-arm64": "1.20260426.1", "@cloudflare/workerd-linux-64": "1.20260426.1", "@cloudflare/workerd-linux-arm64": "1.20260426.1", "@cloudflare/workerd-windows-64": "1.20260426.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-ELvGgN8c9oo+E6EPyecxk1TEf6/eAK4TxxQTW5mQ87C7jbjCzhMbg0P2ije49UBHV0dkBYPJcJvcklUltipl2A=="], "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "wrap-ansi/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "xmlbuilder2/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], @@ -5890,9 +5880,7 @@ "znv/zod": ["zod@4.1.13", "", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="], - "@ai-sdk/react/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.104", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ZKX5n74io8VIRlhIMSLWVlvT3sXC8Z7cZ9GHuWBWZDVi96+62AIsWuLGvMfcBA1STYuSoDrp6rIziZmvrTq0TA=="], - - "@ai-sdk/react/ai/@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + "@ai-sdk/react/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.105", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XpERadvLMHkYGJO4hz1Sw7Y9J705Iex48TmdZLdZdaPiFFtVgiA9qhXugLUWGAxdlXU/2N6ipoPSOwfnULZbXw=="], "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], @@ -5954,8 +5942,6 @@ "@gen/infra/alchemy/@octokit/rest": ["@octokit/rest@21.1.1", "", { "dependencies": { "@octokit/core": "^6.1.4", "@octokit/plugin-paginate-rest": "^11.4.2", "@octokit/plugin-request-log": "^5.3.1", "@octokit/plugin-rest-endpoint-methods": "^13.3.0" } }, "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg=="], - "@gen/infra/alchemy/drizzle-orm": ["drizzle-orm@0.44.7", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ=="], - "@gen/infra/alchemy/execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], "@gen/infra/alchemy/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -5972,8 +5958,6 @@ "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "@istanbuljs/load-nyc-config/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], @@ -5986,12 +5970,16 @@ "@jest/core/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + "@jest/core/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@jest/environment/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@jest/fake-timers/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@jest/reporters/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "@jest/reporters/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@jest/types/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -6086,26 +6074,10 @@ "@shikijs/rehype/shiki/@shikijs/themes": ["@shikijs/themes@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA=="], - "@stackpanel/infra/alchemy/@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.7.7", "", { "peerDependencies": { "unenv": "2.0.0-rc.21", "workerd": "^1.20250927.0" }, "optionalPeers": ["workerd"] }, "sha512-HtZuh166y0Olbj9bqqySckz0Rw9uHjggJeoGbDx5x+sgezBXlxO6tQSig2RZw5tgObF8mWI8zaPvQMkQZtAODw=="], - - "@stackpanel/infra/alchemy/@octokit/rest": ["@octokit/rest@21.1.1", "", { "dependencies": { "@octokit/core": "^6.1.4", "@octokit/plugin-paginate-rest": "^11.4.2", "@octokit/plugin-request-log": "^5.3.1", "@octokit/plugin-rest-endpoint-methods": "^13.3.0" } }, "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg=="], - - "@stackpanel/infra/alchemy/drizzle-orm": ["drizzle-orm@0.44.7", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ=="], - - "@stackpanel/infra/alchemy/execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], - - "@stackpanel/infra/alchemy/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], - - "@stackpanel/infra/alchemy/libsodium-wrappers": ["libsodium-wrappers@0.7.16", "", { "dependencies": { "libsodium": "^0.7.16" } }, "sha512-Gtr/WBx4dKjvRL1pvfwZqu7gO6AfrQ0u9vFL+kXihtHf6NfkROR8pjYWn98MFDI3jN19Ii1ZUfPR9afGiPyfHg=="], - - "@stackpanel/infra/alchemy/unenv": ["unenv@2.0.0-rc.21", "", { "dependencies": { "defu": "^6.1.4", "exsolve": "^1.0.7", "ohash": "^2.0.11", "pathe": "^2.0.3", "ufo": "^1.6.1" } }, "sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A=="], - "@stackpanel/sdk/alchemy/@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.7.7", "", { "peerDependencies": { "unenv": "2.0.0-rc.21", "workerd": "^1.20250927.0" }, "optionalPeers": ["workerd"] }, "sha512-HtZuh166y0Olbj9bqqySckz0Rw9uHjggJeoGbDx5x+sgezBXlxO6tQSig2RZw5tgObF8mWI8zaPvQMkQZtAODw=="], "@stackpanel/sdk/alchemy/@octokit/rest": ["@octokit/rest@21.1.1", "", { "dependencies": { "@octokit/core": "^6.1.4", "@octokit/plugin-paginate-rest": "^11.4.2", "@octokit/plugin-request-log": "^5.3.1", "@octokit/plugin-rest-endpoint-methods": "^13.3.0" } }, "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg=="], - "@stackpanel/sdk/alchemy/drizzle-orm": ["drizzle-orm@0.44.7", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ=="], - "@stackpanel/sdk/alchemy/execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], "@stackpanel/sdk/alchemy/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -6122,8 +6094,6 @@ "@tufjs/models/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - "@types/bun/bun-types/@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="], - "@types/graceful-fs/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@types/jest/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], @@ -6138,27 +6108,19 @@ "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], "accepts/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "alchemy-effect/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.104", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ZKX5n74io8VIRlhIMSLWVlvT3sXC8Z7cZ9GHuWBWZDVi96+62AIsWuLGvMfcBA1STYuSoDrp6rIziZmvrTq0TA=="], - - "alchemy-effect/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "alchemy-effect/ai/@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "alchemy/@distilled.cloud/cloudflare-vite-plugin/@distilled.cloud/cloudflare-rolldown-plugin": ["@distilled.cloud/cloudflare-rolldown-plugin@0.2.0", "", { "dependencies": { "@cloudflare/unenv-preset": "^2.16.0", "unenv": "^2.0.0-rc.24" }, "peerDependencies": { "rolldown": "^1.0.0-rc.9" } }, "sha512-zZFzGzp+6sy+zP3fOxkJ0pXyTXd08pLrOw/9ooIR4NkcyL1D1k2NxNPuan0X5pttebigTVCP8Ny3e62gUe9MBg=="], - "alchemy/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.104", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ZKX5n74io8VIRlhIMSLWVlvT3sXC8Z7cZ9GHuWBWZDVi96+62AIsWuLGvMfcBA1STYuSoDrp6rIziZmvrTq0TA=="], + "alchemy/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.105", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XpERadvLMHkYGJO4hz1Sw7Y9J705Iex48TmdZLdZdaPiFFtVgiA9qhXugLUWGAxdlXU/2N6ipoPSOwfnULZbXw=="], - "alchemy/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "alchemy/ai/@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + "alchemy/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.24", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-oXIw1oLmuBILuvHgSj6w5LOV8oSnFRouPSv0MGkG9sRMeukZ9JnMF17kldaRQaRq8lSJIxo6aS3NzWlVmSb+4Q=="], "alchemy/workerd/@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260417.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-7x1pQ79Npv18jBj7FiYKGCoVlV7RAei+bvnmvQf6V3npZZ86gz3wfLOLPKjQ5Osro8V8hoUoJPJJS+rI+ttaxA=="], @@ -6186,7 +6148,7 @@ "cli-table3/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "cli-table3/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "cloudflare/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], @@ -6204,61 +6166,63 @@ "docs/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "enquirer/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], "express/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - "fumadocs-mdx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], + "fumadocs-mdx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], - "fumadocs-mdx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], + "fumadocs-mdx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], - "fumadocs-mdx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], + "fumadocs-mdx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], - "fumadocs-mdx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], + "fumadocs-mdx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], - "fumadocs-mdx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], + "fumadocs-mdx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], - "fumadocs-mdx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], + "fumadocs-mdx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], - "fumadocs-mdx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], + "fumadocs-mdx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], - "fumadocs-mdx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], + "fumadocs-mdx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], - "fumadocs-mdx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], + "fumadocs-mdx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], - "fumadocs-mdx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], + "fumadocs-mdx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], - "fumadocs-mdx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], + "fumadocs-mdx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], - "fumadocs-mdx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], + "fumadocs-mdx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], - "fumadocs-mdx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], + "fumadocs-mdx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], - "fumadocs-mdx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], + "fumadocs-mdx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], - "fumadocs-mdx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], + "fumadocs-mdx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], - "fumadocs-mdx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], + "fumadocs-mdx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], - "fumadocs-mdx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], + "fumadocs-mdx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], - "fumadocs-mdx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], + "fumadocs-mdx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], - "fumadocs-mdx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], + "fumadocs-mdx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], - "fumadocs-mdx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], + "fumadocs-mdx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], - "fumadocs-mdx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], + "fumadocs-mdx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], - "fumadocs-mdx/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], + "fumadocs-mdx/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], - "fumadocs-mdx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], + "fumadocs-mdx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], - "fumadocs-mdx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], + "fumadocs-mdx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], - "fumadocs-mdx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], + "fumadocs-mdx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], - "fumadocs-mdx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], + "fumadocs-mdx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], "fumadocs-mdx/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -6314,17 +6278,17 @@ "mariadb/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "miniflare/workerd/@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260415.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-dsxaKsQm3LnPGNPEdsRv09QN3Y4DqCw7kX5j6noKqbAtro2jTr95sVlYM1jUxZ5FkOl1f7SXgaKKB9t5H5Nkbg=="], + "miniflare/workerd/@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260426.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ch7DqsmYzSQRTY87pZpsGsFVz9VVBnLPnCBOHxKt1HH25a7oMu1w1PbPWqVmE0VerCLsj/TScX7Ob3v6E14TZw=="], - "miniflare/workerd/@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260415.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+JgSgVA49KyKteHRA1SnonE4Zn5Ei5zdAp5FQMxFmXI8qulZw4Hl7safXxRyK4i9sTO8gl7TFOKO5Q64VPvSDQ=="], + "miniflare/workerd/@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260426.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0m0U8vaPRH25SpKjbSyRql6gmPe4rCsETRV2WW0qBnuMdKNr5Vh5/Uez80xVrfiCCRMTULGeg63Nqg2vg6CDOA=="], - "miniflare/workerd/@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260415.1", "", { "os": "linux", "cpu": "x64" }, "sha512-tU+9pwsqCy8afOVlGtiWrWQc/fedQK4SRm4KPIAt+zOiQWDxWASm6YGBUJis5c648WN80yz47qnmdDi8DQNOcA=="], + "miniflare/workerd/@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260426.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C8LlC8uSYzg49y51n++75esxZmMp+Uz1OKHHA/4lkv6rjOTbcHQJuEwSLppjybVIXpv7A8MBhbu9iyCTvyv1mw=="], - "miniflare/workerd/@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260415.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-bR9uITnV19r5NQ14xnypi2xHXu2iQvfYV8cVgx0JouFUmWwTEEAwFVojDdssGq93VHX9hr/pi2IRUZeegbYBog=="], + "miniflare/workerd/@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260426.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-ESVp/OIFMAqjQsa8BOP2BQQz5Vpfv6ncN6lNnIuNeOgsISQBdYk+LA60bwQHMud9tvmnSYtONp1zkZ8OQz+x6w=="], - "miniflare/workerd/@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260415.1", "", { "os": "win32", "cpu": "x64" }, "sha512-4NuMLlerI0Ijua3Ir8HXQ+qyNvCUDEG5gDco5Om+sAiK6rnWiz+aGoSlbB8W16yW9QAgzCstbmXLiVknUBflfQ=="], + "miniflare/workerd/@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260426.1", "", { "os": "win32", "cpu": "x64" }, "sha512-d3Xj/IjINRgNVwH+eKhpUn4xkkcEewbWXbOvBlapiirKWh5zl9m0Epi3qOqmjyRYK6MICqIGXg4qZBEt0lxudw=="], - "msw/tough-cookie/tldts": ["tldts@7.0.28", "", { "dependencies": { "tldts-core": "^7.0.28" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw=="], + "msw/tough-cookie/tldts": ["tldts@7.0.29", "", { "dependencies": { "tldts-core": "^7.0.29" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-JIXCerhudr/N6OWLwLF1HVsTTUo7ry6qHa5eWZEkiMuxsIiAACL55tGLfqfHfoH7QaMQUW8fngD7u7TxWexYQg=="], "msw/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], @@ -6354,7 +6318,9 @@ "opencontrol/@modelcontextprotocol/sdk/pkce-challenge": ["pkce-challenge@4.1.0", "", {}, "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ=="], - "ora/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "opencontrol/@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "opencontrol/@modelcontextprotocol/sdk/zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], "pkg-dir/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], @@ -6402,113 +6368,101 @@ "sonda/open/wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="], - "streamdown/shiki/@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], + "string-length/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "streamdown/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], + "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "streamdown/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g=="], + "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], - "streamdown/shiki/@shikijs/langs": ["@shikijs/langs@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg=="], + "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], - "streamdown/shiki/@shikijs/themes": ["@shikijs/themes@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA=="], + "tsx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], - "streamdown/shiki/@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], + "tsx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], - "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "tsx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], - "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], + "tsx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], - "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], + "tsx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], - "tsx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], + "tsx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], - "tsx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], + "tsx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], - "tsx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], + "tsx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], - "tsx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], + "tsx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], - "tsx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], + "tsx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], - "tsx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], + "tsx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], - "tsx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], + "tsx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], - "tsx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], + "tsx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], - "tsx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], + "tsx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], - "tsx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], + "tsx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], - "tsx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], + "tsx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], - "tsx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], + "tsx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], - "tsx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], + "tsx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], - "tsx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], + "tsx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], - "tsx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], + "tsx/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], - "tsx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], + "tsx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], - "tsx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], + "tsx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], - "tsx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], + "tsx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], - "tsx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], - - "tsx/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], - - "tsx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], - - "tsx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], - - "tsx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], - - "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], + "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], "type-is/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - "vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.124.0", "", {}, "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg=="], - - "vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.15", "", { "os": "android", "cpu": "arm64" }, "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA=="], + "vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.127.0", "", {}, "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ=="], - "vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg=="], + "vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.17", "", { "os": "android", "cpu": "arm64" }, "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ=="], - "vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw=="], + "vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.17", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw=="], - "vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.15", "", { "os": "freebsd", "cpu": "x64" }, "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw=="], + "vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.17", "", { "os": "darwin", "cpu": "x64" }, "sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw=="], - "vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15", "", { "os": "linux", "cpu": "arm" }, "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA=="], + "vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.17", "", { "os": "freebsd", "cpu": "x64" }, "sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw=="], - "vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w=="], + "vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17", "", { "os": "linux", "cpu": "arm" }, "sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ=="], - "vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ=="], + "vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q=="], - "vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "ppc64" }, "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ=="], + "vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg=="], - "vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "s390x" }, "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ=="], + "vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17", "", { "os": "linux", "cpu": "ppc64" }, "sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA=="], - "vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.15", "", { "os": "linux", "cpu": "x64" }, "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA=="], + "vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17", "", { "os": "linux", "cpu": "s390x" }, "sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA=="], - "vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.15", "", { "os": "linux", "cpu": "x64" }, "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw=="], + "vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.17", "", { "os": "linux", "cpu": "x64" }, "sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA=="], - "vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.15", "", { "os": "none", "cpu": "arm64" }, "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg=="], + "vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.17", "", { "os": "linux", "cpu": "x64" }, "sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw=="], - "vite/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.15", "", { "dependencies": { "@emnapi/core": "1.9.2", "@emnapi/runtime": "1.9.2", "@napi-rs/wasm-runtime": "^1.1.3" }, "cpu": "none" }, "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q=="], + "vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.17", "", { "os": "none", "cpu": "arm64" }, "sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA=="], - "vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA=="], + "vite/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.17", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA=="], - "vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.15", "", { "os": "win32", "cpu": "x64" }, "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g=="], + "vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17", "", { "os": "win32", "cpu": "arm64" }, "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA=="], - "vite/rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.15", "", {}, "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g=="], + "vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.17", "", { "os": "win32", "cpu": "x64" }, "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg=="], - "web/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.104", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ZKX5n74io8VIRlhIMSLWVlvT3sXC8Z7cZ9GHuWBWZDVi96+62AIsWuLGvMfcBA1STYuSoDrp6rIziZmvrTq0TA=="], + "vite/rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.17", "", {}, "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg=="], - "web/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], + "web/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.105", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@ai-sdk/provider-utils": "4.0.24", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XpERadvLMHkYGJO4hz1Sw7Y9J705Iex48TmdZLdZdaPiFFtVgiA9qhXugLUWGAxdlXU/2N6ipoPSOwfnULZbXw=="], - "web/ai/@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + "web/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.24", "", { "dependencies": { "@ai-sdk/provider": "3.0.9", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-oXIw1oLmuBILuvHgSj6w5LOV8oSnFRouPSv0MGkG9sRMeukZ9JnMF17kldaRQaRq8lSJIxo6aS3NzWlVmSb+4Q=="], "wrangler/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], @@ -6562,21 +6516,21 @@ "wrangler/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], - "wrangler/workerd/@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260415.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-dsxaKsQm3LnPGNPEdsRv09QN3Y4DqCw7kX5j6noKqbAtro2jTr95sVlYM1jUxZ5FkOl1f7SXgaKKB9t5H5Nkbg=="], + "wrangler/workerd/@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260426.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ch7DqsmYzSQRTY87pZpsGsFVz9VVBnLPnCBOHxKt1HH25a7oMu1w1PbPWqVmE0VerCLsj/TScX7Ob3v6E14TZw=="], - "wrangler/workerd/@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260415.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+JgSgVA49KyKteHRA1SnonE4Zn5Ei5zdAp5FQMxFmXI8qulZw4Hl7safXxRyK4i9sTO8gl7TFOKO5Q64VPvSDQ=="], + "wrangler/workerd/@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260426.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0m0U8vaPRH25SpKjbSyRql6gmPe4rCsETRV2WW0qBnuMdKNr5Vh5/Uez80xVrfiCCRMTULGeg63Nqg2vg6CDOA=="], - "wrangler/workerd/@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260415.1", "", { "os": "linux", "cpu": "x64" }, "sha512-tU+9pwsqCy8afOVlGtiWrWQc/fedQK4SRm4KPIAt+zOiQWDxWASm6YGBUJis5c648WN80yz47qnmdDi8DQNOcA=="], + "wrangler/workerd/@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260426.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C8LlC8uSYzg49y51n++75esxZmMp+Uz1OKHHA/4lkv6rjOTbcHQJuEwSLppjybVIXpv7A8MBhbu9iyCTvyv1mw=="], - "wrangler/workerd/@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260415.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-bR9uITnV19r5NQ14xnypi2xHXu2iQvfYV8cVgx0JouFUmWwTEEAwFVojDdssGq93VHX9hr/pi2IRUZeegbYBog=="], + "wrangler/workerd/@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260426.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-ESVp/OIFMAqjQsa8BOP2BQQz5Vpfv6ncN6lNnIuNeOgsISQBdYk+LA60bwQHMud9tvmnSYtONp1zkZ8OQz+x6w=="], - "wrangler/workerd/@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260415.1", "", { "os": "win32", "cpu": "x64" }, "sha512-4NuMLlerI0Ijua3Ir8HXQ+qyNvCUDEG5gDco5Om+sAiK6rnWiz+aGoSlbB8W16yW9QAgzCstbmXLiVknUBflfQ=="], + "wrangler/workerd/@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260426.1", "", { "os": "win32", "cpu": "x64" }, "sha512-d3Xj/IjINRgNVwH+eKhpUn4xkkcEewbWXbOvBlapiirKWh5zl9m0Epi3qOqmjyRYK6MICqIGXg4qZBEt0lxudw=="], "wrap-ansi-cjs/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "xmlbuilder2/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -6614,10 +6568,14 @@ "@gen/infra/alchemy/libsodium-wrappers/libsodium": ["libsodium@0.7.16", "", {}, "sha512-3HrzSPuzm6Yt9aTYCDxYEG8x8/6C0+ag655Y7rhhWZM9PT4NpdnbqlzXhGZlDnkgR6MeSTnOt/VIyHLs9aSf+Q=="], + "@grpc/proto-loader/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@grpc/proto-loader/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "@grpc/proto-loader/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "@grpc/proto-loader/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], "@node-minify/core/glob/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], @@ -6636,32 +6594,6 @@ "@opennextjs/cloudflare/glob/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core": ["@octokit/core@6.1.6", "", { "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.2.2", "@octokit/request": "^9.2.3", "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "before-after-hook": "^3.0.2", "universal-user-agent": "^7.0.0" } }, "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@11.6.0", "", { "dependencies": { "@octokit/types": "^13.10.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/plugin-request-log": ["@octokit/plugin-request-log@5.3.1", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@13.5.0", "", { "dependencies": { "@octokit/types": "^13.10.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw=="], - - "@stackpanel/infra/alchemy/execa/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - - "@stackpanel/infra/alchemy/execa/human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - - "@stackpanel/infra/alchemy/execa/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], - - "@stackpanel/infra/alchemy/execa/npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - - "@stackpanel/infra/alchemy/execa/strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], - - "@stackpanel/infra/alchemy/glob/foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - - "@stackpanel/infra/alchemy/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], - - "@stackpanel/infra/alchemy/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - - "@stackpanel/infra/alchemy/libsodium-wrappers/libsodium": ["libsodium@0.7.16", "", {}, "sha512-3HrzSPuzm6Yt9aTYCDxYEG8x8/6C0+ag655Y7rhhWZM9PT4NpdnbqlzXhGZlDnkgR6MeSTnOt/VIyHLs9aSf+Q=="], - "@stackpanel/sdk/alchemy/@octokit/rest/@octokit/core": ["@octokit/core@6.1.6", "", { "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.2.2", "@octokit/request": "^9.2.3", "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "before-after-hook": "^3.0.2", "universal-user-agent": "^7.0.0" } }, "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA=="], "@stackpanel/sdk/alchemy/@octokit/rest/@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@11.6.0", "", { "dependencies": { "@octokit/types": "^13.10.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw=="], @@ -6694,36 +6626,46 @@ "@tufjs/models/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "@types/bun/bun-types/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "alchemy-effect/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="], - "alchemy/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="], "chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "cli-highlight/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "cli-highlight/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "cli-highlight/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "cli-highlight/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "cli-table3/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "ignore-walk/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "jest-cli/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "jest-cli/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "jest-cli/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "msw/tough-cookie/tldts/tldts-core": ["tldts-core@7.0.28", "", {}, "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ=="], + "jest-cli/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "msw/tough-cookie/tldts/tldts-core": ["tldts-core@7.0.29", "", {}, "sha512-W99NuU7b1DcG3uJ3v9k9VztCH3WialNbBkBft5wCs8V8mexu0XQqaZEYb9l9RNNzK8+3EJ9PKWB0/RUtTQ/o+Q=="], + + "msw/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "msw/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "msw/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "msw/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "npm-run-all/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], @@ -6750,9 +6692,9 @@ "shadcn/ts-morph/@ts-morph/common/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - "vite/rolldown/@rolldown/binding-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], + "vite/rolldown/@rolldown/binding-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "vite/rolldown/@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], + "vite/rolldown/@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], "web/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="], @@ -6780,34 +6722,16 @@ "@gen/infra/alchemy/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@grpc/proto-loader/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@grpc/proto-loader/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@grpc/proto-loader/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "@opennextjs/cloudflare/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@5.1.2", "", {}, "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/graphql": ["@octokit/graphql@8.2.2", "", { "dependencies": { "@octokit/request": "^9.2.3", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/request": ["@octokit/request@9.2.4", "", { "dependencies": { "@octokit/endpoint": "^10.1.4", "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^2.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/request-error": ["@octokit/request-error@6.1.8", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/before-after-hook": ["before-after-hook@3.0.2", "", {}, "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@stackpanel/infra/alchemy/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - - "@stackpanel/infra/alchemy/glob/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], - - "@stackpanel/infra/alchemy/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "@stackpanel/sdk/alchemy/@octokit/rest/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@5.1.2", "", {}, "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="], "@stackpanel/sdk/alchemy/@octokit/rest/@octokit/core/@octokit/graphql": ["@octokit/graphql@8.2.2", "", { "dependencies": { "@octokit/request": "^9.2.3", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA=="], @@ -6830,12 +6754,24 @@ "@stackpanel/sdk/alchemy/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "cli-highlight/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "cli-highlight/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "cli-highlight/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "jest-cli/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "jest-cli/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "jest-cli/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "msw/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "msw/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "msw/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], @@ -6856,16 +6792,6 @@ "@grpc/proto-loader/yargs/cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@10.1.4", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/request/fast-content-type-parse": ["fast-content-type-parse@2.0.1", "", {}, "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - - "@stackpanel/infra/alchemy/@octokit/rest/@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - "@stackpanel/sdk/alchemy/@octokit/rest/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@10.1.4", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA=="], "@stackpanel/sdk/alchemy/@octokit/rest/@octokit/core/@octokit/request/fast-content-type-parse": ["fast-content-type-parse@2.0.1", "", {}, "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="], diff --git a/nix/stackpanel/core/options/deploy.nix b/nix/stackpanel/core/options/deploy.nix index 311660ea..7c5bdb1e 100644 --- a/nix/stackpanel/core/options/deploy.nix +++ b/nix/stackpanel/core/options/deploy.nix @@ -9,7 +9,7 @@ # The toggle contributes entries to `stackpanel.envs.deploy` so the codegen # pipeline serializes them into the deploy-scope env loader. At deploy time # (both local and CI) those values are exported as env vars, which the -# HostedState alchemy-effect adapter in packages/infra reads. +# HostedState alchemy adapter in packages/infra reads. # ============================================================================== { lib, config, ... }: let @@ -22,7 +22,7 @@ in type = lib.types.enum [ "hosted" "local" ]; default = "local"; description = '' - Which backend alchemy-effect uses for deploy state. + Which backend alchemy uses for deploy state. - `local`: filesystem at .alchemy/state/ (default). No network, no account, works offline. State lives on whichever machine @@ -40,7 +40,7 @@ in default = "https://api.stackpanel.com"; description = '' Base URL of the stackpanel cloud API. Override for self-hosted - or staging environments. The alchemy-effect adapter reads this + or staging environments. The alchemy adapter reads this from STACKPANEL_API_URL at deploy time. ''; }; diff --git a/package.json b/package.json index 360d98ab..2061b67c 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ } }, "scripts": { - "postinstall": "bun scripts/apply-alchemy-effect-opennext-assets.ts", "check": "vp lint && vp fmt --write", "lint": "vp lint .", "ruler:apply": "bunx @intellectronica/ruler@latest apply --local-only", diff --git a/packages/api/src/routers/alchemy-state.ts b/packages/api/src/routers/alchemy-state.ts index ec3ef06a..97ba807e 100644 --- a/packages/api/src/routers/alchemy-state.ts +++ b/packages/api/src/routers/alchemy-state.ts @@ -90,7 +90,7 @@ export const alchemyStateRouter = createTRPCRouter({ * Optional optimistic-concurrency check. When provided and the * server's stored version differs, throws CONFLICT so the caller * can refetch + retry. Omit for last-writer-wins semantics - * (matches alchemy-effect's LocalState behavior). + * (matches alchemy's LocalState behavior). */ expectedVersion: z.number().int().min(0).optional(), payload: z.unknown(), @@ -232,7 +232,7 @@ export const alchemyStateRouter = createTRPCRouter({ /** * Enumerate all distinct stacks that have any state entries for the * calling organization. Mirrors `StateService.listStacks` in the - * alchemy-effect contract. + * alchemy contract. */ listStacks: paidProcedure.query(async ({ ctx }) => { const organizationId = requireActiveOrg(ctx.session as never); diff --git a/packages/db/alchemy.run.ts b/packages/db/alchemy.run.ts index e6f13146..d7c7ad34 100644 --- a/packages/db/alchemy.run.ts +++ b/packages/db/alchemy.run.ts @@ -1,6 +1,7 @@ import { loadAppEnv } from "@gen/env/runtime"; await loadAppEnv("web", "dev", { inject: true }); -import * as Stack from "alchemy-effect/Stack"; +import * as Alchemy from "alchemy"; +import { localState } from "alchemy/State"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import { @@ -114,10 +115,18 @@ const dbEffect = ? neonManagedPostgres : cloudflareHyperdrive; -export default Stack.make( +export default Alchemy.Stack( "stackpanel-db", - allProviders, -)( + { + providers: allProviders, + // `db:up` is a local-only entrypoint (Docker / Neon project / Hyperdrive + // binding) and only loads `loadAppEnv("web", "dev")` — it deliberately + // doesn't pull deploy-scope Cloudflare creds, so picking + // `Cloudflare.state()` here would fail to authenticate. Filesystem state + // under `.alchemy/` matches the previous behaviour and works without + // any cloud credentials. + state: localState(), + }, Effect.gen(function* () { return yield* dbEffect; }), diff --git a/packages/db/package.json b/packages/db/package.json index 942b02b9..6e38c09c 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -30,7 +30,7 @@ "@stackpanel/config": "workspace:*", "@types/pg": "^8.20.0", "@types/react": "^19.2.14", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "drizzle-kit": "^0.31.8", "effect": "catalog:", "wrangler": "^4.81.1" diff --git a/packages/db/src/infra/docker.container.ts b/packages/db/src/infra/docker.container.ts index 01ef9807..f76da3c4 100644 --- a/packages/db/src/infra/docker.container.ts +++ b/packages/db/src/infra/docker.container.ts @@ -1,5 +1,5 @@ -import * as Provider from "alchemy-effect/Provider"; -import { Resource } from "alchemy-effect/Resource"; +import * as Provider from "alchemy/Provider"; +import { Resource } from "alchemy/Resource"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import { docker } from "./exec"; diff --git a/packages/db/src/infra/docker.volume.ts b/packages/db/src/infra/docker.volume.ts index 82c0f4f9..ad7323c3 100644 --- a/packages/db/src/infra/docker.volume.ts +++ b/packages/db/src/infra/docker.volume.ts @@ -1,5 +1,5 @@ -import * as Provider from "alchemy-effect/Provider"; -import { Resource } from "alchemy-effect/Resource"; +import * as Provider from "alchemy/Provider"; +import { Resource } from "alchemy/Resource"; import * as Effect from "effect/Effect"; import { docker } from "./exec"; diff --git a/packages/db/src/infra/neon.project.ts b/packages/db/src/infra/neon.project.ts index 465bd84d..7bdc1f41 100644 --- a/packages/db/src/infra/neon.project.ts +++ b/packages/db/src/infra/neon.project.ts @@ -5,8 +5,8 @@ import { getConnectionURI, getProject, } from "@distilled.cloud/neon/Operations"; -import * as Provider from "alchemy-effect/Provider"; -import { Resource } from "alchemy-effect/Resource"; +import * as Provider from "alchemy/Provider"; +import { Resource } from "alchemy/Resource"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as Redacted from "effect/Redacted"; diff --git a/packages/infra/gen/config/package.json b/packages/infra/gen/config/package.json deleted file mode 100644 index 3ee73b4e..00000000 --- a/packages/infra/gen/config/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "exports": { - ".": { - "default": "./src/index.ts" - } - }, - "name": "@gen/config", - "type": "module" -} diff --git a/packages/infra/gen/config/src/config.ts b/packages/infra/gen/config/src/config.ts deleted file mode 100644 index 8322721f..00000000 --- a/packages/infra/gen/config/src/config.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Evaluated stackpanel config, regenerated on each devshell entry. - -export const PROJECT_CONFIG = {"apps":{"docs":{"domain":"docs.stackpanel.lan","path":null,"port":5738,"tls":true,"url":"https://docs.stackpanel.lan"},"stackpanel-go":{"domain":null,"path":null,"port":5797,"tls":false,"url":null},"web":{"domain":"@.stackpanel.lan","path":null,"port":5775,"tls":true,"url":"https://@.stackpanel.lan"}},"basePort":6400,"binaryCache":{"cachix":{"cache":"darkmatter","enable":true},"enable":true},"colmena":{"enable":true,"flake":"."},"deployment":{"aws":{"instanceType":"t3.small","port":80,"region":"us-west-2"}},"projectName":"stackpanel","services":{"minio":{"key":"MINIO","name":"Minio","port":6498},"minio_console":{"key":"MINIO_CONSOLE","name":"Minio Console","port":6436},"postgres":{"key":"POSTGRES","name":"PostgreSQL","port":6404},"redis":{"key":"REDIS","name":"Redis","port":6494}},"version":1} as const; - -export type ProjectConfig = typeof PROJECT_CONFIG; diff --git a/packages/infra/gen/config/src/index.ts b/packages/infra/gen/config/src/index.ts deleted file mode 100644 index ae59ad13..00000000 --- a/packages/infra/gen/config/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -export { PROJECT_CONFIG, type ProjectConfig } from "./config"; diff --git a/packages/infra/gen/env/README.md b/packages/infra/gen/env/README.md deleted file mode 100644 index dc340308..00000000 --- a/packages/infra/gen/env/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# @gen/env - -> Auto-generated by Stack — do not edit manually. -> Regenerate with `write-files` or restart devshell. - -Type-safe generated environment access for 3 apps. - -## Quick Start - -```typescript -import { docs } from "@gen/env"; - -// Reads process.env on first call and returns a typed object -const env = docs.dev.getEnv(); -``` - -For non-Node environments (Cloudflare Workers, Deno, etc.), pass a custom env object: - -```typescript -const env = docs.dev.getEnv({ - DATABASE_URL: "postgres://...", - PORT: "3000", -}); -``` - -## Apps - -### docs - -Environments: `dev`, `shared`, `test` -Variables: `HOSTNAME`, `PORT` - -```typescript -import { docs } from "@gen/env"; -const env = docs.dev.getEnv(); -``` - -### stackpanel-go - -Environments: `dev` -Variables: `STACKPANEL_TEST_PAIRING_TOKEN` - -```typescript -import { stackpanelGo } from "@gen/env"; -const env = stackpanelGo.dev.getEnv(); -``` - -### web - -Environments: `dev`, `prod`, `staging` -Variables: `BETTER_AUTH_SECRET`, `BETTER_AUTH_URL`, `CORS_ORIGIN`, `POLAR_ACCESS_TOKEN`, `POLAR_SUCCESS_URL`, `POSTGRES_URL` - -```typescript -import { web } from "@gen/env"; -const env = web.dev.getEnv(); -``` - - -## How It Works - -Each app/environment combination exports a typed `getEnv()` singleton: - -- **Lazy** — nothing is parsed until you call `getEnv()` -- **Singleton** — first call parses and caches, subsequent calls return the cached result -- **Portable** — pass any `Record` as input -- **Import-backed** — encrypted runtime payloads are also generated as importable modules for non-Node runtimes - -## Runtime Requirements - -| Context | What you need | -|---------|---------------| -| **Deployed** (Cloudflare Workers, etc.) | Nothing — bindings are injected by the host | -| **Local dev** | Devshell handles it via vals/chamber/SOPS | -| **Docker** | Run `stack codegen build` to materialize encrypted env payloads, then provide `SOPS_AGE_KEY` or `SOPS_AGE_KEY_CMD` + `APP_ENV`; if you use `SOPS_KEYSERVICE`, install the `sops` binary too | diff --git a/packages/infra/gen/env/data/dev/docs.sops.json b/packages/infra/gen/env/data/dev/docs.sops.json deleted file mode 100644 index a9f751ad..00000000 --- a/packages/infra/gen/env/data/dev/docs.sops.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "HOSTNAME": "ENC[AES256_GCM,data:5PdpL5JMHPrOG7Gls+Y=,iv:eAzNV9rs39IIKVjix7XCurXTcCg3n9x96GPV+c0F8P0=,tag:nHcP9JzHb5G5N61cBi1cZQ==,type:str]", - "PORT": "ENC[AES256_GCM,data:ylFTeQ==,iv:KJKpSgvMqhgcIzWe5P/B4fMz95FzCk1s5fAcr/V+BI0=,tag:qDW4bUAJNzXjt4BZGutDVw==,type:str]", - "sops": { - "age": [ - { - "recipient": "age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOeXdKTjc2ZE1tdmxmcHRo\nSTI5WXZqbFBUTEJ3cGVOUkhIeEY3OTY0Z3owCkNqQTNxSVNuVEVUMzBqSkNodEZH\nUldCejVUQ3ZQdmtqNzA1MVptUUxMakEKLS0tIE1Lc3RFalk5Q3NsZ3NyS1VoNnRj\najJ5dkJkVDZYbVMyejlmcUFxUjNYWXcKBqYvfcpxyNnzJhSUsdl/5dvO0FtWWw0L\ntIeAsuNPsTINu56ec0SU+CwJbKLZ6xzHGMHTaVWrvjUlekcISbYJjQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWTJsZDJkMGJSb1JTVDEz\nNjVqVkovS2Vjcnh3T3BJc2RpU3FJd3hndVZVCkE3QzVNQTJSL1g5Z3BxVG1wUk04\nRU5RZFJ3KzRxMytNcVdQY2MyeDRlU2cKLS0tIGVQM3E4RkNoMWM3QjlJSzRsRzZT\naVhHS3JZMlRGQlBrZ2JzMm9wN1RTQTAKcbSHbxjWy3SKiXGiduxwxlhpjjhxKG1p\nX4t0RVNaxBbOYXR7DaWhjxyUJ9nUlvIwSQ6Gmlz5p291qHESnuEziw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5VDZ2QU8zam9KTTlMK0RV\nSVJMWDVEMER1dTcvYVV3MjhuR0s2enFMQjJVCkN3TEJlUi85dTUyblR2R09NaGkz\nODloYU56MFkvNFBEd3BLTlpsTmQxcW8KLS0tIG5xRUdFbUJHVE95K1pqYnJsRFo3\nLy9JUlV3NDZMbTR6UDZjdzdESUJvTWsKv0OhbxmOOQl9FPehXy42KJQOzpm33rS4\n3rGFQ4+liMGWf+X5TbYkaVDHijWmIe8A4JZJW7j9lLD5kl1lAIMyGg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBqa2hT\nS25oUnQ5VGZyWWtIclJpSVhzNk14RVFBeHhBcGNaNnNuMlo0ekM4CnIyRTY0amxN\naS9FRjNyTStCZ1I4ME5VOGRyL3dWTVNmZE1pc0ZTQ3BKdWMKLS0tIFU0WW10VjFN\nMVlHN3RlVzVsVmU0NEQwL1hPekZ0MVVGcndiS2NCUVh4VXMKWTwtvUP/LXfryGxk\nYNFIpgAzA64yuKTbxY4eR1scmjLFzE3buLb3in5Ixt+DY7f6gC2pPpbMGBHGTYIu\nHhTqYA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBsaHQ5\nQkFQSVM2TTlUc0tSblk5MW1uU2VqYUlQUXZGdnpuS05IbG5WMTFBCkJ0UXE5Q28y\nT2RSQ21qck5lb2JsY2pWV01yQ1hiSnFja2hGQXd3OFNMTXMKLS0tIEI1OW9GVWxN\neEZFNHE1NnNlcHpCYllqTlhjQzlpU095cVVyVU53WU5hVjgKLxrUBxZmjOtpKp+9\n8rzNbxE2K6PEakI7VsagJ+QgVgZjFdxDW8YsI1nFzjLXlS1z4rj2cUYZ0DUGprCC\nBGkO6g==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBUemJQ\nN3lJbENleURWdElTV1Y2c2VwYmFmd3p4KzZyOG1kQ2lpNGF0aUVvCithOElvQnlG\nKzc5RTRCWFhFUjNBMFRWR2l3UHZvbEprSkxlRFAvRnpTTlEKLS0tIE41VmJHVlhy\nQm9BSVNLUWduOTdFUUxxWERjMHVobW1jODNPdkhXVHhFSWMK5+xHx6AbBwcRZz5j\n5cieW9RC3HRtRlXbNAZh/VOXa60VxPn7U+SYPDShz1y6YMSZm8N1l7AztJ6m7t+V\n0hYoSw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBwVmg0\nelNPcDRad3JFVXNJTHV6NUVERmZ4ODRoem5OM3lMVHNISFRzWUQwCmQ0M0txK0VQ\nOEtzOUdPRzd3MGdqM2NVU0U5ZlRKaS9UUnpKdEFCa3FEMTgKLS0tIGZFdHh4dlJ0\naDY2a2NNZkZoWEMvZk1ORk9xQzcrSjRMdWV4WDBlZnlkY1EKOMn97pNblq5IAEu8\nvthgnl15ESjkn4w7cZz91AvuAPjq18LfF6IErxcIvdU8yJOJmD1r6H7kLd7xDA7R\n0XyQTw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyAzT09T\ncUVVSTBVWSsweGRRbXZQWDhURXBRUUpKd0l1YzZmN1VOV003UjJRClovMUQ4ak1Y\nR1J2Ym1KMlV6R25MZ1NGdVRROXN1dTR4dzg0QzllNXpTcUUKLS0tIHIrZE15bUdJ\nZXVtNEZqcXkrK0RLaUEraWFEKzZZemV1NnhLZXVDNFlDWlkKh2v6AQZEjfQ0/xet\nZSIPONaBEeiOyb3+ZB5pmoYMRIjspbEV1A9ZPTdOBkMpraIrJgkC9cJ/YOlTUPun\nysIevg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBjeEs5\ndjdUb21QM2dFNnFiSFR4cG8xME5XT1ZQNE1ubUdlUEt4d1Q3MUZJCmwvWUFhT1Jn\nMGlJd2d6L1JvekdpUk9yRnZvSmtEL1Y0ZnZhcXROL0U2NGcKLS0tIHNVN0JCZ2J3\neUVGZWs0dGFNaHRPbVJ6bEdqZ24xNytMbnEra29yS0ZaS1EKDfbusjWSg4lWHkhY\n2FWnoXKU6SbTuRgxWzs1wcjIvUl6Q9LRG+1Jk6sU1d0UhMTxqc5O4GN8iyqDd5+J\nANq6og==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBpQnFT\nYVdqU0xMRkttMkI2bCt5N0xFc3A2bHBjcW9sUTF6SVpHYzd1dkc4CnkwOWlsUU5p\nUjRKdXdFMDlqV2xIWXpEUTRHd2xBNi9Cc0VOZldLTFdzMlUKLS0tIFRHY1QrYlo3\nU1NtZ09hOUIveHFGWmIxUnFPbFBVS0ptNW1OTXU4Tko3c3cKzMMcWLxMWIU/yIig\nuL2YCVw7Oghlvq1DN67gwtR8ivuvkeLBnbFgbI6r7tPzwKd/CBn51vEqIcjSzLDP\nyjli2w==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBlQmY0\ncThsbGtLbmw4c0tCQkJ6MEF1dnF5cTVvSFo1MEVFQlRVTXRhbEE4CjJJTlhQUmtr\nOElJWExmTERzN3RRMzNqSnc2bXZqeTMwK3F1SkxiODFoL3cKLS0tIC9vTXBkd2JI\nM0hSS1B2ZXhhVVBIUEdIcVdMTUM4T1NETk1tblE1OUtXS0kK4UO+knTNj/IyN5kY\nImS7RTPmGejESozrec9EwixNNaFIWuroLYkvQkAunADDIbpVGvndhq2bph0tCBq8\nLkNVkA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyArc3Vv\nSnVITUtHbFlrTzMycXJUNFdTc1JxakMyeUhPZnRTRUFKbmR4MUR3Ck0vYmtBQ1ZZ\nOXJ4cUtrM2pDRm1JWEJaUTZNbldJbmZwWDJHWjJPblJYbWcKLS0tIDRSeGczZUhZ\nUGRzbnVTUCtBZGlyYUNkcmdWd1pZV3JwNFdoNGI5WVNEMjQKTH9CN2iAJFUH1m5n\nGd17JLmFnCaOz3TqAdxActaZ05qaTDteq3T9ShthCjC5JxOJZR6xiC3Pcb3PtMwq\nzmL+yQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBFcER0\nUW5NRXdwUlhsUmhHaSt4MHpHNnJkd0U4SmtvT2VIekdMaWJ5U1hZClRYOHhjdElZ\nanJFR1Z3bGRtMGJsVXhsc1ZqcUlBMVBzRW1WVG4wblU4VlEKLS0tIEI0d2RDZVJo\nY1RrWVJJVmNJcEpzeWZncXRJUW51SkRXRlJuem1sNkJxODgKnTSt4cyoGlDxH6Hb\nbld0B70Of8qIyJyHGShhgQimJWXHpxK4b13Vq+3FueP5N1mDTwbKYa7bY5CjPeZA\nf1b3Iw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBjdVJw\nME5NTGlFcy9KbmZQNzRld2dvNm1OalY2aWFib25NWGhCZzQ5QW5ZCnMwbWp0TjJV\naVl3VVRmS1hIR2FLZldVeDhtSWxHNERadVMyRllHeGN3YXMKLS0tIHZibUZFR2FB\nUjlBWVo5VVoyallEanhJRnNXR29NUCs0bldHMzB4dVdKcEEKOCqQ2rD23252GKjk\nh5VWCf9gUvPLJj8MpBGXLu+jjRnioqv4pdKHpqFjP6nN+8mXh/3t/WF/ZnD9FSJI\nmm/YXQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBSdTJT\nUDNqdFJOdVhnZmdJbEdWTmM4YjR3OVZCb1E4RWR0dlVLdmx0UEhFCjNjL0oyZXdw\nWHlYQ3dTN3M3VE91bU0vRVJyNmlvc01MaS80bllSUmVTcVkKLS0tIG9PVER0VERW\nQ3ZpYkg2bDhMbVJyTlR5MEk4NVdPWXNqdHdGdjZiSDNLdTgKrqsm/SS81uTJonW1\nZIHV7udBDC4NGAuznosjp+cv6hPSHnViqoTro5x3V3VaycfTKIf48BCsYulE5k4c\nio0ZuQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyA1c0JW\nRDNuby9TaWEvb2w4c05GMXNzbkNSZW50aHI0TitwWDdXUXIydFhNCmU5ZzJLanR4\nalR0UGdlbCt0bDB2eTBtZUt4SUpOVU91OWphUnBhWGdCdWsKLS0tIEFseWZxTmpi\nNmM3WTYxSER3YTFHR0E5eFdZdVpid09tc0x3b0gvTE9FaHcKhK52gNVUEoUpPm+Z\n+h5hVs7pVEVP6sl/IyfKjoHzdaDpMl0bBhrDGYWU1DwuY/e7EP1CmrHSYgiGw1bh\nsv70vw==\n-----END AGE ENCRYPTED FILE-----\n" - } - ], - "lastmodified": "2026-03-29T16:59:17Z", - "mac": "ENC[AES256_GCM,data:+nPty+rFjvO+8QWGah32oZWT2wR+sJxKmkAR1/qFNK5+5HoWBZ8IYb+OwfHMPh8HD/67xzYdRNfBQie6KEpiqOps0trfuu4t1pg/2RcfMKyCxD75rRSQ3QM9g2zNidBcM95QPkFc6NeT3ZbRyCXaPt/oJ/rT4IRZh7RZ/GqAwfg=,iv:tn2diGUh4rdrXRKnqgx1jHxMkg5sFoRgOkRW2yAo9mg=,tag:xUmH0f6kNeIaQVEjl9bIWg==,type:str]", - "unencrypted_suffix": "_unencrypted", - "version": "3.11.0" - } -} diff --git a/packages/infra/gen/env/data/dev/stackpanel-go.sops.json b/packages/infra/gen/env/data/dev/stackpanel-go.sops.json deleted file mode 100644 index a765638a..00000000 --- a/packages/infra/gen/env/data/dev/stackpanel-go.sops.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "STACKPANEL_TEST_PAIRING_TOKEN": "ENC[AES256_GCM,data:+jntqZF4/ME=,iv:1iIXLRJ8e/PruBAZT/SoIAqk1boepq5aphdPDWxrjyI=,tag:FnVRSa1bsRYrVo4UCgW5Cw==,type:str]", - "sops": { - "age": [ - { - "recipient": "age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4ZUpFZ1JoaVVUcndkVlpj\nd2V2a1JIZVF5cGpZQ2ZqTHAwOWQwNlJWU1NFCkhXUVJWYmFnSU4zOXc1YmVTNVo5\nN1NIV2RyNEhrY2N4R1A1RlFpTVVjMWcKLS0tIGNTVG5PSDVOSzRPUUVjSUdxZ2tB\nVmkyeEJTN2NzaExBZURCN2FwOGI3d1UKX/6dSoQNnpilYmDZ++wfQM6+cbdmmF12\nk1QroEzumx5TinDSsEZ6hun4q/2Wb/b7e3m/a/VAHli6FPqL4N8g1Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzMmw2dU9Sa2lFenJWQWlM\nMUozRlltQUxBYUhJMUpUeXlKNzR4L3hOV3lNCm5aN2p0K0dYa1ZnRElVRER3U0o1\ncTV3TWl2Uk1VWTZJaTBnVzZadXhlWWcKLS0tIDVxeDZvY3g4L2xNcG1jTTdmWXBw\naTNiMS9LUDBsKzcwT2lFeUViWW9DbVUKnmbHc4PiRjTH7Wp0MsLvatmktqTjsd1L\nTlKZrjN7hWGTE2bw3/Z9RPq3jip2QGrnhgJRx2FWFJZrOtzyUPOKVw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwOEUxbzRzOWZMZG9VdTZY\nb2FvcklWQXdobklKYU5McTZZaE5zNndBelIwCnNTQVVYSkF3a2t5K2J4ckQzTWZS\nblM1SGtjOVVUL2NjSnZsZGZhVzhGdUkKLS0tIFJSMGc1UVYza0p4YWw1eFI5cnZq\nd0hvMXpmUGJMelEvUk5KcHJQSndJVzAKRfXYQLYzVbiEpiTTkJi9mZ+5BKLKaU8t\npxVNptPAeuHRMNRmFuJuMre86S7fJDwr7qmhVM9pFa8n/gHFrUa6Vw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBUZnZB\nelZnS0NqdDczbGFVMHNIWGVaMm5JMWJ4YzhPNW5vVDVpamJieW1zCk14MUNNM0s4\ndFVmQTlqL0d0T2F2bURuSHZUWUZEYi8zSkZNVmsrVzUyTUkKLS0tIFErL1p2UGhY\nUjI5d29uaTFtSGxMSFpUcUdReWUrVmRIQ21NUk85eXBud2MKSZlvq35Sk/KqCEiM\nDjmabJ70oZSb38Cx1QDg1tQpmyRLVoxO2zczQIGe+QJS40umFc3v/6n/yUVwFOYa\nwJBfUA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBwYlVn\nWW1qK2FidmVocHVmeldrWnFxOGpNM3ZGZEhKSmhkQ3hycGVoNG13CnNHaG5OY0ZV\ndDhwakg1d3FZaTdPcHNyN0NKL1lDSnVlclRjTzdkWjI4RlkKLS0tIHpIbC9OeEVt\neURuSzBCUUp3SlROUjhobFJMVDFKY3doMTV5Q3R5WmJObHcKX6rXIAoH6VpnE3NQ\nfrHMRkl0mi6sRMNngEdAq9WYlpQ7wkz4PXRzKHzCA3jEYfgWza8cllOGs1ykxRN0\n25UB4g==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSA1UGQx\nOTA1N0NZMG52aytkMmExOXZmWUJXaDRZOUlVZHJxc0FPbVVMd0VZCnRsaGc5d2Fu\nUXBJOElIRFJabVdDL20rTVVCQkhlS1lWMWFISzVBYU9KdDAKLS0tIHNIeGhENlBC\nNm42aGtCWVEvNDFldG9TekZkRGphQm92UmlFaHpMZGlkUm8KIc9WdVPjICyYS5d9\nQoTEEPCC9f6FMvNTSZ3wbyR4YnQSyGeOXDQqoOtyPXWPZRJLAY0r3BWN1gFCLTMi\nxOP65w==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBRcnNZ\nRElCeitMVy93Z3FBRnVTN0RnVmFNM3pTcWJieC8xSEZJOVczQWxnCnBKY3NqTjFy\nVDVXMmtud2lJSWdSNTFDUEVhYXZyQlQranh1eGZ3SUdGV1EKLS0tIDFaVVZ1YVlz\nYUJjRGUxWXZEWHM1U1RLU3lRcDlESzMxS2IxQUhETDRpQXcKmWF3G6U7GJm7D7Nm\nAiWIaIeEKTwxYy4XYdC5QM5kXM1CKshgHQzC9JRGxYJ2YvBfm1PkK/26osiq1bUp\n7RpmJA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBRYjY1\nYmRNTjU1dnZicXhNYnBFYVdjdmZFQmhuWmczVWVlZWVXRGFGR1NvCnlNWVZORm92\nOEhFbTltcjRPMzZlNzN1TWhRM1UybTBtODJmY0ZHeVhiQjgKLS0tIEt6d09oY3Bj\nazJSbTlNeTA1di84OGFZYlIrTE9SMXBxV0lJbzBDbGRuQU0KGs9eniNY3wv1V5Ay\nPgzv2o12Pj1s/OySi4zkKiiC3Vp+nM1LSut6HZbJ+sFEqKIPwO5pLvBBlC+SnPBA\nJRjW+Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBtb2xL\nVkZuVjZUS1J0NnVqcTNpRHBZaUYvb042R0U5YW0vS0dzeWlybXhFClFnOUhBVVR0\nQ21qSVE3RTVvYVJUNGU1TDBxcmlCTi9iY1V4MkNVd09DU0UKLS0tIFgwUXRVRUdL\nSTFzT2RQTHd6aytqVllCVmtFMit6eVY2WGI4VEtkYy9DbG8KvMXw2vlgmAfm5RDS\nug7jaRKsjdsT47EByRGsxLS9FukZEHHwb+aHFY9264//KpHpxpdKeNw+Snkq8O4A\nO1bmZg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSA2MkxL\nNEQyenlnTlMyUDlRTHpnQWJhLzJVUXMwVGhxeFowd1d1Y0VDU1U4CnE2NEFNMno2\nOW1WdXl1TE1BaWpjdjhuWkN0OEhyVjJudm95TVU2eHUveDAKLS0tIGpPRmJOeEtj\nOGJuSUR2NjM4RVFQS1NJb3R1YlRSMlVobnQwN0xLVHg3MDgKMWHjtzErXNfWHxqW\nbQCSVtIof0QXZABy5/31+xX1Bad0B2d67W1cZHRBE6hxqmxtEbMZ/z7xDkn6DKjL\ngA+DYg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBqcU1k\nUXBEVXc4OER5dXQ5aHEvdEEvKzBoOGNSRXFyR3FMdlhwN0xtdjJRCjlQcGhmRlJF\nUkpZc092WWY5L1NUNHEyTWRuOUJEOGhuMUV3QjdTSFVCQ0UKLS0tIHl3SGFHWmpj\neFV5V3VnNHNZWnEvVlFpQzhYYUxNdG5LcDFic1FKdE83aTQKh2c9i4+vwMRYogkt\nWJpRWStvRDWHiT6J4ki8WAKh03T7pMZnSP/GeeKr4sEHQdFkmJ64mlnKea33jmqk\nNYwdCg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBVbTFH\naSszYldwdU9JMWdISGkxS2RxaFE1eS8xclZNR1pNdUFrdnhiMzNNCmNDUEhiamMz\nR29NeVE4WWp2cXEwZlhFNWJyMU91YVpLZW1sWjl5UkhUR1EKLS0tIEdpTEVGUXJa\nSU1OeVV1a1VwV1VXNHJlNzRKMVVYQSthaHRKcjRscUZOdFUKp2mrqvmtYJJIkBvI\nCBfJH9okY8NLpZUbqz2SeqvqzUOi9tVHn7/VRFWmgCLJt50c0n3GxEP1NK8KIx6F\nOvnjoA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBGdkp0\nZEU4NEtqNlBDTGV6UHVoZkREdldhcWRPT1NOMHZDc05ndG5ZMWo0Ckc1KzNJM1Mz\ncEhhWmFBTThzNTdMWGdDZCt6b1NuTnlwWHFNTmZFdFdvekUKLS0tIDhia2lHYVFq\nRkpadFExbmdlamJLQmlXVGFpdWVtSEY2S0p2Qzdyd3hNUFUKH5xWqXFTTigTY3Hn\nLFCAS9K1hoNYM9KZlEoLQjZJt3+s5UE5q5U23+CIBgDprMwKkEwSXWssCPgeOePS\n2l5sRw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBxOXpt\neWdmeFZnSXJSc3hnUG5zTzk5UzNQVU5icW12Z1prQXZXUDFLaTFNCnNQZFgvdEFQ\nOGRsdEtHZEhvKzNSNWVBRFhaUHV3bVgrcTI3UGdVUzg1LzQKLS0tIGhyZnBTY0pw\nV3ZJK3BhVHQ3N2tOWm5LOVpUM25JYitySmFuOHdqaU9TSUEK11Sb11vVxxAyMvU1\nYZVK8jLPXAJkYssPkFY5bFB4hWdH/wtZMlkPc+V8x9NeAhhQK62fGdMASQk4qj1T\nRLnEZw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSB5ZXg2\ndFNXMmhBNE9Ed3dxZVNXblc5b05uM0QyN0dWUVlyUVp6NnJoT2x3CmNydk03bDMw\nSjZRcXJaK3BjUTdBSkVhbW5FUHJFR2E3SXNrZjFUWUdEOWcKLS0tIDZkYWxLVWZ4\nTDVaVkNjREZxNHVtR2Z4MW55bTZvZWN6d2VCeUhFb0x6UXMKi2PnKMs+YN20JcjL\nZFLVQdh0vx2Skn7N8rUfp/9/8zspCSvmofgbIbl1qe+GwMabjo4REUu4Budpcy9m\nuj0c+Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyAxSCtS\nRjhGY2pCaUhXYnA1OGZ6QzBvVjFIclFNWE1BTVRjb1ZmajdXYXh3ClNQcVJob25T\nZkxZZ0RFY2pzdm4zSWE4R2d3SmJYRGYyTDg3a3Z5aTdtNHcKLS0tIE1yTU9zdEVT\nd3EzemxmZ01EUUpGMGVYRDBqcE9jb2pSVFdXdzNqc0xHVGcKCdFNUd1z+4DS3quq\nLAnkqc/Y8YFtBAQFm5aoKA+pYjzHy/9Ab8zAMLERqAMkjT7DGLq6xRBUKDjZnDNf\nZ6112w==\n-----END AGE ENCRYPTED FILE-----\n" - } - ], - "lastmodified": "2026-03-29T16:59:17Z", - "mac": "ENC[AES256_GCM,data:2SA4he/xxhi1Obe2Avx3nqhLUzQ1Jitbfb1LbhFwWYNrfWDGrSrTA7a23SKaDE3bb7ViEBOEH9m7Mikj3sozT9oBBFBhMZWpXclKPaPSwlZTaaUMB+GD2E9ywfevhbWCDXhpL1Sb1YeCiyItZuP/HNlPhu8UljekF7VelGae7Ns=,iv:e21k2UpjrW15G55X7cDV53LJlB1yOK68Q1AqypzMK8w=,tag:OiMZQ03vJaDCR4wlnuOhuw==,type:str]", - "unencrypted_suffix": "_unencrypted", - "version": "3.11.0" - } -} diff --git a/packages/infra/gen/env/data/dev/web.sops.json b/packages/infra/gen/env/data/dev/web.sops.json deleted file mode 100644 index e28bec67..00000000 --- a/packages/infra/gen/env/data/dev/web.sops.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "BETTER_AUTH_SECRET": "", - "BETTER_AUTH_URL": "", - "CORS_ORIGIN": "", - "POLAR_ACCESS_TOKEN": "", - "POLAR_SUCCESS_URL": "", - "POSTGRES_URL": "ENC[AES256_GCM,data:S7l+ZbSj/eDMK989xM9HHGM=,iv:u3A9hDQ+b1JpJAPCxKmP12QOwTAm+61clFxKT273H9Q=,tag:scUVLtw80878Dx8542KstA==,type:str]", - "sops": { - "age": [ - { - "recipient": "age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArdlJOamxYMWlieUlka1VU\nUGdnKzg1ZnVEMS80Z2F4STcyZG1XMlUzYWhrCjdhMGIvZkpXMWlUQnp1UmZIOHhB\nQng1d09lZTVwbEZBelg0TTVUSDhwcUEKLS0tIFVJdGxodDVXQnRac2prSzNaeFRv\nVHJpUExMc1hNbGpHRG1HRHR1eElMOEkKcgDoRSe4UTQoQROL1ECr9j1wMqZ/MaRE\nq5uo+amY3/Oc3grKt0NvkD71O4KkgO2bX19ZGkJOZrqljmH0sTTA0A==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjMEdOY1QzcXJkWXl5d2Vl\nS2kwN3IyRW1vb0NUaEs3R2w3N1VBR2RUeTM0CmdLMi9uS2ZLRlh6ZG9pMDc3NHB0\na3pnU3pFaEJnenhsTlczaU05RS9SaFUKLS0tIGdsMzM4LytuTjE3NTUrVXBlT1lD\nbXlzYlpIblYveXNpYVdra0JTWURLb0UKi7eDVZOwGm6B1nylhn+3577ee+qTtoyd\n3D9qaqLsu1Z6bKDOlxS+FFH7xtoNq3+VVHD3AKdLcMTxVK6iNhoXaw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHQlEraWtnQitIZ2pjTlpt\nTXVvR0dwWC80Z1BSejhvOEN2RnlzQWtMSWxjCmVlcjVzYk4ydlFnYmFxZGg2cEd5\ncDJLRWJTSjE4VDZNaHNnQyt2M1ZnM1UKLS0tIDNnaXFXV21LQXRMRW9SZURPRStB\nKzNRZTJseDBndXhGWUduZ0hhVDd4cFEKmVXGR4oeRie+SXzo8wQPLp27KAQwmfY/\n03r81QzcvnJnTFNbtTso8edg7LmZrmAhokMIaMquonzJykmX3CUNwg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBWVVhW\nZHR5WGV2QlU2M2ZubEE1em5QU2xRS0U2b2JMVUxLbWNuSzVwWm1JCmNJU3o4L01n\nKzdiWXdVUHFCallNVnBwbEtzdHRNNk0wazZjOFc4Vk9wRlUKLS0tIHU1V0ZvMXk4\nVTJRZUxyTFhNRVBGN0RTM1gwMDd2aThKSUZYZnpaNVdiaVEK3IU9oMTrohyjaUsd\nHvYCIcBQI8fg9wqTKygsTMOkao/af3pnmQh+gnFNLsZ4Q/DmeThGlbKKd7XPOpzg\ncoF/Ng==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBYRERk\nN1lFUHQwOEpybEYvbmRLNFcwOVplbHdxcWFEMkFEUUt5QW5LcmxNCk5uQXJ1VGxD\nV3Zvc0d1eU5adTk0S3c1UVZHVC9ldThhWVN3aVpCdkgzOGsKLS0tIEh1VlNQVHAz\nbzJkTk1DakZMOHBMemtRSmhic0pVcEpLUlc1Z0wrMTZWUEkKNlE2qwvyIRsN9MeQ\nckZTZ6BbRB9xrj5kJGh5W0GzjLt2ivV3dpo8ShT96AEpDOt7fVFjxXEJr1LgVOJh\n3m0ybA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBKclVh\ndVJCMERJZzhQZUF4bllzd2gvR3hFQ3dJRlRESVMzNE4vZEl4L0QwClNVM1NjOC9s\nbWNmbGtLeEZqNEkwS0JadE9lRitUbXJ2Nks5Y1laeTZ3N2cKLS0tIEdOTjI5Rlpj\nVDhWdGFtdTZUZVM2OWpsWENFNmNLS0hvUU9yeWE3QU5sd1UK9QGvCbScHTAsXM82\nktzHv23HMeySzVTszj6QaGBSZUr5Ja383ZJuLoXrgcAgF2T8M1oAWXAS1lzynk+T\nASRqNg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyAyRzZ1\nMFBLanlTWWFIanJxZUhoYUh3VHpGNk5pNFdtVGQ3cGZQZ25Db1ZrCnYyQ3MxMkdi\nWGRtUitpZXFEUlI1c0tCVDJzVmFueVpqUnV0WVdwbTIya00KLS0tIEswSHdjcEgw\nSXpXUVczVmtOSjIrV2dHamFpRkFMcDMvZSt4Yml6YWdDUjAKJEh4CHJV09Gug21T\nJ5Qr7c8ldIF/cLh+m7lXfi89Vdi9dyHateKW+QaQGLVLoFOUGcVP+P3xbaQiw+AM\njHMDOg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBjVDNN\nRjdxRUNnTnpsWE1aZDBaakV0TlAxZlphOWYwTjZ0UTlIaEQwbjJZCkRTekhyZU1j\nK3EzTC9TazhvcDRML1A4TkRMaHBsN3ZJaEpuaEZBRTN5NDQKLS0tIFc4YlRnZFRP\nbmVac1NJQk9FOEVkVjZmKys1SkxQM1M5SnJtTGdDN3pScXcK1FF1D9vq7L9nGUrJ\nIfklrvaiD32f4Ymg/L0sZaHPPHNsuyozBL681bJmid/y+B+Nd68Cmsn8+lb6WzvM\nM+SS6w==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyA3OHZx\nVmc3bHRNS1VYZHJHWWIwbDNwYjlIWjNyY0FWN3lTc2I2ZTcwc1dFCm5UOTB3VXQw\ndU1tT3RTUEtOS2k4ZnorOEtHZ3AvNk5zUnJvZStQdFlHUGsKLS0tIElLVnNrR3VT\nTEVZVE90T3BaMVhyY09ZclJjMXgvbXhzd0p2V0pTaDFiMGMKA0tkWyI3rRMxRUr3\ng1zJS/Kjk5n32U2l0vqvsod5eKk8Q2/o0zTQXEnrdxNwzh9KGae1HgbFHFRBuyc9\nIBptxQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBua05k\nMDBuUmp6T25qNXllZzVyMWFWVEEzWkZna0plZVlBcXNFdjcvVmdRCmp5em81UWhn\nc21mOEI3TzRaR216N1lSU1lsbTB6cDhxWGQwT3lqQWFTdkUKLS0tIGRnTE1qVFlD\nN0JoeXFDNkJOUGhXcDloSkRGNVo3NjRpNlp3TkplU2RRUmMKbOuGibPirqSSEPD9\nNuw0oIp/yBZ9kx5z6CgPp6ollI5devOA6xlFi4ZLp0BFOcZ5f5kIzLeJkGcoe7Jq\nPqyDQQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBOZ1Rt\naGo1eUVGMElkVkg1S0lRY1MvUEJoK3RzajJhOVFQQ0x1T2U4N21NCjFwZXlsYmtV\ndUdVeXQ2MHRKVXJnUG1NOFZXVHRnOS9VVzh2cHQ1NGdIQmsKLS0tIHhZSGtYUjBz\ndTZ3Q1BGaEFyUmR3c0Z0RFZBWHJaV1VjQm1sb04xcEtLSVkK/95dOE4I+LNkF6rI\nkSvvU3fEJtb1qFqmFhJIoiYwFDTF2Yl7qBGInMN9YMLYL6HTD5KS/xU/cgPURlAh\nyts9QA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBycFFy\nb1FJTUM4TUpKbUJsbjV0SDFEWjNJNGhMa2lmZFVRNEVvT0RkQm5rCnlTNWU3c0ht\nUGdxYXkwdDFsNzA0ZDZIcFFHWnNCcXJsT0JJWFB3dGVNM0EKLS0tIGFCck85YnNi\nb0NUYlJiSFgwQzhVYWRBZFlpd2dQUlhsWXBlUElnOFJHY2MK25rj2x1ZrOWlDRDg\nOEbAx696omkQE6L5lKB9qBcv8xsepeLuHRaDOxBExZS6Eq6KmWvT2GkBQJR7zMZP\nhuGx2g==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBHbW9q\nV1J3d3R0UWlGNmw1b0FRdHdBWG1TS1FrOFA4VkZLZkVZOHBvUWl3ClQ3ZlRxVnZS\nU1hzNFVpTng4ZDI2N1FLdXFvMVZpaGVCUmJOVWZmdW9Ud3MKLS0tIDREWUhKZlNO\ncG9ITGNDTDVESXBnck0yeFRqdDRxa3NaRkNvMnZYM3UzU2sKO4cbSeB5dEjTuRfJ\n8KR+EGuKHo7BvU2VqiFnVgqy0QGDZC0HPOGbEVIDB6vkZoSEnat/lltZuLRhawRx\n5sqa6g==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBDV3Vw\neEZlbnpSQ0tVWVVVV084UWhYSjhHK2JLVG9obG5wVHRacDJ3WkNjCmlrVDFFamtB\ncUxoSWdEQUtQbURYWUErVmRXKzhxWjZod0pGbWZ5Rmg1NEkKLS0tIGFDaEVXUmww\nUkZ0QUtGbTZnZFdkelJFYUJJWHQzcDNHWFppbTd1WWtSR0EKJ2D4nUtP1rIPE+Jd\nq9njIK1BsGWhGuh98FbYFa3c3kg1fdBRPbDYcIIus/vY3cMBFmnRipu5D15pPIyn\nFezf+Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBYb3Y5\nNlMyd2NJd21oZ3BrRjI4MmNDTjdTSEhsWjhzUmRUdGZSd2w2Z0ZRClU0bkhSNmhv\nOTVzSGMzY09uVUp6dks1ZGNod0kySU1ERlNkeWtCei93Mk0KLS0tIHp4RjdMdUN1\nekk0dEh4UWJpelNnSTJ3cUFFYVpBK3Z4U1RDQjkvakttVDAKkDWkj50Y+0I+jw5I\n0NU7GmqMvzOQjnc6RO0nsoWGp9F+UIycrQ1oF9yahJP2WpCqtbLWhh9x6LC3ux1o\nPe0qRg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyA5YmdV\nRVFjMFBuMUVoWFlxMzVvMHpDMzVOaTlibkloNStLWnhUNHNocUdFCnFETTlvc1o2\nSkhRQU1rZDVyRWVRa285VlZ4SFpsWkxaQ3pQeGtzTmlQOG8KLS0tIEcwbndhMUN5\nNHZoOVAveDJXSVRoWDd3c3RxbEtKa1JjUkFTelk3NW9IODAKHC+mNV3dopkoTnuo\n9N3O4ZyRDKOJtvcmsnvFOCpIPBy6nZ1eP/eG0xJfC2yrxdy6ZtPn2osMqr+N/eVN\nhR8qQg==\n-----END AGE ENCRYPTED FILE-----\n" - } - ], - "lastmodified": "2026-04-11T12:22:31Z", - "mac": "ENC[AES256_GCM,data:z20c5WwjZmnG0pTIJ2KCDtlAx9QbFVWK4NUYu4dc+MdeuQnNNmXzKVctvre0GrvhUz7hQpqDn3SBhygGIKvni+7nZvNLmRLgDtFBUlm2M7RDejC0B1no0q+4Tqa2M1op76lY3wSm+3McCTkxgb0V92PRHO7lwmKudgcnTvKEwgg=,iv:zrkadH85J2pFOKX8LLuP6fSdx/XF4QhxG66QPHOxaqg=,tag:R4j12on9tadjHPzViHJdLQ==,type:str]", - "unencrypted_suffix": "_unencrypted", - "version": "3.11.0" - } -} diff --git a/packages/infra/gen/env/data/prod/web.sops.json b/packages/infra/gen/env/data/prod/web.sops.json deleted file mode 100644 index 831ff08f..00000000 --- a/packages/infra/gen/env/data/prod/web.sops.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "BETTER_AUTH_SECRET": "", - "BETTER_AUTH_URL": "", - "CORS_ORIGIN": "", - "POLAR_ACCESS_TOKEN": "", - "POLAR_SUCCESS_URL": "", - "POSTGRES_URL": "ENC[AES256_GCM,data:mUcqnmQs3+gTFczQU1ZkYe4=,iv:0OKDNAN+IQps5OvQTMi7Pb6LxkzH7YhrNX23ETzT1Vo=,tag:8wDJVhIw0K/y8nVidu7rLg==,type:str]", - "sops": { - "age": [ - { - "recipient": "age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4Q3BuUW5qeHNSWFl3d3RO\nbmo0MmZrTGhVZk9BZW93cVpDNTlQRytwM3pBCktZU2puUHFiK0Fzd0JmV2syMEk1\nZnVERHBuaGJnUDJPbmxWdVVFbGlpeTgKLS0tIEdQQ0NOY3BiMmtGSnJZcExiaC9p\nb1hiRnZUa0JJZW10V0tXdlhVQ1UvdUEKtMx8fdRNkHAhuIWoRppuugO4aYGtGLuS\nGLlBJq8EGSyYwgtnhfzjkblqR86N6CoF9XwGjdA3a+kAYdgRnevTLw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXUFZJMWxSclNNaXdKZ2tk\nQzNza001R2RuZ044d2E2UEZnMzJxcmIrSG00CmEwL3BCKzJDbHhDQm4yQ2IyckZX\nbEJCTkRIemJwMWFpVUdSSlJxb1N4NkUKLS0tIDB4TXkwWlNVZmo1bm5kZVU4bDV6\nV1NQSjVYaVZBcmhMNng1Q1pJSnFyMDAK7+5+msyt2UWcp83NBCZ397PDxQzcerLG\nkE1gyjDTl2ue7wiyL3waBonvWo2UdtYbiJX4L7wYL8aXCL0gv3AJ/Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnemZPUHVXOWZKT0xISkxQ\na3lLcE1BKzEvZFQwRVVMUE5Dd1lONjMvVEFrCmFnUmp5WVRUZlRsRDJQT21OWjZM\nNzJUbnMxeitQZU1CazFta082aDVRNHcKLS0tIHFpQ2Q2Y01TMUtuSXNUMWk5K1Q5\nWndTcWE3dEgydDFBMFZXQkFIRmF3Z2cKXsfDifgz8eccFcv7KLaeK8zyzl9DnJxL\nCPKsejPiNaZqQAuucMuO84BRlMH2SYbGiAWvTA7fK5XsneqHyhUyDQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBDQXBD\nOWliazliU3duYnZvK1p5Vk1mQlh1ZUw1b0Jzc21XcUZ5UUFPUkY4ClR5Z2JkUlZ4\nZ01tMElyaG9qTXdlbGQ1UG0vcVhPSjBLa2lQeStBc1pVdjAKLS0tIGdCYi8xbi9a\nSGtJZEpkcVpJOVNzKy9LMlZkQmQrOHVURWpjTFFUN250UnMK/svK7Tzy7sQhzz9K\nwLwqbR7094Yiwflr9n+9iqhc6mPbUH/q4x/Efxl/q0FuCdueKWyaiS2lZ3wZHojk\nqcThfQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyB0N3pB\nY1U2eDYrVmNuYzdoQ3lINEdna2pBdVAxL2dIRlFiYk9LSThDWXdzCkZ1RnRFZkJZ\nQ3BpYVUwNXBOZC9hSHh0NDNScVZGSzZQZlRjUUhWUlRuT00KLS0tIFl1dTFVNmJh\nTFMva2gxOEM5Y3NGS2J3VFVQNk5pNmwwdTE3ZWpJRXBLZ1UKhRhP9WOjhaw/m52W\n0qUJD4lJTCc1Vo6M4DlI0v1wOyyeiz3WF+khZXvJFamvEZGyskvO2sVqmodkL1QN\nZby01w==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSAxWkhX\nVXJWSE03UUh0Y01OeEl6NFdGM25RTnRMOTRwWUVGNzloMWlmcDNNClkxK2dlaWFH\nc01tMkhiQ0xQSGUxN0ZOdGhyMU9nZ1dzOEZBcGN0Q0xQaWMKLS0tIGE3a2R4b2dq\nK1d4TC81ODBsU2UybVlhenN6OXczTWZnWG1sdU5tdi9xUG8K6qL32ESjt/fDF8pG\n40oHUd70t2W+usTqcssRpvcDNWyMKAm4fWL98L2IpRGYsVX5DFPJlIC6B4kzS33O\nsSyqIA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBIVXBS\naFFRZWFHYzIrYnhVMlc2UHplS2Q2SUsxeHNOQUo3T3EzSnNiWjNzCm01RnpsaEdv\nM0pBdmVhN3Z5cmw3NytGcnJZVUlYSytIa3NETnpXTWhVc3MKLS0tIHBpbGxzQTV4\nUEVGYmxpQVBCUVllYUI5UHBzYUR3MjNqQ21jQU5WWlhsL0EKbnEGSfPWUExsBZHz\n1En1iOWwBxdw1NB12EVRmPaahFifSzEVOomLTYoEBEINQKL9W0T9Gc20xPimtw5+\nHAJi4g==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBqRTdx\ndHUwNWtac25iRkZkUjJQeFREamFIdm43ZTlSdmI0bVlOamRGK25BCnNTcDBkQ3dv\nSnJXcmpMUlplTldsVFBPMVg4RGtvSFdyUnlsM3V2a0lWU1EKLS0tIDB6REdWWFZN\nbDZSRkYyT01rb0hPeUZXdytMMWVDUDF4RWRIbkExaHdGVmMK8yWs3odis/e5OEEQ\n48UbJ3C8MZHoBYKphYwv7hpkbTgfUOb4yqDW6kqcxDGWC+YHmR0N0ZVHzT9t+f3r\nnetAdA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBkU2dJ\nbUNFdnp5UVFBcGUzZkZHcmRQcUkzTnVHTmNSRzBHTTBXQzNKOEhVCkJPaDFFUGs4\nT0pjY25BRmJFMHFrU3FpdlBvM01XNEVlNGNTbldLTXJ3N1kKLS0tIG1VK2VtS01M\nemNLMklsYmhRSEF5NHFKcTBjS00xMXQyaVFXdkxGb05XL3cKtpGcefsh4QpEnLCn\nGCMrvhbIA8hUJ+k706IMp5kud0+z3WWWpV9kQMEhUZQsqq2Cu5gjpdl+hG5jO54M\n12kHiQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBCMkNZ\nQkRpMEprLzdNaW9JQ2NWMHN4QWdrUmJXVEVUUmsrdzJnNDhnczFrCmw3cDJTWGRG\ndjVBWnBrUDhrYzJtTEtaelhFbTZFeFlLdXltZ0FsSldwMUUKLS0tIHlaRlAzSTVZ\nYU9xYmtIL1lBUDEwM25uWkw4WUNjVU4xU0g4b1FyeWRpclEKtpVT+AUNWbq/KYjd\nVvNmwdHyu0S3JUK6DEBuOQiT42mRpc5EQ5DSxfiZKMIGHyNuuW8+UJl8LziPARfv\n9lTS+Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSA1eGp1\nS3BOYzRXNlZuYjYyKzZaTnFVZ0tiVGJzZGV1dDl3czdBT0N6MTMwCnJhNUZhdlUx\neUprakxjMlJhTy8yVzdIamNRNDBseVJWNStlK3FZZVZ1RDAKLS0tIE9lWVNiMlBx\ncUpvMGZrdStUOENWQm1JaGVOYzlXbm1Wam5sN1luYVBEbEkK82Qnpf2mUpsjK8Ja\n7akCpV7IwAA1ssXNApmBMHGEkYn+L74FXOoLWlH4EyjrzKpmMUxcM6DgyY/MO7V7\nq4Iubw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyB5OE9t\nUUMyVTJrMlZCb2VaeGllbGVVdU9jMk44eG9qaS8yWGRqOTMrblhnCno3MEdpT2VR\nQWRoR1ZwaTBTbnJ1MkxxR3VlK1Q1bUZhT1RkVndhbjhieEEKLS0tIGxpRUV0a0l6\nL3hST3J5R2N6aVE0RHJrMVEzb1ZYbnBTK2MxUzBiZ29iZnMKkBfWd/0bNAxyNuwM\nMEa2om5SzAmajqWRskEzEOIdYwV/xCOsDMD4g73yv/rsn4fDtsTmL1ClAl0cEkxB\nMRrh3Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSAwUTAy\nbENpbEdRdXVJcDYvQm9sNlNSMGZTcS9UK3JWWGM5aG1mZjNla1FNCmRydFNZaVRx\ncVF5a3RvaDgwUXFtUkZiaXErVS8yTzc2STltakNxS0xUK0kKLS0tIFJGUDA2bENP\nY2RERW9CeDBZUzBqMWxvMEwranlkOWViazRGMHlhVHdNN00KtPS5vX6VEl9oumOf\nDAB4SrQDJiidBEeJ9Pi9iYIo4bOEmrHEoQbtlJ/lUbA01TV7mG/PB10EKxJJqXC+\n4MoYng==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBLMG5s\nY1BJS0ZjUXNPamRsTWlmV1RtVERvK2VET0x2dkdjTzh1TXNuZlVJCjVlc3lNVXVL\nVERJNjdqTGJFSnRmSG5PMC9JeW5EZ00rK1A0em8yYTNHZlUKLS0tIG94WkJ4NmhG\ndGtaOWhHeVowcmVnSFYwZERaVXh5LzFuMmNjT2RnTjdxNmMKF+dt+hcxo4b94pQ6\nMW/hg2GFLhPCSiqWy9bMTKGlsDnz86qKAqd7OndQp1h1we+Y9Y0Fak8iNP3Efe9W\nLei7uA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSB3Zi9R\nN0pTb2tJUGdIcjJXT2VlYnRld0VJNi82alFYeHlCTTZ3ZCtjV1g4CkcvNmlnZW1q\ndFlxU0hEaGlzQ2pEWFFBby9HV3BwbHZNYVYzZkxzQit1d2MKLS0tIEVDa2ozMXYr\nMStoV01ibzlYeHFzQWtkSXo1elhya1l3VjhGbEhlTGxORXcKVBcXVYXtSL9QA847\n2fbAdz8UsF4BZcc7i/OKN7/hwKBARFEy21tMFGmo7Je49DVNkyhQ58/qDIX0AvuV\nTBEblA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBOaHZv\nVzlzeEpHQms1b2NPQWVnUlJxUzduTnlSM25mZlNkTzlUSGhQYzJBCm9vV2N1Yi96\nblA3RWdJUll1TUZmMU8rOUNNbWtqbm1tUWRmTEhQQTErTzAKLS0tIFJQNy9PTWpW\nemZDVEtjUjc4SEJOdjFuTVQ5VGFMSEkxQ1ZBVUN4Wk1sWTgKeAN8S5BBYJRmYUPR\nZ0HmPzDFKsr6IhJB/wYXXsv8ffH84yKFsfBgnEFKZfMq0orDefJbKXFwdhoXRU3N\nV3cORg==\n-----END AGE ENCRYPTED FILE-----\n" - } - ], - "lastmodified": "2026-04-11T12:22:31Z", - "mac": "ENC[AES256_GCM,data:LXk8/VDQWLTrf991D0JVgfNERMuw1fyanRQatPflnT1CBpH/CotSkeLc+KI8vtwTc/g1AMtRNiQWSDw4enqDPqFhLGYTksKoGbToCRx90qBJ/h20HCYugKVIaiXCJ3WwoYiihPIHLFX6EfrFU0yDgaQ/Tto7JIQN8GORJXNnnd4=,iv:MXf1j6sf9oECDT3kpH78AcMfNrWEhG7CFKvopjqmIOM=,tag:Me4l60gH/HzQHkHIH05a8Q==,type:str]", - "unencrypted_suffix": "_unencrypted", - "version": "3.11.0" - } -} diff --git a/packages/infra/gen/env/data/shared/docs.sops.json b/packages/infra/gen/env/data/shared/docs.sops.json deleted file mode 100644 index fbd78c15..00000000 --- a/packages/infra/gen/env/data/shared/docs.sops.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "PORT": "ENC[AES256_GCM,data:ZOJcYg==,iv:oQvxMBv8Ug/a63pqQ9JQ3u1f6nzcP+y9Q4dkENrVIcM=,tag:Srx45+tGacDPtr2ekmj8Tw==,type:str]", - "sops": { - "age": [ - { - "recipient": "age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvMGlkYmxjeWxNbldYQ1VH\ncC9sNGowekJVbzhoRTFsUmV3N3BGYzJZYVdvCjZCUGd1bUhVNEJ0ZnpQZGQ1ZHpl\nODVWbHM1TWRXLzJUeHh3Zm1OSDhSUlUKLS0tIDRoTXlqdnA3VC9QMFhCZk9vWkpK\nZkJEbDMxTFB2dXdSS3BzY1B0RGgrNk0KAJIHHQZxSoucg/dvT7LvVXB+ryG3tNsv\n8pBXghkZiVXPKcxdeg7C5FiI/I6pJHEDyeVBxL7OSm7nEbNoqGdcPA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6MmxxWGtPbm9TODlDSE91\nbXJodHlVeDFHZ0oyT21XT0Fybkh6R2R2MkdzCko2YzVmVVE5TmI4Q2hnQ1hLR3Zq\nNmRkZ1BlTlNBVk5DbCtWbkphdnh4RjgKLS0tIDgrenMvc3hUQ0tyZXgrYnpiS3NX\nbG5hRDFQTWJrTFhrTFZjYjFEdnBhcmsKEeKGNNeP1KrbxJs91yrRb8fON/WfSuZv\nJUyK/EomGwcv9lpp5fZ8rgS8lh04XLP0oeppjL8iKr3lCSvDkag6PQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnMHUycUFwMGVzMEtsUGwx\nMGhnbFg0N1EycWJ5VjFNdmRTWFJZVEdIdkNBCmR3WExzdVZaYSs0OCtpSzRtR0pZ\nNzN3aCtxRVVkUHJaQk1VNnlER290OEEKLS0tIGtVdGM1WEdKdlRsN2FmRmFqUkxK\nMStrbkZlMHk1WWFqV3d4YXJvWk4rcTQKFDKkQmvkhspJIAKmgGd+yKVpjaDW9w9B\nWED5XifSu5wjhWwSKvpTSwyUNCgpmO+mgjWMmNNlDrxJqvjSq8WjuA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBUaWdI\nSU1TeEg5VnNZRVN6T2NTczdsR3dFVU45ZlhYZndHQUFxZlAwelQ4CnBycnVQS2lU\nODZteUJweWFUb2l1ZWMxbkF3U1kvUm8ycEJzM0YwMVMrbFkKLS0tIHlGMU5zUjBv\neFY0eWU1SFBQeUUyYUZPNkxSdjl2Ni9jSTdEQ09iZkxqVG8K4T/jUHao0yXL+NsX\nOEmSVOnTzKWHCEbO2KQXePp/58t6o7keyuxQjEDbjGRTBOkd0JVfDtFX59Gv4Gby\nPMKTPw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyAzTHBS\nVkFiVks0bWNEd3VYRXdiT2g5dlNRZG5kU3NpK2JqM0hkdU93SUhvCkJka05YdHdr\nb0pPZEdtNURMcUdyYVg2T3VqdStVMXlnd1BBdWNVa2lRLzgKLS0tIHBUT2lvTjJr\nQXJva0Vpa3ltOGMzbFAyWkdsRmFibnF1L2ZzYXV6cHJMM0EKE1pSofVCF2nb5qPi\npXlc7DELS+Ak+Bfa0/pbgZTYxn2eT+JMEgo3NvZ2nMcUnGvt4sFje9BawF+9UtLR\nsNoQLQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBHcnNt\ndkg5Q2QwM2hNbGVzT0VaWkI4ZW1IaWpkV3VPVmxGZU54b0Y1eHk0CkZic1d0ek90\nRFV5Rk1QNkVnOStBZDdCaUJBVTE4cUxGMzAzUlRjam15ZWsKLS0tIFc4QUhFYmts\nOEVIYlBqUGhubDJ2c3NvOWRHN3hmRFNSaEFNeUlCd3BKODgKWMW58XzoAgoIBHCS\n55uKRJKtVEZUpjR/kG5VmQiKxrwpEbto7IU+EZCsaJjDFcIFVAeaTApW6dGo92Pp\nW241oQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBiSHMv\nTy9WeERSVVNSVzB5NURSanF1UTNIaTlGT04zRml6OTYxc2lJTEU0CmZ0UWxzYVh6\nUjFPNG9NeGxSN3c5V3EwN2ZqaHdrejNmZXAzU3hmeGVCZlEKLS0tIFNNb3NoUksy\nUDF5V3orMmRMWldXS3JWYlhCd09QYjhFUVM1YUVyYUZOMEkKp+LDQoNhVU2JlVAH\n4z48s7fmuOll2Ds5k0piHvyAA9q4+IcMmv5eJAV3TZhp9iKfKsuPWJfv4xQ+vuZT\ndROwzg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyA5QVVq\neWJWbzNSYm95VkF4eno0ZHoyanJRcURBNWRUMHZPU3UrOUFXbXhjCmMvdUNJc1d4\nWFdwQlllcTVnRlMyNEpKbDZWNVdSbGZJUWxwM2UzR1VQTTQKLS0tIFI1Q3lzRGNn\nWFVsOHpzWWVwZDN6ZjNCUVFnRWpaQVR5NzhrNkwzd3h1RHcKjWi+o8t3BidyL0rj\nPSTgohXltSQX/DzN7ddvbMUFRmhjjyf3PoQA/jHMGT779GhHgzN4h5G8lRbpARCw\nyXpcXQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBmTHpM\naStad1BhMW1EclF1ZDhId290TUZhVHRFTm9HbEh0ZlBVZ2dQMWdJCkVjT1JSVUJF\nR2E5Q1dwYU1MN01KSFJENmtOK3lzUks1eVBxeFl2Z0ZkelUKLS0tIERSME1ScE1P\nbFJaQmlyTW1BWUJFTDZTN2FPRy9scllmdlRQZWdKQUxvTWcK3BjBEe6Sr2TfGtc2\nic9LBLc3ukchx0mx7bqT13S/jdkTMdwExrKM6kIMjIBPZXpv1i7UWcplDRO9FXFM\nMqNBqw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBYTmRR\naXZTL0g3RWhaYWdka1dWa3dFaWFkVC92ck9YNnIramlZSDc4NFZJCk1TTUM1R2lQ\neHRSTlc5MmN1UzA4YVBCb1pTWXdzeVRVV1ZBWHZ0akRIdU0KLS0tIEhUOW44MVdZ\ndEh6emVUNmd2aXpFZXhQRnkyN2NSbXNhYysrbW5aZVkyb3cKQW4BxCRFceLgHRVr\nErRlZJ2UBnEJVCePxg8W/HMOs50vwEt4rcykPPM/UoLVCPGdbuujPe2apeiywX8h\nJ0YWKA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBDWUFW\nV1Y5dlFoclJUTnlvSTg4WU5iREx1cGk0WEJGajJxTjRCbGFKSkI4CjJZSUk4eUhQ\nRzcxbVgrZDNLWTB1SkFjNmJNNUdQcnhCSjlsUXExQkZKdDAKLS0tIEJVRElsNWsz\nOWpXcWdlSTdRbWZ1WkZyeEVhTERFTjdiU0t3TVZ2K25MQ1UKdSrUi1KWb9xCjiCh\nfqFXyPPCVsPp3l78JrXagRPUtU97HgeC5RCxsccHuSX8NaPx5AxjZC2TRfBCSUAp\nfl+u8Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBDakdn\nU1YxT05COWpLcEtEak5ja3ZWOHZ6NXBTcGZxT3NlUFloMkk2eldjCklZLzVYVktv\nSmw5SUNkQk9nOWlwMXFBMGp4Uk4rRHBhempocUcvWUZ4SDQKLS0tIE8yS0s2MVg0\nbWY4WC9DaVVZUUFvM05aQytsMkdSOGxtV1F3MEdjcVk4NU0Kssx9puW+lZbJUEFA\nDUogihE9PJXEVkOBs9DjnTvwn7YfffloFjIq+TkVhIomg+mk0coKTkMBagBDEVL9\nt01JkQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBGWjRF\nMXo5S0UxNzA4V3FheEdjKzB5WCtCL1cwMVBqNmlydkJ2dWprSkQwCmFZRmF4R3Rh\na0RoeEZBRms5dGJpTC9vVTBBVnB1NjB2eGtZc1dRRXByTTAKLS0tIGd2eDhHWE1z\nZFIvcXhtcEt5Q0lFUDU5R09hT3dZYnlqUzRmc1VHb0ZqaWsKwFqBVxaAynAUHi+m\n9a8Oj2nwCA/up8xdUUYCCmRYB4/KXy3EzpNVJr0vKCOqcAaHq2CkvjyM8RoTxB9g\nqNHvUw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBnNVp2\nNURweXpLVDlRQjM5TytFVUVxOVZIOXhpTVVmWHlMNzlQL01sTldjCkZUT2p4SWNv\nQVVNTS9iekM0R2ZnNTZLN21RWHM2M3liSmlUbFJMdU1HejQKLS0tIFFhQUNiZ1c2\ndHpjUktLcXNJajFMem5OMEEweWtra3lPZkV6Sk1zZVdBNzQKHP1DsKD01fUWrgWs\nja6SXCHfeDgCvdZ6QQ66s+znwJ2gATKaMrwwtvhbfp5us7yUQjN/Y5+EPw3SkBI4\nB8gbAw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSAzYzNI\nM0RSWFIxV2kwdmFWNWlHbW5MdEZZc2VnY2UwVEo0cDBqbUc4K1UwCjFLRXoxNllu\nZW1WWFUxYmdpT2tEZUx4L29EU2szZWhBTjJVbVFwNXBqbmMKLS0tIDFhT2V5TWlG\nclRXYllHYkp1TFdQRWlIaXp0eFlMdXVCVGkxTXA2NUQ2U0kKxyxZdkiJHp5BL//b\nB0krlDAfIrnBvPswKdm6XLRotxdmeACs4EIk4k5fW3bcrLARDwUIMXo1616A7NVx\njva7yQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBsRlVl\nQWhVdEM4TDdENnFheG0yZ3ZwRlk3ZlptQkZHY2NtSEo2aXdaSG4wClhQWVNsWEJE\nenJOMUhhRUJCRlo1ckJMaExFL2ZoNDFsRmpTWG1JN2lJY1kKLS0tIHhFeWxtTmtV\nOENDZ2U3elhOZm5WV25EU3Z0djBnTnJLUXZ1UUszeHNJUFkKtu/OfnOhK2Cr/QNK\nWXLwb0ncCoUiQUcmmErnAe9X4oOoZAXl/NthwTmQE0bQqaDGv1RW5ctyrzrmoHVw\nBCX7ww==\n-----END AGE ENCRYPTED FILE-----\n" - } - ], - "lastmodified": "2026-03-29T16:59:17Z", - "mac": "ENC[AES256_GCM,data:aUXcindoGtbf/hb4Ou5uZlbILNQ0L2OAn6tcxgncrkIp6b3JUhicl7Ta0ClTzjFmK8lGM44x+dZ5+NWresIVRzku/OwmVxip/Y2aUsjglf+zeg4GY9OGLAlZZ/VNAhGenx4K7TR7dzb1TT0ZwD96d1AMovc7mnwrF1hHpWkR10Y=,iv:Cc4AjsPNz4YPtPWlGa81/eiNgkmlf6ujmhIP08Flzvw=,tag:N/fWmSabVYRVVLPnQUl7Kg==,type:str]", - "unencrypted_suffix": "_unencrypted", - "version": "3.11.0" - } -} diff --git a/packages/infra/gen/env/data/staging/web.sops.json b/packages/infra/gen/env/data/staging/web.sops.json deleted file mode 100644 index 728519ef..00000000 --- a/packages/infra/gen/env/data/staging/web.sops.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "BETTER_AUTH_SECRET": "", - "BETTER_AUTH_URL": "", - "CORS_ORIGIN": "", - "POLAR_ACCESS_TOKEN": "", - "POLAR_SUCCESS_URL": "", - "POSTGRES_URL": "ENC[AES256_GCM,data:SsvkdNQhDkqJzkyD34bKjG4=,iv:uus6/eE/yiMunKcPAwy1J0ZsqfByTwzVDRHhVfZyUjc=,tag:5fxiHg4IOb+0+yM4ortNQw==,type:str]", - "sops": { - "age": [ - { - "recipient": "age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrWmNZYzZsQ2lXbmV3RUdi\nOHZ0Qm1SYU9lU0NVQkNpTW4xZ05QSTNvNkh3CmtnU1lsZjJKWDdnOS9sS2ZiMHpn\nejdrWTd3QURqMEh5NFU5OVlrM0RkSW8KLS0tIDczbmpMK1BocE9nTk5PU3ZGT1cr\nWWc5K1k2TG51OGtSaElMZy9IOFF2dVEKhv0OUR59LApQTEh+bVZjnHvoTaIRI3gw\n+aamaSk8DgNQvXguJLBXUUrWIPdpaKi0P0xMLb7GhGZLyMBT9YXtbA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkanBmMExEa0FUYVhqRE12\nQzhuV25rTDJnb0FjUGZINzA1Z05hb2ZQbmd3CksyVEtleVFYS1ErWWlYWWZBOFR2\nVi9YYk1Ka3RnR1R1QzlCNkdCU3dCVFEKLS0tIGV1ZHRmTGczekZtQnNJSVdLVHRt\nd0dxMjlzeWc5Um1ueXNqR2xhMWlUMzgKRokSyzPScE6dzam9GY9tDMS6tFKIJ9Hd\n1/9OVEhmLJdRBU4y7CniJWd3t7kpAz3ISmboKm254Ay6Rmdp+mRaAQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2UmVMRjVBRlBRZ2pJV2dY\nblhrbGlBdTJuN3p2VG5oSFpGbi9oUDZaUVVBCkRvT0ExV1ZxQlVpRlp1UEtsZ1NX\nVUNlbHFnT3ZNWnFHUXV1RjJwRlJQSncKLS0tIHk0ZENVT2crQUl5SXZDbjRlVDFz\nSGxEMGhvenVFa3UvVWx0OXI5S1FNUGcKeyQyWdxIslRDnbUbueCp+5u+Ho3Q1cmo\nIYFuzAxgzL7KDETXltJoYWVFn1BFsHSP1KXJDZN945cLbdcp5KDoxw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyB3ZGRj\nNmsrSFA1QnllSklnNm5GUXNvRGhCTm5kcTFqd0duZWFzeVJqQjFjCjhCbHNLSjZ5\nQko5UzdlTk5yYXM5c0NiZFF2QS85U2NvVnJHLzVWLzhBTncKLS0tIHR2TWFiemVL\na0JMd0ZTeC9VMGdFWHRveUVXOWRuMko3THhRdE5WVldBcEUKNRjMIMm6bO9qQd3U\najZPfgKsAUW8b0HRzIbbOWv30Wf7klXMV/1MCkuA/HkUlcfh2xITh830HFx7IiF3\nNBFtTQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBiKzMx\nN3ZaNnd2Zk95V0FZdnduTS9KMkNEN0MycW9kYTBBaGovcm5DaGhnCmNaTkJwd3lS\nUUQzYVFsdFJ3SnloYlNsUWZEbVBLZ0RCVzhtQkhxeUpPTncKLS0tIDJ5cGVvRGxv\nNmYwWlBYM21mM2t4UEVHRlYvRzYybTZTaFZ3a0FKcXRGNkkK8srs7wZYlY+pt4qG\ndJrh9MSNXpS6tHv5jzy1P7JGLS4UPAmGIlduSLexEbskvJIPuiI4jUhfgDuq4oGi\n2hcfuQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBKb2Zk\nYzVlWS9vb2xwa1JjVEc3RVFNd0xPNWd6d1lybmN3YXJOMlVrT1JJCnVBdkV0STN1\nMGlNYTJmNkMzTnRUaWFwdGlBMW12Rm1tT2ZhQ2wzQTRKQkEKLS0tIGZQRkQ5TDhS\nNzZaWHgxVmNDbTBKcm1CL09MUm5hL1R2b2dkS0d2R3dTOEUKID4GMhANrU2gKNWT\nJb9RbKgfTzUquWwN51rDoBWErWRGO2rdKgw9Cy1rXhYAB/zNfsVwmabXIkp0Y1aO\nwpt1iw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBCZ2F1\nRFVwbkxZdnd5b0YveGVSZTVhY2d3OFlCZlFwWWtIMU05dmNHYnpZClNodXZ3b2lS\nWk9qUTVrbHhxNndpYi9oU0xiR1FYclY2VkdXYVhEUjA1MjAKLS0tICsxbkhmQVJ0\nWXFTZ05paFZySGRpM3lyU20rdTl3NG5xa1grWEpMcldPUG8KpOuWRPs8hBHdIFtH\nQl0JaJ0r0OWmamzfBY6SVOEyckJLP6SWANAeTuFJELT6kzyaxnOT0sOSueGUL8fQ\nB83Yzw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBreWNk\ndlUwT3ZhQzNOSXJqZ2dnU0JvZkdVWE54NS9DSEIrQ0pkOGNYRG5FCmdDYkRPTnRF\nRXg2bWNMU0c3YUcyS1JpVmFkTnYvU0hxSEhFUFZBMTdGNEUKLS0tIDJTV210NFE0\nRlJSY05IbTlvU0pZMmljUmFrOUVNVTFPanZmNTU3OFFSWEUK/58IqFV+asIChmFE\nYt3Rt/CDqdQW75u28u+fOpiFn341BY3KThay/eg6QPCnU64kGcwSB9QwIVsN3XNW\nWrwvXg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBkKzF6\nTXVmMi80clZNbmphTmoxYmhmNmVNZE82T3l4UmFXSm1Vbk5SVzBjClc2K0dEOC9O\nMTJVNmxEWnc5OVBwRmUra1doZU5xaWpWK2JEQTFXOS95dWcKLS0tIC9lNnZ4dHpK\nSEhKUzJ2WXNyR2Z4OW1MaU1qcU9najZ4c0lnbWRnY0JZblUKe5eB8pC2A4ZRhjqx\ntQkX0nUaTM4//blmv6wMuSLKBImNYh1fPDPdthavvAtdlnVdufl6vRbudkRx4mNV\nbM+Ayg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBQT3pW\nUXN2K0FMN1FDbXIxYlBhRkZ2dTJhWVJWYlRXWjNFd2MyTjNFYWhvCmFBWURJdS8z\najZCdExXL1lBOElwWlRaRXdLRjM4RmU3Rm9yamhrRjZKaDQKLS0tIE10VU1tbU82\ncEg4WEd5eUJmaFBFQjY0V0tRdTZrSDdPNFJNVlZlVTRkYWcKAlj/7gmSgL/Gd36k\nqD3gfheQMSElqsZahQKlE0S7XayUsbGdn8nBuo7WG3PCfYInkP+lUQSIfDUUIEJP\nc2NT2A==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBLVmRO\nMGxYV01Cb09nbmdNZXVIM1N0d2VpS0pXVW1hMVlLSFpkdW00WmhFCm5NMDBPQ0w3\neStPYUpSMzJpOTBLVThvSmRqbTd4OWdsU1U5b0FvVG01bnMKLS0tIC9uaEVEbFF6\ncjBVazdURGRicS9DSHFZT09YTjBWZXVwZmVNcWhZQjM4ekEKMPqqnzlW4kEYMAMO\ngvFZuREwWbl0wjwHFXqohSEqaoLUOlJjj8RY6FN5JAmvH1XTx2Wcc5F60gxYGLrq\nv1vZvg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBBVW95\naTNNKzAweXNLOVAzR2c0V09xQ2FRMXduSm9xSVRqaENYZHpoWHlZCnp5SFI3R3ph\nL2pMQWV4WGhyaTlnYzFFdEZQZ3dpcnUxSTdDazQ5d2habk0KLS0tIGIwZU9KWW5K\nMG1Ia1RzOE9OaFNZbnJxTVV1N1A3TFNWQUMzUVJETGk5NTQKIqhsnqlXpknauy7q\nyyimkvNVc85WmeHNC+sHW2KfvixFuQs28plWG6mxhceLkwG6xIDA2c21bsMEIHzH\nXaoQsw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSA5VEtW\nZVR1Wlp3cFlBNEEyMndtTjB4Q3k2TnVXcnNQYkY1NHJ3SzAzZ0ZvCnpTY2NzMFRU\nclFSSExMVDBadHpYdkNVUmI0anZwL1BKOUMvcWkxY3ppc0EKLS0tIEMvaW5uQ2NC\nR2FjaXJUSGpOWVlUQWVIbUlBNlp4bVdWdHZsV3Q5akVnYWsKhoJlFUiVXow+Bbon\nC+cHGuG2Zokw8wUIbLcIyyu/lCnh4V1kbJ6m9MHxDBb1bptuuisggvHyi73GxPhg\n8XRbIw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBwSFdl\nanZLUnRGYnZia0NlNzZsbDlzSE9vUUlUcGNsMHRjWGVSL05XZHdBCjVockJ0enI3\na3ZJcC9DUTdBY2s5ZjVwbDZTblFGUnQrWnBxRXdNd0lsdGsKLS0tIFU0MXNYaS9v\nSmRnb3h5djFodzJxS2JJcjZQNzVKQjA3bkt4UmhaUTUxK3cKx30YWf10B04gKSQG\nDrRB4mhsnadvOfAWmVxFhvJlP8EmuIMen5QRH4eFz6y39peHsecqML5FJ/Ij6DBq\npJ9Pow==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBFdjFF\nZ2k3eDhiUlhWKzBndjhDV1V3Q1h5cnVDeXk4b0RHMnVEMXBQdEZvCnd2NTJIV1Q5\ncWR5MkVYZm1WWnF1bVg3VnU1ekNhUWtMb0hoVDloc3dvbk0KLS0tIDFvSXMyazlX\nOSt6SkRPWXlmVXM4UjhRR1RuWGkreThadTZKUmdZWEErcGsKPll7Srl2jpKccUip\nKvERJuqQSVdRF6+I29dI1stqN36sVYVPzouKjb8timorQUM5RsLeW7jKW7m3a2wJ\np/XiLw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBoWmNX\nbDgzRG9maVBvVWlSbGVmdW1hMm82eUJLOUk1ME96Ym9TNXdvTnprClNrVW85WEdN\nM1NHU0RDZTFxRDMwQkl6cVc0ejIzM1YzUnNFeDUzdUVtdVUKLS0tIGt1U3lUV3la\ndyszaW15dTYrcm1WZjZOSW9WRDJrcnRsNWZWRjZUVGJDYnMKkoyDYtsHheJ19Q+d\nzGsfCJJUBSJJrmb6VbdxCg1hkIBwAbDBoCiEfnV/W6p/+OQOeTXFNJq4kyPz5Lch\nSQ0LwA==\n-----END AGE ENCRYPTED FILE-----\n" - } - ], - "lastmodified": "2026-04-11T12:22:31Z", - "mac": "ENC[AES256_GCM,data:Wp0by3izDSxGtBmKVm+L2lnk5CeuA97UQCucavbmEANbffx2avDGdNrhnDh1DihAJouqaB/GZ4tv91OtoevxGJthMf9vLF1Ori+Y2N/Wp9rd61NHhmGUI71atXkPZj7e8JEjKi4BK+XNfJFvA5TUcRm41cp7gAeGIQ2QgeqFY4E=,iv:PgBmXS++3RgqvvsTAgsIgP8NpjvOHuY8N1ntYrdmHY0=,tag:mKK6NOEU9XoKIWfC5Bqlfg==,type:str]", - "unencrypted_suffix": "_unencrypted", - "version": "3.11.0" - } -} diff --git a/packages/infra/gen/env/data/test/docs.sops.json b/packages/infra/gen/env/data/test/docs.sops.json deleted file mode 100644 index 10b33723..00000000 --- a/packages/infra/gen/env/data/test/docs.sops.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "POSTGRES_URL": "ENC[AES256_GCM,data:twFYzfnlk+8cE8vquNI7jm8=,iv:BWp+7PKJQ9aola6L+41R2eev4Y4i8Ao6zcqL+CjlQR8=,tag:RF5btKJ8bP9H6zTksv9o+w==,type:str]", - "sops": { - "age": [ - { - "recipient": "age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZNktvREg3OXlnbmFGTkQx\naXUyNTRTTEtWRzkzdWlmM0grNi9DQzlOMUUwCjNWZDZzQTg5TFY2MGdrWExEK3RF\nMlUxMTNJd2dKbGdlYjFTQ0cvREplbTgKLS0tIHNlUDdURlY4WGFrdjJXYWltaGh0\nVGdZV1d4eVc5bE9ZTnFwWm4yQUlKQUkK+OBdHI2KPHHFLh8l4jU5rmSQO/OnGdsF\nEFfIk72ibdHITZNFNRyzMsYCWTbamjuy6WVJJAj9t8Lmv4f4Frx2GA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNZURmemIxUTRUbFpMWkx5\nL1l5a0l1YXBkbTlPT3dWalMvcTlqR3FlT0VNCnkzbENKSmlrMDNIV2NjYmJJdzd4\nRWRzY1dBQnhnNkFUNEVmNkFoWTRZVWsKLS0tIFRsWEhEanR4ZEVRREo2cGFEcU8w\nQ28razVMVXFXZ0N4aU1GS3Z0cUh6a0UKX01ZGgqz+bGIAcX/NdeSqK9FNam8A24K\ni+6ItitZWfrcAgDQggYSHUeXmEa+vNG+7PxBUs2JeYqTcjsbcrrVpA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpV3hQdllSaTcxc2MxSCtZ\nOGpYSndBbFhpT292WmdMUnR0SlJaZmppREdBCmR2UkJvbEU2UjFwYm0vQ2hpUHRt\nU0lIYlMxSGFpeWtkMUpKZUhPUk5XYzAKLS0tIGhpZVAyalQrQnJ1MVNvWVNteTdv\neTF1cThCdWRxMU13ZXNNVlh4RFdDMU0KeSKz5tG3YxiapKDdc+kI6BcFoG1OiT/g\nW/lf72mK6LHz8Sg/eN21RNNVmWo8FgtlT9z0lknuLhQLQIWeR28ceA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyB2QWNn\najVrdUtuTjNiZmR5WHFDS0U5bXNqV21lbGxITm5KRncwWExKbWpvCjBGYmMvNHho\nWDVCaFJpRGJ3aXk5dWpCaHZ3NTFMQ3VvUndiTTQ4VlVydTQKLS0tIC9tL0NCaU4w\nZVNVNjVSZXQ2VWxRc1ZQK2JTUXFiUVI2N2ZlYTRvdkRaRWcKSLGCJzwCQ3/19g3m\nTtzFq/S65eGMQ00SxeJ488wJGnx/NznLgctbgBRNRZK/8vcy6vdNGti+7XI1Q7pm\ngupwlA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyA4WTFn\nNVljUXRpckFVbytzOUFoR2ppTGM0U1FxTnorSU1YaUdNS1BTb1Y0CkhNalk4Mlc5\nQ2xUc0VWT1l1WjNVSVRZMURyMGRpWW9HbDZURkRBcGs2YmMKLS0tIEJ5c29saXNO\ndjBHTG5jWlhuVXBLVC9LWUkvUStFbG9Xa0lNbGplMjhnZDQKQhyjC1SekASJWNoI\n7zMIoPFM75iS3mny9wTvTrCheKP/m8K98+oa4PKzBfz+cJmFvegUZcus2wJDm5uo\nf8kUNA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBYa2lt\nU042aHRBV1RjbEVrRG04ZWVwZVZ6UlpMcTZUTWtGUzBtdlBBeXpBCjJ0NnlEWkNY\nTlVzdVJ0a1RoWVZrbUZFdXpUaTY3RFBJbVp3MDUySUQzVm8KLS0tIDgvLzdlZ3Zv\nZG9aRHNNZDZid3BNdU56c25GUDd1cUVzSXVlZWZFOWcyVFkKcbxtv5La5ZTeisVU\nhokQC9cUewbKDNo/FXOgCUiv6TCV7zyIk2W507e7vtpeDu4GrP5mAxYsBF3GDpGm\nw/rxWA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyB0dXZz\neUJ0V0VyTk5kbWsyT0FESlU0N0ZXLzNqL3R3bzhaTHlqdUpmTEFBCkFqWDNMU3Ru\nS3FEWUkwVXZUYUgycHNwbFpDaFEyenNKZFZxMjlqOC9QSVkKLS0tIGoxVHRjd1JC\nenc0M3RHTXEyemJWZ3JXcXdIYUlZRGxkRzhRNkFKTkl1em8KXlJuzs6Eacw3bleW\nBJriiS6PoryZ/LtsVhOo08qe9o/lFwWTBrK44VdrOkGN13VL34OrTM0MJ0iMvsPY\n7hzmtA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyAzdWFs\nV05wRW1mSHpuMVgxWllEOG5WS2ZDcjdBMnJXQXJoTkx0b2pOWkVBCm9PNkQ3eWFs\nSE9GOEpWNXdYbXBwNFJGMEt6ZTNzKzdvMXJkY29mOGwrM3cKLS0tIEVZekkzc21L\ndWw2WmV3U2FZdG1LczRCM1M2b0JDb25GSGpVeFlQeVJ6STAK28wJNZ7+ni10blyu\n3lNDFcRNdAXxK6064U0UOn7gpfFKlg1OKb1TrUt8vFQJ8T4PzM68CBoX0TK65Rh0\nA8TNaQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyA1N1ZF\nK1VqVlROMEdxZlNad0JCRTd1elJmNmlGTXNwQUZBMFRJN2VJM1hZCjhONkZqQVNP\nOVgxOUNlL0YzZU5PVHhJMFBGb2VaNHZITnFDTzVQV1hVbHcKLS0tIDhuY3c3ZTNW\nWnN5aHFlcXFZZThVUmhINmloR281KzB1TC9PdXhiTmRGZkUKuLmFPeByFidHgzls\nHCemBmdYDAUt1Z7KN8A8mGhAOa62aQZNwEFED6FafCDYtuhbXDfLA4+VhnXBq+qA\ng3fcAw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSA0K3JF\nZWxUWCtPdmd1dE9FWW5MZjRsbUw5V2F2L283STJCQXBaaUo2Y3lzCnRpbmxmTjZr\nQStQcXQyUEVKSTIybGk2N2VrekRhRU9SVUhCZlo0b2RTVGMKLS0tIHY0UTQwdlhM\nR3dnRk82WWlVVTdNUzNRaXRUbUZnWFFDQ3FQMml1ZVpJdEkKC2F80ZBTXsANDIOU\nu9jlAgIU8oSWBzVLmDGJn6SQZnO0oQd6sAr92wQ5BkIDBgHyHd3A8m1WgKE8aPH8\nXW3ljQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSAzNDIx\nTmVKVG15NGh6LzRpcTlxUnJtYmpidW1WYzlQY2pMMzNMMlhGR1dJCjhvNE9pR3Jp\nTDQwWVFoRUFJbHcwWGhZYlpUR0xWSEZsY3U1SERzSzkxcUUKLS0tIGszNFM3dmxM\nQm1nT3N0V05SOGk0NmFxSDNhYkFPbExqRVpnMHlyYy91bUUKYgrSkkHz1MI+ISco\nBhOOFX23LddPoEENvDCmgnqvZ79M6T2qREiJLrI2AejQBaevsHbyGZxDY5ns3CWQ\ny3gslw==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBvdFhs\naStOM3Q4WWlHYVZia2ZjTysxOW80M2FRT1FpQjhGNnVYQU1ENndjClpaNkVaamN0\nVmphTkp2VmF3MHJwSCs1ZWFQVlY3eklDRkRBcDJiQXduM0UKLS0tIDYySlAvdG9E\nL2FxV1U3ZVM5UWJPeWlIV2RqZldtMHh2ZUdhMXFad1BEcFEK7XslNIbTy9YLalhI\nOUcLYVF+J+b4LKdYu8MPQNAi4jD5EcARn5k+7tshUQfSbRg1nNi17ARPLhUQx0fG\nMlX2MQ==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSArbkla\nZE1aNkhMcEhGVXUvTzZTbm56VUlCazI2bnFzTFpud2djanVoWXhnCjE1bmtDU3g4\nLy94NWF3ZkZkRFJadU55cmlWWGJkc3lXcjdZMlhMendtVUkKLS0tIGpoOUt3Yzkx\nMHVDUm5kLytqcGEvaWY1ME5NTUxodzBQMEthc0ZYaGpHWkkKorRoCtDP4r/5CT4y\ntX2KoOvdjDhVxzWQSXm3F9531CBepvUc0RHm8pKdfhvLCZohw8tQOXWALUukEnK+\nIl5GgA==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBoZzRq\nUG9sK0lmK01aRkpBVjNxc1c1TmovYXRaUnZTQVhFeVlocTROUlJzCm1CQTFsUVd2\nbHFqalVMNE02Y1RiY1M1bmpZOEpSR1UwUjZjWWZ1K3QvSVkKLS0tIGZnOTdBblpI\ncUF5RDl6b2wvVHdaSnNBMG8yKzFkWk13YUJjYmtaalBSdGMKzSqLdg8sEYBjpKgx\nrevNW+k2/MfUo3sapVPR+N3CGfprFO8itbj8f0syHlGyTe8DJeENa5TOHifYmiKv\nrcCnOg==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBLaXBs\nSFB6YkRMSVR0bzdqZXoxa1puOUtabUxOMWRHaEZodVRtaUJjOEdNCk0vcnVleGs3\nSCtBNmxhdlRZUHNtZ3hqSStDYVQyR2NtS2xGTVJnZmpiZGcKLS0tIDEvL2dCUFFh\naUFPbEVPMElpK0FXVzB5OW9zN21YT0g1dkV0c3d1b3UvaXcKoHVcKJYfrI7DHKDP\nNgL+Jsc/AaTSEkeeHuY6qKIMOyBHjGJ8zepr0Hu/q6GxjkXI8C65OueBsC70btpc\n6lYl4Q==\n-----END AGE ENCRYPTED FILE-----\n" - }, - { - "recipient": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN", - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBEYkIv\nVjRGcEhYNkVVSkg2UjQrMzQ1UWNuQ29MNGwrSW1TbWpWM1NLMm1vCklJdFRmczR4\nNXliZisxZHBBanVpTnhsYjlRNlNHUWFPdUd3NXJhWFNEZDAKLS0tIG9mUCtsc1pW\ncjcvRTFKKzNMNWJYUUdRVWNHajZyNTBCZ0JLUERBS3dQR1UKL99r0Xw2E3ZQaoo4\nwBRXye55XCVclV3QiA9iH9kmX2IEG3wpdRx9QfY97fDnpHaFUEQ8GSrKhAJJSOmU\nz5wYTA==\n-----END AGE ENCRYPTED FILE-----\n" - } - ], - "lastmodified": "2026-04-11T12:22:31Z", - "mac": "ENC[AES256_GCM,data:RnJH6NLBat+tHcrQL8m1H5qeguY+ENx+nNlnhHWQzyiopYBeVhsyqVGRbIFGFRXSU16w0IgBuUN1ewFWsqLL+8zUXP4dDXAGysnyA3RyQ/wVzhV0HAD3TLHck9FEtXK8+Ike5C9YdbX1xN+hIkW/pBMGSHGJgb3YJoSOeJrjyhg=,iv:T20iUTtSYasptJkt3oo9uzaagw5nqtLfbnE77HBhfhw=,tag:gHZrSEsH2/YcIPj+Jrx6Eg==,type:str]", - "unencrypted_suffix": "_unencrypted", - "version": "3.11.0" - } -} diff --git a/packages/infra/gen/env/package.json b/packages/infra/gen/env/package.json deleted file mode 100644 index ea57d2e7..00000000 --- a/packages/infra/gen/env/package.json +++ /dev/null @@ -1 +0,0 @@ -{"bin":{"docker-entrypoint":"./src/runtime/docker-entrypoint.ts"},"dependencies":{"sops-age":"^4.0.2"},"devDependencies":{"typescript":"^5.9.3"},"exports":{".":{"default":"./src/index.ts"},"./docs":{"default":"./src/exports/docs.ts"},"./stackpanel-go":{"default":"./src/exports/stackpanel-go.ts"},"./web":{"default":"./src/exports/web.ts"}},"name":"@gen/env","type":"module"} \ No newline at end of file diff --git a/packages/infra/gen/env/src/apps/docs/dev.ts b/packages/infra/gen/env/src/apps/docs/dev.ts deleted file mode 100644 index 3650fe75..00000000 --- a/packages/infra/gen/env/src/apps/docs/dev.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Run 'write-files' or restart devshell to regenerate. - -export interface Env { - HOSTNAME: string; - PORT: string; -} - -let cached: Env | null = null; - -type EnvInput = Record; - -function defaultInput(): EnvInput { - if (typeof process === "undefined") { - return {}; - } - return process.env as EnvInput; -} - -export const getEnv = ( - input: EnvInput = defaultInput(), -): Env => { - if (!cached) cached = input as unknown as Env; - return cached; -}; diff --git a/packages/infra/gen/env/src/apps/docs/index.ts b/packages/infra/gen/env/src/apps/docs/index.ts deleted file mode 100644 index c52a8f82..00000000 --- a/packages/infra/gen/env/src/apps/docs/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -export * as dev from './dev'; -export * as shared from './shared'; -export * as test from './test'; diff --git a/packages/infra/gen/env/src/apps/docs/shared.ts b/packages/infra/gen/env/src/apps/docs/shared.ts deleted file mode 100644 index 422dbdfe..00000000 --- a/packages/infra/gen/env/src/apps/docs/shared.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Run 'write-files' or restart devshell to regenerate. - -export interface Env { - PORT: string; -} - -let cached: Env | null = null; - -type EnvInput = Record; - -function defaultInput(): EnvInput { - if (typeof process === "undefined") { - return {}; - } - return process.env as EnvInput; -} - -export const getEnv = ( - input: EnvInput = defaultInput(), -): Env => { - if (!cached) cached = input as unknown as Env; - return cached; -}; diff --git a/packages/infra/gen/env/src/apps/docs/test.ts b/packages/infra/gen/env/src/apps/docs/test.ts deleted file mode 100644 index 8bfe869f..00000000 --- a/packages/infra/gen/env/src/apps/docs/test.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Run 'write-files' or restart devshell to regenerate. - -export interface Env { - POSTGRES_URL: string; -} - -let cached: Env | null = null; - -type EnvInput = Record; - -function defaultInput(): EnvInput { - if (typeof process === "undefined") { - return {}; - } - return process.env as EnvInput; -} - -export const getEnv = ( - input: EnvInput = defaultInput(), -): Env => { - if (!cached) cached = input as unknown as Env; - return cached; -}; diff --git a/packages/infra/gen/env/src/apps/stackpanel-go/dev.ts b/packages/infra/gen/env/src/apps/stackpanel-go/dev.ts deleted file mode 100644 index 5ca30d93..00000000 --- a/packages/infra/gen/env/src/apps/stackpanel-go/dev.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Run 'write-files' or restart devshell to regenerate. - -export interface Env { - STACKPANEL_TEST_PAIRING_TOKEN: string; -} - -let cached: Env | null = null; - -type EnvInput = Record; - -function defaultInput(): EnvInput { - if (typeof process === "undefined") { - return {}; - } - return process.env as EnvInput; -} - -export const getEnv = ( - input: EnvInput = defaultInput(), -): Env => { - if (!cached) cached = input as unknown as Env; - return cached; -}; diff --git a/packages/infra/gen/env/src/apps/stackpanel-go/index.ts b/packages/infra/gen/env/src/apps/stackpanel-go/index.ts deleted file mode 100644 index 1b8a3735..00000000 --- a/packages/infra/gen/env/src/apps/stackpanel-go/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -export * as dev from './dev'; diff --git a/packages/infra/gen/env/src/apps/web/dev.ts b/packages/infra/gen/env/src/apps/web/dev.ts deleted file mode 100644 index 77f26750..00000000 --- a/packages/infra/gen/env/src/apps/web/dev.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Run 'write-files' or restart devshell to regenerate. - -export interface Env { - BETTER_AUTH_SECRET: string; - BETTER_AUTH_URL: string; - CORS_ORIGIN: string; - POLAR_ACCESS_TOKEN: string; - POLAR_SUCCESS_URL: string; - POSTGRES_URL: string; -} - -let cached: Env | null = null; - -type EnvInput = Record; - -function defaultInput(): EnvInput { - if (typeof process === "undefined") { - return {}; - } - return process.env as EnvInput; -} - -export const getEnv = ( - input: EnvInput = defaultInput(), -): Env => { - if (!cached) cached = input as unknown as Env; - return cached; -}; diff --git a/packages/infra/gen/env/src/apps/web/index.ts b/packages/infra/gen/env/src/apps/web/index.ts deleted file mode 100644 index 6e4240a1..00000000 --- a/packages/infra/gen/env/src/apps/web/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -export * as dev from './dev'; -export * as prod from './prod'; -export * as staging from './staging'; diff --git a/packages/infra/gen/env/src/apps/web/prod.ts b/packages/infra/gen/env/src/apps/web/prod.ts deleted file mode 100644 index 77f26750..00000000 --- a/packages/infra/gen/env/src/apps/web/prod.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Run 'write-files' or restart devshell to regenerate. - -export interface Env { - BETTER_AUTH_SECRET: string; - BETTER_AUTH_URL: string; - CORS_ORIGIN: string; - POLAR_ACCESS_TOKEN: string; - POLAR_SUCCESS_URL: string; - POSTGRES_URL: string; -} - -let cached: Env | null = null; - -type EnvInput = Record; - -function defaultInput(): EnvInput { - if (typeof process === "undefined") { - return {}; - } - return process.env as EnvInput; -} - -export const getEnv = ( - input: EnvInput = defaultInput(), -): Env => { - if (!cached) cached = input as unknown as Env; - return cached; -}; diff --git a/packages/infra/gen/env/src/apps/web/staging.ts b/packages/infra/gen/env/src/apps/web/staging.ts deleted file mode 100644 index 77f26750..00000000 --- a/packages/infra/gen/env/src/apps/web/staging.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Run 'write-files' or restart devshell to regenerate. - -export interface Env { - BETTER_AUTH_SECRET: string; - BETTER_AUTH_URL: string; - CORS_ORIGIN: string; - POLAR_ACCESS_TOKEN: string; - POLAR_SUCCESS_URL: string; - POSTGRES_URL: string; -} - -let cached: Env | null = null; - -type EnvInput = Record; - -function defaultInput(): EnvInput { - if (typeof process === "undefined") { - return {}; - } - return process.env as EnvInput; -} - -export const getEnv = ( - input: EnvInput = defaultInput(), -): Env => { - if (!cached) cached = input as unknown as Env; - return cached; -}; diff --git a/packages/infra/gen/env/src/embedded-data.ts b/packages/infra/gen/env/src/embedded-data.ts deleted file mode 100644 index 538f7a46..00000000 --- a/packages/infra/gen/env/src/embedded-data.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -export const AVAILABLE_APP_ENVS = {"docs":["dev","shared","test"],"stackpanel-go":["dev"],"web":["dev","prod","staging"]} as Record; diff --git a/packages/infra/gen/env/src/exports/docs.ts b/packages/infra/gen/env/src/exports/docs.ts deleted file mode 100644 index 3745efdf..00000000 --- a/packages/infra/gen/env/src/exports/docs.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Exposes env for this app by selecting the right environment at runtime. -import * as app from "../apps/docs/index"; - -const processEnv = typeof process === "undefined" - ? {} - : (process.env as Record); - -const rawEnvName = processEnv.APP_ENV || processEnv.NODE_ENV || "dev"; -const envName = rawEnvName === "production" ? "prod" : rawEnvName === "development" ? "dev" : rawEnvName; - -export type Env = app.dev.Env | app.shared.Env | app.test.Env; - -const env: Env = (() => { - if (envName === "dev") return app.dev.getEnv(processEnv); - if (envName === "shared") return app.shared.getEnv(processEnv); - if (envName === "test") return app.test.getEnv(processEnv); - return app.dev.getEnv(processEnv); -})(); - -export { env }; diff --git a/packages/infra/gen/env/src/exports/stackpanel-go.ts b/packages/infra/gen/env/src/exports/stackpanel-go.ts deleted file mode 100644 index 7d843370..00000000 --- a/packages/infra/gen/env/src/exports/stackpanel-go.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Exposes env for this app by selecting the right environment at runtime. -import * as app from "../apps/stackpanel-go/index"; - -const processEnv = typeof process === "undefined" - ? {} - : (process.env as Record); - -const rawEnvName = processEnv.APP_ENV || processEnv.NODE_ENV || "dev"; -const envName = rawEnvName === "production" ? "prod" : rawEnvName === "development" ? "dev" : rawEnvName; - -export type Env = app.dev.Env; - -const env: Env = (() => { - if (envName === "dev") return app.dev.getEnv(processEnv); - return app.dev.getEnv(processEnv); -})(); - -export { env }; diff --git a/packages/infra/gen/env/src/exports/web.ts b/packages/infra/gen/env/src/exports/web.ts deleted file mode 100644 index ab9a8a8d..00000000 --- a/packages/infra/gen/env/src/exports/web.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Exposes env for this app by selecting the right environment at runtime. -import * as app from "../apps/web/index"; - -const processEnv = typeof process === "undefined" - ? {} - : (process.env as Record); - -const rawEnvName = processEnv.APP_ENV || processEnv.NODE_ENV || "dev"; -const envName = rawEnvName === "production" ? "prod" : rawEnvName === "development" ? "dev" : rawEnvName; - -export type Env = app.dev.Env | app.prod.Env | app.staging.Env; - -const env: Env = (() => { - if (envName === "dev") return app.dev.getEnv(processEnv); - if (envName === "prod") return app.prod.getEnv(processEnv); - if (envName === "staging") return app.staging.getEnv(processEnv); - return app.dev.getEnv(processEnv); -})(); - -export { env }; diff --git a/packages/infra/gen/env/src/generated-payloads/docs/dev.ts b/packages/infra/gen/env/src/generated-payloads/docs/dev.ts deleted file mode 100644 index 442476db..00000000 --- a/packages/infra/gen/env/src/generated-payloads/docs/dev.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// content-hash: a89c4a13ce3144340198bc3e8a8930dea2f450bf9cc9ec5abab0bda2e83d8a67 -const encryptedPayload = "{\n\t\"HOSTNAME\": \"ENC[AES256_GCM,data:5PdpL5JMHPrOG7Gls+Y=,iv:eAzNV9rs39IIKVjix7XCurXTcCg3n9x96GPV+c0F8P0=,tag:nHcP9JzHb5G5N61cBi1cZQ==,type:str]\",\n\t\"PORT\": \"ENC[AES256_GCM,data:ylFTeQ==,iv:KJKpSgvMqhgcIzWe5P/B4fMz95FzCk1s5fAcr/V+BI0=,tag:qDW4bUAJNzXjt4BZGutDVw==,type:str]\",\n\t\"sops\": {\n\t\t\"age\": [\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOeXdKTjc2ZE1tdmxmcHRo\\nSTI5WXZqbFBUTEJ3cGVOUkhIeEY3OTY0Z3owCkNqQTNxSVNuVEVUMzBqSkNodEZH\\nUldCejVUQ3ZQdmtqNzA1MVptUUxMakEKLS0tIE1Lc3RFalk5Q3NsZ3NyS1VoNnRj\\najJ5dkJkVDZYbVMyejlmcUFxUjNYWXcKBqYvfcpxyNnzJhSUsdl/5dvO0FtWWw0L\\ntIeAsuNPsTINu56ec0SU+CwJbKLZ6xzHGMHTaVWrvjUlekcISbYJjQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWTJsZDJkMGJSb1JTVDEz\\nNjVqVkovS2Vjcnh3T3BJc2RpU3FJd3hndVZVCkE3QzVNQTJSL1g5Z3BxVG1wUk04\\nRU5RZFJ3KzRxMytNcVdQY2MyeDRlU2cKLS0tIGVQM3E4RkNoMWM3QjlJSzRsRzZT\\naVhHS3JZMlRGQlBrZ2JzMm9wN1RTQTAKcbSHbxjWy3SKiXGiduxwxlhpjjhxKG1p\\nX4t0RVNaxBbOYXR7DaWhjxyUJ9nUlvIwSQ6Gmlz5p291qHESnuEziw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5VDZ2QU8zam9KTTlMK0RV\\nSVJMWDVEMER1dTcvYVV3MjhuR0s2enFMQjJVCkN3TEJlUi85dTUyblR2R09NaGkz\\nODloYU56MFkvNFBEd3BLTlpsTmQxcW8KLS0tIG5xRUdFbUJHVE95K1pqYnJsRFo3\\nLy9JUlV3NDZMbTR6UDZjdzdESUJvTWsKv0OhbxmOOQl9FPehXy42KJQOzpm33rS4\\n3rGFQ4+liMGWf+X5TbYkaVDHijWmIe8A4JZJW7j9lLD5kl1lAIMyGg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBqa2hT\\nS25oUnQ5VGZyWWtIclJpSVhzNk14RVFBeHhBcGNaNnNuMlo0ekM4CnIyRTY0amxN\\naS9FRjNyTStCZ1I4ME5VOGRyL3dWTVNmZE1pc0ZTQ3BKdWMKLS0tIFU0WW10VjFN\\nMVlHN3RlVzVsVmU0NEQwL1hPekZ0MVVGcndiS2NCUVh4VXMKWTwtvUP/LXfryGxk\\nYNFIpgAzA64yuKTbxY4eR1scmjLFzE3buLb3in5Ixt+DY7f6gC2pPpbMGBHGTYIu\\nHhTqYA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBsaHQ5\\nQkFQSVM2TTlUc0tSblk5MW1uU2VqYUlQUXZGdnpuS05IbG5WMTFBCkJ0UXE5Q28y\\nT2RSQ21qck5lb2JsY2pWV01yQ1hiSnFja2hGQXd3OFNMTXMKLS0tIEI1OW9GVWxN\\neEZFNHE1NnNlcHpCYllqTlhjQzlpU095cVVyVU53WU5hVjgKLxrUBxZmjOtpKp+9\\n8rzNbxE2K6PEakI7VsagJ+QgVgZjFdxDW8YsI1nFzjLXlS1z4rj2cUYZ0DUGprCC\\nBGkO6g==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBUemJQ\\nN3lJbENleURWdElTV1Y2c2VwYmFmd3p4KzZyOG1kQ2lpNGF0aUVvCithOElvQnlG\\nKzc5RTRCWFhFUjNBMFRWR2l3UHZvbEprSkxlRFAvRnpTTlEKLS0tIE41VmJHVlhy\\nQm9BSVNLUWduOTdFUUxxWERjMHVobW1jODNPdkhXVHhFSWMK5+xHx6AbBwcRZz5j\\n5cieW9RC3HRtRlXbNAZh/VOXa60VxPn7U+SYPDShz1y6YMSZm8N1l7AztJ6m7t+V\\n0hYoSw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBwVmg0\\nelNPcDRad3JFVXNJTHV6NUVERmZ4ODRoem5OM3lMVHNISFRzWUQwCmQ0M0txK0VQ\\nOEtzOUdPRzd3MGdqM2NVU0U5ZlRKaS9UUnpKdEFCa3FEMTgKLS0tIGZFdHh4dlJ0\\naDY2a2NNZkZoWEMvZk1ORk9xQzcrSjRMdWV4WDBlZnlkY1EKOMn97pNblq5IAEu8\\nvthgnl15ESjkn4w7cZz91AvuAPjq18LfF6IErxcIvdU8yJOJmD1r6H7kLd7xDA7R\\n0XyQTw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyAzT09T\\ncUVVSTBVWSsweGRRbXZQWDhURXBRUUpKd0l1YzZmN1VOV003UjJRClovMUQ4ak1Y\\nR1J2Ym1KMlV6R25MZ1NGdVRROXN1dTR4dzg0QzllNXpTcUUKLS0tIHIrZE15bUdJ\\nZXVtNEZqcXkrK0RLaUEraWFEKzZZemV1NnhLZXVDNFlDWlkKh2v6AQZEjfQ0/xet\\nZSIPONaBEeiOyb3+ZB5pmoYMRIjspbEV1A9ZPTdOBkMpraIrJgkC9cJ/YOlTUPun\\nysIevg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBjeEs5\\ndjdUb21QM2dFNnFiSFR4cG8xME5XT1ZQNE1ubUdlUEt4d1Q3MUZJCmwvWUFhT1Jn\\nMGlJd2d6L1JvekdpUk9yRnZvSmtEL1Y0ZnZhcXROL0U2NGcKLS0tIHNVN0JCZ2J3\\neUVGZWs0dGFNaHRPbVJ6bEdqZ24xNytMbnEra29yS0ZaS1EKDfbusjWSg4lWHkhY\\n2FWnoXKU6SbTuRgxWzs1wcjIvUl6Q9LRG+1Jk6sU1d0UhMTxqc5O4GN8iyqDd5+J\\nANq6og==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBpQnFT\\nYVdqU0xMRkttMkI2bCt5N0xFc3A2bHBjcW9sUTF6SVpHYzd1dkc4CnkwOWlsUU5p\\nUjRKdXdFMDlqV2xIWXpEUTRHd2xBNi9Cc0VOZldLTFdzMlUKLS0tIFRHY1QrYlo3\\nU1NtZ09hOUIveHFGWmIxUnFPbFBVS0ptNW1OTXU4Tko3c3cKzMMcWLxMWIU/yIig\\nuL2YCVw7Oghlvq1DN67gwtR8ivuvkeLBnbFgbI6r7tPzwKd/CBn51vEqIcjSzLDP\\nyjli2w==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBlQmY0\\ncThsbGtLbmw4c0tCQkJ6MEF1dnF5cTVvSFo1MEVFQlRVTXRhbEE4CjJJTlhQUmtr\\nOElJWExmTERzN3RRMzNqSnc2bXZqeTMwK3F1SkxiODFoL3cKLS0tIC9vTXBkd2JI\\nM0hSS1B2ZXhhVVBIUEdIcVdMTUM4T1NETk1tblE1OUtXS0kK4UO+knTNj/IyN5kY\\nImS7RTPmGejESozrec9EwixNNaFIWuroLYkvQkAunADDIbpVGvndhq2bph0tCBq8\\nLkNVkA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyArc3Vv\\nSnVITUtHbFlrTzMycXJUNFdTc1JxakMyeUhPZnRTRUFKbmR4MUR3Ck0vYmtBQ1ZZ\\nOXJ4cUtrM2pDRm1JWEJaUTZNbldJbmZwWDJHWjJPblJYbWcKLS0tIDRSeGczZUhZ\\nUGRzbnVTUCtBZGlyYUNkcmdWd1pZV3JwNFdoNGI5WVNEMjQKTH9CN2iAJFUH1m5n\\nGd17JLmFnCaOz3TqAdxActaZ05qaTDteq3T9ShthCjC5JxOJZR6xiC3Pcb3PtMwq\\nzmL+yQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBFcER0\\nUW5NRXdwUlhsUmhHaSt4MHpHNnJkd0U4SmtvT2VIekdMaWJ5U1hZClRYOHhjdElZ\\nanJFR1Z3bGRtMGJsVXhsc1ZqcUlBMVBzRW1WVG4wblU4VlEKLS0tIEI0d2RDZVJo\\nY1RrWVJJVmNJcEpzeWZncXRJUW51SkRXRlJuem1sNkJxODgKnTSt4cyoGlDxH6Hb\\nbld0B70Of8qIyJyHGShhgQimJWXHpxK4b13Vq+3FueP5N1mDTwbKYa7bY5CjPeZA\\nf1b3Iw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBjdVJw\\nME5NTGlFcy9KbmZQNzRld2dvNm1OalY2aWFib25NWGhCZzQ5QW5ZCnMwbWp0TjJV\\naVl3VVRmS1hIR2FLZldVeDhtSWxHNERadVMyRllHeGN3YXMKLS0tIHZibUZFR2FB\\nUjlBWVo5VVoyallEanhJRnNXR29NUCs0bldHMzB4dVdKcEEKOCqQ2rD23252GKjk\\nh5VWCf9gUvPLJj8MpBGXLu+jjRnioqv4pdKHpqFjP6nN+8mXh/3t/WF/ZnD9FSJI\\nmm/YXQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBSdTJT\\nUDNqdFJOdVhnZmdJbEdWTmM4YjR3OVZCb1E4RWR0dlVLdmx0UEhFCjNjL0oyZXdw\\nWHlYQ3dTN3M3VE91bU0vRVJyNmlvc01MaS80bllSUmVTcVkKLS0tIG9PVER0VERW\\nQ3ZpYkg2bDhMbVJyTlR5MEk4NVdPWXNqdHdGdjZiSDNLdTgKrqsm/SS81uTJonW1\\nZIHV7udBDC4NGAuznosjp+cv6hPSHnViqoTro5x3V3VaycfTKIf48BCsYulE5k4c\\nio0ZuQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyA1c0JW\\nRDNuby9TaWEvb2w4c05GMXNzbkNSZW50aHI0TitwWDdXUXIydFhNCmU5ZzJLanR4\\nalR0UGdlbCt0bDB2eTBtZUt4SUpOVU91OWphUnBhWGdCdWsKLS0tIEFseWZxTmpi\\nNmM3WTYxSER3YTFHR0E5eFdZdVpid09tc0x3b0gvTE9FaHcKhK52gNVUEoUpPm+Z\\n+h5hVs7pVEVP6sl/IyfKjoHzdaDpMl0bBhrDGYWU1DwuY/e7EP1CmrHSYgiGw1bh\\nsv70vw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t}\n\t\t],\n\t\t\"lastmodified\": \"2026-03-29T16:59:17Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:+nPty+rFjvO+8QWGah32oZWT2wR+sJxKmkAR1/qFNK5+5HoWBZ8IYb+OwfHMPh8HD/67xzYdRNfBQie6KEpiqOps0trfuu4t1pg/2RcfMKyCxD75rRSQ3QM9g2zNidBcM95QPkFc6NeT3ZbRyCXaPt/oJ/rT4IRZh7RZ/GqAwfg=,iv:tn2diGUh4rdrXRKnqgx1jHxMkg5sFoRgOkRW2yAo9mg=,tag:xUmH0f6kNeIaQVEjl9bIWg==,type:str]\",\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.11.0\"\n\t}\n}\n"; - -export default encryptedPayload; diff --git a/packages/infra/gen/env/src/generated-payloads/docs/shared.ts b/packages/infra/gen/env/src/generated-payloads/docs/shared.ts deleted file mode 100644 index 8972b481..00000000 --- a/packages/infra/gen/env/src/generated-payloads/docs/shared.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// content-hash: 15f4532f96d056cbf3cd7f5524fba7a0face1d481f85dcd85d8d8fa38d7848e2 -const encryptedPayload = "{\n\t\"PORT\": \"ENC[AES256_GCM,data:ZOJcYg==,iv:oQvxMBv8Ug/a63pqQ9JQ3u1f6nzcP+y9Q4dkENrVIcM=,tag:Srx45+tGacDPtr2ekmj8Tw==,type:str]\",\n\t\"sops\": {\n\t\t\"age\": [\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvMGlkYmxjeWxNbldYQ1VH\\ncC9sNGowekJVbzhoRTFsUmV3N3BGYzJZYVdvCjZCUGd1bUhVNEJ0ZnpQZGQ1ZHpl\\nODVWbHM1TWRXLzJUeHh3Zm1OSDhSUlUKLS0tIDRoTXlqdnA3VC9QMFhCZk9vWkpK\\nZkJEbDMxTFB2dXdSS3BzY1B0RGgrNk0KAJIHHQZxSoucg/dvT7LvVXB+ryG3tNsv\\n8pBXghkZiVXPKcxdeg7C5FiI/I6pJHEDyeVBxL7OSm7nEbNoqGdcPA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6MmxxWGtPbm9TODlDSE91\\nbXJodHlVeDFHZ0oyT21XT0Fybkh6R2R2MkdzCko2YzVmVVE5TmI4Q2hnQ1hLR3Zq\\nNmRkZ1BlTlNBVk5DbCtWbkphdnh4RjgKLS0tIDgrenMvc3hUQ0tyZXgrYnpiS3NX\\nbG5hRDFQTWJrTFhrTFZjYjFEdnBhcmsKEeKGNNeP1KrbxJs91yrRb8fON/WfSuZv\\nJUyK/EomGwcv9lpp5fZ8rgS8lh04XLP0oeppjL8iKr3lCSvDkag6PQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnMHUycUFwMGVzMEtsUGwx\\nMGhnbFg0N1EycWJ5VjFNdmRTWFJZVEdIdkNBCmR3WExzdVZaYSs0OCtpSzRtR0pZ\\nNzN3aCtxRVVkUHJaQk1VNnlER290OEEKLS0tIGtVdGM1WEdKdlRsN2FmRmFqUkxK\\nMStrbkZlMHk1WWFqV3d4YXJvWk4rcTQKFDKkQmvkhspJIAKmgGd+yKVpjaDW9w9B\\nWED5XifSu5wjhWwSKvpTSwyUNCgpmO+mgjWMmNNlDrxJqvjSq8WjuA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBUaWdI\\nSU1TeEg5VnNZRVN6T2NTczdsR3dFVU45ZlhYZndHQUFxZlAwelQ4CnBycnVQS2lU\\nODZteUJweWFUb2l1ZWMxbkF3U1kvUm8ycEJzM0YwMVMrbFkKLS0tIHlGMU5zUjBv\\neFY0eWU1SFBQeUUyYUZPNkxSdjl2Ni9jSTdEQ09iZkxqVG8K4T/jUHao0yXL+NsX\\nOEmSVOnTzKWHCEbO2KQXePp/58t6o7keyuxQjEDbjGRTBOkd0JVfDtFX59Gv4Gby\\nPMKTPw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyAzTHBS\\nVkFiVks0bWNEd3VYRXdiT2g5dlNRZG5kU3NpK2JqM0hkdU93SUhvCkJka05YdHdr\\nb0pPZEdtNURMcUdyYVg2T3VqdStVMXlnd1BBdWNVa2lRLzgKLS0tIHBUT2lvTjJr\\nQXJva0Vpa3ltOGMzbFAyWkdsRmFibnF1L2ZzYXV6cHJMM0EKE1pSofVCF2nb5qPi\\npXlc7DELS+Ak+Bfa0/pbgZTYxn2eT+JMEgo3NvZ2nMcUnGvt4sFje9BawF+9UtLR\\nsNoQLQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBHcnNt\\ndkg5Q2QwM2hNbGVzT0VaWkI4ZW1IaWpkV3VPVmxGZU54b0Y1eHk0CkZic1d0ek90\\nRFV5Rk1QNkVnOStBZDdCaUJBVTE4cUxGMzAzUlRjam15ZWsKLS0tIFc4QUhFYmts\\nOEVIYlBqUGhubDJ2c3NvOWRHN3hmRFNSaEFNeUlCd3BKODgKWMW58XzoAgoIBHCS\\n55uKRJKtVEZUpjR/kG5VmQiKxrwpEbto7IU+EZCsaJjDFcIFVAeaTApW6dGo92Pp\\nW241oQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBiSHMv\\nTy9WeERSVVNSVzB5NURSanF1UTNIaTlGT04zRml6OTYxc2lJTEU0CmZ0UWxzYVh6\\nUjFPNG9NeGxSN3c5V3EwN2ZqaHdrejNmZXAzU3hmeGVCZlEKLS0tIFNNb3NoUksy\\nUDF5V3orMmRMWldXS3JWYlhCd09QYjhFUVM1YUVyYUZOMEkKp+LDQoNhVU2JlVAH\\n4z48s7fmuOll2Ds5k0piHvyAA9q4+IcMmv5eJAV3TZhp9iKfKsuPWJfv4xQ+vuZT\\ndROwzg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyA5QVVq\\neWJWbzNSYm95VkF4eno0ZHoyanJRcURBNWRUMHZPU3UrOUFXbXhjCmMvdUNJc1d4\\nWFdwQlllcTVnRlMyNEpKbDZWNVdSbGZJUWxwM2UzR1VQTTQKLS0tIFI1Q3lzRGNn\\nWFVsOHpzWWVwZDN6ZjNCUVFnRWpaQVR5NzhrNkwzd3h1RHcKjWi+o8t3BidyL0rj\\nPSTgohXltSQX/DzN7ddvbMUFRmhjjyf3PoQA/jHMGT779GhHgzN4h5G8lRbpARCw\\nyXpcXQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBmTHpM\\naStad1BhMW1EclF1ZDhId290TUZhVHRFTm9HbEh0ZlBVZ2dQMWdJCkVjT1JSVUJF\\nR2E5Q1dwYU1MN01KSFJENmtOK3lzUks1eVBxeFl2Z0ZkelUKLS0tIERSME1ScE1P\\nbFJaQmlyTW1BWUJFTDZTN2FPRy9scllmdlRQZWdKQUxvTWcK3BjBEe6Sr2TfGtc2\\nic9LBLc3ukchx0mx7bqT13S/jdkTMdwExrKM6kIMjIBPZXpv1i7UWcplDRO9FXFM\\nMqNBqw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBYTmRR\\naXZTL0g3RWhaYWdka1dWa3dFaWFkVC92ck9YNnIramlZSDc4NFZJCk1TTUM1R2lQ\\neHRSTlc5MmN1UzA4YVBCb1pTWXdzeVRVV1ZBWHZ0akRIdU0KLS0tIEhUOW44MVdZ\\ndEh6emVUNmd2aXpFZXhQRnkyN2NSbXNhYysrbW5aZVkyb3cKQW4BxCRFceLgHRVr\\nErRlZJ2UBnEJVCePxg8W/HMOs50vwEt4rcykPPM/UoLVCPGdbuujPe2apeiywX8h\\nJ0YWKA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBDWUFW\\nV1Y5dlFoclJUTnlvSTg4WU5iREx1cGk0WEJGajJxTjRCbGFKSkI4CjJZSUk4eUhQ\\nRzcxbVgrZDNLWTB1SkFjNmJNNUdQcnhCSjlsUXExQkZKdDAKLS0tIEJVRElsNWsz\\nOWpXcWdlSTdRbWZ1WkZyeEVhTERFTjdiU0t3TVZ2K25MQ1UKdSrUi1KWb9xCjiCh\\nfqFXyPPCVsPp3l78JrXagRPUtU97HgeC5RCxsccHuSX8NaPx5AxjZC2TRfBCSUAp\\nfl+u8Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBDakdn\\nU1YxT05COWpLcEtEak5ja3ZWOHZ6NXBTcGZxT3NlUFloMkk2eldjCklZLzVYVktv\\nSmw5SUNkQk9nOWlwMXFBMGp4Uk4rRHBhempocUcvWUZ4SDQKLS0tIE8yS0s2MVg0\\nbWY4WC9DaVVZUUFvM05aQytsMkdSOGxtV1F3MEdjcVk4NU0Kssx9puW+lZbJUEFA\\nDUogihE9PJXEVkOBs9DjnTvwn7YfffloFjIq+TkVhIomg+mk0coKTkMBagBDEVL9\\nt01JkQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBGWjRF\\nMXo5S0UxNzA4V3FheEdjKzB5WCtCL1cwMVBqNmlydkJ2dWprSkQwCmFZRmF4R3Rh\\na0RoeEZBRms5dGJpTC9vVTBBVnB1NjB2eGtZc1dRRXByTTAKLS0tIGd2eDhHWE1z\\nZFIvcXhtcEt5Q0lFUDU5R09hT3dZYnlqUzRmc1VHb0ZqaWsKwFqBVxaAynAUHi+m\\n9a8Oj2nwCA/up8xdUUYCCmRYB4/KXy3EzpNVJr0vKCOqcAaHq2CkvjyM8RoTxB9g\\nqNHvUw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBnNVp2\\nNURweXpLVDlRQjM5TytFVUVxOVZIOXhpTVVmWHlMNzlQL01sTldjCkZUT2p4SWNv\\nQVVNTS9iekM0R2ZnNTZLN21RWHM2M3liSmlUbFJMdU1HejQKLS0tIFFhQUNiZ1c2\\ndHpjUktLcXNJajFMem5OMEEweWtra3lPZkV6Sk1zZVdBNzQKHP1DsKD01fUWrgWs\\nja6SXCHfeDgCvdZ6QQ66s+znwJ2gATKaMrwwtvhbfp5us7yUQjN/Y5+EPw3SkBI4\\nB8gbAw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSAzYzNI\\nM0RSWFIxV2kwdmFWNWlHbW5MdEZZc2VnY2UwVEo0cDBqbUc4K1UwCjFLRXoxNllu\\nZW1WWFUxYmdpT2tEZUx4L29EU2szZWhBTjJVbVFwNXBqbmMKLS0tIDFhT2V5TWlG\\nclRXYllHYkp1TFdQRWlIaXp0eFlMdXVCVGkxTXA2NUQ2U0kKxyxZdkiJHp5BL//b\\nB0krlDAfIrnBvPswKdm6XLRotxdmeACs4EIk4k5fW3bcrLARDwUIMXo1616A7NVx\\njva7yQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBsRlVl\\nQWhVdEM4TDdENnFheG0yZ3ZwRlk3ZlptQkZHY2NtSEo2aXdaSG4wClhQWVNsWEJE\\nenJOMUhhRUJCRlo1ckJMaExFL2ZoNDFsRmpTWG1JN2lJY1kKLS0tIHhFeWxtTmtV\\nOENDZ2U3elhOZm5WV25EU3Z0djBnTnJLUXZ1UUszeHNJUFkKtu/OfnOhK2Cr/QNK\\nWXLwb0ncCoUiQUcmmErnAe9X4oOoZAXl/NthwTmQE0bQqaDGv1RW5ctyrzrmoHVw\\nBCX7ww==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t}\n\t\t],\n\t\t\"lastmodified\": \"2026-03-29T16:59:17Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:aUXcindoGtbf/hb4Ou5uZlbILNQ0L2OAn6tcxgncrkIp6b3JUhicl7Ta0ClTzjFmK8lGM44x+dZ5+NWresIVRzku/OwmVxip/Y2aUsjglf+zeg4GY9OGLAlZZ/VNAhGenx4K7TR7dzb1TT0ZwD96d1AMovc7mnwrF1hHpWkR10Y=,iv:Cc4AjsPNz4YPtPWlGa81/eiNgkmlf6ujmhIP08Flzvw=,tag:N/fWmSabVYRVVLPnQUl7Kg==,type:str]\",\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.11.0\"\n\t}\n}\n"; - -export default encryptedPayload; diff --git a/packages/infra/gen/env/src/generated-payloads/docs/test.ts b/packages/infra/gen/env/src/generated-payloads/docs/test.ts deleted file mode 100644 index 039a1114..00000000 --- a/packages/infra/gen/env/src/generated-payloads/docs/test.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// content-hash: bf55312ee08e99c86c8e7bcf58087cd33faf5ad04a8ab0f41210720e0610c39a -const encryptedPayload = "{\n\t\"POSTGRES_URL\": \"ENC[AES256_GCM,data:twFYzfnlk+8cE8vquNI7jm8=,iv:BWp+7PKJQ9aola6L+41R2eev4Y4i8Ao6zcqL+CjlQR8=,tag:RF5btKJ8bP9H6zTksv9o+w==,type:str]\",\n\t\"sops\": {\n\t\t\"age\": [\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZNktvREg3OXlnbmFGTkQx\\naXUyNTRTTEtWRzkzdWlmM0grNi9DQzlOMUUwCjNWZDZzQTg5TFY2MGdrWExEK3RF\\nMlUxMTNJd2dKbGdlYjFTQ0cvREplbTgKLS0tIHNlUDdURlY4WGFrdjJXYWltaGh0\\nVGdZV1d4eVc5bE9ZTnFwWm4yQUlKQUkK+OBdHI2KPHHFLh8l4jU5rmSQO/OnGdsF\\nEFfIk72ibdHITZNFNRyzMsYCWTbamjuy6WVJJAj9t8Lmv4f4Frx2GA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNZURmemIxUTRUbFpMWkx5\\nL1l5a0l1YXBkbTlPT3dWalMvcTlqR3FlT0VNCnkzbENKSmlrMDNIV2NjYmJJdzd4\\nRWRzY1dBQnhnNkFUNEVmNkFoWTRZVWsKLS0tIFRsWEhEanR4ZEVRREo2cGFEcU8w\\nQ28razVMVXFXZ0N4aU1GS3Z0cUh6a0UKX01ZGgqz+bGIAcX/NdeSqK9FNam8A24K\\ni+6ItitZWfrcAgDQggYSHUeXmEa+vNG+7PxBUs2JeYqTcjsbcrrVpA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpV3hQdllSaTcxc2MxSCtZ\\nOGpYSndBbFhpT292WmdMUnR0SlJaZmppREdBCmR2UkJvbEU2UjFwYm0vQ2hpUHRt\\nU0lIYlMxSGFpeWtkMUpKZUhPUk5XYzAKLS0tIGhpZVAyalQrQnJ1MVNvWVNteTdv\\neTF1cThCdWRxMU13ZXNNVlh4RFdDMU0KeSKz5tG3YxiapKDdc+kI6BcFoG1OiT/g\\nW/lf72mK6LHz8Sg/eN21RNNVmWo8FgtlT9z0lknuLhQLQIWeR28ceA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyB2QWNn\\najVrdUtuTjNiZmR5WHFDS0U5bXNqV21lbGxITm5KRncwWExKbWpvCjBGYmMvNHho\\nWDVCaFJpRGJ3aXk5dWpCaHZ3NTFMQ3VvUndiTTQ4VlVydTQKLS0tIC9tL0NCaU4w\\nZVNVNjVSZXQ2VWxRc1ZQK2JTUXFiUVI2N2ZlYTRvdkRaRWcKSLGCJzwCQ3/19g3m\\nTtzFq/S65eGMQ00SxeJ488wJGnx/NznLgctbgBRNRZK/8vcy6vdNGti+7XI1Q7pm\\ngupwlA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyA4WTFn\\nNVljUXRpckFVbytzOUFoR2ppTGM0U1FxTnorSU1YaUdNS1BTb1Y0CkhNalk4Mlc5\\nQ2xUc0VWT1l1WjNVSVRZMURyMGRpWW9HbDZURkRBcGs2YmMKLS0tIEJ5c29saXNO\\ndjBHTG5jWlhuVXBLVC9LWUkvUStFbG9Xa0lNbGplMjhnZDQKQhyjC1SekASJWNoI\\n7zMIoPFM75iS3mny9wTvTrCheKP/m8K98+oa4PKzBfz+cJmFvegUZcus2wJDm5uo\\nf8kUNA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBYa2lt\\nU042aHRBV1RjbEVrRG04ZWVwZVZ6UlpMcTZUTWtGUzBtdlBBeXpBCjJ0NnlEWkNY\\nTlVzdVJ0a1RoWVZrbUZFdXpUaTY3RFBJbVp3MDUySUQzVm8KLS0tIDgvLzdlZ3Zv\\nZG9aRHNNZDZid3BNdU56c25GUDd1cUVzSXVlZWZFOWcyVFkKcbxtv5La5ZTeisVU\\nhokQC9cUewbKDNo/FXOgCUiv6TCV7zyIk2W507e7vtpeDu4GrP5mAxYsBF3GDpGm\\nw/rxWA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyB0dXZz\\neUJ0V0VyTk5kbWsyT0FESlU0N0ZXLzNqL3R3bzhaTHlqdUpmTEFBCkFqWDNMU3Ru\\nS3FEWUkwVXZUYUgycHNwbFpDaFEyenNKZFZxMjlqOC9QSVkKLS0tIGoxVHRjd1JC\\nenc0M3RHTXEyemJWZ3JXcXdIYUlZRGxkRzhRNkFKTkl1em8KXlJuzs6Eacw3bleW\\nBJriiS6PoryZ/LtsVhOo08qe9o/lFwWTBrK44VdrOkGN13VL34OrTM0MJ0iMvsPY\\n7hzmtA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyAzdWFs\\nV05wRW1mSHpuMVgxWllEOG5WS2ZDcjdBMnJXQXJoTkx0b2pOWkVBCm9PNkQ3eWFs\\nSE9GOEpWNXdYbXBwNFJGMEt6ZTNzKzdvMXJkY29mOGwrM3cKLS0tIEVZekkzc21L\\ndWw2WmV3U2FZdG1LczRCM1M2b0JDb25GSGpVeFlQeVJ6STAK28wJNZ7+ni10blyu\\n3lNDFcRNdAXxK6064U0UOn7gpfFKlg1OKb1TrUt8vFQJ8T4PzM68CBoX0TK65Rh0\\nA8TNaQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyA1N1ZF\\nK1VqVlROMEdxZlNad0JCRTd1elJmNmlGTXNwQUZBMFRJN2VJM1hZCjhONkZqQVNP\\nOVgxOUNlL0YzZU5PVHhJMFBGb2VaNHZITnFDTzVQV1hVbHcKLS0tIDhuY3c3ZTNW\\nWnN5aHFlcXFZZThVUmhINmloR281KzB1TC9PdXhiTmRGZkUKuLmFPeByFidHgzls\\nHCemBmdYDAUt1Z7KN8A8mGhAOa62aQZNwEFED6FafCDYtuhbXDfLA4+VhnXBq+qA\\ng3fcAw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSA0K3JF\\nZWxUWCtPdmd1dE9FWW5MZjRsbUw5V2F2L283STJCQXBaaUo2Y3lzCnRpbmxmTjZr\\nQStQcXQyUEVKSTIybGk2N2VrekRhRU9SVUhCZlo0b2RTVGMKLS0tIHY0UTQwdlhM\\nR3dnRk82WWlVVTdNUzNRaXRUbUZnWFFDQ3FQMml1ZVpJdEkKC2F80ZBTXsANDIOU\\nu9jlAgIU8oSWBzVLmDGJn6SQZnO0oQd6sAr92wQ5BkIDBgHyHd3A8m1WgKE8aPH8\\nXW3ljQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSAzNDIx\\nTmVKVG15NGh6LzRpcTlxUnJtYmpidW1WYzlQY2pMMzNMMlhGR1dJCjhvNE9pR3Jp\\nTDQwWVFoRUFJbHcwWGhZYlpUR0xWSEZsY3U1SERzSzkxcUUKLS0tIGszNFM3dmxM\\nQm1nT3N0V05SOGk0NmFxSDNhYkFPbExqRVpnMHlyYy91bUUKYgrSkkHz1MI+ISco\\nBhOOFX23LddPoEENvDCmgnqvZ79M6T2qREiJLrI2AejQBaevsHbyGZxDY5ns3CWQ\\ny3gslw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBvdFhs\\naStOM3Q4WWlHYVZia2ZjTysxOW80M2FRT1FpQjhGNnVYQU1ENndjClpaNkVaamN0\\nVmphTkp2VmF3MHJwSCs1ZWFQVlY3eklDRkRBcDJiQXduM0UKLS0tIDYySlAvdG9E\\nL2FxV1U3ZVM5UWJPeWlIV2RqZldtMHh2ZUdhMXFad1BEcFEK7XslNIbTy9YLalhI\\nOUcLYVF+J+b4LKdYu8MPQNAi4jD5EcARn5k+7tshUQfSbRg1nNi17ARPLhUQx0fG\\nMlX2MQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSArbkla\\nZE1aNkhMcEhGVXUvTzZTbm56VUlCazI2bnFzTFpud2djanVoWXhnCjE1bmtDU3g4\\nLy94NWF3ZkZkRFJadU55cmlWWGJkc3lXcjdZMlhMendtVUkKLS0tIGpoOUt3Yzkx\\nMHVDUm5kLytqcGEvaWY1ME5NTUxodzBQMEthc0ZYaGpHWkkKorRoCtDP4r/5CT4y\\ntX2KoOvdjDhVxzWQSXm3F9531CBepvUc0RHm8pKdfhvLCZohw8tQOXWALUukEnK+\\nIl5GgA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBoZzRq\\nUG9sK0lmK01aRkpBVjNxc1c1TmovYXRaUnZTQVhFeVlocTROUlJzCm1CQTFsUVd2\\nbHFqalVMNE02Y1RiY1M1bmpZOEpSR1UwUjZjWWZ1K3QvSVkKLS0tIGZnOTdBblpI\\ncUF5RDl6b2wvVHdaSnNBMG8yKzFkWk13YUJjYmtaalBSdGMKzSqLdg8sEYBjpKgx\\nrevNW+k2/MfUo3sapVPR+N3CGfprFO8itbj8f0syHlGyTe8DJeENa5TOHifYmiKv\\nrcCnOg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBLaXBs\\nSFB6YkRMSVR0bzdqZXoxa1puOUtabUxOMWRHaEZodVRtaUJjOEdNCk0vcnVleGs3\\nSCtBNmxhdlRZUHNtZ3hqSStDYVQyR2NtS2xGTVJnZmpiZGcKLS0tIDEvL2dCUFFh\\naUFPbEVPMElpK0FXVzB5OW9zN21YT0g1dkV0c3d1b3UvaXcKoHVcKJYfrI7DHKDP\\nNgL+Jsc/AaTSEkeeHuY6qKIMOyBHjGJ8zepr0Hu/q6GxjkXI8C65OueBsC70btpc\\n6lYl4Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBEYkIv\\nVjRGcEhYNkVVSkg2UjQrMzQ1UWNuQ29MNGwrSW1TbWpWM1NLMm1vCklJdFRmczR4\\nNXliZisxZHBBanVpTnhsYjlRNlNHUWFPdUd3NXJhWFNEZDAKLS0tIG9mUCtsc1pW\\ncjcvRTFKKzNMNWJYUUdRVWNHajZyNTBCZ0JLUERBS3dQR1UKL99r0Xw2E3ZQaoo4\\nwBRXye55XCVclV3QiA9iH9kmX2IEG3wpdRx9QfY97fDnpHaFUEQ8GSrKhAJJSOmU\\nz5wYTA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t}\n\t\t],\n\t\t\"lastmodified\": \"2026-04-11T12:22:31Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:RnJH6NLBat+tHcrQL8m1H5qeguY+ENx+nNlnhHWQzyiopYBeVhsyqVGRbIFGFRXSU16w0IgBuUN1ewFWsqLL+8zUXP4dDXAGysnyA3RyQ/wVzhV0HAD3TLHck9FEtXK8+Ike5C9YdbX1xN+hIkW/pBMGSHGJgb3YJoSOeJrjyhg=,iv:T20iUTtSYasptJkt3oo9uzaagw5nqtLfbnE77HBhfhw=,tag:gHZrSEsH2/YcIPj+Jrx6Eg==,type:str]\",\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.11.0\"\n\t}\n}\n"; - -export default encryptedPayload; diff --git a/packages/infra/gen/env/src/generated-payloads/registry.ts b/packages/infra/gen/env/src/generated-payloads/registry.ts deleted file mode 100644 index e60be731..00000000 --- a/packages/infra/gen/env/src/generated-payloads/registry.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -const payloadLoaders: Record Promise>> = { - "docs": { - "dev": async () => (await import("./docs/dev")).default, - "shared": async () => (await import("./docs/shared")).default, - "test": async () => (await import("./docs/test")).default, - }, - "stackpanel-go": { - "dev": async () => (await import("./stackpanel-go/dev")).default, - }, - "web": { - "dev": async () => (await import("./web/dev")).default, - "prod": async () => (await import("./web/prod")).default, - "staging": async () => (await import("./web/staging")).default, - }, -}; - -export async function loadGeneratedPayload(app: string, env: string): Promise { - const appLoaders = payloadLoaders[app]; - if (!appLoaders) return null; - const loader = appLoaders[env]; - if (!loader) return null; - return loader(); -} diff --git a/packages/infra/gen/env/src/generated-payloads/stackpanel-go/dev.ts b/packages/infra/gen/env/src/generated-payloads/stackpanel-go/dev.ts deleted file mode 100644 index aa1df1f0..00000000 --- a/packages/infra/gen/env/src/generated-payloads/stackpanel-go/dev.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// content-hash: b7a46897290b06845482f743eb65898a11b931303eb91465388f24000f0f4d5d -const encryptedPayload = "{\n\t\"STACKPANEL_TEST_PAIRING_TOKEN\": \"ENC[AES256_GCM,data:+jntqZF4/ME=,iv:1iIXLRJ8e/PruBAZT/SoIAqk1boepq5aphdPDWxrjyI=,tag:FnVRSa1bsRYrVo4UCgW5Cw==,type:str]\",\n\t\"sops\": {\n\t\t\"age\": [\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4ZUpFZ1JoaVVUcndkVlpj\\nd2V2a1JIZVF5cGpZQ2ZqTHAwOWQwNlJWU1NFCkhXUVJWYmFnSU4zOXc1YmVTNVo5\\nN1NIV2RyNEhrY2N4R1A1RlFpTVVjMWcKLS0tIGNTVG5PSDVOSzRPUUVjSUdxZ2tB\\nVmkyeEJTN2NzaExBZURCN2FwOGI3d1UKX/6dSoQNnpilYmDZ++wfQM6+cbdmmF12\\nk1QroEzumx5TinDSsEZ6hun4q/2Wb/b7e3m/a/VAHli6FPqL4N8g1Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzMmw2dU9Sa2lFenJWQWlM\\nMUozRlltQUxBYUhJMUpUeXlKNzR4L3hOV3lNCm5aN2p0K0dYa1ZnRElVRER3U0o1\\ncTV3TWl2Uk1VWTZJaTBnVzZadXhlWWcKLS0tIDVxeDZvY3g4L2xNcG1jTTdmWXBw\\naTNiMS9LUDBsKzcwT2lFeUViWW9DbVUKnmbHc4PiRjTH7Wp0MsLvatmktqTjsd1L\\nTlKZrjN7hWGTE2bw3/Z9RPq3jip2QGrnhgJRx2FWFJZrOtzyUPOKVw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwOEUxbzRzOWZMZG9VdTZY\\nb2FvcklWQXdobklKYU5McTZZaE5zNndBelIwCnNTQVVYSkF3a2t5K2J4ckQzTWZS\\nblM1SGtjOVVUL2NjSnZsZGZhVzhGdUkKLS0tIFJSMGc1UVYza0p4YWw1eFI5cnZq\\nd0hvMXpmUGJMelEvUk5KcHJQSndJVzAKRfXYQLYzVbiEpiTTkJi9mZ+5BKLKaU8t\\npxVNptPAeuHRMNRmFuJuMre86S7fJDwr7qmhVM9pFa8n/gHFrUa6Vw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBUZnZB\\nelZnS0NqdDczbGFVMHNIWGVaMm5JMWJ4YzhPNW5vVDVpamJieW1zCk14MUNNM0s4\\ndFVmQTlqL0d0T2F2bURuSHZUWUZEYi8zSkZNVmsrVzUyTUkKLS0tIFErL1p2UGhY\\nUjI5d29uaTFtSGxMSFpUcUdReWUrVmRIQ21NUk85eXBud2MKSZlvq35Sk/KqCEiM\\nDjmabJ70oZSb38Cx1QDg1tQpmyRLVoxO2zczQIGe+QJS40umFc3v/6n/yUVwFOYa\\nwJBfUA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBwYlVn\\nWW1qK2FidmVocHVmeldrWnFxOGpNM3ZGZEhKSmhkQ3hycGVoNG13CnNHaG5OY0ZV\\ndDhwakg1d3FZaTdPcHNyN0NKL1lDSnVlclRjTzdkWjI4RlkKLS0tIHpIbC9OeEVt\\neURuSzBCUUp3SlROUjhobFJMVDFKY3doMTV5Q3R5WmJObHcKX6rXIAoH6VpnE3NQ\\nfrHMRkl0mi6sRMNngEdAq9WYlpQ7wkz4PXRzKHzCA3jEYfgWza8cllOGs1ykxRN0\\n25UB4g==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSA1UGQx\\nOTA1N0NZMG52aytkMmExOXZmWUJXaDRZOUlVZHJxc0FPbVVMd0VZCnRsaGc5d2Fu\\nUXBJOElIRFJabVdDL20rTVVCQkhlS1lWMWFISzVBYU9KdDAKLS0tIHNIeGhENlBC\\nNm42aGtCWVEvNDFldG9TekZkRGphQm92UmlFaHpMZGlkUm8KIc9WdVPjICyYS5d9\\nQoTEEPCC9f6FMvNTSZ3wbyR4YnQSyGeOXDQqoOtyPXWPZRJLAY0r3BWN1gFCLTMi\\nxOP65w==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBRcnNZ\\nRElCeitMVy93Z3FBRnVTN0RnVmFNM3pTcWJieC8xSEZJOVczQWxnCnBKY3NqTjFy\\nVDVXMmtud2lJSWdSNTFDUEVhYXZyQlQranh1eGZ3SUdGV1EKLS0tIDFaVVZ1YVlz\\nYUJjRGUxWXZEWHM1U1RLU3lRcDlESzMxS2IxQUhETDRpQXcKmWF3G6U7GJm7D7Nm\\nAiWIaIeEKTwxYy4XYdC5QM5kXM1CKshgHQzC9JRGxYJ2YvBfm1PkK/26osiq1bUp\\n7RpmJA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBRYjY1\\nYmRNTjU1dnZicXhNYnBFYVdjdmZFQmhuWmczVWVlZWVXRGFGR1NvCnlNWVZORm92\\nOEhFbTltcjRPMzZlNzN1TWhRM1UybTBtODJmY0ZHeVhiQjgKLS0tIEt6d09oY3Bj\\nazJSbTlNeTA1di84OGFZYlIrTE9SMXBxV0lJbzBDbGRuQU0KGs9eniNY3wv1V5Ay\\nPgzv2o12Pj1s/OySi4zkKiiC3Vp+nM1LSut6HZbJ+sFEqKIPwO5pLvBBlC+SnPBA\\nJRjW+Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBtb2xL\\nVkZuVjZUS1J0NnVqcTNpRHBZaUYvb042R0U5YW0vS0dzeWlybXhFClFnOUhBVVR0\\nQ21qSVE3RTVvYVJUNGU1TDBxcmlCTi9iY1V4MkNVd09DU0UKLS0tIFgwUXRVRUdL\\nSTFzT2RQTHd6aytqVllCVmtFMit6eVY2WGI4VEtkYy9DbG8KvMXw2vlgmAfm5RDS\\nug7jaRKsjdsT47EByRGsxLS9FukZEHHwb+aHFY9264//KpHpxpdKeNw+Snkq8O4A\\nO1bmZg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSA2MkxL\\nNEQyenlnTlMyUDlRTHpnQWJhLzJVUXMwVGhxeFowd1d1Y0VDU1U4CnE2NEFNMno2\\nOW1WdXl1TE1BaWpjdjhuWkN0OEhyVjJudm95TVU2eHUveDAKLS0tIGpPRmJOeEtj\\nOGJuSUR2NjM4RVFQS1NJb3R1YlRSMlVobnQwN0xLVHg3MDgKMWHjtzErXNfWHxqW\\nbQCSVtIof0QXZABy5/31+xX1Bad0B2d67W1cZHRBE6hxqmxtEbMZ/z7xDkn6DKjL\\ngA+DYg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBqcU1k\\nUXBEVXc4OER5dXQ5aHEvdEEvKzBoOGNSRXFyR3FMdlhwN0xtdjJRCjlQcGhmRlJF\\nUkpZc092WWY5L1NUNHEyTWRuOUJEOGhuMUV3QjdTSFVCQ0UKLS0tIHl3SGFHWmpj\\neFV5V3VnNHNZWnEvVlFpQzhYYUxNdG5LcDFic1FKdE83aTQKh2c9i4+vwMRYogkt\\nWJpRWStvRDWHiT6J4ki8WAKh03T7pMZnSP/GeeKr4sEHQdFkmJ64mlnKea33jmqk\\nNYwdCg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBVbTFH\\naSszYldwdU9JMWdISGkxS2RxaFE1eS8xclZNR1pNdUFrdnhiMzNNCmNDUEhiamMz\\nR29NeVE4WWp2cXEwZlhFNWJyMU91YVpLZW1sWjl5UkhUR1EKLS0tIEdpTEVGUXJa\\nSU1OeVV1a1VwV1VXNHJlNzRKMVVYQSthaHRKcjRscUZOdFUKp2mrqvmtYJJIkBvI\\nCBfJH9okY8NLpZUbqz2SeqvqzUOi9tVHn7/VRFWmgCLJt50c0n3GxEP1NK8KIx6F\\nOvnjoA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBGdkp0\\nZEU4NEtqNlBDTGV6UHVoZkREdldhcWRPT1NOMHZDc05ndG5ZMWo0Ckc1KzNJM1Mz\\ncEhhWmFBTThzNTdMWGdDZCt6b1NuTnlwWHFNTmZFdFdvekUKLS0tIDhia2lHYVFq\\nRkpadFExbmdlamJLQmlXVGFpdWVtSEY2S0p2Qzdyd3hNUFUKH5xWqXFTTigTY3Hn\\nLFCAS9K1hoNYM9KZlEoLQjZJt3+s5UE5q5U23+CIBgDprMwKkEwSXWssCPgeOePS\\n2l5sRw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBxOXpt\\neWdmeFZnSXJSc3hnUG5zTzk5UzNQVU5icW12Z1prQXZXUDFLaTFNCnNQZFgvdEFQ\\nOGRsdEtHZEhvKzNSNWVBRFhaUHV3bVgrcTI3UGdVUzg1LzQKLS0tIGhyZnBTY0pw\\nV3ZJK3BhVHQ3N2tOWm5LOVpUM25JYitySmFuOHdqaU9TSUEK11Sb11vVxxAyMvU1\\nYZVK8jLPXAJkYssPkFY5bFB4hWdH/wtZMlkPc+V8x9NeAhhQK62fGdMASQk4qj1T\\nRLnEZw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSB5ZXg2\\ndFNXMmhBNE9Ed3dxZVNXblc5b05uM0QyN0dWUVlyUVp6NnJoT2x3CmNydk03bDMw\\nSjZRcXJaK3BjUTdBSkVhbW5FUHJFR2E3SXNrZjFUWUdEOWcKLS0tIDZkYWxLVWZ4\\nTDVaVkNjREZxNHVtR2Z4MW55bTZvZWN6d2VCeUhFb0x6UXMKi2PnKMs+YN20JcjL\\nZFLVQdh0vx2Skn7N8rUfp/9/8zspCSvmofgbIbl1qe+GwMabjo4REUu4Budpcy9m\\nuj0c+Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyAxSCtS\\nRjhGY2pCaUhXYnA1OGZ6QzBvVjFIclFNWE1BTVRjb1ZmajdXYXh3ClNQcVJob25T\\nZkxZZ0RFY2pzdm4zSWE4R2d3SmJYRGYyTDg3a3Z5aTdtNHcKLS0tIE1yTU9zdEVT\\nd3EzemxmZ01EUUpGMGVYRDBqcE9jb2pSVFdXdzNqc0xHVGcKCdFNUd1z+4DS3quq\\nLAnkqc/Y8YFtBAQFm5aoKA+pYjzHy/9Ab8zAMLERqAMkjT7DGLq6xRBUKDjZnDNf\\nZ6112w==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t}\n\t\t],\n\t\t\"lastmodified\": \"2026-03-29T16:59:17Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:2SA4he/xxhi1Obe2Avx3nqhLUzQ1Jitbfb1LbhFwWYNrfWDGrSrTA7a23SKaDE3bb7ViEBOEH9m7Mikj3sozT9oBBFBhMZWpXclKPaPSwlZTaaUMB+GD2E9ywfevhbWCDXhpL1Sb1YeCiyItZuP/HNlPhu8UljekF7VelGae7Ns=,iv:e21k2UpjrW15G55X7cDV53LJlB1yOK68Q1AqypzMK8w=,tag:OiMZQ03vJaDCR4wlnuOhuw==,type:str]\",\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.11.0\"\n\t}\n}\n"; - -export default encryptedPayload; diff --git a/packages/infra/gen/env/src/generated-payloads/web/dev.ts b/packages/infra/gen/env/src/generated-payloads/web/dev.ts deleted file mode 100644 index 6cb8b9bb..00000000 --- a/packages/infra/gen/env/src/generated-payloads/web/dev.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// content-hash: 7c6ee9a16dc07d00e2cdc1409d69f78c442c33866cab495267bf8e72ede1084d -const encryptedPayload = "{\n\t\"BETTER_AUTH_SECRET\": \"\",\n\t\"BETTER_AUTH_URL\": \"\",\n\t\"CORS_ORIGIN\": \"\",\n\t\"POLAR_ACCESS_TOKEN\": \"\",\n\t\"POLAR_SUCCESS_URL\": \"\",\n\t\"POSTGRES_URL\": \"ENC[AES256_GCM,data:S7l+ZbSj/eDMK989xM9HHGM=,iv:u3A9hDQ+b1JpJAPCxKmP12QOwTAm+61clFxKT273H9Q=,tag:scUVLtw80878Dx8542KstA==,type:str]\",\n\t\"sops\": {\n\t\t\"age\": [\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArdlJOamxYMWlieUlka1VU\\nUGdnKzg1ZnVEMS80Z2F4STcyZG1XMlUzYWhrCjdhMGIvZkpXMWlUQnp1UmZIOHhB\\nQng1d09lZTVwbEZBelg0TTVUSDhwcUEKLS0tIFVJdGxodDVXQnRac2prSzNaeFRv\\nVHJpUExMc1hNbGpHRG1HRHR1eElMOEkKcgDoRSe4UTQoQROL1ECr9j1wMqZ/MaRE\\nq5uo+amY3/Oc3grKt0NvkD71O4KkgO2bX19ZGkJOZrqljmH0sTTA0A==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjMEdOY1QzcXJkWXl5d2Vl\\nS2kwN3IyRW1vb0NUaEs3R2w3N1VBR2RUeTM0CmdLMi9uS2ZLRlh6ZG9pMDc3NHB0\\na3pnU3pFaEJnenhsTlczaU05RS9SaFUKLS0tIGdsMzM4LytuTjE3NTUrVXBlT1lD\\nbXlzYlpIblYveXNpYVdra0JTWURLb0UKi7eDVZOwGm6B1nylhn+3577ee+qTtoyd\\n3D9qaqLsu1Z6bKDOlxS+FFH7xtoNq3+VVHD3AKdLcMTxVK6iNhoXaw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHQlEraWtnQitIZ2pjTlpt\\nTXVvR0dwWC80Z1BSejhvOEN2RnlzQWtMSWxjCmVlcjVzYk4ydlFnYmFxZGg2cEd5\\ncDJLRWJTSjE4VDZNaHNnQyt2M1ZnM1UKLS0tIDNnaXFXV21LQXRMRW9SZURPRStB\\nKzNRZTJseDBndXhGWUduZ0hhVDd4cFEKmVXGR4oeRie+SXzo8wQPLp27KAQwmfY/\\n03r81QzcvnJnTFNbtTso8edg7LmZrmAhokMIaMquonzJykmX3CUNwg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBWVVhW\\nZHR5WGV2QlU2M2ZubEE1em5QU2xRS0U2b2JMVUxLbWNuSzVwWm1JCmNJU3o4L01n\\nKzdiWXdVUHFCallNVnBwbEtzdHRNNk0wazZjOFc4Vk9wRlUKLS0tIHU1V0ZvMXk4\\nVTJRZUxyTFhNRVBGN0RTM1gwMDd2aThKSUZYZnpaNVdiaVEK3IU9oMTrohyjaUsd\\nHvYCIcBQI8fg9wqTKygsTMOkao/af3pnmQh+gnFNLsZ4Q/DmeThGlbKKd7XPOpzg\\ncoF/Ng==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBYRERk\\nN1lFUHQwOEpybEYvbmRLNFcwOVplbHdxcWFEMkFEUUt5QW5LcmxNCk5uQXJ1VGxD\\nV3Zvc0d1eU5adTk0S3c1UVZHVC9ldThhWVN3aVpCdkgzOGsKLS0tIEh1VlNQVHAz\\nbzJkTk1DakZMOHBMemtRSmhic0pVcEpLUlc1Z0wrMTZWUEkKNlE2qwvyIRsN9MeQ\\nckZTZ6BbRB9xrj5kJGh5W0GzjLt2ivV3dpo8ShT96AEpDOt7fVFjxXEJr1LgVOJh\\n3m0ybA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBKclVh\\ndVJCMERJZzhQZUF4bllzd2gvR3hFQ3dJRlRESVMzNE4vZEl4L0QwClNVM1NjOC9s\\nbWNmbGtLeEZqNEkwS0JadE9lRitUbXJ2Nks5Y1laeTZ3N2cKLS0tIEdOTjI5Rlpj\\nVDhWdGFtdTZUZVM2OWpsWENFNmNLS0hvUU9yeWE3QU5sd1UK9QGvCbScHTAsXM82\\nktzHv23HMeySzVTszj6QaGBSZUr5Ja383ZJuLoXrgcAgF2T8M1oAWXAS1lzynk+T\\nASRqNg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyAyRzZ1\\nMFBLanlTWWFIanJxZUhoYUh3VHpGNk5pNFdtVGQ3cGZQZ25Db1ZrCnYyQ3MxMkdi\\nWGRtUitpZXFEUlI1c0tCVDJzVmFueVpqUnV0WVdwbTIya00KLS0tIEswSHdjcEgw\\nSXpXUVczVmtOSjIrV2dHamFpRkFMcDMvZSt4Yml6YWdDUjAKJEh4CHJV09Gug21T\\nJ5Qr7c8ldIF/cLh+m7lXfi89Vdi9dyHateKW+QaQGLVLoFOUGcVP+P3xbaQiw+AM\\njHMDOg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBjVDNN\\nRjdxRUNnTnpsWE1aZDBaakV0TlAxZlphOWYwTjZ0UTlIaEQwbjJZCkRTekhyZU1j\\nK3EzTC9TazhvcDRML1A4TkRMaHBsN3ZJaEpuaEZBRTN5NDQKLS0tIFc4YlRnZFRP\\nbmVac1NJQk9FOEVkVjZmKys1SkxQM1M5SnJtTGdDN3pScXcK1FF1D9vq7L9nGUrJ\\nIfklrvaiD32f4Ymg/L0sZaHPPHNsuyozBL681bJmid/y+B+Nd68Cmsn8+lb6WzvM\\nM+SS6w==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyA3OHZx\\nVmc3bHRNS1VYZHJHWWIwbDNwYjlIWjNyY0FWN3lTc2I2ZTcwc1dFCm5UOTB3VXQw\\ndU1tT3RTUEtOS2k4ZnorOEtHZ3AvNk5zUnJvZStQdFlHUGsKLS0tIElLVnNrR3VT\\nTEVZVE90T3BaMVhyY09ZclJjMXgvbXhzd0p2V0pTaDFiMGMKA0tkWyI3rRMxRUr3\\ng1zJS/Kjk5n32U2l0vqvsod5eKk8Q2/o0zTQXEnrdxNwzh9KGae1HgbFHFRBuyc9\\nIBptxQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBua05k\\nMDBuUmp6T25qNXllZzVyMWFWVEEzWkZna0plZVlBcXNFdjcvVmdRCmp5em81UWhn\\nc21mOEI3TzRaR216N1lSU1lsbTB6cDhxWGQwT3lqQWFTdkUKLS0tIGRnTE1qVFlD\\nN0JoeXFDNkJOUGhXcDloSkRGNVo3NjRpNlp3TkplU2RRUmMKbOuGibPirqSSEPD9\\nNuw0oIp/yBZ9kx5z6CgPp6ollI5devOA6xlFi4ZLp0BFOcZ5f5kIzLeJkGcoe7Jq\\nPqyDQQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBOZ1Rt\\naGo1eUVGMElkVkg1S0lRY1MvUEJoK3RzajJhOVFQQ0x1T2U4N21NCjFwZXlsYmtV\\ndUdVeXQ2MHRKVXJnUG1NOFZXVHRnOS9VVzh2cHQ1NGdIQmsKLS0tIHhZSGtYUjBz\\ndTZ3Q1BGaEFyUmR3c0Z0RFZBWHJaV1VjQm1sb04xcEtLSVkK/95dOE4I+LNkF6rI\\nkSvvU3fEJtb1qFqmFhJIoiYwFDTF2Yl7qBGInMN9YMLYL6HTD5KS/xU/cgPURlAh\\nyts9QA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBycFFy\\nb1FJTUM4TUpKbUJsbjV0SDFEWjNJNGhMa2lmZFVRNEVvT0RkQm5rCnlTNWU3c0ht\\nUGdxYXkwdDFsNzA0ZDZIcFFHWnNCcXJsT0JJWFB3dGVNM0EKLS0tIGFCck85YnNi\\nb0NUYlJiSFgwQzhVYWRBZFlpd2dQUlhsWXBlUElnOFJHY2MK25rj2x1ZrOWlDRDg\\nOEbAx696omkQE6L5lKB9qBcv8xsepeLuHRaDOxBExZS6Eq6KmWvT2GkBQJR7zMZP\\nhuGx2g==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSBHbW9q\\nV1J3d3R0UWlGNmw1b0FRdHdBWG1TS1FrOFA4VkZLZkVZOHBvUWl3ClQ3ZlRxVnZS\\nU1hzNFVpTng4ZDI2N1FLdXFvMVZpaGVCUmJOVWZmdW9Ud3MKLS0tIDREWUhKZlNO\\ncG9ITGNDTDVESXBnck0yeFRqdDRxa3NaRkNvMnZYM3UzU2sKO4cbSeB5dEjTuRfJ\\n8KR+EGuKHo7BvU2VqiFnVgqy0QGDZC0HPOGbEVIDB6vkZoSEnat/lltZuLRhawRx\\n5sqa6g==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBDV3Vw\\neEZlbnpSQ0tVWVVVV084UWhYSjhHK2JLVG9obG5wVHRacDJ3WkNjCmlrVDFFamtB\\ncUxoSWdEQUtQbURYWUErVmRXKzhxWjZod0pGbWZ5Rmg1NEkKLS0tIGFDaEVXUmww\\nUkZ0QUtGbTZnZFdkelJFYUJJWHQzcDNHWFppbTd1WWtSR0EKJ2D4nUtP1rIPE+Jd\\nq9njIK1BsGWhGuh98FbYFa3c3kg1fdBRPbDYcIIus/vY3cMBFmnRipu5D15pPIyn\\nFezf+Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBYb3Y5\\nNlMyd2NJd21oZ3BrRjI4MmNDTjdTSEhsWjhzUmRUdGZSd2w2Z0ZRClU0bkhSNmhv\\nOTVzSGMzY09uVUp6dks1ZGNod0kySU1ERlNkeWtCei93Mk0KLS0tIHp4RjdMdUN1\\nekk0dEh4UWJpelNnSTJ3cUFFYVpBK3Z4U1RDQjkvakttVDAKkDWkj50Y+0I+jw5I\\n0NU7GmqMvzOQjnc6RO0nsoWGp9F+UIycrQ1oF9yahJP2WpCqtbLWhh9x6LC3ux1o\\nPe0qRg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyA5YmdV\\nRVFjMFBuMUVoWFlxMzVvMHpDMzVOaTlibkloNStLWnhUNHNocUdFCnFETTlvc1o2\\nSkhRQU1rZDVyRWVRa285VlZ4SFpsWkxaQ3pQeGtzTmlQOG8KLS0tIEcwbndhMUN5\\nNHZoOVAveDJXSVRoWDd3c3RxbEtKa1JjUkFTelk3NW9IODAKHC+mNV3dopkoTnuo\\n9N3O4ZyRDKOJtvcmsnvFOCpIPBy6nZ1eP/eG0xJfC2yrxdy6ZtPn2osMqr+N/eVN\\nhR8qQg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t}\n\t\t],\n\t\t\"lastmodified\": \"2026-04-11T12:22:31Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:z20c5WwjZmnG0pTIJ2KCDtlAx9QbFVWK4NUYu4dc+MdeuQnNNmXzKVctvre0GrvhUz7hQpqDn3SBhygGIKvni+7nZvNLmRLgDtFBUlm2M7RDejC0B1no0q+4Tqa2M1op76lY3wSm+3McCTkxgb0V92PRHO7lwmKudgcnTvKEwgg=,iv:zrkadH85J2pFOKX8LLuP6fSdx/XF4QhxG66QPHOxaqg=,tag:R4j12on9tadjHPzViHJdLQ==,type:str]\",\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.11.0\"\n\t}\n}\n"; - -export default encryptedPayload; diff --git a/packages/infra/gen/env/src/generated-payloads/web/prod.ts b/packages/infra/gen/env/src/generated-payloads/web/prod.ts deleted file mode 100644 index 04f34121..00000000 --- a/packages/infra/gen/env/src/generated-payloads/web/prod.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// content-hash: 7c6ee9a16dc07d00e2cdc1409d69f78c442c33866cab495267bf8e72ede1084d -const encryptedPayload = "{\n\t\"BETTER_AUTH_SECRET\": \"\",\n\t\"BETTER_AUTH_URL\": \"\",\n\t\"CORS_ORIGIN\": \"\",\n\t\"POLAR_ACCESS_TOKEN\": \"\",\n\t\"POLAR_SUCCESS_URL\": \"\",\n\t\"POSTGRES_URL\": \"ENC[AES256_GCM,data:mUcqnmQs3+gTFczQU1ZkYe4=,iv:0OKDNAN+IQps5OvQTMi7Pb6LxkzH7YhrNX23ETzT1Vo=,tag:8wDJVhIw0K/y8nVidu7rLg==,type:str]\",\n\t\"sops\": {\n\t\t\"age\": [\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4Q3BuUW5qeHNSWFl3d3RO\\nbmo0MmZrTGhVZk9BZW93cVpDNTlQRytwM3pBCktZU2puUHFiK0Fzd0JmV2syMEk1\\nZnVERHBuaGJnUDJPbmxWdVVFbGlpeTgKLS0tIEdQQ0NOY3BiMmtGSnJZcExiaC9p\\nb1hiRnZUa0JJZW10V0tXdlhVQ1UvdUEKtMx8fdRNkHAhuIWoRppuugO4aYGtGLuS\\nGLlBJq8EGSyYwgtnhfzjkblqR86N6CoF9XwGjdA3a+kAYdgRnevTLw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXUFZJMWxSclNNaXdKZ2tk\\nQzNza001R2RuZ044d2E2UEZnMzJxcmIrSG00CmEwL3BCKzJDbHhDQm4yQ2IyckZX\\nbEJCTkRIemJwMWFpVUdSSlJxb1N4NkUKLS0tIDB4TXkwWlNVZmo1bm5kZVU4bDV6\\nV1NQSjVYaVZBcmhMNng1Q1pJSnFyMDAK7+5+msyt2UWcp83NBCZ397PDxQzcerLG\\nkE1gyjDTl2ue7wiyL3waBonvWo2UdtYbiJX4L7wYL8aXCL0gv3AJ/Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnemZPUHVXOWZKT0xISkxQ\\na3lLcE1BKzEvZFQwRVVMUE5Dd1lONjMvVEFrCmFnUmp5WVRUZlRsRDJQT21OWjZM\\nNzJUbnMxeitQZU1CazFta082aDVRNHcKLS0tIHFpQ2Q2Y01TMUtuSXNUMWk5K1Q5\\nWndTcWE3dEgydDFBMFZXQkFIRmF3Z2cKXsfDifgz8eccFcv7KLaeK8zyzl9DnJxL\\nCPKsejPiNaZqQAuucMuO84BRlMH2SYbGiAWvTA7fK5XsneqHyhUyDQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyBDQXBD\\nOWliazliU3duYnZvK1p5Vk1mQlh1ZUw1b0Jzc21XcUZ5UUFPUkY4ClR5Z2JkUlZ4\\nZ01tMElyaG9qTXdlbGQ1UG0vcVhPSjBLa2lQeStBc1pVdjAKLS0tIGdCYi8xbi9a\\nSGtJZEpkcVpJOVNzKy9LMlZkQmQrOHVURWpjTFFUN250UnMK/svK7Tzy7sQhzz9K\\nwLwqbR7094Yiwflr9n+9iqhc6mPbUH/q4x/Efxl/q0FuCdueKWyaiS2lZ3wZHojk\\nqcThfQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyB0N3pB\\nY1U2eDYrVmNuYzdoQ3lINEdna2pBdVAxL2dIRlFiYk9LSThDWXdzCkZ1RnRFZkJZ\\nQ3BpYVUwNXBOZC9hSHh0NDNScVZGSzZQZlRjUUhWUlRuT00KLS0tIFl1dTFVNmJh\\nTFMva2gxOEM5Y3NGS2J3VFVQNk5pNmwwdTE3ZWpJRXBLZ1UKhRhP9WOjhaw/m52W\\n0qUJD4lJTCc1Vo6M4DlI0v1wOyyeiz3WF+khZXvJFamvEZGyskvO2sVqmodkL1QN\\nZby01w==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSAxWkhX\\nVXJWSE03UUh0Y01OeEl6NFdGM25RTnRMOTRwWUVGNzloMWlmcDNNClkxK2dlaWFH\\nc01tMkhiQ0xQSGUxN0ZOdGhyMU9nZ1dzOEZBcGN0Q0xQaWMKLS0tIGE3a2R4b2dq\\nK1d4TC81ODBsU2UybVlhenN6OXczTWZnWG1sdU5tdi9xUG8K6qL32ESjt/fDF8pG\\n40oHUd70t2W+usTqcssRpvcDNWyMKAm4fWL98L2IpRGYsVX5DFPJlIC6B4kzS33O\\nsSyqIA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBIVXBS\\naFFRZWFHYzIrYnhVMlc2UHplS2Q2SUsxeHNOQUo3T3EzSnNiWjNzCm01RnpsaEdv\\nM0pBdmVhN3Z5cmw3NytGcnJZVUlYSytIa3NETnpXTWhVc3MKLS0tIHBpbGxzQTV4\\nUEVGYmxpQVBCUVllYUI5UHBzYUR3MjNqQ21jQU5WWlhsL0EKbnEGSfPWUExsBZHz\\n1En1iOWwBxdw1NB12EVRmPaahFifSzEVOomLTYoEBEINQKL9W0T9Gc20xPimtw5+\\nHAJi4g==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBqRTdx\\ndHUwNWtac25iRkZkUjJQeFREamFIdm43ZTlSdmI0bVlOamRGK25BCnNTcDBkQ3dv\\nSnJXcmpMUlplTldsVFBPMVg4RGtvSFdyUnlsM3V2a0lWU1EKLS0tIDB6REdWWFZN\\nbDZSRkYyT01rb0hPeUZXdytMMWVDUDF4RWRIbkExaHdGVmMK8yWs3odis/e5OEEQ\\n48UbJ3C8MZHoBYKphYwv7hpkbTgfUOb4yqDW6kqcxDGWC+YHmR0N0ZVHzT9t+f3r\\nnetAdA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBkU2dJ\\nbUNFdnp5UVFBcGUzZkZHcmRQcUkzTnVHTmNSRzBHTTBXQzNKOEhVCkJPaDFFUGs4\\nT0pjY25BRmJFMHFrU3FpdlBvM01XNEVlNGNTbldLTXJ3N1kKLS0tIG1VK2VtS01M\\nemNLMklsYmhRSEF5NHFKcTBjS00xMXQyaVFXdkxGb05XL3cKtpGcefsh4QpEnLCn\\nGCMrvhbIA8hUJ+k706IMp5kud0+z3WWWpV9kQMEhUZQsqq2Cu5gjpdl+hG5jO54M\\n12kHiQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBCMkNZ\\nQkRpMEprLzdNaW9JQ2NWMHN4QWdrUmJXVEVUUmsrdzJnNDhnczFrCmw3cDJTWGRG\\ndjVBWnBrUDhrYzJtTEtaelhFbTZFeFlLdXltZ0FsSldwMUUKLS0tIHlaRlAzSTVZ\\nYU9xYmtIL1lBUDEwM25uWkw4WUNjVU4xU0g4b1FyeWRpclEKtpVT+AUNWbq/KYjd\\nVvNmwdHyu0S3JUK6DEBuOQiT42mRpc5EQ5DSxfiZKMIGHyNuuW8+UJl8LziPARfv\\n9lTS+Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSA1eGp1\\nS3BOYzRXNlZuYjYyKzZaTnFVZ0tiVGJzZGV1dDl3czdBT0N6MTMwCnJhNUZhdlUx\\neUprakxjMlJhTy8yVzdIamNRNDBseVJWNStlK3FZZVZ1RDAKLS0tIE9lWVNiMlBx\\ncUpvMGZrdStUOENWQm1JaGVOYzlXbm1Wam5sN1luYVBEbEkK82Qnpf2mUpsjK8Ja\\n7akCpV7IwAA1ssXNApmBMHGEkYn+L74FXOoLWlH4EyjrzKpmMUxcM6DgyY/MO7V7\\nq4Iubw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyB5OE9t\\nUUMyVTJrMlZCb2VaeGllbGVVdU9jMk44eG9qaS8yWGRqOTMrblhnCno3MEdpT2VR\\nQWRoR1ZwaTBTbnJ1MkxxR3VlK1Q1bUZhT1RkVndhbjhieEEKLS0tIGxpRUV0a0l6\\nL3hST3J5R2N6aVE0RHJrMVEzb1ZYbnBTK2MxUzBiZ29iZnMKkBfWd/0bNAxyNuwM\\nMEa2om5SzAmajqWRskEzEOIdYwV/xCOsDMD4g73yv/rsn4fDtsTmL1ClAl0cEkxB\\nMRrh3Q==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSAwUTAy\\nbENpbEdRdXVJcDYvQm9sNlNSMGZTcS9UK3JWWGM5aG1mZjNla1FNCmRydFNZaVRx\\ncVF5a3RvaDgwUXFtUkZiaXErVS8yTzc2STltakNxS0xUK0kKLS0tIFJGUDA2bENP\\nY2RERW9CeDBZUzBqMWxvMEwranlkOWViazRGMHlhVHdNN00KtPS5vX6VEl9oumOf\\nDAB4SrQDJiidBEeJ9Pi9iYIo4bOEmrHEoQbtlJ/lUbA01TV7mG/PB10EKxJJqXC+\\n4MoYng==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBLMG5s\\nY1BJS0ZjUXNPamRsTWlmV1RtVERvK2VET0x2dkdjTzh1TXNuZlVJCjVlc3lNVXVL\\nVERJNjdqTGJFSnRmSG5PMC9JeW5EZ00rK1A0em8yYTNHZlUKLS0tIG94WkJ4NmhG\\ndGtaOWhHeVowcmVnSFYwZERaVXh5LzFuMmNjT2RnTjdxNmMKF+dt+hcxo4b94pQ6\\nMW/hg2GFLhPCSiqWy9bMTKGlsDnz86qKAqd7OndQp1h1we+Y9Y0Fak8iNP3Efe9W\\nLei7uA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSB3Zi9R\\nN0pTb2tJUGdIcjJXT2VlYnRld0VJNi82alFYeHlCTTZ3ZCtjV1g4CkcvNmlnZW1q\\ndFlxU0hEaGlzQ2pEWFFBby9HV3BwbHZNYVYzZkxzQit1d2MKLS0tIEVDa2ozMXYr\\nMStoV01ibzlYeHFzQWtkSXo1elhya1l3VjhGbEhlTGxORXcKVBcXVYXtSL9QA847\\n2fbAdz8UsF4BZcc7i/OKN7/hwKBARFEy21tMFGmo7Je49DVNkyhQ58/qDIX0AvuV\\nTBEblA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBOaHZv\\nVzlzeEpHQms1b2NPQWVnUlJxUzduTnlSM25mZlNkTzlUSGhQYzJBCm9vV2N1Yi96\\nblA3RWdJUll1TUZmMU8rOUNNbWtqbm1tUWRmTEhQQTErTzAKLS0tIFJQNy9PTWpW\\nemZDVEtjUjc4SEJOdjFuTVQ5VGFMSEkxQ1ZBVUN4Wk1sWTgKeAN8S5BBYJRmYUPR\\nZ0HmPzDFKsr6IhJB/wYXXsv8ffH84yKFsfBgnEFKZfMq0orDefJbKXFwdhoXRU3N\\nV3cORg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t}\n\t\t],\n\t\t\"lastmodified\": \"2026-04-11T12:22:31Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:LXk8/VDQWLTrf991D0JVgfNERMuw1fyanRQatPflnT1CBpH/CotSkeLc+KI8vtwTc/g1AMtRNiQWSDw4enqDPqFhLGYTksKoGbToCRx90qBJ/h20HCYugKVIaiXCJ3WwoYiihPIHLFX6EfrFU0yDgaQ/Tto7JIQN8GORJXNnnd4=,iv:MXf1j6sf9oECDT3kpH78AcMfNrWEhG7CFKvopjqmIOM=,tag:Me4l60gH/HzQHkHIH05a8Q==,type:str]\",\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.11.0\"\n\t}\n}\n"; - -export default encryptedPayload; diff --git a/packages/infra/gen/env/src/generated-payloads/web/staging.ts b/packages/infra/gen/env/src/generated-payloads/web/staging.ts deleted file mode 100644 index 4ea7c28a..00000000 --- a/packages/infra/gen/env/src/generated-payloads/web/staging.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// content-hash: 7c6ee9a16dc07d00e2cdc1409d69f78c442c33866cab495267bf8e72ede1084d -const encryptedPayload = "{\n\t\"BETTER_AUTH_SECRET\": \"\",\n\t\"BETTER_AUTH_URL\": \"\",\n\t\"CORS_ORIGIN\": \"\",\n\t\"POLAR_ACCESS_TOKEN\": \"\",\n\t\"POLAR_SUCCESS_URL\": \"\",\n\t\"POSTGRES_URL\": \"ENC[AES256_GCM,data:SsvkdNQhDkqJzkyD34bKjG4=,iv:uus6/eE/yiMunKcPAwy1J0ZsqfByTwzVDRHhVfZyUjc=,tag:5fxiHg4IOb+0+yM4ortNQw==,type:str]\",\n\t\"sops\": {\n\t\t\"age\": [\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16rkvks3tljju3y6xu0l7luhjzx634et97g3xe58xf2dgfn2865rqkq6t8f\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrWmNZYzZsQ2lXbmV3RUdi\\nOHZ0Qm1SYU9lU0NVQkNpTW4xZ05QSTNvNkh3CmtnU1lsZjJKWDdnOS9sS2ZiMHpn\\nejdrWTd3QURqMEh5NFU5OVlrM0RkSW8KLS0tIDczbmpMK1BocE9nTk5PU3ZGT1cr\\nWWc5K1k2TG51OGtSaElMZy9IOFF2dVEKhv0OUR59LApQTEh+bVZjnHvoTaIRI3gw\\n+aamaSk8DgNQvXguJLBXUUrWIPdpaKi0P0xMLb7GhGZLyMBT9YXtbA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age16wuzuxnkcgfuxzvzgk5e5a5f6hhs386adjewyv54m9esr4yj6uuslpn6tp\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkanBmMExEa0FUYVhqRE12\\nQzhuV25rTDJnb0FjUGZINzA1Z05hb2ZQbmd3CksyVEtleVFYS1ErWWlYWWZBOFR2\\nVi9YYk1Ka3RnR1R1QzlCNkdCU3dCVFEKLS0tIGV1ZHRmTGczekZtQnNJSVdLVHRt\\nd0dxMjlzeWc5Um1ueXNqR2xhMWlUMzgKRokSyzPScE6dzam9GY9tDMS6tFKIJ9Hd\\n1/9OVEhmLJdRBU4y7CniJWd3t7kpAz3ISmboKm254Ay6Rmdp+mRaAQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"age1eqcj2g0fdekj2wpqp4y0fg9c5myydjdt9zlr5scr0grk6fxszymqkpw5jf\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2UmVMRjVBRlBRZ2pJV2dY\\nblhrbGlBdTJuN3p2VG5oSFpGbi9oUDZaUVVBCkRvT0ExV1ZxQlVpRlp1UEtsZ1NX\\nVUNlbHFnT3ZNWnFHUXV1RjJwRlJQSncKLS0tIHk0ZENVT2crQUl5SXZDbjRlVDFz\\nSGxEMGhvenVFa3UvVWx0OXI5S1FNUGcKeyQyWdxIslRDnbUbueCp+5u+Ho3Q1cmo\\nIYFuzAxgzL7KDETXltJoYWVFn1BFsHSP1KXJDZN945cLbdcp5KDoxw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+M/DHDlKgayM6wsiX6r704pE+2qENOsKcytC7sBhKA\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDF2bHNJdyB3ZGRj\\nNmsrSFA1QnllSklnNm5GUXNvRGhCTm5kcTFqd0duZWFzeVJqQjFjCjhCbHNLSjZ5\\nQko5UzdlTk5yYXM5c0NiZFF2QS85U2NvVnJHLzVWLzhBTncKLS0tIHR2TWFiemVL\\na0JMd0ZTeC9VMGdFWHRveUVXOWRuMko3THhRdE5WVldBcEUKNRjMIMm6bO9qQd3U\\najZPfgKsAUW8b0HRzIbbOWv30Wf7klXMV/1MCkuA/HkUlcfh2xITh830HFx7IiF3\\nNBFtTQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjMrEzKQSq/0eePzgUGXM349sBm6GVCXoz+tJZJaBVT\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHZMYWFYZyBiKzMx\\nN3ZaNnd2Zk95V0FZdnduTS9KMkNEN0MycW9kYTBBaGovcm5DaGhnCmNaTkJwd3lS\\nUUQzYVFsdFJ3SnloYlNsUWZEbVBLZ0RCVzhtQkhxeUpPTncKLS0tIDJ5cGVvRGxv\\nNmYwWlBYM21mM2t4UEVHRlYvRzYybTZTaFZ3a0FKcXRGNkkK8srs7wZYlY+pt4qG\\ndJrh9MSNXpS6tHv5jzy1P7JGLS4UPAmGIlduSLexEbskvJIPuiI4jUhfgDuq4oGi\\n2hcfuQ==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmZV9Oi9hrckXTpqBnDKRrY9mgwj+SJeVBGWmne2+q5\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpUeE1RUSBKb2Zk\\nYzVlWS9vb2xwa1JjVEc3RVFNd0xPNWd6d1lybmN3YXJOMlVrT1JJCnVBdkV0STN1\\nMGlNYTJmNkMzTnRUaWFwdGlBMW12Rm1tT2ZhQ2wzQTRKQkEKLS0tIGZQRkQ5TDhS\\nNzZaWHgxVmNDbTBKcm1CL09MUm5hL1R2b2dkS0d2R3dTOEUKID4GMhANrU2gKNWT\\nJb9RbKgfTzUquWwN51rDoBWErWRGO2rdKgw9Cy1rXhYAB/zNfsVwmabXIkp0Y1aO\\nwpt1iw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuzbgoXZccZ2w/9HGgUyT9nJH7lG2/jfQCZJudY4yAN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IG05VmtkdyBCZ2F1\\nRFVwbkxZdnd5b0YveGVSZTVhY2d3OFlCZlFwWWtIMU05dmNHYnpZClNodXZ3b2lS\\nWk9qUTVrbHhxNndpYi9oU0xiR1FYclY2VkdXYVhEUjA1MjAKLS0tICsxbkhmQVJ0\\nWXFTZ05paFZySGRpM3lyU20rdTl3NG5xa1grWEpMcldPUG8KpOuWRPs8hBHdIFtH\\nQl0JaJ0r0OWmamzfBY6SVOEyckJLP6SWANAeTuFJELT6kzyaxnOT0sOSueGUL8fQ\\nB83Yzw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEijeq50HS1g27BTRfJ8XWIPrAX9UVkap5fgIOCOtA5+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDhjWXRrdyBreWNk\\ndlUwT3ZhQzNOSXJqZ2dnU0JvZkdVWE54NS9DSEIrQ0pkOGNYRG5FCmdDYkRPTnRF\\nRXg2bWNMU0c3YUcyS1JpVmFkTnYvU0hxSEhFUFZBMTdGNEUKLS0tIDJTV210NFE0\\nRlJSY05IbTlvU0pZMmljUmFrOUVNVTFPanZmNTU3OFFSWEUK/58IqFV+asIChmFE\\nYt3Rt/CDqdQW75u28u+fOpiFn341BY3KThay/eg6QPCnU64kGcwSB9QwIVsN3XNW\\nWrwvXg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEmYihgWHfnLw0f8uTfLokCwToLavzV/+k/GggBA4Sz/\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGtNZGJ1ZyBkKzF6\\nTXVmMi80clZNbmphTmoxYmhmNmVNZE82T3l4UmFXSm1Vbk5SVzBjClc2K0dEOC9O\\nMTJVNmxEWnc5OVBwRmUra1doZU5xaWpWK2JEQTFXOS95dWcKLS0tIC9lNnZ4dHpK\\nSEhKUzJ2WXNyR2Z4OW1MaU1qcU9najZ4c0lnbWRnY0JZblUKe5eB8pC2A4ZRhjqx\\ntQkX0nUaTM4//blmv6wMuSLKBImNYh1fPDPdthavvAtdlnVdufl6vRbudkRx4mNV\\nbM+Ayg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFStro05R+CPmjWMHWtzXUKfGll+OosoZtXAyPtngN7T\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDRTOW45QSBQT3pW\\nUXN2K0FMN1FDbXIxYlBhRkZ2dTJhWVJWYlRXWjNFd2MyTjNFYWhvCmFBWURJdS8z\\najZCdExXL1lBOElwWlRaRXdLRjM4RmU3Rm9yamhrRjZKaDQKLS0tIE10VU1tbU82\\ncEg4WEd5eUJmaFBFQjY0V0tRdTZrSDdPNFJNVlZlVTRkYWcKAlj/7gmSgL/Gd36k\\nqD3gfheQMSElqsZahQKlE0S7XayUsbGdn8nBuo7WG3PCfYInkP+lUQSIfDUUIEJP\\nc2NT2A==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFvT1RvcTidgpVYE0OPknc3f5HcAVpyk+rXXrW4AcbzG\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFFONEwvUSBLVmRO\\nMGxYV01Cb09nbmdNZXVIM1N0d2VpS0pXVW1hMVlLSFpkdW00WmhFCm5NMDBPQ0w3\\neStPYUpSMzJpOTBLVThvSmRqbTd4OWdsU1U5b0FvVG01bnMKLS0tIC9uaEVEbFF6\\ncjBVazdURGRicS9DSHFZT09YTjBWZXVwZmVNcWhZQjM4ekEKMPqqnzlW4kEYMAMO\\ngvFZuREwWbl0wjwHFXqohSEqaoLUOlJjj8RY6FN5JAmvH1XTx2Wcc5F60gxYGLrq\\nv1vZvg==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoX0wKjybps6ZHuvA+uwE1ThfWl87MApDLxCjCDUCC9\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEtlVWxBdyBBVW95\\naTNNKzAweXNLOVAzR2c0V09xQ2FRMXduSm9xSVRqaENYZHpoWHlZCnp5SFI3R3ph\\nL2pMQWV4WGhyaTlnYzFFdEZQZ3dpcnUxSTdDazQ5d2habk0KLS0tIGIwZU9KWW5K\\nMG1Ia1RzOE9OaFNZbnJxTVV1N1A3TFNWQUMzUVJETGk5NTQKIqhsnqlXpknauy7q\\nyyimkvNVc85WmeHNC+sHW2KfvixFuQs28plWG6mxhceLkwG6xIDA2c21bsMEIHzH\\nXaoQsw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJF9kzudl00FVTQA7nnSaicAJW2MoBKm47G7wefb6uSm\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IGw3N2NtUSA5VEtW\\nZVR1Wlp3cFlBNEEyMndtTjB4Q3k2TnVXcnNQYkY1NHJ3SzAzZ0ZvCnpTY2NzMFRU\\nclFSSExMVDBadHpYdkNVUmI0anZwL1BKOUMvcWkxY3ppc0EKLS0tIEMvaW5uQ2NC\\nR2FjaXJUSGpOWVlUQWVIbUlBNlp4bVdWdHZsV3Q5akVnYWsKhoJlFUiVXow+Bbon\\nC+cHGuG2Zokw8wUIbLcIyyu/lCnh4V1kbJ6m9MHxDBb1bptuuisggvHyi73GxPhg\\n8XRbIw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZPhznHjTDifGroHiGRD3hwWz69B8NsSSPNbwWjfzgW\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFNdXZydyBwSFdl\\nanZLUnRGYnZia0NlNzZsbDlzSE9vUUlUcGNsMHRjWGVSL05XZHdBCjVockJ0enI3\\na3ZJcC9DUTdBY2s5ZjVwbDZTblFGUnQrWnBxRXdNd0lsdGsKLS0tIFU0MXNYaS9v\\nSmRnb3h5djFodzJxS2JJcjZQNzVKQjA3bkt4UmhaUTUxK3cKx30YWf10B04gKSQG\\nDrRB4mhsnadvOfAWmVxFhvJlP8EmuIMen5QRH4eFz6y39peHsecqML5FJ/Ij6DBq\\npJ9Pow==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINh0gA7reCRW+zQ5pPpIjoJGpaFQSbC/4K8B6vMXJVr+\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHJKM2lMQSBFdjFF\\nZ2k3eDhiUlhWKzBndjhDV1V3Q1h5cnVDeXk4b0RHMnVEMXBQdEZvCnd2NTJIV1Q5\\ncWR5MkVYZm1WWnF1bVg3VnU1ekNhUWtMb0hoVDloc3dvbk0KLS0tIDFvSXMyazlX\\nOSt6SkRPWXlmVXM4UjhRR1RuWGkreThadTZKUmdZWEErcGsKPll7Srl2jpKccUip\\nKvERJuqQSVdRF6+I29dI1stqN36sVYVPzouKjb8timorQUM5RsLeW7jKW7m3a2wJ\\np/XiLw==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"recipient\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO5qner13Q0fm5NhdXMx2nkt5kxjC0/SVY2FXh01OiHN\",\n\t\t\t\t\"enc\": \"-----BEGIN AGE ENCRYPTED FILE-----\\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDVucGlodyBoWmNX\\nbDgzRG9maVBvVWlSbGVmdW1hMm82eUJLOUk1ME96Ym9TNXdvTnprClNrVW85WEdN\\nM1NHU0RDZTFxRDMwQkl6cVc0ejIzM1YzUnNFeDUzdUVtdVUKLS0tIGt1U3lUV3la\\ndyszaW15dTYrcm1WZjZOSW9WRDJrcnRsNWZWRjZUVGJDYnMKkoyDYtsHheJ19Q+d\\nzGsfCJJUBSJJrmb6VbdxCg1hkIBwAbDBoCiEfnV/W6p/+OQOeTXFNJq4kyPz5Lch\\nSQ0LwA==\\n-----END AGE ENCRYPTED FILE-----\\n\"\n\t\t\t}\n\t\t],\n\t\t\"lastmodified\": \"2026-04-11T12:22:31Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:Wp0by3izDSxGtBmKVm+L2lnk5CeuA97UQCucavbmEANbffx2avDGdNrhnDh1DihAJouqaB/GZ4tv91OtoevxGJthMf9vLF1Ori+Y2N/Wp9rd61NHhmGUI71atXkPZj7e8JEjKi4BK+XNfJFvA5TUcRm41cp7gAeGIQ2QgeqFY4E=,iv:PgBmXS++3RgqvvsTAgsIgP8NpjvOHuY8N1ntYrdmHY0=,tag:mKK6NOEU9XoKIWfC5Bqlfg==,type:str]\",\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.11.0\"\n\t}\n}\n"; - -export default encryptedPayload; diff --git a/packages/infra/gen/env/src/index.ts b/packages/infra/gen/env/src/index.ts deleted file mode 100644 index 05875410..00000000 --- a/packages/infra/gen/env/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -export * as docs from './exports/docs'; -export * as stackpanelGo from './exports/stackpanel-go'; -export * as web from './exports/web'; diff --git a/packages/infra/gen/env/src/runtime/docker-entrypoint.ts b/packages/infra/gen/env/src/runtime/docker-entrypoint.ts deleted file mode 100644 index 71ef0d52..00000000 --- a/packages/infra/gen/env/src/runtime/docker-entrypoint.ts +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bun -// Auto-generated by Stackpanel — do not edit manually. -// Docker entrypoint: loads SOPS-encrypted env, then spawns the application. - -import { spawn } from "node:child_process"; -import { loadAppEnv } from "./node-loader"; - -const env = { ...process.env }; - -const appName = env.APP_NAME || "web"; -const rawEnv = env.APP_ENV || env.NODE_ENV || "prod"; -const appEnv = rawEnv === "production" ? "prod" : rawEnv === "development" ? "dev" : rawEnv; - -// Load and inject SOPS-encrypted environment variables -await loadAppEnv(appName, appEnv); - -// If running a Next.js web server, prerender pages first -const command = process.argv.slice(2).join(" "); -if (command.endsWith("next start") || command.endsWith("bun run start")) { - await exec("bunx next build --experimental-build-mode generate"); -} - -// Launch application -await exec(command); - -function exec(cmd: string): Promise { - const child = spawn(cmd, { shell: true, stdio: "inherit", env: process.env }); - return new Promise((resolve, reject) => { - child.on("exit", (code) => { - if (code === 0) { - resolve(); - } else { - reject(new Error(`${cmd} failed rc=${code}`)); - } - }); - }); -} diff --git a/packages/infra/gen/env/src/runtime/generated-payloads/registry.ts b/packages/infra/gen/env/src/runtime/generated-payloads/registry.ts deleted file mode 100644 index f541c953..00000000 --- a/packages/infra/gen/env/src/runtime/generated-payloads/registry.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// This stub is overwritten by `stackpanel preflight run` once env payloads are built. - -export async function loadGeneratedPayload(_app: string, _env: string): Promise { - return null; -} diff --git a/packages/infra/gen/env/src/runtime/loader.ts b/packages/infra/gen/env/src/runtime/loader.ts deleted file mode 100644 index a45bed6d..00000000 --- a/packages/infra/gen/env/src/runtime/loader.ts +++ /dev/null @@ -1,157 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Runtime environment loader — decrypts generated per-app env payloads without node-specific APIs. - -import { decryptSops } from "sops-age"; -import { AVAILABLE_APP_ENVS } from "../embedded-data"; -import { loadGeneratedPayload } from "./generated-payloads/registry"; - -const AGE_SECRET_KEY_PREFIX = "AGE-SECRET-KEY-"; -const payloadCache = new Map>(); - -export interface LoadEnvOptions { - inject?: boolean; - skipDecrypt?: boolean; - secretKey?: string; -} - -type SopsFileType = "json"; - -export async function loadEnv( - app: string, - env: string, - options: LoadEnvOptions = {}, -): Promise> { - const normalizedEnv = normalizeRuntimeEnv(env); - const cacheKey = `${app}/${normalizedEnv}`; - const cached = payloadCache.get(cacheKey); - if (cached) { - injectIntoProcessEnv(cached, options.inject); - return cached; - } - - const encryptedPayload = await loadGeneratedPayload(app, normalizedEnv); - if (!encryptedPayload) { - const knownEnvs = AVAILABLE_APP_ENVS[app] || []; - const hint = knownEnvs.length > 0 ? ` Available environments: ${knownEnvs.join(", ")}.` : ""; - throw new Error(`Environment data not found for ${app}/${normalizedEnv}.${hint}`); - } - - const payload = normalizeEnvPayload( - await decryptStructuredContent(encryptedPayload, "json", options.secretKey), - ); - payloadCache.set(cacheKey, payload); - injectIntoProcessEnv(payload, options.inject); - return payload; -} - -export async function loadSharedVars( - options: Omit = {}, -): Promise> { - const envObject = getProcessEnv(); - const appName = envObject.APP_NAME || "web"; - const envName = normalizeRuntimeEnv(envObject.APP_ENV || envObject.NODE_ENV || "prod"); - return loadEnv(appName, envName, options); -} - -export async function loadAppEnv( - app: string, - env: string, - options: LoadEnvOptions = {}, -): Promise> { - return loadEnv(app, env, options); -} - -async function decryptStructuredContent( - content: string, - fileType: SopsFileType, - secretKey?: string, -): Promise> { - const secretKeys = resolveRuntimeSecretKeys(secretKey); - if (secretKeys.length === 0) { - throw new Error(missingKeyMaterialMessage()); - } - - const errors: string[] = []; - for (const key of secretKeys) { - try { - const result = await decryptSops(content, { fileType, secretKey: key }); - return (result as Record) || {}; - } catch (error: any) { - errors.push(error?.message || String(error)); - } - } - - throw new Error(`Failed to decrypt generated payload: ${errors.join("; ")}`); -} - -function resolveRuntimeSecretKeys(explicitSecretKey?: string): string[] { - if (explicitSecretKey) { - return parseAgeSecretKeys(explicitSecretKey); - } - - const envObject = getProcessEnv(); - return parseAgeSecretKeys(envObject.SOPS_AGE_KEY); -} - -function parseAgeSecretKeys(input?: string): string[] { - if (!input) { - return []; - } - - const keys = input - .split(/\r?\n/) - .map((line) => line.trim()) - .filter((line) => line.startsWith(AGE_SECRET_KEY_PREFIX)); - - return [...new Set(keys)]; -} - -function injectIntoProcessEnv(payload: Record, inject = true) { - if (inject === false) { - return; - } - - const processEnv = maybeProcessEnv(); - if (processEnv) { - Object.assign(processEnv, payload); - } -} - -function maybeProcessEnv(): Record | null { - if (typeof process === "undefined") { - return null; - } - return process.env as Record; -} - -function getProcessEnv(): Record { - return maybeProcessEnv() ?? {}; -} - -export function normalizeRuntimeEnv(env: string): string { - if (env === "production") return "prod"; - if (env === "development") return "dev"; - return env; -} - -export function normalizeEnvPayload(payload: Record): Record { - const result: Record = {}; - - for (const [key, value] of Object.entries(payload)) { - if (typeof value === "string") { - result[key] = value; - } else if (typeof value === "number" || typeof value === "boolean") { - result[key] = String(value); - } else if (value == null) { - result[key] = ""; - } else { - result[key] = JSON.stringify(value); - } - } - - return result; -} - -function missingKeyMaterialMessage(): string { - return "No SOPS decryption key is configured. Set SOPS_AGE_KEY or pass a secretKey option."; -} diff --git a/packages/infra/gen/env/src/runtime/node-loader.ts b/packages/infra/gen/env/src/runtime/node-loader.ts deleted file mode 100644 index be62d593..00000000 --- a/packages/infra/gen/env/src/runtime/node-loader.ts +++ /dev/null @@ -1,201 +0,0 @@ -// Auto-generated by Stackpanel — do not edit manually. -// Node/Bun runtime environment loader — decrypts generated per-app env payloads. - -import { exec, execFile } from "node:child_process"; -import { readFile, rm, writeFile } from "node:fs/promises"; -import { tmpdir } from "node:os"; -import { join } from "node:path"; -import { promisify } from "node:util"; -import { decryptSops } from "sops-age"; -import { AVAILABLE_APP_ENVS } from "../embedded-data"; -import type { LoadEnvOptions } from "./loader"; -import { normalizeEnvPayload, normalizeRuntimeEnv } from "./loader"; -import { loadGeneratedPayload } from "./generated-payloads/registry"; - -const execAsync = promisify(exec); -const execFileAsync = promisify(execFile); -const AGE_SECRET_KEY_PREFIX = "AGE-SECRET-KEY-"; -const payloadCache = new Map>(); - -type SopsFileType = "json"; - -export async function loadEnv( - app: string, - env: string, - options: LoadEnvOptions = {}, -): Promise> { - const normalizedEnv = normalizeRuntimeEnv(env); - const cacheKey = `${app}/${normalizedEnv}`; - const cached = payloadCache.get(cacheKey); - if (cached) { - injectIntoProcessEnv(cached, options.inject); - return cached; - } - - const encryptedPayload = await loadGeneratedPayload(app, normalizedEnv); - if (!encryptedPayload) { - const knownEnvs = AVAILABLE_APP_ENVS[app] || []; - const hint = knownEnvs.length > 0 ? ` Available environments: ${knownEnvs.join(", ")}.` : ""; - throw new Error(`Environment data not found for ${app}/${normalizedEnv}.${hint}`); - } - - const payload = normalizeEnvPayload( - await decryptStructuredContent(encryptedPayload, "json", options.secretKey), - ); - payloadCache.set(cacheKey, payload); - injectIntoProcessEnv(payload, options.inject); - return payload; -} - -export async function loadSharedVars( - options: Omit = {}, -): Promise> { - const envObject = getProcessEnv(); - const appName = envObject.APP_NAME || "web"; - const envName = normalizeRuntimeEnv(envObject.APP_ENV || envObject.NODE_ENV || "prod"); - return loadEnv(appName, envName, options); -} - -export async function loadAppEnv( - app: string, - env: string, - options: LoadEnvOptions = {}, -): Promise> { - return loadEnv(app, env, options); -} - -async function decryptStructuredContent( - content: string, - fileType: SopsFileType, - secretKey?: string, -): Promise> { - const secretKeys = await resolveRuntimeSecretKeys(secretKey); - if (secretKeys.length > 0) { - return decryptWithJsKeysFromContent(content, fileType, secretKeys); - } - - if (process.env.SOPS_KEYSERVICE) { - return decryptWithSopsBinary(content, fileType); - } - - throw new Error(missingKeyMaterialMessage()); -} - -async function decryptWithJsKeysFromContent( - content: string, - fileType: SopsFileType, - secretKeys: string[], -): Promise> { - const errors: string[] = []; - - for (const key of secretKeys) { - try { - const result = await decryptSops(content, { fileType, secretKey: key }); - return (result as Record) || {}; - } catch (error: any) { - errors.push(error?.message || String(error)); - } - } - - throw new Error(`Failed to decrypt generated payload: ${errors.join("; ")}`); -} - -async function decryptWithSopsBinary( - content: string, - fileType: SopsFileType, -): Promise> { - const tempPath = join(tmpdir(), `stackpanel-env-${Date.now()}.sops.json`); - try { - await writeFile(tempPath, content, "utf8"); - const { stdout } = await execFileAsync( - "sops", - ["--decrypt", "--input-type", fileType, "--output-type", "json", tempPath], - { - env: process.env, - maxBuffer: 10 * 1024 * 1024, - }, - ); - return (JSON.parse(stdout) as Record) || {}; - } catch (error: any) { - if (error?.code === "ENOENT") { - throw new Error( - "SOPS keyservice is configured via SOPS_KEYSERVICE, but the `sops` binary is not installed.", - ); - } - const stderr = error?.stderr ? String(error.stderr).trim() : ""; - const detail = stderr || error?.message || String(error); - throw new Error(`Failed to decrypt generated payload with the sops binary: ${detail}`); - } finally { - try { - await rm(tempPath, { force: true }); - } catch {} - } -} - -async function resolveRuntimeSecretKeys(explicitSecretKey?: string): Promise { - if (explicitSecretKey) { - return parseAgeSecretKeys(explicitSecretKey); - } - - const envKeys = parseAgeSecretKeys(process.env.SOPS_AGE_KEY); - if (envKeys.length > 0) { - return envKeys; - } - - const repoLocalKey = await readRepoLocalAgeKey(); - if (repoLocalKey) { - const repoKeys = parseAgeSecretKeys(repoLocalKey); - if (repoKeys.length > 0) { - return repoKeys; - } - } - - const command = process.env.SOPS_AGE_KEY_CMD; - if (!command) { - return []; - } - - const { stdout } = await execAsync(command, { maxBuffer: 1024 * 1024 }); - return parseAgeSecretKeys(stdout); -} - -async function readRepoLocalAgeKey(): Promise { - const explicitKeysDir = process.env.STACKPANEL_KEYS_DIR; - const candidate = explicitKeysDir - ? join(explicitKeysDir, "local.txt") - : join(process.cwd(), ".stack", "keys", "local.txt"); - - try { - return await readFile(candidate, "utf8"); - } catch { - return null; - } -} - -function parseAgeSecretKeys(input?: string): string[] { - if (!input) { - return []; - } - - const keys = input - .split(/\r?\n/) - .map((line) => line.trim()) - .filter((line) => line.startsWith(AGE_SECRET_KEY_PREFIX)); - - return [...new Set(keys)]; -} - -function injectIntoProcessEnv(payload: Record, inject = true) { - if (inject === false) { - return; - } - Object.assign(process.env, payload); -} - -function getProcessEnv(): Record { - return process.env as Record; -} - -function missingKeyMaterialMessage(): string { - return "No SOPS decryption method is configured. Set SOPS_AGE_KEY or SOPS_AGE_KEY_CMD, or set SOPS_KEYSERVICE and install the `sops` binary."; -} diff --git a/packages/infra/gen/env/tsconfig.json b/packages/infra/gen/env/tsconfig.json deleted file mode 100644 index 0b285812..00000000 --- a/packages/infra/gen/env/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{"compilerOptions":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"forceConsistentCasingInFileNames":true,"isolatedModules":true,"lib":["ESNext"],"module":"ESNext","moduleResolution":"bundler","noUncheckedIndexedAccess":true,"outDir":"dist","resolveJsonModule":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"target":"ESNext","verbatimModuleSyntax":true},"exclude":["node_modules","dist"],"include":["src"]} \ No newline at end of file diff --git a/packages/infra/gen/featureflags/README.md b/packages/infra/gen/featureflags/README.md deleted file mode 100644 index ce0d84ea..00000000 --- a/packages/infra/gen/featureflags/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# @gen/featureflags - -> Auto-generated by Stack — do not edit manually. -> Regenerate with `write-files` or restart devshell. - -Shared feature-flag definitions and provider utilities for Studio. - -## Quick Start - -```tsx -import { - FeatureFlagProvider, - useFeatureFlags, - FEATURE_FLAG_KEYS, -} from "@gen/featureflags"; -``` - -Use `FeatureFlagProvider` once in your app shell and then read values with -`useFeatureFlags()`. diff --git a/packages/infra/gen/featureflags/package.json b/packages/infra/gen/featureflags/package.json deleted file mode 100644 index e04f77e6..00000000 --- a/packages/infra/gen/featureflags/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "@gen/featureflags", - "type": "module", - "exports": { - ".": { - "default": "./src/feature-flags.tsx" - }, - "./*": { - "default": "./src/*.ts" - } - }, - "dependencies": { - "@tanstack/react-router": "catalog:", - "react": "catalog:" - }, - "devDependencies": { - "typescript": "^5.9.3" - } -} diff --git a/packages/infra/gen/featureflags/src/feature-flags.tsx b/packages/infra/gen/featureflags/src/feature-flags.tsx deleted file mode 100644 index 3c323dec..00000000 --- a/packages/infra/gen/featureflags/src/feature-flags.tsx +++ /dev/null @@ -1,486 +0,0 @@ -"use client"; - -import { useLocation } from "@tanstack/react-router"; -import { - createContext, - useCallback, - useContext, - useEffect, - useMemo, - useState, - type ReactNode, -} from "react"; - -type FlagKind = "boolean" | "variant"; - -type BaseFeatureFlagDefinition = { - key: string; - kind: FlagKind; - label: string; - description: string; - defaultValue: string | boolean; - rollout?: number; -}; - -export type BooleanFeatureFlagDefinition = BaseFeatureFlagDefinition & { - kind: "boolean"; - defaultValue: boolean; -}; - -export type VariantFeatureFlagDefinition = BaseFeatureFlagDefinition & { - kind: "variant"; - defaultValue: string; - variants: readonly string[]; - weights?: Partial>; -}; - -export type FeatureFlagDefinition = - | BooleanFeatureFlagDefinition - | VariantFeatureFlagDefinition; - -export type FeatureFlagValue = string | boolean; - -type RawOverrides = Record; - -export const FEATURE_FLAG_KEYS = {"overviewLayout":"studio.overview.layout","overviewPulseBanner":"studio.overview.pulse-banner"} as const; - -export const featureFlagDefinitions: readonly FeatureFlagDefinition[] = - [{"defaultValue":"classic","description":"Select between classic and compact studio overview layouts for experiments.","key":"studio.overview.layout","kind":"variant","label":"Overview layout","rollout":100,"variants":["classic","compact"]},{"defaultValue":false,"description":"Show the experimental pulse indicator in the overview panel.","key":"studio.overview.pulse-banner","kind":"boolean","label":"Pulse banner on overview","rollout":0}] as const; - -const STORAGE_KEY = "stackpanel.feature-flags"; -const IDENTIFIER_KEY = "stackpanel.feature-flags.identity"; -const URL_OVERRIDE_PARAM = "ff"; - -interface FeatureFlagsContextValue { - definitions: readonly FeatureFlagDefinition[]; - flags: Readonly>; - identity: string; - setOverride: (key: string, value: string | boolean) => void; - clearOverride: (key: string) => void; - clearAllOverrides: () => void; - isEnabled: (key: string) => boolean; - getVariant: (key: string, fallback?: string) => string; - getValue: (key: string) => FeatureFlagValue; - localOverrides: RawOverrides; - isOverridden: (key: string) => boolean; -} - -const FeatureFlagsContext = createContext( - null, -); - -const featureFlagMap = Object.fromEntries( - featureFlagDefinitions.map((flag) => [flag.key, flag]), -) as Record; - -function isBrowser(): boolean { - return typeof window !== "undefined"; -} - -function clampRolloutPercent(value: number | undefined): number { - if (!value) { - return 0; - } - - if (!Number.isFinite(value)) { - return 0; - } - - return Math.min(100, Math.max(0, Math.floor(value))); -} - -function getIdentity(): string { - if (!isBrowser()) { - return "ssr"; - } - - const cached = localStorage.getItem(IDENTIFIER_KEY); - if (cached && cached.length > 0) { - return cached; - } - - const generated = crypto.randomUUID?.() ?? `${Date.now()}-${Math.random()}`; - localStorage.setItem(IDENTIFIER_KEY, generated); - return generated; -} - -function parseQueryOverrides(search: string): RawOverrides { - const params = new URLSearchParams(search); - const overrides: RawOverrides = {}; - - for (const [paramName, value] of params.entries()) { - if (!paramName.startsWith("ff_")) { - continue; - } - - const key = paramName.slice("ff_".length); - if (key.length > 0) { - overrides[key] = value; - } - } - - const bundle = params.get(URL_OVERRIDE_PARAM); - if (!bundle) { - return overrides; - } - - for (const token of bundle.split(",")) { - const trimmed = token.trim(); - if (!trimmed) { - continue; - } - - const separatorIndex = trimmed.indexOf("="); - if (separatorIndex < 1 || separatorIndex === trimmed.length - 1) { - continue; - } - - overrides[trimmed.slice(0, separatorIndex)] = trimmed.slice( - separatorIndex + 1, - ); - } - - return overrides; -} - -function loadOverrides(): RawOverrides { - if (!isBrowser()) { - return {}; - } - - const raw = localStorage.getItem(STORAGE_KEY); - if (!raw) { - return {}; - } - - try { - const parsed = JSON.parse(raw) as unknown; - if ( - typeof parsed === "object" && - parsed !== null && - !Array.isArray(parsed) - ) { - const overrides: RawOverrides = {}; - for (const [key, value] of Object.entries( - parsed as Record, - )) { - if (typeof value === "string" || typeof value === "number") { - overrides[key] = String(value); - } - } - - return overrides; - } - } catch { - return {}; - } - - return {}; -} - -function normalizeBoolean(value: string): boolean | undefined { - const normalized = value.toLowerCase(); - if (normalized === "true" || normalized === "1") { - return true; - } - - if (normalized === "false" || normalized === "0") { - return false; - } - - return undefined; -} - -function hashToBucket(value: string, modulo: number): number { - let hash = 2166136261 >>> 0; - for (let index = 0; index < value.length; index += 1) { - hash ^= value.charCodeAt(index); - hash = Math.imul(hash, 16777619); - } - - return modulo === 0 ? 0 : hash % modulo; -} - -function resolveBooleanFlag( - flag: BooleanFeatureFlagDefinition, - identity: string, - queryOverrides: RawOverrides, - localOverrides: RawOverrides, -): boolean { - const queryValue = queryOverrides[flag.key]; - if (queryValue !== undefined) { - const parsed = normalizeBoolean(queryValue); - if (parsed !== undefined) { - return parsed; - } - } - - const localValue = localOverrides[flag.key]; - if (localValue !== undefined) { - const parsed = normalizeBoolean(localValue); - if (parsed !== undefined) { - return parsed; - } - } - - const rollout = clampRolloutPercent(flag.rollout); - if (rollout === 0) { - return flag.defaultValue; - } - - const bucket = hashToBucket(`${identity}:${flag.key}`, 100); - return bucket < rollout; -} - -function resolveVariantFlag( - flag: VariantFeatureFlagDefinition, - identity: string, - queryOverrides: RawOverrides, - localOverrides: RawOverrides, -): string { - const queryValue = queryOverrides[flag.key]; - if (queryValue !== undefined && flag.variants.includes(queryValue)) { - return queryValue; - } - - const localValue = localOverrides[flag.key]; - if (localValue !== undefined && flag.variants.includes(localValue)) { - return localValue; - } - - const rollout = clampRolloutPercent(flag.rollout); - if (rollout > 0 && rollout < 100) { - const rolloutBucket = hashToBucket(`${identity}:${flag.key}`, 100); - if (rolloutBucket >= rollout) { - return flag.defaultValue; - } - } - - const weights = flag.variants.map( - (variant) => Math.max(0, flag.weights?.[variant] ?? 1), - ); - const totalWeight = weights.reduce((sum, weight) => sum + weight, 0); - if (totalWeight <= 0) { - return flag.defaultValue; - } - - const bucket = hashToBucket(`${identity}:${flag.key}:variant`, totalWeight); - let top = 0; - - for (let index = 0; index < flag.variants.length; index += 1) { - top += weights[index] ?? 0; - if (bucket < top) { - return flag.variants[index] ?? flag.defaultValue; - } - } - - return flag.defaultValue; -} - -function isValidOverrideValue( - flag: FeatureFlagDefinition, - value: string, -): boolean { - if (flag.kind === "boolean") { - return normalizeBoolean(value) !== undefined; - } - - return flag.variants.includes(value); -} - -function evaluateFlags( - identity: string, - search: string, - localOverrides: RawOverrides, -): Record { - const queryOverrides = parseQueryOverrides(search); - const values: Record = {}; - - for (const flag of featureFlagDefinitions) { - if (flag.kind === "boolean") { - values[flag.key] = resolveBooleanFlag( - flag, - identity, - queryOverrides, - localOverrides, - ); - continue; - } - - values[flag.key] = resolveVariantFlag( - flag, - identity, - queryOverrides, - localOverrides, - ); - } - - return values; -} - -export function FeatureFlagProvider({ children }: { children: ReactNode }) { - const { search } = useLocation(); - const [identity] = useState(getIdentity); - const [localOverrides, setLocalOverrides] = useState(loadOverrides); - const normalizedSearch = - typeof search === "string" - ? search - : new URLSearchParams( - Object.entries(search).reduce>( - (acc, [key, value]) => { - if (typeof value === "string") { - acc[key] = value; - } - - if (Array.isArray(value) && value[0] !== undefined) { - acc[key] = value[0] ?? ""; - } - - return acc; - }, - {}, - ), - ).toString(); - - useEffect(() => { - if (!isBrowser()) { - return; - } - - localStorage.setItem(STORAGE_KEY, JSON.stringify(localOverrides)); - }, [localOverrides]); - - const flags = useMemo( - () => evaluateFlags(identity, normalizedSearch, localOverrides), - [identity, localOverrides, normalizedSearch], - ); - - const setOverride = useCallback((key: string, value: string | boolean) => { - const definition = featureFlagMap[key]; - if (!definition) { - return; - } - - const normalized = String(value); - if (!isValidOverrideValue(definition, normalized)) { - return; - } - - setLocalOverrides((prev) => ({ - ...prev, - [key]: normalized, - })); - }, []); - - const clearOverride = useCallback((key: string) => { - setLocalOverrides((prev) => { - if (!Object.prototype.hasOwnProperty.call(prev, key)) { - return prev; - } - - const next = { ...prev }; - delete next[key]; - return next; - }); - }, []); - - const clearAllOverrides = useCallback(() => { - setLocalOverrides({}); - }, []); - - const isOverridden = useCallback( - (key: string) => Object.prototype.hasOwnProperty.call(localOverrides, key), - [localOverrides], - ); - - const getValue = useCallback( - (key: string): FeatureFlagValue => { - if (key in flags) { - return flags[key]; - } - - const definition = featureFlagMap[key]; - if (!definition) { - return false; - } - - return definition.defaultValue; - }, - [flags], - ); - - const isEnabled = useCallback( - (key: string): boolean => getValue(key) === true, - [getValue], - ); - - const getVariant = useCallback( - (key: string, fallback = "") => { - const value = getValue(key); - if (typeof value === "string") { - return value; - } - - if (fallback.length > 0) { - return fallback; - } - - const definition = featureFlagMap[key]; - if ( - definition && - definition.kind === "variant" && - definition.variants.length > 0 - ) { - return definition.defaultValue; - } - - return fallback; - }, - [getValue], - ); - - const contextValue = useMemo( - () => ({ - definitions: featureFlagDefinitions, - flags, - identity, - setOverride, - clearOverride, - clearAllOverrides, - isEnabled, - getVariant, - getValue, - localOverrides, - isOverridden, - }), - [ - clearAllOverrides, - clearOverride, - flags, - getValue, - getVariant, - identity, - isEnabled, - isOverridden, - localOverrides, - setOverride, - ], - ); - - return ( - - {children} - - ); -} - -export function useFeatureFlags(): FeatureFlagsContextValue { - const context = useContext(FeatureFlagsContext); - if (!context) { - throw new Error( - "useFeatureFlags must be used within ", - ); - } - - return context; -} diff --git a/packages/infra/gen/featureflags/src/index.ts b/packages/infra/gen/featureflags/src/index.ts deleted file mode 100644 index c56eeb4a..00000000 --- a/packages/infra/gen/featureflags/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./feature-flags"; diff --git a/packages/infra/gen/featureflags/tsconfig.json b/packages/infra/gen/featureflags/tsconfig.json deleted file mode 100644 index 1b6482a2..00000000 --- a/packages/infra/gen/featureflags/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "lib": ["ESNext"], - "verbatimModuleSyntax": true, - "strict": true, - "strictNullChecks": true, - "skipLibCheck": true, - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "noUncheckedIndexedAccess": true, - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "outDir": "dist", - "composite": true - }, - "exclude": ["node_modules", "dist"] -} diff --git a/packages/infra/gen/infra/README.md b/packages/infra/gen/infra/README.md deleted file mode 100644 index eeaa0099..00000000 --- a/packages/infra/gen/infra/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# @stackpanel/infra - -> Auto-generated by Stackpanel — do not edit manually. -> Regenerate with `write-files` or restart devshell. - -Infrastructure-as-code package for **stackpanel**, powered by [Alchemy](https://github.com/sam-goodwin/alchemy). - -## Modules (4) - -### AWS EC2 Apps (`aws-ec2-app`) - -Provision EC2 instances for apps and emit machine inventory - -Dependencies: `@aws-sdk/client-ec2`, `@aws-sdk/client-ecr`, `@aws-sdk/client-elastic-load-balancing-v2`, `@aws-sdk/client-iam`, `@aws-sdk/client-ssm`, `@aws-sdk/client-sts` - -**Outputs:** - - `albOutputs` — ALB outputs per app (JSON) *(synced)* - - `ecrOutputs` — ECR outputs per app (JSON) *(synced)* - - `instanceIds` — Instance IDs (JSON) *(synced)* - - `machines` — Machine inventory (JSON) *(synced)* - - `privateIps` — Instance private IPs (JSON) *(synced)* - - `publicDns` — Instance public DNS (JSON) *(synced)* - - `publicIps` — Instance public IPs (JSON) *(synced)* - - `ssmOutputs` — SSM outputs per app (JSON) *(synced)* - -### AWS Secrets Infrastructure (`aws-secrets`) - -OIDC provider, IAM role, and KMS key for secrets management - -Dependencies: `@aws-sdk/client-iam`, `@aws-sdk/client-kms`, `@aws-sdk/client-ssm`, `@aws-sdk/client-sts` - -**Outputs:** - - `kmsAliasName` — KMS key alias name *(synced)* - - `kmsKeyArn` — KMS key ARN for secrets encryption *(synced)* - - `kmsKeyId` — KMS key ID *(synced)* - - `oidcProviderArn` — OIDC provider ARN *(synced)* - - `roleArn` — IAM role ARN for OIDC authentication *(synced)* - - `roleName` — IAM role name *(synced)* - -### Database (`database`) - -Postgres database provisioning (Neon / devenv / Docker) - -Dependencies: `alchemy` - -**Outputs:** - - `databaseUrl` — PostgreSQL connection URL *(synced)* - - `provider` — Active database provider (neon, devenv, docker) *(synced)* - -### Machine Inventory (`machines`) - -Machine inventory provider for Colmena deployments - -Dependencies: `@aws-sdk/client-ec2` - -**Outputs:** - - `machines` — Machine inventory (JSON) *(synced)* - - -## Usage - -```bash -# Deploy all infra modules -cd packages/gen/infra && bun run alchemy.run.ts - -# Destroy all resources -cd packages/gen/infra && bun run alchemy.run.ts --destroy -``` - -## Storage Backend - -SOPS (encrypted YAML file) - -## Architecture - -``` -packages/gen/infra/ -├── alchemy.run.ts # Orchestrator (imports all modules, syncs outputs) -├── package.json -├── tsconfig.json -├── src/ -│ ├── index.ts # Infra class (input resolution, output sync) -│ └── types.ts # Per-module TypeScript interfaces -└── modules/ - ├── aws-ec2-app.ts - ├── aws-secrets.ts - ├── database.ts - ├── machines.ts -``` diff --git a/packages/infra/gen/infra/alchemy.run.ts b/packages/infra/gen/infra/alchemy.run.ts deleted file mode 100644 index ae0915d1..00000000 --- a/packages/infra/gen/infra/alchemy.run.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Generated by stackpanel — do not edit manually. -import alchemy from "alchemy"; -import { CloudflareStateStore } from "alchemy/state"; -import Infra from "./src/index.ts"; -// Register legacy custom-resource providers so pending deletions from -// earlier generated stacks can still be finalized after migrations. -import "./src/resources/ec2-instance.ts"; -import "./src/resources/iam-instance-profile.ts"; -import "./src/resources/iam-role.ts"; -import "./src/resources/key-pair.ts"; -import "./src/resources/security-group.ts"; - - -const app = await alchemy("stackpanel-infra", { - stateStore: process.env.CLOUDFLARE_API_TOKEN - ? (scope) => - new CloudflareStateStore(scope, { - apiToken: alchemy.secret(process.env.CLOUDFLARE_API_TOKEN!), - }) - : undefined, -}); - -// Import and run infra modules -const aws_ec2_appOutputs = (await import("./modules/aws-ec2-app.ts")).default; - -const aws_secretsOutputs = (await import("./modules/aws-secrets/index.ts")).default; - -const databaseOutputs = (await import("./modules/database.ts")).default; - -const machinesOutputs = (await import("./modules/machines.ts")).default; - - -// Sync declared outputs to storage backend -await Infra.syncAll({ -"aws-ec2-app": { - outputs: aws_ec2_appOutputs, - syncKeys: ["albOutputs","ecrOutputs","instanceIds","machines","privateIps","publicDns","publicIps","ssmOutputs"], -}, -"aws-secrets": { - outputs: aws_secretsOutputs, - syncKeys: ["kmsAliasName","kmsKeyArn","kmsKeyId","oidcProviderArn","roleArn","roleName"], -}, -"database": { - outputs: databaseOutputs, - syncKeys: ["databaseUrl","provider"], -}, -"machines": { - outputs: machinesOutputs, - syncKeys: ["machines"], -}, -}); - -await app.finalize(); diff --git a/packages/infra/gen/infra/modules/aws-ec2-app.ts b/packages/infra/gen/infra/modules/aws-ec2-app.ts deleted file mode 100644 index fdb03c91..00000000 --- a/packages/infra/gen/infra/modules/aws-ec2-app.ts +++ /dev/null @@ -1,1051 +0,0 @@ -// ============================================================================== -// AWS EC2 Apps Module -// -// High-level app-centric EC2 provisioning with optional: -// - Security group creation -// - Key pair import -// - IAM role + instance profile -// - ALB + target group + listeners + host-based routing -// - ECR repository + GitHub OIDC push role -// - SSM parameter wiring (env file generation) -// - Machine inventory for Colmena -// ============================================================================== -import AWS from "alchemy/aws/control"; -import Infra from "@stackpanel/infra"; -import { Ec2Instance } from "@stackpanel/infra/resources/ec2-instance"; -import { IamInstanceProfile } from "@stackpanel/infra/resources/iam-instance-profile"; -import { IamRole } from "@stackpanel/infra/resources/iam-role"; -import { KeyPair } from "@stackpanel/infra/resources/key-pair"; -import { SecurityGroup } from "@stackpanel/infra/resources/security-group"; - -// ============================================================================= -// Types -// ============================================================================= - -interface SshConfig { - user?: string; - port?: number; - keyPath?: string | null; -} - -interface MachineMeta { - tags?: string[]; - roles?: string[]; - targetEnv?: string | null; - arch?: string | null; - ssh?: SshConfig; -} - -interface RuleConfig { - fromPort: number; - toPort: number; - protocol?: string; - cidrBlocks?: string[]; - ipv6CidrBlocks?: string[]; - securityGroupIds?: string[]; - description?: string | null; -} - -interface SecurityGroupConfig { - create?: boolean; - name?: string | null; - description?: string | null; - ingress?: RuleConfig[]; - egress?: RuleConfig[]; - tags?: Record; -} - -interface KeyPairConfig { - create?: boolean; - name?: string | null; - publicKey?: string | null; - tags?: Record; - destroyOnDelete?: boolean; -} - -interface InlinePolicy { - name: string; - document: Record; -} - -interface IamConfig { - enable?: boolean; - roleName?: string | null; - assumeRolePolicy?: Record | null; - managedPolicyArns?: string[]; - inlinePolicies?: InlinePolicy[]; - tags?: Record; - instanceProfileName?: string | null; - instanceProfileTags?: Record; -} - -interface NixosConfig { - amiId?: string | null; - flakeUrl?: string | null; - hostConfig?: string | null; - flakeVersion?: string; -} - -interface AlbHealthCheck { - enabled?: boolean; - path?: string; - protocol?: "HTTP" | "HTTPS" | "TCP"; - port?: string | null; - interval?: number; - timeout?: number; - healthyThreshold?: number; - unhealthyThreshold?: number; - matcher?: string; -} - -interface AlbTargetGroupConfig { - port?: number; - protocol?: "HTTP" | "HTTPS" | "TCP"; - healthCheck?: AlbHealthCheck; -} - -interface AlbConfig { - enable?: boolean; - create?: boolean; - name?: string | null; - scheme?: "internet-facing" | "internal"; - ipAddressType?: "ipv4" | "dualstack"; - subnetIds?: string[]; - securityGroupIds?: string[]; - http?: boolean; - https?: boolean; - certificateArn?: string | null; - sslPolicy?: string; - existingListenerHttpArn?: string | null; - existingListenerHttpsArn?: string | null; - hostnames?: string[]; - hostRulePriority?: number; - targetGroup?: AlbTargetGroupConfig; -} - -interface GithubOidcConfig { - enable?: boolean; - repoOwner?: string | null; - repoName?: string | null; - allowedBranches?: string[]; - allowedWorkflows?: string[]; - allowTags?: boolean; - roleName?: string | null; - oidcProviderArn?: string | null; - createOidcProvider?: boolean; -} - -interface EcrConfig { - enable?: boolean; - create?: boolean; - repoName?: string | null; - imageTagMutability?: "MUTABLE" | "IMMUTABLE"; - scanOnPush?: boolean; - lifecyclePolicy?: string | null; - github?: GithubOidcConfig; -} - -interface SsmConfig { - enable?: boolean; - region?: string | null; - pathPrefix?: string | null; - parameters?: Record; - secureParameters?: Record; - envFilePath?: string | null; - refreshScriptPath?: string | null; - installCli?: boolean; - useChamber?: boolean; -} - -interface InstanceOverride { - name?: string | null; - ami?: string | null; - osType?: "ubuntu" | "nixos"; - nixos?: NixosConfig; - instanceType?: string | null; - subnetId?: string | null; - securityGroupIds?: string[]; - keyName?: string | null; - iamInstanceProfile?: string | null; - userData?: string | null; - rootVolumeSize?: number | null; - associatePublicIp?: boolean; - tags?: Record; - machine?: MachineMeta; -} - -interface AppConfig { - instanceCount?: number; - instances?: InstanceOverride[]; - ami?: string | null; - osType?: "ubuntu" | "nixos"; - nixos?: NixosConfig; - instanceType?: string | null; - vpcId?: string | null; - subnetIds?: string[]; - securityGroupIds?: string[]; - securityGroup?: SecurityGroupConfig; - keyName?: string | null; - keyPair?: KeyPairConfig; - iam?: IamConfig; - iamInstanceProfile?: string | null; - userData?: string | null; - rootVolumeSize?: number | null; - associatePublicIp?: boolean; - tags?: Record; - alb?: AlbConfig; - ecr?: EcrConfig; - ssm?: SsmConfig; - machine?: MachineMeta; -} - -interface AwsEc2AppInputs { - defaults?: AppConfig; - apps: Record; -} - -// ============================================================================= -// Init -// ============================================================================= - -const infra = new Infra("aws-ec2-app"); -const inputs = infra.inputs( - process.env.STACKPANEL_INFRA_INPUTS_OVERRIDES, -); - -const defaults = inputs.defaults ?? {}; - -const { EC2Client, DescribeVpcsCommand, DescribeSubnetsCommand, DescribeImagesCommand } = - await import("@aws-sdk/client-ec2"); - -const awsRegion = process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION; -const ec2Client = new EC2Client(awsRegion ? { region: awsRegion } : {}); - -// ============================================================================= -// Helpers -// ============================================================================= - -async function resolveDefaultNetwork(): Promise<{ vpcId: string; subnetIds: string[] }> { - const vpcs = await ec2Client.send( - new DescribeVpcsCommand({ - Filters: [{ Name: "isDefault", Values: ["true"] }], - }), - ); - const vpcId = vpcs.Vpcs?.[0]?.VpcId; - if (!vpcId) { - throw new Error("aws-ec2-app: unable to resolve default VPC"); - } - const subnets = await ec2Client.send( - new DescribeSubnetsCommand({ - Filters: [{ Name: "vpc-id", Values: [vpcId] }], - }), - ); - const subnetIds = (subnets.Subnets ?? []) - .map((subnet) => subnet.SubnetId) - .filter((id): id is string => Boolean(id)); - if (subnetIds.length === 0) { - throw new Error("aws-ec2-app: unable to resolve default subnets"); - } - return { vpcId, subnetIds }; -} - -function pickList(...lists: Array): T[] { - for (const list of lists) { - if (list && list.length > 0) return list; - } - return []; -} - -function mergeTags(...sources: Array | undefined>): Record { - const merged: Record = {}; - for (const source of sources) { - if (!source) continue; - Object.assign(merged, source); - } - return merged; -} - -function mergeMachineMeta(...sources: Array): MachineMeta { - const result: MachineMeta = {}; - const tags = new Set(); - const roles = new Set(); - - for (const source of sources) { - if (!source) continue; - (source.tags ?? []).forEach((tag) => tags.add(tag)); - (source.roles ?? []).forEach((role) => roles.add(role)); - if (source.targetEnv) result.targetEnv = source.targetEnv; - if (source.arch) result.arch = source.arch; - if (source.ssh) { - result.ssh = { - ...(result.ssh ?? {}), - ...source.ssh, - }; - } - } - - if (tags.size > 0) result.tags = Array.from(tags); - if (roles.size > 0) result.roles = Array.from(roles); - return result; -} - -function toAwsTags(tags?: Record) { - if (!tags || Object.keys(tags).length === 0) { - return undefined; - } - - return Object.entries(tags).map(([Key, Value]) => ({ - Key, - Value, - })); -} - -function sanitizeAwsName(name: string, maxLength = 32) { - return name.replace(/[^a-zA-Z0-9-]/g, "-").slice(0, maxLength); -} - -function buildAlbTargets(instanceIds: string[], port?: number) { - return instanceIds.map((Id) => ({ - Id, - ...(port === undefined ? {} : { Port: port }), - })); -} - -function buildSecurityGroupIngressResources( - groupId: string, - rules: RuleConfig[], -) { - return rules.flatMap((rule) => [ - ...(rule.cidrBlocks ?? []).map((cidr) => ({ - GroupId: groupId, - IpProtocol: rule.protocol ?? "tcp", - FromPort: rule.fromPort, - ToPort: rule.toPort, - Description: rule.description ?? undefined, - CidrIp: cidr, - })), - ...(rule.ipv6CidrBlocks ?? []).map((cidr) => ({ - GroupId: groupId, - IpProtocol: rule.protocol ?? "tcp", - FromPort: rule.fromPort, - ToPort: rule.toPort, - Description: rule.description ?? undefined, - CidrIpv6: cidr, - })), - ...(rule.securityGroupIds ?? []).map((securityGroupId) => ({ - GroupId: groupId, - IpProtocol: rule.protocol ?? "tcp", - FromPort: rule.fromPort, - ToPort: rule.toPort, - Description: rule.description ?? undefined, - SourceSecurityGroupId: securityGroupId, - })), - ]); -} - -function buildSecurityGroupEgressResources( - groupId: string, - rules: RuleConfig[], -) { - return rules.flatMap((rule) => [ - ...(rule.cidrBlocks ?? []).map((cidr) => ({ - GroupId: groupId, - IpProtocol: rule.protocol ?? "tcp", - FromPort: rule.fromPort, - ToPort: rule.toPort, - Description: rule.description ?? undefined, - CidrIp: cidr, - })), - ...(rule.ipv6CidrBlocks ?? []).map((cidr) => ({ - GroupId: groupId, - IpProtocol: rule.protocol ?? "tcp", - FromPort: rule.fromPort, - ToPort: rule.toPort, - Description: rule.description ?? undefined, - CidrIpv6: cidr, - })), - ...(rule.securityGroupIds ?? []).map((securityGroupId) => ({ - GroupId: groupId, - IpProtocol: rule.protocol ?? "tcp", - FromPort: rule.fromPort, - ToPort: rule.toPort, - Description: rule.description ?? undefined, - DestinationSecurityGroupId: securityGroupId, - })), - ]); -} - -async function resolveAmi( - explicitAmi: string | null | undefined, - osType: "ubuntu" | "nixos", - nixos?: NixosConfig, -): Promise { - if (explicitAmi) return explicitAmi; - - if (osType === "nixos") { - if (nixos?.amiId) return nixos.amiId; - const images = await ec2Client.send( - new DescribeImagesCommand({ - Owners: ["535002876703"], - Filters: [ - { Name: "name", Values: ["determinate/nixos/epoch-1/*"] }, - { Name: "architecture", Values: ["x86_64"] }, - { Name: "state", Values: ["available"] }, - ], - }), - ); - const sorted = (images.Images ?? []).sort((a, b) => - (b.CreationDate ?? "").localeCompare(a.CreationDate ?? ""), - ); - const imageId = sorted[0]?.ImageId; - if (!imageId) throw new Error("aws-ec2-app: no NixOS AMI found"); - return imageId; - } - - const images = await ec2Client.send( - new DescribeImagesCommand({ - Owners: ["099720109477"], - Filters: [ - { - Name: "name", - Values: ["ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*"], - }, - { Name: "state", Values: ["available"] }, - ], - }), - ); - const sorted = (images.Images ?? []).sort((a, b) => - (b.CreationDate ?? "").localeCompare(a.CreationDate ?? ""), - ); - const imageId = sorted[0]?.ImageId; - if (!imageId) throw new Error("aws-ec2-app: no Ubuntu AMI found"); - return imageId; -} - -function buildNixosUserData(nixos?: NixosConfig): string | null { - if (!nixos?.flakeUrl || !nixos?.hostConfig) return null; - const flakeVersion = nixos.flakeVersion ?? "*"; - return `#!/usr/bin/env bash -set -euo pipefail -exec >> /var/log/user-data.log 2>&1 - -echo "[+] Authenticating with FlakeHub using AWS STS..." -determinate-nixd login aws - -echo "[+] Applying NixOS configuration: ${nixos.flakeUrl}/${flakeVersion}#nixosConfigurations.${nixos.hostConfig}" -fh apply nixos "${nixos.flakeUrl}/${flakeVersion}#nixosConfigurations.${nixos.hostConfig}" - -echo "[+] NixOS configuration applied successfully" -`; -} - -async function getAccountId(): Promise { - const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts"); - const client = new STSClient(awsRegion ? { region: awsRegion } : {}); - const identity = await client.send(new GetCallerIdentityCommand({})); - return identity.Account!; -} - -// ============================================================================= -// Resolve network -// ============================================================================= - -const defaultNetwork = await resolveDefaultNetwork(); - -// ============================================================================= -// Outputs -// ============================================================================= - -const instanceIds: Record = {}; -const publicIps: Record = {}; -const privateIps: Record = {}; -const publicDns: Record = {}; -const machines: Record> = {}; -const albOutputs: Record> = {}; -const ecrOutputs: Record> = {}; -const ssmOutputs: Record> = {}; - -// ============================================================================= -// Per-app loop -// ============================================================================= - -for (const [appName, appConfig] of Object.entries(inputs.apps ?? {})) { - const appSecurityGroup = { ...defaults.securityGroup, ...appConfig.securityGroup }; - const appKeyPair = { ...defaults.keyPair, ...appConfig.keyPair }; - const appIam = { ...defaults.iam, ...appConfig.iam }; - const appAlb = { ...defaults.alb, ...appConfig.alb }; - const appEcr = { ...defaults.ecr, ...appConfig.ecr }; - const appSsm = { ...defaults.ssm, ...appConfig.ssm }; - - const vpcId = appConfig.vpcId ?? defaults.vpcId ?? defaultNetwork.vpcId; - const subnetIds = pickList(appConfig.subnetIds, defaults.subnetIds, defaultNetwork.subnetIds); - if (subnetIds.length === 0) { - throw new Error(`aws-ec2-app: no subnet IDs available for ${appName}`); - } - - // --------------------------------------------------------------------------- - // Security group - // --------------------------------------------------------------------------- - let securityGroupIds = pickList(appConfig.securityGroupIds, defaults.securityGroupIds); - if (appSecurityGroup?.create) { - const sgName = appSecurityGroup.name ?? `${appName}-sg`; - const ingressRules = appSecurityGroup.ingress ?? []; - const egressRules = - (appSecurityGroup.egress ?? []).length > 0 - ? appSecurityGroup.egress - : [ - { - fromPort: 0, - toPort: 0, - protocol: "-1", - cidrBlocks: ["0.0.0.0/0"], - ipv6CidrBlocks: ["::/0"], - }, - ]; - const sg = await SecurityGroup(infra.id(`${appName}-sg`), { - name: sgName, - description: appSecurityGroup.description ?? sgName, - vpcId, - ingress: ingressRules, - egress: egressRules ?? [], - tags: mergeTags(defaults.tags, appConfig.tags, appSecurityGroup.tags), - }); - securityGroupIds = [sg.groupId]; - } - - // --------------------------------------------------------------------------- - // Key pair - // --------------------------------------------------------------------------- - let keyName = appConfig.keyName ?? defaults.keyName ?? null; - if (appKeyPair?.create) { - if (!appKeyPair.name || !appKeyPair.publicKey) { - throw new Error(`aws-ec2-app: key pair name and public key required for ${appName}`); - } - const keyPair = await KeyPair(infra.id(`${appName}-key`), { - keyName: appKeyPair.name, - publicKey: appKeyPair.publicKey, - tags: appKeyPair.tags, - }); - keyName = keyPair.keyName; - } - - // --------------------------------------------------------------------------- - // IAM role + instance profile - // --------------------------------------------------------------------------- - let iamInstanceProfile = appConfig.iamInstanceProfile ?? defaults.iamInstanceProfile ?? null; - if (appIam?.enable) { - const roleName = appIam.roleName ?? `${appName}-role`; - const role = await IamRole(infra.id(`${appName}-role`), { - roleName, - assumeRolePolicy: appIam.assumeRolePolicy ?? { - Version: "2012-10-17", - Statement: [ - { - Effect: "Allow", - Principal: { Service: "ec2.amazonaws.com" }, - Action: "sts:AssumeRole", - }, - ], - }, - description: `EC2 role for ${appName}`, - tags: appIam.tags, - managedPolicyArns: appIam.managedPolicyArns, - policies: (appIam.inlinePolicies ?? []).map((policy) => ({ - policyName: policy.name, - policyDocument: policy.document, - })), - }); - const profileName = appIam.instanceProfileName ?? `${roleName}-profile`; - await IamInstanceProfile(infra.id(`${appName}-profile`), { - name: profileName, - roleName: role.roleName, - tags: appIam.tags, - }); - iamInstanceProfile = profileName; - } - - // --------------------------------------------------------------------------- - // SSM parameters - // --------------------------------------------------------------------------- - if (appSsm?.enable) { - const prefix = appSsm.pathPrefix ?? `/${appName}`; - const allParams = { - ...(appSsm.parameters ?? {}), - ...(appSsm.secureParameters ?? {}), - }; - const secureKeys = new Set(Object.keys(appSsm.secureParameters ?? {})); - - for (const [key, value] of Object.entries(allParams)) { - const paramName = `${prefix}/${key}`; - await AWS.SSM.Parameter(infra.id(`${appName}-ssm-${key.toLowerCase()}`), { - Name: paramName, - Value: value, - Type: secureKeys.has(key) ? "SecureString" : "String", - adopt: true, - }); - } - - ssmOutputs[appName] = { - pathPrefix: prefix, - parameterCount: Object.keys(allParams).length, - envFilePath: appSsm.envFilePath ?? `/etc/default/${appName}.env`, - }; - } - - // --------------------------------------------------------------------------- - // ECR repository - // --------------------------------------------------------------------------- - if (appEcr?.enable) { - const repoName = appEcr.repoName ?? appName; - if (appEcr.create !== false) { - const defaultLifecyclePolicy = JSON.stringify({ - rules: [ - { - rulePriority: 1, - description: "Keep last 50 images", - selection: { - tagStatus: "any", - countType: "imageCountMoreThan", - countNumber: 50, - }, - action: { type: "expire" }, - }, - ], - }); - const repo = await AWS.ECR.Repository(infra.id(`${appName}-ecr`), { - RepositoryName: repoName, - ImageTagMutability: appEcr.imageTagMutability, - ImageScanningConfiguration: { - ScanOnPush: appEcr.scanOnPush ?? true, - }, - LifecyclePolicy: { - LifecyclePolicyText: appEcr.lifecyclePolicy ?? defaultLifecyclePolicy, - }, - EmptyOnDelete: true, - Tags: toAwsTags(mergeTags(defaults.tags, appConfig.tags)), - adopt: true, - }); - ecrOutputs[appName] = { - repositoryUrl: repo.RepositoryUri, - repositoryArn: repo.Arn, - repositoryName: repo.RepositoryName ?? repoName, - }; - } - - // GitHub OIDC role for ECR push - const github = appEcr.github; - if (github?.enable) { - const accountId = await getAccountId(); - let oidcProviderArn = github.oidcProviderArn ?? null; - - if (!oidcProviderArn && github.createOidcProvider) { - const { GitHubOIDCProvider } = await import("alchemy/aws/oidc"); - const oidc = await GitHubOIDCProvider(infra.id(`${appName}-oidc`), {}); - oidcProviderArn = oidc.arn; - } - - if (oidcProviderArn && github.repoOwner && github.repoName) { - const branchSubjects = (github.allowedBranches ?? []).map( - (b) => `repo:${github.repoOwner}/${github.repoName}:ref:refs/heads/${b}`, - ); - const tagSubjects = github.allowTags - ? [`repo:${github.repoOwner}/${github.repoName}:ref:refs/tags/*`] - : []; - const workflowSubjects = (github.allowedWorkflows ?? []).map( - (w) => `repo:${github.repoOwner}/${github.repoName}:workflow:${w}`, - ); - const allSubjects = [...branchSubjects, ...tagSubjects, ...workflowSubjects]; - if (allSubjects.length === 0) { - allSubjects.push(`repo:${github.repoOwner}/${github.repoName}:*`); - } - - const ghaRoleName = github.roleName ?? `${appName}-gha-ecr-push`; - const ecrRepoArn = `arn:aws:ecr:${awsRegion ?? "us-east-1"}:${accountId}:repository/${appEcr.repoName ?? appName}`; - - const ssmPrefix = appSsm?.pathPrefix ?? `/${appName}`; - - await IamRole(infra.id(`${appName}-gha-role`), { - roleName: ghaRoleName, - assumeRolePolicy: { - Version: "2012-10-17", - Statement: [ - { - Sid: "GitHubActionsFederatedOIDC", - Effect: "Allow", - Principal: { Federated: oidcProviderArn }, - Action: "sts:AssumeRoleWithWebIdentity", - Condition: { - StringLike: { - "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", - "token.actions.githubusercontent.com:sub": allSubjects, - }, - }, - }, - { - Sid: "AllowRoot", - Effect: "Allow", - Principal: { AWS: `arn:aws:iam::${accountId}:root` }, - Action: "sts:AssumeRole", - }, - ], - }, - description: `GitHub Actions role for ${appName} ECR push`, - tags: mergeTags(defaults.tags, appConfig.tags), - policies: [ - { - policyName: `${ghaRoleName}-ecr`, - policyDocument: { - Version: "2012-10-17", - Statement: [ - { - Sid: "ECRAuth", - Effect: "Allow", - Action: ["ecr:GetAuthorizationToken"], - Resource: "*", - }, - { - Sid: "ECRPushPull", - Effect: "Allow", - Action: [ - "ecr:BatchCheckLayerAvailability", - "ecr:BatchGetImage", - "ecr:CompleteLayerUpload", - "ecr:InitiateLayerUpload", - "ecr:PutImage", - "ecr:UploadLayerPart", - "ecr:DescribeImages", - "ecr:GetDownloadUrlForLayer", - "ecr:ListImages", - ], - Resource: [ecrRepoArn], - }, - { - Sid: "SSMAccess", - Effect: "Allow", - Action: [ - "ssm:GetParameter", - "ssm:GetParameters", - "ssm:GetParametersByPath", - "ssm:PutParameter", - "ssm:DeleteParameter", - "ssm:DescribeParameters", - ], - Resource: [ - `arn:aws:ssm:${awsRegion ?? "*"}:${accountId}:parameter${ssmPrefix}/*`, - ], - }, - { - Sid: "SSMSendCommand", - Effect: "Allow", - Action: [ - "ssm:SendCommand", - "ssm:ListCommandInvocations", - "ssm:GetCommandInvocation", - ], - Resource: [ - `arn:aws:ssm:*:*:document/AWS-RunShellScript`, - `arn:aws:ec2:*:${accountId}:instance/*`, - ], - }, - { - Sid: "ECRCreateRepo", - Effect: "Allow", - Action: [ - "ecr:CreateRepository", - "ecr:DescribeRepositories", - ], - Resource: "*", - }, - ], - }, - }, - ], - }); - - ecrOutputs[appName] = { - ...(ecrOutputs[appName] ?? {}), - ghaRoleName, - }; - } - } - } - - // --------------------------------------------------------------------------- - // EC2 instances - // --------------------------------------------------------------------------- - const instanceList = - (appConfig.instances ?? []).length > 0 - ? appConfig.instances ?? [] - : Array.from({ length: appConfig.instanceCount ?? 1 }, () => ({} as InstanceOverride)); - - const appInstanceIds: string[] = []; - - let index = 0; - for (const instance of instanceList) { - const instanceName = instance.name ?? `${appName}-${index + 1}`; - const osType = instance.osType ?? appConfig.osType ?? defaults.osType ?? "ubuntu"; - const nixosConfig = { ...defaults.nixos, ...appConfig.nixos, ...instance.nixos }; - - const ami = await resolveAmi( - instance.ami ?? appConfig.ami ?? defaults.ami, - osType, - nixosConfig, - ); - - const subnetId = instance.subnetId ?? subnetIds[index % subnetIds.length]; - const securityGroups = pickList(instance.securityGroupIds, securityGroupIds); - - const userData = - instance.userData ?? - appConfig.userData ?? - defaults.userData ?? - (osType === "nixos" ? buildNixosUserData(nixosConfig) : null); - const associatePublicIp = - instance.associatePublicIp ?? - appConfig.associatePublicIp ?? - defaults.associatePublicIp ?? - true; - - const instanceTags = mergeTags(defaults.tags, appConfig.tags, instance.tags, { - Name: instanceName, - Service: appName, - OSType: osType, - }); - if (osType === "nixos" && nixosConfig.hostConfig) { - instanceTags.NixOSHostConfig = nixosConfig.hostConfig; - } - if (osType === "nixos" && nixosConfig.flakeUrl) { - instanceTags.NixOSFlakeURL = nixosConfig.flakeUrl; - } - - const resource = await Ec2Instance(infra.id(instanceName), { - name: instanceName, - ami, - instanceType: - instance.instanceType ?? appConfig.instanceType ?? defaults.instanceType ?? "t3.micro", - subnetId, - securityGroupIds: securityGroups, - keyName: instance.keyName ?? appConfig.keyName ?? keyName ?? undefined, - iamInstanceProfile: instance.iamInstanceProfile ?? iamInstanceProfile ?? undefined, - userData: userData ?? undefined, - rootVolumeSize: - instance.rootVolumeSize ?? - appConfig.rootVolumeSize ?? - defaults.rootVolumeSize ?? - undefined, - associatePublicIp, - tags: instanceTags, - }); - - appInstanceIds.push(resource.instanceId); - instanceIds[instanceName] = resource.instanceId; - if (resource.publicIp) publicIps[instanceName] = resource.publicIp; - if (resource.privateIp) privateIps[instanceName] = resource.privateIp; - if (resource.publicDns) publicDns[instanceName] = resource.publicDns; - - const machineMeta = mergeMachineMeta(defaults.machine, appConfig.machine, instance.machine); - const host = resource.publicDns ?? resource.publicIp ?? resource.privateIp ?? null; - - machines[instanceName] = { - id: resource.instanceId, - name: instanceName, - host, - ssh: { - user: machineMeta.ssh?.user ?? "root", - port: machineMeta.ssh?.port ?? 22, - keyPath: machineMeta.ssh?.keyPath ?? null, - }, - tags: machineMeta.tags ?? [], - roles: machineMeta.roles ?? [], - targetEnv: machineMeta.targetEnv ?? null, - arch: machineMeta.arch ?? null, - provider: "aws-ec2", - publicIp: resource.PublicIp ?? null, - privateIp: resource.PrivateIp ?? null, - labels: instanceTags, - metadata: { - subnetId, - instanceType: - instance.instanceType ?? appConfig.instanceType ?? defaults.instanceType ?? "t3.micro", - }, - }; - - index += 1; - } - - // --------------------------------------------------------------------------- - // ALB + target group + listeners + host rules - // --------------------------------------------------------------------------- - if (appAlb?.enable && appInstanceIds.length > 0) { - const tgPort = appAlb.targetGroup?.port ?? 80; - const tgProtocol = appAlb.targetGroup?.protocol ?? "HTTP"; - const tgHealthCheck = appAlb.targetGroup?.healthCheck ?? {}; - - const tgName = sanitizeAwsName(`${appName}-tg`); - const tg = await AWS.ElasticLoadBalancingV2.TargetGroup(infra.id(`${appName}-tg`), { - Name: tgName, - Port: tgPort, - Protocol: tgProtocol, - VpcId: vpcId, - HealthCheckEnabled: tgHealthCheck.enabled ?? true, - HealthCheckProtocol: tgHealthCheck.protocol ?? "HTTP", - HealthCheckPort: tgHealthCheck.port ?? undefined, - HealthCheckPath: tgHealthCheck.path ?? "/", - HealthCheckIntervalSeconds: tgHealthCheck.interval ?? 30, - HealthCheckTimeoutSeconds: tgHealthCheck.timeout ?? 10, - HealthyThresholdCount: tgHealthCheck.healthyThreshold ?? 2, - UnhealthyThresholdCount: tgHealthCheck.unhealthyThreshold ?? 3, - Matcher: tgHealthCheck.matcher ? { HttpCode: tgHealthCheck.matcher } : undefined, - Targets: buildAlbTargets(appInstanceIds, tgPort), - Tags: toAwsTags(mergeTags(defaults.tags, appConfig.tags)), - adopt: true, - }); - - let httpListenerArn: string | undefined; - let httpsListenerArn: string | undefined; - - if (appAlb.create !== false) { - // Create ALB + ALB SG - const albSgName = appAlb.name - ? `${appAlb.name}-alb-sg` - : `${appName}-alb-sg`; - const albIngressRules: RuleConfig[] = [ - { - fromPort: 80, - toPort: 80, - protocol: "tcp", - cidrBlocks: ["0.0.0.0/0"], - ipv6CidrBlocks: ["::/0"], - description: "HTTP", - }, - { - fromPort: 443, - toPort: 443, - protocol: "tcp", - cidrBlocks: ["0.0.0.0/0"], - ipv6CidrBlocks: ["::/0"], - description: "HTTPS", - }, - ]; - const albEgressRules: RuleConfig[] = [ - { - fromPort: 0, - toPort: 0, - protocol: "-1", - cidrBlocks: ["0.0.0.0/0"], - ipv6CidrBlocks: ["::/0"], - }, - ]; - const albSg = await SecurityGroup(infra.id(`${appName}-alb-sg`), { - name: albSgName, - description: `ALB security group for ${appName}`, - vpcId, - ingress: albIngressRules, - egress: albEgressRules, - tags: mergeTags(defaults.tags, appConfig.tags, { Name: albSgName }), - }); - - const albName = sanitizeAwsName(appAlb.name ?? `${appName}-alb`); - const alb = await AWS.ElasticLoadBalancingV2.LoadBalancer(infra.id(`${appName}-alb`), { - Name: albName, - Subnets: pickList(appAlb.subnetIds, subnetIds), - SecurityGroups: pickList(appAlb.securityGroupIds, [albSg.groupId]), - Scheme: appAlb.scheme ?? "internet-facing", - IpAddressType: appAlb.ipAddressType ?? "ipv4", - Type: "application", - Tags: toAwsTags(mergeTags(defaults.tags, appConfig.tags)), - adopt: true, - }); - - if (appAlb.http !== false) { - const httpListener = await AWS.ElasticLoadBalancingV2.Listener( - infra.id(`${appName}-http`), - { - LoadBalancerArn: alb.LoadBalancerArn, - Port: 80, - Protocol: "HTTP", - DefaultActions: [{ Type: "forward", TargetGroupArn: tg.TargetGroupArn }], - adopt: true, - }, - ); - httpListenerArn = httpListener.ListenerArn; - } - - if (appAlb.https && appAlb.certificateArn) { - const httpsListener = await AWS.ElasticLoadBalancingV2.Listener( - infra.id(`${appName}-https`), - { - LoadBalancerArn: alb.LoadBalancerArn, - Port: 443, - Protocol: "HTTPS", - SslPolicy: appAlb.sslPolicy ?? "ELBSecurityPolicy-TLS13-1-2-2021-06", - Certificates: [{ CertificateArn: appAlb.certificateArn }], - DefaultActions: [{ Type: "forward", TargetGroupArn: tg.TargetGroupArn }], - adopt: true, - }, - ); - httpsListenerArn = httpsListener.ListenerArn; - } - - albOutputs[appName] = { - albArn: alb.LoadBalancerArn, - albDnsName: alb.DNSName, - albZoneId: alb.CanonicalHostedZoneID, - targetGroupArn: tg.TargetGroupArn, - httpListenerArn: httpListenerArn ?? null, - httpsListenerArn: httpsListenerArn ?? null, - }; - } else { - // Use existing shared listeners - httpListenerArn = appAlb.existingListenerHttpArn ?? undefined; - httpsListenerArn = appAlb.existingListenerHttpsArn ?? undefined; - - albOutputs[appName] = { - targetGroupArn: tg.TargetGroupArn, - httpListenerArn: httpListenerArn ?? null, - httpsListenerArn: httpsListenerArn ?? null, - }; - } - - // Host-based routing rules - const hostnames = appAlb.hostnames ?? []; - if (hostnames.length > 0) { - const listenerArn = httpsListenerArn ?? httpListenerArn; - if (listenerArn) { - const priority = appAlb.hostRulePriority ?? 100; - await AWS.ElasticLoadBalancingV2.ListenerRule( - infra.id(`${appName}-host-rule`), - { - ListenerArn: listenerArn, - Priority: priority, - Conditions: [ - { - Field: "host-header", - HostHeaderConfig: { - Values: hostnames, - }, - }, - ], - Actions: [{ Type: "forward", TargetGroupArn: tg.TargetGroupArn }], - adopt: true, - }, - ); - } - } - } -} - -// ============================================================================= -// Export -// ============================================================================= - -export default { - instanceIds: JSON.stringify(instanceIds), - publicIps: JSON.stringify(publicIps), - privateIps: JSON.stringify(privateIps), - publicDns: JSON.stringify(publicDns), - machines: JSON.stringify(machines), - albOutputs: JSON.stringify(albOutputs), - ecrOutputs: JSON.stringify(ecrOutputs), - ssmOutputs: JSON.stringify(ssmOutputs), -}; diff --git a/packages/infra/gen/infra/modules/aws-secrets/index.ts b/packages/infra/gen/infra/modules/aws-secrets/index.ts deleted file mode 100644 index 33519bf7..00000000 --- a/packages/infra/gen/infra/modules/aws-secrets/index.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { AccountId } from "alchemy/aws"; -import AWS from "alchemy/aws/control"; -import { GitHubOIDCProvider } from "alchemy/aws/oidc"; -import Infra from "@stackpanel/infra"; -import { IamRole } from "@stackpanel/infra/resources/iam-role"; -import { - buildAssumeRolePolicy, - buildKmsKeyPolicy, - buildRoleKmsInlinePolicy, - githubActionsProviderArn, -} from "./policies"; - -const infra = new Infra("aws-secrets"); -const inputs = infra.inputs(process.env.STACKPANEL_INFRA_INPUTS_OVERRIDES); - -const accountId = await AccountId(); -const assumeRolePolicy = buildAssumeRolePolicy(inputs.oidc, accountId) as any; - -const roleTags = { - Project: inputs.projectName, - ManagedBy: "stackpanel-infra", -}; - -const rolePolicyName = `${inputs.iam.roleName}-kms-policy`; - -const role = await IamRole(infra.id("role"), { - roleName: inputs.iam.roleName, - assumeRolePolicy, - description: `IAM role for ${inputs.projectName} secrets access`, - tags: roleTags, - managedPolicyArns: inputs.iam.additionalPolicies ?? [], -}); - -let resolvedOidcProviderArn = githubActionsProviderArn(accountId); - -if (inputs.oidc.provider === "github-actions") { - const oidcProvider = await GitHubOIDCProvider(infra.id("oidc"), { - adopt: true, - owner: inputs.oidc.githubActions.org, - repository: inputs.oidc.githubActions.repo, - roleArn: role.arn, - } as any); - resolvedOidcProviderArn = oidcProvider.providerArn; -} - -const kmsKey = await AWS.KMS.Key(infra.id("kms-key"), { - Description: `KMS key for encrypting ${inputs.projectName} secrets`, - EnableKeyRotation: true, - PendingWindowInDays: inputs.kms.deletionWindowDays, - KeyPolicy: JSON.parse(buildKmsKeyPolicy(accountId, role.arn)), - Tags: Object.entries({ - Name: inputs.kms.alias, - ...roleTags, - }).map(([Key, Value]) => ({ Key, Value })), - adopt: true, -}); - -const kmsAlias = await AWS.KMS.Alias(infra.id("kms-alias"), { - AliasName: `alias/${inputs.kms.alias}`, - TargetKeyId: kmsKey.KeyId, - adopt: true, -}); - -await IamRole(infra.id("role"), { - roleName: inputs.iam.roleName, - assumeRolePolicy, - description: `IAM role for ${inputs.projectName} secrets access`, - tags: roleTags, - managedPolicyArns: inputs.iam.additionalPolicies ?? [], - policies: [ - { - policyName: rolePolicyName, - ...buildRoleKmsInlinePolicy(inputs.kms.alias, kmsKey.Arn), - }, - ], -}); - -export default { - roleArn: role.arn, - roleName: role.roleName, - kmsKeyArn: kmsKey.Arn, - kmsKeyId: kmsKey.KeyId, - kmsAliasName: kmsAlias.AliasName, - oidcProviderArn: resolvedOidcProviderArn, -}; diff --git a/packages/infra/gen/infra/modules/aws-secrets/policies.ts b/packages/infra/gen/infra/modules/aws-secrets/policies.ts deleted file mode 100644 index bc0a2091..00000000 --- a/packages/infra/gen/infra/modules/aws-secrets/policies.ts +++ /dev/null @@ -1,147 +0,0 @@ -const OIDC_PROVIDER_URL = "token.actions.githubusercontent.com"; - -type OidcInputs = { - provider: "github-actions" | "flyio" | "roles-anywhere" | string; - githubActions: { - org: string; - repo: string; - }; - flyio: { - orgId: string; - appName: string; - }; - rolesAnywhere: { - trustAnchorArn: string; - }; -}; - -export function githubActionsProviderArn(accountId: string): string { - return `arn:aws:iam::${accountId}:oidc-provider/${OIDC_PROVIDER_URL}`; -} - -export function buildAssumeRolePolicy(inputs: OidcInputs, accountId: string): unknown { - switch (inputs.provider) { - case "github-actions": { - const { org, repo } = inputs.githubActions; - return { - Version: "2012-10-17" as const, - Statement: [ - { - Effect: "Allow" as const, - Principal: { - Federated: githubActionsProviderArn(accountId), - }, - Action: "sts:AssumeRoleWithWebIdentity", - Condition: { - StringEquals: { - [`${OIDC_PROVIDER_URL}:aud`]: "sts.amazonaws.com", - }, - StringLike: { - [`${OIDC_PROVIDER_URL}:sub`]: `repo:${org}/${repo}:*`, - }, - }, - }, - ], - }; - } - - case "flyio": { - const { orgId, appName } = inputs.flyio; - const flyOidcUrl = `oidc.fly.io/${orgId}`; - return { - Version: "2012-10-17" as const, - Statement: [ - { - Effect: "Allow" as const, - Principal: { - Federated: `arn:aws:iam::${accountId}:oidc-provider/${flyOidcUrl}`, - }, - Action: "sts:AssumeRoleWithWebIdentity", - Condition: { - StringEquals: { - [`${flyOidcUrl}:aud`]: "sts.amazonaws.com", - }, - StringLike: { - [`${flyOidcUrl}:sub`]: `${orgId}:${appName}:*`, - }, - }, - }, - ], - }; - } - - case "roles-anywhere": - return { - Version: "2012-10-17" as const, - Statement: [ - { - Effect: "Allow" as const, - Principal: { - Service: "rolesanywhere.amazonaws.com", - }, - Action: ["sts:AssumeRole", "sts:TagSession", "sts:SetSourceIdentity"], - Condition: { - ArnEquals: { - "aws:SourceArn": inputs.rolesAnywhere.trustAnchorArn, - }, - }, - }, - ], - }; - - default: - return { - Version: "2012-10-17" as const, - Statement: [], - }; - } -} - -export function buildKmsKeyPolicy(accountId: string, roleArn: string): string { - return JSON.stringify({ - Version: "2012-10-17", - Statement: [ - { - Effect: "Allow", - Principal: { - AWS: `arn:aws:iam::${accountId}:root`, - }, - Action: "kms:*", - Resource: "*", - }, - { - Effect: "Allow", - Principal: { - AWS: roleArn, - }, - Action: ["kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:DescribeKey"], - Resource: "*", - }, - ], - }); -} - -export function buildRoleKmsInlinePolicy(alias: string, keyArn: string): { policyDocument: unknown } { - return { - policyDocument: { - Version: "2012-10-17", - Statement: [ - { - Effect: "Allow", - Action: ["kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:DescribeKey"], - Resource: keyArn, - }, - { - Effect: "Allow", - Action: ["kms:Decrypt"], - Resource: "*", - Condition: { - StringLike: { - "kms:RequestAlias": `alias/${alias}`, - }, - }, - }, - ], - }, - }; -} diff --git a/packages/infra/gen/infra/modules/database.ts b/packages/infra/gen/infra/modules/database.ts deleted file mode 100644 index 48a30614..00000000 --- a/packages/infra/gen/infra/modules/database.ts +++ /dev/null @@ -1,229 +0,0 @@ -// ============================================================================== -// Database Infrastructure Module -// -// Provisions the appropriate database backend based on environment: -// - Neon Postgres (production / CI) -// - Devenv Postgres (local development with Nix) -// - Docker Postgres (local development fallback) -// -// Inputs (from Nix via infra-inputs.json): -// projectName: string -// name: string (database name) -// provider: "auto" | "neon" | "devenv" | "docker" -// neon: { region, pgVersion, apiKeySsmPath, enable-branching } -// devenv: { database, user, password, host, port } -// docker: { image, tag, user, password, port, network } -// ssm: { enable, pathPrefix } -// -// Outputs: -// { databaseUrl: string, provider: string } -// ============================================================================== -import alchemy, { Resource } from "alchemy"; -import type { Context } from "alchemy"; -import { SSMParameter } from "alchemy/aws"; -import { NeonBranch, NeonProject } from "alchemy/neon"; -import * as docker from "alchemy/docker"; -import Infra from "@stackpanel/infra"; - -// Try to import helpers from @gen/alchemy, fall back to inline -let getSSMSecret: (name: string) => Promise; -try { - const helpers = await import("@gen/alchemy/helpers"); - getSSMSecret = helpers.getSSMSecret; -} catch { - // Fallback: inline SSM helper - getSSMSecret = async (name: string): Promise => { - const { SSMClient, GetParameterCommand } = await import( - "@aws-sdk/client-ssm" - ); - const client = new SSMClient({}); - const response = await client.send( - new GetParameterCommand({ Name: name, WithDecryption: true }), - ); - if (!response.Parameter?.Value) { - throw new Error(`SSM Parameter ${name} not found or empty`); - } - return response.Parameter.Value; - }; -} - -// ============================================================================ -// Custom Resource: Devenv Postgres (read-only reference to devenv service) -// ============================================================================ -interface DevenvPostgresProps { - database: string; - user: string; - password: string; - port?: number; - host?: string; -} - -interface DevenvPostgres extends DevenvPostgresProps { - connectionUrl: string; -} - -const DevenvPostgres = Resource( - "devenv::Postgres", - async function ( - this: Context, - _id: string, - props: DevenvPostgresProps, - ): Promise { - if (this.phase === "delete") { - return this.destroy(); - } - const host = props.host ?? "localhost"; - const port = props.port ?? 5432; - const connectionUrl = `postgresql://${props.user}:${props.password}@${host}:${port}/${props.database}`; - return { ...props, host, port, connectionUrl }; - }, -); - -// ============================================================================ -// Module setup -// ============================================================================ -const infra = new Infra("database"); -const inputs = infra.inputs(process.env.STACKPANEL_INFRA_INPUTS_OVERRIDES); - -const USE_DEVENV = - process.env.IN_NIX_SHELL === "impure" || - process.env.DEVENV_ROOT !== undefined; -const USE_DOCKER = !USE_DEVENV && process.env.USE_DOCKER === "true"; -const STAGE = process.env.STAGE || "dev"; -const IS_PREVIEW = STAGE !== "prod" && STAGE !== "dev"; - -// Resolve provider -let provider: string; -if (inputs.provider === "auto") { - if (USE_DEVENV) provider = "devenv"; - else if (USE_DOCKER) provider = "docker"; - else provider = "neon"; -} else { - provider = inputs.provider; -} - -// ============================================================================ -// Provision database based on resolved provider -// ============================================================================ -let databaseUrl: string; - -switch (provider) { - case "devenv": { - const pg = await DevenvPostgres(infra.id("devenv-postgres"), { - database: inputs.devenv.database, - user: inputs.devenv.user, - password: inputs.devenv.password, - port: inputs.devenv.port, - host: inputs.devenv.host, - }); - databaseUrl = pg.connectionUrl; - console.log(`[database] Using Devenv Postgres: ${databaseUrl}`); - break; - } - - case "docker": { - const network = await docker.Network(infra.id("network"), { - name: inputs.docker.network, - }); - - const volume = await docker.Volume(infra.id("postgres-data"), { - name: `${inputs.name}_postgres_data`, - labels: [ - { name: "app", value: inputs.projectName }, - { name: "service", value: "postgres" }, - ], - }); - - const image = await docker.RemoteImage(infra.id("postgres-image"), { - name: inputs.docker.image, - tag: inputs.docker.tag, - }); - - await docker.Container(infra.id("postgres-container"), { - name: `${inputs.projectName}-postgres`, - image: image.imageRef, - networks: [{ name: network.name }], - volumes: [ - { - hostPath: volume.name, - containerPath: "/var/lib/postgresql/data", - }, - ], - environment: { - POSTGRES_USER: inputs.docker.user, - POSTGRES_PASSWORD: inputs.docker.password, - POSTGRES_DB: inputs.name, - }, - ports: [ - { - internal: 5432, - external: inputs.docker.port, - }, - ], - start: true, - }); - - databaseUrl = `postgresql://${inputs.docker.user}:${inputs.docker.password}@localhost:${inputs.docker.port}/${inputs.name}`; - console.log(`[database] Using Docker Postgres: ${databaseUrl}`); - break; - } - - case "neon": - default: { - const neonApiKey = await getSSMSecret(inputs.neon.apiKeySsmPath); - - const neonProject = await NeonProject(infra.id("neon-project"), { - name: inputs.name, - apiKey: alchemy.secret(neonApiKey), - region_id: inputs.neon.region, - pg_version: inputs.neon.pgVersion, - }); - - if (IS_PREVIEW && inputs.neon["enable-branching"]) { - // Create a separate branch for preview environments - const previewBranch = await NeonBranch(infra.id(`neon-branch-${STAGE}`), { - project: neonProject, - name: STAGE, - apiKey: alchemy.secret(neonApiKey), - endpoints: [{ type: "read_write" }], - }); - const connUri = previewBranch.connectionUris[0]; - if (!connUri) { - throw new Error(`No connection URI available for branch ${STAGE}`); - } - databaseUrl = connUri.connection_uri.unencrypted; - console.log( - `[database] Using Neon Preview Branch: ${previewBranch.name}`, - ); - } else { - databaseUrl = - neonProject.connection_uris[0].connection_uri.unencrypted; - console.log( - `[database] Using Neon: ${neonProject.name} (branch: ${neonProject.branch.name})`, - ); - } - - // Optionally write to SSM - if (inputs.ssm.enable) { - await SSMParameter(infra.id("database-url-ssm"), { - name: `${inputs.ssm.pathPrefix}/${STAGE}/database-url`, - type: "SecureString", - value: alchemy.secret(databaseUrl), - description: `Database connection URL for ${inputs.projectName} ${STAGE}`, - tags: { - app: inputs.projectName, - stage: STAGE, - }, - }); - } - break; - } -} - -// ============================================================================ -// Outputs -// ============================================================================ -export default { - databaseUrl, - provider, -}; diff --git a/packages/infra/gen/infra/modules/machines.ts b/packages/infra/gen/infra/modules/machines.ts deleted file mode 100644 index 26115f84..00000000 --- a/packages/infra/gen/infra/modules/machines.ts +++ /dev/null @@ -1,192 +0,0 @@ -// ============================================================================== -// Machine Inventory Infra Module -// -// Accepts machine definitions from Nix and emits a JSON string output. -// This output is intended to be pulled into stackpanel.infra.outputs.machines -// and consumed by Colmena. -// ============================================================================== -import Infra from "@stackpanel/infra"; - -interface MachineSshConfig { - user?: string; - port?: number; - keyPath?: string | null; -} - -interface MachineDefinition { - id?: string | null; - name?: string | null; - host?: string | null; - ssh?: MachineSshConfig; - tags?: string[]; - roles?: string[]; - provider?: string | null; - arch?: string | null; - publicIp?: string | null; - privateIp?: string | null; - labels?: Record; - nixosProfile?: string | null; - nixosModules?: string[]; - targetEnv?: string | null; - env?: Record; - metadata?: Record; -} - -interface MachineInputs { - source?: "static" | "aws-ec2"; - machines: Record; - aws?: { - region?: string | null; - instanceIds?: string[]; - filters?: Array<{ name: string; values: string[] }>; - nameTagKeys?: string[]; - roleTagKeys?: string[]; - tagKeys?: string[]; - envTagKeys?: string[]; - hostPreference?: Array<"publicDns" | "publicIp" | "privateIp">; - ssh?: MachineSshConfig; - }; -} - -const infra = new Infra("machines"); -const inputs = infra.inputs( - process.env.STACKPANEL_INFRA_INPUTS_OVERRIDES, -); - -const source = inputs.source ?? "static"; -const machines = inputs.machines ?? {}; - -function tagMap(tags?: Array<{ Key?: string; Value?: string }>): Record { - const result: Record = {}; - for (const tag of tags ?? []) { - if (!tag.Key) continue; - result[tag.Key] = tag.Value ?? ""; - } - return result; -} - -function pickTagValue(tags: Record, keys: string[]): string | null { - for (const key of keys) { - const value = tags[key]; - if (value) return value; - } - return null; -} - -function collectTagValues(tags: Record, keys: string[]): string[] { - const values: string[] = []; - for (const key of keys) { - const value = tags[key]; - if (value) values.push(value); - } - return values; -} - -function pickHost( - instance: { - PublicDnsName?: string; - PublicIpAddress?: string; - PrivateIpAddress?: string; - }, - preference: Array<"publicDns" | "publicIp" | "privateIp">, -): string | null { - for (const pref of preference) { - if (pref === "publicDns" && instance.PublicDnsName) return instance.PublicDnsName; - if (pref === "publicIp" && instance.PublicIpAddress) return instance.PublicIpAddress; - if (pref === "privateIp" && instance.PrivateIpAddress) return instance.PrivateIpAddress; - } - return null; -} - -function mapArchitecture(arch?: string | null): string | null { - if (!arch) return null; - if (arch === "arm64") return "aarch64-linux"; - if (arch === "x86_64") return "x86_64-linux"; - return null; -} - -async function loadAwsMachines(awsConfig?: MachineInputs["aws"]): Promise> { - const config = awsConfig ?? {}; - const { EC2Client, DescribeInstancesCommand } = await import("@aws-sdk/client-ec2"); - - const region = config.region ?? process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION; - const client = new EC2Client(region ? { region } : {}); - - const instanceIds = config.instanceIds ?? []; - const filters = (config.filters ?? []).map((filter) => ({ - Name: filter.name, - Values: filter.values, - })); - - if (instanceIds.length === 0 && filters.length === 0) { - console.warn("[machines] No instance IDs or filters provided; inventory will be empty."); - return {}; - } - - const hostPreference = config.hostPreference ?? ["publicDns", "publicIp", "privateIp"]; - const nameTagKeys = config.nameTagKeys ?? ["Name"]; - const roleTagKeys = config.roleTagKeys ?? []; - const tagKeys = config.tagKeys ?? []; - const envTagKeys = config.envTagKeys ?? []; - const defaultSsh = config.ssh ?? { user: "root", port: 22, keyPath: null }; - - const inventory: Record = {}; - let nextToken: string | undefined; - - do { - const response = await client.send( - new DescribeInstancesCommand({ - InstanceIds: instanceIds.length > 0 ? instanceIds : undefined, - Filters: filters.length > 0 ? filters : undefined, - NextToken: nextToken, - }), - ); - - for (const reservation of response.Reservations ?? []) { - for (const instance of reservation.Instances ?? []) { - const instanceId = instance.InstanceId ?? ""; - if (!instanceId) continue; - - const tags = tagMap(instance.Tags); - const name = pickTagValue(tags, nameTagKeys) ?? instanceId; - const roles = collectTagValues(tags, roleTagKeys); - const extraTags = collectTagValues(tags, tagKeys); - const targetEnv = pickTagValue(tags, envTagKeys); - const host = pickHost(instance, hostPreference); - - inventory[instanceId] = { - id: instanceId, - name, - host, - ssh: defaultSsh, - roles, - tags: extraTags, - provider: "aws-ec2", - arch: mapArchitecture(instance.Architecture), - publicIp: instance.PublicIpAddress ?? null, - privateIp: instance.PrivateIpAddress ?? null, - labels: tags, - targetEnv, - metadata: { - availabilityZone: instance.Placement?.AvailabilityZone, - instanceType: instance.InstanceType, - state: instance.State?.Name, - }, - }; - } - } - - nextToken = response.NextToken; - } while (nextToken); - - return inventory; -} - -const resolvedMachines = - source === "aws-ec2" - ? await loadAwsMachines(inputs.aws) - : machines; - -export default { - machines: JSON.stringify(resolvedMachines), -}; diff --git a/packages/infra/gen/infra/package.json b/packages/infra/gen/infra/package.json deleted file mode 100644 index 1834d951..00000000 --- a/packages/infra/gen/infra/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "dependencies": { - "@aws-sdk/client-ec2": "^3.953.0", - "@aws-sdk/client-ecr": "^3.953.0", - "@aws-sdk/client-elastic-load-balancing-v2": "^3.953.0", - "@aws-sdk/client-iam": "^3.953.0", - "@aws-sdk/client-kms": "^3.953.0", - "@aws-sdk/client-ssm": "^3.953.0", - "@aws-sdk/client-sts": "^3.953.0", - "alchemy": "^0.81.2" - }, - "devDependencies": { - "bun2nix": "latest" - }, - "exports": { - ".": { - "default": "./src/index.ts" - }, - "./*": { - "default": "./src/*.ts" - } - }, - "name": "@gen/infra", - "private": true, - "scripts": { - "alchemy:deploy": "alchemy deploy", - "alchemy:destroy": "alchemy destroy", - "alchemy:dev": "alchemy dev", - "postinstall": "test -f bun.lock \u0026\u0026 bun2nix -o bun.nix || true" - }, - "type": "module" -} diff --git a/packages/infra/gen/infra/src/index.ts b/packages/infra/gen/infra/src/index.ts deleted file mode 100644 index 73de2f40..00000000 --- a/packages/infra/gen/infra/src/index.ts +++ /dev/null @@ -1,352 +0,0 @@ -// Generated by stackpanel — do not edit manually. -// @stackpanel/infra — Infrastructure module library -import { execSync } from "node:child_process"; -import * as fs from "node:fs"; -import * as path from "node:path"; - -// Embedded project config -// @ts-ignore -const PROJECT_CONFIG = {"keyFormat":"$module-$key","projectName":"stackpanel","storageBackend":{"filePath":".stack/secrets/vars/dev.sops.yaml","group":"dev","type":"sops"}} as const; - -/** - * Resolve the project root directory. - */ -function getRoot(): string { - return ( - PROJECT_CONFIG.root || - process.env.STACKPANEL_ROOT || - execSync("git rev-parse --show-toplevel", { encoding: "utf-8" }).trim() || - process.cwd() - ); -} - -let _root: string | undefined; -function ROOT(): string { - if (!_root) _root = getRoot(); - return _root; -} - -const PRESERVED_MAP_KEYS = new Set([ - "apps", - "parameters", - "secureParameters", - "tags", -]); - -function toCamelCaseKey(key: string): string { - return key.replace(/-([a-zA-Z0-9])/g, (_match, char: string) => - char.toUpperCase(), - ); -} - -function normalizeInputKeys(value: T, parentKey?: string): T { - if (Array.isArray(value)) { - return value.map((item) => normalizeInputKeys(item)) as T; - } - - if (value !== null && typeof value === "object") { - const preserveChildKeys = parentKey ? PRESERVED_MAP_KEYS.has(parentKey) : false; - const result: Record = {}; - for (const [key, entry] of Object.entries(value)) { - const normalizedKey = preserveChildKeys ? key : toCamelCaseKey(key); - result[normalizedKey] = normalizeInputKeys(entry, normalizedKey); - } - return result as T; - } - - return value; -} - -/** - * Read and parse the infra inputs JSON file. - * Resolution order: - * 1. STACKPANEL_INFRA_INPUTS env var (path to JSON file) - * 2. .stack/state/infra-inputs.json (default location) - */ -function loadAllInputs(): Record { - const relPath = - process.env.STACKPANEL_INFRA_INPUTS ?? - ".stack/state/infra-inputs.json"; - const inputsPath = path.resolve(ROOT(), relPath); - - try { - const raw = fs.readFileSync(inputsPath, "utf-8"); - const parsed = JSON.parse(raw) as Record; - return Object.fromEntries( - Object.entries(parsed).map(([key, value]) => [key, normalizeInputKeys(value)]), - ); - } catch { - console.warn( - `[infra] Could not read inputs from ${inputsPath}, using empty inputs`, - ); - return {}; - } -} - -/** - * Decrypt AGE-encrypted values in an object tree. - * Values matching ENC[age,...] are decrypted using STACKPANEL_AGE_KEY. - */ -function decryptValues(obj: T): T { - if (typeof obj === "string" && obj.startsWith("ENC[age,")) { - const ageKey = process.env.STACKPANEL_AGE_KEY; - if (!ageKey) { - console.warn( - "[infra] Found AGE-encrypted value but STACKPANEL_AGE_KEY is not set", - ); - return obj; - } - try { - const encrypted = obj.slice(8, -1); // Remove ENC[age,...] wrapper - const result = execSync( - `echo "${encrypted}" | base64 -d | age -d -i <(echo "${ageKey}")`, - { - encoding: "utf-8", - shell: "/bin/bash", - stdio: ["pipe", "pipe", "pipe"], - }, - ).trim(); - return result as unknown as T; - } catch (err) { - console.warn("[infra] Failed to decrypt AGE value:", err); - return obj; - } - } - - if (Array.isArray(obj)) { - return obj.map(decryptValues) as unknown as T; - } - - if (obj !== null && typeof obj === "object") { - const result: any = {}; - for (const [key, value] of Object.entries(obj)) { - result[key] = decryptValues(value); - } - return result as T; - } - - return obj; -} - -/** - * Deep merge two objects (overrides win). - */ -function deepMerge(base: any, overrides: any): any { - if (overrides === undefined || overrides === null) return base; - if (typeof base !== "object" || typeof overrides !== "object") - return overrides; - if (Array.isArray(base) || Array.isArray(overrides)) return overrides; - - const result = { ...base }; - for (const [key, value] of Object.entries(overrides)) { - result[key] = deepMerge(result[key], value); - } - return result; -} - -/** - * Format an output key using the project key format template. - */ -function formatKey(moduleId: string, key: string): string { - return PROJECT_CONFIG.keyFormat - .replace(/\$module/g, moduleId) - .replace(/\$key/g, key); -} - -// ========================================================================= -// Infra class -// ========================================================================= - -export default class Infra { - private moduleId: string; - - constructor(moduleId: string) { - this.moduleId = moduleId; - } - - /** - * Resolve inputs for this module. - * - * @param overrides - Optional overrides (JSON string or object). - * Use process.env.STACKPANEL_INFRA_INPUTS_OVERRIDES for CI tweaks. - * @returns The module's input configuration with AGE values decrypted. - */ - inputs>(overrides?: string | Record): T { - const allInputs = loadAllInputs(); - let moduleInputs = allInputs[this.moduleId] ?? {}; - - // Apply overrides - if (overrides) { - const overrideObj = - typeof overrides === "string" ? JSON.parse(overrides) : overrides; - moduleInputs = deepMerge(moduleInputs, overrideObj); - } - - // Decrypt any AGE-encrypted values - return decryptValues(moduleInputs) as T; - } - - /** - * Scoped alchemy resource identifier. - * Prevents collisions between modules. - * - * @example - * infra.id("role") // → "aws-secrets-role" - */ - id(resourceName: string): string { - return `${this.moduleId}-${resourceName}`; - } - - /** - * Sync all module outputs to the configured storage backend. - * - * @param modules - Map of module ID → { outputs, syncKeys } - */ - static async syncAll( - modules: Record< - string, - { - outputs: Record; - syncKeys: string[]; - } - >, - ): Promise { - const backend = PROJECT_CONFIG.storageBackend; - if (backend.type === "none") { - console.log("[infra] Storage backend is 'none', skipping output sync"); - return; - } - - // Collect all entries to sync - const entries: Array<{ formattedKey: string; value: string }> = []; - for (const [moduleId, mod] of Object.entries(modules)) { - for (const syncKey of mod.syncKeys) { - const value = mod.outputs[syncKey]; - if (value !== undefined && value !== null) { - entries.push({ - formattedKey: formatKey(moduleId, syncKey), - value: String(value), - }); - } - } - } - - if (entries.length === 0) { - console.log("[infra] No outputs to sync"); - return; - } - - console.log( - `[infra] Syncing ${entries.length} outputs to ${backend.type}...`, - ); - - switch (backend.type) { - case "chamber": { - const service = (backend as any).service; - for (const { formattedKey, value } of entries) { - try { - execSync( - `printf '%s' ${JSON.stringify(value)} | chamber write ${service} ${formattedKey}`, - { stdio: "pipe" }, - ); - console.log(` ✓ chamber write ${service} ${formattedKey}`); - } catch (err) { - console.error( - ` ✗ Failed to write ${formattedKey} to chamber:`, - err, - ); - } - } - break; - } - - case "sops": { - const filePath = (backend as any).filePath; - const dir = path.dirname(filePath); - - if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); - - // Create the SOPS file if it doesn't exist yet - if (!fs.existsSync(filePath)) { - const initYaml = `_init: true\n`; - const tmpPath = `${filePath}.tmp`; - fs.writeFileSync(tmpPath, initYaml); - try { - execSync(`sops --encrypt --in-place "${tmpPath}"`, { - stdio: "pipe", - }); - fs.renameSync(tmpPath, filePath); - console.log(` Created new SOPS file: ${filePath}`); - } catch (err) { - console.error(` ✗ Failed to create SOPS file:`, err); - if (fs.existsSync(tmpPath)) fs.unlinkSync(tmpPath); - break; - } - } - - // Use `sops set` for each key — non-destructive, preserves existing secrets - for (const { formattedKey, value } of entries) { - try { - const jsonPath = JSON.stringify([formattedKey]); - const jsonValue = JSON.stringify(value); - execSync(`sops set ${JSON.stringify(filePath)} ${JSON.stringify(jsonPath)} ${JSON.stringify(jsonValue)}`, { - stdio: "pipe", - cwd: ROOT(), - }); - console.log(` ✓ sops set ${formattedKey} in ${filePath}`); - } catch (err) { - console.error( - ` ✗ Failed to set ${formattedKey} in ${filePath}:`, - err, - ); - } - } - - // Clean up _init placeholder if it exists - try { - const decrypted = execSync(`sops decrypt ${JSON.stringify(filePath)}`, { - encoding: "utf-8", - stdio: ["pipe", "pipe", "pipe"], - }); - if (decrypted.includes("_init:")) { - const tmpPath = `${filePath}.tmp`; - // Remove _init key via yq, re-encrypt - execSync( - `sops decrypt ${JSON.stringify(filePath)} | yq 'del(._init)' > "${tmpPath}" && sops --encrypt --in-place "${tmpPath}" && mv "${tmpPath}" ${JSON.stringify(filePath)}`, - { stdio: "pipe" }, - ); - } - } catch { - // Non-fatal: _init cleanup is best-effort - } - break; - } - - case "ssm": { - const prefix = (backend as any).prefix; - const { SSMParameter } = await import("alchemy/aws"); - const alchemy = await import("alchemy"); - for (const { formattedKey, value } of entries) { - try { - await SSMParameter(`infra-output-${formattedKey}`, { - name: `${prefix}/${formattedKey}`, - value: alchemy.default.secret(value), - type: "SecureString", - description: `Infrastructure output: ${formattedKey}`, - tags: { - "managed-by": "stackpanel-infra", - module: formattedKey.split("-")[0] ?? "unknown", - }, - }); - console.log(` ✓ SSM ${prefix}/${formattedKey}`); - } catch (err) { - console.error(` ✗ Failed to write ${formattedKey} to SSM:`, err); - } - } - break; - } - } - - console.log("[infra] Output sync complete"); - } -} diff --git a/packages/infra/gen/infra/src/resources/ec2-instance.ts b/packages/infra/gen/infra/src/resources/ec2-instance.ts deleted file mode 100644 index 44410aeb..00000000 --- a/packages/infra/gen/infra/src/resources/ec2-instance.ts +++ /dev/null @@ -1,238 +0,0 @@ -// ============================================================================= -// ec2-instance.tpl.ts — Custom Alchemy resource for AWS EC2 instances -// -// This is the Alchemy resource definition (create / update / delete / replace). -// Lifecycle decision logic (should we replace? can we adopt legacy state?) -// lives in ec2-lifecycle.tpl.ts to keep this file focused on AWS API calls. -// -// Generated by stackpanel — static library code. -// ============================================================================= -import type { Context } from "alchemy"; -import { Resource } from "alchemy"; -import { - type Ec2Instance, - type Ec2InstanceProps, - type NormalizedEc2InstanceProps, - coerceEc2InstanceState, - isEc2InstanceReady, - normalizeEc2InstanceProps, - requiresEc2InstanceReplacement, - shouldReuseEc2InstanceState, -} from "./ec2-lifecycle"; - -// Re-export types and helpers so existing imports from this module still work. -export { - type Ec2Instance, - type Ec2InstanceProps, - type NormalizedEc2InstanceProps, - coerceEc2InstanceState, - isEc2InstanceReady, - normalizeEc2InstanceProps, - requiresEc2InstanceReplacement, - shouldReuseEc2InstanceState, -}; - -// ---- AWS helpers ------------------------------------------------------------ - -/** Accept either an ARN or a profile name for the RunInstances API. */ -function formatIamInstanceProfile( - iamInstanceProfile: string | null | undefined, -): { Arn: string } | { Name: string } | undefined { - if (!iamInstanceProfile) return undefined; - return iamInstanceProfile.startsWith("arn:") - ? { Arn: iamInstanceProfile } - : { Name: iamInstanceProfile }; -} - -/** IAM instance profiles take a few seconds to propagate after creation. */ -function isRetryableIamInstanceProfileError(err: unknown): boolean { - if (!err || typeof err !== "object") return false; - const name = "name" in err ? String((err as { name?: unknown }).name) : ""; - const message = "message" in err ? String((err as { message?: unknown }).message) : ""; - return ( - name === "InvalidParameterValue" && - /iamInstanceProfile\.(arn|name)/i.test(message) && - /Invalid IAM Instance Profile/i.test(message) - ); -} - -async function runInstancesWithRetry( - client: InstanceType<(typeof import("@aws-sdk/client-ec2"))["EC2Client"]>, - command: import("@aws-sdk/client-ec2").RunInstancesCommand, - attempts = 10, -): Promise { - for (let attempt = 0; attempt < attempts; attempt += 1) { - try { - return await client.send(command); - } catch (err) { - if (!isRetryableIamInstanceProfileError(err) || attempt === attempts - 1) throw err; - await new Promise((resolve) => setTimeout(resolve, 3000)); - } - } - throw new Error("Unable to create EC2 instance"); -} - -/** Poll DescribeInstances until the instance is running (and public, if applicable). */ -async function waitForEc2InstanceDetails( - client: InstanceType<(typeof import("@aws-sdk/client-ec2"))["EC2Client"]>, - instanceId: string, - requirePublicEndpoint: boolean, - attempts = 40, -) { - const { DescribeInstancesCommand } = await import("@aws-sdk/client-ec2"); - - for (let attempt = 0; attempt < attempts; attempt += 1) { - const described = await client.send( - new DescribeInstancesCommand({ InstanceIds: [instanceId] }), - ); - const instance = described.Reservations?.[0]?.Instances?.[0]; - if (isEc2InstanceReady(instance, requirePublicEndpoint)) return instance; - await new Promise((resolve) => setTimeout(resolve, 3000)); - } - - throw new Error(`Timed out waiting for EC2 instance ${instanceId} to become ready`); -} - -/** Diff-apply tags: remove stale keys, upsert current ones. */ -async function syncInstanceTags( - client: InstanceType<(typeof import("@aws-sdk/client-ec2"))["EC2Client"]>, - instanceId: string, - previous: Record, - next: Record, -) { - const { CreateTagsCommand, DeleteTagsCommand } = await import("@aws-sdk/client-ec2"); - - const removedKeys = Object.keys(previous).filter((key) => !(key in next)); - if (removedKeys.length > 0) { - await client.send( - new DeleteTagsCommand({ - Resources: [instanceId], - Tags: removedKeys.map((Key) => ({ Key })), - }), - ); - } - - if (Object.keys(next).length > 0) { - await client.send( - new CreateTagsCommand({ - Resources: [instanceId], - Tags: Object.entries(next).map(([Key, Value]) => ({ Key, Value })), - }), - ); - } -} - -// ---- Alchemy resource ------------------------------------------------------- - -export const Ec2Instance = Resource( - "stackpanel::Ec2Instance", - async function ( - this: Context, - _id: string, - props: Ec2InstanceProps, - ): Promise { - const { - EC2Client, - RunInstancesCommand, - TerminateInstancesCommand, - } = await import("@aws-sdk/client-ec2"); - - const client = new EC2Client({}); - const propsSnapshot = normalizeEc2InstanceProps(props); - - // Attempt to read legacy Cloud Control state for migration scenarios. - const migratedState = coerceEc2InstanceState(this.output); - const reusableState = shouldReuseEc2InstanceState(this.phase, migratedState) - ? migratedState - : {}; - - // -- Delete --------------------------------------------------------------- - if (this.phase === "delete") { - if (props.destroyOnDelete === false) return this.destroy(); - if (this.output?.instanceId) { - await client.send( - new TerminateInstancesCommand({ InstanceIds: [this.output.instanceId] }), - ); - } - return this.destroy(); - } - - // -- Replace check -------------------------------------------------------- - // Compare our stored snapshot against the new desired props. - // Only triggers on actual immutable changes, not on AWS's synthetic fields. - const previousSnapshot = this.output?.propsSnapshot ?? reusableState.propsSnapshot; - if ( - this.phase === "update" && - previousSnapshot && - requiresEc2InstanceReplacement(previousSnapshot, propsSnapshot) - ) { - return this.replace(); - } - - // -- Create or adopt ------------------------------------------------------ - let instanceId = shouldReuseEc2InstanceState(this.phase, this.output) - ? this.output?.instanceId - : reusableState.instanceId; - - if (!instanceId) { - const run = await runInstancesWithRetry( - client, - new RunInstancesCommand({ - ImageId: props.ami, - InstanceType: props.instanceType, - SubnetId: props.subnetId, - SecurityGroupIds: props.securityGroupIds, - KeyName: props.keyName ?? undefined, - IamInstanceProfile: formatIamInstanceProfile(props.iamInstanceProfile), - UserData: props.userData - ? Buffer.from(props.userData).toString("base64") - : undefined, - MinCount: 1, - MaxCount: 1, - BlockDeviceMappings: props.rootVolumeSize - ? [{ DeviceName: "/dev/xvda", Ebs: { VolumeSize: props.rootVolumeSize, VolumeType: "gp3" } }] - : undefined, - NetworkInterfaces: props.associatePublicIp === false - ? [{ DeviceIndex: 0, SubnetId: props.subnetId, Groups: props.securityGroupIds, AssociatePublicIpAddress: false }] - : undefined, - TagSpecifications: [{ - ResourceType: "instance", - Tags: Object.entries({ - Name: props.name, - ...props.tags, - alchemy_stage: this.stage, - alchemy_resource: this.id, - }).map(([Key, Value]) => ({ Key, Value })), - }], - }), - ); - instanceId = run.Instances?.[0]?.InstanceId; - } - - if (!instanceId) throw new Error(`Unable to create EC2 instance ${props.name}`); - - // -- Tag sync ------------------------------------------------------------- - if (this.phase === "update") { - await syncInstanceTags(client, instanceId, previousSnapshot?.tags ?? {}, propsSnapshot.tags); - } else if (Object.keys(propsSnapshot.tags).length > 0) { - await syncInstanceTags(client, instanceId, {}, propsSnapshot.tags); - } - - // -- Wait for readiness --------------------------------------------------- - const instance = await waitForEc2InstanceDetails( - client, - instanceId, - propsSnapshot.associatePublicIp, - ); - - return { - instanceId, - publicIp: instance?.PublicIpAddress ?? null, - privateIp: instance?.PrivateIpAddress ?? null, - publicDns: instance?.PublicDnsName ?? null, - state: instance?.State?.Name ?? null, - name: props.name, - propsSnapshot, - }; - }, -); diff --git a/packages/infra/gen/infra/src/resources/ec2-lifecycle.ts b/packages/infra/gen/infra/src/resources/ec2-lifecycle.ts deleted file mode 100644 index c0d1f910..00000000 --- a/packages/infra/gen/infra/src/resources/ec2-lifecycle.ts +++ /dev/null @@ -1,246 +0,0 @@ -// ============================================================================= -// ec2-lifecycle.tpl.ts — EC2 instance lifecycle decision helpers -// -// Pure functions (no AWS calls) that determine whether an EC2 instance -// should be replaced, updated, or adopted from legacy state. -// -// Key design decision: Alchemy's Cloud Control EC2 provider compares -// desired state against the live AWS model, which includes synthetic -// fields like SecurityGroups (by name). That causes false replacements. -// Instead, this module stores a normalized snapshot of the desired props -// in Alchemy state and compares snapshot-to-snapshot, ignoring whatever -// extra fields AWS returns. -// -// Generated by stackpanel — static library code. -// ============================================================================= - -// ---- Types ------------------------------------------------------------------ - -export interface Ec2InstanceProps { - name: string; - ami: string; - instanceType: string; - subnetId: string; - securityGroupIds: string[]; - keyName?: string | null; - iamInstanceProfile?: string | null; - userData?: string | null; - rootVolumeSize?: number | null; - associatePublicIp?: boolean; - tags?: Record; - destroyOnDelete?: boolean; -} - -/** Deterministic representation of EC2 props, used for diffing across deploys. */ -export interface NormalizedEc2InstanceProps { - ami: string; - instanceType: string; - subnetId: string; - securityGroupIds: string[]; - keyName: string | null; - iamInstanceProfile: string | null; - userData: string | null; - rootVolumeSize: number | null; - associatePublicIp: boolean; - tags: Record; -} - -export interface Ec2Instance { - instanceId: string; - publicIp?: string | null; - privateIp?: string | null; - publicDns?: string | null; - state?: string | null; - name: string; - /** Stored snapshot of the props that created/last updated this instance. */ - propsSnapshot: NormalizedEc2InstanceProps; -} - -// ---- Normalization ---------------------------------------------------------- - -function sortRecord(value: Record | undefined): Record { - return Object.fromEntries( - Object.entries(value ?? {}).sort(([left], [right]) => left.localeCompare(right)), - ); -} - -/** - * Convert raw Ec2InstanceProps into a deterministic snapshot. - * Sorts arrays and records so ordering differences don't trigger replacements. - */ -export function normalizeEc2InstanceProps( - props: Ec2InstanceProps, -): NormalizedEc2InstanceProps { - return { - ami: props.ami, - instanceType: props.instanceType, - subnetId: props.subnetId, - securityGroupIds: [...props.securityGroupIds].sort(), - keyName: props.keyName ?? null, - iamInstanceProfile: props.iamInstanceProfile ?? null, - userData: props.userData ?? null, - rootVolumeSize: props.rootVolumeSize ?? null, - associatePublicIp: props.associatePublicIp ?? true, - tags: sortRecord(props.tags), - }; -} - -// ---- Replacement detection -------------------------------------------------- - -/** - * Returns true if any immutable property changed between deploys. - * Tag changes are NOT immutable — they get synced in-place. - */ -export function requiresEc2InstanceReplacement( - previous: NormalizedEc2InstanceProps, - next: NormalizedEc2InstanceProps, -): boolean { - return ( - previous.ami !== next.ami || - previous.instanceType !== next.instanceType || - previous.subnetId !== next.subnetId || - JSON.stringify(previous.securityGroupIds) !== JSON.stringify(next.securityGroupIds) || - previous.keyName !== next.keyName || - previous.iamInstanceProfile !== next.iamInstanceProfile || - previous.userData !== next.userData || - previous.rootVolumeSize !== next.rootVolumeSize || - previous.associatePublicIp !== next.associatePublicIp - ); -} - -// ---- Legacy state migration ------------------------------------------------- -// -// When migrating from AWS Cloud Control's EC2 provider (AWS::EC2::Instance) -// to this custom resource, the Alchemy state file contains CloudFormation- -// shaped output (PascalCase fields, desiredState blob). These functions -// coerce that legacy shape into our Ec2Instance type so the resource can -// adopt the existing instance without forcing a replacement. - -/** Convert AWS CloudFormation Tag array [{Key, Value}] to a plain record. */ -function tagsToRecord(value: unknown): Record { - if (!Array.isArray(value)) return {}; - - return Object.fromEntries( - value - .flatMap((tag) => { - if (!tag || typeof tag !== "object") return []; - const record = tag as { Key?: unknown; Value?: unknown }; - if (typeof record.Key !== "string" || typeof record.Value !== "string") return []; - return [[record.Key, record.Value] as const]; - }) - .sort(([left], [right]) => left.localeCompare(right)), - ); -} - -/** - * Best-effort coercion of legacy Cloud Control output into Ec2Instance shape. - * Falls back gracefully — any field that can't be read is set to null/undefined. - */ -export function coerceEc2InstanceState(output: unknown): Partial { - if (!output || typeof output !== "object") return {}; - - const record = output as Record; - const desiredState = - record.desiredState && typeof record.desiredState === "object" - ? (record.desiredState as Record) - : {}; - - // Cloud Control nests networking under NetworkInterfaces[0] - const networkInterface = - desiredState.NetworkInterfaces?.[0] ?? record.NetworkInterfaces?.[0] ?? {}; - const securityGroupIds = - desiredState.SecurityGroupIds ?? networkInterface.GroupSet ?? record.SecurityGroupIds ?? []; - const subnetId = - desiredState.SubnetId ?? networkInterface.SubnetId ?? record.SubnetId; - const ami = desiredState.ImageId ?? record.ImageId; - const instanceType = desiredState.InstanceType ?? record.InstanceType; - - let propsSnapshot: NormalizedEc2InstanceProps | undefined; - if ( - typeof ami === "string" && - typeof instanceType === "string" && - typeof subnetId === "string" && - Array.isArray(securityGroupIds) - ) { - const desiredMappings = desiredState.BlockDeviceMappings ?? record.BlockDeviceMappings ?? []; - const rootVolumeSize = desiredMappings?.[0]?.Ebs?.VolumeSize; - - propsSnapshot = normalizeEc2InstanceProps({ - name: String(record.name ?? "legacy"), - ami, - instanceType, - subnetId, - securityGroupIds: securityGroupIds.filter( - (value: unknown): value is string => typeof value === "string", - ), - keyName: - typeof (desiredState.KeyName ?? record.KeyName) === "string" - ? (desiredState.KeyName ?? record.KeyName) : null, - iamInstanceProfile: - typeof (desiredState.IamInstanceProfile ?? record.IamInstanceProfile) === "string" - ? (desiredState.IamInstanceProfile ?? record.IamInstanceProfile) : null, - userData: - typeof (desiredState.UserData ?? record.UserData) === "string" - ? (desiredState.UserData ?? record.UserData) : null, - rootVolumeSize: typeof rootVolumeSize === "number" ? rootVolumeSize : null, - associatePublicIp: - typeof networkInterface.AssociatePublicIpAddress === "boolean" - ? networkInterface.AssociatePublicIpAddress : true, - tags: tagsToRecord(desiredState.Tags ?? record.Tags), - }); - } - - return { - instanceId: - (typeof record.instanceId === "string" ? record.instanceId : null) ?? - (typeof record.InstanceId === "string" ? record.InstanceId : null) ?? - (typeof record.id === "string" ? record.id : null) ?? - undefined, - publicIp: - (typeof record.publicIp === "string" ? record.publicIp : null) ?? - (typeof record.PublicIp === "string" ? record.PublicIp : null) ?? null, - privateIp: - (typeof record.privateIp === "string" ? record.privateIp : null) ?? - (typeof record.PrivateIp === "string" ? record.PrivateIp : null) ?? - (typeof record.PrivateIpAddress === "string" ? record.PrivateIpAddress : null) ?? null, - publicDns: - (typeof record.publicDns === "string" ? record.publicDns : null) ?? - (typeof record.PublicDnsName === "string" ? record.PublicDnsName : null) ?? null, - state: - (typeof record.state === "string" ? record.state : null) ?? - (typeof record.State?.Name === "string" ? record.State.Name : null) ?? null, - name: typeof record.name === "string" ? record.name : "legacy", - propsSnapshot, - }; -} - -// ---- Phase guards ----------------------------------------------------------- - -/** - * During Alchemy's replace flow, the resource is called in a create-like - * phase but still receives the OLD (terminated) output. We must not reuse - * a terminated instance's ID — only update phases should inherit state. - */ -export function shouldReuseEc2InstanceState( - phase: string, - output: Partial | null | undefined, -): boolean { - return phase === "update" && Boolean(output?.instanceId); -} - -/** - * An instance is "ready" when it's running and, for public instances, - * has been assigned at least an IP or DNS name. - */ -export function isEc2InstanceReady( - instance: { - State?: { Name?: string | null } | null; - PublicIpAddress?: string | null; - PublicDnsName?: string | null; - } | null | undefined, - requirePublicEndpoint: boolean, -): boolean { - if (instance?.State?.Name !== "running") return false; - if (!requirePublicEndpoint) return true; - return Boolean(instance.PublicIpAddress || instance.PublicDnsName); -} diff --git a/packages/infra/gen/infra/src/resources/iam-instance-profile.ts b/packages/infra/gen/infra/src/resources/iam-instance-profile.ts deleted file mode 100644 index a7731270..00000000 --- a/packages/infra/gen/infra/src/resources/iam-instance-profile.ts +++ /dev/null @@ -1,199 +0,0 @@ -// Custom alchemy Resource for AWS IAM Instance Profile. -// Generated by stackpanel — static library code. -import type { Context } from "alchemy"; -import { Resource } from "alchemy"; - -export interface IamInstanceProfileProps { - name: string; - roleName: string; - tags?: Record; - destroyOnDelete?: boolean; -} - -export interface IamInstanceProfile { - name: string; - arn: string; - roleName: string; - adopted?: boolean; -} - -function isNoSuchEntityError(err: unknown): boolean { - if (!err || typeof err !== "object") return false; - const name = "name" in err ? String((err as { name?: unknown }).name) : ""; - return name === "NoSuchEntity" || name === "NoSuchEntityException"; -} - -async function getInstanceProfileWithRetry( - client: InstanceType<(typeof import("@aws-sdk/client-iam"))["IAMClient"]>, - name: string, - attempts = 10, -): Promise { - const { GetInstanceProfileCommand } = await import("@aws-sdk/client-iam"); - - for (let attempt = 0; attempt < attempts; attempt += 1) { - try { - return await client.send( - new GetInstanceProfileCommand({ InstanceProfileName: name }), - ); - } catch (err) { - if (!isNoSuchEntityError(err) || attempt === attempts - 1) { - throw err; - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - } - - throw new Error(`Unable to resolve instance profile ${name}`); -} - -async function addRoleToInstanceProfileWithRetry( - client: InstanceType<(typeof import("@aws-sdk/client-iam"))["IAMClient"]>, - profileName: string, - roleName: string, - attempts = 10, -): Promise { - const { AddRoleToInstanceProfileCommand } = await import("@aws-sdk/client-iam"); - - for (let attempt = 0; attempt < attempts; attempt += 1) { - try { - await client.send( - new AddRoleToInstanceProfileCommand({ - InstanceProfileName: profileName, - RoleName: roleName, - }), - ); - return; - } catch (err) { - if (!isNoSuchEntityError(err) || attempt === attempts - 1) { - throw err; - } - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - } -} - -export const IamInstanceProfile = Resource( - "stackpanel::IamInstanceProfile", - async function ( - this: Context, - _id: string, - props: IamInstanceProfileProps, - ): Promise { - const { - IAMClient, - GetInstanceProfileCommand, - CreateInstanceProfileCommand, - AddRoleToInstanceProfileCommand, - RemoveRoleFromInstanceProfileCommand, - TagInstanceProfileCommand, - DeleteInstanceProfileCommand, - } = await import("@aws-sdk/client-iam"); - - const client = new IAMClient({}); - - if (this.phase === "delete") { - if (props.destroyOnDelete === false) { - return this.destroy(); - } - try { - const existing = await client.send( - new GetInstanceProfileCommand({ InstanceProfileName: props.name }), - ); - const roles = existing.InstanceProfile?.Roles ?? []; - for (const role of roles) { - await client.send( - new RemoveRoleFromInstanceProfileCommand({ - InstanceProfileName: props.name, - RoleName: role.RoleName!, - }), - ); - } - await client.send( - new DeleteInstanceProfileCommand({ InstanceProfileName: props.name }), - ); - } catch (err: any) { - if (!isNoSuchEntityError(err)) throw err; - } - return this.destroy(); - } - - let adopted = this.output?.adopted ?? false; - let profile = this.output; - - if (profile) { - try { - const existing = await getInstanceProfileWithRetry(client, props.name, 1); - profile = { - name: props.name, - arn: existing.InstanceProfile?.Arn ?? profile.arn, - roleName: props.roleName, - }; - } catch (err) { - if (!isNoSuchEntityError(err)) throw err; - profile = undefined; - adopted = false; - } - } - - if (!profile) { - try { - const existing = await client.send( - new GetInstanceProfileCommand({ InstanceProfileName: props.name }), - ); - if (existing.InstanceProfile?.Arn) { - adopted = true; - profile = { - name: props.name, - arn: existing.InstanceProfile.Arn, - roleName: props.roleName, - }; - } - } catch (err: any) { - if (!isNoSuchEntityError(err)) throw err; - } - } - - if (!profile) { - const created = await client.send( - new CreateInstanceProfileCommand({ - InstanceProfileName: props.name, - Tags: props.tags - ? Object.entries(props.tags).map(([Key, Value]) => ({ Key, Value })) - : undefined, - }), - ); - if (!created.InstanceProfile?.Arn) { - throw new Error(`Unable to create instance profile ${props.name}`); - } - profile = { - name: props.name, - arn: created.InstanceProfile.Arn, - roleName: props.roleName, - }; - } - - if (props.tags && Object.keys(props.tags).length > 0) { - await client.send( - new TagInstanceProfileCommand({ - InstanceProfileName: props.name, - Tags: Object.entries(props.tags).map(([Key, Value]) => ({ Key, Value })), - }), - ); - } - - const current = await getInstanceProfileWithRetry(client, props.name); - const existingRoles = new Set( - (current.InstanceProfile?.Roles ?? []).map((role) => role.RoleName), - ); - if (!existingRoles.has(props.roleName)) { - await addRoleToInstanceProfileWithRetry(client, props.name, props.roleName); - } - - return { - name: props.name, - arn: current.InstanceProfile?.Arn ?? profile.arn, - roleName: props.roleName, - adopted, - }; - }, -); diff --git a/packages/infra/gen/infra/src/resources/iam-role.ts b/packages/infra/gen/infra/src/resources/iam-role.ts deleted file mode 100644 index 60b68a77..00000000 --- a/packages/infra/gen/infra/src/resources/iam-role.ts +++ /dev/null @@ -1,152 +0,0 @@ -import type { Context } from "alchemy"; -import { Resource } from "alchemy"; - -export interface IamInlinePolicy { - policyName: string; - policyDocument: unknown; -} - -export interface IamRoleProps { - roleName: string; - assumeRolePolicy: unknown; - description?: string; - tags?: Record; - managedPolicyArns?: string[]; - policies?: IamInlinePolicy[]; - destroyOnDelete?: boolean; -} - -export interface IamRole extends IamRoleProps { - arn: string; - adopted?: boolean; -} - -function asPolicyJson(policy: unknown): string { - return typeof policy === "string" ? policy : JSON.stringify(policy); -} - -export const IamRole = Resource( - "stackpanel::IamRole", - async function ( - this: Context, - _id: string, - props: IamRoleProps, - ): Promise { - const { - IAMClient, - CreateRoleCommand, - GetRoleCommand, - UpdateAssumeRolePolicyCommand, - UpdateRoleDescriptionCommand, - TagRoleCommand, - ListAttachedRolePoliciesCommand, - AttachRolePolicyCommand, - PutRolePolicyCommand, - } = await import("@aws-sdk/client-iam"); - - const client = new IAMClient({}); - - if (this.phase === "delete") { - return this.destroy(); - } - - let adopted = this.output?.adopted ?? false; - - const getExistingRole = async () => { - try { - const existing = await client.send(new GetRoleCommand({ RoleName: props.roleName })); - return existing.Role; - } catch (err: any) { - if (err.name === "NoSuchEntityException") { - return undefined; - } - throw err; - } - }; - - let role = await getExistingRole(); - - if (!role) { - const created = await client.send( - new CreateRoleCommand({ - RoleName: props.roleName, - AssumeRolePolicyDocument: asPolicyJson(props.assumeRolePolicy), - Description: props.description, - Tags: Object.entries(props.tags ?? {}).map(([Key, Value]) => ({ Key, Value })), - }), - ); - role = created.Role; - } else { - adopted = true; - } - - await client.send( - new UpdateAssumeRolePolicyCommand({ - RoleName: props.roleName, - PolicyDocument: asPolicyJson(props.assumeRolePolicy), - }), - ); - - if (props.description) { - await client.send( - new UpdateRoleDescriptionCommand({ - RoleName: props.roleName, - Description: props.description, - }), - ); - } - - if (props.tags && Object.keys(props.tags).length > 0) { - await client.send( - new TagRoleCommand({ - RoleName: props.roleName, - Tags: Object.entries(props.tags).map(([Key, Value]) => ({ Key, Value })), - }), - ); - } - - const managedPolicyArns = props.managedPolicyArns ?? []; - if (managedPolicyArns.length > 0) { - const attached = await client.send( - new ListAttachedRolePoliciesCommand({ - RoleName: props.roleName, - }), - ); - const attachedArns = new Set((attached.AttachedPolicies ?? []).map((policy) => policy.PolicyArn)); - - for (const arn of managedPolicyArns) { - if (!attachedArns.has(arn)) { - await client.send( - new AttachRolePolicyCommand({ - RoleName: props.roleName, - PolicyArn: arn, - }), - ); - } - } - } - - for (const policy of props.policies ?? []) { - await client.send( - new PutRolePolicyCommand({ - RoleName: props.roleName, - PolicyName: policy.policyName, - PolicyDocument: asPolicyJson(policy.policyDocument), - }), - ); - } - - const finalRole = await client.send(new GetRoleCommand({ RoleName: props.roleName })); - const finalArn = finalRole.Role?.Arn ?? role?.Arn; - - if (!finalArn) { - throw new Error(`Unable to resolve ARN for IAM role ${props.roleName}`); - } - - return { - ...props, - arn: finalArn, - adopted, - }; - }, -); diff --git a/packages/infra/gen/infra/src/resources/key-pair.ts b/packages/infra/gen/infra/src/resources/key-pair.ts deleted file mode 100644 index 6bcf4061..00000000 --- a/packages/infra/gen/infra/src/resources/key-pair.ts +++ /dev/null @@ -1,104 +0,0 @@ -// Custom alchemy Resource for AWS Key Pair. -// Generated by stackpanel — static library code. -import type { Context } from "alchemy"; -import { Resource } from "alchemy"; - -export interface KeyPairProps { - keyName: string; - publicKey: string; - tags?: Record; - destroyOnDelete?: boolean; -} - -export interface KeyPair { - keyName: string; - keyPairId?: string; - adopted?: boolean; -} - -function hasTags(tags: Record | undefined): tags is Record { - return Boolean(tags && Object.keys(tags).length > 0); -} - -export const KeyPair = Resource( - "stackpanel::KeyPair", - async function ( - this: Context, - _id: string, - props: KeyPairProps, - ): Promise { - const { - EC2Client, - DescribeKeyPairsCommand, - ImportKeyPairCommand, - CreateTagsCommand, - DeleteKeyPairCommand, - } = await import("@aws-sdk/client-ec2"); - - const client = new EC2Client({}); - - if (this.phase === "delete") { - if (props.destroyOnDelete === false) { - return this.destroy(); - } - - try { - await client.send(new DeleteKeyPairCommand({ KeyName: props.keyName })); - } catch (err: any) { - if (err.name !== "InvalidKeyPair.NotFound") throw err; - } - - return this.destroy(); - } - - let adopted = this.output?.adopted ?? false; - let keyPairId = this.output?.keyPairId; - - try { - const existing = await client.send( - new DescribeKeyPairsCommand({ KeyNames: [props.keyName] }), - ); - const found = existing.KeyPairs?.[0]; - if (found?.KeyPairId) { - adopted = true; - keyPairId = found.KeyPairId; - } - } catch (err: any) { - if (err.name !== "InvalidKeyPair.NotFound") throw err; - } - - if (!keyPairId) { - const imported = await client.send( - new ImportKeyPairCommand({ - KeyName: props.keyName, - PublicKeyMaterial: Buffer.from(props.publicKey), - TagSpecifications: hasTags(props.tags) - ? [ - { - ResourceType: "key-pair", - Tags: Object.entries(props.tags).map(([Key, Value]) => ({ - Key, - Value, - })), - }, - ] - : undefined, - }), - ); - keyPairId = imported.KeyPairId; - } else if (hasTags(props.tags)) { - await client.send( - new CreateTagsCommand({ - Resources: [keyPairId], - Tags: Object.entries(props.tags).map(([Key, Value]) => ({ Key, Value })), - }), - ); - } - - return { - keyName: props.keyName, - keyPairId, - adopted, - }; - }, -); diff --git a/packages/infra/gen/infra/src/resources/security-group.ts b/packages/infra/gen/infra/src/resources/security-group.ts deleted file mode 100644 index a82581f7..00000000 --- a/packages/infra/gen/infra/src/resources/security-group.ts +++ /dev/null @@ -1,181 +0,0 @@ -// Custom alchemy Resource for AWS Security Group. -// Generated by stackpanel — static library code. -import type { Context } from "alchemy"; -import { Resource } from "alchemy"; - -export interface SecurityGroupRule { - fromPort: number; - toPort: number; - protocol: string; - cidrBlocks?: string[]; - ipv6CidrBlocks?: string[]; - securityGroupIds?: string[]; - description?: string; -} - -export interface SecurityGroupProps { - name: string; - description?: string; - vpcId: string; - ingress?: SecurityGroupRule[]; - egress?: SecurityGroupRule[]; - tags?: Record; - destroyOnDelete?: boolean; -} - -export interface SecurityGroup { - groupId: string; - name: string; - adopted?: boolean; -} - -export const SecurityGroup = Resource( - "stackpanel::SecurityGroup", - async function ( - this: Context, - _id: string, - props: SecurityGroupProps, - ): Promise { - const { - EC2Client, - CreateSecurityGroupCommand, - DescribeSecurityGroupsCommand, - AuthorizeSecurityGroupIngressCommand, - AuthorizeSecurityGroupEgressCommand, - CreateTagsCommand, - DeleteSecurityGroupCommand, - } = await import("@aws-sdk/client-ec2"); - - const client = new EC2Client({}); - - if (this.phase === "delete") { - if (props.destroyOnDelete === false) { - return this.destroy(); - } - - if (this.output?.groupId) { - try { - await client.send( - new DeleteSecurityGroupCommand({ GroupId: this.output.groupId }), - ); - } catch (err: any) { - if (err.name !== "InvalidGroup.NotFound") throw err; - } - } - return this.destroy(); - } - - let groupId = this.output?.groupId; - let adopted = this.output?.adopted ?? false; - - if (!groupId) { - const existing = await client.send( - new DescribeSecurityGroupsCommand({ - Filters: [ - { Name: "group-name", Values: [props.name] }, - { Name: "vpc-id", Values: [props.vpcId] }, - ], - }), - ); - const found = existing.SecurityGroups?.[0]; - if (found?.GroupId) { - groupId = found.GroupId; - adopted = true; - } - } - - if (!groupId) { - const created = await client.send( - new CreateSecurityGroupCommand({ - GroupName: props.name, - Description: props.description ?? props.name, - VpcId: props.vpcId, - }), - ); - groupId = created.GroupId; - } - - if (!groupId) { - throw new Error(`Unable to resolve security group id for ${props.name}`); - } - - if (props.tags && Object.keys(props.tags).length > 0) { - await client.send( - new CreateTagsCommand({ - Resources: [groupId], - Tags: Object.entries(props.tags).map(([Key, Value]) => ({ Key, Value })), - }), - ); - } - - const ingressRules = props.ingress ?? []; - if (ingressRules.length > 0) { - try { - await client.send( - new AuthorizeSecurityGroupIngressCommand({ - GroupId: groupId, - IpPermissions: ingressRules.map((rule) => ({ - IpProtocol: rule.protocol, - FromPort: rule.fromPort, - ToPort: rule.toPort, - IpRanges: (rule.cidrBlocks ?? []).map((CidrIp) => ({ - CidrIp, - Description: rule.description, - })), - Ipv6Ranges: (rule.ipv6CidrBlocks ?? []).map((CidrIpv6) => ({ - CidrIpv6, - Description: rule.description, - })), - UserIdGroupPairs: (rule.securityGroupIds ?? []).map((GroupId) => ({ - GroupId, - Description: rule.description, - })), - })), - }), - ); - } catch (err: any) { - if (err.name !== "InvalidPermission.Duplicate") { - throw err; - } - } - } - - const egressRules = props.egress ?? []; - if (egressRules.length > 0) { - try { - await client.send( - new AuthorizeSecurityGroupEgressCommand({ - GroupId: groupId, - IpPermissions: egressRules.map((rule) => ({ - IpProtocol: rule.protocol, - FromPort: rule.fromPort, - ToPort: rule.toPort, - IpRanges: (rule.cidrBlocks ?? []).map((CidrIp) => ({ - CidrIp, - Description: rule.description, - })), - Ipv6Ranges: (rule.ipv6CidrBlocks ?? []).map((CidrIpv6) => ({ - CidrIpv6, - Description: rule.description, - })), - UserIdGroupPairs: (rule.securityGroupIds ?? []).map((GroupId) => ({ - GroupId, - Description: rule.description, - })), - })), - }), - ); - } catch (err: any) { - if (err.name !== "InvalidPermission.Duplicate") { - throw err; - } - } - } - - return { - groupId, - name: props.name, - adopted, - }; - }, -); diff --git a/packages/infra/gen/infra/src/types.ts b/packages/infra/gen/infra/src/types.ts deleted file mode 100644 index 68f0a2c3..00000000 --- a/packages/infra/gen/infra/src/types.ts +++ /dev/null @@ -1,500 +0,0 @@ -// Generated by stackpanel — do not edit manually. -// TypeScript interfaces for infra module inputs. - -export interface AwsEc2AppInputs { - apps: { - docs: { - alb: { - certificateArn: any; - create: boolean; - enable: boolean; - existingListenerHttpArn: any; - existingListenerHttpsArn: any; - hostRulePriority: number; - hostnames: string[]; - http: boolean; - https: boolean; - ipAddressType: string; - name: any; - scheme: string; - securityGroupIds: string[]; - sslPolicy: string; - subnetIds: string[]; - targetGroup: { - healthCheck: { - enabled: boolean; - healthyThreshold: number; - interval: number; - matcher: string; - path: string; - port: any; - protocol: string; - timeout: number; - unhealthyThreshold: number; -}; - port: number; - protocol: string; -}; -}; - ami: any; - associatePublicIp: boolean; - ecr: { - create: boolean; - enable: boolean; - github: { - allowTags: boolean; - allowedBranches: string[]; - allowedWorkflows: string[]; - createOidcProvider: boolean; - enable: boolean; - oidcProviderArn: any; - repoName: any; - repoOwner: any; - roleName: any; -}; - imageTagMutability: string; - lifecyclePolicy: any; - repoName: any; - scanOnPush: boolean; -}; - iam: { - assumeRolePolicy: any; - enable: boolean; - inlinePolicies: string[]; - instanceProfileName: any; - instanceProfileTags: { - -}; - managedPolicyArns: string[]; - roleName: string; - tags: { - -}; -}; - iamInstanceProfile: any; - instanceCount: number; - instanceType: string; - instances: string[]; - keyName: any; - keyPair: { - create: boolean; - destroyOnDelete: boolean; - name: any; - publicKey: any; - tags: { - -}; -}; - machine: { - arch: any; - roles: string[]; - ssh: { - keyPath: any; - port: number; - user: string; -}; - tags: string[]; - targetEnv: string; -}; - nixos: { - amiId: any; - flakeUrl: any; - flakeVersion: string; - hostConfig: any; -}; - osType: string; - rootVolumeSize: any; - securityGroup: { - create: boolean; - description: any; - egress: string[]; - ingress: string[]; - name: any; - tags: { - -}; -}; - securityGroupIds: string[]; - ssm: { - enable: boolean; - envFilePath: any; - installCli: boolean; - parameters: { - -}; - pathPrefix: any; - refreshScriptPath: any; - region: any; - secureParameters: { - -}; - useChamber: boolean; -}; - subnetIds: string[]; - tags: { - managedBy: string; - name: string; -}; - userData: any; - vpcId: any; -}; - stackpanelStaging: { - alb: { - certificateArn: any; - create: boolean; - enable: boolean; - existingListenerHttpArn: any; - existingListenerHttpsArn: any; - hostRulePriority: number; - hostnames: string[]; - http: boolean; - https: boolean; - ipAddressType: string; - name: any; - scheme: string; - securityGroupIds: string[]; - sslPolicy: string; - subnetIds: string[]; - targetGroup: { - healthCheck: { - enabled: boolean; - healthyThreshold: number; - interval: number; - matcher: string; - path: string; - port: any; - protocol: string; - timeout: number; - unhealthyThreshold: number; -}; - port: number; - protocol: string; -}; -}; - ami: any; - associatePublicIp: boolean; - ecr: { - create: boolean; - enable: boolean; - github: { - allowTags: boolean; - allowedBranches: string[]; - allowedWorkflows: string[]; - createOidcProvider: boolean; - enable: boolean; - oidcProviderArn: any; - repoName: any; - repoOwner: any; - roleName: any; -}; - imageTagMutability: string; - lifecyclePolicy: any; - repoName: any; - scanOnPush: boolean; -}; - iam: { - assumeRolePolicy: any; - enable: boolean; - inlinePolicies: string[]; - instanceProfileName: any; - instanceProfileTags: { - -}; - managedPolicyArns: string[]; - roleName: string; - tags: { - -}; -}; - iamInstanceProfile: any; - instanceCount: number; - instanceType: string; - instances: string[]; - keyName: any; - keyPair: { - create: boolean; - destroyOnDelete: boolean; - name: string; - publicKey: string; - tags: { - -}; -}; - machine: { - arch: any; - roles: string[]; - ssh: { - keyPath: any; - port: number; - user: string; -}; - tags: string[]; - targetEnv: string; -}; - nixos: { - amiId: any; - flakeUrl: any; - flakeVersion: string; - hostConfig: any; -}; - osType: string; - rootVolumeSize: any; - securityGroup: { - create: boolean; - description: any; - egress: string[]; - ingress: string[]; - name: any; - tags: { - -}; -}; - securityGroupIds: string[]; - ssm: { - enable: boolean; - envFilePath: any; - installCli: boolean; - parameters: { - -}; - pathPrefix: any; - refreshScriptPath: any; - region: any; - secureParameters: { - -}; - useChamber: boolean; -}; - subnetIds: string[]; - tags: { - managedBy: string; - name: string; -}; - userData: any; - vpcId: any; -}; -}; - defaults: { - alb: { - certificateArn: any; - create: boolean; - enable: boolean; - existingListenerHttpArn: any; - existingListenerHttpsArn: any; - hostRulePriority: number; - hostnames: string[]; - http: boolean; - https: boolean; - ipAddressType: string; - name: any; - scheme: string; - securityGroupIds: string[]; - sslPolicy: string; - subnetIds: string[]; - targetGroup: { - healthCheck: { - enabled: boolean; - healthyThreshold: number; - interval: number; - matcher: string; - path: string; - port: any; - protocol: string; - timeout: number; - unhealthyThreshold: number; -}; - port: number; - protocol: string; -}; -}; - ami: any; - associatePublicIp: boolean; - ecr: { - create: boolean; - enable: boolean; - github: { - allowTags: boolean; - allowedBranches: string[]; - allowedWorkflows: string[]; - createOidcProvider: boolean; - enable: boolean; - oidcProviderArn: any; - repoName: any; - repoOwner: any; - roleName: any; -}; - imageTagMutability: string; - lifecyclePolicy: any; - repoName: any; - scanOnPush: boolean; -}; - iam: { - assumeRolePolicy: any; - enable: boolean; - inlinePolicies: string[]; - instanceProfileName: any; - instanceProfileTags: { - -}; - managedPolicyArns: string[]; - roleName: any; - tags: { - -}; -}; - iamInstanceProfile: any; - instanceCount: number; - instanceType: any; - instances: string[]; - keyName: any; - keyPair: { - create: boolean; - destroyOnDelete: boolean; - name: any; - publicKey: any; - tags: { - -}; -}; - machine: { - arch: any; - roles: string[]; - ssh: { - keyPath: any; - port: number; - user: string; -}; - tags: string[]; - targetEnv: any; -}; - nixos: { - amiId: any; - flakeUrl: any; - flakeVersion: string; - hostConfig: any; -}; - osType: string; - rootVolumeSize: any; - securityGroup: { - create: boolean; - description: any; - egress: string[]; - ingress: string[]; - name: any; - tags: { - -}; -}; - securityGroupIds: string[]; - ssm: { - enable: boolean; - envFilePath: any; - installCli: boolean; - parameters: { - -}; - pathPrefix: any; - refreshScriptPath: any; - region: any; - secureParameters: { - -}; - useChamber: boolean; -}; - subnetIds: string[]; - tags: { - -}; - userData: any; - vpcId: any; -}; -} - -export interface AwsSecretsInputs { - accountId: string; - iam: { - additionalPolicies: string[]; - roleName: string; -}; - kms: { - alias: string; - deletionWindowDays: number; -}; - oidc: { - flyio: { - appName: string; - orgId: string; -}; - githubActions: { - branch: string; - org: string; - repo: string; -}; - provider: string; - rolesAnywhere: { - trustAnchorArn: string; -}; -}; - projectName: string; - region: string; - ssm: { - additionalPaths: string[]; - enable: boolean; - groupPaths: string[]; - keyPrefix: string; -}; -} - -export interface DatabaseInputs { - devenv: { - database: string; - host: string; - password: string; - port: number; - user: string; -}; - docker: { - image: string; - network: string; - password: string; - port: number; - tag: string; - user: string; -}; - name: string; - neon: { - apiKeySsmPath: string; - enableBranching: boolean; - pgVersion: number; - region: string; -}; - projectName: string; - provider: string; - ssm: { - enable: boolean; - pathPrefix: string; -}; -} - -export interface MachinesInputs { - aws: { - envTagKeys: string[]; - filters: string[]; - hostPreference: string[]; - instanceIds: string[]; - nameTagKeys: string[]; - region: string; - roleTagKeys: string[]; - ssh: { - keyPath: any; - port: number; - user: string; -}; - tagKeys: string[]; -}; - machines: { - -}; - source: string; -} - diff --git a/packages/infra/gen/infra/tsconfig.json b/packages/infra/gen/infra/tsconfig.json deleted file mode 100644 index d40fda1a..00000000 --- a/packages/infra/gen/infra/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "module": "ES2022", - "moduleResolution": "bundler", - "outDir": "./dist", - "resolveJsonModule": true, - "rootDir": ".", - "skipLibCheck": true, - "strict": true, - "target": "ES2022" - }, - "exclude": [ - "node_modules", - "dist", - ".alchemy" - ], - "include": [ - "src/**/*.ts", - "modules/**/*.ts", - "alchemy.run.ts" - ] -} diff --git a/packages/infra/package.json b/packages/infra/package.json index 214bf623..28a8597b 100644 --- a/packages/infra/package.json +++ b/packages/infra/package.json @@ -17,8 +17,7 @@ "@stackpanel/api": "workspace:*", "@stackpanel/config": "workspace:*", "@trpc/client": "catalog:", - "alchemy": "^0.81.2", - "alchemy-effect": "catalog:", + "alchemy": "catalog:", "better-auth": "^1.6.1", "effect": "catalog:", "sst": "^3.17.25", diff --git a/packages/infra/src/docs.stack.ts b/packages/infra/src/docs.stack.ts index 57d6d3ca..bbcf290c 100644 --- a/packages/infra/src/docs.stack.ts +++ b/packages/infra/src/docs.stack.ts @@ -1,6 +1,8 @@ // packages/infra/src/docs.stack.ts -import { Stack, Build, Cloudflare } from "alchemy-effect"; -import * as Output from "alchemy-effect/Output"; +import * as Alchemy from "alchemy"; +import * as Build from "alchemy/Build"; +import * as Cloudflare from "alchemy/Cloudflare"; +import * as Output from "alchemy/Output"; import * as Effect from "effect/Effect"; import * as Path from "effect/Path"; @@ -53,10 +55,12 @@ const DocsWorker = Effect.gen(function* () { }); // 3. Stack that wires it all together -export default Stack.make( +export default Alchemy.Stack( "DocsStack", - Cloudflare.providers(), -)( + { + providers: Cloudflare.providers(), + state: Cloudflare.state(), + }, Effect.gen(function* () { const { worker } = yield* DocsWorker; diff --git a/packages/infra/src/lib/deploy.ts b/packages/infra/src/lib/deploy.ts index 6ed37e8c..d4490041 100644 --- a/packages/infra/src/lib/deploy.ts +++ b/packages/infra/src/lib/deploy.ts @@ -1,17 +1,23 @@ // Shared helpers for `apps/*/alchemy.run.ts` deploy entrypoints. // -// Centralises three pieces of logic that previously diverged across apps: +// Centralises four pieces of logic that previously diverged across apps: // - Mapping `--stage` / `STAGE` onto the SOPS env namespace name we use on // disk (`prod`, `staging`, `dev`). // - Loading the per-app encrypted env payload via `@gen/env` and validating // that every variable declared `required = true` in `apps..env` is // actually present (so the deploy fails *before* any provider call with a // copy-pasteable error message instead of an opaque `Unauthorized`). +// - Selecting the alchemy state backend by `appEnv` so dev/PR previews use +// local filesystem state (no Cloudflare creds required) while +// staging/prod share the Cloudflare-hosted state store. // - Producing a consistent `https://...` URL for `console.log`-ing the // deployment result. import { loaders } from "@gen/env"; import { EnvValidationError } from "@gen/env/runtime"; +import * as Cloudflare from "alchemy/Cloudflare"; +import { localState } from "alchemy/State"; +import type * as Layer from "effect/Layer"; export type DeployAppEnv = "dev" | "staging" | "prod"; @@ -122,6 +128,32 @@ export async function loadDeployEnv( } } +/** + * Pick the alchemy state backend for a given `appEnv`. + * + * - `dev` → `localState()` — per-runner filesystem state under + * `.alchemy/state/`. PR previews persist this via + * GitHub Actions cache (`alchemy-state--`). + * Lets `bun run db:up`-style local entrypoints work + * without loading deploy-scope Cloudflare creds. + * - `staging` / `prod` → `Cloudflare.state()` — durable, team-shared state + * stored in a single account-wide Worker (deployed + * on first interactive use; CI relies on it + * existing). Reads creds from `process.env` — + * callers must `await loadDeployEnv(...)` first. + * + * Returned as `Layer.Layer` to match the style used for + * `providers` in the deploy scripts, since the two branches have different + * service requirements that the caller's stack will already provide. + */ +export function selectStateBackend( + appEnv: DeployAppEnv, +): Layer.Layer { + return appEnv === "dev" + ? (localState() as Layer.Layer) + : (Cloudflare.state() as Layer.Layer); +} + /** * Reads `--stage X` or `--stage=X` from a process argv array. Returns the * value, or `null` if not present. diff --git a/packages/infra/src/resources/docker/volume.ts b/packages/infra/src/resources/docker/volume.ts index 7342757d..728bc6c3 100644 --- a/packages/infra/src/resources/docker/volume.ts +++ b/packages/infra/src/resources/docker/volume.ts @@ -1,5 +1,5 @@ -import * as Provider from "alchemy-effect/Provider"; -import { Resource } from "alchemy-effect/Resource"; +import * as Provider from "alchemy/Provider"; +import { Resource } from "alchemy/Resource"; import * as Effect from "effect/Effect"; import { docker } from "@/lib/exec"; diff --git a/packages/infra/src/resources/neon.ts b/packages/infra/src/resources/neon.ts index 9f335ae5..4564b9de 100644 --- a/packages/infra/src/resources/neon.ts +++ b/packages/infra/src/resources/neon.ts @@ -1,5 +1,5 @@ -import { Resource } from "alchemy-effect/Resource"; -import * as Provider from "alchemy-effect/Provider"; +import { Resource } from "alchemy/Resource"; +import * as Provider from "alchemy/Provider"; import * as Neon from "@distilled.cloud/neon"; import { createProject, diff --git a/packages/infra/src/services/BetterAuth.ts b/packages/infra/src/services/BetterAuth.ts index 9faab5b4..1c803fff 100644 --- a/packages/infra/src/services/BetterAuth.ts +++ b/packages/infra/src/services/BetterAuth.ts @@ -1,6 +1,6 @@ -import * as Cloudflare from "alchemy-effect/Cloudflare"; -import * as D1 from "alchemy-effect/Cloudflare/D1"; -import type { HttpEffect } from "alchemy-effect/Http"; +import * as Cloudflare from "alchemy/Cloudflare"; +import * as D1 from "alchemy/Cloudflare/D1"; +import type { HttpEffect } from "alchemy/Http"; import { betterAuth, type Auth } from "better-auth"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; diff --git a/packages/infra/src/state/HostedState.ts b/packages/infra/src/state/HostedState.ts index fa24a51e..dc05fd99 100644 --- a/packages/infra/src/state/HostedState.ts +++ b/packages/infra/src/state/HostedState.ts @@ -3,7 +3,7 @@ import { State, StateStoreError, type StateService, -} from "alchemy-effect/State"; +} from "alchemy/State"; import { createTRPCClient, httpBatchLink, @@ -16,7 +16,7 @@ import superjson from "superjson"; /** * Hosted alchemy state backend (Pro tier). * - * Swaps alchemy-effect's filesystem `LocalState` Layer for one backed by + * Swaps alchemy's filesystem `LocalState` Layer for one backed by * api.stackpanel.com. Every operation becomes an authenticated tRPC call; * the cloud refuses callers without an active Pro subscription. * @@ -118,7 +118,7 @@ function liftPromise(thunk: () => Promise) { * StateService implementation. Most methods are a direct translation of * a tRPC procedure. `getReplacedResources` is the exception — the cloud * router doesn't filter by status (keeping it generic), so we compose - * list + get here exactly like alchemy-effect's LocalState does. + * list + get here exactly like alchemy's LocalState does. */ function buildService(client: HostedStateClient): StateService { const service: StateService = { diff --git a/packages/infra/src/worker.ts b/packages/infra/src/worker.ts index f9773a79..d116610c 100644 --- a/packages/infra/src/worker.ts +++ b/packages/infra/src/worker.ts @@ -1,4 +1,4 @@ -import * as Cloudflare from "alchemy-effect/Cloudflare" +import * as Cloudflare from "alchemy/Cloudflare" import * as Effect from "effect/Effect" import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse" diff --git a/scripts/ALCHEMY_EFFECT_OPENNEXT_UPSTREAM.md b/scripts/ALCHEMY_EFFECT_OPENNEXT_UPSTREAM.md deleted file mode 100644 index 95304e6b..00000000 --- a/scripts/ALCHEMY_EFFECT_OPENNEXT_UPSTREAM.md +++ /dev/null @@ -1,22 +0,0 @@ -# Upstream PR checklist (`alchemy-effect`) - -## Change summary - -- **API:** `AssetsProps.sources?: { directory: string; prefix: string }[]` (+ optional `sources` on `AssetsWithHash` in Worker). -- **Behavior:** `read` / `readAssets` merges overlay trees into the Worker asset manifest; `upload` resolves each manifest path via `filePaths` (absolute source paths). Content hash excludes `filePaths` (machine-local paths). -- **Tests:** `packages/alchemy/test/Cloudflare/Workers/Assets.test.ts` -- **Example doc:** `examples/opennext-cloudflare-asset-overlay/README.md` - -## Stackpanel validation - -- `apps/docs/alchemy.run.ts` passes `sources: [{ directory: ".open-next/cache", prefix: "cdn-cgi/_next_cache" }]`. -- `bun run build:worker` in `apps/docs` (OpenNext) succeeds until `.open-next/worker.js` + `.open-next/cache` exist. -- Until npm ships the change, Stackpanel uses **vendored** `vendor/alchemy-effect-opennext-overlay/*.ts` + `postinstall` (`scripts/apply-alchemy-effect-opennext-assets.ts`). - -## Suggested PR title - -`feat(cloudflare): overlay asset sources for Worker static uploads` - -## Remove Stackpanel hook after merge - -Delete `vendor/alchemy-effect-opennext-overlay/`, `scripts/apply-alchemy-effect-opennext-assets.ts`, root `postinstall`, bump catalog `alchemy-effect` to the release that contains the feature, and run `bun install`. diff --git a/scripts/apply-alchemy-effect-opennext-assets.ts b/scripts/apply-alchemy-effect-opennext-assets.ts deleted file mode 100644 index 70d18a6a..00000000 --- a/scripts/apply-alchemy-effect-opennext-assets.ts +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env bun -/** - * Copies vendored `alchemy-effect@0.12.x` Cloudflare Worker asset overlay patches - * into every `node_modules/alchemy-effect` tree after `bun install`. - * - * Replaces `patchedDependencies` (Bun patch format was unreliable for this repo layout). - */ -import { copyFileSync, readFileSync, existsSync, readdirSync } from "node:fs"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; - -const root = join(dirname(fileURLToPath(import.meta.url)), ".."); -const vendorDir = join(root, "vendor", "alchemy-effect-opennext-overlay"); -const srcAssets = join(vendorDir, "Assets.ts"); -const srcWorker = join(vendorDir, "Worker.ts"); - -if (!existsSync(srcAssets) || !existsSync(srcWorker)) { - console.warn( - "[apply-alchemy-effect-opennext-assets] vendor files missing; skip", - ); - process.exit(0); -} - -// Vendored sources are derived from alchemy-effect@0.12.x. Refuse to overwrite -// any other minor — a transitive bump to 0.13+ should fail loudly so we -// re-vendor instead of silently shipping stale overlays. -const SUPPORTED_RANGE = /^0\.12\./; -const skipped: { pkgRoot: string; version: string }[] = []; - -function patchInstallAt(pkgRoot: string, seen: Set, n: { v: number }) { - if (seen.has(pkgRoot)) return; - const pkgPath = join(pkgRoot, "package.json"); - if (!existsSync(pkgPath)) return; - const pkg = JSON.parse(readFileSync(pkgPath, "utf8")) as { - name?: string; - version?: string; - }; - if (pkg.name !== "alchemy-effect") return; - const destAssets = join(pkgRoot, "src", "Cloudflare", "Workers", "Assets.ts"); - const destWorker = join(pkgRoot, "src", "Cloudflare", "Workers", "Worker.ts"); - if (!existsSync(dirname(destAssets))) return; - seen.add(pkgRoot); - if (!pkg.version || !SUPPORTED_RANGE.test(pkg.version)) { - skipped.push({ pkgRoot, version: pkg.version ?? "" }); - return; - } - copyFileSync(srcAssets, destAssets); - copyFileSync(srcWorker, destWorker); - n.v++; -} - -const seen = new Set(); -const n = { v: 0 }; - -/** Bun stores duplicated packages under `node_modules/.bun/@+.../`. */ -function scanBunStore(bunRoot: string) { - if (!existsSync(bunRoot)) return; - for (const entry of readdirSync(bunRoot, { withFileTypes: true })) { - if (!entry.isDirectory() || !entry.name.startsWith("alchemy-effect@")) { - continue; - } - const pkgRoot = join(bunRoot, entry.name, "node_modules", "alchemy-effect"); - patchInstallAt(pkgRoot, seen, n); - } -} - -scanBunStore(join(root, "node_modules", ".bun")); -const appsDir = join(root, "apps"); -if (existsSync(appsDir)) { - for (const app of readdirSync(appsDir, { withFileTypes: true })) { - if (!app.isDirectory()) continue; - scanBunStore(join(appsDir, app.name, "node_modules", ".bun")); - } -} - -const glob = new Bun.Glob("**/node_modules/alchemy-effect/package.json"); -for await (const rel of glob.scan({ cwd: root, onlyFiles: true })) { - const pkgRoot = join(root, dirname(rel)); - patchInstallAt(pkgRoot, seen, n); -} - -if (skipped.length > 0) { - console.error( - `[apply-alchemy-effect-opennext-assets] refusing to patch ${skipped.length} alchemy-effect install(s) outside the vendored 0.12.x range:`, - ); - for (const s of skipped) { - console.error(` - ${s.version} (${s.pkgRoot})`); - } - console.error( - " Re-vendor vendor/alchemy-effect-opennext-overlay/{Assets,Worker}.ts from the new version, or pin alchemy-effect back to 0.12.x.", - ); - process.exit(1); -} - -if (n.v === 0) { - console.error( - "[apply-alchemy-effect-opennext-assets] no alchemy-effect@0.12.x installs found — overlay is not applied. " + - "Either alchemy-effect is no longer a dependency (delete this hook), or it resolved to an unsupported version.", - ); - process.exit(1); -} - -console.log( - `[apply-alchemy-effect-opennext-assets] patched ${n.v} alchemy-effect install(s)`, -); diff --git a/vendor/alchemy-effect-opennext-overlay/Assets.ts b/vendor/alchemy-effect-opennext-overlay/Assets.ts deleted file mode 100644 index ba12e8af..00000000 --- a/vendor/alchemy-effect-opennext-overlay/Assets.ts +++ /dev/null @@ -1,397 +0,0 @@ -import * as workers from "@distilled.cloud/cloudflare/workers"; -import * as Context from "effect/Context"; -import * as Data from "effect/Data"; -import * as Effect from "effect/Effect"; -import * as FileSystem from "effect/FileSystem"; -import * as Layer from "effect/Layer"; -import * as Path from "effect/Path"; -import type { PlatformError } from "effect/PlatformError"; -import type { ScopedPlanStatusSession } from "../../Cli/Cli.ts"; -import { sha256, sha256Object } from "../../Util/index.ts"; - -const MAX_ASSET_SIZE = 1024 * 1024 * 25; // 25MB -const MAX_ASSET_COUNT = 20_000; - -export interface AssetsConfig extends Exclude< - Exclude["config"], - undefined -> {} - -/** Additional filesystem trees merged into the Worker asset manifest under a URL prefix. */ -export interface AssetSource { - readonly directory: string; - /** - * URL prefix for files from `directory` (no leading slash), e.g. - * `cdn-cgi/_next_cache` for OpenNext static incremental cache. - */ - readonly prefix: string; -} - -export interface AssetReadResult { - directory: string; - config: AssetsConfig | undefined; - manifest: Record; - _headers: string | undefined; - _redirects: string | undefined; - hash: string; - /** - * Maps each manifest path to the absolute file to read at upload time - * (base directory and overlays may differ). - */ - filePaths: Record; -} - -export interface AssetsProps { - directory: string; - config?: AssetsConfig; - /** Optional extra directories merged into the asset manifest (e.g. OpenNext `.open-next/cache`). */ - sources?: readonly AssetSource[]; -} - -export class Assets extends Context.Service< - Assets, - { - read( - directory: AssetsProps, - ): Effect.Effect; - upload( - accountId: string, - workerName: string, - assets: AssetReadResult, - session: ScopedPlanStatusSession, - ): Effect.Effect< - { jwt: string | undefined }, - | PlatformError - | ValidationError - | workers.CreateScriptAssetUploadError - | workers.CreateAssetUploadError - >; - } ->()("Cloudflare.Assets") {} - -export type ValidationError = - | AssetTooLargeError - | TooManyAssetsError - | AssetNotFoundError - | FailedToReadAssetError - | AssetPathCollisionError; - -export class AssetTooLargeError extends Data.TaggedError("AssetTooLargeError")<{ - message: string; - name: string; - size: number; -}> {} - -export class TooManyAssetsError extends Data.TaggedError("TooManyAssetsError")<{ - message: string; - directory: string; - count: number; -}> {} - -export class AssetNotFoundError extends Data.TaggedError("AssetNotFoundError")<{ - message: string; - hash: string; -}> {} - -export class FailedToReadAssetError extends Data.TaggedError( - "FailedToReadAssetError", -)<{ - message: string; - name: string; - cause: PlatformError; -}> {} - -export class AssetPathCollisionError extends Data.TaggedError( - "AssetPathCollisionError", -)<{ - message: string; - publicPath: string; -}> {} - -const normalizeUrlPrefix = (prefix: string) => - prefix.replace(/\\/g, "/").replace(/^\/+|\/+$/g, ""); - -/** Build `/public/path` key for a file relative to an asset root and optional URL prefix. */ -export const manifestPublicPath = (rootRelative: string, urlPrefix: string) => { - const rel = ( - rootRelative.startsWith("/") ? rootRelative.slice(1) : rootRelative - ).replace(/\\/g, "/"); - const p = normalizeUrlPrefix(urlPrefix); - if (!p) { - return `/${rel}`.replace(/\/+/g, "/"); - } - return `/${p}/${rel}`.replace(/\/+/g, "/"); -}; - -const getContentType = (name: string) => { - if (name.endsWith(".html")) return "text/html"; - if (name.endsWith(".txt")) return "text/plain"; - if (name.endsWith(".sql")) return "text/sql"; - if (name.endsWith(".json")) return "application/json"; - if (name.endsWith(".js") || name.endsWith(".mjs")) { - // Browsers only accept JavaScript module scripts when the MIME type is a - // "JavaScript MIME type" (e.g. text/javascript). application/javascript+module - // is not valid and causes strict module loading to fail. - return "text/javascript; charset=utf-8"; - } - if (name.endsWith(".css")) return "text/css"; - if (name.endsWith(".wasm")) return "application/wasm"; - if (name.endsWith(".png")) return "image/png"; - if (name.endsWith(".svg")) return "image/svg+xml"; - if (name.endsWith(".ico")) return "image/x-icon"; - return "application/octet-stream"; -}; - -export const AssetsProvider = () => - Layer.effect( - Assets, - Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem; - const path = yield* Path.Path; - const createAssetUpload = yield* workers.createAssetUpload; - const createScriptAssetUpload = yield* workers.createScriptAssetUpload; - - const maybeReadString = Effect.fnUntraced(function* (file: string) { - return yield* fs.readFileString(file).pipe( - Effect.catchIf( - (error) => - error._tag === "PlatformError" && - error.reason._tag === "NotFound", - () => Effect.succeed(undefined), - ), - ); - }); - - const createIgnoreMatcher = Effect.fnUntraced(function* ( - patterns: string[], - ) { - const matcher = yield* Effect.promise(() => - import("ignore").then(({ default: ignore }) => - ignore().add(patterns), - ), - ); - return (file: string) => matcher.ignores(file); - }); - - return { - read: Effect.fnUntraced(function* (props: AssetsProps) { - const resolvedDirectory = path.resolve(props.directory); - const [files, ignore, _headers, _redirects] = yield* Effect.all([ - fs.readDirectory(resolvedDirectory, { recursive: true }), - maybeReadString(path.join(resolvedDirectory, ".assetsignore")), - maybeReadString(path.join(resolvedDirectory, "_headers")), - maybeReadString(path.join(resolvedDirectory, "_redirects")), - ]); - const ignores = yield* createIgnoreMatcher([ - ".assetsignore", - "_headers", - "_redirects", - ...(ignore - ?.split("\n") - .map((line) => line.trim()) - .filter((line) => line.length > 0 && !line.startsWith("#")) ?? - []), - ]); - const manifest = new Map(); - const filePaths = new Map(); - let count = 0; - - const addFile = Effect.fnUntraced(function* ( - rootRelative: string, - absoluteFile: string, - urlPrefix: string, - countLabel: string, - ) { - const stat = yield* fs.stat(absoluteFile); - if (stat.type !== "File") { - return; - } - const size = Number(stat.size); - if (size > MAX_ASSET_SIZE) { - return yield* new AssetTooLargeError({ - message: `Asset ${rootRelative} is too large (the maximum size is ${MAX_ASSET_SIZE / 1024 / 1024} MB; this asset is ${size / 1024 / 1024} MB)`, - name: rootRelative, - size, - }); - } - const hash = yield* fs.readFile(absoluteFile).pipe( - Effect.flatMap(sha256), - Effect.map((h) => h.slice(0, 32)), - ); - const key = manifestPublicPath(rootRelative, urlPrefix); - const existing = manifest.get(key); - if (existing) { - if (existing.hash !== hash) { - return yield* new AssetPathCollisionError({ - message: `Conflicting asset content for public path ${key}`, - publicPath: key, - }); - } - return; - } - count++; - if (count > MAX_ASSET_COUNT) { - return yield* new TooManyAssetsError({ - message: `Too many assets (the maximum count is ${MAX_ASSET_COUNT}; this directory has ${count} assets)`, - directory: countLabel, - count, - }); - } - manifest.set(key, { hash, size }); - filePaths.set(key, absoluteFile); - }); - - yield* Effect.forEach( - files, - Effect.fnUntraced(function* (name) { - if (ignores(name)) { - return; - } - const absoluteFile = path.join(resolvedDirectory, name); - yield* addFile( - name, - absoluteFile, - "", - props.directory, - ); - }), - ); - - for (const source of props.sources ?? []) { - const resolvedSource = path.resolve(source.directory); - const overlayFiles = yield* fs.readDirectory(resolvedSource, { - recursive: true, - }); - const overlayIgnore = yield* maybeReadString( - path.join(resolvedSource, ".assetsignore"), - ); - const overlayIgnores = yield* createIgnoreMatcher([ - ".assetsignore", - ...(overlayIgnore - ?.split("\n") - .map((line) => line.trim()) - .filter((line) => line.length > 0 && !line.startsWith("#")) ?? - []), - ]); - yield* Effect.forEach( - overlayFiles, - Effect.fnUntraced(function* (name) { - if (overlayIgnores(name)) { - return; - } - const absoluteFile = path.join(resolvedSource, name); - yield* addFile( - name, - absoluteFile, - source.prefix, - source.directory, - ); - }), - ); - } - - const sortedManifest = Object.fromEntries( - Array.from(manifest.entries()).sort((a, b) => - a[0].localeCompare(b[0]), - ), - ); - const sortedFilePaths = Object.fromEntries( - Array.from(filePaths.entries()).sort((a, b) => - a[0].localeCompare(b[0]), - ), - ); - const hashPayload = { - directory: props.directory, - config: props.config, - manifest: sortedManifest, - _headers, - _redirects, - }; - return { - ...hashPayload, - filePaths: sortedFilePaths, - hash: yield* sha256Object(hashPayload), - }; - }), - upload: Effect.fnUntraced(function* ( - accountId: string, - workerName: string, - assets: AssetReadResult, - { note }: ScopedPlanStatusSession, - ) { - yield* note("Checking assets..."); - const session = yield* createScriptAssetUpload({ - accountId, - scriptName: workerName, - manifest: assets.manifest, - }); - if (!session.buckets?.length) { - return { jwt: session.jwt ?? undefined }; - } - if (!session.jwt) { - return { jwt: undefined }; - } - const uploadJwt = session.jwt; - let uploaded = 0; - const total = session.buckets.flat().length; - yield* note(`Uploaded ${uploaded} of ${total} assets...`); - const assetsByHash = new Map(); - for (const [name, { hash }] of Object.entries(assets.manifest)) { - assetsByHash.set(hash, name); - } - let jwt: string | undefined | null; - const directory = path.resolve(assets.directory); - yield* Effect.forEach( - session.buckets, - Effect.fnUntraced(function* (bucket) { - const body: Record = {}; - yield* Effect.forEach( - bucket, - Effect.fnUntraced(function* (hash) { - const name = assetsByHash.get(hash); - if (!name) { - return yield* new AssetNotFoundError({ - message: `Asset ${hash} not found in manifest`, - hash, - }); - } - const resolvedFile = - assets.filePaths[name] ?? path.join(directory, name); - const file = yield* fs.readFile(resolvedFile).pipe( - Effect.mapError( - (error) => - new FailedToReadAssetError({ - message: `Failed to read asset ${name}: ${error.message}`, - name, - cause: error, - }), - ), - ); - body[hash] = new File( - [Buffer.from(file).toString("base64")], - hash, - { - type: getContentType(name), - }, - ); - }), - ); - const result = yield* createAssetUpload({ - accountId, - base64: true, - body, - jwtToken: uploadJwt, - }); - - uploaded += bucket.length; - yield* note(`Uploaded ${uploaded} of ${total} assets...`); - if (result.jwt) { - jwt = result.jwt; - } - }), - ); - return { jwt: jwt ?? undefined }; - }), - }; - }), - ); diff --git a/vendor/alchemy-effect-opennext-overlay/README.md b/vendor/alchemy-effect-opennext-overlay/README.md deleted file mode 100644 index 4d5b85e7..00000000 --- a/vendor/alchemy-effect-opennext-overlay/README.md +++ /dev/null @@ -1,8 +0,0 @@ -Vendored copies of `alchemy-effect@0.12.x`: - -- `Assets.ts` → `src/Cloudflare/Workers/Assets.ts` -- `Worker.ts` → `src/Cloudflare/Workers/Worker.ts` - -After `bun install`, `scripts/apply-alchemy-effect-opennext-assets.ts` (root `postinstall`) copies these into every `alchemy-effect` install (including `node_modules/.bun/alchemy-effect@*/…`). - -Upstream: same change lives in `alchemy-effect` / `alchemy` (`feat`: asset `sources` overlays). Remove this vendor hook once a published `alchemy-effect` release includes it. diff --git a/vendor/alchemy-effect-opennext-overlay/Worker.ts b/vendor/alchemy-effect-opennext-overlay/Worker.ts deleted file mode 100644 index 76574e9b..00000000 --- a/vendor/alchemy-effect-opennext-overlay/Worker.ts +++ /dev/null @@ -1,1770 +0,0 @@ -import type * as cf from "@cloudflare/workers-types"; -import cloudflareRolldown from "@distilled.cloud/cloudflare-rolldown-plugin"; -import cloudflareVite from "@distilled.cloud/cloudflare-vite-plugin"; -import * as workers from "@distilled.cloud/cloudflare/workers"; -import type * as Cause from "effect/Cause"; -import * as Context from "effect/Context"; -import * as Data from "effect/Data"; -import * as Effect from "effect/Effect"; -import * as FileSystem from "effect/FileSystem"; -import * as Layer from "effect/Layer"; -import * as Option from "effect/Option"; -import * as Path from "effect/Path"; -import * as Queue from "effect/Queue"; -import * as Redacted from "effect/Redacted"; -import * as Schedule from "effect/Schedule"; -import * as Stream from "effect/Stream"; -import * as Socket from "effect/unstable/socket/Socket"; -import type * as rolldown from "rolldown"; -import Sonda from "sonda/rolldown"; -import type * as vite from "vite"; -import * as Artifacts from "../../Artifacts.ts"; -import * as Binding from "../../Binding.ts"; -import { hashDirectory, type MemoOptions } from "../../Build/Memo.ts"; -import * as Bundle from "../../Bundle/Bundle.ts"; -import { findCwdForBundle } from "../../Bundle/TempRoot.ts"; -import type { ScopedPlanStatusSession } from "../../Cli/Cli.ts"; -import { isResolved } from "../../Diff.ts"; -import type { HttpEffect } from "../../Http.ts"; -import type { Input, InputProps } from "../../Input.ts"; -import * as Output from "../../Output.ts"; -import { createPhysicalName } from "../../PhysicalName.ts"; -import { - Platform, - type Main, - type PlatformProps, - type Rpc, -} from "../../Platform.ts"; -import type { LogLine } from "../../Provider.ts"; -import * as Provider from "../../Provider.ts"; -import { Resource, type ResourceBinding } from "../../Resource.ts"; -import { Self } from "../../Self.ts"; -import * as Serverless from "../../Serverless/index.ts"; -import { Stack } from "../../Stack.ts"; -import { Account } from "../Account.ts"; -import { D1Database } from "../D1/D1Database.ts"; -import { fromCloudflareFetcher } from "../Fetcher.ts"; -import { CloudflareLogs } from "../Logs.ts"; -import type { R2Bucket } from "../R2/R2Bucket.ts"; -import type { AssetSource, AssetsConfig, AssetsProps } from "./Assets.ts"; -import * as Assets from "./Assets.ts"; -import cloudflare_workers from "./cloudflare_workers.ts"; -import { isDurableObjectExport } from "./DurableObject.ts"; -import { workersHttpHandler } from "./HttpServer.ts"; -import { Request } from "./Request.ts"; -import { makeRpcStub } from "./Rpc.ts"; -import { isWorkflowExport } from "./Workflow.ts"; - -const WorkerTypeId = "Cloudflare.Worker"; -type WorkerTypeId = typeof WorkerTypeId; - -export const isWorker = (value: T): value is T & Worker => - typeof value === "object" && - value !== null && - "Type" in value && - value.Type === WorkerTypeId; - -export class WorkerEnvironment extends Context.Service< - WorkerEnvironment, - Record ->()("Cloudflare.Workers.WorkerEnvironment") {} - -export const WorkerEnvironmentLive = Layer.effect( - WorkerEnvironment, - cloudflare_workers.pipe(Effect.map((m) => m.env)), -); - -export class ExecutionContext extends Context.Service< - ExecutionContext, - cf.ExecutionContext ->()("Cloudflare.Workers.ExecutionContext") {} - -export type WorkerEvent = Exclude< - { - [type in keyof cf.ExportedHandler]: { - kind: "Cloudflare.Workers.WorkerEvent"; - type: type; - input: Parameters>[0]; - env: Parameters>[1]; - context: Parameters>[2]; - }; - }[keyof cf.ExportedHandler], - undefined ->; - -export const isWorkerEvent = (value: any): value is WorkerEvent => - value?.kind === "Cloudflare.Workers.WorkerEvent"; - -/** - * Assets configuration that includes a pre-computed hash. - * When hash is provided, it's used directly for diffing instead of computing from directory contents. - * This is useful when integrating with Build resources that produce a deterministic hash. - */ -export interface AssetsWithHash { - /** - * Path to the assets directory. - */ - path: Input; - /** - * Pre-computed hash of the assets. When provided, this hash is used for diffing - * to determine if the worker needs to be redeployed. - */ - hash: Input; - /** - * Optional assets configuration. - */ - config?: AssetsConfig; - /** - * Optional overlay asset directories (same semantics as {@link AssetsProps.sources}). - */ - sources?: readonly AssetSource[]; -} - -export interface WorkerObservability extends Exclude< - workers.PutScriptRequest["metadata"]["observability"], - undefined -> {} - -export interface WorkerLimits extends Exclude< - workers.PutScriptRequest["metadata"]["limits"], - undefined -> {} - -export type WorkerPlacement = Exclude< - workers.PutScriptRequest["metadata"]["placement"], - undefined ->; - -export type WorkerBinding = Exclude< - workers.PutScriptRequest["metadata"]["bindings"], - undefined ->[number]; - -type WorkerSettingsBinding = Exclude< - workers.GetScriptScriptAndVersionSettingResponse["bindings"], - null | undefined ->[number]; - -export const ExportedHandlerMethods = [ - "fetch", - "tail", - "trace", - "tailStream", - "scheduled", - "test", - "email", - "queue", -] as const satisfies (keyof cf.ExportedHandler)[]; - -export interface WorkerExecutionContext extends Serverless.FunctionContext { - export(name: string, value: any): Effect.Effect; -} - -export type WorkerServices = Worker | WorkerEnvironment | Request; - -export type WorkerShape = Main; - -export type WorkerBindingResource = R2Bucket | D1Database; - -export type WorkerBindings = { - [bindingName in string]: WorkerBindingResource; -}; - -export type WorkerBindingProps = { - [bindingName in string]: - | WorkerBindingResource - | Effect.Effect; -}; - -export interface WorkerProps< - Bindings extends WorkerBindingProps = any, -> extends PlatformProps { - /** - * Worker name override. If omitted, Alchemy derives a deterministic physical - * name from the stack, stage, and logical ID. - */ - name?: string; - /** - * Whether to enable a workers.dev URL for this worker - * @default true - */ - url?: boolean; - /** - * Static assets to serve. Can be: - * - A string path to the assets directory - * - An AssetsProps object with directory and config - * - An object with path and hash (e.g., from a Build resource) - */ - assets?: - | string - | AssetsProps - | AssetsWithHash - | (AssetsWithHash & { [K: string]: any }); - subdomain?: { - enabled?: boolean; - previewsEnabled?: boolean; - }; - /** @internal used by Cloudflare.Vite resource */ - vite?: { - rootDir?: string; - memo?: MemoOptions; - }; - logpush?: boolean; - observability?: WorkerObservability; - tags?: string[]; - main: string; - compatibility?: { - date?: string; - flags?: ("nodejs_compat" | "nodejs_als" | (string & {}))[]; - }; - limits?: WorkerLimits; - placement?: WorkerPlacement; - env?: Record>; - exports?: string[]; - bindings?: Bindings; - build?: { - /** - * Whether to generate a metafile for the worker bundle. - * @default false - */ - metafile?: boolean; - }; -} - -export type Worker = Resource< - WorkerTypeId, - WorkerProps, - { - workerId: string; - workerName: string; - logpush: boolean | undefined; - url: string | undefined; - tags: string[] | undefined; - durableObjectNamespaces: Record; - accountId: string; - hash?: { - assets: string | undefined; - bundle: string | undefined; - input: string | undefined; - }; - }, - { - bindings?: WorkerBinding[]; - containers?: { className: string }[]; - } ->; - -/** - * A Cloudflare Worker host with deploy-time binding support and runtime export - * collection. - * - * `Worker` behaves like a resource during deploy, but it also carries a runtime - * execution context so KV, R2, Durable Objects, assets, and service bindings - * can be inferred from the worker program itself. - * - * @section Creating Workers - * @example Basic Worker - * ```typescript - * const worker = yield* Worker("ApiWorker", { - * main: "./src/worker.ts", - * }); - * ``` - */ -export const Worker: Platform< - Worker, - WorkerServices, - WorkerShape, - WorkerExecutionContext -> & { - ( - id: string, - props: InputProps>, - ): Effect.Effect< - Worker<{ - [B in keyof Bindings]: Bindings[B] extends Effect.Effect< - infer T extends WorkerBindingResource, - any, - any - > - ? T - : Extract; - }> - >; -} = Platform(WorkerTypeId, { - onCreate: Effect.fnUntraced(function* ( - resource: Worker, - props: InputProps>, - ) { - if (props.bindings) { - for (const bindingName in props.bindings) { - // @ts-expect-error - const bindingEff = props.bindings?.[bindingName] as - | WorkerBindingResource - | Effect.Effect; - const binding = Effect.isEffect(bindingEff) - ? yield* bindingEff - : bindingEff; - - const bindingMeta: InputProps | undefined = - binding.Type === "Cloudflare.D1Database" - ? { - type: "d1", - id: binding.databaseId, - name: bindingName, - } - : binding.Type === "Cloudflare.R2Bucket" - ? { - type: "r2_bucket", - name: bindingName, - bucketName: binding.bucketName, - jurisdiction: binding.jurisdiction.pipe( - Output.map((jurisdiction) => - jurisdiction === "default" ? undefined : jurisdiction, - ), - ), - } - : // TODO(sam): handle others - undefined; - - if (bindingMeta) { - yield* resource.bind`${bindingName}`({ - bindings: [bindingMeta], - }); - } - } - } - }), - createExecutionContext: (id: string): WorkerExecutionContext => { - const listeners: Effect.Effect[] = []; - const exports: Record = {}; - const env: Record = {}; - - const ctx = { - Type: WorkerTypeId, - id, - env, - get: (key: string) => - Effect.serviceOption(WorkerEnvironment).pipe( - Effect.map(Option.getOrUndefined), - Effect.flatMap((env) => - env - ? Effect.succeed(env[key]) - : Effect.die("WorkerEnvironment not found"), - ), - Effect.flatMap((value) => - value - ? Effect.succeed(value) - : Effect.die(`Environment variable '${key}' not found`), - ), - Effect.map((json) => { - try { - const value = JSON.parse(json); - if (!Redacted.isRedacted(value)) { - return Redacted.make(value.value); - } - return value; - } catch { - return json; - } - }), - ) as any, - set: (id: string, output: Output.Output) => - Effect.sync(() => { - const key = id.replaceAll(/[^a-zA-Z0-9]/g, "_"); - env[key] = output.pipe( - Output.map((value) => - Redacted.isRedacted(value) - ? JSON.stringify({ - _tag: "Redacted", - value: Redacted.value(value), - }) - : JSON.stringify(value), - ), - ); - return key; - }), - serve: (handler: HttpEffect) => - ctx.listen(workersHttpHandler(handler)), - listen: (( - handler: - | Serverless.FunctionListener - | Effect.Effect, - ) => - Effect.sync(() => - Effect.isEffect(handler) - ? listeners.push(handler) - : listeners.push(Effect.succeed(handler)), - )) as any as Serverless.FunctionContext["listen"], - export: (name: string, value: any) => - Effect.sync(() => { - exports[name] = value; - }), - exports: Effect.gen(function* () { - const handlers = yield* Effect.all(listeners, { - concurrency: "unbounded", - }); - const services = yield* Effect.context(); - const handle = - (type: WorkerEvent["type"]) => - (request: any, env: unknown, context: cf.ExecutionContext) => { - const event: WorkerEvent = { - kind: "Cloudflare.Workers.WorkerEvent", - type, - input: request, - env, - context, - }; - for (const handler of handlers) { - const eff = handler(event); - if (Effect.isEffect(eff)) { - return eff.pipe( - Effect.provideContext(services), - Effect.provide(Layer.succeed(ExecutionContext, context)), - Effect.runPromise, - ); - } - } - return Promise.reject(new Error("No event handler found")); - }; - return { - ...exports, - default: Object.fromEntries( - ExportedHandlerMethods.map((method) => [method, handle(method)]), - ), - }; - }), - }; - return ctx; - }, -}); - -export const bindWorker = Effect.fnUntraced(function* ( - workerEff: - | (Worker & Rpc) - | Effect.Effect, never, Req>, -) { - const worker = Effect.isEffect(workerEff) ? yield* workerEff : workerEff; - const self = yield* Worker; - yield* self.bind`${worker}`({ - bindings: [ - { - type: "service", - name: worker.LogicalId, - service: worker.workerName, - }, - ], - }); - - const workerBinding = WorkerEnvironment.asEffect().pipe( - Effect.map((env) => env[worker.LogicalId]), - ); - - const fetcher = workerBinding.pipe(Effect.map(fromCloudflareFetcher)); - // TODO(sam): update makeRpcStub to support lazily evaluating the Effect - return makeRpcStub(fetcher); -}); - -export class BindWorkerPolicy extends Binding.Policy< - BindWorkerPolicy, - (worker: Worker) => Effect.Effect ->()("Cloudflare.Worker.Bind") {} - -export const BindWorkerPolicyLive = BindWorkerPolicy.layer.succeed( - Effect.fn(function* (host, worker: Worker) { - if (isWorker(host)) { - yield* host.bind`${worker}`({ - bindings: [ - { - type: "service", - name: worker.LogicalId, - service: worker.workerName, - }, - ], - }); - } else { - return yield* Effect.die( - new Error(`BindWorkerPolicy does not support runtime '${host.Type}'`), - ); - } - }), -); - -class MissingDurableObjectNamespaces extends Data.TaggedError( - "MissingDurableObjectNamespaces", -)<{ - scriptName: string; - expected: string[]; -}> {} - -function bumpMigrationTagVersion( - oldTag: string | undefined, -): string | undefined { - if (!oldTag) return undefined; - const version = oldTag.match(/^(alchemy:)?v(\d+)$/)?.[2]; - if (!version) return "alchemy:v1"; - return `alchemy:v${parseInt(version, 10) + 1}`; -} - -function getDurableObjectBindings( - bindings: ReadonlyArray, - workerName: string, -) { - return bindings.flatMap((binding) => - (binding.data.bindings ?? []).flatMap((item: WorkerBinding) => - item.type === "durable_object_namespace" && - "className" in item && - item.className && - (!("scriptName" in item) || - !item.scriptName || - item.scriptName === workerName) - ? [ - { - logicalId: binding.sid, - bindingName: item.name, - className: item.className, - }, - ] - : [], - ), - ); -} - -function getDurableObjectTagMap(tags: ReadonlyArray) { - return Object.fromEntries( - tags.flatMap((tag) => { - if (!tag.startsWith("alchemy:do:")) { - return []; - } - const parts = tag.split(":"); - const logicalId = parts[2]; - const className = parts.slice(3).join(":"); - return logicalId && className ? [[logicalId, className]] : []; - }), - ); -} - -export const WorkerProvider = () => - Provider.effect( - Worker, - Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem; - const path = yield* Path.Path; - - const accountId = yield* Account; - const virtualEntryPlugin = yield* Bundle.virtualEntryPlugin; - const stack = yield* Stack; - - const { read, upload } = yield* Assets.Assets; - const createScriptSubdomain = yield* workers.createScriptSubdomain; - const createScriptTail = yield* workers.createScriptTail; - const deleteScript = yield* workers.deleteScript; - const deleteScriptTail = yield* workers.deleteScriptTail; - const getScriptSubdomain = yield* workers.getScriptSubdomain; - const getScriptSettings = yield* workers.getScriptScriptAndVersionSetting; - const getSubdomain = yield* workers.getSubdomain; - const listScripts = yield* workers.listScripts; - const putScript = yield* workers.putScript; - const telemetry = yield* CloudflareLogs; - const defaultCompatibilityDate = yield* Effect.promise(() => - // @ts-expect-error no types for workerd - import("workerd").then((m) => m.compatibilityDate as string), - ); - - const getAccountSubdomain = (accountId: string) => - getSubdomain({ - accountId, - }).pipe(Effect.map((result) => result.subdomain)); - - const setWorkerSubdomain = (name: string, enabled: boolean) => - createScriptSubdomain({ - accountId, - scriptName: name, - enabled, - }); - - const createWorkerName = (id: string, name: string | undefined) => - name - ? Effect.succeed(name) - : createPhysicalName({ - id, - maxLength: 54, - }).pipe(Effect.map((name) => name.toLowerCase())); - - const createAlchemyWorkerTags = (id: string) => [ - `alchemy:stack:${stack.name}`, - `alchemy:stage:${stack.stage}`, - `alchemy:id:${id}`, - ]; - - const hasAlchemyWorkerTags = ( - id: string, - tags: readonly string[] | undefined, - ) => { - const actualTags = new Set(tags ?? []); - return createAlchemyWorkerTags(id).every((tag) => actualTags.has(tag)); - }; - - const getDurableObjectNamespaces = ( - bindings: readonly WorkerSettingsBinding[] | null | undefined, - ) => { - const namespaces = Object.fromEntries( - (bindings ?? []).flatMap((binding) => - binding.type === "durable_object_namespace" && - binding.className && - binding.namespaceId - ? [[binding.className, binding.namespaceId]] - : [], - ), - ); - return namespaces; - }; - - const getExpectedDurableObjectClassNames = ( - bindings: readonly WorkerBinding[] | undefined, - ) => - Array.from( - new Set( - bindings?.flatMap((binding) => - binding.type === "durable_object_namespace" && binding.className - ? [binding.className] - : [], - ) ?? [], - ), - ); - - const getWorkerSettingsWithDurableObjects = Effect.fnUntraced(function* ( - scriptName: string, - expectedClassNames: readonly string[], - ) { - return yield* getScriptSettings({ - accountId, - scriptName, - }).pipe( - Effect.map((settings) => { - const namespaces = getDurableObjectNamespaces(settings.bindings); - const missing = expectedClassNames.filter( - (className) => !namespaces[className], - ); - if (missing.length > 0) { - return Effect.fail( - new MissingDurableObjectNamespaces({ - scriptName, - expected: missing, - }), - ); - } - return Effect.succeed({ - settings, - durableObjectNamespaces: namespaces, - }); - }), - Effect.flatten, - Effect.retry({ - while: (error) => error._tag === "MissingDurableObjectNamespaces", - schedule: Schedule.exponential(100).pipe( - Schedule.both(Schedule.recurs(20)), - ), - }), - ); - }); - - const prepareAssets = Effect.fnUntraced(function* ( - assets: WorkerProps["assets"], - ) { - if (!assets) return undefined; - - // Handle AssetsWithHash (from Build resource) - // Props are resolved by Plan, so Input values are already strings at runtime - if ( - typeof assets === "object" && - "path" in assets && - "hash" in assets - ) { - const result = yield* read({ - directory: assets.path as string, - config: assets.config, - sources: assets.sources, - }); - return { - ...result, - hash: assets.hash as string, - }; - } - - // Handle string path or AssetsProps - return yield* read( - typeof assets === "string" ? { directory: assets } : assets, - ); - }); - - const prepareBundle = (id: string, props: WorkerProps) => - Effect.gen(function* () { - const main = yield* fs.realPath(props.main); - const cwd = yield* findCwdForBundle(main); - const buildBundle = (plugins?: rolldown.RolldownPluginOption) => - Bundle.build( - { - input: main, - cwd, - plugins: [ - cloudflareRolldown({ - compatibilityDate: - props.compatibility?.date ?? defaultCompatibilityDate, - compatibilityFlags: props.compatibility?.flags, - }), - plugins, - ...(props.build?.metafile ? [Sonda({ open: false })] : []), - ], - checks: { - // Suppress unresolved import warnings for unrelated AWS packages - unresolvedImport: false, - }, - }, - { - format: "esm", - sourcemap: "hidden", - minify: true, - keepNames: true, - dir: `.alchemy/bundles/${id}`, - }, - ); - - if (props.isExternal) { - const bundle = yield* buildBundle(); - return bundle; - } - - const exportMap = (props.exports ?? {}) as Record; - const allExportNames = Object.keys(exportMap).filter( - (id) => id !== "default", - ); - const doClasses: string[] = []; - const wfClasses: string[] = []; - for (const name of allExportNames) { - if (isWorkflowExport(exportMap[name])) { - wfClasses.push(name); - } else if (isDurableObjectExport(exportMap[name])) { - doClasses.push(name); - } - } - const hasDoClasses = doClasses.length > 0; - const hasWfClasses = wfClasses.length > 0; - const script = (importPath: string) => ` -import * as Config from "effect/Config"; -import * as ConfigProvider from "effect/ConfigProvider"; -import * as Console from "effect/Console"; -import * as Effect from "effect/Effect"; -import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient"; -import * as Layer from "effect/Layer"; -import * as Logger from "effect/Logger"; -import * as Context from "effect/Context"; -import * as Stream from "effect/Stream"; - -import { env, DurableObject${hasWfClasses ? ", WorkflowEntrypoint" : ""} } from "cloudflare:workers"; -import { MinimumLogLevel } from "effect/References"; -import { NodeServices } from "@effect/platform-node"; -import { Stack } from "alchemy-effect/Stack"; -import { WorkerEnvironment, makeDurableObjectBridge${hasWfClasses ? ", makeWorkflowBridge" : ""}, ExportedHandlerMethods } from "alchemy-effect/Cloudflare"; - -import entry from "${importPath}"; - -const tag = Context.Service("${Self.key}") -const layer = - typeof entry?.build === "function" - ? entry - : Layer.effect(tag, typeof entry?.asEffect === "function" ? entry.asEffect() : entry); - -const platform = Layer.mergeAll( - NodeServices.layer, - FetchHttpClient.layer, - // TODO(sam): wire this up to telemetry more directly - Logger.layer([Logger.consolePretty()]), -); - -const stack = Layer.succeed( - Stack, - { - name: "${stack.name}", - stage: "${stack.stage}", - bindings: {}, - resources: {} - } -); - -const exportsEffect = tag.asEffect().pipe( - Effect.flatMap(func => func.ExecutionContext.exports), - Effect.map(exports => exports), - Effect.provide( - layer.pipe( - Layer.provideMerge(stack), - // TODO(sam): additional credentials? - Layer.provideMerge(platform), - Layer.provideMerge( - Layer.succeed( - ConfigProvider.ConfigProvider, - ConfigProvider.orElse( - ConfigProvider.fromUnknown({ ALCHEMY_PHASE: "runtime" }), - ConfigProvider.fromUnknown(env), - ), - ) - ), - Layer.provideMerge( - Layer.succeed( - WorkerEnvironment, - env, - ) - ), - Layer.provideMerge( - Layer.succeed( - MinimumLogLevel, - env.DEBUG ? "Debug" : "Info", - ) - ), - ) - ), - Effect.scoped -); - -// TODO(sam): we could kick this off during module init, but any I/O will break deploy -// let exportsPromise = Effect.runPromise(exportsEffect); - -// for now, we delay initializing the worker until the first request -let exportsPromise; - -// don't initialize the workerEffect during module init because Cloudflare does not allow I/O during module init -// we cache it synchronously (??=) to guarnatee only one initialization ever happens -const getExports = () => (exportsPromise ??= Effect.runPromise(exportsEffect)) -const getExport = (name) => getExports().then(exports => exports[name]?.make) -const worker = () => getExports().then(exports => exports.default) - -export default Object.fromEntries(ExportedHandlerMethods.map( - method => [method, async (...args) => (await worker())[method](...args)]) -) satisfies Required; - -// export class proxy stubs for Durable Objects and Workflows -${[ - ...(hasDoClasses - ? [ - "const DurableObjectBridge = makeDurableObjectBridge(DurableObject, getExport);", - ...doClasses.map( - (id) => `export class ${id} extends DurableObjectBridge("${id}") {}`, - ), - ] - : []), - ...(hasWfClasses - ? [ - "const WorkflowBridgeFn = makeWorkflowBridge(WorkflowEntrypoint, getExport);", - ...wfClasses.map( - (id) => `export class ${id} extends WorkflowBridgeFn("${id}") {}`, - ), - ] - : []), -].join("\n")} -`; - - return yield* buildBundle(virtualEntryPlugin(script)); - }).pipe(Artifacts.cached("build")); - - const viteBuild = Effect.fnUntraced(function* (props: WorkerProps) { - const vite = yield* Effect.promise(() => import("vite")); - let assetsDirectory: string | undefined; - let serverBundle: vite.Rolldown.OutputBundle | undefined; - - yield* Effect.promise(async () => { - const builder = await vite.createBuilder( - { - root: props.vite?.rootDir, - // Declare the ssr environment so Vite 8+ creates it. - // The cloudflare-vite-plugin config hook merges its - // SSR-specific settings on top of this stub. - environments: { - ssr: { - build: { - // Prevent the SSR build from wiping the client - // build's output (both share the dist/ directory). - emptyOutDir: false, - }, - }, - }, - builder: { - sharedConfigBuild: true, - }, - plugins: [ - cloudflareVite({ - compatibilityDate: - props.compatibility?.date ?? defaultCompatibilityDate, - compatibilityFlags: props.compatibility?.flags, - }), - { - name: "output:ssr", - applyToEnvironment(environment) { - return environment.name === "ssr"; - }, - generateBundle(_outputOptions, bundle) { - serverBundle = bundle; - }, - }, - { - name: "output:client", - applyToEnvironment(environment) { - return environment.name === "client"; - }, - generateBundle(outputOptions) { - assetsDirectory = outputOptions.dir; - }, - }, - ], - }, - // This is the `useLegacyBuilder` option. The Vite CLI implementation uses `null` here. - // Originally we used `undefined` here, but this caused the static site build to fail. - // https://github.com/vitejs/vite/blob/a07a4bd052ac75f916391c999c408ad5f2867e61/packages/vite/src/node/cli.ts#L367 - null, - ); - await builder.buildApp(); - }); - if (!assetsDirectory && !serverBundle) { - return yield* Effect.die( - new Error("Vite build produced neither server nor client output"), - ); - } - const [assets, bundle] = yield* Effect.all( - [ - assetsDirectory - ? read({ - directory: assetsDirectory, - config: - typeof props.assets === "object" && "config" in props.assets - ? props.assets.config - : undefined, - sources: - typeof props.assets === "object" && - props.assets !== null && - "sources" in props.assets - ? (props.assets as AssetsProps).sources - : undefined, - }) - : Effect.succeed(undefined), - serverBundle - ? Bundle.bundleOutputFromRolldownOutputBundle(serverBundle) - : Effect.succeed(undefined), - ], - { concurrency: "unbounded" }, - ); - return { assets, bundle }; - }); - - const prepareAssetsAndBundle = (id: string, props: WorkerProps) => - Effect.gen(function* () { - if (props.vite) { - const [{ assets, bundle }, input] = yield* Effect.all( - [viteBuild(props), hashDirectory(props.vite)], - { concurrency: "unbounded" }, - ); - return { assets, bundle, input }; - } - const [assets, bundle] = yield* Effect.all( - [prepareAssets(props.assets), prepareBundle(id, props)], - { concurrency: "unbounded" }, - ); - return { assets, bundle }; - }).pipe( - Effect.map(({ assets, bundle, input }) => ({ - assets, - bundle: { - main: bundle?.files[0].path, - files: bundle?.files.map( - (file) => - new File([file.content as BlobPart], file.path, { - type: contentTypeFromExtension(path.extname(file.path)), - }), - ), - }, - hash: { - assets: assets?.hash, - bundle: bundle?.hash, - input, - } satisfies Worker["Attributes"]["hash"], - })), - ); - - const putWorker = Effect.fnUntraced(function* ( - id: string, - news: WorkerProps, - bindings: ResourceBinding[], - olds: WorkerProps | undefined, - output: Worker["Attributes"] | undefined, - session: ScopedPlanStatusSession, - existingSettings?: workers.GetScriptScriptAndVersionSettingResponse, - ) { - const name = yield* createWorkerName(id, news.name); - yield* Effect.logInfo( - `Cloudflare Worker ${olds ? "update" : "create"}: preparing bundle for ${name}`, - ); - const { assets, bundle, hash } = yield* prepareAssetsAndBundle( - id, - news, - ); - const metadataBindings = bindings.flatMap((b) => b.data.bindings ?? []); - const expectedDurableObjectClassNames = - getExpectedDurableObjectClassNames(metadataBindings); - let metadataAssets: - | workers.PutScriptRequest["metadata"]["assets"] - | undefined; - let keepAssets = false; - if (assets) { - if (output?.hash?.assets !== assets.hash) { - yield* Effect.logInfo( - `Cloudflare Worker ${olds ? "update" : "create"}: uploading assets for ${name}`, - ); - const { jwt } = yield* upload(accountId, name, assets, session); - metadataAssets = { - jwt, - config: assets.config, - }; - } else { - yield* Effect.logInfo( - `Cloudflare Worker update: reusing existing assets for ${name}`, - ); - metadataAssets = { - config: assets.config, - }; - keepAssets = true; - } - metadataBindings.push({ - type: "assets", - name: "ASSETS", - }); - } - metadataBindings.push( - { - type: "plain_text", - name: "ALCHEMY_STACK_NAME", - text: stack.name, - }, - { - type: "plain_text", - name: "ALCHEMY_STAGE", - text: stack.stage, - }, - ); - // Add environment variables as metadata bindings - if (news.env) { - for (const [key, value] of Object.entries(news.env)) { - if (value == null) continue; - if (Redacted.isRedacted(value)) { - metadataBindings.push({ - type: "secret_text", - name: key, - text: Redacted.value(value), - }); - } else { - metadataBindings.push({ - type: "plain_text", - name: key, - text: typeof value === "string" ? value : String(value), - }); - } - } - } - yield* Effect.logInfo( - `Cloudflare Worker ${olds ? "update" : "create"}: uploading script for ${name}`, - ); - const size = - bundle.files - ?.filter((file) => !file.name.endsWith(".map")) - .reduce((acc, file) => acc + file.size, 0) ?? 0; - const sizeKB = size / 1024; - const sizeMB = sizeKB / 1024; - const bundleSize = `${sizeKB > 1024 ? `${sizeMB.toFixed(2)} MB` : `${sizeKB.toFixed(2)} KB`}`; - yield* session.note(`Uploading worker (${bundleSize}) ...`); - - // Read existing worker settings for migration tracking - const oldSettings = - existingSettings ?? - (yield* getScriptSettings({ - accountId, - scriptName: name, - }).pipe( - Effect.map((s) => s as typeof s | undefined), - Effect.catch(() => Effect.succeed(undefined)), - )); - - const oldTags = Array.from(new Set(oldSettings?.tags ?? [])); - const oldBindings = oldSettings?.bindings ?? []; - - // Parse alchemy:do:{logicalId}:{className} tags - const oldDoClassNameByLogicalId = getDurableObjectTagMap(oldTags); - const currentDoBindings = getDurableObjectBindings(bindings, name); - const currentDoClassNameByLogicalId = Object.fromEntries( - currentDoBindings.map((binding) => [ - binding.logicalId, - binding.className, - ]), - ); - - // Parse alchemy:migration-tag:{version} - const oldMigrationTag = oldTags.flatMap((tag) => - tag.startsWith("alchemy:migration-tag:") - ? [tag.slice("alchemy:migration-tag:".length)] - : [], - )[0]; - const newMigrationTag = bumpMigrationTagVersion(oldMigrationTag); - - // Compute deleted classes - const deletedClasses: string[] = []; - for (const [logicalId, className] of Object.entries( - oldDoClassNameByLogicalId, - )) { - if (!currentDoClassNameByLogicalId[logicalId]) { - deletedClasses.push(className); - } - } - - // Backward compatibility for old workers that have DO bindings but no - // alchemy:do tags yet. - if (Object.keys(oldDoClassNameByLogicalId).length === 0) { - for (const oldBinding of oldBindings) { - if ( - oldBinding.type === "durable_object_namespace" && - "className" in oldBinding && - oldBinding.className && - (!("scriptName" in oldBinding) || - !oldBinding.scriptName || - oldBinding.scriptName === name) && - !currentDoBindings.some( - (binding) => binding.bindingName === oldBinding.name, - ) - ) { - deletedClasses.push(oldBinding.className); - } - } - } - - // Collect container-backed class names so we can send container metadata - const containerClassNames = new Set( - bindings.flatMap((b) => - (b.data.containers ?? []).map((c) => c.className), - ), - ); - - // Compute new and renamed classes - const newClasses: string[] = []; - const newSqliteClasses: string[] = []; - const renamedClasses: { from: string; to: string }[] = []; - for (const binding of currentDoBindings) { - const previousClassName = - oldDoClassNameByLogicalId[binding.logicalId]; - if (!previousClassName) { - // Default all new Durable Object classes to SQLite. Cloudflare - // recommends SQLite for new namespaces, and container-backed - // Durable Objects require it. - newSqliteClasses.push(binding.className); - } else if (previousClassName !== binding.className) { - renamedClasses.push({ - from: previousClassName, - to: binding.className, - }); - } - } - - yield* Effect.logInfo( - `Cloudflare Worker put: durable object reconciliation ${JSON.stringify( - { - oldDoClassNameByLogicalId, - currentDoClassNameByLogicalId, - deletedClasses, - renamedClasses, - newSqliteClasses, - }, - )}`, - ); - - // Build alchemy:do:{logicalId}:{className} tags for each DO binding - const alchemyDoTags: string[] = []; - for (const binding of currentDoBindings) { - alchemyDoTags.push( - `alchemy:do:${binding.logicalId}:${binding.className}`, - ); - } - - const metadataTags = Array.from( - new Set([ - ...createAlchemyWorkerTags(id), - ...alchemyDoTags, - ...(newMigrationTag - ? [`alchemy:migration-tag:${newMigrationTag}`] - : []), - ...(news.tags ?? []), - ]), - ); - - const migrations = { - oldTag: oldMigrationTag, - newTag: newMigrationTag, - newClasses, - deletedClasses, - renamedClasses, - transferredClasses: [] as { from: string; to: string }[], - newSqliteClasses, - }; - - const metadataContainers = [...containerClassNames].map( - (className) => ({ - className, - }), - ); - - const metadata = { - assets: metadataAssets, - bindings: metadataBindings, - bodyPart: undefined, - compatibilityDate: news.compatibility?.date ?? "2026-03-10", - compatibilityFlags: news.compatibility?.flags, - containers: - metadataContainers.length > 0 ? metadataContainers : undefined, - keepAssets, - keepBindings: undefined, - limits: news.limits, - logpush: news.logpush, - mainModule: bundle.main, - migrations, - observability: news.observability ?? { - enabled: true, - logs: { - enabled: true, - invocationLogs: true, - }, - }, - placement: news.placement, - tags: metadataTags, - tailConsumers: undefined, - usageModel: undefined, - }; - const worker = yield* putScript({ - accountId, - scriptName: name, - metadata, - files: bundle.files, - }).pipe( - Effect.catch((err) => { - // When adopting a Worker managed by Wrangler (or after a previous - // deploy with mismatched migrations), the old_tag precondition - // fails. The only way to discover the actual tag is through the - // error message — getScriptSettings is meant to return it but - // doesn't at runtime. - const msg = String( - typeof err === "object" && err !== null && "message" in err - ? err.message - : err, - ); - const expectedTag = msg.match( - /when expected tag is ['"]?([^'"]+)['"]?/, - )?.[1]; - if (expectedTag) { - return putScript({ - accountId, - scriptName: name, - metadata: { - ...metadata, - migrations: { - ...migrations, - oldTag: expectedTag, - newTag: bumpMigrationTagVersion(expectedTag), - }, - }, - files: bundle.files, - }); - } - return Effect.fail(err as any); - }), - ); - const { settings, durableObjectNamespaces } = - yield* getWorkerSettingsWithDurableObjects( - name, - expectedDurableObjectClassNames, - ); - if (!olds || news.url !== olds.url) { - const enable = news.url !== false; - yield* session.note( - `${enable ? "Enabling" : "Disabling"} workers.dev subdomain...`, - ); - yield* setWorkerSubdomain(name, enable); - } - return { - workerId: worker.id ?? name, - workerName: name, - logpush: worker.logpush ?? undefined, - url: - news.url !== false - ? `https://${name}.${yield* getAccountSubdomain(accountId)}.workers.dev` - : undefined, - tags: settings.tags ?? metadata.tags, - durableObjectNamespaces, - accountId, - hash, - } satisfies Worker["Attributes"]; - }); - - const hasChanged = Effect.fnUntraced(function* ( - id: string, - props: WorkerProps, - output: Worker["Attributes"], - ) { - if (props.vite) { - const input = yield* hashDirectory(props.vite); - return input !== output.hash?.input; - } - const [assetsHash, bundleHash] = yield* Effect.all( - [ - "assets" in output && output.hash?.assets - ? Effect.succeed(output.hash.assets) - : prepareAssets(props.assets).pipe(Effect.map((a) => a?.hash)), - prepareBundle(id, props).pipe(Effect.map((b) => b.hash)), - ], - { concurrency: "unbounded" }, - ); - return ( - assetsHash !== output.hash?.assets || - bundleHash !== output.hash?.bundle - ); - }); - - return Worker.Provider.of({ - stables: ["workerId", "workerName"], - diff: Effect.fnUntraced(function* ({ id, news, olds, output }) { - if (!isResolved(news)) return undefined; - if ((output?.accountId ?? accountId) !== accountId) { - return { action: "replace" }; - } - const workerName = yield* createWorkerName(id, news.name); - const oldWorkerName = output?.workerName - ? output.workerName - : yield* createWorkerName(id, olds?.name); - if (workerName !== oldWorkerName) { - return { action: "replace" }; - } - if (!output) { - return; - } - if (yield* hasChanged(id, news, output)) { - return { - action: "update", - stables: - oldWorkerName === workerName ? ["workerName"] : undefined, - }; - } - }), - precreate: Effect.fnUntraced(function* ({ id, news, session }) { - const name = yield* createWorkerName(id, news.name); - const exportMap = (news.exports ?? {}) as Record; - const durableObjects = Object.keys(exportMap) - .filter((logicalId) => isDurableObjectExport(exportMap[logicalId])) - .map((logicalId) => ({ - logicalId, - className: logicalId, - })); - const doClasses = durableObjects.map((binding) => binding.className); - const containers = doClasses.map((className) => ({ className })); - const alchemyDoTags = durableObjects.map( - ({ logicalId, className }) => - `alchemy:do:${logicalId}:${className}`, - ); - const tags = Array.from( - new Set([ - ...createAlchemyWorkerTags(id), - ...alchemyDoTags, - ...(news.tags ?? []), - ]), - ); - yield* Effect.logInfo( - `Cloudflare Worker precreate: starting ${name}`, - ); - yield* Effect.logInfo( - `Cloudflare Worker precreate: durable objects ${JSON.stringify( - durableObjects, - )}`, - ); - const existingSettings = yield* getScriptSettings({ - accountId, - scriptName: name, - }).pipe( - Effect.catchTag("WorkerNotFound", () => Effect.succeed(undefined)), - ); - let durableObjectNamespaces = getDurableObjectNamespaces( - existingSettings?.bindings, - ); - - if (existingSettings) { - if (!hasAlchemyWorkerTags(id, existingSettings.tags ?? [])) { - return yield* Effect.die( - `Worker "${name}" already exists but is not owned by this stack/stage/resource`, - ); - } - yield* Effect.logInfo( - `Cloudflare Worker precreate: adopting existing ${name} owned by this stack/stage/resource`, - ); - } else { - yield* session.note("Pre-creating worker..."); - const mainModule = "main.js"; - const placeholderScript = `${doClasses.length > 0 ? 'import { DurableObject } from "cloudflare:workers";\n\n' : ""}export default { fetch() { return new Response("Alchemy worker is being deployed...") } };\n${doClasses - .map( - (className) => - `export class ${className} extends DurableObject {}`, - ) - .join("\n")}`; - yield* putScript({ - accountId, - scriptName: name, - metadata: { - mainModule, - bindings: - doClasses.length > 0 - ? doClasses.map((className) => ({ - type: "durable_object_namespace" as const, - name: className, - className, - })) - : undefined, - compatibilityDate: - news.compatibility?.date ?? defaultCompatibilityDate, - compatibilityFlags: news.compatibility?.flags, - containers, - migrations: - doClasses.length > 0 - ? { - oldTag: undefined, - newTag: undefined, - newClasses: [], - deletedClasses: [], - renamedClasses: [], - transferredClasses: [], - newSqliteClasses: doClasses, - } - : undefined, - observability: news.observability ?? { - enabled: true, - logs: { - enabled: true, - invocationLogs: true, - }, - }, - tags, - }, - files: [ - new File([placeholderScript], mainModule, { - type: "application/javascript+module", - }), - ], - }); - if (doClasses.length > 0) { - ({ durableObjectNamespaces } = - yield* getWorkerSettingsWithDurableObjects(name, doClasses)); - } - } - - if (existingSettings && doClasses.length > 0) { - ({ durableObjectNamespaces } = - yield* getWorkerSettingsWithDurableObjects(name, doClasses)); - } - - return { - workerId: name, - workerName: name, - logpush: existingSettings?.logpush ?? undefined, - url: undefined, - tags: existingSettings?.tags ?? tags, - durableObjectNamespaces, - accountId, - } satisfies Worker["Attributes"]; - }), - read: Effect.fnUntraced( - function* ({ id, output, olds }) { - const workerName = - output?.workerName ?? (yield* createWorkerName(id, olds?.name)); - yield* Effect.logInfo( - `Cloudflare Worker read: checking ${workerName}`, - ); - const [worker, subdomain, settings] = yield* Effect.all([ - listScripts({ - accountId, - }).pipe( - Effect.map((workers) => - workers.result.find((worker) => worker.id === workerName), - ), - ), - getScriptSubdomain({ - accountId, - scriptName: workerName, - }), - getScriptSettings({ - accountId, - scriptName: workerName, - }), - ]); - if (!worker) { - yield* Effect.logInfo( - `Cloudflare Worker read: ${workerName} not found in script list`, - ); - return undefined; - } - yield* Effect.logInfo( - `Cloudflare Worker read: found ${workerName}`, - ); - return { - accountId, - workerId: worker.id ?? workerName, - workerName, - logpush: worker.logpush ?? undefined, - url: subdomain.enabled - ? `https://${workerName}.${yield* getAccountSubdomain(accountId)}.workers.dev` - : undefined, - tags: settings.tags ?? undefined, - durableObjectNamespaces: getDurableObjectNamespaces( - settings.bindings, - ), - } satisfies Worker["Attributes"]; - }, - (effect) => - effect.pipe( - Effect.catchTag("WorkerNotFound", () => - Effect.succeed(undefined), - ), - ), - ), - create: Effect.fnUntraced(function* ({ - id, - news, - bindings, - output, - session, - }) { - const name = yield* createWorkerName(id, news.name); - const durableObjects = getDurableObjectBindings(bindings, name).map( - ({ logicalId, className }) => ({ - logicalId, - className, - }), - ); - yield* Effect.logInfo(`Cloudflare Worker create: starting ${name}`); - yield* Effect.logInfo( - `Cloudflare Worker create: durable objects ${JSON.stringify( - durableObjects, - )}`, - ); - const existingSettings = yield* getScriptSettings({ - accountId, - scriptName: name, - }).pipe( - Effect.catchTag("WorkerNotFound", () => Effect.succeed(undefined)), - ); - yield* Effect.logInfo( - `Cloudflare Worker create: existing durable object tags ${JSON.stringify( - (existingSettings?.tags ?? []).filter((tag) => - tag.startsWith("alchemy:do:"), - ), - )}`, - ); - if (existingSettings) { - yield* Effect.logInfo( - `Cloudflare Worker create: ${name} already exists`, - ); - if (!hasAlchemyWorkerTags(id, existingSettings.tags ?? [])) { - return yield* Effect.die( - `Worker "${name}" already exists but is not owned by this stack/stage/resource`, - ); - } - yield* Effect.logInfo( - `Cloudflare Worker create: adopting existing ${name} owned by this stack/stage/resource`, - ); - } - return yield* putWorker( - id, - news, - bindings, - undefined, - output, - session, - existingSettings, - ); - }), - update: Effect.fnUntraced(function* ({ - id, - olds, - news, - output, - bindings, - session, - }) { - const durableObjects = getDurableObjectBindings( - bindings, - output.workerName, - ).map(({ logicalId, className }) => ({ - logicalId, - className, - })); - yield* Effect.logInfo( - `Cloudflare Worker update: starting ${output.workerName}`, - ); - yield* Effect.logInfo( - `Cloudflare Worker update: durable objects ${JSON.stringify( - durableObjects, - )}`, - ); - yield* Effect.logInfo( - `Cloudflare Worker update: previous durable object tags ${JSON.stringify( - (output.tags ?? []).filter((tag) => - tag.startsWith("alchemy:do:"), - ), - )}`, - ); - return yield* putWorker(id, news, bindings, olds, output, session); - }), - delete: Effect.fnUntraced(function* ({ output }) { - yield* Effect.logInfo( - `Cloudflare Worker delete: deleting ${output.workerName}`, - ); - yield* deleteScript({ - accountId: output.accountId, - scriptName: output.workerName, - }).pipe(Effect.catchTag("WorkerNotFound", () => Effect.void)); - }), - tail: ({ output }) => { - const runTailSession = Effect.gen(function* () { - const { id: tailId, url } = yield* createScriptTail({ - scriptName: output.workerName, - accountId: output.accountId, - body: { filters: [] }, - }); - - const socket = yield* Socket.makeWebSocket(url, { - protocols: ["trace-v1"], - }); - - const queue = yield* Queue.make(); - - yield* socket - .runRaw((raw) => { - const text = - typeof raw === "string" ? raw : new TextDecoder().decode(raw); - const data: TailEventMessage = JSON.parse(text); - const eventTs = new Date(data.eventTimestamp ?? Date.now()); - - if (data.event && "request" in data.event) { - const reqEvent = data.event; - const pathname = (() => { - try { - return new URL(reqEvent.request.url).pathname; - } catch { - return reqEvent.request.url; - } - })(); - const status = reqEvent.response?.status ?? 500; - Queue.offerUnsafe(queue, { - timestamp: eventTs, - message: `${reqEvent.request.method} ${pathname} > ${status} (cpu: ${Math.round(data.cpuTime)}ms, wall: ${Math.round(data.wallTime)}ms)`, - }); - } - - for (const log of data.logs) { - const msg = log.message.join(" "); - Queue.offerUnsafe(queue, { - timestamp: new Date(log.timestamp), - message: log.level === "log" ? msg : `${log.level}: ${msg}`, - }); - } - - for (const exception of data.exceptions) { - Queue.offerUnsafe(queue, { - timestamp: new Date(exception.timestamp), - message: `${exception.name} ${exception.message}\n${exception.stack}`, - }); - } - }) - .pipe( - Effect.ensuring( - Effect.all([ - deleteScriptTail({ - scriptName: output.workerName, - id: tailId, - accountId: output.accountId, - }).pipe(Effect.ignore), - Queue.end(queue), - ]), - ), - Effect.ignore, - Effect.forkChild(), - ); - - return Stream.fromQueue(queue); - }); - - return Stream.unwrap(runTailSession).pipe( - Stream.repeat(Schedule.spaced("1 second")), - ); - }, - logs: ({ output, options }) => - telemetry.queryLogs({ - accountId: output.accountId, - filters: [ - { - key: "$workers.scriptName", - operation: "eq", - type: "string", - value: output.workerName, - }, - ], - options, - }), - }); - }), - ); - -interface TailEventMessage { - eventTimestamp?: number; - wallTime: number; - cpuTime: number; - truncated: boolean; - outcome: string; - scriptName: string; - exceptions: { - name: string; - message: string; - stack: string; - timestamp: string; - }[]; - logs: { - message: string[]; - level: string; - timestamp: string; - }[]; - event: - | { - request: { method: string; url: string }; - response?: { status: number }; - } - | null - | undefined; -} - -const contentTypeFromExtension = (extension: string) => { - switch (extension) { - case ".wasm": - return "application/wasm"; - case ".txt": - case ".html": - case ".sql": - case ".custom": - return "text/plain"; - case ".bin": - return "application/octet-stream"; - case ".mjs": - case ".js": - return "application/javascript+module"; - case ".cjs": - return "application/javascript"; - case ".map": - return "application/source-map"; - default: - return "application/octet-stream"; - } -};