{"version":3,"sources":["../../src/dappCore/utils.ts"],"sourcesContent":["export const hardenUnreliableRequest = <T>(\n  req: () => Promise<T>,\n  fallbackResponse: T,\n): Promise<T> =>\n  Promise.any([\n    req(),\n    new Promise<T>((resolve) =>\n      setTimeout(async () => resolve(await req()), 10),\n    ),\n    new Promise<T>((resolve) =>\n      setTimeout(async () => resolve(await req()), 100),\n    ),\n    new Promise<T>((resolve) =>\n      setTimeout(async () => resolve(await req()), 500),\n    ),\n    new Promise<T>((resolve) =>\n      setTimeout(() => resolve(fallbackResponse), 1000),\n    ),\n  ])\n\nexport const getRandomUUID = () => {\n  try {\n    return self.crypto.randomUUID()\n  } catch (e) {\n    // If crypto.randomUUID() is not available (e.g. on HTTP pages),\n    // fallback to the (less safe) logic below\n  }\n\n  // https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid/2117523#2117523\n  let d = new Date().getTime()\n  let d2 =\n    (typeof performance !== 'undefined' &&\n      performance.now &&\n      performance.now() * 1000) ||\n    0 // Time in microseconds since page-load or 0 if unsupported\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    let r = Math.random() * 16 // random number between 0 and 16\n    /* eslint-disable no-bitwise */\n    if (d > 0) {\n      // Use timestamp until depleted\n      r = (d + r) % 16 | 0\n      d = Math.floor(d / 16)\n    } else {\n      // Use microseconds since page-load if supported\n      r = (d2 + r) % 16 | 0\n      d2 = Math.floor(d2 / 16)\n    }\n    return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16)\n    /* eslint-enable no-bitwise */\n  })\n}\n\n// Example: `setIfDoesNotExist(into, ['a', 's', 'd'], what)` is the same as\n// `into.a.s.d = what`, except that all intermediate objects are created if\n// they don't already exists, and `d` also must not already exists.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setIfDoesNotExist = <U>(into: any, path: string[], what: U) => {\n  for (const [i, segment] of path.entries()) {\n    if (!Object.hasOwn(into, segment)) {\n      into[segment] = i < path.length - 1 ? {} : what\n    }\n    into = into[segment]\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const set = <U>(into: any, path: string[], what: U) => {\n  for (const [i, segment] of path.entries()) {\n    if (i === path.length - 1) {\n      into[segment] = what\n    } else if (!Object.hasOwn(into, segment)) {\n      into[segment] = {}\n    }\n    into = into[segment]\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,0BAA0B,CACrC,KACA,qBAEA,QAAQ,IAAI;AAAA,EACV,IAAI;AAAA,EACJ,IAAI;AAAA,IAAW,CAAC,YACd,WAAW,YAAY,QAAQ,MAAM,IAAI,CAAC,GAAG,EAAE;AAAA,EACjD;AAAA,EACA,IAAI;AAAA,IAAW,CAAC,YACd,WAAW,YAAY,QAAQ,MAAM,IAAI,CAAC,GAAG,GAAG;AAAA,EAClD;AAAA,EACA,IAAI;AAAA,IAAW,CAAC,YACd,WAAW,YAAY,QAAQ,MAAM,IAAI,CAAC,GAAG,GAAG;AAAA,EAClD;AAAA,EACA,IAAI;AAAA,IAAW,CAAC,YACd,WAAW,MAAM,QAAQ,gBAAgB,GAAG,GAAI;AAAA,EAClD;AACF,CAAC;AAEI,IAAM,gBAAgB,MAAM;AACjC,MAAI;AACF,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC,SAAS,GAAG;AAAA,EAGZ;AAGA,MAAI,KAAI,oBAAI,KAAK,GAAE,QAAQ;AAC3B,MAAI,KACD,OAAO,gBAAgB,eACtB,YAAY,OACZ,YAAY,IAAI,IAAI,OACtB;AACF,SAAO,uCAAuC,QAAQ,SAAS,CAAC,MAAM;AACpE,QAAI,IAAI,KAAK,OAAO,IAAI;AAExB,QAAI,IAAI,GAAG;AAET,WAAK,IAAI,KAAK,KAAK;AACnB,UAAI,KAAK,MAAM,IAAI,EAAE;AAAA,IACvB,OAAO;AAEL,WAAK,KAAK,KAAK,KAAK;AACpB,WAAK,KAAK,MAAM,KAAK,EAAE;AAAA,IACzB;AACA,YAAQ,MAAM,MAAM,IAAK,IAAI,IAAO,GAAK,SAAS,EAAE;AAAA,EAEtD,CAAC;AACH;AAMO,IAAM,oBAAoB,CAAI,MAAW,MAAgB,SAAY;AAC1E,aAAW,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG;AACzC,QAAI,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AACjC,WAAK,OAAO,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI;AAAA,IAC7C;AACA,WAAO,KAAK,OAAO;AAAA,EACrB;AACF;AAGO,IAAM,MAAM,CAAI,MAAW,MAAgB,SAAY;AAC5D,aAAW,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG;AACzC,QAAI,MAAM,KAAK,SAAS,GAAG;AACzB,WAAK,OAAO,IAAI;AAAA,IAClB,WAAW,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AACxC,WAAK,OAAO,IAAI,CAAC;AAAA,IACnB;AACA,WAAO,KAAK,OAAO;AAAA,EACrB;AACF;","names":[]}