@magda/typescript-common 2.3.3 → 3.0.0-alpha.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 (249) hide show
  1. package/dist/AspectBuilder.d.ts +1 -1
  2. package/dist/AspectBuilder.js +1 -2
  3. package/dist/AspectCreationFailure.js +3 -4
  4. package/dist/AspectCreationFailure.js.map +1 -1
  5. package/dist/AsyncPage.js +59 -79
  6. package/dist/AsyncPage.js.map +1 -1
  7. package/dist/BaseApiClient.d.ts +3 -3
  8. package/dist/BaseApiClient.js +20 -13
  9. package/dist/BaseApiClient.js.map +1 -1
  10. package/dist/ConnectionResult.d.ts +2 -2
  11. package/dist/ConnectionResult.js +17 -22
  12. package/dist/ConnectionResult.js.map +1 -1
  13. package/dist/ConnectorRecordId.d.ts +1 -1
  14. package/dist/ConnectorRecordId.js +9 -13
  15. package/dist/ConnectorRecordId.js.map +1 -1
  16. package/dist/IndexerApiClient.d.ts +1 -1
  17. package/dist/IndexerApiClient.js +13 -32
  18. package/dist/IndexerApiClient.js.map +1 -1
  19. package/dist/JsonConnector.d.ts +9 -9
  20. package/dist/JsonConnector.js +163 -206
  21. package/dist/JsonConnector.js.map +1 -1
  22. package/dist/JsonTransformer.d.ts +3 -3
  23. package/dist/JsonTransformer.js +71 -75
  24. package/dist/JsonTransformer.js.map +1 -1
  25. package/dist/OpaCompileResponseParser.d.ts +4 -4
  26. package/dist/OpaCompileResponseParser.js +279 -212
  27. package/dist/OpaCompileResponseParser.js.map +1 -1
  28. package/dist/RecordCreationFailure.d.ts +1 -1
  29. package/dist/RecordCreationFailure.js +4 -4
  30. package/dist/RecordCreationFailure.js.map +1 -1
  31. package/dist/SQLUtils.d.ts +3 -3
  32. package/dist/SQLUtils.js +139 -195
  33. package/dist/SQLUtils.js.map +1 -1
  34. package/dist/ServerError.js +2 -4
  35. package/dist/ServerError.js.map +1 -1
  36. package/dist/Try.js +20 -35
  37. package/dist/Try.js.map +1 -1
  38. package/dist/addTrailingSlash.js +1 -4
  39. package/dist/addTrailingSlash.js.map +1 -1
  40. package/dist/appendUrlSegments.js +3 -8
  41. package/dist/appendUrlSegments.js.map +1 -1
  42. package/dist/authorization-api/AccessControlError.d.ts +1 -1
  43. package/dist/authorization-api/AccessControlError.js +2 -8
  44. package/dist/authorization-api/AccessControlError.js.map +1 -1
  45. package/dist/authorization-api/ApiClient.d.ts +3 -3
  46. package/dist/authorization-api/ApiClient.js +211 -272
  47. package/dist/authorization-api/ApiClient.js.map +1 -1
  48. package/dist/authorization-api/AuthError.d.ts +1 -1
  49. package/dist/authorization-api/AuthError.js +2 -8
  50. package/dist/authorization-api/AuthError.js.map +1 -1
  51. package/dist/authorization-api/GenericError.js +2 -4
  52. package/dist/authorization-api/GenericError.js.map +1 -1
  53. package/dist/authorization-api/authMiddleware.d.ts +3 -3
  54. package/dist/authorization-api/authMiddleware.js +19 -40
  55. package/dist/authorization-api/authMiddleware.js.map +1 -1
  56. package/dist/authorization-api/constants.js +9 -12
  57. package/dist/authorization-api/constants.js.map +1 -1
  58. package/dist/authorization-api/model.d.ts +8 -8
  59. package/dist/authorization-api/model.js +1 -2
  60. package/dist/coerceJson.js +1 -3
  61. package/dist/coerceJson.js.map +1 -1
  62. package/dist/createNoCacheFetchOptions.d.ts +1 -1
  63. package/dist/createNoCacheFetchOptions.js +4 -7
  64. package/dist/createNoCacheFetchOptions.js.map +1 -1
  65. package/dist/createServiceError.d.ts +1 -1
  66. package/dist/createServiceError.js +7 -11
  67. package/dist/createServiceError.js.map +1 -1
  68. package/dist/delay.js +1 -3
  69. package/dist/delay.js.map +1 -1
  70. package/dist/express/getNoCacheHeaders.js +1 -3
  71. package/dist/express/getNoCacheHeaders.js.map +1 -1
  72. package/dist/express/setResponseNoCache.d.ts +1 -1
  73. package/dist/express/setResponseNoCache.js +3 -8
  74. package/dist/express/setResponseNoCache.js.map +1 -1
  75. package/dist/express/status.d.ts +14 -15
  76. package/dist/express/status.js +145 -148
  77. package/dist/express/status.js.map +1 -1
  78. package/dist/fetchRequest.d.ts +6 -6
  79. package/dist/fetchRequest.js +36 -51
  80. package/dist/fetchRequest.js.map +1 -1
  81. package/dist/formatServiceError.js +4 -6
  82. package/dist/formatServiceError.js.map +1 -1
  83. package/dist/generated/registry/api.d.ts +67 -55
  84. package/dist/generated/registry/api.js +557 -765
  85. package/dist/generated/registry/api.js.map +1 -1
  86. package/dist/getAbsoluteUrl.js +8 -11
  87. package/dist/getAbsoluteUrl.js.map +1 -1
  88. package/dist/getBasePathFromUrl.js +3 -9
  89. package/dist/getBasePathFromUrl.js.map +1 -1
  90. package/dist/getBoolValWithDefault.js +1 -3
  91. package/dist/getBoolValWithDefault.js.map +1 -1
  92. package/dist/getRequest.js +9 -26
  93. package/dist/getRequest.js.map +1 -1
  94. package/dist/getRequestNoCache.js +4 -21
  95. package/dist/getRequestNoCache.js.map +1 -1
  96. package/dist/getStorageUrl.js +13 -23
  97. package/dist/getStorageUrl.js.map +1 -1
  98. package/dist/getUserAgent.d.ts +2 -0
  99. package/dist/getUserAgent.js +10 -0
  100. package/dist/getUserAgent.js.map +1 -0
  101. package/dist/handleServerError.js +3 -9
  102. package/dist/handleServerError.js.map +1 -1
  103. package/dist/markdownToHtml.js +5 -11
  104. package/dist/markdownToHtml.js.map +1 -1
  105. package/dist/opa/AspectQuery.js +55 -79
  106. package/dist/opa/AspectQuery.js.map +1 -1
  107. package/dist/opa/AuthDecision.d.ts +2 -2
  108. package/dist/opa/AuthDecision.js +52 -69
  109. package/dist/opa/AuthDecision.js.map +1 -1
  110. package/dist/opa/AuthDecisionQueryClient.d.ts +2 -2
  111. package/dist/opa/AuthDecisionQueryClient.js +72 -102
  112. package/dist/opa/AuthDecisionQueryClient.js.map +1 -1
  113. package/dist/pgTypes.js +4 -9
  114. package/dist/pgTypes.js.map +1 -1
  115. package/dist/registry/AuthorizedRegistryClient.d.ts +4 -4
  116. package/dist/registry/AuthorizedRegistryClient.js +55 -95
  117. package/dist/registry/AuthorizedRegistryClient.js.map +1 -1
  118. package/dist/registry/RegistryClient.d.ts +2 -3
  119. package/dist/registry/RegistryClient.js +61 -78
  120. package/dist/registry/RegistryClient.js.map +1 -1
  121. package/dist/registry/TenantConsts.js +3 -6
  122. package/dist/registry/TenantConsts.js.map +1 -1
  123. package/dist/registry/model.js +1 -2
  124. package/dist/registry-manual/api.d.ts +1 -1
  125. package/dist/registry-manual/api.js +18 -7
  126. package/dist/registry-manual/api.js.map +1 -1
  127. package/dist/retry.d.ts +1 -1
  128. package/dist/retry.js +3 -9
  129. package/dist/retry.js.map +1 -1
  130. package/dist/retryBackoff.js +3 -9
  131. package/dist/retryBackoff.js.map +1 -1
  132. package/dist/runLater.js +1 -4
  133. package/dist/runLater.js.map +1 -1
  134. package/dist/session/GetUserId.d.ts +2 -2
  135. package/dist/session/GetUserId.js +10 -16
  136. package/dist/session/GetUserId.js.map +1 -1
  137. package/dist/session/GetUserSession.d.ts +1 -1
  138. package/dist/session/GetUserSession.js +6 -10
  139. package/dist/session/GetUserSession.js.map +1 -1
  140. package/dist/session/addJwtSecretFromEnvVar.js +1 -4
  141. package/dist/session/addJwtSecretFromEnvVar.js.map +1 -1
  142. package/dist/session/buildJwt.d.ts +1 -1
  143. package/dist/session/buildJwt.js +2 -5
  144. package/dist/session/buildJwt.js.map +1 -1
  145. package/dist/session/buildJwtFromReq.d.ts +1 -1
  146. package/dist/session/buildJwtFromReq.js +3 -8
  147. package/dist/session/buildJwtFromReq.js.map +1 -1
  148. package/dist/session/cookieUtils.d.ts +2 -13
  149. package/dist/session/cookieUtils.js +8 -9
  150. package/dist/session/cookieUtils.js.map +1 -1
  151. package/dist/session/destroySession.js +18 -33
  152. package/dist/session/destroySession.js.map +1 -1
  153. package/dist/session/getSessionId.js +5 -11
  154. package/dist/session/getSessionId.js.map +1 -1
  155. package/dist/tenant-api/AuthorizedTenantClient.d.ts +1 -1
  156. package/dist/tenant-api/AuthorizedTenantClient.js +22 -36
  157. package/dist/tenant-api/AuthorizedTenantClient.js.map +1 -1
  158. package/dist/tenant-api/Tenant.js +13 -5
  159. package/dist/tenant-api/Tenant.js.map +1 -1
  160. package/dist/test/JsonConnector.spec.js +56 -61
  161. package/dist/test/JsonConnector.spec.js.map +1 -1
  162. package/dist/test/JsonTransformer.spec.js +15 -19
  163. package/dist/test/JsonTransformer.spec.js.map +1 -1
  164. package/dist/test/arbitraries.d.ts +21 -21
  165. package/dist/test/arbitraries.js +85 -99
  166. package/dist/test/arbitraries.js.map +1 -1
  167. package/dist/test/aspect-templates/organization-details.d.ts +1 -4
  168. package/dist/test/aspect-templates/organization-details.js +1 -1
  169. package/dist/test/aspect-templates/organization-details.js.map +1 -1
  170. package/dist/test/buildApiClient.spec.js +81 -107
  171. package/dist/test/buildApiClient.spec.js.map +1 -1
  172. package/dist/test/buildAuthorizedTenantClient.spec.js +25 -40
  173. package/dist/test/buildAuthorizedTenantClient.spec.js.map +1 -1
  174. package/dist/test/connectors/MockExpressServer.js +9 -23
  175. package/dist/test/connectors/MockExpressServer.js.map +1 -1
  176. package/dist/test/connectors/MockRegistry.d.ts +1 -1
  177. package/dist/test/connectors/MockRegistry.js +11 -18
  178. package/dist/test/connectors/MockRegistry.js.map +1 -1
  179. package/dist/test/connectors/runConnectorTest.js +33 -55
  180. package/dist/test/connectors/runConnectorTest.js.map +1 -1
  181. package/dist/test/createMockAuthDecisionQueryClient.d.ts +4 -4
  182. package/dist/test/createMockAuthDecisionQueryClient.js +4 -9
  183. package/dist/test/createMockAuthDecisionQueryClient.js.map +1 -1
  184. package/dist/test/db/getTestDBConfig.js +1 -3
  185. package/dist/test/db/getTestDBConfig.js.map +1 -1
  186. package/dist/test/db/runMigrationSql.js +37 -58
  187. package/dist/test/db/runMigrationSql.js.map +1 -1
  188. package/dist/test/express/status.spec.js +81 -72
  189. package/dist/test/express/status.spec.js.map +1 -1
  190. package/dist/test/fakeArgv.js +6 -5
  191. package/dist/test/fakeArgv.js.map +1 -1
  192. package/dist/test/getBasePathFromUrl.spec.js +5 -10
  193. package/dist/test/getBasePathFromUrl.spec.js.map +1 -1
  194. package/dist/test/getStorageUrl.spec.js +22 -46
  195. package/dist/test/getStorageUrl.spec.js.map +1 -1
  196. package/dist/test/mockAuthApiHost.js +26 -28
  197. package/dist/test/mockAuthApiHost.js.map +1 -1
  198. package/dist/test/mockAuthorization.js +4 -10
  199. package/dist/test/mockAuthorization.js.map +1 -1
  200. package/dist/test/mockTenantDataStore.d.ts +1 -1
  201. package/dist/test/mockTenantDataStore.js +3 -5
  202. package/dist/test/mockTenantDataStore.js.map +1 -1
  203. package/dist/test/mockUserDataStore.d.ts +1 -1
  204. package/dist/test/mockUserDataStore.js +4 -6
  205. package/dist/test/mockUserDataStore.js.map +1 -1
  206. package/dist/test/registry/buildAuthorizedClient.spec.js +65 -87
  207. package/dist/test/registry/buildAuthorizedClient.spec.js.map +1 -1
  208. package/dist/test/session/buildJwt.spec.js +15 -19
  209. package/dist/test/session/buildJwt.spec.js.map +1 -1
  210. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js +6 -11
  211. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js.map +1 -1
  212. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js +6 -11
  213. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js.map +1 -1
  214. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js +6 -11
  215. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js.map +1 -1
  216. package/dist/test/testAsyncPage.spec.js +84 -105
  217. package/dist/test/testAsyncPage.spec.js.map +1 -1
  218. package/dist/test/testOpaCompileResponseParser.spec.js +192 -196
  219. package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -1
  220. package/dist/test/util.js +1 -5
  221. package/dist/test/util.js.map +1 -1
  222. package/dist/unknown2Error.d.ts +2 -0
  223. package/dist/unknown2Error.js +3 -0
  224. package/dist/unknown2Error.js.map +1 -0
  225. package/dist/util/arrayToMaybe.d.ts +1 -1
  226. package/dist/util/arrayToMaybe.js +3 -6
  227. package/dist/util/arrayToMaybe.js.map +1 -1
  228. package/dist/util/cleanOrgTitle.js +1 -4
  229. package/dist/util/cleanOrgTitle.js.map +1 -1
  230. package/dist/util/escapeRegExp.js +1 -3
  231. package/dist/util/escapeRegExp.js.map +1 -1
  232. package/dist/util/getMinikubeIP.js +3 -9
  233. package/dist/util/getMinikubeIP.js.map +1 -1
  234. package/dist/util/isArray.js +1 -3
  235. package/dist/util/isArray.js.map +1 -1
  236. package/dist/util/isUuid.js +1 -3
  237. package/dist/util/isUuid.js.map +1 -1
  238. package/dist/util/unionToThrowable.d.ts +1 -1
  239. package/dist/util/unionToThrowable.js +3 -9
  240. package/dist/util/unionToThrowable.js.map +1 -1
  241. package/dist/utilityTypes.d.ts +1 -1
  242. package/dist/utilityTypes.js +1 -2
  243. package/package.json +45 -29
  244. package/dist/request.d.ts +0 -3
  245. package/dist/request.js +0 -19
  246. package/dist/request.js.map +0 -1
  247. package/dist/test/jsverify.d.ts +0 -2
  248. package/dist/test/jsverify.js +0 -8
  249. package/dist/test/jsverify.js.map +0 -1
@@ -1,22 +1,81 @@
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());
1
+ import { Router } from "express";
2
+ import fetch from "cross-fetch";
3
+ import callerPath from "caller-path";
4
+ /**
5
+ * Store all probe information in a global variable
6
+ * All probe will be referenced with a unique key.
7
+ * This key will by default auto generated.
8
+ */
9
+ const probeDB = {};
10
+ const getInitialState = () => ({
11
+ ready: false,
12
+ since: new Date().toISOString(),
13
+ last: new Date().toISOString(),
14
+ details: {},
15
+ latencyMs: 0
16
+ });
17
+ const noopProbe = async () => Promise.resolve({ ...getInitialState(), ready: true });
18
+ function probeList2ProbeCheckingTask(list, key) {
19
+ const probeData = probeDB[key];
20
+ if (!list || !Object.keys(list).length) {
21
+ return async () => {
22
+ probeData.state = await noopProbe();
23
+ };
24
+ }
25
+ const probeTasks = Object.entries(list).map(([probeKey, probe]) => async () => {
26
+ try {
27
+ const startMs = Date.now();
28
+ const previousState = probeData.state.details?.[probeKey];
29
+ let nextState = getInitialState();
30
+ try {
31
+ const stateData = await probe();
32
+ if (stateData && typeof stateData === "object") {
33
+ nextState = { ...nextState, ...stateData };
34
+ }
35
+ else {
36
+ nextState.ready = true;
37
+ }
38
+ }
39
+ catch (e) {
40
+ // lets not spam console with the same error message
41
+ // report if error message changed
42
+ if (previousState?.error !== `${e}`) {
43
+ console.error("ERROR", probeKey, e);
44
+ nextState.error = `${e}`;
45
+ }
46
+ }
47
+ nextState.latencyMs = Date.now() - startMs;
48
+ nextState.last = new Date().toISOString();
49
+ // report if status changed
50
+ if (nextState.ready !== previousState?.ready) {
51
+ nextState.since = new Date(startMs).toISOString();
52
+ console.log("STATUS", probeKey, "is", nextState.ready ? "up" : "down", "on", nextState.since);
53
+ }
54
+ else {
55
+ nextState.since = previousState.since;
56
+ }
57
+ // we want to report internal details
58
+ probeData.state.details[probeKey] = nextState;
59
+ }
60
+ catch (e) {
61
+ console.error("ERROR", probeKey, e);
62
+ }
9
63
  });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.createServiceProbe = exports.installStatusRouter = exports.createStatusRouter = void 0;
13
- const express_1 = require("express");
14
- const request = require("request");
64
+ return async () => {
65
+ await Promise.all(probeTasks.map((task) => task()));
66
+ // update overall probe state
67
+ if (Object.values(probeData.state.details).findIndex((state) => !state?.ready) === -1) {
68
+ probeData.state.ready = true;
69
+ }
70
+ else {
71
+ probeData.state.ready = false;
72
+ }
73
+ };
74
+ }
15
75
  // In case anyone is confused, this does not duplicate or replace kubernetes functionality
16
76
  // It just makes service and dependency status visible to everyone
17
- function createStatusRouter(options = {}) {
18
- const router = express_1.Router();
19
- installUpdater(options);
77
+ function createStatusRouter(key) {
78
+ const router = Router();
20
79
  // we don't want to cache status
21
80
  router.use(function (req, res, next) {
22
81
  res.set("Cache-Control", "no-cache");
@@ -29,152 +88,90 @@ function createStatusRouter(options = {}) {
29
88
  // readiness probe for knowing if service and its dependents are
30
89
  // ready to go
31
90
  router.get("/ready", function (req, res) {
32
- res.status(options.ready ? 200 : 500).json({
33
- ready: options.ready,
34
- since: options.since,
35
- last: options.last,
36
- details: options.details,
91
+ const probeItem = probeDB[key];
92
+ res.status(probeItem.state.ready ? 200 : 500).json({
93
+ ready: probeItem.state.ready,
94
+ since: probeItem.state.since,
95
+ last: probeItem.state.last,
96
+ details: probeItem.state.details,
37
97
  now: new Date().toISOString()
38
98
  });
39
99
  });
40
100
  // added this for diagnosing service state based on latency in kubernetes
41
- router.get("/readySync", function (req, res) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- yield Promise.all(Object.values(options._probes).map((x) => x()));
44
- res.status(options.ready ? 200 : 500).json({
45
- ready: options.ready,
46
- since: options.since,
47
- last: options.last,
48
- details: options.details,
49
- now: new Date().toISOString()
50
- });
101
+ router.get("/readySync", async function (req, res) {
102
+ const probeItem = probeDB[key];
103
+ await probeItem?.allProbesChecking?.();
104
+ res.status(probeItem.state.ready ? 200 : 500).json({
105
+ ready: probeItem.state.ready,
106
+ since: probeItem.state.since,
107
+ last: probeItem.state.last,
108
+ details: probeItem.state.details,
109
+ now: new Date().toISOString()
51
110
  });
52
111
  });
53
112
  return router;
54
113
  }
55
- exports.createStatusRouter = createStatusRouter;
56
114
  function installUpdater(options) {
57
- // This is so that we cab share OptionsIO objects
58
- // for multiple endpoints
59
- if (!options._installed) {
60
- options.ready = !options.probes;
61
- options.probeUpdateMs = options.probeUpdateMs || 10000;
62
- options.details = {};
63
- options.since = new Date().toISOString();
64
- options._installed = {};
65
- options._probes = {};
66
- }
67
- if (!options.probes || !Object.keys(options.probes).length) {
68
- // when no probes, readiness probe will behave like the liveness probe
69
- options.ready = true;
70
- options.since = options.last = new Date().toISOString();
71
- options.details = {};
72
- return;
115
+ const { key } = options;
116
+ if (!key) {
117
+ throw new Error("key is required");
73
118
  }
74
- // every probe deserves to not be blocked by state of other probes
75
- // so we have parallel probe checkers
76
- Object.entries(options.probes).forEach((probe) => {
77
- const [id, callback] = probe;
78
- function update(dontUpdate) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- try {
81
- const startMs = Date.now();
82
- let previousState = options.details[id];
83
- let nextState = {
84
- ready: false
85
- };
86
- // update probe state
87
- try {
88
- nextState = yield callback();
89
- }
90
- catch (e) {
91
- // lets not spam console with the same error message
92
- // report if error message changed
93
- if (!previousState || previousState.error !== e.message) {
94
- console.error("ERROR", id, e.stack);
95
- nextState.error = e.message;
96
- }
97
- }
98
- // --- Note: typeof null === "object"
99
- if (!nextState || typeof nextState !== "object") {
100
- nextState = {
101
- ready: false
102
- };
103
- }
104
- nextState.latencyMs = Date.now() - startMs;
105
- options.last = nextState.last = new Date().toISOString();
106
- // report if status changed
107
- if (!previousState || nextState.ready !== previousState.ready) {
108
- nextState.since = new Date(startMs).toISOString();
109
- console.log("STATUS", id, "is", nextState.ready ? "up" : "down", "on", nextState.since);
110
- }
111
- else {
112
- nextState.since = previousState.since;
113
- }
114
- // we want to report internal details
115
- options.details[id] = nextState;
116
- // update global state
117
- let isReady = true;
118
- for (const oid of Object.keys(options.probes)) {
119
- isReady =
120
- isReady &&
121
- options.details[oid] &&
122
- options.details[oid].ready;
123
- }
124
- options.ready = isReady;
125
- }
126
- catch (e) {
127
- console.error("ERROR", id, e.stack);
128
- }
129
- if (!dontUpdate) {
130
- setTimeout(update, options.probeUpdateMs).unref();
131
- }
132
- });
119
+ const hasNoProbeTasks = !options?.probes || Object.keys(options.probes).length === 0;
120
+ probeDB[key] = {
121
+ key,
122
+ config: { probeUpdateMs: 10000, ...options },
123
+ state: {
124
+ ...getInitialState(),
125
+ ready: hasNoProbeTasks ? true : false
133
126
  }
134
- if (!options._installed[id]) {
135
- // let's not bother running this inside test cases
136
- const isInTest = typeof it === "function";
137
- if (!isInTest || options.forceRun) {
138
- update();
139
- }
140
- options._probes[id] = update.bind(null, true);
141
- options._installed[id] = true;
127
+ };
128
+ const allProbesCheckingTask = probeList2ProbeCheckingTask(options?.probes, key);
129
+ const allProbesCheckingFunc = async () => {
130
+ if (probeDB[key]?.allProbesChecking !== allProbesCheckingTask) {
131
+ return;
142
132
  }
143
- });
144
- // run it again in a minute in case OptionsIO was modified to add extra probes
145
- setTimeout(() => installUpdater(options), options.probeUpdateMs * 10).unref();
133
+ await allProbesCheckingTask();
134
+ // .unref() make sure the timer will not block the process from exiting
135
+ setTimeout(allProbesCheckingFunc, probeDB[key].config.probeUpdateMs).unref();
136
+ };
137
+ // should save allProbesCheckingTask rather than allProbesCheckingFunc
138
+ // as allProbesCheckingFunc include the `setTimeout` logic
139
+ probeDB[key].allProbesChecking = allProbesCheckingTask;
140
+ // let's not bother running this inside test cases
141
+ const isInTest = typeof it === "function";
142
+ if (!hasNoProbeTasks) {
143
+ if (!isInTest || options?.forceRun) {
144
+ setTimeout(allProbesCheckingFunc, probeDB[key].config.probeUpdateMs).unref();
145
+ }
146
+ else {
147
+ // when the probe not run (e.g. in test cases) to make sure set it as true initially
148
+ probeDB[key].state.ready = true;
149
+ }
150
+ }
151
+ return probeDB[key];
146
152
  }
147
- function installStatusRouter(app, options = {}, routePrefix = "") {
148
- app.use(routePrefix + "/status", createStatusRouter(options));
153
+ export function installStatusRouter(app, options = {}, routePrefix = "") {
154
+ options.key = options?.key
155
+ ? options?.key
156
+ : callerPath() + routePrefix + "/status";
157
+ installUpdater(options);
158
+ const statusRouter = createStatusRouter(options.key);
159
+ app.use(routePrefix + "/status", statusRouter);
149
160
  }
150
- exports.installStatusRouter = installStatusRouter;
151
- function createServiceProbe(url, statusLocation = "/status/ready") {
152
- return () => __awaiter(this, void 0, void 0, function* () {
153
- const data = yield requestPromise("GET", `${url}${statusLocation}`);
161
+ export function createServiceProbe(url, statusLocation = "/status/ready") {
162
+ return async () => {
163
+ const res = await fetch(`${url}${statusLocation}`);
164
+ let data;
165
+ try {
166
+ data = await res.json();
167
+ }
168
+ catch (e) {
169
+ throw new Error(`Failed to parse response from ${url}${statusLocation}: ${e}`);
170
+ }
171
+ if (!res.ok) {
172
+ throw Object.assign({ statusCode: res.status }, data);
173
+ }
154
174
  return data;
155
- });
156
- }
157
- exports.createServiceProbe = createServiceProbe;
158
- function requestPromise(method, url) {
159
- return new Promise((resolve, reject) => {
160
- request({
161
- method,
162
- uri: url,
163
- json: true
164
- }, (error, response, body) => {
165
- if (error) {
166
- reject(error);
167
- }
168
- else {
169
- if (response.statusCode >= 200 &&
170
- response.statusCode <= 299) {
171
- resolve(body);
172
- }
173
- else {
174
- reject(Object.assign({ statusCode: response.statusCode }, body));
175
- }
176
- }
177
- });
178
- });
175
+ };
179
176
  }
180
177
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/express/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/express/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,UAAU,MAAM,aAAa,CAAC;AAiCrC;;;;GAIG;AACH,MAAM,OAAO,GAAqC,EAAE,CAAC;AACrD,MAAM,eAAe,GAAG,GAAU,EAAE,CAAC,CAAC;IAClC,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC/B,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC9B,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,KAAK,IAAoB,EAAE,CACzC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE3D,SAAS,2BAA2B,CAChC,IAA4B,EAC5B,GAAW;IAEX,MAAM,SAAS,GAAkB,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACrC,OAAO,KAAK,IAAI,EAAE;YACd,SAAS,CAAC,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QACxC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CACvC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,aAAa,GACf,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,SAAS,GAAU,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,KAAK,EAAE,CAAC;gBAChC,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAC7C,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACJ,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;gBAC3B,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,oDAAoD;gBACpD,kCAAkC;gBAClC,IAAI,aAAa,EAAE,KAAK,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACpC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC7B,CAAC;YACL,CAAC;YACD,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YAC3C,SAAS,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1C,2BAA2B;YAC3B,IAAI,SAAS,CAAC,KAAK,KAAK,aAAa,EAAE,KAAK,EAAE,CAAC;gBAC3C,SAAS,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;gBAClD,OAAO,CAAC,GAAG,CACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAC/B,IAAI,EACJ,SAAS,CAAC,KAAK,CAClB,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;YAC1C,CAAC;YACD,qCAAqC;YACrC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACL,CAAC,CACJ,CAAC;IAEF,OAAO,KAAK,IAAI,EAAE;QACd,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,6BAA6B;QAC7B,IACI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAC3B,KAAK,CAAC,CAAC,EACV,CAAC;YACC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAClC,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED,0FAA0F;AAC1F,kEAAkE;AAClE,SAAS,kBAAkB,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,gCAAgC;IAChC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI;QAC/B,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,8CAA8C;IAC9C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,EAAE,GAAG;QAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,gEAAgE;IAChE,cAAc;IACd,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,GAAG,EAAE,GAAG;QACnC,MAAM,SAAS,GAAkB,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC/C,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK;YAC5B,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK;YAC5B,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;YAC1B,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO;YAChC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAChC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,WAAW,GAAG,EAAE,GAAG;QAC7C,MAAM,SAAS,GAAkB,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,SAAS,EAAE,iBAAiB,EAAE,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC/C,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK;YAC5B,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK;YAC5B,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;YAC1B,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO;YAChC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAChC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,OAAqB;IACzC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,eAAe,GACjB,CAAC,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,GAAG;QACX,GAAG;QACH,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE;QAC5C,KAAK,EAAE;YACH,GAAG,eAAe,EAAE;YACpB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;SACxC;KACJ,CAAC;IAEF,MAAM,qBAAqB,GAAG,2BAA2B,CACrD,OAAO,EAAE,MAAM,EACf,GAAG,CACN,CAAC;IACF,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,iBAAiB,KAAK,qBAAqB,EAAE,CAAC;YAC5D,OAAO;QACX,CAAC;QACD,MAAM,qBAAqB,EAAE,CAAC;QAC9B,uEAAuE;QACvE,UAAU,CACN,qBAAqB,EACrB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CACpC,CAAC,KAAK,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,sEAAsE;IACtE,0DAA0D;IAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,GAAG,qBAAqB,CAAC;IAEvD,kDAAkD;IAClD,MAAM,QAAQ,GAAG,OAAO,EAAE,KAAK,UAAU,CAAC;IAE1C,IAAI,CAAC,eAAe,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACjC,UAAU,CACN,qBAAqB,EACrB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CACpC,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACJ,oFAAoF;YACpF,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,GAAW,EACX,UAAwB,EAAE,EAC1B,cAAsB,EAAE;IAExB,OAAO,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG;QACtB,CAAC,CAAC,OAAO,EAAE,GAAG;QACd,CAAC,CAAC,UAAU,EAAE,GAAG,WAAW,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,GAAW,EACX,iBAAyB,eAAe;IAExC,OAAO,KAAK,IAAoB,EAAE;QAC9B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,cAAc,EAAE,CAAC,CAAC;QACnD,IAAI,IAAS,CAAC;QACd,IAAI,CAAC;YACD,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACX,iCAAiC,GAAG,GAAG,cAAc,KAAK,CAAC,EAAE,CAChE,CAAC;QACN,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACN,CAAC"}
@@ -1,9 +1,9 @@
1
- declare type RequestContentTypeJson = "application/json";
2
- declare type RequestContentTypePlainText = "text/plain";
3
- declare type RequestContentTypeForm = "application/x-www-form-urlencoded";
4
- declare type RequestContentTypeBinary = "application/octet-stream";
5
- declare type RequestContentTypeMultipartForm = "multipart/form-data";
6
- declare type RequestContentType = RequestContentTypeJson | RequestContentTypePlainText | RequestContentTypeForm | RequestContentTypeBinary | RequestContentTypeMultipartForm;
1
+ type RequestContentTypeJson = "application/json";
2
+ type RequestContentTypePlainText = "text/plain";
3
+ type RequestContentTypeForm = "application/x-www-form-urlencoded";
4
+ type RequestContentTypeBinary = "application/octet-stream";
5
+ type RequestContentTypeMultipartForm = "multipart/form-data";
6
+ type RequestContentType = RequestContentTypeJson | RequestContentTypePlainText | RequestContentTypeForm | RequestContentTypeBinary | RequestContentTypeMultipartForm;
7
7
  export declare function setDefaultRequestInitOptions(options: RequestInit): void;
8
8
  export declare function getDefaultRequestInitOptions(): RequestInit;
9
9
  export default function fetchRequest<T = any, CT = string>(method: string, url: string, body?: any, contentType?: CT | RequestContentType | undefined | null, returnHeaders?: false, extraRequestOptions?: RequestInit): Promise<T>;
@@ -1,62 +1,47 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getDefaultRequestInitOptions = exports.setDefaultRequestInitOptions = void 0;
16
- const isomorphic_fetch_1 = __importDefault(require("isomorphic-fetch"));
17
- const merge_1 = __importDefault(require("lodash/merge"));
18
- const ServerError_1 = __importDefault(require("./ServerError"));
1
+ import fetch from "cross-fetch";
2
+ import merge from "lodash/merge.js";
3
+ import ServerError from "./ServerError.js";
19
4
  let defaultRequestInitOptions = {};
20
- function setDefaultRequestInitOptions(options) {
5
+ export function setDefaultRequestInitOptions(options) {
21
6
  defaultRequestInitOptions = options;
22
7
  }
23
- exports.setDefaultRequestInitOptions = setDefaultRequestInitOptions;
24
- function getDefaultRequestInitOptions() {
8
+ export function getDefaultRequestInitOptions() {
25
9
  return defaultRequestInitOptions;
26
10
  }
27
- exports.getDefaultRequestInitOptions = getDefaultRequestInitOptions;
28
- function fetchRequest(method, url, body = undefined, contentType = "application/json", returnHeaders = false, extraRequestOptions = {}) {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- const defaultOptions = Object.assign({}, (defaultRequestInitOptions ? defaultRequestInitOptions : {}));
31
- const fetchOptions = merge_1.default(defaultOptions, Object.assign({ method }, extraRequestOptions));
32
- if (body !== undefined) {
33
- if (contentType === "application/json") {
34
- fetchOptions.body = JSON.stringify(body);
11
+ export default async function fetchRequest(method, url, body = undefined, contentType = "application/json", returnHeaders = false, extraRequestOptions = {}) {
12
+ const defaultOptions = {
13
+ ...(defaultRequestInitOptions ? defaultRequestInitOptions : {})
14
+ };
15
+ const fetchOptions = merge(defaultOptions, {
16
+ method,
17
+ ...extraRequestOptions
18
+ });
19
+ if (body !== undefined) {
20
+ if (contentType === "application/json") {
21
+ fetchOptions.body = JSON.stringify(body);
22
+ fetchOptions.headers = {
23
+ "Content-type": "application/json"
24
+ };
25
+ }
26
+ else {
27
+ fetchOptions.body = body;
28
+ if (typeof contentType === "string") {
35
29
  fetchOptions.headers = {
36
- "Content-type": "application/json"
30
+ "Content-type": contentType
37
31
  };
38
32
  }
39
- else {
40
- fetchOptions.body = body;
41
- if (typeof contentType === "string") {
42
- fetchOptions.headers = {
43
- "Content-type": contentType
44
- };
45
- }
46
- }
47
- }
48
- const response = yield isomorphic_fetch_1.default(url, fetchOptions);
49
- if (response.status >= 200 && response.status < 300) {
50
- // wrapping this in try/catch as the request succeeded
51
- // this is just haggling over response content
52
- return returnHeaders
53
- ? [(yield response.json()), response.headers]
54
- : (yield response.json());
55
33
  }
56
- // --- get responseText and remove any HTML tags
57
- const responseText = (yield response.text()).replace(/<(.|\n)*?>/g, "");
58
- throw new ServerError_1.default(responseText, response.status);
59
- });
34
+ }
35
+ const response = await fetch(url, fetchOptions);
36
+ if (response.status >= 200 && response.status < 300) {
37
+ // wrapping this in try/catch as the request succeeded
38
+ // this is just haggling over response content
39
+ return returnHeaders
40
+ ? [(await response.json()), response.headers]
41
+ : (await response.json());
42
+ }
43
+ // --- get responseText and remove any HTML tags
44
+ const responseText = (await response.text()).replace(/<(.|\n)*?>/g, "");
45
+ throw new ServerError(responseText, response.status);
60
46
  }
61
- exports.default = fetchRequest;
62
47
  //# sourceMappingURL=fetchRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetchRequest.js","sourceRoot":"","sources":["../src/fetchRequest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wEAAqC;AACrC,yDAAiC;AACjC,gEAAwC;AAexC,IAAI,yBAAyB,GAAgB,EAAE,CAAC;AAEhD,SAAgB,4BAA4B,CAAC,OAAoB;IAC7D,yBAAyB,GAAG,OAAO,CAAC;AACxC,CAAC;AAFD,oEAEC;AAED,SAAgB,4BAA4B;IACxC,OAAO,yBAAyB,CAAC;AACrC,CAAC;AAFD,oEAEC;AAoBD,SAA8B,YAAY,CACtC,MAAc,EACd,GAAW,EACX,OAAY,SAAS,EACrB,cAIa,kBAAkB,EAC/B,gBAAyB,KAAK,EAC9B,sBAAmC,EAAE;;QAErC,MAAM,cAAc,qBACb,CAAC,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAClE,CAAC;QACF,MAAM,YAAY,GAAG,eAAK,CAAC,cAAc,kBACrC,MAAM,IACH,mBAAmB,EACxB,CAAC;QACH,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,IAAI,WAAW,KAAK,kBAAkB,EAAE;gBACpC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACzC,YAAY,CAAC,OAAO,GAAG;oBACnB,cAAc,EAAE,kBAAkB;iBACrC,CAAC;aACL;iBAAM;gBACH,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;gBACzB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;oBACjC,YAAY,CAAC,OAAO,GAAG;wBACnB,cAAc,EAAE,WAAW;qBAC9B,CAAC;iBACL;aACJ;SACJ;QAED,MAAM,QAAQ,GAAG,MAAM,0BAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAEhD,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;YACjD,sDAAsD;YACtD,8CAA8C;YAC9C,OAAO,aAAa;gBAChB,CAAC,CAAE,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,EAAE,QAAQ,CAAC,OAAO,CAAkB;gBACpE,CAAC,CAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAO,CAAC;SACxC;QACD,gDAAgD;QAChD,MAAM,YAAY,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,qBAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;CAAA;AA/CD,+BA+CC"}
1
+ {"version":3,"file":"fetchRequest.js","sourceRoot":"","sources":["../src/fetchRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAe3C,IAAI,yBAAyB,GAAgB,EAAE,CAAC;AAEhD,MAAM,UAAU,4BAA4B,CAAC,OAAoB;IAC7D,yBAAyB,GAAG,OAAO,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,4BAA4B;IACxC,OAAO,yBAAyB,CAAC;AACrC,CAAC;AAoBD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY,CACtC,MAAc,EACd,GAAW,EACX,OAAY,SAAS,EACrB,cAIa,kBAAkB,EAC/B,gBAAyB,KAAK,EAC9B,sBAAmC,EAAE;IAErC,MAAM,cAAc,GAAG;QACnB,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,EAAE;QACvC,MAAM;QACN,GAAG,mBAAmB;KACzB,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;YACrC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACzC,YAAY,CAAC,OAAO,GAAG;gBACnB,cAAc,EAAE,kBAAkB;aACrC,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;YACzB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAClC,YAAY,CAAC,OAAO,GAAG;oBACnB,cAAc,EAAE,WAAW;iBAC9B,CAAC;YACN,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEhD,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAClD,sDAAsD;QACtD,8CAA8C;QAC9C,OAAO,aAAa;YAChB,CAAC,CAAE,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,EAAE,QAAQ,CAAC,OAAO,CAAkB;YACpE,CAAC,CAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAO,CAAC;IACzC,CAAC;IACD,gDAAgD;IAChD,MAAM,YAAY,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC"}
@@ -1,12 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function formatServiceError(baseMessage, e, retriesLeft) {
1
+ export default function formatServiceError(baseMessage, e, retriesLeft) {
4
2
  let messageParts = [baseMessage];
5
3
  if (retriesLeft) {
6
4
  messageParts.push(`${retriesLeft} retries left.`);
7
5
  }
8
- if (e && e.response && e.response.statusCode && e.body) {
9
- messageParts.push(`Status code: ${e.response.statusCode}, body:\n${JSON.stringify(e.body, null, " ")}`);
6
+ if ((e?.response?.statusCode || e?.response?.status) && e.body) {
7
+ const statusCode = e?.response?.status || e?.response?.statusCode;
8
+ messageParts.push(`Status code: ${statusCode}, body:\n${JSON.stringify(e.body, null, " ")}`);
10
9
  }
11
10
  else if (e && e instanceof Error) {
12
11
  messageParts.push(`Exception:\n${e.toString()}`);
@@ -19,5 +18,4 @@ function formatServiceError(baseMessage, e, retriesLeft) {
19
18
  }
20
19
  return messageParts.join(" ");
21
20
  }
22
- exports.default = formatServiceError;
23
21
  //# sourceMappingURL=formatServiceError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatServiceError.js","sourceRoot":"","sources":["../src/formatServiceError.ts"],"names":[],"mappings":";;AAAA,SAAwB,kBAAkB,CACtC,WAAmB,EACnB,CAAM,EACN,WAAmB;IAEnB,IAAI,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI,WAAW,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,gBAAgB,CAAC,CAAC;KACrD;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE;QACpD,YAAY,CAAC,IAAI,CACb,gBAAgB,CAAC,CAAC,QAAQ,CAAC,UAAU,YAAY,IAAI,CAAC,SAAS,CAC3D,CAAC,CAAC,IAAI,EACN,IAAI,EACJ,IAAI,CACP,EAAE,CACN,CAAC;KACL;SAAM,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE;QAChC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KACpD;SAAM,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC5C,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KAClD;SAAM,IAAI,CAAC,EAAE;QACV,YAAY,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;KACnE;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AA1BD,qCA0BC"}
1
+ {"version":3,"file":"formatServiceError.js","sourceRoot":"","sources":["../src/formatServiceError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACtC,WAAmB,EACnB,CAAM,EACN,WAAmB;IAEnB,IAAI,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI,WAAW,EAAE,CAAC;QACd,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,gBAAgB,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC;QAClE,YAAY,CAAC,IAAI,CACb,gBAAgB,UAAU,YAAY,IAAI,CAAC,SAAS,CAChD,CAAC,CAAC,IAAI,EACN,IAAI,EACJ,IAAI,CACP,EAAE,CACN,CAAC;IACN,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACjC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC7C,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,CAAC,EAAE,CAAC;QACX,YAAY,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}