diff --git a/backend/package.json b/backend/package.json index 5910bd05..253e69f2 100644 --- a/backend/package.json +++ b/backend/package.json @@ -19,6 +19,7 @@ "dependencies": { "@aws-sdk/client-ec2": "^3.142.0", "@aws-sdk/client-pricing": "^3.142.0", + "@types/newman": "^5.3.0", "@types/async-retry": "^1.4.4", "async-retry": "^1.3.3", "aws-sdk": "^2.1189.0", @@ -29,6 +30,7 @@ "express-session": "^1.17.3", "js-yaml": "^4.1.0", "multer": "^1.4.5-lts.1", + "newman": "^5.3.2", "node-schedule": "^2.1.0", "node-ssh": "^13.0.0", "openapi-request-validator": "^12.0.0", diff --git a/backend/src/api/tests/index.ts b/backend/src/api/tests/index.ts new file mode 100644 index 00000000..9e60b03b --- /dev/null +++ b/backend/src/api/tests/index.ts @@ -0,0 +1,12 @@ +import { Request, Response } from "express"; +import ApiResponseHandler from "api-response-handler"; +import { runTest } from "~/services/testing/runTests"; + +export const runTestHandler = async ( + req: Request, + res: Response +): Promise => { + console.log(req.body); + runTest(req.body.test); + await ApiResponseHandler.success(res, null); +}; diff --git a/backend/src/index.ts b/backend/src/index.ts index e5e9741d..237e5449 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -35,6 +35,7 @@ import { aws_os_choices, setup_connection, } from "./api/setup"; +import { runTestHandler } from "./api/tests"; import { get_connection_for_uuid, get_ssh_key_for_connection_uuid, @@ -102,6 +103,8 @@ app.get( ); app.post("/api/v1/update_connection", update_connection); +app.post("/api/v1/test/run", runTestHandler); + const main = async () => { try { const datasource = await AppDataSource.initialize(); diff --git a/backend/src/models/api-endpoint-test.ts b/backend/src/models/api-endpoint-test.ts new file mode 100644 index 00000000..46fd5a1d --- /dev/null +++ b/backend/src/models/api-endpoint-test.ts @@ -0,0 +1,28 @@ +import { + BaseEntity, + Column, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from "typeorm"; +import { ApiEndpoint } from "models/api-endpoint"; + +@Entity() +export class ApiEndpointTest extends BaseEntity { + @PrimaryGeneratedColumn("uuid") + uuid: string; + + @Column({ nullable: false }) + name: string; + + @Column({ type: "jsonb", nullable: true }) + tags: string[]; + + @Column({ type: "jsonb", nullable: true }) + requests: Request[]; + + @ManyToOne(() => ApiEndpoint) + @JoinColumn() + apiEndpoint: ApiEndpoint; +} diff --git a/backend/src/services/get-endpoints/index.ts b/backend/src/services/get-endpoints/index.ts index e7eb9cfa..9d4f693b 100644 --- a/backend/src/services/get-endpoints/index.ts +++ b/backend/src/services/get-endpoints/index.ts @@ -118,6 +118,7 @@ export class GetEndpointsService { return { ...endpoint, traces: [...traces], + tests: [], firstDetected: firstDetected?.createdAt, lastActive: lastActive?.createdAt, }; diff --git a/backend/src/services/testing/runTests.ts b/backend/src/services/testing/runTests.ts new file mode 100644 index 00000000..d0aa7435 --- /dev/null +++ b/backend/src/services/testing/runTests.ts @@ -0,0 +1,61 @@ +import newman from "newman"; +import { + CollectionDefinition, + RequestDefinition, + RequestBodyDefinition, +} from "postman-collection"; +import { RequestBodyType } from "../../../../common/src/testing/enums"; +import { Request } from "../../../../common/src/testing/types"; +import { Test } from "../../../../common/src/testing/types"; + +const requestToItem = (e: Request, i: number) => { + const event = e.tests.trim() + ? [ + { + listen: "test", + script: { + type: "text/javascript", + exec: e.tests.split("\n"), + }, + }, + ] + : []; + let body: RequestBodyDefinition = { mode: "raw" }; + if (e.body.type == RequestBodyType.JSON) { + body.raw = e.body.data as string; + } + let url: string = e.url; + if (e.params.length > 0) { + url = `${url}?${e.params.map((p) => `${p.key}=${p.value}`).join("&")}`; + } + let item = { + name: `Request ${i}`, + event: event, + request: { + url: e.url, + method: e.method, + header: e.headers, + body: body, + } as RequestDefinition, + }; + return item; +}; + +export const runTest = (e: Test) => { + const items = e.requests.map(requestToItem); + const collection: CollectionDefinition = { + info: { + name: "Sample Postman Collection", + }, + item: items, + }; + const res = newman.run( + { + collection, + }, + (a, b) => { + console.log(JSON.stringify(a, null, 4)); + console.log(JSON.stringify(b, null, 4)); + } + ); +}; diff --git a/backend/yarn.lock b/backend/yarn.lock index 672344af..aa3f9ef9 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -66,15 +66,15 @@ tslib "^2.3.1" "@aws-sdk/client-ec2@^3.142.0": - version "3.142.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-ec2/-/client-ec2-3.142.0.tgz#95e96f590050a3703eada26a74248ab4cc521456" - integrity sha512-KHLM5G1WuQGVdf3rFrzLS1tzNLI2moQExwgJWsDvev0iVGfpQ3/7V6xezMRXv8p7AAN6qp3V88xNcfhlVdXIRA== + version "3.150.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ec2/-/client-ec2-3.150.0.tgz#0f61cf73802071943620428dd14087971a906413" + integrity sha512-tf9CRuFoLvZl6WY6dKCCBcx0sapihIgbLjjK1QmGTlmP5utmDPNDo4d2oQyIhkYNsnQe9ctK1FeZZO1kRjpLCQ== dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.142.0" + "@aws-sdk/client-sts" "3.150.0" "@aws-sdk/config-resolver" "3.130.0" - "@aws-sdk/credential-provider-node" "3.142.0" + "@aws-sdk/credential-provider-node" "3.150.0" "@aws-sdk/fetch-http-handler" "3.131.0" "@aws-sdk/hash-node" "3.127.0" "@aws-sdk/invalid-dependency" "3.127.0" @@ -111,15 +111,15 @@ uuid "^8.3.2" "@aws-sdk/client-pricing@^3.142.0": - version "3.142.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-pricing/-/client-pricing-3.142.0.tgz#f355730365e7ef43ff72ef7d9af4c5b2fa5ecb2a" - integrity sha512-S/VqrtsvrukUUchDi4tdJP+2BxWlMLCWXTTLP770nKM+OlEYNWyijJzFerao7Cn6lYQPk7DZeajSpZ/9cWV1Pw== + version "3.150.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-pricing/-/client-pricing-3.150.0.tgz#fa6e72fccf710d5c6040fb5f0b6be2eda70e2cf8" + integrity sha512-IlsPXMiwULbnXaaZc34qcsoRRndIl+aV6Jkj+C8pW+j4xk2sLl9Ltesk51cTlUYXPpWTWzjlGMP68nYlF+6cLQ== dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.142.0" + "@aws-sdk/client-sts" "3.150.0" "@aws-sdk/config-resolver" "3.130.0" - "@aws-sdk/credential-provider-node" "3.142.0" + "@aws-sdk/credential-provider-node" "3.150.0" "@aws-sdk/fetch-http-handler" "3.131.0" "@aws-sdk/hash-node" "3.127.0" "@aws-sdk/invalid-dependency" "3.127.0" @@ -150,10 +150,10 @@ "@aws-sdk/util-utf8-node" "3.109.0" tslib "^2.3.1" -"@aws-sdk/client-sso@3.142.0": - version "3.142.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.142.0.tgz#5a7d2be748fc470ed3a700e32a9dc21b78459d1e" - integrity sha512-Pewcpxq+wqcbB3t3s6KImBUUf+qqBNqMfd2wgQ3PdpYBjlNzrWYLHAnIT1vhIFjOGJXDi/qwF8FX7qbWNUB7Lg== +"@aws-sdk/client-sso@3.150.0": + version "3.150.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.150.0.tgz#0ff0a8b29e75d2323a3acf0b245126c04e368c1a" + integrity sha512-/SqfOveITc9PIX9dpU+lXGZYfnQxxwapm8SFfKBW24iFz3xfrBAH5yOjErGOAvLW+PLRNywdB1G8fajoTCtZwA== dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" @@ -187,15 +187,15 @@ "@aws-sdk/util-utf8-node" "3.109.0" tslib "^2.3.1" -"@aws-sdk/client-sts@3.142.0": - version "3.142.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.142.0.tgz#3f868fea96e184fc8eb142a25ad712c22c2035ec" - integrity sha512-rOa1MTI1h3kTjlHkItAlXGHefM5sjsfw3muhNEhzrZBuhpOrLU8apbiG2rcJqB8m0prMoY39PuG+WquxN4ap6g== +"@aws-sdk/client-sts@3.150.0": + version "3.150.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.150.0.tgz#1fb9a90bec804c844c0759bc8a6d32d2434cdfe9" + integrity sha512-katV2SAPcApL5v7Sj70PxiZOqsmXE3zSBEbCNn0q2uPpfEbFNVQpG2u01ZB8xLbikRwdxCQt8HTVyqCMRtjVdw== dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" "@aws-sdk/config-resolver" "3.130.0" - "@aws-sdk/credential-provider-node" "3.142.0" + "@aws-sdk/credential-provider-node" "3.150.0" "@aws-sdk/fetch-http-handler" "3.131.0" "@aws-sdk/hash-node" "3.127.0" "@aws-sdk/invalid-dependency" "3.127.0" @@ -260,30 +260,30 @@ "@aws-sdk/url-parser" "3.127.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-ini@3.142.0": - version "3.142.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.142.0.tgz#9fec43ab7da4b236fe10b958ddf39eda6d4760bb" - integrity sha512-joMJTxUTNmxURnVmmd7XhtwOwijMjh7z09V8o2EHQMk+ak+rhaRgqb2kTA2nO0J3SRxdO5z5SKkyQgW0d1fY9g== +"@aws-sdk/credential-provider-ini@3.150.0": + version "3.150.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.150.0.tgz#74401c8c420b4028f222839627c69dc263091cb9" + integrity sha512-NUkQ6LAaI9USbADWzCKAhEIlON4WAGKTXC6p0nJ4UIpKMh+l7EAx3vzw4jA/v0l01sl8V/Sv2C3MLfIGsoeF3A== dependencies: "@aws-sdk/credential-provider-env" "3.127.0" "@aws-sdk/credential-provider-imds" "3.127.0" - "@aws-sdk/credential-provider-sso" "3.142.0" + "@aws-sdk/credential-provider-sso" "3.150.0" "@aws-sdk/credential-provider-web-identity" "3.127.0" "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" "@aws-sdk/types" "3.127.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-node@3.142.0": - version "3.142.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.142.0.tgz#21e397e33f6bd10bf3256092f45c4f483f50eed2" - integrity sha512-JkhCKNkEhCS2vgD/qg5hJPatupNLObqts9FXiDia5CF6w8YcHLH+mWSvhUMCUGkunAOvFHDkQL1uPXfoQuJvPg== +"@aws-sdk/credential-provider-node@3.150.0": + version "3.150.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.150.0.tgz#89ce84e536355280fc0737522362571d4d5519a9" + integrity sha512-RUkyVZGU1kgcPfTZjf/DNU4WsNjBYwB8g++uOxX/Fqe232+xzB3AeK3i5BRq0tNbWa1k2ax0HxyOzDp+Z3HSSg== dependencies: "@aws-sdk/credential-provider-env" "3.127.0" "@aws-sdk/credential-provider-imds" "3.127.0" - "@aws-sdk/credential-provider-ini" "3.142.0" + "@aws-sdk/credential-provider-ini" "3.150.0" "@aws-sdk/credential-provider-process" "3.127.0" - "@aws-sdk/credential-provider-sso" "3.142.0" + "@aws-sdk/credential-provider-sso" "3.150.0" "@aws-sdk/credential-provider-web-identity" "3.127.0" "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" @@ -300,12 +300,12 @@ "@aws-sdk/types" "3.127.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-sso@3.142.0": - version "3.142.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.142.0.tgz#1d103a32472ffebb8ff7b22f87b8895d51620eaf" - integrity sha512-jJvp/A5xrikaeL0DhjhQTvUc0+eF0hN5Nbo+nxpnUOiOOkyqs329g65NI1TmLp/OzDcqQ/8p5vj2+7ufTGEOXQ== +"@aws-sdk/credential-provider-sso@3.150.0": + version "3.150.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.150.0.tgz#e7af26efb0dc91f87a9a7ef42e263c824fb0d64d" + integrity sha512-e79GVMrA/QMC47KOpfMWBbzZLs/rKPPOhslzczdK6zMUSnRQfx5Y3Fyb6rONp0umxqswGIZGYqYI8PsKneMjCA== dependencies: - "@aws-sdk/client-sso" "3.142.0" + "@aws-sdk/client-sso" "3.150.0" "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" "@aws-sdk/types" "3.127.0" @@ -731,6 +731,22 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@postman/form-data@~3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@postman/form-data/-/form-data-3.1.1.tgz#d0446d0d3639a291f5e800e89fa1d0d3723f9414" + integrity sha512-vjh8Q2a8S6UCm/KKs31XFJqEEgmbjBmpPNVV2eVav6905wyFAwaUOBGA1NPBI4ERH9MMZc6w0umFgM6WbEPMdg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +"@postman/tunnel-agent@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@postman/tunnel-agent/-/tunnel-agent-0.6.3.tgz#23048d8d8618d453c571f03189e944afdc2292b7" + integrity sha512-k57fzmAZ2PJGxfOA4SGR05ejorHbVAa/84Hxh/2nAztjNXc4ZjOm9NUIk6/Z6LCrBvJZqjRZbN8e/nROVUPVdg== + dependencies: + safe-buffer "^5.0.1" + "@sqltools/formatter@^1.2.2": version "1.2.3" resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20" @@ -826,6 +842,14 @@ dependencies: "@types/express" "*" +"@types/newman@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@types/newman/-/newman-5.3.0.tgz#3ca70f06adc7d653c603c83dc1c6433dbd2f0593" + integrity sha512-3w2C8Rqo38BXJFWg3zDqTy7qRPBxDSZzEW54UqHghkLqQKAFeC/VwbSuevK+iOdpNwKn3fal8SowpFjdWtVDow== + dependencies: + "@types/postman-collection" "*" + "@types/tough-cookie" "*" + "@types/node-schedule@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/node-schedule/-/node-schedule-2.1.0.tgz#60375640c0509bab963573def9d1f417f438c290" @@ -834,9 +858,16 @@ "@types/node" "*" "@types/node@*", "@types/node@^18.6.1": - version "18.6.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39" - integrity sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg== + version "18.7.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83" + integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A== + +"@types/postman-collection@*": + version "3.5.7" + resolved "https://registry.yarnpkg.com/@types/postman-collection/-/postman-collection-3.5.7.tgz#c62fed598928cb0c45f3287782bb4d5c4127d1b3" + integrity sha512-wqZ/MlGEYP+RoiofnAnKDJAHxRzmMK97CeFLoHPNoHdHX0uyBLCDl+uZV9x4xuPVRjkeM4xcarIaUaUk47c7SQ== + dependencies: + "@types/node" "*" "@types/qs@*": version "6.9.7" @@ -861,6 +892,11 @@ "@types/mime" "*" "@types/node" "*" +"@types/tough-cookie@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + "@types/uuid@^8.3.4": version "8.3.4" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" @@ -901,6 +937,16 @@ ajv-formats@^2.1.0: dependencies: ajv "^8.0.0" +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^8.0.0, ajv@^8.3.0, ajv@^8.4.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" @@ -937,9 +983,9 @@ anymatch@~3.1.2: picomatch "^2.0.4" app-root-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" - integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== append-field@^1.0.0: version "1.0.0" @@ -961,13 +1007,18 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -asn1@^0.2.4: +asn1@^0.2.4, asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + async-retry@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" @@ -975,15 +1026,25 @@ async-retry@^1.3.3: dependencies: retry "0.13.1" +async@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" + integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sdk@^2.1189.0: - version "2.1189.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1189.0.tgz#8dd6b48dd7896642af8e2f86e026932a28e380d5" - integrity sha512-EqluXSo8XAR086nF9UAtPYwUm82ZIRqg8OmHBRQyftcrD1Z0pqMmiuvacXoEAJ/4UU8KKafbpYarxx8rH/pZjQ== + version "2.1197.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1197.0.tgz#d679f52353f03e598ffed5609ed65593cef1f83f" + integrity sha512-BUxYU+gzxCylEM37NeGcS5kWotXVmKrOBG9+/+U+tnOTW7/3yNBrBfhPrs5IgMhm7H38CLWgOqwJaGDlYzwH/Q== dependencies: buffer "4.9.2" events "1.1.1" @@ -996,17 +1057,27 @@ aws-sdk@^2.1189.0: uuid "8.0.0" xml2js "0.4.19" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@1.11.0, aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2, base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.2: +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== @@ -1018,6 +1089,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bluebird@^2.6.2: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + integrity sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ== + body-parser@1.20.0, body-parser@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" @@ -1056,6 +1132,13 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" +brotli@~1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" + integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== + dependencies: + base64-js "^1.1.2" + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -1108,6 +1191,11 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1116,6 +1204,16 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chardet@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-1.4.0.tgz#278748f260219990fb2167dbfb1b253ca26b41ea" + integrity sha512-NpwMDdSIprbYx1CLnfbxEIarI0Z+s9MssEgggMNheGM+WD68yOhV7IEA/3r6tr0yTRgQD0HuZJDw32s99i6L+A== + +charset@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd" + integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg== + chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -1143,6 +1241,22 @@ cli-highlight@^2.1.11: parse5-htmlparser2-tree-adapter "^6.0.0" yargs "^16.0.0" +cli-progress@3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.10.0.tgz#63fd9d6343c598c93542fdfa3563a8b59887d78a" + integrity sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw== + dependencies: + string-width "^4.2.0" + +cli-table3@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8" + integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== + dependencies: + string-width "^4.2.0" + optionalDependencies: + colors "1.4.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -1164,6 +1278,28 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colors@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1216,6 +1352,11 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -1242,6 +1383,18 @@ cron-parser@^3.5.0: is-nan "^1.3.2" luxon "^1.26.0" +csv-parse@4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + date-fns@^2.28.0: version "2.29.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.1.tgz#9667c2615525e552b5135a3116b95b1961456e60" @@ -1276,6 +1429,11 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -1296,6 +1454,14 @@ dotenv@^16.0.0, dotenv@^16.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1369,6 +1535,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +eventemitter3@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + events@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -1425,16 +1596,51 @@ express@^4.18.1: utils-merge "1.0.1" vary "~1.1.2" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +faker@5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e" + integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g== + fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + fast-xml-parser@3.19.0: version "3.19.0" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== +file-type@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + +filesize@8.0.7: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1455,6 +1661,11 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" +flatted@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -1462,6 +1673,11 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -1524,6 +1740,13 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1543,6 +1766,31 @@ glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +handlebars@4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -1600,6 +1848,33 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-reasons@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/http-reasons/-/http-reasons-0.1.0.tgz#a953ca670078669dde142ce899401b9d6e85d3b4" + integrity sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ== + +http-signature@~1.3.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +httpntlm@1.7.7: + version "1.7.7" + resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.7.7.tgz#51b914f18e5de2868d4bfe50aeecdb1db23218a1" + integrity sha512-Pv2Rvrz8H0qv1Dne5mAdZ9JegG1uc6Vu5lwLflIY6s8RKHdZQbW39L4dYswSgqMDT0pkJILUTKjeyU0VPNRZjA== + dependencies: + httpreq ">=0.4.22" + underscore "~1.12.1" + +httpreq@>=0.4.22: + version "0.5.2" + resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.5.2.tgz#be6777292fa1038d7771d7c01d9a5e1219de951c" + integrity sha512-2Jm+x9WkExDOeFRrdBCBSpLPT5SokTcRHkunV3pjKmX/cx6av8zQ0WtHUMDrYb6O4hBFzNU6sxJEypvRUVYKnw== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -1607,6 +1882,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -1644,6 +1926,11 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -1785,6 +2072,11 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.9: for-each "^0.3.3" has-tostringtag "^1.0.0" +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -1797,11 +2089,21 @@ isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + jmespath@0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== +js-sha512@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" + integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1809,21 +2111,68 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +liquid-json@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/liquid-json/-/liquid-json-0.3.1.tgz#9155a18136d8a6b2615e5f16f9a2448ab6b50eea" + integrity sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ== + +lodash@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + long-timeout@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + luxon@^1.26.0: version "1.28.0" resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf" @@ -1856,12 +2205,31 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.24, mime-types@~2.1.34: +mime-format@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mime-format/-/mime-format-2.0.1.tgz#1274876d58bc803332427a515f5f7036e07b9413" + integrity sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg== + dependencies: + charset "^1.0.0" + +mime-types@2.1.34: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -1880,11 +2248,16 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.6: +minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +mkdirp@1.0.4, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -1892,11 +2265,6 @@ mkdirp@^0.5.4: dependencies: minimist "^1.2.6" -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1944,6 +2312,43 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +newman@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/newman/-/newman-5.3.2.tgz#1dfe94c9558210165697381b9dfce2c382c69d45" + integrity sha512-cWy8pV0iwvMOZLTw3hkAHcwo2ZA0GKkXm8oUMn1Ltii3ZI2nKpnrg9QGdIT0hGHChRkX6prY5e3Aar7uykMGNg== + dependencies: + async "3.2.3" + chardet "1.4.0" + cli-progress "3.10.0" + cli-table3 "0.6.1" + colors "1.4.0" + commander "7.2.0" + csv-parse "4.16.3" + eventemitter3 "4.0.7" + filesize "8.0.7" + lodash "4.17.21" + mkdirp "1.0.4" + postman-collection "4.1.1" + postman-collection-transformer "4.1.6" + postman-request "2.88.1-postman.31" + postman-runtime "7.29.0" + pretty-ms "7.0.1" + semver "7.3.5" + serialised-error "1.1.3" + tough-cookie "3.0.1" + word-wrap "1.2.3" + xmlbuilder "15.1.1" + +node-oauth1@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/node-oauth1/-/node-oauth1-1.3.0.tgz#736d29f3c5fce2713ce1552c8beccb2a60df7b6f" + integrity sha512-0yggixNfrA1KcBwvh/Hy2xAS1Wfs9dcg6TdFf2zN7gilcAigMdrtZ4ybrBSXBgLvGDw9V1p2MRnGBMq7XjTWLg== + node-schedule@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.0.tgz#068ae38d7351c330616f7fe7cdb05036f977cbaf" @@ -1993,11 +2398,21 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-hash@^1.1.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -2009,9 +2424,9 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" - integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" @@ -2074,6 +2489,11 @@ packet-reader@1.0.0: resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + parse5-htmlparser2-tree-adapter@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" @@ -2106,6 +2526,11 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +performance-now@2.1.0, performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + pg-connection-string@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" @@ -2184,11 +2609,112 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +postman-collection-transformer@4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/postman-collection-transformer/-/postman-collection-transformer-4.1.6.tgz#2eecfb1a4e490fd698a1c915e0458731bdf9c5d3" + integrity sha512-xvdQb6sZoWcG9xZXUPSuxocjcd6WCZlINlGGiuHdSfxhgiwQhj9qhF0JRFbagZ8xB0+pYUairD5MiCENc6DEVA== + dependencies: + commander "8.3.0" + inherits "2.0.4" + lodash "4.17.21" + semver "7.3.5" + strip-json-comments "3.1.1" + +postman-collection@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/postman-collection/-/postman-collection-4.1.1.tgz#aba50dfca3c3ce6881b9598958c6a52eec3959d9" + integrity sha512-ODpJtlf8r99DMcTU7gFmi/yvQYckFzcuE6zL/fWnyrFT34ugdCBFlX+DN7M+AnP6lmR822fv5s60H4DnL4+fAg== + dependencies: + faker "5.5.3" + file-type "3.9.0" + http-reasons "0.1.0" + iconv-lite "0.6.3" + liquid-json "0.3.1" + lodash "4.17.21" + mime-format "2.0.1" + mime-types "2.1.34" + postman-url-encoder "3.0.5" + semver "7.3.5" + uuid "8.3.2" + +postman-request@2.88.1-postman.31: + version "2.88.1-postman.31" + resolved "https://registry.yarnpkg.com/postman-request/-/postman-request-2.88.1-postman.31.tgz#965a9ac3e6a504c55ab673898f081d76c12b7559" + integrity sha512-OJbYqP7ItxQ84yHyuNpDywCZB0HYbpHJisMQ9lb1cSL3N5H3Td6a2+3l/a74UMd3u82BiGC5yQyYmdOIETP/nQ== + dependencies: + "@postman/form-data" "~3.1.1" + "@postman/tunnel-agent" "^0.6.3" + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + brotli "~1.3.2" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + har-validator "~5.1.3" + http-signature "~1.3.1" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + stream-length "^1.0.2" + tough-cookie "~2.5.0" + uuid "^3.3.2" + +postman-runtime@7.29.0: + version "7.29.0" + resolved "https://registry.yarnpkg.com/postman-runtime/-/postman-runtime-7.29.0.tgz#ccc63f23d8f20918bf0fb667a59153503fa90de9" + integrity sha512-eXxHREE/fUpohkGPRgBY1YccSGx9cyW3mtGiPyIE4zD5fYzasgBHqW6kbEND3Xrd3yf/uht/YI1H8O7J1+A1+w== + dependencies: + async "3.2.3" + aws4 "1.11.0" + handlebars "4.7.7" + httpntlm "1.7.7" + js-sha512 "0.8.0" + lodash "4.17.21" + mime-types "2.1.34" + node-oauth1 "1.3.0" + performance-now "2.1.0" + postman-collection "4.1.1" + postman-request "2.88.1-postman.31" + postman-sandbox "4.0.6" + postman-url-encoder "3.0.5" + serialised-error "1.1.3" + tough-cookie "3.0.1" + uuid "8.3.2" + +postman-sandbox@4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/postman-sandbox/-/postman-sandbox-4.0.6.tgz#cc9453578f7320ae7c5061111157b9c81822830a" + integrity sha512-PPRanSNEE4zy3kO7CeSBHmAfJnGdD9ecHY/Mjh26CQuZZarGkNO8c0U/n+xX3+5M1BRNc82UYq6YCtdsSDqcng== + dependencies: + lodash "4.17.21" + teleport-javascript "1.0.0" + uvm "2.0.2" + +postman-url-encoder@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz#af2efee3bb7644e2b059d8a78bc8070fae0467a5" + integrity sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA== + dependencies: + punycode "^2.1.1" + prettier@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +pretty-ms@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -2202,6 +2728,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" @@ -2212,7 +2743,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -2224,6 +2755,11 @@ qs@6.10.3: dependencies: side-channel "^1.0.4" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -2308,7 +2844,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -2335,6 +2871,13 @@ sb-scandir@^3.1.0: dependencies: sb-promise-queue "^2.1.0" +semver@7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -2369,6 +2912,15 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +serialised-error@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/serialised-error/-/serialised-error-1.1.3.tgz#8a4c466b29c26ff11016eaf1b5fa2b87ca4cd8b5" + integrity sha512-vybp3GItaR1ZtO2nxZZo8eOo7fnVaNtP3XE2vJKgzkKR2bagCkdJ1EpYYhEMd3qu/80DwQk9KjsNSxE3fXWq0g== + dependencies: + object-hash "^1.1.2" + stack-trace "0.0.9" + uuid "^3.0.0" + serve-static@1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -2418,6 +2970,11 @@ sorted-array-functions@^1.3.0: resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + split2@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" @@ -2434,11 +2991,38 @@ ssh2@^1.5.0: cpu-features "~0.0.4" nan "^2.16.0" +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-trace@0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" + integrity sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stream-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-length/-/stream-length-1.0.2.tgz#8277f3cbee49a4daabcfdb4e2f4a9b5e9f2c9f00" + integrity sha512-aI+qKFiwoDV4rsXiS7WRoCt+v2RX1nUj17+KJC5r2gfh5xoSJIfP6Y3Do/HtvesFcTSWthIuJ3l1cvKQY/+nZg== + dependencies: + bluebird "^2.6.2" + streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" @@ -2490,6 +3074,11 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2504,6 +3093,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +teleport-javascript@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/teleport-javascript/-/teleport-javascript-1.0.0.tgz#c9397fad598d662027e4d3a5fa7e7da1c8361547" + integrity sha512-j1llvWVFyEn/6XIFDfX5LAU43DXe0GCt3NfXDwJ8XpRRMkS+i50SAkonAONBy+vxwPFBd50MFU8a2uj8R/ccLg== + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -2537,6 +3131,23 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" +tough-cookie@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + ts-log@^2.1.4: version "2.2.4" resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.4.tgz#d672cf904b33735eaba67a7395c93d45fba475b3" @@ -2580,7 +3191,7 @@ tslib@^2.3.1, tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tweetnacl@^0.14.3: +tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== @@ -2626,6 +3237,11 @@ typescript@^4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +uglify-js@^3.1.4: + version "3.17.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" + integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== + uid-safe@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" @@ -2648,6 +3264,11 @@ undefsafe@^2.0.5: resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +underscore@~1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -2695,11 +3316,23 @@ uuid@8.0.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== -uuid@^8.3.2: +uuid@8.3.2, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^3.0.0, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uvm@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/uvm/-/uvm-2.0.2.tgz#45fbef1b360cd462cb1a886ea8b4a882562c4aab" + integrity sha512-Ra+aPiS5GXAbwXmyNExqdS42sTqmmx4XWEDF8uJlsTfOkKf9Rd9xNgav1Yckv4HfVEZg4iOFODWHFYuJ+9Fzfg== + dependencies: + flatted "3.1.1" + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -2715,6 +3348,15 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -2738,6 +3380,16 @@ which-typed-array@^1.1.2: has-tostringtag "^1.0.0" is-typed-array "^1.1.9" +word-wrap@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -2768,6 +3420,11 @@ xml2js@^0.4.23: sax ">=0.6.0" xmlbuilder "~11.0.0" +xmlbuilder@15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + xmlbuilder@~11.0.0: version "11.0.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" @@ -2788,6 +3445,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" diff --git a/common/src/testing/enums.ts b/common/src/testing/enums.ts new file mode 100644 index 00000000..0e194956 --- /dev/null +++ b/common/src/testing/enums.ts @@ -0,0 +1,15 @@ +export enum AuthType { + API_KEY = "API Key", + BASIC_AUTH = "Basic Auth", +} + +export enum APIKeyAuthAddTo { + HEADERS = "Headers", + QUERY_PARAMS = "Query Params", +} + +export enum RequestBodyType { + NONE = "None", + JSON = "JSON", + FORM_DATA = "Form Data", +} diff --git a/common/src/testing/types.ts b/common/src/testing/types.ts new file mode 100644 index 00000000..56d65c9f --- /dev/null +++ b/common/src/testing/types.ts @@ -0,0 +1,67 @@ +import { RestMethod } from "../enums"; +import { APIKeyAuthAddTo, AuthType, RequestBodyType } from "./enums"; + +export interface AuthAPIKeyParams { + key: string; + value: string; + add_to: APIKeyAuthAddTo; +} + +export interface AuthBasicAuthParams { + username: string; + password: string; +} + +export interface Authorization { + type: AuthType; + params: AuthAPIKeyParams | AuthBasicAuthParams; +} + +export interface DataPair { + key: string; + value: string; + description?: string; +} + +export type QueryParam = DataPair; +export type Header = DataPair; + +export type RequestBodyDataTypeNone = null; +export type RequestBodyDataTypeJSON = string; +export type RequestBodyDataTypeFormData = DataPair[]; + +export interface RequestBody { + type: RequestBodyType; + data: RequestBodyDataTypeNone | RequestBodyDataTypeFormData | string; +} + +export interface TestResult { + name: string; + success: boolean; + output: string; +} + +export interface Result { + body: string; + headers: Header[]; + testResults: TestResult[]; + code: number; +} + +export interface Request { + name?: string; + method: RestMethod; + url: string; + authorization?: Authorization; + params: QueryParam[]; + headers: Header[]; + body: RequestBody; + tests: string; + result?: Result; +} + +export interface Test { + name: string; + tags: string[]; + requests: Request[]; +} diff --git a/common/src/types.ts b/common/src/types.ts index e3384c1c..b1734970 100644 --- a/common/src/types.ts +++ b/common/src/types.ts @@ -1,3 +1,4 @@ +import { Test } from "testing/types"; import { AlertType, ConnectionType, @@ -132,6 +133,7 @@ export interface ApiEndpointDetailed extends ApiEndpoint { openapiSpec: OpenApiSpec; alerts: Alert[]; traces: ApiTrace[]; + tests: Test[]; } export interface OpenApiSpec { diff --git a/frontend/package.json b/frontend/package.json index b3295524..0f8340f1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,6 +14,8 @@ "@emotion/react": "^11.9.0", "@emotion/styled": "^11.9.0", "@react-icons/all-files": "^4.1.0", + "@types/codemirror": "^5.60.5", + "@types/react-codemirror": "^1.0.7", "axios": "^0.27.2", "chakra-react-select": "^4.1.4", "chart.js": "^3.8.2", @@ -26,9 +28,11 @@ "prism-react-renderer": "^1.3.5", "react": "^18.2.0", "react-chartjs-2": "^4.3.1", + "react-codemirror": "^1.0.0", "react-data-table-component": "^7.5.2", "react-dom": "^18.2.0", "react-json-view": "^1.21.3", + "react-select": "^5.4.0", "styled-components": "^5.3.5", "superjson": "^1.9.1", "uuid": "^8.3.2" diff --git a/frontend/src/api/tests/index.ts b/frontend/src/api/tests/index.ts new file mode 100644 index 00000000..ffdbbbfa --- /dev/null +++ b/frontend/src/api/tests/index.ts @@ -0,0 +1,9 @@ +import axios from "axios"; +import { getAPIURL } from "~/constants"; +import { Test } from "@common/testing/types"; + +export const runTest = async (test: Test) => { + const resp = await axios.post(`${getAPIURL()}/test/run`, { + test, + }); +}; diff --git a/frontend/src/components/Endpoint/TestList.tsx b/frontend/src/components/Endpoint/TestList.tsx new file mode 100644 index 00000000..aa6fa0c7 --- /dev/null +++ b/frontend/src/components/Endpoint/TestList.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import NextLink from "next/link"; +import { ApiEndpointDetailed } from "@common/types"; +import EmptyView from "../utils/EmptyView"; +import { Button, Heading, VStack } from "@chakra-ui/react"; + +interface TestListProps { + endpoint: ApiEndpointDetailed; +} + +const TestList: React.FC = React.memo(({ endpoint }) => { + if (endpoint.tests.length == 0) { + return ( + + + + No Tests Yet! + + + + + + + ); + } + return null; +}); + +export default TestList; diff --git a/frontend/src/components/Endpoint/index.tsx b/frontend/src/components/Endpoint/index.tsx index be51ad37..d40304ee 100644 --- a/frontend/src/components/Endpoint/index.tsx +++ b/frontend/src/components/Endpoint/index.tsx @@ -5,6 +5,7 @@ import { BsFillLockFill } from "@react-icons/all-files/bs/BsFillLockFill"; import { GrStackOverflow } from "@react-icons/all-files/gr/GrStackOverflow"; import { TiFlowSwitch } from "@react-icons/all-files/ti/TiFlowSwitch"; import { FaBell } from "@react-icons/all-files/fa/FaBell"; +import { BiTestTube } from "@react-icons/all-files/bi/BiTestTube"; import { Badge, Code, @@ -26,6 +27,7 @@ import PIIDataList from "./PIIDataList"; import TraceList from "./TraceList"; import AlertList from "./AlertList"; import EndpointOverview from "./Overview"; +import TestList from "./TestList"; interface EndpointPageProps { endpoint: ApiEndpointDetailed; @@ -50,6 +52,8 @@ const EndpointPage: React.FC = React.memo( return 2; case "alerts": return 3; + case "tests": + return 4; default: return 0; } @@ -105,6 +109,9 @@ const EndpointPage: React.FC = React.memo( + + + @@ -128,6 +135,9 @@ const EndpointPage: React.FC = React.memo( endpointPage /> + + + diff --git a/frontend/src/components/Sidebar/NavLinkUtils.tsx b/frontend/src/components/Sidebar/NavLinkUtils.tsx index bd92d873..a7175284 100644 --- a/frontend/src/components/Sidebar/NavLinkUtils.tsx +++ b/frontend/src/components/Sidebar/NavLinkUtils.tsx @@ -2,7 +2,7 @@ import { TiFlowSwitch } from "@react-icons/all-files/ti/TiFlowSwitch"; import { FaHome } from "@react-icons/all-files/fa/FaHome"; import { FaShareAlt } from "@react-icons/all-files/fa/FaShareAlt"; import { FaBell } from "@react-icons/all-files/fa/FaBell"; -import { HiChartBar } from "@react-icons/all-files/hi/HiChartBar"; +import { BiTestTube } from "@react-icons/all-files/bi/BiTestTube"; import { AiFillApi } from "@react-icons/all-files/ai/AiFillApi"; import { IconType } from "@react-icons/all-files/lib"; @@ -45,7 +45,7 @@ export const sideNavDestinationToIcon: ( case SideNavLinkDestination.Endpoints: return TiFlowSwitch; case SideNavLinkDestination.Tests: - return HiChartBar; + return BiTestTube; case SideNavLinkDestination.Alerts: return FaBell; case SideNavLinkDestination.Specs: diff --git a/frontend/src/components/Sidebar/index.tsx b/frontend/src/components/Sidebar/index.tsx index a7cf6b4d..a0bb81c9 100644 --- a/frontend/src/components/Sidebar/index.tsx +++ b/frontend/src/components/Sidebar/index.tsx @@ -55,7 +55,6 @@ const SideNavBar: React.FC = React.memo(({ currentTab }) => { { + import("codemirror/mode/javascript/javascript"); + return import("react-codemirror"); + }, + { ssr: false } +); + +interface RequestBodyProps { + body: RequestBody; + updateBody: (t: (e: RequestBody) => RequestBody) => void; +} + +const bodyTypeToDefaultVal = (type: RequestBodyType) => { + if (type == RequestBodyType.NONE) { + return null; + } else if (type == RequestBodyType.JSON) { + return ""; + } else if (type == RequestBodyType.FORM_DATA) { + return []; + } +}; + +const RequestBodyEditor: React.FC = React.memo( + ({ body, updateBody }) => { + let editor = null; + + if (body.type == RequestBodyType.NONE) { + editor = ( + + This request does not have a body... + + ); + } else if (body.type == RequestBodyType.JSON) { + editor = ( + updateBody((e) => ({ ...e, data: val }))} + options={{ + mode: { + name: "javascript", + json: true, + }, + lineNumbers: true, + }} + /> + ); + } else if (body.type == RequestBodyType.FORM_DATA) { + editor = null; + } + + return ( + + + + Content Type + + + + + {editor} + + + ); + } +); + +export default RequestBodyEditor; diff --git a/frontend/src/components/TestEditor/header.tsx b/frontend/src/components/TestEditor/header.tsx new file mode 100644 index 00000000..e98fc55b --- /dev/null +++ b/frontend/src/components/TestEditor/header.tsx @@ -0,0 +1,49 @@ +import React from "react"; +import NextLink from "next/link"; +import { ApiEndpointDetailed } from "@common/types"; +import { Badge, Box, Code, HStack, Text } from "@chakra-ui/react"; +import { TiFlowSwitch } from "@react-icons/all-files/ti/TiFlowSwitch"; +import { FaChevronRight } from "@react-icons/all-files/fa/FaChevronRight"; +import { METHOD_TO_COLOR } from "~/constants"; + +interface TestEditorHeaderProps { + endpoint: ApiEndpointDetailed; +} + +const TestEditorHeader: React.FC = React.memo( + ({ endpoint }) => { + return ( + + + + + Endpoints + + + + + + + + + {endpoint?.method.toUpperCase()} + + + {endpoint.path} + + + + + ); + } +); + +export default TestEditorHeader; diff --git a/frontend/src/components/TestEditor/index.tsx b/frontend/src/components/TestEditor/index.tsx new file mode 100644 index 00000000..f6b3df0a --- /dev/null +++ b/frontend/src/components/TestEditor/index.tsx @@ -0,0 +1,206 @@ +import React, { useCallback, useState } from "react"; +import { ApiEndpointDetailed } from "@common/types"; +import { Request, Test } from "@common/testing/types"; +import { + Button, + Editable, + EditableInput, + EditablePreview, + HStack, + StackDivider, + VStack, +} from "@chakra-ui/react"; +import TestEditorHeader from "./header"; +import RequestList from "./requestsList"; +import RequestEditor from "./requestEditor"; +import { makeNewEmptyRequest, sendRequest } from "./requestUtils"; +import { runTest } from "~/api/tests"; + +interface TestEditorProps { + endpoint: ApiEndpointDetailed; + initTest: Test; +} + +interface TestEditorState { + test: Test; + selectedRequest: number; +} + +const TestEditor: React.FC = React.memo( + ({ endpoint, initTest }) => { + const [state, setState] = useState({ + test: initTest, + selectedRequest: 0, + }); + const [fetching, updateFetching] = useState(false); + + const selectedRequest = state.selectedRequest; + const updateSelectedRequest = useCallback( + (e: number) => { + setState((state) => { + return { + ...state, + selectedRequest: e, + }; + }); + }, + [setState] + ); + + const test = state.test; + const updateTest = useCallback( + (t: (e: Test) => Test) => { + setState((state) => { + return { + ...state, + test: t(state.test), + }; + }); + }, + [setState] + ); + + const updateRequest = useCallback( + (t: (e: Request) => Request) => + updateTest((test) => { + let newRequests = [...test.requests]; + newRequests[selectedRequest] = t(newRequests[selectedRequest]); + return { + ...test, + requests: newRequests, + }; + }), + [updateTest, selectedRequest] + ); + + const addNewRequest = useCallback( + () => + setState((state) => { + const test = state.test; + let newRequests = [...test.requests, makeNewEmptyRequest(endpoint)]; + return { + selectedRequest: newRequests.length - 1, + test: { + ...test, + requests: newRequests, + }, + }; + }), + [setState] + ); + + const deleteRequest = useCallback( + (idx: number) => + setState((state) => { + const test = state.test; + if (test.requests.length == 1) { + return state; + } + const newRequests = test.requests.filter((_, i) => i != idx); + const newSelectedRequest = + idx <= state.selectedRequest + ? Math.max(state.selectedRequest - 1, 0) + : state.selectedRequest; + return { + selectedRequest: newSelectedRequest, + test: { + ...test, + requests: newRequests, + }, + }; + }), + [setState] + ); + + const sendSelectedRequest = () => { + updateFetching(true); + sendRequest(test.requests[selectedRequest]) + .then((e) => { + const result = { + code: e.status, + headers: Object.entries(e.headers).map((e) => ({ + key: e[0], + value: e[1] as string, + })), + testResults: [], + body: e.data, + }; + updateRequest((e) => ({ ...e, result })); + }) + .catch((e) => { + const result = { + code: e.response.status, + headers: e.response.headers, + testResults: [], + body: e.response.data, + }; + updateRequest((e) => ({ ...e, result })); + }) + .finally(() => { + updateFetching(false); + }); + }; + + const onRunClick = () => { + runTest(test); + }; + + return ( + } + > + + + + updateTest((e) => ({ ...e, name }))} + fontSize="2xl" + fontWeight="semibold" + > + + + + + + + + + + } + spacing="0" + > + + + + + ); + } +); + +export default TestEditor; diff --git a/frontend/src/components/TestEditor/requestEditor.tsx b/frontend/src/components/TestEditor/requestEditor.tsx new file mode 100644 index 00000000..5532e11f --- /dev/null +++ b/frontend/src/components/TestEditor/requestEditor.tsx @@ -0,0 +1,155 @@ +import React from "react"; +import { + VStack, + StackProps, + Input, + HStack, + Button, + Box, + Tabs, + TabList, + Tab, + TabPanels, + TabPanel, + StackDivider, + Text, + useColorModeValue, + Code, +} from "@chakra-ui/react"; +import { Request } from "@common/testing/types"; +import Select from "react-select"; +import { RestMethod } from "@common/enums"; +import { SectionHeader } from "../utils/Card"; +import DataPairEditor from "../utils/DataPairEditor"; +import RequestBodyEditor from "./bodyEditor"; +import TestScriptEditor from "./testScriptEditor"; +import { getMethodSelectStyles } from "./styles"; + +interface RequestEditorProps extends StackProps { + request: Request; + sendSelectedRequest: () => void; + fetching: boolean; + updateRequest: (t: (e: Request) => Request) => void; +} + +const RequestEditor: React.FC = React.memo( + ({ request, fetching, sendSelectedRequest, updateRequest, ...props }) => { + const methodMenuBg = useColorModeValue("white", "rgb(19, 22, 26)"); + return ( + }> + + + + + updateRequest((old) => ({ ...old, url: evt.target.value })) + } + flexGrow="1" + /> + + + + + + + + + + + + + + + + + + + + + + + + updateRequest((e) => ({ ...e, params: t(e.params) })) + } + /> + + + + + updateRequest((e) => ({ ...e, headers: t(e.headers) })) + } + /> + + + + updateRequest((e) => ({ ...e, body: t(e.body) })) + } + /> + + + + updateRequest((e) => ({ ...e, tests: t(e.tests) })) + } + /> + + + + + + + +
{JSON.stringify(request.result, null, 4)}
+
+
+
+
+ ); + } +); + +export default RequestEditor; diff --git a/frontend/src/components/TestEditor/requestUtils.ts b/frontend/src/components/TestEditor/requestUtils.ts new file mode 100644 index 00000000..06bb7530 --- /dev/null +++ b/frontend/src/components/TestEditor/requestUtils.ts @@ -0,0 +1,44 @@ +import { Request } from "@common/testing/types"; +import { RequestBodyType } from "@common/testing/enums"; +import { ApiEndpoint } from "@common/types"; +import axios, { AxiosRequestConfig } from "axios"; +import { RestMethod } from "@common/enums"; + +export const sendRequest = (r: Request) => { + console.log(r); + let requestConfig: AxiosRequestConfig = {}; + requestConfig.url = r.url; + requestConfig.method = r.method; + requestConfig.params = Object.fromEntries( + r.params.map((e) => [e.key, e.value]) + ); + requestConfig.headers = Object.fromEntries( + r.headers.map((e) => [e.key, e.value]) + ); + requestConfig.data = r.body.data; + return axios.request(requestConfig); +}; + +export const makeNewRequest = (parsedEndpoint: ApiEndpoint) => ({ + method: parsedEndpoint.method, + url: `http://${parsedEndpoint.host}${parsedEndpoint.path}`, + params: [], + headers: [], + body: { + type: RequestBodyType.NONE, + data: null, + }, + tests: "", +}); + +export const makeNewEmptyRequest = (parsedEndpoint: ApiEndpoint) => ({ + method: RestMethod.GET, + url: `http://${parsedEndpoint.host}`, + params: [], + headers: [], + body: { + type: RequestBodyType.NONE, + data: null, + }, + tests: "", +}); diff --git a/frontend/src/components/TestEditor/requestsList.tsx b/frontend/src/components/TestEditor/requestsList.tsx new file mode 100644 index 00000000..8cbfb0e6 --- /dev/null +++ b/frontend/src/components/TestEditor/requestsList.tsx @@ -0,0 +1,135 @@ +import React, { useState } from "react"; +import { HStack, VStack, StackProps, Button, Text } from "@chakra-ui/react"; +import { IoMdTrash } from "@react-icons/all-files/io/IoMdTrash"; +import { FiPlus } from "@react-icons/all-files/fi/FiPlus"; +import { Request } from "@common/testing/types"; +import { METHOD_TO_COLOR } from "~/constants"; + +interface RequestListProps extends StackProps { + requests: Request[]; + selectedRequest: number; + updateSelectedRequest: (e: number) => void; + addNewRequest: () => void; + deleteRequest: (e: number) => void; +} + +interface RequestItemProps { + request: Request; + selectedRequest: number; + idx: number; + updateSelectedRequest: (e: number) => void; + deleteRequest: (e: number) => void; +} + +const RequestItem: React.FC = React.memo( + ({ request, selectedRequest, idx, updateSelectedRequest, deleteRequest }) => { + const [hovered, setHover] = useState(false); + let host = "----"; + let path = "----"; + try { + const url = new URL(request.url); + host = url.host; + path = decodeURI(url.pathname); + } catch (e) {} + return ( + updateSelectedRequest(idx)} + onMouseEnter={() => setHover(true)} + onMouseLeave={() => setHover(false)} + w="full" + justifyContent="space-between" + cursor="pointer" + bg={selectedRequest == idx ? "gray.100" : "unset"} + _hover={{ bg: selectedRequest == idx ? "gray.100" : "gray.50" }} + px="2" + py="4" + > + + + + {request.method.toUpperCase()} + + + {path} + + + + {host} + + + + + ); + } +); + +const RequestList: React.FC = React.memo( + ({ + requests, + selectedRequest, + updateSelectedRequest, + addNewRequest, + deleteRequest, + ...props + }) => { + return ( + + + {requests.map((e, i) => ( + + ))} + + + + ); + } +); + +export default RequestList; diff --git a/frontend/src/components/TestEditor/styles.ts b/frontend/src/components/TestEditor/styles.ts new file mode 100644 index 00000000..638a1cb6 --- /dev/null +++ b/frontend/src/components/TestEditor/styles.ts @@ -0,0 +1,24 @@ +export const getMethodSelectStyles = (methodMenuBG: string) => ({ + control: (provided, state) => ({ + ...provided, + borderTopRightRadius: 0, + borderBottomRightRadius: 0, + }), + option: (provided, state) => ({ + ...provided, + backgroundColor: methodMenuBG, + }), + menu: (provided, state) => ({ + ...provided, + backgroundColor: methodMenuBG, + }), + valueContainer: (provided, state) => ({ + ...provided, + height: "38px", + borderColor: "rgb(222, 228, 237)", + }), + container: (provided, state) => ({ + ...provided, + borderColor: "rgb(222, 228, 237)", + }), +}); diff --git a/frontend/src/components/TestEditor/testScriptEditor.tsx b/frontend/src/components/TestEditor/testScriptEditor.tsx new file mode 100644 index 00000000..064eaf7e --- /dev/null +++ b/frontend/src/components/TestEditor/testScriptEditor.tsx @@ -0,0 +1,61 @@ +import React from "react"; +import { + Box, + Button, + Heading, + HStack, + StackProps, + VStack, +} from "@chakra-ui/react"; +import { IoMdTrash } from "@react-icons/all-files/io/IoMdTrash"; +import "codemirror/lib/codemirror.css"; +import dynamic from "next/dynamic"; +const CodeMirror = dynamic( + () => { + import("codemirror/mode/javascript/javascript"); + return import("react-codemirror"); + }, + { ssr: false } +); + +interface TestScriptEditorProps extends StackProps { + testScript: string; + updateTestScript: (t: (e: string) => string) => void; +} + +const TestScriptEditor: React.FC = React.memo( + ({ testScript, updateTestScript, ...props }) => { + return ( + + + + Tests + + + + + + + updateTestScript((e) => val)} + options={{ + mode: { + name: "javascript", + }, + }} + /> + + + ); + } +); + +export default TestScriptEditor; diff --git a/frontend/src/components/utils/Card.tsx b/frontend/src/components/utils/Card.tsx index 3cb95a12..3479b816 100644 --- a/frontend/src/components/utils/Card.tsx +++ b/frontend/src/components/utils/Card.tsx @@ -38,11 +38,11 @@ export const DataAttribute: React.FC = React.memo( export const SectionHeader: React.FC<{ text: string; - sym: IconType; + sym?: IconType; }> = React.memo(({ text, sym }) => { return ( - {sym({})} + {sym ? sym({}) : null} {text} diff --git a/frontend/src/components/utils/DataPairEditor.tsx b/frontend/src/components/utils/DataPairEditor.tsx new file mode 100644 index 00000000..b24f4815 --- /dev/null +++ b/frontend/src/components/utils/DataPairEditor.tsx @@ -0,0 +1,132 @@ +import React from "react"; +import { DataPair } from "@common/testing/types"; +import { IoMdTrash } from "@react-icons/all-files/io/IoMdTrash"; +import { HiPlus } from "@react-icons/all-files/hi/HiPlus"; +import { + Button, + Heading, + HStack, + StackDivider, + StackProps, + VStack, + Input, +} from "@chakra-ui/react"; + +interface DataPairEditorProps extends StackProps { + title: string; + pairs: DataPair[]; + updatePairs: (t: (e: DataPair[]) => DataPair[]) => void; +} + +interface DataPairTableProps { + pairs: DataPair[]; + updatePairs: (t: (e: DataPair[]) => DataPair[]) => void; +} + +const DataPairTable: React.FC = React.memo( + ({ pairs, updatePairs }) => { + const onDelete = (idx: number) => { + updatePairs((pairs) => pairs.filter((e, i) => i != idx)); + }; + const onUpdateKey = (idx: number, value: string) => { + updatePairs((pairs) => { + let newPairs = [...pairs]; + newPairs[idx].key = value; + return newPairs; + }); + }; + const onUpdateValue = (idx: number, value: string) => { + updatePairs((pairs) => { + let newPairs = [...pairs]; + newPairs[idx].value = value; + return newPairs; + }); + }; + return ( + } + spacing="0" + borderBottom="1px" + borderColor="gray.200" + > + {pairs.map((e, i) => ( + }> + onUpdateKey(i, evt.target.value)} + fontWeight="medium" + fontSize="sm" + /> + onUpdateValue(i, evt.target.value)} + fontWeight="medium" + fontSize="sm" + /> + + + ))} + + ); + } +); + +const DataPairEditor: React.FC = React.memo( + ({ title, pairs, updatePairs, ...props }) => { + const addNew = () => { + updatePairs((e) => e.concat({ key: "", value: "" })); + }; + const clearAll = () => { + updatePairs((e) => []); + }; + + return ( + + + + {title} + + + + + + + {pairs.length == 0 ? ( + + + This request does not have any {title.toLowerCase()}... + + + + ) : null} + {pairs.length > 0 ? ( + + ) : null} + + ); + } +); + +export default DataPairEditor; diff --git a/frontend/src/components/utils/EmptyView.tsx b/frontend/src/components/utils/EmptyView.tsx index 10078ee4..80f161a4 100644 --- a/frontend/src/components/utils/EmptyView.tsx +++ b/frontend/src/components/utils/EmptyView.tsx @@ -2,29 +2,34 @@ import React from "react"; import { Box, Heading, BoxProps } from "@chakra-ui/react"; -const EmptyView: React.FC = - React.memo(({ notRounded, ...props }) => { - return ( - +const EmptyView: React.FC< + BoxProps & { text?: string; notRounded?: boolean; children?: React.ReactNode } +> = React.memo(({ notRounded, children, text, ...props }) => { + return ( + + {children ? ( + children + ) : ( - {props.text || "Nothing here yet!"} + {text || "Nothing here yet!"} - - ); - }); + )} + + ); +}); export default EmptyView; diff --git a/frontend/src/main.css b/frontend/src/main.css new file mode 100644 index 00000000..2fd2e16f --- /dev/null +++ b/frontend/src/main.css @@ -0,0 +1,25 @@ +.InovuaReactDataGrid__row-reorder-icon { + height: 20px; +} + +.inovua-react-virtual-list--theme-default-light + .InovuaReactDataGrid__row--selected { + background-color: white !important; +} + +.InovuaReactDataGrid__column-header__menu-tool { + display: none !important; +} + +.inovua-react-virtual-list--theme-default-dark + .InovuaReactDataGrid__row--selected { + background-color: rgb(44, 50, 58) !important; +} + +.ReactCodeMirror { + height: 100% !important; +} + +.CodeMirror { + height: 100% !important; +} diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 3e48621c..a6a271ea 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,6 +1,7 @@ import { ChakraProvider } from "@chakra-ui/react"; import theme from "../theme"; +import "../main.css"; import { AppProps } from "next/app"; function MyApp({ Component, pageProps }: AppProps) { diff --git a/frontend/src/pages/endpoint/[endpointUUID].tsx b/frontend/src/pages/endpoint/[endpointUUID]/index.tsx similarity index 100% rename from frontend/src/pages/endpoint/[endpointUUID].tsx rename to frontend/src/pages/endpoint/[endpointUUID]/index.tsx diff --git a/frontend/src/pages/endpoint/[endpointUUID]/test/new.tsx b/frontend/src/pages/endpoint/[endpointUUID]/test/new.tsx new file mode 100644 index 00000000..e08539ba --- /dev/null +++ b/frontend/src/pages/endpoint/[endpointUUID]/test/new.tsx @@ -0,0 +1,44 @@ +import { GetServerSideProps } from "next"; +import ErrorPage from "next/error"; +import superjson from "superjson"; +import { SideNavLinkDestination } from "components/Sidebar/NavLinkUtils"; +import { SidebarLayoutShell } from "components/SidebarLayoutShell"; +import TestEditor from "components/TestEditor"; +import { getEndpoint } from "api/endpoints"; +import { ApiEndpointDetailed } from "@common/types"; +import { makeNewRequest } from "~/components/TestEditor/requestUtils"; + +const NewTest = ({ endpoint }) => { + const parsedEndpoint = superjson.parse( + endpoint + ) as ApiEndpointDetailed | null; + if (!parsedEndpoint) { + return ; + } + return ( + + + + ); +}; + +export const getServerSideProps: GetServerSideProps = async (context) => { + const endpoint = await getEndpoint(context.query.endpointUUID as string); + return { + props: { + endpoint: superjson.stringify(endpoint), + }, + }; +}; + +export default NewTest; diff --git a/frontend/src/pages/tests.tsx b/frontend/src/pages/tests.tsx index 58db2b99..b5c868dc 100644 --- a/frontend/src/pages/tests.tsx +++ b/frontend/src/pages/tests.tsx @@ -1,13 +1,21 @@ -import { HStack } from "@chakra-ui/react"; -import { DarkModeSwitch } from "components/utils/DarkModeSwitch"; -import SideNavBar from "components/Sidebar"; +import { Heading, VStack } from "@chakra-ui/react"; import { SideNavLinkDestination } from "components/Sidebar/NavLinkUtils"; +import { SidebarLayoutShell } from "~/components/SidebarLayoutShell"; +import { ContentContainer } from "~/components/utils/ContentContainer"; const Tests = () => ( - - - - + + + + + Tests + + + + ); export default Tests; diff --git a/frontend/src/testData.ts b/frontend/src/testData.ts index bfd75cfa..9af5de2c 100644 --- a/frontend/src/testData.ts +++ b/frontend/src/testData.ts @@ -4,137 +4,8 @@ import { RiskScore, AlertType, ConnectionType, - DataClass, } from "@common/enums"; -export const testEndpoints: ApiEndpointDetailed[] = [ - { - uuid: "5239bcfe-bf24-40e6-b952-b9811210108e", - host: "AWS Gateway 1", - path: "/foo/bar/{test}", - method: RestMethod.POST, - riskScore: RiskScore.HIGH, - firstDetected: new Date("2022-07-31T00:52:10.586"), - lastActive: new Date("2022-07-31T00:52:10.586Z"), - sensitiveDataClasses: [ - { - uuid: "62073e0e-7a46-4875-83b8-fd356cdaadaf", - dataClass: DataClass.SSN, - dataPath: "result.asdf", - createdAt: new Date("2022-07-31T00:52:10.586Z"), - updatedAt: new Date("2022-07-31T00:52:10.586Z"), - matches: [], - isRisk: true, - apiEndpointUuid: "5239bcfe-bf24-40e6-b952-b9811210108e", - }, - { - uuid: "af226cd2-5fe6-4cf5-b55e-3bf6921d1e09", - dataClass: DataClass.CREDIT_CARD, - dataPath: "result.asdf.asdf", - createdAt: new Date("2022-07-31T00:52:10.586Z"), - updatedAt: new Date("2022-07-31T00:52:10.586Z"), - matches: [], - isRisk: true, - apiEndpointUuid: "5239bcfe-bf24-40e6-b952-b9811210108e", - }, - { - uuid: "0bf054a6-6005-47e6-8d01-7ecb4c48be68", - dataClass: DataClass.IP_ADDRESS, - dataPath: "result.asdf.bar", - createdAt: new Date("2022-07-31T00:52:10.586Z"), - updatedAt: new Date("2022-07-31T00:52:10.586Z"), - matches: [], - isRisk: true, - apiEndpointUuid: "5239bcfe-bf24-40e6-b952-b9811210108e", - }, - ], - traces: [ - { - uuid: "873b097d-0b93-4877-983d-86c4ec0295c7'", - path: "foo/bar/1", - createdAt: new Date("2021-12-17T03:24:00"), - host: "test-api.metlo.com", - method: RestMethod.POST, - requestParameters: [ - { - name: "testParam", - value: "baz", - }, - ], - requestHeaders: [ - { - name: "authToken", - value: "awefiahwofgi23aw", - }, - ], - requestBody: "asdf", - responseStatus: 200, - responseHeaders: [], - responseBody: "bar", - meta: { - incoming: true, - source: "73.162.113.176", - sourcePort: "7123", - destination: "73.162.113.200", - destinationPort: "80", - }, - apiEndpointUuid: "5239bcfe-bf24-40e6-b952-b9811210108e", - }, - ], - alerts: [ - { - uuid: "6cc33ac4-5a05-4915-9d0a-738242ccf70d", - apiEndpointUuid: "5239bcfe-bf24-40e6-b952-b9811210108e", - apiEndpoint: { - uuid: "5239bcfe-bf24-40e6-b952-b9811210108e", - host: "AWS Gateway 1", - path: "/foo/bar/{test}", - method: RestMethod.POST, - riskScore: RiskScore.HIGH, - firstDetected: new Date("2022-07-31T00:52:10.586"), - lastActive: new Date("2022-07-31T00:52:10.586Z"), - totalCalls: 1, - openapiSpecName: "", - owner: "", - createdAt: new Date(), - updatedAt: new Date(), - }, - createdAt: new Date("2021-12-17T03:24:00"), - updatedAt: new Date("2021-12-17T03:24:00"), - type: AlertType.OPEN_API_SPEC_DIFF, - riskScore: RiskScore.LOW, - description: ["Field differs from Open API Spec."], - resolutionMessage: null, - resolved: false, - }, - ], - openapiSpec: null, - openapiSpecName: "", - createdAt: new Date(), - updatedAt: new Date(), - owner: "", - totalCalls: 1, - }, - { - uuid: "3425c51f-179b-45b6-9c1c-938f7f678f17", - host: "AWS Gateway 1", - path: "/foo/blam/{test}", - method: RestMethod.GET, - riskScore: RiskScore.MEDIUM, - firstDetected: new Date("2022-07-31T00:52:10.586Z"), - lastActive: new Date("2022-07-31T00:52:10.586Z"), - sensitiveDataClasses: [], - traces: [], - alerts: [], - openapiSpec: null, - openapiSpecName: "", - createdAt: new Date(), - updatedAt: new Date(), - owner: "", - totalCalls: 1, - }, -]; - export const testConnections: Connection[] = [ { createdAt: new Date("2021-12-17T03:24:00"), diff --git a/frontend/src/theme.tsx b/frontend/src/theme.tsx index 7d08049b..b8653687 100644 --- a/frontend/src/theme.tsx +++ b/frontend/src/theme.tsx @@ -33,6 +33,10 @@ const theme = extendTheme({ default: "white", _dark: "rgb(39, 40, 43)", }, + headerColor: { + default: "rgb(179, 181, 185)", + _dark: "rgb(91, 94, 109)", + }, }, radii: { button: "12px", diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 5c0fc073..c31c94f0 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -1060,6 +1060,18 @@ dependencies: tslib "^2.4.0" +"@types/codemirror@*", "@types/codemirror@^5.60.5": + version "5.60.5" + resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-5.60.5.tgz#5b989a3b4bbe657458cf372c92b6bfda6061a2b7" + integrity sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg== + dependencies: + "@types/tern" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + "@types/js-yaml@^4.0.5": version "4.0.5" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" @@ -1102,6 +1114,14 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/react-codemirror@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/react-codemirror/-/react-codemirror-1.0.7.tgz#17badc0671dd615b186dab118f699ae3370e3ca8" + integrity sha512-1TgVrVyw24YVHovXUCSbGOklh/ERwRAXaFhRD1UuzednOF3Ms1kSMCsYKRJPM536dYqpUqaCw+vAE7/xUFhXiQ== + dependencies: + "@types/codemirror" "*" + "@types/react" "*" + "@types/react-dom@^18.0.0": version "18.0.6" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" @@ -1130,6 +1150,13 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/tern@*": + version "0.23.4" + resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" + integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== + dependencies: + "@types/estree" "*" + "@typescript-eslint/parser@^5.21.0": version "5.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383" @@ -1414,6 +1441,16 @@ chartjs-adapter-date-fns@^2.0.0: resolved "https://registry.yarnpkg.com/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-2.0.0.tgz#5e53b2f660b993698f936f509c86dddf9ed44c6b" integrity sha512-rmZINGLe+9IiiEB0kb57vH3UugAtYw33anRiw5kS2Tu87agpetDDoouquycWc9pRsKtQo5j+vLsYHyr8etAvFw== +classnames@^2.2.5: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + +codemirror@^5.18.2: + version "5.65.7" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.7.tgz#29af41ce5f4c2b8f1c1e16f4e645ff392823716a" + integrity sha512-zb67cXzgugIQmb6tfD4G11ILjYoMfTjwcjn+cWsa4GewlI2adhR/h3kolkoCQTm1msD/1BuqVTKuO09ELsS++A== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1492,6 +1529,14 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" +create-react-class@^15.5.1: + version "15.7.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" + integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -2491,11 +2536,21 @@ lodash.curry@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -2511,7 +2566,7 @@ lodash@^4.17.11: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -2845,7 +2900,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.5.4, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -2891,6 +2946,18 @@ react-clientside-effect@^1.2.6: dependencies: "@babel/runtime" "^7.12.13" +react-codemirror@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-codemirror/-/react-codemirror-1.0.0.tgz#91467b53b1f5d80d916a2fd0b4c7adb85a9001ba" + integrity sha512-pPvL8b1vwLyfX5f3EMLyqZVXYY/qAKdqURYxi3izYfjWbnUdqVaFBA7z78o9eEM+UzgxuKjI864BJkPIRVS2JA== + dependencies: + classnames "^2.2.5" + codemirror "^5.18.2" + create-react-class "^15.5.1" + lodash.debounce "^4.0.8" + lodash.isequal "^4.5.0" + prop-types "^15.5.4" + react-data-table-component@^7.5.2: version "7.5.2" resolved "https://registry.yarnpkg.com/react-data-table-component/-/react-data-table-component-7.5.2.tgz#42d0af2a923e05887baadf8f4718bbb133c6db83"