facturas 0.20.3 → 0.20.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3NOKGXXX.mjs → chunk-6U4NRHFP.mjs} +6 -4
- package/dist/{chunk-3NOKGXXX.mjs.map → chunk-6U4NRHFP.mjs.map} +1 -1
- package/dist/{chunk-XTKZ5FDN.mjs → chunk-B2M64SIK.mjs} +2 -15
- package/dist/chunk-B2M64SIK.mjs.map +1 -0
- package/dist/{chunk-5CUMVSJY.mjs → chunk-CYXS3F34.mjs} +4 -4
- package/dist/chunk-KDLY2XJO.mjs +19 -0
- package/dist/chunk-KDLY2XJO.mjs.map +1 -0
- package/dist/{chunk-JP3LVU7K.mjs → chunk-UOIZQMA6.mjs} +15 -7
- package/dist/chunk-UOIZQMA6.mjs.map +1 -0
- package/dist/{chunk-VF3XJXBG.mjs → chunk-WG6TAMBB.mjs} +6 -4
- package/dist/{chunk-VF3XJXBG.mjs.map → chunk-WG6TAMBB.mjs.map} +1 -1
- package/dist/cli.mjs +35 -28
- package/dist/cli.mjs.map +1 -1
- package/dist/index.mjs +6 -5
- package/dist/index.mjs.map +1 -1
- package/dist/padron.mjs +2 -1
- package/dist/wsfe.mjs +3 -2
- package/dist/wsmtxca.mjs +3 -2
- package/package.json +1 -1
- package/dist/chunk-JP3LVU7K.mjs.map +0 -1
- package/dist/chunk-XTKZ5FDN.mjs.map +0 -1
- /package/dist/{chunk-5CUMVSJY.mjs.map → chunk-CYXS3F34.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
storeCall,
|
|
16
16
|
voucherDateWindow,
|
|
17
17
|
withLease
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-CYXS3F34.mjs";
|
|
19
19
|
import {
|
|
20
20
|
ARCA_FINAL_CONSUMER_IDENTIFICATION_THRESHOLD_MINOR_UNITS,
|
|
21
21
|
ARCA_INVOICE_CLASS_BY_ISSUER,
|
|
@@ -25,14 +25,15 @@ import {
|
|
|
25
25
|
} from "./chunk-C2KX652X.mjs";
|
|
26
26
|
import {
|
|
27
27
|
createPadronService
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-UOIZQMA6.mjs";
|
|
29
29
|
import {
|
|
30
30
|
createWsfeService
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-6U4NRHFP.mjs";
|
|
32
32
|
import {
|
|
33
33
|
createWsmtxcaService
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import "./chunk-
|
|
34
|
+
} from "./chunk-WG6TAMBB.mjs";
|
|
35
|
+
import "./chunk-KDLY2XJO.mjs";
|
|
36
|
+
import "./chunk-B2M64SIK.mjs";
|
|
36
37
|
import {
|
|
37
38
|
ArcaAuthenticationError,
|
|
38
39
|
ArcaConfigurationError,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store/memory.ts","../src/store/postgres.ts","../src/store/redis.ts"],"sourcesContent":["import type { ArcaStore } from \"./types\";\n\n/** In-process store for tests; reservations do not survive a restart. */\nexport function createMemoryStore(): ArcaStore {\n const values = new Map<string, string>();\n const locks = new Map<string, Promise<void>>();\n return {\n get: (key) => Promise.resolve(values.get(key) ?? null),\n set(key, value) {\n values.set(key, value);\n return Promise.resolve();\n },\n add(key, value) {\n if (values.has(key)) {\n return Promise.resolve(false);\n }\n values.set(key, value);\n return Promise.resolve(true);\n },\n delete(key) {\n values.delete(key);\n return Promise.resolve();\n },\n async withLock(key, fn) {\n const previous = locks.get(key) ?? Promise.resolve();\n let release: () => void = () => undefined;\n const current = new Promise<void>((resolve) => {\n release = resolve;\n });\n const queued = previous.catch(() => undefined).then(() => current);\n locks.set(key, queued);\n await previous.catch(() => undefined);\n try {\n return await fn();\n } finally {\n release();\n if (locks.get(key) === queued) {\n locks.delete(key);\n }\n }\n },\n };\n}\n","import { ArcaConfigurationError } from \"../errors\";\nimport { ARCA_LEASE_MS, withLease } from \"./lock\";\nimport { type ArcaStore, storeCall } from \"./types\";\n\ntype Row = { key?: string; value?: string };\n/** Uses the caller's SQL client; provision the table before use. */\nexport function createPostgresStore({\n query,\n table = \"arca_store\",\n}: {\n query: (text: string, params: string[]) => Promise<Row[] | { rows: Row[] }>;\n table?: string;\n}): ArcaStore {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {\n throw new ArcaConfigurationError(\"Invalid ARCA store table identifier.\");\n }\n const name = `\"${table}\"`;\n const lease = Math.round(ARCA_LEASE_MS / 1000);\n const run = (text: string, params: string[]) =>\n storeCall(async () => {\n const result = await query(text, params);\n return Array.isArray(result) ? result : result.rows;\n });\n return {\n async get(key) {\n return (\n (await run(`SELECT value FROM ${name} WHERE key = $1`, [key]))[0]\n ?.value ?? null\n );\n },\n async set(key, value) {\n await run(\n `INSERT INTO ${name} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = now()`,\n [key, value]\n );\n },\n async add(key, value) {\n return (\n (\n await run(\n `INSERT INTO ${name} (key, value) VALUES ($1, $2) ON CONFLICT DO NOTHING RETURNING key`,\n [key, value]\n )\n ).length > 0\n );\n },\n async delete(key) {\n await run(`DELETE FROM ${name} WHERE key = $1`, [key]);\n },\n withLock(key, fn) {\n // A lease row, not an advisory lock: it survives a transaction-mode\n // pooler, where a session-scoped lock would be taken on another backend.\n return withLease(\n key,\n {\n async acquire(owner) {\n const taken = await run(\n `INSERT INTO ${name} (key, value) VALUES ($1, $2) ON CONFLICT DO NOTHING RETURNING key`,\n [key, owner]\n );\n if (taken.length > 0) {\n return true;\n }\n const expired = await run(\n `UPDATE ${name} SET value = $2, updated_at = now() WHERE key = $1 AND updated_at < now() - interval '${lease} seconds' RETURNING key`,\n [key, owner]\n );\n return expired.length > 0;\n },\n async renew(owner) {\n await run(\n `UPDATE ${name} SET updated_at = now() WHERE key = $1 AND value = $2`,\n [key, owner]\n );\n },\n async release(owner) {\n await run(`DELETE FROM ${name} WHERE key = $1 AND value = $2`, [\n key,\n owner,\n ]);\n },\n },\n fn\n );\n },\n };\n}\n","import { ArcaConfigurationError } from \"../errors\";\nimport { ARCA_LEASE_MS, withLease } from \"./lock\";\nimport { type ArcaStore, storeCall } from \"./types\";\n\ntype RedisClient = {\n get(key: string): Promise<unknown>;\n set(key: string, value: string): Promise<unknown>;\n call?(...args: string[]): Promise<unknown>;\n del?(key: string): Promise<unknown>;\n};\n/** Uses ioredis or Upstash without importing either driver. */\nexport function createRedisStore(\n client: RedisClient,\n options: { flavor?: \"ioredis\" | \"upstash\" } = {}\n): ArcaStore {\n const flavor =\n options.flavor ??\n (typeof client.call === \"function\" ? \"ioredis\" : \"upstash\");\n if (flavor === \"ioredis\" && !client.call) {\n throw new ArcaConfigurationError(\n \"ARCA Redis ioredis flavor requires client.call.\"\n );\n }\n // The public structural type accepts ioredis's overloaded set method.\n // Only the Upstash flavor invokes its options-object overload.\n const upstashSet = client.set as (\n key: string,\n value: string,\n options: { nx?: true; xx?: true; px?: number }\n ) => Promise<unknown>;\n const read = async (key: string) => {\n const value = await client.get(key);\n if (value === null || value === undefined) {\n return null;\n }\n // Upstash can deserialize stored JSON automatically.\n return typeof value === \"string\" ? value : JSON.stringify(value);\n };\n // A lease, so a crashed holder frees the key; a renewal keeps a live one.\n const lease = (key: string, owner: string, mode: \"nx\" | \"xx\") =>\n storeCall(\n async () =>\n (flavor === \"ioredis\"\n ? await client.call?.(\n \"SET\",\n key,\n owner,\n mode.toUpperCase(),\n \"PX\",\n String(ARCA_LEASE_MS)\n )\n : await upstashSet.call(client, key, owner, {\n [mode]: true,\n px: ARCA_LEASE_MS,\n })) === \"OK\"\n );\n return {\n get: (key) => storeCall(() => read(key)),\n set: (key, value) =>\n storeCall(async () => {\n await client.set(key, value);\n }),\n add: (key, value) =>\n storeCall(\n async () =>\n (flavor === \"ioredis\"\n ? await client.call?.(\"SET\", key, value, \"NX\")\n : await upstashSet.call(client, key, value, { nx: true })) === \"OK\"\n ),\n ...(client.del\n ? {\n delete: (key: string) =>\n storeCall(async () => {\n await client.del?.(key);\n }),\n withLock: <T>(key: string, fn: () => Promise<T>) =>\n withLease(\n key,\n {\n acquire: (owner) => lease(key, owner, \"nx\"),\n renew: async (owner) => {\n // Check and set: only the holder extends its own lease.\n if ((await storeCall(() => read(key))) === owner) {\n await lease(key, owner, \"xx\");\n }\n },\n release: async (owner) => {\n await storeCall(async () => {\n if ((await read(key)) === owner) {\n await client.del?.(key);\n }\n });\n },\n },\n fn\n ),\n }\n : {}),\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/store/memory.ts","../src/store/postgres.ts","../src/store/redis.ts"],"sourcesContent":["import type { ArcaStore } from \"./types\";\n\n/** In-process store for tests; reservations do not survive a restart. */\nexport function createMemoryStore(): ArcaStore {\n const values = new Map<string, string>();\n const locks = new Map<string, Promise<void>>();\n return {\n get: (key) => Promise.resolve(values.get(key) ?? null),\n set(key, value) {\n values.set(key, value);\n return Promise.resolve();\n },\n add(key, value) {\n if (values.has(key)) {\n return Promise.resolve(false);\n }\n values.set(key, value);\n return Promise.resolve(true);\n },\n delete(key) {\n values.delete(key);\n return Promise.resolve();\n },\n async withLock(key, fn) {\n const previous = locks.get(key) ?? Promise.resolve();\n let release: () => void = () => undefined;\n const current = new Promise<void>((resolve) => {\n release = resolve;\n });\n const queued = previous.catch(() => undefined).then(() => current);\n locks.set(key, queued);\n await previous.catch(() => undefined);\n try {\n return await fn();\n } finally {\n release();\n if (locks.get(key) === queued) {\n locks.delete(key);\n }\n }\n },\n };\n}\n","import { ArcaConfigurationError } from \"../errors\";\nimport { ARCA_LEASE_MS, withLease } from \"./lock\";\nimport { type ArcaStore, storeCall } from \"./types\";\n\ntype Row = { key?: string; value?: string };\n/** Uses the caller's SQL client; provision the table before use. */\nexport function createPostgresStore({\n query,\n table = \"arca_store\",\n}: {\n query: (text: string, params: string[]) => Promise<Row[] | { rows: Row[] }>;\n table?: string;\n}): ArcaStore {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(table)) {\n throw new ArcaConfigurationError(\"Invalid ARCA store table identifier.\");\n }\n const name = `\"${table}\"`;\n const lease = Math.round(ARCA_LEASE_MS / 1000);\n const run = (text: string, params: string[]) =>\n storeCall(async () => {\n const result = await query(text, params);\n return Array.isArray(result) ? result : result.rows;\n });\n return {\n async get(key) {\n return (\n (await run(`SELECT value FROM ${name} WHERE key = $1`, [key]))[0]\n ?.value ?? null\n );\n },\n async set(key, value) {\n await run(\n `INSERT INTO ${name} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = now()`,\n [key, value]\n );\n },\n async add(key, value) {\n return (\n (\n await run(\n `INSERT INTO ${name} (key, value) VALUES ($1, $2) ON CONFLICT DO NOTHING RETURNING key`,\n [key, value]\n )\n ).length > 0\n );\n },\n async delete(key) {\n await run(`DELETE FROM ${name} WHERE key = $1`, [key]);\n },\n withLock(key, fn) {\n // A lease row, not an advisory lock: it survives a transaction-mode\n // pooler, where a session-scoped lock would be taken on another backend.\n return withLease(\n key,\n {\n async acquire(owner) {\n const taken = await run(\n `INSERT INTO ${name} (key, value) VALUES ($1, $2) ON CONFLICT DO NOTHING RETURNING key`,\n [key, owner]\n );\n if (taken.length > 0) {\n return true;\n }\n const expired = await run(\n `UPDATE ${name} SET value = $2, updated_at = now() WHERE key = $1 AND updated_at < now() - interval '${lease} seconds' RETURNING key`,\n [key, owner]\n );\n return expired.length > 0;\n },\n async renew(owner) {\n await run(\n `UPDATE ${name} SET updated_at = now() WHERE key = $1 AND value = $2`,\n [key, owner]\n );\n },\n async release(owner) {\n await run(`DELETE FROM ${name} WHERE key = $1 AND value = $2`, [\n key,\n owner,\n ]);\n },\n },\n fn\n );\n },\n };\n}\n","import { ArcaConfigurationError } from \"../errors\";\nimport { ARCA_LEASE_MS, withLease } from \"./lock\";\nimport { type ArcaStore, storeCall } from \"./types\";\n\ntype RedisClient = {\n get(key: string): Promise<unknown>;\n set(key: string, value: string): Promise<unknown>;\n call?(...args: string[]): Promise<unknown>;\n del?(key: string): Promise<unknown>;\n};\n/** Uses ioredis or Upstash without importing either driver. */\nexport function createRedisStore(\n client: RedisClient,\n options: { flavor?: \"ioredis\" | \"upstash\" } = {}\n): ArcaStore {\n const flavor =\n options.flavor ??\n (typeof client.call === \"function\" ? \"ioredis\" : \"upstash\");\n if (flavor === \"ioredis\" && !client.call) {\n throw new ArcaConfigurationError(\n \"ARCA Redis ioredis flavor requires client.call.\"\n );\n }\n // The public structural type accepts ioredis's overloaded set method.\n // Only the Upstash flavor invokes its options-object overload.\n const upstashSet = client.set as (\n key: string,\n value: string,\n options: { nx?: true; xx?: true; px?: number }\n ) => Promise<unknown>;\n const read = async (key: string) => {\n const value = await client.get(key);\n if (value === null || value === undefined) {\n return null;\n }\n // Upstash can deserialize stored JSON automatically.\n return typeof value === \"string\" ? value : JSON.stringify(value);\n };\n // A lease, so a crashed holder frees the key; a renewal keeps a live one.\n const lease = (key: string, owner: string, mode: \"nx\" | \"xx\") =>\n storeCall(\n async () =>\n (flavor === \"ioredis\"\n ? await client.call?.(\n \"SET\",\n key,\n owner,\n mode.toUpperCase(),\n \"PX\",\n String(ARCA_LEASE_MS)\n )\n : await upstashSet.call(client, key, owner, {\n [mode]: true,\n px: ARCA_LEASE_MS,\n })) === \"OK\"\n );\n return {\n get: (key) => storeCall(() => read(key)),\n set: (key, value) =>\n storeCall(async () => {\n await client.set(key, value);\n }),\n add: (key, value) =>\n storeCall(\n async () =>\n (flavor === \"ioredis\"\n ? await client.call?.(\"SET\", key, value, \"NX\")\n : await upstashSet.call(client, key, value, { nx: true })) === \"OK\"\n ),\n ...(client.del\n ? {\n delete: (key: string) =>\n storeCall(async () => {\n await client.del?.(key);\n }),\n withLock: <T>(key: string, fn: () => Promise<T>) =>\n withLease(\n key,\n {\n acquire: (owner) => lease(key, owner, \"nx\"),\n renew: async (owner) => {\n // Check and set: only the holder extends its own lease.\n if ((await storeCall(() => read(key))) === owner) {\n await lease(key, owner, \"xx\");\n }\n },\n release: async (owner) => {\n await storeCall(async () => {\n if ((await read(key)) === owner) {\n await client.del?.(key);\n }\n });\n },\n },\n fn\n ),\n }\n : {}),\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/padron.mjs
CHANGED
package/dist/wsfe.mjs
CHANGED
package/dist/wsmtxca.mjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createWsmtxcaService
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-WG6TAMBB.mjs";
|
|
4
|
+
import "./chunk-KDLY2XJO.mjs";
|
|
5
|
+
import "./chunk-B2M64SIK.mjs";
|
|
5
6
|
import "./chunk-NT2A6YMO.mjs";
|
|
6
7
|
export {
|
|
7
8
|
createWsmtxcaService
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/padron.ts"],"sourcesContent":["import type { ReceiverCondition } from \"../constants\";\nimport { ArcaSoapFaultError } from \"../errors\";\nimport type {\n ArcaClientConfig,\n ArcaPadronServiceName,\n} from \"../internal/types\";\nimport type { SoapTransport } from \"../soap\";\nimport type { WsaaAuthModule } from \"../wsaa\";\n\n/** One tax registration reported by the constancia de inscripción. */\nexport type PadronTax = {\n id: number;\n description?: string;\n /** ARCA's state code; `AC` is active. Absent when ARCA omits it. */\n state?: string;\n regime: \"general\" | \"monotributo\";\n};\n\n/** The domicilio fiscal. A field ARCA omits is absent. */\nexport type PadronAddress = {\n street?: string;\n city?: string;\n postalCode?: string;\n /** ARCA's province code, the one invoices and IIBB registrations use. */\n provinceId?: number;\n province?: string;\n};\n\n/** One economic activity registered under a regime. */\nexport type PadronActivity = {\n /** The six-digit NAES code, zero-padded, such as `011211`. */\n id: string;\n description?: string;\n /** ARCA's ordering; `1` is the main activity. */\n order?: number;\n /** The period the activity starts, as `YYYY-MM`. */\n since?: string;\n regime: \"general\" | \"monotributo\";\n};\n\n/** Result of a taxpayer lookup via Padron A5. */\nexport type PadronTaxpayerResult = {\n taxId: string;\n personType?: string;\n name?: string;\n address?: PadronAddress;\n /**\n * The receiver condition to invoice this taxpayer under, derived from its\n * active IVA registrations: 30 is responsable inscripto, 20 monotributo, 32\n * exento and 34 no alcanzado. A taxpayer with none of them is a consumidor\n * final. Absent when the registrations contradict each other or when the\n * constancia reports an error, because then they may be missing.\n */\n condition?: ReceiverCondition;\n taxes: PadronTax[];\n activities: PadronActivity[];\n /**\n * The constancia's own errors, such as an unresolved domicilio. Empty when\n * there are none. A taxpayer with errors has no `condition`.\n */\n errors: string[];\n raw: Record<string, unknown>;\n};\n\n/** Result of a tax ID lookup by document number via Padron A13. */\nexport type PadronTaxIdLookupResult = {\n taxIds: string[];\n raw: Record<string, unknown>;\n};\n\n/** Padron taxpayer registry service. */\nexport type PadronService = {\n /** Looks up taxpayer details by CUIT. Returns `null` if the taxpayer does not exist. */\n getTaxpayerDetails(\n taxId: number | string\n ): Promise<PadronTaxpayerResult | null>;\n /** Looks up CUITs associated with a document number. Returns `null` if not found. */\n getTaxIdByDocument(\n documentNumber: number | string\n ): Promise<PadronTaxIdLookupResult | null>;\n};\n\nexport type CreatePadronServiceOptions = {\n config: ArcaClientConfig;\n auth: WsaaAuthModule;\n soap: SoapTransport;\n};\n\n/** Creates a Padron service instance wired with authentication and SOAP transport. */\nexport function createPadronService(\n options: CreatePadronServiceOptions\n): PadronService {\n return {\n async getTaxpayerDetails(taxId) {\n const raw = await executePadronOperation(\n options,\n \"padron-a5\",\n \"getPersona_v2\",\n {\n idPersona: Number.parseInt(String(taxId), 10),\n }\n );\n if (!raw) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n if (isPadronNotFound(record)) {\n return null;\n }\n const datosGenerales = record.datosGenerales as\n | Record<string, unknown>\n | undefined;\n const idPersona = record.idPersona ?? datosGenerales?.idPersona;\n const tipoPersona = record.tipoPersona ?? datosGenerales?.tipoPersona;\n const taxes = extractPadronTaxes(record);\n const errors = constanciaErrors(record);\n // A constancia with an unresolved error may be missing registrations, so\n // their absence proves nothing about the receiver's condition.\n const condition =\n errors.length > 0 ? undefined : deriveReceiverCondition(taxes);\n const address = extractPadronAddress(datosGenerales?.domicilioFiscal);\n return {\n taxId: String(idPersona ?? taxId),\n ...(tipoPersona === undefined\n ? {}\n : { personType: String(tipoPersona) }),\n ...(datosGenerales ? { name: extractPadronName(datosGenerales) } : {}),\n ...(address === undefined ? {} : { address }),\n ...(condition === undefined ? {} : { condition }),\n taxes,\n activities: extractPadronActivities(record),\n errors,\n raw: record,\n };\n },\n async getTaxIdByDocument(documentNumber) {\n const raw = await executePadronOperation(\n options,\n \"padron-a13\",\n \"getIdPersonaListByDocumento\",\n {\n documento: String(documentNumber),\n }\n );\n if (!raw) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const idPersona = record.idPersona;\n const taxIds = Array.isArray(idPersona)\n ? idPersona.map(String)\n : idPersona === undefined\n ? []\n : [String(idPersona)];\n return {\n taxIds,\n raw: record,\n };\n },\n };\n}\n\nconst IVA_TAX_CONDITIONS: Readonly<Record<number, ReceiverCondition>> = {\n 20: \"monotributo\",\n 30: \"responsable_inscripto\",\n 32: \"exento\",\n 34: \"no_alcanzado\",\n};\n\n// The constancia answers a missing CUIT inside errorConstancia, not as a fault.\nconst NOT_FOUND_PHRASES = [\n \"la clave solicitada no existe\",\n \"no existe persona con ese id\",\n \"no existe persona con esa clave\",\n \"persona no encontrada\",\n \"no se encontro informacion para la clave\",\n];\n\nfunction constanciaErrors(record: Record<string, unknown>): string[] {\n const errorConstancia = record.errorConstancia as\n | { error?: unknown }\n | undefined;\n const errors = errorConstancia?.error;\n return (Array.isArray(errors) ? errors : [errors]).filter(\n (message): message is string =>\n typeof message === \"string\" && message.trim() !== \"\"\n );\n}\n\nfunction isPadronNotFound(record: Record<string, unknown>): boolean {\n return constanciaErrors(record).some((message) =>\n NOT_FOUND_PHRASES.some((phrase) => plainText(message).includes(phrase))\n );\n}\n\nfunction plainText(value: string): string {\n return value\n .normalize(\"NFD\")\n .replace(/\\p{Diacritic}/gu, \"\")\n .toLowerCase();\n}\n\nfunction extractPadronTaxes(record: Record<string, unknown>): PadronTax[] {\n const taxes: PadronTax[] = [];\n for (const [regime, field] of [\n [\"general\", \"datosRegimenGeneral\"],\n [\"monotributo\", \"datosMonotributo\"],\n ] as const) {\n const bucket = record[field] as { impuesto?: unknown } | undefined;\n const rows = bucket?.impuesto;\n for (const row of Array.isArray(rows) ? rows : rows ? [rows] : []) {\n const tax = row as Record<string, unknown>;\n const id = Number(tax.idImpuesto);\n if (!Number.isSafeInteger(id)) {\n continue;\n }\n taxes.push({\n id,\n ...(typeof tax.descripcionImpuesto === \"string\"\n ? { description: tax.descripcionImpuesto }\n : {}),\n ...(typeof tax.estadoImpuesto === \"string\"\n ? { state: tax.estadoImpuesto.trim().toUpperCase() }\n : {}),\n regime,\n });\n }\n }\n return taxes;\n}\n\nfunction rowsOf(value: unknown): Record<string, unknown>[] {\n return (Array.isArray(value) ? value : value ? [value] : []).filter(\n (row): row is Record<string, unknown> =>\n row !== null && typeof row === \"object\"\n );\n}\n\nfunction extractPadronActivities(\n record: Record<string, unknown>\n): PadronActivity[] {\n const activities: PadronActivity[] = [];\n const seen = new Set<string>();\n for (const [regime, field, key] of [\n [\"general\", \"datosRegimenGeneral\", \"actividad\"],\n [\"monotributo\", \"datosMonotributo\", \"actividad\"],\n [\"monotributo\", \"datosMonotributo\", \"actividadMonotributista\"],\n ] as const) {\n const bucket = record[field] as Record<string, unknown> | undefined;\n for (const row of rowsOf(bucket?.[key])) {\n const activity = toPadronActivity(row, regime);\n if (activity && !seen.has(`${regime}:${activity.id}`)) {\n seen.add(`${regime}:${activity.id}`);\n activities.push(activity);\n }\n }\n }\n return activities;\n}\n\n// ARCA answers the NAES code as a number, which drops its leading zero.\nfunction toPadronActivity(\n row: Record<string, unknown>,\n regime: PadronActivity[\"regime\"]\n): PadronActivity | undefined {\n const digits = String(row.idActividad ?? \"\").replace(/\\D/g, \"\");\n if (digits === \"\" || Number(digits) === 0) {\n return undefined;\n }\n const order = Number(row.orden);\n const period = String(row.periodo ?? \"\");\n return {\n id: digits.padStart(6, \"0\"),\n ...(typeof row.descripcionActividad === \"string\"\n ? { description: row.descripcionActividad }\n : {}),\n ...(row.orden !== undefined && Number.isSafeInteger(order)\n ? { order }\n : {}),\n ...(/^\\d{6}$/.test(period)\n ? { since: `${period.slice(0, 4)}-${period.slice(4)}` }\n : {}),\n regime,\n };\n}\n\nfunction extractPadronAddress(value: unknown): PadronAddress | undefined {\n if (value === null || typeof value !== \"object\") {\n return undefined;\n }\n const raw = value as Record<string, unknown>;\n const provinceId =\n raw.idProvincia === undefined || raw.idProvincia === null\n ? Number.NaN\n : Number(raw.idProvincia);\n const address: PadronAddress = {\n ...optionalText(\"street\", raw.direccion),\n ...optionalText(\"city\", raw.localidad),\n ...optionalText(\"postalCode\", raw.codPostal),\n ...(Number.isSafeInteger(provinceId) &&\n String(raw.idProvincia).trim() !== \"\"\n ? { provinceId }\n : {}),\n ...optionalText(\"province\", raw.descripcionProvincia),\n };\n return Object.keys(address).length === 0 ? undefined : address;\n}\n\nfunction optionalText<K extends string>(\n key: K,\n value: unknown\n): Partial<Record<K, string>> {\n const text =\n typeof value === \"string\"\n ? value.trim()\n : typeof value === \"number\"\n ? String(value)\n : \"\";\n return text === \"\" ? {} : ({ [key]: text } as Record<K, string>);\n}\n\n/** One active IVA registration decides; none is a consumidor final; two is nobody's call. */\nfunction deriveReceiverCondition(\n taxes: readonly PadronTax[]\n): ReceiverCondition | undefined {\n const conditions = new Set<ReceiverCondition>();\n for (const tax of taxes) {\n const condition = IVA_TAX_CONDITIONS[tax.id];\n if (condition && (tax.state === undefined || tax.state === \"AC\")) {\n conditions.add(condition);\n }\n }\n if (conditions.size === 0) {\n return \"consumidor_final\";\n }\n return conditions.size === 1 ? [...conditions][0] : undefined;\n}\n\nfunction extractPadronName(\n datosGenerales: Record<string, unknown>\n): string | undefined {\n if (typeof datosGenerales.razonSocial === \"string\") {\n return datosGenerales.razonSocial;\n }\n const nombre = datosGenerales.nombre;\n const apellido = datosGenerales.apellido;\n if (typeof apellido === \"string\" && typeof nombre === \"string\") {\n return `${apellido} ${nombre}`.trim();\n }\n if (typeof apellido === \"string\") {\n return apellido;\n }\n if (typeof nombre === \"string\") {\n return nombre;\n }\n return undefined;\n}\n\nasync function executePadronOperation(\n options: CreatePadronServiceOptions,\n service: ArcaPadronServiceName,\n operation: string,\n body: Record<string, unknown>\n) {\n const auth = await options.auth.login(\n service === \"padron-a5\"\n ? \"ws_sr_constancia_inscripcion\"\n : \"ws_sr_padron_a13\"\n );\n\n try {\n const response = await options.soap.execute<\n Record<string, unknown>,\n Record<string, unknown>\n >({\n service,\n operation,\n bodyElementNamespaceMode: \"prefix\",\n body: {\n token: auth.token,\n sign: auth.sign,\n cuitRepresentada: Number.parseInt(options.config.taxId, 10),\n ...body,\n },\n });\n\n const operationResponse = response.result as Record<string, unknown>;\n\n if (operation === \"getPersona_v2\") {\n return operationResponse.personaReturn ?? null;\n }\n\n if (operation === \"getIdPersonaListByDocumento\") {\n return operationResponse.idPersonaListReturn ?? null;\n }\n\n return operationResponse.return ?? null;\n } catch (error) {\n if (\n error instanceof ArcaSoapFaultError &&\n // Public Padron A5/A13 WSDLs expose only a generic validation fault, so\n // there is no documented not-found-specific fault code to match here.\n // Keep the current message fallback, but treat it as fragile.\n error.message.toLowerCase().includes(\"no existe\")\n ) {\n return null;\n }\n\n throw error;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/authentication.ts","../src/internal/voucher-number.ts"],"sourcesContent":["import {\n ArcaAuthenticationError,\n type ArcaAuthenticationReason,\n ArcaServiceError,\n ArcaSoapFaultError,\n isArcaAuthenticationError,\n} from \"../errors\";\nimport type {\n ArcaAuthenticationEvidence,\n ArcaFiscalIssue,\n} from \"../services/fiscal-evidence\";\nimport type { ArcaServiceName } from \"./types\";\n\ntype AuthenticationContext = {\n service: ArcaServiceName;\n operation: string;\n};\n\ntype AuthenticationCandidate = AuthenticationContext & {\n providerCode?: string | number;\n message?: string;\n cause?: unknown;\n};\n\ntype AuthenticationRecoveryOptions<T> = AuthenticationContext & {\n forceRefresh?: boolean;\n allowRetry?: boolean;\n execute(forceRefresh?: boolean): Promise<T>;\n};\n\nconst WSFE_AUTHENTICATION_CODES: Readonly<\n Record<string, ArcaAuthenticationReason>\n> = {\n \"600\": \"invalid_token\",\n \"601\": \"missing_relationship\",\n};\n\n/** Classifies one safe provider code/message pair without inspecting object graphs. */\nexport function classifyArcaAuthenticationCandidate(\n candidate: AuthenticationCandidate\n): ArcaAuthenticationError | undefined {\n const providerCode = normalizeProviderCode(candidate.providerCode);\n const reason =\n getStructuredAuthenticationReason(candidate.service, providerCode) ??\n getTextAuthenticationReason(candidate.message);\n\n if (!reason) {\n return undefined;\n }\n\n return new ArcaAuthenticationError(\n formatAuthenticationMessage(candidate.service, candidate.operation, reason),\n {\n reason,\n service: candidate.service,\n operation: candidate.operation,\n ...(providerCode === undefined ? {} : { providerCode }),\n ...(candidate.cause === undefined ? {} : { cause: candidate.cause }),\n }\n );\n}\n\n/** Classifies supported public ARCA errors while ignoring arbitrary errors and causes. */\nexport function classifyArcaAuthenticationError(\n error: unknown,\n context: AuthenticationContext\n): ArcaAuthenticationError | undefined {\n if (isArcaAuthenticationError(error)) {\n return error;\n }\n\n if (error instanceof ArcaSoapFaultError) {\n return classifyArcaAuthenticationCandidate({\n ...context,\n providerCode: error.faultCode,\n message: error.message,\n cause: error,\n });\n }\n\n if (error instanceof ArcaServiceError) {\n const issueError = classifyArcaAuthenticationIssues(\n error.issues ?? [],\n context\n );\n if (issueError) {\n return new ArcaAuthenticationError(issueError.message, {\n reason: issueError.reason,\n service: issueError.service,\n operation: issueError.operation,\n ...(issueError.providerCode === undefined\n ? {}\n : { providerCode: issueError.providerCode }),\n cause: error,\n });\n }\n\n return classifyArcaAuthenticationCandidate({\n ...context,\n providerCode: error.serviceCode,\n message: error.message,\n cause: error,\n });\n }\n\n return undefined;\n}\n\n/** Classifies structured service issues in provider order. */\nexport function classifyArcaAuthenticationIssues(\n issues: readonly ArcaFiscalIssue[],\n context: AuthenticationContext\n): ArcaAuthenticationError | undefined {\n for (const issue of issues) {\n const authenticationError = classifyArcaAuthenticationCandidate({\n ...context,\n providerCode: issue.code,\n message: issue.message,\n });\n if (authenticationError) {\n return authenticationError;\n }\n }\n return undefined;\n}\n\n/** Converts the public error to safe serializable exact-attempt evidence. */\nexport function createArcaAuthenticationEvidence(\n error: ArcaAuthenticationError\n): ArcaAuthenticationEvidence {\n return {\n code: \"ARCA_AUTHENTICATION_ERROR\",\n reason: error.reason,\n ...(error.providerCode === undefined\n ? {}\n : { providerCode: error.providerCode }),\n };\n}\n\n/** Recreates the throwable contract from safe exact-attempt evidence. */\nexport function createArcaAuthenticationErrorFromEvidence(\n evidence: ArcaAuthenticationEvidence,\n context: AuthenticationContext\n): ArcaAuthenticationError {\n return new ArcaAuthenticationError(\n formatAuthenticationMessage(\n context.service,\n context.operation,\n evidence.reason\n ),\n {\n reason: evidence.reason,\n service: context.service,\n operation: context.operation,\n ...(evidence.providerCode === undefined\n ? {}\n : { providerCode: evidence.providerCode }),\n }\n );\n}\n\n/** Runs one convenience operation and permits one proven-safe forced refresh. */\nexport async function executeWithAuthenticationRecovery<T>(\n options: AuthenticationRecoveryOptions<T>\n): Promise<T> {\n const executeAttempt = async (forceRefresh?: boolean): Promise<T> => {\n try {\n return await options.execute(forceRefresh);\n } catch (error) {\n throw classifyArcaAuthenticationError(error, options) ?? error;\n }\n };\n\n try {\n return await executeAttempt(options.forceRefresh);\n } catch (error) {\n const allowRetry =\n options.allowRetry !== false && options.forceRefresh !== true;\n if (!(allowRetry && isArcaAuthenticationError(error))) {\n throw error;\n }\n return executeAttempt(true);\n }\n}\n\nfunction getStructuredAuthenticationReason(\n service: ArcaServiceName,\n providerCode: string | number | undefined\n): ArcaAuthenticationReason | undefined {\n if (service !== \"wsfe\" || providerCode === undefined) {\n return undefined;\n }\n return WSFE_AUTHENTICATION_CODES[String(providerCode).trim()];\n}\n\nfunction getTextAuthenticationReason(\n message: string | undefined\n): ArcaAuthenticationReason | undefined {\n if (!message) {\n return undefined;\n }\n const normalized = normalizeAuthenticationText(message);\n\n if (\n includesWholePhrase(\n normalized,\n \"no aparecio cuit en lista de relaciones\"\n ) ||\n includesWholePhrase(normalized, \"cuit representada no incluida en token\")\n ) {\n return \"missing_relationship\";\n }\n if (includesWholePhrase(normalized, \"computador no autorizado\")) {\n return \"unauthorized_computer\";\n }\n if (\n includesWholePhrase(normalized, \"validaciondetoken\") ||\n includesWholePhrase(normalized, \"token vencido\") ||\n includesWholePhrase(normalized, \"no se corresponden token y firma\")\n ) {\n return \"invalid_token\";\n }\n if (\n includesWholePhrase(normalized, \"no autorizado a acceder al servicio\") ||\n includesWholePhrase(normalized, \"no autorizado a acceder a los servicios\")\n ) {\n return \"authentication_rejected\";\n }\n return undefined;\n}\n\nfunction normalizeAuthenticationText(value: string): string {\n return value\n .normalize(\"NFD\")\n .replace(/\\p{Diacritic}/gu, \"\")\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction includesWholePhrase(value: string, phrase: string): boolean {\n let searchFrom = 0;\n while (searchFrom <= value.length - phrase.length) {\n const index = value.indexOf(phrase, searchFrom);\n if (index < 0) {\n return false;\n }\n const before = value[index - 1];\n const after = value[index + phrase.length];\n if (!(isWordCharacter(before) || isWordCharacter(after))) {\n return true;\n }\n searchFrom = index + phrase.length;\n }\n return false;\n}\n\nfunction isWordCharacter(value: string | undefined): boolean {\n return value !== undefined && /[a-z0-9]/.test(value);\n}\n\nfunction normalizeProviderCode(\n providerCode: string | number | undefined\n): string | number | undefined {\n if (typeof providerCode === \"number\") {\n return Number.isFinite(providerCode) ? providerCode : undefined;\n }\n if (typeof providerCode === \"string\") {\n const normalized = providerCode.trim();\n return normalized || undefined;\n }\n return undefined;\n}\n\nfunction formatAuthenticationMessage(\n service: ArcaServiceName,\n operation: string,\n reason: ArcaAuthenticationReason\n): string {\n const descriptions: Record<ArcaAuthenticationReason, string> = {\n invalid_token: \"the token or signature was rejected\",\n unauthorized_computer: \"the certificate or computer is not authorized\",\n missing_relationship: \"the represented taxpayer relationship is missing\",\n authentication_rejected: \"the service denied authenticated access\",\n };\n return `ARCA rejected authentication for ${service}.${operation}: ${descriptions[reason]}.`;\n}\n","import { ArcaInvalidSoapResponseError } from \"../errors\";\n\n/**\n * The last authorized number both services answer: an explicit decimal integer\n * from 0 to 99.999.999. Anything else is an invalid response, never a number\n * to increment.\n */\nexport function parseLastAuthorizedNumber(\n value: unknown,\n { service, operation }: { service: \"wsfe\" | \"wsmtxca\"; operation: string }\n): number {\n // Digits only, so the parsed number is already a non-negative integer.\n if (\n (typeof value === \"string\" || typeof value === \"number\") &&\n /^\\d+$/.test(String(value).trim()) &&\n Number(value) <= 99_999_999\n ) {\n return Number(value);\n }\n throw new ArcaInvalidSoapResponseError(\n `Invalid ${service.toUpperCase()} last authorized number`,\n { service, operation }\n );\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|