@openapi-qraft/react 1.8.0 → 1.10.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.
@@ -0,0 +1,99 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { jwtDecode, InvalidTokenError, b64DecodeUnicode, } from './index.js';
3
+ const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmb28iOiJiYXIiLCJleHAiOjEzOTMyODY4OTMsImlhdCI6MTM5MzI2ODg5M30.4-iaDojEVl0pJQMjrbM1EzUIfAZgsbK_kgnVyVxFSVo';
4
+ describe('jwt-decode', () => {
5
+ it('should return default and custom claims', () => {
6
+ const decoded = jwtDecode(token);
7
+ expect(decoded.exp).toEqual(1393286893);
8
+ expect(decoded.iat).toEqual(1393268893);
9
+ expect(decoded.foo).toEqual('bar');
10
+ });
11
+ it('should return header information', () => {
12
+ const decoded = jwtDecode(token, { header: true });
13
+ expect(decoded.typ).toEqual('JWT');
14
+ expect(decoded.alg).toEqual('HS256');
15
+ });
16
+ it('should work with utf8 tokens', () => {
17
+ const utf8Token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiSm9zw6kiLCJpYXQiOjE0MjU2NDQ5NjZ9.1CfFtdGUPs6q8kT3OGQSVlhEMdbuX0HfNSqum0023a0';
18
+ const decoded = jwtDecode(utf8Token);
19
+ expect(decoded.name).toEqual('José');
20
+ });
21
+ it('should work with binary tokens', () => {
22
+ const binaryToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiSm9z6SIsImlhdCI6MTQyNTY0NDk2Nn0.cpnplCBxiw7Xqz5thkqs4Mo_dymvztnI0CI4BN0d1t8';
23
+ const decoded = jwtDecode(binaryToken);
24
+ expect(decoded.name).toEqual('José');
25
+ });
26
+ it('should work with double padding', () => {
27
+ const utf8Token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikpvc8OpIiwiaWF0IjoxNTE2MjM5MDIyfQ.7A3F5SUH2gbBSYVon5mas_Y-KCrWojorKQg7UKGVEIA';
28
+ const decoded = jwtDecode(utf8Token);
29
+ expect(decoded.name).toEqual('José');
30
+ });
31
+ it('should work with single padding', () => {
32
+ const utf8Token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikpvc8OpZSIsImlhdCI6MTUxNjIzOTAyMn0.tbjJzDAylkKSV0_YGR5xBJBlFK01C82nZPLIcA3JX1g';
33
+ const decoded = jwtDecode(utf8Token);
34
+ expect(decoded.name).toEqual('Josée');
35
+ });
36
+ it('should throw InvalidTokenError on not a string', () => {
37
+ const badToken = null;
38
+ expect(() => {
39
+ jwtDecode(badToken);
40
+ }).toThrow(InvalidTokenError);
41
+ });
42
+ it('should throw InvalidTokenError on string that is not a token', () => {
43
+ const badToken = 'foobar';
44
+ expect(() => {
45
+ jwtDecode(badToken);
46
+ }).toThrow(InvalidTokenError);
47
+ });
48
+ it('should throw InvalidTokenErrors when token is null', () => {
49
+ const badToken = null;
50
+ expect(() => {
51
+ jwtDecode(badToken, { header: true });
52
+ }).toThrow(new InvalidTokenError('Invalid token specified: must be a string'));
53
+ });
54
+ it('should throw InvalidTokenErrors when missing part #1', () => {
55
+ const badToken = '.FAKE_TOKEN';
56
+ expect(() => {
57
+ jwtDecode(badToken, { header: true });
58
+ }).toThrow(/Invalid token specified: invalid json for part #1/);
59
+ });
60
+ it('should throw InvalidTokenErrors when part #1 is not valid base64', () => {
61
+ const badToken = 'TOKEN';
62
+ expect(() => {
63
+ jwtDecode(badToken, { header: true });
64
+ }).toThrow(/Invalid token specified: invalid base64 for part #1/);
65
+ });
66
+ it('should throw InvalidTokenErrors when part #1 is not valid JSON', () => {
67
+ const badToken = 'FAKE.TOKEN';
68
+ expect(() => {
69
+ jwtDecode(badToken, { header: true });
70
+ }).toThrow(/Invalid token specified: invalid json for part #1/);
71
+ });
72
+ it('should throw InvalidTokenErrors when missing part #2', () => {
73
+ const badToken = 'FAKE_TOKEN';
74
+ expect(() => {
75
+ jwtDecode(badToken);
76
+ }).toThrow(new InvalidTokenError('Invalid token specified: missing part #2'));
77
+ });
78
+ it('should throw InvalidTokenErrors when part #2 is not valid base64', () => {
79
+ const badToken = 'FAKE.TOKEN';
80
+ expect(() => {
81
+ jwtDecode(badToken);
82
+ }).toThrow(/Invalid token specified: invalid base64 for part #2/);
83
+ });
84
+ it('should throw InvalidTokenErrors when part #2 is not valid JSON', () => {
85
+ const badToken = 'FAKE.TOKEN2';
86
+ expect(() => {
87
+ jwtDecode(badToken);
88
+ }).toThrow(/Invalid token specified: invalid json for part #2/);
89
+ });
90
+ });
91
+ describe('decodeBase64', () => {
92
+ it('decodes base64', () => {
93
+ expect(b64DecodeUnicode('aGVsbG8=')).toEqual('hello');
94
+ });
95
+ it('decodes base64 non latin characters', () => {
96
+ expect(b64DecodeUnicode('5L2g5aW9')).toEqual('你好');
97
+ });
98
+ });
99
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/lib/jwt-decode/index.test.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ export declare function requestFn<T>(schema: OperationSchema, requestInfo: Reque
30
30
  */
31
31
  export declare function baseRequestFn<T>(requestSchema: OperationSchema, requestInfo: RequestFnInfo, options: WithRequired<RequestFnOptions, 'urlSerializer' | 'bodySerializer'>): Promise<T>;
32
32
  export declare function urlSerializer(schema: OperationSchema, info: RequestFnPayload): string;
33
+ export declare function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]): Headers;
33
34
  export declare function bodySerializer(schema: OperationSchema, info: RequestFnPayload): string | Blob | FormData | undefined;
34
35
  export type HeadersOptions = HeadersInit | Record<string, string | number | boolean | null | undefined>;
35
36
  export interface OperationSchema {
@@ -47,6 +48,7 @@ export interface OperationSchema {
47
48
  * @example application/json
48
49
  */
49
50
  readonly mediaType?: string;
51
+ readonly security?: string[];
50
52
  }
51
53
  export interface RequestFnPayload {
52
54
  /**
@@ -78,7 +80,7 @@ export interface RequestFnPayload {
78
80
  /** An AbortSignal to set request's signal. */
79
81
  signal?: AbortSignal | null;
80
82
  }
81
- interface RequestFnInfo extends RequestFnPayload, Omit<RequestInit, 'headers' | 'method' | 'body' | 'signal'> {
83
+ export interface RequestFnInfo extends RequestFnPayload, Omit<RequestInit, 'headers' | 'method' | 'body' | 'signal'> {
82
84
  /**
83
85
  * Request headers
84
86
  * @example { 'X-Auth': '123' }
@@ -1 +1 @@
1
- {"version":3,"file":"requestFn.d.ts","sourceRoot":"","sources":["../../src/lib/requestFn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,aAAa,EAC1B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,aAAa,EAAE,eAAe,EAC9B,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,YAAY,CAAC,gBAAgB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GAC1E,OAAO,CAAC,CAAC,CAAC,CAoCZ;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,GACrB,MAAM,CAqBR;AA6DD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,wCAwBvB;AA+ED,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,MAAM,EACX,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;IAEZ;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACtC,CAAC;IAEF;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE1D;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,UAAU,aACR,SAAQ,gBAAgB,EACtB,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7D;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG;KAC3C,CAAC,IAAI,CAAC,GAAG,EAAE;CACb,CAAC"}
1
+ {"version":3,"file":"requestFn.d.ts","sourceRoot":"","sources":["../../src/lib/requestFn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,aAAa,EAC1B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,aAAa,EAAE,eAAe,EAC9B,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,YAAY,CAAC,gBAAgB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GAC1E,OAAO,CAAC,CAAC,CAAC,CAoCZ;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,GACrB,MAAM,CAqBR;AAoCD,wBAAgB,YAAY,CAAC,GAAG,UAAU,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,WAuBzE;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,wCAwBvB;AA+ED,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,MAAM,EACX,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;IAEZ;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACtC,CAAC;IAEF;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE1D;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aACf,SAAQ,gBAAgB,EACtB,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7D;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG;KAC3C,CAAC,IAAI,CAAC,GAAG,EAAE;CACb,CAAC"}
@@ -101,7 +101,7 @@ function getQueryString(params) {
101
101
  }
102
102
  return '';
103
103
  }
104
- function mergeHeaders(...allHeaders) {
104
+ export function mergeHeaders(...allHeaders) {
105
105
  const headers = new Headers();
106
106
  for (const headerSet of allHeaders) {
107
107
  if (!headerSet || typeof headerSet !== 'object') {
@@ -1 +1 @@
1
- {"version":3,"file":"requestFn.js","sourceRoot":"","sources":["../../src/lib/requestFn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requestFn.js","sourceRoot":"","sources":["../../src/lib/requestFn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAuB,EACvB,WAA0B,EAC1B,OAA0B;IAE1B,OAAO,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE;QACxC,aAAa;QACb,cAAc;QACd,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAA8B,EAC9B,WAA0B,EAC1B,OAA2E;IAE3E,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,eAAe,EAAE,GAAG,WAAW,CAAC;IAEtE,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAEvE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IAEzC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,WAAW,CAAC,EACjD;QACE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE;QAC1C,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,YAAY,CACnB;YACE,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,aAAa,CAAC,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC;SACpE,EACD,OAAO,EACP,UAAU,EAAE,MAAM,EAClB,WAAW,YAAY,QAAQ;YAC7B,CAAC,CAAC,sHAAsH;gBACtH,EAAE,cAAc,EAAE,IAAI,EAAE;YAC1B,CAAC,CAAC,SAAS,CACd;QACD,GAAG,eAAe;KACnB,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;IAExC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,MAAM,eAAe,CAAC,cAAc,CAAC,CAAM,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAuB,EACvB,IAAsB;IAEtB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAC7B,UAAU,EACV,CAAC,SAAiB,EAAE,KAAa,EAAE,EAAE;QACnC,IACE,IAAI,CAAC,UAAU,EAAE,IAAI;YACrB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EACjE,CAAC;YACD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAEnC,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,OAAO,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,MAA2B;IACjD,MAAM,EAAE,GAAa,EAAE,CAAC;IAExB,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;QACzC,EAAE,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;QAC1C,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAE3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;gBACvC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,UAA0C;IACxE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,SAAS;QACX,CAAC;QAED,MAAM,eAAe,GACnB,SAAS,YAAY,OAAO;YAC1B,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;YACrB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,eAAe,EAAE,CAAC;YACvD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAuB,EACvB,IAAsB;IAEtB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO;IAEpC,IACE,MAAM,CAAC,MAAM,KAAK,KAAK;QACvB,MAAM,CAAC,MAAM,KAAK,MAAM;QACxB,MAAM,CAAC,MAAM,KAAK,SAAS;QAE3B,OAAO;IAET,IAAI,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC;QAC1C,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAEtC,IACE,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;QACpC,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC5B,IAAI,CAAC,IAAI,YAAY,IAAI;YACzB,IAAI,CAAC,IAAI,YAAY,QAAQ,CAAC,EAChC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,sBAAsB,CAAC,EAC9B,IAAI,GAC2B;IAC/B,IAAI,IAAI,YAAY,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAE1B,IAAI,IAAI,YAAY,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC7E,IAAI,IAAI,YAAY,WAAW;QAC7B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,IAAI,IAAI,YAAY,eAAe;QACjC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,IAAI,IAAI,YAAY,cAAc;QAChC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAC1B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,IAAI,gBAAgB,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YACvD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC;SACtE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACxB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAA8B;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,IAAI,YAAY,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,IAAI,0BAA0B,CAAC;IACzE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC;IAClD,IAAI,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;QAAE,OAAO,kBAAkB,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,eAAe,CAAI,QAAkB;IAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,GAAG;QAC3E,OAAO,SAAS,CAAC;IAEnB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC;IACxE,MAAM,MAAM,GACV,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEnE,IAAI,MAAM,EAAE,CAAC;QACX,iEAAiE;QACjE,IAAI,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QAExC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,gCAAgC;QAEhF,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YAChC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CACV,gEAAgE,CACjE,CAAC;YACJ,CAAC;YACD,4DAA4D;YAC5D,OAAO,qBAAqB,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openapi-qraft/react",
3
- "version": "1.8.0",
3
+ "version": "1.10.0",
4
4
  "description": "API client for React, providing type-safe requests and dynamic Tanstack Query React Hooks via a modular, Proxy-based architecture.",
5
5
  "scripts": {
6
6
  "build": "rimraf dist/ && tsc --project tsconfig.build.json",
@@ -9,15 +9,15 @@
9
9
  "test:coverage": "vitest run --coverage",
10
10
  "typecheck": "tsc --noEmit",
11
11
  "lint": "eslint",
12
- "generate-qraft": "openapi-qraft --plugin tanstack-query-react ../test-fixtures/openapi.json --clean -o src/tests/fixtures/api --openapi-types-import-path '../../openapi.js' --explicit-import-extensions --filter-services '/approval_policies/**,/entities/**,/files/**,!/internal/**' && prettier --write src/tests/fixtures/api/**/*.ts",
13
- "generate-types": "openapi-qraft-typescript ../test-fixtures/openapi.json -o src/tests/fixtures/openapi.ts"
12
+ "generate-api": "openapi-qraft --plugin tanstack-query-react --plugin openapi-typescript ../test-fixtures/openapi.json -rm -o src/tests/fixtures/api --openapi-types-file-name openapi.ts --explicit-import-extensions --filter-services '/approval_policies/**,/entities/**,/files/**,!/internal/**' && yarn _prettify-api",
13
+ "_prettify-api": "prettier --write src/tests/fixtures/api/**/*.ts"
14
14
  },
15
15
  "type": "module",
16
16
  "sideEffects": false,
17
17
  "devDependencies": {
18
- "@openapi-qraft/cli": "~1.8.0",
18
+ "@openapi-qraft/cli": "~1.10.0",
19
19
  "@openapi-qraft/eslint-config": "~1.0.0",
20
- "@openapi-qraft/openapi-typescript": "^1.0.0",
20
+ "@openapi-qraft/openapi-typescript-plugin": "^1.0.2",
21
21
  "@openapi-qraft/test-fixtures": "~1.0.0",
22
22
  "@tanstack/react-query": "^5.17.3",
23
23
  "@testing-library/jest-dom": "^5.17.0",
@@ -0,0 +1,365 @@
1
+ 'use client';
2
+
3
+ import { createElement, Fragment, ReactNode, useEffect, useMemo } from 'react';
4
+
5
+ import {
6
+ QueryClient,
7
+ type QueryFunctionContext,
8
+ type QueryKey,
9
+ useQueries,
10
+ } from '@tanstack/react-query';
11
+
12
+ import { jwtDecode } from './lib/jwt-decode/index.js';
13
+ import type {
14
+ OperationSchema,
15
+ RequestFnInfo,
16
+ RequestFnOptions,
17
+ } from './lib/requestFn.js';
18
+
19
+ interface QraftSecureRequestFnBaseProps {
20
+ requestFn<T>(
21
+ schema: OperationSchema,
22
+ requestInfo: RequestFnInfo,
23
+ options?: RequestFnOptions
24
+ ): Promise<T>;
25
+ securitySchemes: SecuritySchemeHandlers<string>;
26
+ }
27
+
28
+ type RequestFn = QraftSecureRequestFnBaseProps['requestFn'];
29
+
30
+ export interface QraftSecureRequestFnProps
31
+ extends QraftSecureRequestFnBaseProps {
32
+ children(
33
+ secureRequestFn: QraftSecureRequestFnBaseProps['requestFn']
34
+ ): ReactNode;
35
+ queryClient?: QueryClient;
36
+ }
37
+
38
+ export function QraftSecureRequestFn({
39
+ children,
40
+ requestFn,
41
+ securitySchemes,
42
+ queryClient: inQueryClient,
43
+ }: QraftSecureRequestFnProps) {
44
+ const queryClient = useMemo(
45
+ () =>
46
+ inQueryClient ??
47
+ new QueryClient({
48
+ defaultOptions: {
49
+ queries: {
50
+ staleTime: 300_000,
51
+ gcTime: 300_000,
52
+ refetchOnWindowFocus: false,
53
+ refetchOnMount: false,
54
+ refetchOnReconnect: false,
55
+ },
56
+ },
57
+ }),
58
+ [inQueryClient]
59
+ );
60
+
61
+ useEffect(() => {
62
+ queryClient.mount();
63
+ return () => {
64
+ return void queryClient.unmount();
65
+ };
66
+ }, [queryClient]);
67
+
68
+ const secureRequestFn = useSecuritySchemeAuth({
69
+ securitySchemes,
70
+ requestFn,
71
+ queryClient,
72
+ });
73
+
74
+ return createElement(Fragment, {
75
+ children: children(secureRequestFn),
76
+ });
77
+ }
78
+
79
+ export const useSecuritySchemeAuth = ({
80
+ securitySchemes,
81
+ requestFn,
82
+ queryClient,
83
+ }: QraftSecureRequestFnBaseProps & {
84
+ queryClient: QueryClient;
85
+ }): RequestFn => {
86
+ useQueries(
87
+ {
88
+ queries: Object.entries(securitySchemes).map(([securitySchemeName]) => {
89
+ const queryKey: QueryKey = [securitySchemeName];
90
+ return {
91
+ enabled: Boolean(queryClient.getQueryData(queryKey)),
92
+ queryKey: queryKey as never,
93
+ queryFn: ({
94
+ signal,
95
+ }: QueryFunctionContext<[keyof typeof securitySchemes]>) => {
96
+ const securitySchemeHandler = securitySchemes[securitySchemeName];
97
+ return securitySchemeHandler({ signal, isRefreshing: true });
98
+ },
99
+ };
100
+ }),
101
+ },
102
+ queryClient
103
+ );
104
+
105
+ return useMemo(
106
+ () => createSecureRequestFn(securitySchemes, requestFn, queryClient),
107
+ [securitySchemes, requestFn, queryClient]
108
+ );
109
+ };
110
+
111
+ /**
112
+ * Create a secure `requestFn` that manages security schemes.
113
+ * It will automatically fetch and refresh tokens when needed
114
+ * using QueryClient and the provided security schemes.
115
+ *
116
+ * @param securitySchemes OpenAPI security schemes.
117
+ * @param requestFn Qraft `requestFn`
118
+ * @param queryClient QueryClient instance.
119
+ */
120
+ export function createSecureRequestFn(
121
+ securitySchemes: SecuritySchemeHandlers<string>,
122
+ requestFn: RequestFn,
123
+ queryClient: QueryClient
124
+ ): RequestFn {
125
+ return async function secureRequestFn(
126
+ schema: OperationSchema,
127
+ requestInfo: RequestFnInfo,
128
+ options?: RequestFnOptions
129
+ ) {
130
+ const availableSecuritySchemes = Object.keys(securitySchemes) as Array<
131
+ keyof typeof securitySchemes
132
+ >;
133
+ const securitySchemeName = schema.security?.find(
134
+ (security): security is keyof typeof securitySchemes =>
135
+ availableSecuritySchemes.includes(security)
136
+ );
137
+
138
+ if (!securitySchemeName) {
139
+ return requestFn(schema, requestInfo, options);
140
+ }
141
+
142
+ const securitySchemeHandler = securitySchemes[securitySchemeName];
143
+
144
+ return requestFn(
145
+ schema,
146
+ await createSecureRequestInfo(
147
+ securitySchemeHandler,
148
+ [securitySchemeName],
149
+ requestInfo,
150
+ queryClient
151
+ ),
152
+ options
153
+ );
154
+ };
155
+ }
156
+
157
+ /**
158
+ * Calculate the interval at which a token should be refreshed.
159
+ */
160
+ function getJwtTokenRefreshInterval(token: string) {
161
+ const parsedToken = jwtDecode(token);
162
+ if (!parsedToken.iat || !parsedToken.exp) {
163
+ throw new Error("JWT token must contain both 'iat' and 'exp' fields.");
164
+ }
165
+
166
+ return (parsedToken.exp - parsedToken.iat) * 1000;
167
+ }
168
+
169
+ /**
170
+ * Refresh the token if it is about to expire
171
+ * @returns The string to be used as the `Authorization` header or the object to be used in the request.
172
+ */
173
+ async function createSecureRequestInfo(
174
+ handler: SecuritySchemeHandler,
175
+ queryKey: QueryKey,
176
+ requestInfo: RequestFnInfo,
177
+ queryClient: QueryClient
178
+ ): Promise<RequestFnInfo> {
179
+ const prevSecurityResult = queryClient.getQueryData<SecurityScheme>(queryKey);
180
+
181
+ const securityResult = await queryClient.fetchQuery({
182
+ queryKey,
183
+ queryFn: ({ signal }) =>
184
+ handler({
185
+ signal,
186
+ isRefreshing: Boolean(prevSecurityResult),
187
+ }),
188
+ });
189
+
190
+ if (!shallowEqualObjects(securityResult, prevSecurityResult)) {
191
+ const securityRefreshInterval = getSecurityRefreshInterval(securityResult);
192
+
193
+ if (securityRefreshInterval !== undefined && securityRefreshInterval > 0) {
194
+ // remove the already fetched query, before setting new defaults
195
+ queryClient.removeQueries({ queryKey, exact: true });
196
+
197
+ // set query new defaults (staleTime and gcTime)
198
+ setSecurityQueryDefaults(queryClient, queryKey, securityRefreshInterval);
199
+
200
+ // Set query data with the new token, since the old one was removed.
201
+ // New query data will follow the new defaults staleTime and gcTime.
202
+ queryClient.setQueryData(queryKey, securityResult);
203
+ }
204
+ }
205
+
206
+ const securityParameters = createSecureRequestParameters(securityResult);
207
+
208
+ if (!securityParameters) return requestInfo;
209
+
210
+ return {
211
+ ...requestInfo,
212
+ parameters: {
213
+ ...requestInfo.parameters,
214
+ [securityParameters.in]: {
215
+ [securityParameters.name]: securityParameters.value,
216
+ ...requestInfo.parameters?.[securityParameters.in],
217
+ },
218
+ },
219
+ };
220
+ }
221
+
222
+ function setSecurityQueryDefaults(
223
+ queryClient: QueryClient,
224
+ queryKey: QueryKey,
225
+ refreshInterval: number
226
+ ) {
227
+ // set staleTime and gcTime based on token lifetime
228
+ queryClient.setQueryDefaults(queryKey, {
229
+ // stale the token 90% before it expires
230
+ staleTime: isFinite(refreshInterval)
231
+ ? refreshInterval * 0.9
232
+ : refreshInterval,
233
+ // garbage collect the token after it expires
234
+ gcTime: isFinite(refreshInterval) ? refreshInterval : refreshInterval,
235
+ // refetch the token 80% before it expires
236
+ refetchInterval: isFinite(refreshInterval)
237
+ ? refreshInterval * 0.8
238
+ : refreshInterval,
239
+ // always refetch the token, even in the background
240
+ refetchIntervalInBackground: true,
241
+ });
242
+ }
243
+
244
+ function createSecureRequestParameters(securityResult: SecurityScheme) {
245
+ if (typeof securityResult === 'string' || 'token' in securityResult) {
246
+ return {
247
+ in: 'header',
248
+ name: 'Authorization',
249
+ value: `Bearer ${typeof securityResult === 'string' ? securityResult : securityResult.token}`,
250
+ } as const;
251
+ }
252
+
253
+ if ('credentials' in securityResult) {
254
+ return {
255
+ in: 'header',
256
+ name: 'Authorization',
257
+ value: `Basic ${securityResult.credentials}`,
258
+ } as const;
259
+ }
260
+
261
+ if ('in' in securityResult && securityResult.in !== 'cookie') {
262
+ return securityResult;
263
+ }
264
+
265
+ throw new Error(
266
+ 'Security scheme must be a string, an object with a token property, an object with a credentials property, or an object with an in property that is not equal to "cookie".'
267
+ );
268
+ }
269
+
270
+ function getSecurityRefreshInterval(securityResult: SecurityScheme) {
271
+ if (typeof securityResult === 'string') {
272
+ return getJwtTokenRefreshInterval(securityResult);
273
+ }
274
+
275
+ if ('refreshInterval' in securityResult) {
276
+ return securityResult.refreshInterval;
277
+ }
278
+ }
279
+
280
+ /**
281
+ * @internal
282
+ */
283
+ export function shallowEqualObjects(
284
+ newObj: Record<string, any> | string,
285
+ prevObj: Record<string, any> | string | undefined
286
+ ) {
287
+ if (typeof newObj !== typeof prevObj) return false;
288
+ if (typeof newObj === 'string') return newObj === prevObj;
289
+ if (
290
+ typeof newObj !== 'object' ||
291
+ newObj === null ||
292
+ typeof prevObj !== 'object' ||
293
+ prevObj === null ||
294
+ prevObj === undefined
295
+ )
296
+ return false;
297
+ if (Object.keys(newObj).length !== Object.keys(prevObj).length) return false;
298
+
299
+ for (const key in newObj) {
300
+ if (!Object.prototype.hasOwnProperty.call(newObj, key)) return false;
301
+ if (newObj[key] !== prevObj[key]) return false;
302
+ }
303
+ return true;
304
+ }
305
+
306
+ type SecurityScheme =
307
+ | SecuritySchemeBearer
308
+ | SecuritySchemeBasic
309
+ | SecuritySchemeAPIKey
310
+ | SecuritySchemeCookie;
311
+
312
+ export type SecuritySchemeBearer =
313
+ | string /** JWT Bearer token. **/
314
+ | {
315
+ /** Refresh interval in milliseconds. */
316
+ refreshInterval: number;
317
+ /** Token to be used for authentication. */
318
+ token: string;
319
+ };
320
+
321
+ export interface SecuritySchemeBasic {
322
+ /** Credentials to be used for authentication. */
323
+ credentials: string;
324
+
325
+ /** Refresh interval in milliseconds. */
326
+ refreshInterval: number;
327
+ }
328
+
329
+ export type SecuritySchemeAPIKey = {
330
+ /** Where the secret should be placed. */
331
+ in: 'header' | 'query';
332
+ /** Name of the secret key. */
333
+ name: string;
334
+ /** Secret to be used for authentication. */
335
+ value: string;
336
+ /** Refresh interval in milliseconds. */
337
+ refreshInterval?: number;
338
+ };
339
+
340
+ export type SecuritySchemeCookie = {
341
+ /** Where the secret should be placed. */
342
+ in: 'cookie';
343
+ /** Refresh interval in milliseconds. */
344
+ refreshInterval?: number;
345
+ };
346
+
347
+ /**
348
+ * Type definition for a handler function that manages security schemes.
349
+ * This function is invoked when a token needs to be fetched or refreshed.
350
+ *
351
+ * @param props - The properties for the handler function.
352
+ * @param props.isRefreshing - A boolean indicating the state of the token.
353
+ * It's `false` on the initial "fetch token" request, and `true` if the token is stale or updating using `refreshInterval`.
354
+ * @param props.signal - An AbortSignal that can be used to abort the request.
355
+ *
356
+ * @returns A SecurityScheme, which contains the necessary data for authentication.
357
+ */
358
+ type SecuritySchemeHandler = (props: {
359
+ isRefreshing: boolean;
360
+ signal: AbortSignal;
361
+ }) => SecurityScheme | Promise<SecurityScheme>;
362
+
363
+ export type SecuritySchemeHandlers<SecuritySchemeName extends string> = {
364
+ [key in SecuritySchemeName]: SecuritySchemeHandler;
365
+ };