{"version":3,"sources":["../../src/session-relay/signing.ts"],"sourcesContent":["import { sha256 } from \"@noble/hashes/sha2\";\nimport { bytesToHex } from \"viem\";\nimport {\n  buildWeb3SignedHeader,\n  type Web3SignedSignFn,\n} from \"../auth/web3-signed-builder\";\n\nconst textEncoder = new TextEncoder();\n\nfunction canonicalizeJson(value: unknown): unknown {\n  if (value === null || typeof value !== \"object\") return value;\n  if (Array.isArray(value)) return value.map(canonicalizeJson);\n\n  const sorted: Record<string, unknown> = {};\n  for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n    if (key === \"signature\") continue;\n    sorted[key] = canonicalizeJson((value as Record<string, unknown>)[key]);\n  }\n  return sorted;\n}\n\n/**\n * Compute the legacy bodyHash shape currently accepted by Session Relay.\n *\n * @remarks\n * Personal Server Web3Signed requests use `sha256:<hex>`, including a canonical\n * empty-body hash. Session Relay's current signed init endpoint verifies a\n * legacy body hash: bare SHA-256 hex for non-empty JSON bodies and `\"\"` for\n * empty bodies. Keep this compatibility local to the Relay integration.\n */\nexport function computeSessionRelayBodyHash(body: string | undefined): string {\n  if (!body || body.length === 0) return \"\";\n\n  const parsed = JSON.parse(body);\n  const canonical = canonicalizeJson(parsed);\n  const digest = sha256(textEncoder.encode(JSON.stringify(canonical)));\n  return bytesToHex(digest).slice(2);\n}\n\n/** Build a Web3Signed header compatible with Session Relay's signed endpoints. */\nexport function buildSessionRelayWeb3SignedHeader(params: {\n  signMessage: Web3SignedSignFn;\n  aud: string;\n  method: string;\n  uri: string;\n  body?: string;\n  iat?: number;\n  exp?: number;\n}): Promise<string> {\n  return buildWeb3SignedHeader({\n    signMessage: params.signMessage,\n    aud: params.aud,\n    method: params.method,\n    uri: params.uri,\n    bodyHash: computeSessionRelayBodyHash(params.body),\n    iat: params.iat,\n    exp: params.exp,\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAuB;AACvB,kBAA2B;AAC3B,iCAGO;AAEP,MAAM,cAAc,IAAI,YAAY;AAEpC,SAAS,iBAAiB,OAAyB;AACjD,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,gBAAgB;AAE3D,QAAM,SAAkC,CAAC;AACzC,aAAW,OAAO,OAAO,KAAK,KAAgC,EAAE,KAAK,GAAG;AACtE,QAAI,QAAQ,YAAa;AACzB,WAAO,GAAG,IAAI,iBAAkB,MAAkC,GAAG,CAAC;AAAA,EACxE;AACA,SAAO;AACT;AAWO,SAAS,4BAA4B,MAAkC;AAC5E,MAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AAEvC,QAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,QAAM,YAAY,iBAAiB,MAAM;AACzC,QAAM,aAAS,oBAAO,YAAY,OAAO,KAAK,UAAU,SAAS,CAAC,CAAC;AACnE,aAAO,wBAAW,MAAM,EAAE,MAAM,CAAC;AACnC;AAGO,SAAS,kCAAkC,QAQ9B;AAClB,aAAO,kDAAsB;AAAA,IAC3B,aAAa,OAAO;AAAA,IACpB,KAAK,OAAO;AAAA,IACZ,QAAQ,OAAO;AAAA,IACf,KAAK,OAAO;AAAA,IACZ,UAAU,4BAA4B,OAAO,IAAI;AAAA,IACjD,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,EACd,CAAC;AACH;","names":[]}