@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.
- package/dist/envelope.d.ts +6 -3
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +2 -1
- package/dist/envelope.js.map +1 -1
- package/dist/envelope.test.js +36 -3
- package/dist/envelope.test.js.map +1 -1
- package/package.json +3 -2
package/dist/envelope.d.ts
CHANGED
|
@@ -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";
|
package/dist/envelope.d.ts.map
CHANGED
|
@@ -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
|
|
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',
|
package/dist/envelope.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/envelope.test.js
CHANGED
|
@@ -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('
|
|
5
|
-
expect(publicApiErrorCodeSchema.parse(
|
|
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,
|
|
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.
|
|
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
|
}
|