@bitblit/ratchet-epsilon-common 4.0.115-alpha → 4.0.119-alpha
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/lib/background/background-dynamo-log-table-handler.d.ts +1 -1
- package/lib/background/background-handler.d.ts +1 -1
- package/lib/background/background-http-adapter-handler.d.ts +1 -1
- package/lib/background/background-validator.d.ts +1 -1
- package/lib/build/ratchet-epsilon-common-info.d.ts +1 -1
- package/lib/built-in/daemon/daemon-authorizer-function.d.ts +1 -1
- package/lib/built-in/daemon/daemon-handler.d.ts +2 -2
- package/lib/built-in/daemon/daemon-process-state-list.d.ts +1 -1
- package/lib/built-in/http/built-in-auth-filters.d.ts +1 -1
- package/lib/cli/ratchet-cli-handler.d.ts +2 -2
- package/lib/config/epsilon-logger-config.d.ts +2 -2
- package/lib/config/http/filter-chain-context.d.ts +1 -1
- package/lib/config/http/http-config.d.ts +1 -1
- package/lib/epsilon-global-handler.d.ts +1 -1
- package/lib/epsilon-instance.d.ts +1 -1
- package/lib/epsilon-logging-extension-processor.d.ts +2 -2
- package/lib/http/auth/auth0-web-token-manipulator.d.ts +1 -1
- package/lib/http/auth/google-web-token-manipulator.d.ts +1 -1
- package/lib/http/auth/jwt-ratchet-local-web-token-manipulator.d.ts +2 -2
- package/lib/http/auth/local-web-token-manipulator.d.ts +3 -3
- package/lib/http/auth/web-token-manipulator.d.ts +1 -1
- package/lib/http/event-util.d.ts +1 -1
- package/lib/http/response-util.d.ts +1 -1
- package/lib/http/route/epsilon-router.d.ts +1 -1
- package/lib/http/route/router-util.d.ts +2 -2
- package/lib/index.d.ts +132 -1
- package/lib/index.mjs +344 -0
- package/lib/index.mjs.map +1 -0
- package/lib/local-container-server.d.ts +1 -1
- package/lib/local-server.d.ts +1 -1
- package/lib/sample/test-error-server.d.ts +1 -1
- package/lib/util/epsilon-config-parser.d.ts +1 -1
- package/package.json +18 -19
- package/lib/background/background-dynamo-log-table-handler.js +0 -37
- package/lib/background/background-entry.js +0 -1
- package/lib/background/background-execution-event-type.js +0 -8
- package/lib/background/background-execution-event.js +0 -1
- package/lib/background/background-execution-listener.js +0 -1
- package/lib/background/background-handler.js +0 -273
- package/lib/background/background-http-adapter-handler.js +0 -128
- package/lib/background/background-meta-response-internal.js +0 -1
- package/lib/background/background-process-handling.js +0 -5
- package/lib/background/background-process-log-table-entry.js +0 -1
- package/lib/background/background-queue-response-internal.js +0 -1
- package/lib/background/background-validator.js +0 -86
- package/lib/background/epsilon-background-process-error.js +0 -93
- package/lib/background/internal-background-entry.js +0 -1
- package/lib/background/manager/abstract-background-manager.js +0 -89
- package/lib/background/manager/aws-sqs-sns-background-manager.js +0 -153
- package/lib/background/manager/background-manager-like.js +0 -1
- package/lib/background/manager/background-manager.spec.js +0 -73
- package/lib/background/manager/single-thread-local-background-manager.js +0 -45
- package/lib/background/s3-background-transaction-logger.js +0 -52
- package/lib/build/ratchet-epsilon-common-info.js +0 -14
- package/lib/built-in/background/echo-processor.js +0 -15
- package/lib/built-in/background/log-and-enqueue-echo-processor.js +0 -12
- package/lib/built-in/background/log-message-background-error-processor.js +0 -6
- package/lib/built-in/background/no-op-processor.js +0 -9
- package/lib/built-in/background/retry-processor.js +0 -40
- package/lib/built-in/background/sample-delay-processor.js +0 -13
- package/lib/built-in/background/sample-input-validated-processor-data.js +0 -1
- package/lib/built-in/background/sample-input-validated-processor.js +0 -12
- package/lib/built-in/built-in-trace-id-generators.js +0 -21
- package/lib/built-in/daemon/daemon-authorizer-function.js +0 -1
- package/lib/built-in/daemon/daemon-config.js +0 -1
- package/lib/built-in/daemon/daemon-group-selection-function.js +0 -1
- package/lib/built-in/daemon/daemon-handler.js +0 -59
- package/lib/built-in/daemon/daemon-process-state-list.js +0 -1
- package/lib/built-in/http/apollo-filter.js +0 -59
- package/lib/built-in/http/built-in-auth-filters.js +0 -107
- package/lib/built-in/http/built-in-authorizers.js +0 -39
- package/lib/built-in/http/built-in-filters.js +0 -208
- package/lib/built-in/http/built-in-handlers.js +0 -69
- package/lib/built-in/http/log-level-manipulation-filter.js +0 -16
- package/lib/built-in/http/run-handler-as-filter.js +0 -60
- package/lib/built-in/http/run-handler-as-filter.spec.js +0 -40
- package/lib/cli/ratchet-cli-handler.js +0 -20
- package/lib/cli/run-background-process-from-command-line.js +0 -22
- package/lib/config/background/background-aws-config.js +0 -1
- package/lib/config/background/background-config.js +0 -1
- package/lib/config/background/background-error-processor.js +0 -1
- package/lib/config/background/background-processor.js +0 -1
- package/lib/config/background/background-transaction-log.js +0 -1
- package/lib/config/background/background-transaction-logger.js +0 -1
- package/lib/config/cron/abstract-cron-entry.js +0 -1
- package/lib/config/cron/cron-background-entry.js +0 -1
- package/lib/config/cron/cron-config.js +0 -1
- package/lib/config/dynamo-db-config.js +0 -1
- package/lib/config/epsilon-config.js +0 -1
- package/lib/config/epsilon-lambda-event-handler.js +0 -1
- package/lib/config/epsilon-logger-config.js +0 -1
- package/lib/config/generic-aws-event-handler-function.js +0 -1
- package/lib/config/http/authorizer-function.js +0 -1
- package/lib/config/http/epsilon-authorization-context.js +0 -1
- package/lib/config/http/extended-api-gateway-event.js +0 -1
- package/lib/config/http/filter-chain-context.js +0 -1
- package/lib/config/http/filter-function.js +0 -1
- package/lib/config/http/handler-function.js +0 -1
- package/lib/config/http/http-config.js +0 -1
- package/lib/config/http/http-processing-config.js +0 -1
- package/lib/config/http/mapped-http-processing-config.js +0 -1
- package/lib/config/http/null-returned-object-handling.js +0 -6
- package/lib/config/inter-api/inter-api-aws-config.js +0 -1
- package/lib/config/inter-api/inter-api-config.js +0 -1
- package/lib/config/inter-api/inter-api-process-mapping.js +0 -1
- package/lib/config/logging-trace-id-generator.js +0 -1
- package/lib/config/open-api/open-api-document-components.js +0 -1
- package/lib/config/open-api/open-api-document-path.js +0 -1
- package/lib/config/open-api/open-api-document.js +0 -1
- package/lib/config/s3-config.js +0 -1
- package/lib/config/sns-config.js +0 -1
- package/lib/epsilon-build-properties.js +0 -24
- package/lib/epsilon-constants.js +0 -46
- package/lib/epsilon-global-handler.js +0 -154
- package/lib/epsilon-instance.js +0 -1
- package/lib/epsilon-logging-extension-processor.js +0 -15
- package/lib/http/auth/api-gateway-adapter-authentication-handler.js +0 -72
- package/lib/http/auth/auth0-web-token-manipulator.js +0 -61
- package/lib/http/auth/basic-auth-token.js +0 -1
- package/lib/http/auth/google-web-token-manipulator.js +0 -70
- package/lib/http/auth/google-web-token-manipulator.spec.js +0 -10
- package/lib/http/auth/jwt-ratchet-local-web-token-manipulator.js +0 -27
- package/lib/http/auth/local-web-token-manipulator.js +0 -74
- package/lib/http/auth/local-web-token-manipulator.spec.js +0 -24
- package/lib/http/auth/web-token-manipulator.js +0 -1
- package/lib/http/error/bad-gateway.js +0 -8
- package/lib/http/error/bad-request-error.js +0 -8
- package/lib/http/error/conflict-error.js +0 -8
- package/lib/http/error/epsilon-http-error.js +0 -133
- package/lib/http/error/epsilon-http-error.spec.js +0 -11
- package/lib/http/error/forbidden-error.js +0 -8
- package/lib/http/error/gateway-timeout.js +0 -8
- package/lib/http/error/method-not-allowed-error.js +0 -8
- package/lib/http/error/misconfigured-error.js +0 -8
- package/lib/http/error/not-found-error.js +0 -8
- package/lib/http/error/not-implemented.js +0 -8
- package/lib/http/error/request-timeout-error.js +0 -8
- package/lib/http/error/service-unavailable.js +0 -8
- package/lib/http/error/too-many-requests-error.js +0 -8
- package/lib/http/error/unauthorized-error.js +0 -8
- package/lib/http/event-util.js +0 -176
- package/lib/http/event-util.spec.js +0 -161
- package/lib/http/response-util.js +0 -141
- package/lib/http/response-util.spec.js +0 -92
- package/lib/http/route/epsilon-router.js +0 -1
- package/lib/http/route/extended-auth-response-context.js +0 -1
- package/lib/http/route/route-mapping.js +0 -1
- package/lib/http/route/route-validator-config.js +0 -1
- package/lib/http/route/router-util.js +0 -233
- package/lib/http/route/router-util.spec.js +0 -23
- package/lib/http/web-handler.js +0 -117
- package/lib/http/web-handler.spec.js +0 -32
- package/lib/http/web-v2-handler.js +0 -22
- package/lib/index.js +0 -1
- package/lib/inter-api/inter-api-entry.js +0 -1
- package/lib/inter-api/inter-api-util.js +0 -59
- package/lib/inter-api/inter-api-util.spec.js +0 -61
- package/lib/inter-api-manager.js +0 -65
- package/lib/lambda-event-handler/cron-epsilon-lambda-event-handler.js +0 -73
- package/lib/lambda-event-handler/cron-epsilon-lambda-event-handler.spec.js +0 -50
- package/lib/lambda-event-handler/dynamo-epsilon-lambda-event-handler.js +0 -33
- package/lib/lambda-event-handler/generic-sns-epsilon-lambda-event-handler.js +0 -29
- package/lib/lambda-event-handler/inter-api-epsilon-lambda-event-handler.js +0 -23
- package/lib/lambda-event-handler/s3-epsilon-lambda-event-handler.js +0 -41
- package/lib/local-container-server.js +0 -76
- package/lib/local-server-cert.js +0 -67
- package/lib/local-server.js +0 -162
- package/lib/open-api-util/open-api-doc-modifications.js +0 -1
- package/lib/open-api-util/open-api-doc-modifier.js +0 -79
- package/lib/open-api-util/open-api-doc-modifier.spec.js +0 -16
- package/lib/open-api-util/yaml-combiner.js +0 -27
- package/lib/open-api-util/yaml-combiner.spec.js +0 -22
- package/lib/sample/sample-server-components.js +0 -185
- package/lib/sample/sample-server-static-files.js +0 -593
- package/lib/sample/test-error-server.js +0 -44
- package/lib/util/aws-util.js +0 -65
- package/lib/util/context-util.js +0 -101
- package/lib/util/cron-util.js +0 -68
- package/lib/util/cron-util.spec.js +0 -124
- package/lib/util/epsilon-config-parser.js +0 -65
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@bitblit/ratchet-common/lib/logger/logger.js';
|
|
2
|
-
import { LoggerLevelName } from '@bitblit/ratchet-common/lib/logger/logger-level-name.js';
|
|
3
|
-
import http from 'http';
|
|
4
|
-
import { EventUtil } from './http/event-util.js';
|
|
5
|
-
import fetch from 'cross-fetch';
|
|
6
|
-
import { LocalServer } from './local-server.js';
|
|
7
|
-
import { StringRatchet } from '@bitblit/ratchet-common/lib/lang/string-ratchet.js';
|
|
8
|
-
export class LocalContainerServer {
|
|
9
|
-
port;
|
|
10
|
-
server;
|
|
11
|
-
aborted = false;
|
|
12
|
-
constructor(port = 8889) {
|
|
13
|
-
this.port = port;
|
|
14
|
-
}
|
|
15
|
-
async runServer() {
|
|
16
|
-
return new Promise((res, rej) => {
|
|
17
|
-
try {
|
|
18
|
-
Logger.info('Starting Epsilon server on port %d', this.port);
|
|
19
|
-
this.server = http.createServer(this.requestHandler.bind(this)).listen(this.port);
|
|
20
|
-
Logger.info('Epsilon server is listening');
|
|
21
|
-
process.on('SIGINT', () => {
|
|
22
|
-
Logger.info('Caught SIGINT - shutting down test server...');
|
|
23
|
-
this.aborted = true;
|
|
24
|
-
res(true);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
Logger.error('Local server failed : %s', err, err);
|
|
29
|
-
rej(err);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
async requestHandler(request, response) {
|
|
34
|
-
const context = {
|
|
35
|
-
awsRequestId: 'LOCAL-' + StringRatchet.createType4Guid(),
|
|
36
|
-
getRemainingTimeInMillis() {
|
|
37
|
-
return 300000;
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
const evt = await LocalServer.messageToApiGatewayEvent(request, context);
|
|
41
|
-
const logEventLevel = EventUtil.eventIsAGraphQLIntrospection(evt) ? LoggerLevelName.silly : LoggerLevelName.info;
|
|
42
|
-
Logger.logByLevel(logEventLevel, 'Processing event: %j', evt);
|
|
43
|
-
if (evt.path == '/epsilon-poison-pill') {
|
|
44
|
-
this.aborted = true;
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
const url = 'http://localhost:8080/2015-03-31/functions/function/invocations';
|
|
49
|
-
try {
|
|
50
|
-
const postResp = await fetch(url, { method: 'POST', body: JSON.stringify(evt) });
|
|
51
|
-
const respBody = await postResp.json();
|
|
52
|
-
const result = respBody;
|
|
53
|
-
const written = await LocalServer.writeProxyResultToServerResponse(result, response);
|
|
54
|
-
return written;
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
Logger.error('Failed: %s', err);
|
|
58
|
-
return '{"bad":true}';
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
static async runFromCliArgs(args) {
|
|
63
|
-
try {
|
|
64
|
-
Logger.setLevel(LoggerLevelName.debug);
|
|
65
|
-
Logger.debug('Running local container server : %j', process?.argv);
|
|
66
|
-
const testServer = new LocalContainerServer();
|
|
67
|
-
await testServer.runServer();
|
|
68
|
-
Logger.info('Got res server');
|
|
69
|
-
process.exit(0);
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
Logger.error('Error : %s', err);
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
package/lib/local-server-cert.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
export class LocalServerCert {
|
|
2
|
-
static CLIENT_CSR = '-----BEGIN CERTIFICATE REQUEST-----\n' +
|
|
3
|
-
'MIICwjCCAaoCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5WMRIwEAYDVQQH\n' +
|
|
4
|
-
'DAlMYXMgVmVnYXMxDjAMBgNVBAoMBVBsdW1hMRkwFwYDVQQDDBB3d3cuaGV5cGx1\n' +
|
|
5
|
-
'bWEuY29tMSIwIAYJKoZIhvcNAQkBFhNjd2Vpc3NAaGV5cGx1bWEuY29tMIIBIjAN\n' +
|
|
6
|
-
'BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Gh1SD1VciosMgh3MHF7IyKgNTu2\n' +
|
|
7
|
-
'DjGMoORJV4VNKzrjp7UOdKnD3so0Xx3A6bUTYAL8Vtc+EG+8LZjUpBIOwuKzzbVo\n' +
|
|
8
|
-
't16+yt3YXBxzTZPU9g7sFsXx42RoNispIFq0enRtJrq/zq8izZxUZdGn9XD2DidL\n' +
|
|
9
|
-
'AedtRGjb8cmRuP6wmMRPBOZjct4ZjsSiTyhPa6kpt8V7Pa7vm0HGxcHiDAGp6zoy\n' +
|
|
10
|
-
'GHfBdsqeBdGbkGT1ZPfs9kpbtXPm82Sckd0p3oY3fJn0rZqpTAb8qcdGcnheYtqX\n' +
|
|
11
|
-
'FSjX7EoGsIXAK+oj25MvtfoZFMk4rjQ7FkHbgGk0iMHLN0kNjJzN0ysN/wIDAQAB\n' +
|
|
12
|
-
'oAAwDQYJKoZIhvcNAQELBQADggEBAMbpCdoqmY9crolsh5y9YtYDLRIwisTjTjU1\n' +
|
|
13
|
-
'Xzp1MurSzGIdHLokU+fdVWTIzn3uOu24yTQouTUUoYWHT4YgN4wELdDydfNxWvyl\n' +
|
|
14
|
-
'r34QV5B0FZbRV2sNz/3C1UX/Uor4af1Yv+QYlGHspgj+WIAEkNQ3xQIo9+I/miR+\n' +
|
|
15
|
-
'2VSlydtyGvmzipgv6CAwOsrQsIw7DkpVmnqIjgjPSXlGCgeKM9S1D/CwNwZnVA/e\n' +
|
|
16
|
-
'DF1SzDkJKl60/n+xZGYl/OtkH9vB8T6fHqk0iMxXuVUxI137fwEJwIQB5L6hFyJa\n' +
|
|
17
|
-
'L4hbjq7Cull4qOhXDby+fNJT9Ic7VCosJBXBHxHPsEnY2+TZAJo=\n' +
|
|
18
|
-
'-----END CERTIFICATE REQUEST-----\n';
|
|
19
|
-
static CLIENT_CERT_PEM = '-----BEGIN CERTIFICATE-----\n' +
|
|
20
|
-
'MIIDgTCCAmkCFDKASki0c6HD75dCdIZZ3vXq4eQeMA0GCSqGSIb3DQEBCwUAMH0x\n' +
|
|
21
|
-
'CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOVjESMBAGA1UEBwwJTGFzIFZlZ2FzMQ4w\n' +
|
|
22
|
-
'DAYDVQQKDAVQbHVtYTEZMBcGA1UEAwwQd3d3LmhleXBsdW1hLmNvbTEiMCAGCSqG\n' +
|
|
23
|
-
'SIb3DQEJARYTY3dlaXNzQGhleXBsdW1hLmNvbTAeFw0yMzAxMjMxMDU2MDlaFw0y\n' +
|
|
24
|
-
'MzAyMjIxMDU2MDlaMH0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOVjESMBAGA1UE\n' +
|
|
25
|
-
'BwwJTGFzIFZlZ2FzMQ4wDAYDVQQKDAVQbHVtYTEZMBcGA1UEAwwQd3d3LmhleXBs\n' +
|
|
26
|
-
'dW1hLmNvbTEiMCAGCSqGSIb3DQEJARYTY3dlaXNzQGhleXBsdW1hLmNvbTCCASIw\n' +
|
|
27
|
-
'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANhodUg9VXIqLDIIdzBxeyMioDU7\n' +
|
|
28
|
-
'tg4xjKDkSVeFTSs646e1DnSpw97KNF8dwOm1E2AC/FbXPhBvvC2Y1KQSDsLis821\n' +
|
|
29
|
-
'aLdevsrd2Fwcc02T1PYO7BbF8eNkaDYrKSBatHp0bSa6v86vIs2cVGXRp/Vw9g4n\n' +
|
|
30
|
-
'SwHnbURo2/HJkbj+sJjETwTmY3LeGY7Eok8oT2upKbfFez2u75tBxsXB4gwBqes6\n' +
|
|
31
|
-
'Mhh3wXbKngXRm5Bk9WT37PZKW7Vz5vNknJHdKd6GN3yZ9K2aqUwG/KnHRnJ4XmLa\n' +
|
|
32
|
-
'lxUo1+xKBrCFwCvqI9uTL7X6GRTJOK40OxZB24BpNIjByzdJDYyczdMrDf8CAwEA\n' +
|
|
33
|
-
'ATANBgkqhkiG9w0BAQsFAAOCAQEAWQG2tvWY+cyeeumD/7WKTBNaBjg4EAe+1mnZ\n' +
|
|
34
|
-
'KQsg0gGUL0kWsqCkg4xEqIojkKMjs62uS6ballEyWawygYd91OaJLFopNu+Dxk4N\n' +
|
|
35
|
-
'5GWKpriPr02vI6rMUZNtCmsooukEShr5ufFWb4WLnk4NXQlBCXTHbmIf7Z82UOMw\n' +
|
|
36
|
-
'ONZdZyKLqlA0Z6SWYBp2gO32puww6dUU0DAKkIIx1SN8i8UKvowRAy13bugPtyau\n' +
|
|
37
|
-
'NknlE3J1+Gab1hHCMRdKFZPKy8nc7LWUNZhgKdY82IC/k5FSW32Wibfog1TwWRJR\n' +
|
|
38
|
-
'ceTW4EN4P7ZmdHGMYkIplc7Qcx0mraY2HRqmjA33j3cNcY5UsQ==\n' +
|
|
39
|
-
'-----END CERTIFICATE-----\n';
|
|
40
|
-
static CLIENT_KEY_PEM = '-----BEGIN RSA PRIVATE KEY-----\n' +
|
|
41
|
-
'MIIEogIBAAKCAQEA2Gh1SD1VciosMgh3MHF7IyKgNTu2DjGMoORJV4VNKzrjp7UO\n' +
|
|
42
|
-
'dKnD3so0Xx3A6bUTYAL8Vtc+EG+8LZjUpBIOwuKzzbVot16+yt3YXBxzTZPU9g7s\n' +
|
|
43
|
-
'FsXx42RoNispIFq0enRtJrq/zq8izZxUZdGn9XD2DidLAedtRGjb8cmRuP6wmMRP\n' +
|
|
44
|
-
'BOZjct4ZjsSiTyhPa6kpt8V7Pa7vm0HGxcHiDAGp6zoyGHfBdsqeBdGbkGT1ZPfs\n' +
|
|
45
|
-
'9kpbtXPm82Sckd0p3oY3fJn0rZqpTAb8qcdGcnheYtqXFSjX7EoGsIXAK+oj25Mv\n' +
|
|
46
|
-
'tfoZFMk4rjQ7FkHbgGk0iMHLN0kNjJzN0ysN/wIDAQABAoIBAHzZ9yAQUqWk8w6C\n' +
|
|
47
|
-
'l9EZB4PDzE4p/uS9bXa9fhrCSz0vonv1FzvzXY/BdOmTTuMGlwEDd/XaBHKTJCvi\n' +
|
|
48
|
-
'SnvF90I0bKu3h4yTWtvLlbG+sD8HlQvInCifVuhr2zu1Nur1qb4kQXzgrRxfKmMZ\n' +
|
|
49
|
-
'WA/OH2qZGzwbK0kT7ZRUMuCR/EKPjYw9KP6pMF8nxXUjSm+g3YwgIB8kiPeDCV6C\n' +
|
|
50
|
-
'0/Ecpv5qMqcoYTg9f9KyBNmY3U5ZgbYrdwTDSMrrTwZKSHhTktdF0SEfYrVGLLEU\n' +
|
|
51
|
-
'vfQQlQmfcc5Z3+cz99BH1BeTNaCPtEaXjgvQYwkWlSxnY6QUE0p1qq9Jy0xaVEx9\n' +
|
|
52
|
-
'8LReuHECgYEA/hhJ6b2XV1WLtszFO8MRMzlyMuvBc3Ot0dsuJ7r1W3WOF5X7poSU\n' +
|
|
53
|
-
'xG0xe+n6Kubmi3tGhzS7BN4TEO9/SSE2gIQTk9zwAMuf+mZJQcG0Qz1iftVp5nnM\n' +
|
|
54
|
-
'zi205vBLLq2Pmk7wbhTIBO8J190Dli1/fuvk/cmJrA60Ys8v3y4e820CgYEA2gfV\n' +
|
|
55
|
-
'Q3eHRxk3wl4On71mMovY7lMx6+S8K8hBGo26A5FIu6N6v2jxKnQ5YphwFgjtkxgs\n' +
|
|
56
|
-
'LspAXmxRwFMapZP3d/nFeBhlOzNly7tqIdDOeNqEcUzEx7pwGXpWGZEHOYs1fvU+\n' +
|
|
57
|
-
'gU/1N8q9DBvr0B+XGeYR3NNdljajo6pwWZ6ed5sCgYAGmkz5ZPLU0yVBR8rsRaJh\n' +
|
|
58
|
-
'yWFdT2EEhgIDTQXDBImxqblahYw3hIR1Ij1B8g+NI9jj0P1BMC6X7sliDEcreFB5\n' +
|
|
59
|
-
'QHVdx0T5UFFE6XmH2ue7Q5IWp6cL1ShsRyXHRoE9okb0BI8c3S9haXDBCj44ndAN\n' +
|
|
60
|
-
'VUXrDlykevFXC/k7fHBTdQKBgHjIshpoEycOD1e753oS4JTL6GdO6271DlFq5LYj\n' +
|
|
61
|
-
'IZNsXtCkJhH3vvJ35Hp8XEu4snQ0hfV90d79PuS+pRppOETct8pqKVp8hL4ymv8U\n' +
|
|
62
|
-
'v+0vkQN7NeA3pnZW0W/kag400nP8xJ26f+xiggw9Q4vOlFSioe6loUjgCBNZDlh3\n' +
|
|
63
|
-
'iO5VAoGASXkcv39B9/8FuWQ7rwhXHEubxOOwZZzSBU1wtLj2qHyPGoeU9ZpsmdrL\n' +
|
|
64
|
-
'XS9w1Jy0e49qmbBjzTqAEBw2nn/JVMFHyI/s//JVF7Q9GfBZAF5XF6mJ24yzTKgF\n' +
|
|
65
|
-
'kSoO5T+7s8NXi0eAIBe4CkWCBX7kWEZtu46GuVhsrC3oEazuLOs=\n' +
|
|
66
|
-
'-----END RSA PRIVATE KEY-----\n';
|
|
67
|
-
}
|
package/lib/local-server.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@bitblit/ratchet-common/lib/logger/logger.js';
|
|
2
|
-
import http from 'http';
|
|
3
|
-
import https from 'https';
|
|
4
|
-
import { StringRatchet } from '@bitblit/ratchet-common/lib/lang/string-ratchet.js';
|
|
5
|
-
import { DateTime } from 'luxon';
|
|
6
|
-
import qs from 'querystring';
|
|
7
|
-
import { EventUtil } from './http/event-util.js';
|
|
8
|
-
import { LoggerLevelName } from '@bitblit/ratchet-common/lib/logger/logger-level-name.js';
|
|
9
|
-
import { LocalServerCert } from './local-server-cert.js';
|
|
10
|
-
import { SampleServerComponents } from './sample/sample-server-components.js';
|
|
11
|
-
import { LocalWebTokenManipulator } from './http/auth/local-web-token-manipulator.js';
|
|
12
|
-
export class LocalServer {
|
|
13
|
-
globalHandler;
|
|
14
|
-
port;
|
|
15
|
-
server;
|
|
16
|
-
aborted = false;
|
|
17
|
-
constructor(globalHandler, port = 8888, https = false) {
|
|
18
|
-
this.globalHandler = globalHandler;
|
|
19
|
-
this.port = port;
|
|
20
|
-
}
|
|
21
|
-
async runServer() {
|
|
22
|
-
return new Promise((res, rej) => {
|
|
23
|
-
try {
|
|
24
|
-
Logger.info('Starting Epsilon server on port %d', this.port);
|
|
25
|
-
if (https) {
|
|
26
|
-
const options = {
|
|
27
|
-
key: LocalServerCert.CLIENT_KEY_PEM,
|
|
28
|
-
cert: LocalServerCert.CLIENT_CERT_PEM,
|
|
29
|
-
};
|
|
30
|
-
Logger.info('Starting https server - THIS SERVER IS NOT SECURE! The KEYS are in the code! Testing Server Only - Use at your own risk!');
|
|
31
|
-
this.server = https.createServer(options, this.requestHandler.bind(this)).listen(this.port);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
this.server = http.createServer(this.requestHandler.bind(this)).listen(this.port);
|
|
35
|
-
}
|
|
36
|
-
Logger.info('Epsilon server is listening');
|
|
37
|
-
process.on('SIGINT', () => {
|
|
38
|
-
Logger.info('Caught SIGINT - shutting down test server...');
|
|
39
|
-
this.aborted = true;
|
|
40
|
-
res(true);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
Logger.error('Local server failed : %s', err, err);
|
|
45
|
-
rej(err);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
async requestHandler(request, response) {
|
|
50
|
-
const context = {
|
|
51
|
-
awsRequestId: 'LOCAL-' + StringRatchet.createType4Guid(),
|
|
52
|
-
getRemainingTimeInMillis() {
|
|
53
|
-
return 300000;
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
const evt = await LocalServer.messageToApiGatewayEvent(request, context);
|
|
57
|
-
const logEventLevel = EventUtil.eventIsAGraphQLIntrospection(evt) ? LoggerLevelName.silly : LoggerLevelName.info;
|
|
58
|
-
if (evt.path == '/epsilon-poison-pill') {
|
|
59
|
-
this.aborted = true;
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
const result = await this.globalHandler.lambdaHandler(evt, context);
|
|
64
|
-
const written = await LocalServer.writeProxyResultToServerResponse(result, response);
|
|
65
|
-
return written;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
static async bodyAsBase64String(request) {
|
|
69
|
-
return new Promise((res, rej) => {
|
|
70
|
-
const body = [];
|
|
71
|
-
request.on('data', (chunk) => {
|
|
72
|
-
body.push(chunk);
|
|
73
|
-
});
|
|
74
|
-
request.on('end', () => {
|
|
75
|
-
const rval = Buffer.concat(body).toString('base64');
|
|
76
|
-
res(rval);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
static async messageToApiGatewayEvent(request, context) {
|
|
81
|
-
const bodyString = await LocalServer.bodyAsBase64String(request);
|
|
82
|
-
const stageIdx = request.url.indexOf('/', 1);
|
|
83
|
-
const stage = request.url.substring(1, stageIdx);
|
|
84
|
-
const path = request.url.substring(stageIdx + 1);
|
|
85
|
-
const reqTime = new Date().getTime();
|
|
86
|
-
const formattedTime = DateTime.utc().toFormat('dd/MMM/yyyy:hh:mm:ss ZZ');
|
|
87
|
-
const queryIdx = request.url.indexOf('?');
|
|
88
|
-
const queryStringParams = queryIdx > -1 ? qs.parse(request.url.substring(queryIdx + 1)) : {};
|
|
89
|
-
const headers = Object.assign({}, request.headers);
|
|
90
|
-
headers['X-Forwarded-Proto'] = 'http';
|
|
91
|
-
const rval = {
|
|
92
|
-
body: bodyString,
|
|
93
|
-
multiValueHeaders: {},
|
|
94
|
-
multiValueQueryStringParameters: {},
|
|
95
|
-
resource: '/{proxy+}',
|
|
96
|
-
path: request.url,
|
|
97
|
-
httpMethod: request.method.toLowerCase(),
|
|
98
|
-
isBase64Encoded: true,
|
|
99
|
-
queryStringParameters: queryStringParams,
|
|
100
|
-
pathParameters: {
|
|
101
|
-
proxy: path,
|
|
102
|
-
},
|
|
103
|
-
stageVariables: {
|
|
104
|
-
baz: 'qux',
|
|
105
|
-
},
|
|
106
|
-
headers: headers,
|
|
107
|
-
requestContext: {
|
|
108
|
-
accountId: '123456789012',
|
|
109
|
-
resourceId: '123456',
|
|
110
|
-
stage: stage,
|
|
111
|
-
requestId: context.awsRequestId,
|
|
112
|
-
requestTime: formattedTime,
|
|
113
|
-
requestTimeEpoch: reqTime,
|
|
114
|
-
identity: null,
|
|
115
|
-
path: request.url,
|
|
116
|
-
domainName: request.headers['host'],
|
|
117
|
-
resourcePath: '/{proxy+}',
|
|
118
|
-
httpMethod: request.method.toLowerCase(),
|
|
119
|
-
apiId: '1234567890',
|
|
120
|
-
protocol: 'HTTP/1.1',
|
|
121
|
-
},
|
|
122
|
-
};
|
|
123
|
-
return rval;
|
|
124
|
-
}
|
|
125
|
-
static async writeProxyResultToServerResponse(proxyResult, response) {
|
|
126
|
-
const isGraphQLSchemaResponse = !!proxyResult && !!proxyResult.body && proxyResult.body.indexOf('{"data":{"__schema"') > -1;
|
|
127
|
-
if (!isGraphQLSchemaResponse) {
|
|
128
|
-
Logger.debug('Result: %j', proxyResult);
|
|
129
|
-
}
|
|
130
|
-
response.statusCode = proxyResult.statusCode;
|
|
131
|
-
if (proxyResult.headers) {
|
|
132
|
-
Object.keys(proxyResult.headers).forEach((hk) => {
|
|
133
|
-
response.setHeader(hk, String(proxyResult.headers[hk]));
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
if (proxyResult.multiValueHeaders) {
|
|
137
|
-
Object.keys(proxyResult.multiValueHeaders).forEach((hk) => {
|
|
138
|
-
response.setHeader(hk, proxyResult.multiValueHeaders[hk].join(','));
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
const toWrite = proxyResult.isBase64Encoded ? Buffer.from(proxyResult.body, 'base64') : Buffer.from(proxyResult.body);
|
|
142
|
-
response.end(toWrite);
|
|
143
|
-
return !!proxyResult.body;
|
|
144
|
-
}
|
|
145
|
-
static async runSampleBatchOnlyServerFromCliArgs(args) {
|
|
146
|
-
Logger.setLevel(LoggerLevelName.debug);
|
|
147
|
-
const handler = await SampleServerComponents.createSampleBatchOnlyEpsilonGlobalHandler('SampleBatchOnlyLocalServer-' + Date.now());
|
|
148
|
-
const testServer = new LocalServer(handler);
|
|
149
|
-
const res = await testServer.runServer();
|
|
150
|
-
Logger.info('Res was : %s', res);
|
|
151
|
-
}
|
|
152
|
-
static async runSampleLocalServerFromCliArgs(args) {
|
|
153
|
-
Logger.setLevel(LoggerLevelName.debug);
|
|
154
|
-
const localTokenHandler = new LocalWebTokenManipulator(['abcd1234'], 'sample-server');
|
|
155
|
-
const token = await localTokenHandler.createJWTStringAsync('asdf', {}, ['USER'], 3600);
|
|
156
|
-
Logger.info('Use token: %s', token);
|
|
157
|
-
const handler = await SampleServerComponents.createSampleEpsilonGlobalHandler('SampleLocalServer-' + Date.now());
|
|
158
|
-
const testServer = new LocalServer(handler, 8888, true);
|
|
159
|
-
const res = await testServer.runServer();
|
|
160
|
-
Logger.info('Res was : %s', res);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import yaml from 'js-yaml';
|
|
2
|
-
import { Logger } from '@bitblit/ratchet-common/lib/logger/logger.js';
|
|
3
|
-
export class OpenApiDocModifier {
|
|
4
|
-
options;
|
|
5
|
-
constructor(options) {
|
|
6
|
-
this.options = options;
|
|
7
|
-
}
|
|
8
|
-
modifyOpenApiDoc(yamlString) {
|
|
9
|
-
let rval;
|
|
10
|
-
if (!!yamlString && !!this.options) {
|
|
11
|
-
try {
|
|
12
|
-
const openApi = yaml.load(yamlString);
|
|
13
|
-
const removeTags = this.options.removeTags ? this.options.removeTags.map((t) => t.toLowerCase()) : [];
|
|
14
|
-
if (this.options.newServerPath) {
|
|
15
|
-
openApi['servers'] = [{ url: this.options.newServerPath }];
|
|
16
|
-
}
|
|
17
|
-
if (!!this.options.removeTags && openApi['tags']) {
|
|
18
|
-
if (openApi['tags']) {
|
|
19
|
-
openApi['tags'] = openApi.tags.filter((f) => {
|
|
20
|
-
const n = !!f && !!f['name'] ? f['name'].toLowerCase() : '';
|
|
21
|
-
const i = removeTags.indexOf(n);
|
|
22
|
-
return i === -1;
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
if (openApi['paths']) {
|
|
27
|
-
let newPaths = {};
|
|
28
|
-
Object.keys(openApi['paths']).forEach((p) => {
|
|
29
|
-
const path = openApi['paths'][p];
|
|
30
|
-
Object.keys(path).forEach((verb) => {
|
|
31
|
-
const entry = path[verb];
|
|
32
|
-
entry.tags = !!entry.tags ? entry.tags.filter((t) => removeTags.lastIndexOf(t.toLowerCase()) == -1) : entry.tags;
|
|
33
|
-
const matcher = verb.toLowerCase() + ' ' + p.toLowerCase();
|
|
34
|
-
if (this.matchNone(matcher, this.options.removeEndpoints)) {
|
|
35
|
-
newPaths[p] = newPaths[p] || {};
|
|
36
|
-
newPaths[p][verb] = entry;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
if (this.options.sortEndpoints) {
|
|
41
|
-
const keys = Object.keys(newPaths).sort();
|
|
42
|
-
const newPaths2 = {};
|
|
43
|
-
keys.forEach((k) => {
|
|
44
|
-
newPaths2[k] = newPaths[k];
|
|
45
|
-
});
|
|
46
|
-
newPaths = newPaths2;
|
|
47
|
-
}
|
|
48
|
-
openApi['paths'] = newPaths;
|
|
49
|
-
}
|
|
50
|
-
let remSchemas = this.options.removeSchemas || [];
|
|
51
|
-
remSchemas = remSchemas.map((s) => s.toLowerCase());
|
|
52
|
-
if (openApi['components'] && openApi['components']['schemas']) {
|
|
53
|
-
const keys = Object.keys(openApi['components']['schemas']).sort();
|
|
54
|
-
const newComp = {};
|
|
55
|
-
keys.forEach((k) => {
|
|
56
|
-
if (remSchemas.indexOf(k.toLowerCase()) === -1) {
|
|
57
|
-
newComp[k] = openApi['components']['schemas'][k];
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
openApi['components']['schemas'] = newComp;
|
|
61
|
-
}
|
|
62
|
-
rval = yaml.dump(openApi);
|
|
63
|
-
}
|
|
64
|
-
catch (err) {
|
|
65
|
-
Logger.error('Error processing yaml: %s', err, err);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return rval;
|
|
69
|
-
}
|
|
70
|
-
matchNone(input, regex) {
|
|
71
|
-
let rval = true;
|
|
72
|
-
if (!!input && !!regex) {
|
|
73
|
-
regex.forEach((r) => {
|
|
74
|
-
rval = rval && !r.test(input);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
return rval;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { OpenApiDocModifier } from './open-api-doc-modifier.js';
|
|
2
|
-
import { SampleServerStaticFiles } from '../sample/sample-server-static-files.js';
|
|
3
|
-
describe('#openApiDocModifier', function () {
|
|
4
|
-
it('should exist', async () => {
|
|
5
|
-
const data = SampleServerStaticFiles.SAMPLE_OPEN_API_DOC;
|
|
6
|
-
expect(data).toBeTruthy();
|
|
7
|
-
expect(data.length).toBeGreaterThan(0);
|
|
8
|
-
const mods = {
|
|
9
|
-
newServerPath: 'https://api.sample.com/cw',
|
|
10
|
-
removeTags: ['Neon', 'CORS'],
|
|
11
|
-
removeEndpoints: [new RegExp('options .*')],
|
|
12
|
-
};
|
|
13
|
-
const result = new OpenApiDocModifier(mods).modifyOpenApiDoc(data);
|
|
14
|
-
expect(result).toBeTruthy();
|
|
15
|
-
}, 30000);
|
|
16
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import { RequireRatchet } from '@bitblit/ratchet-common/lib/lang/require-ratchet.js';
|
|
3
|
-
import yaml from 'js-yaml';
|
|
4
|
-
import { Logger } from '@bitblit/ratchet-common/lib/logger/logger.js';
|
|
5
|
-
export class YamlCombiner {
|
|
6
|
-
static combine(files, inRootPath = []) {
|
|
7
|
-
RequireRatchet.notNullOrUndefined(files, 'Files argument');
|
|
8
|
-
RequireRatchet.true(files.length > 0, 'Files argument larger than 0');
|
|
9
|
-
RequireRatchet.notNullOrUndefined(inRootPath, 'Root path argument');
|
|
10
|
-
Logger.info('Processing %d files into output', files.length);
|
|
11
|
-
let allElements = {};
|
|
12
|
-
for (let i = 0; i < files.length; i++) {
|
|
13
|
-
const fileContents = fs.readFileSync(files[i]).toString();
|
|
14
|
-
const openApi = yaml.load(fileContents);
|
|
15
|
-
allElements = Object.assign(allElements, openApi);
|
|
16
|
-
}
|
|
17
|
-
const rootPath = Object.assign([], inRootPath);
|
|
18
|
-
while (rootPath.length > 0) {
|
|
19
|
-
const next = {};
|
|
20
|
-
next[rootPath[rootPath.length - 1]] = allElements;
|
|
21
|
-
rootPath.splice(rootPath.length - 1, 1);
|
|
22
|
-
allElements = next;
|
|
23
|
-
}
|
|
24
|
-
const rval = yaml.dump(allElements);
|
|
25
|
-
return rval;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@bitblit/ratchet-common/lib/logger/logger.js';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { YamlCombiner } from './yaml-combiner.js';
|
|
4
|
-
import { EsmRatchet } from '@bitblit/ratchet-common/lib/lang/esm-ratchet.js';
|
|
5
|
-
describe('#yamlCombiner', function () {
|
|
6
|
-
it('should combine yamls', async () => {
|
|
7
|
-
const files = [
|
|
8
|
-
path.join(EsmRatchet.fetchDirName(import.meta.url), '../../../../test-data/epsilon/sample-yaml/test1.yaml'),
|
|
9
|
-
path.join(EsmRatchet.fetchDirName(import.meta.url), '../../../../test-data/epsilon/sample-yaml/test2.yaml'),
|
|
10
|
-
];
|
|
11
|
-
const root = ['components', 'schemas'];
|
|
12
|
-
const result = YamlCombiner.combine(files, root);
|
|
13
|
-
expect(result).toBeTruthy();
|
|
14
|
-
expect(result.indexOf('Object1')).toBeGreaterThan(0);
|
|
15
|
-
expect(result.indexOf('Object2')).toBeGreaterThan(0);
|
|
16
|
-
expect(result.indexOf('Object3')).toBeGreaterThan(0);
|
|
17
|
-
expect(result.indexOf('Object4')).toBeGreaterThan(0);
|
|
18
|
-
expect(result.indexOf('components')).toEqual(0);
|
|
19
|
-
expect(result.indexOf('schemas')).toBeGreaterThan(0);
|
|
20
|
-
Logger.info('G: \n\n%s', result);
|
|
21
|
-
}, 30000);
|
|
22
|
-
});
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@bitblit/ratchet-common/lib/logger/logger.js';
|
|
2
|
-
import { ApolloServer, gql } from 'apollo-server-lambda';
|
|
3
|
-
import { ApolloServerPluginLandingPageGraphQLPlayground } from 'apollo-server-core';
|
|
4
|
-
import { StringRatchet } from '@bitblit/ratchet-common/lib/lang/string-ratchet.js';
|
|
5
|
-
import { ErrorRatchet } from '@bitblit/ratchet-common/lib/lang/error-ratchet.js';
|
|
6
|
-
import { LoggerLevelName } from '@bitblit/ratchet-common/lib/logger/logger-level-name.js';
|
|
7
|
-
import { PromiseRatchet } from '@bitblit/ratchet-common/lib/lang/promise-ratchet.js';
|
|
8
|
-
import { BooleanRatchet } from '@bitblit/ratchet-common/lib/lang/boolean-ratchet.js';
|
|
9
|
-
import { NumberRatchet } from '@bitblit/ratchet-common/lib/lang/number-ratchet.js';
|
|
10
|
-
import { EpsilonGlobalHandler } from '../epsilon-global-handler.js';
|
|
11
|
-
import { BuiltInHandlers } from '../built-in/http/built-in-handlers.js';
|
|
12
|
-
import { LocalWebTokenManipulator } from '../http/auth/local-web-token-manipulator.js';
|
|
13
|
-
import { EchoProcessor } from '../built-in/background/echo-processor.js';
|
|
14
|
-
import { NoOpProcessor } from '../built-in/background/no-op-processor.js';
|
|
15
|
-
import { SampleDelayProcessor } from '../built-in/background/sample-delay-processor.js';
|
|
16
|
-
import { LogAndEnqueueEchoProcessor } from '../built-in/background/log-and-enqueue-echo-processor.js';
|
|
17
|
-
import { EpsilonConfigParser } from '../util/epsilon-config-parser.js';
|
|
18
|
-
import { RouterUtil } from '../http/route/router-util.js';
|
|
19
|
-
import { SampleInputValidatedProcessor } from '../built-in/background/sample-input-validated-processor.js';
|
|
20
|
-
import { BuiltInAuthorizers } from '../built-in/http/built-in-authorizers.js';
|
|
21
|
-
import { ApolloFilter } from '../built-in/http/apollo-filter.js';
|
|
22
|
-
import { BuiltInFilters } from '../built-in/http/built-in-filters.js';
|
|
23
|
-
import { EventUtil } from '../http/event-util.js';
|
|
24
|
-
import { LogMessageBackgroundErrorProcessor } from '../built-in/background/log-message-background-error-processor.js';
|
|
25
|
-
import { SingleThreadLocalBackgroundManager } from '../background/manager/single-thread-local-background-manager.js';
|
|
26
|
-
import { SampleServerStaticFiles } from './sample-server-static-files.js';
|
|
27
|
-
export class SampleServerComponents {
|
|
28
|
-
constructor() { }
|
|
29
|
-
static async createSampleApollo() {
|
|
30
|
-
const gqlString = SampleServerStaticFiles.SAMPLE_SERVER_GRAPHQL;
|
|
31
|
-
Logger.silly('Creating apollo from : %s', gqlString);
|
|
32
|
-
const typeDefs = gql(gqlString);
|
|
33
|
-
const resolvers = {
|
|
34
|
-
RootQueryType: {
|
|
35
|
-
serverMeta: async (root) => {
|
|
36
|
-
return { version: 'A1', serverTime: new Date().toISOString() };
|
|
37
|
-
},
|
|
38
|
-
forceTimeout: async (root) => {
|
|
39
|
-
await PromiseRatchet.wait(1000 * 60 * 30);
|
|
40
|
-
return { placeholder: 'A1' };
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
const server = new ApolloServer({
|
|
45
|
-
debug: false,
|
|
46
|
-
introspection: true,
|
|
47
|
-
typeDefs,
|
|
48
|
-
resolvers,
|
|
49
|
-
plugins: [ApolloServerPluginLandingPageGraphQLPlayground({ endpoint: '/graphql' })],
|
|
50
|
-
context: async ({ event, context, express }) => {
|
|
51
|
-
const authTokenSt = EventUtil.extractBearerTokenFromEvent(event);
|
|
52
|
-
const token = null;
|
|
53
|
-
if (!!authTokenSt && authTokenSt.startsWith('Bearer')) {
|
|
54
|
-
Logger.info('Got : %s', authTokenSt);
|
|
55
|
-
}
|
|
56
|
-
const rval = {
|
|
57
|
-
user: token,
|
|
58
|
-
headers: event.headers,
|
|
59
|
-
functionName: context.functionName,
|
|
60
|
-
event,
|
|
61
|
-
context,
|
|
62
|
-
};
|
|
63
|
-
return rval;
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
return server;
|
|
67
|
-
}
|
|
68
|
-
static async createSampleEpsilonConfig(label) {
|
|
69
|
-
const yamlString = SampleServerStaticFiles.SAMPLE_OPEN_API_DOC;
|
|
70
|
-
const authorizers = new Map();
|
|
71
|
-
authorizers.set('SampleAuthorizer', (token, evt) => BuiltInAuthorizers.simpleLoggedInAuth(token, evt));
|
|
72
|
-
authorizers.set('LogAuthorizer', (token, evt) => BuiltInAuthorizers.simpleNoAuthenticationLogAccess(token, evt));
|
|
73
|
-
const handlers = new Map();
|
|
74
|
-
handlers.set('get /', (event, context) => BuiltInHandlers.sample(event, null, context));
|
|
75
|
-
handlers.set('get /meta/server', (event) => BuiltInHandlers.sample(event));
|
|
76
|
-
handlers.set('get /meta/user', (event) => BuiltInHandlers.sample(event));
|
|
77
|
-
handlers.set('get /meta/item/{itemId}', (event) => BuiltInHandlers.sample(event));
|
|
78
|
-
handlers.set('post /secure/access-token', (event) => BuiltInHandlers.sample(event));
|
|
79
|
-
handlers.set('get /multi/fixed', (event) => BuiltInHandlers.sample(event, 'fixed'));
|
|
80
|
-
handlers.set('get /multi/{v}', (event) => BuiltInHandlers.sample(event, 'variable'));
|
|
81
|
-
handlers.set('get /err/{code}', (event) => {
|
|
82
|
-
const err = ErrorRatchet.fErr('Fake Err : %j', event);
|
|
83
|
-
err['statusCode'] = NumberRatchet.safeNumber(event.pathParameters['code']);
|
|
84
|
-
throw err;
|
|
85
|
-
});
|
|
86
|
-
handlers.set('get /meta/sample-item', async (event) => {
|
|
87
|
-
const numberToUse = NumberRatchet.safeNumber(event.queryStringParameters['num']) || 5;
|
|
88
|
-
const rval = {
|
|
89
|
-
numberParam: numberToUse,
|
|
90
|
-
nameParam: 'Test-String',
|
|
91
|
-
};
|
|
92
|
-
return rval;
|
|
93
|
-
});
|
|
94
|
-
handlers.set('post /meta/sample-item', async (event) => {
|
|
95
|
-
const parsed = event.parsedBody;
|
|
96
|
-
const forceFail = BooleanRatchet.parseBool(StringRatchet.trimToNull(event.queryStringParameters['forceFail'])) === true;
|
|
97
|
-
if (forceFail) {
|
|
98
|
-
parsed['numberParam'] = 'test';
|
|
99
|
-
}
|
|
100
|
-
return parsed;
|
|
101
|
-
});
|
|
102
|
-
const tokenManipulator = new LocalWebTokenManipulator(['abcd1234'], 'sample.erigir.com')
|
|
103
|
-
.withParseFailureLogLevel(LoggerLevelName.debug)
|
|
104
|
-
.withExtraDecryptionKeys(['abcdefabcdef'])
|
|
105
|
-
.withOldKeyUseLogLevel(LoggerLevelName.info);
|
|
106
|
-
const meta = RouterUtil.defaultHttpMetaProcessingConfigWithAuthenticationHeaderParsing(tokenManipulator);
|
|
107
|
-
meta.timeoutMS = 10_000;
|
|
108
|
-
ApolloFilter.addApolloFilterToList(meta.preFilters, new RegExp('.*graphql.*'), await SampleServerComponents.createSampleApollo(), {
|
|
109
|
-
cors: {
|
|
110
|
-
origin: '*',
|
|
111
|
-
credentials: true,
|
|
112
|
-
},
|
|
113
|
-
});
|
|
114
|
-
meta.errorFilters.push((fCtx) => BuiltInFilters.secureOutboundServerErrorForProduction(fCtx, 'Clean Internal Server Error', 500));
|
|
115
|
-
const preFiltersAllowingNull = Object.assign({}, meta);
|
|
116
|
-
preFiltersAllowingNull.preFilters = Object.assign([], preFiltersAllowingNull.preFilters);
|
|
117
|
-
preFiltersAllowingNull.preFilters.splice(8, 1);
|
|
118
|
-
const cfg = {
|
|
119
|
-
defaultMetaHandling: meta,
|
|
120
|
-
handlers: handlers,
|
|
121
|
-
authorizers: authorizers,
|
|
122
|
-
overrideMetaHandling: [
|
|
123
|
-
{
|
|
124
|
-
pathRegex: '/background',
|
|
125
|
-
methods: null,
|
|
126
|
-
config: Object.assign({}, meta, { overrideAuthorizerName: 'LogAuthorizer' }),
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
pathRegex: '/meta/server',
|
|
130
|
-
methods: ['GET'],
|
|
131
|
-
config: preFiltersAllowingNull,
|
|
132
|
-
},
|
|
133
|
-
],
|
|
134
|
-
prefixesToStripBeforeRouteMatch: ['v0'],
|
|
135
|
-
filterHandledRouteMatches: ['options .*'],
|
|
136
|
-
};
|
|
137
|
-
const background = {
|
|
138
|
-
httpMetaEndpoint: '/background/meta',
|
|
139
|
-
httpSubmissionPath: '/background',
|
|
140
|
-
implyTypeFromPathSuffix: false,
|
|
141
|
-
processors: [
|
|
142
|
-
new EchoProcessor(),
|
|
143
|
-
new NoOpProcessor(),
|
|
144
|
-
new SampleDelayProcessor(),
|
|
145
|
-
new SampleInputValidatedProcessor(),
|
|
146
|
-
new LogAndEnqueueEchoProcessor(),
|
|
147
|
-
],
|
|
148
|
-
errorProcessor: new LogMessageBackgroundErrorProcessor(),
|
|
149
|
-
};
|
|
150
|
-
const epsilonConfig = {
|
|
151
|
-
label: label,
|
|
152
|
-
openApiYamlString: yamlString,
|
|
153
|
-
httpConfig: cfg,
|
|
154
|
-
backgroundConfig: background,
|
|
155
|
-
};
|
|
156
|
-
return epsilonConfig;
|
|
157
|
-
}
|
|
158
|
-
static async createSampleEpsilonGlobalHandler(label) {
|
|
159
|
-
const epsilonConfig = await SampleServerComponents.createSampleEpsilonConfig(label);
|
|
160
|
-
const backgroundManager = new SingleThreadLocalBackgroundManager();
|
|
161
|
-
const epsilonInstance = EpsilonConfigParser.epsilonConfigToEpsilonInstance(epsilonConfig, backgroundManager);
|
|
162
|
-
const rval = new EpsilonGlobalHandler(epsilonInstance);
|
|
163
|
-
return rval;
|
|
164
|
-
}
|
|
165
|
-
static async createSampleBatchOnlyEpsilonGlobalHandler(label) {
|
|
166
|
-
const epsilonConfig = await SampleServerComponents.createSampleEpsilonConfig(label);
|
|
167
|
-
epsilonConfig.httpConfig.handlers = new Map();
|
|
168
|
-
const byPassCfg = Object.assign({}, epsilonConfig.httpConfig.defaultMetaHandling);
|
|
169
|
-
byPassCfg.preFilters = byPassCfg.preFilters.concat([
|
|
170
|
-
(fCtx) => BuiltInFilters.autoRespond(fCtx, { message: 'Background Processing Only' }),
|
|
171
|
-
]);
|
|
172
|
-
epsilonConfig.httpConfig.overrideMetaHandling = [
|
|
173
|
-
{
|
|
174
|
-
pathRegex: '.*background.*',
|
|
175
|
-
invertPathMatching: true,
|
|
176
|
-
config: byPassCfg,
|
|
177
|
-
},
|
|
178
|
-
];
|
|
179
|
-
epsilonConfig.httpConfig.filterHandledRouteMatches = ['.*'];
|
|
180
|
-
const backgroundManager = new SingleThreadLocalBackgroundManager();
|
|
181
|
-
const epsilonInstance = EpsilonConfigParser.epsilonConfigToEpsilonInstance(epsilonConfig, backgroundManager);
|
|
182
|
-
const rval = new EpsilonGlobalHandler(epsilonInstance);
|
|
183
|
-
return rval;
|
|
184
|
-
}
|
|
185
|
-
}
|