| import { Type } from "@sinclair/typebox"; |
| import { ENV_SECRET_REF_ID_RE } from "../../../config/types.secrets.js"; |
| import { |
| EXEC_SECRET_REF_ID_JSON_SCHEMA_PATTERN, |
| FILE_SECRET_REF_ID_PATTERN, |
| SECRET_PROVIDER_ALIAS_PATTERN, |
| } from "../../../secrets/ref-contract.js"; |
| import { INPUT_PROVENANCE_KIND_VALUES } from "../../../sessions/input-provenance.js"; |
| import { SESSION_LABEL_MAX_LENGTH } from "../../../sessions/session-label.js"; |
| import { GATEWAY_CLIENT_IDS, GATEWAY_CLIENT_MODES } from "../client-info.js"; |
|
|
| export const NonEmptyString = Type.String({ minLength: 1 }); |
| export const CHAT_SEND_SESSION_KEY_MAX_LENGTH = 512; |
| export const ChatSendSessionKeyString = Type.String({ |
| minLength: 1, |
| maxLength: CHAT_SEND_SESSION_KEY_MAX_LENGTH, |
| }); |
| export const SessionLabelString = Type.String({ |
| minLength: 1, |
| maxLength: SESSION_LABEL_MAX_LENGTH, |
| }); |
| export const InputProvenanceSchema = Type.Object( |
| { |
| kind: Type.String({ enum: [...INPUT_PROVENANCE_KIND_VALUES] }), |
| originSessionId: Type.Optional(Type.String()), |
| sourceSessionKey: Type.Optional(Type.String()), |
| sourceChannel: Type.Optional(Type.String()), |
| sourceTool: Type.Optional(Type.String()), |
| }, |
| { additionalProperties: false }, |
| ); |
|
|
| export const GatewayClientIdSchema = Type.Union( |
| Object.values(GATEWAY_CLIENT_IDS).map((value) => Type.Literal(value)), |
| ); |
|
|
| export const GatewayClientModeSchema = Type.Union( |
| Object.values(GATEWAY_CLIENT_MODES).map((value) => Type.Literal(value)), |
| ); |
|
|
| export const SecretRefSourceSchema = Type.Union([ |
| Type.Literal("env"), |
| Type.Literal("file"), |
| Type.Literal("exec"), |
| ]); |
|
|
| const SecretProviderAliasString = Type.String({ |
| pattern: SECRET_PROVIDER_ALIAS_PATTERN.source, |
| }); |
|
|
| const EnvSecretRefSchema = Type.Object( |
| { |
| source: Type.Literal("env"), |
| provider: SecretProviderAliasString, |
| id: Type.String({ pattern: ENV_SECRET_REF_ID_RE.source }), |
| }, |
| { additionalProperties: false }, |
| ); |
|
|
| const FileSecretRefSchema = Type.Object( |
| { |
| source: Type.Literal("file"), |
| provider: SecretProviderAliasString, |
| id: Type.String({ pattern: FILE_SECRET_REF_ID_PATTERN.source }), |
| }, |
| { additionalProperties: false }, |
| ); |
|
|
| const ExecSecretRefSchema = Type.Object( |
| { |
| source: Type.Literal("exec"), |
| provider: SecretProviderAliasString, |
| id: Type.String({ pattern: EXEC_SECRET_REF_ID_JSON_SCHEMA_PATTERN }), |
| }, |
| { additionalProperties: false }, |
| ); |
|
|
| export const SecretRefSchema = Type.Union([ |
| EnvSecretRefSchema, |
| FileSecretRefSchema, |
| ExecSecretRefSchema, |
| ]); |
|
|
| export const SecretInputSchema = Type.Union([Type.String(), SecretRefSchema]); |
|
|