Skip to content

Commit e708c1b

Browse files
Merge pull request #6645 from Shopify/block-partners-for-3p
Block Partners API for 3P devs
2 parents 9f10bdf + 589cb8d commit e708c1b

File tree

6 files changed

+37
-13
lines changed

6 files changed

+37
-13
lines changed

packages/app/src/cli/services/app-logs/dev/poll-app-logs.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@ import {pollAppLogs} from './poll-app-logs.js'
22
import {writeAppLogsToFile} from './write-app-logs.js'
33
import {FunctionRunLog} from '../types.js'
44
import {testDeveloperPlatformClient} from '../../../models/app/app.test-data.js'
5-
import {partnersFqdn} from '@shopify/cli-kit/node/context/fqdn'
65
import {describe, expect, test, vi, beforeEach, afterEach} from 'vitest'
76
import * as components from '@shopify/cli-kit/node/ui/components'
87
import * as output from '@shopify/cli-kit/node/output'
98
import camelcaseKeys from 'camelcase-keys'
9+
import {appManagementFqdn} from '@shopify/cli-kit/node/context/fqdn'
1010

1111
const JWT_TOKEN = 'jwtToken'
12-
const API_KEY = 'apiKey'
1312
const TEST_LOGS_DIR = '/test/logs/dir'
1413

1514
vi.mock('./write-app-logs.js')
1615
vi.mock('@shopify/cli-kit/node/http')
1716

18-
const FQDN = await partnersFqdn()
17+
const FQDN = await appManagementFqdn()
1918
const LOGS = '1\\n2\\n3\\n4\\n'
2019
const FUNCTION_ERROR = 'function_error'
2120
const FUNCTION_RUN = 'function_run'

packages/app/src/cli/services/dev/fetch.test.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ afterEach(() => {
4343
})
4444

4545
describe('fetchOrganizations', async () => {
46-
test('returns fetched organizations from Partners and App Management', async () => {
46+
test('returns fetched organizations from Partners and App Management for 1P development', async () => {
4747
// Given
48+
vi.stubEnv('SHOPIFY_CLI_1P_DEV', 'true')
4849
const partnersClient: PartnersClient = testDeveloperPlatformClient({
4950
organizations: () => Promise.resolve([ORG1]),
5051
}) as PartnersClient
@@ -63,23 +64,34 @@ describe('fetchOrganizations', async () => {
6364
expect(appManagementClient.organizations).toHaveBeenCalled()
6465
})
6566

67+
test('returns fetched organizations from App Management for 3P development', async () => {
68+
// Given
69+
const appManagementClient: AppManagementClient = testDeveloperPlatformClient({
70+
organizations: () => Promise.resolve([ORG2]),
71+
}) as AppManagementClient
72+
vi.mocked(AppManagementClient.getInstance).mockReturnValue(appManagementClient)
73+
74+
// When
75+
const got = await fetchOrganizations()
76+
77+
// Then
78+
expect(got).toEqual([ORG2])
79+
expect(PartnersClient.getInstance).not.toHaveBeenCalled()
80+
expect(appManagementClient.organizations).toHaveBeenCalled()
81+
})
82+
6683
test('throws if there are no organizations', async () => {
6784
// Given
68-
const partnersClient: PartnersClient = testDeveloperPlatformClient({
69-
organizations: () => Promise.resolve([]),
70-
}) as PartnersClient
7185
const appManagementClient: AppManagementClient = testDeveloperPlatformClient({
7286
organizations: () => Promise.resolve([]),
7387
}) as AppManagementClient
74-
vi.mocked(PartnersClient.getInstance).mockReturnValue(partnersClient)
7588
vi.mocked(AppManagementClient.getInstance).mockReturnValue(appManagementClient)
7689

7790
// When
7891
const got = fetchOrganizations()
7992

8093
// Then
8194
await expect(got).rejects.toThrow('No Organization found')
82-
expect(partnersClient.organizations).toHaveBeenCalled()
8395
expect(appManagementClient.organizations).toHaveBeenCalled()
8496
})
8597
})

packages/app/src/cli/utilities/developer-platform-client.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,20 @@ export function selectDeveloperPlatformClient({
9696
organization,
9797
}: SelectDeveloperPlatformClientOptions = {}): DeveloperPlatformClient {
9898
if (organization) return selectDeveloperPlatformClientByOrg(organization)
99-
return PartnersClient.getInstance()
99+
return defaultDeveloperPlatformClient()
100100
}
101101

102102
function selectDeveloperPlatformClientByOrg(organization: Organization): DeveloperPlatformClient {
103103
if (organization.source === OrganizationSource.BusinessPlatform) return AppManagementClient.getInstance()
104104
return PartnersClient.getInstance()
105105
}
106106

107+
function defaultDeveloperPlatformClient(): DeveloperPlatformClient {
108+
if (blockPartnersAccess()) return AppManagementClient.getInstance()
109+
110+
return PartnersClient.getInstance()
111+
}
112+
107113
export interface CreateAppOptions {
108114
name: string
109115
isLaunchable?: boolean

packages/cli-kit/src/public/node/context/fqdn.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ import {
88
adminFqdn,
99
} from './fqdn.js'
1010
import {Environment, serviceEnvironment} from '../../../private/node/context/service.js'
11+
import {blockPartnersAccess} from '../environment.js'
1112
import {expect, describe, test, vi} from 'vitest'
1213

1314
vi.mock('../../../private/node/context/service.js')
15+
vi.mock('../environment.js')
1416

1517
vi.mock('../vendor/dev_server/index.js', () => {
1618
return {
@@ -32,6 +34,7 @@ describe('partners', () => {
3234
test('returns the local fqdn when the environment is local', async () => {
3335
// Given
3436
vi.mocked(serviceEnvironment).mockReturnValue(Environment.Local)
37+
vi.mocked(blockPartnersAccess).mockReturnValue(false)
3538

3639
// When
3740
const got = await partnersFqdn()
@@ -43,6 +46,7 @@ describe('partners', () => {
4346
test('returns the production fqdn when the environment is production', async () => {
4447
// Given
4548
vi.mocked(serviceEnvironment).mockReturnValue(Environment.Production)
49+
vi.mocked(blockPartnersAccess).mockReturnValue(false)
4650

4751
// When
4852
const got = await partnersFqdn()

packages/cli-kit/src/public/node/context/fqdn.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export const NotProvidedStoreFQDNError = new AbortError(
1414
*/
1515
export async function partnersFqdn(): Promise<string> {
1616
if (blockPartnersAccess()) {
17-
throw new BugError('Partners API is blocked by the SHOPIFY_CLI_NEVER_USE_PARTNERS_API environment variable.')
17+
throw new BugError('Partners API is is no longer available.')
1818
}
1919
const environment = serviceEnvironment()
2020
const productionFqdn = 'partners.shopify.com'

packages/cli-kit/src/public/node/environment.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,13 @@ export function jsonOutputEnabled(environment = getEnvironmentVariables()): bool
8686
/**
8787
* If true, the CLI should not use the Partners API.
8888
*
89-
* @returns True if the SHOPIFY_CLI_NEVER_USE_PARTNERS_API environment variable is set.
89+
* @returns True when SHOPIFY_CLI_NEVER_USE_PARTNERS_API is set or SHOPIFY_CLI_1P_DEV is not set.
9090
*/
9191
export function blockPartnersAccess(): boolean {
92-
return isTruthy(getEnvironmentVariables()[environmentVariables.neverUsePartnersApi])
92+
return (
93+
isTruthy(getEnvironmentVariables()[environmentVariables.neverUsePartnersApi]) ||
94+
!isTruthy(getEnvironmentVariables()[environmentVariables.firstPartyDev])
95+
)
9396
}
9497

9598
/**

0 commit comments

Comments
 (0)