{"version":3,"file":"deterministicId.cjs","names":["hashjs"],"sources":["../../src/helpers/deterministicId.ts"],"sourcesContent":["/**\n * Produces span IDs identical to the Go executor's\n * `DeterministicSpanConfig(seed).SpanID` in `pkg/tracing/tracer.go`.\n *\n * Algorithm: SHA-256 the seed, interpret the 32-byte digest as a ChaCha8\n * key, then read 24 bytes from Go's `chacha8rand` PRNG\n * (https://c2sp.org/chacha8rand) — 16 bytes for TraceID (discarded) plus\n * 8 bytes for SpanID (returned).  This is the 3rd uint64 in the\n * interleaved output buffer (buf[2] = word 1 from blocks 0 and 1).\n *\n * Uses `hash.js` for SHA-256 (same as the rest of the SDK) so it works in\n * Node, browsers, and edge runtimes without `node:crypto`.\n */\nimport hashjs from \"hash.js\";\n\nconst { sha256 } = hashjs;\n\n/**\n * Compute a deterministic 8-byte span ID from an arbitrary seed string,\n * byte-for-byte compatible with Go's `DeterministicSpanConfig(seed).SpanID`.\n *\n * Returns the span ID as a 16-character hex string (the format OTel uses).\n */\nexport function deterministicSpanID(seed: string): string {\n  const hash = sha256().update(seed).digest(); // number[]\n  const third = chacha8randThirdUint64(hash);\n  return uint64ToLEHex(third);\n}\n\n// ---------------------------------------------------------------------------\n// chacha8rand – Go's math/rand/v2.ChaCha8 PRNG (3rd uint64)\n// ---------------------------------------------------------------------------\n\n/**\n * Compute blocks 0 and 1 (counters 0,1) and return the 3rd uint64 (buf[2])\n * of the interleaved output buffer.  This matches `DeterministicSpanConfig.SpanID`\n * which reads 16 bytes (TraceID = buf[0..1]) then 8 bytes (SpanID = buf[2]).\n *\n * The chacha8rand interleaved layout is:\n *   buf[2*i]   = block0[i] | block1[i] << 32\n *   buf[2*i+1] = block2[i] | block3[i] << 32\n * So buf[2] = buf[2*1] = block0[1] | block1[1] << 32 = s1 from both blocks.\n */\nfunction chacha8randThirdUint64(key: number[]): bigint {\n  // Interpret 32-byte key as 4 little-endian uint64 → 8 uint32 words.\n  const k = new Uint32Array(8);\n  for (let i = 0; i < 8; i++) {\n    k[i] =\n      (key[i * 4]! |\n        (key[i * 4 + 1]! << 8) |\n        (key[i * 4 + 2]! << 16) |\n        (key[i * 4 + 3]! << 24)) >>>\n      0;\n  }\n\n  // We only need block-column 0 (counter = 0) to get the first uint64.\n  // Initial state: [constants | key | counter=0 | nonce=0]\n  let s0 = 0x61707865;\n  let s1 = 0x3320646e;\n  let s2 = 0x79622d32;\n  let s3 = 0x6b206574;\n  let s4 = k[0]!;\n  let s5 = k[1]!;\n  let s6 = k[2]!;\n  let s7 = k[3]!;\n  let s8 = k[4]!;\n  let s9 = k[5]!;\n  let s10 = k[6]!;\n  let s11 = k[7]!;\n  let s12 = 0; // counter\n  let s13 = 0; // nonce\n  let s14 = 0;\n  let s15 = 0;\n\n  // Save key words for partial addition later (positions 4-11).\n  const ok4 = s4,\n    ok5 = s5,\n    ok6 = s6,\n    ok7 = s7;\n  const ok8 = s8,\n    ok9 = s9,\n    ok10 = s10,\n    ok11 = s11;\n\n  // 4 double-rounds = 8 quarter-round rounds (ChaCha8).\n  for (let i = 0; i < 4; i++) {\n    // Column rounds\n    s0 = (s0 + s4) >>> 0;\n    s12 ^= s0;\n    s12 = ((s12 << 16) | (s12 >>> 16)) >>> 0;\n    s8 = (s8 + s12) >>> 0;\n    s4 ^= s8;\n    s4 = ((s4 << 12) | (s4 >>> 20)) >>> 0;\n    s0 = (s0 + s4) >>> 0;\n    s12 ^= s0;\n    s12 = ((s12 << 8) | (s12 >>> 24)) >>> 0;\n    s8 = (s8 + s12) >>> 0;\n    s4 ^= s8;\n    s4 = ((s4 << 7) | (s4 >>> 25)) >>> 0;\n\n    s1 = (s1 + s5) >>> 0;\n    s13 ^= s1;\n    s13 = ((s13 << 16) | (s13 >>> 16)) >>> 0;\n    s9 = (s9 + s13) >>> 0;\n    s5 ^= s9;\n    s5 = ((s5 << 12) | (s5 >>> 20)) >>> 0;\n    s1 = (s1 + s5) >>> 0;\n    s13 ^= s1;\n    s13 = ((s13 << 8) | (s13 >>> 24)) >>> 0;\n    s9 = (s9 + s13) >>> 0;\n    s5 ^= s9;\n    s5 = ((s5 << 7) | (s5 >>> 25)) >>> 0;\n\n    s2 = (s2 + s6) >>> 0;\n    s14 ^= s2;\n    s14 = ((s14 << 16) | (s14 >>> 16)) >>> 0;\n    s10 = (s10 + s14) >>> 0;\n    s6 ^= s10;\n    s6 = ((s6 << 12) | (s6 >>> 20)) >>> 0;\n    s2 = (s2 + s6) >>> 0;\n    s14 ^= s2;\n    s14 = ((s14 << 8) | (s14 >>> 24)) >>> 0;\n    s10 = (s10 + s14) >>> 0;\n    s6 ^= s10;\n    s6 = ((s6 << 7) | (s6 >>> 25)) >>> 0;\n\n    s3 = (s3 + s7) >>> 0;\n    s15 ^= s3;\n    s15 = ((s15 << 16) | (s15 >>> 16)) >>> 0;\n    s11 = (s11 + s15) >>> 0;\n    s7 ^= s11;\n    s7 = ((s7 << 12) | (s7 >>> 20)) >>> 0;\n    s3 = (s3 + s7) >>> 0;\n    s15 ^= s3;\n    s15 = ((s15 << 8) | (s15 >>> 24)) >>> 0;\n    s11 = (s11 + s15) >>> 0;\n    s7 ^= s11;\n    s7 = ((s7 << 7) | (s7 >>> 25)) >>> 0;\n\n    // Diagonal rounds\n    s0 = (s0 + s5) >>> 0;\n    s15 ^= s0;\n    s15 = ((s15 << 16) | (s15 >>> 16)) >>> 0;\n    s10 = (s10 + s15) >>> 0;\n    s5 ^= s10;\n    s5 = ((s5 << 12) | (s5 >>> 20)) >>> 0;\n    s0 = (s0 + s5) >>> 0;\n    s15 ^= s0;\n    s15 = ((s15 << 8) | (s15 >>> 24)) >>> 0;\n    s10 = (s10 + s15) >>> 0;\n    s5 ^= s10;\n    s5 = ((s5 << 7) | (s5 >>> 25)) >>> 0;\n\n    s1 = (s1 + s6) >>> 0;\n    s12 ^= s1;\n    s12 = ((s12 << 16) | (s12 >>> 16)) >>> 0;\n    s11 = (s11 + s12) >>> 0;\n    s6 ^= s11;\n    s6 = ((s6 << 12) | (s6 >>> 20)) >>> 0;\n    s1 = (s1 + s6) >>> 0;\n    s12 ^= s1;\n    s12 = ((s12 << 8) | (s12 >>> 24)) >>> 0;\n    s11 = (s11 + s12) >>> 0;\n    s6 ^= s11;\n    s6 = ((s6 << 7) | (s6 >>> 25)) >>> 0;\n\n    s2 = (s2 + s7) >>> 0;\n    s13 ^= s2;\n    s13 = ((s13 << 16) | (s13 >>> 16)) >>> 0;\n    s8 = (s8 + s13) >>> 0;\n    s7 ^= s8;\n    s7 = ((s7 << 12) | (s7 >>> 20)) >>> 0;\n    s2 = (s2 + s7) >>> 0;\n    s13 ^= s2;\n    s13 = ((s13 << 8) | (s13 >>> 24)) >>> 0;\n    s8 = (s8 + s13) >>> 0;\n    s7 ^= s8;\n    s7 = ((s7 << 7) | (s7 >>> 25)) >>> 0;\n\n    s3 = (s3 + s4) >>> 0;\n    s14 ^= s3;\n    s14 = ((s14 << 16) | (s14 >>> 16)) >>> 0;\n    s9 = (s9 + s14) >>> 0;\n    s4 ^= s9;\n    s4 = ((s4 << 12) | (s4 >>> 20)) >>> 0;\n    s3 = (s3 + s4) >>> 0;\n    s14 ^= s3;\n    s14 = ((s14 << 8) | (s14 >>> 24)) >>> 0;\n    s9 = (s9 + s14) >>> 0;\n    s4 ^= s9;\n    s4 = ((s4 << 7) | (s4 >>> 25)) >>> 0;\n  }\n\n  // Partial addition: only key positions (4-11) get the original added back.\n  s4 = (s4 + ok4) >>> 0;\n  s5 = (s5 + ok5) >>> 0;\n  s6 = (s6 + ok6) >>> 0;\n  s7 = (s7 + ok7) >>> 0;\n  s8 = (s8 + ok8) >>> 0;\n  s9 = (s9 + ok9) >>> 0;\n  s10 = (s10 + ok10) >>> 0;\n  s11 = (s11 + ok11) >>> 0;\n\n  // The chacha8rand interleaved output layout is:\n  //   buf[2*i]   = block0[i] | block1[i] << 32    (blocks 0,1)\n  //   buf[2*i+1] = block2[i] | block3[i] << 32    (blocks 2,3)\n  //\n  // DeterministicSpanConfig reads 16 bytes (TraceID = buf[0..1]) then\n  // 8 bytes (SpanID = buf[2]).  buf[2] = buf[2*1] = block0[1] | block1[1] << 32.\n  // So the SpanID uses state word index 1 (s1) from both blocks.\n  // s1 is a constants position (no addition in chacha8rand).\n  const hi = chacha8randColumn1Row1(k);\n\n  return BigInt(s1 >>> 0) | (BigInt(hi >>> 0) << 32n);\n}\n\n/**\n * Run chacha8rand for column 1 (counter = 1) and return row 1 (s1).\n */\nfunction chacha8randColumn1Row1(k: Uint32Array): number {\n  let s0 = 0x61707865;\n  let s1 = 0x3320646e;\n  let s2 = 0x79622d32;\n  let s3 = 0x6b206574;\n  let s4 = k[0]!;\n  let s5 = k[1]!;\n  let s6 = k[2]!;\n  let s7 = k[3]!;\n  let s8 = k[4]!;\n  let s9 = k[5]!;\n  let s10 = k[6]!;\n  let s11 = k[7]!;\n  let s12 = 1; // counter = 1\n  let s13 = 0;\n  let s14 = 0;\n  let s15 = 0;\n\n  for (let i = 0; i < 4; i++) {\n    // Column rounds\n    s0 = (s0 + s4) >>> 0;\n    s12 ^= s0;\n    s12 = ((s12 << 16) | (s12 >>> 16)) >>> 0;\n    s8 = (s8 + s12) >>> 0;\n    s4 ^= s8;\n    s4 = ((s4 << 12) | (s4 >>> 20)) >>> 0;\n    s0 = (s0 + s4) >>> 0;\n    s12 ^= s0;\n    s12 = ((s12 << 8) | (s12 >>> 24)) >>> 0;\n    s8 = (s8 + s12) >>> 0;\n    s4 ^= s8;\n    s4 = ((s4 << 7) | (s4 >>> 25)) >>> 0;\n\n    s1 = (s1 + s5) >>> 0;\n    s13 ^= s1;\n    s13 = ((s13 << 16) | (s13 >>> 16)) >>> 0;\n    s9 = (s9 + s13) >>> 0;\n    s5 ^= s9;\n    s5 = ((s5 << 12) | (s5 >>> 20)) >>> 0;\n    s1 = (s1 + s5) >>> 0;\n    s13 ^= s1;\n    s13 = ((s13 << 8) | (s13 >>> 24)) >>> 0;\n    s9 = (s9 + s13) >>> 0;\n    s5 ^= s9;\n    s5 = ((s5 << 7) | (s5 >>> 25)) >>> 0;\n\n    s2 = (s2 + s6) >>> 0;\n    s14 ^= s2;\n    s14 = ((s14 << 16) | (s14 >>> 16)) >>> 0;\n    s10 = (s10 + s14) >>> 0;\n    s6 ^= s10;\n    s6 = ((s6 << 12) | (s6 >>> 20)) >>> 0;\n    s2 = (s2 + s6) >>> 0;\n    s14 ^= s2;\n    s14 = ((s14 << 8) | (s14 >>> 24)) >>> 0;\n    s10 = (s10 + s14) >>> 0;\n    s6 ^= s10;\n    s6 = ((s6 << 7) | (s6 >>> 25)) >>> 0;\n\n    s3 = (s3 + s7) >>> 0;\n    s15 ^= s3;\n    s15 = ((s15 << 16) | (s15 >>> 16)) >>> 0;\n    s11 = (s11 + s15) >>> 0;\n    s7 ^= s11;\n    s7 = ((s7 << 12) | (s7 >>> 20)) >>> 0;\n    s3 = (s3 + s7) >>> 0;\n    s15 ^= s3;\n    s15 = ((s15 << 8) | (s15 >>> 24)) >>> 0;\n    s11 = (s11 + s15) >>> 0;\n    s7 ^= s11;\n    s7 = ((s7 << 7) | (s7 >>> 25)) >>> 0;\n\n    // Diagonal rounds\n    s0 = (s0 + s5) >>> 0;\n    s15 ^= s0;\n    s15 = ((s15 << 16) | (s15 >>> 16)) >>> 0;\n    s10 = (s10 + s15) >>> 0;\n    s5 ^= s10;\n    s5 = ((s5 << 12) | (s5 >>> 20)) >>> 0;\n    s0 = (s0 + s5) >>> 0;\n    s15 ^= s0;\n    s15 = ((s15 << 8) | (s15 >>> 24)) >>> 0;\n    s10 = (s10 + s15) >>> 0;\n    s5 ^= s10;\n    s5 = ((s5 << 7) | (s5 >>> 25)) >>> 0;\n\n    s1 = (s1 + s6) >>> 0;\n    s12 ^= s1;\n    s12 = ((s12 << 16) | (s12 >>> 16)) >>> 0;\n    s11 = (s11 + s12) >>> 0;\n    s6 ^= s11;\n    s6 = ((s6 << 12) | (s6 >>> 20)) >>> 0;\n    s1 = (s1 + s6) >>> 0;\n    s12 ^= s1;\n    s12 = ((s12 << 8) | (s12 >>> 24)) >>> 0;\n    s11 = (s11 + s12) >>> 0;\n    s6 ^= s11;\n    s6 = ((s6 << 7) | (s6 >>> 25)) >>> 0;\n\n    s2 = (s2 + s7) >>> 0;\n    s13 ^= s2;\n    s13 = ((s13 << 16) | (s13 >>> 16)) >>> 0;\n    s8 = (s8 + s13) >>> 0;\n    s7 ^= s8;\n    s7 = ((s7 << 12) | (s7 >>> 20)) >>> 0;\n    s2 = (s2 + s7) >>> 0;\n    s13 ^= s2;\n    s13 = ((s13 << 8) | (s13 >>> 24)) >>> 0;\n    s8 = (s8 + s13) >>> 0;\n    s7 ^= s8;\n    s7 = ((s7 << 7) | (s7 >>> 25)) >>> 0;\n\n    s3 = (s3 + s4) >>> 0;\n    s14 ^= s3;\n    s14 = ((s14 << 16) | (s14 >>> 16)) >>> 0;\n    s9 = (s9 + s14) >>> 0;\n    s4 ^= s9;\n    s4 = ((s4 << 12) | (s4 >>> 20)) >>> 0;\n    s3 = (s3 + s4) >>> 0;\n    s14 ^= s3;\n    s14 = ((s14 << 8) | (s14 >>> 24)) >>> 0;\n    s9 = (s9 + s14) >>> 0;\n    s4 ^= s9;\n    s4 = ((s4 << 7) | (s4 >>> 25)) >>> 0;\n  }\n\n  // No addition for row 1 (constants row in chacha8rand).\n  return s1;\n}\n\n/** Convert a uint64 bigint to a 16-char little-endian hex string. */\nfunction uint64ToLEHex(v: bigint): string {\n  let out = \"\";\n  for (let i = 0; i < 8; i++) {\n    out += (Number((v >> BigInt(i * 8)) & 0xffn) | 0x100).toString(16).slice(1);\n  }\n  return out;\n}\n"],"mappings":"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"}