instant-cli 1.0.22-branch-cli-codex-update.25352264641.1 → 1.0.22-branch-cli-codex-update.25352565722.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > instant-cli@1.0.22-branch-cli-codex-update.25352264641.1 build /home/runner/work/instant/instant/client/packages/cli
2
+ > instant-cli@1.0.22-branch-cli-codex-update.25352565722.1 build /home/runner/work/instant/instant/client/packages/cli
3
3
  > rm -rf dist; tsc -p tsconfig.build.json
4
4
 
@@ -3,12 +3,12 @@ import { BadArgsError } from "../../../errors.js";
3
3
  import { GlobalOpts } from "../../../context/globalOpts.js";
4
4
  import { optOrPrompt, optOrPromptBoolean, runUIEffect, validateRequired, } from "../../../lib/ui.js";
5
5
  import { addOAuthClient, findName, getClientNameAndProvider, getOrCreateProvider, GoogleAppTypeSchema, OAuthClient, } from "../../../lib/oauth.js";
6
- import { DEFAULT_OAUTH_CALLBACK_URL, GOOGLE_AUTHORIZATION_ENDPOINT, GOOGLE_DISCOVERY_ENDPOINT, GOOGLE_TOKEN_ENDPOINT, APPLE_AUTHORIZATION_ENDPOINT, APPLE_DISCOVERY_ENDPOINT, APPLE_TOKEN_ENDPOINT, LINKEDIN_AUTHORIZATION_ENDPOINT, LINKEDIN_DISCOVERY_ENDPOINT, LINKEDIN_TOKEN_ENDPOINT, } from '@instantdb/platform';
6
+ import { DEFAULT_OAUTH_CALLBACK_URL, GOOGLE_AUTHORIZATION_ENDPOINT, GOOGLE_DISCOVERY_ENDPOINT, GOOGLE_TOKEN_ENDPOINT, APPLE_AUTHORIZATION_ENDPOINT, APPLE_DISCOVERY_ENDPOINT, APPLE_TOKEN_ENDPOINT, clerkDomainFromPublishableKey, LINKEDIN_AUTHORIZATION_ENDPOINT, LINKEDIN_DISCOVERY_ENDPOINT, LINKEDIN_TOKEN_ENDPOINT, } from '@instantdb/platform';
7
7
  import { UI } from "../../../ui/index.js";
8
8
  import chalk from 'chalk';
9
9
  import boxen from 'boxen';
10
10
  import { link } from "../../../logging.js";
11
- import { appleKeyIdPrompt, applePrivateKeyFilePrompt, appleServicesIdPrompt, appleTeamIdPrompt, clerkPublishableKeyPrompt, clientIdPrompt, clientSecretPrompt, domainFromClerkKey, firebaseDiscoveryEndpoint, firebaseProjectIdPrompt, getFlag, hasAnyFlag, isTrueFlag, readPrivateKeyFile, redirectSetupMessages, redirectUriPrompt, validateFirebaseProjectId, } from "./shared.js";
11
+ import { appleKeyIdPrompt, applePrivateKeyFilePrompt, appleServicesIdPrompt, appleTeamIdPrompt, clerkPublishableKeyPrompt, clientIdPrompt, clientSecretPrompt, firebaseDiscoveryEndpoint, firebaseProjectIdPrompt, getFlag, hasAnyFlag, isTrueFlag, readPrivateKeyFile, redirectSetupMessages, redirectUriPrompt, validateFirebaseProjectId, } from "./shared.js";
12
12
  export const ClientTypeSchema = Schema.Literal('google', 'github', 'apple', 'linkedin', 'clerk', 'firebase');
13
13
  const googleConsoleUrl = 'https://console.developers.google.com/apis/credentials';
14
14
  const githubDeveloperUrl = 'https://github.com/settings/developers';
@@ -432,7 +432,7 @@ const handleClerkClient = Effect.fn(function* (opts) {
432
432
  message: 'Publishable key is required.',
433
433
  });
434
434
  }
435
- const domain = domainFromClerkKey(publishableKey);
435
+ const domain = clerkDomainFromPublishableKey(publishableKey);
436
436
  if (!domain) {
437
437
  return yield* BadArgsError.make({
438
438
  message: 'Invalid publishable key. Could not extract domain.',
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/auth/client/add.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Match, Option, Schema } from 'effect';\nimport type { authClientAddDef, OptsFromCommand } from '../../../index.ts';\nimport { BadArgsError } from '../../../errors.ts';\nimport { GlobalOpts } from '../../../context/globalOpts.ts';\nimport {\n optOrPrompt,\n optOrPromptBoolean,\n runUIEffect,\n validateRequired,\n} from '../../../lib/ui.ts';\nimport {\n addOAuthClient,\n findName,\n getClientNameAndProvider,\n getOrCreateProvider,\n GoogleAppTypeSchema,\n OAuthClient,\n} from '../../../lib/oauth.ts';\nimport {\n DEFAULT_OAUTH_CALLBACK_URL,\n GOOGLE_AUTHORIZATION_ENDPOINT,\n GOOGLE_DISCOVERY_ENDPOINT,\n GOOGLE_TOKEN_ENDPOINT,\n APPLE_AUTHORIZATION_ENDPOINT,\n APPLE_DISCOVERY_ENDPOINT,\n APPLE_TOKEN_ENDPOINT,\n LINKEDIN_AUTHORIZATION_ENDPOINT,\n LINKEDIN_DISCOVERY_ENDPOINT,\n LINKEDIN_TOKEN_ENDPOINT,\n} from '@instantdb/platform';\nimport { UI } from '../../../ui/index.ts';\nimport chalk from 'chalk';\nimport boxen from 'boxen';\nimport { link } from '../../../logging.ts';\nimport {\n appleKeyIdPrompt,\n applePrivateKeyFilePrompt,\n appleServicesIdPrompt,\n appleTeamIdPrompt,\n clerkPublishableKeyPrompt,\n clientIdPrompt,\n clientSecretPrompt,\n domainFromClerkKey,\n firebaseDiscoveryEndpoint,\n firebaseProjectIdPrompt,\n getFlag,\n hasAnyFlag,\n isTrueFlag,\n readPrivateKeyFile,\n redirectSetupMessages,\n redirectUriPrompt,\n validateFirebaseProjectId,\n} from './shared.ts';\n\nexport const ClientTypeSchema = Schema.Literal(\n 'google',\n 'github',\n 'apple',\n 'linkedin',\n 'clerk',\n 'firebase',\n);\n\nconst googleConsoleUrl =\n 'https://console.developers.google.com/apis/credentials';\nconst githubDeveloperUrl = 'https://github.com/settings/developers';\nconst linkedinDeveloperUrl = 'https://www.linkedin.com/developers/apps';\nconst optionalRedirectPrompt = redirectUriPrompt({\n heading: 'Custom redirect URI (optional):',\n});\n\nconst selectGoogleAppType = (value: unknown) =>\n Effect.gen(function* () {\n const { yes } = yield* GlobalOpts;\n\n return yield* Option.fromNullable(value).pipe(\n Effect.catchTag('NoSuchElementException', () => {\n if (yes) {\n return BadArgsError.make({\n message: `Missing required value for --app-type. Expected one of: ${GoogleAppTypeSchema.literals.join(', ')}`,\n });\n }\n\n return runUIEffect(\n new UI.Select({\n options: [\n {\n label:\n 'Web' + chalk.dim(' (Redirect Flows or Expo Auth Session)'),\n value: 'web',\n },\n { label: 'iOS', value: 'ios' },\n { label: 'Android', value: 'android' },\n { label: 'Google Button for Web', value: 'button-for-web' },\n ],\n promptText: 'Select a Google app type:',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n defaultValue: 'web',\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n }),\n Effect.andThen((raw) => Schema.decodeUnknown(GoogleAppTypeSchema)(raw)),\n Effect.catchTag('ParseError', () =>\n BadArgsError.make({\n message:\n 'Invalid app-type, must be one of: web, ios, android, button-for-web',\n }),\n ),\n );\n });\n\nconst selectGoogleCredentialMode = Effect.fn(function* () {\n return yield* runUIEffect(\n new UI.Select({\n options: [\n {\n label:\n 'Use dev credentials' +\n chalk.dim(' (works on localhost and Expo, no Google setup)'),\n value: 'dev' as const,\n },\n {\n label:\n 'Use my own credentials' +\n chalk.dim(' (client ID and secret from Google Console)'),\n value: 'custom' as const,\n },\n ],\n promptText: 'Select Google credential mode:',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n defaultValue: 'dev' as const,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n});\n\nconst resolveGoogleCredentialMode = Effect.fn(function* ({\n appType,\n opts,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n opts: Record<string, unknown>;\n}): Effect.fn.Return<'custom' | 'dev', BadArgsError, GlobalOpts> {\n const { yes } = yield* GlobalOpts;\n const devCredentialsFlag = isTrueFlag(getFlag(opts, 'dev-credentials'));\n const hasProvidedSomeCustomCredentials = hasAnyFlag(opts, [\n 'client-id',\n 'client-secret',\n 'custom-redirect-uri',\n ]);\n\n if (devCredentialsFlag && appType !== 'web') {\n return yield* BadArgsError.make({\n message:\n '--dev-credentials is only supported for --app-type web. Native Google clients need credentials from Google.',\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 (appType !== 'web') {\n return 'custom';\n }\n\n if (hasProvidedSomeCustomCredentials) {\n return 'custom';\n }\n\n if (devCredentialsFlag) {\n return 'dev';\n }\n\n if (yes) {\n return 'dev';\n }\n\n return yield* selectGoogleCredentialMode();\n});\n\nconst printGoogleDevCredentialsClient = Effect.fn(function* ({\n appType,\n client,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n client: typeof OAuthClient.Type;\n}) {\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client created: ${client.client_name}`,\n `App type: ${appType}`,\n `Credentials: Instant dev credentials`,\n `ID: ${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 ${client.client_name} --client-id <id> --client-secret <secret>`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst printGoogleCustomCredentialsClient = Effect.fn(function* ({\n appType,\n client,\n clientId,\n customRedirectUri,\n redirectUri,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n client: typeof OAuthClient.Type;\n clientId: string | undefined;\n customRedirectUri: string | undefined;\n redirectUri: string | undefined;\n}) {\n const redirectMessages: string[] = [];\n if (appType === 'web' && redirectUri) {\n redirectMessages.push(\n ...redirectSetupMessages({\n prompt: 'Add this redirect URI in Google Console',\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n }),\n );\n }\n\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client created: ${client.client_name}`,\n `App type: ${appType}`,\n `ID: ${client.id}`,\n `Google Client ID: ${client.client_id ?? clientId}`,\n ...redirectMessages,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleGoogleClient = Effect.fn(function* (opts: Record<string, unknown>) {\n // This one requires special logic for getting client name\n // because the suggested name includes the app type\n const appType = yield* selectGoogleAppType(opts['app-type']);\n const credentialMode = yield* resolveGoogleCredentialMode({\n appType,\n opts,\n });\n const useSharedCredentials = credentialMode === 'dev';\n\n const { auth, provider } = yield* getOrCreateProvider('google');\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(`google-${appType}`, usedClientNames);\n\n const clientName = yield* optOrPrompt(opts.name, {\n simpleName: '--name',\n required: true,\n skipIf: false,\n prompt: {\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 });\n\n if (usedClientNames.has(clientName || '')) {\n return yield* BadArgsError.make({\n message: `The unique name '${clientName}' is already in use.`,\n });\n }\n\n const clientId = yield* optOrPrompt(opts['client-id'], {\n simpleName: '--client-id',\n required: !useSharedCredentials,\n skipIf: useSharedCredentials,\n skipMessage:\n '--client-id is not compatible with --dev-credentials. Drop one or the other.',\n prompt: clientIdPrompt({ providerUrl: googleConsoleUrl }),\n });\n\n const usesCustomWebCredentials = !useSharedCredentials && appType === 'web';\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: usesCustomWebCredentials,\n skipIf: !usesCustomWebCredentials,\n simpleName: '--client-secret',\n skipMessage: useSharedCredentials\n ? '--client-secret is not compatible with --dev-credentials. Drop one or the other.'\n : undefined,\n prompt: clientSecretPrompt({ providerUrl: googleConsoleUrl }),\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n prompt: optionalRedirectPrompt,\n simpleName: '--custom-redirect-uri',\n skipIf: !usesCustomWebCredentials,\n skipMessage: useSharedCredentials\n ? '--custom-redirect-uri is not compatible with --dev-credentials.'\n : 'Provided custom redirect URI when not using web app type.',\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' }); // Should never reach this\n }\n const redirectUri = useSharedCredentials\n ? undefined\n : customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;\n\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId: useSharedCredentials ? undefined : clientId,\n clientSecret: useSharedCredentials ? undefined : clientSecret,\n authorizationEndpoint: GOOGLE_AUTHORIZATION_ENDPOINT,\n tokenEndpoint: GOOGLE_TOKEN_ENDPOINT,\n discoveryEndpoint: GOOGLE_DISCOVERY_ENDPOINT,\n redirectTo: redirectUri,\n meta: {\n appType,\n skipNonceChecks: true,\n },\n useSharedCredentials,\n });\n\n if (useSharedCredentials) {\n yield* printGoogleDevCredentialsClient({\n appType,\n client: response.client,\n });\n return;\n }\n\n yield* printGoogleCustomCredentialsClient({\n appType,\n client: response.client,\n clientId,\n customRedirectUri,\n redirectUri,\n });\n});\n\nconst handleGithubClient = Effect.fn(function* (opts: Record<string, unknown>) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'github',\n opts,\n );\n\n const clientId = yield* optOrPrompt(opts['client-id'], {\n simpleName: '--client-id',\n required: true,\n skipIf: false,\n prompt: clientIdPrompt({ providerUrl: githubDeveloperUrl }),\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: clientSecretPrompt({ providerUrl: githubDeveloperUrl }),\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: optionalRedirectPrompt,\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n\n const redirectUri = customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;\n\n // The backend infers GitHub's authorization/token endpoints from\n // meta.providerName === 'github', so we don't pass them here.\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId,\n clientSecret,\n redirectTo: redirectUri,\n meta: { providerName: 'github' },\n });\n\n const redirectMessages = redirectSetupMessages({\n prompt: 'Add this callback URL in your GitHub OAuth App settings',\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n });\n\n yield* Effect.log(\n boxen(\n [\n `GitHub OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `GitHub Client ID: ${response.client.client_id ?? clientId}`,\n ...redirectMessages,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleLinkedInClient = Effect.fn(function* (\n opts: Record<string, unknown>,\n) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'linkedin',\n opts,\n );\n\n const clientId = yield* optOrPrompt(opts['client-id'], {\n simpleName: '--client-id',\n required: true,\n skipIf: false,\n prompt: clientIdPrompt({ providerUrl: linkedinDeveloperUrl }),\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: clientSecretPrompt({ providerUrl: linkedinDeveloperUrl }),\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: optionalRedirectPrompt,\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n\n const redirectUri = customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;\n\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId,\n clientSecret,\n authorizationEndpoint: LINKEDIN_AUTHORIZATION_ENDPOINT,\n tokenEndpoint: LINKEDIN_TOKEN_ENDPOINT,\n discoveryEndpoint: LINKEDIN_DISCOVERY_ENDPOINT,\n redirectTo: redirectUri,\n });\n\n const redirectMessages = redirectSetupMessages({\n prompt: 'Add this redirect URI in your LinkedIn app settings',\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n });\n\n yield* Effect.log(\n boxen(\n [\n `LinkedIn OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `LinkedIn Client ID: ${response.client.client_id ?? clientId}`,\n ...redirectMessages,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleAppleClient = Effect.fn(function* (opts: Record<string, unknown>) {\n const { yes } = yield* GlobalOpts;\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'apple',\n opts,\n );\n\n const servicesId = yield* optOrPrompt(opts['services-id'], {\n simpleName: '--services-id',\n required: true,\n skipIf: false,\n prompt: appleServicesIdPrompt({}),\n });\n\n // If any web-flow flag is provided, enable web flow; otherwise ask\n // (non-interactively with --yes we default to native-only).\n const anyWebFlagProvided = Boolean(\n opts['team-id'] || opts['key-id'] || opts['private-key-file'],\n );\n\n const configureWeb = anyWebFlagProvided\n ? true\n : yes\n ? false\n : yield* optOrPromptBoolean(undefined, {\n simpleName: '--configure-web',\n required: false,\n skipIf: false,\n prompt: {\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: false,\n },\n });\n\n const skipWeb = !configureWeb;\n const webSkipMessage =\n 'requires configuring the web redirect flow (also provide --team-id, --key-id, and --private-key-file).';\n\n const teamId = yield* optOrPrompt(opts['team-id'], {\n simpleName: '--team-id',\n required: true,\n skipIf: skipWeb,\n skipMessage: `--team-id ${webSkipMessage}`,\n prompt: appleTeamIdPrompt({}),\n });\n\n const keyId = yield* optOrPrompt(opts['key-id'], {\n simpleName: '--key-id',\n required: true,\n skipIf: skipWeb,\n skipMessage: `--key-id ${webSkipMessage}`,\n prompt: appleKeyIdPrompt({}),\n });\n\n const privateKeyPath = yield* optOrPrompt(opts['private-key-file'], {\n simpleName: '--private-key-file',\n required: true,\n skipIf: skipWeb,\n skipMessage: `--private-key-file ${webSkipMessage}`,\n prompt: applePrivateKeyFilePrompt({}),\n });\n\n const privateKey = privateKeyPath\n ? yield* readPrivateKeyFile(privateKeyPath)\n : undefined;\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: skipWeb,\n skipMessage: `--custom-redirect-uri ${webSkipMessage}`,\n prompt: optionalRedirectPrompt,\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n\n const redirectUri = privateKey\n ? customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL\n : undefined;\n\n const meta: { teamId?: string; keyId?: string } = {};\n if (teamId !== undefined) meta.teamId = teamId;\n if (keyId !== undefined) meta.keyId = keyId;\n\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId: servicesId,\n clientSecret: privateKey,\n authorizationEndpoint: APPLE_AUTHORIZATION_ENDPOINT,\n tokenEndpoint: APPLE_TOKEN_ENDPOINT,\n discoveryEndpoint: APPLE_DISCOVERY_ENDPOINT,\n redirectTo: redirectUri,\n ...(Object.keys(meta).length > 0 ? { meta } : {}),\n });\n\n const summaryLines: string[] = [\n `Apple OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Services ID: ${response.client.client_id ?? servicesId}`,\n ];\n\n if (privateKey && redirectUri) {\n summaryLines.push(`Team ID: ${teamId}`);\n summaryLines.push(`Key ID: ${keyId}`);\n summaryLines.push(\n ...redirectSetupMessages({\n prompt: `Add this return URL under your Services ID on ${link('https://developer.apple.com', 'developer.apple.com')}`,\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n }),\n );\n }\n yield* Effect.log(\n boxen(summaryLines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst handleClerkClient = Effect.fn(function* (opts: Record<string, unknown>) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'clerk',\n opts,\n );\n\n const publishableKey = yield* optOrPrompt(opts['publishable-key'], {\n simpleName: '--publishable-key',\n required: true,\n skipIf: false,\n prompt: clerkPublishableKeyPrompt({}),\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n if (!publishableKey) {\n return yield* BadArgsError.make({\n message: 'Publishable key is required.',\n });\n }\n\n const domain = domainFromClerkKey(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* addOAuthClient({\n providerId: provider.id,\n clientName,\n discoveryEndpoint: `https://${domain}/.well-known/openid-configuration`,\n meta: { clerkPublishableKey: publishableKey },\n });\n\n const clerkDomain = response.client.discovery_endpoint?.replace(\n '/.well-known/openid-configuration',\n '',\n );\n\n yield* Effect.log(\n boxen(\n [\n `Clerk OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Clerk Publishable Key: ${response.client.meta?.clerkPublishableKey}`,\n `Clerk Domain: ${clerkDomain}`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n\n yield* Effect.log(\n '\\nNavigate to your Clerk dashboard. On the Sessions page, click the Edit button in the Customize session token section.\\nEnsure your Claims field has the email claim:\\n' +\n boxen(\n `{\n \"email\": \"{{user.primary_email_address}}\",\n \"email_verified\": \"{{user.email_verified}}\"\n}`,\n { borderStyle: 'none' },\n ),\n );\n});\n\nconst handleFirebaseClient = Effect.fn(function* (\n opts: OptsFromCommand<typeof authClientAddDef> & Record<string, unknown>,\n) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'firebase',\n opts,\n );\n\n const projectId = yield* optOrPrompt(opts['project-id'], {\n simpleName: '--project-id',\n required: true,\n skipIf: false,\n prompt: firebaseProjectIdPrompt({}),\n });\n // typeguard\n if (!clientName || !projectId) {\n return yield* BadArgsError.make({\n message: 'Missing required arguments',\n });\n }\n const validationError = validateFirebaseProjectId(projectId);\n if (validationError) {\n return yield* BadArgsError.make({ message: validationError });\n }\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n discoveryEndpoint: firebaseDiscoveryEndpoint(projectId),\n });\n\n yield* Effect.log(\n boxen(\n [\n `Firebase OAuth client created: ${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 authClientAddCmd = Effect.fn(\n function* (\n opts: OptsFromCommand<typeof authClientAddDef> & Record<string, unknown>,\n ) {\n const { yes } = yield* GlobalOpts;\n if (!opts.type && yes) {\n return yield* BadArgsError.make({\n message: `Missing required value for --type. Expected one of: ${ClientTypeSchema.literals.join(', ')}`,\n });\n }\n const clientType = yield* Option.fromNullable(opts.type).pipe(\n Effect.catchTag('NoSuchElementException', () =>\n runUIEffect(\n new UI.Select({\n options: [\n { label: 'Google', value: 'google' },\n { label: 'GitHub', value: 'github' },\n { label: 'Apple', value: 'apple' },\n { label: 'LinkedIn', value: 'linkedin' },\n { label: 'Clerk', value: 'clerk' },\n { label: 'Firebase', value: 'firebase' },\n ],\n promptText: 'Select a client type:',\n modifyOutput: UI.modifiers.piped([UI.modifiers.dimOnComplete]),\n }),\n ),\n ),\n Effect.andThen((s) => Schema.decodeUnknown(ClientTypeSchema)(s)),\n Effect.catchTag('ParseError', () =>\n BadArgsError.make({\n message: `Invalid client type, must be one of: ${ClientTypeSchema.literals.join(', ')}`,\n }),\n ),\n );\n\n yield* Match.value(clientType).pipe(\n Match.withReturnType<Effect.Effect<void, any, any>>(),\n Match.when('google', () => handleGoogleClient(opts)),\n Match.when('github', () => handleGithubClient(opts)),\n Match.when('apple', () => handleAppleClient(opts)),\n Match.when('linkedin', () => handleLinkedInClient(opts)),\n Match.when('clerk', () => handleClerkClient(opts)),\n Match.when('firebase', () => handleFirebaseClient(opts)),\n Match.exhaustive,\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 add --help` for the list of available arguments',\n ),\n );\n }),\n ),\n);\n"]}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/auth/client/add.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Match, Option, Schema } from 'effect';\nimport type { authClientAddDef, OptsFromCommand } from '../../../index.ts';\nimport { BadArgsError } from '../../../errors.ts';\nimport { GlobalOpts } from '../../../context/globalOpts.ts';\nimport {\n optOrPrompt,\n optOrPromptBoolean,\n runUIEffect,\n validateRequired,\n} from '../../../lib/ui.ts';\nimport {\n addOAuthClient,\n findName,\n getClientNameAndProvider,\n getOrCreateProvider,\n GoogleAppTypeSchema,\n OAuthClient,\n} from '../../../lib/oauth.ts';\nimport {\n DEFAULT_OAUTH_CALLBACK_URL,\n GOOGLE_AUTHORIZATION_ENDPOINT,\n GOOGLE_DISCOVERY_ENDPOINT,\n GOOGLE_TOKEN_ENDPOINT,\n APPLE_AUTHORIZATION_ENDPOINT,\n APPLE_DISCOVERY_ENDPOINT,\n APPLE_TOKEN_ENDPOINT,\n clerkDomainFromPublishableKey,\n LINKEDIN_AUTHORIZATION_ENDPOINT,\n LINKEDIN_DISCOVERY_ENDPOINT,\n LINKEDIN_TOKEN_ENDPOINT,\n} from '@instantdb/platform';\nimport { UI } from '../../../ui/index.ts';\nimport chalk from 'chalk';\nimport boxen from 'boxen';\nimport { link } from '../../../logging.ts';\nimport {\n appleKeyIdPrompt,\n applePrivateKeyFilePrompt,\n appleServicesIdPrompt,\n appleTeamIdPrompt,\n clerkPublishableKeyPrompt,\n clientIdPrompt,\n clientSecretPrompt,\n firebaseDiscoveryEndpoint,\n firebaseProjectIdPrompt,\n getFlag,\n hasAnyFlag,\n isTrueFlag,\n readPrivateKeyFile,\n redirectSetupMessages,\n redirectUriPrompt,\n validateFirebaseProjectId,\n} from './shared.ts';\n\nexport const ClientTypeSchema = Schema.Literal(\n 'google',\n 'github',\n 'apple',\n 'linkedin',\n 'clerk',\n 'firebase',\n);\n\nconst googleConsoleUrl =\n 'https://console.developers.google.com/apis/credentials';\nconst githubDeveloperUrl = 'https://github.com/settings/developers';\nconst linkedinDeveloperUrl = 'https://www.linkedin.com/developers/apps';\nconst optionalRedirectPrompt = redirectUriPrompt({\n heading: 'Custom redirect URI (optional):',\n});\n\nconst selectGoogleAppType = (value: unknown) =>\n Effect.gen(function* () {\n const { yes } = yield* GlobalOpts;\n\n return yield* Option.fromNullable(value).pipe(\n Effect.catchTag('NoSuchElementException', () => {\n if (yes) {\n return BadArgsError.make({\n message: `Missing required value for --app-type. Expected one of: ${GoogleAppTypeSchema.literals.join(', ')}`,\n });\n }\n\n return runUIEffect(\n new UI.Select({\n options: [\n {\n label:\n 'Web' + chalk.dim(' (Redirect Flows or Expo Auth Session)'),\n value: 'web',\n },\n { label: 'iOS', value: 'ios' },\n { label: 'Android', value: 'android' },\n { label: 'Google Button for Web', value: 'button-for-web' },\n ],\n promptText: 'Select a Google app type:',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n defaultValue: 'web',\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n }),\n Effect.andThen((raw) => Schema.decodeUnknown(GoogleAppTypeSchema)(raw)),\n Effect.catchTag('ParseError', () =>\n BadArgsError.make({\n message:\n 'Invalid app-type, must be one of: web, ios, android, button-for-web',\n }),\n ),\n );\n });\n\nconst selectGoogleCredentialMode = Effect.fn(function* () {\n return yield* runUIEffect(\n new UI.Select({\n options: [\n {\n label:\n 'Use dev credentials' +\n chalk.dim(' (works on localhost and Expo, no Google setup)'),\n value: 'dev' as const,\n },\n {\n label:\n 'Use my own credentials' +\n chalk.dim(' (client ID and secret from Google Console)'),\n value: 'custom' as const,\n },\n ],\n promptText: 'Select Google credential mode:',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n defaultValue: 'dev' as const,\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({ message: `UI error: ${e.message}` }),\n ),\n );\n});\n\nconst resolveGoogleCredentialMode = Effect.fn(function* ({\n appType,\n opts,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n opts: Record<string, unknown>;\n}): Effect.fn.Return<'custom' | 'dev', BadArgsError, GlobalOpts> {\n const { yes } = yield* GlobalOpts;\n const devCredentialsFlag = isTrueFlag(getFlag(opts, 'dev-credentials'));\n const hasProvidedSomeCustomCredentials = hasAnyFlag(opts, [\n 'client-id',\n 'client-secret',\n 'custom-redirect-uri',\n ]);\n\n if (devCredentialsFlag && appType !== 'web') {\n return yield* BadArgsError.make({\n message:\n '--dev-credentials is only supported for --app-type web. Native Google clients need credentials from Google.',\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 (appType !== 'web') {\n return 'custom';\n }\n\n if (hasProvidedSomeCustomCredentials) {\n return 'custom';\n }\n\n if (devCredentialsFlag) {\n return 'dev';\n }\n\n if (yes) {\n return 'dev';\n }\n\n return yield* selectGoogleCredentialMode();\n});\n\nconst printGoogleDevCredentialsClient = Effect.fn(function* ({\n appType,\n client,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n client: typeof OAuthClient.Type;\n}) {\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client created: ${client.client_name}`,\n `App type: ${appType}`,\n `Credentials: Instant dev credentials`,\n `ID: ${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 ${client.client_name} --client-id <id> --client-secret <secret>`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst printGoogleCustomCredentialsClient = Effect.fn(function* ({\n appType,\n client,\n clientId,\n customRedirectUri,\n redirectUri,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n client: typeof OAuthClient.Type;\n clientId: string | undefined;\n customRedirectUri: string | undefined;\n redirectUri: string | undefined;\n}) {\n const redirectMessages: string[] = [];\n if (appType === 'web' && redirectUri) {\n redirectMessages.push(\n ...redirectSetupMessages({\n prompt: 'Add this redirect URI in Google Console',\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n }),\n );\n }\n\n yield* Effect.log(\n boxen(\n [\n `Google OAuth client created: ${client.client_name}`,\n `App type: ${appType}`,\n `ID: ${client.id}`,\n `Google Client ID: ${client.client_id ?? clientId}`,\n ...redirectMessages,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleGoogleClient = Effect.fn(function* (opts: Record<string, unknown>) {\n // This one requires special logic for getting client name\n // because the suggested name includes the app type\n const appType = yield* selectGoogleAppType(opts['app-type']);\n const credentialMode = yield* resolveGoogleCredentialMode({\n appType,\n opts,\n });\n const useSharedCredentials = credentialMode === 'dev';\n\n const { auth, provider } = yield* getOrCreateProvider('google');\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(`google-${appType}`, usedClientNames);\n\n const clientName = yield* optOrPrompt(opts.name, {\n simpleName: '--name',\n required: true,\n skipIf: false,\n prompt: {\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 });\n\n if (usedClientNames.has(clientName || '')) {\n return yield* BadArgsError.make({\n message: `The unique name '${clientName}' is already in use.`,\n });\n }\n\n const clientId = yield* optOrPrompt(opts['client-id'], {\n simpleName: '--client-id',\n required: !useSharedCredentials,\n skipIf: useSharedCredentials,\n skipMessage:\n '--client-id is not compatible with --dev-credentials. Drop one or the other.',\n prompt: clientIdPrompt({ providerUrl: googleConsoleUrl }),\n });\n\n const usesCustomWebCredentials = !useSharedCredentials && appType === 'web';\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: usesCustomWebCredentials,\n skipIf: !usesCustomWebCredentials,\n simpleName: '--client-secret',\n skipMessage: useSharedCredentials\n ? '--client-secret is not compatible with --dev-credentials. Drop one or the other.'\n : undefined,\n prompt: clientSecretPrompt({ providerUrl: googleConsoleUrl }),\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n prompt: optionalRedirectPrompt,\n simpleName: '--custom-redirect-uri',\n skipIf: !usesCustomWebCredentials,\n skipMessage: useSharedCredentials\n ? '--custom-redirect-uri is not compatible with --dev-credentials.'\n : 'Provided custom redirect URI when not using web app type.',\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' }); // Should never reach this\n }\n const redirectUri = useSharedCredentials\n ? undefined\n : customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;\n\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId: useSharedCredentials ? undefined : clientId,\n clientSecret: useSharedCredentials ? undefined : clientSecret,\n authorizationEndpoint: GOOGLE_AUTHORIZATION_ENDPOINT,\n tokenEndpoint: GOOGLE_TOKEN_ENDPOINT,\n discoveryEndpoint: GOOGLE_DISCOVERY_ENDPOINT,\n redirectTo: redirectUri,\n meta: {\n appType,\n skipNonceChecks: true,\n },\n useSharedCredentials,\n });\n\n if (useSharedCredentials) {\n yield* printGoogleDevCredentialsClient({\n appType,\n client: response.client,\n });\n return;\n }\n\n yield* printGoogleCustomCredentialsClient({\n appType,\n client: response.client,\n clientId,\n customRedirectUri,\n redirectUri,\n });\n});\n\nconst handleGithubClient = Effect.fn(function* (opts: Record<string, unknown>) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'github',\n opts,\n );\n\n const clientId = yield* optOrPrompt(opts['client-id'], {\n simpleName: '--client-id',\n required: true,\n skipIf: false,\n prompt: clientIdPrompt({ providerUrl: githubDeveloperUrl }),\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: clientSecretPrompt({ providerUrl: githubDeveloperUrl }),\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: optionalRedirectPrompt,\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n\n const redirectUri = customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;\n\n // The backend infers GitHub's authorization/token endpoints from\n // meta.providerName === 'github', so we don't pass them here.\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId,\n clientSecret,\n redirectTo: redirectUri,\n meta: { providerName: 'github' },\n });\n\n const redirectMessages = redirectSetupMessages({\n prompt: 'Add this callback URL in your GitHub OAuth App settings',\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n });\n\n yield* Effect.log(\n boxen(\n [\n `GitHub OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `GitHub Client ID: ${response.client.client_id ?? clientId}`,\n ...redirectMessages,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleLinkedInClient = Effect.fn(function* (\n opts: Record<string, unknown>,\n) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'linkedin',\n opts,\n );\n\n const clientId = yield* optOrPrompt(opts['client-id'], {\n simpleName: '--client-id',\n required: true,\n skipIf: false,\n prompt: clientIdPrompt({ providerUrl: linkedinDeveloperUrl }),\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: clientSecretPrompt({ providerUrl: linkedinDeveloperUrl }),\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: optionalRedirectPrompt,\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n\n const redirectUri = customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;\n\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId,\n clientSecret,\n authorizationEndpoint: LINKEDIN_AUTHORIZATION_ENDPOINT,\n tokenEndpoint: LINKEDIN_TOKEN_ENDPOINT,\n discoveryEndpoint: LINKEDIN_DISCOVERY_ENDPOINT,\n redirectTo: redirectUri,\n });\n\n const redirectMessages = redirectSetupMessages({\n prompt: 'Add this redirect URI in your LinkedIn app settings',\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n });\n\n yield* Effect.log(\n boxen(\n [\n `LinkedIn OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `LinkedIn Client ID: ${response.client.client_id ?? clientId}`,\n ...redirectMessages,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n});\n\nconst handleAppleClient = Effect.fn(function* (opts: Record<string, unknown>) {\n const { yes } = yield* GlobalOpts;\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'apple',\n opts,\n );\n\n const servicesId = yield* optOrPrompt(opts['services-id'], {\n simpleName: '--services-id',\n required: true,\n skipIf: false,\n prompt: appleServicesIdPrompt({}),\n });\n\n // If any web-flow flag is provided, enable web flow; otherwise ask\n // (non-interactively with --yes we default to native-only).\n const anyWebFlagProvided = Boolean(\n opts['team-id'] || opts['key-id'] || opts['private-key-file'],\n );\n\n const configureWeb = anyWebFlagProvided\n ? true\n : yes\n ? false\n : yield* optOrPromptBoolean(undefined, {\n simpleName: '--configure-web',\n required: false,\n skipIf: false,\n prompt: {\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: false,\n },\n });\n\n const skipWeb = !configureWeb;\n const webSkipMessage =\n 'requires configuring the web redirect flow (also provide --team-id, --key-id, and --private-key-file).';\n\n const teamId = yield* optOrPrompt(opts['team-id'], {\n simpleName: '--team-id',\n required: true,\n skipIf: skipWeb,\n skipMessage: `--team-id ${webSkipMessage}`,\n prompt: appleTeamIdPrompt({}),\n });\n\n const keyId = yield* optOrPrompt(opts['key-id'], {\n simpleName: '--key-id',\n required: true,\n skipIf: skipWeb,\n skipMessage: `--key-id ${webSkipMessage}`,\n prompt: appleKeyIdPrompt({}),\n });\n\n const privateKeyPath = yield* optOrPrompt(opts['private-key-file'], {\n simpleName: '--private-key-file',\n required: true,\n skipIf: skipWeb,\n skipMessage: `--private-key-file ${webSkipMessage}`,\n prompt: applePrivateKeyFilePrompt({}),\n });\n\n const privateKey = privateKeyPath\n ? yield* readPrivateKeyFile(privateKeyPath)\n : undefined;\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: skipWeb,\n skipMessage: `--custom-redirect-uri ${webSkipMessage}`,\n prompt: optionalRedirectPrompt,\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n\n const redirectUri = privateKey\n ? customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL\n : undefined;\n\n const meta: { teamId?: string; keyId?: string } = {};\n if (teamId !== undefined) meta.teamId = teamId;\n if (keyId !== undefined) meta.keyId = keyId;\n\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n clientId: servicesId,\n clientSecret: privateKey,\n authorizationEndpoint: APPLE_AUTHORIZATION_ENDPOINT,\n tokenEndpoint: APPLE_TOKEN_ENDPOINT,\n discoveryEndpoint: APPLE_DISCOVERY_ENDPOINT,\n redirectTo: redirectUri,\n ...(Object.keys(meta).length > 0 ? { meta } : {}),\n });\n\n const summaryLines: string[] = [\n `Apple OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Services ID: ${response.client.client_id ?? servicesId}`,\n ];\n\n if (privateKey && redirectUri) {\n summaryLines.push(`Team ID: ${teamId}`);\n summaryLines.push(`Key ID: ${keyId}`);\n summaryLines.push(\n ...redirectSetupMessages({\n prompt: `Add this return URL under your Services ID on ${link('https://developer.apple.com', 'developer.apple.com')}`,\n redirectUri,\n showCustomRedirectInstructions: Boolean(customRedirectUri),\n }),\n );\n }\n yield* Effect.log(\n boxen(summaryLines.join('\\n'), {\n dimBorder: true,\n padding: { right: 1, left: 1 },\n }),\n );\n});\n\nconst handleClerkClient = Effect.fn(function* (opts: Record<string, unknown>) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'clerk',\n opts,\n );\n\n const publishableKey = yield* optOrPrompt(opts['publishable-key'], {\n simpleName: '--publishable-key',\n required: true,\n skipIf: false,\n prompt: clerkPublishableKeyPrompt({}),\n });\n\n if (!clientName) {\n return yield* BadArgsError.make({ message: 'Client name is required.' });\n }\n if (!publishableKey) {\n return yield* BadArgsError.make({\n message: 'Publishable key is required.',\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* addOAuthClient({\n providerId: provider.id,\n clientName,\n discoveryEndpoint: `https://${domain}/.well-known/openid-configuration`,\n meta: { clerkPublishableKey: publishableKey },\n });\n\n const clerkDomain = response.client.discovery_endpoint?.replace(\n '/.well-known/openid-configuration',\n '',\n );\n\n yield* Effect.log(\n boxen(\n [\n `Clerk OAuth client created: ${response.client.client_name}`,\n `ID: ${response.client.id}`,\n `Clerk Publishable Key: ${response.client.meta?.clerkPublishableKey}`,\n `Clerk Domain: ${clerkDomain}`,\n ].join('\\n'),\n { dimBorder: true, padding: { right: 1, left: 1 } },\n ),\n );\n\n yield* Effect.log(\n '\\nNavigate to your Clerk dashboard. On the Sessions page, click the Edit button in the Customize session token section.\\nEnsure your Claims field has the email claim:\\n' +\n boxen(\n `{\n \"email\": \"{{user.primary_email_address}}\",\n \"email_verified\": \"{{user.email_verified}}\"\n}`,\n { borderStyle: 'none' },\n ),\n );\n});\n\nconst handleFirebaseClient = Effect.fn(function* (\n opts: OptsFromCommand<typeof authClientAddDef> & Record<string, unknown>,\n) {\n const { clientName, provider } = yield* getClientNameAndProvider(\n 'firebase',\n opts,\n );\n\n const projectId = yield* optOrPrompt(opts['project-id'], {\n simpleName: '--project-id',\n required: true,\n skipIf: false,\n prompt: firebaseProjectIdPrompt({}),\n });\n // typeguard\n if (!clientName || !projectId) {\n return yield* BadArgsError.make({\n message: 'Missing required arguments',\n });\n }\n const validationError = validateFirebaseProjectId(projectId);\n if (validationError) {\n return yield* BadArgsError.make({ message: validationError });\n }\n const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n discoveryEndpoint: firebaseDiscoveryEndpoint(projectId),\n });\n\n yield* Effect.log(\n boxen(\n [\n `Firebase OAuth client created: ${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 authClientAddCmd = Effect.fn(\n function* (\n opts: OptsFromCommand<typeof authClientAddDef> & Record<string, unknown>,\n ) {\n const { yes } = yield* GlobalOpts;\n if (!opts.type && yes) {\n return yield* BadArgsError.make({\n message: `Missing required value for --type. Expected one of: ${ClientTypeSchema.literals.join(', ')}`,\n });\n }\n const clientType = yield* Option.fromNullable(opts.type).pipe(\n Effect.catchTag('NoSuchElementException', () =>\n runUIEffect(\n new UI.Select({\n options: [\n { label: 'Google', value: 'google' },\n { label: 'GitHub', value: 'github' },\n { label: 'Apple', value: 'apple' },\n { label: 'LinkedIn', value: 'linkedin' },\n { label: 'Clerk', value: 'clerk' },\n { label: 'Firebase', value: 'firebase' },\n ],\n promptText: 'Select a client type:',\n modifyOutput: UI.modifiers.piped([UI.modifiers.dimOnComplete]),\n }),\n ),\n ),\n Effect.andThen((s) => Schema.decodeUnknown(ClientTypeSchema)(s)),\n Effect.catchTag('ParseError', () =>\n BadArgsError.make({\n message: `Invalid client type, must be one of: ${ClientTypeSchema.literals.join(', ')}`,\n }),\n ),\n );\n\n yield* Match.value(clientType).pipe(\n Match.withReturnType<Effect.Effect<void, any, any>>(),\n Match.when('google', () => handleGoogleClient(opts)),\n Match.when('github', () => handleGithubClient(opts)),\n Match.when('apple', () => handleAppleClient(opts)),\n Match.when('linkedin', () => handleLinkedInClient(opts)),\n Match.when('clerk', () => handleClerkClient(opts)),\n Match.when('firebase', () => handleFirebaseClient(opts)),\n Match.exhaustive,\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 add --help` for the list of available arguments',\n ),\n );\n }),\n ),\n);\n"]}
@@ -1,6 +1,5 @@
1
1
  import { FileSystem } from '@effect/platform';
2
2
  import { Effect } from 'effect';
3
- import { clerkDomainFromPublishableKey } from '@instantdb/platform';
4
3
  import { BadArgsError } from '../../../errors.ts';
5
4
  type EmptyPromptArgs = Record<string, never>;
6
5
  export declare const getFlag: (opts: Record<string, unknown>, flag: string) => unknown;
@@ -67,7 +66,6 @@ export declare const firebaseProjectIdPrompt: (_opts: EmptyPromptArgs) => {
67
66
  modifyOutput: import("../../../ui/lib.ts").ModifyOutputFn;
68
67
  };
69
68
  export declare const readPrivateKeyFile: (path: string) => Effect.Effect<string, BadArgsError, FileSystem.FileSystem>;
70
- export declare const domainFromClerkKey: typeof clerkDomainFromPublishableKey;
71
69
  export declare function validateFirebaseProjectId(value: string): "Project ID is required" | "Invalid Firebase project ID. It must be 6-30 characters, start with a lowercase letter, contain only lowercase letters, digits, and hyphens, and not end with a hyphen." | undefined;
72
70
  export declare function firebaseDiscoveryEndpoint(projectId: string): string;
73
71
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,6BAA6B,EAE9B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE7C,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,YACvD,CAAC;AAEb,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,YACrD,CAAC;AAEf,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,MAAM,EAAE,YAC9B,CAAC;AAE5C,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,2BACL,CAAC;AAErC,eAAO,MAAM,aAAa,GAAI,MAAM,OAAO,EAAE,KAAK,MAAM,uBAIvD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,iBAAiB;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE;;;;CAOrE,CAAC;AAEH,eAAO,MAAM,kBAAkB,GAAI,kBAEhC;IACD,WAAW,EAAE,MAAM,CAAC;CACrB;;;;;CAQC,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,aAAa;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;;;;CAiBhE,CAAC;AAEH,eAAO,MAAM,qBAAqB,GAAI,0DAInC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,aAcA,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,OAAO,eAAe;;;;CAO1D,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,OAAO,eAAe;;;;CAOtD,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAAI,OAAO,eAAe;;;;CAOrD,CAAC;AAEH,eAAO,MAAM,yBAAyB,GAAI,OAAO,eAAe;;;;CAO9D,CAAC;AAEH,eAAO,MAAM,yBAAyB,GAAI,OAAO,eAAe;;;oBAG9C,MAAM;;CAUtB,CAAC;AAEH,eAAO,MAAM,uBAAuB,GAAI,OAAO,eAAe;;;;CAO5D,CAAC;AAEH,eAAO,MAAM,kBAAkB,8EAuB7B,CAAC;AAEH,eAAO,MAAM,kBAAkB,sCAAgC,CAAC;AAEhE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,oNAMtD;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,UAE1D"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE7C,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,YACvD,CAAC;AAEb,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,YACrD,CAAC;AAEf,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,MAAM,EAAE,YAC9B,CAAC;AAE5C,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,2BACL,CAAC;AAErC,eAAO,MAAM,aAAa,GAAI,MAAM,OAAO,EAAE,KAAK,MAAM,uBAIvD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,iBAAiB;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE;;;;CAOrE,CAAC;AAEH,eAAO,MAAM,kBAAkB,GAAI,kBAEhC;IACD,WAAW,EAAE,MAAM,CAAC;CACrB;;;;;CAQC,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,aAAa;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;;;;CAiBhE,CAAC;AAEH,eAAO,MAAM,qBAAqB,GAAI,0DAInC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,aAcA,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,OAAO,eAAe;;;;CAO1D,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAAI,OAAO,eAAe;;;;CAOtD,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAAI,OAAO,eAAe;;;;CAOrD,CAAC;AAEH,eAAO,MAAM,yBAAyB,GAAI,OAAO,eAAe;;;;CAO9D,CAAC;AAEH,eAAO,MAAM,yBAAyB,GAAI,OAAO,eAAe;;;oBAG9C,MAAM;;CAUtB,CAAC;AAEH,eAAO,MAAM,uBAAuB,GAAI,OAAO,eAAe;;;;CAO5D,CAAC;AAEH,eAAO,MAAM,kBAAkB,8EAuB7B,CAAC;AAEH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,oNAMtD;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,UAE1D"}
@@ -1,6 +1,6 @@
1
1
  import { FileSystem } from '@effect/platform';
2
2
  import { Effect } from 'effect';
3
- import { clerkDomainFromPublishableKey, DEFAULT_OAUTH_CALLBACK_URL, } from '@instantdb/platform';
3
+ import { DEFAULT_OAUTH_CALLBACK_URL } from '@instantdb/platform';
4
4
  import chalk from 'chalk';
5
5
  import { BadArgsError } from "../../../errors.js";
6
6
  import { link } from "../../../logging.js";
@@ -127,7 +127,6 @@ export const readPrivateKeyFile = Effect.fn('readPrivateKeyFile')(function* (pat
127
127
  }
128
128
  return trimmed;
129
129
  });
130
- export const domainFromClerkKey = clerkDomainFromPublishableKey;
131
130
  export function validateFirebaseProjectId(value) {
132
131
  const projectIdRegex = /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/;
133
132
  if (!value)
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/commands/auth/client/shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileSystem } from '@effect/platform';\nimport { Effect } from 'effect';\nimport {\n clerkDomainFromPublishableKey,\n DEFAULT_OAUTH_CALLBACK_URL,\n} from '@instantdb/platform';\nimport chalk from 'chalk';\nimport { BadArgsError } from '../../../errors.ts';\nimport { link } from '../../../logging.ts';\nimport { stripFirstBlankLine, validateRequired } from '../../../lib/ui.ts';\nimport { UI } from '../../../ui/index.ts';\n\ntype EmptyPromptArgs = Record<string, never>;\n\nexport const getFlag = (opts: Record<string, unknown>, flag: string) =>\n opts[flag];\n\nexport const hasFlag = (opts: Record<string, unknown>, flag: string) =>\n flag in opts;\n\nexport const hasAnyFlag = (opts: Record<string, unknown>, flags: string[]) =>\n flags.some((flag) => hasFlag(opts, flag));\n\nexport const isTrueFlag = (value: unknown) =>\n value === true || value === 'true';\n\nexport const getMetaString = (meta: unknown, key: string) => {\n if (!meta || typeof meta !== 'object') return undefined;\n const value = (meta as Record<string, unknown>)[key];\n return typeof value === 'string' ? value : undefined;\n};\n\nexport const clientIdPrompt = ({ providerUrl }: { providerUrl: string }) => ({\n prompt: `Client ID: ${chalk.dim(`(from ${link(providerUrl)})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const clientSecretPrompt = ({\n providerUrl,\n}: {\n providerUrl: string;\n}) => ({\n prompt: `Client Secret: ${chalk.dim(`(from ${link(providerUrl)})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const redirectUriPrompt = ({ heading }: { heading: string }) => ({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\n${heading}\n${chalk.dim('With a custom redirect URI, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URI must forward to ${DEFAULT_OAUTH_CALLBACK_URL} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\n${heading}\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const redirectSetupMessages = ({\n prompt,\n redirectUri,\n showCustomRedirectInstructions,\n}: {\n prompt: string;\n redirectUri: string;\n showCustomRedirectInstructions?: boolean;\n}) => {\n const messages = ['', chalk.bold(`${prompt}:`), chalk.bold(redirectUri)];\n\n if (showCustomRedirectInstructions) {\n messages.push(\n '',\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n messages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\n );\n }\n\n return messages;\n};\n\nexport const appleServicesIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Services ID ${chalk.dim(`(from ${link('https://developer.apple.com/account/resources/identifiers/list/serviceId')})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const appleTeamIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Team ID ${chalk.dim(`(from ${link('https://developer.apple.com/account#MembershipDetailsCard')})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const appleKeyIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Key ID ${chalk.dim(`(from ${link('https://developer.apple.com/account/resources/authkeys/list')})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const applePrivateKeyFilePrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Path to .p8 private key file ${chalk.dim('(downloaded from Apple)')}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const clerkPublishableKeyPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Clerk publishable key ${chalk.dim(`(from ${link('https://dashboard.clerk.com/last-active?path=api-keys')})`)}`,\n placeholder: 'pk_********************************************************',\n validate: (val: string) => {\n if (!val) return 'Publishable key is required';\n if (!val.startsWith('pk_')) {\n return 'Invalid publishable key. It should start with \"pk_\".';\n }\n },\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const firebaseProjectIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Firebase project ID: (From Project Settings page on ${link('https://console.firebase.google.com/')})`,\n validate: validateFirebaseProjectId,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const readPrivateKeyFile = Effect.fn('readPrivateKeyFile')(function* (\n path: string,\n) {\n const fs = yield* FileSystem.FileSystem;\n // Strip shell escapes so paths like \"file\\ (2).p8\" resolve on POSIX.\n const normalizedPath =\n process.platform === 'win32' ? path : path.replace(/\\\\(.)/g, '$1');\n const contents = yield* fs.readFileString(normalizedPath, 'utf8').pipe(\n Effect.mapError(\n (e) =>\n new BadArgsError({\n message: `Could not read private key file at ${normalizedPath}: ${e.message}`,\n }),\n ),\n );\n\n const trimmed = contents.trim();\n if (!trimmed) {\n return yield* BadArgsError.make({\n message: `Private key file at ${normalizedPath} is empty.`,\n });\n }\n return trimmed;\n});\n\nexport const domainFromClerkKey = clerkDomainFromPublishableKey;\n\nexport function validateFirebaseProjectId(value: string) {\n const projectIdRegex = /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/;\n if (!value) return 'Project ID is required';\n if (!projectIdRegex.test(value)) {\n return 'Invalid Firebase project ID. It must be 6-30 characters, start with a lowercase letter, contain only lowercase letters, digits, and hyphens, and not end with a hyphen.';\n }\n}\n\nexport function firebaseDiscoveryEndpoint(projectId: string) {\n return `https://securetoken.google.com/${encodeURIComponent(projectId)}/.well-known/openid-configuration`;\n}\n"]}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/commands/auth/client/shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileSystem } from '@effect/platform';\nimport { Effect } from 'effect';\nimport { DEFAULT_OAUTH_CALLBACK_URL } from '@instantdb/platform';\nimport chalk from 'chalk';\nimport { BadArgsError } from '../../../errors.ts';\nimport { link } from '../../../logging.ts';\nimport { stripFirstBlankLine, validateRequired } from '../../../lib/ui.ts';\nimport { UI } from '../../../ui/index.ts';\n\ntype EmptyPromptArgs = Record<string, never>;\n\nexport const getFlag = (opts: Record<string, unknown>, flag: string) =>\n opts[flag];\n\nexport const hasFlag = (opts: Record<string, unknown>, flag: string) =>\n flag in opts;\n\nexport const hasAnyFlag = (opts: Record<string, unknown>, flags: string[]) =>\n flags.some((flag) => hasFlag(opts, flag));\n\nexport const isTrueFlag = (value: unknown) =>\n value === true || value === 'true';\n\nexport const getMetaString = (meta: unknown, key: string) => {\n if (!meta || typeof meta !== 'object') return undefined;\n const value = (meta as Record<string, unknown>)[key];\n return typeof value === 'string' ? value : undefined;\n};\n\nexport const clientIdPrompt = ({ providerUrl }: { providerUrl: string }) => ({\n prompt: `Client ID: ${chalk.dim(`(from ${link(providerUrl)})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const clientSecretPrompt = ({\n providerUrl,\n}: {\n providerUrl: string;\n}) => ({\n prompt: `Client Secret: ${chalk.dim(`(from ${link(providerUrl)})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const redirectUriPrompt = ({ heading }: { heading: string }) => ({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\n${heading}\n${chalk.dim('With a custom redirect URI, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URI must forward to ${DEFAULT_OAUTH_CALLBACK_URL} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\n${heading}\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const redirectSetupMessages = ({\n prompt,\n redirectUri,\n showCustomRedirectInstructions,\n}: {\n prompt: string;\n redirectUri: string;\n showCustomRedirectInstructions?: boolean;\n}) => {\n const messages = ['', chalk.bold(`${prompt}:`), chalk.bold(redirectUri)];\n\n if (showCustomRedirectInstructions) {\n messages.push(\n '',\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n messages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\n );\n }\n\n return messages;\n};\n\nexport const appleServicesIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Services ID ${chalk.dim(`(from ${link('https://developer.apple.com/account/resources/identifiers/list/serviceId')})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const appleTeamIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Team ID ${chalk.dim(`(from ${link('https://developer.apple.com/account#MembershipDetailsCard')})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const appleKeyIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Key ID ${chalk.dim(`(from ${link('https://developer.apple.com/account/resources/authkeys/list')})`)}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const applePrivateKeyFilePrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Path to .p8 private key file ${chalk.dim('(downloaded from Apple)')}`,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const clerkPublishableKeyPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Clerk publishable key ${chalk.dim(`(from ${link('https://dashboard.clerk.com/last-active?path=api-keys')})`)}`,\n placeholder: 'pk_********************************************************',\n validate: (val: string) => {\n if (!val) return 'Publishable key is required';\n if (!val.startsWith('pk_')) {\n return 'Invalid publishable key. It should start with \"pk_\".';\n }\n },\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const firebaseProjectIdPrompt = (_opts: EmptyPromptArgs) => ({\n prompt: `Firebase project ID: (From Project Settings page on ${link('https://console.firebase.google.com/')})`,\n validate: validateFirebaseProjectId,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n});\n\nexport const readPrivateKeyFile = Effect.fn('readPrivateKeyFile')(function* (\n path: string,\n) {\n const fs = yield* FileSystem.FileSystem;\n // Strip shell escapes so paths like \"file\\ (2).p8\" resolve on POSIX.\n const normalizedPath =\n process.platform === 'win32' ? path : path.replace(/\\\\(.)/g, '$1');\n const contents = yield* fs.readFileString(normalizedPath, 'utf8').pipe(\n Effect.mapError(\n (e) =>\n new BadArgsError({\n message: `Could not read private key file at ${normalizedPath}: ${e.message}`,\n }),\n ),\n );\n\n const trimmed = contents.trim();\n if (!trimmed) {\n return yield* BadArgsError.make({\n message: `Private key file at ${normalizedPath} is empty.`,\n });\n }\n return trimmed;\n});\n\nexport function validateFirebaseProjectId(value: string) {\n const projectIdRegex = /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/;\n if (!value) return 'Project ID is required';\n if (!projectIdRegex.test(value)) {\n return 'Invalid Firebase project ID. It must be 6-30 characters, start with a lowercase letter, contain only lowercase letters, digits, and hyphens, and not end with a hyphen.';\n }\n}\n\nexport function firebaseDiscoveryEndpoint(projectId: string) {\n return `https://securetoken.google.com/${encodeURIComponent(projectId)}/.well-known/openid-configuration`;\n}\n"]}
@@ -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;AAkxB5D,eAAO,MAAM,mBAAmB;;;;wgBA6D/B,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;AAoxB5D,eAAO,MAAM,mBAAmB;;;;wgBA6D/B,CAAC"}
@@ -4,10 +4,10 @@ import { GlobalOpts } from "../../../context/globalOpts.js";
4
4
  import { optOrPrompt, runUIEffect } from "../../../lib/ui.js";
5
5
  import { findClientByIdOrName, getAppsAuth, OAuthClient, updateOAuthClient, } from "../../../lib/oauth.js";
6
6
  import { UI } from "../../../ui/index.js";
7
- import { DEFAULT_OAUTH_CALLBACK_URL } from '@instantdb/platform';
7
+ import { clerkDomainFromPublishableKey, DEFAULT_OAUTH_CALLBACK_URL, } from '@instantdb/platform';
8
8
  import chalk from 'chalk';
9
9
  import boxen from 'boxen';
10
- import { appleKeyIdPrompt, applePrivateKeyFilePrompt, appleServicesIdPrompt, appleTeamIdPrompt, clerkPublishableKeyPrompt, clientIdPrompt, clientSecretPrompt, domainFromClerkKey, firebaseDiscoveryEndpoint, firebaseProjectIdPrompt, getFlag, getMetaString, hasAnyFlag, hasFlag, isTrueFlag, readPrivateKeyFile, redirectSetupMessages, redirectUriPrompt, validateFirebaseProjectId, } from "./shared.js";
10
+ import { appleKeyIdPrompt, applePrivateKeyFilePrompt, appleServicesIdPrompt, appleTeamIdPrompt, clerkPublishableKeyPrompt, clientIdPrompt, clientSecretPrompt, firebaseDiscoveryEndpoint, firebaseProjectIdPrompt, getFlag, getMetaString, hasAnyFlag, hasFlag, isTrueFlag, readPrivateKeyFile, redirectSetupMessages, redirectUriPrompt, validateFirebaseProjectId, } from "./shared.js";
11
11
  import { link } from "../../../logging.js";
12
12
  const redirectPrompt = redirectUriPrompt({
13
13
  heading: 'Custom redirect URI (optional):',
@@ -101,7 +101,7 @@ const selectGoogleUpdateMode = Effect.fn(function* ({ isWeb, switchingFromShared
101
101
  })).pipe(Effect.catchTag('UIError', (e) => BadArgsError.make({ message: `UI error: ${e.message}` })));
102
102
  }
103
103
  const options = [
104
- { label: 'Rotate credentials', value: 'custom' },
104
+ { label: 'Update Client ID and Client Secret', value: 'custom' },
105
105
  ];
106
106
  if (isWeb) {
107
107
  options.push({
@@ -283,7 +283,7 @@ const handleClientIdSecretUpdate = Effect.fn(function* (params) {
283
283
  let promptRedirect = false;
284
284
  if (!hasAnyUpdateFlag && !yes) {
285
285
  const action = yield* selectUpdateAction([
286
- { label: 'Rotate credentials', value: 'rotate' },
286
+ { label: 'Update Client ID and Client Secret', value: 'rotate' },
287
287
  { label: 'Update redirect URI', value: 'redirect' },
288
288
  ]);
289
289
  promptCredentials = action === 'rotate';
@@ -444,7 +444,7 @@ const handleClerkUpdate = Effect.fn(function* (opts, client) {
444
444
  message: 'Missing required value for --publishable-key',
445
445
  });
446
446
  }
447
- const domain = domainFromClerkKey(publishableKey);
447
+ const domain = clerkDomainFromPublishableKey(publishableKey);
448
448
  if (!domain) {
449
449
  return yield* BadArgsError.make({
450
450
  message: 'Invalid publishable key. Could not extract domain.',
@@ -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 { optOrPrompt, 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 { DEFAULT_OAUTH_CALLBACK_URL } 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 domainFromClerkKey,\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 optOrPromptWhenNeeded = (\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* optOrPrompt(value, {\n simpleName: `--${flag}`,\n required: params.required ?? params.promptIf,\n skipIf: false,\n prompt: params.prompt,\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: 'Rotate credentials', 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* optOrPromptWhenNeeded(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* optOrPromptWhenNeeded(opts, 'client-id', {\n promptIf: shouldPromptClientId,\n required: mustCollectCredentials,\n prompt: clientIdPrompt({ providerUrl: googleConsoleUrl }),\n });\n const clientSecret = yield* optOrPromptWhenNeeded(opts, 'client-secret', {\n promptIf: shouldPromptClientSecret,\n required: isWeb && mustCollectCredentials,\n prompt: clientSecretPrompt({ providerUrl: googleConsoleUrl }),\n });\n const customRedirectUri = isWeb\n ? yield* optOrPromptWhenNeeded(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: 'Rotate credentials', value: 'rotate' },\n { label: 'Update redirect URI', value: 'redirect' },\n ]);\n promptCredentials = action === 'rotate';\n promptRedirect = action === 'redirect';\n }\n\n const clientId = yield* optOrPromptWhenNeeded(params.opts, 'client-id', {\n promptIf: promptCredentials,\n required: promptCredentials,\n prompt: clientIdPrompt({ providerUrl: params.providerUrl }),\n });\n const clientSecret = yield* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(opts, 'team-id', {\n promptIf: promptAll,\n required: promptAll,\n prompt: appleTeamIdPrompt({}),\n });\n const keyId = yield* optOrPromptWhenNeeded(opts, 'key-id', {\n promptIf: promptAll,\n required: promptAll,\n prompt: appleKeyIdPrompt({}),\n });\n const privateKeyPath = yield* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(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* optOrPromptWhenNeeded(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 = domainFromClerkKey(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* optOrPromptWhenNeeded(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 { optOrPrompt, 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 optOrPromptWhenNeeded = (\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* optOrPrompt(value, {\n simpleName: `--${flag}`,\n required: params.required ?? params.promptIf,\n skipIf: false,\n prompt: params.prompt,\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* optOrPromptWhenNeeded(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* optOrPromptWhenNeeded(opts, 'client-id', {\n promptIf: shouldPromptClientId,\n required: mustCollectCredentials,\n prompt: clientIdPrompt({ providerUrl: googleConsoleUrl }),\n });\n const clientSecret = yield* optOrPromptWhenNeeded(opts, 'client-secret', {\n promptIf: shouldPromptClientSecret,\n required: isWeb && mustCollectCredentials,\n prompt: clientSecretPrompt({ providerUrl: googleConsoleUrl }),\n });\n const customRedirectUri = isWeb\n ? yield* optOrPromptWhenNeeded(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* optOrPromptWhenNeeded(params.opts, 'client-id', {\n promptIf: promptCredentials,\n required: promptCredentials,\n prompt: clientIdPrompt({ providerUrl: params.providerUrl }),\n });\n const clientSecret = yield* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(opts, 'team-id', {\n promptIf: promptAll,\n required: promptAll,\n prompt: appleTeamIdPrompt({}),\n });\n const keyId = yield* optOrPromptWhenNeeded(opts, 'key-id', {\n promptIf: promptAll,\n required: promptAll,\n prompt: appleKeyIdPrompt({}),\n });\n const privateKeyPath = yield* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(\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* optOrPromptWhenNeeded(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* optOrPromptWhenNeeded(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* optOrPromptWhenNeeded(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"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "instant-cli",
3
3
  "type": "module",
4
- "version": "1.0.22-branch-cli-codex-update.25352264641.1",
4
+ "version": "1.0.22-branch-cli-codex-update.25352565722.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.22-branch-cli-codex-update.25352264641.1",
54
- "@instantdb/platform": "1.0.22-branch-cli-codex-update.25352264641.1",
55
- "@instantdb/version": "1.0.22-branch-cli-codex-update.25352264641.1"
53
+ "@instantdb/core": "1.0.22-branch-cli-codex-update.25352565722.1",
54
+ "@instantdb/platform": "1.0.22-branch-cli-codex-update.25352565722.1",
55
+ "@instantdb/version": "1.0.22-branch-cli-codex-update.25352565722.1"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@babel/core": "^7.17.9",
@@ -24,6 +24,7 @@ import {
24
24
  APPLE_AUTHORIZATION_ENDPOINT,
25
25
  APPLE_DISCOVERY_ENDPOINT,
26
26
  APPLE_TOKEN_ENDPOINT,
27
+ clerkDomainFromPublishableKey,
27
28
  LINKEDIN_AUTHORIZATION_ENDPOINT,
28
29
  LINKEDIN_DISCOVERY_ENDPOINT,
29
30
  LINKEDIN_TOKEN_ENDPOINT,
@@ -40,7 +41,6 @@ import {
40
41
  clerkPublishableKeyPrompt,
41
42
  clientIdPrompt,
42
43
  clientSecretPrompt,
43
- domainFromClerkKey,
44
44
  firebaseDiscoveryEndpoint,
45
45
  firebaseProjectIdPrompt,
46
46
  getFlag,
@@ -644,7 +644,7 @@ const handleClerkClient = Effect.fn(function* (opts: Record<string, unknown>) {
644
644
  });
645
645
  }
646
646
 
647
- const domain = domainFromClerkKey(publishableKey);
647
+ const domain = clerkDomainFromPublishableKey(publishableKey);
648
648
  if (!domain) {
649
649
  return yield* BadArgsError.make({
650
650
  message: 'Invalid publishable key. Could not extract domain.',
@@ -1,9 +1,6 @@
1
1
  import { FileSystem } from '@effect/platform';
2
2
  import { Effect } from 'effect';
3
- import {
4
- clerkDomainFromPublishableKey,
5
- DEFAULT_OAUTH_CALLBACK_URL,
6
- } from '@instantdb/platform';
3
+ import { DEFAULT_OAUTH_CALLBACK_URL } from '@instantdb/platform';
7
4
  import chalk from 'chalk';
8
5
  import { BadArgsError } from '../../../errors.ts';
9
6
  import { link } from '../../../logging.ts';
@@ -181,8 +178,6 @@ export const readPrivateKeyFile = Effect.fn('readPrivateKeyFile')(function* (
181
178
  return trimmed;
182
179
  });
183
180
 
184
- export const domainFromClerkKey = clerkDomainFromPublishableKey;
185
-
186
181
  export function validateFirebaseProjectId(value: string) {
187
182
  const projectIdRegex = /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/;
188
183
  if (!value) return 'Project ID is required';
@@ -10,7 +10,10 @@ import {
10
10
  updateOAuthClient,
11
11
  } from '../../../lib/oauth.ts';
12
12
  import { UI } from '../../../ui/index.ts';
13
- import { DEFAULT_OAUTH_CALLBACK_URL } from '@instantdb/platform';
13
+ import {
14
+ clerkDomainFromPublishableKey,
15
+ DEFAULT_OAUTH_CALLBACK_URL,
16
+ } from '@instantdb/platform';
14
17
  import chalk from 'chalk';
15
18
  import boxen from 'boxen';
16
19
  import {
@@ -21,7 +24,6 @@ import {
21
24
  clerkPublishableKeyPrompt,
22
25
  clientIdPrompt,
23
26
  clientSecretPrompt,
24
- domainFromClerkKey,
25
27
  firebaseDiscoveryEndpoint,
26
28
  firebaseProjectIdPrompt,
27
29
  getFlag,
@@ -200,7 +202,7 @@ const selectGoogleUpdateMode = Effect.fn(function* ({
200
202
  }
201
203
 
202
204
  const options: { label: string; value: GoogleUpdateMode }[] = [
203
- { label: 'Rotate credentials', value: 'custom' },
205
+ { label: 'Update Client ID and Client Secret', value: 'custom' },
204
206
  ];
205
207
 
206
208
  if (isWeb) {
@@ -476,7 +478,7 @@ const handleClientIdSecretUpdate = Effect.fn(function* (params: {
476
478
 
477
479
  if (!hasAnyUpdateFlag && !yes) {
478
480
  const action = yield* selectUpdateAction([
479
- { label: 'Rotate credentials', value: 'rotate' },
481
+ { label: 'Update Client ID and Client Secret', value: 'rotate' },
480
482
  { label: 'Update redirect URI', value: 'redirect' },
481
483
  ]);
482
484
  promptCredentials = action === 'rotate';
@@ -729,7 +731,7 @@ const handleClerkUpdate = Effect.fn(function* (
729
731
  });
730
732
  }
731
733
 
732
- const domain = domainFromClerkKey(publishableKey);
734
+ const domain = clerkDomainFromPublishableKey(publishableKey);
733
735
  if (!domain) {
734
736
  return yield* BadArgsError.make({
735
737
  message: 'Invalid publishable key. Could not extract domain.',