@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.
- package/dist/AspectBuilder.d.ts +1 -1
- package/dist/AspectBuilder.js +1 -2
- package/dist/AspectCreationFailure.js +3 -4
- package/dist/AspectCreationFailure.js.map +1 -1
- package/dist/AsyncPage.js +59 -79
- package/dist/AsyncPage.js.map +1 -1
- package/dist/BaseApiClient.d.ts +3 -3
- package/dist/BaseApiClient.js +20 -13
- package/dist/BaseApiClient.js.map +1 -1
- package/dist/ConnectionResult.d.ts +2 -2
- package/dist/ConnectionResult.js +17 -22
- package/dist/ConnectionResult.js.map +1 -1
- package/dist/ConnectorRecordId.d.ts +1 -1
- package/dist/ConnectorRecordId.js +9 -13
- package/dist/ConnectorRecordId.js.map +1 -1
- package/dist/IndexerApiClient.d.ts +1 -1
- package/dist/IndexerApiClient.js +13 -32
- package/dist/IndexerApiClient.js.map +1 -1
- package/dist/JsonConnector.d.ts +9 -9
- package/dist/JsonConnector.js +163 -206
- package/dist/JsonConnector.js.map +1 -1
- package/dist/JsonTransformer.d.ts +3 -3
- package/dist/JsonTransformer.js +71 -75
- package/dist/JsonTransformer.js.map +1 -1
- package/dist/OpaCompileResponseParser.d.ts +4 -4
- package/dist/OpaCompileResponseParser.js +279 -212
- package/dist/OpaCompileResponseParser.js.map +1 -1
- package/dist/RecordCreationFailure.d.ts +1 -1
- package/dist/RecordCreationFailure.js +4 -4
- package/dist/RecordCreationFailure.js.map +1 -1
- package/dist/SQLUtils.d.ts +3 -3
- package/dist/SQLUtils.js +139 -195
- package/dist/SQLUtils.js.map +1 -1
- package/dist/ServerError.js +2 -4
- package/dist/ServerError.js.map +1 -1
- package/dist/Try.js +20 -35
- package/dist/Try.js.map +1 -1
- package/dist/addTrailingSlash.js +1 -4
- package/dist/addTrailingSlash.js.map +1 -1
- package/dist/appendUrlSegments.js +3 -8
- package/dist/appendUrlSegments.js.map +1 -1
- package/dist/authorization-api/AccessControlError.d.ts +1 -1
- package/dist/authorization-api/AccessControlError.js +2 -8
- package/dist/authorization-api/AccessControlError.js.map +1 -1
- package/dist/authorization-api/ApiClient.d.ts +3 -3
- package/dist/authorization-api/ApiClient.js +211 -272
- package/dist/authorization-api/ApiClient.js.map +1 -1
- package/dist/authorization-api/AuthError.d.ts +1 -1
- package/dist/authorization-api/AuthError.js +2 -8
- package/dist/authorization-api/AuthError.js.map +1 -1
- package/dist/authorization-api/GenericError.js +2 -4
- package/dist/authorization-api/GenericError.js.map +1 -1
- package/dist/authorization-api/authMiddleware.d.ts +3 -3
- package/dist/authorization-api/authMiddleware.js +19 -40
- package/dist/authorization-api/authMiddleware.js.map +1 -1
- package/dist/authorization-api/constants.js +9 -12
- package/dist/authorization-api/constants.js.map +1 -1
- package/dist/authorization-api/model.d.ts +8 -8
- package/dist/authorization-api/model.js +1 -2
- package/dist/coerceJson.js +1 -3
- package/dist/coerceJson.js.map +1 -1
- package/dist/createNoCacheFetchOptions.d.ts +1 -1
- package/dist/createNoCacheFetchOptions.js +4 -7
- package/dist/createNoCacheFetchOptions.js.map +1 -1
- package/dist/createServiceError.d.ts +1 -1
- package/dist/createServiceError.js +7 -11
- package/dist/createServiceError.js.map +1 -1
- package/dist/delay.js +1 -3
- package/dist/delay.js.map +1 -1
- package/dist/express/getNoCacheHeaders.js +1 -3
- package/dist/express/getNoCacheHeaders.js.map +1 -1
- package/dist/express/setResponseNoCache.d.ts +1 -1
- package/dist/express/setResponseNoCache.js +3 -8
- package/dist/express/setResponseNoCache.js.map +1 -1
- package/dist/express/status.d.ts +14 -15
- package/dist/express/status.js +145 -148
- package/dist/express/status.js.map +1 -1
- package/dist/fetchRequest.d.ts +6 -6
- package/dist/fetchRequest.js +36 -51
- package/dist/fetchRequest.js.map +1 -1
- package/dist/formatServiceError.js +4 -6
- package/dist/formatServiceError.js.map +1 -1
- package/dist/generated/registry/api.d.ts +67 -55
- package/dist/generated/registry/api.js +557 -765
- package/dist/generated/registry/api.js.map +1 -1
- package/dist/getAbsoluteUrl.js +8 -11
- package/dist/getAbsoluteUrl.js.map +1 -1
- package/dist/getBasePathFromUrl.js +3 -9
- package/dist/getBasePathFromUrl.js.map +1 -1
- package/dist/getBoolValWithDefault.js +1 -3
- package/dist/getBoolValWithDefault.js.map +1 -1
- package/dist/getRequest.js +9 -26
- package/dist/getRequest.js.map +1 -1
- package/dist/getRequestNoCache.js +4 -21
- package/dist/getRequestNoCache.js.map +1 -1
- package/dist/getStorageUrl.js +13 -23
- package/dist/getStorageUrl.js.map +1 -1
- package/dist/getUserAgent.d.ts +2 -0
- package/dist/getUserAgent.js +10 -0
- package/dist/getUserAgent.js.map +1 -0
- package/dist/handleServerError.js +3 -9
- package/dist/handleServerError.js.map +1 -1
- package/dist/markdownToHtml.js +5 -11
- package/dist/markdownToHtml.js.map +1 -1
- package/dist/opa/AspectQuery.js +55 -79
- package/dist/opa/AspectQuery.js.map +1 -1
- package/dist/opa/AuthDecision.d.ts +2 -2
- package/dist/opa/AuthDecision.js +52 -69
- package/dist/opa/AuthDecision.js.map +1 -1
- package/dist/opa/AuthDecisionQueryClient.d.ts +2 -2
- package/dist/opa/AuthDecisionQueryClient.js +72 -102
- package/dist/opa/AuthDecisionQueryClient.js.map +1 -1
- package/dist/pgTypes.js +4 -9
- package/dist/pgTypes.js.map +1 -1
- package/dist/registry/AuthorizedRegistryClient.d.ts +4 -4
- package/dist/registry/AuthorizedRegistryClient.js +55 -95
- package/dist/registry/AuthorizedRegistryClient.js.map +1 -1
- package/dist/registry/RegistryClient.d.ts +2 -3
- package/dist/registry/RegistryClient.js +61 -78
- package/dist/registry/RegistryClient.js.map +1 -1
- package/dist/registry/TenantConsts.js +3 -6
- package/dist/registry/TenantConsts.js.map +1 -1
- package/dist/registry/model.js +1 -2
- package/dist/registry-manual/api.d.ts +1 -1
- package/dist/registry-manual/api.js +18 -7
- package/dist/registry-manual/api.js.map +1 -1
- package/dist/retry.d.ts +1 -1
- package/dist/retry.js +3 -9
- package/dist/retry.js.map +1 -1
- package/dist/retryBackoff.js +3 -9
- package/dist/retryBackoff.js.map +1 -1
- package/dist/runLater.js +1 -4
- package/dist/runLater.js.map +1 -1
- package/dist/session/GetUserId.d.ts +2 -2
- package/dist/session/GetUserId.js +10 -16
- package/dist/session/GetUserId.js.map +1 -1
- package/dist/session/GetUserSession.d.ts +1 -1
- package/dist/session/GetUserSession.js +6 -10
- package/dist/session/GetUserSession.js.map +1 -1
- package/dist/session/addJwtSecretFromEnvVar.js +1 -4
- package/dist/session/addJwtSecretFromEnvVar.js.map +1 -1
- package/dist/session/buildJwt.d.ts +1 -1
- package/dist/session/buildJwt.js +2 -5
- package/dist/session/buildJwt.js.map +1 -1
- package/dist/session/buildJwtFromReq.d.ts +1 -1
- package/dist/session/buildJwtFromReq.js +3 -8
- package/dist/session/buildJwtFromReq.js.map +1 -1
- package/dist/session/cookieUtils.d.ts +2 -13
- package/dist/session/cookieUtils.js +8 -9
- package/dist/session/cookieUtils.js.map +1 -1
- package/dist/session/destroySession.js +18 -33
- package/dist/session/destroySession.js.map +1 -1
- package/dist/session/getSessionId.js +5 -11
- package/dist/session/getSessionId.js.map +1 -1
- package/dist/tenant-api/AuthorizedTenantClient.d.ts +1 -1
- package/dist/tenant-api/AuthorizedTenantClient.js +22 -36
- package/dist/tenant-api/AuthorizedTenantClient.js.map +1 -1
- package/dist/tenant-api/Tenant.js +13 -5
- package/dist/tenant-api/Tenant.js.map +1 -1
- package/dist/test/JsonConnector.spec.js +56 -61
- package/dist/test/JsonConnector.spec.js.map +1 -1
- package/dist/test/JsonTransformer.spec.js +15 -19
- package/dist/test/JsonTransformer.spec.js.map +1 -1
- package/dist/test/arbitraries.d.ts +21 -21
- package/dist/test/arbitraries.js +85 -99
- package/dist/test/arbitraries.js.map +1 -1
- package/dist/test/aspect-templates/organization-details.d.ts +1 -4
- package/dist/test/aspect-templates/organization-details.js +1 -1
- package/dist/test/aspect-templates/organization-details.js.map +1 -1
- package/dist/test/buildApiClient.spec.js +81 -107
- package/dist/test/buildApiClient.spec.js.map +1 -1
- package/dist/test/buildAuthorizedTenantClient.spec.js +25 -40
- package/dist/test/buildAuthorizedTenantClient.spec.js.map +1 -1
- package/dist/test/connectors/MockExpressServer.js +9 -23
- package/dist/test/connectors/MockExpressServer.js.map +1 -1
- package/dist/test/connectors/MockRegistry.d.ts +1 -1
- package/dist/test/connectors/MockRegistry.js +11 -18
- package/dist/test/connectors/MockRegistry.js.map +1 -1
- package/dist/test/connectors/runConnectorTest.js +33 -55
- package/dist/test/connectors/runConnectorTest.js.map +1 -1
- package/dist/test/createMockAuthDecisionQueryClient.d.ts +4 -4
- package/dist/test/createMockAuthDecisionQueryClient.js +4 -9
- package/dist/test/createMockAuthDecisionQueryClient.js.map +1 -1
- package/dist/test/db/getTestDBConfig.js +1 -3
- package/dist/test/db/getTestDBConfig.js.map +1 -1
- package/dist/test/db/runMigrationSql.js +37 -58
- package/dist/test/db/runMigrationSql.js.map +1 -1
- package/dist/test/express/status.spec.js +81 -72
- package/dist/test/express/status.spec.js.map +1 -1
- package/dist/test/fakeArgv.js +6 -5
- package/dist/test/fakeArgv.js.map +1 -1
- package/dist/test/getBasePathFromUrl.spec.js +5 -10
- package/dist/test/getBasePathFromUrl.spec.js.map +1 -1
- package/dist/test/getStorageUrl.spec.js +22 -46
- package/dist/test/getStorageUrl.spec.js.map +1 -1
- package/dist/test/mockAuthApiHost.js +26 -28
- package/dist/test/mockAuthApiHost.js.map +1 -1
- package/dist/test/mockAuthorization.js +4 -10
- package/dist/test/mockAuthorization.js.map +1 -1
- package/dist/test/mockTenantDataStore.d.ts +1 -1
- package/dist/test/mockTenantDataStore.js +3 -5
- package/dist/test/mockTenantDataStore.js.map +1 -1
- package/dist/test/mockUserDataStore.d.ts +1 -1
- package/dist/test/mockUserDataStore.js +4 -6
- package/dist/test/mockUserDataStore.js.map +1 -1
- package/dist/test/registry/buildAuthorizedClient.spec.js +65 -87
- package/dist/test/registry/buildAuthorizedClient.spec.js.map +1 -1
- package/dist/test/session/buildJwt.spec.js +15 -19
- package/dist/test/session/buildJwt.spec.js.map +1 -1
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js +6 -11
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js.map +1 -1
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js +6 -11
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js.map +1 -1
- package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js +6 -11
- package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js.map +1 -1
- package/dist/test/testAsyncPage.spec.js +84 -105
- package/dist/test/testAsyncPage.spec.js.map +1 -1
- package/dist/test/testOpaCompileResponseParser.spec.js +192 -196
- package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -1
- package/dist/test/util.js +1 -5
- package/dist/test/util.js.map +1 -1
- package/dist/unknown2Error.d.ts +2 -0
- package/dist/unknown2Error.js +3 -0
- package/dist/unknown2Error.js.map +1 -0
- package/dist/util/arrayToMaybe.d.ts +1 -1
- package/dist/util/arrayToMaybe.js +3 -6
- package/dist/util/arrayToMaybe.js.map +1 -1
- package/dist/util/cleanOrgTitle.js +1 -4
- package/dist/util/cleanOrgTitle.js.map +1 -1
- package/dist/util/escapeRegExp.js +1 -3
- package/dist/util/escapeRegExp.js.map +1 -1
- package/dist/util/getMinikubeIP.js +3 -9
- package/dist/util/getMinikubeIP.js.map +1 -1
- package/dist/util/isArray.js +1 -3
- package/dist/util/isArray.js.map +1 -1
- package/dist/util/isUuid.js +1 -3
- package/dist/util/isUuid.js.map +1 -1
- package/dist/util/unionToThrowable.d.ts +1 -1
- package/dist/util/unionToThrowable.js +3 -9
- package/dist/util/unionToThrowable.js.map +1 -1
- package/dist/utilityTypes.d.ts +1 -1
- package/dist/utilityTypes.js +1 -2
- package/package.json +45 -29
- package/dist/request.d.ts +0 -3
- package/dist/request.js +0 -19
- package/dist/request.js.map +0 -1
- package/dist/test/jsverify.d.ts +0 -2
- package/dist/test/jsverify.js +0 -8
- package/dist/test/jsverify.js.map +0 -1
package/dist/express/status.js
CHANGED
|
@@ -1,22 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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(
|
|
18
|
-
const 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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
145
|
-
|
|
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
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/express/status.ts"],"names":[],"mappings":"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"}
|
package/dist/fetchRequest.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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>;
|
package/dist/fetchRequest.js
CHANGED
|
@@ -1,62 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
24
|
-
function getDefaultRequestInitOptions() {
|
|
8
|
+
export function getDefaultRequestInitOptions() {
|
|
25
9
|
return defaultRequestInitOptions;
|
|
26
10
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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":
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
package/dist/fetchRequest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchRequest.js","sourceRoot":"","sources":["../src/fetchRequest.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
|
9
|
-
|
|
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":"
|
|
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"}
|