{"version":3,"file":"index.mjs","sources":["../src/error.ts","../src/index.ts"],"sourcesContent":["/**\n * Indicates resolution could not continue because\n */\nexport class DeadEndError extends Error {\n  /**\n   * The path at which resolution failed\n   */\n  at: string;\n\n  /**\n   * The remaining path which could not get resolved\n   */\n  remaining: string;\n\n  /**\n   * The CID of the block at which the error happened\n   */\n  cid: any;\n\n  constructor(msg: string, cid: any, at: string, remaining: string) {\n    super(msg);\n    Object.setPrototypeOf(this, DeadEndError.prototype);\n\n    this.cid = cid;\n    this.at = at;\n    this.remaining = remaining;\n  }\n}\n","import { CID } from \"multiformats\";\nimport { Block } from \"multiformats/block\";\n\nimport type { API as BlockAPI } from \"ipfs-core-types/block\";\nimport type { API as NameAPI } from \"ipfs-core-types/name\";\nimport { BlockMulticodec, Multidecoder } from \"multiformat-multicodec\";\n\nimport * as json from \"@ipld/dag-json\";\nimport * as cbor from \"@ipld/dag-cbor\";\nimport * as pb from \"@ipld/dag-pb\";\nimport { BlockDecoder } from \"multiformats/codecs/interface\";\nimport { Hasher } from \"multiformats/hashes/hasher\";\n\nimport { DeadEndError } from \"./error\";\n\n// The code for `libp2p-key-codec'.\nconst kLibp2pKeyCodec = 0x72;\n\n/**\n * Factory function that takes in its dynamic dependencies and returns a library\n * object.\n * @param block The `block` API of an IPFS Core impl. Only needs to exist `block::get()`\n * @param name The `name` API of an IPFS Core impl. Only needs to exist `name::resolve()`\n * @param [multidecoder] Either an impl of the [Multidecoder]{@link Multidecoder} interface, or an object containing an array of `decoders` and `hashers` that will be added to the default Multidecoder.\n * @returns Library object\n */\nexport default function (\n  block: Pick<BlockAPI, \"get\">,\n  name: Pick<NameAPI, \"resolve\">,\n  multidecoder: Multidecoder<any> & {\n    decoders: BlockDecoder<any, any>[];\n    hashers: Hasher<any, any>[];\n  } = undefined as any\n) {\n  const defaultMultidecoder = new BlockMulticodec<any>({\n    codecs: [json, cbor, pb],\n  });\n\n  // Use the user-given multidecoder, or add the user's decoders/hashers\n  let decoder: Multidecoder<any> = defaultMultidecoder;\n  if (\n    typeof multidecoder === \"object\" &&\n    !(\"decoders\" in multidecoder) &&\n    !(\"hashers\" in multidecoder)\n  ) {\n    decoder = multidecoder;\n  } else {\n    if (multidecoder?.decoders)\n      multidecoder.decoders.forEach((d) => decoder.addDecoder(d));\n    if (multidecoder?.hashers)\n      multidecoder.hashers.forEach((h) => decoder.addHasher(h));\n  }\n\n  return {\n    /**\n     * Resolves a CID as if it were an IPNS link until it resolves into a regular block CID.\n     * @param {CID | string} cid The CID which to resolve\n     * @param {number} [timeout] Max timeout on the recursive query\n     * @throws Will throw if `cid` is invalid, or resolution otherwise fails.\n     */\n    async resolveIpns(cid: CID | string, timeout?: number): Promise<CID> {\n      let ipnsAddr = \"/ipns/\";\n      if (typeof cid === \"string\") ipnsAddr += cid;\n      else ipnsAddr += cid.toString();\n\n      let r = null;\n      for await (const i of name.resolve(ipnsAddr, {\n        recursive: true,\n        timeout,\n      }))\n        r = i;\n\n      // Cut out the /ipns/ from the start\n      return CID.parse(r.slice(6));\n    },\n\n    /**\n     * Resolve an IPLD value starting from a CID, following a path.\n     * Will traverse DAG-PB (UnixFS) by treating path segments as UnixFS path segments (i.e. it will follow *files*, and not nodes).\n     *\n     * Will dereference CIDs in non-UnixFS nodes.\n     * CIDs are detected if:\n     *  - The node is a string, and `CID.parse()` succeeds\n     *  - The node is an object, and `CID.asCID()` succeeds\n     * @see CID.parse\n     * @see CID.asCID\n     *\n     * @param {CID} cid Starting block CID\n     * @param {string} [path] The path which to resolve. Defaults to `/` (doesn't move)\n     * @param {Object} [options] Resolution configuration\n     * @param {boolean} [options.followPb] Whether or not to follow path across DAG-PB nodes. Defaults to `true`\n     * @param {boolean} [options.followIpld] Whether or not to follow path across non-DAG-PB (regular) nodes. Defaults to `true`\n     *\n     * @throws {TypeError} Passed CID has codec `libp2p-key` (0x72). Currently, this is treated as only being used for IPNS. Please submit a bug report if you have a different use case.\n     * @throws {DeadEndError} Resolution can't move forward because of missing object entry\n     */\n    async resolve<T = any>(\n      cid: CID,\n      path: string = \"/\",\n      options?: { followPb?: boolean; followIpld?: boolean }\n    ): Promise<{ value: T; cid: CID; block: Block<any> }> {\n      // TODO: maybe there is a non IPNS use for this\n      if (cid.code === kLibp2pKeyCodec) {\n        throw TypeError(\n          \"Received CID with codec for 'libp2p-key'. \" +\n            \"If you need to resolve IPNS into a CID, call resolveIpns() first\"\n        );\n      }\n\n      const bytes = await block.get(cid);\n      const decoded = await decoder.decode({\n        codec: cid.code,\n        hasher: cid.multihash.code,\n        bytes,\n      });\n\n      // TODO: optimise by wrapping `CID -> [PathSeg] -> Promise`\n      const segs = path.split(/\\/+/).filter((s) => s.length);\n      const [curr, ...rest] = segs;\n\n      // Bail out early\n      if (!segs.length)\n        return { value: decoded.value, cid: decoded.cid, block: decoded };\n\n      // This is a DAG-PB file node, traverse it differently\n      if (cid.code === pb.code) {\n        if (options?.followPb === false) {\n          throw new DeadEndError(\n            `Resolution hit dead end at CID ${cid.toString()}: node is a DAG-PB node, but 'followPb' is set to 'false'`,\n            cid,\n            curr,\n            rest.join(\"/\")\n          );\n        }\n\n        const node = decoded.value as pb.PBNode;\n        const child = node.Links.find((n) => n.Name === curr);\n\n        if (child) {\n          // Found a link matching the leftmost path segment\n          return await this.resolve(child.Hash, rest.join(\"/\"), options);\n        } else {\n          // No link: give up\n          throw new DeadEndError(\n            `Resolution hit dead end at CID ${cid.toString()}: no link to ${curr}`,\n            cid,\n            curr,\n            rest.join(\"/\")\n          );\n        }\n      }\n\n      // This is a \"regular\" codec block\n      else {\n        if (options?.followIpld === false) {\n          throw new DeadEndError(\n            `Resolution hit dead end at CID ${cid.toString()}: node is an IPLD node, but 'followIpld' is set to 'false'`,\n            cid,\n            curr,\n            rest.join(\"/\")\n          );\n        }\n\n        let node = decoded.value;\n        for (const [i, seg] of segs.entries()) {\n          if (Array.isArray(node)) {\n            // Arrays are indexed by numbers\n            node = node[JSON.parse(seg)];\n          } else node = node[seg];\n\n          if (node === undefined) {\n            throw new DeadEndError(\n              `Resolution hit dead end at CID ${cid.toString()}: object has no property at path /${segs\n                .slice(0, i)\n                .reduce((acc, x) => acc + \"/\" + x)}`,\n              cid,\n              curr,\n              rest.join(\"/\")\n            );\n          }\n\n          // TODO: how are CIDs canonically stored in IPLD?\n          const asCid = CID.asCID(node);\n          if (asCid) {\n            return await this.resolve(asCid, segs.slice(i).join(\"/\"), options);\n          }\n\n          let cidStr = null;\n          try {\n            cidStr = CID.parse(node);\n          } catch {}\n          if (cidStr) {\n            return await this.resolve(cidStr, segs.slice(i).join(\"/\"), options);\n          }\n        }\n\n        return { value: node, cid, block: decoded };\n      }\n    },\n  };\n}\n"],"names":["DeadEndError","msg","cid","at","remaining","Object","setPrototypeOf","prototype","Error","_settle","pact","state","value","s","_Pact","v","o","bind","then","kLibp2pKeyCodec","onFulfilled","onRejected","result","callback","_this","e","array","body","reject","_cycle","check","i","block","name","multidecoder","undefined","defaultMultidecoder","BlockMulticodec","codecs","json","cbor","pb","decoder","decoders","forEach","d","addDecoder","hashers","h","addHasher","resolveIpns","timeout","CID","parse","r","slice","ipnsAddr","toString","resolve","recursive","path","options","code","TypeError","get","bytes","decode","codec","hasher","multihash","decoded","segs","split","filter","length","curr","rest","followPb","join","node","child","Links","find","n","Name","Hash","followIpld","entries","seg","cidStr","Array","isArray","JSON","reduce","acc","x","asCid","asCID"],"mappings":"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"}