@nsshunt/stsdevtools 1.0.25 → 1.0.26
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/stsdevtools.mjs
CHANGED
|
@@ -241,15 +241,19 @@ class TestHelper {
|
|
|
241
241
|
});
|
|
242
242
|
__publicField(this, "TestLoginAndVerify", async () => {
|
|
243
243
|
expect.assertions(4);
|
|
244
|
+
console.log(`TestLoginAndVerify:1`);
|
|
244
245
|
const retVal = await this.Login("user01@stsmda.com.au", "user01password");
|
|
245
246
|
expect(retVal.status).toEqual(200);
|
|
247
|
+
console.log(`TestLoginAndVerify:2`);
|
|
246
248
|
this.LogDebugMessage(chalk.red(`${JSON.stringify(retVal.data)}`));
|
|
247
249
|
this.LogDebugMessage(chalk.magenta(`${JSON.stringify(retVal.headers)}`));
|
|
248
250
|
this.LogDebugMessage(chalk.yellow(`${JSON.stringify(retVal.headers["set-cookie"])}`));
|
|
249
251
|
const cookies = retVal.headers["set-cookie"];
|
|
250
252
|
this.LogDebugMessage(chalk.yellow(`${cookies[0]}`));
|
|
251
253
|
this.LogDebugMessage(chalk.green(`${JSON.stringify(tough.Cookie.parse(cookies[0]))}`));
|
|
254
|
+
console.log(`TestLoginAndVerify:3`);
|
|
252
255
|
const cookie = tough.Cookie.parse(cookies[0]);
|
|
256
|
+
console.log(`TestLoginAndVerify:4`);
|
|
253
257
|
const desiredCookieResultAxios = {
|
|
254
258
|
key: "consent_cookie",
|
|
255
259
|
value: expect.stringMatching(__privateGet(this, _regexURLSafeStringComponent)),
|
|
@@ -260,16 +264,20 @@ class TestHelper {
|
|
|
260
264
|
};
|
|
261
265
|
const cookieResult = JSON.parse(JSON.stringify(cookie));
|
|
262
266
|
expect(cookieResult).toMatchObject(desiredCookieResultAxios);
|
|
267
|
+
console.log(`TestLoginAndVerify:5`);
|
|
263
268
|
const cookieExpireDate = new Date(cookie.expires);
|
|
264
269
|
expect(cookieExpireDate.getTime()).toBeGreaterThan((/* @__PURE__ */ new Date()).getTime());
|
|
265
270
|
const consentRequired = process.env.CONSENT_REQUIRED.split(" ").sort();
|
|
266
271
|
retVal.data.detail.consentRequired = retVal.data.detail.consentRequired.sort();
|
|
272
|
+
console.log(`TestLoginAndVerify:6`);
|
|
267
273
|
const desiredResult = {
|
|
268
274
|
sessionId: expect.stringMatching(__privateGet(this, _regexSTSBase64)),
|
|
269
275
|
id_token: expect.stringMatching(__privateGet(this, _regexJWT)),
|
|
270
276
|
consentRequired
|
|
271
277
|
};
|
|
278
|
+
console.log(`TestLoginAndVerify:7`);
|
|
272
279
|
expect(retVal.data.detail).toMatchObject(desiredResult);
|
|
280
|
+
console.log(`TestLoginAndVerify:9`);
|
|
273
281
|
});
|
|
274
282
|
__publicField(this, "StartRest01Service", async () => {
|
|
275
283
|
__privateSet(this, _stsRest01Container, await new GenericContainer("serza/stsrest01:latest").withExposedPorts(3003).withEnvironment({
|
package/dist/stsdevtools.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stsdevtools.mjs","sources":["../src/testHelpers.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { expect } from 'vitest';\n\nimport chalk from 'chalk'\n\nimport * as tough from 'tough-cookie'\n\nimport https from 'node:https'\nimport crypto from 'node:crypto';\n\nimport axios from 'axios';\n\nimport { GenericContainer, Network, Wait } from \"testcontainers\";\n\nimport { goptions, $ResetOptions } from '@nsshunt/stsconfig'\n\nimport { Sleep, defaultLogger } from '@nsshunt/stsutils'\n\nimport { AuthUtilsNode } from '@nsshunt/stsappframework'\n\nexport class TestHelper {\n //#regexBase64URL = /^[A-Za-z0-9_-]+$/ // Base64URL - https://base64.guru/standards/base64url\n #regexURLSafeStringComponent = /[-a-zA-Z0-9@:%._+~#=]{1,256}/ // URL safe string component\n //#regexBase64 = /(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64 - https://stackoverflow.com/questions/475074/regex-to-parse-or-validate-base64-data\n #regexSTSBase64 = /SES_(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64\n #regexJWT = /[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+/ // JWT (Base64URL.Base64URL.Base64URL)\n\n #authUtilsNode = new AuthUtilsNode(defaultLogger);\n #network: any;\n\n #databaseContainer: any;\n #stsAuthContainer: any;\n #stsRest01Container: any;\n #ioRedisContainer: any;\n #stsFhirContainer: any;\n\n #ioRedisMessageProcessorUrl: string = '';\n\n #authEndpoint = '';\n #authPort = '';\n #authHost = '';\n\n #rest01Host = '';\n #rest01Port = '';\n #rest01Endpoint = '';\n\n #fhirHost = '';\n #fhirPort = '';\n #fhirEndpoint = '';\n\n #httpsAgent: https.Agent | null = null;\n\n constructor() {\n this.#authEndpoint = 'https://localhost:3002'; //@@\n }\n\n LogDebugMessage(message: any) {\n defaultLogger.debug(message);\n }\n\n #GetHttpsAgent = () =>\n {\n if (this.#httpsAgent === null) {\n // https://nodejs.org/api/http.html#class-httpagent\n this.#httpsAgent = new https.Agent({ \n keepAlive: goptions.keepAlive,\n maxSockets: goptions.maxSockets,\n maxTotalSockets: goptions.maxTotalSockets,\n maxFreeSockets: goptions.maxFreeSockets,\n timeout: goptions.timeout,\n rejectUnauthorized: false\n });\n }\n return this.#httpsAgent;\n }\n\n StartNetwork = async () => {\n this.#network = await new Network().start();\n }\n\n StopNetwork = async () => {\n await this.#network.stop();\n }\n\n get network() {\n return this.#network;\n }\n\n get authPort() {\n return this.#authPort;\n }\n\n get authHost() {\n return this.#authHost;\n }\n\n get authEndpoint() {\n return this.#authEndpoint;\n }\n\n get rest01Port() {\n return this.#rest01Port;\n }\n\n get rest01Host() {\n return this.#rest01Host;\n }\n\n get rest01Endpoint() {\n return this.#rest01Endpoint;\n }\n\n get fhirPort() {\n return this.#fhirPort;\n }\n\n get fhirHost() {\n return this.#fhirHost;\n }\n\n get fhirEndpoint() {\n return this.#fhirEndpoint;\n }\n\n get getHttpsAgent() {\n return this.#GetHttpsAgent();\n }\n\n get ioRedisMessageProcessorUrl() {\n return this.#ioRedisMessageProcessorUrl;\n }\n\n CreateRandomString = () => {\n const charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.'; // /[0-9A-Za-z\\-_~.]/\n let random = '';\n const randomValues: number[] = Array.from(crypto.getRandomValues(new Uint8Array(43)));\n randomValues.forEach(v => (random += charset[v % charset.length]));\n return random;\n }\n\n Login = async (username: string, password: string) => {\n const client_id = process.env.CLIENT_ID as string;\n const nonce = crypto.randomBytes(43).toString('base64'); //CreateRandomString();\n const response_type = 'code';\n const redirect_uri = process.env.REDIRECT_URI as string;\n const response_mode = 'query';\n const scope = process.env.SCOPE as string;\n const state = crypto.randomBytes(43).toString('base64'); // CreateRandomString();\n const code_verifier = this.CreateRandomString();\n const code_challenge = crypto.createHash('sha256').update(code_verifier).digest('base64');\n const code_challenge_method = 'S256';\n\n const authoriseOptions: any = {\n email: username,\n password,\n client_id,\n nonce,\n response_type,\n redirect_uri,\n response_mode,\n scope,\n state,\n code_challenge,\n code_challenge_method\n }\n\n const url = `${this.#authEndpoint}${goptions.asapiroot}/login`;\n const headers = { 'Content-Type': 'application/json'};\n\n const retVal = await axios({\n url\n ,method: 'post'\n ,data: authoriseOptions\n ,headers: headers\n ,httpsAgent: this.#GetHttpsAgent()\n });\n\n //const cookieString = retVal.headers['set-cookie'];\n\n /*\n const api = request(this.#endpoint);\n const retVal: any = await (api as any)\n .post(`${goptions.asapiroot}/login`)\n .send(authoriseOptions)\n //.expect('set-cookie', /consent_cookie=.*; Max-Age=86; Path=\\/; Expires=.*; HttpOnly; Secure; SameSite=Strict/);\n\n const cookieString = retVal.header['set-cookie'];\n\n if (cookieString) {\n retVal.cookie = new Cookie(cookieString[0]);\n }\n */\n\n return retVal;\n }\n\n /*\n GetAuthServerAPITokenFromServer = async (): Promise<string> => {\n return await this.#authUtilsNode.GetAPITokenFromAuthServer(STSClientID.STSTestingService, \n \"eN9u0mHZLGWZrdnE1zit2vL6xwUFW466sTZcbkXDml5KWxlvKaZ1uiOZmA==\", \n goptions.asapiidentifier, this.#authEndpoint)\n }\n */\n\n ValidateJWT = async (token: string): Promise<string> => {\n return await this.#authUtilsNode.ValidateJWT(token, goptions.asapiidentifier, this.#authEndpoint);\n }\n\n StartDatabase = async () => {\n this.#databaseContainer = await new GenericContainer(\"postgres\")\n .withExposedPorts(5432)\n .withEnvironment({\n POSTGRES_PASSWORD: \"postgres\",\n //UV_THREADPOOL_SIZE: \"64\"\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"database\")\n .start();\n\n const httpPort = this.#databaseContainer.getMappedPort(5432);\n const host = this.#databaseContainer.getHost();\n const networkIpAddress = this.#databaseContainer.getIpAddress(this.#network.getName());\n \n process.env.DB_HOST = `${host}:${httpPort}`;\n\n $ResetOptions();\n\n this.LogDebugMessage(chalk.green(`httpPort: [${httpPort}]`));\n this.LogDebugMessage(chalk.green(`host: [${host}]`));\n this.LogDebugMessage(chalk.green(`networkIpAddress: [${networkIpAddress}]`));\n this.LogDebugMessage(chalk.green(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.green(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n\n StopDatabase = async () => {\n if (this.#databaseContainer) {\n await this.#databaseContainer.stop();\n\n this.LogDebugMessage(chalk.yellow(`Used the following parameters for the database during testing:`));\n this.LogDebugMessage(chalk.yellow(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.yellow(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n }\n\n // Note: .withCopyFilesToContainer and .withCopyContentToContainer have a defect in that Jest will not close. A file handle/stream is left open\n // within the underlying code.\n InitializeDatabase = async () => {\n const stsAuthContainerInit = await new GenericContainer(\"serza/stsauth:latest\")\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", // \"192.168.14.101\",\n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\"\n })\n .withCommand([\"node\", \"dist/app\", \"create\"])\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunnerinit\")\n .withWaitStrategy(Wait.forLogMessage(`User registered: {\"status\":200,\"detail\":{\"id\":\"USR_STSGlobalAdminUser@stsmda.com\",\"name\":\"STSGlobalAdminUser@stsmda.com\",\"email\":\"STSGlobalAdminUser@stsmda.com\",\"roles\":[]}}`))\n .start();\n\n await Sleep(500);\n\n await stsAuthContainerInit.stop();\n }\n\n StartRedis = async () => {\n this.#ioRedisContainer = await new GenericContainer(\"redis/redis-stack-server\")\n .withEnvironment({\n REDIS_ARGS: \"--save \\\"\\\" --appendonly no\",\n })\n .withExposedPorts(6379)\n .withNetwork(this.#network)\n .withNetworkAliases(\"redisstackserver\")\n //.withWaitStrategy(Wait.forLogMessage(`Ready to accept connections tcp`))\n .start();\n\n this.#ioRedisMessageProcessorUrl = `redis://${this.#ioRedisContainer.getHost()}:${this.#ioRedisContainer.getMappedPort(6379)}`; \n\n await Sleep(2000);\n //expect(goptions.imRedisMessageProcessorUrl).toEqual('redis://localhost:6379');\n // IM_REDIS_MESSAGE_PROCESSOR_URL\n\n this.LogDebugMessage(chalk.green(`redis/redis-stack-server Started. Server Details: ioRedisMessageProcessorUrl: [${this.#ioRedisMessageProcessorUrl}]`));\n }\n\n StopRedis = async () => {\n await this.#ioRedisContainer.stop();\n await Sleep(200);\n }\n\n StartAuthService = async () => {\n this.#stsAuthContainer = await new GenericContainer(\"serza/stsauth:latest\")\n .withExposedPorts(3002)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunner\")\n .withWaitStrategy(Wait.forHttp(\"/stsauth/v1.0/latency\", 3002).usingTls().allowInsecure())\n .start();\n\n const httpAuthPort = this.#stsAuthContainer.getMappedPort(3002);\n\n await Sleep(200);\n this.#authHost = 'https://localhost'\n this.#authPort = httpAuthPort;\n this.#authEndpoint = `${this.#authHost}:${this.#authPort}`;\n this.LogDebugMessage(chalk.green(`STSAuth Started. Server Details: Host: [${this.#authHost}], Port: [${this.#authPort}]`));\n }\n\n StartFhirService = async () => {\n this.#stsFhirContainer = await new GenericContainer(\"serza/stsfhir:latest\")\n .withExposedPorts(3005)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: 'https://stsauthrunner',\n AS_HOST_PORT: \"3002\",\n AS_PORT: \"3002\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379',\n STSFHIR_PORT: \"3005\",\n STSFHIR_HOST_PORT: \"3005\",\n STSFHIR_ENDPOINT: \"https://stsfhirserver\", // \"https://stscore.stsmda.org\",\n UV_THREADPOOL_SIZE: \"64\",\n FORCE_COLOR: \"3\",\n //node dist/app usedb postgresResources\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsfhirserver\")\n .withWaitStrategy(Wait.forHttp(\"/stsfhir/r5/latency\", 3005).usingTls().allowInsecure())\n .start();\n\n const httpFhirPort = this.#stsFhirContainer.getMappedPort(3005);\n\n await Sleep(200);\n this.#fhirHost = 'https://localhost'\n this.#fhirPort = httpFhirPort;\n this.#fhirEndpoint = `${this.#fhirHost}:${this.#fhirPort}`;\n this.LogDebugMessage(chalk.green(`STSFhir Started. Server Details: Host: [${this.#fhirHost}], Port: [${this.#fhirPort}]`));\n }\n\n StopAuthService = async () => {\n if (this.#stsAuthContainer) {\n await this.#stsAuthContainer.stop();\n await Sleep(200);\n }\n }\n\n StopRest01Service = async () => {\n if (this.#stsRest01Container) {\n await this.#stsRest01Container.stop();\n await Sleep(200);\n }\n }\n\n StopFhirService = async () => {\n if (this.#stsFhirContainer) {\n await this.#stsFhirContainer.stop();\n await Sleep(200);\n }\n }\n\n TestLoginAndVerify = async () => {\n expect.assertions(4);\n\n const retVal = await this.Login('user01@stsmda.com.au', 'user01password');\n expect(retVal.status).toEqual(200);\n\n this.LogDebugMessage(chalk.red(`${JSON.stringify(retVal.data)}`));\n this.LogDebugMessage(chalk.magenta(`${JSON.stringify(retVal.headers)}`));\n this.LogDebugMessage(chalk.yellow(`${JSON.stringify(retVal.headers['set-cookie'])}`));\n\n const cookies = retVal.headers['set-cookie'] as string[];\n this.LogDebugMessage(chalk.yellow(`${cookies[0]}`));\n this.LogDebugMessage(chalk.green(`${JSON.stringify(tough.Cookie.parse(cookies[0]))}`));\n\n const cookie = tough.Cookie.parse(cookies[0]) as tough.Cookie;\n\n const desiredCookieResultAxios = {\n key: 'consent_cookie',\n value: expect.stringMatching(this.#regexURLSafeStringComponent),\n path: '/',\n secure: true,\n httpOnly: true,\n sameSite: 'strict',\n }\n\n const cookieResult = JSON.parse(JSON.stringify(cookie));\n expect(cookieResult).toMatchObject(desiredCookieResultAxios);\n\n const cookieExpireDate = new Date(cookie.expires);\n expect(cookieExpireDate.getTime()).toBeGreaterThan(new Date().getTime());\n\n const consentRequired = (process.env.CONSENT_REQUIRED as string).split(' ').sort();\n retVal.data.detail.consentRequired = retVal.data.detail.consentRequired.sort();\n\n const desiredResult = {\n sessionId: expect.stringMatching(this.#regexSTSBase64),\n id_token: expect.stringMatching(this.#regexJWT),\n consentRequired\n }\n expect(retVal.data.detail).toMatchObject(desiredResult);\n }\n\n StartRest01Service = async () => {\n this.#stsRest01Container = await new GenericContainer(\"serza/stsrest01:latest\")\n .withExposedPorts(3003)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n //AS_ENDPOINT: \"https://stscore.stsmda.org\",\n AS_ENDPOINT: 'https://stsauthrunner', // this.authHost,\n //AS_ENDPOINT: 'https://localhost', // this.authHost,\n AS_HOST_PORT: '3002',\n AS_PORT: '3002',\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n //AS_HOST_PORT: this.authPort,\n //AS_PORT: this.authPort,\n\n //REST01_PORT: '3003',\n //REST01_HOST_PORT: '3003',\n //REST01_ENDPOINT: 'https://localhost' // 'https://stscore.stsmda.org'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"rest01\")\n .withWaitStrategy(Wait.forHttp(\"/stsrest01/v1/latency\", 3003).usingTls().allowInsecure())\n .start();\n\n const httpRest01Port = this.#stsRest01Container.getMappedPort(3003);\n\n await Sleep(200);\n\n this.#rest01Host = 'https://localhost'\n this.#rest01Port = httpRest01Port;\n this.#rest01Endpoint = `${this.#rest01Host}:${this.#rest01Port}`;\n\n this.LogDebugMessage(chalk.green(`STSRest01 Started. Server Details: Host: [${this.rest01Host}], Port: [${this.rest01Port}]`));\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stsdevtools.mjs","sources":["../src/testHelpers.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { expect } from 'vitest';\n\nimport chalk from 'chalk'\n\nimport * as tough from 'tough-cookie'\n\nimport https from 'node:https'\nimport crypto from 'node:crypto';\n\nimport axios from 'axios';\n\nimport { GenericContainer, Network, Wait } from \"testcontainers\";\n\nimport { goptions, $ResetOptions } from '@nsshunt/stsconfig'\n\nimport { Sleep, defaultLogger } from '@nsshunt/stsutils'\n\nimport { AuthUtilsNode } from '@nsshunt/stsappframework'\n\nexport class TestHelper {\n //#regexBase64URL = /^[A-Za-z0-9_-]+$/ // Base64URL - https://base64.guru/standards/base64url\n #regexURLSafeStringComponent = /[-a-zA-Z0-9@:%._+~#=]{1,256}/ // URL safe string component\n //#regexBase64 = /(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64 - https://stackoverflow.com/questions/475074/regex-to-parse-or-validate-base64-data\n #regexSTSBase64 = /SES_(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64\n #regexJWT = /[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+/ // JWT (Base64URL.Base64URL.Base64URL)\n\n #authUtilsNode = new AuthUtilsNode(defaultLogger);\n #network: any;\n\n #databaseContainer: any;\n #stsAuthContainer: any;\n #stsRest01Container: any;\n #ioRedisContainer: any;\n #stsFhirContainer: any;\n\n #ioRedisMessageProcessorUrl: string = '';\n\n #authEndpoint = '';\n #authPort = '';\n #authHost = '';\n\n #rest01Host = '';\n #rest01Port = '';\n #rest01Endpoint = '';\n\n #fhirHost = '';\n #fhirPort = '';\n #fhirEndpoint = '';\n\n #httpsAgent: https.Agent | null = null;\n\n constructor() {\n this.#authEndpoint = 'https://localhost:3002'; //@@\n }\n\n LogDebugMessage(message: any) {\n defaultLogger.debug(message);\n }\n\n #GetHttpsAgent = () =>\n {\n if (this.#httpsAgent === null) {\n // https://nodejs.org/api/http.html#class-httpagent\n this.#httpsAgent = new https.Agent({ \n keepAlive: goptions.keepAlive,\n maxSockets: goptions.maxSockets,\n maxTotalSockets: goptions.maxTotalSockets,\n maxFreeSockets: goptions.maxFreeSockets,\n timeout: goptions.timeout,\n rejectUnauthorized: false\n });\n }\n return this.#httpsAgent;\n }\n\n StartNetwork = async () => {\n this.#network = await new Network().start();\n }\n\n StopNetwork = async () => {\n await this.#network.stop();\n }\n\n get network() {\n return this.#network;\n }\n\n get authPort() {\n return this.#authPort;\n }\n\n get authHost() {\n return this.#authHost;\n }\n\n get authEndpoint() {\n return this.#authEndpoint;\n }\n\n get rest01Port() {\n return this.#rest01Port;\n }\n\n get rest01Host() {\n return this.#rest01Host;\n }\n\n get rest01Endpoint() {\n return this.#rest01Endpoint;\n }\n\n get fhirPort() {\n return this.#fhirPort;\n }\n\n get fhirHost() {\n return this.#fhirHost;\n }\n\n get fhirEndpoint() {\n return this.#fhirEndpoint;\n }\n\n get getHttpsAgent() {\n return this.#GetHttpsAgent();\n }\n\n get ioRedisMessageProcessorUrl() {\n return this.#ioRedisMessageProcessorUrl;\n }\n\n CreateRandomString = () => {\n const charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.'; // /[0-9A-Za-z\\-_~.]/\n let random = '';\n const randomValues: number[] = Array.from(crypto.getRandomValues(new Uint8Array(43)));\n randomValues.forEach(v => (random += charset[v % charset.length]));\n return random;\n }\n\n Login = async (username: string, password: string) => {\n const client_id = process.env.CLIENT_ID as string;\n const nonce = crypto.randomBytes(43).toString('base64'); //CreateRandomString();\n const response_type = 'code';\n const redirect_uri = process.env.REDIRECT_URI as string;\n const response_mode = 'query';\n const scope = process.env.SCOPE as string;\n const state = crypto.randomBytes(43).toString('base64'); // CreateRandomString();\n const code_verifier = this.CreateRandomString();\n const code_challenge = crypto.createHash('sha256').update(code_verifier).digest('base64');\n const code_challenge_method = 'S256';\n\n const authoriseOptions: any = {\n email: username,\n password,\n client_id,\n nonce,\n response_type,\n redirect_uri,\n response_mode,\n scope,\n state,\n code_challenge,\n code_challenge_method\n }\n\n const url = `${this.#authEndpoint}${goptions.asapiroot}/login`;\n const headers = { 'Content-Type': 'application/json'};\n\n const retVal = await axios({\n url\n ,method: 'post'\n ,data: authoriseOptions\n ,headers: headers\n ,httpsAgent: this.#GetHttpsAgent()\n });\n\n //const cookieString = retVal.headers['set-cookie'];\n\n /*\n const api = request(this.#endpoint);\n const retVal: any = await (api as any)\n .post(`${goptions.asapiroot}/login`)\n .send(authoriseOptions)\n //.expect('set-cookie', /consent_cookie=.*; Max-Age=86; Path=\\/; Expires=.*; HttpOnly; Secure; SameSite=Strict/);\n\n const cookieString = retVal.header['set-cookie'];\n\n if (cookieString) {\n retVal.cookie = new Cookie(cookieString[0]);\n }\n */\n\n return retVal;\n }\n\n /*\n GetAuthServerAPITokenFromServer = async (): Promise<string> => {\n return await this.#authUtilsNode.GetAPITokenFromAuthServer(STSClientID.STSTestingService, \n \"eN9u0mHZLGWZrdnE1zit2vL6xwUFW466sTZcbkXDml5KWxlvKaZ1uiOZmA==\", \n goptions.asapiidentifier, this.#authEndpoint)\n }\n */\n\n ValidateJWT = async (token: string): Promise<string> => {\n return await this.#authUtilsNode.ValidateJWT(token, goptions.asapiidentifier, this.#authEndpoint);\n }\n\n StartDatabase = async () => {\n this.#databaseContainer = await new GenericContainer(\"postgres\")\n .withExposedPorts(5432)\n .withEnvironment({\n POSTGRES_PASSWORD: \"postgres\",\n //UV_THREADPOOL_SIZE: \"64\"\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"database\")\n .start();\n\n const httpPort = this.#databaseContainer.getMappedPort(5432);\n const host = this.#databaseContainer.getHost();\n const networkIpAddress = this.#databaseContainer.getIpAddress(this.#network.getName());\n \n process.env.DB_HOST = `${host}:${httpPort}`;\n\n $ResetOptions();\n\n this.LogDebugMessage(chalk.green(`httpPort: [${httpPort}]`));\n this.LogDebugMessage(chalk.green(`host: [${host}]`));\n this.LogDebugMessage(chalk.green(`networkIpAddress: [${networkIpAddress}]`));\n this.LogDebugMessage(chalk.green(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.green(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n\n StopDatabase = async () => {\n if (this.#databaseContainer) {\n await this.#databaseContainer.stop();\n\n this.LogDebugMessage(chalk.yellow(`Used the following parameters for the database during testing:`));\n this.LogDebugMessage(chalk.yellow(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.yellow(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n }\n\n // Note: .withCopyFilesToContainer and .withCopyContentToContainer have a defect in that Jest will not close. A file handle/stream is left open\n // within the underlying code.\n InitializeDatabase = async () => {\n const stsAuthContainerInit = await new GenericContainer(\"serza/stsauth:latest\")\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", // \"192.168.14.101\",\n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\"\n })\n .withCommand([\"node\", \"dist/app\", \"create\"])\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunnerinit\")\n .withWaitStrategy(Wait.forLogMessage(`User registered: {\"status\":200,\"detail\":{\"id\":\"USR_STSGlobalAdminUser@stsmda.com\",\"name\":\"STSGlobalAdminUser@stsmda.com\",\"email\":\"STSGlobalAdminUser@stsmda.com\",\"roles\":[]}}`))\n .start();\n\n await Sleep(500);\n\n await stsAuthContainerInit.stop();\n }\n\n StartRedis = async () => {\n this.#ioRedisContainer = await new GenericContainer(\"redis/redis-stack-server\")\n .withEnvironment({\n REDIS_ARGS: \"--save \\\"\\\" --appendonly no\",\n })\n .withExposedPorts(6379)\n .withNetwork(this.#network)\n .withNetworkAliases(\"redisstackserver\")\n //.withWaitStrategy(Wait.forLogMessage(`Ready to accept connections tcp`))\n .start();\n\n this.#ioRedisMessageProcessorUrl = `redis://${this.#ioRedisContainer.getHost()}:${this.#ioRedisContainer.getMappedPort(6379)}`; \n\n await Sleep(2000);\n //expect(goptions.imRedisMessageProcessorUrl).toEqual('redis://localhost:6379');\n // IM_REDIS_MESSAGE_PROCESSOR_URL\n\n this.LogDebugMessage(chalk.green(`redis/redis-stack-server Started. Server Details: ioRedisMessageProcessorUrl: [${this.#ioRedisMessageProcessorUrl}]`));\n }\n\n StopRedis = async () => {\n await this.#ioRedisContainer.stop();\n await Sleep(200);\n }\n\n StartAuthService = async () => {\n this.#stsAuthContainer = await new GenericContainer(\"serza/stsauth:latest\")\n .withExposedPorts(3002)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunner\")\n .withWaitStrategy(Wait.forHttp(\"/stsauth/v1.0/latency\", 3002).usingTls().allowInsecure())\n .start();\n\n const httpAuthPort = this.#stsAuthContainer.getMappedPort(3002);\n\n await Sleep(200);\n this.#authHost = 'https://localhost'\n this.#authPort = httpAuthPort;\n this.#authEndpoint = `${this.#authHost}:${this.#authPort}`;\n this.LogDebugMessage(chalk.green(`STSAuth Started. Server Details: Host: [${this.#authHost}], Port: [${this.#authPort}]`));\n }\n\n StartFhirService = async () => {\n this.#stsFhirContainer = await new GenericContainer(\"serza/stsfhir:latest\")\n .withExposedPorts(3005)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: 'https://stsauthrunner',\n AS_HOST_PORT: \"3002\",\n AS_PORT: \"3002\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379',\n STSFHIR_PORT: \"3005\",\n STSFHIR_HOST_PORT: \"3005\",\n STSFHIR_ENDPOINT: \"https://stsfhirserver\", // \"https://stscore.stsmda.org\",\n UV_THREADPOOL_SIZE: \"64\",\n FORCE_COLOR: \"3\",\n //node dist/app usedb postgresResources\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsfhirserver\")\n .withWaitStrategy(Wait.forHttp(\"/stsfhir/r5/latency\", 3005).usingTls().allowInsecure())\n .start();\n\n const httpFhirPort = this.#stsFhirContainer.getMappedPort(3005);\n\n await Sleep(200);\n this.#fhirHost = 'https://localhost'\n this.#fhirPort = httpFhirPort;\n this.#fhirEndpoint = `${this.#fhirHost}:${this.#fhirPort}`;\n this.LogDebugMessage(chalk.green(`STSFhir Started. Server Details: Host: [${this.#fhirHost}], Port: [${this.#fhirPort}]`));\n }\n\n StopAuthService = async () => {\n if (this.#stsAuthContainer) {\n await this.#stsAuthContainer.stop();\n await Sleep(200);\n }\n }\n\n StopRest01Service = async () => {\n if (this.#stsRest01Container) {\n await this.#stsRest01Container.stop();\n await Sleep(200);\n }\n }\n\n StopFhirService = async () => {\n if (this.#stsFhirContainer) {\n await this.#stsFhirContainer.stop();\n await Sleep(200);\n }\n }\n\n TestLoginAndVerify = async () => {\n expect.assertions(4);\n\n console.log(`TestLoginAndVerify:1`);\n\n const retVal = await this.Login('user01@stsmda.com.au', 'user01password');\n expect(retVal.status).toEqual(200);\n\n console.log(`TestLoginAndVerify:2`);\n\n this.LogDebugMessage(chalk.red(`${JSON.stringify(retVal.data)}`));\n this.LogDebugMessage(chalk.magenta(`${JSON.stringify(retVal.headers)}`));\n this.LogDebugMessage(chalk.yellow(`${JSON.stringify(retVal.headers['set-cookie'])}`));\n\n const cookies = retVal.headers['set-cookie'] as string[];\n this.LogDebugMessage(chalk.yellow(`${cookies[0]}`));\n this.LogDebugMessage(chalk.green(`${JSON.stringify(tough.Cookie.parse(cookies[0]))}`));\n\n console.log(`TestLoginAndVerify:3`);\n\n const cookie = tough.Cookie.parse(cookies[0]) as tough.Cookie;\n\n console.log(`TestLoginAndVerify:4`);\n\n const desiredCookieResultAxios = {\n key: 'consent_cookie',\n value: expect.stringMatching(this.#regexURLSafeStringComponent),\n path: '/',\n secure: true,\n httpOnly: true,\n sameSite: 'strict',\n }\n\n const cookieResult = JSON.parse(JSON.stringify(cookie));\n expect(cookieResult).toMatchObject(desiredCookieResultAxios);\n\n console.log(`TestLoginAndVerify:5`);\n\n const cookieExpireDate = new Date(cookie.expires);\n expect(cookieExpireDate.getTime()).toBeGreaterThan(new Date().getTime());\n\n const consentRequired = (process.env.CONSENT_REQUIRED as string).split(' ').sort();\n retVal.data.detail.consentRequired = retVal.data.detail.consentRequired.sort();\n\n console.log(`TestLoginAndVerify:6`);\n\n const desiredResult = {\n sessionId: expect.stringMatching(this.#regexSTSBase64),\n id_token: expect.stringMatching(this.#regexJWT),\n consentRequired\n }\n\n console.log(`TestLoginAndVerify:7`);\n\n expect(retVal.data.detail).toMatchObject(desiredResult);\n\n console.log(`TestLoginAndVerify:9`);\n }\n\n StartRest01Service = async () => {\n this.#stsRest01Container = await new GenericContainer(\"serza/stsrest01:latest\")\n .withExposedPorts(3003)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n //AS_ENDPOINT: \"https://stscore.stsmda.org\",\n AS_ENDPOINT: 'https://stsauthrunner', // this.authHost,\n //AS_ENDPOINT: 'https://localhost', // this.authHost,\n AS_HOST_PORT: '3002',\n AS_PORT: '3002',\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n //AS_HOST_PORT: this.authPort,\n //AS_PORT: this.authPort,\n\n //REST01_PORT: '3003',\n //REST01_HOST_PORT: '3003',\n //REST01_ENDPOINT: 'https://localhost' // 'https://stscore.stsmda.org'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"rest01\")\n .withWaitStrategy(Wait.forHttp(\"/stsrest01/v1/latency\", 3003).usingTls().allowInsecure())\n .start();\n\n const httpRest01Port = this.#stsRest01Container.getMappedPort(3003);\n\n await Sleep(200);\n\n this.#rest01Host = 'https://localhost'\n this.#rest01Port = httpRest01Port;\n this.#rest01Endpoint = `${this.#rest01Host}:${this.#rest01Port}`;\n\n this.LogDebugMessage(chalk.green(`STSRest01 Started. Server Details: Host: [${this.rest01Host}], Port: [${this.rest01Port}]`));\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/stsdevtools.umd.js
CHANGED
|
@@ -252,15 +252,19 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
|
|
|
252
252
|
});
|
|
253
253
|
__publicField(this, "TestLoginAndVerify", async () => {
|
|
254
254
|
vitest.expect.assertions(4);
|
|
255
|
+
console.log(`TestLoginAndVerify:1`);
|
|
255
256
|
const retVal = await this.Login("user01@stsmda.com.au", "user01password");
|
|
256
257
|
vitest.expect(retVal.status).toEqual(200);
|
|
258
|
+
console.log(`TestLoginAndVerify:2`);
|
|
257
259
|
this.LogDebugMessage(chalk.red(`${JSON.stringify(retVal.data)}`));
|
|
258
260
|
this.LogDebugMessage(chalk.magenta(`${JSON.stringify(retVal.headers)}`));
|
|
259
261
|
this.LogDebugMessage(chalk.yellow(`${JSON.stringify(retVal.headers["set-cookie"])}`));
|
|
260
262
|
const cookies = retVal.headers["set-cookie"];
|
|
261
263
|
this.LogDebugMessage(chalk.yellow(`${cookies[0]}`));
|
|
262
264
|
this.LogDebugMessage(chalk.green(`${JSON.stringify(tough__namespace.Cookie.parse(cookies[0]))}`));
|
|
265
|
+
console.log(`TestLoginAndVerify:3`);
|
|
263
266
|
const cookie = tough__namespace.Cookie.parse(cookies[0]);
|
|
267
|
+
console.log(`TestLoginAndVerify:4`);
|
|
264
268
|
const desiredCookieResultAxios = {
|
|
265
269
|
key: "consent_cookie",
|
|
266
270
|
value: vitest.expect.stringMatching(__privateGet(this, _regexURLSafeStringComponent)),
|
|
@@ -271,16 +275,20 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
|
|
|
271
275
|
};
|
|
272
276
|
const cookieResult = JSON.parse(JSON.stringify(cookie));
|
|
273
277
|
vitest.expect(cookieResult).toMatchObject(desiredCookieResultAxios);
|
|
278
|
+
console.log(`TestLoginAndVerify:5`);
|
|
274
279
|
const cookieExpireDate = new Date(cookie.expires);
|
|
275
280
|
vitest.expect(cookieExpireDate.getTime()).toBeGreaterThan((/* @__PURE__ */ new Date()).getTime());
|
|
276
281
|
const consentRequired = process.env.CONSENT_REQUIRED.split(" ").sort();
|
|
277
282
|
retVal.data.detail.consentRequired = retVal.data.detail.consentRequired.sort();
|
|
283
|
+
console.log(`TestLoginAndVerify:6`);
|
|
278
284
|
const desiredResult = {
|
|
279
285
|
sessionId: vitest.expect.stringMatching(__privateGet(this, _regexSTSBase64)),
|
|
280
286
|
id_token: vitest.expect.stringMatching(__privateGet(this, _regexJWT)),
|
|
281
287
|
consentRequired
|
|
282
288
|
};
|
|
289
|
+
console.log(`TestLoginAndVerify:7`);
|
|
283
290
|
vitest.expect(retVal.data.detail).toMatchObject(desiredResult);
|
|
291
|
+
console.log(`TestLoginAndVerify:9`);
|
|
284
292
|
});
|
|
285
293
|
__publicField(this, "StartRest01Service", async () => {
|
|
286
294
|
__privateSet(this, _stsRest01Container, await new testcontainers.GenericContainer("serza/stsrest01:latest").withExposedPorts(3003).withEnvironment({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stsdevtools.umd.js","sources":["../src/testHelpers.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { expect } from 'vitest';\n\nimport chalk from 'chalk'\n\nimport * as tough from 'tough-cookie'\n\nimport https from 'node:https'\nimport crypto from 'node:crypto';\n\nimport axios from 'axios';\n\nimport { GenericContainer, Network, Wait } from \"testcontainers\";\n\nimport { goptions, $ResetOptions } from '@nsshunt/stsconfig'\n\nimport { Sleep, defaultLogger } from '@nsshunt/stsutils'\n\nimport { AuthUtilsNode } from '@nsshunt/stsappframework'\n\nexport class TestHelper {\n //#regexBase64URL = /^[A-Za-z0-9_-]+$/ // Base64URL - https://base64.guru/standards/base64url\n #regexURLSafeStringComponent = /[-a-zA-Z0-9@:%._+~#=]{1,256}/ // URL safe string component\n //#regexBase64 = /(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64 - https://stackoverflow.com/questions/475074/regex-to-parse-or-validate-base64-data\n #regexSTSBase64 = /SES_(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64\n #regexJWT = /[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+/ // JWT (Base64URL.Base64URL.Base64URL)\n\n #authUtilsNode = new AuthUtilsNode(defaultLogger);\n #network: any;\n\n #databaseContainer: any;\n #stsAuthContainer: any;\n #stsRest01Container: any;\n #ioRedisContainer: any;\n #stsFhirContainer: any;\n\n #ioRedisMessageProcessorUrl: string = '';\n\n #authEndpoint = '';\n #authPort = '';\n #authHost = '';\n\n #rest01Host = '';\n #rest01Port = '';\n #rest01Endpoint = '';\n\n #fhirHost = '';\n #fhirPort = '';\n #fhirEndpoint = '';\n\n #httpsAgent: https.Agent | null = null;\n\n constructor() {\n this.#authEndpoint = 'https://localhost:3002'; //@@\n }\n\n LogDebugMessage(message: any) {\n defaultLogger.debug(message);\n }\n\n #GetHttpsAgent = () =>\n {\n if (this.#httpsAgent === null) {\n // https://nodejs.org/api/http.html#class-httpagent\n this.#httpsAgent = new https.Agent({ \n keepAlive: goptions.keepAlive,\n maxSockets: goptions.maxSockets,\n maxTotalSockets: goptions.maxTotalSockets,\n maxFreeSockets: goptions.maxFreeSockets,\n timeout: goptions.timeout,\n rejectUnauthorized: false\n });\n }\n return this.#httpsAgent;\n }\n\n StartNetwork = async () => {\n this.#network = await new Network().start();\n }\n\n StopNetwork = async () => {\n await this.#network.stop();\n }\n\n get network() {\n return this.#network;\n }\n\n get authPort() {\n return this.#authPort;\n }\n\n get authHost() {\n return this.#authHost;\n }\n\n get authEndpoint() {\n return this.#authEndpoint;\n }\n\n get rest01Port() {\n return this.#rest01Port;\n }\n\n get rest01Host() {\n return this.#rest01Host;\n }\n\n get rest01Endpoint() {\n return this.#rest01Endpoint;\n }\n\n get fhirPort() {\n return this.#fhirPort;\n }\n\n get fhirHost() {\n return this.#fhirHost;\n }\n\n get fhirEndpoint() {\n return this.#fhirEndpoint;\n }\n\n get getHttpsAgent() {\n return this.#GetHttpsAgent();\n }\n\n get ioRedisMessageProcessorUrl() {\n return this.#ioRedisMessageProcessorUrl;\n }\n\n CreateRandomString = () => {\n const charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.'; // /[0-9A-Za-z\\-_~.]/\n let random = '';\n const randomValues: number[] = Array.from(crypto.getRandomValues(new Uint8Array(43)));\n randomValues.forEach(v => (random += charset[v % charset.length]));\n return random;\n }\n\n Login = async (username: string, password: string) => {\n const client_id = process.env.CLIENT_ID as string;\n const nonce = crypto.randomBytes(43).toString('base64'); //CreateRandomString();\n const response_type = 'code';\n const redirect_uri = process.env.REDIRECT_URI as string;\n const response_mode = 'query';\n const scope = process.env.SCOPE as string;\n const state = crypto.randomBytes(43).toString('base64'); // CreateRandomString();\n const code_verifier = this.CreateRandomString();\n const code_challenge = crypto.createHash('sha256').update(code_verifier).digest('base64');\n const code_challenge_method = 'S256';\n\n const authoriseOptions: any = {\n email: username,\n password,\n client_id,\n nonce,\n response_type,\n redirect_uri,\n response_mode,\n scope,\n state,\n code_challenge,\n code_challenge_method\n }\n\n const url = `${this.#authEndpoint}${goptions.asapiroot}/login`;\n const headers = { 'Content-Type': 'application/json'};\n\n const retVal = await axios({\n url\n ,method: 'post'\n ,data: authoriseOptions\n ,headers: headers\n ,httpsAgent: this.#GetHttpsAgent()\n });\n\n //const cookieString = retVal.headers['set-cookie'];\n\n /*\n const api = request(this.#endpoint);\n const retVal: any = await (api as any)\n .post(`${goptions.asapiroot}/login`)\n .send(authoriseOptions)\n //.expect('set-cookie', /consent_cookie=.*; Max-Age=86; Path=\\/; Expires=.*; HttpOnly; Secure; SameSite=Strict/);\n\n const cookieString = retVal.header['set-cookie'];\n\n if (cookieString) {\n retVal.cookie = new Cookie(cookieString[0]);\n }\n */\n\n return retVal;\n }\n\n /*\n GetAuthServerAPITokenFromServer = async (): Promise<string> => {\n return await this.#authUtilsNode.GetAPITokenFromAuthServer(STSClientID.STSTestingService, \n \"eN9u0mHZLGWZrdnE1zit2vL6xwUFW466sTZcbkXDml5KWxlvKaZ1uiOZmA==\", \n goptions.asapiidentifier, this.#authEndpoint)\n }\n */\n\n ValidateJWT = async (token: string): Promise<string> => {\n return await this.#authUtilsNode.ValidateJWT(token, goptions.asapiidentifier, this.#authEndpoint);\n }\n\n StartDatabase = async () => {\n this.#databaseContainer = await new GenericContainer(\"postgres\")\n .withExposedPorts(5432)\n .withEnvironment({\n POSTGRES_PASSWORD: \"postgres\",\n //UV_THREADPOOL_SIZE: \"64\"\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"database\")\n .start();\n\n const httpPort = this.#databaseContainer.getMappedPort(5432);\n const host = this.#databaseContainer.getHost();\n const networkIpAddress = this.#databaseContainer.getIpAddress(this.#network.getName());\n \n process.env.DB_HOST = `${host}:${httpPort}`;\n\n $ResetOptions();\n\n this.LogDebugMessage(chalk.green(`httpPort: [${httpPort}]`));\n this.LogDebugMessage(chalk.green(`host: [${host}]`));\n this.LogDebugMessage(chalk.green(`networkIpAddress: [${networkIpAddress}]`));\n this.LogDebugMessage(chalk.green(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.green(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n\n StopDatabase = async () => {\n if (this.#databaseContainer) {\n await this.#databaseContainer.stop();\n\n this.LogDebugMessage(chalk.yellow(`Used the following parameters for the database during testing:`));\n this.LogDebugMessage(chalk.yellow(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.yellow(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n }\n\n // Note: .withCopyFilesToContainer and .withCopyContentToContainer have a defect in that Jest will not close. A file handle/stream is left open\n // within the underlying code.\n InitializeDatabase = async () => {\n const stsAuthContainerInit = await new GenericContainer(\"serza/stsauth:latest\")\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", // \"192.168.14.101\",\n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\"\n })\n .withCommand([\"node\", \"dist/app\", \"create\"])\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunnerinit\")\n .withWaitStrategy(Wait.forLogMessage(`User registered: {\"status\":200,\"detail\":{\"id\":\"USR_STSGlobalAdminUser@stsmda.com\",\"name\":\"STSGlobalAdminUser@stsmda.com\",\"email\":\"STSGlobalAdminUser@stsmda.com\",\"roles\":[]}}`))\n .start();\n\n await Sleep(500);\n\n await stsAuthContainerInit.stop();\n }\n\n StartRedis = async () => {\n this.#ioRedisContainer = await new GenericContainer(\"redis/redis-stack-server\")\n .withEnvironment({\n REDIS_ARGS: \"--save \\\"\\\" --appendonly no\",\n })\n .withExposedPorts(6379)\n .withNetwork(this.#network)\n .withNetworkAliases(\"redisstackserver\")\n //.withWaitStrategy(Wait.forLogMessage(`Ready to accept connections tcp`))\n .start();\n\n this.#ioRedisMessageProcessorUrl = `redis://${this.#ioRedisContainer.getHost()}:${this.#ioRedisContainer.getMappedPort(6379)}`; \n\n await Sleep(2000);\n //expect(goptions.imRedisMessageProcessorUrl).toEqual('redis://localhost:6379');\n // IM_REDIS_MESSAGE_PROCESSOR_URL\n\n this.LogDebugMessage(chalk.green(`redis/redis-stack-server Started. Server Details: ioRedisMessageProcessorUrl: [${this.#ioRedisMessageProcessorUrl}]`));\n }\n\n StopRedis = async () => {\n await this.#ioRedisContainer.stop();\n await Sleep(200);\n }\n\n StartAuthService = async () => {\n this.#stsAuthContainer = await new GenericContainer(\"serza/stsauth:latest\")\n .withExposedPorts(3002)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunner\")\n .withWaitStrategy(Wait.forHttp(\"/stsauth/v1.0/latency\", 3002).usingTls().allowInsecure())\n .start();\n\n const httpAuthPort = this.#stsAuthContainer.getMappedPort(3002);\n\n await Sleep(200);\n this.#authHost = 'https://localhost'\n this.#authPort = httpAuthPort;\n this.#authEndpoint = `${this.#authHost}:${this.#authPort}`;\n this.LogDebugMessage(chalk.green(`STSAuth Started. Server Details: Host: [${this.#authHost}], Port: [${this.#authPort}]`));\n }\n\n StartFhirService = async () => {\n this.#stsFhirContainer = await new GenericContainer(\"serza/stsfhir:latest\")\n .withExposedPorts(3005)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: 'https://stsauthrunner',\n AS_HOST_PORT: \"3002\",\n AS_PORT: \"3002\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379',\n STSFHIR_PORT: \"3005\",\n STSFHIR_HOST_PORT: \"3005\",\n STSFHIR_ENDPOINT: \"https://stsfhirserver\", // \"https://stscore.stsmda.org\",\n UV_THREADPOOL_SIZE: \"64\",\n FORCE_COLOR: \"3\",\n //node dist/app usedb postgresResources\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsfhirserver\")\n .withWaitStrategy(Wait.forHttp(\"/stsfhir/r5/latency\", 3005).usingTls().allowInsecure())\n .start();\n\n const httpFhirPort = this.#stsFhirContainer.getMappedPort(3005);\n\n await Sleep(200);\n this.#fhirHost = 'https://localhost'\n this.#fhirPort = httpFhirPort;\n this.#fhirEndpoint = `${this.#fhirHost}:${this.#fhirPort}`;\n this.LogDebugMessage(chalk.green(`STSFhir Started. Server Details: Host: [${this.#fhirHost}], Port: [${this.#fhirPort}]`));\n }\n\n StopAuthService = async () => {\n if (this.#stsAuthContainer) {\n await this.#stsAuthContainer.stop();\n await Sleep(200);\n }\n }\n\n StopRest01Service = async () => {\n if (this.#stsRest01Container) {\n await this.#stsRest01Container.stop();\n await Sleep(200);\n }\n }\n\n StopFhirService = async () => {\n if (this.#stsFhirContainer) {\n await this.#stsFhirContainer.stop();\n await Sleep(200);\n }\n }\n\n TestLoginAndVerify = async () => {\n expect.assertions(4);\n\n const retVal = await this.Login('user01@stsmda.com.au', 'user01password');\n expect(retVal.status).toEqual(200);\n\n this.LogDebugMessage(chalk.red(`${JSON.stringify(retVal.data)}`));\n this.LogDebugMessage(chalk.magenta(`${JSON.stringify(retVal.headers)}`));\n this.LogDebugMessage(chalk.yellow(`${JSON.stringify(retVal.headers['set-cookie'])}`));\n\n const cookies = retVal.headers['set-cookie'] as string[];\n this.LogDebugMessage(chalk.yellow(`${cookies[0]}`));\n this.LogDebugMessage(chalk.green(`${JSON.stringify(tough.Cookie.parse(cookies[0]))}`));\n\n const cookie = tough.Cookie.parse(cookies[0]) as tough.Cookie;\n\n const desiredCookieResultAxios = {\n key: 'consent_cookie',\n value: expect.stringMatching(this.#regexURLSafeStringComponent),\n path: '/',\n secure: true,\n httpOnly: true,\n sameSite: 'strict',\n }\n\n const cookieResult = JSON.parse(JSON.stringify(cookie));\n expect(cookieResult).toMatchObject(desiredCookieResultAxios);\n\n const cookieExpireDate = new Date(cookie.expires);\n expect(cookieExpireDate.getTime()).toBeGreaterThan(new Date().getTime());\n\n const consentRequired = (process.env.CONSENT_REQUIRED as string).split(' ').sort();\n retVal.data.detail.consentRequired = retVal.data.detail.consentRequired.sort();\n\n const desiredResult = {\n sessionId: expect.stringMatching(this.#regexSTSBase64),\n id_token: expect.stringMatching(this.#regexJWT),\n consentRequired\n }\n expect(retVal.data.detail).toMatchObject(desiredResult);\n }\n\n StartRest01Service = async () => {\n this.#stsRest01Container = await new GenericContainer(\"serza/stsrest01:latest\")\n .withExposedPorts(3003)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n //AS_ENDPOINT: \"https://stscore.stsmda.org\",\n AS_ENDPOINT: 'https://stsauthrunner', // this.authHost,\n //AS_ENDPOINT: 'https://localhost', // this.authHost,\n AS_HOST_PORT: '3002',\n AS_PORT: '3002',\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n //AS_HOST_PORT: this.authPort,\n //AS_PORT: this.authPort,\n\n //REST01_PORT: '3003',\n //REST01_HOST_PORT: '3003',\n //REST01_ENDPOINT: 'https://localhost' // 'https://stscore.stsmda.org'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"rest01\")\n .withWaitStrategy(Wait.forHttp(\"/stsrest01/v1/latency\", 3003).usingTls().allowInsecure())\n .start();\n\n const httpRest01Port = this.#stsRest01Container.getMappedPort(3003);\n\n await Sleep(200);\n\n this.#rest01Host = 'https://localhost'\n this.#rest01Port = httpRest01Port;\n this.#rest01Endpoint = `${this.#rest01Host}:${this.#rest01Port}`;\n\n this.LogDebugMessage(chalk.green(`STSRest01 Started. Server Details: Host: [${this.rest01Host}], Port: [${this.rest01Port}]`));\n }\n}\n"],"names":["AuthUtilsNode","defaultLogger","goptions","Network","GenericContainer","$ResetOptions","Wait","Sleep","expect","tough"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stsdevtools.umd.js","sources":["../src/testHelpers.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { expect } from 'vitest';\n\nimport chalk from 'chalk'\n\nimport * as tough from 'tough-cookie'\n\nimport https from 'node:https'\nimport crypto from 'node:crypto';\n\nimport axios from 'axios';\n\nimport { GenericContainer, Network, Wait } from \"testcontainers\";\n\nimport { goptions, $ResetOptions } from '@nsshunt/stsconfig'\n\nimport { Sleep, defaultLogger } from '@nsshunt/stsutils'\n\nimport { AuthUtilsNode } from '@nsshunt/stsappframework'\n\nexport class TestHelper {\n //#regexBase64URL = /^[A-Za-z0-9_-]+$/ // Base64URL - https://base64.guru/standards/base64url\n #regexURLSafeStringComponent = /[-a-zA-Z0-9@:%._+~#=]{1,256}/ // URL safe string component\n //#regexBase64 = /(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64 - https://stackoverflow.com/questions/475074/regex-to-parse-or-validate-base64-data\n #regexSTSBase64 = /SES_(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?/ // Base64\n #regexJWT = /[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+/ // JWT (Base64URL.Base64URL.Base64URL)\n\n #authUtilsNode = new AuthUtilsNode(defaultLogger);\n #network: any;\n\n #databaseContainer: any;\n #stsAuthContainer: any;\n #stsRest01Container: any;\n #ioRedisContainer: any;\n #stsFhirContainer: any;\n\n #ioRedisMessageProcessorUrl: string = '';\n\n #authEndpoint = '';\n #authPort = '';\n #authHost = '';\n\n #rest01Host = '';\n #rest01Port = '';\n #rest01Endpoint = '';\n\n #fhirHost = '';\n #fhirPort = '';\n #fhirEndpoint = '';\n\n #httpsAgent: https.Agent | null = null;\n\n constructor() {\n this.#authEndpoint = 'https://localhost:3002'; //@@\n }\n\n LogDebugMessage(message: any) {\n defaultLogger.debug(message);\n }\n\n #GetHttpsAgent = () =>\n {\n if (this.#httpsAgent === null) {\n // https://nodejs.org/api/http.html#class-httpagent\n this.#httpsAgent = new https.Agent({ \n keepAlive: goptions.keepAlive,\n maxSockets: goptions.maxSockets,\n maxTotalSockets: goptions.maxTotalSockets,\n maxFreeSockets: goptions.maxFreeSockets,\n timeout: goptions.timeout,\n rejectUnauthorized: false\n });\n }\n return this.#httpsAgent;\n }\n\n StartNetwork = async () => {\n this.#network = await new Network().start();\n }\n\n StopNetwork = async () => {\n await this.#network.stop();\n }\n\n get network() {\n return this.#network;\n }\n\n get authPort() {\n return this.#authPort;\n }\n\n get authHost() {\n return this.#authHost;\n }\n\n get authEndpoint() {\n return this.#authEndpoint;\n }\n\n get rest01Port() {\n return this.#rest01Port;\n }\n\n get rest01Host() {\n return this.#rest01Host;\n }\n\n get rest01Endpoint() {\n return this.#rest01Endpoint;\n }\n\n get fhirPort() {\n return this.#fhirPort;\n }\n\n get fhirHost() {\n return this.#fhirHost;\n }\n\n get fhirEndpoint() {\n return this.#fhirEndpoint;\n }\n\n get getHttpsAgent() {\n return this.#GetHttpsAgent();\n }\n\n get ioRedisMessageProcessorUrl() {\n return this.#ioRedisMessageProcessorUrl;\n }\n\n CreateRandomString = () => {\n const charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.'; // /[0-9A-Za-z\\-_~.]/\n let random = '';\n const randomValues: number[] = Array.from(crypto.getRandomValues(new Uint8Array(43)));\n randomValues.forEach(v => (random += charset[v % charset.length]));\n return random;\n }\n\n Login = async (username: string, password: string) => {\n const client_id = process.env.CLIENT_ID as string;\n const nonce = crypto.randomBytes(43).toString('base64'); //CreateRandomString();\n const response_type = 'code';\n const redirect_uri = process.env.REDIRECT_URI as string;\n const response_mode = 'query';\n const scope = process.env.SCOPE as string;\n const state = crypto.randomBytes(43).toString('base64'); // CreateRandomString();\n const code_verifier = this.CreateRandomString();\n const code_challenge = crypto.createHash('sha256').update(code_verifier).digest('base64');\n const code_challenge_method = 'S256';\n\n const authoriseOptions: any = {\n email: username,\n password,\n client_id,\n nonce,\n response_type,\n redirect_uri,\n response_mode,\n scope,\n state,\n code_challenge,\n code_challenge_method\n }\n\n const url = `${this.#authEndpoint}${goptions.asapiroot}/login`;\n const headers = { 'Content-Type': 'application/json'};\n\n const retVal = await axios({\n url\n ,method: 'post'\n ,data: authoriseOptions\n ,headers: headers\n ,httpsAgent: this.#GetHttpsAgent()\n });\n\n //const cookieString = retVal.headers['set-cookie'];\n\n /*\n const api = request(this.#endpoint);\n const retVal: any = await (api as any)\n .post(`${goptions.asapiroot}/login`)\n .send(authoriseOptions)\n //.expect('set-cookie', /consent_cookie=.*; Max-Age=86; Path=\\/; Expires=.*; HttpOnly; Secure; SameSite=Strict/);\n\n const cookieString = retVal.header['set-cookie'];\n\n if (cookieString) {\n retVal.cookie = new Cookie(cookieString[0]);\n }\n */\n\n return retVal;\n }\n\n /*\n GetAuthServerAPITokenFromServer = async (): Promise<string> => {\n return await this.#authUtilsNode.GetAPITokenFromAuthServer(STSClientID.STSTestingService, \n \"eN9u0mHZLGWZrdnE1zit2vL6xwUFW466sTZcbkXDml5KWxlvKaZ1uiOZmA==\", \n goptions.asapiidentifier, this.#authEndpoint)\n }\n */\n\n ValidateJWT = async (token: string): Promise<string> => {\n return await this.#authUtilsNode.ValidateJWT(token, goptions.asapiidentifier, this.#authEndpoint);\n }\n\n StartDatabase = async () => {\n this.#databaseContainer = await new GenericContainer(\"postgres\")\n .withExposedPorts(5432)\n .withEnvironment({\n POSTGRES_PASSWORD: \"postgres\",\n //UV_THREADPOOL_SIZE: \"64\"\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"database\")\n .start();\n\n const httpPort = this.#databaseContainer.getMappedPort(5432);\n const host = this.#databaseContainer.getHost();\n const networkIpAddress = this.#databaseContainer.getIpAddress(this.#network.getName());\n \n process.env.DB_HOST = `${host}:${httpPort}`;\n\n $ResetOptions();\n\n this.LogDebugMessage(chalk.green(`httpPort: [${httpPort}]`));\n this.LogDebugMessage(chalk.green(`host: [${host}]`));\n this.LogDebugMessage(chalk.green(`networkIpAddress: [${networkIpAddress}]`));\n this.LogDebugMessage(chalk.green(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.green(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n\n StopDatabase = async () => {\n if (this.#databaseContainer) {\n await this.#databaseContainer.stop();\n\n this.LogDebugMessage(chalk.yellow(`Used the following parameters for the database during testing:`));\n this.LogDebugMessage(chalk.yellow(`connectionString: [${goptions.connectionString}]`));\n this.LogDebugMessage(chalk.yellow(`defaultDatabaseConnectionString: [${goptions.defaultDatabaseConnectionString }]`));\n }\n }\n\n // Note: .withCopyFilesToContainer and .withCopyContentToContainer have a defect in that Jest will not close. A file handle/stream is left open\n // within the underlying code.\n InitializeDatabase = async () => {\n const stsAuthContainerInit = await new GenericContainer(\"serza/stsauth:latest\")\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", // \"192.168.14.101\",\n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\"\n })\n .withCommand([\"node\", \"dist/app\", \"create\"])\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunnerinit\")\n .withWaitStrategy(Wait.forLogMessage(`User registered: {\"status\":200,\"detail\":{\"id\":\"USR_STSGlobalAdminUser@stsmda.com\",\"name\":\"STSGlobalAdminUser@stsmda.com\",\"email\":\"STSGlobalAdminUser@stsmda.com\",\"roles\":[]}}`))\n .start();\n\n await Sleep(500);\n\n await stsAuthContainerInit.stop();\n }\n\n StartRedis = async () => {\n this.#ioRedisContainer = await new GenericContainer(\"redis/redis-stack-server\")\n .withEnvironment({\n REDIS_ARGS: \"--save \\\"\\\" --appendonly no\",\n })\n .withExposedPorts(6379)\n .withNetwork(this.#network)\n .withNetworkAliases(\"redisstackserver\")\n //.withWaitStrategy(Wait.forLogMessage(`Ready to accept connections tcp`))\n .start();\n\n this.#ioRedisMessageProcessorUrl = `redis://${this.#ioRedisContainer.getHost()}:${this.#ioRedisContainer.getMappedPort(6379)}`; \n\n await Sleep(2000);\n //expect(goptions.imRedisMessageProcessorUrl).toEqual('redis://localhost:6379');\n // IM_REDIS_MESSAGE_PROCESSOR_URL\n\n this.LogDebugMessage(chalk.green(`redis/redis-stack-server Started. Server Details: ioRedisMessageProcessorUrl: [${this.#ioRedisMessageProcessorUrl}]`));\n }\n\n StopRedis = async () => {\n await this.#ioRedisContainer.stop();\n await Sleep(200);\n }\n\n StartAuthService = async () => {\n this.#stsAuthContainer = await new GenericContainer(\"serza/stsauth:latest\")\n .withExposedPorts(3002)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: \"https://stscore.stsmda.org\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsauthrunner\")\n .withWaitStrategy(Wait.forHttp(\"/stsauth/v1.0/latency\", 3002).usingTls().allowInsecure())\n .start();\n\n const httpAuthPort = this.#stsAuthContainer.getMappedPort(3002);\n\n await Sleep(200);\n this.#authHost = 'https://localhost'\n this.#authPort = httpAuthPort;\n this.#authEndpoint = `${this.#authHost}:${this.#authPort}`;\n this.LogDebugMessage(chalk.green(`STSAuth Started. Server Details: Host: [${this.#authHost}], Port: [${this.#authPort}]`));\n }\n\n StartFhirService = async () => {\n this.#stsFhirContainer = await new GenericContainer(\"serza/stsfhir:latest\")\n .withExposedPorts(3005)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n AS_ENDPOINT: 'https://stsauthrunner',\n AS_HOST_PORT: \"3002\",\n AS_PORT: \"3002\",\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379',\n STSFHIR_PORT: \"3005\",\n STSFHIR_HOST_PORT: \"3005\",\n STSFHIR_ENDPOINT: \"https://stsfhirserver\", // \"https://stscore.stsmda.org\",\n UV_THREADPOOL_SIZE: \"64\",\n FORCE_COLOR: \"3\",\n //node dist/app usedb postgresResources\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"stsfhirserver\")\n .withWaitStrategy(Wait.forHttp(\"/stsfhir/r5/latency\", 3005).usingTls().allowInsecure())\n .start();\n\n const httpFhirPort = this.#stsFhirContainer.getMappedPort(3005);\n\n await Sleep(200);\n this.#fhirHost = 'https://localhost'\n this.#fhirPort = httpFhirPort;\n this.#fhirEndpoint = `${this.#fhirHost}:${this.#fhirPort}`;\n this.LogDebugMessage(chalk.green(`STSFhir Started. Server Details: Host: [${this.#fhirHost}], Port: [${this.#fhirPort}]`));\n }\n\n StopAuthService = async () => {\n if (this.#stsAuthContainer) {\n await this.#stsAuthContainer.stop();\n await Sleep(200);\n }\n }\n\n StopRest01Service = async () => {\n if (this.#stsRest01Container) {\n await this.#stsRest01Container.stop();\n await Sleep(200);\n }\n }\n\n StopFhirService = async () => {\n if (this.#stsFhirContainer) {\n await this.#stsFhirContainer.stop();\n await Sleep(200);\n }\n }\n\n TestLoginAndVerify = async () => {\n expect.assertions(4);\n\n console.log(`TestLoginAndVerify:1`);\n\n const retVal = await this.Login('user01@stsmda.com.au', 'user01password');\n expect(retVal.status).toEqual(200);\n\n console.log(`TestLoginAndVerify:2`);\n\n this.LogDebugMessage(chalk.red(`${JSON.stringify(retVal.data)}`));\n this.LogDebugMessage(chalk.magenta(`${JSON.stringify(retVal.headers)}`));\n this.LogDebugMessage(chalk.yellow(`${JSON.stringify(retVal.headers['set-cookie'])}`));\n\n const cookies = retVal.headers['set-cookie'] as string[];\n this.LogDebugMessage(chalk.yellow(`${cookies[0]}`));\n this.LogDebugMessage(chalk.green(`${JSON.stringify(tough.Cookie.parse(cookies[0]))}`));\n\n console.log(`TestLoginAndVerify:3`);\n\n const cookie = tough.Cookie.parse(cookies[0]) as tough.Cookie;\n\n console.log(`TestLoginAndVerify:4`);\n\n const desiredCookieResultAxios = {\n key: 'consent_cookie',\n value: expect.stringMatching(this.#regexURLSafeStringComponent),\n path: '/',\n secure: true,\n httpOnly: true,\n sameSite: 'strict',\n }\n\n const cookieResult = JSON.parse(JSON.stringify(cookie));\n expect(cookieResult).toMatchObject(desiredCookieResultAxios);\n\n console.log(`TestLoginAndVerify:5`);\n\n const cookieExpireDate = new Date(cookie.expires);\n expect(cookieExpireDate.getTime()).toBeGreaterThan(new Date().getTime());\n\n const consentRequired = (process.env.CONSENT_REQUIRED as string).split(' ').sort();\n retVal.data.detail.consentRequired = retVal.data.detail.consentRequired.sort();\n\n console.log(`TestLoginAndVerify:6`);\n\n const desiredResult = {\n sessionId: expect.stringMatching(this.#regexSTSBase64),\n id_token: expect.stringMatching(this.#regexJWT),\n consentRequired\n }\n\n console.log(`TestLoginAndVerify:7`);\n\n expect(retVal.data.detail).toMatchObject(desiredResult);\n\n console.log(`TestLoginAndVerify:9`);\n }\n\n StartRest01Service = async () => {\n this.#stsRest01Container = await new GenericContainer(\"serza/stsrest01:latest\")\n .withExposedPorts(3003)\n .withEnvironment({\n DB_USER: \"postgres\",\n DB_PASSWORD: \"postgres\",\n DB_HOST: \"database:5432\", \n POOL_SIZE: \"50\",\n MAX_CPU: \"2\",\n DEBUG: \"proc*\",\n HTTPS_SERVER_KEY_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.key\",\n HTTPS_SERVER_CERT_PATH: \"/var/lib/sts/stsglobalresources/keys-tmp/server.cert\",\n //AS_ENDPOINT: \"https://stscore.stsmda.org\",\n AS_ENDPOINT: 'https://stsauthrunner', // this.authHost,\n //AS_ENDPOINT: 'https://localhost', // this.authHost,\n AS_HOST_PORT: '3002',\n AS_PORT: '3002',\n IM_REDIS_MESSAGE_PROCESSOR_URL: 'redis://redisstackserver:6379'\n //AS_HOST_PORT: this.authPort,\n //AS_PORT: this.authPort,\n\n //REST01_PORT: '3003',\n //REST01_HOST_PORT: '3003',\n //REST01_ENDPOINT: 'https://localhost' // 'https://stscore.stsmda.org'\n })\n .withNetwork(this.#network)\n .withNetworkAliases(\"rest01\")\n .withWaitStrategy(Wait.forHttp(\"/stsrest01/v1/latency\", 3003).usingTls().allowInsecure())\n .start();\n\n const httpRest01Port = this.#stsRest01Container.getMappedPort(3003);\n\n await Sleep(200);\n\n this.#rest01Host = 'https://localhost'\n this.#rest01Port = httpRest01Port;\n this.#rest01Endpoint = `${this.#rest01Host}:${this.#rest01Port}`;\n\n this.LogDebugMessage(chalk.green(`STSRest01 Started. Server Details: Host: [${this.rest01Host}], Port: [${this.rest01Port}]`));\n }\n}\n"],"names":["AuthUtilsNode","defaultLogger","goptions","Network","GenericContainer","$ResetOptions","Wait","Sleep","expect","tough"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBO,MAAM,WAAW;AAAA,IAgCpB,cAAc;AA9Bd;AAAA,uDAA+B;AAE/B;AAAA;AAAA,0CAAkB;AAClB;AAAA,oCAAY;AAEZ;AAAA,yCAAiB,IAAIA,8BAAcC,SAAAA,aAAa;AAChD;AAEA;AACA;AACA;AACA;AACA;AAEA,sDAAsC;AAEtC,wCAAgB;AAChB,oCAAY;AACZ,oCAAY;AAEZ,sCAAc;AACd,sCAAc;AACd,0CAAkB;AAElB,oCAAY;AACZ,oCAAY;AACZ,wCAAgB;AAEhB,sCAAkC;AAUlC,yCAAiB,MACjB;AACQ,YAAA,mBAAK,iBAAgB,MAAM;AAEtB,6BAAA,aAAc,IAAI,MAAM,MAAM;AAAA,YAC/B,WAAWC,UAAS,SAAA;AAAA,YACpB,YAAYA,UAAS,SAAA;AAAA,YACrB,iBAAiBA,UAAS,SAAA;AAAA,YAC1B,gBAAgBA,UAAS,SAAA;AAAA,YACzB,SAASA,UAAS,SAAA;AAAA,YAClB,oBAAoB;AAAA,UAAA,CACvB;AAAA,QACL;AACA,eAAO,mBAAK;AAAA,MAAA;AAGhB,0CAAe,YAAY;AACvB,2BAAK,UAAW,MAAM,IAAIC,eAAAA,UAAU,MAAM;AAAA,MAAA;AAG9C,yCAAc,YAAY;AAChB,cAAA,mBAAK,UAAS;MAAK;AAmD7B,gDAAqB,MAAM;AACvB,cAAM,UAAU;AAChB,YAAI,SAAS;AACP,cAAA,eAAyB,MAAM,KAAK,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;AACpF,qBAAa,QAAQ,CAAM,MAAA,UAAU,QAAQ,IAAI,QAAQ,MAAM,CAAE;AAC1D,eAAA;AAAA,MAAA;AAGX,mCAAQ,OAAO,UAAkB,aAAqB;AAC5C,cAAA,YAAY,QAAQ,IAAI;AAC9B,cAAM,QAAQ,OAAO,YAAY,EAAE,EAAE,SAAS,QAAQ;AACtD,cAAM,gBAAgB;AAChB,cAAA,eAAe,QAAQ,IAAI;AACjC,cAAM,gBAAgB;AAChB,cAAA,QAAQ,QAAQ,IAAI;AAC1B,cAAM,QAAQ,OAAO,YAAY,EAAE,EAAE,SAAS,QAAQ;AAChD,cAAA,gBAAgB,KAAK;AACrB,cAAA,iBAAiB,OAAO,WAAW,QAAQ,EAAE,OAAO,aAAa,EAAE,OAAO,QAAQ;AACxF,cAAM,wBAAwB;AAE9B,cAAM,mBAAwB;AAAA,UAC1B,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAGJ,cAAM,MAAM,GAAG,mBAAK,cAAa,GAAGD,mBAAS,SAAS;AAChD,cAAA,UAAU,EAAE,gBAAgB;AAE5B,cAAA,SAAS,MAAM,MAAM;AAAA,UACvB;AAAA,UACC,QAAQ;AAAA,UACR,MAAM;AAAA,UACN;AAAA,UACA,YAAY,mBAAK,gBAAL;AAAA,QAAoB,CACpC;AAkBM,eAAA;AAAA,MAAA;AAWX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAAc,OAAO,UAAmC;AAC7C,eAAA,MAAM,mBAAK,gBAAe,YAAY,OAAOA,UAAAA,SAAS,iBAAiB,mBAAK,cAAa;AAAA,MAAA;AAGpG,2CAAgB,YAAY;AACnB,2BAAA,oBAAqB,MAAM,IAAIE,eAAA,iBAAiB,UAAU,EAC1D,iBAAiB,IAAI,EACrB,gBAAgB;AAAA,UACb,mBAAmB;AAAA;AAAA,QAAA,CAEtB,EACA,YAAY,mBAAK,SAAQ,EACzB,mBAAmB,UAAU,EAC7B;AAEL,cAAM,WAAW,mBAAK,oBAAmB,cAAc,IAAI;AACrD,cAAA,OAAO,mBAAK,oBAAmB,QAAQ;AAC7C,cAAM,mBAAmB,mBAAK,oBAAmB,aAAa,mBAAK,UAAS,SAAS;AAErF,gBAAQ,IAAI,UAAU,GAAG,IAAI,IAAI,QAAQ;AAE3BC,kBAAAA;AAEd,aAAK,gBAAgB,MAAM,MAAM,cAAc,QAAQ,GAAG,CAAC;AAC3D,aAAK,gBAAgB,MAAM,MAAM,UAAU,IAAI,GAAG,CAAC;AACnD,aAAK,gBAAgB,MAAM,MAAM,sBAAsB,gBAAgB,GAAG,CAAC;AAC3E,aAAK,gBAAgB,MAAM,MAAM,sBAAsBH,UAAAA,SAAS,gBAAgB,GAAG,CAAC;AACpF,aAAK,gBAAgB,MAAM,MAAM,qCAAqCA,UAAAA,SAAS,+BAAgC,GAAG,CAAC;AAAA,MAAA;AAGvH,0CAAe,YAAY;AACvB,YAAI,mBAAK,qBAAoB;AACnB,gBAAA,mBAAK,oBAAmB;AAE9B,eAAK,gBAAgB,MAAM,OAAO,gEAAgE,CAAC;AACnG,eAAK,gBAAgB,MAAM,OAAO,sBAAsBA,UAAAA,SAAS,gBAAgB,GAAG,CAAC;AACrF,eAAK,gBAAgB,MAAM,OAAO,qCAAqCA,UAAAA,SAAS,+BAAgC,GAAG,CAAC;AAAA,QACxH;AAAA,MAAA;AAKJ;AAAA;AAAA,gDAAqB,YAAY;AAC7B,cAAM,uBAAuB,MAAM,IAAIE,eAAiB,iBAAA,sBAAsB,EACzE,gBAAgB;AAAA,UACb,SAAS;AAAA,UACT,aAAa;AAAA,UACb,SAAS;AAAA;AAAA,UACT,WAAW;AAAA,UACX,SAAS;AAAA,UACT,OAAO;AAAA,UACP,uBAAuB;AAAA,UACvB,wBAAwB;AAAA,UACxB,aAAa;AAAA,QAAA,CAChB,EACA,YAAY,CAAC,QAAQ,YAAY,QAAQ,CAAC,EAC1C,YAAY,mBAAK,SAAQ,EACzB,mBAAmB,mBAAmB,EACtC,iBAAiBE,oBAAK,cAAc,+KAA+K,CAAC,EACpN;AAEL,cAAMC,SAAAA,MAAM,GAAG;AAEf,cAAM,qBAAqB;MAAK;AAGpC,wCAAa,YAAY;AACrB,2BAAK,mBAAoB,MAAM,IAAIH,eAAiB,iBAAA,0BAA0B,EACzE,gBAAgB;AAAA,UACb,YAAY;AAAA,QACf,CAAA,EACA,iBAAiB,IAAI,EACrB,YAAY,mBAAK,SAAQ,EACzB,mBAAmB,kBAAkB,EAErC,MAAM;AAEN,2BAAA,6BAA8B,WAAW,mBAAK,mBAAkB,QAAA,CAAS,IAAI,mBAAK,mBAAkB,cAAc,IAAI,CAAC;AAE5H,cAAMG,SAAAA,MAAM,GAAI;AAIhB,aAAK,gBAAgB,MAAM,MAAM,kFAAkF,mBAAK,4BAA2B,GAAG,CAAC;AAAA,MAAA;AAG3J,uCAAY,YAAY;AACd,cAAA,mBAAK,mBAAkB;AAC7B,cAAMA,SAAAA,MAAM,GAAG;AAAA,MAAA;AAGnB,8CAAmB,YAAY;AACtB,2BAAA,mBAAoB,MAAM,IAAIH,eAAA,iBAAiB,sBAAsB,EACrE,iBAAiB,IAAI,EACrB,gBAAgB;AAAA,UACb,SAAS;AAAA,UACT,aAAa;AAAA,UACb,SAAS;AAAA,UACT,WAAW;AAAA,UACX,SAAS;AAAA,UACT,OAAO;AAAA,UACP,uBAAuB;AAAA,UACvB,wBAAwB;AAAA,UACxB,aAAa;AAAA,UACb,gCAAgC;AAAA,QAAA,CACnC,EACA,YAAY,mBAAK,SAAQ,EACzB,mBAAmB,eAAe,EAClC,iBAAiBE,eAAAA,KAAK,QAAQ,yBAAyB,IAAI,EAAE,WAAW,cAAe,CAAA,EACvF;AAEL,cAAM,eAAe,mBAAK,mBAAkB,cAAc,IAAI;AAE9D,cAAMC,SAAAA,MAAM,GAAG;AACf,2BAAK,WAAY;AACjB,2BAAK,WAAY;AACjB,2BAAK,eAAgB,GAAG,mBAAK,UAAS,IAAI,mBAAK,UAAS;AACnD,aAAA,gBAAgB,MAAM,MAAM,2CAA2C,mBAAK,UAAS,aAAa,mBAAK,UAAS,GAAG,CAAC;AAAA,MAAA;AAG7H,8CAAmB,YAAY;AACtB,2BAAA,mBAAoB,MAAM,IAAIH,eAAA,iBAAiB,sBAAsB,EACrE,iBAAiB,IAAI,EACrB,gBAAgB;AAAA,UACb,SAAS;AAAA,UACT,aAAa;AAAA,UACb,SAAS;AAAA,UACT,WAAW;AAAA,UACX,SAAS;AAAA,UACT,OAAO;AAAA,UACP,uBAAuB;AAAA,UACvB,wBAAwB;AAAA,UACxB,aAAa;AAAA,UACb,cAAc;AAAA,UACd,SAAS;AAAA,UACT,gCAAgC;AAAA,UAChC,cAAc;AAAA,UACd,mBAAmB;AAAA,UACnB,kBAAkB;AAAA;AAAA,UAClB,oBAAoB;AAAA,UACpB,aAAa;AAAA;AAAA,QAAA,CAEhB,EACA,YAAY,mBAAK,SAAQ,EACzB,mBAAmB,eAAe,EAClC,iBAAiBE,eAAAA,KAAK,QAAQ,uBAAuB,IAAI,EAAE,WAAW,cAAe,CAAA,EACrF;AAEL,cAAM,eAAe,mBAAK,mBAAkB,cAAc,IAAI;AAE9D,cAAMC,SAAAA,MAAM,GAAG;AACf,2BAAK,WAAY;AACjB,2BAAK,WAAY;AACjB,2BAAK,eAAgB,GAAG,mBAAK,UAAS,IAAI,mBAAK,UAAS;AACnD,aAAA,gBAAgB,MAAM,MAAM,2CAA2C,mBAAK,UAAS,aAAa,mBAAK,UAAS,GAAG,CAAC;AAAA,MAAA;AAG7H,6CAAkB,YAAY;AAC1B,YAAI,mBAAK,oBAAmB;AAClB,gBAAA,mBAAK,mBAAkB;AAC7B,gBAAMA,SAAAA,MAAM,GAAG;AAAA,QACnB;AAAA,MAAA;AAGJ,+CAAoB,YAAY;AAC5B,YAAI,mBAAK,sBAAqB;AACpB,gBAAA,mBAAK,qBAAoB;AAC/B,gBAAMA,SAAAA,MAAM,GAAG;AAAA,QACnB;AAAA,MAAA;AAGJ,6CAAkB,YAAY;AAC1B,YAAI,mBAAK,oBAAmB;AAClB,gBAAA,mBAAK,mBAAkB;AAC7B,gBAAMA,SAAAA,MAAM,GAAG;AAAA,QACnB;AAAA,MAAA;AAGJ,gDAAqB,YAAY;AAC7BC,sBAAO,WAAW,CAAC;AAEnB,gBAAQ,IAAI,sBAAsB;AAElC,cAAM,SAAS,MAAM,KAAK,MAAM,wBAAwB,gBAAgB;AACxEA,eAAAA,OAAO,OAAO,MAAM,EAAE,QAAQ,GAAG;AAEjC,gBAAQ,IAAI,sBAAsB;AAE7B,aAAA,gBAAgB,MAAM,IAAI,GAAG,KAAK,UAAU,OAAO,IAAI,CAAC,EAAE,CAAC;AAC3D,aAAA,gBAAgB,MAAM,QAAQ,GAAG,KAAK,UAAU,OAAO,OAAO,CAAC,EAAE,CAAC;AACvE,aAAK,gBAAgB,MAAM,OAAO,GAAG,KAAK,UAAU,OAAO,QAAQ,YAAY,CAAC,CAAC,EAAE,CAAC;AAE9E,cAAA,UAAU,OAAO,QAAQ,YAAY;AACtC,aAAA,gBAAgB,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;AAClD,aAAK,gBAAgB,MAAM,MAAM,GAAG,KAAK,UAAUC,iBAAM,OAAO,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAErF,gBAAQ,IAAI,sBAAsB;AAElC,cAAM,SAASA,iBAAM,OAAO,MAAM,QAAQ,CAAC,CAAC;AAE5C,gBAAQ,IAAI,sBAAsB;AAElC,cAAM,2BAA2B;AAAA,UAC7B,KAAK;AAAA,UACL,OAAOD,OAAA,OAAO,eAAe,mBAAK,6BAA4B;AAAA,UAC9D,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,UAAU;AAAA,QAAA;AAGd,cAAM,eAAe,KAAK,MAAM,KAAK,UAAU,MAAM,CAAC;AAC/CA,eAAAA,OAAA,YAAY,EAAE,cAAc,wBAAwB;AAE3D,gBAAQ,IAAI,sBAAsB;AAElC,cAAM,mBAAmB,IAAI,KAAK,OAAO,OAAO;AACzCA,sBAAA,iBAAiB,SAAS,EAAE,iBAAoB,oBAAA,KAAA,GAAO,QAAA,CAAS;AAEvE,cAAM,kBAAmB,QAAQ,IAAI,iBAA4B,MAAM,GAAG,EAAE;AAC5E,eAAO,KAAK,OAAO,kBAAkB,OAAO,KAAK,OAAO,gBAAgB;AAExE,gBAAQ,IAAI,sBAAsB;AAElC,cAAM,gBAAgB;AAAA,UAClB,WAAWA,OAAA,OAAO,eAAe,mBAAK,gBAAe;AAAA,UACrD,UAAUA,OAAA,OAAO,eAAe,mBAAK,UAAS;AAAA,UAC9C;AAAA,QAAA;AAGJ,gBAAQ,IAAI,sBAAsB;AAElCA,eAAA,OAAO,OAAO,KAAK,MAAM,EAAE,cAAc,aAAa;AAEtD,gBAAQ,IAAI,sBAAsB;AAAA,MAAA;AAGtC,gDAAqB,YAAY;AACxB,2BAAA,qBAAsB,MAAM,IAAIJ,eAAA,iBAAiB,wBAAwB,EACzE,iBAAiB,IAAI,EACrB,gBAAgB;AAAA,UACb,SAAS;AAAA,UACT,aAAa;AAAA,UACb,SAAS;AAAA,UACT,WAAW;AAAA,UACX,SAAS;AAAA,UACT,OAAO;AAAA,UACP,uBAAuB;AAAA,UACvB,wBAAwB;AAAA;AAAA,UAExB,aAAa;AAAA;AAAA;AAAA,UAEb,cAAc;AAAA,UACd,SAAS;AAAA,UACT,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAOnC,EACA,YAAY,mBAAK,SAAQ,EACzB,mBAAmB,QAAQ,EAC3B,iBAAiBE,eAAAA,KAAK,QAAQ,yBAAyB,IAAI,EAAE,WAAW,cAAe,CAAA,EACvF;AAEL,cAAM,iBAAiB,mBAAK,qBAAoB,cAAc,IAAI;AAElE,cAAMC,SAAAA,MAAM,GAAG;AAEf,2BAAK,aAAc;AACnB,2BAAK,aAAc;AACnB,2BAAK,iBAAkB,GAAG,mBAAK,YAAW,IAAI,mBAAK,YAAW;AAEzD,aAAA,gBAAgB,MAAM,MAAM,6CAA6C,KAAK,UAAU,aAAa,KAAK,UAAU,GAAG,CAAC;AAAA,MAAA;AA1a7H,yBAAK,eAAgB;AAAA,IACzB;AAAA,IAEA,gBAAgB,SAAc;AAC1BN,6BAAc,MAAM,OAAO;AAAA,IAC/B;AAAA,IA0BA,IAAI,UAAU;AACV,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,WAAW;AACX,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,WAAW;AACX,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,eAAe;AACf,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,aAAa;AACb,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,aAAa;AACb,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,iBAAiB;AACjB,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,WAAW;AACX,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,WAAW;AACX,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,eAAe;AACf,aAAO,mBAAK;AAAA,IAChB;AAAA,IAEA,IAAI,gBAAgB;AAChB,aAAO,mBAAK,gBAAL;AAAA,IACX;AAAA,IAEA,IAAI,6BAA6B;AAC7B,aAAO,mBAAK;AAAA,IAChB;AAAA,EA+VJ;AA3cI;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAUA;;;;"}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testHelpers.d.ts","sourceRoot":"","sources":["../src/testHelpers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,YAAY,CAAA;AAa9B,qBAAa,UAAU;;;IAoCnB,eAAe,CAAC,OAAO,EAAE,GAAG;IAoB5B,YAAY,sBAEX;IAED,WAAW,sBAEV;IAED,IAAI,OAAO,QAEV;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,YAAY,WAEf;IAED,IAAI,UAAU,WAEb;IAED,IAAI,UAAU,WAEb;IAED,IAAI,cAAc,WAEjB;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,YAAY,WAEf;IAED,IAAI,aAAa,gBAEhB;IAED,IAAI,0BAA0B,WAE7B;IAED,kBAAkB,eAMjB;IAED,KAAK,aAAoB,MAAM,YAAY,MAAM,sDAsDhD;IAUD,WAAW,UAAiB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAEnD;IAED,aAAa,sBAwBZ;IAED,YAAY,sBAQX;IAID,kBAAkB,sBAsBjB;IAED,UAAU,sBAkBT;IAED,SAAS,sBAGR;IAED,gBAAgB,sBA2Bf;IAED,gBAAgB,sBAmCf;IAED,eAAe,sBAKd;IAED,iBAAiB,sBAKhB;IAED,eAAe,sBAKd;IAED,kBAAkB,
|
|
1
|
+
{"version":3,"file":"testHelpers.d.ts","sourceRoot":"","sources":["../src/testHelpers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,YAAY,CAAA;AAa9B,qBAAa,UAAU;;;IAoCnB,eAAe,CAAC,OAAO,EAAE,GAAG;IAoB5B,YAAY,sBAEX;IAED,WAAW,sBAEV;IAED,IAAI,OAAO,QAEV;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,YAAY,WAEf;IAED,IAAI,UAAU,WAEb;IAED,IAAI,UAAU,WAEb;IAED,IAAI,cAAc,WAEjB;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,YAAY,WAEf;IAED,IAAI,aAAa,gBAEhB;IAED,IAAI,0BAA0B,WAE7B;IAED,kBAAkB,eAMjB;IAED,KAAK,aAAoB,MAAM,YAAY,MAAM,sDAsDhD;IAUD,WAAW,UAAiB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAEnD;IAED,aAAa,sBAwBZ;IAED,YAAY,sBAQX;IAID,kBAAkB,sBAsBjB;IAED,UAAU,sBAkBT;IAED,SAAS,sBAGR;IAED,gBAAgB,sBA2Bf;IAED,gBAAgB,sBAmCf;IAED,eAAe,sBAKd;IAED,iBAAiB,sBAKhB;IAED,eAAe,sBAKd;IAED,kBAAkB,sBAyDjB;IAED,kBAAkB,sBAuCjB;CACJ"}
|