{"version":3,"sources":["../src/index.ts","../src/types/IQRCodeGenerator.ts","../src/agent/utils/react-qr.tsx","../src/agent/utils/didcomm-oob-message.tsx","../src/agent/QrCodeProvider.tsx"],"sourcesContent":["/**\n * @public\n */\n\nexport * from './agent/QrCodeProvider'\nexport * from './types/IQRCodeGenerator'\n","import { IAgentContext, IPluginMethodMap } from '@veramo/core'\n\nexport interface IQRCodeGenerator extends IPluginMethodMap {\n  qrDIDCommOobInvitationElement(\n    args: CreateElementArgs<QRType.DIDCOMM_V2_OOB_INVITATION, DIDCommV2OOBInvitationData>,\n    context: IRequiredContext,\n  ): Promise<JSX.Element>\n\n  qrDIDCommOobInvitationValue(\n    args: CreateValueArgs<QRType.DIDCOMM_V2_OOB_INVITATION, DIDCommV2OOBInvitationData>,\n    context: IRequiredContext,\n  ): Promise<string>\n\n  qrSIOPv2Element(args: CreateElementArgs<QRType.SIOPV2, SIOPv2DataWithScheme>, context: IRequiredContext): Promise<JSX.Element>\n\n  qrSIOPv2Value(args: CreateValueArgs<QRType.SIOPV2, SIOPv2DataWithScheme>, context: IRequiredContext): Promise<string>\n\n  qrURIElement(args: CreateElementArgs<QRType.URI, URIData>, context: IRequiredContext): Promise<JSX.Element>\n\n  qrOpenID4VCIElement(args: CreateElementArgs<QRType.OpenID4VCI, OpenID4VCIDataWithScheme>, context: IRequiredContext): Promise<JSX.Element>\n  qrOpenID4VCIValue(args: CreateValueArgs<QRType.OpenID4VCI, OpenID4VCIDataWithScheme>, context: IRequiredContext): Promise<string>\n}\n\nexport interface CreateValueArgs<T extends QRType, D> {\n  onGenerate?: (result: ValueResult<T, D>) => void\n  data: QRData<T, D>\n}\n\nexport interface CreateElementArgs<T extends QRType, D> extends CreateValueArgs<T, D> {\n  renderingProps: QRRenderingProps\n}\n\nexport interface ValueResult<T extends QRType, D> {\n  id: string\n  value: string\n  data: QRData<T, D>\n  renderingProps?: QRRenderingProps\n  context?: IRequiredContext\n}\n\nexport enum QRType {\n  URI = 'uri',\n  SIOPV2 = 'openid-vc',\n  DIDCOMM_V2_OOB_INVITATION = 'https://didcomm.org/out-of-band/2.0/invitation',\n  OpenID4VCI = 'openid-credential-offer',\n}\n\nexport type SIOPv2Scheme = 'openid' | 'openid-vc' | string\nexport interface SIOPv2DataWithScheme {\n  scheme?: SIOPv2Scheme\n  requestUri: string\n}\n\nexport type OpenID4VCIScheme = 'openid-credential-offer' | 'https' | string\nexport interface OpenID4VCIDataWithScheme {\n  scheme?: OpenID4VCIScheme\n  baseUri?: string\n  credentialOfferUri?: string\n  credentialOffer?: string\n}\n\nexport interface DIDCommV2OOBInvitationData {\n  baseURI: string\n  oobInvitation: DIDCommV2OOBInvitation\n}\n\n/**\n * {\n *   \"type\": \"https://didcomm.org/out-of-band/2.0/invitation\",\n *   \"id\": \"599f3638-b563-4937-9487-dfe55099d900\",\n *   \"from\": \"did:example:verifier\",\n *   \"body\": {\n *       \"goal_code\": \"streamlined-vp\",\n *       \"accept\": ['didcomm/v2']\n *   }\n * }\n */\nexport interface DIDCommV2OOBInvitation {\n  type: 'https://didcomm.org/out-of-band/2.0/invitation'\n  id: string\n  from: DID\n\n  body: Body\n}\n\nexport type URIData = string\n\nexport type DID = string\n\nexport interface Body {\n  goal_code: GoalCode\n  accept: [AcceptMode]\n}\n\nexport type GoalCode = 'streamlined-vp' | 'streamlined-vc'\n\nexport type AcceptMode = 'didcomm/v2' | string\n\n/*OIDC4VP = 'oidc4vp',\nSIOPV2_WITH_OIDC4VP = 'siopv2+oidc4vp',\nSIOP_V2 = 'siopv2',*/\n\nexport enum StatusCode {\n  OK = 'OK',\n  CREATED = 'CREATED',\n}\n\nexport interface QRData<T extends QRType, D> {\n  id: string\n  type: T\n  object: D\n}\n\nexport interface QRRenderingProps {\n  bgColor?: string\n  fgColor?: string\n  level?: 'L' | 'M' | 'Q' | 'H'\n  size?: number\n  title?: string\n}\n\nexport enum events {\n  QR_CODE_CODE_CREATED = 'QrCodeCreated',\n}\n\nexport type IRequiredContext = IAgentContext<Record<string, never>>\n","import { CreateElementArgs, CreateValueArgs, events, IRequiredContext, QRType, ValueResult } from '../../types/IQRCodeGenerator'\nimport QRCodeImport from 'react-qr-code'\nimport React from 'react'\n\nconst QRCode = (QRCodeImport as any)?.default || QRCodeImport\n\nexport async function generateQRCodeValue<T extends QRType>(\n  args: CreateValueArgs<T, string> | CreateElementArgs<T, string>,\n  context?: IRequiredContext,\n): Promise<ValueResult<T, string>> {\n  return generateQRCodeValueImpl(args, args, context)\n}\n\nexport async function generateQRCodeValueImpl<T extends QRType>(\n  args: CreateValueArgs<T, string> | CreateElementArgs<T, string>,\n  orig: CreateValueArgs<T, any> | CreateElementArgs<T, any>,\n  context?: IRequiredContext,\n): Promise<ValueResult<T, string>> {\n  const { onGenerate } = orig\n  const { id } = orig.data\n\n  const value = args.data.object\n\n  const result: ValueResult<T, string> = {\n    id,\n    value,\n    data: orig.data,\n    renderingProps: 'renderingProps' in orig ? orig.renderingProps : undefined,\n    context,\n  }\n\n  if (onGenerate) {\n    onGenerate(result)\n  }\n  if (context) {\n    context.agent.emit(events.QR_CODE_CODE_CREATED, result)\n  }\n\n  return result\n}\n\nexport async function generateQRCodeReactElement<T extends QRType>(\n  args: CreateElementArgs<T, string>,\n  context: IRequiredContext,\n): Promise<JSX.Element> {\n  return generateQRCodeReactElementImpl(args, args, context)\n}\n\nexport async function generateQRCodeReactElementImpl<T extends QRType>(\n  args: CreateElementArgs<T, string>,\n  orig: CreateElementArgs<T, any>,\n  context: IRequiredContext,\n): Promise<JSX.Element> {\n  const { renderingProps } = args\n  const { bgColor, fgColor, level, size, title } = renderingProps\n  const result: ValueResult<T, string> = await generateQRCodeValueImpl(args, orig, context)\n\n  return <QRCode value={result.value} bgColor={bgColor} fgColor={fgColor} level={level} size={size} title={title} />\n}\n","import { DIDCommV2OOBInvitation } from '../../types/IQRCodeGenerator'\nimport base64url from 'base64url'\n\nexport class DidCommOutOfBandMessage {\n  public static toJson(props: DIDCommV2OOBInvitation): string {\n    return JSON.stringify(props).replace('goalCode', 'goal-code')\n  }\n\n  public static urlEncode(payload: DIDCommV2OOBInvitation) {\n    return base64url(this.toJson(payload))\n  }\n}\n","import { IAgentPlugin } from '@veramo/core'\n\nimport {\n  CreateElementArgs,\n  CreateValueArgs,\n  DIDCommV2OOBInvitationData,\n  IQRCodeGenerator,\n  IRequiredContext,\n  OpenID4VCIDataWithScheme,\n  QRType,\n  SIOPv2DataWithScheme,\n  URIData,\n} from '../types/IQRCodeGenerator'\nimport { DidCommOutOfBandMessage, generateQRCodeReactElement } from './utils'\nimport { generateQRCodeReactElementImpl } from './utils/react-qr'\n\n/**\n * {@inheritDoc IQRCodeGenerator}\n */\nexport class QrCodeProvider implements IAgentPlugin {\n  readonly methods: IQRCodeGenerator = {\n    qrDIDCommOobInvitationElement: QrCodeProvider.qrDIDCommOobInvitationElement.bind(this),\n    qrDIDCommOobInvitationValue: QrCodeProvider.qrDIDCommOobInvitationValue.bind(this),\n    qrSIOPv2Element: QrCodeProvider.qrSIOPv2Element.bind(this),\n    qrSIOPv2Value: QrCodeProvider.qrSIOPv2Value.bind(this),\n    qrURIElement: QrCodeProvider.qrURIElement.bind(this),\n    qrOpenID4VCIElement: QrCodeProvider.qrOpenID4VCIElement.bind(this),\n    qrOpenID4VCIValue: QrCodeProvider.qrOpenID4VCIValue.bind(this),\n  }\n\n  /** {@inheritDoc IQRCodeGenerator.uriElement} */\n\n  private static async qrURIElement(args: CreateElementArgs<QRType.URI, URIData>, context: IRequiredContext): Promise<JSX.Element> {\n    return generateQRCodeReactElement(args, context)\n  }\n\n  /** {@inheritDoc IQRCodeGenerator.didCommOobInvitationValue} */\n  private static async qrDIDCommOobInvitationValue(\n    args: CreateValueArgs<QRType.DIDCOMM_V2_OOB_INVITATION, DIDCommV2OOBInvitationData>,\n    context: IRequiredContext,\n  ): Promise<string> {\n    const { object } = args.data\n    const encoded = DidCommOutOfBandMessage.urlEncode(object.oobInvitation)\n    const delim = object.baseURI.includes('?') ? '&' : '?'\n    return object.baseURI.includes('oob=') ? object.baseURI.replace('oob=', `oob=${encoded}`) : `${object.baseURI}${delim}_oob=${encoded}`\n  }\n\n  /** {@inheritDoc IQRCodeGenerator.didCommOobInvitationElement} */\n  private static async qrDIDCommOobInvitationElement(\n    args: CreateElementArgs<QRType.DIDCOMM_V2_OOB_INVITATION, DIDCommV2OOBInvitationData>,\n    context: IRequiredContext,\n  ): Promise<JSX.Element> {\n    const content = await QrCodeProvider.qrDIDCommOobInvitationValue(args, context)\n    return generateQRCodeReactElementImpl(\n      {\n        ...args,\n        data: { ...args.data, object: content },\n      } as CreateElementArgs<QRType.DIDCOMM_V2_OOB_INVITATION, string>,\n      args,\n      context,\n    )\n  }\n\n  /** {@inheritDoc IQRCodeGenerator.siopv2Value} */\n  private static async qrSIOPv2Value(args: CreateValueArgs<QRType.SIOPV2, SIOPv2DataWithScheme>, context: IRequiredContext): Promise<string> {\n    const { object } = args.data\n    if (typeof object === 'string') {\n      return object\n    }\n\n    const scheme = (object.scheme ?? 'openid-vc://').replace('://?', '').replace('://', '') + '://'\n    const requestUri = `request_uri=${object.requestUri.replace('request_uri=', '')}`\n    return `${scheme}?${requestUri}`\n  }\n\n  /** {@inheritDoc IQRCodeGenerator.siopv2Element} */\n  private static async qrSIOPv2Element(\n    args: CreateElementArgs<QRType.SIOPV2, SIOPv2DataWithScheme>,\n    context: IRequiredContext,\n  ): Promise<JSX.Element> {\n    const content = await QrCodeProvider.qrSIOPv2Value(args, context)\n    return generateQRCodeReactElementImpl(\n      { ...args, data: { ...args.data, object: content } } as CreateElementArgs<QRType.SIOPV2, string>,\n      args,\n      context,\n    )\n  }\n\n  /** {@inheritDoc IQRCodeGenerator.qrOpenID4VCIElement} */\n  private static async qrOpenID4VCIElement(args: CreateElementArgs<QRType.OpenID4VCI, any>, context: IRequiredContext): Promise<JSX.Element> {\n    const content = await QrCodeProvider.qrOpenID4VCIValue(args, context)\n    return generateQRCodeReactElementImpl(\n      { ...args, data: { ...args.data, object: content } } as CreateElementArgs<QRType.OpenID4VCI, string>,\n      args,\n      context,\n    )\n  }\n\n  /** {@inheritDoc IQRCodeGenerator.qrOpenID4VCIValue} */\n  private static async qrOpenID4VCIValue(\n    args: CreateValueArgs<QRType.OpenID4VCI, OpenID4VCIDataWithScheme>,\n    context: IRequiredContext,\n  ): Promise<string> {\n    const { object } = args.data\n    if (!object.credentialOffer && !object.credentialOfferUri) {\n      throw new Error('Please provide credential_offer or credential_offer_uri')\n    }\n    const scheme = (object.scheme ?? 'openid-credential-offer://').replace('://?', '').replace('://', '') + '://'\n    const baseUri = object.baseUri ?? ''\n    let url\n    const splitBaseUri = baseUri.split('://')\n    const hasScheme = splitBaseUri.length > 1\n    if (hasScheme && object.scheme) {\n      if (splitBaseUri[0] !== object.scheme) {\n        throw new Error('The uri must contain the same scheme or omit it')\n      }\n      url = `${baseUri}`\n    } else {\n      url = `${scheme}${baseUri}`\n    }\n    const credentialOfferUri = `?credential_offer_uri=${object.credentialOfferUri?.replace('credential_offer_uri=', '')}`\n    const credentialOffer = `?credential_offer=${object.credentialOffer?.replace('credential_offer=', '')}`\n    const value = object.credentialOffer ? credentialOffer : credentialOfferUri\n    return `${url}${value}`\n  }\n}\n"],"mappings":"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","names":["QRType","StatusCode","events","QRCode","QRCodeImport","default","generateQRCodeValueImpl","args","orig","context","onGenerate","id","data","value","object","result","renderingProps","undefined","agent","emit","events","QR_CODE_CODE_CREATED","generateQRCodeReactElement","generateQRCodeReactElementImpl","bgColor","fgColor","level","size","title","React","QRCode","DidCommOutOfBandMessage","toJson","props","JSON","stringify","replace","urlEncode","payload","base64url","QrCodeProvider","methods","qrDIDCommOobInvitationElement","bind","qrDIDCommOobInvitationValue","qrSIOPv2Element","qrSIOPv2Value","qrURIElement","qrOpenID4VCIElement","qrOpenID4VCIValue","args","context","generateQRCodeReactElement","object","data","encoded","DidCommOutOfBandMessage","urlEncode","oobInvitation","delim","baseURI","includes","replace","content","generateQRCodeReactElementImpl","scheme","requestUri","credentialOffer","credentialOfferUri","Error","baseUri","url","splitBaseUri","split","hasScheme","length","value"]}