{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst Text = Type.String();\nconst Optional = Type.Optional;\nconst Strings = Type.Array(Text);\nconst NullableText = Type.Union([Text, Type.Null()]);\nconst Scope = Type.Union([Type.Literal('global'), Type.Literal('repository')]);\nconst Origin = Type.Union([Type.Literal('global'), Type.Literal('repository'), Type.Literal('default')]);\nexport const SettingsConfigSchema = Type.Object({\n  repoRoot: Text,\n  hashes: Type.Object({ global: Text, repository: Text }),\n  values: Type.Record(\n    Text,\n    Type.Object({\n      value: Optional(Text),\n      origin: Origin,\n      scope: Type.Union([Scope, Type.Literal('both')]),\n    }),\n  ),\n});\nconst SettingsEditSchema = Type.Object({ keyPath: Strings, value: Type.Union([Text, Type.Number(), Type.Null()]) });\nexport const SettingsWriteSchema = Type.Union([\n  Type.Object({ repoRoot: Text, scope: Scope, ...SettingsEditSchema.properties, expectedHash: Text }),\n  Type.Object({\n    repoRoot: Text,\n    scope: Scope,\n    edits: Type.Array(SettingsEditSchema, { minItems: 1, maxItems: 100 }),\n    expectedHash: Text,\n  }),\n]);\n\nconst Repository = Type.Object({ id: Text, name: Text, path: Text, active: Type.Boolean() });\nconst Catalog = Type.Array(\n  Type.Object({ name: Text, description: Optional(Text), expandsTo: Optional(Strings), layers: Optional(Strings) }),\n);\nconst SelectionText = Type.Object({ effective: Optional(Text), repository: Optional(Text), origin: Origin });\nconst SelectionStrings = Type.Object({ effective: Optional(Strings), repository: Optional(Strings), origin: Origin });\nexport const RepositorySettingsSchema = Type.Object({\n  repository: Repository,\n  hash: Text,\n  catalogs: Type.Object({ majorModes: Catalog, domains: Catalog, profiles: Catalog }),\n  selection: Type.Object({ majorMode: SelectionText, domains: SelectionStrings, profile: SelectionText }),\n});\nexport const RepositorySelectionWriteSchema = Type.Object({\n  repositoryId: Text,\n  expectedHash: Text,\n  changes: Type.Object({\n    majorMode: Optional(NullableText),\n    domains: Optional(Type.Union([Strings, Type.Null()])),\n    profile: Optional(NullableText),\n  }),\n});\nconst Images = Type.Object({\n  autoResize: Type.Boolean(),\n  maxDimension: Type.Number(),\n  minDimension: Type.Number(),\n  maxAllowedDimension: Type.Number(),\n});\nconst http: DoomHttpContract[] = (['global', 'workspace'] as const).flatMap((scope) => {\n  const common = { scope, basePath: 'settings', authentication: 'owner' as const };\n  return [\n    {\n      ...common,\n      id: 'config',\n      path: '/',\n      method: 'GET',\n      description: 'Read selected settings keys and file hashes.',\n      parameters: [{ name: 'key', in: 'query', required: false, schema: Strings }],\n      responses: jsonApiResponses(SettingsConfigSchema),\n    },\n    {\n      ...common,\n      id: 'value',\n      path: '/value',\n      method: 'PUT',\n      description: 'Write a setting with an optimistic file hash.',\n      body: { contentType: 'application/json', required: true, schema: SettingsWriteSchema },\n      responses: jsonApiResponses(SettingsConfigSchema),\n    },\n    {\n      ...common,\n      id: 'repositories',\n      path: '/repositories',\n      method: 'GET',\n      description: 'List admitted repositories.',\n      responses: jsonApiResponses(Type.Object({ repositories: Type.Array(Repository) })),\n    },\n    {\n      ...common,\n      id: 'repository',\n      path: '/repository',\n      method: 'GET',\n      description: 'Read the mounted workspace catalog and selection.',\n      availability: 'Requires a workspace mount; global returns 404.',\n      responses: jsonApiResponses(RepositorySettingsSchema),\n    },\n    {\n      ...common,\n      id: 'selection',\n      path: '/repository/selection',\n      method: 'PUT',\n      description: 'Update the mounted workspace selection.',\n      availability: 'Requires a workspace mount; global returns 404.',\n      body: { contentType: 'application/json', required: true, schema: RepositorySelectionWriteSchema },\n      responses: jsonApiResponses(RepositorySettingsSchema),\n    },\n    ...(scope === 'global'\n      ? [\n          {\n            ...common,\n            id: 'images.get',\n            path: '/images',\n            method: 'GET' as const,\n            description: 'Read image resizing limits.',\n            responses: jsonApiResponses(Images),\n          },\n          {\n            ...common,\n            id: 'images.put',\n            path: '/images',\n            method: 'PUT' as const,\n            description: 'Update image resizing settings; dimensions are clamped.',\n            body: {\n              contentType: 'application/json',\n              required: true,\n              schema: Type.Object({ autoResize: Optional(Type.Boolean()), maxDimension: Optional(Type.Number()) }),\n            },\n            responses: jsonApiResponses(Images),\n          },\n        ]\n      : []),\n  ] satisfies DoomHttpContract[];\n});\nexport const apiContracts = defineApiContract({ version: 1, http, sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":"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"}