{"version":3,"sources":["../src/lib/openapi/find-common-openapi-schema-properties.ts","../src/lib/openapi/flatten-openapi-schema.ts","../src/lib/openapi/schemas.ts","../src/lib/json.ts","../src/lib/samples/json.ts","../src/lib/samples/csharp.ts","../src/lib/samples/curl.ts","../src/lib/samples/format.ts","../src/lib/samples/go.ts","../src/lib/samples/java.ts","../src/lib/samples/javascript.ts","../src/lib/samples/php.ts","../src/lib/samples/python.ts","../src/lib/samples/ruby.ts","../src/lib/samples/seam-cli.ts","../src/lib/samples/syntax.ts","../src/lib/samples/code-sample.ts","../src/lib/samples/resource-sample.ts","../src/lib/seam.ts","../src/lib/blueprint.ts"],"names":["z","pascalCase","camelCase","isPrimitiveValue","getPrimitiveTypeName","isPathNested","snakeCase","kebabCase","ResourceSchema","path","operation","request"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { OpenapiSchema } from 'lib/openapi/types.js'\n\nexport function findCommonOpenapiSchemaProperties(\n  schemas: OpenapiSchema[],\n): Record<string, OpenapiSchema> {\n  const firstSchema = schemas[0]\n  if (schemas.length === 0 || firstSchema?.properties == null) {\n    return {}\n  }\n\n  return Object.entries(firstSchema.properties).reduce<\n    Record<string, OpenapiSchema>\n  >((commonProps, [propKey, propValue]) => {\n    const isPropInAllSchemas = schemas.every((schema) =>\n      Object.keys(schema.properties ?? {}).includes(propKey),\n    )\n\n    if (!isPropInAllSchemas) {\n      return commonProps\n    }\n\n    if ('enum' in propValue) {\n      const mergedEnumValues = schemas.reduce<string[]>((allEnums, schema) => {\n        const enumValues = schema.properties?.[propKey]?.enum ?? []\n        return [...new Set([...allEnums, ...enumValues])]\n      }, [])\n\n      return {\n        ...commonProps,\n        [propKey]: { ...propValue, enum: mergedEnumValues },\n      }\n    }\n\n    return { ...commonProps, [propKey]: propValue }\n  }, {})\n}\n","import type { OpenapiSchema } from './types.js'\n\nexport const flattenOpenapiSchema = (schema: OpenapiSchema): OpenapiSchema => {\n  if ('allOf' in schema && Array.isArray(schema.allOf)) {\n    return flattenAllOfSchema(schema as { allOf: OpenapiSchema[] })\n  }\n\n  if ('oneOf' in schema && Array.isArray(schema.oneOf)) {\n    return flattenOneOfSchema(schema as { oneOf: OpenapiSchema[] })\n  }\n\n  if (schema.type === 'object' && schema.properties != null) {\n    const flattenedProperties: Record<string, OpenapiSchema> = {}\n\n    for (const [propKey, propSchema] of Object.entries(schema.properties)) {\n      flattenedProperties[propKey] = flattenOpenapiSchema(propSchema)\n    }\n\n    return { ...schema, properties: flattenedProperties }\n  }\n\n  if (schema.type === 'array' && schema.items != null) {\n    return { ...schema, items: flattenOpenapiSchema(schema.items) }\n  }\n\n  return schema\n}\n\ntype AllOfSchema = OpenapiSchema & Required<Pick<OpenapiSchema, 'allOf'>>\n\nexport const flattenAllOfSchema = (schema: AllOfSchema): OpenapiSchema => {\n  const flattenedSchema: OpenapiSchema &\n    Required<Pick<OpenapiSchema, 'type' | 'properties' | 'required'>> = {\n    type: 'object',\n    properties: {},\n    required: [],\n    ...(schema?.description != null && { description: schema.description }),\n    ...(schema['x-property-groups'] != null && {\n      'x-property-groups': schema['x-property-groups'],\n    }),\n  }\n\n  const flattenedSubschemas = schema.allOf.map(flattenOpenapiSchema)\n\n  for (const flattenedSubschema of flattenedSubschemas) {\n    if (flattenedSubschema.properties != null) {\n      flattenedSchema.properties = {\n        ...flattenedSchema.properties,\n        ...flattenedSubschema.properties,\n      }\n    }\n\n    if (\n      flattenedSubschema.required != null &&\n      Array.isArray(flattenedSubschema.required)\n    ) {\n      flattenedSchema.required = Array.from(\n        new Set([...flattenedSchema.required, ...flattenedSubschema.required]),\n      )\n    }\n  }\n\n  for (const [propKey, propSchema] of Object.entries(\n    flattenedSchema.properties,\n  )) {\n    if ('enum' in propSchema && Array.isArray(propSchema.enum)) {\n      const enumValues = new Set<string>()\n\n      for (const subschema of flattenedSubschemas) {\n        const enumProp = subschema.properties?.[propKey]\n        if (\n          enumProp != null &&\n          'enum' in enumProp &&\n          Array.isArray(enumProp.enum)\n        ) {\n          enumProp.enum.forEach((val) => enumValues.add(val))\n        }\n      }\n\n      flattenedSchema.properties[propKey] = {\n        ...propSchema,\n        enum: Array.from(enumValues),\n      }\n    }\n  }\n\n  return flattenedSchema\n}\n\ntype OneOfSchema = OpenapiSchema & Required<Pick<OpenapiSchema, 'oneOf'>>\n\nexport const flattenOneOfSchema = (schema: OneOfSchema): OpenapiSchema => {\n  const baseFlattenedSchema: OpenapiSchema = {\n    ...(schema?.description != null && { description: schema.description }),\n  }\n  const flattenedSubschemas = schema.oneOf.map(flattenOpenapiSchema)\n\n  if (\n    flattenedSubschemas.every(\n      (s) => s.type === 'string' && Array.isArray(s.enum),\n    )\n  ) {\n    const mergedEnums = Array.from(\n      new Set(flattenedSubschemas.flatMap((s) => s.enum ?? [])),\n    )\n\n    return {\n      ...baseFlattenedSchema,\n      type: 'string',\n      enum: mergedEnums,\n    }\n  } else {\n    let mergedProperties: Record<string, OpenapiSchema> = {}\n    const requiredFieldsLists: string[][] = []\n\n    for (const flattenedSubschema of flattenedSubschemas) {\n      if (flattenedSubschema.properties != null) {\n        mergedProperties = {\n          ...mergedProperties,\n          ...flattenedSubschema.properties,\n        }\n      }\n\n      if (\n        flattenedSubschema.required != null &&\n        Array.isArray(flattenedSubschema.required)\n      ) {\n        requiredFieldsLists.push(flattenedSubschema.required)\n      } else {\n        requiredFieldsLists.push([])\n      }\n    }\n\n    for (const [propKey, propSchema] of Object.entries(mergedProperties)) {\n      if ('enum' in propSchema && Array.isArray(propSchema.enum)) {\n        const enumValues = new Set<string>()\n\n        for (const subschema of flattenedSubschemas) {\n          const enumProp = subschema.properties?.[propKey]\n          if (\n            enumProp != null &&\n            'enum' in enumProp &&\n            Array.isArray(enumProp.enum)\n          ) {\n            enumProp.enum.forEach((val) => enumValues.add(val))\n          }\n        }\n\n        mergedProperties[propKey] = {\n          ...propSchema,\n          enum: Array.from(enumValues),\n        }\n      }\n    }\n\n    let commonRequiredFields: string[] = []\n    if (requiredFieldsLists.length > 0) {\n      commonRequiredFields = requiredFieldsLists.reduce(\n        (commonRequired, currentRequiredFields) =>\n          commonRequired.filter((field) =>\n            currentRequiredFields.includes(field),\n          ),\n      )\n    }\n\n    return {\n      ...baseFlattenedSchema,\n      type: 'object',\n      properties: mergedProperties,\n      required: commonRequiredFields,\n    }\n  }\n}\n","import { z } from 'zod'\n\nexport const ParameterSchema = z.object({\n  name: z.string(),\n  in: z.enum(['query', 'header', 'path', 'cookie']),\n  description: z.string().default(''),\n  required: z.boolean().default(false),\n  schema: z\n    .object({\n      type: z.string(),\n      format: z.string().optional(),\n    })\n    .optional(),\n  deprecated: z.boolean().default(false),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n})\n\nconst ResponseSchema = z.record(\n  z.string(),\n  z.object({\n    description: z.string(),\n    content: z\n      .record(\n        z.string(),\n        z.object({\n          schema: z.object({\n            $ref: z.string().optional(),\n            type: z.string().optional(),\n            items: z\n              .object({\n                $ref: z.string(),\n              })\n              .optional(),\n          }),\n        }),\n      )\n      .optional(),\n  }),\n)\n\nexport const AuthMethodSchema = z\n  .enum([\n    'api_key',\n    'client_session',\n    'client_session_with_customer',\n    'console_session_token_with_workspace',\n    'console_session_token_without_workspace',\n    'pat_with_workspace',\n    'pat_without_workspace',\n    'publishable_key',\n    'unknown',\n  ])\n  .catch('unknown')\n\nexport const OpenapiOperationSchema = z.object({\n  operationId: z.string(),\n  summary: z.string().optional(),\n  description: z.string().default(''),\n  parameters: z.array(ParameterSchema).optional(),\n  requestBody: z\n    .object({\n      content: z.record(\n        z.string(),\n        z.object({\n          schema: z.object({\n            $ref: z.string().optional(),\n            type: z.string().optional(),\n          }),\n        }),\n      ),\n    })\n    .optional(),\n  responses: ResponseSchema,\n  security: z\n    .array(z.record(z.string().pipe(AuthMethodSchema), z.array(z.never())))\n    .default([]),\n  deprecated: z.boolean().default(false),\n  'x-response-key': z.string().nullable().optional(),\n  'x-batch-keys': z.array(z.string()).optional(),\n  'x-title': z.string().default(''),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n  'x-action-attempt-type': z.string().optional(),\n})\n\nexport const EnumValueSchema = z.object({\n  description: z.string().default(''),\n  undocumented: z.string().default(''),\n  deprecated: z.string().default(''),\n  draft: z.string().default(''),\n})\n\nconst PropertyGroupSchema = z\n  .record(\n    z.string(),\n    z.object({\n      name: z.string(),\n    }),\n  )\n  .default({})\n\nconst VariantGroupSchema = PropertyGroupSchema\n\nconst commonPropertyFields = {\n  description: z.string().default(''),\n  deprecated: z.boolean().default(false),\n  default: z.any().optional(),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n  'x-property-group-key': z.string().default(''),\n  'x-property-groups': PropertyGroupSchema,\n  'x-variant-groups': VariantGroupSchema,\n}\n\nexport const PropertySchema: z.ZodSchema = z.union([\n  z.object({\n    type: z.enum(['string', 'number', 'integer', 'boolean', 'array', 'object']),\n    ...commonPropertyFields,\n    enum: z.array(z.string().or(z.boolean())).optional(),\n    'x-enums': z.record(z.string(), EnumValueSchema).optional(),\n    format: z.string().optional(),\n    $ref: z.string().optional(),\n  }),\n\n  z.object({\n    oneOf: z.array(z.lazy(() => PropertySchema)),\n    ...commonPropertyFields,\n    discriminator: z.object({ propertyName: z.string() }).optional(),\n  }),\n\n  z.object({\n    allOf: z.array(z.lazy(() => PropertySchema)),\n    ...commonPropertyFields,\n  }),\n])\n\nexport const ResourceSchema = z.object({\n  type: z.literal('object'),\n  properties: z.record(z.string(), PropertySchema),\n  required: z.array(z.string()).default([]),\n  description: z.string().default(''),\n  'x-route-path': z.string().default(''),\n  'x-undocumented': z.string().default(''),\n  'x-deprecated': z.string().default(''),\n  'x-draft': z.string().default(''),\n  'x-property-groups': PropertyGroupSchema,\n  'x-variant-groups': VariantGroupSchema,\n})\n\nexport const EventResourceSchema = z.object({\n  'x-route-path': z.string().default(''),\n  discriminator: z.object({ propertyName: z.string() }),\n  oneOf: z.array(ResourceSchema),\n})\n","import { z } from 'zod'\n\n// https://zod.dev/?id=json-type\nconst LiteralSchema = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\ntype Literal = z.infer<typeof LiteralSchema>\n\nexport type Json = Literal | { [key: string]: Json } | Json[]\n\nexport type NonNullJson = Exclude<Json, null>\n\nexport const JsonSchema: z.ZodType<Json> = z.lazy(() =>\n  z.union([LiteralSchema, z.array(JsonSchema), z.record(JsonSchema)]),\n)\n","import type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport type {\n  ResourceSampleContext,\n  ResourceSampleDefinition,\n} from './resource-sample.js'\n\nexport const createJsonResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n  if (endpoint.response.responseType === 'void') {\n    return JSON.stringify({})\n  }\n  const { responseKey } = endpoint.response\n  const data = response?.body?.[responseKey]\n  if (data == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n  return JSON.stringify(data)\n}\n\nexport const createJsonResourceData = (\n  { properties }: ResourceSampleDefinition,\n  _context: ResourceSampleContext,\n): string => JSON.stringify(properties)\n","import { camelCase, pascalCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResponse } from './json.js'\n\nexport const createCsharpRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/').slice(1)\n  const requestArgs = formatCsharpArgs(request.parameters)\n\n  return `seam.${parts.map((p) => pascalCase(p)).join('.')}(${requestArgs})`\n}\n\nconst formatCsharpArgs = (jsonParams: NonNullJson): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([key, value]) => {\n      const formattedValue = formatCsharpValue(key, value)\n      return `${camelCase(key)}: ${formattedValue}`\n    })\n    .join(', ')\n\nconst formatCsharpValue = (key: string, value: Json): string => {\n  if (value == null) return 'null'\n  if (typeof value === 'boolean') return value.toString()\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n  if (Array.isArray(value)) {\n    return formatCsharpArray(key, value)\n  }\n  if (typeof value === 'object') {\n    return formatCsharpObject(value)\n  }\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nconst formatCsharpArray = (key: string, value: Json[]): string => {\n  if (value.length === 0) {\n    return 'new object[] { }'\n  }\n\n  const formattedItems = value.map((v) => formatCsharpValue(key, v))\n  const item = value[0]\n  if (item == null) {\n    throw new Error(`Null value in response array for '${key}'`)\n  }\n\n  const arrayType = isPrimitiveValue(item)\n    ? getPrimitiveTypeName(item)\n    : 'object'\n\n  return `new ${arrayType}[] { ${formattedItems.join(', ')}} `\n}\n\nconst isPrimitiveValue = (value: Json): boolean =>\n  value !== null && typeof value !== 'object'\n\nconst getPrimitiveTypeName = (value: Json): string => {\n  switch (typeof value) {\n    case 'string':\n      return 'string'\n    case 'number':\n      return 'float'\n    case 'boolean':\n      return 'bool'\n    default:\n      throw new Error(`Unsupported type: ${typeof value}`)\n  }\n}\n\nconst formatCsharpObject = (value: Record<string, Json>): string => {\n  if (Object.keys(value).length === 0) {\n    return 'new { }'\n  }\n\n  const formattedEntries = Object.entries(value)\n    .map(\n      ([objKey, val]) =>\n        `${camelCase(objKey)} = ${formatCsharpValue(objKey, val)}`,\n    )\n    .join(', ')\n\n  return `new { ${formattedEntries} }`\n}\n\nexport const createCsharpResponse = createJsonResponse\n","import type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nconst BASE_URL = 'https://connect.getseam.com'\n\nexport const createCurlRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const method = 'POST'\n  const url = `${BASE_URL}${request.path}`\n\n  let curlCommand = `curl --include --request ${method} \"${url}\" \\\\\\n`\n  curlCommand += '  --header \"Authorization: Bearer $SEAM_API_KEY\"'\n\n  const params = request.parameters\n  const hasParams = Object.keys(params).length > 0\n\n  if (hasParams) {\n    curlCommand += ' \\\\\\n'\n    curlCommand += '  --json @- << EOF\\n'\n    curlCommand += JSON.stringify(request.parameters, null, 2)\n    curlCommand += '\\nEOF'\n  }\n\n  return curlCommand\n}\n\nexport const createCurlResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n  if (endpoint.response.responseType === 'void') {\n    return JSON.stringify({})\n  }\n  const { responseKey } = endpoint.response\n  const data = response?.body?.[responseKey]\n  if (data == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n  return JSON.stringify({ [responseKey]: data })\n}\n","import type { Code, CodeSampleContext } from './code-sample.js'\nimport type { Resource, ResourceSampleContext } from './resource-sample.js'\n\ntype CodeEntries = Entries<Code>\ntype CodeEntry = NonNullable<CodeEntries[number]>\n\nexport const formatCodeRecords = async (\n  code: Code,\n  context: CodeSampleContext,\n): Promise<Code> => {\n  const entries = Object.entries(code) as unknown as CodeEntries\n  const formattedEntries = await Promise.all(\n    entries.map(async (entry): Promise<CodeEntry> => {\n      if (entry == null) throw new Error('Unexpected null code entry')\n      return await formatCodeEntry(entry, context)\n    }),\n  )\n  return Object.fromEntries(formattedEntries)\n}\n\nconst formatCodeEntry = async (\n  [key, code]: CodeEntry,\n  { formatCode }: CodeSampleContext,\n): Promise<CodeEntry> => {\n  if (code == null) throw new Error(`Unexpected null in code object for ${key}`)\n  const [request, response] = await Promise.all([\n    await formatCode(code.request, code.request_syntax),\n    await formatCode(code.response, code.response_syntax),\n  ])\n  return [\n    key,\n    {\n      ...code,\n      request,\n      response,\n    },\n  ]\n}\n\ntype ResourceEntries = Entries<Resource>\ntype ResourceEntry = NonNullable<ResourceEntries[number]>\n\nexport const formatResourceRecords = async (\n  resource: Resource,\n  context: ResourceSampleContext,\n): Promise<Resource> => {\n  const entries = Object.entries(resource) as unknown as ResourceEntries\n  const formattedEntries = await Promise.all(\n    entries.map(async (entry): Promise<ResourceEntry> => {\n      if (entry == null) throw new Error('Unexpected null resource entry')\n      return await formatResourceEntry(entry, context)\n    }),\n  )\n  return Object.fromEntries(formattedEntries)\n}\n\nconst formatResourceEntry = async (\n  [key, resource]: ResourceEntry,\n  { formatCode }: ResourceSampleContext,\n): Promise<ResourceEntry> => {\n  if (resource == null) {\n    throw new Error(`Unexpected null in resource object for ${key}`)\n  }\n  const resourceData = await formatCode(\n    resource.resource_data,\n    resource.resource_data_syntax,\n  )\n  return [\n    key,\n    {\n      ...resource,\n      resource_data: resourceData,\n    },\n  ]\n}\n\ntype Entries<T> = Array<\n  {\n    [K in keyof T]: [K, T[K]]\n  }[keyof T]\n>\n","import { pascalCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nconst defaultGoPackageName = 'api'\nconst goPackageBasePath = 'github.com/seamapi/go'\n\nexport const createGoRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const isReqWithParams = Object.keys(request.parameters).length !== 0\n  const goPackageName = getGoPackageName(request.path)\n\n  const goSdkImports = generateImports({\n    goPackageName,\n    isReqWithParams,\n  })\n\n  const requestStructName = getRequestStructName(request.path)\n  const formattedArgs = formatGoRequestArgs(request.parameters, {\n    goPackageName,\n    requestStructName,\n  })\n  const goSdkRequestArgs = `context.Background()${isReqWithParams ? `,\\n${goPackageName}.${requestStructName}{\\n${formattedArgs},\\n}` : ''}`\n\n  const pathParts = request.path.split('/')\n\n  return `package main\n  ${goSdkImports}\n\n  func main() {\n  client${pathParts.map((p) => pascalCase(p)).join('.')}(${isReqWithParams ? '\\n' : ''}${goSdkRequestArgs},\\n)\n  }\n  `.trim()\n}\n\nconst getGoPackageName = (path: string): string => {\n  if (!isPathNested(path)) {\n    return defaultGoPackageName\n  }\n\n  const firstPathPart = path.split('/').slice(1)[1]\n\n  if (firstPathPart == null) {\n    throw new Error(`Invalid path: missing second part in \"${path}\"`)\n  }\n\n  return firstPathPart.replace(/_/g, '')\n}\n\nconst isPathNested = (path: string): boolean =>\n  path.split('/').slice(1).length > 2\n\nconst generateImports = ({\n  goPackageName,\n  isReqWithParams,\n}: {\n  goPackageName: string\n  isReqWithParams: boolean\n}): string => {\n  const imports: string[] = []\n\n  if (isReqWithParams) {\n    const defaultPackageImport = `import ${defaultGoPackageName} \"${goPackageBasePath}\"`\n    imports.push(defaultPackageImport)\n  }\n\n  if (goPackageName !== defaultGoPackageName && isReqWithParams) {\n    const nestedPackageImport = `import ${goPackageName} \"${goPackageBasePath}/${goPackageName}\"`\n    imports.push(nestedPackageImport)\n  }\n\n  return imports.join('\\n')\n}\n\nconst getRequestStructName = (path: string): string => {\n  const requestStructNameSuffix = 'Request'\n\n  return isPathNested(path)\n    ? `${pascalCase(removeUntilSecondSlash(path))}${requestStructNameSuffix}`\n    : `${pascalCase(path)}${requestStructNameSuffix}`\n}\n\nconst removeUntilSecondSlash = (str: string): string =>\n  str.replace(/^\\/[^/]*/, '')\n\ninterface GoContext {\n  goPackageName: string\n  requestStructName: string\n}\n\nconst formatGoRequestArgs = (\n  jsonParams: NonNullJson,\n  context: GoContext,\n): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue = formatGoRequestArgValue(\n        paramKey,\n        paramValue,\n        context,\n      )\n      return `${pascalCase(paramKey)}: ${formattedValue}`\n    })\n    .join(',\\n')\n\nconst formatGoRequestArgValue = (\n  key: string,\n  value: Json,\n  context: GoContext,\n): string => {\n  if (value == null) return 'nil'\n  if (typeof value === 'string') {\n    return `${defaultGoPackageName}.String(\"${value}\")`\n  }\n  if (typeof value === 'boolean') {\n    return `${defaultGoPackageName}.Bool(${value})`\n  }\n  if (typeof value === 'number') {\n    return `${defaultGoPackageName}.Float64(${value})`\n  }\n\n  if (Array.isArray(value)) {\n    return formatGoRequestArrayValue(key, value, context)\n  }\n\n  if (typeof value === 'object') {\n    return formatGoRequestObjectValue(key, value, context)\n  }\n\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nconst formatGoRequestArrayValue = (\n  key: string,\n  value: Json[],\n  context: GoContext,\n): string => {\n  if (value.length === 0) {\n    // in Go there's no way define an empty array without specifying type\n    // and code samples definitions don't include the type annotations\n    return 'nil'\n  }\n\n  const formattedItems = value.map((v) =>\n    formatGoRequestArgValue(key, v, context),\n  )\n  const item = value[0]\n  if (item == null) {\n    throw new Error(`Null value in response array for '${key}'`)\n  }\n\n  const { goPackageName, requestStructName } = context\n\n  const arrayType = isPrimitiveValue(item)\n    ? getPrimitiveTypeName(item)\n    : `${goPackageName}.${pascalCase(`${requestStructName} ${key}`)}Item`\n\n  return `[${value.length}]${arrayType}{${formattedItems.join(', ')}}`\n}\n\nconst isPrimitiveValue = (value: Json): value is string | number | boolean =>\n  typeof value !== 'object' && value !== null\n\nconst getPrimitiveTypeName = (value: string | number | boolean): string => {\n  switch (typeof value) {\n    case 'string':\n      return 'string'\n    case 'number':\n      return 'float64'\n    case 'boolean':\n      return 'bool'\n  }\n}\n\nconst formatGoRequestObjectValue = (\n  key: string,\n  value: Record<string, Json>,\n  context: GoContext,\n): string => {\n  if (Object.keys(value).length === 0) {\n    return 'struct{}{}'\n  }\n\n  const formattedEntries = Object.entries(value)\n    .map(\n      ([objKey, val]) =>\n        `${pascalCase(objKey)}: ${formatGoRequestArgValue(objKey, val, context)}`,\n    )\n    .join(', ')\n\n  const { goPackageName, requestStructName } = context\n\n  return `${goPackageName}.${pascalCase(`${requestStructName} ${key}`)}{${formattedEntries}}`\n}\n\nexport const createGoResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'nil'\n\n  const { responseKey, resourceType } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  const responseResourceGoStructName = pascalCase(resourceType)\n\n  return Array.isArray(responseValue)\n    ? formatGoArrayResponse(responseValue, responseResourceGoStructName, title)\n    : formatGoResponse(responseValue, responseResourceGoStructName)\n}\n\nconst formatGoArrayResponse = (\n  responseArray: Json[],\n  responseResourceGoStructName: string,\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((v) => {\n      if (v == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatGoResponse(v, responseResourceGoStructName)\n    })\n    .join(', ')\n\n  return `[]${defaultGoPackageName}.${responseResourceGoStructName}{${formattedItems}}`\n}\n\nconst formatGoResponse = (\n  responseParams: NonNullJson,\n  responseResourceGoStructName: string,\n): string => {\n  const params = formatGoResponseParams(\n    responseParams,\n    responseResourceGoStructName,\n  )\n  return `${defaultGoPackageName}.${responseResourceGoStructName}{${params}}`\n}\n\nconst formatGoResponseParams = (\n  jsonParams: NonNullJson,\n  responseResourceGoStructName: string,\n): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue = formatGoResponseParamValue(\n        {\n          key: paramKey,\n          value: paramValue,\n          propertyChain: [],\n        },\n        responseResourceGoStructName,\n      )\n      return `${pascalCase(paramKey)}: ${formattedValue}`\n    })\n    .join(', ')\n\nconst formatGoResponseParamValue = (\n  {\n    key,\n    value,\n    propertyChain,\n  }: { key: string; value: Json; propertyChain: string[] },\n  responseResourceGoStructName: string,\n): string => {\n  if (value === null) return 'nil'\n  if (typeof value === 'boolean') return value.toString()\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n\n  if (Array.isArray(value)) {\n    return formatGoResponseArrayValue(\n      { key, value, propertyChain },\n      responseResourceGoStructName,\n    )\n  }\n\n  if (typeof value === 'object') {\n    return formatGoResponseObjectValue(\n      { key, value, propertyChain },\n      responseResourceGoStructName,\n    )\n  }\n\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nconst formatGoResponseArrayValue = (\n  {\n    key,\n    value,\n    propertyChain,\n  }: { key: string; value: Json[]; propertyChain: string[] },\n  responseResourceGoStructName: string,\n): string => {\n  if (value.length === 0) {\n    return 'nil'\n  }\n\n  const rawItem = value[0]\n  if (rawItem == null) {\n    throw new Error(`Null value in response array for '${key}'`)\n  }\n\n  const updatedPropertyChain = [...propertyChain, key]\n\n  const formattedItems = value.map((v) =>\n    formatGoResponseParamValue(\n      { key, value: v, propertyChain: updatedPropertyChain },\n      responseResourceGoStructName,\n    ),\n  )\n\n  if (isPrimitiveValue(rawItem)) {\n    const arrayType = getPrimitiveTypeName(rawItem)\n\n    return `[]${arrayType}{${formattedItems.join(', ')}}`\n  } else {\n    const structName = getStructName(\n      updatedPropertyChain,\n      responseResourceGoStructName,\n    )\n\n    return `[]${structName}{${formattedItems.join(', ')}}`\n  }\n}\n\nconst formatGoResponseObjectValue = (\n  {\n    key,\n    value,\n    propertyChain,\n  }: { key: string; value: Record<string, Json>; propertyChain: string[] },\n  responseResourceGoStructName: string,\n): string => {\n  if (Object.keys(value).length === 0) {\n    return 'struct{}{}'\n  }\n\n  const updatedPropertyChain = [...propertyChain, key]\n  const structName = getStructName(\n    updatedPropertyChain,\n    responseResourceGoStructName,\n  )\n\n  const formattedEntries = Object.entries(value)\n    .map(([objKey, val]) => {\n      const formattedValue = formatGoResponseParamValue(\n        {\n          key: objKey,\n          value: val,\n          propertyChain: updatedPropertyChain,\n        },\n        responseResourceGoStructName,\n      )\n      return `${pascalCase(objKey)}: ${formattedValue}`\n    })\n    .join(', ')\n\n  return `${defaultGoPackageName}.${structName}{${formattedEntries}}`\n}\n\nconst getStructName = (\n  propertyChain: string[],\n  responseResourceGoStructName: string,\n): string => {\n  const fullPropertyChain = [responseResourceGoStructName, ...propertyChain]\n  return pascalCase(fullPropertyChain.join('_'))\n}\n","import { camelCase, pascalCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResponse } from './json.js'\n\ninterface JavaRequestBuilderOptions {\n  path: string\n  parameters: NonNullJson\n}\n\nexport const createJavaRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const pathParts = request.path.split('/').slice(1)\n  const requestBuilderOptions: JavaRequestBuilderOptions = {\n    path: request.path,\n    parameters: request.parameters,\n  }\n  const clientArgs = createJavaRequestBuilder(requestBuilderOptions)\n\n  return `seam.${pathParts.map((p) => camelCase(p)).join('().')}(${clientArgs});`\n}\n\nconst createJavaRequestBuilder = ({\n  path,\n  parameters,\n}: JavaRequestBuilderOptions): string => {\n  const requestBuilderName = getRequestBuilderName(path)\n  const isReqWithParams = Object.keys(parameters).length !== 0\n\n  if (!isReqWithParams) return ''\n\n  const formattedParams = formatJavaArgs(parameters)\n  return `${requestBuilderName}.builder()${formattedParams}.build()`\n}\n\nconst getRequestBuilderName = (path: string): string => {\n  const requestBuilderNameSuffix = 'Request'\n  const pathParts = path.split('/').slice(1)\n\n  return isPathNested(pathParts)\n    ? `${pascalCase(pathParts.slice(1).join('_'))}${requestBuilderNameSuffix}`\n    : `${pascalCase(path)}${requestBuilderNameSuffix}`\n}\n\nconst isPathNested = (pathParts: string[]): boolean => pathParts.length > 2\n\nconst formatJavaArgs = (jsonParams: NonNullJson): string =>\n  Object.entries(jsonParams as Record<string, Json>)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue = formatJavaValue(paramValue)\n      return `.${camelCase(paramKey)}(${formattedValue})`\n    })\n    .join('\\n')\n\nconst formatJavaValue = (value: Json): string => {\n  if (value === null) return 'null'\n  if (typeof value === 'boolean') return value.toString()\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n  if (Array.isArray(value)) {\n    const formattedItems = value.map(formatJavaValue).join(', ')\n    return `List.of(${formattedItems})`\n  }\n  if (typeof value === 'object') {\n    const formattedEntries = Object.entries(value)\n      .map(([key, val]) => `\"${key}\", ${formatJavaValue(val)}`)\n      .join(', ')\n    return `Map.of(${formattedEntries})`\n  }\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n\nexport const createJavaResponse = createJsonResponse\n","import { camelCase } from 'change-case'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResponse } from './json.js'\n\nexport const createJavascriptRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const isWithoutParams = Object.keys(request.parameters).length === 0\n  const formattedParams = isWithoutParams\n    ? ''\n    : JSON.stringify(request.parameters)\n\n  return `await seam${parts.map((p) => camelCase(p)).join('.')}(${formattedParams})`\n}\n\nexport const createJavascriptResponse = createJsonResponse\n","import { snakeCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nexport const createPhpRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const requestParams = Object.entries(request.parameters)\n    .map(([key, value]) => `${key}: ${formatPhpValue(value)}`)\n    .join(',')\n\n  return `<?php\\n$seam${parts.map((p) => snakeCase(p)).join('->')}(${requestParams})`\n}\n\nexport const createPhpResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'null'\n\n  const { responseKey } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  const formattedResponse = Array.isArray(responseValue)\n    ? formatPhpArrayResponse(responseValue, title)\n    : formatPhpResponse(responseValue)\n\n  return `<?php\\n${formattedResponse}`\n}\n\nconst formatPhpArrayResponse = (\n  responseArray: Json[],\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((item) => {\n      if (item == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatPhpResponse(item)\n    })\n    .join(',\\n')\n\n  return `[${formattedItems}]`\n}\n\nconst formatPhpResponse = (responseParams: NonNullJson): string => {\n  const values = Object.entries(responseParams as Record<string, Json>).map(\n    ([paramKey, paramValue]) =>\n      `\"${snakeCase(paramKey)}\" => ${formatPhpValue(paramValue)}`,\n  )\n  return `[${values.join(',')}]`\n}\n\nconst formatPhpValue = (value: Json): string => {\n  if (value == null) return 'null'\n  if (typeof value === 'boolean') return value ? 'true' : 'false'\n  if (typeof value === 'number') return value.toString()\n  if (typeof value === 'string') return `\"${value}\"`\n  if (Array.isArray(value)) {\n    const formattedItems = value.map(formatPhpValue).join(', ')\n    return `[${formattedItems}]`\n  }\n  if (typeof value === 'object') {\n    const formattedEntries = Object.entries(value)\n      .map(([key, val]) => `\"${snakeCase(key)}\" => ${formatPhpValue(val)}`)\n      .join(', ')\n    return `[${formattedEntries}]`\n  }\n  throw new Error(`Unsupported type: ${typeof value}`)\n}\n","import { pascalCase, snakeCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nconst responseKeyToPythonResourceNameMap: Readonly<Record<string, string>> = {\n  event: 'SeamEvent',\n}\n\nexport const createPythonRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const params = formatPythonArgs(request.parameters)\n\n  return `seam${parts.map((p) => snakeCase(p)).join('.')}(${params})`\n}\n\nconst formatPythonArgs = (jsonParams: NonNullJson): string =>\n  Object.entries(jsonParams)\n    .map(([paramKey, paramValue]) => {\n      const formattedValue =\n        paramValue == null ? 'None' : JSON.stringify(paramValue)\n\n      return `${snakeCase(paramKey)}=${formattedValue}`\n    })\n    .join(', ')\n\nexport const createPythonResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'None'\n\n  const { responseKey, resourceType } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  const responsePythonClassName = pascalCase(\n    responseKeyToPythonResourceNameMap[resourceType] ?? resourceType,\n  )\n\n  return Array.isArray(responseValue)\n    ? formatPythonArrayResponse(responseValue, responsePythonClassName, title)\n    : formatPythonResponse(responseValue, responsePythonClassName)\n}\n\nconst formatPythonArrayResponse = (\n  responseArray: Json[],\n  responsePythonClassName: string,\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((v) => {\n      if (v == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatPythonResponse(v, responsePythonClassName)\n    })\n    .join(', ')\n\n  return `[${formattedItems}]`\n}\n\nconst formatPythonResponse = (\n  responseParams: NonNullJson,\n  responsePythonClassName: string,\n): string => {\n  const params = formatPythonArgs(responseParams)\n  return `${responsePythonClassName}(${params})`\n}\n","import { snakeCase } from 'change-case'\n\nimport type { Json, NonNullJson } from 'lib/json.js'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\n\nexport const createRubyRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const params = Object.entries(request.parameters)\n    .map(([key, value]) => `${snakeCase(key)}: ${formatRubyValue(value)}`)\n    .join(', ')\n\n  return `seam${parts.map((p) => snakeCase(p)).join('.')}(${params})`\n}\n\nconst formatRubyValue = (value: Json): string =>\n  value == null ? 'nil' : JSON.stringify(value)\n\nexport const createRubyResponse = (\n  { response, title }: CodeSampleDefinition,\n  context: CodeSampleContext,\n): string => {\n  const { endpoint } = context\n\n  if (endpoint.response.responseType === 'void') return 'nil'\n\n  const { responseKey } = endpoint.response\n  const responseValue = response?.body?.[responseKey]\n\n  if (responseValue == null) {\n    throw new Error(`Missing ${responseKey} for '${title}'`)\n  }\n\n  return Array.isArray(responseValue)\n    ? formatRubyArrayResponse(responseValue, title)\n    : formatRubyResponse(responseValue)\n}\n\nconst formatRubyArrayResponse = (\n  responseArray: Json[],\n  title: string,\n): string => {\n  const formattedItems = responseArray\n    .map((item) => {\n      if (item == null) {\n        throw new Error(`Null value in response array for '${title}'`)\n      }\n      return formatRubyResponse(item)\n    })\n    .join(',\\n')\n\n  return `[${formattedItems}]`\n}\n\nconst formatRubyResponse = (responseParams: NonNullJson): string => {\n  const values = Object.entries(responseParams as Record<string, Json>).map(\n    ([paramKey, paramValue]) =>\n      `\"${snakeCase(paramKey)}\" => ${formatRubyValue(paramValue)}`,\n  )\n  return `{${values.join(',')}}`\n}\n","import { kebabCase } from 'change-case'\n\nimport type { CodeSampleContext, CodeSampleDefinition } from './code-sample.js'\nimport { createJsonResourceData, createJsonResponse } from './json.js'\n\nexport const createSeamCliRequest = (\n  { request }: CodeSampleDefinition,\n  _context: CodeSampleContext,\n): string => {\n  const parts = request.path.split('/')\n  const requestParams = Object.entries(request.parameters)\n    .map(([key, value]) => `--${key} ${JSON.stringify(value)}`)\n    .join(' ')\n\n  return `seam${parts.map((p) => kebabCase(p)).join(' ')} ${requestParams}`\n}\n\nexport const createSeamCliResponse = createJsonResponse\n\nexport const createSeamCliResourceData = createJsonResourceData\n","import { z } from 'zod'\n\nexport const SdkNameSchema = z.enum([\n  'javascript',\n  'python',\n  'php',\n  'ruby',\n  'seam_cli',\n  'go',\n  'java',\n  'csharp',\n  'curl',\n])\n\nexport const SyntaxNameSchema = z.enum([\n  'javascript',\n  'json',\n  'python',\n  'php',\n  'ruby',\n  'bash',\n  'go',\n  'java',\n  'csharp',\n])\n\nexport type SyntaxName = z.infer<typeof SyntaxNameSchema>\n\nexport type SdkName = z.infer<typeof SdkNameSchema>\n","import { z } from 'zod'\n\nimport type { Endpoint } from 'lib/blueprint.js'\nimport { JsonSchema } from 'lib/json.js'\n\nimport { createCsharpRequest, createCsharpResponse } from './csharp.js'\nimport { createCurlRequest, createCurlResponse } from './curl.js'\nimport { formatCodeRecords } from './format.js'\nimport { createGoRequest, createGoResponse } from './go.js'\nimport { createJavaRequest, createJavaResponse } from './java.js'\nimport {\n  createJavascriptRequest,\n  createJavascriptResponse,\n} from './javascript.js'\nimport { createPhpRequest, createPhpResponse } from './php.js'\nimport { createPythonRequest, createPythonResponse } from './python.js'\nimport { createRubyRequest, createRubyResponse } from './ruby.js'\nimport { createSeamCliRequest, createSeamCliResponse } from './seam-cli.js'\nimport { SdkNameSchema, type SyntaxName, SyntaxNameSchema } from './syntax.js'\n\nexport const CodeSampleDefinitionSchema = z.object({\n  title: z.string().trim().min(1),\n  description: z.string().trim().min(1),\n  request: z.object({\n    path: z\n      .string()\n      .startsWith('/')\n      .regex(\n        /^[a-z_/]+$/,\n        'Can only contain the lowercase letters a-z, underscores, and forward slashes.',\n      ),\n    parameters: z.record(z.string().min(1), JsonSchema).optional().default({}),\n  }),\n  response: z.object({\n    body: z.record(z.string().min(1), JsonSchema).nullable(),\n  }),\n})\n\nexport type CodeSampleDefinitionInput = z.input<\n  typeof CodeSampleDefinitionSchema\n>\n\nexport type CodeSampleDefinition = z.output<typeof CodeSampleDefinitionSchema>\n\nconst CodeSchema = z.record(\n  SdkNameSchema,\n  z.object({\n    title: z.string().min(1),\n    sdkName: SdkNameSchema,\n    request: z.string(),\n    response: z.string(),\n    request_syntax: SyntaxNameSchema,\n    response_syntax: SyntaxNameSchema,\n  }),\n)\n\nexport type Code = z.infer<typeof CodeSchema>\n\nconst _CodeSampleSchema = CodeSampleDefinitionSchema.extend({\n  code: CodeSchema,\n})\n\nexport type CodeSample = z.output<typeof _CodeSampleSchema>\n\nexport interface CodeSampleContext {\n  endpoint: Omit<Endpoint, 'codeSamples'>\n  formatCode: (content: string, syntax: SyntaxName) => Promise<string>\n}\n\nexport const createCodeSample = async (\n  codeSampleDefinition: CodeSampleDefinition,\n  context: CodeSampleContext,\n): Promise<CodeSample> => {\n  const isVoidResponse = context.endpoint.response.responseType === 'void'\n  const code: Code = {\n    javascript: {\n      title: 'JavaScript',\n      sdkName: 'javascript',\n      request: createJavascriptRequest(codeSampleDefinition, context),\n      response: isVoidResponse\n        ? '// void'\n        : createJavascriptResponse(codeSampleDefinition, context),\n      request_syntax: 'javascript',\n      response_syntax: isVoidResponse ? 'javascript' : 'json',\n    },\n    python: {\n      title: 'Python',\n      sdkName: 'python',\n      request: createPythonRequest(codeSampleDefinition, context),\n      response: createPythonResponse(codeSampleDefinition, context),\n      request_syntax: 'python',\n      response_syntax: 'python',\n    },\n    ruby: {\n      title: 'Ruby',\n      sdkName: 'ruby',\n      request: createRubyRequest(codeSampleDefinition, context),\n      response: createRubyResponse(codeSampleDefinition, context),\n      request_syntax: 'ruby',\n      response_syntax: 'ruby',\n    },\n    php: {\n      title: 'PHP',\n      sdkName: 'php',\n      request: createPhpRequest(codeSampleDefinition, context),\n      response: createPhpResponse(codeSampleDefinition, context),\n      request_syntax: 'php',\n      response_syntax: 'php',\n    },\n    seam_cli: {\n      title: 'Seam CLI',\n      sdkName: 'seam_cli',\n      request: createSeamCliRequest(codeSampleDefinition, context),\n      response: createSeamCliResponse(codeSampleDefinition, context),\n      request_syntax: 'bash',\n      response_syntax: 'json',\n    },\n    go: {\n      title: 'Go',\n      sdkName: 'go',\n      request: createGoRequest(codeSampleDefinition, context),\n      response: createGoResponse(codeSampleDefinition, context),\n      request_syntax: 'go',\n      response_syntax: 'go',\n    },\n    java: {\n      title: 'Java',\n      sdkName: 'java',\n      request: createJavaRequest(codeSampleDefinition, context),\n      response: createJavaResponse(codeSampleDefinition, context),\n      request_syntax: 'java',\n      response_syntax: 'json',\n    },\n    csharp: {\n      title: 'C#',\n      sdkName: 'csharp',\n      request: createCsharpRequest(codeSampleDefinition, context),\n      response: createCsharpResponse(codeSampleDefinition, context),\n      request_syntax: 'csharp',\n      response_syntax: 'json',\n    },\n    curl: {\n      title: 'cURL',\n      sdkName: 'curl',\n      request: createCurlRequest(codeSampleDefinition, context),\n      response: createCurlResponse(codeSampleDefinition, context),\n      request_syntax: 'bash',\n      response_syntax: 'json',\n    },\n  }\n\n  return {\n    ...codeSampleDefinition,\n    code: await formatCodeRecords(code, context),\n  }\n}\n","import { z, type ZodSchema } from 'zod'\n\nimport type { Resource as BlueprintResource } from 'lib/blueprint.js'\nimport { JsonSchema } from 'lib/json.js'\n\nimport { formatResourceRecords } from './format.js'\nimport { createSeamCliResourceData } from './seam-cli.js'\nimport { SdkNameSchema, type SyntaxName, SyntaxNameSchema } from './syntax.js'\n\nexport const ResourceSampleDefinitionSchema = z.object({\n  title: z.string().trim().min(1),\n  description: z.string().trim().min(1),\n  resource_type: z.string().trim().min(1),\n  properties: z.record(z.string().min(1), JsonSchema),\n})\n\nexport type ResourceSampleDefinitionInput = z.input<\n  typeof ResourceSampleDefinitionSchema\n>\n\nexport type ResourceSampleDefinition = z.output<\n  typeof ResourceSampleDefinitionSchema\n>\n\nexport interface ResourceSampleContext {\n  resource: Omit<BlueprintResource, 'resourceSamples'>\n  schemas: Record<string, unknown>\n  formatCode: (content: string, syntax: SyntaxName) => Promise<string>\n}\n\nconst ResourceSchema = z.record(\n  SdkNameSchema,\n  z.object({\n    title: z.string().min(1),\n    resource_data: z.string(),\n    resource_data_syntax: SyntaxNameSchema,\n  }),\n)\n\nexport type Resource = z.infer<typeof ResourceSchema>\n\nconst _ResourceSampleSchema = ResourceSampleDefinitionSchema.extend({\n  resource: ResourceSchema,\n})\n\nexport type ResourceSample = z.output<typeof _ResourceSampleSchema>\n\nexport const createResourceSample = async (\n  resourceSampleDefinition: ResourceSampleDefinition,\n  context: ResourceSampleContext,\n): Promise<ResourceSample> => {\n  const resourceType = resourceSampleDefinition.resource_type\n  const schema = toPartialZodSchema(context.schemas[resourceType])\n  if (schema != null) {\n    const { success, error } = schema.safeParse(\n      resourceSampleDefinition.properties,\n    )\n    if (!success) {\n      throw new Error(\n        `Invalid properties for resource sample definition of type '${resourceType}': ${error.message}`,\n      )\n    }\n  } else {\n    // TODO: Skip event and action_attempt warning until support is added.\n    if (!['event', 'action_attempt'].includes(resourceType)) {\n      // eslint-disable-next-line no-console\n      console.warn(`Missing Zod schema for resource ${resourceType}.`)\n    }\n  }\n\n  const resource: Resource = {\n    seam_cli: {\n      title: 'Seam CLI',\n      resource_data: createSeamCliResourceData(\n        resourceSampleDefinition,\n        context,\n      ),\n      resource_data_syntax: 'json',\n    },\n  }\n\n  return {\n    ...resourceSampleDefinition,\n    resource: await formatResourceRecords(resource, context),\n  }\n}\n\nconst toPartialZodSchema = (input: unknown): ZodSchema | null => {\n  if (typeof input !== 'object') return null\n  if (input == null) return null\n  if ('deepPartial' in input) return input as unknown as ZodSchema\n  return null\n}\n","import type { KnownOpenapiAuthMethod } from './openapi/types.js'\n\nexport type SeamWorkspaceScope = 'none' | 'optional' | 'required'\n\nexport type SeamAuthMethod =\n  | 'api_key'\n  | 'personal_access_token'\n  | 'console_session_token'\n  | 'client_session_token'\n  | 'publishable_key'\n\nexport const mapOpenapiToSeamAuthMethod = (\n  method: string,\n): SeamAuthMethod | undefined => {\n  const AUTH_METHOD_MAPPING: Record<KnownOpenapiAuthMethod, SeamAuthMethod> = {\n    api_key: 'api_key',\n    pat_with_workspace: 'personal_access_token',\n    pat_without_workspace: 'personal_access_token',\n    console_session_token_with_workspace: 'console_session_token',\n    console_session_token_without_workspace: 'console_session_token',\n    client_session: 'client_session_token',\n    client_session_with_customer: 'client_session_token',\n    publishable_key: 'publishable_key',\n  } as const\n\n  return AUTH_METHOD_MAPPING[method as KnownOpenapiAuthMethod]\n}\n","import { z } from 'zod'\n\nimport { findCommonOpenapiSchemaProperties } from './openapi/find-common-openapi-schema-properties.js'\nimport { flattenOpenapiSchema } from './openapi/flatten-openapi-schema.js'\nimport {\n  EventResourceSchema,\n  OpenapiOperationSchema,\n  PropertySchema,\n  ResourceSchema,\n} from './openapi/schemas.js'\nimport type {\n  Openapi,\n  OpenapiAuthMethod,\n  OpenapiOperation,\n  OpenapiPathItem,\n  OpenapiPaths,\n  OpenapiSchema,\n} from './openapi/types.js'\nimport {\n  type CodeSample,\n  type CodeSampleDefinition,\n  CodeSampleDefinitionSchema,\n  createCodeSample,\n  createResourceSample,\n  type ResourceSample,\n  type ResourceSampleDefinition,\n  ResourceSampleDefinitionSchema,\n  type SyntaxName,\n} from './samples/index.js'\nimport {\n  mapOpenapiToSeamAuthMethod,\n  type SeamAuthMethod,\n  type SeamWorkspaceScope,\n} from './seam.js'\n\nconst paginationResponseKey = 'pagination'\n\nexport interface Blueprint {\n  title: string\n  routes: Route[]\n  namespaces: Namespace[]\n  resources: Resource[]\n  pagination: Pagination | null\n  events: EventResource[]\n  actionAttempts: ActionAttempt[]\n}\n\nexport interface Route {\n  path: string\n  name: string\n  namespacePath: string | null\n  endpoints: Endpoint[]\n  parentPath: string | null\n  isUndocumented: boolean\n  isDeprecated: boolean\n  isDraft: boolean\n}\n\nexport interface Resource {\n  resourceType: string\n  properties: Property[]\n  description: string\n  routePath: string\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  propertyGroups: PropertyGroup[]\n  resourceSamples: ResourceSample[]\n}\n\nexport interface PropertyGroup {\n  name: string\n  propertyGroupKey: string\n}\n\nexport interface VariantGroup {\n  name: string\n  variantGroupKey: string\n}\n\nexport interface Pagination {\n  properties: Property[]\n  description: string\n  responseKey: string\n}\n\nexport interface EventResource extends Resource {\n  resourceType: 'event'\n  eventType: string\n}\n\nexport interface ActionAttempt extends Resource {\n  resourceType: 'action_attempt'\n  actionAttemptType: string\n}\n\nexport interface Namespace {\n  name: string\n  path: string\n  parentPath: string | null\n  isDeprecated: boolean\n  isUndocumented: boolean\n  isDraft: boolean\n}\n\nexport interface Endpoint {\n  title: string\n  path: string\n  name: string\n  parentPath: string | null\n  description: string\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  request: Request\n  response: Response\n  hasPagination: boolean\n  codeSamples: CodeSample[]\n  authMethods: SeamAuthMethod[]\n  workspaceScope: SeamWorkspaceScope\n}\n\ninterface BaseParameter {\n  name: string\n  description: string\n  isRequired: boolean\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  hasDefault: boolean\n}\n\ninterface StringParameter extends BaseParameter {\n  format: 'string'\n  jsonType: 'string'\n  default?: string | null\n}\n\ninterface NumberParameter extends BaseParameter {\n  format: 'number'\n  jsonType: 'number'\n  default?: number | null\n}\n\ninterface EnumParameter extends BaseParameter {\n  format: 'enum'\n  jsonType: 'string'\n  values: EnumValue[]\n  default?: string | null\n}\n\ninterface RecordParameter extends BaseParameter {\n  format: 'record'\n  jsonType: 'object'\n}\n\ninterface BaseListParameter extends BaseParameter {\n  format: 'list'\n  jsonType: 'array'\n}\n\ntype ListParameter =\n  | StringListParameter\n  | NumberListParameter\n  | BooleanListParameter\n  | DatetimeListParameter\n  | IdListParameter\n  | EnumListParameter\n  | ObjectListParameter\n  | RecordListParameter\n  | DiscriminatedListParameter\n\ninterface StringListParameter extends BaseListParameter {\n  itemFormat: 'string'\n  default?: string[]\n}\n\ninterface NumberListParameter extends BaseListParameter {\n  itemFormat: 'number'\n  default?: number[]\n}\n\ninterface BooleanListParameter extends BaseListParameter {\n  itemFormat: 'boolean'\n  default?: boolean[]\n}\n\ninterface DatetimeListParameter extends BaseListParameter {\n  itemFormat: 'datetime'\n  default?: string[]\n}\n\ninterface IdListParameter extends BaseListParameter {\n  itemFormat: 'id'\n  default?: string[]\n}\n\ninterface EnumListParameter extends BaseListParameter {\n  itemFormat: 'enum'\n  itemEnumValues: EnumValue[]\n  default?: EnumValue[]\n}\n\ninterface ObjectListParameter extends BaseListParameter {\n  itemFormat: 'object'\n  itemParameters: Parameter[]\n}\n\ninterface RecordListParameter extends BaseListParameter {\n  itemFormat: 'record'\n}\n\ninterface DiscriminatedListParameter extends BaseListParameter {\n  itemFormat: 'discriminated_object'\n  discriminator: string\n  variants: Array<{\n    parameters: Parameter[]\n    description: BaseParameter['description']\n  }>\n}\n\ninterface BooleanParameter extends BaseParameter {\n  format: 'boolean'\n  jsonType: 'boolean'\n  default?: boolean | null\n}\n\ninterface ObjectParameter extends BaseParameter {\n  format: 'object'\n  jsonType: 'object'\n  parameters: Parameter[]\n}\n\ninterface DatetimeParameter extends BaseParameter {\n  format: 'datetime'\n  jsonType: 'string'\n  default?: string | null\n}\n\ninterface IdParameter extends BaseParameter {\n  format: 'id'\n  jsonType: 'string'\n  default?: string | null\n}\n\nexport type Parameter =\n  | StringParameter\n  | NumberParameter\n  | EnumParameter\n  | RecordParameter\n  | ListParameter\n  | BooleanParameter\n  | ObjectParameter\n  | DatetimeParameter\n  | IdParameter\n\nexport interface Request {\n  methods: Method[]\n  semanticMethod: Method\n  preferredMethod: Method\n  parameters: Parameter[]\n}\n\nexport type Response = VoidResponse | ResourceResponse | ResourceListResponse\n\ninterface BaseResponse {\n  description: string\n}\n\ninterface VoidResponse extends BaseResponse {\n  responseType: 'void'\n}\n\ninterface ResourceResponse extends BaseResponse {\n  responseType: 'resource'\n  responseKey: string\n  resourceType: string\n  actionAttemptType: string | null\n  batchResourceTypes: Array<{ batchKey: string; resourceType: string }> | null\n}\n\ninterface ResourceListResponse extends BaseResponse {\n  responseType: 'resource_list'\n  responseKey: string\n  resourceType: string\n}\n\ninterface BaseProperty {\n  name: string\n  description: string\n  isDeprecated: boolean\n  deprecationMessage: string\n  isUndocumented: boolean\n  undocumentedMessage: string\n  isDraft: boolean\n  draftMessage: string\n  propertyGroupKey: string | null\n}\n\nexport type Property =\n  | StringProperty\n  | NumberProperty\n  | EnumProperty\n  | RecordProperty\n  | ListProperty\n  | ObjectProperty\n  | BooleanProperty\n  | DatetimeProperty\n  | IdProperty\n  | BatchResourceProperty\n\ninterface StringProperty extends BaseProperty {\n  format: 'string'\n  jsonType: 'string'\n}\n\ninterface NumberProperty extends BaseProperty {\n  format: 'number'\n  jsonType: 'number'\n}\n\nexport interface EnumProperty extends BaseProperty {\n  format: 'enum'\n  jsonType: 'string'\n  values: EnumValue[]\n}\n\ntype EnumValue = BaseProperty\n\ninterface RecordProperty extends BaseProperty {\n  format: 'record'\n  jsonType: 'object'\n}\n\ninterface BaseListProperty extends BaseProperty {\n  format: 'list'\n  jsonType: 'array'\n}\n\ninterface StringListProperty extends BaseListProperty {\n  itemFormat: 'string'\n}\n\ninterface NumberListProperty extends BaseListProperty {\n  itemFormat: 'number'\n}\n\ninterface BooleanListProperty extends BaseListProperty {\n  itemFormat: 'boolean'\n}\n\ninterface DatetimeListProperty extends BaseListProperty {\n  itemFormat: 'datetime'\n}\n\ninterface IdListProperty extends BaseListProperty {\n  itemFormat: 'id'\n}\n\ninterface BatchResourceProperty extends BaseProperty {\n  format: 'record'\n  jsonType: 'object'\n  resourceType: string\n}\n\ninterface EnumListProperty extends BaseListProperty {\n  itemFormat: 'enum'\n  itemEnumValues: EnumValue[]\n}\n\ninterface ObjectListProperty extends BaseListProperty {\n  itemFormat: 'object'\n  itemProperties: Property[]\n}\n\ninterface RecordListProperty extends BaseListProperty {\n  itemFormat: 'record'\n}\n\nexport interface DiscriminatedListProperty extends BaseListProperty {\n  itemFormat: 'discriminated_object'\n  discriminator: string\n  variantGroups: VariantGroup[]\n  variants: Array<{\n    resourceType: string | null\n    variantGroupKey: string | null\n    properties: Property[]\n    description: BaseProperty['description']\n  }>\n}\n\ntype ListProperty =\n  | StringListProperty\n  | NumberListProperty\n  | BooleanListProperty\n  | DatetimeListProperty\n  | IdListProperty\n  | EnumListProperty\n  | ObjectListProperty\n  | RecordListProperty\n  | DiscriminatedListProperty\n\ninterface BooleanProperty extends BaseProperty {\n  format: 'boolean'\n  jsonType: 'boolean'\n}\n\ninterface ObjectProperty extends BaseProperty {\n  format: 'object'\n  jsonType: 'object'\n  properties: Property[]\n  propertyGroups: PropertyGroup[]\n}\n\ninterface DatetimeProperty extends BaseProperty {\n  format: 'datetime'\n  jsonType: 'string'\n}\n\ninterface IdProperty extends BaseProperty {\n  format: 'id'\n  jsonType: 'string'\n}\n\nexport type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n\ninterface Context extends Required<BlueprintOptions> {\n  codeSampleDefinitions: CodeSampleDefinition[]\n  resourceSampleDefinitions: ResourceSampleDefinition[]\n  validActionAttemptTypes: string[]\n  validResourceTypes: string[]\n  schemas: Record<string, unknown>\n}\n\nexport const TypesModuleSchema = z.object({\n  codeSampleDefinitions: z.array(CodeSampleDefinitionSchema).default([]),\n  resourceSampleDefinitions: z\n    .array(ResourceSampleDefinitionSchema)\n    .default([]),\n  // TODO: Import and use openapi zod schema here\n  openapi: z.any(),\n  schemas: z.record(z.string(), z.unknown()).optional().default({}),\n})\n\nexport type TypesModuleInput = z.input<typeof TypesModuleSchema>\n\nexport type TypesModule = z.output<typeof TypesModuleSchema>\n\nexport interface BlueprintOptions {\n  formatCode?: (content: string, syntax: SyntaxName) => Promise<string>\n}\n\nexport const createBlueprint = async (\n  typesModule: TypesModuleInput,\n  { formatCode = async (content) => content }: BlueprintOptions = {},\n): Promise<Blueprint> => {\n  const { schemas, codeSampleDefinitions, resourceSampleDefinitions } =\n    TypesModuleSchema.parse(typesModule)\n\n  // TODO: Move openapi to TypesModuleSchema\n  const openapi = typesModule.openapi as Openapi\n\n  const validActionAttemptTypes = extractValidActionAttemptTypes(\n    openapi.components.schemas,\n  )\n  const validResourceTypes = extractValidResourceTypes(\n    openapi.components.schemas,\n  )\n\n  const context: Context = {\n    codeSampleDefinitions,\n    resourceSampleDefinitions,\n    formatCode,\n    schemas,\n    validActionAttemptTypes,\n    validResourceTypes,\n  }\n\n  const routes = await createRoutes(openapi.paths, context)\n  const namespaces = createNamespaces(routes)\n\n  const pagination = openapi.components.schemas[paginationResponseKey]\n  const openapiSchemas = Object.fromEntries(\n    Object.entries(openapi.components.schemas).filter(\n      ([k]) => k !== paginationResponseKey,\n    ),\n  )\n\n  const resources = await createResources(openapiSchemas, routes, context)\n  const actionAttempts = await createActionAttempts(\n    openapi.components.schemas,\n    routes,\n    context,\n  )\n  const events = await createEvents(openapiSchemas, routes, context)\n\n  assertSeamPathsAreUndocumented({\n    routes,\n    namespaces,\n    resources,\n    events,\n    actionAttempts,\n  })\n\n  assertDocumentedEndpointsDontReferenceUndocumentedResources({\n    routes,\n    resources,\n  })\n\n  return {\n    title: openapi.info.title,\n    routes,\n    namespaces,\n    resources,\n    pagination: createPagination(pagination, openapiSchemas),\n    events,\n    actionAttempts,\n  }\n}\n\nconst isSeamPath = (path: string): boolean =>\n  path === '/seam' || path.startsWith('/seam/')\n\nconst assertSeamPathsAreUndocumented = ({\n  routes,\n  namespaces,\n  resources,\n  events,\n  actionAttempts,\n}: Pick<\n  Blueprint,\n  'routes' | 'namespaces' | 'resources' | 'events' | 'actionAttempts'\n>): void => {\n  const offenders = [\n    ...routes.flatMap((route) => {\n      const routeOffenders =\n        isSeamPath(route.path) && !route.isUndocumented\n          ? [`route ${route.path}`]\n          : []\n      const endpointOffenders = route.endpoints.flatMap((endpoint) =>\n        isSeamPath(endpoint.path) && !endpoint.isUndocumented\n          ? [`endpoint ${endpoint.path}`]\n          : [],\n      )\n\n      return [...routeOffenders, ...endpointOffenders]\n    }),\n    ...namespaces.flatMap((namespace) =>\n      isSeamPath(namespace.path) && !namespace.isUndocumented\n        ? [`namespace ${namespace.path}`]\n        : [],\n    ),\n    ...resources.flatMap((resource) =>\n      isSeamPath(resource.routePath) && !resource.isUndocumented\n        ? [`resource ${resource.routePath}`]\n        : [],\n    ),\n    ...events.flatMap((event) =>\n      isSeamPath(event.routePath) && !event.isUndocumented\n        ? [`event ${event.routePath}`]\n        : [],\n    ),\n    ...actionAttempts.flatMap((actionAttempt) =>\n      isSeamPath(actionAttempt.routePath) && !actionAttempt.isUndocumented\n        ? [`action_attempt ${actionAttempt.routePath}`]\n        : [],\n    ),\n  ]\n\n  if (offenders.length > 0) {\n    throw new Error(\n      `All /seam entries must be marked undocumented. Found: ${offenders.join(', ')}`,\n    )\n  }\n}\n\nconst assertDocumentedEndpointsDontReferenceUndocumentedResources = ({\n  routes,\n  resources,\n}: Pick<Blueprint, 'routes' | 'resources'>): void => {\n  const undocumentedResourceTypes = new Set(\n    resources.filter((r) => r.isUndocumented).map((r) => r.resourceType),\n  )\n\n  const offenders: string[] = []\n\n  for (const route of routes) {\n    for (const endpoint of route.endpoints) {\n      if (endpoint.isUndocumented) continue\n      if (endpoint.response.responseType === 'void') continue\n      if (!('resourceType' in endpoint.response)) continue\n\n      const { resourceType } = endpoint.response\n      if (undocumentedResourceTypes.has(resourceType)) {\n        offenders.push(\n          `${endpoint.path} references undocumented resource '${resourceType}'`,\n        )\n      }\n    }\n  }\n\n  if (offenders.length > 0) {\n    throw new Error(\n      `Documented endpoints must not reference undocumented resources. Found:\\n${offenders.join('\\n')}`,\n    )\n  }\n}\n\nconst extractValidActionAttemptTypes = (\n  schemas: Openapi['components']['schemas'],\n): string[] => {\n  const actionAttemptSchema = schemas['action_attempt']\n  if (\n    actionAttemptSchema == null ||\n    typeof actionAttemptSchema !== 'object' ||\n    !('oneOf' in actionAttemptSchema) ||\n    !Array.isArray(actionAttemptSchema.oneOf)\n  ) {\n    return []\n  }\n\n  const processedActionAttemptTypes = new Set<string>()\n  actionAttemptSchema.oneOf.forEach((schema) => {\n    const actionType = schema.properties?.['action_type']?.enum?.[0]\n    if (typeof actionType === 'string') {\n      processedActionAttemptTypes.add(actionType)\n    }\n  })\n\n  return Array.from(processedActionAttemptTypes)\n}\n\nconst extractValidResourceTypes = (\n  schemas: Openapi['components']['schemas'],\n): string[] => {\n  return Object.keys(schemas)\n}\n\nconst createRoutes = async (\n  paths: OpenapiPaths,\n  context: Context,\n): Promise<Route[]> => {\n  const routeMap = new Map<string, Route>()\n  const pathEntries = Object.entries(paths)\n\n  for (const [path, pathItem] of pathEntries) {\n    const namespacePath = getNamespacePath(path, paths)\n\n    const route = await createRoute(namespacePath, path, pathItem, context)\n\n    const existingRoute = routeMap.get(route.path)\n    if (existingRoute != null) {\n      existingRoute.endpoints.push(...route.endpoints)\n      continue\n    }\n\n    routeMap.set(route.path, route)\n  }\n\n  const routes = Array.from(routeMap.values())\n\n  return routes\n    .map(addIsDeprecatedToRoute)\n    .map(addIsUndocumentedToRoute)\n    .map(addIsDraftToRoute)\n}\n\nconst getNamespacePath = (path: string, paths: OpenapiPaths): string | null => {\n  // Hold namespace in array to allow nested namespaces\n  // e.g. namespace for `/foo/bar/baz/get` = `/foo/bar`\n  const namespace: string[] = []\n\n  const pathParts = path.split('/').filter((path) => Boolean(path))\n\n  const pathKeys = Object.keys(paths)\n\n  for (const [index, part] of pathParts.entries()) {\n    // Namespaces must be consecutive. If there was a path with an endpoint\n    // previously, then this part is not in the namespace.\n    if (namespace.length !== index) {\n      continue\n    }\n\n    // An endpoint is a route that ends without further paths. i.e., ends in\n    // a letter (not slash).\n    const endpoints = pathKeys.filter((key) =>\n      new RegExp(`^/${[...namespace, part].join('/')}/\\\\w+$`).test(key),\n    )\n\n    if (endpoints.length === 0) {\n      namespace.push(part)\n    }\n  }\n\n  if (namespace.length === 0) {\n    return null\n  }\n\n  return `/${namespace.join('/')}`\n}\n\nconst createRoute = async (\n  namespacePath: string | null,\n  path: string,\n  pathItem: OpenapiPathItem,\n  context: Context,\n): Promise<Route> => {\n  const pathParts = path.split('/')\n  const routePath = `/${pathParts.slice(1, -1).join('/')}`\n  const name = pathParts.at(-2)\n  if (name == null) {\n    throw new Error(`Could not resolve name for route at ${path}`)\n  }\n\n  const endpoint = await createEndpoint(path, pathItem, context)\n\n  return {\n    path: routePath,\n    name,\n    namespacePath,\n    endpoints: endpoint != null ? [endpoint] : [],\n    parentPath: getParentPath(routePath),\n    isUndocumented: false,\n    isDeprecated: false,\n    isDraft: false,\n  }\n}\n\nconst addIsDeprecatedToRoute = (route: Route): Route => ({\n  ...route,\n  isDeprecated: route.endpoints.every((endpoint) => endpoint.isDeprecated),\n})\n\nconst addIsUndocumentedToRoute = (route: Route): Route => ({\n  ...route,\n  isUndocumented: route.endpoints.every((endpoint) => endpoint.isUndocumented),\n})\n\nconst addIsDraftToRoute = (route: Route): Route => ({\n  ...route,\n  isDraft: route.endpoints.every((endpoint) => endpoint.isDraft),\n})\n\nconst createNamespaces = (routes: Route[]): Namespace[] => {\n  const namespacePaths = [\n    ...new Set(\n      routes.flatMap((r) => (r.namespacePath == null ? [] : [r.namespacePath])),\n    ),\n  ]\n\n  return namespacePaths.map((path) => {\n    const namespaceRoutes = routes.filter((r) => r.namespacePath === path)\n\n    const pathParts = path.split('/')\n    const name = pathParts.at(-1)\n    if (name == null) {\n      throw new Error(`Could not resolve name for route at ${path}`)\n    }\n\n    const isDeprecated = namespaceRoutes.every((r) => r.isDeprecated)\n    const isUndocumented = namespaceRoutes.every((r) => r.isUndocumented)\n    const isDraft = namespaceRoutes.every((r) => r.isDraft)\n\n    return {\n      name,\n      path,\n      parentPath: getParentPath(path),\n      isDeprecated,\n      isUndocumented,\n      isDraft,\n    }\n  })\n}\n\nconst createEndpoint = async (\n  path: string,\n  pathItem: OpenapiPathItem,\n  context: Context,\n): Promise<Endpoint | null> => {\n  const validMethods: Method[] = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH']\n  const validOperations = Object.entries(pathItem).filter(\n    ([method, operation]) =>\n      validMethods.includes(method.toUpperCase() as Method) &&\n      typeof operation === 'object' &&\n      operation !== null,\n  )\n  const supportedMethods = validOperations.map(\n    ([method]) => method.toUpperCase() as Method,\n  )\n\n  const validOperation = validOperations.find(([m]) => m === 'post')\n  if (validOperation == null) {\n    throw new Error(`No valid post operation found for ${path}`)\n  }\n\n  const [_, operation] = validOperation\n\n  return await createEndpointFromOperation(\n    supportedMethods,\n    operation as OpenapiOperation,\n    path,\n    context,\n  )\n}\n\nconst createEndpointFromOperation = async (\n  methods: Method[],\n  operation: OpenapiOperation,\n  path: string,\n  context: Context,\n): Promise<Endpoint> => {\n  const pathParts = path.split('/')\n  const endpointPath = `/${pathParts.slice(1).join('/')}`\n\n  const name = pathParts.at(-1)\n  if (name == null) {\n    throw new Error(`Could not resolve name for endpoint at ${path}`)\n  }\n\n  const parsedOperation = OpenapiOperationSchema.parse(operation, {\n    path: pathParts,\n  })\n\n  const title = parsedOperation['x-title']\n\n  const description = normalizeDescription(parsedOperation.description)\n\n  const isUndocumented = parsedOperation['x-undocumented'].length > 0\n  const undocumentedMessage = parsedOperation['x-undocumented']\n\n  const deprecationMessage = parsedOperation['x-deprecated']\n  const isDeprecated = deprecationMessage.length > 0\n\n  const isDraft = parsedOperation['x-draft'].length > 0\n  const draftMessage = parsedOperation['x-draft']\n\n  const request = createRequest(methods, operation, path)\n  const { hasPagination, ...response } = createResponse(\n    operation,\n    path,\n    context,\n  )\n\n  const operationAuthMethods = parsedOperation.security.map(\n    (securitySchema) => {\n      const [authMethod = ''] = Object.keys(securitySchema)\n      return authMethod as OpenapiAuthMethod\n    },\n  )\n  const endpointAuthMethods = [\n    ...new Set(\n      operationAuthMethods\n        .map(mapOpenapiToSeamAuthMethod)\n        .filter(\n          (authMethod): authMethod is SeamAuthMethod => authMethod != null,\n        ),\n    ),\n  ]\n\n  const workspaceScope = getWorkspaceScope(operationAuthMethods)\n\n  const endpoint: Omit<Endpoint, 'codeSamples'> = {\n    title,\n    name,\n    path: endpointPath,\n    parentPath: getParentPath(endpointPath),\n    description,\n    isDeprecated,\n    deprecationMessage,\n    isUndocumented,\n    undocumentedMessage,\n    isDraft,\n    draftMessage,\n    response,\n    request,\n    hasPagination,\n    authMethods: endpointAuthMethods,\n    workspaceScope,\n  }\n\n  return {\n    ...endpoint,\n    codeSamples: await Promise.all(\n      context.codeSampleDefinitions\n        .filter(({ request }) => request.path === endpointPath)\n        .map(\n          async (codeSampleDefinition) =>\n            await createCodeSample(codeSampleDefinition, {\n              endpoint,\n              formatCode: context.formatCode,\n            }),\n        ),\n    ),\n  }\n}\n\nexport const getWorkspaceScope = (\n  authMethods: OpenapiAuthMethod[],\n): SeamWorkspaceScope => {\n  const hasWorkspaceUnscoped = authMethods.some((method) =>\n    method.endsWith('_without_workspace'),\n  )\n\n  const workspaceScopedAuthMethods: OpenapiAuthMethod[] = [\n    'api_key',\n    'client_session',\n    'client_session_with_customer',\n    'console_session_token_with_workspace',\n    'pat_with_workspace',\n    'publishable_key',\n  ]\n  const hasWorkspaceScoped = authMethods.some((method) =>\n    workspaceScopedAuthMethods.includes(method),\n  )\n\n  const hasNoAuthMethods = !hasWorkspaceUnscoped && !hasWorkspaceScoped\n  if (hasNoAuthMethods) return 'none'\n\n  const hasOnlyUnscopedAuth = hasWorkspaceUnscoped && !hasWorkspaceScoped\n  if (hasOnlyUnscopedAuth) return 'none'\n\n  const hasBothScopedAndUnscoped = hasWorkspaceUnscoped && hasWorkspaceScoped\n  if (hasBothScopedAndUnscoped) return 'optional'\n\n  const hasOnlyScopedAuth = !hasWorkspaceUnscoped && hasWorkspaceScoped\n  if (hasOnlyScopedAuth) return 'required'\n\n  return 'none'\n}\n\nconst createRequest = (\n  methods: Method[],\n  operation: OpenapiOperation,\n  path: string,\n): Request => {\n  if (methods.length === 0) {\n    // eslint-disable-next-line no-console\n    console.warn(`At least one HTTP method should be specified for ${path}`)\n  }\n\n  if (methods.length > 2) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      `More than two methods detected for ${path}. Was this intended?`,\n    )\n  }\n\n  if (!methods.includes('POST')) {\n    throw new Error(`POST method is missing for ${path}`)\n  }\n\n  const semanticMethod = getSemanticMethod(methods)\n  const preferredMethod = getPreferredMethod(methods, semanticMethod, operation)\n\n  return {\n    methods,\n    semanticMethod,\n    preferredMethod,\n    parameters: createRequestBody(operation, path),\n  }\n}\n\nconst createRequestBody = (\n  operation: OpenapiOperation,\n  path: string,\n): Parameter[] => {\n  // This should be done by the createParameters but for some reason it's not\n  // TODO: remove this in favour of using createParameters\n  if (!('requestBody' in operation) || operation.requestBody === undefined) {\n    return []\n  }\n\n  const { requestBody } = operation\n  const jsonSchema = requestBody.content?.['application/json']?.schema\n  if (jsonSchema == null) return []\n\n  const flattenedSchema = flattenOpenapiSchema(jsonSchema)\n  if (flattenedSchema.type !== 'object' || flattenedSchema.properties == null) {\n    return []\n  }\n\n  return createParameters(\n    flattenedSchema.properties,\n    path,\n    flattenedSchema.required,\n  )\n}\n\nconst createParameters = (\n  properties: Record<string, OpenapiSchema>,\n  path: string,\n  requiredParameters: string[] = [],\n): Parameter[] =>\n  Object.entries(properties)\n    .map(([name, property]) => {\n      // Don't flatten discriminated arrays as they are handled separately in createParameter\n      if (\n        property.type === 'array' &&\n        'items' in property &&\n        'discriminator' in property.items\n      ) {\n        return [name, property] as [string, OpenapiSchema]\n      }\n\n      return [name, flattenOpenapiSchema(property)] as [string, OpenapiSchema]\n    })\n    .filter(([name, property]) => {\n      if (property.type == null) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          `The ${name} property for ${path} will not be documented since it does not define a type.`,\n        )\n        return false\n      }\n      return true\n    })\n    .map(([name, property]) =>\n      createParameter(name, property, path, requiredParameters),\n    )\n\nconst createParameter = (\n  name: string,\n  property: OpenapiSchema,\n  path: string,\n  requiredParameters: string[],\n): Parameter => {\n  const parsedProp = PropertySchema.parse(property, {\n    path: [...path.split('/'), name],\n  })\n\n  const baseParam: BaseParameter & {\n    default?: any\n  } = {\n    name,\n    description: normalizeDescription(String(parsedProp.description ?? '')),\n    isRequired: requiredParameters.includes(name),\n    isDeprecated: parsedProp['x-deprecated'].length > 0,\n    deprecationMessage: parsedProp['x-deprecated'],\n    isUndocumented: parsedProp['x-undocumented'].length > 0,\n    undocumentedMessage: parsedProp['x-undocumented'],\n    isDraft: parsedProp['x-draft'].length > 0,\n    draftMessage: parsedProp['x-draft'],\n    hasDefault: 'default' in parsedProp,\n  }\n\n  if (baseParam.hasDefault) {\n    baseParam.default = parsedProp.default\n  }\n\n  switch (parsedProp.type) {\n    case 'string':\n      if (parsedProp.enum !== undefined) {\n        return {\n          ...baseParam,\n          format: 'enum',\n          jsonType: 'string',\n          values: parsedProp.enum.map((value: string | boolean) => {\n            const enumValue = parsedProp['x-enums']?.[String(value)]\n            if (parsedProp['x-enums'] != null && enumValue == null) {\n              throw new Error(\n                `Missing enum value definition in x-enums for \"${String(value)}\"`,\n              )\n            }\n            return {\n              name: String(value),\n              description: normalizeDescription(\n                String(enumValue?.description ?? ''),\n              ),\n              isDeprecated: Boolean(enumValue?.deprecated?.length ?? 0),\n              deprecationMessage: enumValue?.deprecated ?? '',\n              isUndocumented: Boolean(enumValue?.undocumented?.length ?? 0),\n              undocumentedMessage: enumValue?.undocumented ?? '',\n              isDraft: Boolean(enumValue?.draft?.length ?? 0),\n              draftMessage: enumValue?.draft ?? '',\n            }\n          }),\n        }\n      }\n      if (parsedProp.format === 'date-time') {\n        return { ...baseParam, format: 'datetime', jsonType: 'string' }\n      }\n      if (parsedProp.format === 'uuid') {\n        return { ...baseParam, format: 'id', jsonType: 'string' }\n      }\n      return { ...baseParam, format: 'string', jsonType: 'string' }\n    case 'boolean':\n      return { ...baseParam, format: 'boolean', jsonType: 'boolean' }\n    case 'array': {\n      return createArrayParameter(baseParam, property, path)\n    }\n    case 'object':\n      if (property.properties !== undefined) {\n        return {\n          ...baseParam,\n          format: 'object',\n          jsonType: 'object',\n          parameters: createParameters(property.properties, path),\n        }\n      }\n      return { ...baseParam, format: 'record', jsonType: 'object' }\n    case 'number':\n    case 'integer':\n      return {\n        ...baseParam,\n        format: 'number',\n        jsonType: 'number',\n      }\n    default:\n      throw new Error(`Unsupported property type: ${parsedProp.type}`)\n  }\n}\n\nconst createArrayParameter = (\n  baseParam: BaseParameter,\n  property: OpenapiSchema,\n  path: string,\n): Parameter => {\n  function createListParameter<T extends BaseListParameter>(\n    format: string,\n    extraProps: Partial<T> = {},\n  ): T {\n    return {\n      ...baseParam,\n      format: 'list' as const,\n      jsonType: 'array' as const,\n      itemFormat: format,\n      ...extraProps,\n    } as unknown as T\n  }\n\n  const fallbackListParameter =\n    createListParameter<RecordListParameter>('record')\n\n  if (property.items == null) {\n    return fallbackListParameter\n  }\n\n  if ('oneOf' in property.items) {\n    if (\n      !property.items.oneOf.every(\n        (schema: OpenapiSchema) => schema.type === 'object',\n      )\n    ) {\n      return fallbackListParameter\n    }\n\n    if (property.items.discriminator?.propertyName == null) {\n      throw new Error(\n        `Missing discriminator property name for ${baseParam.name} in ${path}`,\n      )\n    }\n\n    return createListParameter<DiscriminatedListParameter>(\n      'discriminated_object',\n      {\n        discriminator: property.items.discriminator.propertyName,\n        variants: property.items.oneOf.map((schema: OpenapiSchema) => ({\n          parameters: createParameters(\n            schema.properties ?? {},\n            path,\n            schema.required ?? [],\n          ),\n          description: normalizeDescription(schema.description ?? ''),\n        })),\n      },\n    )\n  }\n\n  const itemParameter = createParameter('item', property.items, path, [])\n\n  switch (itemParameter.format) {\n    case 'string':\n      return createListParameter<StringListParameter>('string')\n\n    case 'number':\n      return createListParameter<NumberListParameter>('number')\n\n    case 'boolean':\n      return createListParameter<BooleanListParameter>('boolean')\n\n    case 'datetime':\n      return createListParameter<DatetimeListParameter>('datetime')\n\n    case 'id':\n      return createListParameter<IdListParameter>('id')\n\n    case 'enum':\n      return createListParameter<EnumListParameter>('enum', {\n        itemEnumValues: itemParameter.values,\n      })\n\n    case 'object':\n      return createListParameter<ObjectListParameter>('object', {\n        itemParameters: itemParameter.parameters,\n      })\n\n    case 'record':\n      return createListParameter<RecordListParameter>('record')\n\n    default:\n      return fallbackListParameter\n  }\n}\n\nconst createPagination = (\n  schema: Openapi['components']['schemas'][number] | undefined,\n  schemas: Openapi['components']['schemas'],\n): Pagination | null => {\n  if (schema == null) return null\n  return {\n    responseKey: paginationResponseKey,\n    description: normalizeDescription(schema.description ?? ''),\n    properties: createProperties(\n      schema.properties ?? {},\n      [paginationResponseKey],\n      [],\n      schemas,\n    ),\n  }\n}\n\nexport const createResources = async (\n  schemas: Openapi['components']['schemas'],\n  routes: Route[],\n  context: Context,\n): Promise<Resource[]> => {\n  const resources: Resource[] = []\n  for (const [schemaName, schema] of Object.entries(schemas)) {\n    const { success: isValidEventSchema, data: parsedEvent } =\n      EventResourceSchema.safeParse(schema)\n\n    if (isValidEventSchema) {\n      const commonProperties = findCommonOpenapiSchemaProperties(\n        parsedEvent.oneOf,\n      )\n      const eventSchema: OpenapiSchema = {\n        'x-route-path': parsedEvent['x-route-path'],\n        properties: commonProperties,\n        type: 'object',\n      }\n      const resource = await createResource(\n        schemaName,\n        eventSchema,\n        schemas,\n        routes,\n        context,\n      )\n      resources.push(resource)\n      continue\n    }\n\n    const { success: isValidResourceSchema } = ResourceSchema.safeParse(schema)\n    if (isValidResourceSchema) {\n      const resource = await createResource(\n        schemaName,\n        schema,\n        schemas,\n        routes,\n        context,\n      )\n      resources.push(resource)\n      continue\n    }\n  }\n\n  return resources\n}\n\nconst createResource = async (\n  schemaName: string,\n  schema: OpenapiSchema,\n  schemas: Openapi['components']['schemas'],\n  routes: Route[],\n  context: Context,\n): Promise<Resource> => {\n  const routePath = validateRoutePath(\n    schemaName,\n    schema['x-route-path'],\n    routes,\n  )\n\n  const propertyGroups = getPropertyGroups(schema)\n  const resourceType = schemaName\n\n  const resource: Omit<Resource, 'resourceSamples'> = {\n    resourceType,\n    properties: createProperties(\n      schema.properties ?? {},\n      [schemaName],\n      propertyGroups,\n      schemas,\n    ),\n    description: normalizeDescription(schema.description ?? ''),\n    isDeprecated: schema.deprecated ?? false,\n    routePath,\n    deprecationMessage: schema['x-deprecated'] ?? '',\n    isUndocumented: (schema['x-undocumented'] ?? '').length > 0,\n    undocumentedMessage: schema['x-undocumented'] ?? '',\n    isDraft: (schema['x-draft'] ?? '').length > 0,\n    draftMessage: schema['x-draft'] ?? '',\n    propertyGroups,\n  }\n\n  return {\n    ...resource,\n    resourceSamples: await Promise.all(\n      context.resourceSampleDefinitions\n        .filter(\n          (resourceSample) => resourceSample.resource_type === resourceType,\n        )\n        .map(\n          async (resourceSampleDefinition) =>\n            await createResourceSample(resourceSampleDefinition, {\n              resource,\n              schemas: context.schemas,\n              formatCode: context.formatCode,\n            }),\n        ),\n    ),\n  }\n}\n\nconst validateRoutePath = (\n  resourceName: string,\n  routePath: string | undefined,\n  routes: Route[],\n): string => {\n  if (routePath == null || routePath.length === 0) {\n    throw new Error(`Resource ${resourceName} is missing a route path`)\n  }\n  if (!routes.some((r) => r.path === routePath)) {\n    throw new Error(`Route path ${routePath} not found in routes`)\n  }\n\n  return routePath\n}\n\nconst getPropertyGroups = (schema: OpenapiSchema): PropertyGroup[] => {\n  const rawPropertyGroups = schema['x-property-groups'] ?? {}\n\n  const propertyGroups: Record<string, PropertyGroup> = {}\n\n  for (const [key, group] of Object.entries(rawPropertyGroups)) {\n    propertyGroups[key] = {\n      name: group.name,\n      propertyGroupKey: key,\n    }\n  }\n\n  return Object.values(propertyGroups)\n}\n\nconst getVariantGroups = (schema: OpenapiSchema): VariantGroup[] => {\n  const rawVariantGroups = schema['x-variant-groups'] ?? {}\n\n  const variantGroups: Record<string, VariantGroup> = {}\n\n  for (const [key, group] of Object.entries(rawVariantGroups)) {\n    variantGroups[key] = {\n      name: group.name,\n      variantGroupKey: key,\n    }\n  }\n\n  return Object.values(variantGroups)\n}\n\nconst createResponse = (\n  operation: OpenapiOperation,\n  path: string,\n  context: Context,\n): Response & { hasPagination: boolean } => {\n  if (!('responses' in operation) || operation.responses == null) {\n    throw new Error(\n      `Missing responses in operation for ${operation.operationId}`,\n    )\n  }\n\n  const parsedOperation = OpenapiOperationSchema.parse(operation, {\n    path: [...path.split('/')],\n  })\n  const { responses } = operation\n\n  const okResponse = responses['200']\n\n  if (typeof okResponse !== 'object' || okResponse == null) {\n    return {\n      responseType: 'void',\n      description: normalizeDescription('Unknown'),\n      hasPagination: false,\n    }\n  }\n\n  const description = normalizeDescription(okResponse.description ?? '')\n\n  if (!('x-response-key' in parsedOperation)) {\n    throw new Error(`Missing responseKey for ${path}`)\n  }\n\n  const responseKey = parsedOperation['x-response-key']\n\n  if (responseKey === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  if (responseKey == null) {\n    throw new Error(`Missing responseKey for ${path}`)\n  }\n\n  const content = 'content' in okResponse ? okResponse.content : null\n  if (typeof content !== 'object' || content === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  const jsonContent =\n    'application/json' in content ? content['application/json'] : null\n  if (jsonContent === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  const schema = 'schema' in jsonContent ? jsonContent.schema : null\n  if (schema === null) {\n    return {\n      responseType: 'void',\n      description,\n      hasPagination: false,\n    }\n  }\n\n  if (\n    'type' in schema &&\n    'properties' in schema &&\n    schema.type === 'object' &&\n    typeof schema.properties === 'object' &&\n    schema.properties !== null\n  ) {\n    const { properties } = schema\n\n    if (!(responseKey in properties)) {\n      throw new Error(\n        `Response key '${responseKey}' not found in response schema for ${path}`,\n      )\n    }\n\n    const refKey = responseKey\n    if (refKey != null && properties[refKey] != null) {\n      const props = schema.properties[refKey]\n      const refString = props?.$ref ?? props?.items?.$ref\n      const resourceType = refString?.split('/').at(-1) ?? 'unknown'\n\n      const actionAttemptType = validateActionAttemptType(\n        parsedOperation['x-action-attempt-type'] ?? null,\n        responseKey,\n        path,\n        resourceType,\n        context.validActionAttemptTypes,\n      )\n\n      const batchKeys = parsedOperation['x-batch-keys']\n      const batchResourceTypes = batchKeys\n        ? batchKeys.flatMap((key) => {\n            const resourceRef = props?.properties?.[key]?.items?.$ref\n            if (resourceRef == null) {\n              return []\n            }\n\n            // get last part of $ref. e.g. { '$ref': '#/components/schemas/space' }\n            const batchResourceType = resourceRef.split('/').at(-1)\n            if (batchResourceType == null) {\n              return []\n            }\n\n            if (!context.validResourceTypes.includes(batchResourceType)) {\n              throw new Error(\n                `Unknown batch resource type '${batchResourceType}' referenced by ${path}`,\n              )\n            }\n\n            return [\n              {\n                batchKey: key,\n                resourceType: batchResourceType,\n              },\n            ]\n          })\n        : null\n\n      return {\n        responseType: props?.type === 'array' ? 'resource_list' : 'resource',\n        responseKey: refKey,\n        resourceType,\n        description,\n        hasPagination:\n          (paginationResponseKey in properties &&\n            properties[paginationResponseKey]?.$ref?.endsWith(\n              `/${paginationResponseKey}`,\n            )) ??\n          false,\n        actionAttemptType,\n        batchResourceTypes: batchResourceTypes ?? null,\n      }\n    }\n  }\n\n  return {\n    responseType: 'void',\n    description: normalizeDescription('Unknown'),\n    hasPagination: false,\n  }\n}\n\nconst validateActionAttemptType = (\n  actionAttemptType: string | null,\n  responseKey: string,\n  path: string,\n  resourceType: string,\n  validActionAttemptTypes: string[],\n): string | null => {\n  const excludedPaths = ['/action_attempts']\n  const isPathExcluded = excludedPaths.some((p) => path.startsWith(p))\n\n  if (resourceType !== 'action_attempt') {\n    return null\n  }\n\n  if (\n    actionAttemptType == null &&\n    responseKey === 'action_attempt' &&\n    !isPathExcluded\n  ) {\n    throw new Error(`Missing action_attempt_type for path ${path}`)\n  }\n\n  if (\n    actionAttemptType != null &&\n    !validActionAttemptTypes.includes(actionAttemptType)\n  ) {\n    throw new Error(\n      `Invalid action_attempt_type '${actionAttemptType}' for path ${path}`,\n    )\n  }\n\n  return actionAttemptType\n}\n\nexport const createProperties = (\n  properties: Record<string, OpenapiSchema>,\n  parentPaths: string[],\n  propertyGroups: PropertyGroup[],\n  schemas: Openapi['components']['schemas'],\n): Property[] =>\n  Object.entries(properties)\n    .map(([name, property]) => {\n      // Don't flatten discriminated arrays as they are handled separately in createProperty\n      if (\n        property.type === 'array' &&\n        'items' in property &&\n        'discriminator' in property.items\n      ) {\n        return [name, property] as [string, OpenapiSchema]\n      }\n\n      return [name, flattenOpenapiSchema(property)] as [string, OpenapiSchema]\n    })\n    .filter(([name, property]) => {\n      if (property.type == null) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          `The ${name} property for ${parentPaths.join('.')} will not be documented since it does not define a type.`,\n        )\n        return false\n      }\n\n      return true\n    })\n    .map(([name, prop]) =>\n      createProperty(name, prop, parentPaths, propertyGroups, schemas),\n    )\n\nconst createProperty = (\n  name: string,\n  prop: OpenapiSchema,\n  parentPaths: string[],\n  propertyGroups: PropertyGroup[],\n  schemas: Openapi['components']['schemas'],\n): Property => {\n  const parsedProp = parsePropertySchema(name, prop, parentPaths, schemas)\n\n  if (name.startsWith('ext_')) {\n    throw new Error(\n      `Property cannot start with ext_ : ${parentPaths.join('.')}.${name}`,\n    )\n  }\n\n  const propertyGroupKey = parsedProp['x-property-group-key'] as string\n  validateGroupKey(propertyGroupKey, name, parentPaths, propertyGroups)\n\n  const baseProperty = {\n    name,\n    description: normalizeDescription(String(parsedProp.description ?? '')),\n    isDeprecated: parsedProp['x-deprecated'].length > 0,\n    deprecationMessage: parsedProp['x-deprecated'],\n    isUndocumented: parsedProp['x-undocumented'].length > 0,\n    undocumentedMessage: parsedProp['x-undocumented'],\n    isDraft: parsedProp['x-draft'].length > 0,\n    draftMessage: parsedProp['x-draft'],\n    propertyGroupKey: propertyGroupKey === '' ? null : propertyGroupKey,\n  }\n\n  if (\n    parentPaths.includes('batch') &&\n    prop.type === 'array' &&\n    prop.items?.$ref\n  ) {\n    const refPath = prop.items.$ref\n    const resourceType = refPath.split('/').pop()\n\n    if (resourceType) {\n      const batchResourceProperty: BatchResourceProperty = {\n        ...baseProperty,\n        format: 'record',\n        jsonType: 'object',\n        resourceType,\n      }\n\n      return batchResourceProperty\n    }\n  }\n\n  switch (parsedProp.type) {\n    case 'string':\n      if (parsedProp.enum !== undefined) {\n        return {\n          ...baseProperty,\n          format: 'enum',\n          jsonType: 'string',\n          values: parsedProp.enum.map((value: string | boolean) => {\n            const enumValue = parsedProp['x-enums']?.[String(value)]\n            if (parsedProp['x-enums'] != null && enumValue == null) {\n              throw new Error(\n                `Missing enum value definition in x-enums for \"${String(value)}\"`,\n              )\n            }\n            return {\n              name: String(value),\n              description: normalizeDescription(\n                String(enumValue?.description ?? ''),\n              ),\n              isDeprecated: Boolean(enumValue?.deprecated?.length ?? 0),\n              deprecationMessage: enumValue?.deprecated ?? '',\n              isUndocumented: Boolean(enumValue?.undocumented?.length ?? 0),\n              undocumentedMessage: enumValue?.undocumented ?? '',\n              isDraft: Boolean(enumValue?.draft?.length ?? 0),\n              draftMessage: enumValue?.draft ?? '',\n            }\n          }),\n        }\n      }\n      if (parsedProp.format === 'date-time') {\n        return { ...baseProperty, format: 'datetime', jsonType: 'string' }\n      }\n      if (parsedProp.format === 'uuid') {\n        return { ...baseProperty, format: 'id', jsonType: 'string' }\n      }\n      return { ...baseProperty, format: 'string', jsonType: 'string' }\n    case 'boolean':\n      return { ...baseProperty, format: 'boolean', jsonType: 'boolean' }\n    case 'array': {\n      return createArrayProperty(baseProperty, prop, parentPaths, schemas)\n    }\n    case 'object':\n      if (prop.properties !== undefined) {\n        const nestedPropertyGroups = getPropertyGroups(prop)\n        return {\n          ...baseProperty,\n          format: 'object',\n          jsonType: 'object',\n          propertyGroups: nestedPropertyGroups,\n          properties: createProperties(\n            prop.properties,\n            [...parentPaths, name],\n            nestedPropertyGroups,\n            schemas,\n          ),\n        }\n      }\n      return { ...baseProperty, format: 'record', jsonType: 'object' }\n    case 'number':\n    case 'integer':\n      return {\n        ...baseProperty,\n        format: 'number',\n        jsonType: 'number',\n      }\n    default:\n      throw new Error(`Unsupported property type: ${parsedProp.type}`)\n  }\n}\n\nconst validateGroupKey = (\n  groupKey: string | null,\n  propertyName: string,\n  parentPaths: string[],\n  groups: PropertyGroup[] | VariantGroup[],\n): void => {\n  if (groupKey == null || groupKey.length === 0) return\n\n  const resourceName = parentPaths.at(0)\n  if (resourceName == null) {\n    throw new Error(\n      `Missing resource name for property \"${propertyName}\" in ${parentPaths.join('.')}`,\n    )\n  }\n\n  const validGroupKeys = groups.map((g) => {\n    if ('propertyGroupKey' in g) return g.propertyGroupKey\n    if ('variantGroupKey' in g) return g.variantGroupKey\n    throw new Error('Expected propertyGroupKey or variantGroupKey')\n  })\n  if (validGroupKeys.length === 0) {\n    throw new Error(\n      `The \"${propertyName}\" has group ${groupKey} but ${parentPaths.join('.')} does not define any groups.`,\n    )\n  }\n\n  if (!validGroupKeys.includes(groupKey)) {\n    throw new Error(\n      `Invalid property group \"${groupKey}\" for property \"${propertyName}\" in resource \"${resourceName}\". Valid groups are: ${validGroupKeys.join(', ')}`,\n    )\n  }\n}\n\nconst createArrayProperty = (\n  baseProperty: BaseProperty,\n  prop: OpenapiSchema,\n  parentPaths: string[],\n  schemas: Openapi['components']['schemas'],\n): Property => {\n  function createListProperty<T extends ListProperty>(\n    format: string,\n    extraProps: Partial<T> = {},\n  ): T {\n    return {\n      ...baseProperty,\n      format: 'list' as const,\n      jsonType: 'array' as const,\n      itemFormat: format,\n      ...extraProps,\n    } as unknown as T\n  }\n\n  const fallbackListProperty = createListProperty<RecordListProperty>('record')\n\n  if (prop.items == null) {\n    return fallbackListProperty\n  }\n\n  if ('oneOf' in prop.items) {\n    if (!prop.items.oneOf.every((schema) => schema.type === 'object')) {\n      return fallbackListProperty\n    }\n\n    if (prop.items.discriminator?.propertyName == null) {\n      throw new Error(\n        `Missing discriminator property name for ${baseProperty.name} in ${parentPaths.join('.')}`,\n      )\n    }\n\n    const variantGroups = getVariantGroups(prop)\n\n    return createListProperty<DiscriminatedListProperty>(\n      'discriminated_object',\n      {\n        discriminator: prop.items.discriminator.propertyName,\n        variantGroups,\n        variants: prop.items.oneOf.map((schema) => {\n          const errorCode = schema.properties?.['error_code']?.enum?.[0]\n\n          if (\n            errorCode != null &&\n            !(\n              'x-resource-type' in schema &&\n              schema['x-resource-type'] != null &&\n              schema['x-resource-type'].length > 0\n            )\n          ) {\n            throw new Error(`Missing resource_type for error code ${errorCode}`)\n          }\n\n          const resourceType = schema['x-resource-type'] ?? null\n          const variantGroupKey = schema['x-variant-group-key'] ?? null\n          validateGroupKey(\n            variantGroupKey,\n            baseProperty.name,\n            parentPaths,\n            variantGroups,\n          )\n          return {\n            resourceType,\n            variantGroupKey,\n            properties: createProperties(\n              schema.properties ?? {},\n              [...parentPaths, baseProperty.name],\n              [],\n              schemas,\n            ),\n            description: normalizeDescription(schema.description ?? ''),\n          }\n        }),\n      },\n    )\n  }\n\n  const itemProperty = createProperty(\n    'item',\n    prop.items,\n    [...parentPaths, baseProperty.name],\n    [],\n    schemas,\n  )\n\n  switch (itemProperty.format) {\n    case 'string':\n      return createListProperty<StringListProperty>('string')\n\n    case 'number':\n      return createListProperty<NumberListProperty>('number')\n\n    case 'boolean':\n      return createListProperty<BooleanListProperty>('boolean')\n\n    case 'datetime':\n      return createListProperty<DatetimeListProperty>('datetime')\n\n    case 'id':\n      return createListProperty<IdListProperty>('id')\n\n    case 'enum':\n      return createListProperty<EnumListProperty>('enum', {\n        itemEnumValues: itemProperty.values,\n      })\n\n    case 'object':\n      if (!('properties' in itemProperty)) {\n        throw new Error(\n          `Missing properties for object in ${parentPaths.join('.')}`,\n        )\n      }\n\n      return createListProperty<ObjectListProperty>('object', {\n        itemProperties: itemProperty.properties,\n      })\n\n    case 'record':\n      return createListProperty<RecordListProperty>('record')\n\n    default:\n      return fallbackListProperty\n  }\n}\n\nconst parsePropertySchema = (\n  name: string,\n  prop: OpenapiSchema,\n  parentPaths: string[],\n  schemas: Openapi['components']['schemas'],\n): z.infer<typeof PropertySchema> => {\n  if (parentPaths.includes('batch')) {\n    return parseBatchPropertySchema(name, prop, parentPaths, schemas)\n  }\n\n  return PropertySchema.parse(prop, {\n    path: [...parentPaths, name],\n  })\n}\n\n/**\n * Parses the correct schema for a batch property. Batch properties have the following path:\n * `batch.some_resources` where the correct schema should be for `some_resource`. Try to\n * extract the schema name from the $ref path and parse it from global openapi schemas.\n */\nconst parseBatchPropertySchema = (\n  name: string,\n  prop: OpenapiSchema,\n  parentPaths: string[],\n  schemas: Openapi['components']['schemas'],\n): z.infer<typeof PropertySchema> => {\n  const refPath = prop.items?.$ref\n  // Extract schema name from ref like '#/components/schemas/access_code' -> 'access_code'\n  const schemaName = refPath?.split('/').pop()\n\n  if (schemaName == null || schemas[schemaName] == null) {\n    throw new Error(\n      `Missing $ref schema \"${schemaName}\" for property \"batch.${name}\"`,\n    )\n  }\n\n  const referencedSchema = schemas[schemaName]\n\n  return PropertySchema.parse(referencedSchema, {\n    path: [...parentPaths, name],\n  })\n}\n\nexport const getSemanticMethod = (methods: Method[]): Method => {\n  if (methods.length === 1) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return methods[0]!\n  }\n\n  const priorityOrder: Method[] = ['PUT', 'PATCH', 'GET', 'DELETE', 'POST']\n\n  for (const method of priorityOrder) {\n    if (methods.includes(method)) {\n      return method\n    }\n  }\n\n  return 'POST'\n}\n\nexport const getPreferredMethod = (\n  methods: Method[],\n  semanticMethod: Method,\n  operation: OpenapiOperation,\n): Method => {\n  if (methods.length === 1) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return methods[0]!\n  }\n\n  if (methods.includes('POST')) {\n    if (semanticMethod === 'GET' || semanticMethod === 'DELETE') {\n      const hasComplexParameters =\n        (operation.parameters?.some(\n          (param) =>\n            param.schema?.type === 'array' || param.schema?.type === 'object',\n        ) ??\n          false) ||\n        operation.requestBody?.content?.['application/json']?.schema?.type ===\n          'object'\n\n      if (hasComplexParameters) {\n        return 'POST'\n      }\n    }\n  }\n\n  return semanticMethod\n}\n\nconst createEvents = async (\n  schemas: Openapi['components']['schemas'],\n  routes: Route[],\n  context: Context,\n): Promise<EventResource[]> => {\n  const eventSchema = schemas['event']\n  if (\n    eventSchema == null ||\n    typeof eventSchema !== 'object' ||\n    !('oneOf' in eventSchema) ||\n    !Array.isArray(eventSchema.oneOf)\n  ) {\n    return []\n  }\n\n  const events = await Promise.all(\n    eventSchema.oneOf.map(async (schema) => {\n      if (\n        typeof schema !== 'object' ||\n        schema.properties?.['event_type']?.enum?.[0] == null\n      ) {\n        return null\n      }\n\n      const eventType = schema.properties['event_type'].enum[0]\n\n      if (!('x-route-path' in schema && schema['x-route-path'].length > 0)) {\n        throw new Error(`Missing route_path for event type ${eventType}`)\n      }\n\n      const resource = await createResource(\n        'event',\n        schema,\n        schemas,\n        routes,\n        context,\n      )\n      return {\n        ...resource,\n        eventType,\n        resourceSamples: resource.resourceSamples.filter(\n          (resourceSample) =>\n            resourceSample.properties['event_type'] === eventType,\n        ),\n      }\n    }),\n  )\n\n  return events.filter((event): event is EventResource => event !== null)\n}\n\nconst createActionAttempts = async (\n  schemas: Openapi['components']['schemas'],\n  routes: Route[],\n  context: Context,\n): Promise<ActionAttempt[]> => {\n  const actionAttemptSchema = schemas['action_attempt']\n  if (\n    actionAttemptSchema == null ||\n    typeof actionAttemptSchema !== 'object' ||\n    !('oneOf' in actionAttemptSchema) ||\n    !Array.isArray(actionAttemptSchema.oneOf)\n  ) {\n    return []\n  }\n\n  const schemasByActionType = new Map<string, OpenapiSchema[]>()\n\n  for (const schema of actionAttemptSchema.oneOf) {\n    if (\n      typeof schema !== 'object' ||\n      schema.properties?.['action_type']?.enum?.[0] == null\n    ) {\n      continue\n    }\n\n    const actionType = schema.properties['action_type'].enum[0]\n    const currentSchemas = schemasByActionType.get(actionType)\n\n    if (currentSchemas == null) {\n      schemasByActionType.set(actionType, [schema])\n    } else {\n      currentSchemas.push(schema)\n    }\n  }\n\n  return await Promise.all(\n    Array.from(schemasByActionType.entries()).map(\n      async ([actionType, actionAttemptSchemas]) => {\n        const mergedProperties: Record<string, OpenapiSchema> = {}\n\n        const allPropertyKeys = new Set<string>()\n        for (const schema of actionAttemptSchemas) {\n          if (schema.properties != null) {\n            Object.keys(schema.properties).forEach((key) => {\n              allPropertyKeys.add(key)\n            })\n          }\n        }\n\n        for (const propKey of allPropertyKeys) {\n          const propDefinitions = actionAttemptSchemas\n            .filter((schema) => schema.properties?.[propKey] != null)\n            .map((schema) => schema.properties?.[propKey])\n\n          if (propDefinitions.length === 0) continue\n\n          const nonNullableDefinition = propDefinitions.find((prop) => {\n            if (prop == null) return false\n\n            return !('nullable' in prop && prop.nullable === true)\n          })\n\n          mergedProperties[propKey] =\n            nonNullableDefinition ?? propDefinitions[0] ?? {}\n        }\n\n        // Ensure standard status field\n        mergedProperties['status'] = {\n          ...mergedProperties['status'],\n          type: 'string',\n          enum: ['success', 'pending', 'error'],\n        }\n\n        const schemaWithMergedProperties: OpenapiSchema = {\n          ...(actionAttemptSchema['x-route-path'] != null && {\n            'x-route-path': actionAttemptSchema['x-route-path'],\n          }),\n          ...actionAttemptSchemas[0],\n          properties: mergedProperties,\n        }\n\n        const resource = await createResource(\n          'action_attempt',\n          schemaWithMergedProperties,\n          schemas,\n          routes,\n          context,\n        )\n\n        return {\n          ...resource,\n          resourceType: 'action_attempt',\n          actionAttemptType: actionType,\n          resourceSamples: resource.resourceSamples.filter(\n            (resourceSample) =>\n              resourceSample.properties['action_type'] === actionType,\n          ),\n        }\n      },\n    ),\n  )\n}\n\nconst getParentPath = (path: string): string | null =>\n  path.split('/').length === 2 ? null : path.split('/').slice(0, -1).join('/')\n\nconst normalizeDescription = (content: string): string =>\n  content\n    .split('\\n\\n')\n    .map((s) => s.trim())\n    .join('\\n\\n')\n"]}