{
  "version": 3,
  "sources": ["../src/envelope.ts"],
  "sourcesContent": ["import type { Envelope, PayloadTag, EnvelopeDecodeOptions, EnvelopeEncodeOptions, EnvelopeSignOptions, SignaturePayload, PayloadSpec, DecodedEnvelope, DelegationPayload, InvocationPayload, Payload } from './types.js'\nimport type { ByteView } from 'multiformats'\nimport type { SignatureType } from 'iso-signatures/types'\nimport * as cbor from '@ipld/dag-cbor'\nimport { isObject } from './util.js'\nimport * as varsig from './index.js'\n\n/** Version */\nexport const VERSION = '1.0.0-rc.1'\n\n/**\n * Get the signature payload for a given payload\n */\nexport function getSignaturePayload (options:{\n  spec:PayloadSpec\n  payload:Payload\n  version?:string\n  signatureType:SignatureType\n}):SignaturePayload {\n    const { spec, version, signatureType, payload } = options\n\n    const payloadTag:PayloadTag = `ucan/${spec}@${version ?? VERSION}` as PayloadTag\n\n    const h = varsig.encode({ enc: 'DAG-CBOR', alg: signatureType })\n\n    const signaturePayload = {\n        h,\n        [payloadTag]: payload,\n    } as SignaturePayload\n\n    return signaturePayload\n}\n\n/**\n * Decode a signature payload\n */\nexport function decodeSignaturePayload (bytes:Uint8Array) {\n    const decoded = cbor.decode(bytes) as unknown\n\n    if (!isObject(decoded)) {\n        throw new TypeError(\n      `Invalid signature payload expected object got ${typeof decoded}`\n        )\n    }\n    if (!('h' in decoded)) {\n        throw new TypeError('Invalid signature payload missing h')\n    }\n    const keys = Object.keys(decoded)\n    if (keys.length !== 2) {\n        throw new TypeError(\n      `Invalid signature payload expected 2 keys got ${keys.length}`\n        )\n    }\n    if (!keys[1].startsWith('ucan/dlg') && !keys[1].startsWith('ucan/inv')) {\n        throw new TypeError('Invalid signature payload missing payload')\n    }\n\n    const payloadTag:PayloadTag = keys[1] as PayloadTag\n    const { alg, enc } = varsig.decode((decoded as SignaturePayload).h)\n    const payload = (decoded as SignaturePayload)[payloadTag]\n    return {\n        alg,\n        enc,\n        payload,\n    }\n}\n\n/**\n * Check if a payload is an invocation payload\n */\nexport function isInvocationPayload (payload:Payload):payload is InvocationPayload {\n    return 'args' in payload\n}\n\n/**\n * Check if a payload is a delegation payload\n */\nexport function isDelegationPayload (payload:Payload):payload is DelegationPayload {\n    return 'pol' in payload\n}\n\nexport async function sign (options:EnvelopeSignOptions) {\n    const { spec, version, signer, payload } = options\n\n    const signaturePayload = getSignaturePayload({\n        spec,\n        version,\n        signatureType: signer.signatureType,\n        payload,\n    })\n    const signature = await signer.sign(cbor.encode(signaturePayload))\n    return {\n        signature,\n        signaturePayload,\n    }\n}\n\n/**\n * Encode a UCAN envelope\n *\n * @see https://github.com/ucan-wg/spec#envelope\n */\nexport function encode (options:EnvelopeEncodeOptions):Uint8Array {\n    const { signature, signaturePayload } = options\n\n    const envelope = [signature, signaturePayload]\n\n    return cbor.encode(envelope)\n}\n\n/**\n * Decode a UCAN envelope\n *\n * @see https://github.com/ucan-wg/spec#envelope\n */\nexport function decode<Spec extends PayloadSpec> (options:EnvelopeDecodeOptions):DecodedEnvelope<Spec> {\n    const { envelope } = options\n\n    const decoded = cbor.decode(envelope as ByteView<Envelope>) as Envelope\n\n    const [signature, sigPayload] = decoded\n    const [_h, payloadTag] = Object.keys(sigPayload)\n    const header = sigPayload.h\n    const payload:DelegationPayload | InvocationPayload = sigPayload[payloadTag as PayloadTag]\n\n    const [_ucan, specVersion] = payloadTag.split('/')\n    const [spec, version] = specVersion.split('@')\n\n    const { alg, enc } = varsig.decode(header)\n\n    return {\n        alg,\n        enc,\n        signature,\n        // Narrow payload type based on Spec\n        payload,\n        spec,\n        version,\n    } as DecodedEnvelope<Spec>\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,WAAsB;AACtB,kBAAyB;AACzB,aAAwB;AAGjB,MAAM,UAAU;AAKhB,SAAS,oBAAqB,SAKjB;AAChB,QAAM,EAAE,MAAM,SAAS,eAAe,QAAQ,IAAI;AAElD,QAAM,aAAwB,QAAQ,IAAI,IAAI,WAAW,OAAO;AAEhE,QAAM,IAAI,OAAO,OAAO,EAAE,KAAK,YAAY,KAAK,cAAc,CAAC;AAE/D,QAAM,mBAAmB;AAAA,IACrB;AAAA,IACA,CAAC,UAAU,GAAG;AAAA,EAClB;AAEA,SAAO;AACX;AAlBgB;AAuBT,SAAS,uBAAwB,OAAkB;AACtD,QAAM,UAAU,KAAK,OAAO,KAAK;AAEjC,MAAI,KAAC,sBAAS,OAAO,GAAG;AACpB,UAAM,IAAI;AAAA,MACZ,iDAAiD,OAAO,OAAO;AAAA,IAC7D;AAAA,EACJ;AACA,MAAI,EAAE,OAAO,UAAU;AACnB,UAAM,IAAI,UAAU,qCAAqC;AAAA,EAC7D;AACA,QAAM,OAAO,OAAO,KAAK,OAAO;AAChC,MAAI,KAAK,WAAW,GAAG;AACnB,UAAM,IAAI;AAAA,MACZ,iDAAiD,KAAK,MAAM;AAAA,IAC1D;AAAA,EACJ;AACA,MAAI,CAAC,KAAK,CAAC,EAAE,WAAW,UAAU,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,UAAU,GAAG;AACpE,UAAM,IAAI,UAAU,2CAA2C;AAAA,EACnE;AAEA,QAAM,aAAwB,KAAK,CAAC;AACpC,QAAM,EAAE,KAAK,IAAI,IAAI,OAAO,OAAQ,QAA6B,CAAC;AAClE,QAAM,UAAW,QAA6B,UAAU;AACxD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AA7BgB;AAkCT,SAAS,oBAAqB,SAA8C;AAC/E,SAAO,UAAU;AACrB;AAFgB;AAOT,SAAS,oBAAqB,SAA8C;AAC/E,SAAO,SAAS;AACpB;AAFgB;AAIhB,eAAsB,KAAM,SAA6B;AACrD,QAAM,EAAE,MAAM,SAAS,QAAQ,QAAQ,IAAI;AAE3C,QAAM,mBAAmB,oBAAoB;AAAA,IACzC;AAAA,IACA;AAAA,IACA,eAAe,OAAO;AAAA,IACtB;AAAA,EACJ,CAAC;AACD,QAAM,YAAY,MAAM,OAAO,KAAK,KAAK,OAAO,gBAAgB,CAAC;AACjE,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;AAdsB;AAqBf,SAAS,OAAQ,SAA0C;AAC9D,QAAM,EAAE,WAAW,iBAAiB,IAAI;AAExC,QAAM,WAAW,CAAC,WAAW,gBAAgB;AAE7C,SAAO,KAAK,OAAO,QAAQ;AAC/B;AANgB;AAaT,SAAS,OAAkC,SAAqD;AACnG,QAAM,EAAE,SAAS,IAAI;AAErB,QAAM,UAAU,KAAK,OAAO,QAA8B;AAE1D,QAAM,CAAC,WAAW,UAAU,IAAI;AAChC,QAAM,CAAC,IAAI,UAAU,IAAI,OAAO,KAAK,UAAU;AAC/C,QAAM,SAAS,WAAW;AAC1B,QAAM,UAAgD,WAAW,UAAwB;AAEzF,QAAM,CAAC,OAAO,WAAW,IAAI,WAAW,MAAM,GAAG;AACjD,QAAM,CAAC,MAAM,OAAO,IAAI,YAAY,MAAM,GAAG;AAE7C,QAAM,EAAE,KAAK,IAAI,IAAI,OAAO,OAAO,MAAM;AAEzC,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAxBgB;",
  "names": []
}
