@nsxbet/react-relay-network-modern 1.0.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/LICENSE.md +10 -0
- package/README.md +324 -0
- package/dist/RRNLError.cjs +9 -0
- package/dist/RRNLError.d.cts +6 -0
- package/dist/RRNLError.d.ts +6 -0
- package/dist/RRNLError.js +9 -0
- package/dist/RelayNetworkLayer.cjs +54 -0
- package/dist/RelayNetworkLayer.d.cts +21 -0
- package/dist/RelayNetworkLayer.d.ts +21 -0
- package/dist/RelayNetworkLayer.js +54 -0
- package/dist/RelayRequest.cjs +90 -0
- package/dist/RelayRequest.d.cts +26 -0
- package/dist/RelayRequest.d.ts +26 -0
- package/dist/RelayRequest.js +90 -0
- package/dist/RelayRequestBatch.cjs +56 -0
- package/dist/RelayRequestBatch.d.cts +23 -0
- package/dist/RelayRequestBatch.d.ts +23 -0
- package/dist/RelayRequestBatch.js +56 -0
- package/dist/RelayResponse.cjs +56 -0
- package/dist/RelayResponse.d.cts +27 -0
- package/dist/RelayResponse.d.ts +27 -0
- package/dist/RelayResponse.js +56 -0
- package/dist/createRequestError.cjs +48 -0
- package/dist/createRequestError.d.cts +18 -0
- package/dist/createRequestError.d.ts +18 -0
- package/dist/createRequestError.js +46 -0
- package/dist/definition.d.cts +95 -0
- package/dist/definition.d.ts +95 -0
- package/dist/express-middleware/graphqlBatchHTTPWrapper.cjs +60 -0
- package/dist/express-middleware/graphqlBatchHTTPWrapper.d.cts +5 -0
- package/dist/express-middleware/graphqlBatchHTTPWrapper.d.ts +5 -0
- package/dist/express-middleware/graphqlBatchHTTPWrapper.js +60 -0
- package/dist/fetchWithMiddleware.cjs +43 -0
- package/dist/fetchWithMiddleware.js +43 -0
- package/dist/index.cjs +49 -0
- package/dist/index.d.cts +21 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +20 -0
- package/dist/middlewares/auth.cjs +47 -0
- package/dist/middlewares/auth.d.cts +18 -0
- package/dist/middlewares/auth.d.ts +18 -0
- package/dist/middlewares/auth.js +46 -0
- package/dist/middlewares/batch.cjs +136 -0
- package/dist/middlewares/batch.d.cts +34 -0
- package/dist/middlewares/batch.d.ts +34 -0
- package/dist/middlewares/batch.js +135 -0
- package/dist/middlewares/cache.cjs +43 -0
- package/dist/middlewares/cache.d.cts +17 -0
- package/dist/middlewares/cache.d.ts +17 -0
- package/dist/middlewares/cache.js +43 -0
- package/dist/middlewares/error.cjs +71 -0
- package/dist/middlewares/error.d.cts +11 -0
- package/dist/middlewares/error.d.ts +11 -0
- package/dist/middlewares/error.js +71 -0
- package/dist/middlewares/logger.cjs +43 -0
- package/dist/middlewares/logger.d.cts +9 -0
- package/dist/middlewares/logger.d.ts +9 -0
- package/dist/middlewares/logger.js +43 -0
- package/dist/middlewares/perf.cjs +13 -0
- package/dist/middlewares/perf.d.cts +9 -0
- package/dist/middlewares/perf.d.ts +9 -0
- package/dist/middlewares/perf.js +13 -0
- package/dist/middlewares/persistedQueries.cjs +33 -0
- package/dist/middlewares/persistedQueries.d.cts +9 -0
- package/dist/middlewares/persistedQueries.d.ts +9 -0
- package/dist/middlewares/persistedQueries.js +33 -0
- package/dist/middlewares/progress.cjs +35 -0
- package/dist/middlewares/progress.d.cts +10 -0
- package/dist/middlewares/progress.d.ts +10 -0
- package/dist/middlewares/progress.js +35 -0
- package/dist/middlewares/retry.cjs +146 -0
- package/dist/middlewares/retry.d.cts +34 -0
- package/dist/middlewares/retry.d.ts +34 -0
- package/dist/middlewares/retry.js +145 -0
- package/dist/middlewares/upload.cjs +32 -0
- package/dist/middlewares/upload.d.cts +6 -0
- package/dist/middlewares/upload.d.ts +6 -0
- package/dist/middlewares/upload.js +32 -0
- package/dist/middlewares/url.cjs +19 -0
- package/dist/middlewares/url.d.cts +19 -0
- package/dist/middlewares/url.d.ts +19 -0
- package/dist/middlewares/url.js +19 -0
- package/dist/utils.cjs +6 -0
- package/dist/utils.js +6 -0
- package/package.json +88 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { RelayRequest } from "./RelayRequest.js";
|
|
2
|
+
import { RelayRequestBatch } from "./RelayRequestBatch.js";
|
|
3
|
+
import { RelayResponse } from "./RelayResponse.js";
|
|
4
|
+
|
|
5
|
+
//#region src/definition.d.ts
|
|
6
|
+
type RelayRequestAny = RelayRequest | RelayRequestBatch;
|
|
7
|
+
type MiddlewareNextFn = (req: RelayRequestAny) => Promise<RelayResponse>;
|
|
8
|
+
type Middleware = (next: MiddlewareNextFn) => MiddlewareNextFn;
|
|
9
|
+
type MiddlewareRawNextFn = (req: RelayRequestAny) => Promise<FetchResponse>;
|
|
10
|
+
interface MiddlewareRaw {
|
|
11
|
+
(next: MiddlewareRawNextFn): MiddlewareRawNextFn;
|
|
12
|
+
isRawMiddleware: true;
|
|
13
|
+
}
|
|
14
|
+
interface MiddlewareSync {
|
|
15
|
+
execute: (operation: ConcreteBatch, variables: Variables, cacheConfig: CacheConfig, uploadables?: UploadableMap | null) => ObservableFromValue<QueryPayload> | null | undefined;
|
|
16
|
+
}
|
|
17
|
+
interface FetchOpts {
|
|
18
|
+
url?: string;
|
|
19
|
+
method: 'POST' | 'GET';
|
|
20
|
+
headers: {
|
|
21
|
+
[name: string]: string;
|
|
22
|
+
};
|
|
23
|
+
body: string | FormData;
|
|
24
|
+
credentials?: 'same-origin' | 'include' | 'omit';
|
|
25
|
+
mode?: 'cors' | 'websocket' | 'navigate' | 'no-cors' | 'same-origin';
|
|
26
|
+
cache?: 'default' | 'no-store' | 'reload' | 'no-cache' | 'force-cache' | 'only-if-cached';
|
|
27
|
+
redirect?: 'follow' | 'error' | 'manual';
|
|
28
|
+
signal?: AbortSignal;
|
|
29
|
+
[name: string]: unknown;
|
|
30
|
+
}
|
|
31
|
+
type FetchResponse = Response;
|
|
32
|
+
type GraphQLResponseErrors = Array<{
|
|
33
|
+
message: string;
|
|
34
|
+
locations?: Array<{
|
|
35
|
+
column: number;
|
|
36
|
+
line: number;
|
|
37
|
+
}>;
|
|
38
|
+
stack?: Array<string>;
|
|
39
|
+
}>;
|
|
40
|
+
interface GraphQLResponse {
|
|
41
|
+
data?: any;
|
|
42
|
+
errors?: GraphQLResponseErrors;
|
|
43
|
+
}
|
|
44
|
+
type RNLExecuteFunction = (operation: ConcreteBatch, variables: Variables, cacheConfig: CacheConfig, uploadables?: UploadableMap | null) => RelayObservable<QueryPayload>;
|
|
45
|
+
interface Variables {
|
|
46
|
+
[name: string]: any;
|
|
47
|
+
}
|
|
48
|
+
interface ConcreteBatch {
|
|
49
|
+
kind: 'Batch';
|
|
50
|
+
fragment: any;
|
|
51
|
+
id: string | null;
|
|
52
|
+
metadata: {
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
};
|
|
55
|
+
name: string;
|
|
56
|
+
query: any;
|
|
57
|
+
text: string | null;
|
|
58
|
+
operationKind: string;
|
|
59
|
+
}
|
|
60
|
+
interface CacheConfig {
|
|
61
|
+
force?: boolean | null;
|
|
62
|
+
poll?: number | null;
|
|
63
|
+
rerunParamExperimental?: any;
|
|
64
|
+
skipBatch?: boolean | null;
|
|
65
|
+
}
|
|
66
|
+
interface Disposable {
|
|
67
|
+
dispose(): void;
|
|
68
|
+
}
|
|
69
|
+
type Uploadable = File | Blob;
|
|
70
|
+
interface UploadableMap {
|
|
71
|
+
[key: string]: Uploadable;
|
|
72
|
+
}
|
|
73
|
+
interface PayloadData {
|
|
74
|
+
[key: string]: unknown;
|
|
75
|
+
}
|
|
76
|
+
type QueryPayload = {
|
|
77
|
+
data?: PayloadData | null;
|
|
78
|
+
errors?: Array<any>;
|
|
79
|
+
rerunVariables?: Variables;
|
|
80
|
+
} | RelayResponse;
|
|
81
|
+
type UnsubscribeFunction = () => void;
|
|
82
|
+
interface Sink<T> {
|
|
83
|
+
next: (value: T) => void;
|
|
84
|
+
complete: () => void;
|
|
85
|
+
error: (value: T) => void;
|
|
86
|
+
}
|
|
87
|
+
interface RelayObservable<T> {
|
|
88
|
+
subscribe: (sink: Sink<T>) => UnsubscribeFunction;
|
|
89
|
+
}
|
|
90
|
+
type ObservableFromValue<T> = RelayObservable<T> | Promise<T> | T;
|
|
91
|
+
type FetchFunction = (operation: ConcreteBatch, variables: Variables, cacheConfig: CacheConfig, uploadables?: UploadableMap | null) => ObservableFromValue<QueryPayload>;
|
|
92
|
+
type FetchHookFunction = (operation: ConcreteBatch, variables: Variables, cacheConfig: CacheConfig, uploadables?: UploadableMap | null) => void | ObservableFromValue<QueryPayload>;
|
|
93
|
+
type SubscribeFunction = (operation: ConcreteBatch, variables: Variables, cacheConfig: CacheConfig, observer: any) => RelayObservable<QueryPayload> | Disposable;
|
|
94
|
+
//#endregion
|
|
95
|
+
export { CacheConfig, ConcreteBatch, Disposable, FetchFunction, FetchHookFunction, FetchOpts, FetchResponse, GraphQLResponse, GraphQLResponseErrors, Middleware, MiddlewareNextFn, MiddlewareRaw, MiddlewareRawNextFn, MiddlewareSync, ObservableFromValue, PayloadData, QueryPayload, RNLExecuteFunction, RelayObservable, RelayRequestAny, SubscribeFunction, Uploadable, UploadableMap, Variables };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//#region src/express-middleware/graphqlBatchHTTPWrapper.ts
|
|
2
|
+
function graphqlBatchHTTPWrapper_default(graphqlHTTPMiddleware) {
|
|
3
|
+
return (req, res) => {
|
|
4
|
+
const subResponses = [];
|
|
5
|
+
return Promise.all(req.body.map((data) => new Promise((resolve) => {
|
|
6
|
+
const subRequest = {
|
|
7
|
+
__proto__: req.__proto__,
|
|
8
|
+
...req,
|
|
9
|
+
body: data
|
|
10
|
+
};
|
|
11
|
+
const subResponse = {
|
|
12
|
+
...res,
|
|
13
|
+
status(st) {
|
|
14
|
+
this.statusCode = st;
|
|
15
|
+
return this;
|
|
16
|
+
},
|
|
17
|
+
set() {
|
|
18
|
+
return this;
|
|
19
|
+
},
|
|
20
|
+
send(payload) {
|
|
21
|
+
resolve({
|
|
22
|
+
status: this.statusCode,
|
|
23
|
+
id: data.id,
|
|
24
|
+
payload
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
setHeader() {
|
|
28
|
+
return this;
|
|
29
|
+
},
|
|
30
|
+
header() {},
|
|
31
|
+
write(payload) {
|
|
32
|
+
this.payload = payload;
|
|
33
|
+
},
|
|
34
|
+
end(payload) {
|
|
35
|
+
if (payload) this.payload = payload;
|
|
36
|
+
resolve({
|
|
37
|
+
status: this.statusCode,
|
|
38
|
+
id: data.id,
|
|
39
|
+
payload: this.payload
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
subResponses.push(subResponse);
|
|
44
|
+
graphqlHTTPMiddleware(subRequest, subResponse);
|
|
45
|
+
}))).then((responses) => {
|
|
46
|
+
let response = "";
|
|
47
|
+
responses.forEach(({ status, id, payload }, idx) => {
|
|
48
|
+
if (status) res.status(status);
|
|
49
|
+
const comma = responses.length - 1 > idx ? "," : "";
|
|
50
|
+
response += `{ "id":"${id}", "payload":${payload} }${comma}`;
|
|
51
|
+
});
|
|
52
|
+
res.set("Content-Type", "application/json");
|
|
53
|
+
res.send(`[${response}]`);
|
|
54
|
+
}).catch((err) => {
|
|
55
|
+
res.status(500).send({ error: err.message });
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
exports.default = graphqlBatchHTTPWrapper_default;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//#region src/express-middleware/graphqlBatchHTTPWrapper.ts
|
|
2
|
+
function graphqlBatchHTTPWrapper_default(graphqlHTTPMiddleware) {
|
|
3
|
+
return (req, res) => {
|
|
4
|
+
const subResponses = [];
|
|
5
|
+
return Promise.all(req.body.map((data) => new Promise((resolve) => {
|
|
6
|
+
const subRequest = {
|
|
7
|
+
__proto__: req.__proto__,
|
|
8
|
+
...req,
|
|
9
|
+
body: data
|
|
10
|
+
};
|
|
11
|
+
const subResponse = {
|
|
12
|
+
...res,
|
|
13
|
+
status(st) {
|
|
14
|
+
this.statusCode = st;
|
|
15
|
+
return this;
|
|
16
|
+
},
|
|
17
|
+
set() {
|
|
18
|
+
return this;
|
|
19
|
+
},
|
|
20
|
+
send(payload) {
|
|
21
|
+
resolve({
|
|
22
|
+
status: this.statusCode,
|
|
23
|
+
id: data.id,
|
|
24
|
+
payload
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
setHeader() {
|
|
28
|
+
return this;
|
|
29
|
+
},
|
|
30
|
+
header() {},
|
|
31
|
+
write(payload) {
|
|
32
|
+
this.payload = payload;
|
|
33
|
+
},
|
|
34
|
+
end(payload) {
|
|
35
|
+
if (payload) this.payload = payload;
|
|
36
|
+
resolve({
|
|
37
|
+
status: this.statusCode,
|
|
38
|
+
id: data.id,
|
|
39
|
+
payload: this.payload
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
subResponses.push(subResponse);
|
|
44
|
+
graphqlHTTPMiddleware(subRequest, subResponse);
|
|
45
|
+
}))).then((responses) => {
|
|
46
|
+
let response = "";
|
|
47
|
+
responses.forEach(({ status, id, payload }, idx) => {
|
|
48
|
+
if (status) res.status(status);
|
|
49
|
+
const comma = responses.length - 1 > idx ? "," : "";
|
|
50
|
+
response += `{ "id":"${id}", "payload":${payload} }${comma}`;
|
|
51
|
+
});
|
|
52
|
+
res.set("Content-Type", "application/json");
|
|
53
|
+
res.send(`[${response}]`);
|
|
54
|
+
}).catch((err) => {
|
|
55
|
+
res.status(500).send({ error: err.message });
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { graphqlBatchHTTPWrapper_default as default };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const require_createRequestError = require("./createRequestError.cjs");
|
|
2
|
+
const require_RelayResponse = require("./RelayResponse.cjs");
|
|
3
|
+
//#region src/fetchWithMiddleware.ts
|
|
4
|
+
function runFetch(req) {
|
|
5
|
+
const fetchOpts = req.fetchOpts;
|
|
6
|
+
let { url } = fetchOpts;
|
|
7
|
+
if (!url) url = "/graphql";
|
|
8
|
+
if (!fetchOpts.headers.Accept) fetchOpts.headers.Accept = "*/*";
|
|
9
|
+
if (!fetchOpts.headers["Content-Type"] && !req.isFormData()) fetchOpts.headers["Content-Type"] = "application/json";
|
|
10
|
+
return fetch(url, fetchOpts);
|
|
11
|
+
}
|
|
12
|
+
const convertResponse = (next) => async (req) => {
|
|
13
|
+
const resFromFetch = await next(req);
|
|
14
|
+
const res = await require_RelayResponse.default.createFromFetch(resFromFetch);
|
|
15
|
+
if (res.status && res.status >= 400) throw require_createRequestError.createRequestError(req, res);
|
|
16
|
+
return res;
|
|
17
|
+
};
|
|
18
|
+
function fetchWithMiddleware(req, middlewares, rawFetchMiddlewares, noThrow) {
|
|
19
|
+
return compose(...middlewares, convertResponse, ...rawFetchMiddlewares)(runFetch)(req).then((res) => {
|
|
20
|
+
if (!noThrow && (!res || res.errors || !res.data)) throw require_createRequestError.createRequestError(req, res);
|
|
21
|
+
return res;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Composes single-argument functions from right to left. The rightmost
|
|
26
|
+
* function can take multiple arguments as it provides the signature for
|
|
27
|
+
* the resulting composite function.
|
|
28
|
+
*
|
|
29
|
+
* @param {...Function} funcs The functions to compose.
|
|
30
|
+
* @returns {Function} A function obtained by composing the argument functions
|
|
31
|
+
* from right to left. For example, compose(f, g, h) is identical to doing
|
|
32
|
+
* (...args) => f(g(h(...args))).
|
|
33
|
+
*/
|
|
34
|
+
function compose(...funcs) {
|
|
35
|
+
if (funcs.length === 0) return (arg) => arg;
|
|
36
|
+
else {
|
|
37
|
+
const last = funcs[funcs.length - 1];
|
|
38
|
+
const rest = funcs.slice(0, -1);
|
|
39
|
+
return (...args) => rest.reduceRight((composed, f) => f(composed), last(...args));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
exports.default = fetchWithMiddleware;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createRequestError } from "./createRequestError.js";
|
|
2
|
+
import RelayResponse from "./RelayResponse.js";
|
|
3
|
+
//#region src/fetchWithMiddleware.ts
|
|
4
|
+
function runFetch(req) {
|
|
5
|
+
const fetchOpts = req.fetchOpts;
|
|
6
|
+
let { url } = fetchOpts;
|
|
7
|
+
if (!url) url = "/graphql";
|
|
8
|
+
if (!fetchOpts.headers.Accept) fetchOpts.headers.Accept = "*/*";
|
|
9
|
+
if (!fetchOpts.headers["Content-Type"] && !req.isFormData()) fetchOpts.headers["Content-Type"] = "application/json";
|
|
10
|
+
return fetch(url, fetchOpts);
|
|
11
|
+
}
|
|
12
|
+
const convertResponse = (next) => async (req) => {
|
|
13
|
+
const resFromFetch = await next(req);
|
|
14
|
+
const res = await RelayResponse.createFromFetch(resFromFetch);
|
|
15
|
+
if (res.status && res.status >= 400) throw createRequestError(req, res);
|
|
16
|
+
return res;
|
|
17
|
+
};
|
|
18
|
+
function fetchWithMiddleware(req, middlewares, rawFetchMiddlewares, noThrow) {
|
|
19
|
+
return compose(...middlewares, convertResponse, ...rawFetchMiddlewares)(runFetch)(req).then((res) => {
|
|
20
|
+
if (!noThrow && (!res || res.errors || !res.data)) throw createRequestError(req, res);
|
|
21
|
+
return res;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Composes single-argument functions from right to left. The rightmost
|
|
26
|
+
* function can take multiple arguments as it provides the signature for
|
|
27
|
+
* the resulting composite function.
|
|
28
|
+
*
|
|
29
|
+
* @param {...Function} funcs The functions to compose.
|
|
30
|
+
* @returns {Function} A function obtained by composing the argument functions
|
|
31
|
+
* from right to left. For example, compose(f, g, h) is identical to doing
|
|
32
|
+
* (...args) => f(g(h(...args))).
|
|
33
|
+
*/
|
|
34
|
+
function compose(...funcs) {
|
|
35
|
+
if (funcs.length === 0) return (arg) => arg;
|
|
36
|
+
else {
|
|
37
|
+
const last = funcs[funcs.length - 1];
|
|
38
|
+
const rest = funcs.slice(0, -1);
|
|
39
|
+
return (...args) => rest.reduceRight((composed, f) => f(composed), last(...args));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { fetchWithMiddleware as default };
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_RRNLError = require("./RRNLError.cjs");
|
|
3
|
+
const require_RelayRequest = require("./RelayRequest.cjs");
|
|
4
|
+
const require_createRequestError = require("./createRequestError.cjs");
|
|
5
|
+
const require_RelayResponse = require("./RelayResponse.cjs");
|
|
6
|
+
const require_RelayNetworkLayer = require("./RelayNetworkLayer.cjs");
|
|
7
|
+
const require_RelayRequestBatch = require("./RelayRequestBatch.cjs");
|
|
8
|
+
const require_batch = require("./middlewares/batch.cjs");
|
|
9
|
+
const require_retry = require("./middlewares/retry.cjs");
|
|
10
|
+
const require_url = require("./middlewares/url.cjs");
|
|
11
|
+
const require_auth = require("./middlewares/auth.cjs");
|
|
12
|
+
const require_perf = require("./middlewares/perf.cjs");
|
|
13
|
+
const require_logger = require("./middlewares/logger.cjs");
|
|
14
|
+
const require_persistedQueries = require("./middlewares/persistedQueries.cjs");
|
|
15
|
+
const require_error = require("./middlewares/error.cjs");
|
|
16
|
+
const require_cache = require("./middlewares/cache.cjs");
|
|
17
|
+
const require_progress = require("./middlewares/progress.cjs");
|
|
18
|
+
const require_upload = require("./middlewares/upload.cjs");
|
|
19
|
+
const require_graphqlBatchHTTPWrapper = require("./express-middleware/graphqlBatchHTTPWrapper.cjs");
|
|
20
|
+
let relay_runtime = require("relay-runtime");
|
|
21
|
+
Object.defineProperty(exports, "QueryResponseCache", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function() {
|
|
24
|
+
return relay_runtime.QueryResponseCache;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
exports.RRNLAuthMiddlewareError = require_auth.RRNLAuthMiddlewareError;
|
|
28
|
+
exports.RRNLBatchMiddlewareError = require_batch.RRNLBatchMiddlewareError;
|
|
29
|
+
exports.RRNLError = require_RRNLError.default;
|
|
30
|
+
exports.RRNLRequestError = require_createRequestError.RRNLRequestError;
|
|
31
|
+
exports.RRNLRetryMiddlewareError = require_retry.RRNLRetryMiddlewareError;
|
|
32
|
+
exports.RelayNetworkLayer = require_RelayNetworkLayer.default;
|
|
33
|
+
exports.RelayNetworkLayerRequest = require_RelayRequest.default;
|
|
34
|
+
exports.RelayNetworkLayerRequestBatch = require_RelayRequestBatch.default;
|
|
35
|
+
exports.RelayNetworkLayerResponse = require_RelayResponse.default;
|
|
36
|
+
exports.authMiddleware = require_auth.default;
|
|
37
|
+
exports.batchMiddleware = require_batch.default;
|
|
38
|
+
exports.cacheMiddleware = require_cache.default;
|
|
39
|
+
exports.createRequestError = require_createRequestError.createRequestError;
|
|
40
|
+
exports.errorMiddleware = require_error.default;
|
|
41
|
+
exports.formatGraphQLErrors = require_createRequestError.formatGraphQLErrors;
|
|
42
|
+
exports.graphqlBatchHTTPWrapper = require_graphqlBatchHTTPWrapper.default;
|
|
43
|
+
exports.loggerMiddleware = require_logger.default;
|
|
44
|
+
exports.perfMiddleware = require_perf.default;
|
|
45
|
+
exports.persistedQueriesMiddleware = require_persistedQueries.default;
|
|
46
|
+
exports.progressMiddleware = require_progress.default;
|
|
47
|
+
exports.retryMiddleware = require_retry.default;
|
|
48
|
+
exports.uploadMiddleware = require_upload.default;
|
|
49
|
+
exports.urlMiddleware = require_url.default;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { RelayRequest } from "./RelayRequest.cjs";
|
|
2
|
+
import { RelayRequestBatch } from "./RelayRequestBatch.cjs";
|
|
3
|
+
import { RelayResponse } from "./RelayResponse.cjs";
|
|
4
|
+
import { CacheConfig, ConcreteBatch, Disposable, FetchFunction, FetchHookFunction, FetchOpts, FetchResponse, GraphQLResponse, GraphQLResponseErrors, Middleware, MiddlewareNextFn, MiddlewareRaw, MiddlewareRawNextFn, MiddlewareSync, ObservableFromValue, PayloadData, QueryPayload, RelayObservable, RelayRequestAny, SubscribeFunction, Uploadable, UploadableMap, Variables } from "./definition.cjs";
|
|
5
|
+
import { RelayNetworkLayer, RelayNetworkLayerOpts } from "./RelayNetworkLayer.cjs";
|
|
6
|
+
import { RRNLError } from "./RRNLError.cjs";
|
|
7
|
+
import { BatchMiddlewareOpts, RRNLBatchMiddlewareError, RequestWrapper, batchMiddleware } from "./middlewares/batch.cjs";
|
|
8
|
+
import { AbortFn, BeforeRetryCb, ForceRetryFn, RRNLRetryMiddlewareError, RetryAfterFn, RetryMiddlewareOpts, StatusCheckFn, retryMiddleware } from "./middlewares/retry.cjs";
|
|
9
|
+
import { UrlMiddlewareOpts, urlMiddleware } from "./middlewares/url.cjs";
|
|
10
|
+
import { AuthMiddlewareOpts, RRNLAuthMiddlewareError, authMiddleware } from "./middlewares/auth.cjs";
|
|
11
|
+
import { PerfMiddlewareOpts, performanceMiddleware } from "./middlewares/perf.cjs";
|
|
12
|
+
import { LoggerMiddlewareOpts, loggerMiddleware } from "./middlewares/logger.cjs";
|
|
13
|
+
import { PersistedQueriesMiddlewareOpts, persistedQueriesMiddleware } from "./middlewares/persistedQueries.cjs";
|
|
14
|
+
import { GqlErrorMiddlewareOpts, errorMiddleware } from "./middlewares/error.cjs";
|
|
15
|
+
import { CacheMiddlewareOpts, cacheMiddleware } from "./middlewares/cache.cjs";
|
|
16
|
+
import { ProgressOpts, progressMiddleware } from "./middlewares/progress.cjs";
|
|
17
|
+
import { uploadMiddleware } from "./middlewares/upload.cjs";
|
|
18
|
+
import { export_default } from "./express-middleware/graphqlBatchHTTPWrapper.cjs";
|
|
19
|
+
import { RRNLRequestError, createRequestError, formatGraphQLErrors } from "./createRequestError.cjs";
|
|
20
|
+
import { QueryResponseCache } from "relay-runtime";
|
|
21
|
+
export { type AbortFn, type AuthMiddlewareOpts, type BatchMiddlewareOpts, type BeforeRetryCb, type CacheConfig, type CacheMiddlewareOpts, type ConcreteBatch, type Disposable, type FetchFunction, type FetchHookFunction, type FetchOpts, type FetchResponse, type ForceRetryFn, type GqlErrorMiddlewareOpts, type GraphQLResponse, type GraphQLResponseErrors, type LoggerMiddlewareOpts, type Middleware, type MiddlewareNextFn, type MiddlewareRaw, type MiddlewareRawNextFn, type MiddlewareSync, type ObservableFromValue, type PayloadData, type PerfMiddlewareOpts, type PersistedQueriesMiddlewareOpts, type ProgressOpts, type QueryPayload, QueryResponseCache, RRNLAuthMiddlewareError, RRNLBatchMiddlewareError, RRNLError, RRNLRequestError, RRNLRetryMiddlewareError, RelayNetworkLayer, type RelayNetworkLayerOpts, RelayRequest as RelayNetworkLayerRequest, RelayRequestBatch as RelayNetworkLayerRequestBatch, RelayResponse as RelayNetworkLayerResponse, type RelayObservable, type RelayRequestAny, type RequestWrapper, type RetryAfterFn, type RetryMiddlewareOpts, type StatusCheckFn, type SubscribeFunction, type Uploadable, type UploadableMap, type UrlMiddlewareOpts, type Variables, authMiddleware, batchMiddleware, cacheMiddleware, createRequestError, errorMiddleware, formatGraphQLErrors, export_default as graphqlBatchHTTPWrapper, loggerMiddleware, performanceMiddleware as perfMiddleware, persistedQueriesMiddleware, progressMiddleware, retryMiddleware, uploadMiddleware, urlMiddleware };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { RelayRequest } from "./RelayRequest.js";
|
|
2
|
+
import { RelayRequestBatch } from "./RelayRequestBatch.js";
|
|
3
|
+
import { RelayResponse } from "./RelayResponse.js";
|
|
4
|
+
import { CacheConfig, ConcreteBatch, Disposable, FetchFunction, FetchHookFunction, FetchOpts, FetchResponse, GraphQLResponse, GraphQLResponseErrors, Middleware, MiddlewareNextFn, MiddlewareRaw, MiddlewareRawNextFn, MiddlewareSync, ObservableFromValue, PayloadData, QueryPayload, RelayObservable, RelayRequestAny, SubscribeFunction, Uploadable, UploadableMap, Variables } from "./definition.js";
|
|
5
|
+
import { RelayNetworkLayer, RelayNetworkLayerOpts } from "./RelayNetworkLayer.js";
|
|
6
|
+
import { RRNLError } from "./RRNLError.js";
|
|
7
|
+
import { BatchMiddlewareOpts, RRNLBatchMiddlewareError, RequestWrapper, batchMiddleware } from "./middlewares/batch.js";
|
|
8
|
+
import { AbortFn, BeforeRetryCb, ForceRetryFn, RRNLRetryMiddlewareError, RetryAfterFn, RetryMiddlewareOpts, StatusCheckFn, retryMiddleware } from "./middlewares/retry.js";
|
|
9
|
+
import { UrlMiddlewareOpts, urlMiddleware } from "./middlewares/url.js";
|
|
10
|
+
import { AuthMiddlewareOpts, RRNLAuthMiddlewareError, authMiddleware } from "./middlewares/auth.js";
|
|
11
|
+
import { PerfMiddlewareOpts, performanceMiddleware } from "./middlewares/perf.js";
|
|
12
|
+
import { LoggerMiddlewareOpts, loggerMiddleware } from "./middlewares/logger.js";
|
|
13
|
+
import { PersistedQueriesMiddlewareOpts, persistedQueriesMiddleware } from "./middlewares/persistedQueries.js";
|
|
14
|
+
import { GqlErrorMiddlewareOpts, errorMiddleware } from "./middlewares/error.js";
|
|
15
|
+
import { CacheMiddlewareOpts, cacheMiddleware } from "./middlewares/cache.js";
|
|
16
|
+
import { ProgressOpts, progressMiddleware } from "./middlewares/progress.js";
|
|
17
|
+
import { uploadMiddleware } from "./middlewares/upload.js";
|
|
18
|
+
import { export_default } from "./express-middleware/graphqlBatchHTTPWrapper.js";
|
|
19
|
+
import { RRNLRequestError, createRequestError, formatGraphQLErrors } from "./createRequestError.js";
|
|
20
|
+
import { QueryResponseCache } from "relay-runtime";
|
|
21
|
+
export { type AbortFn, type AuthMiddlewareOpts, type BatchMiddlewareOpts, type BeforeRetryCb, type CacheConfig, type CacheMiddlewareOpts, type ConcreteBatch, type Disposable, type FetchFunction, type FetchHookFunction, type FetchOpts, type FetchResponse, type ForceRetryFn, type GqlErrorMiddlewareOpts, type GraphQLResponse, type GraphQLResponseErrors, type LoggerMiddlewareOpts, type Middleware, type MiddlewareNextFn, type MiddlewareRaw, type MiddlewareRawNextFn, type MiddlewareSync, type ObservableFromValue, type PayloadData, type PerfMiddlewareOpts, type PersistedQueriesMiddlewareOpts, type ProgressOpts, type QueryPayload, QueryResponseCache, RRNLAuthMiddlewareError, RRNLBatchMiddlewareError, RRNLError, RRNLRequestError, RRNLRetryMiddlewareError, RelayNetworkLayer, type RelayNetworkLayerOpts, RelayRequest as RelayNetworkLayerRequest, RelayRequestBatch as RelayNetworkLayerRequestBatch, RelayResponse as RelayNetworkLayerResponse, type RelayObservable, type RelayRequestAny, type RequestWrapper, type RetryAfterFn, type RetryMiddlewareOpts, type StatusCheckFn, type SubscribeFunction, type Uploadable, type UploadableMap, type UrlMiddlewareOpts, type Variables, authMiddleware, batchMiddleware, cacheMiddleware, createRequestError, errorMiddleware, formatGraphQLErrors, export_default as graphqlBatchHTTPWrapper, loggerMiddleware, performanceMiddleware as perfMiddleware, persistedQueriesMiddleware, progressMiddleware, retryMiddleware, uploadMiddleware, urlMiddleware };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import RRNLError from "./RRNLError.js";
|
|
2
|
+
import RelayRequest from "./RelayRequest.js";
|
|
3
|
+
import { RRNLRequestError, createRequestError, formatGraphQLErrors } from "./createRequestError.js";
|
|
4
|
+
import RelayResponse from "./RelayResponse.js";
|
|
5
|
+
import RelayNetworkLayer from "./RelayNetworkLayer.js";
|
|
6
|
+
import RelayRequestBatch from "./RelayRequestBatch.js";
|
|
7
|
+
import batchMiddleware, { RRNLBatchMiddlewareError } from "./middlewares/batch.js";
|
|
8
|
+
import retryMiddleware, { RRNLRetryMiddlewareError } from "./middlewares/retry.js";
|
|
9
|
+
import urlMiddleware from "./middlewares/url.js";
|
|
10
|
+
import authMiddleware, { RRNLAuthMiddlewareError } from "./middlewares/auth.js";
|
|
11
|
+
import performanceMiddleware from "./middlewares/perf.js";
|
|
12
|
+
import loggerMiddleware from "./middlewares/logger.js";
|
|
13
|
+
import persistedQueriesMiddleware from "./middlewares/persistedQueries.js";
|
|
14
|
+
import errorMiddleware from "./middlewares/error.js";
|
|
15
|
+
import cacheMiddleware from "./middlewares/cache.js";
|
|
16
|
+
import progressMiddleware from "./middlewares/progress.js";
|
|
17
|
+
import uploadMiddleware from "./middlewares/upload.js";
|
|
18
|
+
import graphqlBatchHTTPWrapper_default from "./express-middleware/graphqlBatchHTTPWrapper.js";
|
|
19
|
+
import { QueryResponseCache } from "relay-runtime";
|
|
20
|
+
export { QueryResponseCache, RRNLAuthMiddlewareError, RRNLBatchMiddlewareError, RRNLError, RRNLRequestError, RRNLRetryMiddlewareError, RelayNetworkLayer, RelayRequest as RelayNetworkLayerRequest, RelayRequestBatch as RelayNetworkLayerRequestBatch, RelayResponse as RelayNetworkLayerResponse, authMiddleware, batchMiddleware, cacheMiddleware, createRequestError, errorMiddleware, formatGraphQLErrors, graphqlBatchHTTPWrapper_default as graphqlBatchHTTPWrapper, loggerMiddleware, performanceMiddleware as perfMiddleware, persistedQueriesMiddleware, progressMiddleware, retryMiddleware, uploadMiddleware, urlMiddleware };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const require_RRNLError = require("../RRNLError.cjs");
|
|
2
|
+
const require_utils = require("../utils.cjs");
|
|
3
|
+
//#region src/middlewares/auth.ts
|
|
4
|
+
var RRNLAuthMiddlewareError = class extends require_RRNLError.default {
|
|
5
|
+
constructor(msg) {
|
|
6
|
+
super(msg);
|
|
7
|
+
this.name = "RRNLAuthMiddlewareError";
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
function authMiddleware(opts) {
|
|
11
|
+
const { token: tokenOrThunk, tokenRefreshPromise, allowEmptyToken = false, prefix = "Bearer ", header = "Authorization" } = opts || {};
|
|
12
|
+
let tokenRefreshInProgress = null;
|
|
13
|
+
return (next) => async (req) => {
|
|
14
|
+
try {
|
|
15
|
+
const token = await (require_utils.isFunction(tokenOrThunk) ? tokenOrThunk(req) : tokenOrThunk);
|
|
16
|
+
if (!token && tokenRefreshPromise && !allowEmptyToken) throw new RRNLAuthMiddlewareError("Empty token");
|
|
17
|
+
if (token) req.fetchOpts.headers[header] = `${prefix}${token}`;
|
|
18
|
+
return await next(req);
|
|
19
|
+
} catch (e) {
|
|
20
|
+
if (e && tokenRefreshPromise) {
|
|
21
|
+
if (e.message === "Empty token" || e.res && e.res.status === 401) {
|
|
22
|
+
if (tokenRefreshPromise) {
|
|
23
|
+
if (!tokenRefreshInProgress) tokenRefreshInProgress = Promise.resolve(tokenRefreshPromise(req, e.res)).then((newToken) => {
|
|
24
|
+
tokenRefreshInProgress = null;
|
|
25
|
+
return newToken;
|
|
26
|
+
}).catch((err) => {
|
|
27
|
+
tokenRefreshInProgress = null;
|
|
28
|
+
throw err;
|
|
29
|
+
});
|
|
30
|
+
return tokenRefreshInProgress.then((newToken) => {
|
|
31
|
+
if (!newToken && !allowEmptyToken) throw new RRNLAuthMiddlewareError("Empty token");
|
|
32
|
+
const newReq = req.clone();
|
|
33
|
+
const headers = newReq.fetchOpts.headers;
|
|
34
|
+
if (newToken) headers[header] = `${prefix}${newToken}`;
|
|
35
|
+
else delete headers[header];
|
|
36
|
+
return next(newReq);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
exports.RRNLAuthMiddlewareError = RRNLAuthMiddlewareError;
|
|
47
|
+
exports.default = authMiddleware;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RelayResponse } from "../RelayResponse.cjs";
|
|
2
|
+
import { Middleware, RelayRequestAny } from "../definition.cjs";
|
|
3
|
+
import { RRNLError } from "../RRNLError.cjs";
|
|
4
|
+
|
|
5
|
+
//#region src/middlewares/auth.d.ts
|
|
6
|
+
declare class RRNLAuthMiddlewareError extends RRNLError {
|
|
7
|
+
constructor(msg: string);
|
|
8
|
+
}
|
|
9
|
+
interface AuthMiddlewareOpts {
|
|
10
|
+
token?: string | Promise<string> | ((req: RelayRequestAny) => string | Promise<string>);
|
|
11
|
+
tokenRefreshPromise?: (req: RelayRequestAny, res: RelayResponse) => string | Promise<string>;
|
|
12
|
+
allowEmptyToken?: boolean;
|
|
13
|
+
prefix?: string;
|
|
14
|
+
header?: string;
|
|
15
|
+
}
|
|
16
|
+
declare function authMiddleware(opts?: AuthMiddlewareOpts): Middleware;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { AuthMiddlewareOpts, RRNLAuthMiddlewareError, authMiddleware };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RelayResponse } from "../RelayResponse.js";
|
|
2
|
+
import { Middleware, RelayRequestAny } from "../definition.js";
|
|
3
|
+
import { RRNLError } from "../RRNLError.js";
|
|
4
|
+
|
|
5
|
+
//#region src/middlewares/auth.d.ts
|
|
6
|
+
declare class RRNLAuthMiddlewareError extends RRNLError {
|
|
7
|
+
constructor(msg: string);
|
|
8
|
+
}
|
|
9
|
+
interface AuthMiddlewareOpts {
|
|
10
|
+
token?: string | Promise<string> | ((req: RelayRequestAny) => string | Promise<string>);
|
|
11
|
+
tokenRefreshPromise?: (req: RelayRequestAny, res: RelayResponse) => string | Promise<string>;
|
|
12
|
+
allowEmptyToken?: boolean;
|
|
13
|
+
prefix?: string;
|
|
14
|
+
header?: string;
|
|
15
|
+
}
|
|
16
|
+
declare function authMiddleware(opts?: AuthMiddlewareOpts): Middleware;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { AuthMiddlewareOpts, RRNLAuthMiddlewareError, authMiddleware };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import RRNLError from "../RRNLError.js";
|
|
2
|
+
import { isFunction } from "../utils.js";
|
|
3
|
+
//#region src/middlewares/auth.ts
|
|
4
|
+
var RRNLAuthMiddlewareError = class extends RRNLError {
|
|
5
|
+
constructor(msg) {
|
|
6
|
+
super(msg);
|
|
7
|
+
this.name = "RRNLAuthMiddlewareError";
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
function authMiddleware(opts) {
|
|
11
|
+
const { token: tokenOrThunk, tokenRefreshPromise, allowEmptyToken = false, prefix = "Bearer ", header = "Authorization" } = opts || {};
|
|
12
|
+
let tokenRefreshInProgress = null;
|
|
13
|
+
return (next) => async (req) => {
|
|
14
|
+
try {
|
|
15
|
+
const token = await (isFunction(tokenOrThunk) ? tokenOrThunk(req) : tokenOrThunk);
|
|
16
|
+
if (!token && tokenRefreshPromise && !allowEmptyToken) throw new RRNLAuthMiddlewareError("Empty token");
|
|
17
|
+
if (token) req.fetchOpts.headers[header] = `${prefix}${token}`;
|
|
18
|
+
return await next(req);
|
|
19
|
+
} catch (e) {
|
|
20
|
+
if (e && tokenRefreshPromise) {
|
|
21
|
+
if (e.message === "Empty token" || e.res && e.res.status === 401) {
|
|
22
|
+
if (tokenRefreshPromise) {
|
|
23
|
+
if (!tokenRefreshInProgress) tokenRefreshInProgress = Promise.resolve(tokenRefreshPromise(req, e.res)).then((newToken) => {
|
|
24
|
+
tokenRefreshInProgress = null;
|
|
25
|
+
return newToken;
|
|
26
|
+
}).catch((err) => {
|
|
27
|
+
tokenRefreshInProgress = null;
|
|
28
|
+
throw err;
|
|
29
|
+
});
|
|
30
|
+
return tokenRefreshInProgress.then((newToken) => {
|
|
31
|
+
if (!newToken && !allowEmptyToken) throw new RRNLAuthMiddlewareError("Empty token");
|
|
32
|
+
const newReq = req.clone();
|
|
33
|
+
const headers = newReq.fetchOpts.headers;
|
|
34
|
+
if (newToken) headers[header] = `${prefix}${newToken}`;
|
|
35
|
+
else delete headers[header];
|
|
36
|
+
return next(newReq);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { RRNLAuthMiddlewareError, authMiddleware as default };
|