fix(cli): unify teamId scoping for all marketplace integration commands#15183
fix(cli): unify teamId scoping for all marketplace integration commands#15183
Conversation
🦋 Changeset detectedLatest commit: 7e1035f The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
This stack of pull requests is managed by Graphite. Learn more about stacking. |
📦 CLI Tarball ReadyThe Vercel CLI tarball for this PR is now available! Quick TestYou can test this PR's CLI directly by running: npx https://vercel-5bdyf1mcm.vercel.sh/tarballs/vercel.tgz --helpUse in vercel.jsonTo use this CLI version in your project builds, add to your {
"build": {
"env": {
"VERCEL_CLI_VERSION": "vercel@https://vercel-5bdyf1mcm.vercel.sh/tarballs/vercel.tgz"
}
}
}Python Runtime WheelA Python runtime wheel was also built for this PR. |
🧪 Unit Test StrategyComparing: Strategy: Affected packages only ✅ Only testing packages that have been modified or depend on modified packages. Affected packages - 1 (3%)
Unaffected packages - 39 (98%)
Results
This comment is automatically generated based on the affected testing strategy |
|
Nice cleanup — the unified One suggestion: consider adding a regression test that validates the actual Northstar path end-to-end — i.e., a mock client where Written by claude code on behalf of @bhrigu123 |
c6f6c86 to
416da2a
Compare
|
Added a Northstar regression test in Also hardened the shared |
416da2a to
b84a803
Compare
For Northstar users, `getScope()` resolves the team via `user.defaultTeamId` but does not set `client.config.currentTeam`. This meant `client.fetch()` never auto-appended `teamId`, causing API calls to return empty results or 409 errors. Previously each utility tried to fix this independently by accepting explicit `teamId` params (e.g. PR #15054 for fetchMarketplaceIntegrations). This was whack-a-mole — other utilities like fetchInstallations, fetchInstallationPrepaymentInfo, and getResources had the same bug. Unify the pattern: every integration/integration-resource command now sets `client.config.currentTeam = team.id` after getScope(), matching the established pattern used by ~13 other CLI commands (env, flags, deploy, etc.). All downstream utilities rely on auto-append and no longer accept explicit teamId/team params. - 9 commands: add currentTeam assignment after getScope - 5 utilities: remove explicit teamId params and searchParams - All callers updated to match new signatures - 276 tests pass across 10 test files
b84a803 to
7e1035f
Compare
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @vercel/build-utils@13.5.0 ### Minor Changes - Add django experimental framework. ([#15196](#15196)) ### Patch Changes - Updated dependencies \[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/python-analysis@0.7.0 ## @vercel/frameworks@3.19.0 ### Minor Changes - Add django experimental framework. ([#15196](#15196)) ## @vercel/python@6.16.0 ### Minor Changes - [python] add support for running generic ASGI/WSGI applications to vc dev ([#15174](#15174)) ### Patch Changes - Updated dependencies \[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/python-analysis@0.7.0 ## @vercel/python-analysis@0.7.0 ### Minor Changes - Add django experimental framework. ([#15196](#15196)) ## @vercel/backends@0.0.37 ### Patch Changes - Updated dependencies \[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/build-utils@13.5.0 ## @vercel/cervel@0.0.24 ### Patch Changes - Updated dependencies \[]: - @vercel/backends@0.0.37 ## vercel@50.22.2 ### Patch Changes - fix(cli): add `integration-resource` command to `vc --help` output ([#15191](#15191)) - fix(cli): filter empty strings from trailing commas in array metadata ([#15163](#15163)) - fix(cli): add non-TTY guards and fix exit codes in marketplace commands ([#15158](#15158)) - Adding in a non-interactive flag for env command ([#14912](#14912)) - fix(cli): unify teamId scoping for all marketplace integration commands ([#15183](#15183)) - Updated dependencies \[[`3c4aff4acbfa603705556d145236b8a9ef106331`](3c4aff4), [`984d44875f959058f5d13fea27373785b1d66b6f`](984d448), [`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/next@4.15.32 - @vercel/python@6.16.0 - @vercel/build-utils@13.5.0 - @vercel/backends@0.0.37 - @vercel/elysia@0.1.40 - @vercel/express@0.1.49 - @vercel/fastify@0.1.43 - @vercel/go@3.4.1 - @vercel/h3@0.1.49 - @vercel/hono@0.2.43 - @vercel/hydrogen@1.3.5 - @vercel/koa@0.1.23 - @vercel/nestjs@0.2.44 - @vercel/node@5.6.7 - @vercel/redwood@2.4.9 - @vercel/remix-builder@5.5.10 - @vercel/ruby@2.3.1 - @vercel/rust@1.0.5 - @vercel/static-build@2.8.41 ## @vercel/client@17.2.46 ### Patch Changes - Updated dependencies \[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/build-utils@13.5.0 ## @vercel/elysia@0.1.40 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.7 ## @vercel/express@0.1.49 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.7 - @vercel/cervel@0.0.24 ## @vercel/fastify@0.1.43 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.7 ## @vercel/fs-detectors@5.8.10 ### Patch Changes - Updated dependencies \[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/frameworks@3.19.0 ## @vercel/gatsby-plugin-vercel-builder@2.0.139 ### Patch Changes - Updated dependencies \[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/build-utils@13.5.0 ## @vercel/h3@0.1.49 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.7 ## @vercel/hono@0.2.43 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.7 ## @vercel/koa@0.1.23 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.7 ## @vercel/nestjs@0.2.44 ### Patch Changes - Updated dependencies \[]: - @vercel/node@5.6.7 ## @vercel/next@4.15.32 ### Patch Changes - Revert per function builder support ([#15209](#15209)) ## @vercel/node@5.6.7 ### Patch Changes - Updated dependencies \[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]: - @vercel/build-utils@13.5.0 ## @vercel/static-build@2.8.41 ### Patch Changes - Updated dependencies \[]: - @vercel/gatsby-plugin-vercel-builder@2.0.139 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

Summary
For Northstar users,
getScope()resolves the team viauser.defaultTeamIdbut does not setclient.config.currentTeam. This meantclient.fetch()never auto-appendedteamId, causing API calls to scope to the wrong context — returning empty results or 409 "already installed" errors.Previously each utility tried to fix this independently by accepting explicit
teamIdparams (e.g. #15054 forfetchMarketplaceIntegrations). This was whack-a-mole — other utilities likefetchInstallations,fetchInstallationPrepaymentInfo, andgetResourceshad the same bug.This PR unifies the pattern: every integration/integration-resource command now sets
client.config.currentTeam = team.idaftergetScope(), matching the established pattern used by ~13 other CLI commands (env,flags,deploy, etc.). All downstream utilities rely on auto-append and no longer accept explicitteamId/teamparams.Changes
9 commands — add
currentTeamassignment aftergetScope:integration add,integration add(auto-provision),integration balanceintegration list,integration open,integration removeintegration-resource disconnect,integration-resource create-threshold,integration-resource remove5 utilities — remove explicit
teamIdparams:fetch-marketplace-integrations.ts(reverts [cli] Fix integration remove, balance, and open commands not finding integrations #15054 utility-level fix)fetch-installation-prepayment-info.tsget-resources.tsremove-integration.tsdelete-resource.tsImplicitly fixed utilities (already relied on auto-append, but
currentTeamwas never set for Northstar users before this PR):fetchInstallations— called fromadd.tsandadd-auto-provision.tsdisconnectResourceFromProject,provisionStoreResource,createAuthorization,fetchBillingPlansNet effect: -31 lines, simpler utility signatures, one consistent pattern.
Test plan
Unit Tests
useConfigurationvalidatesteamIdquery param is present (400 if missing)Manual Testing
All commands tested with
--debugto verifyteamIdauto-injection in every API URL:vc integration list/v1/storage/storesvc integration balance upstash/v2/integrations/configurations,/v1/storage/stores,/v1/integrations/installations/.../billing/balancevc integration open upstash/v2/integrations/configurationsvc integration add upstash(legacy)/v2/integrations/integration/upstash,/v2/integrations/configurationsFF=1 vc integration add upstash/upstash-kv(auto-provision)/v2/integrations/integration/upstash,/v2/integrations/configurationsvc integration remove upstash/v2/integrations/configurationsvc integration-resource disconnect/v1/storage/storesCode paths covered
getResources()teamIdquery paramcurrentTeamfetchMarketplaceIntegrations()teamId+useCurrentTeam: falsedeleteResource()teamIdfromteamparamremoveIntegration()teamIdfromteamparamfetchInstallationPrepaymentInfo()teamIdquery param🤖 Generated with Claude Code
Note
Low Risk Change
Refactors CLI commands to set currentTeam config after getScope() and removes explicit teamId parameters from utility functions, relying on auto-append behavior - a pattern change that could affect API scoping if currentTeam is not properly set.
client.config.currentTeam = team.idassignment in 9 integration commandsteamIdparams from 5 utility functions (getResources, fetchMarketplaceIntegrations, etc.)useCurrentTeam: falseflag from fetchMarketplaceIntegrationsRisk assessment for commit 7e1035f.