{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/functions.ts","../src/utils.ts","../src/impl/StatusList2021.ts","../src/impl/OAuthStatusList.ts","../src/impl/encoding/jwt.ts","../src/impl/encoding/common.ts","../src/impl/encoding/cbor.ts","../src/impl/StatusListFactory.ts"],"sourcesContent":["/**\n */\n\nexport * from './types'\nexport * from './functions'\n","import type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n  type ICredential,\n  type ICredentialStatus,\n  type IIssuer,\n  type IVerifiableCredential,\n  type OrPromise,\n  type CredentialProofFormat,\n  type StatusListCredential,\n  StatusListCredentialIdMode,\n  StatusListDriverType,\n  type StatusListIndexingDirection,\n  StatusListType,\n  type StatusPurpose2021,\n} from '@sphereon/ssi-types'\nimport type {\n  CredentialPayload,\n  IAgentContext,\n  ICredentialIssuer,\n  ICredentialPlugin,\n  ICredentialVerifier,\n  IKeyManager,\n  IPluginMethodMap,\n} from '@veramo/core'\nimport { DataSource } from 'typeorm'\nimport type { BitsPerStatus } from '@sd-jwt/jwt-status-list'\nimport type { SdJwtVcPayload } from '@sd-jwt/sd-jwt-vc'\nimport type { StatusListOpts } from '@sphereon/oid4vci-common'\n\nexport enum StatusOAuth {\n  Valid = 0,\n  Invalid = 1,\n  Suspended = 2,\n}\n\nexport enum Status2021 {\n  Valid = 0,\n  Invalid = 1,\n}\n\nexport type StatusList2021Args = {\n  indexingDirection: StatusListIndexingDirection\n  statusPurpose?: StatusPurpose2021\n  // todo: validFrom and validUntil\n}\n\nexport type OAuthStatusListArgs = {\n  bitsPerStatus?: BitsPerStatus\n  expiresAt?: Date\n}\n\nexport type BaseCreateNewStatusListArgs = {\n  type: StatusListType\n  id: string\n  issuer: string | IIssuer\n  correlationId?: string\n  length?: number\n  proofFormat?: CredentialProofFormat\n  keyRef?: string\n  statusList2021?: StatusList2021Args\n  oauthStatusList?: OAuthStatusListArgs\n  driverType?: StatusListDriverType\n}\n\nexport type UpdateStatusList2021Args = {\n  statusPurpose: StatusPurpose2021\n}\n\nexport type UpdateOAuthStatusListArgs = {\n  bitsPerStatus: BitsPerStatus\n  expiresAt?: Date\n}\n\nexport interface UpdateStatusListFromEncodedListArgs {\n  type?: StatusListType\n  statusListIndex: number | string\n  value: boolean\n  proofFormat?: CredentialProofFormat\n  keyRef?: string\n  correlationId?: string\n  encodedList: string\n  issuer: string | IIssuer\n  id: string\n  statusList2021?: UpdateStatusList2021Args\n  oauthStatusList?: UpdateOAuthStatusListArgs\n}\n\nexport interface UpdateStatusListFromStatusListCredentialArgs {\n  statusListCredential: StatusListCredential // | CompactJWT\n  keyRef?: string\n  statusListIndex: number | string\n  value: number | Status2021 | StatusOAuth\n}\n\nexport interface StatusListResult {\n  encodedList: string\n  statusListCredential: StatusListCredential\n  length: number\n  type: StatusListType\n  proofFormat: CredentialProofFormat\n  id: string\n  statuslistContentType: string\n  issuer: string | IIssuer\n  statusList2021?: StatusList2021Details\n  oauthStatusList?: OAuthStatusDetails\n\n  // These cannot be deduced from the VC, so they are present when callers pass in these values as params\n  correlationId?: string\n  driverType?: StatusListDriverType\n  credentialIdMode?: StatusListCredentialIdMode\n}\n\ninterface StatusList2021Details {\n  indexingDirection: StatusListIndexingDirection\n  statusPurpose?: StatusPurpose2021\n}\n\ninterface OAuthStatusDetails {\n  bitsPerStatus?: BitsPerStatus\n  expiresAt?: Date\n}\n\nexport interface StatusList2021EntryCredentialStatus extends ICredentialStatus {\n  type: 'StatusList2021Entry'\n  statusPurpose: StatusPurpose2021\n  statusListIndex: string\n  statusListCredential: string\n}\n\nexport interface StatusListOAuthEntryCredentialStatus extends ICredentialStatus {\n  type: 'OAuthStatusListEntry'\n  bitsPerStatus: number\n  statusListIndex: string\n  statusListCredential: string\n  expiresAt?: Date\n}\n\nexport interface StatusList2021ToVerifiableCredentialArgs {\n  issuer: string | IIssuer\n  id: string\n  type?: StatusListType\n  proofFormat?: CredentialProofFormat\n  keyRef?: string\n  encodedList: string\n  statusPurpose: StatusPurpose2021\n}\n\nexport interface CreateStatusListArgs {\n  issuer: string | IIssuer\n  id: string\n  proofFormat?: CredentialProofFormat\n  keyRef?: string\n  correlationId?: string\n  length?: number\n  statusList2021?: StatusList2021Args\n  oauthStatusList?: OAuthStatusListArgs\n}\n\nexport interface UpdateStatusListIndexArgs {\n  statusListCredential: StatusListCredential // | CompactJWT\n  statusListIndex: number | string\n  value: number | Status2021 | StatusOAuth\n  keyRef?: string\n  expiresAt?: Date\n}\n\nexport interface CheckStatusIndexArgs {\n  statusListCredential: StatusListCredential // | CompactJWT\n  statusListIndex: string | number\n}\n\nexport interface ToStatusListDetailsArgs {\n  statusListPayload: StatusListCredential\n  correlationId?: string\n  driverType?: StatusListDriverType\n}\n\n/**\n * The interface definition for a plugin that can add statuslist info to a credential\n *\n * @remarks Please see {@link https://www.w3.org/TR/vc-data-model | W3C Verifiable Credentials data model}\n *\n * @beta This API is likely to change without a BREAKING CHANGE notice\n */\nexport interface IStatusListPlugin extends IPluginMethodMap {\n  /**\n   * Create a new status list\n   *\n   * @param args Status list information like type and size\n   * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n   *\n   * @returns - The details of the newly created status list\n   */\n  slCreateStatusList(args: CreateNewStatusListArgs, context: IRequiredContext): Promise<StatusListResult>\n\n  /**\n   * Ensures status list info like index and list id is added to a credential\n   *\n   * @param args - Arguments necessary to add the statuslist info.\n   * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n   *\n   * @returns - a promise that resolves to the credential now with status support\n   *\n   * @beta This API is likely to change without a BREAKING CHANGE notice\n   */\n  slAddStatusToCredential(args: IAddStatusToCredentialArgs, context: IRequiredContext): Promise<CredentialWithStatusSupport>\n\n  slAddStatusToSdJwtCredential(args: IAddStatusToSdJwtCredentialArgs, context: IRequiredContext): Promise<SdJwtVcPayload>\n\n  /**\n   * Get the status list using the configured driver for the SL. Normally a correlationId or id should suffice. Optionally accepts a dbName/datasource\n   * @param args\n   * @param context\n   */\n  slGetStatusList(args: GetStatusListArgs, context: IRequiredContext): Promise<StatusListResult>\n\n  /**\n   * Import status lists when noy yet present\n   *\n   * @param imports Array of status list information like type and size\n   * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n   */\n  slImportStatusLists(imports: Array<CreateNewStatusListArgs>, context: IRequiredContext): Promise<boolean>\n}\n\nexport type CreateNewStatusListFuncArgs = BaseCreateNewStatusListArgs\n\nexport type CreateNewStatusListArgs = BaseCreateNewStatusListArgs & {\n  dbName?: string\n  dataSource?: OrPromise<DataSource>\n  isDefault?: boolean\n}\n\nexport type IAddStatusToCredentialArgs = Omit<IIssueCredentialStatusOpts, 'dataSource'> & {\n  credential: CredentialWithStatusSupport\n}\n\nexport type IAddStatusToSdJwtCredentialArgs = Omit<IIssueCredentialStatusOpts, 'dataSource'> & {\n  credential: SdJwtVcPayload\n}\n\nexport interface IIssueCredentialStatusOpts {\n  dataSource?: DataSource\n  statusLists?: Array<StatusListOpts>\n  credentialId?: string // An id to use for the credential. Normally should be set as the crdential.id value\n  value?: string\n}\n\nexport type GetStatusListArgs = {\n  id?: string\n  correlationId?: string\n  dataSource?: OrPromise<DataSource>\n  dbName?: string\n}\n\nexport type CredentialWithStatusSupport = ICredential | CredentialPayload | IVerifiableCredential\n\nexport type SignedStatusListData = {\n  statusListCredential: StatusListCredential\n  encodedList: string\n}\n\nexport type IRequiredPlugins = ICredentialPlugin & IIdentifierResolution\nexport type IRequiredContext = IAgentContext<ICredentialIssuer & ICredentialVerifier & IIdentifierResolution & IKeyManager & ICredentialPlugin>\n","import type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n  CredentialMapper,\n  DocumentFormat,\n  type CredentialProofFormat,\n  type StatusListCredential,\n  StatusListDriverType,\n  StatusListType,\n  type StatusPurpose2021,\n} from '@sphereon/ssi-types'\nimport type { CredentialStatus, DIDDocument, IAgentContext, ICredentialPlugin, ProofFormat as VeramoProofFormat } from '@veramo/core'\n\nimport { checkStatus } from '@sphereon/vc-status-list'\n\n// @ts-ignore\nimport { CredentialJwtOrJSON, StatusMethod } from 'credential-status'\nimport {\n  CreateNewStatusListFuncArgs,\n  Status2021,\n  StatusList2021ToVerifiableCredentialArgs,\n  StatusListResult,\n  StatusOAuth,\n  UpdateStatusListFromEncodedListArgs,\n  UpdateStatusListIndexArgs,\n} from './types'\nimport { assertValidProofType, determineStatusListType, getAssertedValue, getAssertedValues } from './utils'\nimport { getStatusListImplementation } from './impl/StatusListFactory'\n\nexport async function fetchStatusListCredential(args: { statusListCredential: string }): Promise<StatusListCredential> {\n  const url = getAssertedValue('statusListCredential', args.statusListCredential)\n  try {\n    const response = await fetch(url)\n    if (!response.ok) {\n      throw Error(`Fetching status list ${url} resulted in an error: ${response.status} : ${response.statusText}`)\n    }\n    const responseAsText = await response.text()\n    if (responseAsText.trim().startsWith('{')) {\n      return JSON.parse(responseAsText) as StatusListCredential\n    }\n    return responseAsText as StatusListCredential\n  } catch (error) {\n    console.error(`Fetching status list ${url} resulted in an unexpected error: ${error instanceof Error ? error.message : JSON.stringify(error)}`)\n    throw error\n  }\n}\n\nexport function statusPluginStatusFunction(args: {\n  documentLoader: any\n  suite: any\n  mandatoryCredentialStatus?: boolean\n  verifyStatusListCredential?: boolean\n  verifyMatchingIssuers?: boolean\n  errorUnknownListType?: boolean\n}): StatusMethod {\n  return async (credential: CredentialJwtOrJSON, didDoc: DIDDocument): Promise<CredentialStatus> => {\n    const result = await checkStatusForCredential({\n      ...args,\n      documentLoader: args.documentLoader,\n      credential: credential as StatusListCredential,\n      errorUnknownListType: args.errorUnknownListType,\n    })\n\n    return {\n      revoked: !result.verified || result.error,\n      ...(result.error && { error: result.error }),\n    }\n  }\n}\n\n/**\n * Function that can be used together with @digitalbazar/vc and @digitialcredentials/vc\n * @param args\n */\nexport function vcLibCheckStatusFunction(args: {\n  mandatoryCredentialStatus?: boolean\n  verifyStatusListCredential?: boolean\n  verifyMatchingIssuers?: boolean\n  errorUnknownListType?: boolean\n}) {\n  const { mandatoryCredentialStatus, verifyStatusListCredential, verifyMatchingIssuers, errorUnknownListType } = args\n  return (args: {\n    credential: StatusListCredential\n    documentLoader: any\n    suite: any\n  }): Promise<{\n    verified: boolean\n    error?: any\n  }> => {\n    return checkStatusForCredential({\n      ...args,\n      mandatoryCredentialStatus,\n      verifyStatusListCredential,\n      verifyMatchingIssuers,\n      errorUnknownListType,\n    })\n  }\n}\n\nexport async function checkStatusForCredential(args: {\n  credential: StatusListCredential\n  documentLoader: any\n  suite: any\n  mandatoryCredentialStatus?: boolean\n  verifyStatusListCredential?: boolean\n  verifyMatchingIssuers?: boolean\n  errorUnknownListType?: boolean\n}): Promise<{ verified: boolean; error?: any }> {\n  const verifyStatusListCredential = args.verifyStatusListCredential ?? true\n  const verifyMatchingIssuers = args.verifyMatchingIssuers ?? true\n  const uniform = CredentialMapper.toUniformCredential(args.credential)\n  if (!('credentialStatus' in uniform) || !uniform.credentialStatus) {\n    if (args.mandatoryCredentialStatus) {\n      const error = 'No credential status object found in the Verifiable Credential and it is mandatory'\n      console.log(error)\n      return { verified: false, error }\n    }\n    return { verified: true }\n  }\n  if ('credentialStatus' in uniform && uniform.credentialStatus) {\n    if (uniform.credentialStatus.type === 'StatusList2021Entry') {\n      return checkStatus({ ...args, verifyStatusListCredential, verifyMatchingIssuers })\n    } else if (args?.errorUnknownListType) {\n      const error = `Credential status type ${uniform.credentialStatus.type} is not supported, and check status has been configured to not allow for that`\n      console.log(error)\n      return { verified: false, error }\n    } else {\n      console.log(`Skipped verification of status type ${uniform.credentialStatus.type} as we do not support it (yet)`)\n    }\n  }\n  return { verified: true }\n}\n\nexport async function simpleCheckStatusFromStatusListUrl(args: {\n  statusListCredential: string\n  statusPurpose?: StatusPurpose2021\n  type?: StatusListType | 'StatusList2021Entry'\n  id?: string\n  statusListIndex: string\n}): Promise<number | Status2021 | StatusOAuth> {\n  return checkStatusIndexFromStatusListCredential({\n    ...args,\n    statusListCredential: await fetchStatusListCredential(args),\n  })\n}\n\nexport async function checkStatusIndexFromStatusListCredential(args: {\n  statusListCredential: StatusListCredential\n  statusPurpose?: StatusPurpose2021\n  type?: StatusListType | 'StatusList2021Entry'\n  id?: string\n  statusListIndex: string | number\n}): Promise<number | Status2021 | StatusOAuth> {\n  const statusListType: StatusListType = determineStatusListType(args.statusListCredential)\n  const implementation = getStatusListImplementation(statusListType)\n  return implementation.checkStatusIndex(args)\n}\n\nexport async function createNewStatusList(\n  args: CreateNewStatusListFuncArgs,\n  context: IAgentContext<(ICredentialPlugin | any) /*IvcdMCredentialPlugin is not available*/ & IIdentifierResolution>,\n): Promise<StatusListResult> {\n  const { type } = getAssertedValues(args)\n  const implementation = getStatusListImplementation(type)\n  return implementation.createNewStatusList(args, context)\n}\n\nexport async function updateStatusIndexFromStatusListCredential(\n  args: UpdateStatusListIndexArgs,\n  context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n  const credential = getAssertedValue('statusListCredential', args.statusListCredential)\n  const statusListType: StatusListType = determineStatusListType(credential)\n  const implementation = getStatusListImplementation(statusListType)\n  return implementation.updateStatusListIndex(args, context)\n}\n\n// Keeping helper function for backward compatibility\nexport async function statusListCredentialToDetails(args: {\n  statusListCredential: StatusListCredential\n  correlationId?: string\n  driverType?: StatusListDriverType\n}): Promise<StatusListResult> {\n  const credential = getAssertedValue('statusListCredential', args.statusListCredential)\n\n  let statusListType: StatusListType | undefined\n  const documentFormat = CredentialMapper.detectDocumentType(credential)\n  if (documentFormat === DocumentFormat.JWT) {\n    const [header] = credential.split('.')\n    const decodedHeader = JSON.parse(Buffer.from(header, 'base64').toString())\n\n    if (decodedHeader.typ === 'statuslist+jwt') {\n      statusListType = StatusListType.OAuthStatusList\n    }\n  } else if (documentFormat === DocumentFormat.MSO_MDOC) {\n    statusListType = StatusListType.OAuthStatusList\n    // TODO check CBOR content?\n  }\n  if (!statusListType) {\n    const uniform = CredentialMapper.toUniformCredential(credential)\n    const type = uniform.type.find((t) => t.includes('StatusList2021') || t.includes('OAuth2StatusList'))\n    if (!type) {\n      throw new Error('Invalid status list credential type')\n    }\n    statusListType = type.replace('Credential', '') as StatusListType\n  }\n\n  const implementation = getStatusListImplementation(statusListType)\n  return await implementation.toStatusListDetails({\n    statusListPayload: credential,\n    correlationId: args.correlationId,\n    driverType: args.driverType,\n  })\n}\n\nexport async function updateStatusListIndexFromEncodedList(\n  args: UpdateStatusListFromEncodedListArgs,\n  context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n  const { type } = getAssertedValue('type', args)\n  const implementation = getStatusListImplementation(type!)\n  return implementation.updateStatusListFromEncodedList(args, context)\n}\n\nexport async function statusList2021ToVerifiableCredential(\n  args: StatusList2021ToVerifiableCredentialArgs,\n  context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListCredential> {\n  const { issuer, id, type } = getAssertedValues(args)\n  const identifier = await context.agent.identifierManagedGet({\n    identifier: typeof issuer === 'string' ? issuer : issuer.id,\n    vmRelationship: 'assertionMethod',\n    offlineWhenNoDIDRegistered: true, // FIXME Fix identifier resolution for EBSI\n  })\n  const proofFormat: CredentialProofFormat = args?.proofFormat ?? 'lds'\n  assertValidProofType(StatusListType.StatusList2021, proofFormat)\n  const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n  const encodedList = getAssertedValue('encodedList', args.encodedList)\n  const statusPurpose = getAssertedValue('statusPurpose', args.statusPurpose)\n  const credential = {\n    '@context': ['https://www.w3.org/2018/credentials/v1', 'https://w3id.org/vc/status-list/2021/v1'],\n    id,\n    issuer,\n    // issuanceDate: \"2021-03-10T04:24:12.164Z\",\n    type: ['VerifiableCredential', `${type}Credential`],\n    credentialSubject: {\n      id,\n      type,\n      statusPurpose,\n      encodedList,\n    },\n  }\n  // TODO copy statuslist schema to local and disable fetching remote contexts\n  const verifiableCredential = await context.agent.createVerifiableCredential({\n    credential,\n    keyRef: identifier.kmsKeyRef,\n    proofFormat: veramoProofFormat,\n    fetchRemoteContexts: true,\n  })\n\n  return CredentialMapper.toWrappedVerifiableCredential(verifiableCredential as StatusListCredential).original as StatusListCredential\n}\n","import {\n  CredentialMapper,\n  type IIssuer,\n  type CredentialProofFormat,\n  StatusListType,\n  StatusListType as StatusListTypeW3C,\n  type StatusListCredential,\n  DocumentFormat,\n} from '@sphereon/ssi-types'\nimport { jwtDecode } from 'jwt-decode'\n\nexport function getAssertedStatusListType(type?: StatusListType) {\n  const assertedType = type ?? StatusListType.StatusList2021\n  if (![StatusListType.StatusList2021, StatusListType.OAuthStatusList].includes(assertedType)) {\n    throw Error(`StatusList type ${assertedType} is not supported (yet)`)\n  }\n  return assertedType\n}\n\nexport function getAssertedValue<T>(name: string, value: T): NonNullable<T> {\n  if (value === undefined || value === null) {\n    throw Error(`Missing required ${name} value`)\n  }\n  return value\n}\n\nexport function getAssertedValues(args: { issuer: string | IIssuer; id: string; type?: StatusListTypeW3C | StatusListType }) {\n  const type = getAssertedStatusListType(args?.type)\n  const id = getAssertedValue('id', args.id)\n  const issuer = getAssertedValue('issuer', args.issuer)\n  return { id, issuer, type }\n}\n\nexport function getAssertedProperty<T extends object>(propertyName: string, obj: T): NonNullable<any> {\n  if (!(propertyName in obj)) {\n    throw Error(`The input object does not contain required property: ${propertyName}`)\n  }\n  return getAssertedValue(propertyName, (obj as any)[propertyName])\n}\n\nconst ValidProofTypeMap = new Map<StatusListType, CredentialProofFormat[]>([\n  [StatusListType.StatusList2021, ['jwt', 'lds', 'EthereumEip712Signature2021']],\n  [StatusListType.OAuthStatusList, ['jwt', 'cbor']],\n])\n\nexport function assertValidProofType(type: StatusListType, proofFormat: CredentialProofFormat) {\n  const validProofTypes = ValidProofTypeMap.get(type)\n  if (!validProofTypes?.includes(proofFormat)) {\n    throw Error(`Invalid proof format '${proofFormat}' for status list type ${type}`)\n  }\n}\n\nexport function determineStatusListType(credential: StatusListCredential): StatusListType {\n  const proofFormat = determineProofFormat(credential)\n  switch (proofFormat) {\n    case 'jwt':\n      const payload: StatusListCredential = jwtDecode(credential as string)\n      const keys = Object.keys(payload)\n      if (keys.includes('status_list')) {\n        return StatusListType.OAuthStatusList\n      } else if (keys.includes('vc')) {\n        return StatusListType.StatusList2021\n      }\n      break\n    case 'lds':\n      const uniform = CredentialMapper.toUniformCredential(credential)\n      const type = uniform.type.find((t) => {\n        return Object.values(StatusListType).some((statusType) => t.includes(statusType))\n      })\n      if (!type) {\n        throw new Error('Invalid status list credential type')\n      }\n      return type.replace('Credential', '') as StatusListType\n\n    case 'cbor':\n      return StatusListType.OAuthStatusList\n  }\n\n  throw new Error('Cannot determine status list type from credential payload')\n}\n\nexport function determineProofFormat(credential: StatusListCredential): CredentialProofFormat {\n  const type: DocumentFormat = CredentialMapper.detectDocumentType(credential)\n  switch (type) {\n    case DocumentFormat.JWT:\n      return 'jwt'\n    case DocumentFormat.MSO_MDOC:\n      // Not really mdoc, just assume Cbor for now, I'd need to decode at least the header to what type of Cbor we have\n      return 'cbor'\n    case DocumentFormat.JSONLD:\n      return 'lds'\n    default:\n      throw Error('Cannot determine credential payload type')\n  }\n}\n","import type { IAgentContext, ICredentialPlugin, ProofFormat as VeramoProofFormat } from '@veramo/core'\nimport type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n  CredentialMapper,\n  DocumentFormat,\n  type IIssuer,\n  type CredentialProofFormat,\n  type StatusListCredential,\n  StatusListType,\n} from '@sphereon/ssi-types'\n\nimport { StatusList } from '@sphereon/vc-status-list'\nimport type { IStatusList } from './IStatusList'\nimport type {\n  CheckStatusIndexArgs,\n  CreateStatusListArgs,\n  StatusListResult,\n  ToStatusListDetailsArgs,\n  UpdateStatusListFromEncodedListArgs,\n  UpdateStatusListIndexArgs,\n} from '../types'\n\nimport { Status2021 } from '../types'\nimport { assertValidProofType, getAssertedProperty, getAssertedValue, getAssertedValues } from '../utils'\n\nexport const DEFAULT_LIST_LENGTH = 250000\nexport const DEFAULT_PROOF_FORMAT = 'lds' as VeramoProofFormat\n\nexport class StatusList2021Implementation implements IStatusList {\n  async createNewStatusList(\n    args: CreateStatusListArgs,\n    context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n  ): Promise<StatusListResult> {\n    const length = args?.length ?? DEFAULT_LIST_LENGTH\n    const proofFormat: CredentialProofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n    assertValidProofType(StatusListType.StatusList2021, proofFormat)\n    const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n    const { issuer, id } = args\n    const correlationId = getAssertedValue('correlationId', args.correlationId)\n\n    const list = new StatusList({ length })\n    const encodedList = await list.encode()\n    const statusPurpose = 'revocation'\n\n    const statusListCredential = await this.createVerifiableCredential(\n      {\n        ...args,\n        encodedList,\n        proofFormat: veramoProofFormat,\n      },\n      context,\n    )\n\n    return {\n      encodedList,\n      statusListCredential: statusListCredential,\n      statusList2021: {\n        statusPurpose,\n        indexingDirection: 'rightToLeft',\n      },\n      length,\n      type: StatusListType.StatusList2021,\n      proofFormat,\n      id,\n      correlationId,\n      issuer,\n      statuslistContentType: this.buildContentType(proofFormat),\n    }\n  }\n\n  async updateStatusListIndex(\n    args: UpdateStatusListIndexArgs,\n    context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n  ): Promise<StatusListResult> {\n    const credential = args.statusListCredential\n    const uniform = CredentialMapper.toUniformCredential(credential)\n    const { issuer, credentialSubject } = uniform\n    const id = getAssertedValue('id', uniform.id)\n    const origEncodedList = getAssertedProperty('encodedList', credentialSubject)\n\n    const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n    const statusList = await StatusList.decode({ encodedList: origEncodedList })\n    statusList.setStatus(index, args.value != 0)\n    const encodedList = await statusList.encode()\n\n    const proofFormat = CredentialMapper.detectDocumentType(credential) === DocumentFormat.JWT ? 'jwt' : 'lds'\n    const updatedCredential = await this.createVerifiableCredential(\n      {\n        ...args,\n        id,\n        issuer,\n        encodedList,\n        proofFormat: proofFormat,\n      },\n      context,\n    )\n\n    return {\n      statusListCredential: updatedCredential,\n      encodedList,\n      statusList2021: {\n        ...('statusPurpose' in credentialSubject ? { statusPurpose: credentialSubject.statusPurpose } : {}),\n        indexingDirection: 'rightToLeft',\n      },\n      length: statusList.length - 1,\n      type: StatusListType.StatusList2021,\n      proofFormat: proofFormat,\n      id,\n      issuer,\n      statuslistContentType: this.buildContentType(proofFormat),\n    }\n  }\n\n  async updateStatusListFromEncodedList(\n    args: UpdateStatusListFromEncodedListArgs,\n    context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n  ): Promise<StatusListResult> {\n    if (!args.statusList2021) {\n      throw new Error('statusList2021 options required for type StatusList2021')\n    }\n    const proofFormat: CredentialProofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n    assertValidProofType(StatusListType.StatusList2021, proofFormat)\n    const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n    const { issuer, id } = getAssertedValues(args)\n    const statusList = await StatusList.decode({ encodedList: args.encodedList })\n    const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n    statusList.setStatus(index, args.value)\n\n    const newEncodedList = await statusList.encode()\n    const credential = await this.createVerifiableCredential(\n      {\n        id,\n        issuer,\n        encodedList: newEncodedList,\n        proofFormat: veramoProofFormat,\n        keyRef: args.keyRef,\n      },\n      context,\n    )\n\n    return {\n      type: StatusListType.StatusList2021,\n      statusListCredential: credential,\n      encodedList: newEncodedList,\n      statusList2021: {\n        statusPurpose: args.statusList2021.statusPurpose,\n        indexingDirection: 'rightToLeft',\n      },\n      length: statusList.length,\n      proofFormat: args.proofFormat ?? 'lds',\n      id: id,\n      issuer: issuer,\n      statuslistContentType: this.buildContentType(proofFormat),\n    }\n  }\n\n  async checkStatusIndex(args: CheckStatusIndexArgs): Promise<number | Status2021> {\n    const uniform = CredentialMapper.toUniformCredential(args.statusListCredential)\n    const { credentialSubject } = uniform\n    const encodedList = getAssertedProperty('encodedList', credentialSubject)\n\n    const statusList = await StatusList.decode({ encodedList })\n    const status = statusList.getStatus(typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex))\n    return status ? Status2021.Invalid : Status2021.Valid\n  }\n\n  async toStatusListDetails(args: ToStatusListDetailsArgs): Promise<StatusListResult> {\n    const { statusListPayload } = args\n    const uniform = CredentialMapper.toUniformCredential(statusListPayload)\n    const { issuer, credentialSubject } = uniform\n    const id = getAssertedValue('id', uniform.id)\n    const encodedList = getAssertedProperty('encodedList', credentialSubject)\n    const proofFormat: CredentialProofFormat = CredentialMapper.detectDocumentType(statusListPayload) === DocumentFormat.JWT ? 'jwt' : 'lds'\n\n    const statusPurpose = getAssertedProperty('statusPurpose', credentialSubject)\n    const list = await StatusList.decode({ encodedList })\n\n    return {\n      id,\n      encodedList,\n      issuer,\n      type: StatusListType.StatusList2021,\n      proofFormat,\n      length: list.length,\n      statusListCredential: statusListPayload,\n      statuslistContentType: this.buildContentType(proofFormat),\n      statusList2021: {\n        indexingDirection: 'rightToLeft',\n        statusPurpose,\n      },\n      ...(args.correlationId && { correlationId: args.correlationId }),\n      ...(args.driverType && { driverType: args.driverType }),\n    }\n  }\n\n  private async createVerifiableCredential(\n    args: {\n      id: string\n      issuer: string | IIssuer\n      encodedList: string\n      proofFormat: VeramoProofFormat\n      keyRef?: string\n    },\n    context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n  ): Promise<StatusListCredential> {\n    const identifier = await context.agent.identifierManagedGet({\n      identifier: typeof args.issuer === 'string' ? args.issuer : args.issuer.id,\n      vmRelationship: 'assertionMethod',\n      offlineWhenNoDIDRegistered: true,\n    })\n\n    const credential = {\n      '@context': ['https://www.w3.org/2018/credentials/v1', 'https://w3id.org/vc/status-list/2021/v1'],\n      id: args.id,\n      issuer: args.issuer,\n      type: ['VerifiableCredential', 'StatusList2021Credential'],\n      credentialSubject: {\n        id: args.id,\n        type: 'StatusList2021',\n        statusPurpose: 'revocation',\n        encodedList: args.encodedList,\n      },\n    }\n\n    const verifiableCredential = await context.agent.createVerifiableCredential({\n      credential,\n      keyRef: args.keyRef ?? identifier.kmsKeyRef,\n      proofFormat: args.proofFormat,\n      fetchRemoteContexts: true,\n    })\n\n    return CredentialMapper.toWrappedVerifiableCredential(verifiableCredential as StatusListCredential).original as StatusListCredential\n  }\n\n  private buildContentType(proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor' | undefined) {\n    switch (proofFormat) {\n      case 'jwt':\n        return `application/statuslist+jwt`\n      case 'cbor':\n        return `application/statuslist+cwt`\n      case 'lds':\n        return 'application/statuslist+ld+json'\n      default:\n        throw Error(`Unsupported content type '${proofFormat}' for status lists`)\n    }\n  }\n}\n","import type { IAgentContext, ICredentialPlugin, IKeyManager } from '@veramo/core'\nimport { type CompactJWT, type CWT, type CredentialProofFormat, StatusListType } from '@sphereon/ssi-types'\nimport type {\n  CheckStatusIndexArgs,\n  CreateStatusListArgs,\n  SignedStatusListData,\n  StatusListResult,\n  StatusOAuth,\n  ToStatusListDetailsArgs,\n  UpdateStatusListFromEncodedListArgs,\n  UpdateStatusListIndexArgs,\n} from '../types'\nimport { determineProofFormat, getAssertedValue, getAssertedValues } from '../utils'\nimport type { IStatusList } from './IStatusList'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\nimport type { IJwtService } from '@sphereon/ssi-sdk-ext.jwt-service'\nimport type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport { createSignedJwt, decodeStatusListJWT } from './encoding/jwt'\nimport { createSignedCbor, decodeStatusListCWT } from './encoding/cbor'\n\ntype IRequiredContext = IAgentContext<ICredentialPlugin & IJwtService & IIdentifierResolution & IKeyManager>\n\nexport const DEFAULT_BITS_PER_STATUS = 1 // 1 bit is sufficient for 0x00 - \"VALID\"  0x01 - \"INVALID\" saving space in the process\nexport const DEFAULT_LIST_LENGTH = 250000\nexport const DEFAULT_PROOF_FORMAT = 'jwt' as CredentialProofFormat\n\nexport class OAuthStatusListImplementation implements IStatusList {\n  async createNewStatusList(args: CreateStatusListArgs, context: IRequiredContext): Promise<StatusListResult> {\n    if (!args.oauthStatusList) {\n      throw new Error('OAuthStatusList options are required for type OAuthStatusList')\n    }\n\n    const proofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n    const { issuer, id, oauthStatusList, keyRef } = args\n    const { bitsPerStatus, expiresAt } = oauthStatusList\n    const length = args.length ?? DEFAULT_LIST_LENGTH\n    const issuerString = typeof issuer === 'string' ? issuer : issuer.id\n    const correlationId = getAssertedValue('correlationId', args.correlationId)\n\n    const statusList = new StatusList(new Array(length).fill(0), bitsPerStatus ?? DEFAULT_BITS_PER_STATUS)\n    const encodedList = statusList.compressStatusList()\n    const { statusListCredential } = await this.createSignedStatusList(proofFormat, context, statusList, issuerString, id, expiresAt, keyRef)\n\n    return {\n      encodedList,\n      statusListCredential,\n      oauthStatusList: { bitsPerStatus },\n      length,\n      type: StatusListType.OAuthStatusList,\n      proofFormat,\n      id,\n      correlationId,\n      issuer,\n      statuslistContentType: this.buildContentType(proofFormat),\n    }\n  }\n\n  async updateStatusListIndex(args: UpdateStatusListIndexArgs, context: IRequiredContext): Promise<StatusListResult> {\n    const { statusListCredential, value, expiresAt, keyRef } = args\n    if (typeof statusListCredential !== 'string') {\n      return Promise.reject('statusListCredential in neither JWT nor CWT')\n    }\n\n    const proofFormat = determineProofFormat(statusListCredential)\n    const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential)\n    const { statusList, issuer, id } = decoded\n\n    const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n    if (index < 0 || index >= statusList.statusList.length) {\n      throw new Error('Status list index out of bounds')\n    }\n\n    statusList.setStatus(index, value)\n    const { statusListCredential: signedCredential, encodedList } = await this.createSignedStatusList(\n      proofFormat,\n      context,\n      statusList,\n      issuer,\n      id,\n      expiresAt,\n      keyRef,\n    )\n\n    return {\n      statusListCredential: signedCredential,\n      encodedList,\n      oauthStatusList: {\n        bitsPerStatus: statusList.getBitsPerStatus(),\n      },\n      length: statusList.statusList.length,\n      type: StatusListType.OAuthStatusList,\n      proofFormat,\n      id,\n      issuer,\n      statuslistContentType: this.buildContentType(proofFormat),\n    }\n  }\n\n  // FIXME: This still assumes only two values (boolean), whilst this list supports 8 bits max\n  async updateStatusListFromEncodedList(args: UpdateStatusListFromEncodedListArgs, context: IRequiredContext): Promise<StatusListResult> {\n    if (!args.oauthStatusList) {\n      throw new Error('OAuthStatusList options are required for type OAuthStatusList')\n    }\n    const { proofFormat, oauthStatusList, keyRef } = args\n    const { bitsPerStatus, expiresAt } = oauthStatusList\n\n    const { issuer, id } = getAssertedValues(args)\n    const issuerString = typeof issuer === 'string' ? issuer : issuer.id\n\n    const listToUpdate = StatusList.decompressStatusList(args.encodedList, bitsPerStatus ?? DEFAULT_BITS_PER_STATUS)\n    const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n    // FIXME: See above.\n    listToUpdate.setStatus(index, args.value ? 1 : 0)\n\n    const { statusListCredential, encodedList } = await this.createSignedStatusList(\n      proofFormat ?? DEFAULT_PROOF_FORMAT,\n      context,\n      listToUpdate,\n      issuerString,\n      id,\n      expiresAt,\n      keyRef,\n    )\n\n    return {\n      encodedList,\n      statusListCredential,\n      oauthStatusList: {\n        bitsPerStatus,\n        expiresAt,\n      },\n      length: listToUpdate.statusList.length,\n      type: StatusListType.OAuthStatusList,\n      proofFormat: proofFormat ?? DEFAULT_PROOF_FORMAT,\n      id,\n      issuer,\n      statuslistContentType: this.buildContentType(proofFormat),\n    }\n  }\n\n  private buildContentType(proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor' | undefined) {\n    return `application/statuslist+${proofFormat === 'cbor' ? 'cwt' : 'jwt'}`\n  }\n\n  async checkStatusIndex(args: CheckStatusIndexArgs): Promise<number | StatusOAuth> {\n    const { statusListCredential, statusListIndex } = args\n    if (typeof statusListCredential !== 'string') {\n      return Promise.reject('statusListCredential in neither JWT nor CWT')\n    }\n\n    const proofFormat = determineProofFormat(statusListCredential)\n    const { statusList } = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential)\n\n    const index = typeof statusListIndex === 'number' ? statusListIndex : parseInt(statusListIndex)\n    if (index < 0 || index >= statusList.statusList.length) {\n      throw new Error('Status list index out of bounds')\n    }\n\n    return statusList.getStatus(index)\n  }\n\n  async toStatusListDetails(args: ToStatusListDetailsArgs): Promise<StatusListResult> {\n    const { statusListPayload } = args as { statusListPayload: CompactJWT | CWT }\n    const proofFormat = determineProofFormat(statusListPayload)\n    const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListPayload) : decodeStatusListCWT(statusListPayload)\n    const { statusList, issuer, id, exp } = decoded\n\n    return {\n      id,\n      encodedList: statusList.compressStatusList(),\n      issuer,\n      type: StatusListType.OAuthStatusList,\n      proofFormat,\n      length: statusList.statusList.length,\n      statusListCredential: statusListPayload,\n      statuslistContentType: this.buildContentType(proofFormat),\n      oauthStatusList: {\n        bitsPerStatus: statusList.getBitsPerStatus(),\n        ...(exp && { expiresAt: new Date(exp * 1000) }),\n      },\n      ...(args.correlationId && { correlationId: args.correlationId }),\n      ...(args.driverType && { driverType: args.driverType }),\n    }\n  }\n\n  private async createSignedStatusList(\n    proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor',\n    context: IAgentContext<ICredentialPlugin & IJwtService & IIdentifierResolution & IKeyManager>,\n    statusList: StatusList,\n    issuerString: string,\n    id: string,\n    expiresAt?: Date,\n    keyRef?: string,\n  ): Promise<SignedStatusListData> {\n    switch (proofFormat) {\n      case 'jwt': {\n        return await createSignedJwt(context, statusList, issuerString, id, expiresAt, keyRef)\n      }\n      case 'cbor': {\n        return await createSignedCbor(context, statusList, issuerString, id, expiresAt, keyRef)\n      }\n      default:\n        throw new Error(`Invalid proof format '${proofFormat}' for OAuthStatusList`)\n    }\n  }\n}\n","import { type CompactJWT, JoseSignatureAlgorithm } from '@sphereon/ssi-types'\nimport { createHeaderAndPayload, StatusList, type StatusListJWTHeaderParameters, type StatusListJWTPayload } from '@sd-jwt/jwt-status-list'\nimport base64url from 'base64url'\nimport type { JWTPayload } from 'did-jwt'\nimport type { IRequiredContext, SignedStatusListData } from '../../types'\nimport { type DecodedStatusListPayload, resolveIdentifier } from './common'\nimport type { TKeyType } from '@veramo/core'\nimport { ensureManagedIdentifierResult } from '@sphereon/ssi-sdk-ext.identifier-resolution'\n\nconst STATUS_LIST_JWT_TYP = 'statuslist+jwt'\n\nexport const createSignedJwt = async (\n  context: IRequiredContext,\n  statusList: StatusList,\n  issuerString: string,\n  id: string,\n  expiresAt?: Date,\n  keyRef?: string,\n): Promise<SignedStatusListData> => {\n  const identifier = await resolveIdentifier(context, issuerString, keyRef)\n  const resolution = await ensureManagedIdentifierResult(identifier, context)\n\n  const payload: JWTPayload = {\n    iss: issuerString,\n    sub: id,\n    iat: Math.floor(Date.now() / 1000),\n    ...(expiresAt && { exp: Math.floor(expiresAt.getTime() / 1000) }),\n  }\n\n  const header: StatusListJWTHeaderParameters = {\n    alg: getSigningAlgo(resolution.key.type),\n    typ: STATUS_LIST_JWT_TYP,\n  }\n  const values = createHeaderAndPayload(statusList, payload, header)\n  const signedJwt = await context.agent.jwtCreateJwsCompactSignature({\n    issuer: { ...identifier, noIssPayloadUpdate: false },\n    protectedHeader: values.header,\n    payload: values.payload,\n  })\n\n  return {\n    statusListCredential: signedJwt.jwt,\n    encodedList: (values.payload as StatusListJWTPayload).status_list.lst,\n  }\n}\n\nexport const decodeStatusListJWT = (jwt: CompactJWT): DecodedStatusListPayload => {\n  const [, payloadBase64] = jwt.split('.')\n  const payload = JSON.parse(base64url.decode(payloadBase64))\n\n  if (!payload.iss || !payload.sub || !payload.status_list) {\n    throw new Error('Missing required fields in JWT payload')\n  }\n\n  const statusList = StatusList.decompressStatusList(payload.status_list.lst, payload.status_list.bits)\n\n  return {\n    issuer: payload.iss,\n    id: payload.sub,\n    statusList,\n    exp: payload.exp,\n    ttl: payload.ttl,\n    iat: payload.iat,\n  }\n}\n\nexport const getSigningAlgo = (type: TKeyType): JoseSignatureAlgorithm => {\n  switch (type) {\n    case 'Ed25519':\n      return JoseSignatureAlgorithm.EdDSA\n    case 'Secp256k1':\n      return JoseSignatureAlgorithm.ES256K\n    case 'Secp256r1':\n      return JoseSignatureAlgorithm.ES256\n    case 'RSA':\n      return JoseSignatureAlgorithm.RS256\n    default:\n      throw Error('Key type not yet supported')\n  }\n}\n","import type { IRequiredContext } from '../../types'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\n\nexport interface DecodedStatusListPayload {\n  issuer: string\n  id: string\n  statusList: StatusList\n  exp?: number\n  ttl?: number\n  iat: number\n}\n\nexport const resolveIdentifier = async (context: IRequiredContext, issuer: string, keyRef?: string) => {\n  return await context.agent.identifierManagedGet({\n    identifier: issuer,\n    vmRelationship: 'assertionMethod',\n    offlineWhenNoDIDRegistered: true,\n    ...(keyRef && { kmsKeyRef: keyRef }), // TODO the getDid resolver should look at this ASAP\n  })\n}\n","import type { BitsPerStatus } from '@sd-jwt/jwt-status-list'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\nimport { deflate, inflate } from 'pako'\nimport pkg from '@sphereon/kmp-mdoc-core'\nconst { com, kotlin } = pkg\nimport base64url from 'base64url'\nimport type { IRequiredContext, SignedStatusListData } from '../../types'\nimport { type DecodedStatusListPayload, resolveIdentifier } from './common'\n\nexport type IKey = pkg.com.sphereon.crypto.IKey\nexport type CborItem<T> = pkg.com.sphereon.cbor.CborItem<T>\nexport const CborByteString = com.sphereon.cbor.CborByteString\nexport type CborByteStringType = pkg.com.sphereon.cbor.CborByteString\nexport const CborUInt = com.sphereon.cbor.CborUInt\nexport type CborUIntType = pkg.com.sphereon.cbor.CborUInt\nexport const CborString = com.sphereon.cbor.CborString\nexport type CborStringType = pkg.com.sphereon.cbor.CborString\n\n// const cbor = cborpkg.com.sphereon.cbor\n// const kmp = cborpkg.com.sphereon.kmp\n// const kotlin = cborpkg.kotlin\nconst decompressRawStatusList = (StatusList as any).decodeStatusList.bind(StatusList)\n\nconst CWT_CLAIMS = {\n  SUBJECT: 2,\n  ISSUER: 1,\n  ISSUED_AT: 6,\n  EXPIRATION: 4,\n  TIME_TO_LIVE: 65534,\n  STATUS_LIST: 65533,\n} as const\n\nexport const createSignedCbor = async (\n  context: IRequiredContext,\n  statusList: StatusList,\n  issuerString: string,\n  id: string,\n  expiresAt?: Date,\n  keyRef?: string,\n): Promise<SignedStatusListData> => {\n  const identifier = await resolveIdentifier(context, issuerString, keyRef)\n\n  const encodeStatusList = statusList.encodeStatusList()\n  const compressedList = deflate(encodeStatusList, { level: 9 })\n  const compressedBytes = new Int8Array(compressedList)\n\n  const statusListMap = new com.sphereon.cbor.CborMap(\n    kotlin.collections.KtMutableMap.fromJsMap(\n      new Map<CborStringType, CborItem<any>>([\n        [\n          new com.sphereon.cbor.CborString('bits'),\n          new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(statusList.getBitsPerStatus())),\n        ],\n        [new com.sphereon.cbor.CborString('lst'), new com.sphereon.cbor.CborByteString(compressedBytes)],\n      ]),\n    ),\n  )\n\n  const protectedHeader = new com.sphereon.cbor.CborMap(\n    kotlin.collections.KtMutableMap.fromJsMap(\n      new Map([[new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(16)), new com.sphereon.cbor.CborString('statuslist+cwt')]]), // \"type\"\n    ),\n  )\n  const protectedHeaderEncoded = com.sphereon.cbor.Cbor.encode(protectedHeader)\n  const claimsMap = buildClaimsMap(id, issuerString, statusListMap, expiresAt)\n  const claimsEncoded: Int8Array = com.sphereon.cbor.Cbor.encode(claimsMap)\n\n  const signedCWT: string = await context.agent.keyManagerSign({\n    keyRef: identifier.kmsKeyRef,\n    data: base64url.encode(Buffer.from(claimsEncoded)), // TODO test on RN\n    encoding: undefined,\n  })\n\n  const protectedHeaderEncodedInt8 = new Int8Array(protectedHeaderEncoded)\n  const claimsEncodedInt8 = new Int8Array(claimsEncoded)\n  const signatureBytes = base64url.decode(signedCWT)\n  const signatureInt8 = new Int8Array(Buffer.from(signatureBytes))\n\n  const cwtArrayElements: Array<CborItem<any>> = [\n    new CborByteString(protectedHeaderEncodedInt8),\n    new CborByteString(claimsEncodedInt8),\n    new CborByteString(signatureInt8),\n  ]\n  const cwtArray = new com.sphereon.cbor.CborArray(kotlin.collections.KtMutableList.fromJsArray(cwtArrayElements))\n  const cwtEncoded = com.sphereon.cbor.Cbor.encode(cwtArray)\n  const cwtBuffer = Buffer.from(cwtEncoded)\n  return {\n    statusListCredential: base64url.encode(cwtBuffer),\n    encodedList: base64url.encode(compressedList as Buffer), // JS in @sd-jwt/jwt-status-list drops it in like this, so keep the same method\n  }\n}\n\nfunction buildClaimsMap(\n  id: string,\n  issuerString: string,\n  statusListMap: pkg.com.sphereon.cbor.CborMap<CborStringType, CborItem<any>>,\n  expiresAt?: Date,\n) {\n  const ttl = 65535 // FIXME figure out what value should be / come from and what the difference is with exp\n  const claimsEntries: Array<[CborUIntType, CborItem<any>]> = [\n    [new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.SUBJECT)), new com.sphereon.cbor.CborString(id)], // \"sub\"\n    [new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUER)), new com.sphereon.cbor.CborString(issuerString)], // \"iss\"\n    [\n      new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUED_AT)),\n      new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(Math.floor(Date.now() / 1000))), // \"iat\"\n    ],\n  ]\n\n  if (expiresAt) {\n    claimsEntries.push([\n      new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.EXPIRATION)),\n      new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(Math.floor(expiresAt.getTime() / 1000))), // \"exp\"\n    ])\n  }\n\n  if (ttl) {\n    claimsEntries.push([\n      new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.TIME_TO_LIVE)),\n      new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(ttl)), // \"time to live\"\n    ])\n  }\n\n  claimsEntries.push([new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.STATUS_LIST)), statusListMap])\n\n  const claimsMap = new com.sphereon.cbor.CborMap(kotlin.collections.KtMutableMap.fromJsMap(new Map(claimsEntries)))\n  return claimsMap\n}\n\nconst getCborValueFromMap = <T>(map: Map<CborItem<any>, CborItem<any>>, key: number): T => {\n  const value = getCborOptionalValueFromMap<T>(map, key)\n  if (value === undefined) {\n    throw new Error(`Required claim ${key} not found`)\n  }\n  return value\n}\n\nconst getCborOptionalValueFromMap = <T>(map: Map<CborItem<any>, CborItem<any>>, key: number): T | undefined | never => {\n  const value = map.get(new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(key)))\n  if (!value) {\n    return undefined\n  }\n  return value.value as T\n}\n\nexport const decodeStatusListCWT = (cwt: string): DecodedStatusListPayload => {\n  const encodedCbor = base64url.toBuffer(cwt)\n  const encodedCborArray = new Int8Array(encodedCbor)\n  const decodedCbor = com.sphereon.cbor.Cbor.decode(encodedCborArray)\n\n  if (!(decodedCbor instanceof com.sphereon.cbor.CborArray)) {\n    throw new Error('Invalid CWT format: Expected a CBOR array')\n  }\n\n  const [, payload] = decodedCbor.value.asJsArrayView()\n  if (!(payload instanceof com.sphereon.cbor.CborByteString)) {\n    throw new Error('Invalid payload format: Expected a CBOR ByteString')\n  }\n\n  const claims = com.sphereon.cbor.Cbor.decode(payload.value)\n  if (!(claims instanceof com.sphereon.cbor.CborMap)) {\n    throw new Error('Invalid claims format: Expected a CBOR map')\n  }\n\n  const claimsMap = claims.value.asJsMapView()\n\n  const statusListMap = claimsMap.get(new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(65533))).value.asJsMapView()\n\n  const bits = Number(statusListMap.get(new CborString('bits')).value) as BitsPerStatus\n  const decoded = new Uint8Array(statusListMap.get(new CborString('lst')).value)\n  const uint8Array = inflate(decoded)\n  const rawStatusList = decompressRawStatusList(uint8Array, bits)\n  const statusList = new StatusList(rawStatusList, bits)\n\n  return {\n    issuer: getCborValueFromMap<string>(claimsMap, CWT_CLAIMS.ISSUER),\n    id: getCborValueFromMap<string>(claimsMap, CWT_CLAIMS.SUBJECT),\n    statusList,\n    iat: Number(getCborValueFromMap<number>(claimsMap, CWT_CLAIMS.ISSUED_AT)),\n    exp: getCborOptionalValueFromMap<number>(claimsMap, CWT_CLAIMS.EXPIRATION),\n    ttl: getCborOptionalValueFromMap<number>(claimsMap, CWT_CLAIMS.TIME_TO_LIVE),\n  }\n}\n","import type { IStatusList } from './IStatusList'\nimport { StatusList2021Implementation } from './StatusList2021'\nimport { OAuthStatusListImplementation } from './OAuthStatusList'\nimport { StatusListType } from '@sphereon/ssi-types'\n\nexport class StatusListFactory {\n  private static instance: StatusListFactory\n  private implementations: Map<StatusListType, IStatusList>\n\n  private constructor() {\n    this.implementations = new Map()\n    this.implementations.set(StatusListType.StatusList2021, new StatusList2021Implementation())\n    this.implementations.set(StatusListType.OAuthStatusList, new OAuthStatusListImplementation())\n  }\n\n  public static getInstance(): StatusListFactory {\n    if (!StatusListFactory.instance) {\n      StatusListFactory.instance = new StatusListFactory()\n    }\n    return StatusListFactory.instance\n  }\n\n  public getByType(type: StatusListType): IStatusList {\n    const statusList = this.implementations.get(type)\n    if (!statusList) {\n      throw new Error(`No implementation found for status list type: ${type}`)\n    }\n    return statusList\n  }\n}\n\nexport function getStatusListImplementation(type: StatusListType): IStatusList {\n  return StatusListFactory.getInstance().getByType(type)\n}\n"],"mappings":"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","names":["StatusOAuth","Status2021","import_ssi_types","import_vc_status_list","getAssertedStatusListType","type","assertedType","StatusListType","StatusList2021","OAuthStatusList","includes","Error","getAssertedValue","name","value","undefined","getAssertedValues","args","id","issuer","getAssertedProperty","propertyName","obj","ValidProofTypeMap","Map","assertValidProofType","proofFormat","validProofTypes","get","determineStatusListType","credential","determineProofFormat","payload","jwtDecode","keys","Object","uniform","CredentialMapper","toUniformCredential","find","t","values","some","statusType","replace","detectDocumentType","DocumentFormat","JWT","MSO_MDOC","JSONLD","import_ssi_types","DEFAULT_LIST_LENGTH","DEFAULT_PROOF_FORMAT","StatusList2021Implementation","createNewStatusList","args","context","length","proofFormat","assertValidProofType","StatusListType","StatusList2021","veramoProofFormat","issuer","id","correlationId","getAssertedValue","list","StatusList","encodedList","encode","statusPurpose","statusListCredential","createVerifiableCredential","statusList2021","indexingDirection","type","statuslistContentType","buildContentType","updateStatusListIndex","credential","uniform","CredentialMapper","toUniformCredential","credentialSubject","origEncodedList","getAssertedProperty","index","statusListIndex","parseInt","statusList","decode","setStatus","value","detectDocumentType","DocumentFormat","JWT","updatedCredential","updateStatusListFromEncodedList","Error","getAssertedValues","newEncodedList","keyRef","checkStatusIndex","status","getStatus","Status2021","Invalid","Valid","toStatusListDetails","statusListPayload","driverType","identifier","agent","identifierManagedGet","vmRelationship","offlineWhenNoDIDRegistered","verifiableCredential","kmsKeyRef","fetchRemoteContexts","toWrappedVerifiableCredential","original","import_ssi_types","import_jwt_status_list","import_ssi_types","resolveIdentifier","context","issuer","keyRef","agent","identifierManagedGet","identifier","vmRelationship","offlineWhenNoDIDRegistered","kmsKeyRef","STATUS_LIST_JWT_TYP","createSignedJwt","context","statusList","issuerString","id","expiresAt","keyRef","identifier","resolveIdentifier","resolution","ensureManagedIdentifierResult","payload","iss","sub","iat","Math","floor","Date","now","exp","getTime","header","alg","getSigningAlgo","key","type","typ","values","createHeaderAndPayload","signedJwt","agent","jwtCreateJwsCompactSignature","issuer","noIssPayloadUpdate","protectedHeader","statusListCredential","jwt","encodedList","status_list","lst","decodeStatusListJWT","payloadBase64","split","JSON","parse","base64url","decode","Error","StatusList","decompressStatusList","bits","ttl","JoseSignatureAlgorithm","EdDSA","ES256K","ES256","RS256","import_jwt_status_list","import_base64url","com","kotlin","pkg","CborByteString","sphereon","cbor","CborUInt","CborString","decompressRawStatusList","StatusList","decodeStatusList","bind","CWT_CLAIMS","SUBJECT","ISSUER","ISSUED_AT","EXPIRATION","TIME_TO_LIVE","STATUS_LIST","createSignedCbor","context","statusList","issuerString","id","expiresAt","keyRef","identifier","resolveIdentifier","encodeStatusList","compressedList","deflate","level","compressedBytes","Int8Array","statusListMap","CborMap","collections","KtMutableMap","fromJsMap","Map","kmp","LongKMP","fromNumber","getBitsPerStatus","protectedHeader","protectedHeaderEncoded","Cbor","encode","claimsMap","buildClaimsMap","claimsEncoded","signedCWT","agent","keyManagerSign","kmsKeyRef","data","base64url","Buffer","from","encoding","undefined","protectedHeaderEncodedInt8","claimsEncodedInt8","signatureBytes","decode","signatureInt8","cwtArrayElements","cwtArray","CborArray","KtMutableList","fromJsArray","cwtEncoded","cwtBuffer","statusListCredential","encodedList","ttl","claimsEntries","Math","floor","Date","now","push","getTime","getCborValueFromMap","map","key","value","getCborOptionalValueFromMap","Error","get","decodeStatusListCWT","cwt","encodedCbor","toBuffer","encodedCborArray","decodedCbor","payload","asJsArrayView","claims","asJsMapView","bits","Number","decoded","Uint8Array","uint8Array","inflate","rawStatusList","issuer","iat","exp","DEFAULT_BITS_PER_STATUS","DEFAULT_LIST_LENGTH","DEFAULT_PROOF_FORMAT","OAuthStatusListImplementation","createNewStatusList","args","context","oauthStatusList","Error","proofFormat","issuer","id","keyRef","bitsPerStatus","expiresAt","length","issuerString","correlationId","getAssertedValue","statusList","StatusList","Array","fill","encodedList","compressStatusList","statusListCredential","createSignedStatusList","type","StatusListType","OAuthStatusList","statuslistContentType","buildContentType","updateStatusListIndex","value","Promise","reject","determineProofFormat","decoded","decodeStatusListJWT","decodeStatusListCWT","index","statusListIndex","parseInt","setStatus","signedCredential","getBitsPerStatus","updateStatusListFromEncodedList","getAssertedValues","listToUpdate","decompressStatusList","checkStatusIndex","getStatus","toStatusListDetails","statusListPayload","exp","Date","driverType","createSignedJwt","createSignedCbor","import_ssi_types","StatusListFactory","instance","implementations","Map","set","StatusListType","StatusList2021","StatusList2021Implementation","OAuthStatusList","OAuthStatusListImplementation","getInstance","getByType","type","statusList","get","Error","getStatusListImplementation","fetchStatusListCredential","args","url","getAssertedValue","statusListCredential","response","fetch","ok","Error","status","statusText","responseAsText","text","trim","startsWith","JSON","parse","error","console","message","stringify","statusPluginStatusFunction","credential","didDoc","result","checkStatusForCredential","documentLoader","errorUnknownListType","revoked","verified","vcLibCheckStatusFunction","mandatoryCredentialStatus","verifyStatusListCredential","verifyMatchingIssuers","uniform","CredentialMapper","toUniformCredential","credentialStatus","log","type","checkStatus","simpleCheckStatusFromStatusListUrl","checkStatusIndexFromStatusListCredential","statusListType","determineStatusListType","implementation","getStatusListImplementation","checkStatusIndex","createNewStatusList","context","getAssertedValues","updateStatusIndexFromStatusListCredential","updateStatusListIndex","statusListCredentialToDetails","documentFormat","detectDocumentType","DocumentFormat","JWT","header","split","decodedHeader","Buffer","from","toString","typ","StatusListType","OAuthStatusList","MSO_MDOC","find","t","includes","replace","toStatusListDetails","statusListPayload","correlationId","driverType","updateStatusListIndexFromEncodedList","updateStatusListFromEncodedList","statusList2021ToVerifiableCredential","issuer","id","identifier","agent","identifierManagedGet","vmRelationship","offlineWhenNoDIDRegistered","proofFormat","assertValidProofType","StatusList2021","veramoProofFormat","encodedList","statusPurpose","credentialSubject","verifiableCredential","createVerifiableCredential","keyRef","kmsKeyRef","fetchRemoteContexts","toWrappedVerifiableCredential","original"]}