MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / connectGoogleAccount

Function connectGoogleAccount

e2e/scenarios/google-disabled-api.test.ts:146–204  ·  view source on GitHub ↗
(input: {
  readonly client: Client;
  readonly emulator: EmulatorClient;
  readonly emulatorBaseUrl: string;
  readonly target: TargetShape;
  readonly integration: IntegrationSlug;
  readonly oauthClient: OAuthClientSlug;
})

Source from the content-addressed store, hash-verified

144 });
145
146const connectGoogleAccount = (input: {
147 readonly client: Client;
148 readonly emulator: EmulatorClient;
149 readonly emulatorBaseUrl: string;
150 readonly target: TargetShape;
151 readonly integration: IntegrationSlug;
152 readonly oauthClient: OAuthClientSlug;
153}) =>
154 Effect.gen(function* () {
155 const redirectUri = new URL("/api/oauth/callback", input.target.baseUrl).toString();
156 const credential = yield* Effect.promise(() =>
157 input.emulator.credentials.mint({
158 type: "oauth-authorization-code",
159 redirect_uris: [redirectUri],
160 }),
161 );
162 if (!credential.client_id || !credential.client_secret) {
163 return yield* Effect.die(`Google emulator did not mint an OAuth client`);
164 }
165
166 yield* input.client.openapi.configure({
167 params: { slug: input.integration },
168 payload: { baseUrl: input.emulatorBaseUrl },
169 });
170 yield* input.client.oauth.createClient({
171 payload: {
172 owner: "org",
173 slug: input.oauthClient,
174 grant: "authorization_code",
175 authorizationUrl: `${input.emulatorBaseUrl}/o/oauth2/v2/auth`,
176 tokenUrl: `${input.emulatorBaseUrl}/oauth2/token`,
177 clientId: credential.client_id,
178 clientSecret: credential.client_secret,
179 originIntegration: input.integration,
180 },
181 });
182
183 const started = yield* input.client.oauth.start({
184 payload: {
185 client: input.oauthClient,
186 clientOwner: "org",
187 owner: "org",
188 name: CONNECTION,
189 integration: input.integration,
190 template: GOOGLE_AUTH_TEMPLATE,
191 redirectUri,
192 },
193 });
194 expect(started.status, "OAuth starts with an emulator redirect").toBe("redirect");
195 if (started.status !== "redirect") return yield* Effect.die("OAuth unexpectedly connected");
196
197 const code = yield* completeGoogleConsent(started.authorizationUrl);
198 const completed = yield* input.client.oauth.complete({
199 payload: { state: started.state, code },
200 });
201 expect(completed.integration, "OAuth completion creates the connection").toBe(
202 input.integration,
203 );

Callers 1

Calls 4

toStringMethod · 0.80
completeMethod · 0.80
completeGoogleConsentFunction · 0.70
startMethod · 0.65

Tested by

no test coverage detected