{"version":3,"sources":["../src/internals/constants.ts","../src/internals/digits.ts","../src/internals/bcd.ts","../src/internals/varlen.ts","../src/internals/formats.ts","../src/bits/bitmap.ts","../src/internals/ascii.ts","../src/bits/mti.ts","../src/internals/alpha.ts","../src/encodings/alpha.ts","../src/encodings/binary.ts","../src/encodings/numeric.ts","../src/encodings/varlen.ts","../src/iso8583.ts"],"names":["payload","slice","NumericEncoding","BitmapEncoding","VarLenHeaderEncoding","VarPayloadEncoding","VarLenCountMode","Kind","bitmap","s","read"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Kind } from './formats'\n\nexport type BitmapConstraint = 64 | 128\n\nexport const ERR = {\n  ASCII_UNDERRUN: 'ASCII underrun',\n  BITMAP_64_CONSTRAINT: 'Bitmap constrained to 64 bits but DE>64 present',\n  BITMAP_HEX_INVALID: 'Bitmap hex-ascii contains invalid hex characters',\n  BITMAP_HEX_SIZE: 'Bitmap hex-ascii must be 16 or 32 chars',\n  BITMAP_SIZE: 'Bitmap must be 8 or 16 bytes',\n  BITMAP_HELPER_SIZE: 'bitmap(): length must be 8 or 16 bytes',\n  DE_RANGE: 'DE must be 2..128',\n  EXPECT_DIGITS: (s: string) => `Expected digits only, got \"${s}\"`,\n  FIELD_BYTES: (de: number, expected: number) => `DE${de} must be ${expected} bytes`,\n  FIELD_HEX_INVALID: (de: number) => `Invalid hex for DE${de}`,\n  FIELD_EXCEEDS: (de: number, kind: Kind, len: number) => `DE${de} exceeds ${kind}${len}`,\n  FIELD_TOO_LONG: (de: number, value: number, max: number) => `DE${de} length ${value} > max ${max}`,\n  FIELD_UNDERRUN: (de: number) => `DE${de} underrun`,\n  INVALID_ALPHA: (fmt: Kind.Alpha | Kind.AlphaNumeric | Kind.AlphaNumericSpecial) =>\n    `Value not valid for \"${fmt}\" field`,\n  INVALID_ASCII_LEN: 'Invalid ASCII length header',\n  INVALID_BCD_DIGIT: (b: number) => `Invalid BCD digit: 0x${b.toString(16).padStart(2, '0')}`,\n  INVALID_BITMAP_SPEC: (de: number) => `Invalid bitmap field DE${de} spec (expect format: bitmap(8 or 16))`,\n  INVALID_MTI: (m: string) => `Invalid MTI \"${m}\" (expect 4 digits)`,\n  INVALID_MTI_SPEC: (de: number) => `Invalid MTI field DE${de} spec (expect 4 digits, numeric)`,\n  INVALID_VAR_DIGITS_FOR_NON_N: (de: number) => `DE${de} invalid lenCountMode=digits for non-n field`,\n  LEN_HDR_UNDERRUN: 'Length header underrun',\n  KIND_HELPER_LEN_MUST_BE: (helper: string, operator: string, value: number) =>\n    `${helper}(): length must be ${operator} ${value}`,\n  NO_SPEC: (de: number) => `No spec for DE${de}`,\n  NUMERIC_EXCEEDS: (value: number, max: number) => `Numeric value has ${value} digits > N${max}`,\n  VAR_HEX_INVALID: 'Invalid hex for binary var-length field',\n  PRIMARY_UNDERRUN: 'Primary bitmap underrun',\n  SEC_BITMAP_CONSTRAINED: 'Secondary bitmap present but constrained to 64',\n  SEC_UNDERRUN: 'Secondary bitmap underrun',\n  UNSUPPORTED: (k: string) => `Unsupported format ${k}`,\n}\n\nexport const RE = {\n  ALPHA: /^[A-Za-z]*$/,\n  ALNUM: /^[A-Za-z0-9]*$/,\n  HEX: /^[0-9A-Fa-f]*$/,\n  MTI: /^\\d{4}$/,\n  PRINT: /^[\\x20-\\x7E]*$/,\n  XPN: /^[CD]\\d{16}$/,\n}\n","import { ERR } from '@internals/constants'\n\nexport const digitsOnly = (s: string): string => {\n  if (!/^\\d*$/.test(s)) throw new Error(ERR.EXPECT_DIGITS(s))\n  return s\n}\n","import { digitsOnly } from '@internals/digits'\nimport { ERR } from './constants'\n\nexport const fromBcd = (buf: Buffer, digits: number): string => {\n  let s = ''\n  for (let i = 0; i < buf.length; i++) {\n    const hi = (buf[i] >> 4) & 0x0f\n    const lo = buf[i] & 0x0f\n\n    if (hi > 9 || lo > 9) {\n      throw new Error(ERR.INVALID_BCD_DIGIT(buf[i]))\n    }\n\n    s += hi.toString()\n    s += lo.toString()\n  }\n  return s.slice(s.length - digits)\n}\n\nexport const toBcd = (digits: string): Buffer => {\n  const s = digitsOnly(digits)\n  const padded = s.length % 2 ? '0' + s : s\n  const out = Buffer.alloc(padded.length / 2)\n  for (let i = 0; i < padded.length; i += 2) {\n    const hi = padded.charCodeAt(i) - 48\n    const lo = padded.charCodeAt(i + 1) - 48\n    out[i / 2] = (hi << 4) | lo\n  }\n  return out\n}\n","import { fromBcd, toBcd } from './bcd'\nimport { ERR, RE } from './constants'\nimport {\n  Kind,\n  LLLVARFormat,\n  LLVARFormat,\n  VarBase,\n  VARFormatRequired,\n  VarLenCountMode,\n  VarLenHeaderEncoding,\n  VarPayloadEncoding,\n} from './formats'\n\ntype MaxDigits = 2 | 3\ntype HeaderLenInfo = { len: number; read: number }\n\nexport const applyVarDefaults = (de: number, f: LLVARFormat | LLLVARFormat): VARFormatRequired => {\n  const kind = f.kind\n  const isNumericVar = [Kind.LLVARn, Kind.LLLVARn].includes(kind)\n  const isBinaryVar = [Kind.LLVARb, Kind.LLLVARb].includes(kind)\n\n  if (f.lenCountMode === VarLenCountMode.DIGITS && !isNumericVar) throw new Error(ERR.INVALID_VAR_DIGITS_FOR_NON_N(de))\n\n  const payload =\n    f.payload ??\n    (isNumericVar ? VarPayloadEncoding.BCD_DIGITS : isBinaryVar ? VarPayloadEncoding.BINARY : VarPayloadEncoding.ASCII)\n  const lenHeader = f.lenHeader ?? VarLenHeaderEncoding.BCD\n  const lenCountMode = f.lenCountMode ?? (isNumericVar ? VarLenCountMode.DIGITS : VarLenCountMode.BYTES)\n\n  return {\n    ...f,\n    payload,\n    lenHeader,\n    lenCountMode,\n  }\n}\n\nexport const buildPayload = (enc: VarPayloadEncoding, value: Buffer | string) => {\n  if (enc === VarPayloadEncoding.ASCII) {\n    const s = String(value)\n    const payload = Buffer.from(s, 'ascii')\n    return { payload, byteLen: payload.length, digitLen: 0 }\n  }\n  if (enc === VarPayloadEncoding.BINARY) {\n    let payload: Buffer\n    if (Buffer.isBuffer(value)) {\n      payload = value\n    } else {\n      const hex = String(value)\n      if (!RE.HEX.test(hex) || hex.length % 2 !== 0) throw new Error(ERR.VAR_HEX_INVALID)\n      payload = Buffer.from(hex, 'hex')\n    }\n    return { payload, byteLen: payload.length, digitLen: 0 }\n  }\n  const digits = String(value)\n  const payload = toBcd(digits)\n  return { payload, byteLen: payload.length, digitLen: digits.length }\n}\n\nexport const writeLenHeader = (len: number, digits: MaxDigits, enc: VarLenHeaderEncoding): Buffer => {\n  const s = String(len).padStart(digits, '0')\n  return enc === VarLenHeaderEncoding.ASCII ? Buffer.from(s, 'ascii') : toBcd(s)\n}\n\nexport const readLenHeader = (\n  buf: Buffer,\n  offset: number,\n  digits: MaxDigits,\n  enc: VarLenHeaderEncoding,\n): HeaderLenInfo => {\n  if (enc === VarLenHeaderEncoding.ASCII) {\n    const slice = buf.subarray(offset, offset + digits)\n    if (slice.length < digits) throw new Error(ERR.LEN_HDR_UNDERRUN)\n    const n = Number(slice.toString('ascii'))\n    if (Number.isNaN(n)) throw new Error(ERR.INVALID_ASCII_LEN)\n    return { len: n, read: digits }\n  }\n  const bytes = Math.ceil(digits / 2)\n  const slice = buf.subarray(offset, offset + bytes)\n  if (slice.length < bytes) throw new Error(ERR.LEN_HDR_UNDERRUN)\n  const s = fromBcd(slice, digits)\n  return { len: Number(s), read: bytes }\n}\n\nexport const validateLLVar = (kind: LLVARFormat['kind'], base: VarBase): LLVARFormat => {\n  if (base.length <= 0) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE(kind, '>', 0))\n  if (base.length > 99) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE(kind, '<=', 99))\n  return { kind, ...base }\n}\n\nexport const validateLLLVar = (kind: LLLVARFormat['kind'], base: VarBase): LLLVARFormat => {\n  if (base.length <= 0) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE(kind, '>', 0))\n  if (base.length > 999) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE(kind, '<=', 999))\n  return { kind, ...base }\n}\n","import { ERR } from './constants'\nimport { validateLLLVar, validateLLVar } from './varlen'\n\n/** Numeric packing: BCD = 2 digits/byte, ASCII = 1 char/byte. */\nexport enum NumericEncoding {\n  ASCII = 'ascii',\n  BCD = 'bcd',\n}\n\n/** Bitmap wire encoding: raw bytes (default) or ASCII hex (16 chars per 8-byte segment). */\nexport enum BitmapEncoding {\n  Binary = 'binary',\n  HexAscii = 'hex-ascii',\n}\n/** Encoding of the LL/LLL length prefix. BCD LL=1 byte/LLL=2 bytes; ASCII LL=2 bytes/LLL=3 bytes. */\nexport enum VarLenHeaderEncoding {\n  ASCII = 'ascii',\n  BCD = 'bcd',\n}\n/** Encoding of a variable field's value bytes. */\nexport enum VarPayloadEncoding {\n  ASCII = 'ascii',\n  BINARY = 'binary',\n  BCD_DIGITS = 'bcd-digits',\n}\n/** Whether a length header counts digits or bytes. `DIGITS` is valid only on numeric (`*n`) fields. */\nexport enum VarLenCountMode {\n  BYTES = 'bytes',\n  DIGITS = 'digits',\n}\n\n/** Internal field-type tag carried on every format object. Use the helpers below, not this directly. */\nexport enum Kind {\n  Alpha = 'a',\n  AlphaNumeric = 'an',\n  AlphaNumericSpecial = 'ans',\n  Binary = 'b',\n  Bitmap = 'bitmap',\n  LLVAR = 'LLVAR',\n  LLVARn = 'LLVARn',\n  LLVARan = 'LLVARan',\n  LLVARans = 'LLVARans',\n  LLVARb = 'LLVARb',\n  LLLVAR = 'LLLVAR',\n  LLLVARn = 'LLLVARn',\n  LLLVARan = 'LLLVARan',\n  LLLVARans = 'LLLVARans',\n  LLLVARb = 'LLLVARb',\n  Numeric = 'n',\n}\n\nexport type HeaderSpec = {\n  encode: (messageBytes: Buffer) => Buffer\n  decode: (buf: Buffer) => { headerLength: number }\n}\n\nexport type AFormat = { kind: Kind.Alpha; length: number }\nexport type ANFormat = { kind: Kind.AlphaNumeric; length: number }\nexport type ANSFormat = { kind: Kind.AlphaNumericSpecial; length: number }\nexport type BFormat = { kind: Kind.Binary; length: number }\nexport type NFormat = { kind: Kind.Numeric; length: number; encoding?: NumericEncoding }\nexport type BitmapFormat = { kind: Kind.Bitmap; length: 8 | 16; encoding?: BitmapEncoding }\n\nexport type FormatObject =\n  | NFormat\n  | AFormat\n  | ANFormat\n  | ANSFormat\n  | BFormat\n  | BitmapFormat\n  | LLVARFormat\n  | LLLVARFormat\n\n/** Options shared by every LL/LLL helper. */\nexport type VarBase = {\n  /** Max logical length: digits for numeric (`*n`) fields, bytes otherwise. */\n  length: number\n  /** Value encoding. Defaults: `BCD_DIGITS` for `*n`, `BINARY` for `*b`, otherwise `ASCII`. */\n  payload?: VarPayloadEncoding\n  /** Length-prefix encoding. Default: `BCD`. */\n  lenHeader?: VarLenHeaderEncoding\n  /** Whether the length counts digits or bytes. Defaults: `DIGITS` for `*n`, otherwise `BYTES`. */\n  lenCountMode?: VarLenCountMode\n}\n\nexport type LLVARFormat = { kind: Kind.LLVAR | Kind.LLVARn | Kind.LLVARan | Kind.LLVARans | Kind.LLVARb } & VarBase\n\nexport type LLLVARFormat = { kind: Kind.LLLVAR | Kind.LLLVARn | Kind.LLLVARan | Kind.LLLVARans | Kind.LLLVARb } & VarBase\n\nexport type VARFormatRequired = (LLVARFormat | LLLVARFormat) &\n  Required<Pick<VarBase, 'payload' | 'lenHeader' | 'lenCountMode'>>\n\n// Implementation inspired by @micham/iso8583 -> using below helper methods that enforce types and required/optional params\n\n/** Fixed-length numeric field (n). BCD-encoded by default; pass `{ encoding: NumericEncoding.ASCII }` for ASCII. */\nexport const N = (length: number, opts?: { encoding?: NumericEncoding }): NFormat => {\n  if (length <= 0) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE('N', '>', 0))\n  return { kind: Kind.Numeric, length, encoding: opts?.encoding }\n}\n\n/** Fixed-length alphabetic field (a), space-padded. */\nexport const A = (length: number): AFormat => {\n  if (length <= 0) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE('A', '>', 0))\n  return { kind: Kind.Alpha, length }\n}\n\n/** Fixed-length alphanumeric field (an), space-padded. */\nexport const AN = (length: number): ANFormat => {\n  if (length <= 0) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE('AN', '>', 0))\n  return { kind: Kind.AlphaNumeric, length }\n}\n\n/** Fixed-length alphanumeric + printable-special field (ans), space-padded. */\nexport const ANS = (length: number): ANSFormat => {\n  if (length <= 0) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE('ANS', '>', 0))\n  return { kind: Kind.AlphaNumericSpecial, length }\n}\n\n/** Fixed-length binary field (b) of `lengthBytes`. Pack with a `Buffer` or hex string. */\nexport const B = (lengthBytes: number): BFormat => {\n  if (lengthBytes <= 0) throw new Error(ERR.KIND_HELPER_LEN_MUST_BE('B', '>', 0))\n  return { kind: Kind.Binary, length: lengthBytes }\n}\n\n/** Bitmap field for DE 1. `8` ⇒ 64-bit (DE 1–64), `16` ⇒ 128-bit (allows DE 65–128). Pass `{ encoding: BitmapEncoding.HexAscii }` for ASCII hex wire format. */\nexport const bitmap = (lengthBytes: 8 | 16, opts?: { encoding?: BitmapEncoding }): BitmapFormat => {\n  if (lengthBytes !== 8 && lengthBytes !== 16) throw new Error(ERR.BITMAP_HELPER_SIZE)\n  const format: BitmapFormat = { kind: Kind.Bitmap, length: lengthBytes }\n  if (opts?.encoding) format.encoding = opts.encoding\n  return format\n}\n\n/** Variable field with a 2-digit length header (max length 99); choose `payload` explicitly. */\nexport const LLVAR = (opts: VarBase): LLVARFormat => validateLLVar(Kind.LLVAR, opts)\n\n/**\n * Numeric variable field, 2-digit length header (max length 99).\n * Defaults to BCD payload counted in digits.\n * @example\n * // PAN: BCD digits, BCD length header counting digits, up to 19 digits\n * LLVARn({ length: 19, lenHeader: VarLenHeaderEncoding.BCD,\n *   payload: VarPayloadEncoding.BCD_DIGITS, lenCountMode: VarLenCountMode.DIGITS })\n */\nexport const LLVARn = (opts: VarBase): LLVARFormat => validateLLVar(Kind.LLVARn, opts)\n\n/** Alphanumeric variable field, 2-digit length header (max length 99). */\nexport const LLVARan = (opts: VarBase): LLVARFormat => validateLLVar(Kind.LLVARan, opts)\n\n/** Alphanumeric + special variable field, 2-digit length header (max length 99). */\nexport const LLVARans = (opts: VarBase): LLVARFormat => validateLLVar(Kind.LLVARans, opts)\n\n/** Binary variable field, 2-digit length header (max length 99). Defaults to `BINARY` payload counted in bytes. Pack with a `Buffer` or even-length hex string. */\nexport const LLVARb = (opts: VarBase): LLVARFormat => validateLLVar(Kind.LLVARb, opts)\n\n/** Variable field with a 3-digit length header (max length 999); choose `payload` explicitly. */\nexport const LLLVAR = (opts: VarBase): LLLVARFormat => validateLLLVar(Kind.LLLVAR, opts)\n\n/** Numeric variable field, 3-digit length header (max length 999). Defaults to BCD payload counted in digits. */\nexport const LLLVARn = (opts: VarBase): LLLVARFormat => validateLLLVar(Kind.LLLVARn, opts)\n\n/** Alphanumeric variable field, 3-digit length header (max length 999). */\nexport const LLLVARan = (opts: VarBase): LLLVARFormat => validateLLLVar(Kind.LLLVARan, opts)\n\n/** Alphanumeric + special variable field, 3-digit length header (max length 999). */\nexport const LLLVARans = (opts: VarBase): LLLVARFormat => validateLLLVar(Kind.LLLVARans, opts)\n\n/** Binary variable field, 3-digit length header (max length 999). Defaults to `BINARY` payload counted in bytes. Pack with a `Buffer` or even-length hex string. */\nexport const LLLVARb = (opts: VarBase): LLLVARFormat => validateLLLVar(Kind.LLLVARb, opts)\n","import { BitmapConstraint, ERR } from '../internals/constants'\nimport { BitmapEncoding } from '../internals/formats'\n\nexport const buildBitmap = (present: number[], constraint: BitmapConstraint, encoding?: BitmapEncoding): Buffer => {\n  const needsSecondary = present.some(n => n > 64)\n  if (constraint === 64 && needsSecondary) throw new Error(ERR.BITMAP_64_CONSTRAINT)\n\n  const size = needsSecondary ? 16 : 8\n  const bitmap = Buffer.alloc(size)\n\n  for (const de of present) {\n    if (de < 2 || de > 128) throw new Error(ERR.DE_RANGE)\n    const bitIndex = de - 1\n    const byteIndex = Math.floor(bitIndex / 8)\n    const bitMask = 1 << (7 - (bitIndex % 8))\n    bitmap[byteIndex] |= bitMask\n  }\n  if (needsSecondary) bitmap[0] |= 0x80\n\n  if (encoding === BitmapEncoding.HexAscii) {\n    return Buffer.from(bitmap.toString('hex').toUpperCase(), 'ascii')\n  }\n  return bitmap\n}\n\nexport const parseBitmap = (bitmap: Buffer, constraint: BitmapConstraint, encoding?: BitmapEncoding): number[] => {\n  let bm = bitmap\n  if (encoding === BitmapEncoding.HexAscii) {\n    if (bm.length !== 16 && bm.length !== 32) throw new Error(ERR.BITMAP_HEX_SIZE)\n    const hex = bm.toString('ascii')\n    if (!/^[0-9A-Fa-f]+$/.test(hex)) throw new Error(ERR.BITMAP_HEX_INVALID)\n    bm = Buffer.from(hex, 'hex')\n  }\n\n  if (bm.length !== 8 && bm.length !== 16) throw new Error(ERR.BITMAP_SIZE)\n  if (constraint === 64 && bm.length === 16) throw new Error(ERR.SEC_BITMAP_CONSTRAINED)\n\n  const present: number[] = []\n  for (let i = 0; i < bm.length * 8; i++) {\n    const byte = bm[Math.floor(i / 8)]\n    if ((byte & (1 << (7 - (i % 8)))) !== 0) present.push(i + 1)\n  }\n  return present.filter(n => n !== 1)\n}\n","import { ERR } from '@internals/constants'\n\nexport const readAscii = (buf: Buffer, offset: number, len: number): string => {\n  const slice = buf.subarray(offset, offset + len)\n  if (slice.length < len) throw new Error(ERR.ASCII_UNDERRUN)\n  return slice.toString('ascii')\n}\n","import { readAscii } from '@internals/ascii'\nimport { fromBcd, toBcd } from '@internals/bcd'\nimport { ERR, RE } from '@internals/constants'\nimport { NumericEncoding } from '@internals/formats'\n\ntype DecodedMti = { mti: string; read: number }\n\nexport const encodeMTI = (mti: string, enc: NumericEncoding): Buffer =>\n  enc === NumericEncoding.ASCII ? Buffer.from(mti, 'ascii') : toBcd(mti)\n\nexport const decodeMTI = (buf: Buffer, offset: number, enc: NumericEncoding): DecodedMti => {\n  const mti = enc === NumericEncoding.ASCII ? readAscii(buf, offset, 4) : fromBcd(buf.subarray(offset, offset + 2), 4)\n  return { mti, read: enc === NumericEncoding.ASCII ? 4 : 2 }\n}\n\nexport const assertMTI = (mti: string): void => {\n  if (!RE.MTI.test(mti)) throw new Error(ERR.INVALID_MTI(mti))\n}\n","import { ERR, RE } from './constants'\nimport { Kind } from './formats'\n\nexport const validateAlpha = (fmt: Kind.Alpha | Kind.AlphaNumeric | Kind.AlphaNumericSpecial, s: string): void => {\n  const valid =\n    (fmt === 'a' && RE.ALPHA.test(s)) || (fmt === 'an' && RE.ALNUM.test(s)) || (fmt === 'ans' && RE.PRINT.test(s))\n  if (!valid) throw new Error(ERR.INVALID_ALPHA(fmt))\n}\n","import { validateAlpha } from '@internals/alpha'\nimport { ERR } from '@internals/constants'\nimport { AFormat, ANFormat, ANSFormat } from '@internals/formats'\n\ntype AlphaFormat = AFormat | ANFormat | ANSFormat\ntype DecodeAlpha = { value: string; read: number }\n\nexport const encodeAlpha = (de: number, f: AlphaFormat, value: string): Buffer => {\n  if (value.length > f.length) throw new Error(ERR.FIELD_EXCEEDS(de, f.kind, f.length))\n  validateAlpha(f.kind, value)\n  return Buffer.from(value.padEnd(f.length, ' '), 'ascii')\n}\n\nexport const decodeAlpha = (f: AlphaFormat, buf: Buffer, offset: number): DecodeAlpha => {\n  const slice = buf.subarray(offset, offset + f.length)\n  const s = slice.toString('ascii').trimEnd()\n  validateAlpha(f.kind, s)\n  return { value: s, read: f.length }\n}\n","import { ERR, RE } from '@internals/constants'\nimport { BFormat } from '@internals/formats'\n\ntype DecodeBinary = { value: Buffer; read: number }\n\nexport const encodeBinary = (de: number, f: BFormat, value: Buffer | string): Buffer => {\n  const expected = f.length\n  let payload: Buffer | string\n  if (Buffer.isBuffer(value)) {\n    payload = value\n  } else {\n    if (!RE.HEX.test(value)) throw new Error(ERR.FIELD_HEX_INVALID(de))\n    payload = Buffer.from(value, 'hex')\n  }\n\n  if (payload.length !== expected) throw new Error(ERR.FIELD_BYTES(de, expected))\n  return payload\n}\n\nexport const decodeBinary = (de: number, f: BFormat, buf: Buffer, offset: number): DecodeBinary => {\n  const slice = buf.subarray(offset, offset + f.length)\n  if (slice.length < f.length) throw new Error(ERR.FIELD_UNDERRUN(de))\n  return { value: Buffer.from(slice), read: f.length }\n}\n","import { fromBcd, toBcd } from '@internals/bcd'\nimport { ERR } from '@internals/constants'\nimport { digitsOnly } from '@internals/digits'\nimport { NFormat, NumericEncoding } from '@internals/formats'\n\ntype NumericReturn = { value: string; read: number }\n\nexport const encodeNumeric = (f: NFormat, value: string | number): Buffer => {\n  const enc = f.encoding ?? NumericEncoding.BCD\n  const digits = digitsOnly(String(value))\n  if (digits.length > f.length) throw new Error(ERR.NUMERIC_EXCEEDS(digits.length, f.length))\n  let s = digits.padStart(f.length, '0')\n  if (enc === NumericEncoding.ASCII) return Buffer.from(s, 'ascii')\n  if (s.length % 2 !== 0) s = '0' + s\n  return toBcd(s)\n}\n\nexport const decodeNumeric = (f: NFormat, buf: Buffer, offset: number): NumericReturn => {\n  const enc = f.encoding ?? NumericEncoding.BCD\n  if (enc === NumericEncoding.ASCII) {\n    const s = buf.subarray(offset, offset + f.length).toString('ascii')\n    return { value: s, read: f.length }\n  }\n  const bytes = Math.ceil(f.length / 2)\n  const s = fromBcd(buf.subarray(offset, offset + bytes), f.length)\n  return { value: s, read: bytes }\n}\n","import { fromBcd } from '@internals/bcd'\nimport { ERR } from '@internals/constants'\nimport { LLLVARFormat, LLVARFormat, VarLenCountMode, VarPayloadEncoding } from '@internals/formats'\nimport { applyVarDefaults, buildPayload, readLenHeader, writeLenHeader } from '@internals/varlen'\n\ntype DecodeVar = { value: Buffer | string; read: number }\n\nexport const encodeVar = (de: number, f: LLVARFormat | LLLVARFormat, value: Buffer | string): Buffer => {\n  const {\n    payload: payloadEnc,\n    lenHeader: headerEnc,\n    lenCountMode: countMode,\n    length: maxAllowed,\n  } = applyVarDefaults(de, f)\n\n  const { payload, byteLen, digitLen } = buildPayload(payloadEnc, value)\n\n  const logicalLen = payloadEnc === VarPayloadEncoding.BCD_DIGITS ? digitLen : byteLen\n  if (logicalLen > maxAllowed) throw new Error(ERR.FIELD_TOO_LONG(de, logicalLen, maxAllowed))\n\n  const headerDigits = f.kind.startsWith('LLL') ? 3 : 2\n  const headerValue = countMode === VarLenCountMode.DIGITS ? digitLen : byteLen\n  const header = writeLenHeader(headerValue, headerDigits, headerEnc)\n\n  return Buffer.concat([header, payload])\n}\n\nexport const decodeVar = (de: number, f: LLVARFormat | LLLVARFormat, buf: Buffer, offset: number): DecodeVar => {\n  const headerDigits = f.kind.startsWith('LLL') ? 3 : 2\n  const { payload: payloadEnc, lenHeader: headerEnc, lenCountMode } = applyVarDefaults(de, f)\n\n  const { len: hdrLenVal, read: hdrBytes } = readLenHeader(buf, offset, headerDigits, headerEnc)\n\n  let byteLen: number\n  if (lenCountMode === VarLenCountMode.BYTES) {\n    byteLen = hdrLenVal\n  } else {\n    byteLen = Math.ceil(hdrLenVal / 2)\n  }\n\n  const start = offset + hdrBytes\n  const end = start + byteLen\n  const slice = buf.subarray(start, end)\n  if (slice.length < byteLen) throw new Error(ERR.FIELD_UNDERRUN(de))\n\n  if (payloadEnc === VarPayloadEncoding.BCD_DIGITS) {\n    const digitsStr = fromBcd(slice, lenCountMode === VarLenCountMode.DIGITS ? hdrLenVal : byteLen * 2)\n    return { value: digitsStr, read: hdrBytes + byteLen }\n  }\n\n  return {\n    value: payloadEnc === VarPayloadEncoding.ASCII ? slice.toString('ascii') : Buffer.from(slice),\n    read: hdrBytes + byteLen,\n  }\n}\n","import { buildBitmap, parseBitmap } from '@bits/bitmap'\nimport { assertMTI, decodeMTI, encodeMTI } from '@bits/mti'\nimport { decodeAlpha, encodeAlpha } from '@encodings/alpha'\nimport { decodeBinary, encodeBinary } from '@encodings/binary'\nimport { decodeNumeric, encodeNumeric } from '@encodings/numeric'\nimport { decodeVar, encodeVar } from '@encodings/varlen'\nimport { BitmapConstraint, ERR } from '@internals/constants'\nimport { BitmapEncoding, FormatObject, HeaderSpec, Kind, NumericEncoding } from '@internals/formats'\n\nexport type EncoderOptions = {\n  /** Optional message header wrapped on pack and skipped on unpack (e.g. an acquirer prefix). */\n  header?: HeaderSpec\n}\n\n/** How `explain()` redacts a field: `'pan'` keeps first 6 / last 4 digits, `'redact'` hides it entirely. */\nexport type MaskMode = 'pan' | 'redact'\n\n/** Spec for a single data element. `mask` opts the field into redaction in `explain()`. */\nexport type FieldSpec = { name: string; format: FormatObject; mask?: MaskMode }\n\n/** Message spec keyed by DE number. DE 0 sets MTI encoding, DE 1 sets bitmap size; both optional. */\nexport type MessageSpec = Record<number, FieldSpec>\n\nexport type PackedMessage = { mti: string; bytes: Buffer }\nexport type UnpackedMessage = { mti: string; fields: Record<number, Buffer | string | number>; bytesRead: number }\n\nconst maskPan = (pan: string): string =>\n  pan.length > 10 ? `${pan.slice(0, 6)}${'*'.repeat(pan.length - 10)}${pan.slice(-4)}` : '*'.repeat(pan.length)\n\nconst maskValue = (mask: MaskMode | undefined, value: Buffer | string | number): Buffer | string | number => {\n  if (mask === 'pan') return maskPan(Buffer.isBuffer(value) ? value.toString('hex') : String(value))\n  if (mask === 'redact') return '[redacted]'\n  return value\n}\n\n/**\n * Encodes and decodes ISO 8583 messages against a {@link MessageSpec}.\n * @example\n * const iso = new Iso8583(spec)\n * const { bytes } = iso.pack('0200', { 3: '000000', 4: '000000001000' })\n * const { mti, fields } = iso.unpack(bytes) // mti === '0200'\n */\nexport class Iso8583 {\n  private spec: MessageSpec\n  private mtiEncoding: NumericEncoding = NumericEncoding.BCD\n  private bitmapConstraint: BitmapConstraint = 64\n  private bitmapEncoding = BitmapEncoding.Binary\n  private header?: HeaderSpec\n\n  constructor(spec: MessageSpec, opts?: EncoderOptions) {\n    this.spec = spec\n    this.header = opts?.header\n    const mtiField = this.spec[0]\n    if (mtiField) {\n      if (mtiField.format.kind !== Kind.Numeric) throw new Error(ERR.INVALID_MTI_SPEC(0))\n      this.mtiEncoding = mtiField.format.encoding || NumericEncoding.BCD\n    }\n\n    const bmField = this.spec[1]\n    if (bmField) {\n      if (bmField.format.kind !== Kind.Bitmap) throw new Error(ERR.INVALID_BITMAP_SPEC(1))\n      this.bitmapConstraint = bmField.format.length === 8 ? 64 : 128\n      this.bitmapEncoding = bmField.format.encoding ?? BitmapEncoding.Binary\n    }\n  }\n\n  /**\n   * Encodes an MTI and a `{ [DE]: value }` map into the message bytes. Only DE 2–128 are\n   * emitted; the bitmap (and a secondary bitmap when any DE > 64) is computed automatically.\n   * Throws if a field has no spec or a value violates its format.\n   */\n  pack(mti: string, fields: Record<number, Buffer | string | number>): PackedMessage {\n    assertMTI(mti)\n    const present = Object.keys(fields)\n      .map(Number)\n      .filter(n => n >= 2 && n <= 128)\n      .sort((a, b) => a - b)\n    for (const de of present) if (!this.spec[de]) throw new Error(ERR.NO_SPEC(de))\n\n    const chunks: Buffer[] = []\n    chunks.push(encodeMTI(mti, this.mtiEncoding))\n    chunks.push(buildBitmap(present, this.bitmapConstraint, this.bitmapEncoding))\n\n    for (const de of present) {\n      chunks.push(this.encodeField(de, this.spec[de], fields[de]))\n    }\n\n    const iso = Buffer.concat(chunks)\n    const bytes = this.header ? this.header.encode(iso) : iso\n\n    return { mti, bytes }\n  }\n\n  /**\n   * Decodes message bytes into `{ mti, fields, bytesRead }`. Field values are returned as\n   * `string` (numeric/alpha) or `Buffer` (binary). Throws on underruns or unknown DEs.\n   */\n  unpack(buf: Buffer): UnpackedMessage {\n    const headerLen = this.header ? this.header.decode(buf).headerLength : 0\n    const messageBuffer = headerLen > 0 ? buf.subarray(headerLen) : buf\n    let offset = 0\n    const { mti, read } = decodeMTI(messageBuffer, offset, this.mtiEncoding)\n    offset += read\n    assertMTI(mti)\n\n    const segmentSize = this.bitmapEncoding === BitmapEncoding.HexAscii ? 16 : 8\n    if (messageBuffer.length - offset < segmentSize) throw new Error(ERR.PRIMARY_UNDERRUN)\n    const primary = messageBuffer.subarray(offset, offset + segmentSize)\n    offset += segmentSize\n\n    const firstByte =\n      this.bitmapEncoding === BitmapEncoding.HexAscii\n        ? parseInt(primary.subarray(0, 2).toString('ascii'), 16)\n        : primary[0]\n    const hasSecondary = (firstByte & 0x80) !== 0\n    let bitmap = primary\n    if (hasSecondary) {\n      if (this.bitmapConstraint === 64) throw new Error(ERR.SEC_BITMAP_CONSTRAINED)\n      if (messageBuffer.length - offset < segmentSize) throw new Error(ERR.SEC_UNDERRUN)\n      bitmap = Buffer.concat([primary, messageBuffer.subarray(offset, offset + segmentSize)])\n      offset += segmentSize\n    }\n\n    const present = parseBitmap(bitmap, this.bitmapConstraint, this.bitmapEncoding)\n    const fields: Record<number, Buffer | string | number> = {}\n    for (const de of present) {\n      const spec = this.spec[de]\n      if (!spec) throw new Error(ERR.NO_SPEC(de))\n      const { value, read } = this.decodeField(de, spec, messageBuffer, offset)\n      fields[de] = value\n      offset += read\n    }\n\n    return { mti, fields, bytesRead: offset }\n  }\n\n  /**\n   * Renders a readable, line-per-field dump. Fields whose spec sets `mask` are redacted by\n   * default; pass `{ unmask: true }` for raw values (local debugging only — never log it).\n   * @example\n   * iso.explain(bytes)\n   * // MTI: 0200\n   * // 002 PAN (LLVARn, len=19): 476173******0119\n   */\n  explain(buf: Buffer, opts?: { unmask?: boolean }): string {\n    const decoded = this.unpack(buf)\n    const lines = [`MTI: ${decoded.mti}`]\n    for (const [idStr, value] of Object.entries(decoded.fields)) {\n      const id = Number(idStr)\n      const spec = this.spec[id]\n      const { kind, length } = spec.format\n      const shown = opts?.unmask ? value : maskValue(spec.mask, value)\n      const display = Buffer.isBuffer(shown) ? shown.toString('hex') : shown\n      lines.push(`${id.toString().padStart(3, '0')} ${spec.name} (${kind}, len=${length}): ${display}`)\n    }\n    return lines.join('\\n')\n  }\n\n  encodeField(de: number, spec: FieldSpec, value: Buffer | string | number): Buffer {\n    const f = spec.format\n    switch (f.kind) {\n      case Kind.Numeric:\n        return encodeNumeric(f, value as string | number)\n      case Kind.Alpha:\n      case Kind.AlphaNumeric:\n      case Kind.AlphaNumericSpecial:\n        return encodeAlpha(de, f, value as string)\n      case Kind.Binary:\n        return encodeBinary(de, f, value as Buffer | string)\n      case Kind.LLVAR:\n      case Kind.LLVARn:\n      case Kind.LLVARan:\n      case Kind.LLVARans:\n      case Kind.LLVARb:\n      case Kind.LLLVAR:\n      case Kind.LLLVARn:\n      case Kind.LLLVARan:\n      case Kind.LLLVARans:\n      case Kind.LLLVARb:\n        return encodeVar(de, f, value as Buffer | string)\n      default:\n        throw new Error(ERR.UNSUPPORTED(f.kind))\n    }\n  }\n\n  decodeField(de: number, spec: FieldSpec, buf: Buffer, offset: number) {\n    const f = spec.format\n    switch (f.kind) {\n      case Kind.Numeric:\n        return decodeNumeric(f, buf, offset)\n      case Kind.Alpha:\n      case Kind.AlphaNumeric:\n      case Kind.AlphaNumericSpecial:\n        return decodeAlpha(f, buf, offset)\n      case Kind.Binary:\n        return decodeBinary(de, f, buf, offset)\n      case Kind.LLVAR:\n      case Kind.LLVARn:\n      case Kind.LLVARan:\n      case Kind.LLVARans:\n      case Kind.LLVARb:\n      case Kind.LLLVAR:\n      case Kind.LLLVARn:\n      case Kind.LLLVARan:\n      case Kind.LLLVARans:\n      case Kind.LLLVARb:\n        return decodeVar(de, f, buf, offset)\n      default:\n        throw new Error(ERR.UNSUPPORTED(f.kind))\n    }\n  }\n}\n"]}