@factucat/public-api-contracts 0.2.1 → 0.4.0

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.
@@ -8,11 +8,15 @@ export declare const customerInvoiceLanguageSchema: z.ZodEnum<{
8
8
  es: "es";
9
9
  en: "en";
10
10
  }>;
11
+ export declare const postalCodeInputSchema: z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>, z.ZodString>;
12
+ export declare const taxRegimeInputSchema: z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>, z.ZodString>;
13
+ export declare const paymentFormInputSchema: z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>, z.ZodString>;
11
14
  export declare const customerCreateInputSchema: z.ZodObject<{
12
15
  legalName: z.ZodString;
13
16
  rfc: z.ZodString;
14
- postalCode: z.ZodString;
15
- taxRegime: z.ZodString;
17
+ postalCode: z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>, z.ZodString>;
18
+ taxRegime: z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>, z.ZodString>;
19
+ preferredCfdiUse: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16
20
  fiscalResidence: z.ZodOptional<z.ZodString>;
17
21
  taxId: z.ZodOptional<z.ZodString>;
18
22
  email: z.ZodOptional<z.ZodEmail>;
@@ -35,6 +39,7 @@ export declare const customerRecordSchema: z.ZodObject<{
35
39
  rfc: z.ZodString;
36
40
  postalCode: z.ZodString;
37
41
  taxRegime: z.ZodString;
42
+ preferredCfdiUse: z.ZodOptional<z.ZodNullable<z.ZodString>>;
38
43
  fiscalResidence: z.ZodOptional<z.ZodString>;
39
44
  taxId: z.ZodOptional<z.ZodString>;
40
45
  email: z.ZodOptional<z.ZodEmail>;
@@ -55,6 +60,7 @@ export declare const customerRecordSchema: z.ZodObject<{
55
60
  export declare const customerListQuerySchema: z.ZodObject<{
56
61
  query: z.ZodOptional<z.ZodString>;
57
62
  limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
63
+ offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
58
64
  }, z.core.$strip>;
59
65
  export type CustomerCreateInput = z.infer<typeof customerCreateInputSchema>;
60
66
  export type CustomerRecord = z.infer<typeof customerRecordSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../src/customers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,sBAAsB;;;;EAAgC,CAAA;AACnE,eAAO,MAAM,6BAA6B;;;EAAuB,CAAA;AAEjE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;iBAYpC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;iBAgB/B,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
1
+ {"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../src/customers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,sBAAsB;;;;EAAgC,CAAA;AACnE,eAAO,MAAM,6BAA6B;;;EAAuB,CAAA;AAajE,eAAO,MAAM,qBAAqB,6HAKjC,CAAA;AAED,eAAO,MAAM,oBAAoB,6HAEhC,CAAA;AAED,eAAO,MAAM,sBAAsB,6HAKlC,CAAA;AAED,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;iBAapC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;iBAiB/B,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
package/dist/customers.js CHANGED
@@ -1,11 +1,31 @@
1
1
  import { z } from 'zod';
2
2
  export const customerCurrencySchema = z.enum(['MXN', 'USD', 'EUR']);
3
3
  export const customerInvoiceLanguageSchema = z.enum(['es', 'en']);
4
+ function codeLikeStringSchema(width) {
5
+ return z
6
+ .union([z.string(), z.number().int().nonnegative()])
7
+ .transform((value) => {
8
+ const normalized = String(value).trim();
9
+ return /^\d+$/.test(normalized)
10
+ ? normalized.padStart(width, '0')
11
+ : normalized;
12
+ });
13
+ }
14
+ export const postalCodeInputSchema = codeLikeStringSchema(5).pipe(z
15
+ .string()
16
+ .trim()
17
+ .regex(/^\d{5}$/));
18
+ export const taxRegimeInputSchema = codeLikeStringSchema(3).pipe(z.string().trim().min(1).max(10));
19
+ export const paymentFormInputSchema = codeLikeStringSchema(2).pipe(z
20
+ .string()
21
+ .trim()
22
+ .regex(/^\d{2}$/));
4
23
  export const customerCreateInputSchema = z.object({
5
24
  legalName: z.string().trim().min(2).max(200),
6
25
  rfc: z.string().trim().min(12).max(13),
7
- postalCode: z.string().trim().regex(/^\d{5}$/),
8
- taxRegime: z.string().trim().min(1).max(10),
26
+ postalCode: postalCodeInputSchema,
27
+ taxRegime: taxRegimeInputSchema,
28
+ preferredCfdiUse: z.string().trim().min(3).max(4).nullish(),
9
29
  fiscalResidence: z.string().trim().min(3).max(3).optional(),
10
30
  taxId: z.string().trim().max(80).optional(),
11
31
  email: z.email().optional(),
@@ -21,6 +41,7 @@ export const customerRecordSchema = z.object({
21
41
  rfc: z.string(),
22
42
  postalCode: z.string(),
23
43
  taxRegime: z.string(),
44
+ preferredCfdiUse: z.string().nullish(),
24
45
  fiscalResidence: z.string().optional(),
25
46
  taxId: z.string().optional(),
26
47
  email: z.email().optional(),
@@ -34,5 +55,6 @@ export const customerRecordSchema = z.object({
34
55
  export const customerListQuerySchema = z.object({
35
56
  query: z.string().trim().min(1).max(120).optional(),
36
57
  limit: z.coerce.number().int().min(1).max(100).optional(),
58
+ offset: z.coerce.number().int().min(0).max(1000000).optional(),
37
59
  });
38
60
  //# sourceMappingURL=customers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"customers.js","sourceRoot":"","sources":["../src/customers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"customers.js","sourceRoot":"","sources":["../src/customers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=customers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customers.test.d.ts","sourceRoot":"","sources":["../src/customers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { customerCreateInputSchema, paymentFormInputSchema, postalCodeInputSchema, taxRegimeInputSchema, } from './customers';
3
+ import { cfdiExportacionSchema, draftCreateInputSchema, draftSetMetaInputSchema, draftSetReceiverInputSchema, draftStampInputSchema, externalInvoiceCancelInputSchema, invoiceCancelInputSchema, } from './invoices';
4
+ describe('public API code-like inputs', () => {
5
+ it('accepts omitted, set and cleared customer UsoCFDI preferences', () => {
6
+ const customer = { legalName: 'CLIENTE DE PRUEBA', rfc: 'XIA190128J61', postalCode: '06000', taxRegime: '601' };
7
+ expect(customerCreateInputSchema.parse(customer).preferredCfdiUse).toBeUndefined();
8
+ expect(customerCreateInputSchema.parse({ ...customer, preferredCfdiUse: ' G03 ' }).preferredCfdiUse).toBe('G03');
9
+ expect(customerCreateInputSchema.parse({ ...customer, preferredCfdiUse: null }).preferredCfdiUse).toBeNull();
10
+ });
11
+ it('normalizes postal code and tax regime numbers into strings', () => {
12
+ const parsed = customerCreateInputSchema.parse({
13
+ legalName: 'Cesar Ivan Ochoa Elias',
14
+ rfc: 'OOEC691028179',
15
+ postalCode: 45645,
16
+ taxRegime: 605,
17
+ email: 'ochoa_cesar@hotmail.com',
18
+ });
19
+ expect(parsed.postalCode).toBe('45645');
20
+ expect(parsed.taxRegime).toBe('605');
21
+ });
22
+ it('restores leading zeros for fixed-width numeric codes', () => {
23
+ expect(postalCodeInputSchema.parse(6700)).toBe('06700');
24
+ expect(taxRegimeInputSchema.parse(5)).toBe('005');
25
+ expect(paymentFormInputSchema.parse(3)).toBe('03');
26
+ });
27
+ it('preserves explicit string values with leading zeros', () => {
28
+ expect(postalCodeInputSchema.parse('04567')).toBe('04567');
29
+ expect(taxRegimeInputSchema.parse('0605')).toBe('0605');
30
+ });
31
+ it('accepts normalized numeric codes in draft endpoints', () => {
32
+ const receiver = draftSetReceiverInputSchema.parse({
33
+ receiverPostalCode: 1234,
34
+ receiverTaxRegime: 605,
35
+ });
36
+ const meta = draftSetMetaInputSchema.parse({
37
+ paymentForm: 3,
38
+ });
39
+ expect(receiver.receiverPostalCode).toBe('01234');
40
+ expect(receiver.receiverTaxRegime).toBe('605');
41
+ expect(meta.paymentForm).toBe('03');
42
+ });
43
+ it('accepts only SAT c_Exportacion values', () => {
44
+ expect(cfdiExportacionSchema.safeParse('01').success).toBe(true);
45
+ expect(cfdiExportacionSchema.safeParse('02').success).toBe(true);
46
+ expect(cfdiExportacionSchema.safeParse('03').success).toBe(true);
47
+ expect(cfdiExportacionSchema.safeParse('04').success).toBe(true);
48
+ expect(cfdiExportacionSchema.safeParse('99').success).toBe(false);
49
+ const created = draftCreateInputSchema.parse({ exportacion: '02' });
50
+ const meta = draftSetMetaInputSchema.parse({ exportacion: '02' });
51
+ expect(created.exportacion).toBe('02');
52
+ expect(meta.exportacion).toBe('02');
53
+ });
54
+ it('accepts CFDI relacionados when stamping a draft through the public API', () => {
55
+ const parsed = draftStampInputSchema.parse({
56
+ cfdi_relacionados: {
57
+ tipo_relacion: '04',
58
+ cfdi_relacionado: ['E7B2B5CE-4A6C-4C48-9F0A-ED8F49C8D6A1'],
59
+ },
60
+ });
61
+ expect(parsed.cfdi_relacionados).toEqual({
62
+ tipo_relacion: '04',
63
+ cfdi_relacionado: ['E7B2B5CE-4A6C-4C48-9F0A-ED8F49C8D6A1'],
64
+ });
65
+ });
66
+ it('accepts substitution cancellation of an internal original when stamping a draft', () => {
67
+ const parsed = draftStampInputSchema.parse({
68
+ substitution: {
69
+ cancel_original: true,
70
+ original_invoice_id: '11111111-1111-4111-8111-111111111111',
71
+ },
72
+ });
73
+ expect(parsed.substitution).toEqual({
74
+ cancel_original: true,
75
+ original_invoice_id: '11111111-1111-4111-8111-111111111111',
76
+ });
77
+ });
78
+ it('requires exactly one original source for draft stamp substitution', () => {
79
+ expect(draftStampInputSchema.safeParse({
80
+ substitution: { cancel_original: true },
81
+ }).success).toBe(false);
82
+ expect(draftStampInputSchema.safeParse({
83
+ substitution: {
84
+ cancel_original: true,
85
+ original_invoice_id: '11111111-1111-4111-8111-111111111111',
86
+ external_original_sat_uuid: '22222222-2222-4222-8222-222222222222',
87
+ external_original_receiver_rfc: 'XAXX010101000',
88
+ external_original_total: '116.00',
89
+ },
90
+ }).success).toBe(false);
91
+ });
92
+ it('accepts internal and external invoice cancellation inputs', () => {
93
+ const replacementInvoiceId = '11111111-1111-4111-8111-111111111111';
94
+ expect(invoiceCancelInputSchema.parse({
95
+ reason: '01',
96
+ replacementInvoiceId,
97
+ })).toEqual({
98
+ reason: '01',
99
+ replacementInvoiceId,
100
+ });
101
+ const external = externalInvoiceCancelInputSchema.parse({
102
+ satUuid: '22222222-2222-4222-8222-222222222222',
103
+ reason: '01',
104
+ receiverRfc: 'XEXX010101000',
105
+ total: '4142.00',
106
+ replacementSatUuid: '33333333-3333-4333-8333-333333333333',
107
+ });
108
+ expect(external.receiverRfc).toBe('XEXX010101000');
109
+ expect(external.total).toBe('4142.00');
110
+ expect(external.replacementSatUuid).toBe('33333333-3333-4333-8333-333333333333');
111
+ });
112
+ });
113
+ //# sourceMappingURL=customers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customers.test.js","sourceRoot":"","sources":["../src/customers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,YAAY,CAAA;AAEnB,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,mBAAmB,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QAC/G,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC,aAAa,EAAE,CAAA;QAClF,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChH,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC9G,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC;YAC7C,SAAS,EAAE,wBAAwB;YACnC,GAAG,EAAE,eAAe;YACpB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,GAAG;YACd,KAAK,EAAE,yBAAyB;SACjC,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvD,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1D,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,QAAQ,GAAG,2BAA2B,CAAC,KAAK,CAAC;YACjD,kBAAkB,EAAE,IAAI;YACxB,iBAAiB,EAAE,GAAG;SACvB,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,uBAAuB,CAAC,KAAK,CAAC;YACzC,WAAW,EAAE,CAAC;SACf,CAAC,CAAA;QAEF,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChE,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChE,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChE,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChE,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEjE,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACnE,MAAM,IAAI,GAAG,uBAAuB,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACzC,iBAAiB,EAAE;gBACjB,aAAa,EAAE,IAAI;gBACnB,gBAAgB,EAAE,CAAC,sCAAsC,CAAC;aAC3D;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;YACvC,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE,CAAC,sCAAsC,CAAC;SAC3D,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACzC,YAAY,EAAE;gBACZ,eAAe,EAAE,IAAI;gBACrB,mBAAmB,EAAE,sCAAsC;aAC5D;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;YAClC,eAAe,EAAE,IAAI;YACrB,mBAAmB,EAAE,sCAAsC;SAC5D,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CACJ,qBAAqB,CAAC,SAAS,CAAC;YAC9B,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;SACxC,CAAC,CAAC,OAAO,CACX,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,MAAM,CACJ,qBAAqB,CAAC,SAAS,CAAC;YAC9B,YAAY,EAAE;gBACZ,eAAe,EAAE,IAAI;gBACrB,mBAAmB,EAAE,sCAAsC;gBAC3D,0BAA0B,EAAE,sCAAsC;gBAClE,8BAA8B,EAAE,eAAe;gBAC/C,uBAAuB,EAAE,QAAQ;aAClC;SACF,CAAC,CAAC,OAAO,CACX,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,oBAAoB,GAAG,sCAAsC,CAAA;QACnE,MAAM,CACJ,wBAAwB,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,IAAI;YACZ,oBAAoB;SACrB,CAAC,CACH,CAAC,OAAO,CAAC;YACR,MAAM,EAAE,IAAI;YACZ,oBAAoB;SACrB,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,gCAAgC,CAAC,KAAK,CAAC;YACtD,OAAO,EAAE,sCAAsC;YAC/C,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,eAAe;YAC5B,KAAK,EAAE,SAAS;YAChB,kBAAkB,EAAE,sCAAsC;SAC3D,CAAC,CAAA;QACF,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAClD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,IAAI,CACtC,sCAAsC,CACvC,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -2,6 +2,11 @@ import { z } from 'zod';
2
2
  export declare const publicResponseMetaSchema: z.ZodObject<{
3
3
  requestId: z.ZodString;
4
4
  idempotencyKey: z.ZodOptional<z.ZodString>;
5
+ pagination: z.ZodOptional<z.ZodObject<{
6
+ limit: z.ZodNumber;
7
+ offset: z.ZodNumber;
8
+ hasMore: z.ZodBoolean;
9
+ }, z.core.$strip>>;
5
10
  }, z.core.$strip>;
6
11
  export declare const publicApiErrorCodeSchema: z.ZodEnum<{
7
12
  bad_request: "bad_request";
@@ -14,7 +19,12 @@ export declare const publicApiErrorCodeSchema: z.ZodEnum<{
14
19
  missing_idempotency_key: "missing_idempotency_key";
15
20
  missing_scope: "missing_scope";
16
21
  not_found: "not_found";
22
+ plan_required: "plan_required";
23
+ forbidden: "forbidden";
24
+ rate_limit_exceeded: "rate_limit_exceeded";
17
25
  validation_error: "validation_error";
26
+ invalid_input: "invalid_input";
27
+ INVALID_ISSUE_DATE: "INVALID_ISSUE_DATE";
18
28
  idempotency_conflict: "idempotency_conflict";
19
29
  idempotency_in_progress: "idempotency_in_progress";
20
30
  }>;
@@ -30,13 +40,19 @@ export declare const publicErrorSchema: z.ZodObject<{
30
40
  missing_idempotency_key: "missing_idempotency_key";
31
41
  missing_scope: "missing_scope";
32
42
  not_found: "not_found";
43
+ plan_required: "plan_required";
44
+ forbidden: "forbidden";
45
+ rate_limit_exceeded: "rate_limit_exceeded";
33
46
  validation_error: "validation_error";
47
+ invalid_input: "invalid_input";
48
+ INVALID_ISSUE_DATE: "INVALID_ISSUE_DATE";
34
49
  idempotency_conflict: "idempotency_conflict";
35
50
  idempotency_in_progress: "idempotency_in_progress";
36
51
  }>;
37
52
  message: z.ZodString;
38
53
  requestId: z.ZodString;
39
54
  retryable: z.ZodDefault<z.ZodBoolean>;
55
+ reason: z.ZodOptional<z.ZodString>;
40
56
  }, z.core.$strip>;
41
57
  export declare const publicErrorEnvelopeSchema: z.ZodObject<{
42
58
  error: z.ZodObject<{
@@ -51,13 +67,19 @@ export declare const publicErrorEnvelopeSchema: z.ZodObject<{
51
67
  missing_idempotency_key: "missing_idempotency_key";
52
68
  missing_scope: "missing_scope";
53
69
  not_found: "not_found";
70
+ plan_required: "plan_required";
71
+ forbidden: "forbidden";
72
+ rate_limit_exceeded: "rate_limit_exceeded";
54
73
  validation_error: "validation_error";
74
+ invalid_input: "invalid_input";
75
+ INVALID_ISSUE_DATE: "INVALID_ISSUE_DATE";
55
76
  idempotency_conflict: "idempotency_conflict";
56
77
  idempotency_in_progress: "idempotency_in_progress";
57
78
  }>;
58
79
  message: z.ZodString;
59
80
  requestId: z.ZodString;
60
81
  retryable: z.ZodDefault<z.ZodBoolean>;
82
+ reason: z.ZodOptional<z.ZodString>;
61
83
  }, z.core.$strip>;
62
84
  }, z.core.$strip>;
63
85
  export declare function createPublicSuccessEnvelopeSchema<TSchema extends z.ZodTypeAny>(dataSchema: TSchema): z.ZodObject<{
@@ -65,6 +87,11 @@ export declare function createPublicSuccessEnvelopeSchema<TSchema extends z.ZodT
65
87
  meta: z.ZodObject<{
66
88
  requestId: z.ZodString;
67
89
  idempotencyKey: z.ZodOptional<z.ZodString>;
90
+ pagination: z.ZodOptional<z.ZodObject<{
91
+ limit: z.ZodNumber;
92
+ offset: z.ZodNumber;
93
+ hasMore: z.ZodBoolean;
94
+ }, z.core.$strip>>;
68
95
  }, z.core.$strip>;
69
96
  }, z.core.$strip>;
70
97
  export type PublicResponseMeta = z.infer<typeof publicResponseMetaSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,wBAAwB;;;iBAGnC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;EAcnC,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;iBAK5B,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;iBAEpC,CAAA;AAEF,wBAAgB,iCAAiC,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAC5E,UAAU,EAAE,OAAO;;;;;;kBAMpB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,wBAAwB;;;;;;;;iBAUnC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;EAmBnC,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;iBAM5B,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEpC,CAAA;AAEF,wBAAgB,iCAAiC,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAC5E,UAAU,EAAE,OAAO;;;;;;;;;;;kBAMpB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
package/dist/envelope.js CHANGED
@@ -2,6 +2,13 @@ import { z } from 'zod';
2
2
  export const publicResponseMetaSchema = z.object({
3
3
  requestId: z.string().trim().min(1),
4
4
  idempotencyKey: z.string().trim().min(1).optional(),
5
+ pagination: z
6
+ .object({
7
+ limit: z.number().int().positive(),
8
+ offset: z.number().int().nonnegative(),
9
+ hasMore: z.boolean(),
10
+ })
11
+ .optional(),
5
12
  });
6
13
  export const publicApiErrorCodeSchema = z.enum([
7
14
  'bad_request',
@@ -14,7 +21,12 @@ export const publicApiErrorCodeSchema = z.enum([
14
21
  'missing_idempotency_key',
15
22
  'missing_scope',
16
23
  'not_found',
24
+ 'plan_required',
25
+ 'forbidden',
26
+ 'rate_limit_exceeded',
17
27
  'validation_error',
28
+ 'invalid_input',
29
+ 'INVALID_ISSUE_DATE',
18
30
  'idempotency_conflict',
19
31
  'idempotency_in_progress',
20
32
  ]);
@@ -23,6 +35,7 @@ export const publicErrorSchema = z.object({
23
35
  message: z.string().trim().min(1),
24
36
  requestId: z.string().trim().min(1),
25
37
  retryable: z.boolean().default(false),
38
+ reason: z.string().optional(),
26
39
  });
27
40
  export const publicErrorEnvelopeSchema = z.object({
28
41
  error: publicErrorSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7C,aAAa;IACb,UAAU;IACV,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,oBAAoB;IACpB,iBAAiB;IACjB,yBAAyB;IACzB,eAAe;IACf,WAAW;IACX,kBAAkB;IAClB,sBAAsB;IACtB,yBAAyB;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACtC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,iBAAiB;CACzB,CAAC,CAAA;AAEF,MAAM,UAAU,iCAAiC,CAC/C,UAAmB;IAEnB,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,wBAAwB;KAC/B,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnD,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7C,aAAa;IACb,UAAU;IACV,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,oBAAoB;IACpB,iBAAiB;IACjB,yBAAyB;IACzB,eAAe;IACf,WAAW;IACX,eAAe;IACf,WAAW;IACX,qBAAqB;IACrB,kBAAkB;IAClB,eAAe;IACf,oBAAoB;IACpB,sBAAsB;IACtB,yBAAyB;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,iBAAiB;CACzB,CAAC,CAAA;AAEF,MAAM,UAAU,iCAAiC,CAC/C,UAAmB;IAEnB,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,wBAAwB;KAC/B,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=envelope.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.test.d.ts","sourceRoot":"","sources":["../src/envelope.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { publicApiErrorCodeSchema, publicErrorEnvelopeSchema } from './envelope';
3
+ describe('publicApiErrorCodeSchema', () => {
4
+ it('includes plan and rate-limit codes for the public REST envelope', () => {
5
+ expect(publicApiErrorCodeSchema.parse('plan_required')).toBe('plan_required');
6
+ expect(publicApiErrorCodeSchema.parse('rate_limit_exceeded')).toBe('rate_limit_exceeded');
7
+ });
8
+ });
9
+ describe('public error reason', () => {
10
+ it.each(['free_card_required', 'free_extra_limit_reached'])('accepts the Free 403 reason %s', (reason) => {
11
+ const body = { error: { code: 'forbidden', message: 'Revisa tus timbres y tarjeta.', requestId: 'test-request', retryable: false, reason } };
12
+ expect(publicErrorEnvelopeSchema.parse(body)).toEqual(body);
13
+ });
14
+ it.each([undefined, 'duplicate_rfc'])('accepts an optional 409 reason: %s', (reason) => {
15
+ const body = {
16
+ error: {
17
+ code: 'conflict',
18
+ message: 'Ya existe un cliente con ese RFC',
19
+ requestId: 'test-request',
20
+ retryable: false,
21
+ ...(reason === undefined ? {} : { reason }),
22
+ },
23
+ };
24
+ expect(publicErrorEnvelopeSchema.parse(body)).toEqual(body);
25
+ });
26
+ });
27
+ //# sourceMappingURL=envelope.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.test.js","sourceRoot":"","sources":["../src/envelope.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEhF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAC1D,eAAe,CAChB,CAAA;QACD,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAChE,qBAAqB,CACtB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,CAAC,CAAC,gCAAgC,EAAE,CAAC,MAAM,EAAE,EAAE;QACvG,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,+BAA+B,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAA;QAC5I,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CACnC,oCAAoC,EACpC,CAAC,MAAM,EAAE,EAAE;QACT,MAAM,IAAI,GAAG;YACX,KAAK,EAAE;gBACL,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,kCAAkC;gBAC3C,SAAS,EAAE,cAAc;gBACzB,SAAS,EAAE,KAAK;gBAChB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;aAC5C;SACF,CAAA;QACD,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC,CACF,CAAA;AACH,CAAC,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from './customers.js';
2
2
  export * from './envelope.js';
3
3
  export * from './invoices.js';
4
4
  export * from './me.js';
5
+ export * from './openapi.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA"}
package/dist/index.js CHANGED
@@ -2,4 +2,5 @@ export * from './customers.js';
2
2
  export * from './envelope.js';
3
3
  export * from './invoices.js';
4
4
  export * from './me.js';
5
+ export * from './openapi.js';
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA"}