@molecule/app-http-axios 1.0.3 → 1.0.5
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 +73 -17
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +7 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +19 -8
- package/dist/provider.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,20 +3,26 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
|
|
|
3
3
|
Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
|
|
4
4
|
Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
|
|
5
5
|
To change this document, edit the module-level JSDoc in src/index.ts.
|
|
6
|
-
Generated: 2026-10-
|
|
6
|
+
Generated: 2026-10-17T07:40:43.120Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/app-http-axios
|
|
10
10
|
|
|
11
|
-
> **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
|
|
12
|
-
> It is written to be read by coding agents as much as by people, and is generated from this
|
|
13
|
-
> package's source — edit `src/index.ts` JSDoc, not this file.
|
|
14
|
-
|
|
15
11
|
Axios HTTP client provider for `@molecule/app-http`.
|
|
16
12
|
|
|
17
13
|
This package provides an Axios-based implementation of the molecule HttpClient interface,
|
|
18
14
|
allowing you to use molecule's HTTP abstractions with Axios.
|
|
19
15
|
|
|
16
|
+
**The body is the SECOND argument: `post(url, data, config?)` — likewise `put` and `patch`.**
|
|
17
|
+
`data` IS the request body, so `post(url, { data: body })` sends the JSON body
|
|
18
|
+
`{"data":body}`, not `body`, and the API finds none of its fields at the top level (it
|
|
19
|
+
answers `422 {"errors":{"username":["can't be blank"],…}}`). Write `post('/users', { user })`,
|
|
20
|
+
never `post('/users', { data: { user } })`; a config (headers, params) is the THIRD argument.
|
|
21
|
+
|
|
22
|
+
> **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
|
|
23
|
+
> It is written to be read by coding agents as much as by people, and is generated from this
|
|
24
|
+
> package's source — edit `src/index.ts` JSDoc, not this file.
|
|
25
|
+
|
|
20
26
|
## Quick Start
|
|
21
27
|
|
|
22
28
|
```ts
|
|
@@ -76,6 +82,17 @@ interface AxiosHttpClientConfig {
|
|
|
76
82
|
*/
|
|
77
83
|
withCredentials?: boolean
|
|
78
84
|
|
|
85
|
+
/**
|
|
86
|
+
* The scheme of the `Authorization` header the auth token is sent with:
|
|
87
|
+
* `Bearer` (default), or what your API expects, e.g. `Token` for an API that
|
|
88
|
+
* reads `Authorization: Token <jwt>`. Pass it to this config, at construction —
|
|
89
|
+
* `setClient(createAxiosClient({ baseURL, authScheme: 'Token' }))` — never as a
|
|
90
|
+
* property of the client it returns. Same option as `@molecule/app-http`'s
|
|
91
|
+
* `HttpClientConfig.authScheme`, so the config reads the same whichever
|
|
92
|
+
* transport is bonded.
|
|
93
|
+
*/
|
|
94
|
+
authScheme?: string
|
|
95
|
+
|
|
79
96
|
/**
|
|
80
97
|
* Existing Axios instance to wrap (optional).
|
|
81
98
|
*/
|
|
@@ -105,7 +122,8 @@ interface HttpClient {
|
|
|
105
122
|
*/
|
|
106
123
|
defaultHeaders: Record<string, string>
|
|
107
124
|
/**
|
|
108
|
-
* Makes a generic HTTP request.
|
|
125
|
+
* Makes a generic HTTP request. `data` is a field of THIS config object — the same body
|
|
126
|
+
* `post(url, data, config)` takes as its second argument.
|
|
109
127
|
*/
|
|
110
128
|
request<T = unknown>(config: FullRequestConfig): Promise<HttpResponse<T>>
|
|
111
129
|
/**
|
|
@@ -113,15 +131,19 @@ interface HttpClient {
|
|
|
113
131
|
*/
|
|
114
132
|
get<T = unknown>(url: string, config?: RequestConfig): Promise<HttpResponse<T>>
|
|
115
133
|
/**
|
|
116
|
-
* Makes a POST request.
|
|
134
|
+
* Makes a POST request. `data` is the request BODY, not a config object: the wire body is
|
|
135
|
+
* `data` itself, so `post(url, { data: body })` sends `{"data":body}` — pass `body` directly.
|
|
136
|
+
* A config (headers, params) is the THIRD argument.
|
|
117
137
|
*/
|
|
118
138
|
post<T = unknown>(url: string, data?: unknown, config?: RequestConfig): Promise<HttpResponse<T>>
|
|
119
139
|
/**
|
|
120
|
-
* Makes a PUT request.
|
|
140
|
+
* Makes a PUT request. `data` is the request BODY (second argument) — never `{ data: body }`,
|
|
141
|
+
* which sends `{"data":body}`; a config is the THIRD argument.
|
|
121
142
|
*/
|
|
122
143
|
put<T = unknown>(url: string, data?: unknown, config?: RequestConfig): Promise<HttpResponse<T>>
|
|
123
144
|
/**
|
|
124
|
-
* Makes a PATCH request.
|
|
145
|
+
* Makes a PATCH request. `data` is the request BODY (second argument) — never `{ data: body }`,
|
|
146
|
+
* which sends `{"data":body}`; a config is the THIRD argument.
|
|
125
147
|
*/
|
|
126
148
|
patch<T = unknown>(url: string, data?: unknown, config?: RequestConfig): Promise<HttpResponse<T>>
|
|
127
149
|
/**
|
|
@@ -185,7 +207,10 @@ interface HttpClientConfig {
|
|
|
185
207
|
/**
|
|
186
208
|
* The scheme of the `Authorization` header the auth token is sent with:
|
|
187
209
|
* `Bearer` (default), or what your API expects, e.g. `Token` for an API that
|
|
188
|
-
* reads `Authorization: Token <jwt>`.
|
|
210
|
+
* reads `Authorization: Token <jwt>`. It is an option of the client's
|
|
211
|
+
* CONSTRUCTOR (`createFetchClient({ baseURL, authScheme: 'Token' })`, or the
|
|
212
|
+
* bonded provider's `createAxiosClient({ … })`), never a property of the client
|
|
213
|
+
* it returns.
|
|
189
214
|
*/
|
|
190
215
|
authScheme?: string
|
|
191
216
|
}
|
|
@@ -195,7 +220,7 @@ interface HttpClientConfig {
|
|
|
195
220
|
|
|
196
221
|
HTTP request options (headers, query params, timeout, credentials, response type, abort signal).
|
|
197
222
|
|
|
198
|
-
|
|
223
|
+
````typescript
|
|
199
224
|
interface RequestConfig {
|
|
200
225
|
/**
|
|
201
226
|
* Request headers.
|
|
@@ -213,6 +238,25 @@ interface RequestConfig {
|
|
|
213
238
|
* Whether to include credentials (cookies).
|
|
214
239
|
*/
|
|
215
240
|
withCredentials?: boolean
|
|
241
|
+
/**
|
|
242
|
+
* Send this request WITHOUT waiting for the session restore (the auth gate).
|
|
243
|
+
*
|
|
244
|
+
* A request the gate itself depends on must set this. A gate registered with
|
|
245
|
+
* `setAuthGate` that waits for a session restore whose own request goes through this
|
|
246
|
+
* client otherwise waits on itself: the gate holds the restore's request, the restore's
|
|
247
|
+
* promise never settles, and every request on the page stalls until the gate times out —
|
|
248
|
+
* so pass `skipAuthGate: true` on the restore's own request:
|
|
249
|
+
*
|
|
250
|
+
* ```typescript
|
|
251
|
+
* // the request the gate's restore makes, through the same client the gate holds back
|
|
252
|
+
* await http.get(currentUserEndpoint, { skipAuthGate: true })
|
|
253
|
+
* ```
|
|
254
|
+
*
|
|
255
|
+
* `@molecule/app-auth`'s own restore does not need it — it sends its request with
|
|
256
|
+
* `fetch`, not through this client. An app with its own session store that registers a
|
|
257
|
+
* gate with `setAuthGate` does.
|
|
258
|
+
*/
|
|
259
|
+
skipAuthGate?: boolean
|
|
216
260
|
/**
|
|
217
261
|
* Response type.
|
|
218
262
|
*/
|
|
@@ -222,7 +266,11 @@ interface RequestConfig {
|
|
|
222
266
|
*/
|
|
223
267
|
signal?: AbortSignal
|
|
224
268
|
/**
|
|
225
|
-
* Request body data
|
|
269
|
+
* Request body data, as a field of THIS config object — the `request({ method, url, data })`
|
|
270
|
+
* form. The verb methods take the body as their SECOND argument: `post(url, data, config)`,
|
|
271
|
+
* `put(url, data, config)`, `patch(url, data, config)`. Never wrap it there as
|
|
272
|
+
* `{ data: body }`: that object is the body, so the wire sends `{"data":body}` and the API
|
|
273
|
+
* sees none of the fields at its top level.
|
|
226
274
|
*/
|
|
227
275
|
data?: unknown
|
|
228
276
|
/**
|
|
@@ -230,7 +278,7 @@ interface RequestConfig {
|
|
|
230
278
|
*/
|
|
231
279
|
options?: Record<string, unknown>
|
|
232
280
|
}
|
|
233
|
-
|
|
281
|
+
````
|
|
234
282
|
|
|
235
283
|
#### `FullRequestConfig`
|
|
236
284
|
|
|
@@ -247,7 +295,7 @@ interface FullRequestConfig extends RequestConfig {
|
|
|
247
295
|
*/
|
|
248
296
|
url: string
|
|
249
297
|
/**
|
|
250
|
-
* Request body data.
|
|
298
|
+
* Request body data — a field of this config object, never a second argument here.
|
|
251
299
|
*/
|
|
252
300
|
data?: unknown
|
|
253
301
|
}
|
|
@@ -358,7 +406,7 @@ Supports request/response/error interceptors, auth token management, and 401 err
|
|
|
358
406
|
function createAxiosClient(config?: AxiosHttpClientConfig): HttpClient
|
|
359
407
|
```
|
|
360
408
|
|
|
361
|
-
- `config` — Axios client configuration (base URL, headers, timeout, credentials, or an existing Axios instance).
|
|
409
|
+
- `config` — Axios client configuration (base URL, headers, timeout, credentials, auth scheme, or an existing Axios instance).
|
|
362
410
|
|
|
363
411
|
**Returns:** An `HttpClient` backed by Axios with interceptor and auth token support.
|
|
364
412
|
|
|
@@ -381,11 +429,11 @@ Implements `@molecule/app-http` interface.
|
|
|
381
429
|
Setup function to register this provider with the core interface:
|
|
382
430
|
|
|
383
431
|
```typescript
|
|
384
|
-
import {
|
|
432
|
+
import { setClient } from '@molecule/app-http'
|
|
385
433
|
import { provider } from '@molecule/app-http-axios'
|
|
386
434
|
|
|
387
435
|
export function setupHttpAxios(): void {
|
|
388
|
-
|
|
436
|
+
setClient(provider)
|
|
389
437
|
}
|
|
390
438
|
```
|
|
391
439
|
|
|
@@ -412,6 +460,14 @@ Peer dependencies:
|
|
|
412
460
|
- The exported `provider` constant is a pre-built default client (no baseURL,
|
|
413
461
|
30 s timeout); prefer `createAxiosClient({...})` so baseURL/credentials are
|
|
414
462
|
explicit.
|
|
463
|
+
- An API whose scheme is not `Bearer` (`Authorization: Token <jwt>`) passes
|
|
464
|
+
`authScheme: 'Token'` to THIS package's constructor —
|
|
465
|
+
`setClient(createAxiosClient({ baseURL, authScheme: 'Token' }))` — and the auth
|
|
466
|
+
token is then sent with that scheme. It is NOT a property of the client
|
|
467
|
+
`setClient()`/`getClient()` hands around: that is a built `HttpClient`, and
|
|
468
|
+
`client.authScheme = 'Token'` is a type error that changes no header. The option
|
|
469
|
+
name is the same one `@molecule/app-http`'s `HttpClientConfig` declares, so the
|
|
470
|
+
config reads the same whichever transport is bonded.
|
|
415
471
|
- `instance`/`axiosConfig` accept raw Axios options — anything the app sets
|
|
416
472
|
there couples it to Axios; keep app code on the `@molecule/app-http`
|
|
417
473
|
interface so the bond stays swappable.
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
* This package provides an Axios-based implementation of the molecule HttpClient interface,
|
|
5
5
|
* allowing you to use molecule's HTTP abstractions with Axios.
|
|
6
6
|
*
|
|
7
|
+
* **The body is the SECOND argument: `post(url, data, config?)` — likewise `put` and `patch`.**
|
|
8
|
+
* `data` IS the request body, so `post(url, { data: body })` sends the JSON body
|
|
9
|
+
* `{"data":body}`, not `body`, and the API finds none of its fields at the top level (it
|
|
10
|
+
* answers `422 {"errors":{"username":["can't be blank"],…}}`). Write `post('/users', { user })`,
|
|
11
|
+
* never `post('/users', { data: { user } })`; a config (headers, params) is the THIRD argument.
|
|
12
|
+
*
|
|
7
13
|
* @module `@molecule/app-http-axios`
|
|
8
14
|
*
|
|
9
15
|
* @example
|
|
@@ -34,6 +40,14 @@
|
|
|
34
40
|
* - The exported `provider` constant is a pre-built default client (no baseURL,
|
|
35
41
|
* 30 s timeout); prefer `createAxiosClient({...})` so baseURL/credentials are
|
|
36
42
|
* explicit.
|
|
43
|
+
* - An API whose scheme is not `Bearer` (`Authorization: Token <jwt>`) passes
|
|
44
|
+
* `authScheme: 'Token'` to THIS package's constructor —
|
|
45
|
+
* `setClient(createAxiosClient({ baseURL, authScheme: 'Token' }))` — and the auth
|
|
46
|
+
* token is then sent with that scheme. It is NOT a property of the client
|
|
47
|
+
* `setClient()`/`getClient()` hands around: that is a built `HttpClient`, and
|
|
48
|
+
* `client.authScheme = 'Token'` is a type error that changes no header. The option
|
|
49
|
+
* name is the same one `@molecule/app-http`'s `HttpClientConfig` declares, so the
|
|
50
|
+
* config reads the same whichever transport is bonded.
|
|
37
51
|
* - `instance`/`axiosConfig` accept raw Axios options — anything the app sets
|
|
38
52
|
* there couples it to Axios; keep app code on the `@molecule/app-http`
|
|
39
53
|
* interface so the bond stays swappable.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
* This package provides an Axios-based implementation of the molecule HttpClient interface,
|
|
5
5
|
* allowing you to use molecule's HTTP abstractions with Axios.
|
|
6
6
|
*
|
|
7
|
+
* **The body is the SECOND argument: `post(url, data, config?)` — likewise `put` and `patch`.**
|
|
8
|
+
* `data` IS the request body, so `post(url, { data: body })` sends the JSON body
|
|
9
|
+
* `{"data":body}`, not `body`, and the API finds none of its fields at the top level (it
|
|
10
|
+
* answers `422 {"errors":{"username":["can't be blank"],…}}`). Write `post('/users', { user })`,
|
|
11
|
+
* never `post('/users', { data: { user } })`; a config (headers, params) is the THIRD argument.
|
|
12
|
+
*
|
|
7
13
|
* @module `@molecule/app-http-axios`
|
|
8
14
|
*
|
|
9
15
|
* @example
|
|
@@ -34,6 +40,14 @@
|
|
|
34
40
|
* - The exported `provider` constant is a pre-built default client (no baseURL,
|
|
35
41
|
* 30 s timeout); prefer `createAxiosClient({...})` so baseURL/credentials are
|
|
36
42
|
* explicit.
|
|
43
|
+
* - An API whose scheme is not `Bearer` (`Authorization: Token <jwt>`) passes
|
|
44
|
+
* `authScheme: 'Token'` to THIS package's constructor —
|
|
45
|
+
* `setClient(createAxiosClient({ baseURL, authScheme: 'Token' }))` — and the auth
|
|
46
|
+
* token is then sent with that scheme. It is NOT a property of the client
|
|
47
|
+
* `setClient()`/`getClient()` hands around: that is a built `HttpClient`, and
|
|
48
|
+
* `client.authScheme = 'Token'` is a type error that changes no header. The option
|
|
49
|
+
* name is the same one `@molecule/app-http`'s `HttpClientConfig` declares, so the
|
|
50
|
+
* config reads the same whichever transport is bonded.
|
|
37
51
|
* - `instance`/`axiosConfig` accept raw Axios options — anything the app sets
|
|
38
52
|
* there couples it to Axios; keep app code on the `@molecule/app-http`
|
|
39
53
|
* interface so the bond stays swappable.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -22,7 +22,13 @@ import type { AxiosHttpClientConfig, HttpClient } from './types.js';
|
|
|
22
22
|
* const response = await client.get('/users')
|
|
23
23
|
* ```
|
|
24
24
|
*
|
|
25
|
-
*
|
|
25
|
+
* An API that reads another scheme than `Bearer` (`Authorization: Token <jwt>`) passes
|
|
26
|
+
* `authScheme: 'Token'` HERE, in this constructor —
|
|
27
|
+
* `setClient(createAxiosClient({ baseURL, authScheme: 'Token' }))` — and the auth token is
|
|
28
|
+
* then sent with that scheme. It is the same option `@molecule/app-http`'s own client
|
|
29
|
+
* takes, and not a property of the client you pass to `setClient()`.
|
|
30
|
+
*
|
|
31
|
+
* @param config - Axios client configuration (base URL, headers, timeout, credentials, auth scheme, or an existing Axios instance).
|
|
26
32
|
* @returns An `HttpClient` backed by Axios with interceptor and auth token support.
|
|
27
33
|
*/
|
|
28
34
|
export declare function createAxiosClient(config?: AxiosHttpClientConfig): HttpClient;
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EACV,qBAAqB,EAGrB,UAAU,EAKX,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EACV,qBAAqB,EAGrB,UAAU,EAKX,MAAM,YAAY,CAAA;AA8DnB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,qBAA0B,GAAG,UAAU,CA2QhF;AAED,+FAA+F;AAC/F,eAAO,MAAM,QAAQ,YAAsB,CAAA"}
|
package/dist/provider.js
CHANGED
|
@@ -21,6 +21,8 @@ function toAxiosConfig(config) {
|
|
|
21
21
|
signal: config.signal,
|
|
22
22
|
data: config.data,
|
|
23
23
|
...config.options,
|
|
24
|
+
// After `config.options`, so the documented option wins over an implementation-specific one.
|
|
25
|
+
skipAuthGate: config.skipAuthGate,
|
|
24
26
|
};
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
@@ -69,11 +71,17 @@ function toHttpResponse(response, config) {
|
|
|
69
71
|
* const response = await client.get('/users')
|
|
70
72
|
* ```
|
|
71
73
|
*
|
|
72
|
-
*
|
|
74
|
+
* An API that reads another scheme than `Bearer` (`Authorization: Token <jwt>`) passes
|
|
75
|
+
* `authScheme: 'Token'` HERE, in this constructor —
|
|
76
|
+
* `setClient(createAxiosClient({ baseURL, authScheme: 'Token' }))` — and the auth token is
|
|
77
|
+
* then sent with that scheme. It is the same option `@molecule/app-http`'s own client
|
|
78
|
+
* takes, and not a property of the client you pass to `setClient()`.
|
|
79
|
+
*
|
|
80
|
+
* @param config - Axios client configuration (base URL, headers, timeout, credentials, auth scheme, or an existing Axios instance).
|
|
73
81
|
* @returns An `HttpClient` backed by Axios with interceptor and auth token support.
|
|
74
82
|
*/
|
|
75
83
|
export function createAxiosClient(config = {}) {
|
|
76
|
-
const { baseURL = '', defaultHeaders = {}, timeout = 30000, withCredentials = false, instance: existingInstance, axiosConfig = {}, } = config;
|
|
84
|
+
const { baseURL = '', defaultHeaders = {}, timeout = 30000, withCredentials = false, authScheme = 'Bearer', instance: existingInstance, axiosConfig = {}, } = config;
|
|
77
85
|
// Create or use existing Axios instance
|
|
78
86
|
const axiosInstance = existingInstance ??
|
|
79
87
|
axios.create({
|
|
@@ -92,10 +100,6 @@ export function createAxiosClient(config = {}) {
|
|
|
92
100
|
const currentDefaultHeaders = { ...defaultHeaders };
|
|
93
101
|
// Add Axios request interceptor to run molecule interceptors
|
|
94
102
|
axiosInstance.interceptors.request.use(async (axiosConfig) => {
|
|
95
|
-
// Wait for the session restore first — every method on this client goes through
|
|
96
|
-
// here, so a request fired by a page effect before the restore settled cannot
|
|
97
|
-
// leave unauthenticated (see `@molecule/app-http` `auth-gate.ts`).
|
|
98
|
-
await awaitAuthGate();
|
|
99
103
|
let config = {
|
|
100
104
|
method: axiosConfig.method?.toUpperCase() ?? 'GET',
|
|
101
105
|
url: axiosConfig.url ?? '',
|
|
@@ -104,7 +108,14 @@ export function createAxiosClient(config = {}) {
|
|
|
104
108
|
timeout: axiosConfig.timeout,
|
|
105
109
|
withCredentials: axiosConfig.withCredentials,
|
|
106
110
|
data: axiosConfig.data,
|
|
111
|
+
skipAuthGate: axiosConfig.skipAuthGate,
|
|
107
112
|
};
|
|
113
|
+
// Wait for the session restore first — every method on this client goes through
|
|
114
|
+
// here, so a request fired by a page effect before the restore settled cannot
|
|
115
|
+
// leave unauthenticated (see `@molecule/app-http` `auth-gate.ts`). The config goes with
|
|
116
|
+
// it so a request the gate itself depends on can opt out (`skipAuthGate`) and a stalled
|
|
117
|
+
// gate can name what it held.
|
|
118
|
+
await awaitAuthGate(config);
|
|
108
119
|
// Run request interceptors
|
|
109
120
|
for (const interceptor of requestInterceptors) {
|
|
110
121
|
config = await interceptor(config);
|
|
@@ -261,8 +272,8 @@ export function createAxiosClient(config = {}) {
|
|
|
261
272
|
setAuthToken(token) {
|
|
262
273
|
authToken = token;
|
|
263
274
|
if (token) {
|
|
264
|
-
axiosInstance.defaults.headers.common['Authorization'] =
|
|
265
|
-
currentDefaultHeaders['Authorization'] =
|
|
275
|
+
axiosInstance.defaults.headers.common['Authorization'] = `${authScheme} ${token}`;
|
|
276
|
+
currentDefaultHeaders['Authorization'] = `${authScheme} ${token}`;
|
|
266
277
|
}
|
|
267
278
|
else {
|
|
268
279
|
delete axiosInstance.defaults.headers.common['Authorization'];
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAMN,MAAM,OAAO,CAAA;AAEd,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAYlD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -26,6 +26,16 @@ export interface AxiosHttpClientConfig {
|
|
|
26
26
|
* Whether to include credentials by default.
|
|
27
27
|
*/
|
|
28
28
|
withCredentials?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* The scheme of the `Authorization` header the auth token is sent with:
|
|
31
|
+
* `Bearer` (default), or what your API expects, e.g. `Token` for an API that
|
|
32
|
+
* reads `Authorization: Token <jwt>`. Pass it to this config, at construction —
|
|
33
|
+
* `setClient(createAxiosClient({ baseURL, authScheme: 'Token' }))` — never as a
|
|
34
|
+
* property of the client it returns. Same option as `@molecule/app-http`'s
|
|
35
|
+
* `HttpClientConfig.authScheme`, so the config reads the same whichever
|
|
36
|
+
* transport is bonded.
|
|
37
|
+
*/
|
|
38
|
+
authScheme?: string;
|
|
29
39
|
/**
|
|
30
40
|
* Existing Axios instance to wrap (optional).
|
|
31
41
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAG9D,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAA;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACjC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAG9D,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAA;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACjC"}
|