run402 4.94.0 → 4.96.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 +23 -23
- package/cli.mjs +8 -40
- package/core-dist/keystore.js +1 -1
- package/git-remote-run402.mjs +6 -6
- package/lib/admin.mjs +5 -5
- package/lib/ai.mjs +5 -5
- package/lib/apps.mjs +9 -9
- package/lib/archives.mjs +371 -8
- package/lib/argparse.mjs +5 -5
- package/lib/assets.mjs +12 -12
- package/lib/auth.mjs +34 -34
- package/lib/branches.mjs +7 -7
- package/lib/buzz-doctor.mjs +1 -1
- package/lib/buzz-notifications.mjs +4 -4
- package/lib/buzz.mjs +2 -2
- package/lib/cache.mjs +1 -1
- package/lib/cdn.mjs +2 -2
- package/lib/ci.mjs +8 -8
- package/lib/claims.mjs +2 -2
- package/lib/cold-start.mjs +2 -2
- package/lib/command-manifest.mjs +37 -76
- package/lib/config.mjs +4 -4
- package/lib/contacts.mjs +3 -3
- package/lib/contracts.mjs +11 -11
- package/lib/credentials.mjs +32 -32
- package/lib/daemon-path.mjs +3 -3
- package/lib/delegates.mjs +13 -13
- package/lib/deliveries.mjs +2 -2
- package/lib/deploy-v2.mjs +26 -26
- package/lib/dev.mjs +3 -3
- package/lib/doctor.mjs +49 -58
- package/lib/domains.mjs +27 -27
- package/lib/email.mjs +38 -38
- package/lib/errors.mjs +40 -24
- package/lib/escalations.mjs +4 -4
- package/lib/events.mjs +32 -25
- package/lib/feedback.mjs +2 -2
- package/lib/functions.mjs +34 -34
- package/lib/grants.mjs +7 -7
- package/lib/image.mjs +7 -7
- package/lib/init.mjs +32 -32
- package/lib/jobs.mjs +15 -15
- package/lib/live.mjs +1 -1
- package/lib/logs.mjs +8 -8
- package/lib/messages.mjs +5 -5
- package/lib/next-actions.mjs +2 -2
- package/lib/org-context.mjs +22 -22
- package/lib/{org.mjs → orgs.mjs} +140 -179
- package/lib/path-lookup.mjs +7 -10
- package/lib/path-lookup.test.mjs +19 -21
- package/lib/projects.mjs +45 -56
- package/lib/remote-helper-session.mjs +93 -93
- package/lib/repos.mjs +196 -197
- package/lib/rooms-context.mjs +7 -7
- package/lib/rooms.mjs +2 -2
- package/lib/sdk-errors.mjs +1 -1
- package/lib/secrets.mjs +13 -13
- package/lib/sites.mjs +14 -14
- package/lib/snapshots.mjs +10 -10
- package/lib/subdomains.mjs +12 -12
- package/lib/subscriptions.mjs +2 -2
- package/lib/transfer.mjs +1 -1
- package/lib/up.mjs +21 -21
- package/lib/{gitvault-capabilities.mjs → vault-capabilities.mjs} +10 -14
- package/lib/{gitvault-daemon-run.mjs → vault-daemon-run.mjs} +2 -2
- package/lib/{gitvault-daemon.mjs → vault-daemon.mjs} +23 -23
- package/lib/{gitvault-scaffold.mjs → vault-scaffold.mjs} +14 -14
- package/lib/{gitvault-target.mjs → vault-target.mjs} +22 -17
- package/lib/wallet-context.mjs +1 -1
- package/lib/wallets.mjs +1 -1
- package/lib/webhooks.mjs +8 -8
- package/lib/whoami.mjs +32 -5
- package/package.json +2 -2
- package/sdk/core-dist/keystore.js +1 -1
- package/sdk/dist/actions.d.ts +3 -3
- package/sdk/dist/actions.d.ts.map +1 -1
- package/sdk/dist/app-up.d.ts +2 -2
- package/sdk/dist/app-up.d.ts.map +1 -1
- package/sdk/dist/config.d.ts +1 -2
- package/sdk/dist/config.d.ts.map +1 -1
- package/sdk/dist/config.js.map +1 -1
- package/sdk/dist/credentials.d.ts +1 -1
- package/sdk/dist/errors.d.ts +6 -6
- package/sdk/dist/errors.d.ts.map +1 -1
- package/sdk/dist/errors.js +1 -1
- package/sdk/dist/errors.js.map +1 -1
- package/sdk/dist/index.d.ts +9 -9
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +9 -9
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/namespaces/admin.d.ts +1 -1
- package/sdk/dist/namespaces/admin.d.ts.map +1 -1
- package/sdk/dist/namespaces/ai.d.ts +1 -1
- package/sdk/dist/namespaces/ai.js +2 -2
- package/sdk/dist/namespaces/ai.js.map +1 -1
- package/sdk/dist/namespaces/assets.js +1 -1
- package/sdk/dist/namespaces/assets.js.map +1 -1
- package/sdk/dist/namespaces/ci.js +3 -3
- package/sdk/dist/namespaces/ci.js.map +1 -1
- package/sdk/dist/namespaces/deploy.d.ts +5 -5
- package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.js +45 -46
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +19 -19
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/domains.d.ts +10 -2
- package/sdk/dist/namespaces/domains.d.ts.map +1 -1
- package/sdk/dist/namespaces/domains.js +10 -5
- package/sdk/dist/namespaces/domains.js.map +1 -1
- package/sdk/dist/namespaces/errors.js +1 -1
- package/sdk/dist/namespaces/functions.js +1 -1
- package/sdk/dist/namespaces/functions.js.map +1 -1
- package/sdk/dist/namespaces/org.d.ts +2 -2
- package/sdk/dist/namespaces/org.js +2 -2
- package/sdk/dist/namespaces/org.types.d.ts +3 -3
- package/sdk/dist/namespaces/pay.js +1 -1
- package/sdk/dist/namespaces/{gitvault.d.ts → repos.d.ts} +438 -451
- package/sdk/dist/namespaces/repos.d.ts.map +1 -0
- package/sdk/dist/namespaces/{gitvault.js → repos.js} +454 -462
- package/sdk/dist/namespaces/repos.js.map +1 -0
- package/sdk/dist/namespaces/rooms.js +2 -2
- package/sdk/dist/namespaces/rooms.js.map +1 -1
- package/sdk/dist/namespaces/session.d.ts +2 -2
- package/sdk/dist/namespaces/session.d.ts.map +1 -1
- package/sdk/dist/namespaces/session.js +2 -2
- package/sdk/dist/namespaces/session.js.map +1 -1
- package/sdk/dist/namespaces/tier.d.ts +4 -4
- package/sdk/dist/namespaces/tier.d.ts.map +1 -1
- package/sdk/dist/namespaces/transfers.d.ts +46 -15
- package/sdk/dist/namespaces/transfers.d.ts.map +1 -1
- package/sdk/dist/namespaces/transfers.js.map +1 -1
- package/sdk/dist/namespaces/{gitvault.crypto.d.ts → vault.crypto.d.ts} +141 -141
- package/sdk/dist/namespaces/vault.crypto.d.ts.map +1 -0
- package/sdk/dist/namespaces/{gitvault.crypto.js → vault.crypto.js} +173 -173
- package/sdk/dist/namespaces/vault.crypto.js.map +1 -0
- package/sdk/dist/namespaces/{gitvault.types.d.ts → vault.types.d.ts} +136 -136
- package/sdk/dist/namespaces/vault.types.d.ts.map +1 -0
- package/sdk/dist/namespaces/{gitvault.types.js → vault.types.js} +4 -4
- package/sdk/dist/namespaces/vault.types.js.map +1 -0
- package/sdk/dist/node/actions-node.js +8 -8
- package/sdk/dist/node/actions-node.js.map +1 -1
- package/sdk/dist/node/assets-node.js +6 -6
- package/sdk/dist/node/assets-node.js.map +1 -1
- package/sdk/dist/node/bearer-redeem-key.d.ts +1 -1
- package/sdk/dist/node/bearer-redeem-key.js +5 -5
- package/sdk/dist/node/bearer-redeem-key.js.map +1 -1
- package/sdk/dist/node/ci.js +1 -1
- package/sdk/dist/node/ci.js.map +1 -1
- package/sdk/dist/node/credentials.d.ts +1 -1
- package/sdk/dist/node/credentials.js +1 -1
- package/sdk/dist/node/deploy-manifest.d.ts +3 -5
- package/sdk/dist/node/deploy-manifest.d.ts.map +1 -1
- package/sdk/dist/node/deploy-manifest.js +3 -12
- package/sdk/dist/node/deploy-manifest.js.map +1 -1
- package/sdk/dist/node/http-dispatcher.js +5 -5
- package/sdk/dist/node/http-dispatcher.js.map +1 -1
- package/sdk/dist/node/index.d.ts +29 -29
- package/sdk/dist/node/index.d.ts.map +1 -1
- package/sdk/dist/node/index.js +39 -39
- package/sdk/dist/node/index.js.map +1 -1
- package/sdk/dist/node/manifest-export.js +2 -2
- package/sdk/dist/node/manifest-export.js.map +1 -1
- package/sdk/dist/node/org-adopt.js +1 -1
- package/sdk/dist/node/org-adopt.js.map +1 -1
- package/sdk/dist/node/sites-node.js +1 -1
- package/sdk/dist/node/sites-node.js.map +1 -1
- package/sdk/dist/node/{gitvault-address.d.ts → vault-address.d.ts} +42 -42
- package/sdk/dist/node/vault-address.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-address.js → vault-address.js} +43 -43
- package/sdk/dist/node/vault-address.js.map +1 -0
- package/sdk/dist/node/{gitvault-apply.d.ts → vault-apply.d.ts} +27 -27
- package/sdk/dist/node/vault-apply.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-apply.js → vault-apply.js} +38 -38
- package/sdk/dist/node/vault-apply.js.map +1 -0
- package/sdk/dist/node/vault-byo-config.d.ts +29 -0
- package/sdk/dist/node/vault-byo-config.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-byo-config.js → vault-byo-config.js} +18 -18
- package/sdk/dist/node/vault-byo-config.js.map +1 -0
- package/sdk/dist/node/vault-byo-probe.d.ts +20 -0
- package/sdk/dist/node/vault-byo-probe.d.ts.map +1 -0
- package/sdk/dist/node/vault-byo-probe.js +57 -0
- package/sdk/dist/node/vault-byo-probe.js.map +1 -0
- package/sdk/dist/node/{gitvault-creation-journal.d.ts → vault-creation-journal.d.ts} +69 -69
- package/sdk/dist/node/vault-creation-journal.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-creation-journal.js → vault-creation-journal.js} +54 -54
- package/sdk/dist/node/vault-creation-journal.js.map +1 -0
- package/sdk/dist/node/{gitvault-degraded-read.d.ts → vault-degraded-read.d.ts} +34 -34
- package/sdk/dist/node/vault-degraded-read.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-degraded-read.js → vault-degraded-read.js} +24 -24
- package/sdk/dist/node/vault-degraded-read.js.map +1 -0
- package/sdk/dist/node/{gitvault-deploy.d.ts → vault-deploy.d.ts} +67 -67
- package/sdk/dist/node/vault-deploy.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-deploy.js → vault-deploy.js} +27 -27
- package/sdk/dist/node/vault-deploy.js.map +1 -0
- package/sdk/dist/node/{gitvault-edge-fetch.d.ts → vault-edge-fetch.d.ts} +9 -9
- package/sdk/dist/node/vault-edge-fetch.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-edge-fetch.js → vault-edge-fetch.js} +11 -11
- package/sdk/dist/node/vault-edge-fetch.js.map +1 -0
- package/sdk/dist/node/{gitvault-handoff.d.ts → vault-handoff.d.ts} +9 -9
- package/sdk/dist/node/vault-handoff.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-handoff.js → vault-handoff.js} +24 -24
- package/sdk/dist/node/vault-handoff.js.map +1 -0
- package/sdk/dist/node/{gitvault-keystore.d.ts → vault-keystore.d.ts} +87 -77
- package/sdk/dist/node/vault-keystore.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-keystore.js → vault-keystore.js} +105 -68
- package/sdk/dist/node/vault-keystore.js.map +1 -0
- package/sdk/dist/node/{gitvault-member-bundle.d.ts → vault-member-bundle.d.ts} +17 -17
- package/sdk/dist/node/vault-member-bundle.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-member-bundle.js → vault-member-bundle.js} +11 -11
- package/sdk/dist/node/vault-member-bundle.js.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-backend.d.ts → vault-mirror-backend.d.ts} +26 -26
- package/sdk/dist/node/vault-mirror-backend.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-backend.js → vault-mirror-backend.js} +25 -25
- package/sdk/dist/node/vault-mirror-backend.js.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-config.d.ts → vault-mirror-config.d.ts} +23 -23
- package/sdk/dist/node/vault-mirror-config.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-config.js → vault-mirror-config.js} +16 -16
- package/sdk/dist/node/vault-mirror-config.js.map +1 -0
- package/sdk/dist/node/{gitvault-mirror.d.ts → vault-mirror.d.ts} +36 -36
- package/sdk/dist/node/vault-mirror.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-mirror.js → vault-mirror.js} +75 -75
- package/sdk/dist/node/vault-mirror.js.map +1 -0
- package/sdk/dist/node/{gitvault-native-crypto.d.ts → vault-native-crypto.d.ts} +10 -10
- package/sdk/dist/node/vault-native-crypto.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-native-crypto.js → vault-native-crypto.js} +16 -16
- package/sdk/dist/node/vault-native-crypto.js.map +1 -0
- package/sdk/dist/node/{gitvault-open-or-create.d.ts → vault-open-or-create.d.ts} +16 -16
- package/sdk/dist/node/vault-open-or-create.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-open-or-create.js → vault-open-or-create.js} +10 -10
- package/sdk/dist/node/vault-open-or-create.js.map +1 -0
- package/sdk/dist/node/{gitvault-prewarm.d.ts → vault-prewarm.d.ts} +13 -13
- package/sdk/dist/node/vault-prewarm.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-prewarm.js → vault-prewarm.js} +25 -25
- package/sdk/dist/node/vault-prewarm.js.map +1 -0
- package/sdk/dist/node/{gitvault-profile-scan.d.ts → vault-profile-scan.d.ts} +3 -3
- package/sdk/dist/node/vault-profile-scan.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-profile-scan.js → vault-profile-scan.js} +12 -12
- package/sdk/dist/node/vault-profile-scan.js.map +1 -0
- package/sdk/dist/node/{gitvault-prune.d.ts → vault-prune.d.ts} +61 -61
- package/sdk/dist/node/vault-prune.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-prune.js → vault-prune.js} +34 -34
- package/sdk/dist/node/vault-prune.js.map +1 -0
- package/sdk/dist/node/{gitvault-publication.d.ts → vault-publication.d.ts} +399 -399
- package/sdk/dist/node/vault-publication.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-publication.js → vault-publication.js} +584 -584
- package/sdk/dist/node/vault-publication.js.map +1 -0
- package/sdk/dist/node/{gitvault-push-to-create.d.ts → vault-push-to-create.d.ts} +16 -16
- package/sdk/dist/node/vault-push-to-create.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-push-to-create.js → vault-push-to-create.js} +9 -9
- package/sdk/dist/node/vault-push-to-create.js.map +1 -0
- package/sdk/dist/node/{gitvault-recover.d.ts → vault-recover.d.ts} +50 -50
- package/sdk/dist/node/vault-recover.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-recover.js → vault-recover.js} +84 -84
- package/sdk/dist/node/vault-recover.js.map +1 -0
- package/sdk/dist/node/{gitvault-restore.d.ts → vault-restore.d.ts} +8 -8
- package/sdk/dist/node/vault-restore.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-restore.js → vault-restore.js} +11 -11
- package/sdk/dist/node/vault-restore.js.map +1 -0
- package/sdk/dist/node/{gitvault-snapshot.d.ts → vault-snapshot.d.ts} +48 -48
- package/sdk/dist/node/vault-snapshot.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-snapshot.js → vault-snapshot.js} +61 -61
- package/sdk/dist/node/vault-snapshot.js.map +1 -0
- package/sdk/dist/node/{gitvault-writer-state.d.ts → vault-writer-state.d.ts} +8 -8
- package/sdk/dist/node/vault-writer-state.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-writer-state.js → vault-writer-state.js} +15 -15
- package/sdk/dist/node/vault-writer-state.js.map +1 -0
- package/sdk/dist/node/workflow-output.js +4 -4
- package/sdk/dist/node/workflow-output.js.map +1 -1
- package/sdk/dist/scoped.d.ts +8 -8
- package/sdk/dist/scoped.d.ts.map +1 -1
- package/sdk/dist/scoped.js +3 -3
- package/sdk/dist/scoped.js.map +1 -1
- package/vault-surface.json +40 -0
- package/gitvault-surface.json +0 -89
- package/lib/cloud.mjs +0 -256
- package/lib/core.mjs +0 -123
- package/lib/gitvault.mjs +0 -163
- package/lib/source-access.mjs +0 -70
- package/sdk/dist/namespaces/gitvault.crypto.d.ts.map +0 -1
- package/sdk/dist/namespaces/gitvault.crypto.js.map +0 -1
- package/sdk/dist/namespaces/gitvault.d.ts.map +0 -1
- package/sdk/dist/namespaces/gitvault.js.map +0 -1
- package/sdk/dist/namespaces/gitvault.types.d.ts.map +0 -1
- package/sdk/dist/namespaces/gitvault.types.js.map +0 -1
- package/sdk/dist/node/gitvault-address.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-address.js.map +0 -1
- package/sdk/dist/node/gitvault-apply.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-apply.js.map +0 -1
- package/sdk/dist/node/gitvault-byo-config.d.ts +0 -29
- package/sdk/dist/node/gitvault-byo-config.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-byo-config.js.map +0 -1
- package/sdk/dist/node/gitvault-byo-probe.d.ts +0 -20
- package/sdk/dist/node/gitvault-byo-probe.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-byo-probe.js +0 -57
- package/sdk/dist/node/gitvault-byo-probe.js.map +0 -1
- package/sdk/dist/node/gitvault-creation-journal.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-creation-journal.js.map +0 -1
- package/sdk/dist/node/gitvault-degraded-read.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-degraded-read.js.map +0 -1
- package/sdk/dist/node/gitvault-deploy.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-deploy.js.map +0 -1
- package/sdk/dist/node/gitvault-edge-fetch.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-edge-fetch.js.map +0 -1
- package/sdk/dist/node/gitvault-handoff.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-handoff.js.map +0 -1
- package/sdk/dist/node/gitvault-keystore.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-keystore.js.map +0 -1
- package/sdk/dist/node/gitvault-member-bundle.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-member-bundle.js.map +0 -1
- package/sdk/dist/node/gitvault-mirror-backend.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-mirror-backend.js.map +0 -1
- package/sdk/dist/node/gitvault-mirror-config.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-mirror-config.js.map +0 -1
- package/sdk/dist/node/gitvault-mirror.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-mirror.js.map +0 -1
- package/sdk/dist/node/gitvault-native-crypto.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-native-crypto.js.map +0 -1
- package/sdk/dist/node/gitvault-open-or-create.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-open-or-create.js.map +0 -1
- package/sdk/dist/node/gitvault-prewarm.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-prewarm.js.map +0 -1
- package/sdk/dist/node/gitvault-profile-scan.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-profile-scan.js.map +0 -1
- package/sdk/dist/node/gitvault-prune.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-prune.js.map +0 -1
- package/sdk/dist/node/gitvault-publication.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-publication.js.map +0 -1
- package/sdk/dist/node/gitvault-push-to-create.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-push-to-create.js.map +0 -1
- package/sdk/dist/node/gitvault-recover.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-recover.js.map +0 -1
- package/sdk/dist/node/gitvault-restore.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-restore.js.map +0 -1
- package/sdk/dist/node/gitvault-snapshot.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-snapshot.js.map +0 -1
- package/sdk/dist/node/gitvault-writer-state.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-writer-state.js.map +0 -1
package/lib/path-lookup.mjs
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `path-lookup.mjs` — the tiny, dependency-free "is this executable on
|
|
3
|
-
* PATH" check
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* subprocess — a plain directory scan mirrors what the OS loader itself
|
|
7
|
-
* does to resolve an unqualified command name.
|
|
3
|
+
* PATH" check behind `repos resume` / `repos join`'s remote-helper next
|
|
4
|
+
* action. No shell, no `which` subprocess — a plain directory scan mirrors
|
|
5
|
+
* what the OS loader itself does to resolve an unqualified command name.
|
|
8
6
|
*/
|
|
9
7
|
import {accessSync, constants, readFileSync } from "node:fs";
|
|
10
8
|
import { delimiter, join } from "node:path";
|
|
@@ -26,8 +24,7 @@ export function isExecutableOnPath(name, env = process.env) {
|
|
|
26
24
|
/**
|
|
27
25
|
* After a restore into `dir`, the ONE thing that still stands between the
|
|
28
26
|
* caller and its first `git push` is git finding the remote helper the
|
|
29
|
-
* checkout's origin
|
|
30
|
-
* `git-remote-run402` for `run402::`). A resume or join run through
|
|
27
|
+
* checkout's `run402::` origin names (`git-remote-run402`). A resume or join run through
|
|
31
28
|
* `npx` has the helper only inside the npx cache, so git cannot see it.
|
|
32
29
|
* Returns a `next_actions` entry naming the fix, or null when the helper
|
|
33
30
|
* is on PATH or the checkout's remote cannot be read (never throws).
|
|
@@ -42,11 +39,11 @@ export function remoteHelperNextAction(dir, env = process.env) {
|
|
|
42
39
|
return null;
|
|
43
40
|
}
|
|
44
41
|
if (!url) return null;
|
|
45
|
-
const helper = url.startsWith("
|
|
42
|
+
const helper = url.startsWith("run402::") ? "git-remote-run402" : null;
|
|
46
43
|
if (!helper || isExecutableOnPath(helper, env)) return null;
|
|
47
44
|
return {
|
|
48
45
|
type: "install_remote_helper",
|
|
49
|
-
command: "npm i -g
|
|
50
|
-
why: `git push needs ${helper} on PATH and this session does not have it there (an npx run keeps it inside the npx cache); install
|
|
46
|
+
command: "npm i -g run402",
|
|
47
|
+
why: `git push needs ${helper} on PATH and this session does not have it there (an npx run keeps it inside the npx cache); install run402 once and every git command in this checkout works`,
|
|
51
48
|
};
|
|
52
49
|
}
|
package/lib/path-lookup.test.mjs
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `path-lookup.mjs` — the PATH-executable probe `
|
|
3
|
-
* `
|
|
4
|
-
* helper installed (kygit-handoff design D8, mirroring
|
|
5
|
-
* `kygit/kygit.mjs`'s own `findRemoteHelper`).
|
|
2
|
+
* `path-lookup.mjs` — the PATH-executable probe behind `repos resume` /
|
|
3
|
+
* `repos join`'s remote-helper next action.
|
|
6
4
|
*/
|
|
7
5
|
import { describe, it } from "node:test";
|
|
8
6
|
import assert from "node:assert/strict";
|
|
@@ -15,10 +13,10 @@ describe("isExecutableOnPath", () => {
|
|
|
15
13
|
it("finds an executable file on PATH", () => {
|
|
16
14
|
const dir = mkdtempSync(join(tmpdir(), "path-lookup-"));
|
|
17
15
|
try {
|
|
18
|
-
const bin = join(dir, "git-remote-
|
|
16
|
+
const bin = join(dir, "git-remote-run402");
|
|
19
17
|
writeFileSync(bin, "#!/bin/sh\n");
|
|
20
18
|
chmodSync(bin, 0o755);
|
|
21
|
-
assert.equal(isExecutableOnPath("git-remote-
|
|
19
|
+
assert.equal(isExecutableOnPath("git-remote-run402", { PATH: dir }), true);
|
|
22
20
|
} finally {
|
|
23
21
|
rmSync(dir, { recursive: true, force: true });
|
|
24
22
|
}
|
|
@@ -27,10 +25,10 @@ describe("isExecutableOnPath", () => {
|
|
|
27
25
|
it("returns false when the name exists but is not executable", () => {
|
|
28
26
|
const dir = mkdtempSync(join(tmpdir(), "path-lookup-"));
|
|
29
27
|
try {
|
|
30
|
-
const bin = join(dir, "git-remote-
|
|
28
|
+
const bin = join(dir, "git-remote-run402");
|
|
31
29
|
writeFileSync(bin, "not executable");
|
|
32
30
|
chmodSync(bin, 0o644);
|
|
33
|
-
assert.equal(isExecutableOnPath("git-remote-
|
|
31
|
+
assert.equal(isExecutableOnPath("git-remote-run402", { PATH: dir }), false);
|
|
34
32
|
} finally {
|
|
35
33
|
rmSync(dir, { recursive: true, force: true });
|
|
36
34
|
}
|
|
@@ -39,7 +37,7 @@ describe("isExecutableOnPath", () => {
|
|
|
39
37
|
it("returns false when the name is nowhere on PATH", () => {
|
|
40
38
|
const dir = mkdtempSync(join(tmpdir(), "path-lookup-"));
|
|
41
39
|
try {
|
|
42
|
-
assert.equal(isExecutableOnPath("git-remote-
|
|
40
|
+
assert.equal(isExecutableOnPath("git-remote-run402", { PATH: dir }), false);
|
|
43
41
|
} finally {
|
|
44
42
|
rmSync(dir, { recursive: true, force: true });
|
|
45
43
|
}
|
|
@@ -49,10 +47,10 @@ describe("isExecutableOnPath", () => {
|
|
|
49
47
|
const dirA = mkdtempSync(join(tmpdir(), "path-lookup-a-"));
|
|
50
48
|
const dirB = mkdtempSync(join(tmpdir(), "path-lookup-b-"));
|
|
51
49
|
try {
|
|
52
|
-
const bin = join(dirB, "git-remote-
|
|
50
|
+
const bin = join(dirB, "git-remote-run402");
|
|
53
51
|
writeFileSync(bin, "#!/bin/sh\n");
|
|
54
52
|
chmodSync(bin, 0o755);
|
|
55
|
-
assert.equal(isExecutableOnPath("git-remote-
|
|
53
|
+
assert.equal(isExecutableOnPath("git-remote-run402", { PATH: `${dirA}:${dirB}` }), true);
|
|
56
54
|
} finally {
|
|
57
55
|
rmSync(dirA, { recursive: true, force: true });
|
|
58
56
|
rmSync(dirB, { recursive: true, force: true });
|
|
@@ -60,29 +58,29 @@ describe("isExecutableOnPath", () => {
|
|
|
60
58
|
});
|
|
61
59
|
|
|
62
60
|
it("returns false for an empty or missing PATH rather than throwing", () => {
|
|
63
|
-
assert.equal(isExecutableOnPath("git-remote-
|
|
64
|
-
assert.equal(isExecutableOnPath("git-remote-
|
|
61
|
+
assert.equal(isExecutableOnPath("git-remote-run402", {}), false);
|
|
62
|
+
assert.equal(isExecutableOnPath("git-remote-run402", { PATH: "" }), false);
|
|
65
63
|
});
|
|
66
64
|
});
|
|
67
65
|
|
|
68
66
|
describe("remoteHelperNextAction", () => {
|
|
69
|
-
it("names the missing helper for
|
|
67
|
+
it("names the missing helper for a run402:: checkout, and nothing when it is on PATH or the checkout is unreadable", () => {
|
|
70
68
|
const dir = mkdtempSync(join(tmpdir(), "run402-remote-helper-"));
|
|
71
69
|
try {
|
|
72
70
|
mkdirSync(join(dir, ".git"));
|
|
73
|
-
writeFileSync(join(dir, ".git", "config"), `[core]\n\trepositoryformatversion = 0\n[remote "origin"]\n\turl =
|
|
71
|
+
writeFileSync(join(dir, ".git", "config"), `[core]\n\trepositoryformatversion = 0\n[remote "origin"]\n\turl = run402::org/name\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`);
|
|
74
72
|
const emptyPath = { PATH: dir };
|
|
75
73
|
const missing = remoteHelperNextAction(dir, emptyPath);
|
|
76
74
|
assert.equal(missing?.type, "install_remote_helper");
|
|
77
|
-
assert.match(missing.why, /git-remote-
|
|
78
|
-
assert.equal(missing.command, "npm i -g
|
|
75
|
+
assert.match(missing.why, /git-remote-run402/);
|
|
76
|
+
assert.equal(missing.command, "npm i -g run402");
|
|
79
77
|
// present on PATH → nothing to say
|
|
80
78
|
const bin = join(dir, "bin"); mkdirSync(bin);
|
|
81
|
-
writeFileSync(join(bin, "git-remote-
|
|
79
|
+
writeFileSync(join(bin, "git-remote-run402"), "#!/bin/sh\n"); chmodSync(join(bin, "git-remote-run402"), 0o755);
|
|
82
80
|
assert.equal(remoteHelperNextAction(dir, { PATH: bin }), null);
|
|
83
|
-
//
|
|
84
|
-
writeFileSync(join(dir, ".git", "config"), `[remote "origin"]\n\turl =
|
|
85
|
-
assert.
|
|
81
|
+
// any other remote → nothing to say
|
|
82
|
+
writeFileSync(join(dir, ".git", "config"), `[remote "origin"]\n\turl = https://example.com/x.git\n`);
|
|
83
|
+
assert.equal(remoteHelperNextAction(dir, emptyPath), null);
|
|
86
84
|
// no checkout → null, never a throw
|
|
87
85
|
assert.equal(remoteHelperNextAction(join(dir, "nope"), emptyPath), null);
|
|
88
86
|
} finally {
|
package/lib/projects.mjs
CHANGED
|
@@ -14,27 +14,26 @@ Usage:
|
|
|
14
14
|
|
|
15
15
|
Subcommands:
|
|
16
16
|
quote Show pricing tiers
|
|
17
|
-
provision [--tier <tier>] [--name <n>] [--org <
|
|
18
|
-
use <
|
|
19
|
-
list [--org <
|
|
20
|
-
rename <
|
|
17
|
+
provision [--tier <tier>] [--name <n>] [--org <org_id>] Provision a new Postgres project
|
|
18
|
+
use <project_id> Set the active project (used as default for other commands)
|
|
19
|
+
list [--org <org_id>] [--all] List your projects from the server (name, site_url, custom domains, org_id, active marker)
|
|
20
|
+
rename <project_id> --name <label> Rename a project (fix an auto-generated name)
|
|
21
21
|
tenant-payments [project_id] [--status <s>] List redacted tenant x402 payments for priced routes
|
|
22
|
-
get [
|
|
22
|
+
get [project_id] Authoritative server read: status, org, tier, active deploy, mailbox, usage vs limits (live; no keys)
|
|
23
23
|
current Show the active project pointer and validation status
|
|
24
|
-
sql "<query>" [--project <
|
|
25
|
-
rest <table> [--query "<params>"] [--project <
|
|
26
|
-
usage [
|
|
27
|
-
costs [
|
|
28
|
-
schema [
|
|
29
|
-
apply-expose [
|
|
30
|
-
apply-expose [
|
|
31
|
-
validate-expose [
|
|
32
|
-
validate-expose [
|
|
33
|
-
get-expose [
|
|
34
|
-
delete [
|
|
35
|
-
promote-user [
|
|
36
|
-
demote-user [
|
|
37
|
-
export [id] [archive options] Export a portable Run402 Core archive
|
|
24
|
+
sql "<query>" [--project <project_id>] [--file <path>] [--params '<json>'] Run a SQL query (supports parameterized queries)
|
|
25
|
+
rest <table> [--query "<params>"] [--project <project_id>] Query a table via the REST API (PostgREST)
|
|
26
|
+
usage [project_id] Show compute/storage usage for a project
|
|
27
|
+
costs [project_id] [--window <w>] Show admin-only per-project revenue/cost/margin
|
|
28
|
+
schema [project_id] Inspect the database schema
|
|
29
|
+
apply-expose [project_id] <manifest_json> Apply a declarative authorization manifest
|
|
30
|
+
apply-expose [project_id] --file <path> Apply a manifest from a JSON file
|
|
31
|
+
validate-expose [project_id] <manifest_json> Validate an authorization manifest without applying it
|
|
32
|
+
validate-expose [project_id] --file <path> Validate a manifest file without mutating the project
|
|
33
|
+
get-expose [project_id] Get the current authorization manifest
|
|
34
|
+
delete [project_id] --confirm Immediately and irreversibly delete a project (cascade purge) and remove from local state. Requires --confirm.
|
|
35
|
+
promote-user [project_id] <email> Promote a user to project_admin role
|
|
36
|
+
demote-user [project_id] <email> Demote a user from project_admin role
|
|
38
37
|
|
|
39
38
|
Examples:
|
|
40
39
|
run402 projects quote
|
|
@@ -59,7 +58,6 @@ Examples:
|
|
|
59
58
|
run402 projects apply-expose prj_abc123 --file manifest.json
|
|
60
59
|
run402 projects get-expose prj_abc123
|
|
61
60
|
run402 projects delete prj_abc123 --confirm
|
|
62
|
-
run402 projects export prj_abc123 --wait --output ./project.r402ar --json
|
|
63
61
|
|
|
64
62
|
Global options (any command):
|
|
65
63
|
--wallet <name> Use a named wallet (profile) for this command. Precedence:
|
|
@@ -67,15 +65,15 @@ Global options (any command):
|
|
|
67
65
|
'run402 wallets use' default > 'default'. See 'run402 wallets'.
|
|
68
66
|
|
|
69
67
|
Notes:
|
|
70
|
-
- <
|
|
71
|
-
- Most commands that take <
|
|
72
|
-
(set it with 'run402 projects use <
|
|
68
|
+
- <project_id> is the project_id shown in 'run402 projects list' (prefix: 'prj_')
|
|
69
|
+
- Most commands that take <project_id> default to the active project when omitted
|
|
70
|
+
(set it with 'run402 projects use <project_id>'). Project IDs start with 'prj_';
|
|
73
71
|
any first positional that doesn't is treated as the next argument instead.
|
|
74
72
|
- 'list', 'get', and 'use' are SERVER-authoritative project identity flows.
|
|
75
73
|
Local project keys live under 'run402 credentials project-keys ...'.
|
|
76
74
|
- 'list' is a SERVER read, not the local key cache: it shows every project the
|
|
77
75
|
active wallet can reach (membership-scoped), with name, site_url, custom
|
|
78
|
-
domains, and org_id. '--org <
|
|
76
|
+
domains, and org_id. '--org <org_id>' filters to one org; '--all' reads every
|
|
79
77
|
project you can reach across all your orgs (as your sign-in session after
|
|
80
78
|
'run402 login', else as the current wallet). The 'active' marker still
|
|
81
79
|
comes from local state.
|
|
@@ -108,10 +106,10 @@ const SUB_HELP = {
|
|
|
108
106
|
list: `run402 projects list — List your projects from the server
|
|
109
107
|
|
|
110
108
|
Usage:
|
|
111
|
-
run402 projects list [--org <
|
|
109
|
+
run402 projects list [--org <org_id>] [--all]
|
|
112
110
|
|
|
113
111
|
Options:
|
|
114
|
-
--org <
|
|
112
|
+
--org <org_id> Filter to projects owned by one org (organization).
|
|
115
113
|
Authorize-before-reveal: a non-member or guessed id is a
|
|
116
114
|
403; a non-UUID id is a 400.
|
|
117
115
|
--all Read every project you can reach across all your orgs
|
|
@@ -135,10 +133,10 @@ Examples:
|
|
|
135
133
|
rename: `run402 projects rename — Rename a project
|
|
136
134
|
|
|
137
135
|
Usage:
|
|
138
|
-
run402 projects rename <
|
|
136
|
+
run402 projects rename <project_id> --name <label>
|
|
139
137
|
|
|
140
138
|
Arguments:
|
|
141
|
-
<
|
|
139
|
+
<project_id> Project ID (prefix: 'prj_'). Required.
|
|
142
140
|
|
|
143
141
|
Options:
|
|
144
142
|
--name <label> New display name (1-200 chars, no control characters).
|
|
@@ -183,12 +181,12 @@ Notes:
|
|
|
183
181
|
provision: `run402 projects provision — Provision a new Postgres project
|
|
184
182
|
|
|
185
183
|
Usage:
|
|
186
|
-
run402 projects provision [--tier <tier>] [--name <name>] [--org <
|
|
184
|
+
run402 projects provision [--tier <tier>] [--name <name>] [--org <org_id>] [--idempotency-key <key>]
|
|
187
185
|
|
|
188
186
|
Options:
|
|
189
187
|
--tier <tier> Tier for the new project (default: prototype)
|
|
190
188
|
--name <name> Human-readable name for the project
|
|
191
|
-
--org <
|
|
189
|
+
--org <org_id> Provision into an EXISTING org (needs developer+ on it).
|
|
192
190
|
Omit for the cold-start path. Tier is org-governed.
|
|
193
191
|
--idempotency-key <key> Retry-safe key: re-running with the same key returns
|
|
194
192
|
the existing project instead of duplicating it. Auto-derived
|
|
@@ -209,8 +207,8 @@ Examples:
|
|
|
209
207
|
sql: `run402 projects sql — Run a SQL query against a project's database
|
|
210
208
|
|
|
211
209
|
Usage:
|
|
212
|
-
run402 projects sql "<query>" [--project <
|
|
213
|
-
run402 projects sql --file <path> [--project <
|
|
210
|
+
run402 projects sql "<query>" [--project <project_id>] [options]
|
|
211
|
+
run402 projects sql --file <path> [--project <project_id>] [options]
|
|
214
212
|
|
|
215
213
|
Legacy (still supported):
|
|
216
214
|
run402 projects sql <prj_id> "<query>" [options]
|
|
@@ -219,7 +217,7 @@ Arguments:
|
|
|
219
217
|
<query> Inline SQL query (quote it to preserve spaces)
|
|
220
218
|
|
|
221
219
|
Options:
|
|
222
|
-
--project <
|
|
220
|
+
--project <project_id> Project ID (defaults to the active project; a leading
|
|
223
221
|
prj_... positional is also still accepted)
|
|
224
222
|
--file <path> Read SQL from a file instead of an inline query
|
|
225
223
|
--params '<json>' JSON array of parameters for a parameterized query
|
|
@@ -232,10 +230,10 @@ Examples:
|
|
|
232
230
|
costs: `run402 projects costs — Show admin-only per-project finance
|
|
233
231
|
|
|
234
232
|
Usage:
|
|
235
|
-
run402 projects costs [
|
|
233
|
+
run402 projects costs [project_id] [--window <24h|7d|30d|90d>]
|
|
236
234
|
|
|
237
235
|
Arguments:
|
|
238
|
-
[
|
|
236
|
+
[project_id] Project ID (defaults to the active project if omitted)
|
|
239
237
|
|
|
240
238
|
Options:
|
|
241
239
|
--window <w> Finance window (default: 30d). One of: 24h, 7d, 30d, 90d
|
|
@@ -258,12 +256,12 @@ Examples:
|
|
|
258
256
|
"validate-expose": `run402 projects validate-expose — Validate an authorization manifest without applying it
|
|
259
257
|
|
|
260
258
|
Usage:
|
|
261
|
-
run402 projects validate-expose [
|
|
262
|
-
run402 projects validate-expose [
|
|
263
|
-
cat manifest.json | run402 projects validate-expose [
|
|
259
|
+
run402 projects validate-expose [project_id] <manifest_json> [options]
|
|
260
|
+
run402 projects validate-expose [project_id] --file <path> [options]
|
|
261
|
+
cat manifest.json | run402 projects validate-expose [project_id] [options]
|
|
264
262
|
|
|
265
263
|
Arguments:
|
|
266
|
-
[
|
|
264
|
+
[project_id] Optional project ID. When omitted, the active project is
|
|
267
265
|
used if one is set; otherwise validation is projectless.
|
|
268
266
|
<manifest_json> Inline auth/expose manifest JSON.
|
|
269
267
|
|
|
@@ -328,7 +326,7 @@ async function provision(args) {
|
|
|
328
326
|
code: "BAD_USAGE",
|
|
329
327
|
message: "--org must not be empty.",
|
|
330
328
|
details: { field: "--org" },
|
|
331
|
-
hint: "Pass an org id (run402
|
|
329
|
+
hint: "Pass an org id (run402 orgs list), or omit --org for the cold-start path.",
|
|
332
330
|
});
|
|
333
331
|
}
|
|
334
332
|
// Validate --name when provided. Omitted --name lets the server pick a
|
|
@@ -452,7 +450,7 @@ async function validateExpose(args = []) {
|
|
|
452
450
|
fail({
|
|
453
451
|
code: "BAD_USAGE",
|
|
454
452
|
message: `Unexpected extra argument: ${arg}`,
|
|
455
|
-
hint: "run402 projects validate-expose [
|
|
453
|
+
hint: "run402 projects validate-expose [project_id] <manifest_json>",
|
|
456
454
|
});
|
|
457
455
|
}
|
|
458
456
|
}
|
|
@@ -460,7 +458,7 @@ async function validateExpose(args = []) {
|
|
|
460
458
|
fail({
|
|
461
459
|
code: "BAD_USAGE",
|
|
462
460
|
message: "Provide either inline manifest JSON or --file <path>, not both.",
|
|
463
|
-
hint: "run402 projects validate-expose [
|
|
461
|
+
hint: "run402 projects validate-expose [project_id] --file manifest.json",
|
|
464
462
|
});
|
|
465
463
|
}
|
|
466
464
|
if (migrationFile && migrationSql !== null) {
|
|
@@ -571,7 +569,7 @@ async function rename(projectId, args = []) {
|
|
|
571
569
|
fail({
|
|
572
570
|
code: "BAD_USAGE",
|
|
573
571
|
message: "Missing --name.",
|
|
574
|
-
hint: "run402 projects rename <
|
|
572
|
+
hint: "run402 projects rename <project_id> --name \"My Site\"",
|
|
575
573
|
});
|
|
576
574
|
}
|
|
577
575
|
try {
|
|
@@ -649,7 +647,7 @@ function commandMoved(name) {
|
|
|
649
647
|
fail({
|
|
650
648
|
code: "COMMAND_MOVED",
|
|
651
649
|
message: `run402 projects ${name} moved to the explicit local credential-cache surface.`,
|
|
652
|
-
hint: "Use `run402 credentials project-keys status/export --project <
|
|
650
|
+
hint: "Use `run402 credentials project-keys status/export --project <project_id>`.",
|
|
653
651
|
details: {
|
|
654
652
|
old_command: `projects ${name}`,
|
|
655
653
|
new_command: name === "keys" ? "credentials project-keys export --reveal" : "credentials project-keys status",
|
|
@@ -658,12 +656,12 @@ function commandMoved(name) {
|
|
|
658
656
|
next_actions: [
|
|
659
657
|
{
|
|
660
658
|
type: "run_command",
|
|
661
|
-
command: "run402 credentials project-keys status --project <
|
|
659
|
+
command: "run402 credentials project-keys status --project <project_id>",
|
|
662
660
|
why: "Inspect cached key presence without revealing secrets.",
|
|
663
661
|
},
|
|
664
662
|
{
|
|
665
663
|
type: "run_command",
|
|
666
|
-
command: "run402 credentials project-keys export --project <
|
|
664
|
+
command: "run402 credentials project-keys export --project <project_id> --reveal",
|
|
667
665
|
why: "Reveal cached project keys only when you explicitly need secret material.",
|
|
668
666
|
},
|
|
669
667
|
],
|
|
@@ -733,7 +731,7 @@ async function rest(projectId, restArgs = []) {
|
|
|
733
731
|
if (!table) {
|
|
734
732
|
fail({
|
|
735
733
|
code: "BAD_USAGE",
|
|
736
|
-
message: "Missing <table> argument. Usage: run402 projects rest <table> [--query \"<query>\"] [--project <
|
|
734
|
+
message: "Missing <table> argument. Usage: run402 projects rest <table> [--query \"<query>\"] [--project <project_id>]",
|
|
737
735
|
hint: "Run 'run402 projects schema' to list tables.",
|
|
738
736
|
});
|
|
739
737
|
}
|
|
@@ -886,10 +884,6 @@ const FLAGS_BY_SUB = {
|
|
|
886
884
|
values: ["--project", "--file", "--migration-file", "--migration-sql"],
|
|
887
885
|
},
|
|
888
886
|
delete: { known: ["--project", "--confirm"], values: ["--project"] },
|
|
889
|
-
export: {
|
|
890
|
-
known: ["--project", "--scope", "--auth", "--consistency", "--idempotency-key", "--output", "--poll-interval", "--timeout", "--wait", "--json", "--json-stream"],
|
|
891
|
-
values: ["--project", "--scope", "--auth", "--consistency", "--idempotency-key", "--output", "--poll-interval", "--timeout"],
|
|
892
|
-
},
|
|
893
887
|
};
|
|
894
888
|
|
|
895
889
|
function validateFlags(sub, args) {
|
|
@@ -937,11 +931,6 @@ export async function run(sub, args) {
|
|
|
937
931
|
case "validate-expose": await validateExpose(args); break;
|
|
938
932
|
case "get-expose": { const { projectId } = resolveProjectSelector(args, { rejectBareFirst: true }); await getExpose(projectId); break; }
|
|
939
933
|
case "delete": { const { projectId, rest } = resolveProjectSelector(args, { rejectBareFirst: true }); await deleteProject(projectId, rest); break; }
|
|
940
|
-
case "export": {
|
|
941
|
-
const { run } = await import("./cloud.mjs");
|
|
942
|
-
await run("archives", ["create", ...args]);
|
|
943
|
-
break;
|
|
944
|
-
}
|
|
945
934
|
case "promote-user": { const { projectId, rest } = resolveProjectSelector(args); await promoteUser(projectId, rest[0]); break; }
|
|
946
935
|
case "demote-user": { const { projectId, rest } = resolveProjectSelector(args); await demoteUser(projectId, rest[0]); break; }
|
|
947
936
|
default:
|