{"version":3,"file":"validators.mjs","names":[],"sources":["../../../src/modules/vc/validators.ts"],"sourcesContent":["import type { ValidationOptions } from 'class-validator'\n\nimport { buildMessage, isString, isURL, ValidateBy } from 'class-validator'\nimport { isJsonObject } from '../../types'\nimport { CREDENTIALS_CONTEXT_V1_URL, VERIFIABLE_CREDENTIAL_TYPE, VERIFIABLE_PRESENTATION_TYPE } from './constants'\n\nexport interface IsCredentialJsonLdContextValidationOptions extends ValidationOptions {\n  /**\n   * Whether to allow string value in addition to arrays.\n   *\n   * @default false\n   */\n  allowString?: boolean\n\n  /**\n   * The expected credential context URL.\n   *\n   * @default {@link CREDENTIALS_CONTEXT_V1_URL}\n   */\n  credentialContext?: string\n}\n\nexport function IsCredentialJsonLdContext(\n  validationOptions?: IsCredentialJsonLdContextValidationOptions\n): PropertyDecorator {\n  const allowString = validationOptions?.allowString ?? false\n  const credentialContext = validationOptions?.credentialContext ?? CREDENTIALS_CONTEXT_V1_URL\n\n  return ValidateBy(\n    {\n      name: 'IsCredentialJsonLdContext',\n      validator: {\n        validate: (value): boolean => {\n          if (!Array.isArray(value)) return allowString && isString(value) && value === credentialContext\n\n          // First item must be the verifiable credential context\n          if (value[0] !== credentialContext) return false\n\n          return value.every((v) => (isString(v) && isURL(v)) || isJsonObject(v))\n        },\n        defaultMessage: buildMessage(\n          (eachPrefix) =>\n            `${eachPrefix}$property must be an array of strings or objects, where the first item is the verifiable credential context URL.`,\n          validationOptions\n        ),\n      },\n    },\n    validationOptions\n  )\n}\n\nexport function IsCredentialType(validationOptions?: ValidationOptions): PropertyDecorator {\n  return ValidateBy(\n    {\n      name: 'IsVerifiableCredentialType',\n      validator: {\n        validate: (value): boolean => {\n          return Array.isArray(value)\n            ? value.includes(VERIFIABLE_CREDENTIAL_TYPE) && value.every((v) => typeof v === 'string')\n            : value === VERIFIABLE_CREDENTIAL_TYPE\n        },\n        defaultMessage: buildMessage(\n          (eachPrefix) =>\n            `${eachPrefix}$property must be \"VerifiableCredential\" or an array of strings which includes \"VerifiableCredential\"`,\n          validationOptions\n        ),\n      },\n    },\n    validationOptions\n  )\n}\n\nexport function IsVerifiablePresentationType(validationOptions?: ValidationOptions): PropertyDecorator {\n  return ValidateBy(\n    {\n      name: 'IsVerifiablePresentationType',\n      validator: {\n        validate: (value): boolean => {\n          return Array.isArray(value)\n            ? value.includes(VERIFIABLE_PRESENTATION_TYPE) && value.every((v) => typeof v === 'string')\n            : value === VERIFIABLE_PRESENTATION_TYPE\n        },\n        defaultMessage: buildMessage(\n          (eachPrefix) =>\n            `${eachPrefix}$property must be \"VerifiablePresentation\" or an array of strings which includes \"VerifiablePresentation\"`,\n          validationOptions\n        ),\n      },\n    },\n    validationOptions\n  )\n}\n"],"mappings":";;;;;;;AAsBA,SAAgB,0BACd,mBACmB;CACnB,MAAM,cAAc,mBAAmB,eAAe;CACtD,MAAM,oBAAoB,mBAAmB,qBAAqB;AAElE,QAAO,WACL;EACE,MAAM;EACN,WAAW;GACT,WAAW,UAAmB;AAC5B,QAAI,CAAC,MAAM,QAAQ,MAAM,CAAE,QAAO,eAAe,SAAS,MAAM,IAAI,UAAU;AAG9E,QAAI,MAAM,OAAO,kBAAmB,QAAO;AAE3C,WAAO,MAAM,OAAO,MAAO,SAAS,EAAE,IAAI,MAAM,EAAE,IAAK,aAAa,EAAE,CAAC;;GAEzE,gBAAgB,cACb,eACC,GAAG,WAAW,mHAChB,kBACD;GACF;EACF,EACD,kBACD;;AAGH,SAAgB,iBAAiB,mBAA0D;AACzF,QAAO,WACL;EACE,MAAM;EACN,WAAW;GACT,WAAW,UAAmB;AAC5B,WAAO,MAAM,QAAQ,MAAM,GACvB,MAAM,SAAS,2BAA2B,IAAI,MAAM,OAAO,MAAM,OAAO,MAAM,SAAS,GACvF,UAAU;;GAEhB,gBAAgB,cACb,eACC,GAAG,WAAW,wGAChB,kBACD;GACF;EACF,EACD,kBACD;;AAGH,SAAgB,6BAA6B,mBAA0D;AACrG,QAAO,WACL;EACE,MAAM;EACN,WAAW;GACT,WAAW,UAAmB;AAC5B,WAAO,MAAM,QAAQ,MAAM,GACvB,MAAM,SAAS,6BAA6B,IAAI,MAAM,OAAO,MAAM,OAAO,MAAM,SAAS,GACzF,UAAU;;GAEhB,gBAAgB,cACb,eACC,GAAG,WAAW,4GAChB,kBACD;GACF;EACF,EACD,kBACD"}