Files
floci-ui/packages/api/src/cloud-spi/userPoolsSchema.ts
T
2026-10-24 11:17:42 -04:00

104 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type {CloudProvider, FieldSchema, ServiceSchema, TableColumnSchema} from './types'
/** Cognito's own limit and character set for user pool names. */
export const USER_POOL_NAME_PATTERN = '^[\\w\\s+=,.@-]{1,128}$'
export const USER_POOL_SIGN_IN = ['email', 'username'] as const
export const USER_POOL_PASSWORD_POLICIES = ['default', 'relaxed'] as const
/** Cognito's group name rule: 1–128 letters, marks, symbols, digits or punctuation (no whitespace). Needs the `u` flag. */
export const USER_POOL_GROUP_NAME_PATTERN = '^[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]{1,128}$'
const userPoolColumns: TableColumnSchema[] = [
{name: 'name', label: 'Name'},
{name: 'id', label: 'Pool ID', format: 'code'},
{name: 'status', label: 'Status', format: 'badge'},
{name: 'createdAt', label: 'Created', format: 'datetime'},
]
const userPoolFilters: FieldSchema[] = [{name: 'search', label: 'Search', type: 'text', required: false}]
export function awsUserPoolsSchema(): ServiceSchema {
return {
cloud: 'aws',
service: 'userpools',
displayName: 'Amazon Cognito user pools',
fields: [
{
name: 'name',
label: 'Pool name',
type: 'text',
required: true,
validation: {pattern: USER_POOL_NAME_PATTERN, message: 'Use up to 128 letters, digits, spaces or + = , . @ _ -'},
},
{
name: 'signInWith',
label: 'Sign in with',
type: 'select',
required: false,
defaultValue: 'email',
description: 'Email makes the address the sign-in name; username keeps a separate user name.',
options: [{label: 'Email address', value: 'email'}, {label: 'Username', value: 'username'}],
},
{
name: 'passwordPolicy',
label: 'Password policy',
type: 'select',
required: false,
defaultValue: 'default',
description: 'Relaxed only requires 8 characters, which keeps local test users quick to create.',
options: [
{label: 'AWS default (upper, lower, number, symbol)', value: 'default'},
{label: 'Relaxed (8+ characters)', value: 'relaxed'},
],
},
{
name: 'createAppClient',
label: 'App client',
type: 'select',
required: false,
defaultValue: 'yes',
description: 'A public client (no secret) with username/password and refresh-token sign-in, named <pool>-client.',
options: [{label: 'Create an app client', value: 'yes'}, {label: 'No app client', value: 'no'}],
},
],
actions: ['list', 'create', 'delete', 'inspect'],
capabilities: {
resourceActions: [
{name: 'list', label: 'List user pools', enabled: true, status: 'available', runtimeRequired: true},
{name: 'create', label: 'Create user pool', enabled: true, status: 'available', runtimeRequired: true},
{name: 'delete', label: 'Delete user pool', enabled: true, status: 'available', runtimeRequired: true},
{name: 'inspect', label: 'Inspect user pool', enabled: true, status: 'available', runtimeRequired: true},
],
itemActions: [
{name: 'list', label: 'List users', enabled: true, status: 'available', runtimeRequired: true},
{name: 'get', label: 'Get user', enabled: true, status: 'available', runtimeRequired: true},
{name: 'put', label: 'Create user', enabled: true, status: 'available', runtimeRequired: true},
{name: 'delete', label: 'Delete user', enabled: true, status: 'available', runtimeRequired: true},
],
userPoolActions: [
{name: 'updateUser', label: 'Enable, disable, confirm, sign out or reset a user', enabled: true, status: 'available', runtimeRequired: true},
{name: 'setUserGroups', label: 'Change a user\'s groups', enabled: true, status: 'available', runtimeRequired: true},
{name: 'listGroups', label: 'List groups', enabled: true, status: 'available', runtimeRequired: true},
{name: 'createGroup', label: 'Create group', enabled: true, status: 'available', runtimeRequired: true},
{name: 'deleteGroup', label: 'Delete group', enabled: true, status: 'available', runtimeRequired: true},
{name: 'testSignIn', label: 'Test sign-in', enabled: true, status: 'available', runtimeRequired: true},
{name: 'describeClient', label: 'Show app client settings', enabled: true, status: 'available', runtimeRequired: true},
{name: 'updateClientOAuth', label: 'Change hosted sign-in and OAuth settings', enabled: true, status: 'available', runtimeRequired: true},
],
},
filters: userPoolFilters,
columns: userPoolColumns,
deleteImpact: [
{path: 'metadata.userCount', singular: 'user', plural: 'users'},
{path: 'metadata.appClients', singular: 'app client', plural: 'app clients'},
],
}
}
export const USER_POOL_OAUTH_FLOWS = ['code', 'implicit', 'client_credentials'] as const
/** Scopes every pool offers; resource servers can add their own. */
export const USER_POOL_STANDARD_SCOPES = ['openid', 'email', 'phone', 'profile', 'aws.cognito.signin.user.admin'] as const
export function userPoolsSchemaFor(cloud: CloudProvider): ServiceSchema | null {
return cloud === 'aws' ? awsUserPoolsSchema() : null
}