instant-cli 1.0.23-branch-codex-cli-args-combinators.25393207850.1 → 1.0.23-branch-codex-cli-args-combinators.25394030897.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/dist/commands/auth/client/update.d.ts.map +1 -1
- package/dist/commands/auth/client/update.js +15 -87
- package/dist/commands/auth/client/update.js.map +1 -1
- package/dist/lib/args.d.ts.map +1 -1
- package/dist/lib/args.js +2 -1
- package/dist/lib/args.js.map +1 -1
- package/dist/lib/oauth.d.ts.map +1 -1
- package/dist/lib/oauth.js +1 -1
- package/dist/lib/oauth.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/auth/client/update.ts +75 -111
- package/src/lib/args.ts +3 -3
- package/src/lib/oauth.ts +1 -5
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> instant-cli@1.0.23-branch-codex-cli-args-combinators.
|
|
2
|
+
> instant-cli@1.0.23-branch-codex-cli-args-combinators.25394030897.1 build /home/runner/work/instant/instant/client/packages/cli
|
|
3
3
|
> rm -rf dist; tsc -p tsconfig.build.json
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA+uB5D,eAAO,MAAM,mBAAmB;;;;ieA6D/B,CAAC"}
|
|
@@ -76,12 +76,6 @@ const updateGoogleToDevCredentials = Effect.fn(function* (client) {
|
|
|
76
76
|
const hasGoogleCustomCredentialFlags = (opts) => hasAnyFlag(opts, ['client-id', 'client-secret', 'custom-redirect-uri']);
|
|
77
77
|
const hasGoogleUpdateFlags = (opts) => isTrueFlag(getFlag(opts, 'dev-credentials')) ||
|
|
78
78
|
hasGoogleCustomCredentialFlags(opts);
|
|
79
|
-
const textWhenNeeded = (opts, flag, params) => Effect.gen(function* () {
|
|
80
|
-
const value = getFlag(opts, flag);
|
|
81
|
-
if (value === undefined && !params.promptIf)
|
|
82
|
-
return undefined;
|
|
83
|
-
return yield* Args.text(opts, flag).pipe(Args.orPromptIf(params.promptIf, params.prompt), Args.requiredIf(params.required ?? params.promptIf));
|
|
84
|
-
});
|
|
85
79
|
const selectGoogleUpdateMode = Effect.fn(function* ({ isWeb, switchingFromShared, }) {
|
|
86
80
|
if (switchingFromShared) {
|
|
87
81
|
return yield* runUIEffect(new UI.Select({
|
|
@@ -151,16 +145,7 @@ const resolveGoogleUpdateMode = Effect.fn(function* ({ opts, isWeb, switchingFro
|
|
|
151
145
|
return yield* selectGoogleUpdateMode({ isWeb, switchingFromShared });
|
|
152
146
|
});
|
|
153
147
|
const updateGoogleRedirect = Effect.fn(function* ({ opts, client, }) {
|
|
154
|
-
const redirectTo = yield*
|
|
155
|
-
promptIf: true,
|
|
156
|
-
required: true,
|
|
157
|
-
prompt: newRedirectPrompt,
|
|
158
|
-
});
|
|
159
|
-
if (!redirectTo) {
|
|
160
|
-
return yield* BadArgsError.make({
|
|
161
|
-
message: 'Missing required value for --custom-redirect-uri',
|
|
162
|
-
});
|
|
163
|
-
}
|
|
148
|
+
const redirectTo = yield* Args.text(opts, 'custom-redirect-uri').pipe(Args.orPrompt(newRedirectPrompt), Args.required());
|
|
164
149
|
const response = yield* updateOAuthClient({
|
|
165
150
|
oauthClientId: client.id,
|
|
166
151
|
redirectTo,
|
|
@@ -182,22 +167,10 @@ const updateGoogleCustomCredentials = Effect.fn(function* ({ opts, client, isWeb
|
|
|
182
167
|
(promptCredentials ||
|
|
183
168
|
(switchingFromShared && !hasFlag(opts, 'client-secret')));
|
|
184
169
|
const shouldPromptRedirectUri = isWeb && switchingFromShared && promptCredentials;
|
|
185
|
-
const clientId = yield*
|
|
186
|
-
|
|
187
|
-
required: mustCollectCredentials,
|
|
188
|
-
prompt: clientIdPrompt({ providerUrl: googleConsoleUrl }),
|
|
189
|
-
});
|
|
190
|
-
const clientSecret = yield* textWhenNeeded(opts, 'client-secret', {
|
|
191
|
-
promptIf: shouldPromptClientSecret,
|
|
192
|
-
required: isWeb && mustCollectCredentials,
|
|
193
|
-
prompt: clientSecretPrompt({ providerUrl: googleConsoleUrl }),
|
|
194
|
-
});
|
|
170
|
+
const clientId = yield* Args.text(opts, 'client-id').pipe(Args.orPromptIf(shouldPromptClientId, clientIdPrompt({ providerUrl: googleConsoleUrl })), Args.requiredIf(mustCollectCredentials));
|
|
171
|
+
const clientSecret = yield* Args.text(opts, 'client-secret').pipe(Args.orPromptIf(shouldPromptClientSecret, clientSecretPrompt({ providerUrl: googleConsoleUrl })), Args.requiredIf(isWeb && mustCollectCredentials));
|
|
195
172
|
const customRedirectUri = isWeb
|
|
196
|
-
? yield*
|
|
197
|
-
promptIf: shouldPromptRedirectUri,
|
|
198
|
-
required: false,
|
|
199
|
-
prompt: redirectPrompt,
|
|
200
|
-
})
|
|
173
|
+
? yield* Args.text(opts, 'custom-redirect-uri').pipe(Args.orPromptIf(shouldPromptRedirectUri, redirectPrompt))
|
|
201
174
|
: undefined;
|
|
202
175
|
const redirectTo = switchingFromShared
|
|
203
176
|
? customRedirectUri || client.redirect_to || DEFAULT_OAUTH_CALLBACK_URL
|
|
@@ -285,21 +258,9 @@ const handleClientIdSecretUpdate = Effect.fn(function* (params) {
|
|
|
285
258
|
promptCredentials = action === 'rotate';
|
|
286
259
|
promptRedirect = action === 'redirect';
|
|
287
260
|
}
|
|
288
|
-
const clientId = yield*
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
prompt: clientIdPrompt({ providerUrl: params.providerUrl }),
|
|
292
|
-
});
|
|
293
|
-
const clientSecret = yield* textWhenNeeded(params.opts, 'client-secret', {
|
|
294
|
-
promptIf: promptCredentials,
|
|
295
|
-
required: promptCredentials,
|
|
296
|
-
prompt: clientSecretPrompt({ providerUrl: params.providerUrl }),
|
|
297
|
-
});
|
|
298
|
-
const customRedirectUri = yield* textWhenNeeded(params.opts, 'custom-redirect-uri', {
|
|
299
|
-
promptIf: promptRedirect,
|
|
300
|
-
required: promptRedirect,
|
|
301
|
-
prompt: promptRedirect ? newRedirectPrompt : redirectPrompt,
|
|
302
|
-
});
|
|
261
|
+
const clientId = yield* Args.text(params.opts, 'client-id').pipe(Args.orPromptIf(promptCredentials, clientIdPrompt({ providerUrl: params.providerUrl })), Args.requiredIf(promptCredentials));
|
|
262
|
+
const clientSecret = yield* Args.text(params.opts, 'client-secret').pipe(Args.orPromptIf(promptCredentials, clientSecretPrompt({ providerUrl: params.providerUrl })), Args.requiredIf(promptCredentials));
|
|
263
|
+
const customRedirectUri = yield* Args.text(params.opts, 'custom-redirect-uri').pipe(Args.orPromptIf(promptRedirect, promptRedirect ? newRedirectPrompt : redirectPrompt), Args.requiredIf(promptRedirect));
|
|
303
264
|
const response = yield* updateOAuthClient({
|
|
304
265
|
oauthClientId: params.client.id,
|
|
305
266
|
clientId,
|
|
@@ -353,29 +314,13 @@ const resolveAppleUpdateConfig = Effect.fn(function* ({ opts, client, yes, }) {
|
|
|
353
314
|
return { promptAll, configureWeb };
|
|
354
315
|
});
|
|
355
316
|
const readAppleWebUpdate = Effect.fn(function* ({ opts, client, promptAll, }) {
|
|
356
|
-
const teamId = yield*
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
prompt: appleTeamIdPrompt({}),
|
|
360
|
-
});
|
|
361
|
-
const keyId = yield* textWhenNeeded(opts, 'key-id', {
|
|
362
|
-
promptIf: promptAll,
|
|
363
|
-
required: promptAll,
|
|
364
|
-
prompt: appleKeyIdPrompt({}),
|
|
365
|
-
});
|
|
366
|
-
const privateKeyPath = yield* textWhenNeeded(opts, 'private-key-file', {
|
|
367
|
-
promptIf: promptAll,
|
|
368
|
-
required: promptAll,
|
|
369
|
-
prompt: applePrivateKeyFilePrompt({}),
|
|
370
|
-
});
|
|
317
|
+
const teamId = yield* Args.text(opts, 'team-id').pipe(Args.orPromptIf(promptAll, appleTeamIdPrompt({})), Args.requiredIf(promptAll));
|
|
318
|
+
const keyId = yield* Args.text(opts, 'key-id').pipe(Args.orPromptIf(promptAll, appleKeyIdPrompt({})), Args.requiredIf(promptAll));
|
|
319
|
+
const privateKeyPath = yield* Args.text(opts, 'private-key-file').pipe(Args.orPromptIf(promptAll, applePrivateKeyFilePrompt({})), Args.requiredIf(promptAll));
|
|
371
320
|
const privateKey = privateKeyPath
|
|
372
321
|
? yield* readPrivateKeyFile(privateKeyPath)
|
|
373
322
|
: undefined;
|
|
374
|
-
const customRedirectUri = yield*
|
|
375
|
-
promptIf: promptAll,
|
|
376
|
-
required: false,
|
|
377
|
-
prompt: redirectPrompt,
|
|
378
|
-
});
|
|
323
|
+
const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(Args.orPromptIf(promptAll, redirectPrompt));
|
|
379
324
|
const meta = {};
|
|
380
325
|
if (teamId)
|
|
381
326
|
meta.teamId = teamId;
|
|
@@ -397,11 +342,7 @@ const handleAppleUpdate = Effect.fn(function* (opts, client) {
|
|
|
397
342
|
client,
|
|
398
343
|
yes,
|
|
399
344
|
});
|
|
400
|
-
const servicesId = yield*
|
|
401
|
-
promptIf: promptAll,
|
|
402
|
-
required: promptAll,
|
|
403
|
-
prompt: appleServicesIdPrompt({}),
|
|
404
|
-
});
|
|
345
|
+
const servicesId = yield* Args.text(opts, 'services-id').pipe(Args.orPromptIf(promptAll, appleServicesIdPrompt({})), Args.requiredIf(promptAll));
|
|
405
346
|
const webUpdate = configureWeb
|
|
406
347
|
? yield* readAppleWebUpdate({ opts, client, promptAll })
|
|
407
348
|
: {};
|
|
@@ -430,16 +371,7 @@ const handleAppleUpdate = Effect.fn(function* (opts, client) {
|
|
|
430
371
|
});
|
|
431
372
|
const handleClerkUpdate = Effect.fn(function* (opts, client) {
|
|
432
373
|
const { yes } = yield* GlobalOpts;
|
|
433
|
-
const publishableKey = yield*
|
|
434
|
-
promptIf: !yes && !hasFlag(opts, 'publishable-key'),
|
|
435
|
-
required: true,
|
|
436
|
-
prompt: clerkPublishableKeyPrompt({}),
|
|
437
|
-
});
|
|
438
|
-
if (!publishableKey) {
|
|
439
|
-
return yield* BadArgsError.make({
|
|
440
|
-
message: 'Missing required value for --publishable-key',
|
|
441
|
-
});
|
|
442
|
-
}
|
|
374
|
+
const publishableKey = yield* Args.text(opts, 'publishable-key').pipe(Args.orPromptIf(!yes && !hasFlag(opts, 'publishable-key'), clerkPublishableKeyPrompt({})), Args.required());
|
|
443
375
|
const domain = clerkDomainFromPublishableKey(publishableKey);
|
|
444
376
|
if (!domain) {
|
|
445
377
|
return yield* BadArgsError.make({
|
|
@@ -459,12 +391,8 @@ const handleClerkUpdate = Effect.fn(function* (opts, client) {
|
|
|
459
391
|
});
|
|
460
392
|
const handleFirebaseUpdate = Effect.fn(function* (opts, client) {
|
|
461
393
|
const { yes } = yield* GlobalOpts;
|
|
462
|
-
const projectId = yield*
|
|
463
|
-
|
|
464
|
-
required: true,
|
|
465
|
-
prompt: firebaseProjectIdPrompt({}),
|
|
466
|
-
});
|
|
467
|
-
const validationError = validateFirebaseProjectId(projectId ?? '');
|
|
394
|
+
const projectId = yield* Args.text(opts, 'project-id').pipe(Args.orPromptIf(!yes && !hasFlag(opts, 'project-id'), firebaseProjectIdPrompt({})), Args.required());
|
|
395
|
+
const validationError = validateFirebaseProjectId(projectId);
|
|
468
396
|
if (validationError) {
|
|
469
397
|
return yield* BadArgsError.make({ message: validationError });
|
|
470
398
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/auth/client/update.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Match } from 'effect';\nimport type { authClientUpdateDef, OptsFromCommand } from '../../../index.ts';\nimport { BadArgsError } from '../../../errors.ts';\nimport { GlobalOpts } from '../../../context/globalOpts.ts';\nimport { Args } from '../../../lib/args.ts';\nimport { runUIEffect } from '../../../lib/ui.ts';\nimport {\n findClientByIdOrName,\n getAppsAuth,\n OAuthClient,\n updateOAuthClient,\n} from '../../../lib/oauth.ts';\nimport { UI } from '../../../ui/index.ts';\nimport {\n clerkDomainFromPublishableKey,\n DEFAULT_OAUTH_CALLBACK_URL,\n} from '@instantdb/platform';\nimport chalk from 'chalk';\nimport boxen from 'boxen';\nimport {\n appleKeyIdPrompt,\n applePrivateKeyFilePrompt,\n appleServicesIdPrompt,\n appleTeamIdPrompt,\n clerkPublishableKeyPrompt,\n clientIdPrompt,\n clientSecretPrompt,\n firebaseDiscoveryEndpoint,\n firebaseProjectIdPrompt,\n getFlag,\n getMetaString,\n hasAnyFlag,\n hasFlag,\n isTrueFlag,\n readPrivateKeyFile,\n redirectSetupMessages,\n redirectUriPrompt,\n validateFirebaseProjectId,\n} from './shared.ts';\nimport { link } from '../../../logging.ts';\n\ntype OAuthClientRow = typeof OAuthClient.Type;\n\ntype ProviderRow = {\n id: string;\n provider_name: string;\n};\n\nconst redirectPrompt = redirectUriPrompt({\n heading: 'Custom redirect URI (optional):',\n});\nconst newRedirectPrompt = redirectUriPrompt({ heading: 'New redirect URI:' });\nconst googleConsoleUrl =\n 'https://console.developers.google.com/apis/credentials';\n\nconst resolveClient = Effect.fn(function* (params: {\n id?: string;\n name?: string;\n}) {\n const { yes } = yield* GlobalOpts;\n\n if (params.id || params.name) {\n return yield* findClientByIdOrName({\n id: params.id,\n name: params.name,\n });\n }\n\n if (yes) {\n return yield* BadArgsError.make({ message: 'Must specify --id or --name' });\n }\n\n const auth = yield* getAppsAuth();\n const clients = (auth.oauth_clients ?? []) as OAuthClientRow[];\n\n if (clients.length === 0) {\n return yield* BadArgsError.make({\n message: 'No OAuth clients found for this app.',\n });\n }\n\n return yield* runUIEffect(\n new UI.Select({\n options: clients.map((client) => ({\n label:\n client.client_name +\n (client.use_shared_credentials\n ? chalk.dim(' (dev credentials)')\n : '') +\n chalk.dim(` (${client.id})`),\n value: client,\n })),\n promptText: 'Select a client to update:',\n modifyOutput: UI.modifiers.dimOnComplete,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n Effect.map((client) => ({ auth, client })),\n );\n});\n\nconst selectUpdateAction = Effect.fn(function* <T extends string>(\n options: { label: string; value: T; secondary?: boolean }[],\n) {\n return yield* runUIEffect(\n new UI.Select({\n options,\n promptText: 'What do you want to update?',\n modifyOutput: UI.modifiers.dimOnComplete,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n});\n\nconst updateGoogleToDevCredentials = Effect.fn(function* (\n client: OAuthClientRow,\n) {\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n clientId: null,\n clientSecret: null,\n useSharedCredentials: true,\n redirectTo: null,\n });\n\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client updated: ${response.client.client_name}`,\n 'Credentials: Instant dev credentials',\n `ID: ${response.client.id}`,\n '',\n 'No Google Console setup required.',\n 'Works on localhost and Expo during development.',\n '',\n chalk.bold('Ready for production? Run:'),\n ` instant-cli auth client update --name ${response.client.client_name} --client-id <id> --client-secret <secret>`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\ntype GoogleUpdateMode = 'dev' | 'custom' | 'redirect' | 'none';\n\nconst hasGoogleCustomCredentialFlags = (opts: Record<string, unknown>) =>\n hasAnyFlag(opts, ['client-id', 'client-secret', 'custom-redirect-uri']);\n\nconst hasGoogleUpdateFlags = (opts: Record<string, unknown>) =>\n isTrueFlag(getFlag(opts, 'dev-credentials')) ||\n hasGoogleCustomCredentialFlags(opts);\n\nconst textWhenNeeded = (\n opts: Record<string, unknown>,\n flag: string,\n params: {\n promptIf: boolean;\n required?: boolean;\n prompt: UI.TextInputProps;\n },\n) =>\n Effect.gen(function* () {\n const value = getFlag(opts, flag);\n if (value === undefined && !params.promptIf) return undefined;\n return yield* Args.text(opts, flag).pipe(\n Args.orPromptIf(params.promptIf, params.prompt),\n Args.requiredIf(params.required ?? params.promptIf),\n );\n });\n\nconst selectGoogleUpdateMode = Effect.fn(function* ({\n isWeb,\n switchingFromShared,\n}: {\n isWeb: boolean;\n switchingFromShared: boolean;\n}) {\n if (switchingFromShared) {\n return yield* runUIEffect(\n new UI.Select({\n options: [\n { label: 'Custom Google credentials', value: 'custom' },\n {\n label: 'Instant dev credentials' + chalk.dim(' (current)'),\n value: 'none',\n },\n ],\n promptText: 'Choose credential mode:',\n modifyOutput: UI.modifiers.dimOnComplete,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n }\n\n const options: { label: string; value: GoogleUpdateMode }[] = [\n { label: 'Update Client ID and Client Secret', value: 'custom' },\n ];\n\n if (isWeb) {\n options.push(\n {\n label:\n 'Switch to Instant dev credentials' +\n chalk.dim(' (localhost and Expo, no Google setup)'),\n value: 'dev',\n },\n { label: 'Update redirect URI', value: 'redirect' },\n );\n }\n\n return yield* selectUpdateAction(options);\n});\n\nconst resolveGoogleUpdateMode = Effect.fn(function* ({\n opts,\n isWeb,\n switchingFromShared,\n}: {\n opts: Record<string, unknown>;\n isWeb: boolean;\n switchingFromShared: boolean;\n}) {\n const { yes } = yield* GlobalOpts;\n const devCredentialsFlag = isTrueFlag(getFlag(opts, 'dev-credentials'));\n const hasProvidedSomeCustomCredentials = hasGoogleCustomCredentialFlags(opts);\n\n if (devCredentialsFlag && !isWeb) {\n return yield* BadArgsError.make({\n message: '--dev-credentials is only supported for Google web clients.',\n });\n }\n\n if (\n !isWeb &&\n (hasFlag(opts, 'client-secret') || hasFlag(opts, 'custom-redirect-uri'))\n ) {\n return yield* BadArgsError.make({\n message:\n '--client-secret and --custom-redirect-uri are only supported for Google web clients.',\n });\n }\n\n if (devCredentialsFlag && hasProvidedSomeCustomCredentials) {\n return yield* BadArgsError.make({\n message:\n '--dev-credentials cannot be combined with --client-id, --client-secret, or --custom-redirect-uri.',\n });\n }\n\n if (devCredentialsFlag) {\n return 'dev';\n }\n\n const hasAnyUpdateFlag = hasGoogleUpdateFlags(opts);\n\n if (yes && !hasAnyUpdateFlag) {\n return yield* BadArgsError.make({\n message:\n 'Must specify at least one of --client-id, --client-secret, --custom-redirect-uri, or --dev-credentials.',\n });\n }\n\n if (\n yes &&\n isWeb &&\n switchingFromShared &&\n (!hasFlag(opts, 'client-id') || !hasFlag(opts, 'client-secret'))\n ) {\n return yield* BadArgsError.make({\n message:\n 'Must specify both --client-id and --client-secret when switching from Instant dev credentials to custom credentials with --yes.',\n });\n }\n\n if (hasAnyUpdateFlag) {\n return 'custom';\n }\n\n return yield* selectGoogleUpdateMode({ isWeb, switchingFromShared });\n});\n\nconst updateGoogleRedirect = Effect.fn(function* ({\n opts,\n client,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n}) {\n const redirectTo = yield* textWhenNeeded(opts, 'custom-redirect-uri', {\n promptIf: true,\n required: true,\n prompt: newRedirectPrompt,\n });\n if (!redirectTo) {\n return yield* BadArgsError.make({\n message: 'Missing required value for --custom-redirect-uri',\n });\n }\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n redirectTo,\n });\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n ...redirectSetupMessages({\n prompt: 'Add this redirect URI in Google Console',\n redirectUri: redirectTo,\n showCustomRedirectInstructions: true,\n }),\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst updateGoogleCustomCredentials = Effect.fn(function* ({\n opts,\n client,\n isWeb,\n switchingFromShared,\n promptCredentials,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n isWeb: boolean;\n switchingFromShared: boolean;\n promptCredentials: boolean;\n}) {\n const mustCollectCredentials = promptCredentials || switchingFromShared;\n const shouldPromptClientId =\n promptCredentials || (switchingFromShared && !hasFlag(opts, 'client-id'));\n const shouldPromptClientSecret =\n isWeb &&\n (promptCredentials ||\n (switchingFromShared && !hasFlag(opts, 'client-secret')));\n const shouldPromptRedirectUri =\n isWeb && switchingFromShared && promptCredentials;\n\n const clientId = yield* textWhenNeeded(opts, 'client-id', {\n promptIf: shouldPromptClientId,\n required: mustCollectCredentials,\n prompt: clientIdPrompt({ providerUrl: googleConsoleUrl }),\n });\n const clientSecret = yield* textWhenNeeded(opts, 'client-secret', {\n promptIf: shouldPromptClientSecret,\n required: isWeb && mustCollectCredentials,\n prompt: clientSecretPrompt({ providerUrl: googleConsoleUrl }),\n });\n const customRedirectUri = isWeb\n ? yield* textWhenNeeded(opts, 'custom-redirect-uri', {\n promptIf: shouldPromptRedirectUri,\n required: false,\n prompt: redirectPrompt,\n })\n : undefined;\n\n const redirectTo = switchingFromShared\n ? customRedirectUri || client.redirect_to || DEFAULT_OAUTH_CALLBACK_URL\n : customRedirectUri;\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n clientId,\n clientSecret,\n redirectTo,\n useSharedCredentials: switchingFromShared ? false : undefined,\n });\n\n const lines = [\n `Google OAuth client updated: ${response.client.client_name}`,\n 'Credentials: custom',\n `ID: ${response.client.id}`,\n ];\n\n if (switchingFromShared) {\n lines.push('', 'This client no longer uses Instant dev credentials.');\n }\n if (isWeb && redirectTo) {\n lines.push(\n ...redirectSetupMessages({\n prompt: 'Add this redirect URI in Google Console',\n redirectUri: redirectTo,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n }),\n );\n }\n\n yield* Effect.log(\n boxen(lines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst handleGoogleUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const appType = getMetaString(client.meta, 'appType');\n const isWeb = appType === 'web' || !appType;\n const switchingFromShared = Boolean(client.use_shared_credentials);\n const hasAnyUpdateFlag = hasGoogleUpdateFlags(opts);\n\n if (!hasAnyUpdateFlag && !yes) {\n yield* Effect.log(\n `\\nCurrent mode: ${\n switchingFromShared\n ? chalk.bold('Instant dev credentials')\n : 'custom credentials'\n }`,\n );\n }\n\n const updateMode = yield* resolveGoogleUpdateMode({\n opts,\n isWeb,\n switchingFromShared,\n });\n\n if (updateMode === 'dev') {\n return yield* updateGoogleToDevCredentials(client);\n }\n\n if (updateMode === 'none') {\n yield* Effect.log(chalk.dim('No changes made.'));\n return;\n }\n\n if (updateMode === 'redirect') {\n return yield* updateGoogleRedirect({ opts, client });\n }\n\n return yield* updateGoogleCustomCredentials({\n opts,\n client,\n isWeb,\n switchingFromShared,\n promptCredentials: !hasAnyUpdateFlag && !yes,\n });\n});\n\nconst handleClientIdSecretUpdate = Effect.fn(function* (params: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n providerLabel: string;\n providerUrl: string;\n redirectSetupPrompt: string;\n}) {\n const { yes } = yield* GlobalOpts;\n const hasAnyUpdateFlag = hasAnyFlag(params.opts, [\n 'client-id',\n 'client-secret',\n 'custom-redirect-uri',\n ]);\n if (yes && !hasAnyUpdateFlag) {\n return yield* BadArgsError.make({\n message:\n 'Must specify at least one of --client-id, --client-secret, or --custom-redirect-uri.',\n });\n }\n\n let promptCredentials = false;\n let promptRedirect = false;\n\n if (!hasAnyUpdateFlag && !yes) {\n const action = yield* selectUpdateAction([\n { label: 'Update Client ID and Client Secret', value: 'rotate' },\n { label: 'Update redirect URI', value: 'redirect' },\n ]);\n promptCredentials = action === 'rotate';\n promptRedirect = action === 'redirect';\n }\n\n const clientId = yield* textWhenNeeded(params.opts, 'client-id', {\n promptIf: promptCredentials,\n required: promptCredentials,\n prompt: clientIdPrompt({ providerUrl: params.providerUrl }),\n });\n const clientSecret = yield* textWhenNeeded(\n params.opts,\n 'client-secret',\n {\n promptIf: promptCredentials,\n required: promptCredentials,\n prompt: clientSecretPrompt({ providerUrl: params.providerUrl }),\n },\n );\n const customRedirectUri = yield* textWhenNeeded(\n params.opts,\n 'custom-redirect-uri',\n {\n promptIf: promptRedirect,\n required: promptRedirect,\n prompt: promptRedirect ? newRedirectPrompt : redirectPrompt,\n },\n );\n\n const response = yield* updateOAuthClient({\n oauthClientId: params.client.id,\n clientId,\n clientSecret,\n redirectTo: customRedirectUri,\n });\n\n const lines = [\n `${params.providerLabel} OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n ];\n\n if (customRedirectUri) {\n lines.push(\n ...redirectSetupMessages({\n prompt: params.redirectSetupPrompt,\n redirectUri: customRedirectUri,\n showCustomRedirectInstructions: true,\n }),\n );\n }\n\n yield* Effect.log(\n boxen(lines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst appleWebFlags = [\n 'team-id',\n 'key-id',\n 'private-key-file',\n 'custom-redirect-uri',\n];\nconst appleUpdateFlags = ['services-id', ...appleWebFlags];\n\nconst hasAppleWebFlags = (opts: Record<string, unknown>) =>\n hasAnyFlag(opts, appleWebFlags);\n\nconst hasAppleUpdateFlags = (opts: Record<string, unknown>) =>\n hasAnyFlag(opts, appleUpdateFlags);\n\nconst appleClientHasWebConfig = (client: OAuthClientRow) =>\n Boolean(\n getMetaString(client.meta, 'teamId') ||\n getMetaString(client.meta, 'keyId') ||\n client.redirect_to,\n );\n\ntype AppleWebUpdate = {\n privateKey?: string;\n redirectTo?: string;\n customRedirectUri?: string;\n meta?: Record<string, string>;\n};\n\nconst resolveAppleUpdateConfig = Effect.fn(function* ({\n opts,\n client,\n yes,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n yes: boolean;\n}) {\n const hasAnyUpdateFlag = hasAppleUpdateFlags(opts);\n\n if (yes && !hasAnyUpdateFlag) {\n return yield* BadArgsError.make({\n message:\n 'Must specify at least one of --services-id, --team-id, --key-id, --private-key-file, or --custom-redirect-uri.',\n });\n }\n\n const promptAll = !hasAnyUpdateFlag && !yes;\n if (!promptAll) {\n return { promptAll, configureWeb: hasAppleWebFlags(opts) };\n }\n\n const configureWeb = yield* runUIEffect(\n new UI.Confirmation({\n promptText:\n 'Configure web redirect flow? ' +\n chalk.dim(\n '(requires Team ID, Key ID, and a .p8 private key from Apple)',\n ),\n defaultValue: appleClientHasWebConfig(client),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n\n return { promptAll, configureWeb };\n});\n\nconst readAppleWebUpdate = Effect.fn(function* ({\n opts,\n client,\n promptAll,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n promptAll: boolean;\n}) {\n const teamId = yield* textWhenNeeded(opts, 'team-id', {\n promptIf: promptAll,\n required: promptAll,\n prompt: appleTeamIdPrompt({}),\n });\n const keyId = yield* textWhenNeeded(opts, 'key-id', {\n promptIf: promptAll,\n required: promptAll,\n prompt: appleKeyIdPrompt({}),\n });\n const privateKeyPath = yield* textWhenNeeded(\n opts,\n 'private-key-file',\n {\n promptIf: promptAll,\n required: promptAll,\n prompt: applePrivateKeyFilePrompt({}),\n },\n );\n const privateKey = privateKeyPath\n ? yield* readPrivateKeyFile(privateKeyPath)\n : undefined;\n const customRedirectUri = yield* textWhenNeeded(\n opts,\n 'custom-redirect-uri',\n {\n promptIf: promptAll,\n required: false,\n prompt: redirectPrompt,\n },\n );\n\n const meta: Record<string, string> = {};\n if (teamId) meta.teamId = teamId;\n if (keyId) meta.keyId = keyId;\n\n return {\n privateKey,\n redirectTo: privateKey\n ? customRedirectUri || client.redirect_to || DEFAULT_OAUTH_CALLBACK_URL\n : customRedirectUri,\n customRedirectUri,\n meta: Object.keys(meta).length ? meta : undefined,\n } satisfies AppleWebUpdate;\n});\n\nconst handleAppleUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const { promptAll, configureWeb } = yield* resolveAppleUpdateConfig({\n opts,\n client,\n yes,\n });\n\n const servicesId = yield* textWhenNeeded(opts, 'services-id', {\n promptIf: promptAll,\n required: promptAll,\n prompt: appleServicesIdPrompt({}),\n });\n const webUpdate: AppleWebUpdate = configureWeb\n ? yield* readAppleWebUpdate({ opts, client, promptAll })\n : {};\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n clientId: servicesId,\n clientSecret: webUpdate.privateKey,\n redirectTo: webUpdate.redirectTo,\n meta: webUpdate.meta,\n });\n\n const lines = [\n `Apple OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n ];\n\n if (webUpdate.redirectTo) {\n lines.push(\n ...redirectSetupMessages({\n prompt: `Add this return URL under your Services ID on ${link('https://developer.apple.com', 'developer.apple.com')}`,\n redirectUri: webUpdate.redirectTo,\n showCustomRedirectInstructions: Boolean(webUpdate.customRedirectUri),\n }),\n );\n }\n\n yield* Effect.log(\n boxen(lines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst handleClerkUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const publishableKey = yield* textWhenNeeded(opts, 'publishable-key', {\n promptIf: !yes && !hasFlag(opts, 'publishable-key'),\n required: true,\n prompt: clerkPublishableKeyPrompt({}),\n });\n\n if (!publishableKey) {\n return yield* BadArgsError.make({\n message: 'Missing required value for --publishable-key',\n });\n }\n\n const domain = clerkDomainFromPublishableKey(publishableKey);\n if (!domain) {\n return yield* BadArgsError.make({\n message: 'Invalid publishable key. Could not extract domain.',\n });\n }\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n discoveryEndpoint: `https://${domain}/.well-known/openid-configuration`,\n meta: { clerkPublishableKey: publishableKey },\n });\n\n yield* Effect.log(\n boxen(\n [\n `Clerk OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Clerk Domain: https://${domain}`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleFirebaseUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const projectId = yield* textWhenNeeded(opts, 'project-id', {\n promptIf: !yes && !hasFlag(opts, 'project-id'),\n required: true,\n prompt: firebaseProjectIdPrompt({}),\n });\n\n const validationError = validateFirebaseProjectId(projectId ?? '');\n if (validationError) {\n return yield* BadArgsError.make({ message: validationError });\n }\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n discoveryEndpoint: firebaseDiscoveryEndpoint(projectId!),\n });\n\n yield* Effect.log(\n boxen(\n [\n `Firebase OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Firebase Project ID: ${projectId}`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nexport const authClientUpdateCmd = Effect.fn(\n function* (\n opts: OptsFromCommand<typeof authClientUpdateDef> & Record<string, unknown>,\n ) {\n const { auth, client: resolvedClient } = yield* resolveClient({\n id: opts.id,\n name: opts.name,\n });\n const provider = (auth.oauth_service_providers ?? []).find(\n (entry: ProviderRow) => entry.id === resolvedClient.provider_id,\n );\n\n if (!provider) {\n return yield* BadArgsError.make({\n message: `OAuth provider not found for client: ${resolvedClient.client_name}`,\n });\n }\n\n yield* Match.value(provider.provider_name).pipe(\n Match.withReturnType<Effect.Effect<void, any, any>>(),\n Match.when('google', () => handleGoogleUpdate(opts, resolvedClient)),\n Match.when('github', () =>\n handleClientIdSecretUpdate({\n opts,\n client: resolvedClient,\n providerLabel: 'GitHub',\n providerUrl: 'https://github.com/settings/developers',\n redirectSetupPrompt:\n 'Add this callback URL in your GitHub OAuth App settings',\n }),\n ),\n Match.when('linkedin', () =>\n handleClientIdSecretUpdate({\n opts,\n client: resolvedClient,\n providerLabel: 'LinkedIn',\n providerUrl: 'https://www.linkedin.com/developers/apps',\n redirectSetupPrompt:\n 'Add this redirect URI in your LinkedIn app settings',\n }),\n ),\n Match.when('apple', () => handleAppleUpdate(opts, resolvedClient)),\n Match.when('clerk', () => handleClerkUpdate(opts, resolvedClient)),\n Match.when('firebase', () => handleFirebaseUpdate(opts, resolvedClient)),\n Match.orElse((providerName) =>\n BadArgsError.make({\n message: `Updating ${providerName} OAuth clients is not supported.`,\n }),\n ),\n );\n },\n Effect.catchTag('BadArgsError', (e) =>\n Effect.gen(function* () {\n yield* Effect.logError(e.message);\n yield* Effect.log(\n chalk.dim(\n 'hint: run `instant-cli auth client update --help` for available arguments',\n ),\n );\n }),\n ),\n);\n"]}
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/auth/client/update.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Match } from 'effect';\nimport type { authClientUpdateDef, OptsFromCommand } from '../../../index.ts';\nimport { BadArgsError } from '../../../errors.ts';\nimport { GlobalOpts } from '../../../context/globalOpts.ts';\nimport { Args } from '../../../lib/args.ts';\nimport { runUIEffect } from '../../../lib/ui.ts';\nimport {\n findClientByIdOrName,\n getAppsAuth,\n OAuthClient,\n updateOAuthClient,\n} from '../../../lib/oauth.ts';\nimport { UI } from '../../../ui/index.ts';\nimport {\n clerkDomainFromPublishableKey,\n DEFAULT_OAUTH_CALLBACK_URL,\n} from '@instantdb/platform';\nimport chalk from 'chalk';\nimport boxen from 'boxen';\nimport {\n appleKeyIdPrompt,\n applePrivateKeyFilePrompt,\n appleServicesIdPrompt,\n appleTeamIdPrompt,\n clerkPublishableKeyPrompt,\n clientIdPrompt,\n clientSecretPrompt,\n firebaseDiscoveryEndpoint,\n firebaseProjectIdPrompt,\n getFlag,\n getMetaString,\n hasAnyFlag,\n hasFlag,\n isTrueFlag,\n readPrivateKeyFile,\n redirectSetupMessages,\n redirectUriPrompt,\n validateFirebaseProjectId,\n} from './shared.ts';\nimport { link } from '../../../logging.ts';\n\ntype OAuthClientRow = typeof OAuthClient.Type;\n\ntype ProviderRow = {\n id: string;\n provider_name: string;\n};\n\nconst redirectPrompt = redirectUriPrompt({\n heading: 'Custom redirect URI (optional):',\n});\nconst newRedirectPrompt = redirectUriPrompt({ heading: 'New redirect URI:' });\nconst googleConsoleUrl =\n 'https://console.developers.google.com/apis/credentials';\n\nconst resolveClient = Effect.fn(function* (params: {\n id?: string;\n name?: string;\n}) {\n const { yes } = yield* GlobalOpts;\n\n if (params.id || params.name) {\n return yield* findClientByIdOrName({\n id: params.id,\n name: params.name,\n });\n }\n\n if (yes) {\n return yield* BadArgsError.make({ message: 'Must specify --id or --name' });\n }\n\n const auth = yield* getAppsAuth();\n const clients = (auth.oauth_clients ?? []) as OAuthClientRow[];\n\n if (clients.length === 0) {\n return yield* BadArgsError.make({\n message: 'No OAuth clients found for this app.',\n });\n }\n\n return yield* runUIEffect(\n new UI.Select({\n options: clients.map((client) => ({\n label:\n client.client_name +\n (client.use_shared_credentials\n ? chalk.dim(' (dev credentials)')\n : '') +\n chalk.dim(` (${client.id})`),\n value: client,\n })),\n promptText: 'Select a client to update:',\n modifyOutput: UI.modifiers.dimOnComplete,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n Effect.map((client) => ({ auth, client })),\n );\n});\n\nconst selectUpdateAction = Effect.fn(function* <T extends string>(\n options: { label: string; value: T; secondary?: boolean }[],\n) {\n return yield* runUIEffect(\n new UI.Select({\n options,\n promptText: 'What do you want to update?',\n modifyOutput: UI.modifiers.dimOnComplete,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n});\n\nconst updateGoogleToDevCredentials = Effect.fn(function* (\n client: OAuthClientRow,\n) {\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n clientId: null,\n clientSecret: null,\n useSharedCredentials: true,\n redirectTo: null,\n });\n\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client updated: ${response.client.client_name}`,\n 'Credentials: Instant dev credentials',\n `ID: ${response.client.id}`,\n '',\n 'No Google Console setup required.',\n 'Works on localhost and Expo during development.',\n '',\n chalk.bold('Ready for production? Run:'),\n ` instant-cli auth client update --name ${response.client.client_name} --client-id <id> --client-secret <secret>`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\ntype GoogleUpdateMode = 'dev' | 'custom' | 'redirect' | 'none';\n\nconst hasGoogleCustomCredentialFlags = (opts: Record<string, unknown>) =>\n hasAnyFlag(opts, ['client-id', 'client-secret', 'custom-redirect-uri']);\n\nconst hasGoogleUpdateFlags = (opts: Record<string, unknown>) =>\n isTrueFlag(getFlag(opts, 'dev-credentials')) ||\n hasGoogleCustomCredentialFlags(opts);\n\nconst selectGoogleUpdateMode = Effect.fn(function* ({\n isWeb,\n switchingFromShared,\n}: {\n isWeb: boolean;\n switchingFromShared: boolean;\n}) {\n if (switchingFromShared) {\n return yield* runUIEffect(\n new UI.Select({\n options: [\n { label: 'Custom Google credentials', value: 'custom' },\n {\n label: 'Instant dev credentials' + chalk.dim(' (current)'),\n value: 'none',\n },\n ],\n promptText: 'Choose credential mode:',\n modifyOutput: UI.modifiers.dimOnComplete,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n }\n\n const options: { label: string; value: GoogleUpdateMode }[] = [\n { label: 'Update Client ID and Client Secret', value: 'custom' },\n ];\n\n if (isWeb) {\n options.push(\n {\n label:\n 'Switch to Instant dev credentials' +\n chalk.dim(' (localhost and Expo, no Google setup)'),\n value: 'dev',\n },\n { label: 'Update redirect URI', value: 'redirect' },\n );\n }\n\n return yield* selectUpdateAction(options);\n});\n\nconst resolveGoogleUpdateMode = Effect.fn(function* ({\n opts,\n isWeb,\n switchingFromShared,\n}: {\n opts: Record<string, unknown>;\n isWeb: boolean;\n switchingFromShared: boolean;\n}) {\n const { yes } = yield* GlobalOpts;\n const devCredentialsFlag = isTrueFlag(getFlag(opts, 'dev-credentials'));\n const hasProvidedSomeCustomCredentials = hasGoogleCustomCredentialFlags(opts);\n\n if (devCredentialsFlag && !isWeb) {\n return yield* BadArgsError.make({\n message: '--dev-credentials is only supported for Google web clients.',\n });\n }\n\n if (\n !isWeb &&\n (hasFlag(opts, 'client-secret') || hasFlag(opts, 'custom-redirect-uri'))\n ) {\n return yield* BadArgsError.make({\n message:\n '--client-secret and --custom-redirect-uri are only supported for Google web clients.',\n });\n }\n\n if (devCredentialsFlag && hasProvidedSomeCustomCredentials) {\n return yield* BadArgsError.make({\n message:\n '--dev-credentials cannot be combined with --client-id, --client-secret, or --custom-redirect-uri.',\n });\n }\n\n if (devCredentialsFlag) {\n return 'dev';\n }\n\n const hasAnyUpdateFlag = hasGoogleUpdateFlags(opts);\n\n if (yes && !hasAnyUpdateFlag) {\n return yield* BadArgsError.make({\n message:\n 'Must specify at least one of --client-id, --client-secret, --custom-redirect-uri, or --dev-credentials.',\n });\n }\n\n if (\n yes &&\n isWeb &&\n switchingFromShared &&\n (!hasFlag(opts, 'client-id') || !hasFlag(opts, 'client-secret'))\n ) {\n return yield* BadArgsError.make({\n message:\n 'Must specify both --client-id and --client-secret when switching from Instant dev credentials to custom credentials with --yes.',\n });\n }\n\n if (hasAnyUpdateFlag) {\n return 'custom';\n }\n\n return yield* selectGoogleUpdateMode({ isWeb, switchingFromShared });\n});\n\nconst updateGoogleRedirect = Effect.fn(function* ({\n opts,\n client,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n}) {\n const redirectTo = yield* Args.text(opts, 'custom-redirect-uri').pipe(\n Args.orPrompt(newRedirectPrompt),\n Args.required(),\n );\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n redirectTo,\n });\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n ...redirectSetupMessages({\n prompt: 'Add this redirect URI in Google Console',\n redirectUri: redirectTo,\n showCustomRedirectInstructions: true,\n }),\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst updateGoogleCustomCredentials = Effect.fn(function* ({\n opts,\n client,\n isWeb,\n switchingFromShared,\n promptCredentials,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n isWeb: boolean;\n switchingFromShared: boolean;\n promptCredentials: boolean;\n}) {\n const mustCollectCredentials = promptCredentials || switchingFromShared;\n const shouldPromptClientId =\n promptCredentials || (switchingFromShared && !hasFlag(opts, 'client-id'));\n const shouldPromptClientSecret =\n isWeb &&\n (promptCredentials ||\n (switchingFromShared && !hasFlag(opts, 'client-secret')));\n const shouldPromptRedirectUri =\n isWeb && switchingFromShared && promptCredentials;\n\n const clientId = yield* Args.text(opts, 'client-id').pipe(\n Args.orPromptIf(\n shouldPromptClientId,\n clientIdPrompt({ providerUrl: googleConsoleUrl }),\n ),\n Args.requiredIf(mustCollectCredentials),\n );\n const clientSecret = yield* Args.text(opts, 'client-secret').pipe(\n Args.orPromptIf(\n shouldPromptClientSecret,\n clientSecretPrompt({ providerUrl: googleConsoleUrl }),\n ),\n Args.requiredIf(isWeb && mustCollectCredentials),\n );\n const customRedirectUri = isWeb\n ? yield* Args.text(opts, 'custom-redirect-uri').pipe(\n Args.orPromptIf(shouldPromptRedirectUri, redirectPrompt),\n )\n : undefined;\n\n const redirectTo = switchingFromShared\n ? customRedirectUri || client.redirect_to || DEFAULT_OAUTH_CALLBACK_URL\n : customRedirectUri;\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n clientId,\n clientSecret,\n redirectTo,\n useSharedCredentials: switchingFromShared ? false : undefined,\n });\n\n const lines = [\n `Google OAuth client updated: ${response.client.client_name}`,\n 'Credentials: custom',\n `ID: ${response.client.id}`,\n ];\n\n if (switchingFromShared) {\n lines.push('', 'This client no longer uses Instant dev credentials.');\n }\n if (isWeb && redirectTo) {\n lines.push(\n ...redirectSetupMessages({\n prompt: 'Add this redirect URI in Google Console',\n redirectUri: redirectTo,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n }),\n );\n }\n\n yield* Effect.log(\n boxen(lines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst handleGoogleUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const appType = getMetaString(client.meta, 'appType');\n const isWeb = appType === 'web' || !appType;\n const switchingFromShared = Boolean(client.use_shared_credentials);\n const hasAnyUpdateFlag = hasGoogleUpdateFlags(opts);\n\n if (!hasAnyUpdateFlag && !yes) {\n yield* Effect.log(\n `\\nCurrent mode: ${\n switchingFromShared\n ? chalk.bold('Instant dev credentials')\n : 'custom credentials'\n }`,\n );\n }\n\n const updateMode = yield* resolveGoogleUpdateMode({\n opts,\n isWeb,\n switchingFromShared,\n });\n\n if (updateMode === 'dev') {\n return yield* updateGoogleToDevCredentials(client);\n }\n\n if (updateMode === 'none') {\n yield* Effect.log(chalk.dim('No changes made.'));\n return;\n }\n\n if (updateMode === 'redirect') {\n return yield* updateGoogleRedirect({ opts, client });\n }\n\n return yield* updateGoogleCustomCredentials({\n opts,\n client,\n isWeb,\n switchingFromShared,\n promptCredentials: !hasAnyUpdateFlag && !yes,\n });\n});\n\nconst handleClientIdSecretUpdate = Effect.fn(function* (params: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n providerLabel: string;\n providerUrl: string;\n redirectSetupPrompt: string;\n}) {\n const { yes } = yield* GlobalOpts;\n const hasAnyUpdateFlag = hasAnyFlag(params.opts, [\n 'client-id',\n 'client-secret',\n 'custom-redirect-uri',\n ]);\n if (yes && !hasAnyUpdateFlag) {\n return yield* BadArgsError.make({\n message:\n 'Must specify at least one of --client-id, --client-secret, or --custom-redirect-uri.',\n });\n }\n\n let promptCredentials = false;\n let promptRedirect = false;\n\n if (!hasAnyUpdateFlag && !yes) {\n const action = yield* selectUpdateAction([\n { label: 'Update Client ID and Client Secret', value: 'rotate' },\n { label: 'Update redirect URI', value: 'redirect' },\n ]);\n promptCredentials = action === 'rotate';\n promptRedirect = action === 'redirect';\n }\n\n const clientId = yield* Args.text(params.opts, 'client-id').pipe(\n Args.orPromptIf(\n promptCredentials,\n clientIdPrompt({ providerUrl: params.providerUrl }),\n ),\n Args.requiredIf(promptCredentials),\n );\n const clientSecret = yield* Args.text(params.opts, 'client-secret').pipe(\n Args.orPromptIf(\n promptCredentials,\n clientSecretPrompt({ providerUrl: params.providerUrl }),\n ),\n Args.requiredIf(promptCredentials),\n );\n const customRedirectUri = yield* Args.text(\n params.opts,\n 'custom-redirect-uri',\n ).pipe(\n Args.orPromptIf(\n promptRedirect,\n promptRedirect ? newRedirectPrompt : redirectPrompt,\n ),\n Args.requiredIf(promptRedirect),\n );\n\n const response = yield* updateOAuthClient({\n oauthClientId: params.client.id,\n clientId,\n clientSecret,\n redirectTo: customRedirectUri,\n });\n\n const lines = [\n `${params.providerLabel} OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n ];\n\n if (customRedirectUri) {\n lines.push(\n ...redirectSetupMessages({\n prompt: params.redirectSetupPrompt,\n redirectUri: customRedirectUri,\n showCustomRedirectInstructions: true,\n }),\n );\n }\n\n yield* Effect.log(\n boxen(lines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst appleWebFlags = [\n 'team-id',\n 'key-id',\n 'private-key-file',\n 'custom-redirect-uri',\n];\nconst appleUpdateFlags = ['services-id', ...appleWebFlags];\n\nconst hasAppleWebFlags = (opts: Record<string, unknown>) =>\n hasAnyFlag(opts, appleWebFlags);\n\nconst hasAppleUpdateFlags = (opts: Record<string, unknown>) =>\n hasAnyFlag(opts, appleUpdateFlags);\n\nconst appleClientHasWebConfig = (client: OAuthClientRow) =>\n Boolean(\n getMetaString(client.meta, 'teamId') ||\n getMetaString(client.meta, 'keyId') ||\n client.redirect_to,\n );\n\ntype AppleWebUpdate = {\n privateKey?: string;\n redirectTo?: string;\n customRedirectUri?: string;\n meta?: Record<string, string>;\n};\n\nconst resolveAppleUpdateConfig = Effect.fn(function* ({\n opts,\n client,\n yes,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n yes: boolean;\n}) {\n const hasAnyUpdateFlag = hasAppleUpdateFlags(opts);\n\n if (yes && !hasAnyUpdateFlag) {\n return yield* BadArgsError.make({\n message:\n 'Must specify at least one of --services-id, --team-id, --key-id, --private-key-file, or --custom-redirect-uri.',\n });\n }\n\n const promptAll = !hasAnyUpdateFlag && !yes;\n if (!promptAll) {\n return { promptAll, configureWeb: hasAppleWebFlags(opts) };\n }\n\n const configureWeb = yield* runUIEffect(\n new UI.Confirmation({\n promptText:\n 'Configure web redirect flow? ' +\n chalk.dim(\n '(requires Team ID, Key ID, and a .p8 private key from Apple)',\n ),\n defaultValue: appleClientHasWebConfig(client),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n\n return { promptAll, configureWeb };\n});\n\nconst readAppleWebUpdate = Effect.fn(function* ({\n opts,\n client,\n promptAll,\n}: {\n opts: Record<string, unknown>;\n client: OAuthClientRow;\n promptAll: boolean;\n}) {\n const teamId = yield* Args.text(opts, 'team-id').pipe(\n Args.orPromptIf(promptAll, appleTeamIdPrompt({})),\n Args.requiredIf(promptAll),\n );\n const keyId = yield* Args.text(opts, 'key-id').pipe(\n Args.orPromptIf(promptAll, appleKeyIdPrompt({})),\n Args.requiredIf(promptAll),\n );\n const privateKeyPath = yield* Args.text(opts, 'private-key-file').pipe(\n Args.orPromptIf(promptAll, applePrivateKeyFilePrompt({})),\n Args.requiredIf(promptAll),\n );\n const privateKey = privateKeyPath\n ? yield* readPrivateKeyFile(privateKeyPath)\n : undefined;\n const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(\n Args.orPromptIf(promptAll, redirectPrompt),\n );\n\n const meta: Record<string, string> = {};\n if (teamId) meta.teamId = teamId;\n if (keyId) meta.keyId = keyId;\n\n return {\n privateKey,\n redirectTo: privateKey\n ? customRedirectUri || client.redirect_to || DEFAULT_OAUTH_CALLBACK_URL\n : customRedirectUri,\n customRedirectUri,\n meta: Object.keys(meta).length ? meta : undefined,\n } satisfies AppleWebUpdate;\n});\n\nconst handleAppleUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const { promptAll, configureWeb } = yield* resolveAppleUpdateConfig({\n opts,\n client,\n yes,\n });\n\n const servicesId = yield* Args.text(opts, 'services-id').pipe(\n Args.orPromptIf(promptAll, appleServicesIdPrompt({})),\n Args.requiredIf(promptAll),\n );\n const webUpdate: AppleWebUpdate = configureWeb\n ? yield* readAppleWebUpdate({ opts, client, promptAll })\n : {};\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n clientId: servicesId,\n clientSecret: webUpdate.privateKey,\n redirectTo: webUpdate.redirectTo,\n meta: webUpdate.meta,\n });\n\n const lines = [\n `Apple OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n ];\n\n if (webUpdate.redirectTo) {\n lines.push(\n ...redirectSetupMessages({\n prompt: `Add this return URL under your Services ID on ${link('https://developer.apple.com', 'developer.apple.com')}`,\n redirectUri: webUpdate.redirectTo,\n showCustomRedirectInstructions: Boolean(webUpdate.customRedirectUri),\n }),\n );\n }\n\n yield* Effect.log(\n boxen(lines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst handleClerkUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const publishableKey = yield* Args.text(opts, 'publishable-key').pipe(\n Args.orPromptIf(\n !yes && !hasFlag(opts, 'publishable-key'),\n clerkPublishableKeyPrompt({}),\n ),\n Args.required(),\n );\n\n const domain = clerkDomainFromPublishableKey(publishableKey);\n if (!domain) {\n return yield* BadArgsError.make({\n message: 'Invalid publishable key. Could not extract domain.',\n });\n }\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n discoveryEndpoint: `https://${domain}/.well-known/openid-configuration`,\n meta: { clerkPublishableKey: publishableKey },\n });\n\n yield* Effect.log(\n boxen(\n [\n `Clerk OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Clerk Domain: https://${domain}`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleFirebaseUpdate = Effect.fn(function* (\n opts: Record<string, unknown>,\n client: OAuthClientRow,\n) {\n const { yes } = yield* GlobalOpts;\n const projectId = yield* Args.text(opts, 'project-id').pipe(\n Args.orPromptIf(\n !yes && !hasFlag(opts, 'project-id'),\n firebaseProjectIdPrompt({}),\n ),\n Args.required(),\n );\n\n const validationError = validateFirebaseProjectId(projectId);\n if (validationError) {\n return yield* BadArgsError.make({ message: validationError });\n }\n\n const response = yield* updateOAuthClient({\n oauthClientId: client.id,\n discoveryEndpoint: firebaseDiscoveryEndpoint(projectId),\n });\n\n yield* Effect.log(\n boxen(\n [\n `Firebase OAuth client updated: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Firebase Project ID: ${projectId}`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nexport const authClientUpdateCmd = Effect.fn(\n function* (\n opts: OptsFromCommand<typeof authClientUpdateDef> & Record<string, unknown>,\n ) {\n const { auth, client: resolvedClient } = yield* resolveClient({\n id: opts.id,\n name: opts.name,\n });\n const provider = (auth.oauth_service_providers ?? []).find(\n (entry: ProviderRow) => entry.id === resolvedClient.provider_id,\n );\n\n if (!provider) {\n return yield* BadArgsError.make({\n message: `OAuth provider not found for client: ${resolvedClient.client_name}`,\n });\n }\n\n yield* Match.value(provider.provider_name).pipe(\n Match.withReturnType<Effect.Effect<void, any, any>>(),\n Match.when('google', () => handleGoogleUpdate(opts, resolvedClient)),\n Match.when('github', () =>\n handleClientIdSecretUpdate({\n opts,\n client: resolvedClient,\n providerLabel: 'GitHub',\n providerUrl: 'https://github.com/settings/developers',\n redirectSetupPrompt:\n 'Add this callback URL in your GitHub OAuth App settings',\n }),\n ),\n Match.when('linkedin', () =>\n handleClientIdSecretUpdate({\n opts,\n client: resolvedClient,\n providerLabel: 'LinkedIn',\n providerUrl: 'https://www.linkedin.com/developers/apps',\n redirectSetupPrompt:\n 'Add this redirect URI in your LinkedIn app settings',\n }),\n ),\n Match.when('apple', () => handleAppleUpdate(opts, resolvedClient)),\n Match.when('clerk', () => handleClerkUpdate(opts, resolvedClient)),\n Match.when('firebase', () => handleFirebaseUpdate(opts, resolvedClient)),\n Match.orElse((providerName) =>\n BadArgsError.make({\n message: `Updating ${providerName} OAuth clients is not supported.`,\n }),\n ),\n );\n },\n Effect.catchTag('BadArgsError', (e) =>\n Effect.gen(function* () {\n yield* Effect.logError(e.message);\n yield* Effect.log(\n chalk.dim(\n 'hint: run `instant-cli auth client update --help` for available arguments',\n ),\n );\n }),\n ),\n);\n"]}
|
package/dist/lib/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAGpC,QAAA,MAAM,OAAO,EAAE,OAAO,MAA0B,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IACxE,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/args.js
CHANGED
|
@@ -112,7 +112,8 @@ function forbidIf(condition, options) {
|
|
|
112
112
|
const value = yield* arg;
|
|
113
113
|
if (condition && value !== undefined) {
|
|
114
114
|
return yield* BadArgsError.make({
|
|
115
|
-
message: options?.message ??
|
|
115
|
+
message: options?.message ??
|
|
116
|
+
`${flag} is not compatible with other options`,
|
|
116
117
|
});
|
|
117
118
|
}
|
|
118
119
|
return condition ? undefined : value;
|
package/dist/lib/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from 'effect';\nimport { BadArgsError } from '../errors.ts';\nimport { GlobalOpts } from '../context/globalOpts.ts';\nimport { UI } from '../ui/index.ts';\nimport { runUIEffect } from './ui.ts';\n\nconst ArgFlag: unique symbol = Symbol('ArgFlag');\n\n/**\n * An ArgEffect is just an Effect with the source CLI flag attached to it.\n *\n * Effect values do not have a natural place to store \"this came from\n * --client-id\", but the prompt/validation combinators need that flag name for\n * errors. The symbol keeps the metadata private to this module and prevents\n * these helpers from accepting arbitrary Effects.\n */\nexport type ArgEffect<A, E = never, R = never> = Effect.Effect<A, E, R> & {\n readonly [ArgFlag]: string;\n};\n\nconst flagName = (name: string) => (name.startsWith('--') ? name : `--${name}`);\n\nconst makeArg = <A, E, R>(\n flag: string,\n effect: Effect.Effect<A, E, R>,\n): ArgEffect<A, E, R> => {\n return Object.assign(effect, { [ArgFlag]: flag }) as ArgEffect<A, E, R>;\n};\n\nconst getFlag = (arg: ArgEffect<unknown, unknown, unknown>) =>\n arg[ArgFlag];\n\nconst missingMessage = (flag: string) => `Missing required value for ${flag}`;\n\ntype MissingOptions = {\n message?: string;\n};\n\nfunction text(opts: Record<string, unknown>, name: string) {\n const flag = flagName(name);\n\n return makeArg(flag, readTextValue(opts[name], flag));\n}\n\nfunction readTextValue(value: unknown, flag: string) {\n return Effect.gen(function* readTextValue() {\n if (value === undefined || value === null) return undefined;\n\n if (typeof value === 'string' || typeof value === 'number') {\n const trimmed = String(value).trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\nfunction bool(opts: Record<string, unknown>, name: string) {\n const flag = flagName(name);\n\n return makeArg(flag, readBooleanValue(opts[name], flag));\n}\n\nfunction readBooleanValue(value: unknown, flag: string) {\n return Effect.gen(function* readBooleanValue() {\n if (value === undefined || value === null) return undefined;\n if (value === true || value === 'true') return true;\n if (value === false || value === 'false') return false;\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\nfunction uiErrorToBadArgs(e: { message: string }) {\n return BadArgsError.make({ message: `UI error: ${e.message}` });\n}\n\nfunction orPrompt(prompt: UI.TextInputProps) {\n return function orPromptArg<E, R>(arg: ArgEffect<string | undefined, E, R>) {\n return orPromptIf(true, prompt)(arg);\n };\n}\n\nfunction orPromptIf(condition: boolean, prompt: UI.TextInputProps) {\n return function orPromptIfArg<E, R>(\n arg: ArgEffect<string | undefined, E, R>,\n ) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* promptWhenMissing() {\n const value = yield* arg;\n if (value !== undefined || !condition) return value;\n\n const { yes } = yield* GlobalOpts;\n if (yes) return undefined;\n\n const result = yield* runUIEffect(new UI.TextInput(prompt)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }),\n );\n };\n}\n\nfunction orConfirm(prompt: UI.ConfirmationProps) {\n return function orConfirmArg<E, R>(\n arg: ArgEffect<boolean | undefined, E, R>,\n ) {\n return orConfirmIf(true, prompt)(arg);\n };\n}\n\nfunction orConfirmIf(condition: boolean, prompt: UI.ConfirmationProps) {\n return function orConfirmIfArg<E, R>(\n arg: ArgEffect<boolean | undefined, E, R>,\n ) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* confirmWhenMissing() {\n const value = yield* arg;\n if (value !== undefined || !condition) return value;\n\n const { yes } = yield* GlobalOpts;\n if (yes) return undefined;\n\n return yield* runUIEffect(new UI.Confirmation(prompt)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n }),\n );\n };\n}\n\nfunction required(options?: MissingOptions) {\n return function requiredArg<A, E, R>(arg: ArgEffect<A | undefined, E, R>) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* requireValue() {\n const value = yield* arg;\n if (value !== undefined) return value;\n\n return yield* BadArgsError.make({\n message: options?.message ?? missingMessage(flag),\n });\n }),\n );\n };\n}\n\nfunction requiredIf(condition: boolean, options?: MissingOptions) {\n return function requiredIfArg<A, E, R>(\n arg: ArgEffect<A | undefined, E, R>,\n ): ArgEffect<A | undefined, E | BadArgsError, R> {\n return condition ? required(options)(arg) : arg;\n };\n}\n\nfunction forbidIf(condition: boolean, options?: { message?: string }) {\n return function forbidIfArg<A, E, R>(arg: ArgEffect<A | undefined, E, R>) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* rejectForbiddenValue() {\n const value = yield* arg;\n if (condition && value !== undefined) {\n return yield* BadArgsError.make({\n message:\n options?.message ?? `${flag} is not compatible with other options`,\n });\n }\n\n return condition ? undefined : value;\n }),\n );\n };\n}\n\nfunction validate<A>(validateValue: (value: A) => string | undefined) {\n return function validateArg<E, R>(arg: ArgEffect<A | undefined, E, R>) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* validateValueIfPresent() {\n const value = yield* arg;\n if (value === undefined) return undefined;\n\n const error = validateValue(value);\n if (error) {\n return yield* BadArgsError.make({ message: error });\n }\n\n return value;\n }),\n );\n };\n}\n\nexport const Args = {\n text,\n bool,\n orPrompt,\n orPromptIf,\n orConfirm,\n orConfirmIf,\n required,\n requiredIf,\n forbidIf,\n validate,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from 'effect';\nimport { BadArgsError } from '../errors.ts';\nimport { GlobalOpts } from '../context/globalOpts.ts';\nimport { UI } from '../ui/index.ts';\nimport { runUIEffect } from './ui.ts';\n\nconst ArgFlag: unique symbol = Symbol('ArgFlag');\n\n/**\n * An ArgEffect is just an Effect with the source CLI flag attached to it.\n *\n * Effect values do not have a natural place to store \"this came from\n * --client-id\", but the prompt/validation combinators need that flag name for\n * errors. The symbol keeps the metadata private to this module and prevents\n * these helpers from accepting arbitrary Effects.\n */\nexport type ArgEffect<A, E = never, R = never> = Effect.Effect<A, E, R> & {\n readonly [ArgFlag]: string;\n};\n\nconst flagName = (name: string) => (name.startsWith('--') ? name : `--${name}`);\n\nconst makeArg = <A, E, R>(\n flag: string,\n effect: Effect.Effect<A, E, R>,\n): ArgEffect<A, E, R> => {\n return Object.assign(effect, { [ArgFlag]: flag }) as ArgEffect<A, E, R>;\n};\n\nconst getFlag = (arg: ArgEffect<unknown, unknown, unknown>) => arg[ArgFlag];\n\nconst missingMessage = (flag: string) => `Missing required value for ${flag}`;\n\ntype MissingOptions = {\n message?: string;\n};\n\nfunction text(opts: Record<string, unknown>, name: string) {\n const flag = flagName(name);\n\n return makeArg(flag, readTextValue(opts[name], flag));\n}\n\nfunction readTextValue(value: unknown, flag: string) {\n return Effect.gen(function* readTextValue() {\n if (value === undefined || value === null) return undefined;\n\n if (typeof value === 'string' || typeof value === 'number') {\n const trimmed = String(value).trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\nfunction bool(opts: Record<string, unknown>, name: string) {\n const flag = flagName(name);\n\n return makeArg(flag, readBooleanValue(opts[name], flag));\n}\n\nfunction readBooleanValue(value: unknown, flag: string) {\n return Effect.gen(function* readBooleanValue() {\n if (value === undefined || value === null) return undefined;\n if (value === true || value === 'true') return true;\n if (value === false || value === 'false') return false;\n\n return yield* BadArgsError.make({\n message: `Invalid value for ${flag}`,\n });\n });\n}\n\nfunction uiErrorToBadArgs(e: { message: string }) {\n return BadArgsError.make({ message: `UI error: ${e.message}` });\n}\n\nfunction orPrompt(prompt: UI.TextInputProps) {\n return function orPromptArg<E, R>(arg: ArgEffect<string | undefined, E, R>) {\n return orPromptIf(true, prompt)(arg);\n };\n}\n\nfunction orPromptIf(condition: boolean, prompt: UI.TextInputProps) {\n return function orPromptIfArg<E, R>(\n arg: ArgEffect<string | undefined, E, R>,\n ) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* promptWhenMissing() {\n const value = yield* arg;\n if (value !== undefined || !condition) return value;\n\n const { yes } = yield* GlobalOpts;\n if (yes) return undefined;\n\n const result = yield* runUIEffect(new UI.TextInput(prompt)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }),\n );\n };\n}\n\nfunction orConfirm(prompt: UI.ConfirmationProps) {\n return function orConfirmArg<E, R>(\n arg: ArgEffect<boolean | undefined, E, R>,\n ) {\n return orConfirmIf(true, prompt)(arg);\n };\n}\n\nfunction orConfirmIf(condition: boolean, prompt: UI.ConfirmationProps) {\n return function orConfirmIfArg<E, R>(\n arg: ArgEffect<boolean | undefined, E, R>,\n ) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* confirmWhenMissing() {\n const value = yield* arg;\n if (value !== undefined || !condition) return value;\n\n const { yes } = yield* GlobalOpts;\n if (yes) return undefined;\n\n return yield* runUIEffect(new UI.Confirmation(prompt)).pipe(\n Effect.catchTag('UIError', uiErrorToBadArgs),\n );\n }),\n );\n };\n}\n\nfunction required(options?: MissingOptions) {\n return function requiredArg<A, E, R>(arg: ArgEffect<A | undefined, E, R>) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* requireValue() {\n const value = yield* arg;\n if (value !== undefined) return value;\n\n return yield* BadArgsError.make({\n message: options?.message ?? missingMessage(flag),\n });\n }),\n );\n };\n}\n\nfunction requiredIf(condition: boolean, options?: MissingOptions) {\n return function requiredIfArg<A, E, R>(\n arg: ArgEffect<A | undefined, E, R>,\n ): ArgEffect<A | undefined, E | BadArgsError, R> {\n return condition ? required(options)(arg) : arg;\n };\n}\n\nfunction forbidIf(condition: boolean, options?: { message?: string }) {\n return function forbidIfArg<A, E, R>(arg: ArgEffect<A | undefined, E, R>) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* rejectForbiddenValue() {\n const value = yield* arg;\n if (condition && value !== undefined) {\n return yield* BadArgsError.make({\n message:\n options?.message ??\n `${flag} is not compatible with other options`,\n });\n }\n\n return condition ? undefined : value;\n }),\n );\n };\n}\n\nfunction validate<A>(validateValue: (value: A) => string | undefined) {\n return function validateArg<E, R>(arg: ArgEffect<A | undefined, E, R>) {\n const flag = getFlag(arg);\n\n return makeArg(\n flag,\n Effect.gen(function* validateValueIfPresent() {\n const value = yield* arg;\n if (value === undefined) return undefined;\n\n const error = validateValue(value);\n if (error) {\n return yield* BadArgsError.make({ message: error });\n }\n\n return value;\n }),\n );\n };\n}\n\nexport const Args = {\n text,\n bool,\n orPrompt,\n orPromptIf,\n orConfirm,\n orConfirmIf,\n required,\n requiredIf,\n forbidIf,\n validate,\n};\n"]}
|
package/dist/lib/oauth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAe,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAe,MAAM,WAAW,CAAC;AAI3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK5C,eAAO,MAAM,uBAAuB,mEAKnC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;EAG/B,CAAC;AAEH,eAAO,MAAM,mBAAmB,6DAK/B,CAAC;AAmBF,eAAO,MAAM,WAAW;;;;;;;;;;;;;EAWtB,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;EAEnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAEjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AAOH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;iRAOtB,CAAC;AAEH,eAAO,MAAM,gBAAgB;YACnB,MAAM;kBACA,MAAM;;;;;;iRAgBpB,CAAC;AAEH,eAAO,MAAM,cAAc;YACjB,MAAM;gBACF,MAAM;gBACN,MAAM;eACP,MAAM;mBACF,MAAM;4BACG,MAAM;oBACd,MAAM;wBACF,MAAM;iBACb,MAAM;WACZ,OAAO;2BACS,OAAO;;;;;;;;;;;;;;;;;;iRAuB9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;mBACb,MAAM;eACV,MAAM,GAAG,IAAI;mBACT,MAAM,GAAG,IAAI;wBACR,MAAM,GAAG,IAAI;iBACpB,MAAM,GAAG,IAAI;WACnB,OAAO;2BACS,OAAO,GAAG,IAAI;;;;;;;;;;;;;;;;;;iRAmBrC,CAAC;AAIH,eAAO,MAAM,oBAAoB,gGAiC/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iRAc9B,CAAC;AAIH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,WAWzD,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;gVA8BnC,CAAC;AAEH,eAAO,MAAM,oBAAoB;SAC1B,MAAM;WACJ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gSA2Bb,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;iRAajC,CAAC;AAEH,eAAO,MAAM,mBAAmB;aACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,uBAAuB,CAAC;YACnD,MAAM,EAAE;;;;;;;iRAiBhB,CAAC"}
|
package/dist/lib/oauth.js
CHANGED
|
@@ -3,7 +3,7 @@ import { Effect, Schema } from 'effect';
|
|
|
3
3
|
import { CurrentApp } from "../context/currentApp.js";
|
|
4
4
|
import { InstantHttpAuthed, withCommand } from "./http.js";
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
-
import { runUIEffect, stripFirstBlankLine, validateRequired
|
|
6
|
+
import { runUIEffect, stripFirstBlankLine, validateRequired } from "./ui.js";
|
|
7
7
|
import { UI } from "../ui/index.js";
|
|
8
8
|
import { BadArgsError } from "../errors.js";
|
|
9
9
|
import { link } from "../logging.js";
|
package/dist/lib/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from './http.ts';\nimport chalk from 'chalk';\nimport {\n runUIEffect,\n stripFirstBlankLine,\n validateRequired,\n} from './ui.ts';\nimport { UI } from '../ui/index.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { link } from '../logging.ts';\nimport type { ClientTypeSchema } from '../commands/auth/client/add.ts';\nimport { Args } from './args.ts';\n\nexport const AuthorizedOriginService = Schema.Literal(\n 'generic',\n 'vercel',\n 'netlify',\n 'custom-scheme',\n);\n\nexport const AuthorizedOrigin = Schema.Struct({\n id: Schema.String,\n service: AuthorizedOriginService,\n params: Schema.Array(Schema.String).pipe(Schema.mutable),\n});\n\nexport const OAuthServiceProvider = Schema.Struct({\n id: Schema.String,\n provider_name: Schema.String,\n});\n\nexport const GoogleAppTypeSchema = Schema.Literal(\n 'web',\n 'ios',\n 'android',\n 'button-for-web',\n);\n\nconst NullableString = Schema.Union(Schema.String, Schema.Null).pipe(\n Schema.optional,\n);\n\nconst NullableBoolean = Schema.Union(Schema.Boolean, Schema.Null).pipe(\n Schema.optional,\n);\n\nconst OAuthClientMeta = Schema.Struct({\n // Currently the CLI only reads Google app type from meta. Other providers store\n // different meta shapes, so keep the rest open until we have a clean\n // top-level discriminator for a full provider-specific union.\n appType: GoogleAppTypeSchema.pipe(Schema.optional),\n}).pipe(\n Schema.extend(Schema.Record({ key: Schema.String, value: Schema.Any })),\n);\n\nexport const OAuthClient = Schema.Struct({\n id: Schema.String,\n client_name: Schema.String,\n client_id: NullableString,\n provider_id: Schema.String,\n authorization_endpoint: NullableString,\n token_endpoint: NullableString,\n discovery_endpoint: NullableString,\n redirect_to: NullableString,\n meta: Schema.Union(OAuthClientMeta, Schema.Null).pipe(Schema.optional),\n use_shared_credentials: NullableBoolean,\n});\n\nexport const AddOAuthProviderResponse = Schema.Struct({\n provider: OAuthServiceProvider,\n});\n\nexport const AddOAuthClientResponse = Schema.Struct({\n client: OAuthClient,\n});\n\nexport const AuthorizedOriginResponse = Schema.Struct({\n origin: AuthorizedOrigin,\n});\n\nconst NullableArray = <A, I, R>(schema: Schema.Schema<A, I, R>) =>\n Schema.Union(Schema.Array(schema).pipe(Schema.mutable), Schema.Null).pipe(\n Schema.optional,\n );\n\nexport const AppsAuthResponse = Schema.Struct({\n authorized_redirect_origins: NullableArray(AuthorizedOrigin),\n oauth_service_providers: NullableArray(OAuthServiceProvider),\n oauth_clients: NullableArray(OAuthClient),\n});\n\nexport const getAppsAuth = Effect.fn(function* () {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .get(`/dash/apps/${targetAppId}/auth`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AppsAuthResponse)));\n});\n\nexport const addOAuthProvider = Effect.fn(function* (params: {\n appId?: string;\n providerName: string;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_service_providers`, {\n body: HttpBody.unsafeJson({\n provider_name: params.providerName,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AddOAuthProviderResponse),\n ),\n );\n});\n\nexport const addOAuthClient = Effect.fn(function* (params: {\n appId?: string;\n providerId: string;\n clientName: string;\n clientId?: string;\n clientSecret?: string;\n authorizationEndpoint?: string;\n tokenEndpoint?: string;\n discoveryEndpoint?: string;\n redirectTo?: string;\n meta?: unknown;\n useSharedCredentials?: boolean;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients`, {\n body: HttpBody.unsafeJson({\n provider_id: params.providerId,\n client_name: params.clientName,\n client_id: params.clientId,\n client_secret: params.clientSecret,\n authorization_endpoint: params.authorizationEndpoint,\n token_endpoint: params.tokenEndpoint,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n use_shared_credentials: params.useSharedCredentials,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\nexport const updateOAuthClient = Effect.fn(function* (params: {\n oauthClientId: string;\n clientId?: string | null;\n clientSecret?: string | null;\n discoveryEndpoint?: string | null;\n redirectTo?: string | null;\n meta?: unknown;\n useSharedCredentials?: boolean | null;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients/${params.oauthClientId}`, {\n body: HttpBody.unsafeJson({\n client_id: params.clientId,\n client_secret: params.clientSecret,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n use_shared_credentials: params.useSharedCredentials,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\n// Due to the long prompt text, we use modifiers to manually create the prompt so we can\n// change it after submission.\nexport const promptForRedirectURI = Effect.fn(function* (\n existingValue?: string,\n) {\n if (existingValue) return existingValue;\n\n const result = yield* runUIEffect(\n new UI.TextInput({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URL (optional):\n${chalk.dim('With a custom redirect URL, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URL must forward to ${link('https://api.instantdb.com/runtime/oauth/callback')} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\nCustom redirect URL (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({\n message: `UI error for redirect URI: ${e.message}`,\n }),\n ),\n );\n\n return result === '' ? undefined : result;\n});\n\nexport const getOrCreateProvider = Effect.fn(function* (\n type: typeof ClientTypeSchema.Type,\n) {\n const auth = yield* getAppsAuth();\n const provider = auth.oauth_service_providers?.find(\n (entry) => entry.provider_name === type,\n );\n\n if (provider) {\n return { auth, provider };\n }\n\n const created = yield* addOAuthProvider({ providerName: type });\n return { auth, provider: created.provider };\n});\n\n// Returns prefix if unused; otherwise appends integers starting at 2.\n// e.g. findName('google', new Set(['google', 'google2'])) returns 'google3'.\nexport const findName = (prefix: string, used: Set<string>) => {\n if (!used.has(prefix)) {\n return prefix;\n }\n\n for (let i = 2; ; i++) {\n const candidate = `${prefix}${i}`;\n if (!used.has(candidate)) {\n return candidate;\n }\n }\n};\n\nexport const getClientNameAndProvider = Effect.fn(function* (\n providerType: typeof ClientTypeSchema.Type,\n opts: Record<string, unknown>,\n) {\n const { auth, provider } = yield* getOrCreateProvider(providerType);\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(providerType, usedClientNames);\n\n const clientName = yield* Args.text(opts, 'name').pipe(\n Args.orPrompt({\n prompt: 'Client Name:',\n defaultValue: suggestedClientName,\n placeholder: suggestedClientName,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n }),\n Args.required(),\n );\n\n if (usedClientNames.has(clientName || '')) {\n return yield* BadArgsError.make({\n message: `The unique name '${clientName}' is already in use.`,\n });\n }\n return { provider, clientName };\n});\n\nexport const findClientByIdOrName = Effect.fn(function* (params: {\n id?: string;\n name?: string;\n}) {\n if (params.id && params.name) {\n return yield* BadArgsError.make({\n message: 'Cannot specify both --id and --name',\n });\n }\n if (!params.id && !params.name) {\n return yield* BadArgsError.make({\n message: 'Must specify --id or --name',\n });\n }\n\n const auth = yield* getAppsAuth();\n const clients = auth.oauth_clients ?? [];\n const client = params.id\n ? clients.find((entry) => entry.id === params.id)\n : clients.find((entry) => entry.client_name === params.name);\n\n if (!client) {\n const lookup = params.id ? `id ${params.id}` : `name ${params.name}`;\n return yield* BadArgsError.make({\n message: `OAuth client not found: ${lookup}`,\n });\n }\n\n return { auth, client };\n});\n\nexport const removeAuthorizedOrigin = Effect.fn(function* (originId: string) {\n const http = (yield* InstantHttpAuthed).pipe(\n withCommand('auth origin delete'),\n );\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .del(`/dash/apps/${appId}/authorized_redirect_origins/${originId}`)\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n\nexport const addAuthorizedOrigin = Effect.fn(function* (params: {\n service: Schema.Schema.Type<typeof AuthorizedOriginService>;\n params: string[];\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth origin add'));\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .post(`/dash/apps/${appId}/authorized_redirect_origins`, {\n body: HttpBody.unsafeJson({\n service: params.service,\n params: params.params,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n"]}
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from './http.ts';\nimport chalk from 'chalk';\nimport { runUIEffect, stripFirstBlankLine, validateRequired } from './ui.ts';\nimport { UI } from '../ui/index.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { link } from '../logging.ts';\nimport type { ClientTypeSchema } from '../commands/auth/client/add.ts';\nimport { Args } from './args.ts';\n\nexport const AuthorizedOriginService = Schema.Literal(\n 'generic',\n 'vercel',\n 'netlify',\n 'custom-scheme',\n);\n\nexport const AuthorizedOrigin = Schema.Struct({\n id: Schema.String,\n service: AuthorizedOriginService,\n params: Schema.Array(Schema.String).pipe(Schema.mutable),\n});\n\nexport const OAuthServiceProvider = Schema.Struct({\n id: Schema.String,\n provider_name: Schema.String,\n});\n\nexport const GoogleAppTypeSchema = Schema.Literal(\n 'web',\n 'ios',\n 'android',\n 'button-for-web',\n);\n\nconst NullableString = Schema.Union(Schema.String, Schema.Null).pipe(\n Schema.optional,\n);\n\nconst NullableBoolean = Schema.Union(Schema.Boolean, Schema.Null).pipe(\n Schema.optional,\n);\n\nconst OAuthClientMeta = Schema.Struct({\n // Currently the CLI only reads Google app type from meta. Other providers store\n // different meta shapes, so keep the rest open until we have a clean\n // top-level discriminator for a full provider-specific union.\n appType: GoogleAppTypeSchema.pipe(Schema.optional),\n}).pipe(\n Schema.extend(Schema.Record({ key: Schema.String, value: Schema.Any })),\n);\n\nexport const OAuthClient = Schema.Struct({\n id: Schema.String,\n client_name: Schema.String,\n client_id: NullableString,\n provider_id: Schema.String,\n authorization_endpoint: NullableString,\n token_endpoint: NullableString,\n discovery_endpoint: NullableString,\n redirect_to: NullableString,\n meta: Schema.Union(OAuthClientMeta, Schema.Null).pipe(Schema.optional),\n use_shared_credentials: NullableBoolean,\n});\n\nexport const AddOAuthProviderResponse = Schema.Struct({\n provider: OAuthServiceProvider,\n});\n\nexport const AddOAuthClientResponse = Schema.Struct({\n client: OAuthClient,\n});\n\nexport const AuthorizedOriginResponse = Schema.Struct({\n origin: AuthorizedOrigin,\n});\n\nconst NullableArray = <A, I, R>(schema: Schema.Schema<A, I, R>) =>\n Schema.Union(Schema.Array(schema).pipe(Schema.mutable), Schema.Null).pipe(\n Schema.optional,\n );\n\nexport const AppsAuthResponse = Schema.Struct({\n authorized_redirect_origins: NullableArray(AuthorizedOrigin),\n oauth_service_providers: NullableArray(OAuthServiceProvider),\n oauth_clients: NullableArray(OAuthClient),\n});\n\nexport const getAppsAuth = Effect.fn(function* () {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .get(`/dash/apps/${targetAppId}/auth`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AppsAuthResponse)));\n});\n\nexport const addOAuthProvider = Effect.fn(function* (params: {\n appId?: string;\n providerName: string;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_service_providers`, {\n body: HttpBody.unsafeJson({\n provider_name: params.providerName,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AddOAuthProviderResponse),\n ),\n );\n});\n\nexport const addOAuthClient = Effect.fn(function* (params: {\n appId?: string;\n providerId: string;\n clientName: string;\n clientId?: string;\n clientSecret?: string;\n authorizationEndpoint?: string;\n tokenEndpoint?: string;\n discoveryEndpoint?: string;\n redirectTo?: string;\n meta?: unknown;\n useSharedCredentials?: boolean;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients`, {\n body: HttpBody.unsafeJson({\n provider_id: params.providerId,\n client_name: params.clientName,\n client_id: params.clientId,\n client_secret: params.clientSecret,\n authorization_endpoint: params.authorizationEndpoint,\n token_endpoint: params.tokenEndpoint,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n use_shared_credentials: params.useSharedCredentials,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\nexport const updateOAuthClient = Effect.fn(function* (params: {\n oauthClientId: string;\n clientId?: string | null;\n clientSecret?: string | null;\n discoveryEndpoint?: string | null;\n redirectTo?: string | null;\n meta?: unknown;\n useSharedCredentials?: boolean | null;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients/${params.oauthClientId}`, {\n body: HttpBody.unsafeJson({\n client_id: params.clientId,\n client_secret: params.clientSecret,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n use_shared_credentials: params.useSharedCredentials,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\n// Due to the long prompt text, we use modifiers to manually create the prompt so we can\n// change it after submission.\nexport const promptForRedirectURI = Effect.fn(function* (\n existingValue?: string,\n) {\n if (existingValue) return existingValue;\n\n const result = yield* runUIEffect(\n new UI.TextInput({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URL (optional):\n${chalk.dim('With a custom redirect URL, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URL must forward to ${link('https://api.instantdb.com/runtime/oauth/callback')} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\nCustom redirect URL (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({\n message: `UI error for redirect URI: ${e.message}`,\n }),\n ),\n );\n\n return result === '' ? undefined : result;\n});\n\nexport const getOrCreateProvider = Effect.fn(function* (\n type: typeof ClientTypeSchema.Type,\n) {\n const auth = yield* getAppsAuth();\n const provider = auth.oauth_service_providers?.find(\n (entry) => entry.provider_name === type,\n );\n\n if (provider) {\n return { auth, provider };\n }\n\n const created = yield* addOAuthProvider({ providerName: type });\n return { auth, provider: created.provider };\n});\n\n// Returns prefix if unused; otherwise appends integers starting at 2.\n// e.g. findName('google', new Set(['google', 'google2'])) returns 'google3'.\nexport const findName = (prefix: string, used: Set<string>) => {\n if (!used.has(prefix)) {\n return prefix;\n }\n\n for (let i = 2; ; i++) {\n const candidate = `${prefix}${i}`;\n if (!used.has(candidate)) {\n return candidate;\n }\n }\n};\n\nexport const getClientNameAndProvider = Effect.fn(function* (\n providerType: typeof ClientTypeSchema.Type,\n opts: Record<string, unknown>,\n) {\n const { auth, provider } = yield* getOrCreateProvider(providerType);\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(providerType, usedClientNames);\n\n const clientName = yield* Args.text(opts, 'name').pipe(\n Args.orPrompt({\n prompt: 'Client Name:',\n defaultValue: suggestedClientName,\n placeholder: suggestedClientName,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n }),\n Args.required(),\n );\n\n if (usedClientNames.has(clientName || '')) {\n return yield* BadArgsError.make({\n message: `The unique name '${clientName}' is already in use.`,\n });\n }\n return { provider, clientName };\n});\n\nexport const findClientByIdOrName = Effect.fn(function* (params: {\n id?: string;\n name?: string;\n}) {\n if (params.id && params.name) {\n return yield* BadArgsError.make({\n message: 'Cannot specify both --id and --name',\n });\n }\n if (!params.id && !params.name) {\n return yield* BadArgsError.make({\n message: 'Must specify --id or --name',\n });\n }\n\n const auth = yield* getAppsAuth();\n const clients = auth.oauth_clients ?? [];\n const client = params.id\n ? clients.find((entry) => entry.id === params.id)\n : clients.find((entry) => entry.client_name === params.name);\n\n if (!client) {\n const lookup = params.id ? `id ${params.id}` : `name ${params.name}`;\n return yield* BadArgsError.make({\n message: `OAuth client not found: ${lookup}`,\n });\n }\n\n return { auth, client };\n});\n\nexport const removeAuthorizedOrigin = Effect.fn(function* (originId: string) {\n const http = (yield* InstantHttpAuthed).pipe(\n withCommand('auth origin delete'),\n );\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .del(`/dash/apps/${appId}/authorized_redirect_origins/${originId}`)\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n\nexport const addAuthorizedOrigin = Effect.fn(function* (params: {\n service: Schema.Schema.Type<typeof AuthorizedOriginService>;\n params: string[];\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth origin add'));\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .post(`/dash/apps/${appId}/authorized_redirect_origins`, {\n body: HttpBody.unsafeJson({\n service: params.service,\n params: params.params,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "instant-cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.23-branch-codex-cli-args-combinators.
|
|
4
|
+
"version": "1.0.23-branch-codex-cli-args-combinators.25394030897.1",
|
|
5
5
|
"description": "Instant's CLI",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"homepage": "https://github.com/instantdb/instant/tree/main/client/packages/cli",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"strip-ansi": "^7.1.2",
|
|
51
51
|
"supports-hyperlinks": "^4.4.0",
|
|
52
52
|
"unconfig": "^7.5.0",
|
|
53
|
-
"@instantdb/core": "1.0.23-branch-codex-cli-args-combinators.
|
|
54
|
-
"@instantdb/platform": "1.0.23-branch-codex-cli-args-combinators.
|
|
55
|
-
"@instantdb/version": "1.0.23-branch-codex-cli-args-combinators.
|
|
53
|
+
"@instantdb/core": "1.0.23-branch-codex-cli-args-combinators.25394030897.1",
|
|
54
|
+
"@instantdb/platform": "1.0.23-branch-codex-cli-args-combinators.25394030897.1",
|
|
55
|
+
"@instantdb/version": "1.0.23-branch-codex-cli-args-combinators.25394030897.1"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@babel/core": "^7.17.9",
|
|
@@ -155,24 +155,6 @@ const hasGoogleUpdateFlags = (opts: Record<string, unknown>) =>
|
|
|
155
155
|
isTrueFlag(getFlag(opts, 'dev-credentials')) ||
|
|
156
156
|
hasGoogleCustomCredentialFlags(opts);
|
|
157
157
|
|
|
158
|
-
const textWhenNeeded = (
|
|
159
|
-
opts: Record<string, unknown>,
|
|
160
|
-
flag: string,
|
|
161
|
-
params: {
|
|
162
|
-
promptIf: boolean;
|
|
163
|
-
required?: boolean;
|
|
164
|
-
prompt: UI.TextInputProps;
|
|
165
|
-
},
|
|
166
|
-
) =>
|
|
167
|
-
Effect.gen(function* () {
|
|
168
|
-
const value = getFlag(opts, flag);
|
|
169
|
-
if (value === undefined && !params.promptIf) return undefined;
|
|
170
|
-
return yield* Args.text(opts, flag).pipe(
|
|
171
|
-
Args.orPromptIf(params.promptIf, params.prompt),
|
|
172
|
-
Args.requiredIf(params.required ?? params.promptIf),
|
|
173
|
-
);
|
|
174
|
-
});
|
|
175
|
-
|
|
176
158
|
const selectGoogleUpdateMode = Effect.fn(function* ({
|
|
177
159
|
isWeb,
|
|
178
160
|
switchingFromShared,
|
|
@@ -294,16 +276,11 @@ const updateGoogleRedirect = Effect.fn(function* ({
|
|
|
294
276
|
opts: Record<string, unknown>;
|
|
295
277
|
client: OAuthClientRow;
|
|
296
278
|
}) {
|
|
297
|
-
const redirectTo = yield*
|
|
298
|
-
|
|
299
|
-
required
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
if (!redirectTo) {
|
|
303
|
-
return yield* BadArgsError.make({
|
|
304
|
-
message: 'Missing required value for --custom-redirect-uri',
|
|
305
|
-
});
|
|
306
|
-
}
|
|
279
|
+
const redirectTo = yield* Args.text(opts, 'custom-redirect-uri').pipe(
|
|
280
|
+
Args.orPrompt(newRedirectPrompt),
|
|
281
|
+
Args.required(),
|
|
282
|
+
);
|
|
283
|
+
|
|
307
284
|
const response = yield* updateOAuthClient({
|
|
308
285
|
oauthClientId: client.id,
|
|
309
286
|
redirectTo,
|
|
@@ -347,22 +324,24 @@ const updateGoogleCustomCredentials = Effect.fn(function* ({
|
|
|
347
324
|
const shouldPromptRedirectUri =
|
|
348
325
|
isWeb && switchingFromShared && promptCredentials;
|
|
349
326
|
|
|
350
|
-
const clientId = yield*
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
327
|
+
const clientId = yield* Args.text(opts, 'client-id').pipe(
|
|
328
|
+
Args.orPromptIf(
|
|
329
|
+
shouldPromptClientId,
|
|
330
|
+
clientIdPrompt({ providerUrl: googleConsoleUrl }),
|
|
331
|
+
),
|
|
332
|
+
Args.requiredIf(mustCollectCredentials),
|
|
333
|
+
);
|
|
334
|
+
const clientSecret = yield* Args.text(opts, 'client-secret').pipe(
|
|
335
|
+
Args.orPromptIf(
|
|
336
|
+
shouldPromptClientSecret,
|
|
337
|
+
clientSecretPrompt({ providerUrl: googleConsoleUrl }),
|
|
338
|
+
),
|
|
339
|
+
Args.requiredIf(isWeb && mustCollectCredentials),
|
|
340
|
+
);
|
|
360
341
|
const customRedirectUri = isWeb
|
|
361
|
-
? yield*
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
prompt: redirectPrompt,
|
|
365
|
-
})
|
|
342
|
+
? yield* Args.text(opts, 'custom-redirect-uri').pipe(
|
|
343
|
+
Args.orPromptIf(shouldPromptRedirectUri, redirectPrompt),
|
|
344
|
+
)
|
|
366
345
|
: undefined;
|
|
367
346
|
|
|
368
347
|
const redirectTo = switchingFromShared
|
|
@@ -484,28 +463,29 @@ const handleClientIdSecretUpdate = Effect.fn(function* (params: {
|
|
|
484
463
|
promptRedirect = action === 'redirect';
|
|
485
464
|
}
|
|
486
465
|
|
|
487
|
-
const clientId = yield*
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
466
|
+
const clientId = yield* Args.text(params.opts, 'client-id').pipe(
|
|
467
|
+
Args.orPromptIf(
|
|
468
|
+
promptCredentials,
|
|
469
|
+
clientIdPrompt({ providerUrl: params.providerUrl }),
|
|
470
|
+
),
|
|
471
|
+
Args.requiredIf(promptCredentials),
|
|
472
|
+
);
|
|
473
|
+
const clientSecret = yield* Args.text(params.opts, 'client-secret').pipe(
|
|
474
|
+
Args.orPromptIf(
|
|
475
|
+
promptCredentials,
|
|
476
|
+
clientSecretPrompt({ providerUrl: params.providerUrl }),
|
|
477
|
+
),
|
|
478
|
+
Args.requiredIf(promptCredentials),
|
|
500
479
|
);
|
|
501
|
-
const customRedirectUri = yield*
|
|
480
|
+
const customRedirectUri = yield* Args.text(
|
|
502
481
|
params.opts,
|
|
503
482
|
'custom-redirect-uri',
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
483
|
+
).pipe(
|
|
484
|
+
Args.orPromptIf(
|
|
485
|
+
promptRedirect,
|
|
486
|
+
promptRedirect ? newRedirectPrompt : redirectPrompt,
|
|
487
|
+
),
|
|
488
|
+
Args.requiredIf(promptRedirect),
|
|
509
489
|
);
|
|
510
490
|
|
|
511
491
|
const response = yield* updateOAuthClient({
|
|
@@ -616,36 +596,23 @@ const readAppleWebUpdate = Effect.fn(function* ({
|
|
|
616
596
|
client: OAuthClientRow;
|
|
617
597
|
promptAll: boolean;
|
|
618
598
|
}) {
|
|
619
|
-
const teamId = yield*
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
opts,
|
|
631
|
-
'private-key-file',
|
|
632
|
-
{
|
|
633
|
-
promptIf: promptAll,
|
|
634
|
-
required: promptAll,
|
|
635
|
-
prompt: applePrivateKeyFilePrompt({}),
|
|
636
|
-
},
|
|
599
|
+
const teamId = yield* Args.text(opts, 'team-id').pipe(
|
|
600
|
+
Args.orPromptIf(promptAll, appleTeamIdPrompt({})),
|
|
601
|
+
Args.requiredIf(promptAll),
|
|
602
|
+
);
|
|
603
|
+
const keyId = yield* Args.text(opts, 'key-id').pipe(
|
|
604
|
+
Args.orPromptIf(promptAll, appleKeyIdPrompt({})),
|
|
605
|
+
Args.requiredIf(promptAll),
|
|
606
|
+
);
|
|
607
|
+
const privateKeyPath = yield* Args.text(opts, 'private-key-file').pipe(
|
|
608
|
+
Args.orPromptIf(promptAll, applePrivateKeyFilePrompt({})),
|
|
609
|
+
Args.requiredIf(promptAll),
|
|
637
610
|
);
|
|
638
611
|
const privateKey = privateKeyPath
|
|
639
612
|
? yield* readPrivateKeyFile(privateKeyPath)
|
|
640
613
|
: undefined;
|
|
641
|
-
const customRedirectUri = yield*
|
|
642
|
-
|
|
643
|
-
'custom-redirect-uri',
|
|
644
|
-
{
|
|
645
|
-
promptIf: promptAll,
|
|
646
|
-
required: false,
|
|
647
|
-
prompt: redirectPrompt,
|
|
648
|
-
},
|
|
614
|
+
const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(
|
|
615
|
+
Args.orPromptIf(promptAll, redirectPrompt),
|
|
649
616
|
);
|
|
650
617
|
|
|
651
618
|
const meta: Record<string, string> = {};
|
|
@@ -673,11 +640,10 @@ const handleAppleUpdate = Effect.fn(function* (
|
|
|
673
640
|
yes,
|
|
674
641
|
});
|
|
675
642
|
|
|
676
|
-
const servicesId = yield*
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
});
|
|
643
|
+
const servicesId = yield* Args.text(opts, 'services-id').pipe(
|
|
644
|
+
Args.orPromptIf(promptAll, appleServicesIdPrompt({})),
|
|
645
|
+
Args.requiredIf(promptAll),
|
|
646
|
+
);
|
|
681
647
|
const webUpdate: AppleWebUpdate = configureWeb
|
|
682
648
|
? yield* readAppleWebUpdate({ opts, client, promptAll })
|
|
683
649
|
: {};
|
|
@@ -718,17 +684,13 @@ const handleClerkUpdate = Effect.fn(function* (
|
|
|
718
684
|
client: OAuthClientRow,
|
|
719
685
|
) {
|
|
720
686
|
const { yes } = yield* GlobalOpts;
|
|
721
|
-
const publishableKey = yield*
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
return yield* BadArgsError.make({
|
|
729
|
-
message: 'Missing required value for --publishable-key',
|
|
730
|
-
});
|
|
731
|
-
}
|
|
687
|
+
const publishableKey = yield* Args.text(opts, 'publishable-key').pipe(
|
|
688
|
+
Args.orPromptIf(
|
|
689
|
+
!yes && !hasFlag(opts, 'publishable-key'),
|
|
690
|
+
clerkPublishableKeyPrompt({}),
|
|
691
|
+
),
|
|
692
|
+
Args.required(),
|
|
693
|
+
);
|
|
732
694
|
|
|
733
695
|
const domain = clerkDomainFromPublishableKey(publishableKey);
|
|
734
696
|
if (!domain) {
|
|
@@ -760,20 +722,22 @@ const handleFirebaseUpdate = Effect.fn(function* (
|
|
|
760
722
|
client: OAuthClientRow,
|
|
761
723
|
) {
|
|
762
724
|
const { yes } = yield* GlobalOpts;
|
|
763
|
-
const projectId = yield*
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
725
|
+
const projectId = yield* Args.text(opts, 'project-id').pipe(
|
|
726
|
+
Args.orPromptIf(
|
|
727
|
+
!yes && !hasFlag(opts, 'project-id'),
|
|
728
|
+
firebaseProjectIdPrompt({}),
|
|
729
|
+
),
|
|
730
|
+
Args.required(),
|
|
731
|
+
);
|
|
768
732
|
|
|
769
|
-
const validationError = validateFirebaseProjectId(projectId
|
|
733
|
+
const validationError = validateFirebaseProjectId(projectId);
|
|
770
734
|
if (validationError) {
|
|
771
735
|
return yield* BadArgsError.make({ message: validationError });
|
|
772
736
|
}
|
|
773
737
|
|
|
774
738
|
const response = yield* updateOAuthClient({
|
|
775
739
|
oauthClientId: client.id,
|
|
776
|
-
discoveryEndpoint: firebaseDiscoveryEndpoint(projectId
|
|
740
|
+
discoveryEndpoint: firebaseDiscoveryEndpoint(projectId),
|
|
777
741
|
});
|
|
778
742
|
|
|
779
743
|
yield* Effect.log(
|
package/src/lib/args.ts
CHANGED
|
@@ -27,8 +27,7 @@ const makeArg = <A, E, R>(
|
|
|
27
27
|
return Object.assign(effect, { [ArgFlag]: flag }) as ArgEffect<A, E, R>;
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
const getFlag = (arg: ArgEffect<unknown, unknown, unknown>) =>
|
|
31
|
-
arg[ArgFlag];
|
|
30
|
+
const getFlag = (arg: ArgEffect<unknown, unknown, unknown>) => arg[ArgFlag];
|
|
32
31
|
|
|
33
32
|
const missingMessage = (flag: string) => `Missing required value for ${flag}`;
|
|
34
33
|
|
|
@@ -178,7 +177,8 @@ function forbidIf(condition: boolean, options?: { message?: string }) {
|
|
|
178
177
|
if (condition && value !== undefined) {
|
|
179
178
|
return yield* BadArgsError.make({
|
|
180
179
|
message:
|
|
181
|
-
options?.message ??
|
|
180
|
+
options?.message ??
|
|
181
|
+
`${flag} is not compatible with other options`,
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
|
package/src/lib/oauth.ts
CHANGED
|
@@ -3,11 +3,7 @@ import { Effect, Schema } from 'effect';
|
|
|
3
3
|
import { CurrentApp } from '../context/currentApp.ts';
|
|
4
4
|
import { InstantHttpAuthed, withCommand } from './http.ts';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
-
import {
|
|
7
|
-
runUIEffect,
|
|
8
|
-
stripFirstBlankLine,
|
|
9
|
-
validateRequired,
|
|
10
|
-
} from './ui.ts';
|
|
6
|
+
import { runUIEffect, stripFirstBlankLine, validateRequired } from './ui.ts';
|
|
11
7
|
import { UI } from '../ui/index.ts';
|
|
12
8
|
import { BadArgsError } from '../errors.ts';
|
|
13
9
|
import { link } from '../logging.ts';
|