{"version":3,"sources":["../../src/utils/orderNonce.ts"],"sourcesContent":["import { toIntegerString } from '@nadohq/utils';\nimport { getDefaultRecvTime } from './recvTime';\n\n/**\n * Generates an order nonce based on recvTime in milliseconds, defaulting to Date.now() + 90 seconds\n * @param recvTimeMillis\n * @param randomInt a random integer to avoid hash collisions\n */\nexport function getOrderNonce(\n  recvTimeMillis: number = getDefaultRecvTime(),\n  randomInt: number = Math.floor(Math.random() * 1000),\n): string {\n  return toIntegerString(getOrderNonceBigInt(recvTimeMillis, randomInt));\n}\n\n/**\n * Generates a trigger order nonce based on recvTime in milliseconds, defaulting to Date.now() + 90 seconds\n * Trigger order nonces require that the first bit is set to 1, this differentiates it from a regular order nonce\n *\n * @param recvTimeMillis\n * @param randomInt\n */\nexport function getTriggerOrderNonce(\n  recvTimeMillis: number = getDefaultRecvTime(),\n  randomInt: number = Math.floor(Math.random() * 1000),\n): string {\n  const regularOrderNonce = getOrderNonceBigInt(recvTimeMillis, randomInt);\n  const triggerOrderNonce = regularOrderNonce | (1n << 63n);\n\n  return toIntegerString(triggerOrderNonce);\n}\n\n/**\n * Determines if a nonce is a trigger order nonce\n */\nexport function isTriggerOrderNonce(orderNonce: string): boolean {\n  const nonceBigInt = BigInt(orderNonce);\n  // Check if the 63rd bit is set to 1\n  return Boolean(nonceBigInt & (1n << 63n));\n}\n\n/**\n * Gets the recvTime in millis from an order nonce\n *\n * @param orderNonce\n */\nexport function getRecvTimeFromOrderNonce(orderNonce: string): number {\n  // We need to trim the first (63rd) bit, which is set to 1 for trigger orders\n  const orderNonceBitMasked = BigInt(orderNonce) & ~(1n << 63n);\n  const bigIntRecvTime = orderNonceBitMasked >> 20n;\n  return Number(bigIntRecvTime.toString());\n}\n\nfunction getOrderNonceBigInt(\n  recvTimeMillis: number,\n  randomInt: number,\n): bigint {\n  return (BigInt(recvTimeMillis) << 20n) + BigInt(randomInt);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,sBAAmC;AAO5B,SAAS,cACd,qBAAyB,oCAAmB,GAC5C,YAAoB,KAAK,MAAM,KAAK,OAAO,IAAI,GAAI,GAC3C;AACR,aAAO,8BAAgB,oBAAoB,gBAAgB,SAAS,CAAC;AACvE;AASO,SAAS,qBACd,qBAAyB,oCAAmB,GAC5C,YAAoB,KAAK,MAAM,KAAK,OAAO,IAAI,GAAI,GAC3C;AACR,QAAM,oBAAoB,oBAAoB,gBAAgB,SAAS;AACvE,QAAM,oBAAoB,oBAAqB,MAAM;AAErD,aAAO,8BAAgB,iBAAiB;AAC1C;AAKO,SAAS,oBAAoB,YAA6B;AAC/D,QAAM,cAAc,OAAO,UAAU;AAErC,SAAO,QAAQ,cAAe,MAAM,GAAI;AAC1C;AAOO,SAAS,0BAA0B,YAA4B;AAEpE,QAAM,sBAAsB,OAAO,UAAU,IAAI,EAAE,MAAM;AACzD,QAAM,iBAAiB,uBAAuB;AAC9C,SAAO,OAAO,eAAe,SAAS,CAAC;AACzC;AAEA,SAAS,oBACP,gBACA,WACQ;AACR,UAAQ,OAAO,cAAc,KAAK,OAAO,OAAO,SAAS;AAC3D;","names":[]}