{
  "version": 3,
  "sources": ["../../src/modules/payload-viewer-store/artifactCache.ts", "../../src/modules/payload-viewer-store/CatalogClient.ts", "../../src/modules/payload-viewer-store/catalogPolicy.ts", "../../src/modules/payload-viewer-store/errors.ts", "../../src/modules/payload-viewer-store/crypto.ts", "../../src/modules/payload-viewer-store/PayloadViewerStore.ts", "../../src/modules/payload-viewer-store/storage.ts"],
  "sourcesContent": ["import type { PayloadViewerArtifactCacheV1 } from './types.ts'\n\n/** In-memory {@link PayloadViewerArtifactCacheV1} keyed by SHA-256. */\nexport class MemoryPayloadViewerArtifactCacheV1 implements PayloadViewerArtifactCacheV1 {\n  private readonly artifacts = new Map<string, Uint8Array>()\n\n  async delete(sha256: string) {\n    this.artifacts.delete(sha256)\n  }\n\n  async get(sha256: string) {\n    const value = this.artifacts.get(sha256)\n    return value ? value.slice() : undefined\n  }\n\n  async put(sha256: string, bytes: Uint8Array) {\n    this.artifacts.set(sha256, bytes.slice())\n  }\n}\n\n/** Cache Storage-backed {@link PayloadViewerArtifactCacheV1} for browser environments. */\nexport class CacheStoragePayloadViewerArtifactCacheV1 implements PayloadViewerArtifactCacheV1 {\n  private readonly cacheName: string\n  private readonly cacheStorage: CacheStorage\n\n  constructor(cacheStorage = globalThis.caches, cacheName = 'xyo-payload-viewers-v1') {\n    this.cacheStorage = cacheStorage\n    this.cacheName = cacheName\n  }\n\n  async delete(sha256: string) {\n    const cache = await this.cacheStorage.open(this.cacheName)\n    await cache.delete(this.request(sha256))\n  }\n\n  async get(sha256: string) {\n    const cache = await this.cacheStorage.open(this.cacheName)\n    const response = await cache.match(this.request(sha256))\n    return response ? new Uint8Array(await response.arrayBuffer()) : undefined\n  }\n\n  async put(sha256: string, bytes: Uint8Array) {\n    const cache = await this.cacheStorage.open(this.cacheName)\n    const body = new Uint8Array(bytes.byteLength)\n    body.set(bytes)\n    await cache.put(this.request(sha256), new Response(body.buffer, { headers: { 'Content-Type': 'application/octet-stream' } }))\n  }\n\n  private request(sha256: string) {\n    return new Request(`https://payload-viewer-cache.invalid/sha256/${sha256}`)\n  }\n}\n", "import type { SignedViewerResourceV1, ViewerCatalogV1 } from '@xyo-network/payload-viewer-protocol'\nimport { validateViewerCatalogV1, validateViewerPluginManifestV1 } from '@xyo-network/payload-viewer-protocol'\n\nimport { assertViewerVersionAllowedV1, isViewerPublisherKeyRevokedV1 } from './catalogPolicy.ts'\nimport {\n  type PayloadViewerCryptoV1, verifySignedViewerResourceV1, WebCryptoPayloadViewerCryptoV1,\n} from './crypto.ts'\nimport { PayloadViewerStoreErrorV1 } from './errors.ts'\nimport type {\n  TrustedViewerCatalogKeyV1, VerifiedViewerCatalogV1, VerifiedViewerVersionV1,\n} from './types.ts'\n\n/** Construction options for {@link PayloadViewerCatalogClientV1}. */\nexport interface PayloadViewerCatalogClientOptionsV1 {\n  crypto?: PayloadViewerCryptoV1\n  fetch?: typeof globalThis.fetch\n  now?: () => Date\n  trustedCatalogKeys: readonly TrustedViewerCatalogKeyV1[]\n}\n\nconst textDecoder = new TextDecoder('utf-8', { fatal: true })\n\nconst parseJson = (bytes: Uint8Array, code: 'invalid-catalog' | 'invalid-manifest') => {\n  try {\n    return JSON.parse(textDecoder.decode(bytes)) as unknown\n  } catch (error) {\n    throw new PayloadViewerStoreErrorV1(code, 'Signed resource is not strict UTF-8 JSON', { cause: error })\n  }\n}\n\nconst fetchBytes = async (fetcher: typeof globalThis.fetch, resource: SignedViewerResourceV1) => {\n  let response: Response\n  try {\n    response = await fetcher(resource.url, {\n      cache: 'force-cache',\n      credentials: 'omit',\n      redirect: 'error',\n      referrerPolicy: 'no-referrer',\n    })\n  } catch (error) {\n    throw new PayloadViewerStoreErrorV1('fetch-failed', `Failed to fetch signed ${resource.kind} resource`, { cause: error })\n  }\n  if (!response.ok || !response.body) {\n    throw new PayloadViewerStoreErrorV1('fetch-failed', `Signed ${resource.kind} fetch returned ${response.status}`)\n  }\n\n  const chunks: Uint8Array[] = []\n  const reader = response.body.getReader()\n  let length = 0\n  try {\n    while (true) {\n      const { done, value } = await reader.read()\n      if (done) break\n      length += value.byteLength\n      if (length > resource.size) {\n        await reader.cancel()\n        throw new PayloadViewerStoreErrorV1('resource-too-large', `Signed ${resource.kind} exceeds its declared size`)\n      }\n      chunks.push(value)\n    }\n  } finally {\n    reader.releaseLock()\n  }\n  const bytes = new Uint8Array(length)\n  let offset = 0\n  for (const chunk of chunks) {\n    bytes.set(chunk, offset)\n    offset += chunk.byteLength\n  }\n  return bytes\n}\n\n/** Fetches and verifies signed viewer catalogs, manifests, and artifacts. */\nexport class PayloadViewerCatalogClientV1 {\n  private readonly crypto: PayloadViewerCryptoV1\n  private readonly fetcher: typeof globalThis.fetch\n  private readonly now: () => Date\n  private readonly trustedCatalogKeys: ReadonlyMap<string, string>\n\n  constructor({\n    crypto = new WebCryptoPayloadViewerCryptoV1(),\n    fetch: fetcher = globalThis.fetch,\n    now = () => new Date(),\n    trustedCatalogKeys,\n  }: PayloadViewerCatalogClientOptionsV1) {\n    if (trustedCatalogKeys.length === 0) throw new TypeError('At least one trusted catalog key is required')\n    this.crypto = crypto\n    this.fetcher = fetcher\n    this.now = now\n    this.trustedCatalogKeys = new Map(trustedCatalogKeys.map(key => [key.keyId, key.publicKey]))\n    if (this.trustedCatalogKeys.size !== trustedCatalogKeys.length) throw new TypeError('Trusted catalog key ids must be unique')\n  }\n\n  async loadCatalog(descriptor: SignedViewerResourceV1): Promise<VerifiedViewerCatalogV1> {\n    if (descriptor.kind !== 'catalog') throw new TypeError('Catalog descriptor must use the catalog resource kind')\n    const bytes = await fetchBytes(this.fetcher, descriptor)\n    const verifiedByKeyId = await verifySignedViewerResourceV1({\n      bytes, crypto: this.crypto, publicKeys: this.trustedCatalogKeys, resource: descriptor,\n    })\n    const validation = validateViewerCatalogV1(parseJson(bytes, 'invalid-catalog'))\n    if (!validation.valid) {\n      throw new PayloadViewerStoreErrorV1('invalid-catalog', validation.errors[0]?.message ?? 'Catalog validation failed')\n    }\n    const now = this.now().getTime()\n    if (Date.parse(validation.value.issuedAt) > now || Date.parse(validation.value.expiresAt) <= now) {\n      throw new PayloadViewerStoreErrorV1('catalog-expired', 'Catalog is not currently valid')\n    }\n    return {\n      catalog: validation.value, descriptor, verifiedByKeyId,\n    }\n  }\n\n  async loadVersion(\n    verifiedCatalog: VerifiedViewerCatalogV1,\n    pluginId: string,\n    versionValue: string,\n  ): Promise<VerifiedViewerVersionV1> {\n    const { catalog } = verifiedCatalog\n    const catalogVersion = catalog.versions.find(version => version.pluginId === pluginId && version.version === versionValue)\n    if (!catalogVersion) {\n      throw new PayloadViewerStoreErrorV1('catalog-version-not-found', `Catalog version not found: ${pluginId}@${versionValue}`)\n    }\n    assertViewerVersionAllowedV1(catalog, catalogVersion)\n\n    const keys = this.activePublisherKeys(catalog)\n    const manifestBytes = await fetchBytes(this.fetcher, catalogVersion.manifest)\n    const manifestKeyId = await verifySignedViewerResourceV1({\n      bytes: manifestBytes,\n      crypto: this.crypto,\n      publicKeys: new Map(keys.map(key => [key.keyId, key.publicKey])),\n      resource: catalogVersion.manifest,\n    })\n    const manifestValidation = validateViewerPluginManifestV1(parseJson(manifestBytes, 'invalid-manifest'))\n    if (!manifestValidation.valid) {\n      throw new PayloadViewerStoreErrorV1('invalid-manifest', manifestValidation.errors[0]?.message ?? 'Manifest validation failed')\n    }\n    const manifest = manifestValidation.value\n    const publisherKey = keys.find(key => key.keyId === manifestKeyId)\n    if (\n      !publisherKey\n      || publisherKey.publisherId !== manifest.publisher.id\n      || manifest.publisher.signingKeyId !== manifestKeyId\n      || manifest.id !== catalogVersion.pluginId\n      || manifest.version !== catalogVersion.version\n    ) {\n      throw new PayloadViewerStoreErrorV1('resource-mismatch', 'Manifest identity does not match its signed catalog entry')\n    }\n    if (\n      manifest.artifact.url !== catalogVersion.artifact.url\n      || manifest.artifact.sha256 !== catalogVersion.artifact.sha256\n      || manifest.artifact.size !== catalogVersion.artifact.size\n    ) {\n      throw new PayloadViewerStoreErrorV1('resource-mismatch', 'Manifest artifact does not match its signed catalog entry')\n    }\n    assertViewerVersionAllowedV1(catalog, catalogVersion, manifest)\n\n    const artifact = await fetchBytes(this.fetcher, catalogVersion.artifact)\n    await verifySignedViewerResourceV1({\n      bytes: artifact,\n      crypto: this.crypto,\n      publicKeys: new Map([[publisherKey.keyId, publisherKey.publicKey]]),\n      resource: catalogVersion.artifact,\n    })\n    return {\n      artifact,\n      catalogVersion,\n      manifest,\n      publisherKey,\n      verifiedAt: this.now().toISOString(),\n    }\n  }\n\n  private activePublisherKeys(catalog: ViewerCatalogV1) {\n    const now = this.now().getTime()\n    return catalog.publisherKeys.filter(key => !isViewerPublisherKeyRevokedV1(catalog, key)\n      && Date.parse(key.notBefore) <= now\n      && (!key.expiresAt || Date.parse(key.expiresAt) > now))\n  }\n}\n", "import type {\n  ViewerCatalogV1, ViewerCatalogVersionV1, ViewerPluginManifestV1, ViewerPublisherKeyV1,\n} from '@xyo-network/payload-viewer-protocol'\nimport { checkHostApiCompatibilityV1, HOST_API_VERSION_V1 } from '@xyo-network/payload-viewer-protocol'\n\nimport { PayloadViewerStoreErrorV1 } from './errors.ts'\n\n/** Returns whether a catalog version is covered by any catalog revocation. */\nexport const isViewerVersionRevokedV1 = (catalog: ViewerCatalogV1, version: ViewerCatalogVersionV1) =>\n  catalog.revocations.some((revocation) => {\n    switch (revocation.type) {\n      case 'artifact': return revocation.sha256 === version.artifact.sha256\n      case 'plugin': return revocation.pluginId === version.pluginId\n      case 'publisher-key': return false\n      case 'version': return revocation.pluginId === version.pluginId && revocation.version === version.version\n    }\n  })\n\n/** Returns whether a publisher key is revoked in the catalog. */\nexport const isViewerPublisherKeyRevokedV1 = (catalog: ViewerCatalogV1, key: ViewerPublisherKeyV1) =>\n  catalog.revocations.some(revocation => revocation.type === 'publisher-key'\n    && revocation.keyId === key.keyId\n    && revocation.publisherId === key.publisherId)\n\n/** Throws if a version or its publisher key is revoked or host-API incompatible. */\nexport const assertViewerVersionAllowedV1 = (\n  catalog: ViewerCatalogV1,\n  version: ViewerCatalogVersionV1,\n  manifest?: ViewerPluginManifestV1,\n) => {\n  if (isViewerVersionRevokedV1(catalog, version)) {\n    throw new PayloadViewerStoreErrorV1('revoked', `Payload viewer version is revoked: ${version.pluginId}@${version.version}`)\n  }\n  if (manifest) {\n    const publisherKey = catalog.publisherKeys.find(key => key.keyId === manifest.publisher.signingKeyId\n      && key.publisherId === manifest.publisher.id)\n    if (!publisherKey || isViewerPublisherKeyRevokedV1(catalog, publisherKey)) {\n      throw new PayloadViewerStoreErrorV1(\n        'revoked',\n        `Publisher key is unavailable or revoked: ${manifest.publisher.signingKeyId}`,\n      )\n    }\n    const compatibility = checkHostApiCompatibilityV1(HOST_API_VERSION_V1, manifest.hostApi)\n    if (!compatibility.compatible) {\n      throw new PayloadViewerStoreErrorV1(\n        'host-api-incompatible',\n        `Payload viewer ${version.pluginId}@${version.version} is incompatible with Host API ${HOST_API_VERSION_V1}`,\n      )\n    }\n  }\n}\n", "/** Machine-readable error codes for payload viewer store operations. */\nexport type PayloadViewerStoreErrorCodeV1\n  = | 'artifact-missing'\n    | 'catalog-expired'\n    | 'catalog-not-loaded'\n    | 'catalog-version-not-found'\n    | 'fetch-failed'\n    | 'host-api-incompatible'\n    | 'invalid-catalog'\n    | 'invalid-manifest'\n    | 'invalid-operation'\n    | 'permission-reapproval-required'\n    | 'resource-mismatch'\n    | 'resource-too-large'\n    | 'revoked'\n    | 'signature-invalid'\n    | 'unsupported-permission'\n\n/** Error raised by the payload viewer store with a typed error code. */\nexport class PayloadViewerStoreErrorV1 extends Error {\n  readonly code: PayloadViewerStoreErrorCodeV1\n\n  constructor(code: PayloadViewerStoreErrorCodeV1, message: string, options?: ErrorOptions) {\n    super(message, options)\n    this.code = code\n    this.name = 'PayloadViewerStoreErrorV1'\n  }\n}\n", "import type { SignedViewerResourceV1, ViewerDetachedSignatureV1 } from '@xyo-network/payload-viewer-protocol'\n\nimport { PayloadViewerStoreErrorV1 } from './errors.ts'\n\nconst encoder = new TextEncoder()\n\nconst toArrayBuffer = (value: Uint8Array) => {\n  const copy = new Uint8Array(value.byteLength)\n  copy.set(value)\n  return copy.buffer\n}\n\nconst base64UrlToBytes = (value: string) => {\n  if (!/^[A-Za-z0-9_-]+$/u.test(value)) {\n    throw new PayloadViewerStoreErrorV1('signature-invalid', 'Signature material must use unpadded base64url')\n  }\n  const base64 = value.replaceAll('-', '+').replaceAll('_', '/') + '='.repeat((4 - value.length % 4) % 4)\n  try {\n    return Uint8Array.from(atob(base64), character => character.codePointAt(0) ?? 0)\n  } catch (error) {\n    throw new PayloadViewerStoreErrorV1('signature-invalid', 'Signature material is not valid base64url', { cause: error })\n  }\n}\n\nconst bytesToHex = (value: Uint8Array) => [...value].map(byte => byte.toString(16).padStart(2, '0')).join('')\n\nconst signatureMessage = (resource: SignedViewerResourceV1, digest: Uint8Array) => {\n  const prefix = encoder.encode(`xyo-payload-viewer:${resource.kind}:v1:`)\n  const message = new Uint8Array(prefix.length + digest.length)\n  message.set(prefix)\n  message.set(digest, prefix.length)\n  return message\n}\n\nconst assertResourceShape = (resource: SignedViewerResourceV1) => {\n  if (\n    !['artifact', 'catalog', 'manifest'].includes(resource.kind)\n    || !/^https:\\/\\//u.test(resource.url)\n    || !/^[0-9a-f]{64}$/u.test(resource.sha256)\n    || !Number.isSafeInteger(resource.size)\n    || resource.size < 1\n    || resource.size > 20_000_000\n    || resource.signatures.length < 1\n    || resource.signatures.length > 8\n    || resource.signatures.some(signature => signature.algorithm !== 'Ed25519')\n  ) {\n    throw new PayloadViewerStoreErrorV1('resource-mismatch', 'Signed resource descriptor is invalid')\n  }\n}\n\n/** Digest and signature verification primitives used by the payload viewer store. */\nexport interface PayloadViewerCryptoV1 {\n  digest: (bytes: Uint8Array) => Promise<Uint8Array>\n  verify: (publicKey: string, signature: ViewerDetachedSignatureV1, message: Uint8Array) => Promise<boolean>\n}\n\n/** Web Crypto implementation of {@link PayloadViewerCryptoV1} using SHA-256 and Ed25519. */\nexport class WebCryptoPayloadViewerCryptoV1 implements PayloadViewerCryptoV1 {\n  private readonly subtle: SubtleCrypto\n\n  constructor(subtle = globalThis.crypto.subtle) {\n    this.subtle = subtle\n  }\n\n  async digest(bytes: Uint8Array) {\n    return new Uint8Array(await this.subtle.digest('SHA-256', toArrayBuffer(bytes)))\n  }\n\n  async verify(publicKey: string, signature: ViewerDetachedSignatureV1, message: Uint8Array) {\n    try {\n      const key = await this.subtle.importKey(\n        'raw',\n        toArrayBuffer(base64UrlToBytes(publicKey)),\n        { name: 'Ed25519' },\n        false,\n        ['verify'],\n      )\n      return await this.subtle.verify(\n        { name: 'Ed25519' },\n        key,\n        toArrayBuffer(base64UrlToBytes(signature.signature)),\n        toArrayBuffer(message),\n      )\n    } catch (error) {\n      throw new PayloadViewerStoreErrorV1('signature-invalid', 'Ed25519 signature verification failed', { cause: error })\n    }\n  }\n}\n\n/** Inputs for verifying a signed viewer resource against known public keys. */\nexport interface VerifySignedViewerResourceOptionsV1 {\n  bytes: Uint8Array\n  crypto: PayloadViewerCryptoV1\n  publicKeys: ReadonlyMap<string, string>\n  resource: SignedViewerResourceV1\n}\n\n/** Verifies size, digest, and Ed25519 signatures for a signed viewer resource. */\nexport const verifySignedViewerResourceV1 = async ({\n  bytes, crypto, publicKeys, resource,\n}: VerifySignedViewerResourceOptionsV1) => {\n  assertResourceShape(resource)\n  if (bytes.byteLength !== resource.size) {\n    throw new PayloadViewerStoreErrorV1('resource-mismatch', `Expected ${resource.size} bytes but received ${bytes.byteLength}`)\n  }\n  const digest = await crypto.digest(bytes)\n  if (bytesToHex(digest) !== resource.sha256) {\n    throw new PayloadViewerStoreErrorV1('resource-mismatch', `SHA-256 mismatch for ${resource.kind} resource`)\n  }\n  const message = signatureMessage(resource, digest)\n  for (const signature of resource.signatures) {\n    const publicKey = publicKeys.get(signature.keyId)\n    if (publicKey) {\n      const publicKeyBytes = base64UrlToBytes(publicKey)\n      const signatureBytes = base64UrlToBytes(signature.signature)\n      if (publicKeyBytes.byteLength !== 32 || signatureBytes.byteLength !== 64) {\n        throw new PayloadViewerStoreErrorV1('signature-invalid', 'Ed25519 keys and signatures must use canonical byte lengths')\n      }\n      if (await crypto.verify(publicKey, signature, message)) return signature.keyId\n    }\n  }\n  throw new PayloadViewerStoreErrorV1('signature-invalid', `No trusted signature validated the ${resource.kind} resource`)\n}\n", "import type {\n  ViewerCatalogV1, ViewerCatalogVersionV1, ViewerPermissionV1, ViewerSurfaceV1,\n} from '@xyo-network/payload-viewer-protocol'\nimport { StorePermissionsV1, toViewerIdV1 } from '@xyo-network/payload-viewer-protocol'\n\nimport { MemoryPayloadViewerArtifactCacheV1 } from './artifactCache.ts'\nimport { assertViewerVersionAllowedV1 } from './catalogPolicy.ts'\nimport { type PayloadViewerCryptoV1, WebCryptoPayloadViewerCryptoV1 } from './crypto.ts'\nimport { PayloadViewerStoreErrorV1 } from './errors.ts'\nimport { MemoryPayloadViewerStateStorageV1 } from './storage.ts'\nimport type {\n  EnabledInstalledViewerV1,\n  InstalledViewerPluginV1,\n  InstalledViewerVersionV1,\n  PayloadViewerArtifactCacheV1,\n  PayloadViewerStoreStateStorageV1,\n  PayloadViewerStoreStateV1,\n  VerifiedViewerCatalogV1,\n  VerifiedViewerVersionV1,\n} from './types.ts'\n\n/* eslint-disable @typescript-eslint/member-ordering -- Public methods follow the install and runtime lifecycle. */\n\n/** Construction options for {@link PayloadViewerStoreV1}. */\nexport interface PayloadViewerStoreOptionsV1 {\n  artifactCache?: PayloadViewerArtifactCacheV1\n  crypto?: PayloadViewerCryptoV1\n  now?: () => Date\n  storage?: PayloadViewerStoreStateStorageV1\n}\n\nconst initialState = (): PayloadViewerStoreStateV1 => ({\n  defaults: [], plugins: [], revision: 1,\n})\n\nconst requestedPermissions = (version: InstalledViewerVersionV1) => version.manifest.permissions\n\nconst includesAll = <T>(values: readonly T[], required: readonly T[]) => required.every(value => values.includes(value))\nconst supportedPermissions = new Set<ViewerPermissionV1>(StorePermissionsV1)\n\nconst matchesSchema = (schema: string, match: InstalledViewerVersionV1['manifest']['viewers'][number]['match']) =>\n  match.schemas?.includes(schema) === true\n  || match.schemaPrefixes?.some(prefix => schema.startsWith(prefix)) === true\n\n/** Installs, enables, and resolves verified payload viewer plugins against a catalog. */\nexport class PayloadViewerStoreV1 {\n  private readonly artifactCache: PayloadViewerArtifactCacheV1\n  private catalog?: ViewerCatalogV1\n  private readonly crypto: PayloadViewerCryptoV1\n  private readonly now: () => Date\n  private state: PayloadViewerStoreStateV1\n  private readonly storage: PayloadViewerStoreStateStorageV1\n\n  private constructor(\n    state: PayloadViewerStoreStateV1,\n    {\n      artifactCache = new MemoryPayloadViewerArtifactCacheV1(),\n      crypto = new WebCryptoPayloadViewerCryptoV1(),\n      now = () => new Date(),\n      storage = new MemoryPayloadViewerStateStorageV1(),\n    }: PayloadViewerStoreOptionsV1,\n  ) {\n    this.artifactCache = artifactCache\n    this.crypto = crypto\n    this.now = now\n    this.state = state\n    this.storage = storage\n  }\n\n  static async create(options: PayloadViewerStoreOptionsV1 = {}) {\n    const storage = options.storage ?? new MemoryPayloadViewerStateStorageV1()\n    const state = await storage.load() ?? initialState()\n    return new PayloadViewerStoreV1(state, { ...options, storage })\n  }\n\n  snapshot() {\n    return structuredClone(this.state)\n  }\n\n  async applyCatalog(verifiedCatalog: VerifiedViewerCatalogV1) {\n    this.catalog = verifiedCatalog.catalog\n    for (const plugin of this.state.plugins) {\n      if (this.isInstalledVersionAllowed(plugin, plugin.currentVersion)) continue\n      const rollback = plugin.versions.findLast(version => version.working\n        && version.manifest.version !== plugin.currentVersion\n        && this.isInstalledVersionAllowed(plugin, version.manifest.version))\n      if (rollback) {\n        plugin.currentVersion = rollback.manifest.version\n        plugin.grantedPermissions = rollback.manifest.permissions\n          .filter(permission => plugin.approvedPermissions.includes(permission))\n      } else plugin.enabled = false\n    }\n    this.clearInvalidDefaults()\n    await this.persist()\n  }\n\n  async install(version: VerifiedViewerVersionV1, approvedPermissions: readonly ViewerPermissionV1[]) {\n    this.assertCatalogVersion(version)\n    this.assertPermissions(version.manifest.permissions, approvedPermissions)\n    if (this.plugin(version.manifest.id)) {\n      throw new PayloadViewerStoreErrorV1('invalid-operation', `Payload viewer is already installed: ${version.manifest.id}`)\n    }\n    await this.artifactCache.put(version.catalogVersion.artifact.sha256, version.artifact)\n    const installedVersion = this.installedVersion(version)\n    this.state.plugins.push({\n      approvedPermissions: [...approvedPermissions],\n      currentVersion: version.manifest.version,\n      enabled: false,\n      grantedPermissions: [...version.manifest.permissions],\n      pluginId: version.manifest.id,\n      versions: [installedVersion],\n    })\n    await this.persist()\n  }\n\n  async enable(pluginId: string) {\n    const plugin = this.requiredPlugin(pluginId)\n    const current = this.currentVersion(plugin)\n    this.assertInstalledVersionAllowed(plugin, current)\n    await this.getCurrentArtifact(pluginId)\n    plugin.enabled = true\n    await this.persist()\n  }\n\n  async disable(pluginId: string) {\n    this.requiredPlugin(pluginId).enabled = false\n    this.clearInvalidDefaults()\n    await this.persist()\n  }\n\n  async update(version: VerifiedViewerVersionV1, approvedPermissions?: readonly ViewerPermissionV1[]) {\n    this.assertCatalogVersion(version)\n    const plugin = this.requiredPlugin(version.manifest.id)\n    this.assertSupportedPermissions(version.manifest.permissions)\n    const expanded = version.manifest.permissions.filter(permission => !plugin.approvedPermissions.includes(permission))\n    if (expanded.length > 0) {\n      if (!approvedPermissions) {\n        throw new PayloadViewerStoreErrorV1(\n          'permission-reapproval-required',\n          `Payload viewer update requests additional permissions: ${expanded.join(', ')}`,\n        )\n      }\n      this.assertPermissions(version.manifest.permissions, approvedPermissions)\n      plugin.approvedPermissions = [...approvedPermissions]\n    }\n    await this.artifactCache.put(version.catalogVersion.artifact.sha256, version.artifact)\n    const existing = plugin.versions.find(item => item.manifest.version === version.manifest.version)\n    if (existing) plugin.versions.splice(plugin.versions.indexOf(existing), 1)\n    plugin.versions.push(this.installedVersion(version))\n    plugin.currentVersion = version.manifest.version\n    plugin.grantedPermissions = [...version.manifest.permissions]\n    await this.persist()\n  }\n\n  async markWorking(pluginId: string, versionValue?: string) {\n    const plugin = this.requiredPlugin(pluginId)\n    const version = this.requiredVersion(plugin, versionValue ?? plugin.currentVersion)\n    version.working = true\n    await this.persist()\n  }\n\n  async rollback(pluginId: string, versionValue: string) {\n    const plugin = this.requiredPlugin(pluginId)\n    const version = this.requiredVersion(plugin, versionValue)\n    if (!version.working) {\n      throw new PayloadViewerStoreErrorV1('invalid-operation', `Rollback target is not marked working: ${pluginId}@${versionValue}`)\n    }\n    this.assertInstalledVersionAllowed(plugin, version)\n    await this.getArtifact(version)\n    plugin.currentVersion = versionValue\n    plugin.grantedPermissions = version.manifest.permissions.filter(permission => plugin.approvedPermissions.includes(permission))\n    await this.persist()\n  }\n\n  async setGrantedPermissions(pluginId: string, permissions: readonly ViewerPermissionV1[]) {\n    const plugin = this.requiredPlugin(pluginId)\n    const requested = requestedPermissions(this.currentVersion(plugin))\n    this.assertSupportedPermissions(permissions)\n    if (\n      new Set(permissions).size !== permissions.length\n        || !permissions.every(permission => requested.includes(permission) && plugin.approvedPermissions.includes(permission))\n    ) {\n      throw new PayloadViewerStoreErrorV1('invalid-operation', 'Granted permissions must be declared and previously approved')\n    }\n    plugin.grantedPermissions = [...permissions]\n    plugin.approvedPermissions = plugin.approvedPermissions.filter(permission => permissions.includes(permission))\n    if (!permissions.includes('payload.read.current')) {\n      plugin.enabled = false\n      this.clearInvalidDefaults()\n    }\n    await this.persist()\n  }\n\n  async setDefault(schema: string, surface: ViewerSurfaceV1, viewerId: string) {\n    const viewer = this.enabledViewers().find(candidate => candidate.viewerId === viewerId)\n    const contribution = viewer?.manifest.viewers.find(candidate => toViewerIdV1(viewer.manifest.id, candidate.id) === viewerId)\n    if (!viewer || !contribution || !contribution.surfaces.includes(surface) || !matchesSchema(schema, contribution.match)) {\n      throw new PayloadViewerStoreErrorV1('invalid-operation', `Viewer cannot be the ${surface} default for schema ${schema}`)\n    }\n    this.state.defaults = this.state.defaults.filter(value => value.schema !== schema || value.surface !== surface)\n    this.state.defaults.push({\n      schema, surface, viewerId,\n    })\n    await this.persist()\n  }\n\n  async clearDefault(schema: string, surface: ViewerSurfaceV1) {\n    this.state.defaults = this.state.defaults.filter(value => value.schema !== schema || value.surface !== surface)\n    await this.persist()\n  }\n\n  resolveDefault(schema: string, surface: ViewerSurfaceV1): EnabledInstalledViewerV1 | undefined {\n    const value = this.state.defaults.find(item => item.schema === schema && item.surface === surface)\n    return value ? this.enabledViewers().find(viewer => viewer.viewerId === value.viewerId) : undefined\n  }\n\n  enabledViewers(): EnabledInstalledViewerV1[] {\n    const viewers: EnabledInstalledViewerV1[] = []\n    for (const plugin of this.state.plugins) {\n      if (!plugin.enabled) continue\n      const version = this.currentVersion(plugin)\n      if (!this.isInstalledVersionAllowed(plugin, version.manifest.version)) continue\n      for (const contribution of version.manifest.viewers) {\n        viewers.push({\n          artifact: version.artifact,\n          grantedPermissions: plugin.grantedPermissions,\n          manifest: version.manifest,\n          viewerId: toViewerIdV1(version.manifest.id, contribution.id),\n        })\n      }\n    }\n    return viewers\n  }\n\n  async getCurrentArtifact(pluginId: string) {\n    const plugin = this.requiredPlugin(pluginId)\n    const version = this.currentVersion(plugin)\n    this.assertInstalledVersionAllowed(plugin, version)\n    return await this.getArtifact(version)\n  }\n\n  private async getArtifact(version: InstalledViewerVersionV1) {\n    const bytes = await this.artifactCache.get(version.artifact.sha256)\n    if (!bytes) throw new PayloadViewerStoreErrorV1('artifact-missing', `Installed artifact is unavailable: ${version.artifact.sha256}`)\n    const digest = await this.crypto.digest(bytes)\n    const sha256 = [...digest].map(byte => byte.toString(16).padStart(2, '0')).join('')\n    if (sha256 !== version.artifact.sha256) {\n      throw new PayloadViewerStoreErrorV1('resource-mismatch', 'Cached artifact failed its SHA-256 integrity check')\n    }\n    return bytes\n  }\n\n  async uninstall(pluginId: string) {\n    const index = this.state.plugins.findIndex(plugin => plugin.pluginId === pluginId)\n    if (index === -1) throw new PayloadViewerStoreErrorV1('invalid-operation', `Payload viewer is not installed: ${pluginId}`)\n    const [removed] = this.state.plugins.splice(index, 1)\n    this.clearInvalidDefaults()\n    const retainedHashes = new Set(this.state.plugins.flatMap(plugin => plugin.versions.map(version => version.artifact.sha256)))\n    for (const version of removed?.versions ?? []) {\n      if (!retainedHashes.has(version.artifact.sha256)) await this.artifactCache.delete(version.artifact.sha256)\n    }\n    await this.persist()\n  }\n\n  private assertCatalogVersion(version: VerifiedViewerVersionV1) {\n    if (!this.catalog) throw new PayloadViewerStoreErrorV1('catalog-not-loaded', 'A verified catalog must be applied before installation')\n    const current = this.catalogVersion(version.manifest.id, version.manifest.version)\n    if (!current || current.artifact.sha256 !== version.catalogVersion.artifact.sha256) {\n      throw new PayloadViewerStoreErrorV1('catalog-version-not-found', 'Verified viewer version is not present in the active catalog')\n    }\n    assertViewerVersionAllowedV1(this.catalog, current, version.manifest)\n  }\n\n  private assertInstalledVersionAllowed(plugin: InstalledViewerPluginV1, version: InstalledViewerVersionV1) {\n    if (!this.catalog) throw new PayloadViewerStoreErrorV1('catalog-not-loaded', 'A verified catalog must be applied before enabling viewers')\n    const catalogVersion = this.catalogVersion(plugin.pluginId, version.manifest.version)\n    if (!catalogVersion) throw new PayloadViewerStoreErrorV1('catalog-version-not-found', 'Installed version is absent from the active catalog')\n    assertViewerVersionAllowedV1(this.catalog, catalogVersion, version.manifest)\n  }\n\n  private assertPermissions(requested: readonly ViewerPermissionV1[], approved: readonly ViewerPermissionV1[]) {\n    this.assertSupportedPermissions(requested)\n    if (\n      new Set(approved).size !== approved.length\n        || !includesAll(approved, requested)\n        || !approved.every(permission => requested.includes(permission))\n    ) {\n      throw new PayloadViewerStoreErrorV1('permission-reapproval-required', 'All requested permissions require explicit approval')\n    }\n  }\n\n  private assertSupportedPermissions(requested: readonly ViewerPermissionV1[]) {\n    const unsupported = requested.filter(permission => !supportedPermissions.has(permission))\n    if (unsupported.length > 0) {\n      throw new PayloadViewerStoreErrorV1('unsupported-permission', `V1 store does not support: ${unsupported.join(', ')}`)\n    }\n  }\n\n  private catalogVersion(pluginId: string, versionValue: string): ViewerCatalogVersionV1 | undefined {\n    return this.catalog?.versions.find(value => value.pluginId === pluginId && value.version === versionValue)\n  }\n\n  private clearInvalidDefaults() {\n    const enabledIds = new Set(this.enabledViewers().map(viewer => viewer.viewerId))\n    this.state.defaults = this.state.defaults.filter(value => enabledIds.has(value.viewerId))\n  }\n\n  private currentVersion(plugin: InstalledViewerPluginV1) {\n    return this.requiredVersion(plugin, plugin.currentVersion)\n  }\n\n  private installedVersion(version: VerifiedViewerVersionV1): InstalledViewerVersionV1 {\n    return {\n      artifact: version.catalogVersion.artifact,\n      installedAt: this.now().toISOString(),\n      manifest: version.manifest,\n      manifestResource: version.catalogVersion.manifest,\n      verifiedAt: version.verifiedAt,\n      working: false,\n    }\n  }\n\n  private isInstalledVersionAllowed(plugin: InstalledViewerPluginV1, versionValue: string) {\n    if (!this.catalog) return false\n    const version = plugin.versions.find(value => value.manifest.version === versionValue)\n    const catalogVersion = this.catalogVersion(plugin.pluginId, versionValue)\n    if (!version || !catalogVersion) return false\n    try {\n      assertViewerVersionAllowedV1(this.catalog, catalogVersion, version.manifest)\n      return true\n    } catch {\n      return false\n    }\n  }\n\n  private plugin(pluginId: string) {\n    return this.state.plugins.find(plugin => plugin.pluginId === pluginId)\n  }\n\n  private async persist() {\n    await this.storage.save(this.snapshot())\n  }\n\n  private requiredPlugin(pluginId: string) {\n    const plugin = this.plugin(pluginId)\n    if (!plugin) throw new PayloadViewerStoreErrorV1('invalid-operation', `Payload viewer is not installed: ${pluginId}`)\n    return plugin\n  }\n\n  private requiredVersion(plugin: InstalledViewerPluginV1, versionValue: string) {\n    const version = plugin.versions.find(value => value.manifest.version === versionValue)\n    if (!version) {\n      throw new PayloadViewerStoreErrorV1('invalid-operation', `Payload viewer version is not installed: ${plugin.pluginId}@${versionValue}`)\n    }\n    return version\n  }\n}\n", "import type { SignedViewerResourceV1 } from '@xyo-network/payload-viewer-protocol'\nimport {\n  isPluginIdV1, isViewerIdV1, StorePermissionsV1, validateViewerPluginManifestV1, ViewerSurfacesV1,\n} from '@xyo-network/payload-viewer-protocol'\n\nimport type { PayloadViewerStoreStateStorageV1, PayloadViewerStoreStateV1 } from './types.ts'\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isStringArray = (value: unknown): value is string[] => Array.isArray(value) && value.every(item => typeof item === 'string')\nconst storePermissions = new Set<string>(StorePermissionsV1)\nconst viewerSurfaces = new Set<string>(ViewerSurfacesV1)\n\nconst isStorePermissionArray = (value: unknown): value is string[] => isStringArray(value)\n  && new Set(value).size === value.length\n  && value.every(permission => storePermissions.has(permission))\n\nconst isSignedResource = (value: unknown, kind: 'artifact' | 'manifest'): value is SignedViewerResourceV1 => isRecord(value)\n  && value.kind === kind\n  && typeof value.sha256 === 'string'\n  && /^[0-9a-f]{64}$/u.test(value.sha256)\n  && typeof value.size === 'number'\n  && Number.isSafeInteger(value.size)\n  && value.size >= 1\n  && value.size <= 20_000_000\n  && typeof value.url === 'string'\n  && /^https:\\/\\//u.test(value.url)\n  && Array.isArray(value.signatures)\n  && value.signatures.length >= 1\n  && value.signatures.length <= 8\n  && value.signatures.every(signature => isRecord(signature)\n    && signature.algorithm === 'Ed25519'\n    && typeof signature.keyId === 'string'\n    && /^[A-Za-z0-9._:-]+$/u.test(signature.keyId)\n    && typeof signature.signature === 'string'\n    && /^[A-Za-z0-9_-]{86}$/u.test(signature.signature))\n\n/** Runtime type guard for persisted {@link PayloadViewerStoreStateV1} values. */\nexport const isPayloadViewerStoreStateV1 = (value: unknown): value is PayloadViewerStoreStateV1 => {\n  if (!isRecord(value) || value.revision !== 1 || !Array.isArray(value.plugins) || !Array.isArray(value.defaults)) return false\n  const defaultIds = new Set<string>()\n  if (!value.defaults.every(item => isRecord(item)\n    && typeof item.schema === 'string' && item.schema.length > 0\n    && typeof item.surface === 'string'\n    && viewerSurfaces.has(item.surface)\n    && typeof item.viewerId === 'string'\n    && isViewerIdV1(item.viewerId)\n    && !defaultIds.has(`${item.schema}\\u0000${item.surface}`)\n    && Boolean(defaultIds.add(`${item.schema}\\u0000${item.surface}`)))) return false\n\n  const pluginIds = new Set<string>()\n  return value.plugins.every((plugin) => {\n    if (\n      !isRecord(plugin)\n      || typeof plugin.pluginId !== 'string'\n      || !isPluginIdV1(plugin.pluginId)\n      || pluginIds.has(plugin.pluginId)\n      || typeof plugin.currentVersion !== 'string'\n      || typeof plugin.enabled !== 'boolean'\n      || !isStorePermissionArray(plugin.approvedPermissions)\n      || !isStorePermissionArray(plugin.grantedPermissions)\n      || !Array.isArray(plugin.versions)\n      || plugin.versions.length === 0\n    ) return false\n    const approvedPermissions = plugin.approvedPermissions\n    const grantedPermissions = plugin.grantedPermissions\n    pluginIds.add(plugin.pluginId)\n    const versions = new Set<string>()\n    const versionsValid = plugin.versions.every((version) => {\n      if (\n        !isRecord(version)\n        || !isSignedResource(version.artifact, 'artifact')\n        || !isSignedResource(version.manifestResource, 'manifest')\n        || typeof version.installedAt !== 'string'\n        || !Number.isFinite(Date.parse(version.installedAt))\n        || typeof version.verifiedAt !== 'string'\n        || !Number.isFinite(Date.parse(version.verifiedAt))\n        || typeof version.working !== 'boolean'\n      ) return false\n      const artifact = version.artifact\n      const manifest = validateViewerPluginManifestV1(version.manifest)\n      return manifest.valid\n        && manifest.value.id === plugin.pluginId\n        && !versions.has(manifest.value.version)\n        && Boolean(versions.add(manifest.value.version))\n        && artifact.sha256 === manifest.value.artifact.sha256\n        && artifact.size === manifest.value.artifact.size\n        && artifact.url === manifest.value.artifact.url\n    })\n    const current = plugin.versions.find(version => isRecord(version)\n      && isRecord(version.manifest)\n      && version.manifest.version === plugin.currentVersion)\n    if (!versionsValid || !current || !isRecord(current.manifest) || !Array.isArray(current.manifest.permissions)) return false\n    return grantedPermissions.every(permission => current.manifest.permissions.includes(permission))\n      && grantedPermissions.every(permission => approvedPermissions.includes(permission))\n      && (!plugin.enabled || grantedPermissions.includes('payload.read.current'))\n  })\n}\n\n/** In-memory storage backend for {@link PayloadViewerStoreStateV1}. */\nexport class MemoryPayloadViewerStateStorageV1 implements PayloadViewerStoreStateStorageV1 {\n  private state?: PayloadViewerStoreStateV1\n\n  async load() {\n    return this.state ? structuredClone(this.state) : undefined\n  }\n\n  async save(state: PayloadViewerStoreStateV1) {\n    this.state = structuredClone(state)\n  }\n}\n\n/** `localStorage` backend for persisting {@link PayloadViewerStoreStateV1}. */\nexport class LocalStoragePayloadViewerStateStorageV1 implements PayloadViewerStoreStateStorageV1 {\n  private readonly key: string\n  private readonly storage: Storage\n\n  constructor(storage = globalThis.localStorage, key = 'xyo.payloadViewerStore.v1') {\n    this.storage = storage\n    this.key = key\n  }\n\n  async load() {\n    // Native storage is appropriate here because this is local UI/install metadata, never XYO payload data.\n    const serialized = this.storage.getItem(this.key)\n    if (!serialized) return\n    try {\n      const value: unknown = JSON.parse(serialized)\n      return isPayloadViewerStoreStateV1(value) ? value : undefined\n    } catch {\n      return\n    }\n  }\n\n  async save(state: PayloadViewerStoreStateV1) {\n    this.storage.setItem(this.key, JSON.stringify(state))\n  }\n}\n"],
  "mappings": "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",
  "names": ["StorePermissionsV1", "validateViewerPluginManifestV1", "StorePermissionsV1"]
}
