Skip to content

Commit 6270bf6

Browse files
Use the right token after refresh for Business Platfrom
1 parent 12bc1ed commit 6270bf6

File tree

3 files changed

+54
-21
lines changed

3 files changed

+54
-21
lines changed

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

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import {createUnauthorizedHandler, DeveloperPlatformClient} from './developer-pl
22
import {describe, expect, test, vi} from 'vitest'
33

44
describe('createUnauthorizedHandler', () => {
5-
const mockToken = 'mock-refreshed-token'
5+
const mockAppManagementToken = 'mock-app-management-token'
6+
const mockBusinessPlatformToken = 'mock-business-platform-token'
67
const createMockClient = () => {
78
let tokenRefreshPromise: Promise<string> | undefined
89
return {
@@ -13,17 +14,21 @@ describe('createUnauthorizedHandler', () => {
1314
clearCurrentlyRefreshingToken: () => {
1415
tokenRefreshPromise = undefined
1516
},
16-
unsafeRefreshToken: vi.fn().mockResolvedValue(mockToken),
17+
unsafeRefreshToken: vi.fn().mockResolvedValue(mockAppManagementToken),
18+
session: vi.fn().mockResolvedValue({
19+
token: mockAppManagementToken,
20+
businessPlatformToken: mockBusinessPlatformToken,
21+
}),
1722
} as unknown as DeveloperPlatformClient
1823
}
1924

20-
test('refreshes token on first attempt', async () => {
25+
test('refreshes token on first attempt and returns appManagement token by default', async () => {
2126
const mockClient = createMockClient()
2227
const handler = createUnauthorizedHandler(mockClient)
2328

2429
const result = await handler.handler()
2530

26-
expect(result).toEqual({token: mockToken})
31+
expect(result).toEqual({token: mockAppManagementToken})
2732
expect(mockClient.unsafeRefreshToken).toHaveBeenCalledTimes(1)
2833
})
2934

@@ -35,7 +40,7 @@ describe('createUnauthorizedHandler', () => {
3540
handler.handler()
3641
const result = await handler.handler()
3742

38-
expect(result).toEqual({token: mockToken})
43+
expect(result).toEqual({token: mockAppManagementToken})
3944
expect(mockClient.unsafeRefreshToken).toHaveBeenCalledTimes(1)
4045
})
4146

@@ -51,4 +56,24 @@ describe('createUnauthorizedHandler', () => {
5156
// The following is evidence that the finally block is called correctly
5257
expect(mockClient.unsafeRefreshToken).toHaveBeenCalledTimes(2)
5358
})
59+
60+
test('returns businessPlatform token when tokenType is businessPlatform', async () => {
61+
const mockClient = createMockClient()
62+
const handler = createUnauthorizedHandler(mockClient, 'businessPlatform')
63+
64+
const result = await handler.handler()
65+
66+
expect(result).toEqual({token: mockBusinessPlatformToken})
67+
expect(mockClient.unsafeRefreshToken).toHaveBeenCalledTimes(1)
68+
})
69+
70+
test('returns appManagement token when tokenType is appManagement', async () => {
71+
const mockClient = createMockClient()
72+
const handler = createUnauthorizedHandler(mockClient, 'appManagement')
73+
74+
const result = await handler.handler()
75+
76+
expect(result).toEqual({token: mockAppManagementToken})
77+
expect(mockClient.unsafeRefreshToken).toHaveBeenCalledTimes(1)
78+
})
5479
})

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,24 +296,30 @@ export interface DeveloperPlatformClient {
296296

297297
const inProgressRefreshes = new WeakMap<DeveloperPlatformClient, Promise<string>>()
298298

299-
export function createUnauthorizedHandler(client: DeveloperPlatformClient): UnauthorizedHandler {
299+
export function createUnauthorizedHandler(
300+
client: DeveloperPlatformClient,
301+
tokenType: 'appManagement' | 'businessPlatform' = 'appManagement',
302+
): UnauthorizedHandler {
300303
return {
301304
type: 'token_refresh',
302305
handler: async () => {
303306
let tokenRefresher = inProgressRefreshes.get(client)
304307
if (tokenRefresher) {
305-
const token = await tokenRefresher
306-
return {token}
308+
await tokenRefresher
307309
} else {
308310
try {
309311
tokenRefresher = client.unsafeRefreshToken()
310312
inProgressRefreshes.set(client, tokenRefresher)
311-
const token = await tokenRefresher
312-
return {token}
313+
await tokenRefresher
313314
} finally {
314315
inProgressRefreshes.delete(client)
315316
}
316317
}
318+
319+
// After refresh, get the appropriate token based on the request type
320+
const session = await client.session()
321+
const token = tokenType === 'businessPlatform' ? session.businessPlatformToken : session.token
322+
return {token}
317323
},
318324
}
319325
}

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

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
273273
cacheExtraKey: userId,
274274
},
275275
token: businessPlatformToken,
276-
unauthorizedHandler: this.createUnauthorizedHandler(),
276+
unauthorizedHandler: this.createUnauthorizedHandler('businessPlatform'),
277277
})
278278

279279
if (getPartnersToken() && userInfoResult.currentUserAccount) {
@@ -856,7 +856,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
856856
token: await this.businessPlatformToken(),
857857
organizationId: String(numberFromGid(orgId)),
858858
variables,
859-
unauthorizedHandler: this.createUnauthorizedHandler(),
859+
unauthorizedHandler: this.createUnauthorizedHandler('appManagement'),
860860
})
861861
const provisionResult = fullResult.organizationUserProvisionShopAccess
862862
if (!provisionResult.success) {
@@ -1057,7 +1057,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
10571057
token: await this.businessPlatformToken(),
10581058
organizationId,
10591059
variables,
1060-
unauthorizedHandler: this.createUnauthorizedHandler(),
1060+
unauthorizedHandler: this.createUnauthorizedHandler('appManagement'),
10611061
})
10621062
const result: {[flag: (typeof allBetaFlags)[number]]: boolean} = {}
10631063
allBetaFlags.forEach((flag) => {
@@ -1072,7 +1072,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
10721072
return appManagementRequestDoc({
10731073
...options,
10741074
token: await this.token(),
1075-
unauthorizedHandler: this.createUnauthorizedHandler(),
1075+
unauthorizedHandler: this.createUnauthorizedHandler('appManagement'),
10761076
})
10771077
}
10781078

@@ -1082,7 +1082,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
10821082
return appDevRequestDoc({
10831083
...options,
10841084
token: await this.token(),
1085-
unauthorizedHandler: this.createUnauthorizedHandler(),
1085+
unauthorizedHandler: this.createUnauthorizedHandler('appManagement'),
10861086
})
10871087
}
10881088

@@ -1092,7 +1092,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
10921092
return businessPlatformRequestDoc({
10931093
...options,
10941094
token: await this.businessPlatformToken(),
1095-
unauthorizedHandler: this.createUnauthorizedHandler(),
1095+
unauthorizedHandler: this.createUnauthorizedHandler('businessPlatform'),
10961096
})
10971097
}
10981098

@@ -1102,7 +1102,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
11021102
return businessPlatformOrganizationsRequestDoc({
11031103
...options,
11041104
token: await this.businessPlatformToken(),
1105-
unauthorizedHandler: this.createUnauthorizedHandler(),
1105+
unauthorizedHandler: this.createUnauthorizedHandler('businessPlatform'),
11061106
})
11071107
}
11081108

@@ -1112,7 +1112,7 @@ export class AppManagementClient implements DeveloperPlatformClient {
11121112
return functionsRequestDoc<TResult, TVariables>({
11131113
...options,
11141114
token: await this.token(),
1115-
unauthorizedHandler: this.createUnauthorizedHandler(),
1115+
unauthorizedHandler: this.createUnauthorizedHandler('appManagement'),
11161116
})
11171117
}
11181118

@@ -1122,12 +1122,14 @@ export class AppManagementClient implements DeveloperPlatformClient {
11221122
return webhooksRequestDoc<TResult, TVariables>({
11231123
...options,
11241124
token: await this.token(),
1125-
unauthorizedHandler: this.createUnauthorizedHandler(),
1125+
unauthorizedHandler: this.createUnauthorizedHandler('appManagement'),
11261126
})
11271127
}
11281128

1129-
private createUnauthorizedHandler(): UnauthorizedHandler {
1130-
return createUnauthorizedHandler(this)
1129+
private createUnauthorizedHandler(
1130+
tokenType: 'appManagement' | 'businessPlatform' = 'appManagement',
1131+
): UnauthorizedHandler {
1132+
return createUnauthorizedHandler(this, tokenType)
11311133
}
11321134
}
11331135

0 commit comments

Comments
 (0)