1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-25 00:07:47 +01:00
unleash.unleash/src/lib/openapi/spec/advanced-playground-request-schema.ts
Thomas Heartman 3fb00b281c
fix: disallow empty list of envs and invalid env names in advanced playground (#4060)
This PR changes the OpenAPI schema for the advanced playground to not
accept empty lists of environments and to not accept environment names
that don't match the env name pattern we use.

The pattern is the same as the one we use for controlling environment
names on creation.

However, there is a (small) chance that these may get out of sync later,
so we could do something to only define this pattern once (and import it
in the enterprise package), but that may be more work than is necessary,
and I'd suggest we do that later.

I've also added a minLength to the string items although it isn't
strictly necessary. It's primarily to give the users better feedback if
the name is empty.
2023-06-22 09:01:10 +00:00

53 lines
1.6 KiB
TypeScript

import { FromSchema } from 'json-schema-to-ts';
import { ALL } from '../../types/models/api-token';
import { sdkContextSchema } from './sdk-context-schema';
export const advancedPlaygroundRequestSchema = {
$id: '#/components/schemas/advancedPlaygroundRequestSchema',
description:
'Data for the playground API to evaluate toggles in advanced mode with environment and context multi selection',
type: 'object',
required: ['environments', 'context'],
properties: {
environments: {
type: 'array',
items: {
type: 'string',
minLength: 1,
pattern: '^[a-zA-Z0-9~_.-]+$',
},
minItems: 1,
example: ['development', 'production'],
description: 'The environments to evaluate toggles in.',
},
projects: {
description: 'A list of projects to check for toggles in.',
oneOf: [
{
type: 'array',
items: { type: 'string' },
example: ['my-project'],
description: 'A list of projects to check for toggles in.',
},
{
type: 'string',
enum: [ALL],
description: 'Check toggles in all projects.',
},
],
},
context: {
$ref: sdkContextSchema.$id,
},
},
components: {
schemas: {
sdkContextSchema,
},
},
} as const;
export type AdvancedPlaygroundRequestSchema = FromSchema<
typeof advancedPlaygroundRequestSchema
>;