everything-dev 1.53.2 → 2.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -11
- package/dist/_virtual/_rolldown/runtime.cjs +17 -2
- package/dist/_virtual/_rolldown/runtime.mjs +36 -0
- package/dist/api/auth-middleware.cjs +161 -0
- package/dist/api/auth-middleware.cjs.map +1 -0
- package/dist/api/auth-middleware.d.cts +69 -0
- package/dist/api/auth-middleware.d.mts +69 -0
- package/dist/api/auth-middleware.mjs +160 -0
- package/dist/api/auth-middleware.mjs.map +1 -0
- package/dist/api-contract.cjs +250 -62
- package/dist/api-contract.cjs.map +1 -1
- package/dist/api-contract.mjs +246 -65
- package/dist/api-contract.mjs.map +1 -1
- package/dist/app.cjs +99 -26
- package/dist/app.cjs.map +1 -1
- package/dist/app.d.cts +3 -0
- package/dist/app.d.mts +3 -0
- package/dist/app.mjs +100 -27
- package/dist/app.mjs.map +1 -1
- package/dist/auth-login.cjs +163 -0
- package/dist/auth-login.cjs.map +1 -0
- package/dist/auth-login.mjs +162 -0
- package/dist/auth-login.mjs.map +1 -0
- package/dist/auth-session.cjs +64 -0
- package/dist/auth-session.cjs.map +1 -0
- package/dist/auth-session.mjs +58 -0
- package/dist/auth-session.mjs.map +1 -0
- package/dist/auth-types-gen.cjs +0 -1
- package/dist/auth-types-gen.cjs.map +1 -1
- package/dist/build.cjs +37 -173
- package/dist/build.cjs.map +1 -1
- package/dist/build.mjs +37 -171
- package/dist/build.mjs.map +1 -1
- package/dist/bundle-cache.cjs +74 -0
- package/dist/bundle-cache.cjs.map +1 -0
- package/dist/bundle-cache.d.cts +27 -0
- package/dist/bundle-cache.d.mts +27 -0
- package/dist/bundle-cache.mjs +68 -0
- package/dist/bundle-cache.mjs.map +1 -0
- package/dist/bundle-fs-resolve.cjs +209 -0
- package/dist/bundle-fs-resolve.cjs.map +1 -0
- package/dist/bundle-fs-resolve.d.cts +76 -0
- package/dist/bundle-fs-resolve.d.mts +76 -0
- package/dist/bundle-fs-resolve.mjs +202 -0
- package/dist/bundle-fs-resolve.mjs.map +1 -0
- package/dist/cdn-deploy.cjs +126 -0
- package/dist/cdn-deploy.cjs.map +1 -0
- package/dist/cdn-deploy.mjs +124 -0
- package/dist/cdn-deploy.mjs.map +1 -0
- package/dist/cli/db-doctor.cjs +19 -19
- package/dist/cli/db-doctor.cjs.map +1 -1
- package/dist/cli/db-doctor.mjs +18 -18
- package/dist/cli/db-doctor.mjs.map +1 -1
- package/dist/cli/db-repair.cjs +9 -32
- package/dist/cli/db-repair.cjs.map +1 -1
- package/dist/cli/db-repair.mjs +9 -32
- package/dist/cli/db-repair.mjs.map +1 -1
- package/dist/cli/framework-version.cjs +7 -3
- package/dist/cli/framework-version.cjs.map +1 -1
- package/dist/cli/framework-version.mjs +7 -3
- package/dist/cli/framework-version.mjs.map +1 -1
- package/dist/cli/infra.cjs +159 -251
- package/dist/cli/infra.cjs.map +1 -1
- package/dist/cli/infra.mjs +154 -242
- package/dist/cli/infra.mjs.map +1 -1
- package/dist/cli/init.cjs +624 -196
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts +61 -8
- package/dist/cli/init.d.mts +61 -8
- package/dist/cli/init.mjs +613 -194
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/parse.cjs +8 -7
- package/dist/cli/parse.cjs.map +1 -1
- package/dist/cli/parse.mjs +9 -7
- package/dist/cli/parse.mjs.map +1 -1
- package/dist/cli/prompts.cjs +14 -1
- package/dist/cli/prompts.cjs.map +1 -1
- package/dist/cli/prompts.mjs +14 -1
- package/dist/cli/prompts.mjs.map +1 -1
- package/dist/cli/prune.cjs +220 -0
- package/dist/cli/prune.cjs.map +1 -0
- package/dist/cli/prune.mjs +220 -0
- package/dist/cli/prune.mjs.map +1 -0
- package/dist/cli/snapshot.cjs +2 -1
- package/dist/cli/snapshot.cjs.map +1 -1
- package/dist/cli/snapshot.mjs +2 -1
- package/dist/cli/snapshot.mjs.map +1 -1
- package/dist/cli/status.cjs +5 -4
- package/dist/cli/status.cjs.map +1 -1
- package/dist/cli/status.mjs +6 -5
- package/dist/cli/status.mjs.map +1 -1
- package/dist/cli/sync.cjs +156 -58
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +158 -63
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/cli/timing.cjs +0 -1
- package/dist/cli/timing.cjs.map +1 -1
- package/dist/cli/upgrade.cjs +95 -69
- package/dist/cli/upgrade.cjs.map +1 -1
- package/dist/cli/upgrade.mjs +97 -72
- package/dist/cli/upgrade.mjs.map +1 -1
- package/dist/cli/utils/helpers.cjs.map +1 -1
- package/dist/cli.cjs +320 -72
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +316 -68
- package/dist/cli.mjs.map +1 -1
- package/dist/code-artifacts.cjs +76 -8
- package/dist/code-artifacts.cjs.map +1 -1
- package/dist/code-artifacts.mjs +76 -10
- package/dist/code-artifacts.mjs.map +1 -1
- package/dist/commands/build.cjs +65 -0
- package/dist/commands/build.cjs.map +1 -0
- package/dist/commands/build.mjs +65 -0
- package/dist/commands/build.mjs.map +1 -0
- package/dist/commands/config.cjs +77 -0
- package/dist/commands/config.cjs.map +1 -0
- package/dist/commands/config.d.cts +8 -0
- package/dist/commands/config.d.mts +8 -0
- package/dist/commands/config.mjs +74 -0
- package/dist/commands/config.mjs.map +1 -0
- package/dist/commands/db.cjs +107 -0
- package/dist/commands/db.cjs.map +1 -0
- package/dist/commands/db.mjs +107 -0
- package/dist/commands/db.mjs.map +1 -0
- package/dist/commands/deploy.cjs +336 -0
- package/dist/commands/deploy.cjs.map +1 -0
- package/dist/commands/deploy.mjs +334 -0
- package/dist/commands/deploy.mjs.map +1 -0
- package/dist/commands/dev.cjs +75 -0
- package/dist/commands/dev.cjs.map +1 -0
- package/dist/commands/dev.mjs +73 -0
- package/dist/commands/dev.mjs.map +1 -0
- package/dist/commands/init.cjs +234 -0
- package/dist/commands/init.cjs.map +1 -0
- package/dist/commands/init.mjs +231 -0
- package/dist/commands/init.mjs.map +1 -0
- package/dist/commands/keys.cjs +255 -0
- package/dist/commands/keys.cjs.map +1 -0
- package/dist/commands/keys.mjs +253 -0
- package/dist/commands/keys.mjs.map +1 -0
- package/dist/commands/ops.cjs +199 -0
- package/dist/commands/ops.cjs.map +1 -0
- package/dist/commands/ops.mjs +197 -0
- package/dist/commands/ops.mjs.map +1 -0
- package/dist/commands/plugins.cjs +211 -0
- package/dist/commands/plugins.cjs.map +1 -0
- package/dist/commands/plugins.mjs +211 -0
- package/dist/commands/plugins.mjs.map +1 -0
- package/dist/commands/shared.cjs +8 -0
- package/dist/commands/shared.cjs.map +1 -0
- package/dist/commands/shared.d.cts +6 -0
- package/dist/commands/shared.d.mts +6 -0
- package/dist/commands/shared.mjs +8 -0
- package/dist/commands/shared.mjs.map +1 -0
- package/dist/commands/upgrade.cjs +325 -0
- package/dist/commands/upgrade.cjs.map +1 -0
- package/dist/commands/upgrade.mjs +323 -0
- package/dist/commands/upgrade.mjs.map +1 -0
- package/dist/components/dev-render.cjs +340 -0
- package/dist/components/dev-render.cjs.map +1 -0
- package/dist/components/dev-render.mjs +332 -0
- package/dist/components/dev-render.mjs.map +1 -0
- package/dist/config.cjs +460 -221
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +491 -48
- package/dist/config.d.mts +491 -48
- package/dist/config.mjs +439 -212
- package/dist/config.mjs.map +1 -1
- package/dist/contract.cjs +327 -50
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +1951 -1062
- package/dist/contract.d.mts +1951 -1062
- package/dist/contract.meta.cjs +107 -12
- package/dist/contract.meta.cjs.map +1 -1
- package/dist/contract.meta.d.cts +166 -8
- package/dist/contract.meta.d.mts +166 -8
- package/dist/contract.meta.mjs +107 -11
- package/dist/contract.meta.mjs.map +1 -1
- package/dist/contract.mjs +580 -327
- package/dist/contract.mjs.map +1 -1
- package/dist/dag.cjs +5 -3
- package/dist/dag.cjs.map +1 -1
- package/dist/dag.mjs +6 -3
- package/dist/dag.mjs.map +1 -1
- package/dist/db/binding.cjs +80 -0
- package/dist/db/binding.cjs.map +1 -0
- package/dist/db/binding.d.cts +39 -0
- package/dist/db/binding.d.mts +39 -0
- package/dist/db/binding.mjs +78 -0
- package/dist/db/binding.mjs.map +1 -0
- package/dist/db/bindings.cjs +78 -0
- package/dist/db/bindings.cjs.map +1 -0
- package/dist/db/bindings.d.cts +34 -0
- package/dist/db/bindings.d.mts +34 -0
- package/dist/db/bindings.mjs +76 -0
- package/dist/db/bindings.mjs.map +1 -0
- package/dist/db/core.cjs +204 -0
- package/dist/db/core.cjs.map +1 -0
- package/dist/db/core.d.cts +69 -0
- package/dist/db/core.d.mts +69 -0
- package/dist/db/core.mjs +192 -0
- package/dist/db/core.mjs.map +1 -0
- package/dist/db/driver.cjs +167 -0
- package/dist/db/driver.cjs.map +1 -0
- package/dist/db/driver.d.cts +50 -0
- package/dist/db/driver.d.mts +50 -0
- package/dist/db/driver.mjs +165 -0
- package/dist/db/driver.mjs.map +1 -0
- package/dist/db/drizzle-kit.cjs +177 -0
- package/dist/db/drizzle-kit.cjs.map +1 -0
- package/dist/db/drizzle-kit.d.cts +25 -0
- package/dist/db/drizzle-kit.d.mts +25 -0
- package/dist/db/drizzle-kit.mjs +175 -0
- package/dist/db/drizzle-kit.mjs.map +1 -0
- package/dist/db/errors.cjs +27 -0
- package/dist/db/errors.cjs.map +1 -0
- package/dist/db/errors.d.cts +16 -0
- package/dist/db/errors.d.mts +16 -0
- package/dist/db/errors.mjs +26 -0
- package/dist/db/errors.mjs.map +1 -0
- package/dist/db/identity.cjs +55 -0
- package/dist/db/identity.cjs.map +1 -0
- package/dist/db/identity.d.cts +40 -0
- package/dist/db/identity.d.mts +40 -0
- package/dist/db/identity.mjs +53 -0
- package/dist/db/identity.mjs.map +1 -0
- package/dist/db/index.cjs +43 -0
- package/dist/db/index.d.cts +9 -0
- package/dist/db/index.d.mts +9 -0
- package/dist/db/index.mjs +10 -0
- package/dist/db/run-migrations.cjs +343 -0
- package/dist/db/run-migrations.cjs.map +1 -0
- package/dist/db/run-migrations.d.cts +87 -0
- package/dist/db/run-migrations.d.mts +87 -0
- package/dist/db/run-migrations.mjs +341 -0
- package/dist/db/run-migrations.mjs.map +1 -0
- package/dist/delegate-signer.cjs +85 -0
- package/dist/delegate-signer.cjs.map +1 -0
- package/dist/delegate-signer.mjs +84 -0
- package/dist/delegate-signer.mjs.map +1 -0
- package/dist/deploy-diff.cjs +119 -0
- package/dist/deploy-diff.cjs.map +1 -0
- package/dist/deploy-diff.mjs +109 -0
- package/dist/deploy-diff.mjs.map +1 -0
- package/dist/descriptor/constructors.cjs +49 -0
- package/dist/descriptor/constructors.cjs.map +1 -0
- package/dist/descriptor/constructors.d.cts +27 -0
- package/dist/descriptor/constructors.d.mts +27 -0
- package/dist/descriptor/constructors.mjs +45 -0
- package/dist/descriptor/constructors.mjs.map +1 -0
- package/dist/descriptor/index.cjs +24 -0
- package/dist/descriptor/index.d.cts +5 -0
- package/dist/descriptor/index.d.mts +5 -0
- package/dist/descriptor/index.mjs +6 -0
- package/dist/descriptor/resolve.cjs +258 -0
- package/dist/descriptor/resolve.cjs.map +1 -0
- package/dist/descriptor/resolve.d.cts +50 -0
- package/dist/descriptor/resolve.d.mts +50 -0
- package/dist/descriptor/resolve.mjs +252 -0
- package/dist/descriptor/resolve.mjs.map +1 -0
- package/dist/descriptor/schema.cjs +109 -0
- package/dist/descriptor/schema.cjs.map +1 -0
- package/dist/descriptor/schema.d.cts +217 -0
- package/dist/descriptor/schema.d.mts +217 -0
- package/dist/descriptor/schema.mjs +102 -0
- package/dist/descriptor/schema.mjs.map +1 -0
- package/dist/descriptor/serialize.cjs +45 -0
- package/dist/descriptor/serialize.cjs.map +1 -0
- package/dist/descriptor/serialize.d.cts +7 -0
- package/dist/descriptor/serialize.d.mts +7 -0
- package/dist/descriptor/serialize.mjs +45 -0
- package/dist/descriptor/serialize.mjs.map +1 -0
- package/dist/dev-log-pipeline.cjs +273 -0
- package/dist/dev-log-pipeline.cjs.map +1 -0
- package/dist/dev-log-pipeline.mjs +267 -0
- package/dist/dev-log-pipeline.mjs.map +1 -0
- package/dist/dev-logs.cjs +39 -8
- package/dist/dev-logs.cjs.map +1 -1
- package/dist/dev-logs.mjs +37 -9
- package/dist/dev-logs.mjs.map +1 -1
- package/dist/dev-program.cjs +405 -0
- package/dist/dev-program.cjs.map +1 -0
- package/dist/dev-program.d.cts +10 -0
- package/dist/dev-program.d.mts +10 -0
- package/dist/dev-program.mjs +395 -0
- package/dist/dev-program.mjs.map +1 -0
- package/dist/dev-session-data.d.cts +27 -0
- package/dist/dev-session-data.d.mts +27 -0
- package/dist/dev-session.cjs +178 -105
- package/dist/dev-session.cjs.map +1 -1
- package/dist/dev-session.mjs +180 -105
- package/dist/dev-session.mjs.map +1 -1
- package/dist/env/process-env.cjs +16 -0
- package/dist/env/process-env.cjs.map +1 -0
- package/dist/env/process-env.mjs +13 -0
- package/dist/env/process-env.mjs.map +1 -0
- package/dist/env/project-env.cjs +144 -0
- package/dist/env/project-env.cjs.map +1 -0
- package/dist/env/project-env.d.cts +1 -0
- package/dist/env/project-env.d.mts +1 -0
- package/dist/env/project-env.mjs +132 -0
- package/dist/env/project-env.mjs.map +1 -0
- package/dist/fastkv.cjs +59 -12
- package/dist/fastkv.cjs.map +1 -1
- package/dist/fastkv.d.cts +42 -6
- package/dist/fastkv.d.mts +42 -6
- package/dist/fastkv.mjs +58 -13
- package/dist/fastkv.mjs.map +1 -1
- package/dist/fingerprint.cjs +57 -0
- package/dist/fingerprint.cjs.map +1 -0
- package/dist/fingerprint.d.cts +14 -0
- package/dist/fingerprint.d.mts +14 -0
- package/dist/fingerprint.mjs +55 -0
- package/dist/fingerprint.mjs.map +1 -0
- package/dist/http-client.cjs +17 -17
- package/dist/http-client.cjs.map +1 -1
- package/dist/http-client.mjs +17 -17
- package/dist/http-client.mjs.map +1 -1
- package/dist/image-deploy.cjs +186 -0
- package/dist/image-deploy.cjs.map +1 -0
- package/dist/image-deploy.mjs +182 -0
- package/dist/image-deploy.mjs.map +1 -0
- package/dist/index.cjs +66 -18
- package/dist/index.d.cts +8 -7
- package/dist/index.d.mts +8 -7
- package/dist/index.mjs +6 -5
- package/dist/infra/docker.cjs +77 -0
- package/dist/infra/docker.cjs.map +1 -0
- package/dist/infra/docker.d.cts +10 -0
- package/dist/infra/docker.d.mts +10 -0
- package/dist/infra/docker.mjs +69 -0
- package/dist/infra/docker.mjs.map +1 -0
- package/dist/infra/materializer.cjs +74 -0
- package/dist/infra/materializer.cjs.map +1 -0
- package/dist/infra/materializer.mjs +70 -0
- package/dist/infra/materializer.mjs.map +1 -0
- package/dist/infra/planner.cjs +135 -103
- package/dist/infra/planner.cjs.map +1 -1
- package/dist/infra/planner.mjs +137 -104
- package/dist/infra/planner.mjs.map +1 -1
- package/dist/infra/port-ownership.cjs +57 -0
- package/dist/infra/port-ownership.cjs.map +1 -0
- package/dist/infra/port-ownership.mjs +57 -0
- package/dist/infra/port-ownership.mjs.map +1 -0
- package/dist/infra/preflight.cjs +45 -33
- package/dist/infra/preflight.cjs.map +1 -1
- package/dist/infra/preflight.d.cts +1 -0
- package/dist/infra/preflight.d.mts +1 -0
- package/dist/infra/preflight.mjs +46 -34
- package/dist/infra/preflight.mjs.map +1 -1
- package/dist/infra/types.cjs.map +1 -1
- package/dist/infra/types.d.cts +2 -0
- package/dist/infra/types.d.mts +2 -0
- package/dist/infra/types.mjs.map +1 -1
- package/dist/integrity.cjs +50 -61
- package/dist/integrity.cjs.map +1 -1
- package/dist/integrity.d.cts +16 -10
- package/dist/integrity.d.mts +16 -10
- package/dist/integrity.mjs +50 -59
- package/dist/integrity.mjs.map +1 -1
- package/dist/internal/manifest-normalizer.cjs +8 -2
- package/dist/internal/manifest-normalizer.cjs.map +1 -1
- package/dist/internal/manifest-normalizer.mjs +9 -3
- package/dist/internal/manifest-normalizer.mjs.map +1 -1
- package/dist/merge.cjs +19 -1
- package/dist/merge.cjs.map +1 -1
- package/dist/merge.d.cts +1 -1
- package/dist/merge.d.mts +1 -1
- package/dist/merge.mjs +19 -2
- package/dist/merge.mjs.map +1 -1
- package/dist/mf.cjs +190 -3
- package/dist/mf.cjs.map +1 -1
- package/dist/mf.d.cts +24 -2
- package/dist/mf.d.mts +24 -2
- package/dist/mf.mjs +189 -4
- package/dist/mf.mjs.map +1 -1
- package/dist/near-cli.cjs +59 -91
- package/dist/near-cli.cjs.map +1 -1
- package/dist/near-cli.mjs +58 -90
- package/dist/near-cli.mjs.map +1 -1
- package/dist/near-signer.cjs +73 -0
- package/dist/near-signer.cjs.map +1 -0
- package/dist/near-signer.mjs +70 -0
- package/dist/near-signer.mjs.map +1 -0
- package/dist/network.cjs +0 -1
- package/dist/network.cjs.map +1 -1
- package/dist/orchestrator.cjs +256 -87
- package/dist/orchestrator.cjs.map +1 -1
- package/dist/orchestrator.mjs +248 -87
- package/dist/orchestrator.mjs.map +1 -1
- package/dist/platform-deploy.cjs +81 -0
- package/dist/platform-deploy.cjs.map +1 -0
- package/dist/platform-deploy.mjs +80 -0
- package/dist/platform-deploy.mjs.map +1 -0
- package/dist/plugin.cjs +54 -1389
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +6 -896
- package/dist/plugin.d.mts +6 -896
- package/dist/plugin.mjs +53 -1387
- package/dist/plugin.mjs.map +1 -1
- package/dist/process-kill.cjs +44 -0
- package/dist/process-kill.cjs.map +1 -0
- package/dist/process-kill.mjs +43 -0
- package/dist/process-kill.mjs.map +1 -0
- package/dist/process-registry.cjs +64 -9
- package/dist/process-registry.cjs.map +1 -1
- package/dist/process-registry.mjs +61 -10
- package/dist/process-registry.mjs.map +1 -1
- package/dist/progress.cjs +45 -0
- package/dist/progress.cjs.map +1 -0
- package/dist/progress.d.cts +13 -0
- package/dist/progress.d.mts +13 -0
- package/dist/progress.mjs +42 -0
- package/dist/progress.mjs.map +1 -0
- package/dist/publish.cjs +513 -79
- package/dist/publish.cjs.map +1 -1
- package/dist/publish.mjs +515 -82
- package/dist/publish.mjs.map +1 -1
- package/dist/registry-use.cjs +41 -0
- package/dist/registry-use.cjs.map +1 -0
- package/dist/registry-use.mjs +40 -0
- package/dist/registry-use.mjs.map +1 -0
- package/dist/resolution/session.cjs +335 -0
- package/dist/resolution/session.cjs.map +1 -0
- package/dist/resolution/session.d.cts +105 -0
- package/dist/resolution/session.d.mts +105 -0
- package/dist/resolution/session.mjs +331 -0
- package/dist/resolution/session.mjs.map +1 -0
- package/dist/rollback.cjs +131 -0
- package/dist/rollback.cjs.map +1 -0
- package/dist/rollback.mjs +128 -0
- package/dist/rollback.mjs.map +1 -0
- package/dist/sdk.cjs +7 -7
- package/dist/sdk.d.cts +3 -3
- package/dist/sdk.d.mts +3 -3
- package/dist/sdk.mjs +2 -2
- package/dist/service-descriptor.cjs +67 -34
- package/dist/service-descriptor.cjs.map +1 -1
- package/dist/service-descriptor.d.cts +4 -1
- package/dist/service-descriptor.d.mts +3 -0
- package/dist/service-descriptor.mjs +63 -35
- package/dist/service-descriptor.mjs.map +1 -1
- package/dist/shared-deps.cjs +17 -16
- package/dist/shared-deps.cjs.map +1 -1
- package/dist/shared-deps.mjs +17 -16
- package/dist/shared-deps.mjs.map +1 -1
- package/dist/start-config-source.cjs +24 -0
- package/dist/start-config-source.cjs.map +1 -0
- package/dist/start-config-source.d.cts +29 -0
- package/dist/start-config-source.d.mts +29 -0
- package/dist/start-config-source.mjs +22 -0
- package/dist/start-config-source.mjs.map +1 -0
- package/dist/storage-upload.cjs +145 -0
- package/dist/storage-upload.cjs.map +1 -0
- package/dist/storage-upload.mjs +143 -0
- package/dist/storage-upload.mjs.map +1 -0
- package/dist/types.cjs +126 -20
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +867 -585
- package/dist/types.d.mts +867 -585
- package/dist/types.mjs +307 -208
- package/dist/types.mjs.map +1 -1
- package/dist/ui/api.cjs +105 -0
- package/dist/ui/api.cjs.map +1 -0
- package/dist/ui/api.d.cts +31 -0
- package/dist/ui/api.d.mts +31 -0
- package/dist/ui/api.mjs +99 -0
- package/dist/ui/api.mjs.map +1 -0
- package/dist/ui/auth-guards.cjs +50 -0
- package/dist/ui/auth-guards.cjs.map +1 -0
- package/dist/ui/auth-guards.d.cts +39 -0
- package/dist/ui/auth-guards.d.mts +39 -0
- package/dist/ui/auth-guards.mjs +48 -0
- package/dist/ui/auth-guards.mjs.map +1 -0
- package/dist/ui/auth.cjs +197 -0
- package/dist/ui/auth.cjs.map +1 -0
- package/dist/ui/auth.d.cts +56 -0
- package/dist/ui/auth.d.mts +56 -0
- package/dist/ui/auth.mjs +179 -0
- package/dist/ui/auth.mjs.map +1 -0
- package/dist/ui/entry.cjs +16 -0
- package/dist/ui/entry.cjs.map +1 -0
- package/dist/ui/entry.d.cts +12 -0
- package/dist/ui/entry.d.mts +12 -0
- package/dist/ui/entry.mjs +15 -0
- package/dist/ui/entry.mjs.map +1 -0
- package/dist/ui/head.cjs +14 -7
- package/dist/ui/head.cjs.map +1 -1
- package/dist/ui/head.mjs +15 -7
- package/dist/ui/head.mjs.map +1 -1
- package/dist/ui/hydrate.cjs +265 -0
- package/dist/ui/hydrate.cjs.map +1 -0
- package/dist/ui/hydrate.d.cts +48 -0
- package/dist/ui/hydrate.d.mts +48 -0
- package/dist/ui/hydrate.mjs +263 -0
- package/dist/ui/hydrate.mjs.map +1 -0
- package/dist/ui/i18n.cjs +153 -0
- package/dist/ui/i18n.cjs.map +1 -0
- package/dist/ui/i18n.d.cts +29 -0
- package/dist/ui/i18n.d.mts +29 -0
- package/dist/ui/i18n.mjs +140 -0
- package/dist/ui/i18n.mjs.map +1 -0
- package/dist/ui/index.cjs +19 -1
- package/dist/ui/index.d.cts +6 -3
- package/dist/ui/index.d.mts +6 -3
- package/dist/ui/index.mjs +5 -2
- package/dist/ui/locale.cjs +53 -0
- package/dist/ui/locale.cjs.map +1 -0
- package/dist/ui/locale.d.cts +18 -0
- package/dist/ui/locale.d.mts +18 -0
- package/dist/ui/locale.mjs +49 -0
- package/dist/ui/locale.mjs.map +1 -0
- package/dist/ui/manifest/index.cjs +25 -0
- package/dist/ui/manifest/index.cjs.map +1 -0
- package/dist/ui/manifest/index.d.cts +9 -0
- package/dist/ui/manifest/index.d.mts +9 -0
- package/dist/ui/manifest/index.mjs +13 -0
- package/dist/ui/manifest/index.mjs.map +1 -0
- package/dist/ui/manifest-generator.cjs +8 -0
- package/dist/ui/manifest-generator.d.cts +1 -0
- package/dist/ui/manifest-generator.d.mts +1 -0
- package/dist/ui/manifest-generator.mjs +3 -0
- package/dist/ui/message-catalogs.cjs +8 -0
- package/dist/ui/message-catalogs.cjs.map +1 -0
- package/dist/ui/message-catalogs.d.cts +5 -0
- package/dist/ui/message-catalogs.d.mts +5 -0
- package/dist/ui/message-catalogs.mjs +8 -0
- package/dist/ui/message-catalogs.mjs.map +1 -0
- package/dist/ui/metadata.cjs +0 -1
- package/dist/ui/metadata.cjs.map +1 -1
- package/dist/ui/metadata.d.cts +1 -1
- package/dist/ui/metadata.d.mts +1 -1
- package/dist/ui/plugin-path.cjs +37 -0
- package/dist/ui/plugin-path.cjs.map +1 -0
- package/dist/ui/plugin-path.d.cts +25 -0
- package/dist/ui/plugin-path.d.mts +25 -0
- package/dist/ui/plugin-path.mjs +35 -0
- package/dist/ui/plugin-path.mjs.map +1 -0
- package/dist/ui/router-client.cjs +61 -0
- package/dist/ui/router-client.cjs.map +1 -0
- package/dist/ui/router-client.d.cts +20 -0
- package/dist/ui/router-client.d.mts +20 -0
- package/dist/ui/router-client.mjs +60 -0
- package/dist/ui/router-client.mjs.map +1 -0
- package/dist/ui/router-defaults.cjs +48 -0
- package/dist/ui/router-defaults.cjs.map +1 -0
- package/dist/ui/router-defaults.d.cts +8 -0
- package/dist/ui/router-defaults.d.mts +8 -0
- package/dist/ui/router-defaults.mjs +45 -0
- package/dist/ui/router-defaults.mjs.map +1 -0
- package/dist/ui/router-error.cjs +70 -0
- package/dist/ui/router-error.cjs.map +1 -0
- package/dist/ui/router-error.d.cts +19 -0
- package/dist/ui/router-error.d.mts +19 -0
- package/dist/ui/router-error.mjs +69 -0
- package/dist/ui/router-error.mjs.map +1 -0
- package/dist/ui/router-server.cjs +153 -0
- package/dist/ui/router-server.cjs.map +1 -0
- package/dist/ui/router-server.d.cts +38 -0
- package/dist/ui/router-server.d.mts +38 -0
- package/dist/ui/router-server.mjs +152 -0
- package/dist/ui/router-server.mjs.map +1 -0
- package/dist/ui/router.cjs +4 -16
- package/dist/ui/router.cjs.map +1 -1
- package/dist/ui/router.mjs +4 -15
- package/dist/ui/router.mjs.map +1 -1
- package/dist/ui/runtime.cjs +5 -1
- package/dist/ui/runtime.cjs.map +1 -1
- package/dist/ui/runtime.d.cts +2 -1
- package/dist/ui/runtime.d.mts +2 -1
- package/dist/ui/runtime.mjs +5 -1
- package/dist/ui/runtime.mjs.map +1 -1
- package/dist/ui/slot.cjs +34 -0
- package/dist/ui/slot.cjs.map +1 -0
- package/dist/ui/slot.d.cts +43 -0
- package/dist/ui/slot.d.mts +43 -0
- package/dist/ui/slot.mjs +34 -0
- package/dist/ui/slot.mjs.map +1 -0
- package/dist/ui/tenant.cjs +300 -0
- package/dist/ui/tenant.cjs.map +1 -0
- package/dist/ui/tenant.d.cts +122 -0
- package/dist/ui/tenant.d.mts +122 -0
- package/dist/ui/tenant.mjs +279 -0
- package/dist/ui/tenant.mjs.map +1 -0
- package/dist/ui/types.d.cts +32 -2
- package/dist/ui/types.d.mts +32 -2
- package/dist/ui/version-check.cjs +47 -0
- package/dist/ui/version-check.cjs.map +1 -0
- package/dist/ui/version-check.d.cts +23 -0
- package/dist/ui/version-check.d.mts +23 -0
- package/dist/ui/version-check.mjs +46 -0
- package/dist/ui/version-check.mjs.map +1 -0
- package/dist/utils/banner.cjs +2 -2
- package/dist/utils/banner.cjs.map +1 -1
- package/dist/utils/banner.mjs +2 -2
- package/dist/utils/banner.mjs.map +1 -1
- package/dist/utils/linkify.cjs +1 -1
- package/dist/utils/linkify.cjs.map +1 -1
- package/dist/utils/linkify.mjs +1 -0
- package/dist/utils/linkify.mjs.map +1 -1
- package/dist/utils/run.cjs +6 -6
- package/dist/utils/run.cjs.map +1 -1
- package/dist/utils/run.mjs +6 -6
- package/dist/utils/run.mjs.map +1 -1
- package/dist/utils/save-config.cjs +12 -0
- package/dist/utils/save-config.cjs.map +1 -1
- package/dist/utils/save-config.mjs +12 -0
- package/dist/utils/save-config.mjs.map +1 -1
- package/dist/utils/snapshot-hash.cjs +10 -0
- package/dist/utils/snapshot-hash.cjs.map +1 -0
- package/dist/utils/snapshot-hash.mjs +10 -0
- package/dist/utils/snapshot-hash.mjs.map +1 -0
- package/dist/utils/string.cjs +0 -1
- package/dist/utils/string.cjs.map +1 -1
- package/dist/utils/theme.cjs +30 -12
- package/dist/utils/theme.cjs.map +1 -1
- package/dist/utils/theme.mjs +30 -11
- package/dist/utils/theme.mjs.map +1 -1
- package/dist/version-manifest-deploy.cjs +50 -0
- package/dist/version-manifest-deploy.cjs.map +1 -0
- package/dist/version-manifest-deploy.mjs +49 -0
- package/dist/version-manifest-deploy.mjs.map +1 -0
- package/dist/version-manifest-resolve.cjs +42 -0
- package/dist/version-manifest-resolve.cjs.map +1 -0
- package/dist/version-manifest-resolve.d.cts +38 -0
- package/dist/version-manifest-resolve.d.mts +38 -0
- package/dist/version-manifest-resolve.mjs +40 -0
- package/dist/version-manifest-resolve.mjs.map +1 -0
- package/dist/version-status.cjs +18 -0
- package/dist/version-status.cjs.map +1 -0
- package/dist/version-status.d.cts +22 -0
- package/dist/version-status.d.mts +22 -0
- package/dist/version-status.mjs +17 -0
- package/dist/version-status.mjs.map +1 -0
- package/dist/workspace-catalog.cjs +53 -0
- package/dist/workspace-catalog.cjs.map +1 -0
- package/dist/workspace-catalog.mjs +51 -0
- package/dist/workspace-catalog.mjs.map +1 -0
- package/dist/workspace.cjs +237 -0
- package/dist/workspace.cjs.map +1 -0
- package/dist/workspace.mjs +233 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +179 -27
- package/skills/add-a-route/SKILL.md +132 -0
- package/skills/api-and-auth/SKILL.md +87 -21
- package/skills/api-and-auth/references/middleware.md +1 -1
- package/skills/cli-reference/SKILL.md +48 -21
- package/skills/code-style/SKILL.md +8 -0
- package/skills/dev-workflow/SKILL.md +50 -26
- package/skills/extends-config/SKILL.md +31 -19
- package/skills/init-upgrade/SKILL.md +29 -16
- package/skills/plugin-development/SKILL.md +46 -112
- package/skills/plugin-development/references/database.md +82 -0
- package/skills/plugin-development/references/request-context.md +67 -0
- package/skills/publish-sync/SKILL.md +99 -22
- package/skills/registry/SKILL.md +82 -0
- package/skills/super-app/SKILL.md +25 -15
- package/skills/talk-to-the-app/SKILL.md +138 -0
- package/skills/ui-integration/SKILL.md +93 -11
- package/dist/cli/db-studio.cjs +0 -131
- package/dist/cli/db-studio.cjs.map +0 -1
- package/dist/cli/db-studio.mjs +0 -127
- package/dist/cli/db-studio.mjs.map +0 -1
- package/dist/cli/init.d.cts.map +0 -1
- package/dist/cli/init.d.mts.map +0 -1
- package/dist/components/dev-view.cjs +0 -309
- package/dist/components/dev-view.cjs.map +0 -1
- package/dist/components/dev-view.mjs +0 -309
- package/dist/components/dev-view.mjs.map +0 -1
- package/dist/components/streaming-view.cjs +0 -134
- package/dist/components/streaming-view.cjs.map +0 -1
- package/dist/components/streaming-view.mjs +0 -132
- package/dist/components/streaming-view.mjs.map +0 -1
- package/dist/config.d.cts.map +0 -1
- package/dist/config.d.mts.map +0 -1
- package/dist/contract.d.cts.map +0 -1
- package/dist/contract.d.mts.map +0 -1
- package/dist/contract.meta.d.cts.map +0 -1
- package/dist/contract.meta.d.mts.map +0 -1
- package/dist/dag.d.cts.map +0 -1
- package/dist/dag.d.mts.map +0 -1
- package/dist/db.cjs +0 -81
- package/dist/db.cjs.map +0 -1
- package/dist/db.d.cts +0 -30
- package/dist/db.d.cts.map +0 -1
- package/dist/db.d.mts +0 -30
- package/dist/db.d.mts.map +0 -1
- package/dist/db.mjs +0 -75
- package/dist/db.mjs.map +0 -1
- package/dist/fastkv.d.cts.map +0 -1
- package/dist/fastkv.d.mts.map +0 -1
- package/dist/integrity.d.cts.map +0 -1
- package/dist/integrity.d.mts.map +0 -1
- package/dist/merge.d.cts.map +0 -1
- package/dist/merge.d.mts.map +0 -1
- package/dist/mf.d.cts.map +0 -1
- package/dist/mf.d.mts.map +0 -1
- package/dist/plugin.d.cts.map +0 -1
- package/dist/plugin.d.mts.map +0 -1
- package/dist/service-descriptor.d.cts.map +0 -1
- package/dist/service-descriptor.d.mts.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts.map +0 -1
- package/dist/ui/head.d.cts.map +0 -1
- package/dist/ui/head.d.mts.map +0 -1
- package/dist/ui/metadata.d.cts.map +0 -1
- package/dist/ui/metadata.d.mts.map +0 -1
- package/dist/ui/router.d.cts.map +0 -1
- package/dist/ui/router.d.mts.map +0 -1
- package/dist/ui/runtime.d.cts.map +0 -1
- package/dist/ui/runtime.d.mts.map +0 -1
- package/dist/ui/types.d.cts.map +0 -1
- package/dist/ui/types.d.mts.map +0 -1
package/dist/types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import * as z from \"zod\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport interface JsonObject {\n [key: string]: JsonValue;\n}\nexport type JsonValue = JsonPrimitive | JsonObject | JsonValue[];\n\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(JsonValueSchema),\n z.record(z.string(), JsonValueSchema),\n ]),\n);\nexport const JsonObjectSchema = z.record(z.string(), JsonValueSchema);\n\nexport const ExtendsSchema = z.union([\n z.string(),\n z.object({\n development: z.string().optional(),\n production: z.string().optional(),\n staging: z.string().optional(),\n }),\n]);\nexport type Extends = z.infer<typeof ExtendsSchema>;\nexport type ExtendsConfig = Extract<Extends, Record<string, string | undefined>>;\n\nexport const SourceModeSchema = z.enum([\"local\", \"remote\"]);\nexport type SourceMode = z.infer<typeof SourceModeSchema>;\n\nexport const SharedConfigSchema = z.object({\n version: z.string(),\n requiredVersion: z.string().optional(),\n singleton: z.boolean().optional(),\n eager: z.boolean().optional(),\n strictVersion: z.boolean().optional(),\n shareScope: z.string().optional(),\n});\nexport type SharedConfig = z.infer<typeof SharedConfigSchema>;\nexport type SharedDepConfig = SharedConfig;\nexport const SharedDepConfigSchema = SharedConfigSchema;\nexport const SharedDepMapSchema = z.record(z.string(), SharedConfigSchema);\n\nexport const FederationEntrySchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n});\nexport type FederationEntry = z.infer<typeof FederationEntrySchema>;\n\nexport const ComposableAppEntrySchema = z.object({\n extends: ExtendsSchema.optional(),\n name: z.string().optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n shared: SharedDepMapSchema.optional(),\n connectSrc: z.array(z.string()).optional(),\n});\nexport type ComposableAppEntry = z.infer<typeof ComposableAppEntrySchema>;\n\nexport const ApiPluginConfigSchema = ComposableAppEntrySchema.extend({\n dependsOn: z.array(z.string()).optional(),\n});\nexport type ApiPluginConfig = z.infer<typeof ApiPluginConfigSchema>;\n\nexport const PluginUiConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n});\nexport type PluginUiConfig = z.infer<typeof PluginUiConfigSchema>;\n\nexport const BosPluginRefSchema = ComposableAppEntrySchema.extend({\n version: z.string().optional(),\n app: z.record(z.string(), z.unknown()).optional(),\n plugins: z.record(z.string(), z.unknown()).optional(),\n dependsOn: z.array(z.string()).optional(),\n});\nexport type BosPluginRef = z.infer<typeof BosPluginRefSchema>;\nexport type PluginEntryValue = string | BosPluginRef;\nexport type PluginEntries = Record<string, PluginEntryValue>;\n\nconst PluginRuntimeUiSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n localPath: z.string().optional(),\n port: z.number().optional(),\n integrity: z.string().optional(),\n});\nexport type PluginRuntimeUi = z.infer<typeof PluginRuntimeUiSchema>;\n\nexport const RuntimePluginConfigSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n extendsRef: z.string().optional(),\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n integrity: z.string().optional(),\n shared: SharedDepMapSchema.optional(),\n connectSrc: z.array(z.string()).optional(),\n ui: PluginRuntimeUiSchema.optional(),\n routes: z.array(z.string()).optional(),\n dependsOn: z.array(z.string()).optional(),\n});\nexport type RuntimePluginConfig = z.infer<typeof RuntimePluginConfigSchema>;\n\nexport const DependencyNodeKindSchema = z.enum([\"api\", \"auth\", \"ui\", \"plugin\"]);\nexport type DependencyNodeKind = z.infer<typeof DependencyNodeKindSchema>;\n\nexport const RuntimeDependencyNodeSchema = z.object({\n key: z.string(),\n kind: DependencyNodeKindSchema,\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n dependsOn: z.array(z.string()).optional(),\n extendsRef: z.string().optional(),\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n integrity: z.string().optional(),\n shared: SharedDepMapSchema.optional(),\n connectSrc: z.array(z.string()).optional(),\n ui: PluginRuntimeUiSchema.optional(),\n routes: z.array(z.string()).optional(),\n sourceOrigin: z.enum([\"config\", \"manifest\"]).optional(),\n singletonKey: z.string().optional(),\n});\nexport type RuntimeDependencyNode = z.infer<typeof RuntimeDependencyNodeSchema>;\n\nexport const UiConfigSchema = z\n .object({\n name: z.string().optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n ssr: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n })\n .strict();\nexport type UiConfig = z.infer<typeof UiConfigSchema>;\n\nexport const HostConfigSchema = z.object({\n development: z.string(),\n production: z.string(),\n integrity: z.string().optional(),\n secrets: z.array(z.string()).optional(),\n});\nexport type HostConfig = z.infer<typeof HostConfigSchema>;\n\nexport const ClientRuntimeInfoSchema = z.object({\n accountId: z.string(),\n gatewayId: z.string(),\n runtimeBasePath: z.string(),\n title: z.string().nullable(),\n description: z.string().nullable(),\n hostUrl: z.string().nullable(),\n});\nexport type ClientRuntimeInfo = z.infer<typeof ClientRuntimeInfoSchema>;\n\nexport const RuntimeLineageSchema = z.object({\n parent: z.string().nullable(),\n root: z.string().nullable(),\n depth: z.number().int().nonnegative(),\n extendsChain: z.array(z.string()),\n});\nexport type RuntimeLineage = z.infer<typeof RuntimeLineageSchema>;\n\nexport const BosStagingSchema = z.object({\n domain: z.string(),\n});\nexport type BosStaging = z.infer<typeof BosStagingSchema>;\n\nconst BosConfigInputAppEntrySchema = z.record(z.string(), z.unknown());\nexport type BosConfigInputAppEntry = z.infer<typeof BosConfigInputAppEntrySchema>;\n\nexport const BosConfigInputSchema: z.ZodType<BosConfigInput> = z.lazy(() =>\n z.object({\n extends: ExtendsSchema.optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n status: z.enum([\"active\", \"suspended\", \"pending_deletion\"]).optional(),\n testnet: z.string().optional(),\n template: z.string().optional(),\n gateway: z\n .object({\n development: z.string().optional(),\n production: z.string().optional(),\n account: z.string().optional(),\n })\n .optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n app: z.record(z.string(), BosConfigInputAppEntrySchema).optional(),\n plugins: z.record(z.string(), z.union([z.string(), BosConfigInputSchema])).optional(),\n ci: CiConfigSchema.optional(),\n }),\n);\n\nexport interface BosConfigInput {\n extends?: string | ExtendsConfig;\n account?: string;\n domain?: string;\n status?: \"active\" | \"suspended\" | \"pending_deletion\";\n title?: string;\n description?: string;\n testnet?: string;\n template?: string;\n gateway?: {\n development?: string;\n production?: string;\n account?: string;\n };\n development?: string;\n production?: string;\n integrity?: string;\n name?: string;\n version?: string;\n proxy?: string;\n variables?: JsonObject;\n secrets?: string[];\n routes?: string[];\n app?: Record<string, BosConfigInputAppEntry>;\n plugins?: Record<string, string | BosConfigInput>;\n ci?: CiConfig;\n}\n\nexport const RailwayCiSchema = z.object({\n service: z.string(),\n});\nexport type RailwayCi = z.infer<typeof RailwayCiSchema>;\n\nexport const CiConfigSchema = z.object({\n railway: RailwayCiSchema.optional(),\n});\nexport type CiConfig = z.infer<typeof CiConfigSchema>;\n\nexport const BosConfigSchema = z.object({\n account: z.string(),\n extends: ExtendsSchema.optional(),\n domain: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n testnet: z.string().optional(),\n staging: BosStagingSchema.optional(),\n repository: z.string().optional(),\n ci: CiConfigSchema.optional(),\n plugins: z.record(z.string(), z.union([z.string(), BosPluginRefSchema])).optional(),\n app: z.object({\n host: HostConfigSchema,\n ui: UiConfigSchema,\n api: ApiPluginConfigSchema,\n auth: ComposableAppEntrySchema.optional(),\n }),\n});\nexport type BosConfig = z.infer<typeof BosConfigSchema>;\n\nexport const RuntimeConfigSchema = z.object({\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n domain: z.string().optional(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n title: z.string().optional(),\n description: z.string().optional(),\n repository: z.string().optional(),\n host: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n secrets: z.array(z.string()).optional(),\n remoteUrl: z.string().optional(),\n }),\n ui: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n ssrUrl: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n dependsOn: z.array(z.string()).optional(),\n }),\n api: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n shared: SharedDepMapSchema.optional(),\n dependsOn: z.array(z.string()).optional(),\n }),\n auth: FederationEntrySchema.extend({\n extendsRef: z.string().optional(),\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n shared: SharedDepMapSchema.optional(),\n dependsOn: z.array(z.string()).optional(),\n }).optional(),\n plugins: z.record(z.string(), RuntimePluginConfigSchema).optional(),\n nodes: z.record(z.string(), RuntimeDependencyNodeSchema).optional(),\n});\nexport type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;\n\nexport const ClientRuntimeConfigSchema = z.object({\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n hostUrl: z.string().optional(),\n assetsUrl: z.string(),\n apiBase: z.string(),\n rpcBase: z.string(),\n repository: z.string().optional(),\n authAvailable: z.boolean().optional(),\n runtime: ClientRuntimeInfoSchema.optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n })\n .optional(),\n api: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n })\n .optional(),\n auth: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n })\n .optional(),\n plugins: z\n .record(\n z.string(),\n z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n});\nexport type ClientRuntimeConfig = z.infer<typeof ClientRuntimeConfigSchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.mjs","names":["z"],"sources":["../src/types.ts"],"sourcesContent":["import { ComposePayloadSchema } from \"every-plugin/ui/manifest\";\nimport * as z from \"zod\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport interface JsonObject {\n [key: string]: JsonValue;\n}\nexport type JsonValue = JsonPrimitive | JsonObject | JsonValue[];\n\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(JsonValueSchema),\n z.record(z.string(), JsonValueSchema),\n ]),\n);\nexport const JsonObjectSchema = z.record(z.string(), JsonValueSchema);\n\nexport const ExtendsSchema = z.union([\n z.string(),\n z.object({\n development: z.string().optional(),\n production: z.string().optional(),\n staging: z.string().optional(),\n }),\n]);\nexport type Extends = z.infer<typeof ExtendsSchema>;\nexport type ExtendsConfig = Extract<Extends, Record<string, string | undefined>>;\n\nexport const SourceModeSchema = z.enum([\"local\", \"remote\"]);\nexport type SourceMode = z.infer<typeof SourceModeSchema>;\n\nexport const SharedConfigSchema = z.object({\n version: z.string(),\n requiredVersion: z.string().optional(),\n singleton: z.boolean().optional(),\n eager: z.boolean().optional(),\n strictVersion: z.boolean().optional(),\n shareScope: z.string().optional(),\n});\nexport type SharedConfig = z.infer<typeof SharedConfigSchema>;\nexport type SharedDepConfig = SharedConfig;\nexport const SharedDepConfigSchema = SharedConfigSchema;\nexport const SharedDepMapSchema = z.record(z.string(), SharedConfigSchema);\n\nexport const FederationEntrySchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n /** the content-hashed container entry URL (derived from the version\n * manifest when the slot pins one) — consumers load this instead of\n * appending the legacy fixed name */\n entryUrl: z.string().optional(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n});\nexport type FederationEntry = z.infer<typeof FederationEntrySchema>;\n\n/**\n * Slot pin (atomic-deploys): an explicit pointer to the slot's immutable\n * per-deploy WorkspaceVersionManifest — `manifest` is the versioned manifest\n * filename relative to the slot's production base, `integrity` is that\n * document's SRI. Resolving the pin derives the slot's entry-level fields\n * (`entryUrl`, entry integrity, ssr entry). A slot without a `pin` uses its\n * top-level `integrity` as a direct entry SRI (fixed-name slots only).\n */\nexport const SlotPinSchema = z.object({\n manifest: z.string().min(1),\n integrity: z.string().min(1),\n});\nexport type SlotPin = z.infer<typeof SlotPinSchema>;\n\nexport const PluginUiConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n /** browser-facing base overriding `production` when server-side loading\n * must stay container-local (image-native runtimes, ADR 0011) — may be\n * same-origin relative (/bundles/<account>/<gateway>/<slot>) */\n publicUrl: z.string().optional(),\n integrity: z.string().optional(),\n ssr: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n pin: SlotPinSchema.optional(),\n});\nexport type PluginUiConfig = z.infer<typeof PluginUiConfigSchema>;\n\nexport const ComposableAppEntrySchema = z.object({\n extends: ExtendsSchema.optional(),\n name: z.string().optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n shared: SharedDepMapSchema.optional(),\n connectSrc: z.array(z.string()).optional(),\n ui: PluginUiConfigSchema.optional(),\n pin: SlotPinSchema.optional(),\n});\nexport type ComposableAppEntry = z.infer<typeof ComposableAppEntrySchema>;\n\nexport const ApiPluginConfigSchema = ComposableAppEntrySchema.extend({\n dependsOn: z.array(z.string()).optional(),\n});\nexport type ApiPluginConfig = z.infer<typeof ApiPluginConfigSchema>;\n\nexport const BosPluginRefSchema = ComposableAppEntrySchema.extend({\n version: z.string().optional(),\n app: z.record(z.string(), z.unknown()).optional(),\n plugins: z.record(z.string(), z.unknown()).optional(),\n dependsOn: z.array(z.string()).optional(),\n});\nexport type BosPluginRef = z.infer<typeof BosPluginRefSchema>;\nexport type PluginEntryValue = string | BosPluginRef;\nexport type PluginEntries = Record<string, PluginEntryValue>;\n\nconst PluginRuntimeUiSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n /** browser-facing base; when set the client config serves this instead of\n * `url` (server-side loading keeps `url`) */\n publicUrl: z.string().optional(),\n localPath: z.string().optional(),\n port: z.number().optional(),\n integrity: z.string().optional(),\n ssrUrl: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n entryUrl: z.string().optional(),\n ssrEntryUrl: z.string().optional(),\n /** pin-derived hashed browser manifest (mf-manifest) — absent for local\n * slots; registration reads this instead of the overloaded `entry` */\n browserManifestUrl: z.string().optional(),\n dependsOn: z.array(z.string()).optional(),\n});\nexport type PluginRuntimeUi = z.infer<typeof PluginRuntimeUiSchema>;\n\nexport const RuntimePluginConfigSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n extendsRef: z.string().optional(),\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n integrity: z.string().optional(),\n entryUrl: z.string().optional(),\n shared: SharedDepMapSchema.optional(),\n connectSrc: z.array(z.string()).optional(),\n ui: PluginRuntimeUiSchema.optional(),\n routes: z.array(z.string()).optional(),\n dependsOn: z.array(z.string()).optional(),\n});\nexport type RuntimePluginConfig = z.infer<typeof RuntimePluginConfigSchema>;\n\nexport const DependencyNodeKindSchema = z.enum([\"api\", \"auth\", \"ui\", \"plugin\"]);\nexport type DependencyNodeKind = z.infer<typeof DependencyNodeKindSchema>;\n\nexport const RuntimeDependencyNodeSchema = z.object({\n key: z.string(),\n kind: DependencyNodeKindSchema,\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n dependsOn: z.array(z.string()).optional(),\n extendsRef: z.string().optional(),\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n integrity: z.string().optional(),\n shared: SharedDepMapSchema.optional(),\n connectSrc: z.array(z.string()).optional(),\n ui: PluginRuntimeUiSchema.optional(),\n routes: z.array(z.string()).optional(),\n sourceOrigin: z.enum([\"config\", \"manifest\"]).optional(),\n singletonKey: z.string().optional(),\n});\nexport type RuntimeDependencyNode = z.infer<typeof RuntimeDependencyNodeSchema>;\n\nexport const UiConfigSchema = z\n .object({\n name: z.string().optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n /** browser-facing base overriding `production` (see PluginUiConfigSchema) */\n publicUrl: z.string().optional(),\n /** direct entry SRI — only for slots without a `pin` */\n integrity: z.string().optional(),\n ssr: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n pin: SlotPinSchema.optional(),\n })\n .strict();\nexport type UiConfig = z.infer<typeof UiConfigSchema>;\n\nexport const HostConfigSchema = z.object({\n development: z.string(),\n /** Deploy state (ADR 0005) — absent until the first publish writes it. */\n production: z.string().optional(),\n /** direct entry SRI — only for slots without a `pin` */\n integrity: z.string().optional(),\n secrets: z.array(z.string()).optional(),\n pin: SlotPinSchema.optional(),\n});\nexport type HostConfig = z.infer<typeof HostConfigSchema>;\n\nexport const ClientRuntimeInfoSchema = z.object({\n accountId: z.string(),\n gatewayId: z.string(),\n runtimeBasePath: z.string(),\n title: z.string().nullable(),\n description: z.string().nullable(),\n hostUrl: z.string().nullable(),\n});\nexport type ClientRuntimeInfo = z.infer<typeof ClientRuntimeInfoSchema>;\n\nexport const RuntimeLineageSchema = z.object({\n parent: z.string().nullable(),\n root: z.string().nullable(),\n depth: z.number().int().nonnegative(),\n extendsChain: z.array(z.string()),\n});\nexport type RuntimeLineage = z.infer<typeof RuntimeLineageSchema>;\n\nexport const BosStagingSchema = z.object({\n domain: z.string(),\n account: z.string().optional(),\n});\nexport type BosStaging = z.infer<typeof BosStagingSchema>;\n\nconst BosConfigInputAppEntrySchema = z.record(z.string(), z.unknown());\nexport type BosConfigInputAppEntry = z.infer<typeof BosConfigInputAppEntrySchema>;\n\nexport const BosConfigInputSchema: z.ZodType<BosConfigInput> = z.lazy(() =>\n z.object({\n extends: ExtendsSchema.optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n status: z.enum([\"active\", \"suspended\", \"pending_deletion\"]).optional(),\n testnet: z.string().optional(),\n staging: BosStagingSchema.optional(),\n template: z.string().optional(),\n gateway: z\n .object({\n development: z.string().optional(),\n production: z.string().optional(),\n account: z.string().optional(),\n })\n .optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n app: z.record(z.string(), BosConfigInputAppEntrySchema).optional(),\n plugins: z.record(z.string(), z.union([z.string(), BosConfigInputSchema])).optional(),\n publish: z\n .object({\n auth: z.enum([\"session\", \"key\", \"custody\"]).optional(),\n })\n .optional(),\n ci: CiConfigSchema.optional(),\n cdn: CdnConfigSchema.optional(),\n }),\n);\n\nexport type StarterLevel = \"simple\" | \"advanced\";\n\nexport const StarterLevelSchema = z.enum([\"simple\", \"advanced\"]);\n\nexport interface StarterLevelConfig {\n include?: string[];\n exclude?: string[];\n}\n\nexport const StarterLevelConfigSchema = z.object({\n include: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n});\n\n/** Authoring metadata a parent publishes so `bos init` can prune its starter. */\nexport interface ParentStarterConfig {\n levels?: Record<string, StarterLevelConfig>;\n exclude?: string[];\n}\n\nexport const ParentStarterConfigSchema = z.object({\n levels: z.record(z.string(), StarterLevelConfigSchema).optional(),\n exclude: z.array(z.string()).optional(),\n});\n\nexport interface BosConfigInput {\n extends?: string | ExtendsConfig;\n account?: string;\n domain?: string;\n status?: \"active\" | \"suspended\" | \"pending_deletion\";\n title?: string;\n description?: string;\n testnet?: string;\n template?: string;\n gateway?: {\n development?: string;\n production?: string;\n account?: string;\n };\n staging?: BosStaging;\n development?: string;\n production?: string;\n integrity?: string;\n name?: string;\n version?: string;\n proxy?: string;\n variables?: JsonObject;\n secrets?: string[];\n routes?: string[];\n app?: Record<string, BosConfigInputAppEntry>;\n plugins?: Record<string, string | BosConfigInput>;\n publish?: PublishConfig;\n ci?: CiConfig;\n cdn?: CdnConfig;\n rolledBackFrom?: string;\n starter?: ParentStarterConfig;\n}\n\nexport const RailwayCiSchema = z.object({\n service: z.string(),\n});\nexport type RailwayCi = z.infer<typeof RailwayCiSchema>;\n\nexport const CiConfigSchema = z.object({\n image: z.string().optional(),\n railway: RailwayCiSchema.optional(),\n});\nexport type CiConfig = z.infer<typeof CiConfigSchema>;\n\n/** Where this runtime's built bundles are served from. Inherited via extends. */\nexport const CdnConfigSchema = z.object({\n origin: z.string().optional(),\n});\nexport type CdnConfig = z.infer<typeof CdnConfigSchema>;\n\nexport const PublishAuthSchema = z.enum([\"session\", \"key\", \"custody\"]);\nexport type PublishAuth = z.infer<typeof PublishAuthSchema>;\n\nexport const PublishConfigSchema = z.object({\n auth: PublishAuthSchema.optional(),\n});\nexport type PublishConfig = z.infer<typeof PublishConfigSchema>;\n\nconst PluginKeySchema = z\n .string()\n .regex(\n /^[a-zA-Z0-9._-]+$/,\n \"plugin key must match [a-zA-Z0-9._-] — keys from remote/extended configs are interpolated into shells and generated code\",\n );\n\nexport const BosConfigSchema = z.object({\n account: z.string(),\n extends: ExtendsSchema.optional(),\n domain: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n testnet: z.string().optional(),\n staging: BosStagingSchema.optional(),\n repository: z.string().optional(),\n publish: PublishConfigSchema.optional(),\n ci: CiConfigSchema.optional(),\n cdn: CdnConfigSchema.optional(),\n rolledBackFrom: z.string().optional(),\n starter: ParentStarterConfigSchema.optional(),\n plugins: z.record(PluginKeySchema, z.union([z.string(), BosPluginRefSchema])).optional(),\n app: z.object({\n host: HostConfigSchema,\n ui: UiConfigSchema,\n api: ApiPluginConfigSchema,\n auth: ComposableAppEntrySchema.optional(),\n }),\n});\nexport type BosConfig = z.infer<typeof BosConfigSchema>;\n\nexport const RuntimeConfigSchema = z.object({\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n domain: z.string().optional(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n /** the deploy fingerprint of the snapshot this config came from\n * (atomic-deploys 10) — rides the client config for the soft-refresh signal */\n deploymentFingerprint: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n repository: z.string().optional(),\n host: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n secrets: z.array(z.string()).optional(),\n remoteUrl: z.string().optional(),\n }),\n ui: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n /** browser-facing base; when set the client config serves this instead\n * of `url` (server-side loading keeps `url`) */\n publicUrl: z.string().optional(),\n ssrUrl: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n ssrEntryUrl: z.string().optional(),\n /** pin-derived hashed browser manifest (mf-manifest) */\n browserManifestUrl: z.string().optional(),\n dependsOn: z.array(z.string()).optional(),\n }),\n api: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n shared: SharedDepMapSchema.optional(),\n dependsOn: z.array(z.string()).optional(),\n }),\n auth: FederationEntrySchema.extend({\n extendsRef: z.string().optional(),\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n secrets: z.array(z.string()).optional(),\n shared: SharedDepMapSchema.optional(),\n dependsOn: z.array(z.string()).optional(),\n ui: PluginRuntimeUiSchema.optional(),\n }).optional(),\n plugins: z.record(PluginKeySchema, RuntimePluginConfigSchema).optional(),\n nodes: z.record(z.string(), RuntimeDependencyNodeSchema).optional(),\n});\nexport type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;\n\nexport const ClientRuntimeConfigSchema = z.object({\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n /** the deploy fingerprint this document was rendered from (soft refresh) */\n deploymentFingerprint: z.string().optional(),\n hostUrl: z.string().optional(),\n assetsUrl: z.string(),\n apiBase: z.string(),\n rpcBase: z.templateLiteral([z.literal(\"/\"), z.string()]),\n repository: z.string().optional(),\n authAvailable: z.boolean().optional(),\n runtime: ClientRuntimeInfoSchema.optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n /** the content-hashed container entry URL when the slot pins a version manifest */\n entryUrl: z.string().optional(),\n /** composition payload — the server sets it; the client reconstructs the same tree from it before hydrate */\n compose: ComposePayloadSchema.optional(),\n })\n .optional(),\n api: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n })\n .optional(),\n auth: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n })\n .optional(),\n plugins: z\n .record(\n z.string(),\n z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n variables: JsonObjectSchema.optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n ssrUrl: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n entryUrl: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n});\nexport type ClientRuntimeConfig = z.infer<typeof ClientRuntimeConfigSchema>;\n"],"mappings":";;;;AASA,MAAa,kBAAwCA,IAAE,WACrDA,IAAE,MAAM;CACNA,IAAE,OAAO;CACTA,IAAE,OAAO;CACTA,IAAE,QAAQ;CACVA,IAAE,KAAK;CACPA,IAAE,MAAM,eAAe;CACvBA,IAAE,OAAOA,IAAE,OAAO,GAAG,eAAe;AACtC,CAAC,CACH;AACA,MAAa,mBAAmBA,IAAE,OAAOA,IAAE,OAAO,GAAG,eAAe;AAEpE,MAAa,gBAAgBA,IAAE,MAAM,CACnCA,IAAE,OAAO,GACTA,IAAE,OAAO;CACP,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;AAC/B,CAAC,CACH,CAAC;AAID,MAAa,mBAAmBA,IAAE,KAAK,CAAC,SAAS,QAAQ,CAAC;AAG1D,MAAa,qBAAqBA,IAAE,OAAO;CACzC,SAASA,IAAE,OAAO;CAClB,iBAAiBA,IAAE,OAAO,CAAC,CAAC,SAAS;CACrC,WAAWA,IAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,OAAOA,IAAE,QAAQ,CAAC,CAAC,SAAS;CAC5B,eAAeA,IAAE,QAAQ,CAAC,CAAC,SAAS;CACpC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;AAClC,CAAC;AAGD,MAAa,wBAAwB;AACrC,MAAa,qBAAqBA,IAAE,OAAOA,IAAE,OAAO,GAAG,kBAAkB;AAEzE,MAAa,wBAAwBA,IAAE,OAAO;CAC5C,MAAMA,IAAE,OAAO;CACf,KAAKA,IAAE,OAAO;CACd,OAAOA,IAAE,OAAO;;;;CAIhB,UAAUA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,QAAQ;CACR,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;AACjC,CAAC;;;;;;;;;AAWD,MAAa,gBAAgBA,IAAE,OAAO;CACpC,UAAUA,IAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,WAAWA,IAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AAC7B,CAAC;AAGD,MAAa,uBAAuBA,IAAE,OAAO;CAC3C,MAAMA,IAAE,OAAO;CACf,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;;;;CAIhC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,KAAKA,IAAE,OAAO,CAAC,CAAC,SAAS;CACzB,cAAcA,IAAE,OAAO,CAAC,CAAC,SAAS;CAClC,KAAK,cAAc,SAAS;AAC9B,CAAC;AAGD,MAAa,2BAA2BA,IAAE,OAAO;CAC/C,SAAS,cAAc,SAAS;CAChC,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,WAAW,iBAAiB,SAAS;CACrC,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACtC,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACrC,QAAQ,mBAAmB,SAAS;CACpC,YAAYA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACzC,IAAI,qBAAqB,SAAS;CAClC,KAAK,cAAc,SAAS;AAC9B,CAAC;AAGD,MAAa,wBAAwB,yBAAyB,OAAO,EACnE,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS,EAC1C,CAAC;AAGD,MAAa,qBAAqB,yBAAyB,OAAO;CAChE,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,KAAKA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;CAChD,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;CACpD,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AAC1C,CAAC;AAKD,MAAM,wBAAwBA,IAAE,OAAO;CACrC,MAAMA,IAAE,OAAO;CACf,KAAKA,IAAE,OAAO;CACd,OAAOA,IAAE,OAAO;CAChB,QAAQ;;;CAGR,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC5B,cAAcA,IAAE,OAAO,CAAC,CAAC,SAAS;CAClC,UAAUA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;;;CAGjC,oBAAoBA,IAAE,OAAO,CAAC,CAAC,SAAS;CACxC,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AAC1C,CAAC;AAGD,MAAa,4BAA4BA,IAAE,OAAO;CAChD,MAAMA,IAAE,OAAO;CACf,KAAKA,IAAE,OAAO;CACd,OAAOA,IAAE,OAAO;CAChB,QAAQ;CACR,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,WAAW,iBAAiB,SAAS;CACrC,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACtC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,UAAUA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,QAAQ,mBAAmB,SAAS;CACpC,YAAYA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACzC,IAAI,sBAAsB,SAAS;CACnC,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACrC,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AAC1C,CAAC;AAGD,MAAa,2BAA2BA,IAAE,KAAK;CAAC;CAAO;CAAQ;CAAM;AAAQ,CAAC;AAG9E,MAAa,8BAA8BA,IAAE,OAAO;CAClD,KAAKA,IAAE,OAAO;CACd,MAAM;CACN,MAAMA,IAAE,OAAO;CACf,KAAKA,IAAE,OAAO;CACd,OAAOA,IAAE,OAAO;CAChB,QAAQ;CACR,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACxC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,WAAW,iBAAiB,SAAS;CACrC,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACtC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,QAAQ,mBAAmB,SAAS;CACpC,YAAYA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACzC,IAAI,sBAAsB,SAAS;CACnC,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACrC,cAAcA,IAAE,KAAK,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,SAAS;CACtD,cAAcA,IAAE,OAAO,CAAC,CAAC,SAAS;AACpC,CAAC;AAGD,MAAa,iBAAiBA,IAC3B,OAAO;CACN,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;;CAEhC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;;CAE/B,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,KAAKA,IAAE,OAAO,CAAC,CAAC,SAAS;CACzB,cAAcA,IAAE,OAAO,CAAC,CAAC,SAAS;CAClC,KAAK,cAAc,SAAS;AAC9B,CAAC,CAAC,CACD,OAAO;AAGV,MAAa,mBAAmBA,IAAE,OAAO;CACvC,aAAaA,IAAE,OAAO;;CAEtB,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;;CAEhC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACtC,KAAK,cAAc,SAAS;AAC9B,CAAC;AAGD,MAAa,0BAA0BA,IAAE,OAAO;CAC9C,WAAWA,IAAE,OAAO;CACpB,WAAWA,IAAE,OAAO;CACpB,iBAAiBA,IAAE,OAAO;CAC1B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;AAC/B,CAAC;AAGD,MAAa,uBAAuBA,IAAE,OAAO;CAC3C,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC5B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,OAAOA,IAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY;CACpC,cAAcA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAClC,CAAC;AAGD,MAAa,mBAAmBA,IAAE,OAAO;CACvC,QAAQA,IAAE,OAAO;CACjB,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;AAC/B,CAAC;AAGD,MAAM,+BAA+BA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC;AAGrE,MAAa,uBAAkDA,IAAE,WAC/DA,IAAE,OAAO;CACP,SAAS,cAAc,SAAS;CAChC,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC5B,QAAQA,IAAE,KAAK;EAAC;EAAU;EAAa;CAAkB,CAAC,CAAC,CAAC,SAAS;CACrE,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,SAAS,iBAAiB,SAAS;CACnC,UAAUA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,SAASA,IACN,OAAO;EACN,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;EACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;EAChC,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,CAAC,CAAC,CACD,SAAS;CACZ,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,WAAW,iBAAiB,SAAS;CACrC,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACtC,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACrC,KAAKA,IAAE,OAAOA,IAAE,OAAO,GAAG,4BAA4B,CAAC,CAAC,SAAS;CACjE,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS;CACpF,SAASA,IACN,OAAO,EACN,MAAMA,IAAE,KAAK;EAAC;EAAW;EAAO;CAAS,CAAC,CAAC,CAAC,SAAS,EACvD,CAAC,CAAC,CACD,SAAS;CACZ,IAAI,eAAe,SAAS;CAC5B,KAAK,gBAAgB,SAAS;AAChC,CAAC,CACH;AAIA,MAAa,qBAAqBA,IAAE,KAAK,CAAC,UAAU,UAAU,CAAC;AAO/D,MAAa,2BAA2BA,IAAE,OAAO;CAC/C,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CACtC,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACxC,CAAC;AAQD,MAAa,4BAA4BA,IAAE,OAAO;CAChD,QAAQA,IAAE,OAAOA,IAAE,OAAO,GAAG,wBAAwB,CAAC,CAAC,SAAS;CAChE,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACxC,CAAC;AAmCD,MAAa,kBAAkBA,IAAE,OAAO,EACtC,SAASA,IAAE,OAAO,EACpB,CAAC;AAGD,MAAa,iBAAiBA,IAAE,OAAO;CACrC,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,SAAS,gBAAgB,SAAS;AACpC,CAAC;;AAID,MAAa,kBAAkBA,IAAE,OAAO,EACtC,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS,EAC9B,CAAC;AAGD,MAAa,oBAAoBA,IAAE,KAAK;CAAC;CAAW;CAAO;AAAS,CAAC;AAGrE,MAAa,sBAAsBA,IAAE,OAAO,EAC1C,MAAM,kBAAkB,SAAS,EACnC,CAAC;AAGD,MAAM,kBAAkBA,IACrB,OAAO,CAAC,CACR,MACC,qBACA,0HACF;AAEF,MAAa,kBAAkBA,IAAE,OAAO;CACtC,SAASA,IAAE,OAAO;CAClB,SAAS,cAAc,SAAS;CAChC,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC5B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,SAAS,iBAAiB,SAAS;CACnC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,SAAS,oBAAoB,SAAS;CACtC,IAAI,eAAe,SAAS;CAC5B,KAAK,gBAAgB,SAAS;CAC9B,gBAAgBA,IAAE,OAAO,CAAC,CAAC,SAAS;CACpC,SAAS,0BAA0B,SAAS;CAC5C,SAASA,IAAE,OAAO,iBAAiBA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;CACvF,KAAKA,IAAE,OAAO;EACZ,MAAM;EACN,IAAI;EACJ,KAAK;EACL,MAAM,yBAAyB,SAAS;CAC1C,CAAC;AACH,CAAC;AAGD,MAAa,sBAAsBA,IAAE,OAAO;CAC1C,KAAKA,IAAE,KAAK;EAAC;EAAe;EAAc;CAAS,CAAC;CACpD,SAASA,IAAE,OAAO;CAClB,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC5B,WAAWA,IAAE,KAAK,CAAC,WAAW,SAAS,CAAC;;;CAGxC,uBAAuBA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3C,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,MAAM,sBAAsB,OAAO;EACjC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;EACtC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;CACjC,CAAC;CACD,IAAI,sBAAsB,OAAO;EAC/B,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;;;EAG1B,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC5B,cAAcA,IAAE,OAAO,CAAC,CAAC,SAAS;EAClC,aAAaA,IAAE,OAAO,CAAC,CAAC,SAAS;;EAEjC,oBAAoBA,IAAE,OAAO,CAAC,CAAC,SAAS;EACxC,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CAC1C,CAAC;CACD,KAAK,sBAAsB,OAAO;EAChC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC3B,WAAW,iBAAiB,SAAS;EACrC,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;EACtC,QAAQ,mBAAmB,SAAS;EACpC,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CAC1C,CAAC;CACD,MAAM,sBAAsB,OAAO;EACjC,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;EAChC,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,MAAMA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,OAAOA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC3B,WAAW,iBAAiB,SAAS;EACrC,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;EACtC,QAAQ,mBAAmB,SAAS;EACpC,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,SAAS;EACxC,IAAI,sBAAsB,SAAS;CACrC,CAAC,CAAC,CAAC,SAAS;CACZ,SAASA,IAAE,OAAO,iBAAiB,yBAAyB,CAAC,CAAC,SAAS;CACvE,OAAOA,IAAE,OAAOA,IAAE,OAAO,GAAG,2BAA2B,CAAC,CAAC,SAAS;AACpE,CAAC;AAGD,MAAa,4BAA4BA,IAAE,OAAO;CAChD,KAAKA,IAAE,KAAK;EAAC;EAAe;EAAc;CAAS,CAAC;CACpD,SAASA,IAAE,OAAO;CAClB,WAAWA,IAAE,KAAK,CAAC,WAAW,SAAS,CAAC;;CAExC,uBAAuBA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC3C,SAASA,IAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,WAAWA,IAAE,OAAO;CACpB,SAASA,IAAE,OAAO;CAClB,SAASA,IAAE,gBAAgB,CAACA,IAAE,QAAQ,GAAG,GAAGA,IAAE,OAAO,CAAC,CAAC;CACvD,YAAYA,IAAE,OAAO,CAAC,CAAC,SAAS;CAChC,eAAeA,IAAE,QAAQ,CAAC,CAAC,SAAS;CACpC,SAAS,wBAAwB,SAAS;CAC1C,IAAIA,IACD,OAAO;EACN,MAAMA,IAAE,OAAO;EACf,KAAKA,IAAE,OAAO;EACd,OAAOA,IAAE,OAAO;EAChB,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;;EAE/B,UAAUA,IAAE,OAAO,CAAC,CAAC,SAAS;;EAE9B,SAAS,qBAAqB,SAAS;CACzC,CAAC,CAAC,CACD,SAAS;CACZ,KAAKA,IACF,OAAO;EACN,MAAMA,IAAE,OAAO;EACf,KAAKA,IAAE,OAAO;EACd,OAAOA,IAAE,OAAO;EAChB,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,WAAW,iBAAiB,SAAS;CACvC,CAAC,CAAC,CACD,SAAS;CACZ,MAAMA,IACH,OAAO;EACN,MAAMA,IAAE,OAAO;EACf,KAAKA,IAAE,OAAO;EACd,OAAOA,IAAE,OAAO;EAChB,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,WAAW,iBAAiB,SAAS;CACvC,CAAC,CAAC,CACD,SAAS;CACZ,SAASA,IACN,OACCA,IAAE,OAAO,GACTA,IAAE,OAAO;EACP,MAAMA,IAAE,OAAO;EACf,KAAKA,IAAE,OAAO;EACd,OAAOA,IAAE,OAAO;EAChB,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,WAAW,iBAAiB,SAAS;EACrC,IAAIA,IACD,OAAO;GACN,MAAMA,IAAE,OAAO;GACf,KAAKA,IAAE,OAAO;GACd,OAAOA,IAAE,OAAO;GAChB,QAAQ;GACR,WAAWA,IAAE,OAAO,CAAC,CAAC,SAAS;GAC/B,QAAQA,IAAE,OAAO,CAAC,CAAC,SAAS;GAC5B,cAAcA,IAAE,OAAO,CAAC,CAAC,SAAS;GAClC,UAAUA,IAAE,OAAO,CAAC,CAAC,SAAS;EAChC,CAAC,CAAC,CACD,SAAS;CACd,CAAC,CACH,CAAC,CACA,SAAS;AACd,CAAC"}
|
package/dist/ui/api.cjs
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
let _orpc_client = require("@orpc/client");
|
|
3
|
+
let _orpc_client_fetch = require("@orpc/client/fetch");
|
|
4
|
+
let _orpc_tanstack_query = require("@orpc/tanstack-query");
|
|
5
|
+
let _tanstack_react_router = require("@tanstack/react-router");
|
|
6
|
+
|
|
7
|
+
//#region src/ui/api.ts
|
|
8
|
+
function createRpcLink(config, url, headers) {
|
|
9
|
+
return new _orpc_client_fetch.RPCLink({
|
|
10
|
+
origin: config.hostUrl,
|
|
11
|
+
url,
|
|
12
|
+
interceptors: [(0, _orpc_client.onError)((error) => {
|
|
13
|
+
if (typeof window === "undefined") return;
|
|
14
|
+
if (error && typeof error === "object" && "message" in error) {
|
|
15
|
+
const message = String(error.message).toLowerCase();
|
|
16
|
+
if (message.includes("fetch") || message.includes("network") || message.includes("failed to fetch")) import("sonner").then(({ toast }) => {
|
|
17
|
+
const message = config.connectionError?.() ?? {
|
|
18
|
+
title: "Unable to connect to API",
|
|
19
|
+
description: "The API is currently unavailable. Please try again later."
|
|
20
|
+
};
|
|
21
|
+
toast.error(message.title, {
|
|
22
|
+
id: "api-connection-error",
|
|
23
|
+
description: message.description
|
|
24
|
+
});
|
|
25
|
+
}).catch(() => {});
|
|
26
|
+
}
|
|
27
|
+
})],
|
|
28
|
+
fetch(fetchUrl, options) {
|
|
29
|
+
return fetchWithRateLimitRetry(fetchUrl, {
|
|
30
|
+
...options,
|
|
31
|
+
credentials: "include",
|
|
32
|
+
headers: headers ? {
|
|
33
|
+
...Object.fromEntries(headers),
|
|
34
|
+
...options?.headers
|
|
35
|
+
} : options?.headers
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const RATE_LIMIT_MAX_RETRIES = 3;
|
|
41
|
+
const RATE_LIMIT_RETRY_CAP_MS = 2e3;
|
|
42
|
+
/**
|
|
43
|
+
* A 429 from the host's edge limiter is transient saturation, not an
|
|
44
|
+
* application failure — retry within the server's `Retry-After` (capped) so
|
|
45
|
+
* queries and the session check self-heal instead of surfacing errors.
|
|
46
|
+
*/
|
|
47
|
+
async function fetchWithRateLimitRetry(fetchUrl, options) {
|
|
48
|
+
let response = await fetch(fetchUrl, options);
|
|
49
|
+
for (let attempt = 1; attempt <= RATE_LIMIT_MAX_RETRIES && response.status === 429; attempt++) {
|
|
50
|
+
const retryAfterSeconds = Number(response.headers.get("retry-after"));
|
|
51
|
+
const delay = Number.isFinite(retryAfterSeconds) && retryAfterSeconds > 0 ? Math.min(retryAfterSeconds * 1e3, RATE_LIMIT_RETRY_CAP_MS) : 100 * attempt;
|
|
52
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
53
|
+
response = await fetch(fetchUrl, options);
|
|
54
|
+
}
|
|
55
|
+
return response;
|
|
56
|
+
}
|
|
57
|
+
function buildClient(config, url, headers) {
|
|
58
|
+
if (!config.hostUrl) throw new Error("Missing runtime host URL");
|
|
59
|
+
return (0, _orpc_client.createORPCClient)(createRpcLink(config, url, headers));
|
|
60
|
+
}
|
|
61
|
+
const browserClients = /* @__PURE__ */ new Map();
|
|
62
|
+
function memoizedClient(config, url, headers) {
|
|
63
|
+
if (typeof window !== "undefined" && !headers) {
|
|
64
|
+
const key = `${config.hostUrl}${url}`;
|
|
65
|
+
const memoized = browserClients.get(key);
|
|
66
|
+
if (memoized) return memoized;
|
|
67
|
+
const client = buildClient(config, url, headers);
|
|
68
|
+
browserClients.set(key, client);
|
|
69
|
+
return client;
|
|
70
|
+
}
|
|
71
|
+
return buildClient(config, url, headers);
|
|
72
|
+
}
|
|
73
|
+
function createApiClient(config, headers) {
|
|
74
|
+
return memoizedClient(config, config.rpcBase, headers);
|
|
75
|
+
}
|
|
76
|
+
function createPluginApiClient(pluginKey, config, headers) {
|
|
77
|
+
return memoizedClient(config, `${config.rpcBase}/${pluginKey}`, headers);
|
|
78
|
+
}
|
|
79
|
+
function createServiceClients(config, keys, headers) {
|
|
80
|
+
const clients = {};
|
|
81
|
+
for (const key of keys) if (key === "api") clients[key] = createApiClient(config, headers);
|
|
82
|
+
else clients[key] = createPluginApiClient(key, config, headers);
|
|
83
|
+
return clients;
|
|
84
|
+
}
|
|
85
|
+
function useClientContext() {
|
|
86
|
+
return (0, _tanstack_react_router.useRouter)().options.context;
|
|
87
|
+
}
|
|
88
|
+
function useApiClient() {
|
|
89
|
+
return useClientContext().apiClient;
|
|
90
|
+
}
|
|
91
|
+
function useOrpc() {
|
|
92
|
+
return (0, _orpc_tanstack_query.createTanstackQueryUtils)(useApiClient());
|
|
93
|
+
}
|
|
94
|
+
function usePluginClients() {
|
|
95
|
+
return useClientContext().pluginClients ?? {};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
//#endregion
|
|
99
|
+
exports.createApiClient = createApiClient;
|
|
100
|
+
exports.createPluginApiClient = createPluginApiClient;
|
|
101
|
+
exports.createServiceClients = createServiceClients;
|
|
102
|
+
exports.useApiClient = useApiClient;
|
|
103
|
+
exports.useOrpc = useOrpc;
|
|
104
|
+
exports.usePluginClients = usePluginClients;
|
|
105
|
+
//# sourceMappingURL=api.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.cjs","names":["RPCLink","onError","createORPCClient","useRouter","createTanstackQueryUtils"],"sources":["../../src/ui/api.ts"],"sourcesContent":["import { createORPCClient, onError } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport type { ContractRouterClient, RouterContract } from \"@orpc/contract\";\nimport { createTanstackQueryUtils } from \"@orpc/tanstack-query\";\nimport { useRouter } from \"@tanstack/react-router\";\n\nexport type { RouterContract };\n\n/**\n * Localized copy for the API connection-failure toast — the app's authored\n * override seam (ADR 0023). Called at error time, so the implementation may\n * resolve the active locale itself.\n */\nexport type ApiConnectionErrorCopy = () => { title: string; description: string };\n\n/** typed client for the app's default router contract (router-context default) */\nexport type ApiClient<T extends RouterContract = RouterContract> = ContractRouterClient<T>;\n\nexport interface ClientServiceConfig {\n hostUrl: string;\n rpcBase: `/${string}`;\n connectionError?: ApiConnectionErrorCopy;\n}\n\ntype ClientRouterContext = {\n apiClient?: unknown;\n pluginClients?: Record<string, unknown>;\n};\n\nexport type { ClientRouterContext };\n\nfunction createRpcLink(config: ClientServiceConfig, url: `/${string}`, headers?: Headers) {\n return new RPCLink({\n origin: config.hostUrl,\n url,\n interceptors: [\n onError((error: unknown) => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (error && typeof error === \"object\" && \"message\" in error) {\n const message = String(error.message).toLowerCase();\n if (\n message.includes(\"fetch\") ||\n message.includes(\"network\") ||\n message.includes(\"failed to fetch\")\n ) {\n void import(\"sonner\")\n .then(({ toast }) => {\n const message = config.connectionError?.() ?? {\n title: \"Unable to connect to API\",\n description: \"The API is currently unavailable. Please try again later.\",\n };\n toast.error(message.title, {\n id: \"api-connection-error\",\n description: message.description,\n });\n })\n .catch(() => {});\n }\n }\n }),\n ],\n fetch(fetchUrl: RequestInfo | URL, options?: RequestInit) {\n return fetchWithRateLimitRetry(fetchUrl, {\n ...options,\n credentials: \"include\",\n headers: headers\n ? { ...Object.fromEntries(headers), ...(options?.headers as Record<string, string>) }\n : options?.headers,\n });\n },\n });\n}\n\nconst RATE_LIMIT_MAX_RETRIES = 3;\nconst RATE_LIMIT_RETRY_CAP_MS = 2_000;\n\n/**\n * A 429 from the host's edge limiter is transient saturation, not an\n * application failure — retry within the server's `Retry-After` (capped) so\n * queries and the session check self-heal instead of surfacing errors.\n */\nasync function fetchWithRateLimitRetry(\n fetchUrl: RequestInfo | URL,\n options?: RequestInit,\n): Promise<Response> {\n let response = await fetch(fetchUrl, options);\n for (let attempt = 1; attempt <= RATE_LIMIT_MAX_RETRIES && response.status === 429; attempt++) {\n const retryAfterSeconds = Number(response.headers.get(\"retry-after\"));\n const delay =\n Number.isFinite(retryAfterSeconds) && retryAfterSeconds > 0\n ? Math.min(retryAfterSeconds * 1000, RATE_LIMIT_RETRY_CAP_MS)\n : 100 * attempt;\n await new Promise((resolve) => setTimeout(resolve, delay));\n response = await fetch(fetchUrl, options);\n }\n return response;\n}\n\nfunction buildClient<T extends RouterContract>(\n config: ClientServiceConfig,\n url: `/${string}`,\n headers?: Headers,\n): ContractRouterClient<T> {\n if (!config.hostUrl) {\n throw new Error(\"Missing runtime host URL\");\n }\n return createORPCClient(createRpcLink(config, url, headers)) as ContractRouterClient<T>;\n}\n\nconst browserClients = new Map<string, unknown>();\n\nfunction memoizedClient<T extends RouterContract>(\n config: ClientServiceConfig,\n url: `/${string}`,\n headers?: Headers,\n): ContractRouterClient<T> {\n if (typeof window !== \"undefined\" && !headers) {\n const key = `${config.hostUrl}${url}`;\n const memoized = browserClients.get(key);\n if (memoized) {\n return memoized as ContractRouterClient<T>;\n }\n const client = buildClient<T>(config, url, headers);\n browserClients.set(key, client);\n return client;\n }\n\n return buildClient<T>(config, url, headers);\n}\n\nexport function createApiClient<T extends RouterContract = RouterContract>(\n config: ClientServiceConfig,\n headers?: Headers,\n): ContractRouterClient<T> {\n return memoizedClient<T>(config, config.rpcBase, headers);\n}\n\nexport function createPluginApiClient<T extends RouterContract = RouterContract>(\n pluginKey: string,\n config: ClientServiceConfig,\n headers?: Headers,\n): ContractRouterClient<T> {\n return memoizedClient<T>(config, `${config.rpcBase}/${pluginKey}`, headers);\n}\n\nexport function createServiceClients<\n C extends Record<string, RouterContract>,\n K extends keyof C & string = keyof C & string,\n>(\n config: ClientServiceConfig,\n keys: readonly K[],\n headers?: Headers,\n): Pick<{ [P in keyof C]: ContractRouterClient<C[P]> }, K> {\n const clients: Record<string, unknown> = {};\n for (const key of keys) {\n if (key === \"api\") {\n clients[key] = createApiClient<C[typeof key]>(config, headers);\n } else {\n clients[key] = createPluginApiClient<C[typeof key]>(key, config, headers);\n }\n }\n return clients as Pick<{ [P in keyof C]: ContractRouterClient<C[P]> }, K>;\n}\n\nfunction useClientContext(): ClientRouterContext {\n return useRouter().options.context as ClientRouterContext;\n}\n\nexport function useApiClient<T extends RouterContract = RouterContract>(): ContractRouterClient<T> {\n return useClientContext().apiClient as ContractRouterClient<T>;\n}\n\nexport function useOrpc<T extends RouterContract = RouterContract>() {\n return createTanstackQueryUtils(useApiClient<T>());\n}\n\nexport function usePluginClients<C extends Record<string, unknown> = Record<string, unknown>>(): C {\n return (useClientContext().pluginClients ?? {}) as C;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ContractRouterClient, RouterContract } from "@orpc/contract";
|
|
2
|
+
//#region src/ui/api.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Localized copy for the API connection-failure toast — the app's authored
|
|
5
|
+
* override seam (ADR 0023). Called at error time, so the implementation may
|
|
6
|
+
* resolve the active locale itself.
|
|
7
|
+
*/
|
|
8
|
+
type ApiConnectionErrorCopy = () => {
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
/** typed client for the app's default router contract (router-context default) */
|
|
13
|
+
type ApiClient<T extends RouterContract = RouterContract> = ContractRouterClient<T>;
|
|
14
|
+
interface ClientServiceConfig {
|
|
15
|
+
hostUrl: string;
|
|
16
|
+
rpcBase: `/${string}`;
|
|
17
|
+
connectionError?: ApiConnectionErrorCopy;
|
|
18
|
+
}
|
|
19
|
+
type ClientRouterContext = {
|
|
20
|
+
apiClient?: unknown;
|
|
21
|
+
pluginClients?: Record<string, unknown>;
|
|
22
|
+
};
|
|
23
|
+
declare function createApiClient<T extends RouterContract = RouterContract>(config: ClientServiceConfig, headers?: Headers): ContractRouterClient<T>;
|
|
24
|
+
declare function createPluginApiClient<T extends RouterContract = RouterContract>(pluginKey: string, config: ClientServiceConfig, headers?: Headers): ContractRouterClient<T>;
|
|
25
|
+
declare function createServiceClients<C extends Record<string, RouterContract>, K extends keyof C & string = keyof C & string>(config: ClientServiceConfig, keys: readonly K[], headers?: Headers): Pick<{ [P in keyof C]: ContractRouterClient<C[P]>; }, K>;
|
|
26
|
+
declare function useApiClient<T extends RouterContract = RouterContract>(): ContractRouterClient<T>;
|
|
27
|
+
declare function useOrpc<T extends RouterContract = RouterContract>(): import("@orpc/tanstack-query").RouterUtils<ContractRouterClient<T, object>>;
|
|
28
|
+
declare function usePluginClients<C extends Record<string, unknown> = Record<string, unknown>>(): C;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { ApiClient, ApiConnectionErrorCopy, type ClientRouterContext, ClientServiceConfig, type RouterContract, createApiClient, createPluginApiClient, createServiceClients, useApiClient, useOrpc, usePluginClients };
|
|
31
|
+
//# sourceMappingURL=api.d.cts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ContractRouterClient, RouterContract } from "@orpc/contract";
|
|
2
|
+
//#region src/ui/api.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Localized copy for the API connection-failure toast — the app's authored
|
|
5
|
+
* override seam (ADR 0023). Called at error time, so the implementation may
|
|
6
|
+
* resolve the active locale itself.
|
|
7
|
+
*/
|
|
8
|
+
type ApiConnectionErrorCopy = () => {
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
/** typed client for the app's default router contract (router-context default) */
|
|
13
|
+
type ApiClient<T extends RouterContract = RouterContract> = ContractRouterClient<T>;
|
|
14
|
+
interface ClientServiceConfig {
|
|
15
|
+
hostUrl: string;
|
|
16
|
+
rpcBase: `/${string}`;
|
|
17
|
+
connectionError?: ApiConnectionErrorCopy;
|
|
18
|
+
}
|
|
19
|
+
type ClientRouterContext = {
|
|
20
|
+
apiClient?: unknown;
|
|
21
|
+
pluginClients?: Record<string, unknown>;
|
|
22
|
+
};
|
|
23
|
+
declare function createApiClient<T extends RouterContract = RouterContract>(config: ClientServiceConfig, headers?: Headers): ContractRouterClient<T>;
|
|
24
|
+
declare function createPluginApiClient<T extends RouterContract = RouterContract>(pluginKey: string, config: ClientServiceConfig, headers?: Headers): ContractRouterClient<T>;
|
|
25
|
+
declare function createServiceClients<C extends Record<string, RouterContract>, K extends keyof C & string = keyof C & string>(config: ClientServiceConfig, keys: readonly K[], headers?: Headers): Pick<{ [P in keyof C]: ContractRouterClient<C[P]>; }, K>;
|
|
26
|
+
declare function useApiClient<T extends RouterContract = RouterContract>(): ContractRouterClient<T>;
|
|
27
|
+
declare function useOrpc<T extends RouterContract = RouterContract>(): import("@orpc/tanstack-query").RouterUtils<ContractRouterClient<T, object>>;
|
|
28
|
+
declare function usePluginClients<C extends Record<string, unknown> = Record<string, unknown>>(): C;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { ApiClient, ApiConnectionErrorCopy, type ClientRouterContext, ClientServiceConfig, type RouterContract, createApiClient, createPluginApiClient, createServiceClients, useApiClient, useOrpc, usePluginClients };
|
|
31
|
+
//# sourceMappingURL=api.d.mts.map
|
package/dist/ui/api.mjs
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { createORPCClient, onError } from "@orpc/client";
|
|
2
|
+
import { RPCLink } from "@orpc/client/fetch";
|
|
3
|
+
import { createTanstackQueryUtils } from "@orpc/tanstack-query";
|
|
4
|
+
import { useRouter } from "@tanstack/react-router";
|
|
5
|
+
|
|
6
|
+
//#region src/ui/api.ts
|
|
7
|
+
function createRpcLink(config, url, headers) {
|
|
8
|
+
return new RPCLink({
|
|
9
|
+
origin: config.hostUrl,
|
|
10
|
+
url,
|
|
11
|
+
interceptors: [onError((error) => {
|
|
12
|
+
if (typeof window === "undefined") return;
|
|
13
|
+
if (error && typeof error === "object" && "message" in error) {
|
|
14
|
+
const message = String(error.message).toLowerCase();
|
|
15
|
+
if (message.includes("fetch") || message.includes("network") || message.includes("failed to fetch")) import("sonner").then(({ toast }) => {
|
|
16
|
+
const message = config.connectionError?.() ?? {
|
|
17
|
+
title: "Unable to connect to API",
|
|
18
|
+
description: "The API is currently unavailable. Please try again later."
|
|
19
|
+
};
|
|
20
|
+
toast.error(message.title, {
|
|
21
|
+
id: "api-connection-error",
|
|
22
|
+
description: message.description
|
|
23
|
+
});
|
|
24
|
+
}).catch(() => {});
|
|
25
|
+
}
|
|
26
|
+
})],
|
|
27
|
+
fetch(fetchUrl, options) {
|
|
28
|
+
return fetchWithRateLimitRetry(fetchUrl, {
|
|
29
|
+
...options,
|
|
30
|
+
credentials: "include",
|
|
31
|
+
headers: headers ? {
|
|
32
|
+
...Object.fromEntries(headers),
|
|
33
|
+
...options?.headers
|
|
34
|
+
} : options?.headers
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const RATE_LIMIT_MAX_RETRIES = 3;
|
|
40
|
+
const RATE_LIMIT_RETRY_CAP_MS = 2e3;
|
|
41
|
+
/**
|
|
42
|
+
* A 429 from the host's edge limiter is transient saturation, not an
|
|
43
|
+
* application failure — retry within the server's `Retry-After` (capped) so
|
|
44
|
+
* queries and the session check self-heal instead of surfacing errors.
|
|
45
|
+
*/
|
|
46
|
+
async function fetchWithRateLimitRetry(fetchUrl, options) {
|
|
47
|
+
let response = await fetch(fetchUrl, options);
|
|
48
|
+
for (let attempt = 1; attempt <= RATE_LIMIT_MAX_RETRIES && response.status === 429; attempt++) {
|
|
49
|
+
const retryAfterSeconds = Number(response.headers.get("retry-after"));
|
|
50
|
+
const delay = Number.isFinite(retryAfterSeconds) && retryAfterSeconds > 0 ? Math.min(retryAfterSeconds * 1e3, RATE_LIMIT_RETRY_CAP_MS) : 100 * attempt;
|
|
51
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
52
|
+
response = await fetch(fetchUrl, options);
|
|
53
|
+
}
|
|
54
|
+
return response;
|
|
55
|
+
}
|
|
56
|
+
function buildClient(config, url, headers) {
|
|
57
|
+
if (!config.hostUrl) throw new Error("Missing runtime host URL");
|
|
58
|
+
return createORPCClient(createRpcLink(config, url, headers));
|
|
59
|
+
}
|
|
60
|
+
const browserClients = /* @__PURE__ */ new Map();
|
|
61
|
+
function memoizedClient(config, url, headers) {
|
|
62
|
+
if (typeof window !== "undefined" && !headers) {
|
|
63
|
+
const key = `${config.hostUrl}${url}`;
|
|
64
|
+
const memoized = browserClients.get(key);
|
|
65
|
+
if (memoized) return memoized;
|
|
66
|
+
const client = buildClient(config, url, headers);
|
|
67
|
+
browserClients.set(key, client);
|
|
68
|
+
return client;
|
|
69
|
+
}
|
|
70
|
+
return buildClient(config, url, headers);
|
|
71
|
+
}
|
|
72
|
+
function createApiClient(config, headers) {
|
|
73
|
+
return memoizedClient(config, config.rpcBase, headers);
|
|
74
|
+
}
|
|
75
|
+
function createPluginApiClient(pluginKey, config, headers) {
|
|
76
|
+
return memoizedClient(config, `${config.rpcBase}/${pluginKey}`, headers);
|
|
77
|
+
}
|
|
78
|
+
function createServiceClients(config, keys, headers) {
|
|
79
|
+
const clients = {};
|
|
80
|
+
for (const key of keys) if (key === "api") clients[key] = createApiClient(config, headers);
|
|
81
|
+
else clients[key] = createPluginApiClient(key, config, headers);
|
|
82
|
+
return clients;
|
|
83
|
+
}
|
|
84
|
+
function useClientContext() {
|
|
85
|
+
return useRouter().options.context;
|
|
86
|
+
}
|
|
87
|
+
function useApiClient() {
|
|
88
|
+
return useClientContext().apiClient;
|
|
89
|
+
}
|
|
90
|
+
function useOrpc() {
|
|
91
|
+
return createTanstackQueryUtils(useApiClient());
|
|
92
|
+
}
|
|
93
|
+
function usePluginClients() {
|
|
94
|
+
return useClientContext().pluginClients ?? {};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
//#endregion
|
|
98
|
+
export { createApiClient, createPluginApiClient, createServiceClients, useApiClient, useOrpc, usePluginClients };
|
|
99
|
+
//# sourceMappingURL=api.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.mjs","names":[],"sources":["../../src/ui/api.ts"],"sourcesContent":["import { createORPCClient, onError } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport type { ContractRouterClient, RouterContract } from \"@orpc/contract\";\nimport { createTanstackQueryUtils } from \"@orpc/tanstack-query\";\nimport { useRouter } from \"@tanstack/react-router\";\n\nexport type { RouterContract };\n\n/**\n * Localized copy for the API connection-failure toast — the app's authored\n * override seam (ADR 0023). Called at error time, so the implementation may\n * resolve the active locale itself.\n */\nexport type ApiConnectionErrorCopy = () => { title: string; description: string };\n\n/** typed client for the app's default router contract (router-context default) */\nexport type ApiClient<T extends RouterContract = RouterContract> = ContractRouterClient<T>;\n\nexport interface ClientServiceConfig {\n hostUrl: string;\n rpcBase: `/${string}`;\n connectionError?: ApiConnectionErrorCopy;\n}\n\ntype ClientRouterContext = {\n apiClient?: unknown;\n pluginClients?: Record<string, unknown>;\n};\n\nexport type { ClientRouterContext };\n\nfunction createRpcLink(config: ClientServiceConfig, url: `/${string}`, headers?: Headers) {\n return new RPCLink({\n origin: config.hostUrl,\n url,\n interceptors: [\n onError((error: unknown) => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (error && typeof error === \"object\" && \"message\" in error) {\n const message = String(error.message).toLowerCase();\n if (\n message.includes(\"fetch\") ||\n message.includes(\"network\") ||\n message.includes(\"failed to fetch\")\n ) {\n void import(\"sonner\")\n .then(({ toast }) => {\n const message = config.connectionError?.() ?? {\n title: \"Unable to connect to API\",\n description: \"The API is currently unavailable. Please try again later.\",\n };\n toast.error(message.title, {\n id: \"api-connection-error\",\n description: message.description,\n });\n })\n .catch(() => {});\n }\n }\n }),\n ],\n fetch(fetchUrl: RequestInfo | URL, options?: RequestInit) {\n return fetchWithRateLimitRetry(fetchUrl, {\n ...options,\n credentials: \"include\",\n headers: headers\n ? { ...Object.fromEntries(headers), ...(options?.headers as Record<string, string>) }\n : options?.headers,\n });\n },\n });\n}\n\nconst RATE_LIMIT_MAX_RETRIES = 3;\nconst RATE_LIMIT_RETRY_CAP_MS = 2_000;\n\n/**\n * A 429 from the host's edge limiter is transient saturation, not an\n * application failure — retry within the server's `Retry-After` (capped) so\n * queries and the session check self-heal instead of surfacing errors.\n */\nasync function fetchWithRateLimitRetry(\n fetchUrl: RequestInfo | URL,\n options?: RequestInit,\n): Promise<Response> {\n let response = await fetch(fetchUrl, options);\n for (let attempt = 1; attempt <= RATE_LIMIT_MAX_RETRIES && response.status === 429; attempt++) {\n const retryAfterSeconds = Number(response.headers.get(\"retry-after\"));\n const delay =\n Number.isFinite(retryAfterSeconds) && retryAfterSeconds > 0\n ? Math.min(retryAfterSeconds * 1000, RATE_LIMIT_RETRY_CAP_MS)\n : 100 * attempt;\n await new Promise((resolve) => setTimeout(resolve, delay));\n response = await fetch(fetchUrl, options);\n }\n return response;\n}\n\nfunction buildClient<T extends RouterContract>(\n config: ClientServiceConfig,\n url: `/${string}`,\n headers?: Headers,\n): ContractRouterClient<T> {\n if (!config.hostUrl) {\n throw new Error(\"Missing runtime host URL\");\n }\n return createORPCClient(createRpcLink(config, url, headers)) as ContractRouterClient<T>;\n}\n\nconst browserClients = new Map<string, unknown>();\n\nfunction memoizedClient<T extends RouterContract>(\n config: ClientServiceConfig,\n url: `/${string}`,\n headers?: Headers,\n): ContractRouterClient<T> {\n if (typeof window !== \"undefined\" && !headers) {\n const key = `${config.hostUrl}${url}`;\n const memoized = browserClients.get(key);\n if (memoized) {\n return memoized as ContractRouterClient<T>;\n }\n const client = buildClient<T>(config, url, headers);\n browserClients.set(key, client);\n return client;\n }\n\n return buildClient<T>(config, url, headers);\n}\n\nexport function createApiClient<T extends RouterContract = RouterContract>(\n config: ClientServiceConfig,\n headers?: Headers,\n): ContractRouterClient<T> {\n return memoizedClient<T>(config, config.rpcBase, headers);\n}\n\nexport function createPluginApiClient<T extends RouterContract = RouterContract>(\n pluginKey: string,\n config: ClientServiceConfig,\n headers?: Headers,\n): ContractRouterClient<T> {\n return memoizedClient<T>(config, `${config.rpcBase}/${pluginKey}`, headers);\n}\n\nexport function createServiceClients<\n C extends Record<string, RouterContract>,\n K extends keyof C & string = keyof C & string,\n>(\n config: ClientServiceConfig,\n keys: readonly K[],\n headers?: Headers,\n): Pick<{ [P in keyof C]: ContractRouterClient<C[P]> }, K> {\n const clients: Record<string, unknown> = {};\n for (const key of keys) {\n if (key === \"api\") {\n clients[key] = createApiClient<C[typeof key]>(config, headers);\n } else {\n clients[key] = createPluginApiClient<C[typeof key]>(key, config, headers);\n }\n }\n return clients as Pick<{ [P in keyof C]: ContractRouterClient<C[P]> }, K>;\n}\n\nfunction useClientContext(): ClientRouterContext {\n return useRouter().options.context as ClientRouterContext;\n}\n\nexport function useApiClient<T extends RouterContract = RouterContract>(): ContractRouterClient<T> {\n return useClientContext().apiClient as ContractRouterClient<T>;\n}\n\nexport function useOrpc<T extends RouterContract = RouterContract>() {\n return createTanstackQueryUtils(useApiClient<T>());\n}\n\nexport function usePluginClients<C extends Record<string, unknown> = Record<string, unknown>>(): C {\n return (useClientContext().pluginClients ?? {}) as C;\n}\n"],"mappings":";;;;;;AA+BA,SAAS,cAAc,QAA6B,KAAmB,SAAmB;CACxF,OAAO,IAAI,QAAQ;EACjB,QAAQ,OAAO;EACf;EACA,cAAc,CACZ,SAAS,UAAmB;GAC1B,IAAI,OAAO,WAAW,aACpB;GAGF,IAAI,SAAS,OAAO,UAAU,YAAY,aAAa,OAAO;IAC5D,MAAM,UAAU,OAAO,MAAM,OAAO,CAAC,CAAC,YAAY;IAClD,IACE,QAAQ,SAAS,OAAO,KACxB,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,iBAAiB,GAElC,AAAK,OAAO,SAAS,CAClB,MAAM,EAAE,YAAY;KACnB,MAAM,UAAU,OAAO,kBAAkB,KAAK;MAC5C,OAAO;MACP,aAAa;KACf;KACA,MAAM,MAAM,QAAQ,OAAO;MACzB,IAAI;MACJ,aAAa,QAAQ;KACvB,CAAC;IACH,CAAC,CAAC,CACD,YAAY,CAAC,CAAC;GAErB;EACF,CAAC,CACH;EACA,MAAM,UAA6B,SAAuB;GACxD,OAAO,wBAAwB,UAAU;IACvC,GAAG;IACH,aAAa;IACb,SAAS,UACL;KAAE,GAAG,OAAO,YAAY,OAAO;KAAG,GAAI,SAAS;IAAmC,IAClF,SAAS;GACf,CAAC;EACH;CACF,CAAC;AACH;AAEA,MAAM,yBAAyB;AAC/B,MAAM,0BAA0B;;;;;;AAOhC,eAAe,wBACb,UACA,SACmB;CACnB,IAAI,WAAW,MAAM,MAAM,UAAU,OAAO;CAC5C,KAAK,IAAI,UAAU,GAAG,WAAW,0BAA0B,SAAS,WAAW,KAAK,WAAW;EAC7F,MAAM,oBAAoB,OAAO,SAAS,QAAQ,IAAI,aAAa,CAAC;EACpE,MAAM,QACJ,OAAO,SAAS,iBAAiB,KAAK,oBAAoB,IACtD,KAAK,IAAI,oBAAoB,KAAM,uBAAuB,IAC1D,MAAM;EACZ,MAAM,IAAI,SAAS,YAAY,WAAW,SAAS,KAAK,CAAC;EACzD,WAAW,MAAM,MAAM,UAAU,OAAO;CAC1C;CACA,OAAO;AACT;AAEA,SAAS,YACP,QACA,KACA,SACyB;CACzB,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,MAAM,0BAA0B;CAE5C,OAAO,iBAAiB,cAAc,QAAQ,KAAK,OAAO,CAAC;AAC7D;AAEA,MAAM,iCAAiB,IAAI,IAAqB;AAEhD,SAAS,eACP,QACA,KACA,SACyB;CACzB,IAAI,OAAO,WAAW,eAAe,CAAC,SAAS;EAC7C,MAAM,MAAM,GAAG,OAAO,UAAU;EAChC,MAAM,WAAW,eAAe,IAAI,GAAG;EACvC,IAAI,UACF,OAAO;EAET,MAAM,SAAS,YAAe,QAAQ,KAAK,OAAO;EAClD,eAAe,IAAI,KAAK,MAAM;EAC9B,OAAO;CACT;CAEA,OAAO,YAAe,QAAQ,KAAK,OAAO;AAC5C;AAEA,SAAgB,gBACd,QACA,SACyB;CACzB,OAAO,eAAkB,QAAQ,OAAO,SAAS,OAAO;AAC1D;AAEA,SAAgB,sBACd,WACA,QACA,SACyB;CACzB,OAAO,eAAkB,QAAQ,GAAG,OAAO,QAAQ,GAAG,aAAa,OAAO;AAC5E;AAEA,SAAgB,qBAId,QACA,MACA,SACyD;CACzD,MAAM,UAAmC,CAAC;CAC1C,KAAK,MAAM,OAAO,MAChB,IAAI,QAAQ,OACV,QAAQ,OAAO,gBAA+B,QAAQ,OAAO;MAE7D,QAAQ,OAAO,sBAAqC,KAAK,QAAQ,OAAO;CAG5E,OAAO;AACT;AAEA,SAAS,mBAAwC;CAC/C,OAAO,UAAU,CAAC,CAAC,QAAQ;AAC7B;AAEA,SAAgB,eAAmF;CACjG,OAAO,iBAAiB,CAAC,CAAC;AAC5B;AAEA,SAAgB,UAAqD;CACnE,OAAO,yBAAyB,aAAgB,CAAC;AACnD;AAEA,SAAgB,mBAAmF;CACjG,OAAQ,iBAAiB,CAAC,CAAC,iBAAiB,CAAC;AAC/C"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const require_plugin_path = require('./plugin-path.cjs');
|
|
2
|
+
const require_ui_auth = require('./auth.cjs');
|
|
3
|
+
let _tanstack_react_router = require("@tanstack/react-router");
|
|
4
|
+
|
|
5
|
+
//#region src/ui/auth-guards.ts
|
|
6
|
+
async function ensureSession(context) {
|
|
7
|
+
const { queryClient, authClient } = context;
|
|
8
|
+
return queryClient.query(require_ui_auth.sessionQueryOptions(authClient));
|
|
9
|
+
}
|
|
10
|
+
function buildAuthContext(session) {
|
|
11
|
+
return {
|
|
12
|
+
isAuthenticated: !!session?.user,
|
|
13
|
+
user: session?.user ?? null,
|
|
14
|
+
session: session?.session ?? null,
|
|
15
|
+
activeOrganizationId: session?.session?.activeOrganizationId ?? null,
|
|
16
|
+
isAnonymous: session?.user?.isAnonymous ?? false,
|
|
17
|
+
isAdmin: session?.user?.role === "admin",
|
|
18
|
+
isBanned: session?.user?.banned ?? false
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function requireSession({ context, location }) {
|
|
22
|
+
const session = await ensureSession(context);
|
|
23
|
+
if (!session?.user) throw (0, _tanstack_react_router.redirect)({ href: require_plugin_path.pluginHref("/login", { redirect: location.href }) });
|
|
24
|
+
if (session.user.banned) throw (0, _tanstack_react_router.redirect)({ href: require_plugin_path.pluginPath("/login#banned") });
|
|
25
|
+
return {
|
|
26
|
+
auth: buildAuthContext(session),
|
|
27
|
+
session
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async function requireAdmin(args) {
|
|
31
|
+
const result = await requireSession(args);
|
|
32
|
+
if (result.session.user?.role !== "admin") throw (0, _tanstack_react_router.redirect)({ to: "/dashboard" });
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Clears private and public query data on sign-out while leaving an explicit
|
|
37
|
+
* signed-out session entry — the cache must remember "signed out" so a late
|
|
38
|
+
* router-context session cannot resurrect stale authed state.
|
|
39
|
+
*/
|
|
40
|
+
async function clearAuthenticatedQueries(queryClient) {
|
|
41
|
+
await queryClient.cancelQueries();
|
|
42
|
+
queryClient.clear();
|
|
43
|
+
queryClient.setQueryData(require_ui_auth.sessionQueryKey, null);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
exports.clearAuthenticatedQueries = clearAuthenticatedQueries;
|
|
48
|
+
exports.requireAdmin = requireAdmin;
|
|
49
|
+
exports.requireSession = requireSession;
|
|
50
|
+
//# sourceMappingURL=auth-guards.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-guards.cjs","names":["sessionQueryOptions","redirect","pluginHref","pluginPath","sessionQueryKey"],"sources":["../../src/ui/auth-guards.ts"],"sourcesContent":["/**\n * The auth redirect policy — the single owner of the guard pair that decides\n * every session-driven redirect in the composed tree. The login route\n * (`_public/login` in the auth plugin ui) and the authenticated mounts read\n * through this module so both sides of the ping-pong loop live in one place,\n * tested as a pair.\n */\n\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { redirect } from \"@tanstack/react-router\";\nimport type { AuthClient, SessionData } from \"./auth\";\nimport { sessionQueryKey, sessionQueryOptions } from \"./auth\";\nimport { pluginHref, pluginPath } from \"./plugin-path\";\n\nexport interface AuthContext {\n isAuthenticated: boolean;\n user: SessionData[\"user\"] | null;\n session: SessionData[\"session\"] | null;\n activeOrganizationId: string | null;\n isAnonymous: boolean;\n isAdmin: boolean;\n isBanned: boolean;\n}\n\ninterface AuthGuardContext {\n queryClient: QueryClient;\n authClient: AuthClient;\n}\n\nexport interface AuthGuardArgs {\n context: AuthGuardContext;\n location: { href: string };\n}\n\nasync function ensureSession(context: AuthGuardContext): Promise<SessionData | null> {\n const { queryClient, authClient } = context;\n return queryClient.query(sessionQueryOptions(authClient));\n}\n\nfunction buildAuthContext(session: SessionData | null | undefined): AuthContext {\n return {\n isAuthenticated: !!session?.user,\n user: session?.user ?? null,\n session: session?.session ?? null,\n activeOrganizationId: session?.session?.activeOrganizationId ?? null,\n isAnonymous: session?.user?.isAnonymous ?? false,\n isAdmin: session?.user?.role === \"admin\",\n isBanned: session?.user?.banned ?? false,\n };\n}\n\nexport async function requireSession({ context, location }: AuthGuardArgs) {\n const session = await ensureSession(context);\n if (!session?.user) {\n throw redirect({ href: pluginHref(\"/login\", { redirect: location.href }) });\n }\n if (session.user.banned) {\n throw redirect({ href: pluginPath(\"/login#banned\") });\n }\n return { auth: buildAuthContext(session), session };\n}\n\nexport async function requireAdmin(args: AuthGuardArgs) {\n const result = await requireSession(args);\n if (result.session.user?.role !== \"admin\") {\n throw redirect({ to: \"/dashboard\" });\n }\n return result;\n}\n\n/**\n * Clears private and public query data on sign-out while leaving an explicit\n * signed-out session entry — the cache must remember \"signed out\" so a late\n * router-context session cannot resurrect stale authed state.\n */\nexport async function clearAuthenticatedQueries(queryClient: QueryClient) {\n await queryClient.cancelQueries();\n queryClient.clear();\n queryClient.setQueryData(sessionQueryKey, null);\n}\n"],"mappings":";;;;;AAkCA,eAAe,cAAc,SAAwD;CACnF,MAAM,EAAE,aAAa,eAAe;CACpC,OAAO,YAAY,MAAMA,oCAAoB,UAAU,CAAC;AAC1D;AAEA,SAAS,iBAAiB,SAAsD;CAC9E,OAAO;EACL,iBAAiB,CAAC,CAAC,SAAS;EAC5B,MAAM,SAAS,QAAQ;EACvB,SAAS,SAAS,WAAW;EAC7B,sBAAsB,SAAS,SAAS,wBAAwB;EAChE,aAAa,SAAS,MAAM,eAAe;EAC3C,SAAS,SAAS,MAAM,SAAS;EACjC,UAAU,SAAS,MAAM,UAAU;CACrC;AACF;AAEA,eAAsB,eAAe,EAAE,SAAS,YAA2B;CACzE,MAAM,UAAU,MAAM,cAAc,OAAO;CAC3C,IAAI,CAAC,SAAS,MACZ,UAAMC,iCAAS,EAAE,MAAMC,+BAAW,UAAU,EAAE,UAAU,SAAS,KAAK,CAAC,EAAE,CAAC;CAE5E,IAAI,QAAQ,KAAK,QACf,UAAMD,iCAAS,EAAE,MAAME,+BAAW,eAAe,EAAE,CAAC;CAEtD,OAAO;EAAE,MAAM,iBAAiB,OAAO;EAAG;CAAQ;AACpD;AAEA,eAAsB,aAAa,MAAqB;CACtD,MAAM,SAAS,MAAM,eAAe,IAAI;CACxC,IAAI,OAAO,QAAQ,MAAM,SAAS,SAChC,UAAMF,iCAAS,EAAE,IAAI,aAAa,CAAC;CAErC,OAAO;AACT;;;;;;AAOA,eAAsB,0BAA0B,aAA0B;CACxE,MAAM,YAAY,cAAc;CAChC,YAAY,MAAM;CAClB,YAAY,aAAaG,iCAAiB,IAAI;AAChD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AuthClient, SessionData } from "./auth.cjs";
|
|
2
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
3
|
+
//#region src/ui/auth-guards.d.ts
|
|
4
|
+
interface AuthContext {
|
|
5
|
+
isAuthenticated: boolean;
|
|
6
|
+
user: SessionData["user"] | null;
|
|
7
|
+
session: SessionData["session"] | null;
|
|
8
|
+
activeOrganizationId: string | null;
|
|
9
|
+
isAnonymous: boolean;
|
|
10
|
+
isAdmin: boolean;
|
|
11
|
+
isBanned: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface AuthGuardContext {
|
|
14
|
+
queryClient: QueryClient;
|
|
15
|
+
authClient: AuthClient;
|
|
16
|
+
}
|
|
17
|
+
interface AuthGuardArgs {
|
|
18
|
+
context: AuthGuardContext;
|
|
19
|
+
location: {
|
|
20
|
+
href: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
declare function requireSession({ context, location }: AuthGuardArgs): Promise<{
|
|
24
|
+
auth: AuthContext;
|
|
25
|
+
session: any;
|
|
26
|
+
}>;
|
|
27
|
+
declare function requireAdmin(args: AuthGuardArgs): Promise<{
|
|
28
|
+
auth: AuthContext;
|
|
29
|
+
session: any;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Clears private and public query data on sign-out while leaving an explicit
|
|
33
|
+
* signed-out session entry — the cache must remember "signed out" so a late
|
|
34
|
+
* router-context session cannot resurrect stale authed state.
|
|
35
|
+
*/
|
|
36
|
+
declare function clearAuthenticatedQueries(queryClient: QueryClient): Promise<void>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { AuthContext, AuthGuardArgs, clearAuthenticatedQueries, requireAdmin, requireSession };
|
|
39
|
+
//# sourceMappingURL=auth-guards.d.cts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AuthClient, SessionData } from "./auth.mjs";
|
|
2
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
3
|
+
//#region src/ui/auth-guards.d.ts
|
|
4
|
+
interface AuthContext {
|
|
5
|
+
isAuthenticated: boolean;
|
|
6
|
+
user: SessionData["user"] | null;
|
|
7
|
+
session: SessionData["session"] | null;
|
|
8
|
+
activeOrganizationId: string | null;
|
|
9
|
+
isAnonymous: boolean;
|
|
10
|
+
isAdmin: boolean;
|
|
11
|
+
isBanned: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface AuthGuardContext {
|
|
14
|
+
queryClient: QueryClient;
|
|
15
|
+
authClient: AuthClient;
|
|
16
|
+
}
|
|
17
|
+
interface AuthGuardArgs {
|
|
18
|
+
context: AuthGuardContext;
|
|
19
|
+
location: {
|
|
20
|
+
href: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
declare function requireSession({ context, location }: AuthGuardArgs): Promise<{
|
|
24
|
+
auth: AuthContext;
|
|
25
|
+
session: any;
|
|
26
|
+
}>;
|
|
27
|
+
declare function requireAdmin(args: AuthGuardArgs): Promise<{
|
|
28
|
+
auth: AuthContext;
|
|
29
|
+
session: any;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Clears private and public query data on sign-out while leaving an explicit
|
|
33
|
+
* signed-out session entry — the cache must remember "signed out" so a late
|
|
34
|
+
* router-context session cannot resurrect stale authed state.
|
|
35
|
+
*/
|
|
36
|
+
declare function clearAuthenticatedQueries(queryClient: QueryClient): Promise<void>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { AuthContext, AuthGuardArgs, clearAuthenticatedQueries, requireAdmin, requireSession };
|
|
39
|
+
//# sourceMappingURL=auth-guards.d.mts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { pluginHref, pluginPath } from "./plugin-path.mjs";
|
|
2
|
+
import { sessionQueryKey, sessionQueryOptions } from "./auth.mjs";
|
|
3
|
+
import { redirect } from "@tanstack/react-router";
|
|
4
|
+
|
|
5
|
+
//#region src/ui/auth-guards.ts
|
|
6
|
+
async function ensureSession(context) {
|
|
7
|
+
const { queryClient, authClient } = context;
|
|
8
|
+
return queryClient.query(sessionQueryOptions(authClient));
|
|
9
|
+
}
|
|
10
|
+
function buildAuthContext(session) {
|
|
11
|
+
return {
|
|
12
|
+
isAuthenticated: !!session?.user,
|
|
13
|
+
user: session?.user ?? null,
|
|
14
|
+
session: session?.session ?? null,
|
|
15
|
+
activeOrganizationId: session?.session?.activeOrganizationId ?? null,
|
|
16
|
+
isAnonymous: session?.user?.isAnonymous ?? false,
|
|
17
|
+
isAdmin: session?.user?.role === "admin",
|
|
18
|
+
isBanned: session?.user?.banned ?? false
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function requireSession({ context, location }) {
|
|
22
|
+
const session = await ensureSession(context);
|
|
23
|
+
if (!session?.user) throw redirect({ href: pluginHref("/login", { redirect: location.href }) });
|
|
24
|
+
if (session.user.banned) throw redirect({ href: pluginPath("/login#banned") });
|
|
25
|
+
return {
|
|
26
|
+
auth: buildAuthContext(session),
|
|
27
|
+
session
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async function requireAdmin(args) {
|
|
31
|
+
const result = await requireSession(args);
|
|
32
|
+
if (result.session.user?.role !== "admin") throw redirect({ to: "/dashboard" });
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Clears private and public query data on sign-out while leaving an explicit
|
|
37
|
+
* signed-out session entry — the cache must remember "signed out" so a late
|
|
38
|
+
* router-context session cannot resurrect stale authed state.
|
|
39
|
+
*/
|
|
40
|
+
async function clearAuthenticatedQueries(queryClient) {
|
|
41
|
+
await queryClient.cancelQueries();
|
|
42
|
+
queryClient.clear();
|
|
43
|
+
queryClient.setQueryData(sessionQueryKey, null);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { clearAuthenticatedQueries, requireAdmin, requireSession };
|
|
48
|
+
//# sourceMappingURL=auth-guards.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-guards.mjs","names":[],"sources":["../../src/ui/auth-guards.ts"],"sourcesContent":["/**\n * The auth redirect policy — the single owner of the guard pair that decides\n * every session-driven redirect in the composed tree. The login route\n * (`_public/login` in the auth plugin ui) and the authenticated mounts read\n * through this module so both sides of the ping-pong loop live in one place,\n * tested as a pair.\n */\n\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { redirect } from \"@tanstack/react-router\";\nimport type { AuthClient, SessionData } from \"./auth\";\nimport { sessionQueryKey, sessionQueryOptions } from \"./auth\";\nimport { pluginHref, pluginPath } from \"./plugin-path\";\n\nexport interface AuthContext {\n isAuthenticated: boolean;\n user: SessionData[\"user\"] | null;\n session: SessionData[\"session\"] | null;\n activeOrganizationId: string | null;\n isAnonymous: boolean;\n isAdmin: boolean;\n isBanned: boolean;\n}\n\ninterface AuthGuardContext {\n queryClient: QueryClient;\n authClient: AuthClient;\n}\n\nexport interface AuthGuardArgs {\n context: AuthGuardContext;\n location: { href: string };\n}\n\nasync function ensureSession(context: AuthGuardContext): Promise<SessionData | null> {\n const { queryClient, authClient } = context;\n return queryClient.query(sessionQueryOptions(authClient));\n}\n\nfunction buildAuthContext(session: SessionData | null | undefined): AuthContext {\n return {\n isAuthenticated: !!session?.user,\n user: session?.user ?? null,\n session: session?.session ?? null,\n activeOrganizationId: session?.session?.activeOrganizationId ?? null,\n isAnonymous: session?.user?.isAnonymous ?? false,\n isAdmin: session?.user?.role === \"admin\",\n isBanned: session?.user?.banned ?? false,\n };\n}\n\nexport async function requireSession({ context, location }: AuthGuardArgs) {\n const session = await ensureSession(context);\n if (!session?.user) {\n throw redirect({ href: pluginHref(\"/login\", { redirect: location.href }) });\n }\n if (session.user.banned) {\n throw redirect({ href: pluginPath(\"/login#banned\") });\n }\n return { auth: buildAuthContext(session), session };\n}\n\nexport async function requireAdmin(args: AuthGuardArgs) {\n const result = await requireSession(args);\n if (result.session.user?.role !== \"admin\") {\n throw redirect({ to: \"/dashboard\" });\n }\n return result;\n}\n\n/**\n * Clears private and public query data on sign-out while leaving an explicit\n * signed-out session entry — the cache must remember \"signed out\" so a late\n * router-context session cannot resurrect stale authed state.\n */\nexport async function clearAuthenticatedQueries(queryClient: QueryClient) {\n await queryClient.cancelQueries();\n queryClient.clear();\n queryClient.setQueryData(sessionQueryKey, null);\n}\n"],"mappings":";;;;;AAkCA,eAAe,cAAc,SAAwD;CACnF,MAAM,EAAE,aAAa,eAAe;CACpC,OAAO,YAAY,MAAM,oBAAoB,UAAU,CAAC;AAC1D;AAEA,SAAS,iBAAiB,SAAsD;CAC9E,OAAO;EACL,iBAAiB,CAAC,CAAC,SAAS;EAC5B,MAAM,SAAS,QAAQ;EACvB,SAAS,SAAS,WAAW;EAC7B,sBAAsB,SAAS,SAAS,wBAAwB;EAChE,aAAa,SAAS,MAAM,eAAe;EAC3C,SAAS,SAAS,MAAM,SAAS;EACjC,UAAU,SAAS,MAAM,UAAU;CACrC;AACF;AAEA,eAAsB,eAAe,EAAE,SAAS,YAA2B;CACzE,MAAM,UAAU,MAAM,cAAc,OAAO;CAC3C,IAAI,CAAC,SAAS,MACZ,MAAM,SAAS,EAAE,MAAM,WAAW,UAAU,EAAE,UAAU,SAAS,KAAK,CAAC,EAAE,CAAC;CAE5E,IAAI,QAAQ,KAAK,QACf,MAAM,SAAS,EAAE,MAAM,WAAW,eAAe,EAAE,CAAC;CAEtD,OAAO;EAAE,MAAM,iBAAiB,OAAO;EAAG;CAAQ;AACpD;AAEA,eAAsB,aAAa,MAAqB;CACtD,MAAM,SAAS,MAAM,eAAe,IAAI;CACxC,IAAI,OAAO,QAAQ,MAAM,SAAS,SAChC,MAAM,SAAS,EAAE,IAAI,aAAa,CAAC;CAErC,OAAO;AACT;;;;;;AAOA,eAAsB,0BAA0B,aAA0B;CACxE,MAAM,YAAY,cAAc;CAChC,YAAY,MAAM;CAClB,YAAY,aAAa,iBAAiB,IAAI;AAChD"}
|