@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.
Files changed (85) hide show
  1. package/LICENSE.md +10 -0
  2. package/README.md +324 -0
  3. package/dist/RRNLError.cjs +9 -0
  4. package/dist/RRNLError.d.cts +6 -0
  5. package/dist/RRNLError.d.ts +6 -0
  6. package/dist/RRNLError.js +9 -0
  7. package/dist/RelayNetworkLayer.cjs +54 -0
  8. package/dist/RelayNetworkLayer.d.cts +21 -0
  9. package/dist/RelayNetworkLayer.d.ts +21 -0
  10. package/dist/RelayNetworkLayer.js +54 -0
  11. package/dist/RelayRequest.cjs +90 -0
  12. package/dist/RelayRequest.d.cts +26 -0
  13. package/dist/RelayRequest.d.ts +26 -0
  14. package/dist/RelayRequest.js +90 -0
  15. package/dist/RelayRequestBatch.cjs +56 -0
  16. package/dist/RelayRequestBatch.d.cts +23 -0
  17. package/dist/RelayRequestBatch.d.ts +23 -0
  18. package/dist/RelayRequestBatch.js +56 -0
  19. package/dist/RelayResponse.cjs +56 -0
  20. package/dist/RelayResponse.d.cts +27 -0
  21. package/dist/RelayResponse.d.ts +27 -0
  22. package/dist/RelayResponse.js +56 -0
  23. package/dist/createRequestError.cjs +48 -0
  24. package/dist/createRequestError.d.cts +18 -0
  25. package/dist/createRequestError.d.ts +18 -0
  26. package/dist/createRequestError.js +46 -0
  27. package/dist/definition.d.cts +95 -0
  28. package/dist/definition.d.ts +95 -0
  29. package/dist/express-middleware/graphqlBatchHTTPWrapper.cjs +60 -0
  30. package/dist/express-middleware/graphqlBatchHTTPWrapper.d.cts +5 -0
  31. package/dist/express-middleware/graphqlBatchHTTPWrapper.d.ts +5 -0
  32. package/dist/express-middleware/graphqlBatchHTTPWrapper.js +60 -0
  33. package/dist/fetchWithMiddleware.cjs +43 -0
  34. package/dist/fetchWithMiddleware.js +43 -0
  35. package/dist/index.cjs +49 -0
  36. package/dist/index.d.cts +21 -0
  37. package/dist/index.d.ts +21 -0
  38. package/dist/index.js +20 -0
  39. package/dist/middlewares/auth.cjs +47 -0
  40. package/dist/middlewares/auth.d.cts +18 -0
  41. package/dist/middlewares/auth.d.ts +18 -0
  42. package/dist/middlewares/auth.js +46 -0
  43. package/dist/middlewares/batch.cjs +136 -0
  44. package/dist/middlewares/batch.d.cts +34 -0
  45. package/dist/middlewares/batch.d.ts +34 -0
  46. package/dist/middlewares/batch.js +135 -0
  47. package/dist/middlewares/cache.cjs +43 -0
  48. package/dist/middlewares/cache.d.cts +17 -0
  49. package/dist/middlewares/cache.d.ts +17 -0
  50. package/dist/middlewares/cache.js +43 -0
  51. package/dist/middlewares/error.cjs +71 -0
  52. package/dist/middlewares/error.d.cts +11 -0
  53. package/dist/middlewares/error.d.ts +11 -0
  54. package/dist/middlewares/error.js +71 -0
  55. package/dist/middlewares/logger.cjs +43 -0
  56. package/dist/middlewares/logger.d.cts +9 -0
  57. package/dist/middlewares/logger.d.ts +9 -0
  58. package/dist/middlewares/logger.js +43 -0
  59. package/dist/middlewares/perf.cjs +13 -0
  60. package/dist/middlewares/perf.d.cts +9 -0
  61. package/dist/middlewares/perf.d.ts +9 -0
  62. package/dist/middlewares/perf.js +13 -0
  63. package/dist/middlewares/persistedQueries.cjs +33 -0
  64. package/dist/middlewares/persistedQueries.d.cts +9 -0
  65. package/dist/middlewares/persistedQueries.d.ts +9 -0
  66. package/dist/middlewares/persistedQueries.js +33 -0
  67. package/dist/middlewares/progress.cjs +35 -0
  68. package/dist/middlewares/progress.d.cts +10 -0
  69. package/dist/middlewares/progress.d.ts +10 -0
  70. package/dist/middlewares/progress.js +35 -0
  71. package/dist/middlewares/retry.cjs +146 -0
  72. package/dist/middlewares/retry.d.cts +34 -0
  73. package/dist/middlewares/retry.d.ts +34 -0
  74. package/dist/middlewares/retry.js +145 -0
  75. package/dist/middlewares/upload.cjs +32 -0
  76. package/dist/middlewares/upload.d.cts +6 -0
  77. package/dist/middlewares/upload.d.ts +6 -0
  78. package/dist/middlewares/upload.js +32 -0
  79. package/dist/middlewares/url.cjs +19 -0
  80. package/dist/middlewares/url.d.cts +19 -0
  81. package/dist/middlewares/url.d.ts +19 -0
  82. package/dist/middlewares/url.js +19 -0
  83. package/dist/utils.cjs +6 -0
  84. package/dist/utils.js +6 -0
  85. 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,5 @@
1
+ //#region src/express-middleware/graphqlBatchHTTPWrapper.d.ts
2
+ type ExpressMiddleware = (req: any, res: any) => any;
3
+ declare function export_default(graphqlHTTPMiddleware: ExpressMiddleware): ExpressMiddleware;
4
+ //#endregion
5
+ export { export_default };
@@ -0,0 +1,5 @@
1
+ //#region src/express-middleware/graphqlBatchHTTPWrapper.d.ts
2
+ type ExpressMiddleware = (req: any, res: any) => any;
3
+ declare function export_default(graphqlHTTPMiddleware: ExpressMiddleware): ExpressMiddleware;
4
+ //#endregion
5
+ export { export_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;
@@ -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 };
@@ -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 };