{"version":3,"sources":["../src/channel-manifest.ts","../src/certification.ts","../src/errors.ts","../src/index.ts"],"sourcesContent":["import { findChannelHostCompatibilityEntry } from \"./compatibility.js\";\n\nexport const CHANNEL_ADAPTER_PLUGIN_TYPE = \"channel_adapter\" as const;\nexport const CHANNEL_ADAPTER_SCHEMA_VERSION = 1 as const;\nexport const CHANNEL_ADAPTER_PLUGIN_API_VERSION = \"1.0.0\" as const;\nexport const CHANNEL_ADAPTER_HOST_API_VERSION = \"1.0.0\" as const;\n\nconst PLUGIN_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*(?:\\/[A-Za-z0-9][A-Za-z0-9._-]*)*$/;\nconst CHANNEL_NAME_RE = /^[a-z0-9][a-z0-9._-]*$/;\nconst SEMVER_RE = /^\\d+\\.\\d+\\.\\d+(?:-[A-Za-z0-9.-]+)?(?:\\+[A-Za-z0-9.-]+)?$/;\n\nexport interface ChannelAdapterManifest {\n  readonly schema_version: typeof CHANNEL_ADAPTER_SCHEMA_VERSION;\n  readonly plugin_id: string;\n  readonly channel_name: string;\n  readonly plugin_type: typeof CHANNEL_ADAPTER_PLUGIN_TYPE;\n  readonly version: string;\n  readonly display_name: string;\n  readonly description?: string;\n  readonly plugin_api_version: string;\n  readonly host_api_version: string;\n}\n\nexport interface ChannelManifestValidationIssue {\n  readonly field: string;\n  readonly message: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function validateChannelAdapterManifest(\n  value: unknown,\n): readonly ChannelManifestValidationIssue[] {\n  if (!isRecord(value)) {\n    return [{ field: \"manifest\", message: \"manifest must be an object\" }];\n  }\n\n  const issues: ChannelManifestValidationIssue[] = [];\n\n  if (value.schema_version !== CHANNEL_ADAPTER_SCHEMA_VERSION) {\n    issues.push({\n      field: \"schema_version\",\n      message: `schema_version must be ${CHANNEL_ADAPTER_SCHEMA_VERSION}`,\n    });\n  }\n\n  if (\n    typeof value.plugin_id !== \"string\" ||\n    !PLUGIN_ID_RE.test(value.plugin_id.trim())\n  ) {\n    issues.push({\n      field: \"plugin_id\",\n      message:\n        \"plugin_id must be a non-empty stable identifier using letters, numbers, ., _, -, and optional / segments\",\n    });\n  }\n\n  if (\n    typeof value.channel_name !== \"string\" ||\n    !CHANNEL_NAME_RE.test(value.channel_name.trim())\n  ) {\n    issues.push({\n      field: \"channel_name\",\n      message:\n        \"channel_name must be a non-empty lower-case route name using letters, numbers, ., _, or -\",\n    });\n  }\n\n  if (value.plugin_type !== CHANNEL_ADAPTER_PLUGIN_TYPE) {\n    issues.push({\n      field: \"plugin_type\",\n      message: `plugin_type must be ${CHANNEL_ADAPTER_PLUGIN_TYPE}`,\n    });\n  }\n\n  if (typeof value.version !== \"string\" || !SEMVER_RE.test(value.version.trim())) {\n    issues.push({\n      field: \"version\",\n      message: \"version must be a valid semver string\",\n    });\n  }\n\n  if (\n    typeof value.display_name !== \"string\" ||\n    value.display_name.trim().length === 0\n  ) {\n    issues.push({\n      field: \"display_name\",\n      message: \"display_name must be a non-empty string\",\n    });\n  }\n\n  if (\n    value.description !== undefined &&\n    typeof value.description !== \"string\"\n  ) {\n    issues.push({\n      field: \"description\",\n      message: \"description must be a string when provided\",\n    });\n  }\n\n  if (\n    typeof value.plugin_api_version !== \"string\" ||\n    !SEMVER_RE.test(value.plugin_api_version.trim())\n  ) {\n    issues.push({\n      field: \"plugin_api_version\",\n      message: \"plugin_api_version must be a valid semver string\",\n    });\n  }\n\n  if (\n    typeof value.host_api_version !== \"string\" ||\n    !SEMVER_RE.test(value.host_api_version.trim())\n  ) {\n    issues.push({\n      field: \"host_api_version\",\n      message: \"host_api_version must be a valid semver string\",\n    });\n  }\n\n  if (\n    typeof value.plugin_type === \"string\" &&\n    typeof value.plugin_api_version === \"string\" &&\n    typeof value.host_api_version === \"string\" &&\n    value.plugin_type === CHANNEL_ADAPTER_PLUGIN_TYPE &&\n    findChannelHostCompatibilityEntry({\n      plugin_type: value.plugin_type,\n      plugin_api_version: value.plugin_api_version,\n      host_api_version: value.host_api_version,\n    }) === undefined\n  ) {\n    issues.push({\n      field: \"plugin_api_version\",\n      message:\n        \"plugin_api_version and host_api_version must match a supported channel-host compatibility tuple\",\n    });\n  }\n\n  return issues;\n}\n","import {\n  validateChannelAdapterManifest,\n  type ChannelAdapterManifest,\n} from \"./channel-manifest.js\";\nimport {\n  findChannelHostCompatibilityEntry,\n  type ChannelHostCompatibilityEntry,\n} from \"./compatibility.js\";\nimport type {\n  ChannelAdapter,\n  ChannelAdapterModuleExports,\n  ChannelConfigValidationResult,\n} from \"./channel-runtime.js\";\n\nexport interface ChannelAdapterCertificationIssue {\n  readonly code:\n    | \"module_exports_invalid\"\n    | \"manifest_invalid\"\n    | \"compatibility_unsupported\"\n    | \"config_validator_missing\"\n    | \"config_invalid\"\n    | \"factory_missing\"\n    | \"adapter_invalid\";\n  readonly message: string;\n  readonly field?: string;\n}\n\nexport interface ChannelAdapterCertificationResult {\n  readonly ok: boolean;\n  readonly manifest?: ChannelAdapterManifest;\n  readonly compatibility?: ChannelHostCompatibilityEntry;\n  readonly adapter?: ChannelAdapter;\n  readonly issues: readonly ChannelAdapterCertificationIssue[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction unwrapModuleNamespace(\n  moduleExports: unknown,\n): Record<string, unknown> | null {\n  if (!isRecord(moduleExports)) {\n    return null;\n  }\n  if (\"manifest\" in moduleExports && \"createChannelAdapter\" in moduleExports) {\n    return moduleExports;\n  }\n  if (isRecord(moduleExports.default)) {\n    return moduleExports.default;\n  }\n  return moduleExports;\n}\n\nfunction validateChannelAdapterShape(\n  adapter: unknown,\n): readonly ChannelAdapterCertificationIssue[] {\n  if (!isRecord(adapter)) {\n    return [\n      {\n        code: \"adapter_invalid\",\n        message: \"createChannelAdapter() must return an object\",\n      },\n    ];\n  }\n\n  const requiredMethods = [\n    \"initialize\",\n    \"start\",\n    \"stop\",\n    \"send\",\n    \"isHealthy\",\n  ] as const;\n  const issues: ChannelAdapterCertificationIssue[] = [];\n  for (const method of requiredMethods) {\n    if (typeof adapter[method] !== \"function\") {\n      issues.push({\n        code: \"adapter_invalid\",\n        field: method,\n        message: `adapter.${method} must be a function`,\n      });\n    }\n  }\n  if (typeof adapter.name !== \"string\" || adapter.name.trim().length === 0) {\n    issues.push({\n      code: \"adapter_invalid\",\n      field: \"name\",\n      message: \"adapter.name must be a non-empty string\",\n    });\n  }\n  return issues;\n}\n\nfunction normalizeConfigValidationResult(\n  result: unknown,\n): ChannelConfigValidationResult | null {\n  if (!isRecord(result) || typeof result.valid !== \"boolean\") {\n    return null;\n  }\n  if (!Array.isArray(result.errors) || !result.errors.every((value) => typeof value === \"string\")) {\n    return null;\n  }\n  return {\n    valid: result.valid,\n    errors: result.errors,\n  };\n}\n\nexport function resolveChannelAdapterModuleExports(\n  moduleExports: unknown,\n): ChannelAdapterModuleExports | null {\n  const unwrapped = unwrapModuleNamespace(moduleExports);\n  if (!unwrapped) {\n    return null;\n  }\n  if (\n    typeof unwrapped.validateConfig !== \"function\" ||\n    typeof unwrapped.createChannelAdapter !== \"function\" ||\n    !(\"manifest\" in unwrapped)\n  ) {\n    return null;\n  }\n  return unwrapped as unknown as ChannelAdapterModuleExports;\n}\n\nexport function certifyChannelAdapterModule(params: {\n  readonly moduleExports: unknown;\n  readonly config?: unknown;\n}): ChannelAdapterCertificationResult {\n  const resolved = resolveChannelAdapterModuleExports(params.moduleExports);\n  if (!resolved) {\n    return {\n      ok: false,\n      issues: [\n        {\n          code: \"module_exports_invalid\",\n          message:\n            \"module must expose manifest, validateConfig, and createChannelAdapter (or provide them on default export)\",\n        },\n      ],\n    };\n  }\n\n  const manifestIssues = validateChannelAdapterManifest(resolved.manifest);\n  if (manifestIssues.length > 0) {\n    return {\n      ok: false,\n      issues: manifestIssues.map((issue) => ({\n        code: \"manifest_invalid\" as const,\n        field: issue.field,\n        message: issue.message,\n      })),\n    };\n  }\n\n  const manifest = resolved.manifest;\n  const compatibility = findChannelHostCompatibilityEntry({\n    plugin_type: manifest.plugin_type,\n    plugin_api_version: manifest.plugin_api_version,\n    host_api_version: manifest.host_api_version,\n  });\n  if (!compatibility || compatibility.status !== \"supported\") {\n    return {\n      ok: false,\n      manifest,\n      issues: [\n        {\n          code: \"compatibility_unsupported\",\n          message:\n            \"plugin_api_version and host_api_version are not present as a supported tuple in the channel-host compatibility matrix\",\n        },\n      ],\n    };\n  }\n\n  const configResult = normalizeConfigValidationResult(\n    resolved.validateConfig(params.config ?? {}),\n  );\n  if (!configResult) {\n    return {\n      ok: false,\n      manifest,\n      compatibility,\n      issues: [\n        {\n          code: \"config_validator_missing\",\n          message:\n            \"validateConfig() must return { valid: boolean, errors: string[] }\",\n        },\n      ],\n    };\n  }\n  if (!configResult.valid) {\n    return {\n      ok: false,\n      manifest,\n      compatibility,\n      issues: configResult.errors.map((message) => ({\n        code: \"config_invalid\" as const,\n        message,\n      })),\n    };\n  }\n\n  const adapter = resolved.createChannelAdapter();\n  const adapterIssues = validateChannelAdapterShape(adapter);\n  if (adapterIssues.length > 0) {\n    return {\n      ok: false,\n      manifest,\n      compatibility,\n      issues: adapterIssues,\n    };\n  }\n\n  return {\n    ok: true,\n    manifest,\n    compatibility,\n    adapter: adapter as ChannelAdapter,\n    issues: [],\n  };\n}\n","import type {\n  ChannelAdapterCertificationIssue,\n} from \"./certification.js\";\nimport type {\n  ChannelManifestValidationIssue,\n} from \"./channel-manifest.js\";\n\nexport class PluginKitError extends Error {\n  readonly code: string;\n\n  constructor(message: string, code = \"plugin_kit_error\") {\n    super(message);\n    this.name = \"PluginKitError\";\n    this.code = code;\n  }\n}\n\nexport class PluginManifestValidationError extends PluginKitError {\n  readonly issues: readonly ChannelManifestValidationIssue[];\n\n  constructor(\n    message: string,\n    issues: readonly ChannelManifestValidationIssue[] = [],\n  ) {\n    super(message, \"plugin_manifest_validation_error\");\n    this.name = \"PluginManifestValidationError\";\n    this.issues = issues;\n  }\n}\n\nexport class PluginCertificationError extends PluginKitError {\n  readonly issues: readonly ChannelAdapterCertificationIssue[];\n\n  constructor(\n    message: string,\n    issues: readonly ChannelAdapterCertificationIssue[] = [],\n  ) {\n    super(message, \"plugin_certification_error\");\n    this.name = \"PluginCertificationError\";\n    this.issues = issues;\n  }\n}\n","export {\n  CHANNEL_ADAPTER_HOST_API_VERSION,\n  CHANNEL_ADAPTER_PLUGIN_API_VERSION,\n  CHANNEL_ADAPTER_PLUGIN_TYPE,\n  CHANNEL_ADAPTER_SCHEMA_VERSION,\n  validateChannelAdapterManifest,\n  type ChannelAdapterManifest,\n  type ChannelManifestValidationIssue,\n} from \"./channel-manifest.js\";\nexport {\n  CHANNEL_HOST_COMPATIBILITY_MATRIX,\n  findChannelHostCompatibilityEntry,\n  isChannelHostCompatibilitySupported,\n  type ChannelHostCompatibilityEntry,\n  type PluginCompatibilityStatus,\n} from \"./compatibility.js\";\nexport {\n  certifyChannelAdapterModule,\n  resolveChannelAdapterModuleExports,\n  type ChannelAdapterCertificationIssue,\n  type ChannelAdapterCertificationResult,\n} from \"./certification.js\";\nexport {\n  type ChannelAdapter,\n  type ChannelAdapterContext,\n  type ChannelAdapterHostServices,\n  type ChannelAdapterLogger,\n  type ChannelAdapterModuleExports,\n  type ChannelConfigValidationResult,\n  type ChannelInboundAttachment,\n  type ChannelInboundMessage,\n  type ChannelOutboundMessage,\n} from \"./channel-runtime.js\";\nexport {\n  PluginCertificationError,\n  PluginKitError,\n  PluginManifestValidationError,\n} from \"./errors.js\";\n\nimport {\n  CHANNEL_ADAPTER_HOST_API_VERSION,\n  CHANNEL_ADAPTER_PLUGIN_API_VERSION,\n  CHANNEL_ADAPTER_PLUGIN_TYPE,\n  CHANNEL_ADAPTER_SCHEMA_VERSION,\n  validateChannelAdapterManifest,\n} from \"./channel-manifest.js\";\nimport {\n  CHANNEL_HOST_COMPATIBILITY_MATRIX,\n  findChannelHostCompatibilityEntry,\n  isChannelHostCompatibilitySupported,\n} from \"./compatibility.js\";\nimport {\n  certifyChannelAdapterModule,\n  resolveChannelAdapterModuleExports,\n} from \"./certification.js\";\nimport {\n  PluginCertificationError,\n  PluginKitError,\n  PluginManifestValidationError,\n} from \"./errors.js\";\n\nconst pluginKit = {\n  CHANNEL_ADAPTER_HOST_API_VERSION,\n  CHANNEL_ADAPTER_PLUGIN_API_VERSION,\n  CHANNEL_ADAPTER_PLUGIN_TYPE,\n  CHANNEL_ADAPTER_SCHEMA_VERSION,\n  CHANNEL_HOST_COMPATIBILITY_MATRIX,\n  validateChannelAdapterManifest,\n  findChannelHostCompatibilityEntry,\n  isChannelHostCompatibilitySupported,\n  certifyChannelAdapterModule,\n  resolveChannelAdapterModuleExports,\n  PluginCertificationError,\n  PluginKitError,\n  PluginManifestValidationError,\n};\n\nexport default pluginKit;\n"],"mappings":"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","names":["isRecord"]}