@factucat/public-api-contracts 0.4.0 → 0.5.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.
@@ -11,6 +11,8 @@ export declare const publicResponseMetaSchema: z.ZodObject<{
11
11
  export declare const publicApiErrorCodeSchema: z.ZodEnum<{
12
12
  bad_request: "bad_request";
13
13
  conflict: "conflict";
14
+ csd_required: "csd_required";
15
+ forbidden: "forbidden";
14
16
  internal_error: "internal_error";
15
17
  invalid_api_key: "invalid_api_key";
16
18
  invalid_json: "invalid_json";
@@ -20,7 +22,6 @@ export declare const publicApiErrorCodeSchema: z.ZodEnum<{
20
22
  missing_scope: "missing_scope";
21
23
  not_found: "not_found";
22
24
  plan_required: "plan_required";
23
- forbidden: "forbidden";
24
25
  rate_limit_exceeded: "rate_limit_exceeded";
25
26
  validation_error: "validation_error";
26
27
  invalid_input: "invalid_input";
@@ -32,6 +33,8 @@ export declare const publicErrorSchema: z.ZodObject<{
32
33
  code: z.ZodEnum<{
33
34
  bad_request: "bad_request";
34
35
  conflict: "conflict";
36
+ csd_required: "csd_required";
37
+ forbidden: "forbidden";
35
38
  internal_error: "internal_error";
36
39
  invalid_api_key: "invalid_api_key";
37
40
  invalid_json: "invalid_json";
@@ -41,7 +44,6 @@ export declare const publicErrorSchema: z.ZodObject<{
41
44
  missing_scope: "missing_scope";
42
45
  not_found: "not_found";
43
46
  plan_required: "plan_required";
44
- forbidden: "forbidden";
45
47
  rate_limit_exceeded: "rate_limit_exceeded";
46
48
  validation_error: "validation_error";
47
49
  invalid_input: "invalid_input";
@@ -59,6 +61,8 @@ export declare const publicErrorEnvelopeSchema: z.ZodObject<{
59
61
  code: z.ZodEnum<{
60
62
  bad_request: "bad_request";
61
63
  conflict: "conflict";
64
+ csd_required: "csd_required";
65
+ forbidden: "forbidden";
62
66
  internal_error: "internal_error";
63
67
  invalid_api_key: "invalid_api_key";
64
68
  invalid_json: "invalid_json";
@@ -68,7 +72,6 @@ export declare const publicErrorEnvelopeSchema: z.ZodObject<{
68
72
  missing_scope: "missing_scope";
69
73
  not_found: "not_found";
70
74
  plan_required: "plan_required";
71
- forbidden: "forbidden";
72
75
  rate_limit_exceeded: "rate_limit_exceeded";
73
76
  validation_error: "validation_error";
74
77
  invalid_input: "invalid_input";
@@ -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;;;;;;;;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"}
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;;;;;;;;;;;;;;;;;;;;EAoBnC,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
@@ -13,6 +13,8 @@ export const publicResponseMetaSchema = z.object({
13
13
  export const publicApiErrorCodeSchema = z.enum([
14
14
  'bad_request',
15
15
  'conflict',
16
+ 'csd_required',
17
+ 'forbidden',
16
18
  'internal_error',
17
19
  'invalid_api_key',
18
20
  'invalid_json',
@@ -22,7 +24,6 @@ export const publicApiErrorCodeSchema = z.enum([
22
24
  'missing_scope',
23
25
  'not_found',
24
26
  'plan_required',
25
- 'forbidden',
26
27
  'rate_limit_exceeded',
27
28
  'validation_error',
28
29
  'invalid_input',
@@ -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;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"}
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,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,oBAAoB;IACpB,iBAAiB;IACjB,yBAAyB;IACzB,eAAe;IACf,WAAW;IACX,eAAe;IACf,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"}
@@ -1,10 +1,43 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { publicApiErrorCodeSchema, publicErrorEnvelopeSchema } from './envelope';
2
+ import { publicApiErrorCodeSchema, publicErrorEnvelopeSchema, } from './envelope';
3
+ const errorFixtures = [
4
+ {
5
+ code: 'csd_required',
6
+ status: 409,
7
+ message: 'Configura tu CSD para continuar.',
8
+ requestId: '605d59bf-8449-443e-887c-fbe066cb8e6a',
9
+ },
10
+ {
11
+ code: 'forbidden',
12
+ status: 403,
13
+ message: 'No tienes permiso para realizar esta operación.',
14
+ requestId: '45b8d049-d744-48c2-8eba-ba76c7f49992',
15
+ },
16
+ {
17
+ code: 'plan_required',
18
+ status: 403,
19
+ message: 'Esta llave requiere un plan Miau Pro o FactuCat API activo.',
20
+ requestId: '92c973f8-db88-4cfc-91b0-ad5b55b19051',
21
+ },
22
+ ];
3
23
  describe('publicApiErrorCodeSchema', () => {
4
- it('includes plan and rate-limit codes for the public REST envelope', () => {
5
- expect(publicApiErrorCodeSchema.parse('plan_required')).toBe('plan_required');
24
+ it.each(errorFixtures)('accepts $code', ({ code }) => {
25
+ expect(publicApiErrorCodeSchema.parse(code)).toBe(code);
26
+ });
27
+ it('includes the rate-limit code for the public REST envelope', () => {
6
28
  expect(publicApiErrorCodeSchema.parse('rate_limit_exceeded')).toBe('rate_limit_exceeded');
7
29
  });
30
+ it('rejects the uppercase internal CSD_REQUIRED code', () => {
31
+ expect(publicApiErrorCodeSchema.safeParse('CSD_REQUIRED').success).toBe(false);
32
+ });
33
+ });
34
+ describe('publicErrorEnvelopeSchema', () => {
35
+ it.each(errorFixtures)('parses a full $code envelope from HTTP $status with its requestId', async ({ status, ...error }) => {
36
+ const envelope = { error: { ...error, retryable: false } };
37
+ const response = Response.json(envelope, { status });
38
+ expect(response.status).toBe(status);
39
+ expect(publicErrorEnvelopeSchema.parse(await response.json())).toEqual(envelope);
40
+ });
8
41
  });
9
42
  describe('public error reason', () => {
10
43
  it.each(['free_card_required', 'free_extra_limit_reached'])('accepts the Free 403 reason %s', (reason) => {
@@ -1 +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"}
1
+ {"version":3,"file":"envelope.test.js","sourceRoot":"","sources":["../src/envelope.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@factucat/public-api-contracts",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -31,6 +31,7 @@
31
31
  },
32
32
  "scripts": {
33
33
  "build": "tsc -p tsconfig.build.json",
34
- "lint": "eslint \"src/**/*.ts\" --ignore-pattern \"src/**/*.d.ts\""
34
+ "lint": "eslint \"src/**/*.ts\" --ignore-pattern \"src/**/*.d.ts\"",
35
+ "test": "vitest run src"
35
36
  }
36
37
  }