{"version":3,"file":"node.cjs","sources":["../../src/entries/node.ts"],"sourcesContent":["import * as E from 'fp-ts/Either';\nimport { pipe } from 'fp-ts/lib/function.js';\nimport { createHmac as nodeCreateHmac } from 'node:crypto';\n\nimport { bufferToArrayBuffer } from '../buf-converters.js';\nimport { hashToken as _hashToken } from '../hashToken.js';\nimport { signDataFp as _signDataFp, SignDataError, type SignDataOptions } from '../signDataFp.js';\nimport {\n  signFp as _signFp,\n  type SignableData,\n  type SignOptions,\n} from '../signFp.js';\nimport type { CreateHmacFn, Text } from '../types.js';\nimport {\n  validateFp as _validateFp,\n  type ValidateError,\n  type ValidateOptions,\n  type ValidateValue,\n} from '../validation.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 bufferToArrayBuffer(\n    nodeCreateHmac('sha256', textToBuffer(key))\n      .update(textToBuffer(data))\n      .digest(),\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 pipe(\n    validateFp(value, token, options),\n    E.match(() => false, () => true),\n  );\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 signFp(\n  data: SignableData,\n  key: Text,\n  authDate: Date,\n  options?: SignOptions,\n): E.Either<SignDataError, string> {\n  return _signFp(data, key, authDate, signDataFp, options);\n}\n\n/**\n * @see signFp\n */\nexport function sign(data: SignableData, key: Text, authDate: Date, options?: SignOptions): string {\n  return pipe(\n    signFp(data, key, authDate, options),\n    E.match(e => {\n      throw e;\n    }, v => v),\n  );\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 signDataFp(\n  data: Text,\n  key: Text,\n  options?: SignDataOptions,\n): E.Either<SignDataError, string> {\n  return _signDataFp(false, data, key, createHmac, options);\n}\n\n/**\n * @see signDataFp\n */\nexport function signData(data: Text, key: Text, options?: SignDataOptions): string {\n  return pipe(\n    signDataFp(data, key, options),\n    E.match(e => {\n      throw e;\n    }, v => v),\n  );\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 */\nexport function validateFp(\n  value: ValidateValue,\n  token: Text,\n  options?: ValidateOptions,\n): E.Either<ValidateError, void> {\n  return _validateFp(false, value, token, signDataFp, options);\n}\n\n/**\n * @see validateFp\n */\nexport function validate(value: ValidateValue, token: Text, options?: ValidateOptions): void {\n  pipe(\n    validateFp(value, token, options),\n    E.mapLeft(error => {\n      throw error;\n    }),\n  );\n}\n\nexport * from './shared.js';\n"],"names":["bufferToArrayBuffer","nodeCreateHmac","_hashToken","pipe","E","_signFp","_signDataFp","_validateFp"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAS,aAAa,MAAoB;AACjC,SAAA,OAAO,KAAK,OAAO,SAAS,WAAW,OAAO,IAAI,WAAW,IAAI,CAAC;AAC3E;AAEA,MAAM,aAAkC,CAAC,MAAM,QAAQ;AAC9C,SAAAA,QAAA;AAAA,IACLC,uBAAe,UAAU,aAAa,GAAG,CAAC,EACvC,OAAO,aAAa,IAAI,CAAC,EACzB,OAAO;AAAA,EACZ;AACF;AAMO,SAAS,UAAU,OAAqB;AAC7C,SAAO,OAAO,KAAKC,QAAW,UAAA,OAAO,UAAU,CAAC;AAClD;AAQgB,SAAA,QAAQ,OAAsB,OAAa,SAAoC;AACtF,SAAAC,YAAA;AAAA,IACL,WAAW,OAAO,OAAO,OAAO;AAAA,IAChCC,aAAE,MAAM,MAAM,OAAO,MAAM,IAAI;AAAA,EACjC;AACF;AAUO,SAAS,OACd,MACA,KACA,UACA,SACiC;AACjC,SAAOC,QAAAA,OAAQ,MAAM,KAAK,UAAU,YAAY,OAAO;AACzD;AAKO,SAAS,KAAK,MAAoB,KAAW,UAAgB,SAA+B;AAC1F,SAAAF,YAAA;AAAA,IACL,OAAO,MAAM,KAAK,UAAU,OAAO;AAAA,IACnCC,aAAE,MAAM,CAAK,MAAA;AACL,YAAA;AAAA,IAAA,GACL,OAAK,CAAC;AAAA,EACX;AACF;AASgB,SAAA,WACd,MACA,KACA,SACiC;AACjC,SAAOE,QAAAA,WAAY,OAAO,MAAM,KAAK,YAAY,OAAO;AAC1D;AAKgB,SAAA,SAAS,MAAY,KAAW,SAAmC;AAC1E,SAAAH,YAAA;AAAA,IACL,WAAW,MAAM,KAAK,OAAO;AAAA,IAC7BC,aAAE,MAAM,CAAK,MAAA;AACL,YAAA;AAAA,IAAA,GACL,OAAK,CAAC;AAAA,EACX;AACF;AAQgB,SAAA,WACd,OACA,OACA,SAC+B;AAC/B,SAAOG,QAAAA,WAAY,OAAO,OAAO,OAAO,YAAY,OAAO;AAC7D;AAKgB,SAAA,SAAS,OAAsB,OAAa,SAAiC;AAC3FJ,cAAA;AAAA,IACE,WAAW,OAAO,OAAO,OAAO;AAAA,IAChCC,aAAE,QAAQ,CAAS,UAAA;AACX,YAAA;AAAA,IACP,CAAA;AAAA,EACH;AACF;;;;;;;;;;;;;;;;;;;;;;;;"}