fetchbasequery 0.0.2 → 0.1.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/README.md CHANGED
@@ -2,8 +2,21 @@
2
2
 
3
3
  Library for easily make HTTP queries without mass of boilerplate code.
4
4
 
5
- Usage
6
- -----
5
+ ## Installation
6
+
7
+ NPM:
8
+
9
+ ```sh
10
+ npm install fetchbasequery
11
+ ```
12
+
13
+ PNPM:
14
+
15
+ ```sh
16
+ pnpm add fetchbasequery
17
+ ```
18
+
19
+ ## Usage
7
20
 
8
21
  Build base query function:
9
22
 
@@ -11,14 +24,21 @@ Build base query function:
11
24
  import fetchBaseQuery, { baseQuery, encodeBody, accessToken, jsonReply, commonReply } from 'fetchbasequery'
12
25
 
13
26
  const query = fetchBaseQuery({
27
+ // main options ...
14
28
  baseUrl: 'https://api.example.org/v1'
15
29
  baseQuery,
16
30
  logErrors: true,
31
+ // add some defaults for `fetch()` ...
32
+ mode: 'cors',
33
+ credentials: 'include',
34
+ cache: 'reload',
35
+ // middlewares
17
36
  middleware: [
18
37
  encodeBody(),
19
38
  accessToken({
20
39
  getAccessToken: () => localStorage.getItem('access_token'),
21
40
  setAccessToken: (token) => localStorage.setItem('access_token', token),
41
+ removeAccessToken: (token) => localStorage.removeItem('access_token'),
22
42
  getUpdatedAccessToken: async (response) => response.headers.get('X-Access-Token')
23
43
  }),
24
44
  jsonReply(),
@@ -54,3 +74,7 @@ addEventListener('fetch', evt => {
54
74
  It works fine both on frontend and backend sides. For backend side usage Node.js v18+ is required,
55
75
  because the middleware `baseQuery` based on `Fetch API`. But it can be replaced with your own
56
76
  implementation based on another API (e.g. based on `axios` etc).
77
+
78
+ ## License
79
+
80
+ MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fetchbasequery",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "Library for easily make HTTP queries without mass of boilerplate code.",
5
5
  "type": "module",
6
6
  "main": "src/fetchBaseQuery.js",
package/src/baseQuery.js CHANGED
@@ -16,12 +16,6 @@ export default async ({ url: endpoint, request: subject, ...options } = {}) => {
16
16
  : undefined,
17
17
  ...options
18
18
  }
19
- // default options for `fetch()`
20
- const defaultFetchOptions = {
21
- method: 'GET',
22
- cache: 'reload',
23
- credentials: 'include',
24
- }
25
19
  // extract options which are known by `fetch()`
26
20
  const { method, headers, body, mode, credentials, cache, redirect,
27
21
  referrer, referrerPolicy, integrity, keepalive, signal } = restOptions
@@ -51,10 +45,10 @@ export default async ({ url: endpoint, request: subject, ...options } = {}) => {
51
45
  }
52
46
  subject = url
53
47
  }
54
- request = new Request(subject, {
55
- ...defaultFetchOptions,
56
- ...fetchOptions
57
- })
48
+ request = new Request(subject, fetchOptions)
49
+ if (debug?.baseQuery) {
50
+ console.log(moduleName, { request })
51
+ }
58
52
  response = await fetch(request)
59
53
  } catch (error) {
60
54
  if (logErrors) {
@@ -63,7 +57,7 @@ export default async ({ url: endpoint, request: subject, ...options } = {}) => {
63
57
  response = responseFromError(error)
64
58
  }
65
59
  if (debug?.baseQuery) {
66
- console.log(moduleName, response)
60
+ console.log(moduleName, { response })
67
61
  }
68
62
  return response
69
63
  }
@@ -7,12 +7,14 @@ export default (settings = {}) => query => async ({ payload, headers, ...options
7
7
  const {
8
8
  getAccessToken,
9
9
  setAccessToken,
10
+ removeAccessToken,
10
11
  isUnauthorized,
11
12
  getUpdatedAccessToken,
12
13
  getAuthorizationHeaders
13
14
  } = {
14
15
  getAccessToken: (payload) => undefined,
15
16
  setAccessToken: (token) => {},
17
+ removeAccessToken: () => {},
16
18
  isUnauthorized: (response) => response.status === 401,
17
19
  getUpdatedAccessToken: async (response) => undefined,
18
20
  getAuthorizationHeaders: (accessToken) => (
@@ -39,7 +41,7 @@ export default (settings = {}) => query => async ({ payload, headers, ...options
39
41
  }
40
42
  try {
41
43
  if (isUnauthorized(response)) {
42
- setAccessToken(null) // special case to remove access token from storage
44
+ removeAccessToken()
43
45
  } else {
44
46
  const updatedAccessToken = await getUpdatedAccessToken(response)
45
47
  if (updatedAccessToken) {
@@ -53,7 +55,7 @@ export default (settings = {}) => query => async ({ payload, headers, ...options
53
55
  response = responseFromError(error)
54
56
  }
55
57
  if (options.debug?.accessToken) {
56
- console.log(moduleName, response)
58
+ console.log(moduleName, { response })
57
59
  }
58
60
  return response
59
61
  }
@@ -17,7 +17,7 @@ export default () => query => async (options) => {
17
17
  reply = { status, headers }
18
18
  }
19
19
  if (options.debug?.commonReply) {
20
- console.log(moduleName, reply)
20
+ console.log(moduleName, { reply })
21
21
  }
22
22
  return reply
23
23
  }
@@ -76,7 +76,7 @@ export default (settings = {}) => (query) => async ({ body, headers, ...options
76
76
  response = responseFromError(error)
77
77
  }
78
78
  if (options.debug?.encodeBody) {
79
- console.log(moduleName, response)
79
+ console.log(moduleName, { response })
80
80
  }
81
81
  return response
82
82
  }
@@ -29,7 +29,7 @@ export default (settings = {}) => query => async (options = {}) => {
29
29
  }
30
30
  }
31
31
  if (options.debug?.jsonReply) {
32
- console.log(moduleName, reply)
32
+ console.log(moduleName, { reply })
33
33
  }
34
34
  return reply
35
35
  }