| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /**
- * Both CLI and self-hosted inject the same env vars.
- */
- import { assertSelfHosted } from './util'
- export type NonPlatformApiKey = {
- name: string
- api_key: string
- id: string
- type: 'legacy' | 'publishable' | 'secret'
- hash: string
- prefix: string
- description: string
- }
- /**
- * Length of the identifying prefix shown for a secret key before it is
- * revealed. Mirrors the platform management API and the `ApiKeyPill` UI.
- */
- const SECRET_KEY_VISIBLE_PREFIX_LENGTH = 15
- export function parseRevealQuery(value: string | string[] | undefined): boolean {
- const raw = Array.isArray(value) ? value[0] : value
- return raw === 'true'
- }
- export function getNonPlatformApiKeys(): NonPlatformApiKey[] {
- assertSelfHosted()
- const keys: NonPlatformApiKey[] = [
- {
- name: 'anon',
- api_key: process.env.SUPABASE_ANON_KEY ?? '',
- id: 'anon',
- type: 'legacy',
- hash: '',
- prefix: '',
- description: 'Legacy anon API key',
- },
- {
- name: 'service_role',
- api_key: process.env.SUPABASE_SERVICE_KEY ?? '',
- id: 'service_role',
- type: 'legacy',
- hash: '',
- prefix: '',
- description: 'Legacy service_role API key',
- },
- ]
- const publishableKey = process.env.SUPABASE_PUBLISHABLE_KEY
- if (publishableKey) {
- keys.push({
- name: 'publishable',
- api_key: publishableKey,
- id: 'publishable',
- type: 'publishable',
- hash: '',
- prefix: '',
- description: 'Publishable API key (anon role)',
- })
- }
- const secretKey = process.env.SUPABASE_SECRET_KEY
- if (secretKey) {
- keys.push({
- name: 'secret',
- api_key: secretKey,
- id: 'secret',
- type: 'secret',
- hash: '',
- // Only expose the prefix when the key is genuinely longer than the prefix.
- prefix:
- secretKey.length > SECRET_KEY_VISIBLE_PREFIX_LENGTH
- ? secretKey.slice(0, SECRET_KEY_VISIBLE_PREFIX_LENGTH)
- : '',
- description: 'Secret API key (service_role)',
- })
- }
- return keys
- }
- export function applyRevealToApiKey(key: NonPlatformApiKey, reveal: boolean): NonPlatformApiKey {
- if (key.type !== 'secret' || reveal) return key
- return { ...key, api_key: key.prefix }
- }
- export function getNonPlatformApiKeyById(
- id: string,
- reveal: boolean
- ): NonPlatformApiKey | undefined {
- const key = getNonPlatformApiKeys().find((entry) => entry.id === id)
- if (!key) return undefined
- return applyRevealToApiKey(key, reveal)
- }
|