api-def 0.4.1-alpha3 → 0.5.1

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 (167) hide show
  1. package/README.md +1 -1
  2. package/cjs/Api.d.ts +13 -15
  3. package/cjs/Api.js +28 -41
  4. package/cjs/ApiConstants.d.ts +28 -0
  5. package/cjs/ApiConstants.js +28 -0
  6. package/cjs/ApiTypes.d.ts +2 -7
  7. package/cjs/ApiUtils.d.ts +2 -10
  8. package/cjs/ApiUtils.js +24 -37
  9. package/cjs/Endpoint.d.ts +21 -5
  10. package/cjs/Endpoint.js +16 -31
  11. package/cjs/MockingTypes.d.ts +28 -0
  12. package/cjs/{lib/Utils.js → MockingTypes.js} +0 -0
  13. package/cjs/RequestContext.d.ts +9 -4
  14. package/cjs/RequestContext.js +4 -2
  15. package/cjs/RequestError.d.ts +21 -0
  16. package/cjs/RequestError.js +23 -0
  17. package/cjs/Requester.d.ts +2 -1
  18. package/cjs/Requester.js +153 -67
  19. package/cjs/TextDecoding.d.ts +1 -0
  20. package/cjs/TextDecoding.js +139 -0
  21. package/cjs/Utils.d.ts +9 -0
  22. package/cjs/Utils.js +30 -1
  23. package/cjs/backend/AxiosRequestBackend.d.ts +4 -3
  24. package/cjs/backend/AxiosRequestBackend.js +3 -0
  25. package/cjs/backend/FetchRequestBackend.d.ts +2 -1
  26. package/cjs/backend/FetchRequestBackend.js +12 -7
  27. package/cjs/backend/MockRequestBackend.d.ts +10 -0
  28. package/cjs/backend/MockRequestBackend.js +149 -0
  29. package/cjs/backend/RequestBackend.d.ts +4 -0
  30. package/cjs/cache/LocalForageCacheBackend.js +1 -0
  31. package/cjs/index.d.ts +1 -1
  32. package/cjs/index.js +2 -2
  33. package/cjs/util/retry/index.d.ts +3 -0
  34. package/cjs/util/retry/index.js +52 -0
  35. package/cjs/util/retry/lib/retry.d.ts +3 -0
  36. package/cjs/util/retry/lib/retry.js +54 -0
  37. package/cjs/util/retry/lib/retryOperation.d.ts +27 -0
  38. package/cjs/util/retry/lib/retryOperation.js +134 -0
  39. package/esm/Api.d.ts +13 -15
  40. package/esm/Api.js +24 -39
  41. package/esm/ApiConstants.d.ts +28 -0
  42. package/esm/ApiConstants.js +28 -0
  43. package/esm/ApiTypes.d.ts +2 -7
  44. package/esm/ApiUtils.d.ts +2 -10
  45. package/esm/ApiUtils.js +22 -35
  46. package/esm/Endpoint.d.ts +21 -5
  47. package/esm/Endpoint.js +16 -31
  48. package/esm/MockingTypes.d.ts +28 -0
  49. package/esm/{lib/backend/RequestBackend.js → MockingTypes.js} +0 -0
  50. package/esm/RequestContext.d.ts +9 -4
  51. package/esm/RequestContext.js +4 -2
  52. package/esm/RequestError.d.ts +21 -0
  53. package/esm/RequestError.js +18 -0
  54. package/esm/Requester.d.ts +2 -1
  55. package/esm/Requester.js +153 -67
  56. package/esm/TextDecoding.d.ts +1 -0
  57. package/esm/TextDecoding.js +135 -0
  58. package/esm/Utils.d.ts +9 -0
  59. package/esm/Utils.js +26 -0
  60. package/esm/backend/AxiosRequestBackend.d.ts +4 -3
  61. package/esm/backend/AxiosRequestBackend.js +3 -0
  62. package/esm/backend/FetchRequestBackend.d.ts +2 -1
  63. package/esm/backend/FetchRequestBackend.js +12 -7
  64. package/esm/backend/MockRequestBackend.d.ts +10 -0
  65. package/esm/backend/MockRequestBackend.js +147 -0
  66. package/esm/backend/RequestBackend.d.ts +4 -0
  67. package/esm/cache/LocalForageCacheBackend.js +1 -0
  68. package/esm/index.d.ts +1 -1
  69. package/esm/index.js +1 -1
  70. package/esm/util/retry/index.d.ts +3 -0
  71. package/esm/util/retry/index.js +50 -0
  72. package/esm/util/retry/lib/retry.d.ts +3 -0
  73. package/esm/util/retry/lib/retry.js +50 -0
  74. package/esm/util/retry/lib/retryOperation.d.ts +27 -0
  75. package/esm/util/retry/lib/retryOperation.js +132 -0
  76. package/package.json +29 -19
  77. package/CHANGELOG.md +0 -39
  78. package/cjs/Mocking.d.ts +0 -23
  79. package/cjs/Mocking.js +0 -81
  80. package/cjs/__tests__/mock/ExampleApis.d.ts +0 -3
  81. package/cjs/__tests__/mock/ExampleApis.js +0 -19
  82. package/cjs/lib/Api.d.ts +0 -32
  83. package/cjs/lib/Api.js +0 -126
  84. package/cjs/lib/ApiTypes.d.ts +0 -102
  85. package/cjs/lib/ApiTypes.js +0 -31
  86. package/cjs/lib/ApiUtils.d.ts +0 -13
  87. package/cjs/lib/ApiUtils.js +0 -60
  88. package/cjs/lib/Caching.d.ts +0 -9
  89. package/cjs/lib/Caching.js +0 -85
  90. package/cjs/lib/Endpoint.d.ts +0 -30
  91. package/cjs/lib/Endpoint.js +0 -121
  92. package/cjs/lib/EndpointBuilder.d.ts +0 -12
  93. package/cjs/lib/EndpointBuilder.js +0 -27
  94. package/cjs/lib/Mocking.d.ts +0 -23
  95. package/cjs/lib/Mocking.js +0 -80
  96. package/cjs/lib/RequestContext.d.ts +0 -28
  97. package/cjs/lib/RequestContext.js +0 -166
  98. package/cjs/lib/Requester.d.ts +0 -2
  99. package/cjs/lib/Requester.js +0 -164
  100. package/cjs/lib/Utils.d.ts +0 -1
  101. package/cjs/lib/backend/AxiosBackend.d.ts +0 -10
  102. package/cjs/lib/backend/AxiosBackend.js +0 -98
  103. package/cjs/lib/backend/AxiosRequestBackend.d.ts +0 -11
  104. package/cjs/lib/backend/AxiosRequestBackend.js +0 -99
  105. package/cjs/lib/backend/FetchBackend.d.ts +0 -8
  106. package/cjs/lib/backend/FetchBackend.js +0 -145
  107. package/cjs/lib/backend/FetchRequestBackend.d.ts +0 -9
  108. package/cjs/lib/backend/FetchRequestBackend.js +0 -150
  109. package/cjs/lib/backend/RequestBackend.d.ts +0 -11
  110. package/cjs/lib/backend/RequestBackend.js +0 -2
  111. package/cjs/lib/cache/CacheBackend.d.ts +0 -6
  112. package/cjs/lib/cache/CacheBackend.js +0 -2
  113. package/cjs/lib/cache/Caching.d.ts +0 -10
  114. package/cjs/lib/cache/Caching.js +0 -84
  115. package/cjs/lib/cache/LocalForageCacheBackend.d.ts +0 -9
  116. package/cjs/lib/cache/LocalForageCacheBackend.js +0 -25
  117. package/cjs/lib/cache/LocalStorageCacheBackend.d.ts +0 -7
  118. package/cjs/lib/cache/LocalStorageCacheBackend.js +0 -78
  119. package/cjs/lib/middleware/CacheMiddleware.d.ts +0 -7
  120. package/cjs/lib/middleware/CacheMiddleware.js +0 -107
  121. package/cjs/lib/middleware/LoggingMiddleware.d.ts +0 -7
  122. package/cjs/lib/middleware/LoggingMiddleware.js +0 -95
  123. package/esm/Mocking.d.ts +0 -23
  124. package/esm/Mocking.js +0 -77
  125. package/esm/__tests__/mock/ExampleApis.d.ts +0 -3
  126. package/esm/__tests__/mock/ExampleApis.js +0 -16
  127. package/esm/lib/Api.d.ts +0 -32
  128. package/esm/lib/Api.js +0 -123
  129. package/esm/lib/ApiTypes.d.ts +0 -102
  130. package/esm/lib/ApiTypes.js +0 -28
  131. package/esm/lib/ApiUtils.d.ts +0 -13
  132. package/esm/lib/ApiUtils.js +0 -57
  133. package/esm/lib/Caching.d.ts +0 -9
  134. package/esm/lib/Caching.js +0 -82
  135. package/esm/lib/Endpoint.d.ts +0 -30
  136. package/esm/lib/Endpoint.js +0 -119
  137. package/esm/lib/EndpointBuilder.d.ts +0 -12
  138. package/esm/lib/EndpointBuilder.js +0 -25
  139. package/esm/lib/Mocking.d.ts +0 -23
  140. package/esm/lib/Mocking.js +0 -77
  141. package/esm/lib/RequestContext.d.ts +0 -28
  142. package/esm/lib/RequestContext.js +0 -164
  143. package/esm/lib/Requester.d.ts +0 -2
  144. package/esm/lib/Requester.js +0 -161
  145. package/esm/lib/Utils.d.ts +0 -1
  146. package/esm/lib/Utils.js +0 -0
  147. package/esm/lib/backend/AxiosBackend.d.ts +0 -10
  148. package/esm/lib/backend/AxiosBackend.js +0 -95
  149. package/esm/lib/backend/AxiosRequestBackend.d.ts +0 -11
  150. package/esm/lib/backend/AxiosRequestBackend.js +0 -96
  151. package/esm/lib/backend/FetchBackend.d.ts +0 -8
  152. package/esm/lib/backend/FetchBackend.js +0 -143
  153. package/esm/lib/backend/FetchRequestBackend.d.ts +0 -9
  154. package/esm/lib/backend/FetchRequestBackend.js +0 -148
  155. package/esm/lib/backend/RequestBackend.d.ts +0 -11
  156. package/esm/lib/cache/CacheBackend.d.ts +0 -6
  157. package/esm/lib/cache/CacheBackend.js +0 -1
  158. package/esm/lib/cache/Caching.d.ts +0 -10
  159. package/esm/lib/cache/Caching.js +0 -81
  160. package/esm/lib/cache/LocalForageCacheBackend.d.ts +0 -9
  161. package/esm/lib/cache/LocalForageCacheBackend.js +0 -23
  162. package/esm/lib/cache/LocalStorageCacheBackend.d.ts +0 -7
  163. package/esm/lib/cache/LocalStorageCacheBackend.js +0 -76
  164. package/esm/lib/middleware/CacheMiddleware.d.ts +0 -7
  165. package/esm/lib/middleware/CacheMiddleware.js +0 -105
  166. package/esm/lib/middleware/LoggingMiddleware.d.ts +0 -7
  167. package/esm/lib/middleware/LoggingMiddleware.js +0 -92
package/cjs/Mocking.js DELETED
@@ -1,81 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.mockRequest = void 0;
40
- var mockRequest = function (endpoint, config) { return __awaiter(void 0, void 0, void 0, function () {
41
- var mockingFunc, req, res;
42
- var _a, _b, _c, _d;
43
- return __generator(this, function (_e) {
44
- switch (_e.label) {
45
- case 0:
46
- mockingFunc = (_a = endpoint.mocking) === null || _a === void 0 ? void 0 : _a.func;
47
- if (!mockingFunc) {
48
- throw new Error("Endpoint for '" + endpoint.path + "' has no mocking");
49
- }
50
- req = {
51
- body: (_b = config.body) !== null && _b !== void 0 ? _b : {},
52
- params: (_c = config.params) !== null && _c !== void 0 ? _c : {},
53
- query: (_d = config.query) !== null && _d !== void 0 ? _d : {},
54
- };
55
- res = {
56
- statusCode: -1,
57
- response: undefined,
58
- status: function (statusCode) {
59
- res.statusCode = statusCode;
60
- return res;
61
- },
62
- send: function (response) {
63
- res.response = response;
64
- return res;
65
- },
66
- };
67
- return [4 /*yield*/, mockingFunc(req, res)];
68
- case 1:
69
- _e.sent();
70
- if (res.response === undefined) {
71
- throw new Error("Mocked API did not respond");
72
- }
73
- return [2 /*return*/, {
74
- headers: {},
75
- data: res.response,
76
- status: res.statusCode,
77
- }];
78
- }
79
- });
80
- }); };
81
- exports.mockRequest = mockRequest;
@@ -1,3 +0,0 @@
1
- export declare const hello: import("../../Endpoint").default<any, undefined, {
2
- id: string;
3
- }, undefined>;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hello = void 0;
4
- var Api_1 = require("../../Api");
5
- var ApiConstants_1 = require("../../ApiConstants");
6
- var api = new Api_1.Api({
7
- baseUrl: "example.com",
8
- name: "Example API",
9
- });
10
- exports.hello = api.endpoint()
11
- .queryOf()
12
- .build({
13
- name: "hello",
14
- config: {},
15
- description: "asdasd",
16
- id: "hello",
17
- method: ApiConstants_1.RequestMethod.Get,
18
- path: "/hello",
19
- });
package/cjs/lib/Api.d.ts DELETED
@@ -1,32 +0,0 @@
1
- import { ApiResponse, BaseRequestConfig, ModulePossiblyDefault, RequestConfig, RequestEventHandlers, RequestMiddleware } from "./ApiTypes";
2
- import { EndpointMockingInfo, MockingConfig } from "./Mocking";
3
- import RequestBackend from "./backend/RequestBackend";
4
- import EndpointBuilder from "./EndpointBuilder";
5
- export declare let requestBackend: RequestBackend | null;
6
- export declare const setRequestBackend: (backend: RequestBackend) => void;
7
- export interface ApiInfo {
8
- readonly name: string;
9
- readonly baseUrl: string;
10
- readonly middleware?: RequestMiddleware[];
11
- readonly defaults?: BaseRequestConfig | (() => BaseRequestConfig);
12
- readonly mocking?: MockingConfig;
13
- }
14
- export interface ApiMocking extends MockingConfig {
15
- loaderPromise: null | Promise<ModulePossiblyDefault<any>>;
16
- loaded: boolean;
17
- }
18
- export declare class Api implements ApiInfo {
19
- readonly baseUrl: string;
20
- readonly name: string;
21
- readonly middleware: RequestMiddleware[];
22
- readonly defaults?: BaseRequestConfig | (() => BaseRequestConfig);
23
- readonly mocking: ApiMocking | undefined;
24
- private readonly endpoints;
25
- constructor(info: ApiInfo);
26
- endpoint(): EndpointBuilder;
27
- getDefaults(): BaseRequestConfig;
28
- getEventHandlers(): RequestEventHandlers<any>;
29
- get<R = unknown>(path: string, config: RequestConfig): Promise<ApiResponse<R>>;
30
- post<R = unknown>(path: string, config: RequestConfig): Promise<ApiResponse<R>>;
31
- getEndpointMocks(): Record<string, EndpointMockingInfo | null>;
32
- }
package/cjs/lib/Api.js DELETED
@@ -1,126 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.Api = exports.setRequestBackend = exports.requestBackend = void 0;
40
- var Requester = require("./Requester");
41
- var ApiTypes_1 = require("./ApiTypes");
42
- var EndpointBuilder_1 = require("./EndpointBuilder");
43
- exports.requestBackend = null;
44
- exports.setRequestBackend = function (backend) {
45
- exports.requestBackend = backend;
46
- };
47
- var HotRequestHost = /** @class */ (function () {
48
- function HotRequestHost(api, path, method) {
49
- this.responseType = ApiTypes_1.ResponseType.Json;
50
- this.api = api;
51
- this.method = method;
52
- this.path = path;
53
- }
54
- Object.defineProperty(HotRequestHost.prototype, "baseUrl", {
55
- get: function () {
56
- return this.api.baseUrl;
57
- },
58
- enumerable: false,
59
- configurable: true
60
- });
61
- HotRequestHost.prototype.computeConfig = function (config) {
62
- var apiDefaults = this.api.getDefaults();
63
- var computedConfig = Object.assign({}, apiDefaults, config);
64
- computedConfig.options = Object.assign({}, apiDefaults.options, config === null || config === void 0 ? void 0 : config.options);
65
- return computedConfig;
66
- };
67
- HotRequestHost.prototype.computePath = function (path, config) {
68
- return path.startsWith("/") ? path : "/" + path;
69
- };
70
- return HotRequestHost;
71
- }());
72
- var Api = /** @class */ (function () {
73
- function Api(info) {
74
- this.endpoints = {};
75
- this.name = info.name;
76
- this.baseUrl = info.baseUrl;
77
- this.middleware = info.middleware || [];
78
- this.endpoints = {};
79
- this.defaults = info.defaults;
80
- this.mocking =
81
- info.mocking &&
82
- Object.assign(info.mocking, {
83
- loaderPromise: null,
84
- loaded: false,
85
- });
86
- }
87
- Api.prototype.endpoint = function () {
88
- return new EndpointBuilder_1.default(this);
89
- };
90
- Api.prototype.getDefaults = function () {
91
- return ((typeof this.defaults === "function" ? this.defaults() : this.defaults) ||
92
- {});
93
- };
94
- Api.prototype.getEventHandlers = function () {
95
- return {};
96
- };
97
- Api.prototype.get = function (path, config) {
98
- return __awaiter(this, void 0, void 0, function () {
99
- return __generator(this, function (_a) {
100
- switch (_a.label) {
101
- case 0: return [4 /*yield*/, Requester.submit(new HotRequestHost(this, path, ApiTypes_1.RequestMethod.Get), config)];
102
- case 1: return [2 /*return*/, _a.sent()];
103
- }
104
- });
105
- });
106
- };
107
- Api.prototype.post = function (path, config) {
108
- return __awaiter(this, void 0, void 0, function () {
109
- return __generator(this, function (_a) {
110
- switch (_a.label) {
111
- case 0: return [4 /*yield*/, Requester.submit(new HotRequestHost(this, path, ApiTypes_1.RequestMethod.Post), config)];
112
- case 1: return [2 /*return*/, _a.sent()];
113
- }
114
- });
115
- });
116
- };
117
- Api.prototype.getEndpointMocks = function () {
118
- var _this = this;
119
- return Object.keys(this.endpoints).reduce(function (mocks, key) {
120
- mocks[key] = _this.endpoints[key].mocking;
121
- return mocks;
122
- }, {});
123
- };
124
- return Api;
125
- }());
126
- exports.Api = Api;
@@ -1,102 +0,0 @@
1
- import RequestContext from "./RequestContext";
2
- import { Api } from "./Api";
3
- export declare type ModulePossiblyDefault<T> = T & {
4
- default?: T;
5
- };
6
- export declare type Params = string;
7
- export declare type Query = Record<string, string | number | boolean | undefined | null>;
8
- export declare type Body = string | number | Record<string, any>;
9
- export interface ApiResponse<T = any> {
10
- status: number;
11
- data: T;
12
- headers: Record<string, string>;
13
- }
14
- export interface BaseRequestConfig {
15
- options?: RequestConfigOptions;
16
- headers?: Readonly<Record<string, string>>;
17
- }
18
- export declare type RequestConfig<P extends Params | undefined = Params, Q extends Query | undefined = Query, B extends Body | undefined = Body> = (P extends undefined ? {
19
- params?: never;
20
- } : {
21
- params: Record<P extends Params ? P : never, string>;
22
- }) & (Q extends undefined ? {
23
- query?: never;
24
- } : {
25
- query: Q;
26
- }) & (B extends undefined ? {
27
- body?: never;
28
- } : {
29
- body: B;
30
- }) & BaseRequestConfig;
31
- export interface RequestConfigOptions {
32
- cache?: number | boolean;
33
- lock?: string | false;
34
- retries?: number;
35
- }
36
- export declare enum RequestMethod {
37
- Post = "post",
38
- Get = "get"
39
- }
40
- export declare enum RequestEvent {
41
- BeforeSend = "beforeSend",
42
- Success = "success",
43
- Error = "error",
44
- UnrecoverableError = "unrecoverableError"
45
- }
46
- export declare enum EventResultType {
47
- Respond = "respond",
48
- Retry = "retry"
49
- }
50
- interface BaseEventResult<T extends EventResultType> {
51
- type: T;
52
- }
53
- export declare type ResponseEventResult<R> = BaseEventResult<EventResultType.Respond> & {
54
- response: ApiResponse<R>;
55
- };
56
- export declare type RetryEventResult<R> = BaseEventResult<EventResultType.Retry>;
57
- export declare type EventResult<R> = ResponseEventResult<R> | RetryEventResult<R>;
58
- export declare type RequestEventHandler<R> = (context: RequestContext<R>) => EventResult<R> | void | Promise<EventResult<R> | void>;
59
- export declare type RequestEventHandlers<R> = {
60
- [key in RequestEvent]?: Array<RequestEventHandler<R>>;
61
- };
62
- export declare type RequestMiddleware<O = undefined> = {
63
- [key in RequestEvent]?: RequestEventHandler<any> | undefined | false;
64
- };
65
- export interface RequestContextStats {
66
- cached: false | {
67
- is: true;
68
- by: "local" | "api";
69
- };
70
- attempt: number;
71
- }
72
- export interface RequestError extends Error {
73
- name: "RequestError";
74
- response?: ApiResponse;
75
- }
76
- export declare type RequestCanceler = () => boolean;
77
- export interface RequestHost {
78
- readonly method: RequestMethod;
79
- readonly api: Api;
80
- readonly baseUrl: string;
81
- readonly path: string;
82
- readonly responseType: ResponseType;
83
- computeConfig<P extends Params | undefined, Q extends Query | undefined, B extends Body | undefined>(config: RequestConfig<P, Q, B>): RequestConfig<P, Q, B>;
84
- computePath(path: string, config: RequestConfig): string;
85
- }
86
- export interface CancelledRequestError extends Error {
87
- isCancelledRequest: true;
88
- }
89
- export declare enum CacheSource {
90
- Api = "api",
91
- Local = "local"
92
- }
93
- export interface RequestCacheInfo {
94
- cached: boolean;
95
- source: CacheSource | null;
96
- }
97
- export declare enum ResponseType {
98
- Json = "json",
99
- Text = "text",
100
- ArrayBuffer = "arraybuffer"
101
- }
102
- export {};
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResponseType = exports.CacheSource = exports.EventResultType = exports.RequestEvent = exports.RequestMethod = void 0;
4
- var RequestMethod;
5
- (function (RequestMethod) {
6
- RequestMethod["Post"] = "post";
7
- RequestMethod["Get"] = "get";
8
- })(RequestMethod = exports.RequestMethod || (exports.RequestMethod = {}));
9
- var RequestEvent;
10
- (function (RequestEvent) {
11
- RequestEvent["BeforeSend"] = "beforeSend";
12
- RequestEvent["Success"] = "success";
13
- RequestEvent["Error"] = "error";
14
- RequestEvent["UnrecoverableError"] = "unrecoverableError";
15
- })(RequestEvent = exports.RequestEvent || (exports.RequestEvent = {}));
16
- var EventResultType;
17
- (function (EventResultType) {
18
- EventResultType["Respond"] = "respond";
19
- EventResultType["Retry"] = "retry";
20
- })(EventResultType = exports.EventResultType || (exports.EventResultType = {}));
21
- var CacheSource;
22
- (function (CacheSource) {
23
- CacheSource["Api"] = "api";
24
- CacheSource["Local"] = "local";
25
- })(CacheSource = exports.CacheSource || (exports.CacheSource = {}));
26
- var ResponseType;
27
- (function (ResponseType) {
28
- ResponseType["Json"] = "json";
29
- ResponseType["Text"] = "text";
30
- ResponseType["ArrayBuffer"] = "arraybuffer";
31
- })(ResponseType = exports.ResponseType || (exports.ResponseType = {}));
@@ -1,13 +0,0 @@
1
- import { ApiResponse, CancelledRequestError, RequestError } from "./ApiTypes";
2
- export declare class ResponseBuilder<R> {
3
- private _data;
4
- private _status;
5
- send(data: R): ApiResponse<R>;
6
- data(data: R): this;
7
- status(status: number): this;
8
- build(): ApiResponse<R>;
9
- }
10
- export declare const isCancelledError: (error: Error) => error is CancelledRequestError;
11
- export declare const isNetworkError: (error: Error) => boolean;
12
- export declare const isRequestError: (error: Error) => error is RequestError;
13
- export declare const parseResponseDataToObject: (response: ApiResponse) => void;
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseResponseDataToObject = exports.isRequestError = exports.isNetworkError = exports.isCancelledError = exports.ResponseBuilder = void 0;
4
- var ResponseBuilder = /** @class */ (function () {
5
- function ResponseBuilder() {
6
- this._status = 200;
7
- }
8
- ResponseBuilder.prototype.send = function (data) {
9
- this.data(data);
10
- return this.build();
11
- };
12
- ResponseBuilder.prototype.data = function (data) {
13
- this._data = data;
14
- return this;
15
- };
16
- ResponseBuilder.prototype.status = function (status) {
17
- this._status = status;
18
- return this;
19
- };
20
- ResponseBuilder.prototype.build = function () {
21
- if (this._data === undefined) {
22
- throw new Error("Response builder doesn't have a response");
23
- }
24
- return {
25
- headers: {},
26
- data: this._data,
27
- status: this._status,
28
- };
29
- };
30
- return ResponseBuilder;
31
- }());
32
- exports.ResponseBuilder = ResponseBuilder;
33
- exports.isCancelledError = function (error) {
34
- return "isCancelledRequest" in error;
35
- };
36
- exports.isNetworkError = function (error) {
37
- var _a;
38
- return (error.name === "NetworkError" ||
39
- error.message === "Network Error" ||
40
- ((_a = error.constructor) === null || _a === void 0 ? void 0 : _a.name) === "NetworkError");
41
- };
42
- exports.isRequestError = function (error) {
43
- return "response" in error;
44
- };
45
- exports.parseResponseDataToObject = function (response) {
46
- if (TextDecoder &&
47
- response.data &&
48
- typeof response.data === "object") {
49
- var data = response.data;
50
- if (data.constructor && data.constructor.name === "ArrayBuffer") {
51
- try {
52
- var decodedData = (response.data = new TextDecoder("utf-8").decode(data));
53
- response.data = JSON.parse(decodedData);
54
- }
55
- catch (e) {
56
- console.warn("Couldn't parse array buffer content to JSON response", e);
57
- }
58
- }
59
- }
60
- };
@@ -1,9 +0,0 @@
1
- export declare const DEFAULT_CACHE_EXPIRY: number;
2
- export declare const store: LocalForage;
3
- export declare const clearCache: () => Promise<void>;
4
- export interface CacheEntry {
5
- data: any;
6
- expiry: number | null;
7
- }
8
- export declare const setCachedItem: <T>(key: string, value: T, expiry?: number | undefined) => Promise<T>;
9
- export declare const getCachedItem: <T = any>(key: string) => Promise<T | undefined>;
@@ -1,85 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.getCachedItem = exports.setCachedItem = exports.clearCache = exports.store = exports.DEFAULT_CACHE_EXPIRY = void 0;
40
- var localforage = require("localforage");
41
- var flatted = require("flatted");
42
- exports.DEFAULT_CACHE_EXPIRY = 60 * 1000 * 15;
43
- exports.store = localforage.createInstance({
44
- name: "requestCache",
45
- });
46
- exports.clearCache = function () {
47
- return exports.store.clear();
48
- };
49
- exports.setCachedItem = function (key, value, expiry) { return __awaiter(void 0, void 0, void 0, function () {
50
- var safeValue, entry;
51
- return __generator(this, function (_a) {
52
- switch (_a.label) {
53
- case 0:
54
- safeValue = flatted.parse(flatted.stringify(value));
55
- entry = {
56
- data: safeValue,
57
- expiry: expiry === undefined || isNaN(expiry) ? null : expiry,
58
- };
59
- return [4 /*yield*/, exports.store.setItem(key, entry)];
60
- case 1:
61
- _a.sent();
62
- return [2 /*return*/, value];
63
- }
64
- });
65
- }); };
66
- exports.getCachedItem = function (key) { return __awaiter(void 0, void 0, void 0, function () {
67
- var entry;
68
- return __generator(this, function (_a) {
69
- switch (_a.label) {
70
- case 0: return [4 /*yield*/, exports.store.getItem(key)];
71
- case 1:
72
- entry = _a.sent();
73
- if (!entry) {
74
- return [2 /*return*/, undefined];
75
- }
76
- if (!(typeof entry.expiry === "number")) return [3 /*break*/, 3];
77
- if (!(Date.now() >= entry.expiry)) return [3 /*break*/, 3];
78
- return [4 /*yield*/, exports.store.removeItem(key)];
79
- case 2:
80
- _a.sent();
81
- return [2 /*return*/, undefined];
82
- case 3: return [2 /*return*/, entry.data];
83
- }
84
- });
85
- }); };
@@ -1,30 +0,0 @@
1
- import { Api } from "./Api";
2
- import { ApiResponse, BaseRequestConfig, Body, Params, Query, RequestConfig, RequestHost, RequestMethod, ResponseType } from "./ApiTypes";
3
- import { EndpointMockingInfo, MockingFunction } from "./Mocking";
4
- export interface EndpointConfig<R, P extends Params | undefined, Q extends Query | undefined, B extends Body | undefined> {
5
- readonly id: string;
6
- readonly method: RequestMethod;
7
- readonly name: string;
8
- readonly description: string;
9
- readonly path: string;
10
- readonly defaults?: BaseRequestConfig;
11
- readonly responseType?: ResponseType;
12
- }
13
- export default class Endpoint<R = any, P extends Params | undefined = Params | undefined, Q extends Query | undefined = Query | undefined, B extends Body | undefined = Body | undefined> implements EndpointConfig<R, P, Q, B>, RequestHost {
14
- readonly api: Api;
15
- readonly id: string;
16
- readonly method: RequestMethod;
17
- readonly name: string;
18
- readonly description: string;
19
- readonly path: string;
20
- readonly defaults?: BaseRequestConfig;
21
- readonly responseType: ResponseType;
22
- mocking: EndpointMockingInfo<R, P, Q, B> | null;
23
- constructor(api: Api, info: EndpointConfig<R, P, Q, B>);
24
- submit(config: RequestConfig<P, Q, B>): Promise<ApiResponse<R>>;
25
- computePath(path: string, request: RequestConfig): string;
26
- mock(mocker: MockingFunction<R, P, Q, B>): this;
27
- mockBypass(): this;
28
- get baseUrl(): string;
29
- computeConfig<P extends Params | undefined, Q extends Query | undefined, B extends Body | undefined>(config: RequestConfig<P, Q, B>): RequestConfig<P, Q, B>;
30
- }