everything-dev 1.53.1 → 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/near-cli.mjs
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Data, Effect } from "effect";
|
|
2
2
|
import { generateKeyPairSync } from "node:crypto";
|
|
3
|
-
import { Effect } from "effect";
|
|
4
3
|
import { execa } from "execa";
|
|
5
4
|
|
|
6
5
|
//#region src/near-cli.ts
|
|
7
6
|
const INSTALLER_URL = `https://github.com/near/near-cli-rs/releases/download/v0.23.5/near-cli-rs-installer.sh`;
|
|
8
7
|
const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
9
|
-
var NearCliNotFoundError = class extends
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
super("NEAR CLI not found");
|
|
8
|
+
var NearCliNotFoundError = class extends Data.TaggedError("NearCliNotFoundError") {
|
|
9
|
+
get message() {
|
|
10
|
+
return "NEAR CLI not found";
|
|
13
11
|
}
|
|
14
12
|
};
|
|
15
|
-
var NearTransactionError = class extends
|
|
16
|
-
|
|
13
|
+
var NearTransactionError = class extends Data.TaggedError("NearTransactionError") {
|
|
14
|
+
constructor(detail) {
|
|
15
|
+
super({ detail });
|
|
16
|
+
}
|
|
17
|
+
get message() {
|
|
18
|
+
return this.detail;
|
|
19
|
+
}
|
|
17
20
|
};
|
|
18
21
|
function base64UrlToBytes(input) {
|
|
19
22
|
const normalized = input.replace(/-/g, "+").replace(/_/g, "/");
|
|
@@ -55,54 +58,25 @@ function generateNearKeyPair() {
|
|
|
55
58
|
privateKey: `ed25519:${base58Encode(secretBytes)}`
|
|
56
59
|
};
|
|
57
60
|
}
|
|
58
|
-
|
|
59
|
-
try
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
catch: () => /* @__PURE__ */ new Error("Failed to check NEAR CLI")
|
|
68
|
-
});
|
|
69
|
-
async function runNearCommand(args) {
|
|
70
|
-
if (!process.stdin.isTTY) throw new NearTransactionError("No TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.");
|
|
71
|
-
await execa("near", args, {
|
|
72
|
-
stdin: "inherit",
|
|
73
|
-
stdout: "inherit",
|
|
74
|
-
stderr: "inherit"
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
function resolveNearSigningMode(privateKey) {
|
|
78
|
-
if (privateKey) return {
|
|
79
|
-
_tag: "privateKey",
|
|
80
|
-
privateKey
|
|
81
|
-
};
|
|
82
|
-
if (!process.stdin.isTTY) throw new NearTransactionError("No private key provided and no TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.");
|
|
83
|
-
console.log(colors.yellow(" Warning: No NEAR_PRIVATE_KEY set — falling back to interactive keychain signing."));
|
|
84
|
-
return { _tag: "interactiveKeychain" };
|
|
61
|
+
async function isNearCliInstalled() {
|
|
62
|
+
try {
|
|
63
|
+
await execa("near", ["--version"], { stdio: "pipe" });
|
|
64
|
+
return true;
|
|
65
|
+
} catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
85
68
|
}
|
|
86
|
-
const ensureNearCli = Effect.gen(function* () {
|
|
87
|
-
if (yield* checkNearCliInstalled) return;
|
|
88
|
-
console.log();
|
|
89
|
-
console.log(" NEAR CLI not found");
|
|
90
|
-
console.log();
|
|
91
|
-
console.log(` To install manually: curl --proto '=https' --tlsv1.2 -LsSf ${INSTALLER_URL} | sh`);
|
|
92
|
-
console.log();
|
|
93
|
-
yield* Effect.fail(new NearCliNotFoundError());
|
|
94
|
-
});
|
|
95
69
|
function combineNearOutput(stdout, stderr) {
|
|
96
70
|
return [stdout, stderr].filter((value) => value && value.trim().length > 0).join("\n");
|
|
97
71
|
}
|
|
98
72
|
function extractTransactionHash(output) {
|
|
99
73
|
return output.match(/Transaction ID:\s*([A-Za-z0-9]+)/i)?.[1];
|
|
100
74
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const gas =
|
|
104
|
-
const deposit =
|
|
105
|
-
const
|
|
75
|
+
async function executeKeychainTransaction(config) {
|
|
76
|
+
if (!process.stdin.isTTY) throw new NearTransactionError("No TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.");
|
|
77
|
+
const gas = "300Tgas";
|
|
78
|
+
const deposit = "0NEAR";
|
|
79
|
+
const argsBase64 = Buffer.from(JSON.stringify(config.args)).toString("base64");
|
|
106
80
|
const args = [
|
|
107
81
|
"contract",
|
|
108
82
|
"call-function",
|
|
@@ -110,7 +84,7 @@ const executeTransaction = (config, signingMode) => Effect.gen(function* () {
|
|
|
110
84
|
config.contract,
|
|
111
85
|
config.method,
|
|
112
86
|
"base64-args",
|
|
113
|
-
|
|
87
|
+
argsBase64,
|
|
114
88
|
"prepaid-gas",
|
|
115
89
|
gas,
|
|
116
90
|
"attached-deposit",
|
|
@@ -118,48 +92,42 @@ const executeTransaction = (config, signingMode) => Effect.gen(function* () {
|
|
|
118
92
|
"sign-as",
|
|
119
93
|
config.account,
|
|
120
94
|
"network-config",
|
|
121
|
-
network
|
|
95
|
+
config.network,
|
|
96
|
+
"sign-with-keychain",
|
|
97
|
+
"send"
|
|
122
98
|
];
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const proc = execa("near", args, {
|
|
130
|
-
stdin: isPrivateKeyMode ? "ignore" : "inherit",
|
|
131
|
-
stdout: "pipe",
|
|
132
|
-
stderr: "pipe",
|
|
133
|
-
reject: false,
|
|
134
|
-
timeout: 300 * 1e3
|
|
135
|
-
});
|
|
136
|
-
proc.stdout?.on("data", (chunk) => {
|
|
137
|
-
if (verbose) process.stdout.write(chunk);
|
|
138
|
-
});
|
|
139
|
-
proc.stderr?.on("data", (chunk) => {
|
|
140
|
-
if (verbose) process.stderr.write(chunk);
|
|
141
|
-
});
|
|
142
|
-
const result = await proc;
|
|
143
|
-
const combined = combineNearOutput(result.stdout ?? "", result.stderr ?? "");
|
|
144
|
-
const txHash = extractTransactionHash(combined);
|
|
145
|
-
const hasCodeDoesNotExist = /CodeDoesNotExist/i.test(combined);
|
|
146
|
-
if (result.exitCode === 0 || hasCodeDoesNotExist) {
|
|
147
|
-
if (hasCodeDoesNotExist) console.log(` ${colors.green("✓")} Transaction confirmed${txHash ? ` ${colors.dim(txHash)}` : ""}`);
|
|
148
|
-
return {
|
|
149
|
-
success: true,
|
|
150
|
-
txHash,
|
|
151
|
-
output: combined || void 0
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
throw new NearTransactionError(combined || `Transaction failed with code ${result.exitCode}`);
|
|
155
|
-
},
|
|
156
|
-
catch: (error) => error
|
|
99
|
+
const result = await execa("near", args, {
|
|
100
|
+
stdin: "inherit",
|
|
101
|
+
stdout: "pipe",
|
|
102
|
+
stderr: "pipe",
|
|
103
|
+
reject: false,
|
|
104
|
+
timeout: 3e5
|
|
157
105
|
});
|
|
158
|
-
|
|
106
|
+
const combined = combineNearOutput(result.stdout, result.stderr);
|
|
107
|
+
const txHash = extractTransactionHash(combined);
|
|
108
|
+
const hasCodeDoesNotExist = /CodeDoesNotExist/i.test(combined);
|
|
109
|
+
if (result.exitCode === 0 || hasCodeDoesNotExist) return {
|
|
159
110
|
success: true,
|
|
160
|
-
txHash
|
|
161
|
-
output: output.output
|
|
111
|
+
txHash
|
|
162
112
|
};
|
|
113
|
+
throw new NearTransactionError(combined || `Transaction failed with code ${result.exitCode}`);
|
|
114
|
+
}
|
|
115
|
+
async function runNearCommand(args) {
|
|
116
|
+
if (!process.stdin.isTTY) throw new NearTransactionError("No TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.");
|
|
117
|
+
await execa("near", args, {
|
|
118
|
+
stdin: "inherit",
|
|
119
|
+
stdout: "inherit",
|
|
120
|
+
stderr: "inherit"
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const ensureNearCli = Effect.gen(function* () {
|
|
124
|
+
if (yield* Effect.promise(() => isNearCliInstalled())) return;
|
|
125
|
+
yield* Effect.log("");
|
|
126
|
+
yield* Effect.log(" NEAR CLI not found");
|
|
127
|
+
yield* Effect.log("");
|
|
128
|
+
yield* Effect.log(` To install manually: curl --proto '=https' --tlsv1.2 -LsSf ${INSTALLER_URL} | sh`);
|
|
129
|
+
yield* Effect.log("");
|
|
130
|
+
return yield* new NearCliNotFoundError({});
|
|
163
131
|
});
|
|
164
132
|
async function listPublishKeys(config) {
|
|
165
133
|
const listResult = await execa("near", [
|
|
@@ -197,7 +165,7 @@ async function deleteAccessKeys(account, publicKeys, network) {
|
|
|
197
165
|
]);
|
|
198
166
|
}
|
|
199
167
|
async function addFunctionCallAccessKey(config) {
|
|
200
|
-
const keyPair = generateNearKeyPair();
|
|
168
|
+
const keyPair = config.keyPair ?? generateNearKeyPair();
|
|
201
169
|
await runNearCommand([
|
|
202
170
|
"account",
|
|
203
171
|
"add-key",
|
|
@@ -220,5 +188,5 @@ async function addFunctionCallAccessKey(config) {
|
|
|
220
188
|
}
|
|
221
189
|
|
|
222
190
|
//#endregion
|
|
223
|
-
export { NearCliNotFoundError, NearTransactionError, addFunctionCallAccessKey, deleteAccessKeys, ensureNearCli,
|
|
191
|
+
export { NearCliNotFoundError, NearTransactionError, addFunctionCallAccessKey, deleteAccessKeys, ensureNearCli, executeKeychainTransaction, generateNearKeyPair, isNearCliInstalled, listPublishKeys };
|
|
224
192
|
//# sourceMappingURL=near-cli.mjs.map
|
package/dist/near-cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"near-cli.mjs","names":[],"sources":["../src/near-cli.ts"],"sourcesContent":["import { generateKeyPairSync } from \"node:crypto\";\nimport { Effect } from \"effect\";\nimport { execa } from \"execa\";\nimport { colors } from \"./utils/theme\";\n\nexport interface NearTransactionConfig {\n account: string;\n contract: string;\n method: string;\n argsBase64: string;\n network?: \"mainnet\" | \"testnet\";\n privateKey?: string;\n gas?: string;\n deposit?: string;\n verbose?: boolean;\n}\n\nexport interface NearTransactionResult {\n success: true;\n txHash?: string;\n output?: string;\n}\n\nexport interface NearKeyPair {\n publicKey: string;\n privateKey: string;\n}\n\nexport interface FunctionCallAccessKeyConfig {\n account: string;\n contract: string;\n allowance: string;\n functionNames: string[];\n network?: \"mainnet\" | \"testnet\";\n}\n\nconst NEAR_CLI_VERSION = \"0.23.5\";\nconst INSTALLER_URL = `https://github.com/near/near-cli-rs/releases/download/v${NEAR_CLI_VERSION}/near-cli-rs-installer.sh`;\nconst BASE58_ALPHABET = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n\nexport class NearCliNotFoundError extends Error {\n readonly _tag = \"NearCliNotFoundError\";\n constructor() {\n super(\"NEAR CLI not found\");\n }\n}\n\nexport class NearTransactionError extends Error {\n readonly _tag = \"NearTransactionError\";\n}\n\nexport type NearSigningMode =\n | { _tag: \"privateKey\"; privateKey: string }\n | { _tag: \"interactiveKeychain\" };\n\nfunction base64UrlToBytes(input: string): Uint8Array {\n const normalized = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n return new Uint8Array(Buffer.from(normalized, \"base64\"));\n}\n\nfunction base58Encode(input: Uint8Array): string {\n if (input.length === 0) return \"\";\n\n const digits: number[] = [0];\n for (const byte of input) {\n let carry = byte;\n for (let i = 0; i < digits.length; i++) {\n carry += digits[i]! << 8;\n digits[i] = carry % 58;\n carry = Math.floor(carry / 58);\n }\n while (carry > 0) {\n digits.push(carry % 58);\n carry = Math.floor(carry / 58);\n }\n }\n\n let output = \"\";\n for (const byte of input) {\n if (byte === 0) output += BASE58_ALPHABET[0];\n else break;\n }\n\n for (let i = digits.length - 1; i >= 0; i--) {\n output += BASE58_ALPHABET[digits[i]!]!;\n }\n\n return output;\n}\n\nexport function generateNearKeyPair(): NearKeyPair {\n const { publicKey, privateKey } = generateKeyPairSync(\"ed25519\");\n const publicJwk = publicKey.export({ format: \"jwk\" }) as JsonWebKey;\n const privateJwk = privateKey.export({ format: \"jwk\" }) as JsonWebKey;\n\n if (!publicJwk.x || !privateJwk.d) {\n throw new Error(\"Failed to generate NEAR keypair\");\n }\n\n const publicBytes = base64UrlToBytes(publicJwk.x);\n const privateSeed = base64UrlToBytes(privateJwk.d);\n const secretBytes = new Uint8Array(privateSeed.length + publicBytes.length);\n secretBytes.set(privateSeed, 0);\n secretBytes.set(publicBytes, privateSeed.length);\n\n return {\n publicKey: `ed25519:${base58Encode(publicBytes)}`,\n privateKey: `ed25519:${base58Encode(secretBytes)}`,\n };\n}\n\nconst checkNearCliInstalled = Effect.tryPromise({\n try: async () => {\n try {\n await execa(\"near\", [\"--version\"], { stdio: \"pipe\" });\n return true;\n } catch {\n return false;\n }\n },\n catch: () => new Error(\"Failed to check NEAR CLI\"),\n});\n\nasync function runNearCommand(args: string[]): Promise<void> {\n if (!process.stdin.isTTY) {\n throw new NearTransactionError(\n \"No TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.\",\n );\n }\n\n await execa(\"near\", args, { stdin: \"inherit\", stdout: \"inherit\", stderr: \"inherit\" });\n}\n\nexport function resolveNearSigningMode(privateKey?: string): NearSigningMode {\n if (privateKey) {\n return { _tag: \"privateKey\", privateKey };\n }\n\n if (!process.stdin.isTTY) {\n throw new NearTransactionError(\n \"No private key provided and no TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.\",\n );\n }\n\n console.log(\n colors.yellow(\n \" Warning: No NEAR_PRIVATE_KEY set — falling back to interactive keychain signing.\",\n ),\n );\n return { _tag: \"interactiveKeychain\" };\n}\n\nexport const ensureNearCli = Effect.gen(function* () {\n const isInstalled = yield* checkNearCliInstalled;\n if (isInstalled) return;\n\n console.log();\n console.log(\" NEAR CLI not found\");\n\n console.log();\n console.log(` To install manually: curl --proto '=https' --tlsv1.2 -LsSf ${INSTALLER_URL} | sh`);\n console.log();\n yield* Effect.fail(new NearCliNotFoundError());\n});\n\nfunction combineNearOutput(stdout?: string, stderr?: string): string {\n return [stdout, stderr].filter((value) => value && value.trim().length > 0).join(\"\\n\");\n}\n\nfunction extractTransactionHash(output: string): string | undefined {\n const match = output.match(/Transaction ID:\\s*([A-Za-z0-9]+)/i);\n return match?.[1];\n}\n\nexport const executeTransaction = (\n config: NearTransactionConfig,\n signingMode?: NearSigningMode,\n): Effect.Effect<NearTransactionResult, Error> =>\n Effect.gen(function* () {\n const resolvedSigningMode = signingMode ?? resolveNearSigningMode(config.privateKey);\n const gas = (config.gas || \"300Tgas\").replace(/\\s+/g, \"\");\n const deposit = (config.deposit || \"0NEAR\").replace(/\\s+/g, \"\");\n const network = config.network || (config.account.endsWith(\".testnet\") ? \"testnet\" : \"mainnet\");\n\n const args = [\n \"contract\",\n \"call-function\",\n \"as-transaction\",\n config.contract,\n config.method,\n \"base64-args\",\n config.argsBase64,\n \"prepaid-gas\",\n gas,\n \"attached-deposit\",\n deposit,\n \"sign-as\",\n config.account,\n \"network-config\",\n network,\n ];\n\n if (resolvedSigningMode._tag === \"privateKey\") {\n args.push(\"sign-with-plaintext-private-key\", resolvedSigningMode.privateKey, \"send\");\n } else {\n args.push(\"sign-with-keychain\", \"send\");\n }\n\n const output = yield* Effect.tryPromise({\n try: async () => {\n const isPrivateKeyMode = resolvedSigningMode._tag === \"privateKey\";\n const verbose = config.verbose ?? false;\n\n const proc = execa(\"near\", args, {\n stdin: isPrivateKeyMode ? \"ignore\" : \"inherit\",\n stdout: \"pipe\",\n stderr: \"pipe\",\n reject: false,\n timeout: 5 * 60 * 1000,\n });\n\n proc.stdout?.on(\"data\", (chunk: Buffer) => {\n if (verbose) {\n process.stdout.write(chunk);\n }\n });\n\n proc.stderr?.on(\"data\", (chunk: Buffer) => {\n if (verbose) {\n process.stderr.write(chunk);\n }\n });\n\n const result = await proc;\n const stdoutStr = result.stdout ?? \"\";\n const stderrStr = result.stderr ?? \"\";\n const combined = combineNearOutput(stdoutStr, stderrStr);\n const txHash = extractTransactionHash(combined);\n const hasCodeDoesNotExist = /CodeDoesNotExist/i.test(combined);\n\n if (result.exitCode === 0 || hasCodeDoesNotExist) {\n if (hasCodeDoesNotExist) {\n console.log(\n ` ${colors.green(\"✓\")} Transaction confirmed${txHash ? ` ${colors.dim(txHash)}` : \"\"}`,\n );\n }\n return {\n success: true,\n txHash,\n output: combined || undefined,\n };\n }\n\n throw new NearTransactionError(\n combined || `Transaction failed with code ${result.exitCode}`,\n );\n },\n catch: (error) => error as Error,\n });\n\n return {\n success: true,\n txHash: output.txHash,\n output: output.output,\n };\n });\n\nexport async function listPublishKeys(config: {\n account: string;\n contract: string;\n network: \"mainnet\" | \"testnet\";\n}): Promise<string[]> {\n const listResult = await execa(\n \"near\",\n [\"account\", \"list-keys\", config.account, \"network-config\", config.network, \"now\"],\n { stdout: \"pipe\", stderr: \"pipe\", reject: false },\n );\n\n if (listResult.exitCode !== 0) {\n throw new NearTransactionError(\n `Failed to list account keys: ${listResult.stderr || listResult.stdout || \"unknown error\"}`,\n );\n }\n\n const output = listResult.stdout ?? \"\";\n const oldKeys: string[] = [];\n\n for (const line of output.split(\"\\n\")) {\n if (line.includes(config.contract) && line.includes(\"__fastdata_kv\")) {\n const match = line.match(/ed25519:[A-Za-z0-9]+/);\n if (match) {\n oldKeys.push(match[0]);\n }\n }\n }\n\n return oldKeys;\n}\n\nexport async function deleteAccessKeys(\n account: string,\n publicKeys: string[],\n network: \"mainnet\" | \"testnet\",\n): Promise<void> {\n const args = [\n \"account\",\n \"delete-keys\",\n account,\n \"public-keys\",\n publicKeys.join(\",\"),\n \"network-config\",\n network,\n \"sign-with-keychain\",\n \"send\",\n ];\n await runNearCommand(args);\n}\n\nexport async function addFunctionCallAccessKey(\n config: FunctionCallAccessKeyConfig,\n): Promise<NearKeyPair> {\n const keyPair = generateNearKeyPair();\n const args = [\n \"account\",\n \"add-key\",\n config.account,\n \"grant-function-call-access\",\n \"--allowance\",\n config.allowance,\n \"--contract-account-id\",\n config.contract,\n \"--function-names\",\n config.functionNames.join(\", \"),\n \"use-manually-provided-public-key\",\n keyPair.publicKey,\n \"network-config\",\n config.network || (config.account.endsWith(\".testnet\") ? \"testnet\" : \"mainnet\"),\n \"sign-with-keychain\",\n \"send\",\n ];\n\n await runNearCommand(args);\n return keyPair;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"near-cli.mjs","names":[],"sources":["../src/near-cli.ts"],"sourcesContent":["import { generateKeyPairSync } from \"node:crypto\";\nimport { Data, Effect } from \"effect\";\nimport { execa } from \"execa\";\n\nexport interface NearKeyPair {\n publicKey: string;\n privateKey: string;\n}\n\nexport interface KeychainTransactionConfig {\n account: string;\n contract: string;\n method: string;\n args: Record<string, string>;\n network: \"mainnet\" | \"testnet\";\n verbose?: boolean;\n}\n\nexport interface KeychainTransactionResult {\n success: true;\n txHash?: string;\n}\n\nexport interface FunctionCallAccessKeyConfig {\n account: string;\n contract: string;\n allowance: string;\n functionNames: string[];\n network?: \"mainnet\" | \"testnet\";\n keyPair?: NearKeyPair;\n}\n\nconst NEAR_CLI_VERSION = \"0.23.5\";\nconst INSTALLER_URL = `https://github.com/near/near-cli-rs/releases/download/v${NEAR_CLI_VERSION}/near-cli-rs-installer.sh`;\nconst BASE58_ALPHABET = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n\nexport class NearCliNotFoundError extends Data.TaggedError(\"NearCliNotFoundError\")<{\n readonly detail?: string;\n}> {\n override get message() {\n return \"NEAR CLI not found\";\n }\n}\n\nexport class NearTransactionError extends Data.TaggedError(\"NearTransactionError\")<{\n readonly detail: string;\n}> {\n constructor(detail: string) {\n super({ detail });\n }\n\n override get message() {\n return this.detail;\n }\n}\n\nfunction base64UrlToBytes(input: string): Uint8Array {\n const normalized = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n return new Uint8Array(Buffer.from(normalized, \"base64\"));\n}\n\nfunction base58Encode(input: Uint8Array): string {\n if (input.length === 0) return \"\";\n\n const digits: number[] = [0];\n for (const byte of input) {\n let carry = byte;\n for (let i = 0; i < digits.length; i++) {\n carry += digits[i]! << 8;\n digits[i] = carry % 58;\n carry = Math.floor(carry / 58);\n }\n while (carry > 0) {\n digits.push(carry % 58);\n carry = Math.floor(carry / 58);\n }\n }\n\n let output = \"\";\n for (const byte of input) {\n if (byte === 0) output += BASE58_ALPHABET[0];\n else break;\n }\n\n for (let i = digits.length - 1; i >= 0; i--) {\n output += BASE58_ALPHABET[digits[i]!]!;\n }\n\n return output;\n}\n\nexport function generateNearKeyPair(): NearKeyPair {\n const { publicKey, privateKey } = generateKeyPairSync(\"ed25519\");\n const publicJwk = publicKey.export({ format: \"jwk\" }) as JsonWebKey;\n const privateJwk = privateKey.export({ format: \"jwk\" }) as JsonWebKey;\n\n if (!publicJwk.x || !privateJwk.d) {\n throw new Error(\"Failed to generate NEAR keypair\");\n }\n\n const publicBytes = base64UrlToBytes(publicJwk.x);\n const privateSeed = base64UrlToBytes(privateJwk.d);\n const secretBytes = new Uint8Array(privateSeed.length + publicBytes.length);\n secretBytes.set(privateSeed, 0);\n secretBytes.set(publicBytes, privateSeed.length);\n\n return {\n publicKey: `ed25519:${base58Encode(publicBytes)}`,\n privateKey: `ed25519:${base58Encode(secretBytes)}`,\n };\n}\n\nexport async function isNearCliInstalled(): Promise<boolean> {\n try {\n await execa(\"near\", [\"--version\"], { stdio: \"pipe\" });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction combineNearOutput(stdout?: string, stderr?: string): string {\n return [stdout, stderr].filter((value) => value && value.trim().length > 0).join(\"\\n\");\n}\n\nfunction extractTransactionHash(output: string): string | undefined {\n const match = output.match(/Transaction ID:\\s*([A-Za-z0-9]+)/i);\n return match?.[1];\n}\n\nexport async function executeKeychainTransaction(\n config: KeychainTransactionConfig,\n): Promise<KeychainTransactionResult> {\n if (!process.stdin.isTTY) {\n throw new NearTransactionError(\n \"No TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.\",\n );\n }\n\n const gas = \"300Tgas\";\n const deposit = \"0NEAR\";\n const argsBase64 = Buffer.from(JSON.stringify(config.args)).toString(\"base64\");\n\n const args = [\n \"contract\",\n \"call-function\",\n \"as-transaction\",\n config.contract,\n config.method,\n \"base64-args\",\n argsBase64,\n \"prepaid-gas\",\n gas,\n \"attached-deposit\",\n deposit,\n \"sign-as\",\n config.account,\n \"network-config\",\n config.network,\n \"sign-with-keychain\",\n \"send\",\n ];\n\n const result = await execa(\"near\", args, {\n stdin: \"inherit\",\n stdout: \"pipe\",\n stderr: \"pipe\",\n reject: false,\n timeout: 5 * 60 * 1000,\n });\n\n const combined = combineNearOutput(result.stdout, result.stderr);\n const txHash = extractTransactionHash(combined);\n const hasCodeDoesNotExist = /CodeDoesNotExist/i.test(combined);\n\n if (result.exitCode === 0 || hasCodeDoesNotExist) {\n return { success: true, txHash };\n }\n\n throw new NearTransactionError(combined || `Transaction failed with code ${result.exitCode}`);\n}\n\nasync function runNearCommand(args: string[]): Promise<void> {\n if (!process.stdin.isTTY) {\n throw new NearTransactionError(\n \"No TTY available for keychain signing. Set NEAR_PRIVATE_KEY environment variable to sign locally.\",\n );\n }\n\n await execa(\"near\", args, { stdin: \"inherit\", stdout: \"inherit\", stderr: \"inherit\" });\n}\n\nexport const ensureNearCli = Effect.gen(function* () {\n const isInstalled = yield* Effect.promise(() => isNearCliInstalled());\n if (isInstalled) return;\n\n yield* Effect.log(\"\");\n yield* Effect.log(\" NEAR CLI not found\");\n yield* Effect.log(\"\");\n yield* Effect.log(\n ` To install manually: curl --proto '=https' --tlsv1.2 -LsSf ${INSTALLER_URL} | sh`,\n );\n yield* Effect.log(\"\");\n return yield* new NearCliNotFoundError({});\n});\n\nexport async function listPublishKeys(config: {\n account: string;\n contract: string;\n network: \"mainnet\" | \"testnet\";\n}): Promise<string[]> {\n const listResult = await execa(\n \"near\",\n [\"account\", \"list-keys\", config.account, \"network-config\", config.network, \"now\"],\n { stdout: \"pipe\", stderr: \"pipe\", reject: false },\n );\n\n if (listResult.exitCode !== 0) {\n throw new NearTransactionError(\n `Failed to list account keys: ${listResult.stderr || listResult.stdout || \"unknown error\"}`,\n );\n }\n\n const output = listResult.stdout ?? \"\";\n const oldKeys: string[] = [];\n\n for (const line of output.split(\"\\n\")) {\n if (line.includes(config.contract) && line.includes(\"__fastdata_kv\")) {\n const match = line.match(/ed25519:[A-Za-z0-9]+/);\n if (match) {\n oldKeys.push(match[0]);\n }\n }\n }\n\n return oldKeys;\n}\n\nexport async function deleteAccessKeys(\n account: string,\n publicKeys: string[],\n network: \"mainnet\" | \"testnet\",\n): Promise<void> {\n const args = [\n \"account\",\n \"delete-keys\",\n account,\n \"public-keys\",\n publicKeys.join(\",\"),\n \"network-config\",\n network,\n \"sign-with-keychain\",\n \"send\",\n ];\n await runNearCommand(args);\n}\n\nexport async function addFunctionCallAccessKey(\n config: FunctionCallAccessKeyConfig,\n): Promise<NearKeyPair> {\n const keyPair = config.keyPair ?? generateNearKeyPair();\n const args = [\n \"account\",\n \"add-key\",\n config.account,\n \"grant-function-call-access\",\n \"--allowance\",\n config.allowance,\n \"--contract-account-id\",\n config.contract,\n \"--function-names\",\n config.functionNames.join(\", \"),\n \"use-manually-provided-public-key\",\n keyPair.publicKey,\n \"network-config\",\n config.network || (config.account.endsWith(\".testnet\") ? \"testnet\" : \"mainnet\"),\n \"sign-with-keychain\",\n \"send\",\n ];\n\n await runNearCommand(args);\n return keyPair;\n}\n"],"mappings":";;;;;AAiCA,MAAM,gBAAgB;AACtB,MAAM,kBAAkB;AAExB,IAAa,uBAAb,cAA0C,KAAK,YAAY,sBAAsB,CAAC,CAE/E;CACD,IAAa,UAAU;EACrB,OAAO;CACT;AACF;AAEA,IAAa,uBAAb,cAA0C,KAAK,YAAY,sBAAsB,CAAC,CAE/E;CACD,YAAY,QAAgB;EAC1B,MAAM,EAAE,OAAO,CAAC;CAClB;CAEA,IAAa,UAAU;EACrB,OAAO,KAAK;CACd;AACF;AAEA,SAAS,iBAAiB,OAA2B;CACnD,MAAM,aAAa,MAAM,QAAQ,MAAM,GAAG,CAAC,CAAC,QAAQ,MAAM,GAAG;CAC7D,OAAO,IAAI,WAAW,OAAO,KAAK,YAAY,QAAQ,CAAC;AACzD;AAEA,SAAS,aAAa,OAA2B;CAC/C,IAAI,MAAM,WAAW,GAAG,OAAO;CAE/B,MAAM,SAAmB,CAAC,CAAC;CAC3B,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,QAAQ;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACtC,SAAS,OAAO,MAAO;GACvB,OAAO,KAAK,QAAQ;GACpB,QAAQ,KAAK,MAAM,QAAQ,EAAE;EAC/B;EACA,OAAO,QAAQ,GAAG;GAChB,OAAO,KAAK,QAAQ,EAAE;GACtB,QAAQ,KAAK,MAAM,QAAQ,EAAE;EAC/B;CACF;CAEA,IAAI,SAAS;CACb,KAAK,MAAM,QAAQ,OACjB,IAAI,SAAS,GAAG,UAAU,gBAAgB;MACrC;CAGP,KAAK,IAAI,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KACtC,UAAU,gBAAgB,OAAO;CAGnC,OAAO;AACT;AAEA,SAAgB,sBAAmC;CACjD,MAAM,EAAE,WAAW,eAAe,oBAAoB,SAAS;CAC/D,MAAM,YAAY,UAAU,OAAO,EAAE,QAAQ,MAAM,CAAC;CACpD,MAAM,aAAa,WAAW,OAAO,EAAE,QAAQ,MAAM,CAAC;CAEtD,IAAI,CAAC,UAAU,KAAK,CAAC,WAAW,GAC9B,MAAM,IAAI,MAAM,iCAAiC;CAGnD,MAAM,cAAc,iBAAiB,UAAU,CAAC;CAChD,MAAM,cAAc,iBAAiB,WAAW,CAAC;CACjD,MAAM,cAAc,IAAI,WAAW,YAAY,SAAS,YAAY,MAAM;CAC1E,YAAY,IAAI,aAAa,CAAC;CAC9B,YAAY,IAAI,aAAa,YAAY,MAAM;CAE/C,OAAO;EACL,WAAW,WAAW,aAAa,WAAW;EAC9C,YAAY,WAAW,aAAa,WAAW;CACjD;AACF;AAEA,eAAsB,qBAAuC;CAC3D,IAAI;EACF,MAAM,MAAM,QAAQ,CAAC,WAAW,GAAG,EAAE,OAAO,OAAO,CAAC;EACpD,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,kBAAkB,QAAiB,QAAyB;CACnE,OAAO,CAAC,QAAQ,MAAM,CAAC,CAAC,QAAQ,UAAU,SAAS,MAAM,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI;AACvF;AAEA,SAAS,uBAAuB,QAAoC;CAElE,OADc,OAAO,MAAM,mCAChB,CAAC,GAAG;AACjB;AAEA,eAAsB,2BACpB,QACoC;CACpC,IAAI,CAAC,QAAQ,MAAM,OACjB,MAAM,IAAI,qBACR,mGACF;CAGF,MAAM,MAAM;CACZ,MAAM,UAAU;CAChB,MAAM,aAAa,OAAO,KAAK,KAAK,UAAU,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ;CAE7E,MAAM,OAAO;EACX;EACA;EACA;EACA,OAAO;EACP,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO;EACP;EACA,OAAO;EACP;EACA;CACF;CAEA,MAAM,SAAS,MAAM,MAAM,QAAQ,MAAM;EACvC,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,SAAS;CACX,CAAC;CAED,MAAM,WAAW,kBAAkB,OAAO,QAAQ,OAAO,MAAM;CAC/D,MAAM,SAAS,uBAAuB,QAAQ;CAC9C,MAAM,sBAAsB,oBAAoB,KAAK,QAAQ;CAE7D,IAAI,OAAO,aAAa,KAAK,qBAC3B,OAAO;EAAE,SAAS;EAAM;CAAO;CAGjC,MAAM,IAAI,qBAAqB,YAAY,gCAAgC,OAAO,UAAU;AAC9F;AAEA,eAAe,eAAe,MAA+B;CAC3D,IAAI,CAAC,QAAQ,MAAM,OACjB,MAAM,IAAI,qBACR,mGACF;CAGF,MAAM,MAAM,QAAQ,MAAM;EAAE,OAAO;EAAW,QAAQ;EAAW,QAAQ;CAAU,CAAC;AACtF;AAEA,MAAa,gBAAgB,OAAO,IAAI,aAAa;CAEnD,IAAI,OADuB,OAAO,cAAc,mBAAmB,CAAC,GACnD;CAEjB,OAAO,OAAO,IAAI,EAAE;CACpB,OAAO,OAAO,IAAI,sBAAsB;CACxC,OAAO,OAAO,IAAI,EAAE;CACpB,OAAO,OAAO,IACZ,gEAAgE,cAAc,MAChF;CACA,OAAO,OAAO,IAAI,EAAE;CACpB,OAAO,OAAO,IAAI,qBAAqB,CAAC,CAAC;AAC3C,CAAC;AAED,eAAsB,gBAAgB,QAIhB;CACpB,MAAM,aAAa,MAAM,MACvB,QACA;EAAC;EAAW;EAAa,OAAO;EAAS;EAAkB,OAAO;EAAS;CAAK,GAChF;EAAE,QAAQ;EAAQ,QAAQ;EAAQ,QAAQ;CAAM,CAClD;CAEA,IAAI,WAAW,aAAa,GAC1B,MAAM,IAAI,qBACR,gCAAgC,WAAW,UAAU,WAAW,UAAU,iBAC5E;CAGF,MAAM,SAAS,WAAW,UAAU;CACpC,MAAM,UAAoB,CAAC;CAE3B,KAAK,MAAM,QAAQ,OAAO,MAAM,IAAI,GAClC,IAAI,KAAK,SAAS,OAAO,QAAQ,KAAK,KAAK,SAAS,eAAe,GAAG;EACpE,MAAM,QAAQ,KAAK,MAAM,sBAAsB;EAC/C,IAAI,OACF,QAAQ,KAAK,MAAM,EAAE;CAEzB;CAGF,OAAO;AACT;AAEA,eAAsB,iBACpB,SACA,YACA,SACe;CAYf,MAAM,eAAe;EAVnB;EACA;EACA;EACA;EACA,WAAW,KAAK,GAAG;EACnB;EACA;EACA;EACA;CAEsB,CAAC;AAC3B;AAEA,eAAsB,yBACpB,QACsB;CACtB,MAAM,UAAU,OAAO,WAAW,oBAAoB;CAoBtD,MAAM,eAAe;EAlBnB;EACA;EACA,OAAO;EACP;EACA;EACA,OAAO;EACP;EACA,OAAO;EACP;EACA,OAAO,cAAc,KAAK,IAAI;EAC9B;EACA,QAAQ;EACR;EACA,OAAO,YAAY,OAAO,QAAQ,SAAS,UAAU,IAAI,YAAY;EACrE;EACA;CAGsB,CAAC;CACzB,OAAO;AACT"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const require_near_cli = require('./near-cli.cjs');
|
|
2
|
+
let near_kit = require("near-kit");
|
|
3
|
+
let near_kit_keys_file = require("near-kit/keys/file");
|
|
4
|
+
|
|
5
|
+
//#region src/near-signer.ts
|
|
6
|
+
function assertPrivateKey(key) {
|
|
7
|
+
if (!(0, near_kit.isPrivateKey)(key)) throw new require_near_cli.NearTransactionError(`Invalid private key format: must start with "ed25519:" or "secp256k1:" (got a ${key.length}-character value).`);
|
|
8
|
+
return key;
|
|
9
|
+
}
|
|
10
|
+
async function resolveSigningKey(opts) {
|
|
11
|
+
const explicitKey = opts.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
|
|
12
|
+
if (explicitKey) return {
|
|
13
|
+
source: "provided",
|
|
14
|
+
privateKey: explicitKey
|
|
15
|
+
};
|
|
16
|
+
const keyPair = await new near_kit_keys_file.FileKeyStore("~/.near-credentials", opts.network).get(opts.account);
|
|
17
|
+
if (keyPair?.secretKey) return {
|
|
18
|
+
source: "credentials-file",
|
|
19
|
+
privateKey: keyPair.secretKey
|
|
20
|
+
};
|
|
21
|
+
throw new require_near_cli.NearTransactionError("No signing key available");
|
|
22
|
+
}
|
|
23
|
+
async function resolveSigningStrategy(opts) {
|
|
24
|
+
try {
|
|
25
|
+
const resolved = await resolveSigningKey(opts);
|
|
26
|
+
return {
|
|
27
|
+
strategy: "near-kit",
|
|
28
|
+
privateKey: resolved.privateKey,
|
|
29
|
+
source: resolved.source
|
|
30
|
+
};
|
|
31
|
+
} catch {}
|
|
32
|
+
if (process.stdin.isTTY && await require_near_cli.isNearCliInstalled()) return { strategy: "near-cli-keychain" };
|
|
33
|
+
throw new require_near_cli.NearTransactionError(`No signing key available for ${opts.account} on ${opts.network}. Set NEAR_PRIVATE_KEY (or BOS_NEAR_PRIVATE_KEY), store credentials at ~/.near-credentials/${opts.network}/${opts.account}.json, or sign with the near-cli-rs keychain (install it, then retry from an interactive terminal). Generate a publish key with: bos key generate`);
|
|
34
|
+
}
|
|
35
|
+
function describeSigningStrategy(strategy) {
|
|
36
|
+
if (strategy.strategy === "near-cli-keychain") return "near-cli-rs keychain";
|
|
37
|
+
return strategy.source === "provided" ? "the environment or --private-key flag" : `~/.near-credentials`;
|
|
38
|
+
}
|
|
39
|
+
async function submitWithNearKit(tx, privateKey) {
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
txHash: (await new near_kit.Near({
|
|
43
|
+
network: tx.network,
|
|
44
|
+
defaultSignerId: tx.account,
|
|
45
|
+
privateKey: assertPrivateKey(privateKey)
|
|
46
|
+
}).transaction(tx.account).functionCall(tx.contract, tx.method, tx.args, {
|
|
47
|
+
gas: "300 Tgas",
|
|
48
|
+
attachedDeposit: "0 yocto"
|
|
49
|
+
}).send({ waitUntil: "NONE" }))?.transaction?.hash,
|
|
50
|
+
signedWith: "env"
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async function submitRegistryWrite(tx, strategy) {
|
|
54
|
+
const resolved = strategy ?? await resolveSigningStrategy(tx);
|
|
55
|
+
if (resolved.strategy === "near-cli-keychain") return {
|
|
56
|
+
...await require_near_cli.executeKeychainTransaction({
|
|
57
|
+
account: tx.account,
|
|
58
|
+
contract: tx.contract,
|
|
59
|
+
method: tx.method,
|
|
60
|
+
args: tx.args,
|
|
61
|
+
network: tx.network
|
|
62
|
+
}),
|
|
63
|
+
signedWith: "near-cli-keychain"
|
|
64
|
+
};
|
|
65
|
+
return submitWithNearKit(tx, resolved.privateKey);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
exports.describeSigningStrategy = describeSigningStrategy;
|
|
70
|
+
exports.resolveSigningKey = resolveSigningKey;
|
|
71
|
+
exports.resolveSigningStrategy = resolveSigningStrategy;
|
|
72
|
+
exports.submitRegistryWrite = submitRegistryWrite;
|
|
73
|
+
//# sourceMappingURL=near-signer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"near-signer.cjs","names":["isPrivateKey","NearTransactionError","FileKeyStore","isNearCliInstalled","Near","executeKeychainTransaction"],"sources":["../src/near-signer.ts"],"sourcesContent":["import { isPrivateKey, Near, type PrivateKey } from \"near-kit\";\nimport { FileKeyStore } from \"near-kit/keys/file\";\n\nimport type { NetworkId } from \"./fastkv\";\nimport { executeKeychainTransaction, isNearCliInstalled, NearTransactionError } from \"./near-cli\";\n\nexport type SigningKeySource = \"provided\" | \"credentials-file\";\n\nexport interface ResolvedSigningKey {\n source: SigningKeySource;\n privateKey: string;\n}\n\nexport interface RegistryWriteRequest {\n account: string;\n contract: string;\n method: string;\n args: Record<string, string>;\n network: NetworkId;\n privateKey?: string;\n}\n\nexport type SigningStrategy =\n | { strategy: \"near-kit\"; privateKey: string; source: SigningKeySource }\n | { strategy: \"near-cli-keychain\" };\n\nexport interface NearTransactionResult {\n success: true;\n txHash?: string;\n signedWith: \"env\" | \"credentials-file\" | \"near-cli-keychain\";\n}\n\nfunction assertPrivateKey(key: string): PrivateKey {\n if (!isPrivateKey(key)) {\n throw new NearTransactionError(\n `Invalid private key format: must start with \"ed25519:\" or \"secp256k1:\" (got a ${key.length}-character value).`,\n );\n }\n return key as PrivateKey;\n}\n\nexport async function resolveSigningKey(opts: {\n privateKey?: string;\n account: string;\n network: NetworkId;\n}): Promise<ResolvedSigningKey> {\n const explicitKey =\n opts.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n if (explicitKey) {\n return { source: \"provided\", privateKey: explicitKey };\n }\n\n const keyStore = new FileKeyStore(\"~/.near-credentials\", opts.network);\n const keyPair = await keyStore.get(opts.account);\n if (keyPair?.secretKey) {\n return { source: \"credentials-file\", privateKey: keyPair.secretKey };\n }\n\n throw new NearTransactionError(\"No signing key available\");\n}\n\nexport async function resolveSigningStrategy(opts: {\n privateKey?: string;\n account: string;\n network: NetworkId;\n}): Promise<SigningStrategy> {\n try {\n const resolved = await resolveSigningKey(opts);\n return { strategy: \"near-kit\", privateKey: resolved.privateKey, source: resolved.source };\n } catch {\n // fall through to the near-cli-rs keychain\n }\n\n if (process.stdin.isTTY && (await isNearCliInstalled())) {\n return { strategy: \"near-cli-keychain\" };\n }\n\n throw new NearTransactionError(\n `No signing key available for ${opts.account} on ${opts.network}. ` +\n `Set NEAR_PRIVATE_KEY (or BOS_NEAR_PRIVATE_KEY), store credentials at ` +\n `~/.near-credentials/${opts.network}/${opts.account}.json, or sign with the ` +\n `near-cli-rs keychain (install it, then retry from an interactive terminal). ` +\n `Generate a publish key with: bos key generate`,\n );\n}\n\nexport function describeSigningStrategy(strategy: SigningStrategy): string {\n if (strategy.strategy === \"near-cli-keychain\") {\n return \"near-cli-rs keychain\";\n }\n return strategy.source === \"provided\"\n ? \"the environment or --private-key flag\"\n : `~/.near-credentials`;\n}\n\nasync function submitWithNearKit(\n tx: RegistryWriteRequest,\n privateKey: string,\n): Promise<NearTransactionResult> {\n const near = new Near({\n network: tx.network,\n defaultSignerId: tx.account,\n privateKey: assertPrivateKey(privateKey),\n });\n\n const outcome = await near\n .transaction(tx.account)\n .functionCall(tx.contract, tx.method, tx.args, {\n gas: \"300 Tgas\",\n attachedDeposit: \"0 yocto\",\n })\n .send({ waitUntil: \"NONE\" });\n\n return { success: true, txHash: outcome?.transaction?.hash, signedWith: \"env\" };\n}\n\nexport async function submitRegistryWrite(\n tx: RegistryWriteRequest,\n strategy?: SigningStrategy,\n): Promise<NearTransactionResult> {\n const resolved = strategy ?? (await resolveSigningStrategy(tx));\n\n if (resolved.strategy === \"near-cli-keychain\") {\n const result = await executeKeychainTransaction({\n account: tx.account,\n contract: tx.contract,\n method: tx.method,\n args: tx.args,\n network: tx.network,\n });\n return { ...result, signedWith: \"near-cli-keychain\" };\n }\n\n return submitWithNearKit(tx, resolved.privateKey);\n}\n"],"mappings":";;;;;AAgCA,SAAS,iBAAiB,KAAyB;CACjD,IAAI,KAACA,uBAAa,GAAG,GACnB,MAAM,IAAIC,sCACR,iFAAiF,IAAI,OAAO,mBAC9F;CAEF,OAAO;AACT;AAEA,eAAsB,kBAAkB,MAIR;CAC9B,MAAM,cACJ,KAAK,cAAc,QAAQ,IAAI,oBAAoB,QAAQ,IAAI;CACjE,IAAI,aACF,OAAO;EAAE,QAAQ;EAAY,YAAY;CAAY;CAIvD,MAAM,UAAU,MAAM,IADDC,gCAAa,uBAAuB,KAAK,OACjC,CAAC,CAAC,IAAI,KAAK,OAAO;CAC/C,IAAI,SAAS,WACX,OAAO;EAAE,QAAQ;EAAoB,YAAY,QAAQ;CAAU;CAGrE,MAAM,IAAID,sCAAqB,0BAA0B;AAC3D;AAEA,eAAsB,uBAAuB,MAIhB;CAC3B,IAAI;EACF,MAAM,WAAW,MAAM,kBAAkB,IAAI;EAC7C,OAAO;GAAE,UAAU;GAAY,YAAY,SAAS;GAAY,QAAQ,SAAS;EAAO;CAC1F,QAAQ,CAER;CAEA,IAAI,QAAQ,MAAM,SAAU,MAAME,oCAAmB,GACnD,OAAO,EAAE,UAAU,oBAAoB;CAGzC,MAAM,IAAIF,sCACR,gCAAgC,KAAK,QAAQ,MAAM,KAAK,QAAQ,6FAEvC,KAAK,QAAQ,GAAG,KAAK,QAAQ,kJAGxD;AACF;AAEA,SAAgB,wBAAwB,UAAmC;CACzE,IAAI,SAAS,aAAa,qBACxB,OAAO;CAET,OAAO,SAAS,WAAW,aACvB,0CACA;AACN;AAEA,eAAe,kBACb,IACA,YACgC;CAehC,OAAO;EAAE,SAAS;EAAM,SAAQ,MARV,IANLG,cAAK;GACpB,SAAS,GAAG;GACZ,iBAAiB,GAAG;GACpB,YAAY,iBAAiB,UAAU;EACzC,CAEyB,CAAC,CACvB,YAAY,GAAG,OAAO,CAAC,CACvB,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM;GAC7C,KAAK;GACL,iBAAiB;EACnB,CAAC,CAAC,CACD,KAAK,EAAE,WAAW,OAAO,CAAC,EAEU,EAAE,aAAa;EAAM,YAAY;CAAM;AAChF;AAEA,eAAsB,oBACpB,IACA,UACgC;CAChC,MAAM,WAAW,YAAa,MAAM,uBAAuB,EAAE;CAE7D,IAAI,SAAS,aAAa,qBAQxB,OAAO;EAAE,GAAG,MAPSC,4CAA2B;GAC9C,SAAS,GAAG;GACZ,UAAU,GAAG;GACb,QAAQ,GAAG;GACX,MAAM,GAAG;GACT,SAAS,GAAG;EACd,CAAC;EACmB,YAAY;CAAoB;CAGtD,OAAO,kBAAkB,IAAI,SAAS,UAAU;AAClD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { NearTransactionError, executeKeychainTransaction, isNearCliInstalled } from "./near-cli.mjs";
|
|
2
|
+
import { Near, isPrivateKey } from "near-kit";
|
|
3
|
+
import { FileKeyStore } from "near-kit/keys/file";
|
|
4
|
+
|
|
5
|
+
//#region src/near-signer.ts
|
|
6
|
+
function assertPrivateKey(key) {
|
|
7
|
+
if (!isPrivateKey(key)) throw new NearTransactionError(`Invalid private key format: must start with "ed25519:" or "secp256k1:" (got a ${key.length}-character value).`);
|
|
8
|
+
return key;
|
|
9
|
+
}
|
|
10
|
+
async function resolveSigningKey(opts) {
|
|
11
|
+
const explicitKey = opts.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
|
|
12
|
+
if (explicitKey) return {
|
|
13
|
+
source: "provided",
|
|
14
|
+
privateKey: explicitKey
|
|
15
|
+
};
|
|
16
|
+
const keyPair = await new FileKeyStore("~/.near-credentials", opts.network).get(opts.account);
|
|
17
|
+
if (keyPair?.secretKey) return {
|
|
18
|
+
source: "credentials-file",
|
|
19
|
+
privateKey: keyPair.secretKey
|
|
20
|
+
};
|
|
21
|
+
throw new NearTransactionError("No signing key available");
|
|
22
|
+
}
|
|
23
|
+
async function resolveSigningStrategy(opts) {
|
|
24
|
+
try {
|
|
25
|
+
const resolved = await resolveSigningKey(opts);
|
|
26
|
+
return {
|
|
27
|
+
strategy: "near-kit",
|
|
28
|
+
privateKey: resolved.privateKey,
|
|
29
|
+
source: resolved.source
|
|
30
|
+
};
|
|
31
|
+
} catch {}
|
|
32
|
+
if (process.stdin.isTTY && await isNearCliInstalled()) return { strategy: "near-cli-keychain" };
|
|
33
|
+
throw new NearTransactionError(`No signing key available for ${opts.account} on ${opts.network}. Set NEAR_PRIVATE_KEY (or BOS_NEAR_PRIVATE_KEY), store credentials at ~/.near-credentials/${opts.network}/${opts.account}.json, or sign with the near-cli-rs keychain (install it, then retry from an interactive terminal). Generate a publish key with: bos key generate`);
|
|
34
|
+
}
|
|
35
|
+
function describeSigningStrategy(strategy) {
|
|
36
|
+
if (strategy.strategy === "near-cli-keychain") return "near-cli-rs keychain";
|
|
37
|
+
return strategy.source === "provided" ? "the environment or --private-key flag" : `~/.near-credentials`;
|
|
38
|
+
}
|
|
39
|
+
async function submitWithNearKit(tx, privateKey) {
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
txHash: (await new Near({
|
|
43
|
+
network: tx.network,
|
|
44
|
+
defaultSignerId: tx.account,
|
|
45
|
+
privateKey: assertPrivateKey(privateKey)
|
|
46
|
+
}).transaction(tx.account).functionCall(tx.contract, tx.method, tx.args, {
|
|
47
|
+
gas: "300 Tgas",
|
|
48
|
+
attachedDeposit: "0 yocto"
|
|
49
|
+
}).send({ waitUntil: "NONE" }))?.transaction?.hash,
|
|
50
|
+
signedWith: "env"
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async function submitRegistryWrite(tx, strategy) {
|
|
54
|
+
const resolved = strategy ?? await resolveSigningStrategy(tx);
|
|
55
|
+
if (resolved.strategy === "near-cli-keychain") return {
|
|
56
|
+
...await executeKeychainTransaction({
|
|
57
|
+
account: tx.account,
|
|
58
|
+
contract: tx.contract,
|
|
59
|
+
method: tx.method,
|
|
60
|
+
args: tx.args,
|
|
61
|
+
network: tx.network
|
|
62
|
+
}),
|
|
63
|
+
signedWith: "near-cli-keychain"
|
|
64
|
+
};
|
|
65
|
+
return submitWithNearKit(tx, resolved.privateKey);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
export { describeSigningStrategy, resolveSigningKey, resolveSigningStrategy, submitRegistryWrite };
|
|
70
|
+
//# sourceMappingURL=near-signer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"near-signer.mjs","names":[],"sources":["../src/near-signer.ts"],"sourcesContent":["import { isPrivateKey, Near, type PrivateKey } from \"near-kit\";\nimport { FileKeyStore } from \"near-kit/keys/file\";\n\nimport type { NetworkId } from \"./fastkv\";\nimport { executeKeychainTransaction, isNearCliInstalled, NearTransactionError } from \"./near-cli\";\n\nexport type SigningKeySource = \"provided\" | \"credentials-file\";\n\nexport interface ResolvedSigningKey {\n source: SigningKeySource;\n privateKey: string;\n}\n\nexport interface RegistryWriteRequest {\n account: string;\n contract: string;\n method: string;\n args: Record<string, string>;\n network: NetworkId;\n privateKey?: string;\n}\n\nexport type SigningStrategy =\n | { strategy: \"near-kit\"; privateKey: string; source: SigningKeySource }\n | { strategy: \"near-cli-keychain\" };\n\nexport interface NearTransactionResult {\n success: true;\n txHash?: string;\n signedWith: \"env\" | \"credentials-file\" | \"near-cli-keychain\";\n}\n\nfunction assertPrivateKey(key: string): PrivateKey {\n if (!isPrivateKey(key)) {\n throw new NearTransactionError(\n `Invalid private key format: must start with \"ed25519:\" or \"secp256k1:\" (got a ${key.length}-character value).`,\n );\n }\n return key as PrivateKey;\n}\n\nexport async function resolveSigningKey(opts: {\n privateKey?: string;\n account: string;\n network: NetworkId;\n}): Promise<ResolvedSigningKey> {\n const explicitKey =\n opts.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n if (explicitKey) {\n return { source: \"provided\", privateKey: explicitKey };\n }\n\n const keyStore = new FileKeyStore(\"~/.near-credentials\", opts.network);\n const keyPair = await keyStore.get(opts.account);\n if (keyPair?.secretKey) {\n return { source: \"credentials-file\", privateKey: keyPair.secretKey };\n }\n\n throw new NearTransactionError(\"No signing key available\");\n}\n\nexport async function resolveSigningStrategy(opts: {\n privateKey?: string;\n account: string;\n network: NetworkId;\n}): Promise<SigningStrategy> {\n try {\n const resolved = await resolveSigningKey(opts);\n return { strategy: \"near-kit\", privateKey: resolved.privateKey, source: resolved.source };\n } catch {\n // fall through to the near-cli-rs keychain\n }\n\n if (process.stdin.isTTY && (await isNearCliInstalled())) {\n return { strategy: \"near-cli-keychain\" };\n }\n\n throw new NearTransactionError(\n `No signing key available for ${opts.account} on ${opts.network}. ` +\n `Set NEAR_PRIVATE_KEY (or BOS_NEAR_PRIVATE_KEY), store credentials at ` +\n `~/.near-credentials/${opts.network}/${opts.account}.json, or sign with the ` +\n `near-cli-rs keychain (install it, then retry from an interactive terminal). ` +\n `Generate a publish key with: bos key generate`,\n );\n}\n\nexport function describeSigningStrategy(strategy: SigningStrategy): string {\n if (strategy.strategy === \"near-cli-keychain\") {\n return \"near-cli-rs keychain\";\n }\n return strategy.source === \"provided\"\n ? \"the environment or --private-key flag\"\n : `~/.near-credentials`;\n}\n\nasync function submitWithNearKit(\n tx: RegistryWriteRequest,\n privateKey: string,\n): Promise<NearTransactionResult> {\n const near = new Near({\n network: tx.network,\n defaultSignerId: tx.account,\n privateKey: assertPrivateKey(privateKey),\n });\n\n const outcome = await near\n .transaction(tx.account)\n .functionCall(tx.contract, tx.method, tx.args, {\n gas: \"300 Tgas\",\n attachedDeposit: \"0 yocto\",\n })\n .send({ waitUntil: \"NONE\" });\n\n return { success: true, txHash: outcome?.transaction?.hash, signedWith: \"env\" };\n}\n\nexport async function submitRegistryWrite(\n tx: RegistryWriteRequest,\n strategy?: SigningStrategy,\n): Promise<NearTransactionResult> {\n const resolved = strategy ?? (await resolveSigningStrategy(tx));\n\n if (resolved.strategy === \"near-cli-keychain\") {\n const result = await executeKeychainTransaction({\n account: tx.account,\n contract: tx.contract,\n method: tx.method,\n args: tx.args,\n network: tx.network,\n });\n return { ...result, signedWith: \"near-cli-keychain\" };\n }\n\n return submitWithNearKit(tx, resolved.privateKey);\n}\n"],"mappings":";;;;;AAgCA,SAAS,iBAAiB,KAAyB;CACjD,IAAI,CAAC,aAAa,GAAG,GACnB,MAAM,IAAI,qBACR,iFAAiF,IAAI,OAAO,mBAC9F;CAEF,OAAO;AACT;AAEA,eAAsB,kBAAkB,MAIR;CAC9B,MAAM,cACJ,KAAK,cAAc,QAAQ,IAAI,oBAAoB,QAAQ,IAAI;CACjE,IAAI,aACF,OAAO;EAAE,QAAQ;EAAY,YAAY;CAAY;CAIvD,MAAM,UAAU,MAAM,IADD,aAAa,uBAAuB,KAAK,OACjC,CAAC,CAAC,IAAI,KAAK,OAAO;CAC/C,IAAI,SAAS,WACX,OAAO;EAAE,QAAQ;EAAoB,YAAY,QAAQ;CAAU;CAGrE,MAAM,IAAI,qBAAqB,0BAA0B;AAC3D;AAEA,eAAsB,uBAAuB,MAIhB;CAC3B,IAAI;EACF,MAAM,WAAW,MAAM,kBAAkB,IAAI;EAC7C,OAAO;GAAE,UAAU;GAAY,YAAY,SAAS;GAAY,QAAQ,SAAS;EAAO;CAC1F,QAAQ,CAER;CAEA,IAAI,QAAQ,MAAM,SAAU,MAAM,mBAAmB,GACnD,OAAO,EAAE,UAAU,oBAAoB;CAGzC,MAAM,IAAI,qBACR,gCAAgC,KAAK,QAAQ,MAAM,KAAK,QAAQ,6FAEvC,KAAK,QAAQ,GAAG,KAAK,QAAQ,kJAGxD;AACF;AAEA,SAAgB,wBAAwB,UAAmC;CACzE,IAAI,SAAS,aAAa,qBACxB,OAAO;CAET,OAAO,SAAS,WAAW,aACvB,0CACA;AACN;AAEA,eAAe,kBACb,IACA,YACgC;CAehC,OAAO;EAAE,SAAS;EAAM,SAAQ,MARV,IANL,KAAK;GACpB,SAAS,GAAG;GACZ,iBAAiB,GAAG;GACpB,YAAY,iBAAiB,UAAU;EACzC,CAEyB,CAAC,CACvB,YAAY,GAAG,OAAO,CAAC,CACvB,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM;GAC7C,KAAK;GACL,iBAAiB;EACnB,CAAC,CAAC,CACD,KAAK,EAAE,WAAW,OAAO,CAAC,EAEU,EAAE,aAAa;EAAM,YAAY;CAAM;AAChF;AAEA,eAAsB,oBACpB,IACA,UACgC;CAChC,MAAM,WAAW,YAAa,MAAM,uBAAuB,EAAE;CAE7D,IAAI,SAAS,aAAa,qBAQxB,OAAO;EAAE,GAAG,MAPS,2BAA2B;GAC9C,SAAS,GAAG;GACZ,UAAU,GAAG;GACb,QAAQ,GAAG;GACX,MAAM,GAAG;GACT,SAAS,GAAG;EACd,CAAC;EACmB,YAAY;CAAoB;CAGtD,OAAO,kBAAkB,IAAI,SAAS,UAAU;AAClD"}
|
package/dist/network.cjs
CHANGED
package/dist/network.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.cjs","names":[],"sources":["../src/network.ts"],"sourcesContent":["export function getNetworkIdForAccount(account: string): \"mainnet\" | \"testnet\" {\n return account.endsWith(\".testnet\") ? \"testnet\" : \"mainnet\";\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"network.cjs","names":[],"sources":["../src/network.ts"],"sourcesContent":["export function getNetworkIdForAccount(account: string): \"mainnet\" | \"testnet\" {\n return account.endsWith(\".testnet\") ? \"testnet\" : \"mainnet\";\n}\n"],"mappings":";AAAA,SAAgB,uBAAuB,SAAwC;CAC7E,OAAO,QAAQ,SAAS,UAAU,IAAI,YAAY;AACpD"}
|