{"version":3,"sources":["../src/index.ts","../src/constants.ts"],"sourcesContent":["import { customAlphabet } from 'nanoid';\nimport {\n  ITEM_ALPHABET,\n  OTP_LENGTH,\n  WEBHOOK_EVENTS,\n} from './constants.js';\n\nexport type WebhookEvent = typeof WEBHOOK_EVENTS[keyof typeof WEBHOOK_EVENTS];\n\nexport interface OtpOptions {\n  length?: number;\n  chars?: string;\n}\n\nexport interface BulkOtpOptions extends OtpOptions {}\n\nexport type WebhookHandler = (event: WebhookEvent, data: Record<string, unknown>) => void | Promise<void>;\n\nconst nid = customAlphabet(ITEM_ALPHABET, OTP_LENGTH);\n\nlet webhookHandler: WebhookHandler | null = null;\n\nexport const setWebhookHandler = (handler: WebhookHandler): void => {\n  if (typeof handler !== 'function') {\n    throw new Error('Webhook handler must be a function');\n  }\n\n  webhookHandler = handler;\n};\n\nconst triggerWebhook = async (event: WebhookEvent, data: Record<string, unknown>): Promise<void> => {\n  if (webhookHandler) {\n    try {\n      await webhookHandler(event, data);\n    } catch (error) {\n      throw new Error('Error in running Webhook handler');\n    }\n  }\n};\n\nexport const otpGen = async (): Promise<string> => {\n  const otp = nid();\n\n  await triggerWebhook(WEBHOOK_EVENTS.OTP_GENERATED, { otp });\n  return otp;\n};\n\nexport const customOtpGen = async ({\n  length = OTP_LENGTH,\n  chars = ITEM_ALPHABET,\n}: OtpOptions = {}): Promise<string> => {\n  if (!Number.isInteger(length) || length <= 0) {\n    throw new Error('otp length must be greater than 0');\n  }\n\n  const idGen = customAlphabet(chars, length);\n  const otp = idGen();\n\n  await triggerWebhook(WEBHOOK_EVENTS.OTP_GENERATED, { otp });\n  return otp;\n};\n\nconst YIELD_EVERY = 1000;\n\nconst yieldToEventLoop = () => new Promise<void>(resolve => setTimeout(resolve, 0));\n\nexport const bulkOtpGen = async (count: number = 0, opts: BulkOtpOptions = {}): Promise<string[]> => {\n  if (!Number.isInteger(count) || count <= 0) {\n    throw new Error('count must be greater than 0');\n  }\n\n  const { length = OTP_LENGTH, chars = ITEM_ALPHABET } = opts;\n\n  if (!Number.isInteger(length) || length <= 0) {\n    throw new Error('otp length must be greater than 0');\n  }\n\n  const idGen = customAlphabet(chars, length);\n  const idArr: string[] = new Array(count);\n\n  for (let i = 0; i < count; i++) {\n    idArr[i] = idGen();\n\n    if ((i + 1) % YIELD_EVERY === 0) {\n      await yieldToEventLoop();\n    }\n  }\n\n  await triggerWebhook(WEBHOOK_EVENTS.OTP_BULK_GENERATED, { count, otps: idArr });\n  return idArr;\n};\n\nexport { WEBHOOK_EVENTS };\n","export const ITEM_ALPHABET = '0123456789';\nexport const OTP_LENGTH = 6;\n\nexport const WEBHOOK_EVENTS = {\n  OTP_GENERATED: 'otp-generated',\n  OTP_BULK_GENERATED: 'bulk-otp-generated',\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA+B;;;ACAxB,IAAM,gBAAgB;AACtB,IAAM,aAAa;AAEnB,IAAM,iBAAiB;AAAA,EAC5B,eAAe;AAAA,EACf,oBAAoB;AACtB;;;ADYA,IAAM,UAAM,8BAAe,eAAe,UAAU;AAEpD,IAAI,iBAAwC;AAErC,IAAM,oBAAoB,CAAC,YAAkC;AAClE,MAAI,OAAO,YAAY,YAAY;AACjC,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,mBAAiB;AACnB;AAEA,IAAM,iBAAiB,OAAO,OAAqB,SAAiD;AAClG,MAAI,gBAAgB;AAClB,QAAI;AACF,YAAM,eAAe,OAAO,IAAI;AAAA,IAClC,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,EACF;AACF;AAEO,IAAM,SAAS,YAA6B;AACjD,QAAM,MAAM,IAAI;AAEhB,QAAM,eAAe,eAAe,eAAe,EAAE,IAAI,CAAC;AAC1D,SAAO;AACT;AAEO,IAAM,eAAe,OAAO;AAAA,EACjC,SAAS;AAAA,EACT,QAAQ;AACV,IAAgB,CAAC,MAAuB;AACtC,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAEA,QAAM,YAAQ,8BAAe,OAAO,MAAM;AAC1C,QAAM,MAAM,MAAM;AAElB,QAAM,eAAe,eAAe,eAAe,EAAE,IAAI,CAAC;AAC1D,SAAO;AACT;AAEA,IAAM,cAAc;AAEpB,IAAM,mBAAmB,MAAM,IAAI,QAAc,aAAW,WAAW,SAAS,CAAC,CAAC;AAE3E,IAAM,aAAa,OAAO,QAAgB,GAAG,OAAuB,CAAC,MAAyB;AACnG,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,GAAG;AAC1C,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEA,QAAM,EAAE,SAAS,YAAY,QAAQ,cAAc,IAAI;AAEvD,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAEA,QAAM,YAAQ,8BAAe,OAAO,MAAM;AAC1C,QAAM,QAAkB,IAAI,MAAM,KAAK;AAEvC,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,UAAM,CAAC,IAAI,MAAM;AAEjB,SAAK,IAAI,KAAK,gBAAgB,GAAG;AAC/B,YAAM,iBAAiB;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,eAAe,eAAe,oBAAoB,EAAE,OAAO,MAAM,MAAM,CAAC;AAC9E,SAAO;AACT;","names":[]}