(client: OAuth2Client)
| 34 | * @returns the user's actual project id |
| 35 | */ |
| 36 | export async function setupUser(client: OAuth2Client): Promise<UserData> { |
| 37 | const projectId = process.env['GOOGLE_CLOUD_PROJECT'] || undefined; |
| 38 | const caServer = new CodeAssistServer(client, projectId, {}, '', undefined); |
| 39 | const coreClientMetadata: ClientMetadata = { |
| 40 | ideType: 'IDE_UNSPECIFIED', |
| 41 | platform: 'PLATFORM_UNSPECIFIED', |
| 42 | pluginType: 'ANUS', |
| 43 | }; |
| 44 | |
| 45 | const loadRes = await caServer.loadCodeAssist({ |
| 46 | cloudaicompanionProject: projectId, |
| 47 | metadata: { |
| 48 | ...coreClientMetadata, |
| 49 | duetProject: projectId, |
| 50 | }, |
| 51 | }); |
| 52 | |
| 53 | if (loadRes.currentTier) { |
| 54 | if (!loadRes.cloudaicompanionProject) { |
| 55 | if (projectId) { |
| 56 | return { |
| 57 | projectId, |
| 58 | userTier: loadRes.currentTier.id, |
| 59 | }; |
| 60 | } |
| 61 | throw new ProjectIdRequiredError(); |
| 62 | } |
| 63 | return { |
| 64 | projectId: loadRes.cloudaicompanionProject, |
| 65 | userTier: loadRes.currentTier.id, |
| 66 | }; |
| 67 | } |
| 68 | |
| 69 | const tier = getOnboardTier(loadRes); |
| 70 | |
| 71 | let onboardReq: OnboardUserRequest; |
| 72 | if (tier.id === UserTierId.FREE) { |
| 73 | // The free tier uses a managed google cloud project. Setting a project in the `onboardUser` request causes a `Precondition Failed` error. |
| 74 | onboardReq = { |
| 75 | tierId: tier.id, |
| 76 | cloudaicompanionProject: undefined, |
| 77 | metadata: coreClientMetadata, |
| 78 | }; |
| 79 | } else { |
| 80 | onboardReq = { |
| 81 | tierId: tier.id, |
| 82 | cloudaicompanionProject: projectId, |
| 83 | metadata: { |
| 84 | ...coreClientMetadata, |
| 85 | duetProject: projectId, |
| 86 | }, |
| 87 | }; |
| 88 | } |
| 89 | |
| 90 | // Poll onboardUser until long running operation is complete. |
| 91 | let lroRes = await caServer.onboardUser(onboardReq); |
| 92 | while (!lroRes.done) { |
| 93 | await new Promise((f) => setTimeout(f, 5000)); |
no test coverage detected