@fgrzl/fetch 1.0.0-ci.11 → 1.1.0-alpha.10
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 +63 -39
- package/dist/cjs/index.js +1123 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/index.min.js +2 -0
- package/dist/cjs/index.min.js.map +1 -0
- package/dist/index.d.ts +1435 -2
- package/dist/index.js +1076 -16
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/package.json +57 -13
- package/dist/client.d.ts +0 -18
- package/dist/client.js +0 -53
- package/dist/client.js.map +0 -1
- package/dist/csrf.d.ts +0 -7
- package/dist/csrf.js +0 -26
- package/dist/csrf.js.map +0 -1
- package/dist/index.test.d.ts +0 -1
- package/dist/index.test.js +0 -51
- package/dist/index.test.js.map +0 -1
- package/dist/unauthorized.d.ts +0 -5
- package/dist/unauthorized.js +0 -16
- package/dist/unauthorized.js.map +0 -1
package/dist/client.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FetchClient = void 0;
|
|
4
|
-
class FetchClient {
|
|
5
|
-
constructor(config = {}) {
|
|
6
|
-
this.requestMiddlewares = [];
|
|
7
|
-
this.responseMiddlewares = [];
|
|
8
|
-
this.credentials = config.credentials ?? 'same-origin';
|
|
9
|
-
}
|
|
10
|
-
useRequestMiddleware(middleware) {
|
|
11
|
-
this.requestMiddlewares.push(middleware);
|
|
12
|
-
}
|
|
13
|
-
useResponseMiddleware(middleware) {
|
|
14
|
-
this.responseMiddlewares.push(middleware);
|
|
15
|
-
}
|
|
16
|
-
async request(url, init = {}) {
|
|
17
|
-
for (const mw of this.requestMiddlewares) {
|
|
18
|
-
[init, url] = await mw(init, url);
|
|
19
|
-
}
|
|
20
|
-
let res = await fetch(url, {
|
|
21
|
-
credentials: this.credentials,
|
|
22
|
-
...init,
|
|
23
|
-
});
|
|
24
|
-
for (const mw of this.responseMiddlewares) {
|
|
25
|
-
res = await mw(res);
|
|
26
|
-
}
|
|
27
|
-
if (!res.ok) {
|
|
28
|
-
const error = await res.json().catch(() => ({}));
|
|
29
|
-
throw error;
|
|
30
|
-
}
|
|
31
|
-
return res.json();
|
|
32
|
-
}
|
|
33
|
-
get(url) {
|
|
34
|
-
return this.request(url, { method: 'GET' });
|
|
35
|
-
}
|
|
36
|
-
post(url, body) {
|
|
37
|
-
return this.request(url, {
|
|
38
|
-
method: 'POST',
|
|
39
|
-
body: JSON.stringify(body),
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
put(url, body) {
|
|
43
|
-
return this.request(url, {
|
|
44
|
-
method: 'PUT',
|
|
45
|
-
body: JSON.stringify(body),
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
del(url) {
|
|
49
|
-
return this.request(url, { method: 'DELETE' });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.FetchClient = FetchClient;
|
|
53
|
-
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAUA,MAAa,WAAW;IAKtB,YAAY,SAA4B,EAAE;QAJlC,uBAAkB,GAAwB,EAAE,CAAC;QAC7C,wBAAmB,GAAyB,EAAE,CAAC;QAIrD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,aAAa,CAAC;IACzD,CAAC;IAEM,oBAAoB,CAAC,UAA6B;QACvD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAEM,qBAAqB,CAAC,UAA8B;QACzD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,GAAW,EACX,OAAoB,EAAE;QAEtB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,IAAI;SACR,CAAC,CAAC;QAEH,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1C,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAEM,GAAG,CAAI,GAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAEM,IAAI,CAAI,GAAW,EAAE,IAAS;QACnC,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YAC1B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAI,GAAW,EAAE,IAAS;QAClC,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YAC1B,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAI,GAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;CACF;AA/DD,kCA+DC"}
|
package/dist/csrf.d.ts
DELETED
package/dist/csrf.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useCSRF = useCSRF;
|
|
4
|
-
function csrfMiddleware(config) {
|
|
5
|
-
return async (req, url) => {
|
|
6
|
-
const cookie = document.cookie.match(new RegExp(`${config.cookieName}=([^;]+)`));
|
|
7
|
-
const token = cookie?.[1];
|
|
8
|
-
const headers = {
|
|
9
|
-
...req.headers,
|
|
10
|
-
'Content-Type': 'application/json',
|
|
11
|
-
...(token && { [config.headerName]: token }),
|
|
12
|
-
};
|
|
13
|
-
return [{ ...req, headers }, url];
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function useCSRF(client, config) {
|
|
17
|
-
client.useRequestMiddleware(csrfMiddleware(config));
|
|
18
|
-
client.useResponseMiddleware(async (res) => {
|
|
19
|
-
const csrfToken = res.headers.get(config.headerName);
|
|
20
|
-
if (csrfToken) {
|
|
21
|
-
document.cookie = `${config.cookieName}=${csrfToken}; path=/;`;
|
|
22
|
-
}
|
|
23
|
-
return res;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=csrf.js.map
|
package/dist/csrf.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.js","sourceRoot":"","sources":["../src/csrf.ts"],"names":[],"mappings":";;AAsBA,0BASC;AAxBD,SAAS,cAAc,CAAC,MAAkB;IACxC,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAClC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,UAAU,CAAC,CAC3C,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG;YACd,GAAG,GAAG,CAAC,OAAO;YACd,cAAc,EAAE,kBAAkB;YAClC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;SAC7C,CAAC;QACF,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,OAAO,CAAC,MAAmB,EAAE,MAAkB;IAC7D,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,WAAW,CAAC;QACjE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/index.test.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const vitest_1 = require("vitest");
|
|
4
|
-
const client_1 = require("./client");
|
|
5
|
-
(0, vitest_1.describe)('FetchClient', () => {
|
|
6
|
-
const mockFetch = vitest_1.vi.fn();
|
|
7
|
-
const originalFetch = globalThis.fetch;
|
|
8
|
-
(0, vitest_1.beforeEach)(() => {
|
|
9
|
-
vitest_1.vi.resetAllMocks();
|
|
10
|
-
globalThis.fetch = mockFetch;
|
|
11
|
-
});
|
|
12
|
-
(0, vitest_1.afterAll)(() => {
|
|
13
|
-
globalThis.fetch = originalFetch;
|
|
14
|
-
});
|
|
15
|
-
(0, vitest_1.it)('calls fetch with correct method and URL', async () => {
|
|
16
|
-
mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ message: 'ok' }), { status: 200 }));
|
|
17
|
-
const client = new client_1.FetchClient();
|
|
18
|
-
const result = await client.get('/test');
|
|
19
|
-
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledWith('/test', vitest_1.expect.objectContaining({ method: 'GET' }));
|
|
20
|
-
(0, vitest_1.expect)(result.message).toBe('ok');
|
|
21
|
-
});
|
|
22
|
-
(0, vitest_1.it)('applies request middleware', async () => {
|
|
23
|
-
const mw = async (req, url) => {
|
|
24
|
-
const headers = { ...req.headers, 'X-Test': '123' };
|
|
25
|
-
return [{ ...req, headers }, `${url}?extra=1`];
|
|
26
|
-
};
|
|
27
|
-
mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ done: true }), { status: 200 }));
|
|
28
|
-
const client = new client_1.FetchClient();
|
|
29
|
-
client.useRequestMiddleware(mw);
|
|
30
|
-
await client.get('/original');
|
|
31
|
-
(0, vitest_1.expect)(mockFetch).toHaveBeenCalledWith('/original?extra=1', vitest_1.expect.objectContaining({
|
|
32
|
-
headers: vitest_1.expect.objectContaining({ 'X-Test': '123' }),
|
|
33
|
-
}));
|
|
34
|
-
});
|
|
35
|
-
(0, vitest_1.it)('applies response middleware', async () => {
|
|
36
|
-
const mw = async (res) => {
|
|
37
|
-
return res;
|
|
38
|
-
};
|
|
39
|
-
mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ done: true }), { status: 200 }));
|
|
40
|
-
const client = new client_1.FetchClient();
|
|
41
|
-
client.useResponseMiddleware(mw);
|
|
42
|
-
const res = await client.get('/ok');
|
|
43
|
-
(0, vitest_1.expect)(res.done).toBe(true);
|
|
44
|
-
});
|
|
45
|
-
(0, vitest_1.it)('throws when response is not ok', async () => {
|
|
46
|
-
mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ error: 'fail' }), { status: 400 }));
|
|
47
|
-
const client = new client_1.FetchClient();
|
|
48
|
-
await (0, vitest_1.expect)(client.get('/bad')).rejects.toEqual({ error: 'fail' });
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/unauthorized.d.ts
DELETED
package/dist/unauthorized.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useUnauthorized = useUnauthorized;
|
|
4
|
-
function unauthorizedRedirectMiddleware(config) {
|
|
5
|
-
return async (res) => {
|
|
6
|
-
if (res.status === 401) {
|
|
7
|
-
const returnTo = encodeURIComponent(window.location.pathname + window.location.search);
|
|
8
|
-
window.location.href = `${config.loginPath}?returnTo=${returnTo}`;
|
|
9
|
-
}
|
|
10
|
-
return res;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
function useUnauthorized(client, config) {
|
|
14
|
-
client.useResponseMiddleware(unauthorizedRedirectMiddleware(config));
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=unauthorized.js.map
|
package/dist/unauthorized.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unauthorized.js","sourceRoot":"","sources":["../src/unauthorized.ts"],"names":[],"mappings":";;AAoBA,0CAKC;AAnBD,SAAS,8BAA8B,CACrC,MAA0B;IAE1B,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,kBAAkB,CACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAClD,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,aAAa,QAAQ,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAC7B,MAAmB,EACnB,MAA0B;IAE1B,MAAM,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;AACvE,CAAC"}
|