{"version":3,"file":"node.cjs","sources":["../../src/entries/node.ts"],"sourcesContent":["import { createHmac as nodeCreateHmac } from 'node:crypto';\n\nimport { hexToArrayBuffer } from '@/converters/hexToArrayBuffer.js';\nimport { hashToken as _hashToken } from '@/hashToken.js';\nimport { sign as _sign, SignOptions } from '@/sign.js';\nimport { signData as _signData, SignDataOptions } from '@/signData.js';\nimport { validate as _validate, type ValidateOptions, type ValidateValue } from '@/validate.js';\nimport { isValid as _isValid } from '@/isValid.js';\nimport type { CreateHmacFn, SignData, Text } from '@/types.js';\n\n/**\n * Converts Text to Node.js Buffer.\n * @param text - text to convert\n */\nfunction textToBuffer(text: Text): Buffer {\n  return Buffer.from(typeof text === 'string' ? text : new Uint8Array(text));\n}\n\nconst createHmac: CreateHmacFn<false> = (data, key) => {\n  return hexToArrayBuffer(\n    nodeCreateHmac('sha256', textToBuffer(key))\n      .update(textToBuffer(data))\n      .digest('hex'),\n  );\n};\n\n/**\n * Hashes specified token using a string, expected during init data sign.\n * @param token - token to hash.\n */\nexport function hashToken(token: Text): Buffer {\n  return Buffer.from(_hashToken(token, createHmac));\n}\n\n/**\n * @param value - value to check.\n * @param token - bot secret token.\n * @param options - additional validation options.\n * @returns True is specified init data is valid.\n */\nexport function isValid(value: ValidateValue, token: Text, options?: ValidateOptions): boolean {\n  return _isValid(value, token, validate, options);\n}\n\n/**\n * Signs specified init data.\n * @param data - init data to sign.\n * @param authDate - date, when this init data should be signed.\n * @param key - private key.\n * @param options - additional options.\n * @returns Signed init data presented as query parameters.\n */\nexport function sign(data: SignData, key: Text, authDate: Date, options?: SignOptions): string {\n  return _sign(data, key, authDate, signData, options);\n}\n\n/**\n * Signs specified data with the passed token.\n * @param data - data to sign.\n * @param key - private key.\n * @param options - additional options.\n * @returns Data sign.\n */\nexport function signData(data: Text, key: Text, options?: SignDataOptions): string {\n  return _signData(data, key, createHmac, options);\n}\n\n/**\n * Validates passed init data.\n * @param value - value to check.\n * @param token - bot secret token.\n * @param options - additional validation options.\n * @throws {TypeError} \"auth_date\" should present integer\n * @throws {SignatureInvalidError} Signature is invalid.\n * @throws {AuthDateInvalidError} \"auth_date\" property is missing or invalid.\n * @throws {SignatureMissingError} \"hash\" property is missing.\n * @throws {ExpiredError} Init data is expired.\n */\nexport function validate(\n  value: ValidateValue,\n  token: Text,\n  options?: ValidateOptions,\n): void {\n  return _validate(value, token, signData, options);\n}\n\nexport * from './shared.js';\n"],"names":["hexToArrayBuffer","nodeCreateHmac","_hashToken","_isValid","_sign","_signData","_validate"],"mappings":";;;;AAcA,SAAS,aAAa,MAAoB;AACjC,SAAA,OAAO,KAAK,OAAO,SAAS,WAAW,OAAO,IAAI,WAAW,IAAI,CAAC;AAC3E;AAEA,MAAM,aAAkC,CAAC,MAAM,QAAQ;AAC9C,SAAAA,OAAA;AAAA,IACLC,YAAAA,WAAe,UAAU,aAAa,GAAG,CAAC,EACvC,OAAO,aAAa,IAAI,CAAC,EACzB,OAAO,KAAK;AAAA,EACjB;AACF;AAMO,SAAS,UAAU,OAAqB;AAC7C,SAAO,OAAO,KAAKC,OAAW,UAAA,OAAO,UAAU,CAAC;AAClD;AAQgB,SAAA,QAAQ,OAAsB,OAAa,SAAoC;AAC7F,SAAOC,OAAS,QAAA,OAAO,OAAO,UAAU,OAAO;AACjD;AAUO,SAAS,KAAK,MAAgB,KAAW,UAAgB,SAA+B;AAC7F,SAAOC,OAAAA,KAAM,MAAM,KAAK,UAAU,UAAU,OAAO;AACrD;AASgB,SAAA,SAAS,MAAY,KAAW,SAAmC;AACjF,SAAOC,OAAU,SAAA,MAAM,KAAK,YAAY,OAAO;AACjD;AAagB,SAAA,SACd,OACA,OACA,SACM;AACN,SAAOC,OAAU,SAAA,OAAO,OAAO,UAAU,OAAO;AAClD;;;;;;;;;;;;;;;;;"}