instant-cli 1.0.21-branch-cli-codex.25190616638.1 → 1.0.21-branch-cli-codex.25190719720.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.21-branch-cli-codex.25190616638.1 build /home/runner/work/instant/instant/client/packages/cli
2
+ > instant-cli@1.0.21-branch-cli-codex.25190719720.1 build /home/runner/work/instant/instant/client/packages/cli
3
3
  > rm -rf dist; tsc -p tsconfig.build.json
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA+B5D,eAAO,MAAM,gBAAgB,gFAO5B,CAAC;AA44BF,eAAO,MAAM,gBAAgB;;;;6eAwD5B,CAAC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAgC5D,eAAO,MAAM,gBAAgB,gFAO5B,CAAC;AAq4BF,eAAO,MAAM,gBAAgB;;;;6eAwD5B,CAAC"}
@@ -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 { FileSystem } from '@effect/platform';\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 stripFirstBlankLine,\n validateRequired,\n} from '../../../lib/ui.ts';\nimport {\n addOAuthClient,\n findName,\n getClientNameAndProvider,\n getOrCreateProvider,\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';\n\nexport const ClientTypeSchema = Schema.Literal(\n 'google',\n 'github',\n 'apple',\n 'linkedin',\n 'clerk',\n 'firebase',\n);\n\nconst GoogleAppTypeSchema = Schema.Literal(\n 'web',\n 'ios',\n 'android',\n 'button-for-web',\n);\n\nconst isTrueFlag = (value: unknown) => value === true || value === 'true';\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 yes,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n opts: Record<string, unknown>;\n yes: boolean;\n}) {\n const devCredentialsFlag = isTrueFlag(opts['dev-credentials']);\n const hasProvidedSomeCustomCredentials = Boolean(\n opts['client-id'] || opts['client-secret'] || opts['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 (devCredentialsFlag) {\n return 'dev';\n }\n\n if (appType !== 'web') {\n return 'custom';\n }\n\n if (hasProvidedSomeCustomCredentials) {\n return 'custom';\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: {\n client_name: string;\n id: string;\n };\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 'For production, use your own Google OAuth credentials.',\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: {\n client_name: string;\n client_id?: string | null;\n id: string;\n };\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 chalk.bold(\n `\\nAdd this redirect URI in Google Console:\\n${redirectUri}\\n`,\n ),\n );\n if (customRedirectUri) {\n redirectMessages.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n redirectMessages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\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 { yes } = yield* GlobalOpts;\n const credentialMode = yield* resolveGoogleCredentialMode({\n appType,\n opts,\n yes,\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: {\n prompt: `Client ID: ${chalk.dim(`(from ${link('https://console.developers.google.com/apis/credentials')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\n });\n\n const googleClientUsesCustomWebCredentials =\n !useSharedCredentials && appType === 'web';\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: googleClientUsesCustomWebCredentials,\n skipIf: !googleClientUsesCustomWebCredentials,\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: {\n prompt: `Client Secret: ${chalk.dim(`(from ${link('https://console.developers.google.com/apis/credentials')})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n prompt: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\n simpleName: '--custom-redirect-uri',\n skipIf: !googleClientUsesCustomWebCredentials,\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: {\n prompt: `Client ID ${chalk.dim(`(from ${link('https://github.com/settings/developers')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: {\n prompt: `Client Secret: ${chalk.dim(`(from ${link('https://github.com/settings/developers')})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\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: string[] = [\n chalk.bold(\n `\\nAdd this callback URL in your GitHub OAuth App settings:\\n${redirectUri}\\n`,\n ),\n ];\n if (customRedirectUri) {\n redirectMessages.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n redirectMessages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\n );\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: {\n prompt: `Client ID: ${chalk.dim(`(from ${link('https://www.linkedin.com/developers/apps')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: {\n prompt: `Client Secret: ${chalk.dim(`(from ${link('https://www.linkedin.com/developers/apps')})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\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: string[] = [\n chalk.bold(\n `\\nAdd this redirect URI in your LinkedIn app settings:\\n${redirectUri}\\n`,\n ),\n ];\n if (customRedirectUri) {\n redirectMessages.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n redirectMessages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\n );\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 readPrivateKeyFile = Effect.fn('readPrivateKeyFile')(function* (\n path: string,\n) {\n const fs = yield* FileSystem.FileSystem;\n // Strip shell-escape backslashes so paths like \"file\\ (2).p8\" resolve correctly.\n // Only on POSIX — Windows uses backslashes as path separators.\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\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: {\n prompt: `Services ID ${chalk.dim(`(from ${link('https://developer.apple.com/account/resources/identifiers/list/serviceId')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\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: {\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 });\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: {\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 });\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: {\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 });\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: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\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) {\n summaryLines.push(`Team ID: ${teamId}`);\n summaryLines.push(`Key ID: ${keyId}`);\n summaryLines.push(\n chalk.bold(\n `\\nAdd this return URL under your Services ID on ${link('https://developer.apple.com', 'developer.apple.com')}:\\n${redirectUri}\\n`,\n ),\n );\n if (customRedirectUri) {\n summaryLines.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n summaryLines.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\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: {\n prompt: `Clerk publishable key ${chalk.dim(`(from ${link('https://dashboard.clerk.com/last-active?path=api-keys')})`)}`,\n placeholder:\n 'pk_********************************************************',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: (val) => {\n if (!val) {\n return 'Publishable key is required';\n }\n if (!val.startsWith('pk_')) {\n return 'Invalid publishable key. It should start with \"pk_\".';\n }\n },\n },\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 firebaseProjectIdRegex = /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/;\n const projectId = yield* optOrPrompt(opts['project-id'], {\n simpleName: '--project-id',\n required: true,\n skipIf: false,\n prompt: {\n prompt: `Firebase project ID: (From Project Settings page on ${link('https://console.firebase.google.com/')})`,\n placeholder: '',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: (val) => {\n if (!val) {\n return 'Project ID is required';\n }\n if (!firebaseProjectIdRegex.test(val)) {\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 },\n });\n // typeguard\n if (!clientName || !projectId) {\n return yield* BadArgsError.make({\n message: 'Missing required arguments',\n });\n }\n if (!firebaseProjectIdRegex.test(projectId)) {\n return yield* BadArgsError.make({\n message:\n '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 const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n discoveryEndpoint: `https://securetoken.google.com/${encodeURIComponent(projectId)}/.well-known/openid-configuration`,\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\nfunction domainFromClerkKey(key: string): string | null {\n try {\n const parts = key.split('_');\n const domainPartB64 = parts[parts.length - 1];\n const domainPart = base64Decode(domainPartB64);\n return domainPart.replace('$', '');\n } catch (e) {\n console.error('Error getting domain from clerk key', e);\n return null;\n }\n}\n\n// Base64 decode, switching to url-safe decode if we hit an error\n// Can't be sure which method Clerk uses because you can't generate\n// `+` or `/` with characters that go in a normal host. Urls with\n// chinese characters exist, they might encode to `+` or `/`, and\n// Clerk might support them, so we'll be safe and do both.\nfunction base64Decode(s: string) {\n try {\n return Buffer.from(s, 'base64').toString('utf-8');\n } catch (e) {\n return Buffer.from(s, 'base64url').toString('utf-8');\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 { FileSystem } from '@effect/platform';\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 stripFirstBlankLine,\n validateRequired,\n} from '../../../lib/ui.ts';\nimport {\n addOAuthClient,\n findName,\n getClientNameAndProvider,\n getOrCreateProvider,\n type 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';\n\nexport const ClientTypeSchema = Schema.Literal(\n 'google',\n 'github',\n 'apple',\n 'linkedin',\n 'clerk',\n 'firebase',\n);\n\nconst GoogleAppTypeSchema = Schema.Literal(\n 'web',\n 'ios',\n 'android',\n 'button-for-web',\n);\n\nconst isTrueFlag = (value: unknown) => value === true || value === 'true';\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 yes,\n}: {\n appType: typeof GoogleAppTypeSchema.Type;\n opts: Record<string, unknown>;\n yes: boolean;\n}) {\n const devCredentialsFlag = isTrueFlag(opts['dev-credentials']);\n const hasProvidedSomeCustomCredentials = Boolean(\n opts['client-id'] || opts['client-secret'] || opts['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 (devCredentialsFlag) {\n return 'dev';\n }\n\n if (appType !== 'web') {\n return 'custom';\n }\n\n if (hasProvidedSomeCustomCredentials) {\n return 'custom';\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: OAuthClient;\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 'For production, use your own Google OAuth credentials.',\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: OAuthClient;\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 chalk.bold(\n `\\nAdd this redirect URI in Google Console:\\n${redirectUri}\\n`,\n ),\n );\n if (customRedirectUri) {\n redirectMessages.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n redirectMessages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\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 { yes } = yield* GlobalOpts;\n const credentialMode = yield* resolveGoogleCredentialMode({\n appType,\n opts,\n yes,\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: {\n prompt: `Client ID: ${chalk.dim(`(from ${link('https://console.developers.google.com/apis/credentials')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\n });\n\n const googleClientUsesCustomWebCredentials =\n !useSharedCredentials && appType === 'web';\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: googleClientUsesCustomWebCredentials,\n skipIf: !googleClientUsesCustomWebCredentials,\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: {\n prompt: `Client Secret: ${chalk.dim(`(from ${link('https://console.developers.google.com/apis/credentials')})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n prompt: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\n simpleName: '--custom-redirect-uri',\n skipIf: !googleClientUsesCustomWebCredentials,\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: {\n prompt: `Client ID ${chalk.dim(`(from ${link('https://github.com/settings/developers')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: {\n prompt: `Client Secret: ${chalk.dim(`(from ${link('https://github.com/settings/developers')})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\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: string[] = [\n chalk.bold(\n `\\nAdd this callback URL in your GitHub OAuth App settings:\\n${redirectUri}\\n`,\n ),\n ];\n if (customRedirectUri) {\n redirectMessages.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n redirectMessages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\n );\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: {\n prompt: `Client ID: ${chalk.dim(`(from ${link('https://www.linkedin.com/developers/apps')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\n });\n\n const clientSecret = yield* optOrPrompt(opts['client-secret'], {\n required: true,\n skipIf: false,\n simpleName: '--client-secret',\n prompt: {\n prompt: `Client Secret: ${chalk.dim(`(from ${link('https://www.linkedin.com/developers/apps')})`)}`,\n validate: validateRequired,\n sensitive: true,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n const customRedirectUri = yield* optOrPrompt(opts['custom-redirect-uri'], {\n required: false,\n simpleName: '--custom-redirect-uri',\n skipIf: false,\n prompt: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\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: string[] = [\n chalk.bold(\n `\\nAdd this redirect URI in your LinkedIn app settings:\\n${redirectUri}\\n`,\n ),\n ];\n if (customRedirectUri) {\n redirectMessages.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n redirectMessages.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\n );\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 readPrivateKeyFile = Effect.fn('readPrivateKeyFile')(function* (\n path: string,\n) {\n const fs = yield* FileSystem.FileSystem;\n // Strip shell-escape backslashes so paths like \"file\\ (2).p8\" resolve correctly.\n // Only on POSIX — Windows uses backslashes as path separators.\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\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: {\n prompt: `Services ID ${chalk.dim(`(from ${link('https://developer.apple.com/account/resources/identifiers/list/serviceId')})`)}`,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: validateRequired,\n },\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: {\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 });\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: {\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 });\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: {\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 });\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: {\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URI (optional):\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 `\\nCustom redirect URI (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n },\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) {\n summaryLines.push(`Team ID: ${teamId}`);\n summaryLines.push(`Key ID: ${keyId}`);\n summaryLines.push(\n chalk.bold(\n `\\nAdd this return URL under your Services ID on ${link('https://developer.apple.com', 'developer.apple.com')}:\\n${redirectUri}\\n`,\n ),\n );\n if (customRedirectUri) {\n summaryLines.push(\n `Your custom redirect must forward to ${chalk.bold(DEFAULT_OAUTH_CALLBACK_URL)} with all query parameters preserved.`,\n );\n summaryLines.push(\n `You can test it by visiting: ${chalk.bold(redirectUri + '?test-redirect=true')}`,\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: {\n prompt: `Clerk publishable key ${chalk.dim(`(from ${link('https://dashboard.clerk.com/last-active?path=api-keys')})`)}`,\n placeholder:\n 'pk_********************************************************',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: (val) => {\n if (!val) {\n return 'Publishable key is required';\n }\n if (!val.startsWith('pk_')) {\n return 'Invalid publishable key. It should start with \"pk_\".';\n }\n },\n },\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 firebaseProjectIdRegex = /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/;\n const projectId = yield* optOrPrompt(opts['project-id'], {\n simpleName: '--project-id',\n required: true,\n skipIf: false,\n prompt: {\n prompt: `Firebase project ID: (From Project Settings page on ${link('https://console.firebase.google.com/')})`,\n placeholder: '',\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n validate: (val) => {\n if (!val) {\n return 'Project ID is required';\n }\n if (!firebaseProjectIdRegex.test(val)) {\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 },\n });\n // typeguard\n if (!clientName || !projectId) {\n return yield* BadArgsError.make({\n message: 'Missing required arguments',\n });\n }\n if (!firebaseProjectIdRegex.test(projectId)) {\n return yield* BadArgsError.make({\n message:\n '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 const response = yield* addOAuthClient({\n providerId: provider.id,\n clientName,\n discoveryEndpoint: `https://securetoken.google.com/${encodeURIComponent(projectId)}/.well-known/openid-configuration`,\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\nfunction domainFromClerkKey(key: string): string | null {\n try {\n const parts = key.split('_');\n const domainPartB64 = parts[parts.length - 1];\n const domainPart = base64Decode(domainPartB64);\n return domainPart.replace('$', '');\n } catch (e) {\n console.error('Error getting domain from clerk key', e);\n return null;\n }\n}\n\n// Base64 decode, switching to url-safe decode if we hit an error\n// Can't be sure which method Clerk uses because you can't generate\n// `+` or `/` with characters that go in a normal host. Urls with\n// chinese characters exist, they might encode to `+` or `/`, and\n// Clerk might support them, so we'll be safe and do both.\nfunction base64Decode(s: string) {\n try {\n return Buffer.from(s, 'base64').toString('utf-8');\n } catch (e) {\n return Buffer.from(s, 'base64url').toString('utf-8');\n }\n}\n"]}
@@ -24,6 +24,7 @@ export declare const OAuthClient: Schema.Struct<{
24
24
  meta: Schema.optional<typeof Schema.Any>;
25
25
  use_shared_credentials: Schema.optional<Schema.Union<[typeof Schema.Boolean, typeof Schema.Null]>>;
26
26
  }>;
27
+ export type OAuthClient = Schema.Schema.Type<typeof OAuthClient>;
27
28
  export declare const AddOAuthProviderResponse: Schema.Struct<{
28
29
  provider: Schema.Struct<{
29
30
  id: typeof Schema.String;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAe,MAAM,WAAW,CAAC;AAS3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C,eAAO,MAAM,uBAAuB,mEAKnC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;EAG/B,CAAC;AAUH,eAAO,MAAM,WAAW;;;;;;;;;;;EAWtB,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;EAEnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;EAEjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AAOH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;iRAOtB,CAAC;AAEH,eAAO,MAAM,gBAAgB;YACnB,MAAM;kBACA,MAAM;;;;;;iRAgBpB,CAAC;AAEH,eAAO,MAAM,cAAc;YACjB,MAAM;gBACF,MAAM;gBACN,MAAM;eACP,MAAM;mBACF,MAAM;4BACG,MAAM;oBACd,MAAM;wBACF,MAAM;iBACb,MAAM;WACZ,OAAO;2BACS,OAAO;;;;;;;;;;;;;;iRAuB9B,CAAC;AAIH,eAAO,MAAM,oBAAoB,gGAiC/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iRAc9B,CAAC;AAIH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,WAWzD,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;4WAgCnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;iRAajC,CAAC;AAEH,eAAO,MAAM,mBAAmB;aACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,uBAAuB,CAAC;YACnD,MAAM,EAAE;;;;;;;iRAiBhB,CAAC"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAe,MAAM,WAAW,CAAC;AAS3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C,eAAO,MAAM,uBAAuB,mEAKnC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;EAG/B,CAAC;AAUH,eAAO,MAAM,WAAW;;;;;;;;;;;EAWtB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;AAEjE,eAAO,MAAM,wBAAwB;;;;;EAEnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;EAEjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AAOH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;iRAOtB,CAAC;AAEH,eAAO,MAAM,gBAAgB;YACnB,MAAM;kBACA,MAAM;;;;;;iRAgBpB,CAAC;AAEH,eAAO,MAAM,cAAc;YACjB,MAAM;gBACF,MAAM;gBACN,MAAM;eACP,MAAM;mBACF,MAAM;4BACG,MAAM;oBACd,MAAM;wBACF,MAAM;iBACb,MAAM;WACZ,OAAO;2BACS,OAAO;;;;;;;;;;;;;;iRAuB9B,CAAC;AAIH,eAAO,MAAM,oBAAoB,gGAiC/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iRAc9B,CAAC;AAIH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,WAWzD,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;4WAgCnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;iRAajC,CAAC;AAEH,eAAO,MAAM,mBAAmB;aACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,uBAAuB,CAAC;YACnD,MAAM,EAAE;;;;;;;iRAiBhB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from './http.ts';\nimport chalk from 'chalk';\nimport {\n optOrPrompt,\n runUIEffect,\n stripFirstBlankLine,\n validateRequired,\n} from './ui.ts';\nimport { UI } from '../ui/index.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { link } from '../logging.ts';\nimport type { ClientTypeSchema } from '../commands/auth/client/add.ts';\n\nexport const AuthorizedOriginService = Schema.Literal(\n 'generic',\n 'vercel',\n 'netlify',\n 'custom-scheme',\n);\n\nexport const AuthorizedOrigin = Schema.Struct({\n id: Schema.String,\n service: AuthorizedOriginService,\n params: Schema.Array(Schema.String).pipe(Schema.mutable),\n});\n\nexport const OAuthServiceProvider = Schema.Struct({\n id: Schema.String,\n provider_name: Schema.String,\n});\n\nconst NullableString = Schema.Union(Schema.String, Schema.Null).pipe(\n Schema.optional,\n);\n\nconst NullableBoolean = Schema.Union(Schema.Boolean, Schema.Null).pipe(\n Schema.optional,\n);\n\nexport const OAuthClient = Schema.Struct({\n id: Schema.String,\n client_name: Schema.String,\n client_id: NullableString,\n provider_id: Schema.String,\n authorization_endpoint: NullableString,\n token_endpoint: NullableString,\n discovery_endpoint: NullableString,\n redirect_to: NullableString,\n meta: Schema.Any.pipe(Schema.optional),\n use_shared_credentials: NullableBoolean,\n});\n\nexport const AddOAuthProviderResponse = Schema.Struct({\n provider: OAuthServiceProvider,\n});\n\nexport const AddOAuthClientResponse = Schema.Struct({\n client: OAuthClient,\n});\n\nexport const AuthorizedOriginResponse = Schema.Struct({\n origin: AuthorizedOrigin,\n});\n\nconst NullableArray = <A, I, R>(schema: Schema.Schema<A, I, R>) =>\n Schema.Union(Schema.Array(schema).pipe(Schema.mutable), Schema.Null).pipe(\n Schema.optional,\n );\n\nexport const AppsAuthResponse = Schema.Struct({\n authorized_redirect_origins: NullableArray(AuthorizedOrigin),\n oauth_service_providers: NullableArray(OAuthServiceProvider),\n oauth_clients: NullableArray(OAuthClient),\n});\n\nexport const getAppsAuth = Effect.fn(function* () {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .get(`/dash/apps/${targetAppId}/auth`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AppsAuthResponse)));\n});\n\nexport const addOAuthProvider = Effect.fn(function* (params: {\n appId?: string;\n providerName: string;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_service_providers`, {\n body: HttpBody.unsafeJson({\n provider_name: params.providerName,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AddOAuthProviderResponse),\n ),\n );\n});\n\nexport const addOAuthClient = Effect.fn(function* (params: {\n appId?: string;\n providerId: string;\n clientName: string;\n clientId?: string;\n clientSecret?: string;\n authorizationEndpoint?: string;\n tokenEndpoint?: string;\n discoveryEndpoint?: string;\n redirectTo?: string;\n meta?: unknown;\n useSharedCredentials?: boolean;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients`, {\n body: HttpBody.unsafeJson({\n provider_id: params.providerId,\n client_name: params.clientName,\n client_id: params.clientId,\n client_secret: params.clientSecret,\n authorization_endpoint: params.authorizationEndpoint,\n token_endpoint: params.tokenEndpoint,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n use_shared_credentials: params.useSharedCredentials,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\n// Due to the long prompt text, we use modifiers to manually create the prompt so we can\n// change it after submission.\nexport const promptForRedirectURI = Effect.fn(function* (\n existingValue?: string,\n) {\n if (existingValue) return existingValue;\n\n const result = yield* runUIEffect(\n new UI.TextInput({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URL (optional):\n${chalk.dim('With a custom redirect URL, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URL must forward to ${link('https://api.instantdb.com/runtime/oauth/callback')} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\nCustom redirect URL (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({\n message: `UI error for redirect URI: ${e.message}`,\n }),\n ),\n );\n\n return result === '' ? undefined : result;\n});\n\nexport const getOrCreateProvider = Effect.fn(function* (\n type: typeof ClientTypeSchema.Type,\n) {\n const auth = yield* getAppsAuth();\n const provider = auth.oauth_service_providers?.find(\n (entry) => entry.provider_name === type,\n );\n\n if (provider) {\n return { auth, provider };\n }\n\n const created = yield* addOAuthProvider({ providerName: type });\n return { auth, provider: created.provider };\n});\n\n// Returns prefix if unused; otherwise appends integers starting at 2.\n// e.g. findName('google', new Set(['google', 'google2'])) returns 'google3'.\nexport const findName = (prefix: string, used: Set<string>) => {\n if (!used.has(prefix)) {\n return prefix;\n }\n\n for (let i = 2; ; i++) {\n const candidate = `${prefix}${i}`;\n if (!used.has(candidate)) {\n return candidate;\n }\n }\n};\n\nexport const getClientNameAndProvider = Effect.fn(function* (\n providerType: typeof ClientTypeSchema.Type,\n opts: Record<string, unknown>,\n) {\n const { auth, provider } = yield* getOrCreateProvider(providerType);\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(providerType, usedClientNames);\n\n const clientName = yield* 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 return { provider, clientName };\n});\n\nexport const removeAuthorizedOrigin = Effect.fn(function* (originId: string) {\n const http = (yield* InstantHttpAuthed).pipe(\n withCommand('auth origin delete'),\n );\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .del(`/dash/apps/${appId}/authorized_redirect_origins/${originId}`)\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n\nexport const addAuthorizedOrigin = Effect.fn(function* (params: {\n service: Schema.Schema.Type<typeof AuthorizedOriginService>;\n params: string[];\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth origin add'));\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .post(`/dash/apps/${appId}/authorized_redirect_origins`, {\n body: HttpBody.unsafeJson({\n service: params.service,\n params: params.params,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n"]}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from './http.ts';\nimport chalk from 'chalk';\nimport {\n optOrPrompt,\n runUIEffect,\n stripFirstBlankLine,\n validateRequired,\n} from './ui.ts';\nimport { UI } from '../ui/index.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { link } from '../logging.ts';\nimport type { ClientTypeSchema } from '../commands/auth/client/add.ts';\n\nexport const AuthorizedOriginService = Schema.Literal(\n 'generic',\n 'vercel',\n 'netlify',\n 'custom-scheme',\n);\n\nexport const AuthorizedOrigin = Schema.Struct({\n id: Schema.String,\n service: AuthorizedOriginService,\n params: Schema.Array(Schema.String).pipe(Schema.mutable),\n});\n\nexport const OAuthServiceProvider = Schema.Struct({\n id: Schema.String,\n provider_name: Schema.String,\n});\n\nconst NullableString = Schema.Union(Schema.String, Schema.Null).pipe(\n Schema.optional,\n);\n\nconst NullableBoolean = Schema.Union(Schema.Boolean, Schema.Null).pipe(\n Schema.optional,\n);\n\nexport const OAuthClient = Schema.Struct({\n id: Schema.String,\n client_name: Schema.String,\n client_id: NullableString,\n provider_id: Schema.String,\n authorization_endpoint: NullableString,\n token_endpoint: NullableString,\n discovery_endpoint: NullableString,\n redirect_to: NullableString,\n meta: Schema.Any.pipe(Schema.optional),\n use_shared_credentials: NullableBoolean,\n});\n\nexport type OAuthClient = Schema.Schema.Type<typeof OAuthClient>;\n\nexport const AddOAuthProviderResponse = Schema.Struct({\n provider: OAuthServiceProvider,\n});\n\nexport const AddOAuthClientResponse = Schema.Struct({\n client: OAuthClient,\n});\n\nexport const AuthorizedOriginResponse = Schema.Struct({\n origin: AuthorizedOrigin,\n});\n\nconst NullableArray = <A, I, R>(schema: Schema.Schema<A, I, R>) =>\n Schema.Union(Schema.Array(schema).pipe(Schema.mutable), Schema.Null).pipe(\n Schema.optional,\n );\n\nexport const AppsAuthResponse = Schema.Struct({\n authorized_redirect_origins: NullableArray(AuthorizedOrigin),\n oauth_service_providers: NullableArray(OAuthServiceProvider),\n oauth_clients: NullableArray(OAuthClient),\n});\n\nexport const getAppsAuth = Effect.fn(function* () {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .get(`/dash/apps/${targetAppId}/auth`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AppsAuthResponse)));\n});\n\nexport const addOAuthProvider = Effect.fn(function* (params: {\n appId?: string;\n providerName: string;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_service_providers`, {\n body: HttpBody.unsafeJson({\n provider_name: params.providerName,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AddOAuthProviderResponse),\n ),\n );\n});\n\nexport const addOAuthClient = Effect.fn(function* (params: {\n appId?: string;\n providerId: string;\n clientName: string;\n clientId?: string;\n clientSecret?: string;\n authorizationEndpoint?: string;\n tokenEndpoint?: string;\n discoveryEndpoint?: string;\n redirectTo?: string;\n meta?: unknown;\n useSharedCredentials?: boolean;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients`, {\n body: HttpBody.unsafeJson({\n provider_id: params.providerId,\n client_name: params.clientName,\n client_id: params.clientId,\n client_secret: params.clientSecret,\n authorization_endpoint: params.authorizationEndpoint,\n token_endpoint: params.tokenEndpoint,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n use_shared_credentials: params.useSharedCredentials,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\n// Due to the long prompt text, we use modifiers to manually create the prompt so we can\n// change it after submission.\nexport const promptForRedirectURI = Effect.fn(function* (\n existingValue?: string,\n) {\n if (existingValue) return existingValue;\n\n const result = yield* runUIEffect(\n new UI.TextInput({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URL (optional):\n${chalk.dim('With a custom redirect URL, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URL must forward to ${link('https://api.instantdb.com/runtime/oauth/callback')} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\nCustom redirect URL (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({\n message: `UI error for redirect URI: ${e.message}`,\n }),\n ),\n );\n\n return result === '' ? undefined : result;\n});\n\nexport const getOrCreateProvider = Effect.fn(function* (\n type: typeof ClientTypeSchema.Type,\n) {\n const auth = yield* getAppsAuth();\n const provider = auth.oauth_service_providers?.find(\n (entry) => entry.provider_name === type,\n );\n\n if (provider) {\n return { auth, provider };\n }\n\n const created = yield* addOAuthProvider({ providerName: type });\n return { auth, provider: created.provider };\n});\n\n// Returns prefix if unused; otherwise appends integers starting at 2.\n// e.g. findName('google', new Set(['google', 'google2'])) returns 'google3'.\nexport const findName = (prefix: string, used: Set<string>) => {\n if (!used.has(prefix)) {\n return prefix;\n }\n\n for (let i = 2; ; i++) {\n const candidate = `${prefix}${i}`;\n if (!used.has(candidate)) {\n return candidate;\n }\n }\n};\n\nexport const getClientNameAndProvider = Effect.fn(function* (\n providerType: typeof ClientTypeSchema.Type,\n opts: Record<string, unknown>,\n) {\n const { auth, provider } = yield* getOrCreateProvider(providerType);\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(providerType, usedClientNames);\n\n const clientName = yield* 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 return { provider, clientName };\n});\n\nexport const removeAuthorizedOrigin = Effect.fn(function* (originId: string) {\n const http = (yield* InstantHttpAuthed).pipe(\n withCommand('auth origin delete'),\n );\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .del(`/dash/apps/${appId}/authorized_redirect_origins/${originId}`)\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n\nexport const addAuthorizedOrigin = Effect.fn(function* (params: {\n service: Schema.Schema.Type<typeof AuthorizedOriginService>;\n params: string[];\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth origin add'));\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .post(`/dash/apps/${appId}/authorized_redirect_origins`, {\n body: HttpBody.unsafeJson({\n service: params.service,\n params: params.params,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "instant-cli",
3
3
  "type": "module",
4
- "version": "1.0.21-branch-cli-codex.25190616638.1",
4
+ "version": "1.0.21-branch-cli-codex.25190719720.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.21-branch-cli-codex.25190616638.1",
54
- "@instantdb/version": "1.0.21-branch-cli-codex.25190616638.1",
55
- "@instantdb/platform": "1.0.21-branch-cli-codex.25190616638.1"
53
+ "@instantdb/core": "1.0.21-branch-cli-codex.25190719720.1",
54
+ "@instantdb/platform": "1.0.21-branch-cli-codex.25190719720.1",
55
+ "@instantdb/version": "1.0.21-branch-cli-codex.25190719720.1"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@babel/core": "^7.17.9",
@@ -15,6 +15,7 @@ import {
15
15
  findName,
16
16
  getClientNameAndProvider,
17
17
  getOrCreateProvider,
18
+ type OAuthClient,
18
19
  } from '../../../lib/oauth.ts';
19
20
  import {
20
21
  DEFAULT_OAUTH_CALLBACK_URL,
@@ -181,10 +182,7 @@ const printGoogleDevCredentialsClient = Effect.fn(function* ({
181
182
  client,
182
183
  }: {
183
184
  appType: typeof GoogleAppTypeSchema.Type;
184
- client: {
185
- client_name: string;
186
- id: string;
187
- };
185
+ client: OAuthClient;
188
186
  }) {
189
187
  yield* Effect.log(
190
188
  boxen(
@@ -212,11 +210,7 @@ const printGoogleCustomCredentialsClient = Effect.fn(function* ({
212
210
  redirectUri,
213
211
  }: {
214
212
  appType: typeof GoogleAppTypeSchema.Type;
215
- client: {
216
- client_name: string;
217
- client_id?: string | null;
218
- id: string;
219
- };
213
+ client: OAuthClient;
220
214
  clientId: string | undefined;
221
215
  customRedirectUri: string | undefined;
222
216
  redirectUri: string | undefined;
package/src/lib/oauth.ts CHANGED
@@ -53,6 +53,8 @@ export const OAuthClient = Schema.Struct({
53
53
  use_shared_credentials: NullableBoolean,
54
54
  });
55
55
 
56
+ export type OAuthClient = Schema.Schema.Type<typeof OAuthClient>;
57
+
56
58
  export const AddOAuthProviderResponse = Schema.Struct({
57
59
  provider: OAuthServiceProvider,
58
60
  });