{"version":3,"file":"hmac.cjs","names":[],"sources":["../../src/signing/hmac.ts"],"sourcesContent":["const decodeBase64Secret = (secret: string): Uint8Array<ArrayBuffer> => {\n\tconst normalized = secret.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\tconst padded = normalized + \"=\".repeat((4 - (normalized.length % 4)) % 4);\n\tconst binary = atob(padded);\n\tconst buffer = new ArrayBuffer(binary.length);\n\tconst bytes = new Uint8Array(buffer);\n\tfor (let i = 0; i < binary.length; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\treturn bytes;\n};\n\n/**\n * Builds the canonical Polymarket CLOB HMAC signature\n * @param secret\n * @param timestamp\n * @param method\n * @param requestPath\n * @param body\n * @returns string\n */\nexport const buildPolyHmacSignature = async (\n\tsecret: string,\n\ttimestamp: number,\n\tmethod: string,\n\trequestPath: string,\n\tbody?: string,\n): Promise<string> => {\n\tif (!secret) {\n\t\tthrow new Error(\"buildPolyHmacSignature: secret is empty\");\n\t}\n\tif (!globalThis.crypto?.subtle) {\n\t\tthrow new Error(\n\t\t\t\"buildPolyHmacSignature: globalThis.crypto.subtle is unavailable. Requires Node >=20 or a secure browser context (HTTPS or localhost).\",\n\t\t);\n\t}\n\n\tlet message = timestamp + method + requestPath;\n\tif (body !== undefined) {\n\t\tmessage += body;\n\t}\n\n\tconst keyBytes = decodeBase64Secret(secret);\n\n\tconst key = await globalThis.crypto.subtle.importKey(\n\t\t\"raw\",\n\t\tkeyBytes,\n\t\t{ name: \"HMAC\", hash: \"SHA-256\" },\n\t\tfalse,\n\t\t[\"sign\"],\n\t);\n\n\tconst sigBuffer = await globalThis.crypto.subtle.sign(\n\t\t\"HMAC\",\n\t\tkey,\n\t\tnew TextEncoder().encode(message),\n\t);\n\n\tconst sigBytes = new Uint8Array(sigBuffer);\n\tlet binary = \"\";\n\tfor (let i = 0; i < sigBytes.length; i++) {\n\t\tbinary += String.fromCharCode(sigBytes[i]);\n\t}\n\t// NOTE: Must be url safe base64 encoding, but keep base64 \"=\" suffix\n\t// Convert '+' to '-'\n\t// Convert '/' to '_'\n\treturn btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n};\n"],"mappings":";;AAAA,MAAM,sBAAsB,WAA4C;CACvE,MAAM,aAAa,OAAO,QAAQ,MAAM,IAAI,CAAC,QAAQ,MAAM,IAAI;CAC/D,MAAM,SAAS,aAAa,IAAI,QAAQ,IAAK,WAAW,SAAS,KAAM,EAAE;CACzE,MAAM,SAAS,KAAK,OAAO;CAC3B,MAAM,SAAS,IAAI,YAAY,OAAO,OAAO;CAC7C,MAAM,QAAQ,IAAI,WAAW,OAAO;AACpC,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAClC,OAAM,KAAK,OAAO,WAAW,EAAE;AAEhC,QAAO;;;;;;;;;;;AAYR,MAAa,yBAAyB,OACrC,QACA,WACA,QACA,aACA,SACqB;AACrB,KAAI,CAAC,OACJ,OAAM,IAAI,MAAM,0CAA0C;AAE3D,KAAI,CAAC,WAAW,QAAQ,OACvB,OAAM,IAAI,MACT,wIACA;CAGF,IAAI,UAAU,YAAY,SAAS;AACnC,KAAI,SAAS,OACZ,YAAW;CAGZ,MAAM,WAAW,mBAAmB,OAAO;CAE3C,MAAM,MAAM,MAAM,WAAW,OAAO,OAAO,UAC1C,OACA,UACA;EAAE,MAAM;EAAQ,MAAM;EAAW,EACjC,OACA,CAAC,OAAO,CACR;CAED,MAAM,YAAY,MAAM,WAAW,OAAO,OAAO,KAChD,QACA,KACA,IAAI,aAAa,CAAC,OAAO,QAAQ,CACjC;CAED,MAAM,WAAW,IAAI,WAAW,UAAU;CAC1C,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IACpC,WAAU,OAAO,aAAa,SAAS,GAAG;AAK3C,QAAO,KAAK,OAAO,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI"}