From 1a6c0e606fc2cce7d4653bcf3327dfb8aab1997a Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 5 Feb 2025 11:46:45 -0500
Subject: [PATCH 01/54] feat: poc run performance against testenv
- currently requires running tests to setup db
(waiting to avoid actually running tests and spinning down tests/env)
- loses ability to run k6 against rafiki w/ telemetry
---
test/integration/index.ts | 2 ++
test/integration/integration.test.ts | 6 ++++--
.../scripts/create-outgoing-payments.js | 17 +++++++++++-----
test/performance/scripts/run-tests.sh | 20 +++++++++++--------
4 files changed, 30 insertions(+), 15 deletions(-)
create mode 100644 test/integration/index.ts
diff --git a/test/integration/index.ts b/test/integration/index.ts
new file mode 100644
index 0000000000..0119214798
--- /dev/null
+++ b/test/integration/index.ts
@@ -0,0 +1,2 @@
+c9 = await MockASE.create(C9_CONFIG)
+hlb = await MockASE.create(HLB_CONFIG)
diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts
index d83df3e03f..b082a5e2ae 100644
--- a/test/integration/integration.test.ts
+++ b/test/integration/integration.test.ts
@@ -2,11 +2,12 @@ import assert from 'assert'
import { C9_CONFIG, HLB_CONFIG } from './lib/config'
import { MockASE } from './lib/mock-ase'
import { Fee, WebhookEventType } from 'mock-account-service-lib'
-import { poll } from './lib/utils'
+import { poll, wait } from './lib/utils'
import { TestActions, createTestActions } from './lib/test-actions'
import { IncomingPaymentState } from './lib/generated/graphql'
-jest.setTimeout(20_000)
+// jest.setTimeout(20_000)
+jest.setTimeout(1000 * 60 * 60 * 2)
describe('Integration tests', (): void => {
let c9: MockASE
@@ -22,6 +23,7 @@ describe('Integration tests', (): void => {
// https://github.com/jestjs/jest/issues/2713
process.exit(1)
}
+ await wait(1000 * 60 * 60 * 2)
})
afterAll(async () => {
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index ace012decf..7147462ae7 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -7,14 +7,21 @@ export const options = {
// A number specifying the number of VUs to run concurrently.
vus: 1,
// A string specifying the total duration of the test run.
- duration: '600s'
+ duration: '30s'
}
-
-const CLOUD_NINE_GQL_ENDPOINT = 'http://cloud-nine-wallet-backend:3001/graphql'
+// const CLOUD_NINE_GQL_ENDPOINT =
+// 'http://cloud-nine-wallet-test-backend:3001/graphql'
+// const CLOUD_NINE_WALLET_ADDRESS =
+// 'https://cloud-nine-wallet-test-backend:3000/accounts/gfranklin'
+// const HAPPY_LIFE_BANK_WALLET_ADDRESS =
+// 'https://happy-life-bank-test-backend:4000/accounts/pfry'
+
+const CLOUD_NINE_GQL_ENDPOINT =
+ 'http://cloud-nine-wallet-test-backend:3101/graphql'
const CLOUD_NINE_WALLET_ADDRESS =
- 'https://cloud-nine-wallet-backend/accounts/gfranklin'
+ 'https://cloud-nine-wallet-test-backend:3100/accounts/gfranklin'
const HAPPY_LIFE_BANK_WALLET_ADDRESS =
- 'https://happy-life-bank-backend/accounts/pfry'
+ 'https://happy-life-bank-test-backend:4100/accounts/pfry'
const SIGNATURE_SECRET = 'iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964='
const SIGNATURE_VERSION = '1'
diff --git a/test/performance/scripts/run-tests.sh b/test/performance/scripts/run-tests.sh
index 17b23bc059..2ab542bbfc 100755
--- a/test/performance/scripts/run-tests.sh
+++ b/test/performance/scripts/run-tests.sh
@@ -1,11 +1,15 @@
#!/bin/bash
-c9_gql_url="http://localhost:3001/graphql"
-c9_wallet_address="http://localhost:3000/"
-hlb_wallet_address="http://localhost:4000/"
+# c9_gql_url="http://localhost:3001/graphql"
+# c9_wallet_address="http://localhost:3000/"
+# hlb_wallet_address="http://localhost:4000/"
+
+c9_gql_url="http://localhost:3101/graphql"
+c9_wallet_address="http://localhost:3100/"
+hlb_wallet_address="http://localhost:4100/"
# Verify that the localenv backend is live
-if curl -s --head --request GET "$c9_gql_url" | grep "HTTP/1.[01]" > /dev/null; then
+if curl -s --head --request GET "$c9_gql_url" | grep "HTTP/1.[01]" >/dev/null; then
echo "Localenv is up: $c9_gql_url"
else
echo "Localenv is down: $c9_gql_url"
@@ -13,7 +17,7 @@ else
fi
# Verify that cloud nine mock ase is live
-if curl -s --head --request GET "$c9_wallet_address" | grep "HTTP/1.[01]" > /dev/null; then
+if curl -s --head --request GET "$c9_wallet_address" | grep "HTTP/1.[01]" >/dev/null; then
echo "Cloud Nine Wallet Address is up: $c9_wallet_address"
else
echo "Cloud Nine Wallet Address is down: $c9_wallet_address"
@@ -21,7 +25,7 @@ else
fi
# Verify that happy life bank mock ase is live
-if curl -s --head --request GET "$hlb_wallet_address" | grep "HTTP/1.[01]" > /dev/null; then
+if curl -s --head --request GET "$hlb_wallet_address" | grep "HTTP/1.[01]" >/dev/null; then
echo "Happy Life Bank Address is up: $hlb_wallet_address"
else
echo "Happy Life Bank Address is down: $hlb_wallet_address"
@@ -31,7 +35,7 @@ fi
# setup hosts
addHost() {
local hostname="$1"
-
+
# check first to avoid sudo prompt if host is already set
if pnpm --filter performance hostile list | grep -q "127.0.0.1 $hostname"; then
echo "$hostname already set"
@@ -51,7 +55,7 @@ addHost "happy-life-bank-auth"
# run tests
if [[ $* == *--docker* ]]; then
pnpm --filter performance test-docker
-else
+else
pnpm --filter performance test
fi
exit $?
From f433b5778354234e44e993fa95e43f56d5183a9f Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 5 Feb 2025 11:52:55 -0500
Subject: [PATCH 02/54] Revert "feat: poc run performance against testenv"
This reverts commit 1a6c0e606fc2cce7d4653bcf3327dfb8aab1997a.
---
test/integration/index.ts | 2 --
test/integration/integration.test.ts | 6 ++----
.../scripts/create-outgoing-payments.js | 17 +++++-----------
test/performance/scripts/run-tests.sh | 20 ++++++++-----------
4 files changed, 15 insertions(+), 30 deletions(-)
delete mode 100644 test/integration/index.ts
diff --git a/test/integration/index.ts b/test/integration/index.ts
deleted file mode 100644
index 0119214798..0000000000
--- a/test/integration/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-c9 = await MockASE.create(C9_CONFIG)
-hlb = await MockASE.create(HLB_CONFIG)
diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts
index b082a5e2ae..d83df3e03f 100644
--- a/test/integration/integration.test.ts
+++ b/test/integration/integration.test.ts
@@ -2,12 +2,11 @@ import assert from 'assert'
import { C9_CONFIG, HLB_CONFIG } from './lib/config'
import { MockASE } from './lib/mock-ase'
import { Fee, WebhookEventType } from 'mock-account-service-lib'
-import { poll, wait } from './lib/utils'
+import { poll } from './lib/utils'
import { TestActions, createTestActions } from './lib/test-actions'
import { IncomingPaymentState } from './lib/generated/graphql'
-// jest.setTimeout(20_000)
-jest.setTimeout(1000 * 60 * 60 * 2)
+jest.setTimeout(20_000)
describe('Integration tests', (): void => {
let c9: MockASE
@@ -23,7 +22,6 @@ describe('Integration tests', (): void => {
// https://github.com/jestjs/jest/issues/2713
process.exit(1)
}
- await wait(1000 * 60 * 60 * 2)
})
afterAll(async () => {
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 7147462ae7..ace012decf 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -7,21 +7,14 @@ export const options = {
// A number specifying the number of VUs to run concurrently.
vus: 1,
// A string specifying the total duration of the test run.
- duration: '30s'
+ duration: '600s'
}
-// const CLOUD_NINE_GQL_ENDPOINT =
-// 'http://cloud-nine-wallet-test-backend:3001/graphql'
-// const CLOUD_NINE_WALLET_ADDRESS =
-// 'https://cloud-nine-wallet-test-backend:3000/accounts/gfranklin'
-// const HAPPY_LIFE_BANK_WALLET_ADDRESS =
-// 'https://happy-life-bank-test-backend:4000/accounts/pfry'
-
-const CLOUD_NINE_GQL_ENDPOINT =
- 'http://cloud-nine-wallet-test-backend:3101/graphql'
+
+const CLOUD_NINE_GQL_ENDPOINT = 'http://cloud-nine-wallet-backend:3001/graphql'
const CLOUD_NINE_WALLET_ADDRESS =
- 'https://cloud-nine-wallet-test-backend:3100/accounts/gfranklin'
+ 'https://cloud-nine-wallet-backend/accounts/gfranklin'
const HAPPY_LIFE_BANK_WALLET_ADDRESS =
- 'https://happy-life-bank-test-backend:4100/accounts/pfry'
+ 'https://happy-life-bank-backend/accounts/pfry'
const SIGNATURE_SECRET = 'iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964='
const SIGNATURE_VERSION = '1'
diff --git a/test/performance/scripts/run-tests.sh b/test/performance/scripts/run-tests.sh
index 2ab542bbfc..17b23bc059 100755
--- a/test/performance/scripts/run-tests.sh
+++ b/test/performance/scripts/run-tests.sh
@@ -1,15 +1,11 @@
#!/bin/bash
-# c9_gql_url="http://localhost:3001/graphql"
-# c9_wallet_address="http://localhost:3000/"
-# hlb_wallet_address="http://localhost:4000/"
-
-c9_gql_url="http://localhost:3101/graphql"
-c9_wallet_address="http://localhost:3100/"
-hlb_wallet_address="http://localhost:4100/"
+c9_gql_url="http://localhost:3001/graphql"
+c9_wallet_address="http://localhost:3000/"
+hlb_wallet_address="http://localhost:4000/"
# Verify that the localenv backend is live
-if curl -s --head --request GET "$c9_gql_url" | grep "HTTP/1.[01]" >/dev/null; then
+if curl -s --head --request GET "$c9_gql_url" | grep "HTTP/1.[01]" > /dev/null; then
echo "Localenv is up: $c9_gql_url"
else
echo "Localenv is down: $c9_gql_url"
@@ -17,7 +13,7 @@ else
fi
# Verify that cloud nine mock ase is live
-if curl -s --head --request GET "$c9_wallet_address" | grep "HTTP/1.[01]" >/dev/null; then
+if curl -s --head --request GET "$c9_wallet_address" | grep "HTTP/1.[01]" > /dev/null; then
echo "Cloud Nine Wallet Address is up: $c9_wallet_address"
else
echo "Cloud Nine Wallet Address is down: $c9_wallet_address"
@@ -25,7 +21,7 @@ else
fi
# Verify that happy life bank mock ase is live
-if curl -s --head --request GET "$hlb_wallet_address" | grep "HTTP/1.[01]" >/dev/null; then
+if curl -s --head --request GET "$hlb_wallet_address" | grep "HTTP/1.[01]" > /dev/null; then
echo "Happy Life Bank Address is up: $hlb_wallet_address"
else
echo "Happy Life Bank Address is down: $hlb_wallet_address"
@@ -35,7 +31,7 @@ fi
# setup hosts
addHost() {
local hostname="$1"
-
+
# check first to avoid sudo prompt if host is already set
if pnpm --filter performance hostile list | grep -q "127.0.0.1 $hostname"; then
echo "$hostname already set"
@@ -55,7 +51,7 @@ addHost "happy-life-bank-auth"
# run tests
if [[ $* == *--docker* ]]; then
pnpm --filter performance test-docker
-else
+else
pnpm --filter performance test
fi
exit $?
From 0eeab9bfd8037a28e6841f9868d4a86c0bb30863 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 5 Feb 2025 12:21:42 -0500
Subject: [PATCH 03/54] refactor: mv testenv to ./test from ./test/integration
- in preparation for switching performance test
to target testenv
- ensured integration tests pass
---
test/integration/lib/config.ts | 6 +++---
test/integration/package.json | 2 +-
test/{integration => }/testenv/cloud-nine-wallet/.env | 0
.../testenv/cloud-nine-wallet/docker-compose.yml | 4 ++--
test/{integration => }/testenv/cloud-nine-wallet/seed.yml | 0
test/{integration => }/testenv/dbinit.sql | 0
test/{integration => }/testenv/docker-compose.yml | 0
test/{integration => }/testenv/happy-life-bank/.env | 0
.../testenv/happy-life-bank/docker-compose.yml | 0
test/{integration => }/testenv/happy-life-bank/seed.yml | 0
test/{integration => }/testenv/private-key.pem | 0
11 files changed, 6 insertions(+), 6 deletions(-)
rename test/{integration => }/testenv/cloud-nine-wallet/.env (100%)
rename test/{integration => }/testenv/cloud-nine-wallet/docker-compose.yml (98%)
rename test/{integration => }/testenv/cloud-nine-wallet/seed.yml (100%)
rename test/{integration => }/testenv/dbinit.sql (100%)
rename test/{integration => }/testenv/docker-compose.yml (100%)
rename test/{integration => }/testenv/happy-life-bank/.env (100%)
rename test/{integration => }/testenv/happy-life-bank/docker-compose.yml (100%)
rename test/{integration => }/testenv/happy-life-bank/seed.yml (100%)
rename test/{integration => }/testenv/private-key.pem (100%)
diff --git a/test/integration/lib/config.ts b/test/integration/lib/config.ts
index b2b817e5e4..d7f4149152 100644
--- a/test/integration/lib/config.ts
+++ b/test/integration/lib/config.ts
@@ -58,9 +58,9 @@ const loadEnv = (filePath: string): EnvConfig => {
}
const createConfig = (name: string): TestConfig => {
- const seedPath = resolve(__dirname, `../testenv/${name}/seed.yml`)
- const env = loadEnv(resolve(__dirname, `../testenv/${name}/.env`))
- const keyPath = resolve(__dirname, `../testenv/private-key.pem`)
+ const seedPath = resolve(__dirname, `../../testenv/${name}/seed.yml`)
+ const env = loadEnv(resolve(__dirname, `../../testenv/${name}/.env`))
+ const keyPath = resolve(__dirname, `../../testenv/private-key.pem`)
return {
seed: parse(readFileSync(seedPath).toString('utf8')),
diff --git a/test/integration/package.json b/test/integration/package.json
index 6f8d221915..b3ae47ed9f 100644
--- a/test/integration/package.json
+++ b/test/integration/package.json
@@ -5,7 +5,7 @@
"description": "",
"scripts": {
"build:deps": "pnpm --filter mock-account-service-lib build",
- "testenv:compose": "docker compose -f ./testenv/cloud-nine-wallet/docker-compose.yml -f ./testenv/happy-life-bank/docker-compose.yml -f ./testenv/docker-compose.yml",
+ "testenv:compose": "docker compose -f ../testenv/cloud-nine-wallet/docker-compose.yml -f ../testenv/happy-life-bank/docker-compose.yml -f ../testenv/docker-compose.yml",
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
"run-tests": "./scripts/run-tests.sh",
"hostile": "hostile"
diff --git a/test/integration/testenv/cloud-nine-wallet/.env b/test/testenv/cloud-nine-wallet/.env
similarity index 100%
rename from test/integration/testenv/cloud-nine-wallet/.env
rename to test/testenv/cloud-nine-wallet/.env
diff --git a/test/integration/testenv/cloud-nine-wallet/docker-compose.yml b/test/testenv/cloud-nine-wallet/docker-compose.yml
similarity index 98%
rename from test/integration/testenv/cloud-nine-wallet/docker-compose.yml
rename to test/testenv/cloud-nine-wallet/docker-compose.yml
index 8c2503f14c..3a5001b99c 100644
--- a/test/integration/testenv/cloud-nine-wallet/docker-compose.yml
+++ b/test/testenv/cloud-nine-wallet/docker-compose.yml
@@ -4,7 +4,7 @@ services:
hostname: cloud-nine-wallet-test-backend
image: rafiki-backend
build:
- context: ../../../..
+ context: ../../..
dockerfile: ./packages/backend/Dockerfile.prod
restart: always
privileged: true
@@ -48,7 +48,7 @@ services:
hostname: cloud-nine-wallet-test-auth
image: rafiki-auth
build:
- context: ../../../..
+ context: ../../..
dockerfile: ./packages/auth/Dockerfile.prod
restart: always
networks:
diff --git a/test/integration/testenv/cloud-nine-wallet/seed.yml b/test/testenv/cloud-nine-wallet/seed.yml
similarity index 100%
rename from test/integration/testenv/cloud-nine-wallet/seed.yml
rename to test/testenv/cloud-nine-wallet/seed.yml
diff --git a/test/integration/testenv/dbinit.sql b/test/testenv/dbinit.sql
similarity index 100%
rename from test/integration/testenv/dbinit.sql
rename to test/testenv/dbinit.sql
diff --git a/test/integration/testenv/docker-compose.yml b/test/testenv/docker-compose.yml
similarity index 100%
rename from test/integration/testenv/docker-compose.yml
rename to test/testenv/docker-compose.yml
diff --git a/test/integration/testenv/happy-life-bank/.env b/test/testenv/happy-life-bank/.env
similarity index 100%
rename from test/integration/testenv/happy-life-bank/.env
rename to test/testenv/happy-life-bank/.env
diff --git a/test/integration/testenv/happy-life-bank/docker-compose.yml b/test/testenv/happy-life-bank/docker-compose.yml
similarity index 100%
rename from test/integration/testenv/happy-life-bank/docker-compose.yml
rename to test/testenv/happy-life-bank/docker-compose.yml
diff --git a/test/integration/testenv/happy-life-bank/seed.yml b/test/testenv/happy-life-bank/seed.yml
similarity index 100%
rename from test/integration/testenv/happy-life-bank/seed.yml
rename to test/testenv/happy-life-bank/seed.yml
diff --git a/test/integration/testenv/private-key.pem b/test/testenv/private-key.pem
similarity index 100%
rename from test/integration/testenv/private-key.pem
rename to test/testenv/private-key.pem
From 1d06cee44fda7b3c3c7a52d0ff55e3549d42097e Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 5 Feb 2025 14:13:31 -0500
Subject: [PATCH 04/54] refactor: mv MockASE to new test-lib
- supports reuse in setup script for performance tests
which will allow running performance test against testenv
- also bumps graphql pacakge version across monorepo.
added to test-lib which caused some type errors
in backend and auth due to a version mismatch
---
packages/backend/codegen.yml | 2 +-
pnpm-lock.yaml | 1094 +++++++++--------
test/integration/integration.test.ts | 5 +-
test/integration/lib/test-actions/admin.ts | 4 +-
test/integration/lib/test-actions/index.ts | 2 +-
.../lib/test-actions/open-payments.ts | 2 +-
test/integration/package.json | 13 +-
test/test-lib/package.json | 28 +
.../lib => test-lib/src}/admin-client.ts | 0
.../lib => test-lib/src}/apollo-client.ts | 0
.../lib => test-lib/src}/config.ts | 0
.../lib => test-lib/src}/generated/graphql.ts | 0
test/test-lib/src/index.ts | 6 +
.../src}/integration-server.ts | 0
.../lib => test-lib/src}/mock-ase.ts | 0
test/test-lib/tsconfig.json | 11 +
16 files changed, 609 insertions(+), 558 deletions(-)
create mode 100644 test/test-lib/package.json
rename test/{integration/lib => test-lib/src}/admin-client.ts (100%)
rename test/{integration/lib => test-lib/src}/apollo-client.ts (100%)
rename test/{integration/lib => test-lib/src}/config.ts (100%)
rename test/{integration/lib => test-lib/src}/generated/graphql.ts (100%)
create mode 100644 test/test-lib/src/index.ts
rename test/{integration/lib => test-lib/src}/integration-server.ts (100%)
rename test/{integration/lib => test-lib/src}/mock-ase.ts (100%)
create mode 100644 test/test-lib/tsconfig.json
diff --git a/packages/backend/codegen.yml b/packages/backend/codegen.yml
index c0736014d1..e298e8ac25 100644
--- a/packages/backend/codegen.yml
+++ b/packages/backend/codegen.yml
@@ -53,7 +53,7 @@ generates:
scalars:
UInt8: number
UInt64: bigint
- ../../test/integration/lib/generated/graphql.ts:
+ ../../test/test-lib/src/generated/graphql.ts:
plugins:
- 'typescript'
- 'typescript-resolvers'
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2ea454ee58..45af14986f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -36,7 +36,7 @@ importers:
version: 29.6.3
'@swc/jest':
specifier: ^0.2.37
- version: 0.2.37(@swc/core@1.9.0)
+ version: 0.2.37(@swc/core@1.10.14)
'@types/jest':
specifier: ^29.5.14
version: 29.5.14
@@ -87,7 +87,7 @@ importers:
dependencies:
'@apollo/client':
specifier: ^3.11.8
- version: 3.11.8(@types/react@18.2.73)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0)
+ version: 3.11.8(@types/react@18.2.73)(graphql@16.10.0)(react-dom@18.2.0)(react@18.2.0)
'@headlessui/react':
specifier: ^1.7.19
version: 1.7.19(react-dom@18.2.0)(react@18.2.0)
@@ -117,7 +117,7 @@ importers:
version: 0.7.1
graphql:
specifier: ^16.8.1
- version: 16.8.1
+ version: 16.10.0
json-canonicalize:
specifier: ^1.0.6
version: 1.0.6
@@ -169,7 +169,7 @@ importers:
version: 8.2.0
'@apollo/server':
specifier: ^4.11.2
- version: 4.11.2(graphql@16.8.1)
+ version: 4.11.2(graphql@16.10.0)
'@as-integrations/koa':
specifier: ^1.1.1
version: 1.1.1(@apollo/server@4.11.2)(koa@2.15.3)
@@ -178,13 +178,13 @@ importers:
version: 2.4.0(@apollo/server@4.11.2)
'@graphql-tools/graphql-file-loader':
specifier: ^8.0.12
- version: 8.0.12(graphql@16.8.1)
+ version: 8.0.12(graphql@16.10.0)
'@graphql-tools/load':
specifier: ^8.0.12
- version: 8.0.12(graphql@16.8.1)
+ version: 8.0.12(graphql@16.10.0)
'@graphql-tools/schema':
specifier: ^10.0.16
- version: 10.0.16(graphql@16.8.1)
+ version: 10.0.16(graphql@16.10.0)
'@interledger/http-signature-utils':
specifier: 2.0.2
version: 2.0.2
@@ -211,7 +211,7 @@ importers:
version: 16.4.7
graphql:
specifier: ^16.8.1
- version: 16.8.1
+ version: 16.10.0
ioredis:
specifier: ^5.3.2
version: 5.3.2
@@ -247,29 +247,29 @@ importers:
version: link:../token-introspection
ts-node-dev:
specifier: ^2.0.0
- version: 2.0.0(@swc/core@1.9.0)(@types/node@18.19.64)(typescript@5.7.3)
+ version: 2.0.0(@swc/core@1.10.14)(@types/node@18.19.75)(typescript@5.7.3)
uuid:
specifier: ^9.0.1
version: 9.0.1
devDependencies:
'@apollo/client':
specifier: ^3.11.8
- version: 3.11.8(@types/react@18.2.73)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0)
+ version: 3.11.8(@types/react@18.2.73)(graphql@16.10.0)(react-dom@18.2.0)(react@18.2.0)
'@faker-js/faker':
specifier: ^8.4.1
version: 8.4.1
'@graphql-codegen/cli':
specifier: 5.0.2
- version: 5.0.2(@babel/core@7.26.0)(@types/node@18.19.64)(graphql@16.8.1)
+ version: 5.0.2(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0)
'@graphql-codegen/introspection':
specifier: 4.0.3
- version: 4.0.3(graphql@16.8.1)
+ version: 4.0.3(graphql@16.10.0)
'@graphql-codegen/typescript':
specifier: 4.0.6
- version: 4.0.6(graphql@16.8.1)
+ version: 4.0.6(graphql@16.10.0)
'@graphql-codegen/typescript-resolvers':
specifier: 4.0.6
- version: 4.0.6(graphql@16.8.1)
+ version: 4.0.6(graphql@16.10.0)
'@types/koa':
specifier: 2.15.0
version: 2.15.0
@@ -299,7 +299,7 @@ importers:
version: 14.0.0-beta.19
node-mocks-http:
specifier: ^1.16.2
- version: 1.16.2(@types/node@18.19.64)
+ version: 1.16.2(@types/node@18.19.75)
openapi-types:
specifier: ^12.1.3
version: 12.1.3
@@ -317,7 +317,7 @@ importers:
version: 8.2.0
'@apollo/server':
specifier: ^4.11.2
- version: 4.11.2(graphql@16.8.1)
+ version: 4.11.2(graphql@16.10.0)
'@as-integrations/koa':
specifier: ^1.1.1
version: 1.1.1(@apollo/server@4.11.2)(koa@2.15.3)
@@ -329,13 +329,13 @@ importers:
version: 8.4.1
'@graphql-tools/graphql-file-loader':
specifier: ^8.0.12
- version: 8.0.12(graphql@16.8.1)
+ version: 8.0.12(graphql@16.10.0)
'@graphql-tools/load':
specifier: ^8.0.12
- version: 8.0.12(graphql@16.8.1)
+ version: 8.0.12(graphql@16.10.0)
'@graphql-tools/schema':
specifier: ^10.0.16
- version: 10.0.16(graphql@16.8.1)
+ version: 10.0.16(graphql@16.10.0)
'@interledger/http-signature-utils':
specifier: 2.0.2
version: 2.0.2
@@ -410,13 +410,13 @@ importers:
version: 1.0.2
graphql:
specifier: ^16.8.1
- version: 16.8.1
+ version: 16.10.0
graphql-middleware:
specifier: ^6.1.35
- version: 6.1.35(graphql@16.8.1)
+ version: 6.1.35(graphql@16.10.0)
graphql-scalars:
specifier: ^1.23.0
- version: 1.23.0(graphql@16.8.1)
+ version: 1.23.0(graphql@16.10.0)
ilp-packet:
specifier: 3.1.4-alpha.2
version: 3.1.4-alpha.2
@@ -477,22 +477,22 @@ importers:
devDependencies:
'@apollo/client':
specifier: ^3.11.8
- version: 3.11.8(@types/react@18.2.73)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0)
+ version: 3.11.8(@types/react@18.2.73)(graphql@16.10.0)(react-dom@18.2.0)(react@18.2.0)
'@graphql-codegen/cli':
specifier: 5.0.2
- version: 5.0.2(@babel/core@7.26.0)(@types/node@18.19.64)(graphql@16.8.1)
+ version: 5.0.2(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0)
'@graphql-codegen/introspection':
specifier: 4.0.3
- version: 4.0.3(graphql@16.8.1)
+ version: 4.0.3(graphql@16.10.0)
'@graphql-codegen/typescript':
specifier: 4.0.6
- version: 4.0.6(graphql@16.8.1)
+ version: 4.0.6(graphql@16.10.0)
'@graphql-codegen/typescript-operations':
specifier: ^4.2.0
- version: 4.2.0(graphql@16.8.1)
+ version: 4.2.0(graphql@16.10.0)
'@graphql-codegen/typescript-resolvers':
specifier: 4.0.6
- version: 4.0.6(graphql@16.8.1)
+ version: 4.0.6(graphql@16.10.0)
'@types/koa':
specifier: 2.15.0
version: 2.15.0
@@ -537,7 +537,7 @@ importers:
version: 14.0.0-beta.19
node-mocks-http:
specifier: ^1.16.2
- version: 1.16.2(@types/node@18.19.64)
+ version: 1.16.2(@types/node@18.19.75)
openapi-types:
specifier: ^12.1.3
version: 12.1.3
@@ -555,7 +555,7 @@ importers:
version: 0.2.3
ts-node-dev:
specifier: ^2.0.0
- version: 2.0.0(@swc/core@1.9.0)(@types/node@18.19.64)(typescript@5.7.3)
+ version: 2.0.0(@swc/core@1.10.14)(@types/node@18.19.75)(typescript@5.7.3)
packages/documentation:
dependencies:
@@ -597,7 +597,7 @@ importers:
dependencies:
'@apollo/client':
specifier: ^3.11.8
- version: 3.11.8(@types/react@18.2.73)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0)
+ version: 3.11.8(@types/react@18.2.73)(graphql@16.10.0)(react-dom@18.2.0)(react@18.2.0)
'@headlessui/react':
specifier: ^1.7.19
version: 1.7.19(react-dom@18.2.0)(react@18.2.0)
@@ -606,7 +606,7 @@ importers:
version: 1.9.0
'@ory/integrations':
specifier: ^1.1.5
- version: 1.1.5(@ory/client@1.9.0)(next@15.0.2)
+ version: 1.1.5(@ory/client@1.9.0)(next@15.1.6)
'@remix-run/node':
specifier: ^2.13.1
version: 2.13.1(typescript@5.7.3)
@@ -624,7 +624,7 @@ importers:
version: 0.7.1
graphql:
specifier: ^16.8.1
- version: 16.8.1
+ version: 16.10.0
ilp-packet:
specifier: 3.1.4-alpha.2
version: 3.1.4-alpha.2
@@ -706,13 +706,13 @@ importers:
dependencies:
'@apollo/client':
specifier: ^3.11.8
- version: 3.11.8(@types/react@18.2.73)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0)
+ version: 3.11.8(@types/react@18.2.73)(graphql@16.10.0)(react-dom@18.2.0)(react@18.2.0)
'@interledger/http-signature-utils':
specifier: 2.0.2
version: 2.0.2
graphql:
specifier: ^16.8.1
- version: 16.8.1
+ version: 16.10.0
pino:
specifier: ^8.19.0
version: 8.19.0
@@ -757,48 +757,21 @@ importers:
test/integration:
devDependencies:
- '@apollo/client':
- specifier: ^3.11.8
- version: 3.11.8(@types/react@18.2.73)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0)
- '@interledger/http-signature-utils':
- specifier: 2.0.2
- version: 2.0.2
'@interledger/open-payments':
specifier: 6.13.2
version: 6.13.2
- '@koa/bodyparser':
- specifier: ^5.1.1
- version: 5.1.1(koa@2.15.3)
- '@types/koa':
- specifier: 2.15.0
- version: 2.15.0
- '@types/koa-bodyparser':
- specifier: ^4.3.12
- version: 4.3.12
'@types/node':
specifier: ^20.14.15
version: 20.14.15
- dotenv:
- specifier: ^16.4.7
- version: 16.4.7
- graphql:
- specifier: ^16.8.1
- version: 16.8.1
hostile:
specifier: ^1.4.0
version: 1.4.0
- json-canonicalize:
- specifier: ^1.0.6
- version: 1.0.6
- koa:
- specifier: ^2.15.3
- version: 2.15.3
mock-account-service-lib:
specifier: workspace:*
version: link:../../packages/mock-account-service-lib
- yaml:
- specifier: ^2.7.0
- version: 2.7.0
+ test-lib:
+ specifier: workspace:*
+ version: link:../test-lib
test/performance:
dependencies:
@@ -826,11 +799,47 @@ importers:
version: 1.0.6
webpack:
specifier: ^5.97.1
- version: 5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1)
+ version: 5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1)
webpack-cli:
specifier: ^6.0.1
version: 6.0.1(webpack@5.97.1)
+ test/test-lib:
+ devDependencies:
+ '@apollo/client':
+ specifier: ^3.11.8
+ version: 3.11.8(@types/react@18.2.73)(graphql@16.10.0)(react-dom@18.2.0)(react@18.2.0)
+ '@interledger/http-signature-utils':
+ specifier: 2.0.2
+ version: 2.0.2
+ '@interledger/open-payments':
+ specifier: 6.13.2
+ version: 6.13.2
+ '@koa/bodyparser':
+ specifier: ^5.1.1
+ version: 5.1.1(koa@2.15.3)
+ '@types/koa':
+ specifier: 2.15.0
+ version: 2.15.0
+ '@types/koa-bodyparser':
+ specifier: ^4.3.12
+ version: 4.3.12
+ '@types/node':
+ specifier: ^20.14.15
+ version: 20.14.15
+ graphql:
+ specifier: ^16.8.1
+ version: 16.10.0
+ json-canonicalize:
+ specifier: ^1.0.6
+ version: 1.0.6
+ mock-account-service-lib:
+ specifier: workspace:*
+ version: link:../../packages/mock-account-service-lib
+ yaml:
+ specifier: ^2.7.0
+ version: 2.7.0
+
packages:
/@aashutoshrathi/word-wrap@1.2.6:
@@ -886,15 +895,15 @@ packages:
'@types/json-schema': 7.0.15
js-yaml: 4.1.0
- /@apollo/cache-control-types@1.0.3(graphql@16.8.1):
+ /@apollo/cache-control-types@1.0.3(graphql@16.10.0):
resolution: {integrity: sha512-F17/vCp7QVwom9eG7ToauIKdAxpSoadsJnqIfyryLFSkLSOEqu+eC5Z3N8OXcUVStuOMcNHlyraRsA6rRICu4g==}
peerDependencies:
graphql: 14.x || 15.x || 16.x
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
dev: false
- /@apollo/client@3.11.8(@types/react@18.2.73)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0):
+ /@apollo/client@3.11.8(@types/react@18.2.73)(graphql@16.10.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-CgG1wbtMjsV2pRGe/eYITmV5B8lXUCYljB2gB/6jWTFQcrvirUVvKg7qtFdjYkQSFbIffU1IDyxgeaN81eTjbA==}
peerDependencies:
graphql: ^15.0.0 || ^16.0.0
@@ -912,12 +921,12 @@ packages:
subscriptions-transport-ws:
optional: true
dependencies:
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
'@wry/caches': 1.0.1
'@wry/equality': 0.5.6
'@wry/trie': 0.5.0
- graphql: 16.8.1
- graphql-tag: 2.12.6(graphql@16.8.1)
+ graphql: 16.10.0
+ graphql-tag: 2.12.6(graphql@16.10.0)
hoist-non-react-statics: 3.3.2
optimism: 0.18.0
prop-types: 15.8.1
@@ -927,7 +936,7 @@ packages:
response-iterator: 0.2.6
symbol-observable: 4.0.0
ts-invariant: 0.10.3
- tslib: 2.8.0
+ tslib: 2.8.1
zen-observable-ts: 1.2.5
transitivePeerDependencies:
- '@types/react'
@@ -951,7 +960,7 @@ packages:
long: 4.0.0
dev: false
- /@apollo/server-gateway-interface@1.1.1(graphql@16.8.1):
+ /@apollo/server-gateway-interface@1.1.1(graphql@16.10.0):
resolution: {integrity: sha512-pGwCl/po6+rxRmDMFgozKQo2pbsSwE91TpsDBAOgf74CRDPXHHtM88wbwjab0wMMZh95QfR45GGyDIdhY24bkQ==}
peerDependencies:
graphql: 14.x || 15.x || 16.x
@@ -960,33 +969,33 @@ packages:
'@apollo/utils.fetcher': 2.0.1
'@apollo/utils.keyvaluecache': 2.1.1
'@apollo/utils.logger': 2.0.1
- graphql: 16.8.1
+ graphql: 16.10.0
dev: false
- /@apollo/server@4.11.2(graphql@16.8.1):
+ /@apollo/server@4.11.2(graphql@16.10.0):
resolution: {integrity: sha512-WUTHY7DDek8xAMn4Woa9Bl8duQUDzRYQkosX/d1DtCsBWESZyApR7ndnI5d6+W4KSTtqBHhJFkusEI7CWuIJXg==}
engines: {node: '>=14.16.0'}
peerDependencies:
graphql: ^16.6.0
dependencies:
- '@apollo/cache-control-types': 1.0.3(graphql@16.8.1)
- '@apollo/server-gateway-interface': 1.1.1(graphql@16.8.1)
+ '@apollo/cache-control-types': 1.0.3(graphql@16.10.0)
+ '@apollo/server-gateway-interface': 1.1.1(graphql@16.10.0)
'@apollo/usage-reporting-protobuf': 4.1.1
'@apollo/utils.createhash': 2.0.1
'@apollo/utils.fetcher': 2.0.1
'@apollo/utils.isnodelike': 2.0.1
'@apollo/utils.keyvaluecache': 2.1.1
'@apollo/utils.logger': 2.0.1
- '@apollo/utils.usagereporting': 2.1.0(graphql@16.8.1)
+ '@apollo/utils.usagereporting': 2.1.0(graphql@16.10.0)
'@apollo/utils.withrequired': 2.0.1
- '@graphql-tools/schema': 9.0.19(graphql@16.8.1)
+ '@graphql-tools/schema': 9.0.19(graphql@16.10.0)
'@types/express': 4.17.21
'@types/express-serve-static-core': 4.17.43
'@types/node-fetch': 2.6.11
async-retry: 1.3.3
cors: 2.8.5
express: 4.21.1
- graphql: 16.8.1
+ graphql: 16.10.0
loglevel: 1.9.1
lru-cache: 7.18.3
negotiator: 0.6.3
@@ -1013,13 +1022,13 @@ packages:
sha.js: 2.4.11
dev: false
- /@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.8.1):
+ /@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.10.0):
resolution: {integrity: sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
dev: false
/@apollo/utils.fetcher@2.0.1:
@@ -1045,56 +1054,56 @@ packages:
engines: {node: '>=14'}
dev: false
- /@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.8.1):
+ /@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.10.0):
resolution: {integrity: sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
dev: false
- /@apollo/utils.removealiases@2.0.1(graphql@16.8.1):
+ /@apollo/utils.removealiases@2.0.1(graphql@16.10.0):
resolution: {integrity: sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
dev: false
- /@apollo/utils.sortast@2.0.1(graphql@16.8.1):
+ /@apollo/utils.sortast@2.0.1(graphql@16.10.0):
resolution: {integrity: sha512-eciIavsWpJ09za1pn37wpsCGrQNXUhM0TktnZmHwO+Zy9O4fu/WdB4+5BvVhFiZYOXvfjzJUcc+hsIV8RUOtMw==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
lodash.sortby: 4.7.0
dev: false
- /@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.8.1):
+ /@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.10.0):
resolution: {integrity: sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
dev: false
- /@apollo/utils.usagereporting@2.1.0(graphql@16.8.1):
+ /@apollo/utils.usagereporting@2.1.0(graphql@16.10.0):
resolution: {integrity: sha512-LPSlBrn+S17oBy5eWkrRSGb98sWmnEzo3DPTZgp8IQc8sJe0prDgDuppGq4NeQlpoqEHz0hQeYHAOA0Z3aQsxQ==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
dependencies:
'@apollo/usage-reporting-protobuf': 4.1.1
- '@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.8.1)
- '@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.8.1)
- '@apollo/utils.removealiases': 2.0.1(graphql@16.8.1)
- '@apollo/utils.sortast': 2.0.1(graphql@16.8.1)
- '@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.8.1)
- graphql: 16.8.1
+ '@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.10.0)
+ '@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.10.0)
+ '@apollo/utils.removealiases': 2.0.1(graphql@16.10.0)
+ '@apollo/utils.sortast': 2.0.1(graphql@16.10.0)
+ '@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.10.0)
+ graphql: 16.10.0
dev: false
/@apollo/utils.withrequired@2.0.1:
@@ -1102,7 +1111,7 @@ packages:
engines: {node: '>=14'}
dev: false
- /@ardatan/relay-compiler@12.0.0(graphql@16.8.1):
+ /@ardatan/relay-compiler@12.0.0(graphql@16.10.0):
resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==}
hasBin: true
peerDependencies:
@@ -1119,7 +1128,7 @@ packages:
fb-watchman: 2.0.1
fbjs: 3.0.4
glob: 7.2.3
- graphql: 16.8.1
+ graphql: 16.10.0
immutable: 3.7.6
invariant: 2.2.4
nullthrows: 1.1.1
@@ -1147,7 +1156,7 @@ packages:
'@apollo/server': ^4.0.0
koa: ^2.0.0
dependencies:
- '@apollo/server': 4.11.2(graphql@16.8.1)
+ '@apollo/server': 4.11.2(graphql@16.10.0)
koa: 2.15.3
dev: false
@@ -1311,6 +1320,11 @@ packages:
/@babel/compat-data@7.26.2:
resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==}
engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/compat-data@7.26.5:
+ resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==}
+ engines: {node: '>=6.9.0'}
/@babel/core@7.26.0:
resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
@@ -1333,6 +1347,29 @@ packages:
semver: 6.3.1
transitivePeerDependencies:
- supports-color
+ dev: true
+
+ /@babel/core@7.26.7:
+ resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.5
+ '@babel/helper-compilation-targets': 7.26.5
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7)
+ '@babel/helpers': 7.26.7
+ '@babel/parser': 7.26.7
+ '@babel/template': 7.25.9
+ '@babel/traverse': 7.26.7
+ '@babel/types': 7.26.7
+ convert-source-map: 2.0.0
+ debug: 4.4.0
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
/@babel/eslint-parser@7.21.8(@babel/core@7.26.0)(eslint@8.57.1):
resolution: {integrity: sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ==}
@@ -1377,7 +1414,6 @@ packages:
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.0.2
- dev: true
/@babel/helper-annotate-as-pure@7.24.7:
resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
@@ -1402,6 +1438,17 @@ packages:
browserslist: 4.24.2
lru-cache: 5.1.1
semver: 6.3.1
+ dev: true
+
+ /@babel/helper-compilation-targets@7.26.5:
+ resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/compat-data': 7.26.5
+ '@babel/helper-validator-option': 7.25.9
+ browserslist: 4.24.4
+ lru-cache: 5.1.1
+ semver: 6.3.1
/@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.26.0):
resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==}
@@ -1526,6 +1573,20 @@ packages:
'@babel/traverse': 7.25.9
transitivePeerDependencies:
- supports-color
+ dev: true
+
+ /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7):
+ resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.26.7
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+ '@babel/traverse': 7.25.9
+ transitivePeerDependencies:
+ - supports-color
/@babel/helper-optimise-call-expression@7.18.6:
resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
@@ -1658,6 +1719,14 @@ packages:
dependencies:
'@babel/template': 7.25.9
'@babel/types': 7.26.0
+ dev: true
+
+ /@babel/helpers@7.26.7:
+ resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.25.9
+ '@babel/types': 7.26.7
/@babel/parser@7.23.0:
resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==}
@@ -1681,6 +1750,13 @@ packages:
dependencies:
'@babel/types': 7.26.5
+ /@babel/parser@7.26.7:
+ resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.26.7
+
/@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0):
resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==}
engines: {node: '>=6.9.0'}
@@ -1826,13 +1902,13 @@ packages:
'@babel/helper-plugin-utils': 7.25.9
dev: true
- /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.26.0):
+ /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.26.7):
resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.26.7
'@babel/helper-plugin-utils': 7.25.9
dev: true
@@ -3018,6 +3094,20 @@ packages:
- supports-color
dev: true
+ /@babel/traverse@7.26.7:
+ resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.5
+ '@babel/parser': 7.26.7
+ '@babel/template': 7.25.9
+ '@babel/types': 7.26.7
+ debug: 4.4.0
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
/@babel/types@7.23.0:
resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
engines: {node: '>=6.9.0'}
@@ -3041,6 +3131,13 @@ packages:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
+ /@babel/types@7.26.7:
+ resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
/@balena/dockerignore@1.0.2:
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
dev: true
@@ -3127,6 +3224,16 @@ packages:
tslib: 2.8.1
dev: false
+ /@envelop/core@5.0.3:
+ resolution: {integrity: sha512-SE3JxL7odst8igN6x77QWyPpXKXz/Hs5o5Y27r+9Br6WHIhkW90lYYVITWIJQ/qYgn5PkpbaVgeFY9rgqQaZ/A==}
+ engines: {node: '>=18.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@envelop/types': 5.0.0
+ tslib: 2.8.1
+ dev: false
+ optional: true
+
/@envelop/types@4.0.1:
resolution: {integrity: sha512-ULo27/doEsP7uUhm2iTnElx13qTO6I5FKvmLoX41cpfuw8x6e0NUFknoqhEsLzAbgz8xVS5mjwcxGCXh4lDYzg==}
engines: {node: '>=16.0.0'}
@@ -3799,7 +3906,7 @@ packages:
dependencies:
graphql: 16.10.0
optionalDependencies:
- '@envelop/core': 5.0.2
+ '@envelop/core': 5.0.3
'@escape.tech/graphql-armor-types': 0.5.0
dev: false
@@ -3829,7 +3936,7 @@ packages:
dependencies:
graphql: 16.10.0
optionalDependencies:
- '@envelop/core': 5.0.2
+ '@envelop/core': 5.0.3
'@escape.tech/graphql-armor-types': 0.5.0
dev: false
@@ -3856,14 +3963,14 @@ packages:
'@escape.tech/graphql-armor-types':
optional: true
dependencies:
- '@apollo/server': 4.11.2(graphql@16.8.1)
+ '@apollo/server': 4.11.2(graphql@16.10.0)
'@escape.tech/graphql-armor-block-field-suggestions': 2.1.0
'@escape.tech/graphql-armor-cost-limit': 2.1.0
'@escape.tech/graphql-armor-max-aliases': 2.3.0
'@escape.tech/graphql-armor-max-depth': 2.2.0
'@escape.tech/graphql-armor-max-directives': 2.1.0
'@escape.tech/graphql-armor-max-tokens': 2.3.0
- graphql: 16.8.1
+ graphql: 16.10.0
dev: false
/@eslint-community/eslint-utils@4.4.0(eslint@8.57.1):
@@ -3945,17 +4052,17 @@ packages:
engines: {node: '>=14'}
dev: true
- /@graphql-codegen/add@5.0.2(graphql@16.8.1):
+ /@graphql-codegen/add@5.0.2(graphql@16.10.0):
resolution: {integrity: sha512-ouBkSvMFUhda5VoKumo/ZvsZM9P5ZTyDsI8LW18VxSNWOjrTeLXBWHG8Gfaai0HwhflPtCYVABbriEcOmrRShQ==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.6.2
dev: true
- /@graphql-codegen/cli@5.0.2(@babel/core@7.26.0)(@types/node@18.19.64)(graphql@16.8.1):
+ /@graphql-codegen/cli@5.0.2(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0):
resolution: {integrity: sha512-MBIaFqDiLKuO4ojN6xxG9/xL9wmfD3ZjZ7RsPjwQnSHBCUXnEkdKvX+JVpx87Pq29Ycn8wTJUguXnTZ7Di0Mlw==}
hasBin: true
peerDependencies:
@@ -3968,26 +4075,26 @@ packages:
'@babel/generator': 7.23.0
'@babel/template': 7.22.15
'@babel/types': 7.23.0
- '@graphql-codegen/client-preset': 4.2.2(graphql@16.8.1)
- '@graphql-codegen/core': 4.0.2(graphql@16.8.1)
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1)
- '@graphql-tools/code-file-loader': 8.0.1(@babel/core@7.26.0)(graphql@16.8.1)
- '@graphql-tools/git-loader': 8.0.1(@babel/core@7.26.0)(graphql@16.8.1)
- '@graphql-tools/github-loader': 8.0.0(@babel/core@7.26.0)(@types/node@18.19.64)(graphql@16.8.1)
- '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.8.1)
- '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1)
- '@graphql-tools/load': 8.0.12(graphql@16.8.1)
- '@graphql-tools/prisma-loader': 8.0.1(@types/node@18.19.64)(graphql@16.8.1)
- '@graphql-tools/url-loader': 8.0.0(@types/node@18.19.64)(graphql@16.8.1)
- '@graphql-tools/utils': 10.0.11(graphql@16.8.1)
- '@whatwg-node/fetch': 0.8.1(@types/node@18.19.64)
+ '@graphql-codegen/client-preset': 4.2.2(graphql@16.10.0)
+ '@graphql-codegen/core': 4.0.2(graphql@16.10.0)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.10.0)
+ '@graphql-tools/code-file-loader': 8.0.1(@babel/core@7.26.7)(graphql@16.10.0)
+ '@graphql-tools/git-loader': 8.0.1(@babel/core@7.26.7)(graphql@16.10.0)
+ '@graphql-tools/github-loader': 8.0.0(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0)
+ '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.10.0)
+ '@graphql-tools/json-file-loader': 8.0.0(graphql@16.10.0)
+ '@graphql-tools/load': 8.0.12(graphql@16.10.0)
+ '@graphql-tools/prisma-loader': 8.0.1(@types/node@18.19.75)(graphql@16.10.0)
+ '@graphql-tools/url-loader': 8.0.0(@types/node@18.19.75)(graphql@16.10.0)
+ '@graphql-tools/utils': 10.0.11(graphql@16.10.0)
+ '@whatwg-node/fetch': 0.8.1(@types/node@18.19.75)
chalk: 4.1.2
cosmiconfig: 8.1.3
debounce: 1.2.1
detect-indent: 6.1.0
- graphql: 16.8.1
- graphql-config: 5.0.2(@types/node@18.19.64)(graphql@16.8.1)
+ graphql: 16.10.0
+ graphql-config: 5.0.2(@types/node@18.19.75)(graphql@16.10.0)
inquirer: 8.2.4
is-glob: 4.0.3
jiti: 1.20.0
@@ -4012,176 +4119,176 @@ packages:
- utf-8-validate
dev: true
- /@graphql-codegen/client-preset@4.2.2(graphql@16.8.1):
+ /@graphql-codegen/client-preset@4.2.2(graphql@16.10.0):
resolution: {integrity: sha512-DF9pNWj3TEdA90E9FH5SsUIqiZfr872vqaQOspLVuVXGsaDx8F/JLLzaN+7ucmoo0ff/bLW8munVXYXTmgwwEA==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
'@babel/helper-plugin-utils': 7.25.9
'@babel/template': 7.25.9
- '@graphql-codegen/add': 5.0.2(graphql@16.8.1)
- '@graphql-codegen/gql-tag-operations': 4.0.4(graphql@16.8.1)
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-codegen/typed-document-node': 5.0.4(graphql@16.8.1)
- '@graphql-codegen/typescript': 4.0.6(graphql@16.8.1)
- '@graphql-codegen/typescript-operations': 4.2.0(graphql@16.8.1)
- '@graphql-codegen/visitor-plugin-common': 4.1.2(graphql@16.8.1)
- '@graphql-tools/documents': 1.0.0(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-codegen/add': 5.0.2(graphql@16.10.0)
+ '@graphql-codegen/gql-tag-operations': 4.0.4(graphql@16.10.0)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-codegen/typed-document-node': 5.0.4(graphql@16.10.0)
+ '@graphql-codegen/typescript': 4.0.6(graphql@16.10.0)
+ '@graphql-codegen/typescript-operations': 4.2.0(graphql@16.10.0)
+ '@graphql-codegen/visitor-plugin-common': 4.1.2(graphql@16.10.0)
+ '@graphql-tools/documents': 1.0.0(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@graphql-codegen/core@4.0.2(graphql@16.8.1):
+ /@graphql-codegen/core@4.0.2(graphql@16.10.0):
resolution: {integrity: sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-tools/schema': 10.0.16(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-tools/schema': 10.0.16(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.6.2
dev: true
- /@graphql-codegen/gql-tag-operations@4.0.4(graphql@16.8.1):
+ /@graphql-codegen/gql-tag-operations@4.0.4(graphql@16.10.0):
resolution: {integrity: sha512-dypul0iDLjb07yv+/cRb6qPbn42cFPcwlsJertVl9G6qkS4+3V4806WwSfUht4QVMWnvGfgDkJJqG0yUVKOHwA==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-codegen/visitor-plugin-common': 4.1.2(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-codegen/visitor-plugin-common': 4.1.2(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
auto-bind: 4.0.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@graphql-codegen/introspection@4.0.3(graphql@16.8.1):
+ /@graphql-codegen/introspection@4.0.3(graphql@16.10.0):
resolution: {integrity: sha512-4cHRG15Zu4MXMF4wTQmywNf4+fkDYv5lTbzraVfliDnB8rJKcaurQpRBi11KVuQUe24YTq/Cfk4uwewfNikWoA==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@graphql-codegen/plugin-helpers@5.0.3(graphql@16.8.1):
+ /@graphql-codegen/plugin-helpers@5.0.3(graphql@16.10.0):
resolution: {integrity: sha512-yZ1rpULIWKBZqCDlvGIJRSyj1B2utkEdGmXZTBT/GVayP4hyRYlkd36AJV/LfEsVD8dnsKL5rLz2VTYmRNlJ5Q==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
change-case-all: 1.0.15
common-tags: 1.8.2
- graphql: 16.8.1
+ graphql: 16.10.0
import-from: 4.0.0
lodash: 4.17.21
tslib: 2.6.2
dev: true
- /@graphql-codegen/schema-ast@4.0.2(graphql@16.8.1):
+ /@graphql-codegen/schema-ast@4.0.2(graphql@16.10.0):
resolution: {integrity: sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.6.2
dev: true
- /@graphql-codegen/typed-document-node@5.0.4(graphql@16.8.1):
+ /@graphql-codegen/typed-document-node@5.0.4(graphql@16.10.0):
resolution: {integrity: sha512-t66Z6erQ4Dh1j6f9pRZmc8uYtHoUI3A49tLmJAlg9/3IV0kCmwrWKJut/G8SeOefDLG8cXBTVtI/YuZOe1Te+w==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-codegen/visitor-plugin-common': 4.1.2(graphql@16.8.1)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-codegen/visitor-plugin-common': 4.1.2(graphql@16.10.0)
auto-bind: 4.0.0
change-case-all: 1.0.15
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@graphql-codegen/typescript-operations@4.2.0(graphql@16.8.1):
+ /@graphql-codegen/typescript-operations@4.2.0(graphql@16.10.0):
resolution: {integrity: sha512-lmuwYb03XC7LNRS8oo9M4/vlOrq/wOKmTLBHlltK2YJ1BO/4K/Q9Jdv/jDmJpNydHVR1fmeF4wAfsIp1f9JibA==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-codegen/typescript': 4.0.6(graphql@16.8.1)
- '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.8.1)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-codegen/typescript': 4.0.6(graphql@16.10.0)
+ '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.10.0)
auto-bind: 4.0.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@graphql-codegen/typescript-resolvers@4.0.6(graphql@16.8.1):
+ /@graphql-codegen/typescript-resolvers@4.0.6(graphql@16.10.0):
resolution: {integrity: sha512-7OBFzZ2xSkYgMgcc1A3xNqbBHHSQXBesLrG86Sh+Jj0PQQB3Om8j1HSFs64PD/l5Kri2dXgm3oim/89l3Rl3lw==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-codegen/typescript': 4.0.6(graphql@16.8.1)
- '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.0(graphql@16.8.1)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-codegen/typescript': 4.0.6(graphql@16.10.0)
+ '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.0(graphql@16.10.0)
auto-bind: 4.0.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@graphql-codegen/typescript@4.0.6(graphql@16.8.1):
+ /@graphql-codegen/typescript@4.0.6(graphql@16.10.0):
resolution: {integrity: sha512-IBG4N+Blv7KAL27bseruIoLTjORFCT3r+QYyMC3g11uY3/9TPpaUyjSdF70yBe5GIQ6dAgDU+ENUC1v7EPi0rw==}
peerDependencies:
graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-codegen/schema-ast': 4.0.2(graphql@16.8.1)
- '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.8.1)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-codegen/schema-ast': 4.0.2(graphql@16.10.0)
+ '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.10.0)
auto-bind: 4.0.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.6.2
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@graphql-codegen/visitor-plugin-common@4.1.2(graphql@16.8.1):
+ /@graphql-codegen/visitor-plugin-common@4.1.2(graphql@16.10.0):
resolution: {integrity: sha512-yk7iEAL1kYZ2Gi/pvVjdsZhul5WsYEM4Zcgh2Ev15VicMdJmPHsMhNUsZWyVJV0CaQCYpNOFlGD/11Ea3pn4GA==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-tools/optimize': 2.0.0(graphql@16.8.1)
- '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-tools/optimize': 2.0.0(graphql@16.10.0)
+ '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
auto-bind: 4.0.0
change-case-all: 1.0.15
dependency-graph: 0.11.0
- graphql: 16.8.1
- graphql-tag: 2.12.6(graphql@16.8.1)
+ graphql: 16.10.0
+ graphql-tag: 2.12.6(graphql@16.10.0)
parse-filepath: 1.0.2
tslib: 2.6.2
transitivePeerDependencies:
@@ -4189,20 +4296,20 @@ packages:
- supports-color
dev: true
- /@graphql-codegen/visitor-plugin-common@5.1.0(graphql@16.8.1):
+ /@graphql-codegen/visitor-plugin-common@5.1.0(graphql@16.10.0):
resolution: {integrity: sha512-eamQxtA9bjJqI2lU5eYoA1GbdMIRT2X8m8vhWYsVQVWD3qM7sx/IqJU0kx0J3Vd4/CSd36BzL6RKwksibytDIg==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.8.1)
- '@graphql-tools/optimize': 2.0.0(graphql@16.8.1)
- '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.10.0)
+ '@graphql-tools/optimize': 2.0.0(graphql@16.10.0)
+ '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
auto-bind: 4.0.0
change-case-all: 1.0.15
dependency-graph: 0.11.0
- graphql: 16.8.1
- graphql-tag: 2.12.6(graphql@16.8.1)
+ graphql: 16.10.0
+ graphql-tag: 2.12.6(graphql@16.10.0)
parse-filepath: 1.0.2
tslib: 2.6.2
transitivePeerDependencies:
@@ -4221,42 +4328,42 @@ packages:
tslib: 2.8.1
dev: false
- /@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1):
+ /@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.10.0):
resolution: {integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@ardatan/sync-fetch': 0.0.1
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
'@whatwg-node/fetch': 0.9.8
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
transitivePeerDependencies:
- encoding
dev: true
- /@graphql-tools/batch-execute@8.5.1(graphql@16.8.1):
+ /@graphql-tools/batch-execute@8.5.1(graphql@16.10.0):
resolution: {integrity: sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 8.9.0(graphql@16.8.1)
+ '@graphql-tools/utils': 8.9.0(graphql@16.10.0)
dataloader: 2.1.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.11
dev: false
- /@graphql-tools/batch-execute@9.0.0(graphql@16.8.1):
+ /@graphql-tools/batch-execute@9.0.0(graphql@16.10.0):
resolution: {integrity: sha512-lT9/1XmPSYzBcEybXPLsuA6C5E0t8438PVUELABcqdvwHgZ3VOOx29MLBEqhr2oewOlDChH6PXNkfxoOoAuzRg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
dataloader: 2.2.2
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.12
dev: true
@@ -4273,16 +4380,16 @@ packages:
tslib: 2.8.1
dev: false
- /@graphql-tools/code-file-loader@8.0.1(@babel/core@7.26.0)(graphql@16.8.1):
+ /@graphql-tools/code-file-loader@8.0.1(@babel/core@7.26.7)(graphql@16.10.0):
resolution: {integrity: sha512-pmg81lsIXGW3uW+nFSCIG0lFQIxWVbgDjeBkSWlnP8CZsrHTQEkB53DT7t4BHLryoxDS4G4cPxM52yNINDSL8w==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/graphql-tag-pluck': 8.0.1(@babel/core@7.26.0)(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/graphql-tag-pluck': 8.0.1(@babel/core@7.26.7)(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
globby: 11.1.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
unixify: 1.0.0
transitivePeerDependencies:
@@ -4290,18 +4397,18 @@ packages:
- supports-color
dev: true
- /@graphql-tools/delegate@10.0.0(graphql@16.8.1):
+ /@graphql-tools/delegate@10.0.0(graphql@16.10.0):
resolution: {integrity: sha512-ZW5/7Q0JqUM+guwn8/cM/1Hz16Zvj6WR6r3gnOwoPO7a9bCbe8QTCk4itT/EO+RiGT8RLUPYaunWR9jxfNqqOA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/batch-execute': 9.0.0(graphql@16.8.1)
- '@graphql-tools/executor': 1.1.0(graphql@16.8.1)
- '@graphql-tools/schema': 10.0.16(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/batch-execute': 9.0.0(graphql@16.10.0)
+ '@graphql-tools/executor': 1.1.0(graphql@16.10.0)
+ '@graphql-tools/schema': 10.0.16(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
dataloader: 2.2.2
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.12
dev: true
@@ -4323,27 +4430,27 @@ packages:
tslib: 2.8.1
dev: false
- /@graphql-tools/delegate@8.8.1(graphql@16.8.1):
+ /@graphql-tools/delegate@8.8.1(graphql@16.10.0):
resolution: {integrity: sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/batch-execute': 8.5.1(graphql@16.8.1)
- '@graphql-tools/schema': 8.5.1(graphql@16.8.1)
- '@graphql-tools/utils': 8.9.0(graphql@16.8.1)
+ '@graphql-tools/batch-execute': 8.5.1(graphql@16.10.0)
+ '@graphql-tools/schema': 8.5.1(graphql@16.10.0)
+ '@graphql-tools/utils': 8.9.0(graphql@16.10.0)
dataloader: 2.1.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.4.1
value-or-promise: 1.0.11
dev: false
- /@graphql-tools/documents@1.0.0(graphql@16.8.1):
+ /@graphql-tools/documents@1.0.0(graphql@16.10.0):
resolution: {integrity: sha512-rHGjX1vg/nZ2DKqRGfDPNC55CWZBMldEVcH+91BThRa6JeT80NqXknffLLEZLRUxyikCfkwMsk6xR3UNMqG0Rg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
lodash.sortby: 4.7.0
tslib: 2.8.1
dev: true
@@ -4359,16 +4466,16 @@ packages:
graphql: 16.10.0
dev: false
- /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1):
+ /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.10.0):
resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
'@types/ws': 8.5.3
- graphql: 16.8.1
- graphql-ws: 5.14.0(graphql@16.8.1)
+ graphql: 16.10.0
+ graphql-ws: 5.14.0(graphql@16.10.0)
isomorphic-ws: 5.0.0(ws@8.15.1)
tslib: 2.8.1
ws: 8.15.1
@@ -4396,18 +4503,18 @@ packages:
- utf-8-validate
dev: false
- /@graphql-tools/executor-http@1.0.1(@types/node@18.19.64)(graphql@16.8.1):
+ /@graphql-tools/executor-http@1.0.1(@types/node@18.19.75)(graphql@16.10.0):
resolution: {integrity: sha512-36D2oxVuv7NboFdPPS9MDOICvsg08P1K9xkqcQTB4UQogkUn58ZFfWM+4cZ9rwfNCIPTIzH4quoj7Xo09xbzmw==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
'@repeaterjs/repeater': 3.0.4
'@whatwg-node/fetch': 0.9.8
extract-files: 11.0.0
- graphql: 16.8.1
- meros: 1.2.1(@types/node@18.19.64)
+ graphql: 16.10.0
+ meros: 1.2.1(@types/node@18.19.75)
tslib: 2.8.1
value-or-promise: 1.0.12
transitivePeerDependencies:
@@ -4428,22 +4535,22 @@ packages:
'@whatwg-node/fetch': 0.10.3
extract-files: 11.0.0
graphql: 16.10.0
- meros: 1.2.1(@types/node@18.19.64)
+ meros: 1.2.1(@types/node@18.19.75)
tslib: 2.8.1
value-or-promise: 1.0.12
transitivePeerDependencies:
- '@types/node'
dev: false
- /@graphql-tools/executor-legacy-ws@1.0.1(graphql@16.8.1):
+ /@graphql-tools/executor-legacy-ws@1.0.1(graphql@16.10.0):
resolution: {integrity: sha512-PQrTJ+ncHMEQspBARc2lhwiQFfRAX/z/CsOdZTFjIljOHgRWGAA1DAx7pEN0j6PflbLCfZ3NensNq2jCBwF46w==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
'@types/ws': 8.5.3
- graphql: 16.8.1
+ graphql: 16.10.0
isomorphic-ws: 5.0.0(ws@8.13.0)
tslib: 2.8.1
ws: 8.13.0
@@ -4469,16 +4576,16 @@ packages:
- utf-8-validate
dev: false
- /@graphql-tools/executor@1.1.0(graphql@16.8.1):
+ /@graphql-tools/executor@1.1.0(graphql@16.10.0):
resolution: {integrity: sha512-+1wmnaUHETSYxiK/ELsT60x584Rw3QKBB7F/7fJ83HKPnLifmE2Dm/K9Eyt6L0Ppekf1jNUbWBpmBGb8P5hAeg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
'@repeaterjs/repeater': 3.0.4
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.12
dev: true
@@ -4498,15 +4605,15 @@ packages:
value-or-promise: 1.0.12
dev: false
- /@graphql-tools/git-loader@8.0.1(@babel/core@7.26.0)(graphql@16.8.1):
+ /@graphql-tools/git-loader@8.0.1(@babel/core@7.26.7)(graphql@16.10.0):
resolution: {integrity: sha512-ivNtxD+iEfpPONYKip0kbpZMRdMCNR3HrIui8NCURmUdvBYGaGcbB3VrGMhxwZuzc+ybhs2ralPt1F8Oxq2jLA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/graphql-tag-pluck': 8.0.1(@babel/core@7.26.0)(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/graphql-tag-pluck': 8.0.1(@babel/core@7.26.7)(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ graphql: 16.10.0
is-glob: 4.0.3
micromatch: 4.0.8
tslib: 2.8.1
@@ -4516,18 +4623,18 @@ packages:
- supports-color
dev: true
- /@graphql-tools/github-loader@8.0.0(@babel/core@7.26.0)(@types/node@18.19.64)(graphql@16.8.1):
+ /@graphql-tools/github-loader@8.0.0(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0):
resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@ardatan/sync-fetch': 0.0.1
- '@graphql-tools/executor-http': 1.0.1(@types/node@18.19.64)(graphql@16.8.1)
- '@graphql-tools/graphql-tag-pluck': 8.0.1(@babel/core@7.26.0)(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/executor-http': 1.0.1(@types/node@18.19.75)(graphql@16.10.0)
+ '@graphql-tools/graphql-tag-pluck': 8.0.1(@babel/core@7.26.7)(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
'@whatwg-node/fetch': 0.9.8
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.12
transitivePeerDependencies:
@@ -4549,33 +4656,19 @@ packages:
graphql: 16.10.0
tslib: 2.8.1
unixify: 1.0.0
- dev: false
- /@graphql-tools/graphql-file-loader@8.0.12(graphql@16.8.1):
- resolution: {integrity: sha512-fhn6IFAgj/LOM3zlr0KDtcYDZnkWacalHOouNVDat4wzpcD4AWyvlh7PoGx3EaDtnwGqmy/l/FMjwWPTjqd9zw==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- '@graphql-tools/import': 7.0.11(graphql@16.8.1)
- '@graphql-tools/utils': 10.7.2(graphql@16.8.1)
- globby: 11.1.0
- graphql: 16.8.1
- tslib: 2.8.1
- unixify: 1.0.0
-
- /@graphql-tools/graphql-tag-pluck@8.0.1(@babel/core@7.26.0)(graphql@16.8.1):
+ /@graphql-tools/graphql-tag-pluck@8.0.1(@babel/core@7.26.7)(graphql@16.10.0):
resolution: {integrity: sha512-4sfBJSoXxVB4rRCCp2GTFhAYsUJgAPSKxSV+E3Voc600mK52JO+KsHCCTnPgCeyJFMNR9l94J6+tqxVKmlqKvw==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@babel/parser': 7.26.2
- '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.26.0)
+ '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.26.7)
'@babel/traverse': 7.25.9
'@babel/types': 7.26.0
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
transitivePeerDependencies:
- '@babel/core'
@@ -4592,28 +4685,16 @@ packages:
graphql: 16.10.0
resolve-from: 5.0.0
tslib: 2.8.1
- dev: false
-
- /@graphql-tools/import@7.0.11(graphql@16.8.1):
- resolution: {integrity: sha512-zUru+YhjLUpdyNnTKHXLBjV6bh+CpxVhxJr5mgsFT/Lk6fdpjkEyk+hzdgINuo5GbIulFa6KpLZUBoZsDARBpQ==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- '@graphql-tools/utils': 10.7.2(graphql@16.8.1)
- graphql: 16.8.1
- resolve-from: 5.0.0
- tslib: 2.8.1
- /@graphql-tools/json-file-loader@8.0.0(graphql@16.8.1):
+ /@graphql-tools/json-file-loader@8.0.0(graphql@16.10.0):
resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
globby: 11.1.0
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
unixify: 1.0.0
dev: true
@@ -4642,37 +4723,24 @@ packages:
graphql: 16.10.0
p-limit: 3.1.0
tslib: 2.8.1
- dev: false
- /@graphql-tools/load@8.0.12(graphql@16.8.1):
- resolution: {integrity: sha512-ZFqerNO7at64N4GHT76k0AkwToHNHVkpAh1iFDRHvvFpESpZ3LDz9Y6cs54Sf6zhATecDuUSwbWZoEE2WIDExA==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- '@graphql-tools/schema': 10.0.16(graphql@16.8.1)
- '@graphql-tools/utils': 10.7.2(graphql@16.8.1)
- graphql: 16.8.1
- p-limit: 3.1.0
- tslib: 2.8.1
-
- /@graphql-tools/merge@8.3.1(graphql@16.8.1):
+ /@graphql-tools/merge@8.3.1(graphql@16.10.0):
resolution: {integrity: sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 8.9.0(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/utils': 8.9.0(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
dev: false
- /@graphql-tools/merge@8.4.2(graphql@16.8.1):
+ /@graphql-tools/merge@8.4.2(graphql@16.10.0):
resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 9.2.1(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/utils': 9.2.1(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
dev: false
@@ -4685,55 +4753,44 @@ packages:
'@graphql-tools/utils': 10.7.2(graphql@16.10.0)
graphql: 16.10.0
tslib: 2.8.1
- dev: false
- /@graphql-tools/merge@9.0.17(graphql@16.8.1):
- resolution: {integrity: sha512-3K4g8KKbIqfdmK0L5+VtZsqwAeElPkvT5ejiH+KEhn2wyKNCi4HYHxpQk8xbu+dSwLlm9Lhet1hylpo/mWCkuQ==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- '@graphql-tools/utils': 10.7.2(graphql@16.8.1)
- graphql: 16.8.1
- tslib: 2.8.1
-
- /@graphql-tools/merge@9.0.3(graphql@16.8.1):
+ /@graphql-tools/merge@9.0.3(graphql@16.10.0):
resolution: {integrity: sha512-FeKv9lKLMwqDu0pQjPpF59GY3HReUkWXKsMIuMuJQOKh9BETu7zPEFUELvcw8w+lwZkl4ileJsHXC9+AnsT2Lw==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
dev: true
- /@graphql-tools/optimize@2.0.0(graphql@16.8.1):
+ /@graphql-tools/optimize@2.0.0(graphql@16.10.0):
resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
dev: true
- /@graphql-tools/prisma-loader@8.0.1(@types/node@18.19.64)(graphql@16.8.1):
+ /@graphql-tools/prisma-loader@8.0.1(@types/node@18.19.75)(graphql@16.10.0):
resolution: {integrity: sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/url-loader': 8.0.0(@types/node@18.19.64)(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/url-loader': 8.0.0(@types/node@18.19.75)(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
'@types/js-yaml': 4.0.5
'@types/json-stable-stringify': 1.0.34
'@whatwg-node/fetch': 0.9.8
chalk: 4.1.2
debug: 4.3.7(supports-color@9.4.0)
dotenv: 16.4.7
- graphql: 16.8.1
- graphql-request: 6.1.0(graphql@16.8.1)
+ graphql: 16.10.0
+ graphql-request: 6.1.0(graphql@16.10.0)
http-proxy-agent: 7.0.0
https-proxy-agent: 7.0.2
jose: 5.4.0
@@ -4751,15 +4808,15 @@ packages:
- utf-8-validate
dev: true
- /@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.1):
+ /@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.10.0):
resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@ardatan/relay-compiler': 12.0.0(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
transitivePeerDependencies:
- encoding
@@ -4777,60 +4834,47 @@ packages:
graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.12
- dev: false
- /@graphql-tools/schema@10.0.16(graphql@16.8.1):
- resolution: {integrity: sha512-G2zgb8hNg9Sx6Z2FSXm57ToNcwMls9A9cUm+EsCrnGGDsryzN5cONYePUpSGj5NCFivVp3o1FT5dg19P/1qeqQ==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- '@graphql-tools/merge': 9.0.17(graphql@16.8.1)
- '@graphql-tools/utils': 10.7.2(graphql@16.8.1)
- graphql: 16.8.1
- tslib: 2.8.1
- value-or-promise: 1.0.12
-
- /@graphql-tools/schema@8.5.1(graphql@16.8.1):
+ /@graphql-tools/schema@8.5.1(graphql@16.10.0):
resolution: {integrity: sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/merge': 8.3.1(graphql@16.8.1)
- '@graphql-tools/utils': 8.9.0(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/merge': 8.3.1(graphql@16.10.0)
+ '@graphql-tools/utils': 8.9.0(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.11
dev: false
- /@graphql-tools/schema@9.0.19(graphql@16.8.1):
+ /@graphql-tools/schema@9.0.19(graphql@16.10.0):
resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/merge': 8.4.2(graphql@16.8.1)
- '@graphql-tools/utils': 9.2.1(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/merge': 8.4.2(graphql@16.10.0)
+ '@graphql-tools/utils': 9.2.1(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.12
dev: false
- /@graphql-tools/url-loader@8.0.0(@types/node@18.19.64)(graphql@16.8.1):
+ /@graphql-tools/url-loader@8.0.0(@types/node@18.19.75)(graphql@16.10.0):
resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@ardatan/sync-fetch': 0.0.1
- '@graphql-tools/delegate': 10.0.0(graphql@16.8.1)
- '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1)
- '@graphql-tools/executor-http': 1.0.1(@types/node@18.19.64)(graphql@16.8.1)
- '@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- '@graphql-tools/wrap': 10.0.0(graphql@16.8.1)
+ '@graphql-tools/delegate': 10.0.0(graphql@16.10.0)
+ '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.10.0)
+ '@graphql-tools/executor-http': 1.0.1(@types/node@18.19.75)(graphql@16.10.0)
+ '@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ '@graphql-tools/wrap': 10.0.0(graphql@16.10.0)
'@types/ws': 8.5.3
'@whatwg-node/fetch': 0.9.8
- graphql: 16.8.1
+ graphql: 16.10.0
isomorphic-ws: 5.0.0(ws@8.15.1)
tslib: 2.8.1
value-or-promise: 1.0.12
@@ -4867,42 +4911,42 @@ packages:
- utf-8-validate
dev: false
- /@graphql-tools/utils@10.0.11(graphql@16.8.1):
+ /@graphql-tools/utils@10.0.11(graphql@16.10.0):
resolution: {integrity: sha512-vVjXgKn6zjXIlYBd7yJxCVMYGb5j18gE3hx3Qw3mNsSEsYQXbJbPdlwb7Fc9FogsJei5AaqiQerqH4kAosp1nQ==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
cross-inspect: 1.0.0
dset: 3.1.4
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
dev: true
- /@graphql-tools/utils@10.1.0(graphql@16.8.1):
+ /@graphql-tools/utils@10.1.0(graphql@16.10.0):
resolution: {integrity: sha512-wLPqhgeZ9BZJPRoaQbsDN/CtJDPd/L4qmmtPkjI3NuYJ39x+Eqz1Sh34EAGMuDh+xlOHqBwHczkZUpoK9tvzjw==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
cross-inspect: 1.0.0
dset: 3.1.4
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
dev: true
- /@graphql-tools/utils@10.1.3(graphql@16.8.1):
+ /@graphql-tools/utils@10.1.3(graphql@16.10.0):
resolution: {integrity: sha512-loco2ctrrMQzdpSHbcOo6+Ecp21BV67cQ2pNGhuVKAexruu01RdLn3LgtK47B9BpLz3cUD6U0u1R0rur7xMOOg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
cross-inspect: 1.0.0
dset: 3.1.4
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
dev: true
@@ -4917,49 +4961,36 @@ packages:
dset: 3.1.4
graphql: 16.10.0
tslib: 2.8.1
- dev: false
- /@graphql-tools/utils@10.7.2(graphql@16.8.1):
- resolution: {integrity: sha512-Wn85S+hfkzfVFpXVrQ0hjnePa3p28aB6IdAGCiD1SqBCSMDRzL+OFEtyAyb30nV9Mqflqs9lCqjqlR2puG857Q==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
- cross-inspect: 1.0.1
- dset: 3.1.4
- graphql: 16.8.1
- tslib: 2.8.1
-
- /@graphql-tools/utils@8.9.0(graphql@16.8.1):
+ /@graphql-tools/utils@8.9.0(graphql@16.10.0):
resolution: {integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
dev: false
- /@graphql-tools/utils@9.2.1(graphql@16.8.1):
+ /@graphql-tools/utils@9.2.1(graphql@16.10.0):
resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
dev: false
- /@graphql-tools/wrap@10.0.0(graphql@16.8.1):
+ /@graphql-tools/wrap@10.0.0(graphql@16.10.0):
resolution: {integrity: sha512-HDOeUUh6UhpiH0WPJUQl44ODt1x5pnMUbOJZ7GjTdGQ7LK0AgVt3ftaAQ9duxLkiAtYJmu5YkULirfZGj4HzDg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@graphql-tools/delegate': 10.0.0(graphql@16.8.1)
- '@graphql-tools/schema': 10.0.16(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/delegate': 10.0.0(graphql@16.10.0)
+ '@graphql-tools/schema': 10.0.16(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
+ graphql: 16.10.0
tslib: 2.8.1
value-or-promise: 1.0.12
dev: true
@@ -4983,14 +5014,6 @@ packages:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
graphql: 16.10.0
- dev: false
-
- /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1):
- resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==}
- peerDependencies:
- graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- dependencies:
- graphql: 16.8.1
/@grpc/grpc-js@1.10.9:
resolution: {integrity: sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==}
@@ -5763,12 +5786,12 @@ packages:
strict-event-emitter: 0.5.1
dev: true
- /@next/env@15.0.2:
- resolution: {integrity: sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==}
+ /@next/env@15.1.6:
+ resolution: {integrity: sha512-d9AFQVPEYNr+aqokIiPLNK/MTyt3DWa/dpKveiAaVccUadFbhFEvY6FXYX2LJO2Hv7PHnLBu2oWwB4uBuHjr/w==}
dev: false
- /@next/swc-darwin-arm64@15.0.2:
- resolution: {integrity: sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==}
+ /@next/swc-darwin-arm64@15.1.6:
+ resolution: {integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
@@ -5776,8 +5799,8 @@ packages:
dev: false
optional: true
- /@next/swc-darwin-x64@15.0.2:
- resolution: {integrity: sha512-KUpBVxIbjzFiUZhiLIpJiBoelqzQtVZbdNNsehhUn36e2YzKHphnK8eTUW1s/4aPy5kH/UTid8IuVbaOpedhpw==}
+ /@next/swc-darwin-x64@15.1.6:
+ resolution: {integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
@@ -5785,8 +5808,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-arm64-gnu@15.0.2:
- resolution: {integrity: sha512-9J7TPEcHNAZvwxXRzOtiUvwtTD+fmuY0l7RErf8Yyc7kMpE47MIQakl+3jecmkhOoIyi/Rp+ddq7j4wG6JDskQ==}
+ /@next/swc-linux-arm64-gnu@15.1.6:
+ resolution: {integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -5794,8 +5817,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-arm64-musl@15.0.2:
- resolution: {integrity: sha512-BjH4ZSzJIoTTZRh6rG+a/Ry4SW0HlizcPorqNBixBWc3wtQtj4Sn9FnRZe22QqrPnzoaW0ctvSz4FaH4eGKMww==}
+ /@next/swc-linux-arm64-musl@15.1.6:
+ resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -5803,8 +5826,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-x64-gnu@15.0.2:
- resolution: {integrity: sha512-i3U2TcHgo26sIhcwX/Rshz6avM6nizrZPvrDVDY1bXcLH1ndjbO8zuC7RoHp0NSK7wjJMPYzm7NYL1ksSKFreA==}
+ /@next/swc-linux-x64-gnu@15.1.6:
+ resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -5812,8 +5835,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-x64-musl@15.0.2:
- resolution: {integrity: sha512-AMfZfSVOIR8fa+TXlAooByEF4OB00wqnms1sJ1v+iu8ivwvtPvnkwdzzFMpsK5jA2S9oNeeQ04egIWVb4QWmtQ==}
+ /@next/swc-linux-x64-musl@15.1.6:
+ resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -5821,8 +5844,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-arm64-msvc@15.0.2:
- resolution: {integrity: sha512-JkXysDT0/hEY47O+Hvs8PbZAeiCQVxKfGtr4GUpNAhlG2E0Mkjibuo8ryGD29Qb5a3IOnKYNoZlh/MyKd2Nbww==}
+ /@next/swc-win32-arm64-msvc@15.1.6:
+ resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
@@ -5830,8 +5853,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-x64-msvc@15.0.2:
- resolution: {integrity: sha512-foaUL0NqJY/dX0Pi/UcZm5zsmSk5MtP/gxx3xOPyREkMFN+CTjctPfu3QaqrQHinaKdPnMWPJDKt4VjDfTBe/Q==}
+ /@next/swc-win32-x64-msvc@15.1.6:
+ resolution: {integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -6390,7 +6413,7 @@ packages:
- debug
dev: false
- /@ory/integrations@1.1.5(@ory/client@1.9.0)(next@15.0.2):
+ /@ory/integrations@1.1.5(@ory/client@1.9.0)(next@15.1.6):
resolution: {integrity: sha512-UV58IuQd2ofPMzeQ5iCWjhLi3cn3+ZHueKy7XSfdeM+x2vfx9E2mr3WBicI7DrYKTDRuDaHbTZ3dNJUgW9yAlA==}
peerDependencies:
'@ory/client': '>1.1.38'
@@ -6400,7 +6423,7 @@ packages:
'@types/tldjs': 2.3.1
cookie: 0.5.0
istextorbinary: 6.0.0
- next: 15.0.2(@babel/core@7.26.0)(react-dom@18.2.0)(react@18.2.0)
+ next: 15.1.6(@babel/core@7.26.7)(react-dom@18.2.0)(react@18.2.0)
ory-prettier-styles: 1.3.0
prettier: 2.3.2
request: 2.88.2
@@ -7268,88 +7291,88 @@ packages:
'@sinonjs/commons': 2.0.0
dev: true
- /@swc/core-darwin-arm64@1.9.0:
- resolution: {integrity: sha512-GEuJYhJMqJIvkYAikGch4qbgwWhMkvJHfEOEwDwG9vvmFmWi7B1flfjvtpri0stkxWCix5SPDIWELP8Brx24+g==}
+ /@swc/core-darwin-arm64@1.10.14:
+ resolution: {integrity: sha512-Dh4VyrhDDb05tdRmqJ/MucOPMTnrB4pRJol18HVyLlqu1HOT5EzonUniNTCdQbUXjgdv5UVJSTE1lYTzrp+myA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
optional: true
- /@swc/core-darwin-x64@1.9.0:
- resolution: {integrity: sha512-djThBGT+9LRdWvWApqj/1cQfivmbMF9ng+e+xLCE6qPDw5ARyZH0P8jky5ieCai55Ro9VBT1NSU/GA/E0kj+sw==}
+ /@swc/core-darwin-x64@1.10.14:
+ resolution: {integrity: sha512-KpzotL/I0O12RE3tF8NmQErINv0cQe/0mnN/Q50ESFzB5kU6bLgp2HMnnwDTm/XEZZRJCNe0oc9WJ5rKbAJFRQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
requiresBuild: true
optional: true
- /@swc/core-linux-arm-gnueabihf@1.9.0:
- resolution: {integrity: sha512-PKOi1Cd3ksQB6FZLslNIl/NtJh3pmTimmBxwJkiv6m73iYCIkDMj6o8mosIAPoqfxOcrJkHJAVP1FI0msOn90A==}
+ /@swc/core-linux-arm-gnueabihf@1.10.14:
+ resolution: {integrity: sha512-20yRXZjMJVz1wp1TcscKiGTVXistG+saIaxOmxSNQia1Qun3hSWLL+u6+5kXbfYGr7R2N6kqSwtZbIfJI25r9Q==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-arm64-gnu@1.9.0:
- resolution: {integrity: sha512-ZQoRyQ1cDbYFCqquhOnQ/gH+0SVqDyRhzrruyb2XU78XfRff7wvW8CSyCSZXj9tXWmlsgikSLrMj0u1ta+VzPA==}
+ /@swc/core-linux-arm64-gnu@1.10.14:
+ resolution: {integrity: sha512-Gy7cGrNkiMfPxQyLGxdgXPwyWzNzbHuWycJFcoKBihxZKZIW8hkPBttkGivuLC+0qOgsV2/U+S7tlvAju7FtmQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-arm64-musl@1.9.0:
- resolution: {integrity: sha512-MxFCgrwl0+82ugy8GfR1czSMF//e4jI1iW+vayBiHG+nab6f5omouitZkLtHHL+eoO2bKb+HH0KjgpPYEaJczQ==}
+ /@swc/core-linux-arm64-musl@1.10.14:
+ resolution: {integrity: sha512-+oYVqJvFw62InZ8PIy1rBACJPC2WTe4vbVb9kM1jJj2D7dKLm9acnnYIVIDsM5Wo7Uab8RvPHXVbs19IBurzuw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-x64-gnu@1.9.0:
- resolution: {integrity: sha512-7pBHreGdgfoGQ7pcoOh+Mo5QRodOwtzqEQkISSuAzBtzqtrykaaIFrqJVVSoIZ7w1I6s9k8FZy4dwHBUNB1Nhw==}
+ /@swc/core-linux-x64-gnu@1.10.14:
+ resolution: {integrity: sha512-OmEbVEKQFLQVHwo4EJl9osmlulURy46k232Opfpn/1ji0t2KcNCci3POsnfMuoZjLkGJv8vGNJdPQxX+CP+wSA==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-x64-musl@1.9.0:
- resolution: {integrity: sha512-1u1vYGWOTG3VNNPeWikIR3Pmnw0n0Arbk7Op6qfnx7FD6UmVNMYg1QmSjxXRVSR9qn/oef04YKQbSfc1knLubw==}
+ /@swc/core-linux-x64-musl@1.10.14:
+ resolution: {integrity: sha512-OZW+Icm8DMPqHbhdxplkuG8qrNnPk5i7xJOZWYi1y5bTjgGFI4nEzrsmmeHKMdQTaWwsFrm3uK1rlyQ48MmXmg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-win32-arm64-msvc@1.9.0:
- resolution: {integrity: sha512-VrPF5VQA7abSOhTJdRz/AKeaOGAUe2EPD2nHEOGWx7AFNkpEKSDyJX4t1ur/dsNJR2kD9/40q+V7QdnaLh2enQ==}
+ /@swc/core-win32-arm64-msvc@1.10.14:
+ resolution: {integrity: sha512-sTvc+xrDQXy3HXZFtTEClY35Efvuc3D+busYm0+rb1+Thau4HLRY9WP+sOKeGwH9/16rzfzYEqD7Ds8A9ykrHw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
requiresBuild: true
optional: true
- /@swc/core-win32-ia32-msvc@1.9.0:
- resolution: {integrity: sha512-81tMJ2OAxxnmwTT8E2CWcV/FWa8bem60GnZOnOdLZ+gqDeusICyAf9s0mozTHTJIkq7s1ge9KoC++K5QVhixqQ==}
+ /@swc/core-win32-ia32-msvc@1.10.14:
+ resolution: {integrity: sha512-j2iQ4y9GWTKtES5eMU0sDsFdYni7IxME7ejFej25Tv3Fq4B+U9tgtYWlJwh1858nIWDXelHiKcSh/UICAyVMdQ==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
requiresBuild: true
optional: true
- /@swc/core-win32-x64-msvc@1.9.0:
- resolution: {integrity: sha512-EIHePEgWMW7Bvv2TAYJeAITnFOF7Z9MObxIKLHSu/5/YCxsrij6F0vRSGhUURLu+XqKrQzDDS1QsZw60GxYgRQ==}
+ /@swc/core-win32-x64-msvc@1.10.14:
+ resolution: {integrity: sha512-TYtWkUSMkjs0jGPeWdtWbex4B+DlQZmN/ySVLiPI+EltYCLEXsFMkVFq6aWn48dqFHggFK0UYfvDrJUR2c3Qxg==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
requiresBuild: true
optional: true
- /@swc/core@1.9.0:
- resolution: {integrity: sha512-jIeqMdsdtPkhKERTWG8tDsG2aOJ5HsHjsCNFgro8urifPd1V3HBcGryt020mQrD8dOLKc3z/5bh3wOdsB/1VPw==}
+ /@swc/core@1.10.14:
+ resolution: {integrity: sha512-WSrnE6JRnH20ZYjOOgSS4aOaPv9gxlkI2KRkN24kagbZnPZMnN8bZZyzw1rrLvwgpuRGv17Uz+hflosbR+SP6w==}
engines: {node: '>=10'}
requiresBuild: true
peerDependencies:
@@ -7359,42 +7382,42 @@ packages:
optional: true
dependencies:
'@swc/counter': 0.1.3
- '@swc/types': 0.1.14
+ '@swc/types': 0.1.17
optionalDependencies:
- '@swc/core-darwin-arm64': 1.9.0
- '@swc/core-darwin-x64': 1.9.0
- '@swc/core-linux-arm-gnueabihf': 1.9.0
- '@swc/core-linux-arm64-gnu': 1.9.0
- '@swc/core-linux-arm64-musl': 1.9.0
- '@swc/core-linux-x64-gnu': 1.9.0
- '@swc/core-linux-x64-musl': 1.9.0
- '@swc/core-win32-arm64-msvc': 1.9.0
- '@swc/core-win32-ia32-msvc': 1.9.0
- '@swc/core-win32-x64-msvc': 1.9.0
+ '@swc/core-darwin-arm64': 1.10.14
+ '@swc/core-darwin-x64': 1.10.14
+ '@swc/core-linux-arm-gnueabihf': 1.10.14
+ '@swc/core-linux-arm64-gnu': 1.10.14
+ '@swc/core-linux-arm64-musl': 1.10.14
+ '@swc/core-linux-x64-gnu': 1.10.14
+ '@swc/core-linux-x64-musl': 1.10.14
+ '@swc/core-win32-arm64-msvc': 1.10.14
+ '@swc/core-win32-ia32-msvc': 1.10.14
+ '@swc/core-win32-x64-msvc': 1.10.14
/@swc/counter@0.1.3:
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
- /@swc/helpers@0.5.13:
- resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+ /@swc/helpers@0.5.15:
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
dependencies:
tslib: 2.8.1
dev: false
- /@swc/jest@0.2.37(@swc/core@1.9.0):
+ /@swc/jest@0.2.37(@swc/core@1.10.14):
resolution: {integrity: sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ==}
engines: {npm: '>= 7.0.0'}
peerDependencies:
'@swc/core': '*'
dependencies:
'@jest/create-cache-key-function': 29.7.0
- '@swc/core': 1.9.0
+ '@swc/core': 1.10.14
'@swc/counter': 0.1.3
jsonc-parser: 3.2.0
dev: true
- /@swc/types@0.1.14:
- resolution: {integrity: sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==}
+ /@swc/types@0.1.17:
+ resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==}
dependencies:
'@swc/counter': 0.1.3
@@ -8012,8 +8035,8 @@ packages:
undici-types: 5.26.5
dev: true
- /@types/node@18.19.64:
- resolution: {integrity: sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==}
+ /@types/node@18.19.75:
+ resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==}
dependencies:
undici-types: 5.26.5
@@ -8716,7 +8739,7 @@ packages:
webpack: ^5.82.0
webpack-cli: 6.x.x
dependencies:
- webpack: 5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1)
+ webpack: 5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack@5.97.1)
dev: true
@@ -8727,7 +8750,7 @@ packages:
webpack: ^5.82.0
webpack-cli: 6.x.x
dependencies:
- webpack: 5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1)
+ webpack: 5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack@5.97.1)
dev: true
@@ -8742,7 +8765,7 @@ packages:
webpack-dev-server:
optional: true
dependencies:
- webpack: 5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1)
+ webpack: 5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack@5.97.1)
dev: true
@@ -8770,11 +8793,11 @@ packages:
urlpattern-polyfill: 10.0.0
dev: false
- /@whatwg-node/fetch@0.8.1(@types/node@18.19.64):
+ /@whatwg-node/fetch@0.8.1(@types/node@18.19.75):
resolution: {integrity: sha512-Fkd1qQHK2tAWxKlC85h9L86Lgbq3BzxMnHSnTsnzNZMMzn6Xi+HlN8/LJ90LxorhSqD54td+Q864LgwUaYDj1Q==}
dependencies:
'@peculiar/webcrypto': 1.4.0
- '@whatwg-node/node-fetch': 0.3.0(@types/node@18.19.64)
+ '@whatwg-node/node-fetch': 0.3.0(@types/node@18.19.75)
busboy: 1.6.0
urlpattern-polyfill: 6.0.2
web-streams-polyfill: 3.2.1
@@ -8790,12 +8813,12 @@ packages:
urlpattern-polyfill: 9.0.0
dev: true
- /@whatwg-node/node-fetch@0.3.0(@types/node@18.19.64):
+ /@whatwg-node/node-fetch@0.3.0(@types/node@18.19.75):
resolution: {integrity: sha512-mPM8WnuHiI/3kFxDeE0SQQXAElbz4onqmm64fEGCwYEcBes2UsvIDI8HwQIqaXCH42A9ajJUPv4WsYoN/9oG6w==}
peerDependencies:
'@types/node': ^18.0.6
dependencies:
- '@types/node': 18.19.64
+ '@types/node': 18.19.75
'@whatwg-node/events': 0.0.2
busboy: 1.6.0
fast-querystring: 1.1.1
@@ -9545,7 +9568,7 @@ packages:
'@babel/core': 7.26.0
find-cache-dir: 4.0.0
schema-utils: 4.3.0
- webpack: 5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1)
+ webpack: 5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1)
dev: true
/babel-plugin-istanbul@6.1.1:
@@ -9691,6 +9714,12 @@ packages:
dev: true
optional: true
+ /bare-events@2.5.4:
+ resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/bare-fs@2.3.5:
resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==}
requiresBuild: true
@@ -9863,6 +9892,7 @@ packages:
electron-to-chromium: 1.5.49
node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.2)
+ dev: true
/browserslist@4.24.4:
resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
@@ -9873,7 +9903,6 @@ packages:
electron-to-chromium: 1.5.84
node-releases: 2.0.19
update-browserslist-db: 1.1.1(browserslist@4.24.4)
- dev: true
/bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
@@ -10035,10 +10064,15 @@ packages:
/caniuse-lite@1.0.30001677:
resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==}
+ dev: true
/caniuse-lite@1.0.30001695:
resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==}
+ /caniuse-lite@1.0.30001697:
+ resolution: {integrity: sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==}
+ dev: false
+
/capital-case@1.0.4:
resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
dependencies:
@@ -10289,7 +10323,7 @@ packages:
resolution: {integrity: sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==}
dependencies:
inflation: 2.0.0
- qs: 6.11.2
+ qs: 6.13.0
raw-body: 2.5.2
type-is: 1.6.18
@@ -11137,7 +11171,6 @@ packages:
optional: true
dependencies:
ms: 2.1.3
- dev: false
/decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
@@ -11435,10 +11468,10 @@ packages:
/electron-to-chromium@1.5.49:
resolution: {integrity: sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==}
+ dev: true
/electron-to-chromium@1.5.84:
resolution: {integrity: sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==}
- dev: true
/emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
@@ -13165,7 +13198,7 @@ packages:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
dev: true
- /graphql-config@5.0.2(@types/node@18.19.64)(graphql@16.8.1):
+ /graphql-config@5.0.2(@types/node@18.19.75)(graphql@16.10.0):
resolution: {integrity: sha512-7TPxOrlbiG0JplSZYCyxn2XQtqVhXomEjXUmWJVSS5ET1nPhOJSsIb/WTwqWhcYX6G0RlHXSj9PLtGTKmxLNGg==}
engines: {node: '>= 16.0.0'}
peerDependencies:
@@ -13175,14 +13208,14 @@ packages:
cosmiconfig-toml-loader:
optional: true
dependencies:
- '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.8.1)
- '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1)
- '@graphql-tools/load': 8.0.12(graphql@16.8.1)
- '@graphql-tools/merge': 9.0.3(graphql@16.8.1)
- '@graphql-tools/url-loader': 8.0.0(@types/node@18.19.64)(graphql@16.8.1)
- '@graphql-tools/utils': 10.1.3(graphql@16.8.1)
+ '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.10.0)
+ '@graphql-tools/json-file-loader': 8.0.0(graphql@16.10.0)
+ '@graphql-tools/load': 8.0.12(graphql@16.10.0)
+ '@graphql-tools/merge': 9.0.3(graphql@16.10.0)
+ '@graphql-tools/url-loader': 8.0.0(@types/node@18.19.75)(graphql@16.10.0)
+ '@graphql-tools/utils': 10.1.3(graphql@16.10.0)
cosmiconfig: 8.1.3
- graphql: 16.8.1
+ graphql: 16.10.0
jiti: 1.20.0
minimatch: 4.2.3
string-env-interpolation: 1.0.1
@@ -13194,45 +13227,45 @@ packages:
- utf-8-validate
dev: true
- /graphql-middleware@6.1.35(graphql@16.8.1):
+ /graphql-middleware@6.1.35(graphql@16.10.0):
resolution: {integrity: sha512-azawK7ApUYtcuPGRGBR9vDZu795pRuaFhO5fgomdJppdfKRt7jwncuh0b7+D3i574/4B+16CNWgVpnGVlg3ZCg==}
peerDependencies:
graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- '@graphql-tools/delegate': 8.8.1(graphql@16.8.1)
- '@graphql-tools/schema': 8.5.1(graphql@16.8.1)
- graphql: 16.8.1
+ '@graphql-tools/delegate': 8.8.1(graphql@16.10.0)
+ '@graphql-tools/schema': 8.5.1(graphql@16.10.0)
+ graphql: 16.10.0
dev: false
- /graphql-request@6.1.0(graphql@16.8.1):
+ /graphql-request@6.1.0(graphql@16.10.0):
resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==}
peerDependencies:
graphql: 14 - 16
dependencies:
- '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
cross-fetch: 3.1.8
- graphql: 16.8.1
+ graphql: 16.10.0
transitivePeerDependencies:
- encoding
dev: true
- /graphql-scalars@1.23.0(graphql@16.8.1):
+ /graphql-scalars@1.23.0(graphql@16.10.0):
resolution: {integrity: sha512-YTRNcwitkn8CqYcleKOx9IvedA8JIERn8BRq21nlKgOr4NEcTaWEG0sT+H92eF3ALTFbPgsqfft4cw+MGgv0Gg==}
engines: {node: '>=10'}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.6.2
dev: false
- /graphql-tag@2.12.6(graphql@16.8.1):
+ /graphql-tag@2.12.6(graphql@16.10.0):
resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==}
engines: {node: '>=10'}
peerDependencies:
graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
dependencies:
- graphql: 16.8.1
+ graphql: 16.10.0
tslib: 2.8.1
/graphql-ws@5.14.0(graphql@16.10.0):
@@ -13242,25 +13275,10 @@ packages:
graphql: '>=0.11 <=16'
dependencies:
graphql: 16.10.0
- dev: false
-
- /graphql-ws@5.14.0(graphql@16.8.1):
- resolution: {integrity: sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==}
- engines: {node: '>=10'}
- peerDependencies:
- graphql: '>=0.11 <=16'
- dependencies:
- graphql: 16.8.1
- dev: true
/graphql@16.10.0:
resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
- dev: false
-
- /graphql@16.8.1:
- resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==}
- engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
/gunzip-maybe@1.4.2:
resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==}
@@ -16179,7 +16197,7 @@ packages:
- supports-color
dev: false
- /meros@1.2.1(@types/node@18.19.64):
+ /meros@1.2.1(@types/node@18.19.75):
resolution: {integrity: sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==}
engines: {node: '>=13'}
peerDependencies:
@@ -16188,7 +16206,7 @@ packages:
'@types/node':
optional: true
dependencies:
- '@types/node': 18.19.64
+ '@types/node': 18.19.75
/methods@1.1.2:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
@@ -17071,16 +17089,16 @@ packages:
engines: {node: '>= 10'}
dev: false
- /next@15.0.2(@babel/core@7.26.0)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-rxIWHcAu4gGSDmwsELXacqAPUk+j8dV/A9cDF5fsiCMpkBDYkO2AEaL1dfD+nNmDiU6QMCFN8Q30VEKapT9UHQ==}
- engines: {node: '>=18.18.0'}
+ /next@15.1.6(@babel/core@7.26.7)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==}
+ engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
'@playwright/test': ^1.41.2
babel-plugin-react-compiler: '*'
- react: ^18.2.0 || 19.0.0-rc-02c0e824-20241028
- react-dom: ^18.2.0 || 19.0.0-rc-02c0e824-20241028
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
sass: ^1.3.0
peerDependenciesMeta:
'@opentelemetry/api':
@@ -17092,24 +17110,24 @@ packages:
sass:
optional: true
dependencies:
- '@next/env': 15.0.2
+ '@next/env': 15.1.6
'@swc/counter': 0.1.3
- '@swc/helpers': 0.5.13
+ '@swc/helpers': 0.5.15
busboy: 1.6.0
- caniuse-lite: 1.0.30001695
+ caniuse-lite: 1.0.30001697
postcss: 8.4.31
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- styled-jsx: 5.1.6(@babel/core@7.26.0)(react@18.2.0)
+ styled-jsx: 5.1.6(@babel/core@7.26.7)(react@18.2.0)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.0.2
- '@next/swc-darwin-x64': 15.0.2
- '@next/swc-linux-arm64-gnu': 15.0.2
- '@next/swc-linux-arm64-musl': 15.0.2
- '@next/swc-linux-x64-gnu': 15.0.2
- '@next/swc-linux-x64-musl': 15.0.2
- '@next/swc-win32-arm64-msvc': 15.0.2
- '@next/swc-win32-x64-msvc': 15.0.2
+ '@next/swc-darwin-arm64': 15.1.6
+ '@next/swc-darwin-x64': 15.1.6
+ '@next/swc-linux-arm64-gnu': 15.1.6
+ '@next/swc-linux-arm64-musl': 15.1.6
+ '@next/swc-linux-x64-gnu': 15.1.6
+ '@next/swc-linux-x64-musl': 15.1.6
+ '@next/swc-win32-arm64-msvc': 15.1.6
+ '@next/swc-win32-x64-msvc': 15.1.6
sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
@@ -17197,7 +17215,7 @@ packages:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
dev: true
- /node-mocks-http@1.16.2(@types/node@18.19.64):
+ /node-mocks-http@1.16.2(@types/node@18.19.75):
resolution: {integrity: sha512-2Sh6YItRp1oqewZNlck3LaFp5vbyW2u51HX2p1VLxQ9U/bG90XV8JY9O7Nk+HDd6OOn/oV3nA5Tx5k4Rki0qlg==}
engines: {node: '>=14'}
peerDependencies:
@@ -17209,7 +17227,7 @@ packages:
'@types/node':
optional: true
dependencies:
- '@types/node': 18.19.64
+ '@types/node': 18.19.75
accepts: 1.3.8
content-disposition: 0.5.4
depd: 1.1.2
@@ -17224,10 +17242,10 @@ packages:
/node-releases@2.0.18:
resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+ dev: true
/node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
- dev: true
/normalize-package-data@5.0.0:
resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==}
@@ -18548,6 +18566,7 @@ packages:
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.5
+ dev: false
/qs@6.13.0:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
@@ -20132,7 +20151,7 @@ packages:
queue-tick: 1.0.1
text-decoder: 1.2.1
optionalDependencies:
- bare-events: 2.2.0
+ bare-events: 2.5.4
dev: true
/strict-event-emitter@0.5.1:
@@ -20363,7 +20382,7 @@ packages:
inline-style-parser: 0.2.3
dev: false
- /styled-jsx@5.1.6(@babel/core@7.26.0)(react@18.2.0):
+ /styled-jsx@5.1.6(@babel/core@7.26.7)(react@18.2.0):
resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
engines: {node: '>= 12.0.0'}
peerDependencies:
@@ -20376,7 +20395,7 @@ packages:
babel-plugin-macros:
optional: true
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.26.7
client-only: 0.0.1
react: 18.2.0
dev: false
@@ -20551,7 +20570,7 @@ packages:
engines: {node: '>=8.0.0'}
dev: false
- /terser-webpack-plugin@5.3.11(@swc/core@1.9.0)(webpack@5.97.1):
+ /terser-webpack-plugin@5.3.11(@swc/core@1.10.14)(webpack@5.97.1):
resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -20568,12 +20587,12 @@ packages:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- '@swc/core': 1.9.0
+ '@swc/core': 1.10.14
jest-worker: 27.5.1
schema-utils: 4.3.0
serialize-javascript: 6.0.2
terser: 5.37.0
- webpack: 5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1)
+ webpack: 5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1)
dev: true
/terser@5.37.0:
@@ -20800,7 +20819,7 @@ packages:
/ts-log@2.2.5:
resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==}
- /ts-node-dev@2.0.0(@swc/core@1.9.0)(@types/node@18.19.64)(typescript@5.7.3):
+ /ts-node-dev@2.0.0(@swc/core@1.10.14)(@types/node@18.19.75)(typescript@5.7.3):
resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==}
engines: {node: '>=0.8.0'}
hasBin: true
@@ -20819,7 +20838,7 @@ packages:
rimraf: 2.7.1
source-map-support: 0.5.21
tree-kill: 1.2.2
- ts-node: 10.9.2(@swc/core@1.9.0)(@types/node@18.19.64)(typescript@5.7.3)
+ ts-node: 10.9.2(@swc/core@1.10.14)(@types/node@18.19.75)(typescript@5.7.3)
tsconfig: 7.0.0
typescript: 5.7.3
transitivePeerDependencies:
@@ -20827,7 +20846,7 @@ packages:
- '@swc/wasm'
- '@types/node'
- /ts-node@10.9.2(@swc/core@1.9.0)(@types/node@18.19.64)(typescript@5.7.3):
+ /ts-node@10.9.2(@swc/core@1.10.14)(@types/node@18.19.75)(typescript@5.7.3):
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
peerDependencies:
@@ -20842,12 +20861,12 @@ packages:
optional: true
dependencies:
'@cspotcode/source-map-support': 0.8.1
- '@swc/core': 1.9.0
+ '@swc/core': 1.10.14
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 18.19.64
+ '@types/node': 18.19.75
acorn: 8.14.0
acorn-walk: 8.3.2
arg: 4.1.3
@@ -20912,9 +20931,6 @@ packages:
/tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
- /tslib@2.8.0:
- resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
-
/tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -21442,6 +21458,7 @@ packages:
browserslist: 4.24.2
escalade: 3.2.0
picocolors: 1.1.1
+ dev: true
/update-browserslist-db@1.1.1(browserslist@4.24.4):
resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
@@ -21452,7 +21469,6 @@ packages:
browserslist: 4.24.4
escalade: 3.2.0
picocolors: 1.1.1
- dev: true
/upper-case-first@2.0.2:
resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
@@ -21935,7 +21951,7 @@ packages:
import-local: 3.1.0
interpret: 3.1.1
rechoir: 0.8.0
- webpack: 5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1)
+ webpack: 5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1)
webpack-merge: 6.0.1
dev: true
@@ -21953,7 +21969,7 @@ packages:
engines: {node: '>=10.13.0'}
dev: true
- /webpack@5.97.1(@swc/core@1.9.0)(webpack-cli@6.0.1):
+ /webpack@5.97.1(@swc/core@1.10.14)(webpack-cli@6.0.1):
resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==}
engines: {node: '>=10.13.0'}
hasBin: true
@@ -21983,7 +21999,7 @@ packages:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.11(@swc/core@1.9.0)(webpack@5.97.1)
+ terser-webpack-plugin: 5.3.11(@swc/core@1.10.14)(webpack@5.97.1)
watchpack: 2.4.2
webpack-cli: 6.0.1(webpack@5.97.1)
webpack-sources: 3.2.3
diff --git a/test/integration/integration.test.ts b/test/integration/integration.test.ts
index d83df3e03f..cfe41efdd7 100644
--- a/test/integration/integration.test.ts
+++ b/test/integration/integration.test.ts
@@ -1,10 +1,9 @@
import assert from 'assert'
-import { C9_CONFIG, HLB_CONFIG } from './lib/config'
-import { MockASE } from './lib/mock-ase'
+import { MockASE, C9_CONFIG, HLB_CONFIG } from 'test-lib'
import { Fee, WebhookEventType } from 'mock-account-service-lib'
import { poll } from './lib/utils'
import { TestActions, createTestActions } from './lib/test-actions'
-import { IncomingPaymentState } from './lib/generated/graphql'
+import { IncomingPaymentState } from 'test-lib/dist/generated/graphql'
jest.setTimeout(20_000)
diff --git a/test/integration/lib/test-actions/admin.ts b/test/integration/lib/test-actions/admin.ts
index 21ca18a1ec..2aff829576 100644
--- a/test/integration/lib/test-actions/admin.ts
+++ b/test/integration/lib/test-actions/admin.ts
@@ -7,8 +7,8 @@ import {
CreateReceiverInput,
IncomingPayment,
CreateQuoteInput
-} from '../generated/graphql'
-import { MockASE } from '../mock-ase'
+} from 'test-lib/dist/generated/graphql'
+import type { MockASE } from 'test-lib'
import { pollCondition } from '../utils'
import { WebhookEventType } from 'mock-account-service-lib'
diff --git a/test/integration/lib/test-actions/index.ts b/test/integration/lib/test-actions/index.ts
index c47998ef2e..5226f661f4 100644
--- a/test/integration/lib/test-actions/index.ts
+++ b/test/integration/lib/test-actions/index.ts
@@ -1,5 +1,5 @@
import assert from 'assert'
-import { MockASE } from '../mock-ase'
+import type { MockASE } from 'test-lib'
import { parseCookies } from '../utils'
import { WalletAddress, PendingGrant } from '@interledger/open-payments'
import { AdminActions, createAdminActions } from './admin'
diff --git a/test/integration/lib/test-actions/open-payments.ts b/test/integration/lib/test-actions/open-payments.ts
index 6f54f25b68..d0bdac81e9 100644
--- a/test/integration/lib/test-actions/open-payments.ts
+++ b/test/integration/lib/test-actions/open-payments.ts
@@ -11,7 +11,7 @@ import {
isFinalizedGrant,
isPendingGrant
} from '@interledger/open-payments'
-import { MockASE } from '../mock-ase'
+import type { MockASE } from 'test-lib'
import { UnionOmit, poll, pollCondition, wait } from '../utils'
import { WebhookEventType } from 'mock-account-service-lib'
import {
diff --git a/test/integration/package.json b/test/integration/package.json
index b3ae47ed9f..8c34afbcc4 100644
--- a/test/integration/package.json
+++ b/test/integration/package.json
@@ -4,7 +4,7 @@
"version": "1.0.0",
"description": "",
"scripts": {
- "build:deps": "pnpm --filter mock-account-service-lib build",
+ "build:deps": "pnpm --filter mock-account-service-lib build && pnpm --filter test-lib build",
"testenv:compose": "docker compose -f ../testenv/cloud-nine-wallet/docker-compose.yml -f ../testenv/happy-life-bank/docker-compose.yml -f ../testenv/docker-compose.yml",
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
"run-tests": "./scripts/run-tests.sh",
@@ -14,19 +14,10 @@
"author": "",
"license": "ISC",
"devDependencies": {
- "@apollo/client": "^3.11.8",
- "@interledger/http-signature-utils": "2.0.2",
"@interledger/open-payments": "6.13.2",
- "@koa/bodyparser": "^5.1.1",
- "@types/koa": "2.15.0",
- "@types/koa-bodyparser": "^4.3.12",
"@types/node": "^20.14.15",
- "dotenv": "^16.4.7",
- "graphql": "^16.8.1",
"hostile": "^1.4.0",
- "json-canonicalize": "^1.0.6",
- "koa": "^2.15.3",
"mock-account-service-lib": "workspace:*",
- "yaml": "^2.7.0"
+ "test-lib": "workspace:*"
}
}
diff --git a/test/test-lib/package.json b/test/test-lib/package.json
new file mode 100644
index 0000000000..55af391e39
--- /dev/null
+++ b/test/test-lib/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "test-lib",
+ "private": true,
+ "version": "1.0.0",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "scripts": {
+ "build:deps": "pnpm --filter mock-account-service-lib build",
+ "build": "pnpm clean && tsc --build tsconfig.json",
+ "clean": "rm -fr dist/"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "devDependencies": {
+ "@apollo/client": "^3.11.8",
+ "@interledger/http-signature-utils": "2.0.2",
+ "@interledger/open-payments": "6.13.2",
+ "@koa/bodyparser": "^5.1.1",
+ "@types/koa": "2.15.0",
+ "@types/koa-bodyparser": "^4.3.12",
+ "@types/node": "^20.14.15",
+ "graphql": "^16.8.1",
+ "json-canonicalize": "^1.0.6",
+ "mock-account-service-lib": "workspace:*",
+ "yaml": "^2.7.0"
+ }
+}
diff --git a/test/integration/lib/admin-client.ts b/test/test-lib/src/admin-client.ts
similarity index 100%
rename from test/integration/lib/admin-client.ts
rename to test/test-lib/src/admin-client.ts
diff --git a/test/integration/lib/apollo-client.ts b/test/test-lib/src/apollo-client.ts
similarity index 100%
rename from test/integration/lib/apollo-client.ts
rename to test/test-lib/src/apollo-client.ts
diff --git a/test/integration/lib/config.ts b/test/test-lib/src/config.ts
similarity index 100%
rename from test/integration/lib/config.ts
rename to test/test-lib/src/config.ts
diff --git a/test/integration/lib/generated/graphql.ts b/test/test-lib/src/generated/graphql.ts
similarity index 100%
rename from test/integration/lib/generated/graphql.ts
rename to test/test-lib/src/generated/graphql.ts
diff --git a/test/test-lib/src/index.ts b/test/test-lib/src/index.ts
new file mode 100644
index 0000000000..4d391fffe9
--- /dev/null
+++ b/test/test-lib/src/index.ts
@@ -0,0 +1,6 @@
+export * from './admin-client'
+export * from './apollo-client'
+export * from './config'
+export * from './integration-server'
+export * from './mock-ase'
+export * as generated from './generated/graphql'
diff --git a/test/integration/lib/integration-server.ts b/test/test-lib/src/integration-server.ts
similarity index 100%
rename from test/integration/lib/integration-server.ts
rename to test/test-lib/src/integration-server.ts
diff --git a/test/integration/lib/mock-ase.ts b/test/test-lib/src/mock-ase.ts
similarity index 100%
rename from test/integration/lib/mock-ase.ts
rename to test/test-lib/src/mock-ase.ts
diff --git a/test/test-lib/tsconfig.json b/test/test-lib/tsconfig.json
new file mode 100644
index 0000000000..bc4252bfc2
--- /dev/null
+++ b/test/test-lib/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "lib": ["ES2020"],
+ "outDir": "./dist",
+ "rootDir": "./src",
+ "declaration": true
+ },
+ "include": ["src/**/*"],
+ "exclude": ["**/*.test.ts", "src/test/*"]
+}
From 2ef91defca025330dd940c024b3b551b8a39708a Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 5 Feb 2025 14:32:38 -0500
Subject: [PATCH 05/54] chore: generate gql
---
.../src/graphql/generated/graphql.schema.json | 164 +++++++++++++++++-
1 file changed, 162 insertions(+), 2 deletions(-)
diff --git a/packages/backend/src/graphql/generated/graphql.schema.json b/packages/backend/src/graphql/generated/graphql.schema.json
index 1745966aa2..8c646267ed 100644
--- a/packages/backend/src/graphql/generated/graphql.schema.json
+++ b/packages/backend/src/graphql/generated/graphql.schema.json
@@ -1,10 +1,12 @@
{
"__schema": {
"queryType": {
- "name": "Query"
+ "name": "Query",
+ "kind": "OBJECT"
},
"mutationType": {
- "name": "Mutation"
+ "name": "Mutation",
+ "kind": "OBJECT"
},
"subscriptionType": null,
"types": [
@@ -12,6 +14,7 @@
"kind": "OBJECT",
"name": "AccountingTransfer",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "amount",
@@ -169,6 +172,7 @@
"kind": "OBJECT",
"name": "AccountingTransferConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "credits",
@@ -228,6 +232,7 @@
"kind": "OBJECT",
"name": "AdditionalProperty",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "key",
@@ -287,6 +292,7 @@
"kind": "INPUT_OBJECT",
"name": "AdditionalPropertyInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -346,6 +352,7 @@
"kind": "ENUM",
"name": "Alg",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -363,6 +370,7 @@
"kind": "OBJECT",
"name": "Amount",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "assetCode",
@@ -422,6 +430,7 @@
"kind": "INPUT_OBJECT",
"name": "AmountInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -481,6 +490,7 @@
"kind": "INPUT_OBJECT",
"name": "ApproveIncomingPaymentInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -508,6 +518,7 @@
"kind": "OBJECT",
"name": "ApproveIncomingPaymentResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "payment",
@@ -531,6 +542,7 @@
"kind": "OBJECT",
"name": "Asset",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "code",
@@ -745,6 +757,7 @@
"kind": "OBJECT",
"name": "AssetEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -788,6 +801,7 @@
"kind": "OBJECT",
"name": "AssetMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "asset",
@@ -811,6 +825,7 @@
"kind": "OBJECT",
"name": "AssetsConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -862,6 +877,7 @@
"kind": "INTERFACE",
"name": "BasePayment",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "client",
@@ -961,6 +977,7 @@
"kind": "SCALAR",
"name": "Boolean",
"description": "The `Boolean` scalar type represents `true` or `false`.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -971,6 +988,7 @@
"kind": "INPUT_OBJECT",
"name": "CancelIncomingPaymentInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -998,6 +1016,7 @@
"kind": "OBJECT",
"name": "CancelIncomingPaymentResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "payment",
@@ -1021,6 +1040,7 @@
"kind": "INPUT_OBJECT",
"name": "CancelOutgoingPaymentInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1060,6 +1080,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateAssetInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1139,6 +1160,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateAssetLiquidityWithdrawalInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1230,6 +1252,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateIncomingPaymentInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1305,6 +1328,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateIncomingPaymentWithdrawalInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1364,6 +1388,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateOrUpdatePeerByUrlInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1467,6 +1492,7 @@
"kind": "OBJECT",
"name": "CreateOrUpdatePeerByUrlMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "peer",
@@ -1490,6 +1516,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateOutgoingPaymentFromIncomingPaymentInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1573,6 +1600,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateOutgoingPaymentInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1640,6 +1668,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateOutgoingPaymentWithdrawalInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1699,6 +1728,7 @@
"kind": "INPUT_OBJECT",
"name": "CreatePeerInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1818,6 +1848,7 @@
"kind": "INPUT_OBJECT",
"name": "CreatePeerLiquidityWithdrawalInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1909,6 +1940,7 @@
"kind": "OBJECT",
"name": "CreatePeerMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "peer",
@@ -1932,6 +1964,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateQuoteInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2011,6 +2044,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateReceiverInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2086,6 +2120,7 @@
"kind": "OBJECT",
"name": "CreateReceiverResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "receiver",
@@ -2109,6 +2144,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateWalletAddressInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2196,6 +2232,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateWalletAddressKeyInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2251,6 +2288,7 @@
"kind": "OBJECT",
"name": "CreateWalletAddressKeyMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "walletAddressKey",
@@ -2274,6 +2312,7 @@
"kind": "OBJECT",
"name": "CreateWalletAddressMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "walletAddress",
@@ -2297,6 +2336,7 @@
"kind": "INPUT_OBJECT",
"name": "CreateWalletAddressWithdrawalInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2372,6 +2412,7 @@
"kind": "ENUM",
"name": "Crv",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -2389,6 +2430,7 @@
"kind": "INPUT_OBJECT",
"name": "DeleteAssetInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2428,6 +2470,7 @@
"kind": "OBJECT",
"name": "DeleteAssetMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "asset",
@@ -2451,6 +2494,7 @@
"kind": "INPUT_OBJECT",
"name": "DeletePeerInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2490,6 +2534,7 @@
"kind": "OBJECT",
"name": "DeletePeerMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "success",
@@ -2517,6 +2562,7 @@
"kind": "INPUT_OBJECT",
"name": "DepositAssetLiquidityInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2592,6 +2638,7 @@
"kind": "INPUT_OBJECT",
"name": "DepositEventLiquidityInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2635,6 +2682,7 @@
"kind": "INPUT_OBJECT",
"name": "DepositOutgoingPaymentLiquidityInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2678,6 +2726,7 @@
"kind": "INPUT_OBJECT",
"name": "DepositPeerLiquidityInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2753,6 +2802,7 @@
"kind": "OBJECT",
"name": "Fee",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "assetId",
@@ -2866,6 +2916,7 @@
"kind": "INPUT_OBJECT",
"name": "FeeDetails",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -2909,6 +2960,7 @@
"kind": "OBJECT",
"name": "FeeEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -2952,6 +3004,7 @@
"kind": "ENUM",
"name": "FeeType",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -2975,6 +3028,7 @@
"kind": "OBJECT",
"name": "FeesConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -3026,6 +3080,7 @@
"kind": "INPUT_OBJECT",
"name": "FilterString",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -3061,6 +3116,7 @@
"kind": "SCALAR",
"name": "Float",
"description": "The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -3071,6 +3127,7 @@
"kind": "OBJECT",
"name": "Http",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "outgoing",
@@ -3098,6 +3155,7 @@
"kind": "INPUT_OBJECT",
"name": "HttpIncomingInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -3133,6 +3191,7 @@
"kind": "INPUT_OBJECT",
"name": "HttpInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -3172,6 +3231,7 @@
"kind": "OBJECT",
"name": "HttpOutgoing",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "authToken",
@@ -3215,6 +3275,7 @@
"kind": "INPUT_OBJECT",
"name": "HttpOutgoingInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -3258,6 +3319,7 @@
"kind": "SCALAR",
"name": "ID",
"description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -3268,6 +3330,7 @@
"kind": "OBJECT",
"name": "IncomingPayment",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "client",
@@ -3434,6 +3497,7 @@
"kind": "OBJECT",
"name": "IncomingPaymentConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -3485,6 +3549,7 @@
"kind": "OBJECT",
"name": "IncomingPaymentEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -3528,6 +3593,7 @@
"kind": "OBJECT",
"name": "IncomingPaymentResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "payment",
@@ -3551,6 +3617,7 @@
"kind": "ENUM",
"name": "IncomingPaymentState",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -3586,6 +3653,7 @@
"kind": "SCALAR",
"name": "Int",
"description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -3596,6 +3664,7 @@
"kind": "SCALAR",
"name": "JSONObject",
"description": "The `JSONObject` scalar type represents JSON objects as specified by the [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf) standard.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -3606,6 +3675,7 @@
"kind": "OBJECT",
"name": "Jwk",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "alg",
@@ -3697,6 +3767,7 @@
"kind": "INPUT_OBJECT",
"name": "JwkInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -3788,6 +3859,7 @@
"kind": "ENUM",
"name": "Kty",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -3805,6 +3877,7 @@
"kind": "ENUM",
"name": "LiquidityError",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -3888,6 +3961,7 @@
"kind": "OBJECT",
"name": "LiquidityMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "success",
@@ -3915,6 +3989,7 @@
"kind": "INTERFACE",
"name": "Model",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "createdAt",
@@ -4009,6 +4084,7 @@
"kind": "OBJECT",
"name": "Mutation",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "approveIncomingPayment",
@@ -5086,6 +5162,7 @@
"kind": "OBJECT",
"name": "OutgoingPayment",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "client",
@@ -5324,6 +5401,7 @@
"kind": "OBJECT",
"name": "OutgoingPaymentConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -5375,6 +5453,7 @@
"kind": "OBJECT",
"name": "OutgoingPaymentEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -5418,6 +5497,7 @@
"kind": "INPUT_OBJECT",
"name": "OutgoingPaymentFilter",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -5465,6 +5545,7 @@
"kind": "OBJECT",
"name": "OutgoingPaymentResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "payment",
@@ -5488,6 +5569,7 @@
"kind": "ENUM",
"name": "OutgoingPaymentState",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -5529,6 +5611,7 @@
"kind": "OBJECT",
"name": "PageInfo",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "endCursor",
@@ -5596,6 +5679,7 @@
"kind": "OBJECT",
"name": "Payment",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "client",
@@ -5734,6 +5818,7 @@
"kind": "OBJECT",
"name": "PaymentConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -5785,6 +5870,7 @@
"kind": "OBJECT",
"name": "PaymentEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -5828,6 +5914,7 @@
"kind": "INPUT_OBJECT",
"name": "PaymentFilter",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -5863,6 +5950,7 @@
"kind": "ENUM",
"name": "PaymentType",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -5886,6 +5974,7 @@
"kind": "OBJECT",
"name": "Peer",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "asset",
@@ -6031,6 +6120,7 @@
"kind": "OBJECT",
"name": "PeerEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -6074,6 +6164,7 @@
"kind": "OBJECT",
"name": "PeersConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -6125,6 +6216,7 @@
"kind": "INPUT_OBJECT",
"name": "PostLiquidityWithdrawalInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -6168,6 +6260,7 @@
"kind": "OBJECT",
"name": "Query",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "accountingTransfers",
@@ -7044,6 +7137,7 @@
"kind": "OBJECT",
"name": "Quote",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "createdAt",
@@ -7179,6 +7273,7 @@
"kind": "OBJECT",
"name": "QuoteConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -7230,6 +7325,7 @@
"kind": "OBJECT",
"name": "QuoteEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -7273,6 +7369,7 @@
"kind": "OBJECT",
"name": "QuoteResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "quote",
@@ -7296,6 +7393,7 @@
"kind": "OBJECT",
"name": "Receiver",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "completed",
@@ -7439,6 +7537,7 @@
"kind": "INPUT_OBJECT",
"name": "RevokeWalletAddressKeyInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -7478,6 +7577,7 @@
"kind": "OBJECT",
"name": "RevokeWalletAddressKeyMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "walletAddressKey",
@@ -7501,6 +7601,7 @@
"kind": "INPUT_OBJECT",
"name": "SetFeeInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -7572,6 +7673,7 @@
"kind": "OBJECT",
"name": "SetFeeResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "fee",
@@ -7595,6 +7697,7 @@
"kind": "ENUM",
"name": "SortOrder",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -7618,6 +7721,7 @@
"kind": "SCALAR",
"name": "String",
"description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -7628,6 +7732,7 @@
"kind": "ENUM",
"name": "TransferState",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -7657,6 +7762,7 @@
"kind": "ENUM",
"name": "TransferType",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -7686,6 +7792,7 @@
"kind": "INPUT_OBJECT",
"name": "TriggerWalletAddressEventsInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -7725,6 +7832,7 @@
"kind": "OBJECT",
"name": "TriggerWalletAddressEventsMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "count",
@@ -7748,6 +7856,7 @@
"kind": "SCALAR",
"name": "UInt8",
"description": "The `UInt8` scalar type represents unsigned 8-bit whole numeric values, ranging from 0 to 255.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -7758,6 +7867,7 @@
"kind": "SCALAR",
"name": "UInt64",
"description": "The `UInt64` scalar type represents unsigned 64-bit whole numeric values. It is capable of handling values that are larger than the JavaScript `Number` type limit (greater than 2^53).",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -7768,6 +7878,7 @@
"kind": "INPUT_OBJECT",
"name": "UpdateAssetInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -7831,6 +7942,7 @@
"kind": "INPUT_OBJECT",
"name": "UpdateIncomingPaymentInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -7874,6 +7986,7 @@
"kind": "INPUT_OBJECT",
"name": "UpdatePeerInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -7973,6 +8086,7 @@
"kind": "OBJECT",
"name": "UpdatePeerMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "peer",
@@ -7996,6 +8110,7 @@
"kind": "INPUT_OBJECT",
"name": "UpdateWalletAddressInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -8079,6 +8194,7 @@
"kind": "OBJECT",
"name": "UpdateWalletAddressMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "walletAddress",
@@ -8102,6 +8218,7 @@
"kind": "INPUT_OBJECT",
"name": "VoidLiquidityWithdrawalInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -8145,6 +8262,7 @@
"kind": "OBJECT",
"name": "WalletAddress",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "additionalProperties",
@@ -8574,6 +8692,7 @@
"kind": "OBJECT",
"name": "WalletAddressEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -8617,6 +8736,7 @@
"kind": "OBJECT",
"name": "WalletAddressKey",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "createdAt",
@@ -8714,6 +8834,7 @@
"kind": "OBJECT",
"name": "WalletAddressKeyConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -8765,6 +8886,7 @@
"kind": "OBJECT",
"name": "WalletAddressKeyEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -8808,6 +8930,7 @@
"kind": "ENUM",
"name": "WalletAddressStatus",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -8831,6 +8954,7 @@
"kind": "OBJECT",
"name": "WalletAddressWithdrawal",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "amount",
@@ -8890,6 +9014,7 @@
"kind": "OBJECT",
"name": "WalletAddressWithdrawalMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "withdrawal",
@@ -8913,6 +9038,7 @@
"kind": "OBJECT",
"name": "WalletAddressesConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -8964,6 +9090,7 @@
"kind": "OBJECT",
"name": "WebhookEvent",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "createdAt",
@@ -9045,6 +9172,7 @@
"kind": "INPUT_OBJECT",
"name": "WebhookEventFilter",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -9068,6 +9196,7 @@
"kind": "OBJECT",
"name": "WebhookEventsConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -9119,6 +9248,7 @@
"kind": "OBJECT",
"name": "WebhookEventsEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -9162,6 +9292,7 @@
"kind": "INPUT_OBJECT",
"name": "WithdrawEventLiquidityInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -9205,6 +9336,7 @@
"kind": "OBJECT",
"name": "__Directive",
"description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -9321,6 +9453,7 @@
"kind": "ENUM",
"name": "__DirectiveLocation",
"description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -9446,6 +9579,7 @@
"kind": "OBJECT",
"name": "__EnumValue",
"description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -9513,6 +9647,7 @@
"kind": "OBJECT",
"name": "__Field",
"description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -9633,6 +9768,7 @@
"kind": "OBJECT",
"name": "__InputValue",
"description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -9728,6 +9864,7 @@
"kind": "OBJECT",
"name": "__Schema",
"description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",
+ "isOneOf": null,
"fields": [
{
"name": "description",
@@ -9839,6 +9976,7 @@
"kind": "OBJECT",
"name": "__Type",
"description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",
+ "isOneOf": null,
"fields": [
{
"name": "kind",
@@ -10042,6 +10180,18 @@
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "isOneOf",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
@@ -10053,6 +10203,7 @@
"kind": "ENUM",
"name": "__TypeKind",
"description": "An enum describing what kind of type a given `__Type` is.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -10163,6 +10314,15 @@
}
]
},
+ {
+ "name": "oneOf",
+ "description": "Indicates exactly one field must be supplied and this field must not be `null`.",
+ "isRepeatable": false,
+ "locations": [
+ "INPUT_OBJECT"
+ ],
+ "args": []
+ },
{
"name": "skip",
"description": "Directs the executor to skip this field or fragment when the `if` argument is true.",
From fbad4e212843ecefd5a620069bfdf8b477ded257 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 6 Feb 2025 16:07:48 -0500
Subject: [PATCH 06/54] feat(performance): make environment configurable
---
pnpm-lock.yaml | 42 +++++++------
test/performance/config/local.env | 4 ++
test/performance/config/test.env | 4 ++
test/performance/package.json | 7 ++-
test/performance/scripts/run-tests.sh | 82 +++++++++++++++----------
test/performance/scripts/start-mases.js | 13 ++++
test/test-lib/package.json | 1 +
7 files changed, 101 insertions(+), 52 deletions(-)
create mode 100644 test/performance/config/local.env
create mode 100644 test/performance/config/test.env
create mode 100644 test/performance/scripts/start-mases.js
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 45af14986f..e206dd5212 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -778,6 +778,9 @@ importers:
hostile:
specifier: ^1.4.0
version: 1.4.0
+ test-lib:
+ specifier: workspace:*
+ version: link:../test-lib
devDependencies:
'@babel/core':
specifier: ^7.26.0
@@ -833,6 +836,9 @@ importers:
json-canonicalize:
specifier: ^1.0.6
version: 1.0.6
+ koa:
+ specifier: ^2.15.3
+ version: 2.15.3
mock-account-service-lib:
specifier: workspace:*
version: link:../../packages/mock-account-service-lib
@@ -1508,7 +1514,7 @@ packages:
'@babel/core': 7.26.0
'@babel/helper-compilation-targets': 7.25.9
'@babel/helper-plugin-utils': 7.25.9
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
lodash.debounce: 4.0.8
resolve: 1.22.8
transitivePeerDependencies:
@@ -3074,7 +3080,7 @@ packages:
'@babel/parser': 7.26.2
'@babel/template': 7.25.9
'@babel/types': 7.26.0
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -3088,7 +3094,7 @@ packages:
'@babel/parser': 7.26.5
'@babel/template': 7.25.9
'@babel/types': 7.26.5
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -8346,7 +8352,7 @@ packages:
dependencies:
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.7.3)
'@typescript-eslint/utils': 5.60.1(eslint@8.57.1)(typescript@5.7.3)
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
eslint: 8.57.1
tsutils: 3.21.0(typescript@5.7.3)
typescript: 5.7.3
@@ -8366,7 +8372,7 @@ packages:
dependencies:
'@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3)
'@typescript-eslint/utils': 7.5.0(eslint@8.57.1)(typescript@5.4.3)
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
eslint: 8.57.1
ts-api-utils: 1.0.1(typescript@5.4.3)
typescript: 5.4.3
@@ -8400,7 +8406,7 @@ packages:
dependencies:
'@typescript-eslint/types': 5.60.1
'@typescript-eslint/visitor-keys': 5.60.1
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.3
@@ -8421,7 +8427,7 @@ packages:
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.3
@@ -8442,7 +8448,7 @@ packages:
dependencies:
'@typescript-eslint/types': 7.5.0
'@typescript-eslint/visitor-keys': 7.5.0
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.3
@@ -8930,7 +8936,7 @@ packages:
resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==}
engines: {node: '>= 14'}
dependencies:
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
@@ -11367,7 +11373,7 @@ packages:
resolution: {integrity: sha512-h0Ow21gclbYsZ3mkHDfsYNDqtRhXS8fXr51bU0qr1dxgTMJj0XufbzX+jhNOvA8KuEEzn6JbvLVhXyv+fny9Uw==}
engines: {node: '>= 8.0'}
dependencies:
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
readable-stream: 3.6.0
split-ca: 1.0.1
ssh2: 1.11.0
@@ -13753,7 +13759,7 @@ packages:
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
@@ -13776,7 +13782,7 @@ packages:
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
@@ -14612,7 +14618,7 @@ packages:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
dependencies:
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
istanbul-lib-coverage: 3.2.0
source-map: 0.6.1
transitivePeerDependencies:
@@ -15394,7 +15400,7 @@ packages:
content-disposition: 0.5.4
content-type: 1.0.5
cookies: 0.9.1
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
delegates: 1.0.0
depd: 2.0.0
destroy: 1.2.0
@@ -16810,7 +16816,7 @@ packages:
resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
dependencies:
'@types/debug': 4.1.12
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
decode-named-character-reference: 1.0.2
micromark-core-commonmark: 1.1.0
micromark-factory-space: 1.1.0
@@ -16834,7 +16840,7 @@ packages:
resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
dependencies:
'@types/debug': 4.1.12
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
decode-named-character-reference: 1.0.2
devlop: 1.1.0
micromark-core-commonmark: 2.0.1
@@ -21654,7 +21660,7 @@ packages:
hasBin: true
dependencies:
cac: 6.7.14
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
mlly: 1.7.3
pathe: 1.1.2
picocolors: 1.1.1
@@ -21679,7 +21685,7 @@ packages:
hasBin: true
dependencies:
cac: 6.7.14
- debug: 4.3.7(supports-color@9.4.0)
+ debug: 4.4.0
mlly: 1.7.3
pathe: 1.1.2
picocolors: 1.1.1
diff --git a/test/performance/config/local.env b/test/performance/config/local.env
new file mode 100644
index 0000000000..49a388437c
--- /dev/null
+++ b/test/performance/config/local.env
@@ -0,0 +1,4 @@
+C9_GQL_URL="http://localhost:3001/graphql"
+C9_WALLET_ADDRESS="http://localhost:3000/"
+HLB_WALLET_ADDRESS="http://localhost:4000/"
+HOSTS="cloud-nine-wallet-backend,cloud-nine-wallet-auth,happy-life-bank-backend,happy-life-bank-auth"
\ No newline at end of file
diff --git a/test/performance/config/test.env b/test/performance/config/test.env
new file mode 100644
index 0000000000..b756a56eca
--- /dev/null
+++ b/test/performance/config/test.env
@@ -0,0 +1,4 @@
+C9_GQL_URL="http://localhost:3101/graphql"
+C9_WALLET_ADDRESS="http://localhost:3100/"
+HLB_WALLET_ADDRESS="http://localhost:4100/"
+HOSTS="cloud-nine-wallet-test-backend,cloud-nine-wallet-test-auth,happy-life-bank-test-backend,happy-life-bank-test-auth"
\ No newline at end of file
diff --git a/test/performance/package.json b/test/performance/package.json
index 9d2af125e0..63315c3b02 100644
--- a/test/performance/package.json
+++ b/test/performance/package.json
@@ -8,13 +8,16 @@
"run-tests": "./scripts/run-tests.sh",
"run-tests-docker": "./scripts/run-tests.sh --docker",
"hostile": "hostile",
- "bundle": "webpack"
+ "bundle": "webpack",
+ "testenv:compose": "docker compose -f ../testenv/cloud-nine-wallet/docker-compose.yml -f ../testenv/happy-life-bank/docker-compose.yml -f ../testenv/docker-compose.yml",
+ "start-mases": "node ./scripts/start-mases.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
- "hostile": "^1.4.0"
+ "hostile": "^1.4.0",
+ "test-lib": "workspace:*"
},
"devDependencies": {
"@babel/core": "^7.26.0",
diff --git a/test/performance/scripts/run-tests.sh b/test/performance/scripts/run-tests.sh
index 17b23bc059..5017cc429c 100755
--- a/test/performance/scripts/run-tests.sh
+++ b/test/performance/scripts/run-tests.sh
@@ -1,38 +1,54 @@
#!/bin/bash
-c9_gql_url="http://localhost:3001/graphql"
-c9_wallet_address="http://localhost:3000/"
-hlb_wallet_address="http://localhost:4000/"
+# Defaults to local environment, not running k6 in docker
+ENV_NAME="local"
+DOCKER_MODE=false
-# Verify that the localenv backend is live
-if curl -s --head --request GET "$c9_gql_url" | grep "HTTP/1.[01]" > /dev/null; then
- echo "Localenv is up: $c9_gql_url"
-else
- echo "Localenv is down: $c9_gql_url"
- exit 1
-fi
+# Parse cli args
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --docker)
+ DOCKER_MODE=true
+ shift
+ ;;
+ *)
+ ENV_NAME="$1"
+ shift
+ ;;
+ esac
+done
-# Verify that cloud nine mock ase is live
-if curl -s --head --request GET "$c9_wallet_address" | grep "HTTP/1.[01]" > /dev/null; then
- echo "Cloud Nine Wallet Address is up: $c9_wallet_address"
-else
- echo "Cloud Nine Wallet Address is down: $c9_wallet_address"
+ENV_FILE="config/$ENV_NAME.env"
+if [[ ! -f "$ENV_FILE" ]]; then
+ echo "Error: Config file '$ENV_FILE' not found."
exit 1
fi
-# Verify that happy life bank mock ase is live
-if curl -s --head --request GET "$hlb_wallet_address" | grep "HTTP/1.[01]" > /dev/null; then
- echo "Happy Life Bank Address is up: $hlb_wallet_address"
-else
- echo "Happy Life Bank Address is down: $hlb_wallet_address"
- exit 1
-fi
+# Load env vars
+set -o allexport
+source "$ENV_FILE"
+set +o allexport
+
+check_service() {
+ local url=$1
+ local name=$2
-# setup hosts
-addHost() {
+ if curl -s --head --request GET "$url" | grep "HTTP/1.[01]" >/dev/null; then
+ echo "$name is up: $url"
+ else
+ echo "$name is down: $url"
+ exit 1
+ fi
+}
+
+check_service "$C9_GQL_URL" "$ENV_NAME environment"
+check_service "$C9_WALLET_ADDRESS" "Cloud Nine Wallet Address"
+check_service "$HLB_WALLET_ADDRESS" "Happy Life Bank Address"
+
+add_host() {
local hostname="$1"
-
- # check first to avoid sudo prompt if host is already set
+
+ # Check first to avoid unnecessary sudo prompts
if pnpm --filter performance hostile list | grep -q "127.0.0.1 $hostname"; then
echo "$hostname already set"
else
@@ -43,15 +59,17 @@ addHost() {
fi
fi
}
-addHost "cloud-nine-wallet-backend"
-addHost "cloud-nine-wallet-auth"
-addHost "happy-life-bank-backend"
-addHost "happy-life-bank-auth"
+
+# Add hosts from env var. Expects comma seperated values.
+IFS=',' read -ra HOST_ARRAY <<<"$HOSTS"
+for host in "${HOST_ARRAY[@]}"; do
+ add_host "$host"
+done
# run tests
-if [[ $* == *--docker* ]]; then
+if $DOCKER_MODE; then
pnpm --filter performance test-docker
-else
+else
pnpm --filter performance test
fi
exit $?
diff --git a/test/performance/scripts/start-mases.js b/test/performance/scripts/start-mases.js
new file mode 100644
index 0000000000..a1fade7878
--- /dev/null
+++ b/test/performance/scripts/start-mases.js
@@ -0,0 +1,13 @@
+const { MockASE, C9_CONFIG, HLB_CONFIG } = require('test-lib')
+
+;(async () => {
+ try {
+ await MockASE.create(C9_CONFIG)
+ console.debug('Created Cloud Nine Mock ASE')
+ await MockASE.create(HLB_CONFIG)
+ console.debug('Created Happy Life Bank Mock ASE')
+ } catch (error) {
+ console.error('Mock ASE encountered error')
+ console.error(error)
+ }
+})()
diff --git a/test/test-lib/package.json b/test/test-lib/package.json
index 55af391e39..dafa6fa211 100644
--- a/test/test-lib/package.json
+++ b/test/test-lib/package.json
@@ -22,6 +22,7 @@
"@types/node": "^20.14.15",
"graphql": "^16.8.1",
"json-canonicalize": "^1.0.6",
+ "koa": "^2.15.3",
"mock-account-service-lib": "workspace:*",
"yaml": "^2.7.0"
}
From 713cd81bc63787652175bb3abf2d8398e640e00f Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 10:11:44 -0500
Subject: [PATCH 07/54] feat(performance): make run and test script
configurable per env
---
test/performance/config/local.env | 12 ++++--
test/performance/config/test.env | 12 ++++--
test/performance/package.json | 8 ++--
.../scripts/create-outgoing-payments.js | 12 +++---
test/performance/scripts/run-tests.sh | 43 +++++++++++++------
5 files changed, 56 insertions(+), 31 deletions(-)
diff --git a/test/performance/config/local.env b/test/performance/config/local.env
index 49a388437c..9738910c4e 100644
--- a/test/performance/config/local.env
+++ b/test/performance/config/local.env
@@ -1,4 +1,8 @@
-C9_GQL_URL="http://localhost:3001/graphql"
-C9_WALLET_ADDRESS="http://localhost:3000/"
-HLB_WALLET_ADDRESS="http://localhost:4000/"
-HOSTS="cloud-nine-wallet-backend,cloud-nine-wallet-auth,happy-life-bank-backend,happy-life-bank-auth"
\ No newline at end of file
+C9_BACKEND_HOST="cloud-nine-wallet-backend"
+HLB_BACKEND_HOST="happy-life-bank-backend"
+C9_AUTH_HOST="cloud-nine-wallet-backend"
+HLB_AUTH_HOST="happy-life-bank-backend"
+C9_OPEN_PAYMENTS_PORT="3000"
+C9_GRAPHQL_PORT="3001"
+HLB_OPEN_PAYMENTS_PORT="4000"
+DOCKER_NETWORK="rafiki_rafiki"
\ No newline at end of file
diff --git a/test/performance/config/test.env b/test/performance/config/test.env
index b756a56eca..cd6207b9ab 100644
--- a/test/performance/config/test.env
+++ b/test/performance/config/test.env
@@ -1,4 +1,8 @@
-C9_GQL_URL="http://localhost:3101/graphql"
-C9_WALLET_ADDRESS="http://localhost:3100/"
-HLB_WALLET_ADDRESS="http://localhost:4100/"
-HOSTS="cloud-nine-wallet-test-backend,cloud-nine-wallet-test-auth,happy-life-bank-test-backend,happy-life-bank-test-auth"
\ No newline at end of file
+C9_BACKEND_HOST="cloud-nine-wallet-test-backend"
+HLB_BACKEND_HOST="happy-life-bank-test-backend"
+C9_AUTH_HOST="cloud-nine-wallet-test-backend"
+HLB_AUTH_HOST="happy-life-bank-test-backend"
+C9_OPEN_PAYMENTS_PORT="3100"
+C9_GRAPHQL_PORT="3101"
+HLB_OPEN_PAYMENTS_PORT="4100"
+DOCKER_NETWORK="rafiki-test_rafiki-test"
\ No newline at end of file
diff --git a/test/performance/package.json b/test/performance/package.json
index 63315c3b02..e9e515da41 100644
--- a/test/performance/package.json
+++ b/test/performance/package.json
@@ -3,10 +3,10 @@
"version": "1.0.0",
"description": "",
"scripts": {
- "test": "k6 run ./scripts/create-outgoing-payments.js",
- "test-docker": "docker run --rm --network=rafiki_rafiki -v ./scripts:/scripts -v ./dist:/dist -i grafana/k6 run /scripts/create-outgoing-payments.js",
- "run-tests": "./scripts/run-tests.sh",
- "run-tests-docker": "./scripts/run-tests.sh --docker",
+ "run-tests:testnev": "./scripts/run-tests.sh test",
+ "run-tests-docker:testenv": "./scripts/run-tests.sh test --docker",
+ "run-tests": "./scripts/run-tests.sh local",
+ "run-tests-docker": "./scripts/run-tests.sh local --docker",
"hostile": "hostile",
"bundle": "webpack",
"testenv:compose": "docker compose -f ../testenv/cloud-nine-wallet/docker-compose.yml -f ../testenv/happy-life-bank/docker-compose.yml -f ../testenv/docker-compose.yml",
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index ace012decf..ffb2d4d4fb 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -7,14 +7,12 @@ export const options = {
// A number specifying the number of VUs to run concurrently.
vus: 1,
// A string specifying the total duration of the test run.
- duration: '600s'
+ duration: '30s'
}
-const CLOUD_NINE_GQL_ENDPOINT = 'http://cloud-nine-wallet-backend:3001/graphql'
-const CLOUD_NINE_WALLET_ADDRESS =
- 'https://cloud-nine-wallet-backend/accounts/gfranklin'
-const HAPPY_LIFE_BANK_WALLET_ADDRESS =
- 'https://happy-life-bank-backend/accounts/pfry'
+const CLOUD_NINE_GQL_ENDPOINT = __ENV.CLOUD_NINE_GQL_ENDPOINT
+const CLOUD_NINE_WALLET_ADDRESS = __ENV.CLOUD_NINE_WALLET_ADDRESS
+const HAPPY_LIFE_BANK_WALLET_ADDRESS = __ENV.HAPPY_LIFE_BANK_WALLET_ADDRESS
const SIGNATURE_SECRET = 'iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964='
const SIGNATURE_VERSION = '1'
@@ -63,7 +61,7 @@ export function setup() {
const c9WalletAddresses = data.walletAddresses.edges
const c9WalletAddress = c9WalletAddresses.find(
(edge) => edge.node.url === CLOUD_NINE_WALLET_ADDRESS
- ).node
+ )?.node
if (!c9WalletAddress) {
fail(`could not find wallet address: ${CLOUD_NINE_WALLET_ADDRESS}`)
}
diff --git a/test/performance/scripts/run-tests.sh b/test/performance/scripts/run-tests.sh
index 5017cc429c..66d20c93f1 100755
--- a/test/performance/scripts/run-tests.sh
+++ b/test/performance/scripts/run-tests.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-# Defaults to local environment, not running k6 in docker
+# Defaults to local environment, system k6
ENV_NAME="local"
DOCKER_MODE=false
@@ -40,10 +40,10 @@ check_service() {
exit 1
fi
}
-
-check_service "$C9_GQL_URL" "$ENV_NAME environment"
-check_service "$C9_WALLET_ADDRESS" "Cloud Nine Wallet Address"
-check_service "$HLB_WALLET_ADDRESS" "Happy Life Bank Address"
+# ensure docker environment is up
+check_service "http://localhost:$C9_GRAPHQL_PORT/graphql" "Cloud Nine GraphQL API"
+check_service "http://localhost:$C9_OPEN_PAYMENTS_PORT/" "Cloud Nine Wallet Address"
+check_service "http://localhost:$HLB_OPEN_PAYMENTS_PORT/" "Happy Life Bank Address"
add_host() {
local hostname="$1"
@@ -60,16 +60,35 @@ add_host() {
fi
}
-# Add hosts from env var. Expects comma seperated values.
-IFS=',' read -ra HOST_ARRAY <<<"$HOSTS"
-for host in "${HOST_ARRAY[@]}"; do
- add_host "$host"
-done
+add_host $C9_BACKEND_HOST
+add_host $C9_AUTH_HOST
+add_host $HLB_BACKEND_HOST
+add_host $HLB_AUTH_HOST
+
+CLOUD_NINE_GQL_ENDPOINT="http://$C9_BACKEND_HOST:$C9_GRAPHQL_PORT/graphql"
+if [[ "$ENV_NAME" == "local" ]]; then
+ # local env uses default port (80)
+ CLOUD_NINE_WALLET_ADDRESS="https://$C9_BACKEND_HOST/accounts/gfranklin"
+ HAPPY_LIFE_BANK_WALLET_ADDRESS="https://$HLB_BACKEND_HOST/accounts/pfry"
+else
+ CLOUD_NINE_WALLET_ADDRESS="https://$C9_BACKEND_HOST:$C9_OPEN_PAYMENTS_PORT/accounts/gfranklin"
+ HAPPY_LIFE_BANK_WALLET_ADDRESS="https://$HLB_BACKEND_HOST:$HLB_OPEN_PAYMENTS_PORT/accounts/pfry"
+fi
# run tests
if $DOCKER_MODE; then
- pnpm --filter performance test-docker
+ docker run --rm --network="$DOCKER_NETWORK" \
+ -v ./scripts:/scripts \
+ -v ./dist:/dist \
+ -e CLOUD_NINE_GQL_ENDPOINT=$CLOUD_NINE_GQL_ENDPOINT \
+ -e CLOUD_NINE_WALLET_ADDRESS=$CLOUD_NINE_WALLET_ADDRESS \
+ -e HAPPY_LIFE_BANK_WALLET_ADDRESS=$HAPPY_LIFE_BANK_WALLET_ADDRESS \
+ -i grafana/k6 run /scripts/create-outgoing-payments.js
else
- pnpm --filter performance test
+ k6 run ./scripts/create-outgoing-payments.js \
+ -e CLOUD_NINE_GQL_ENDPOINT=$CLOUD_NINE_GQL_ENDPOINT \
+ -e CLOUD_NINE_WALLET_ADDRESS=$CLOUD_NINE_WALLET_ADDRESS \
+ -e HAPPY_LIFE_BANK_WALLET_ADDRESS=$HAPPY_LIFE_BANK_WALLET_ADDRESS
fi
+
exit $?
From 07095f9d982ed40aa9c067676362dc36ba85f0d7 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 11:19:46 -0500
Subject: [PATCH 08/54] fix(performance): up liquidity, matching localenv
---
test/testenv/cloud-nine-wallet/seed.yml | 26 ++++++++++++-------------
test/testenv/happy-life-bank/seed.yml | 26 ++++++++++++-------------
2 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/test/testenv/cloud-nine-wallet/seed.yml b/test/testenv/cloud-nine-wallet/seed.yml
index 1b987fec45..f286ebc15c 100644
--- a/test/testenv/cloud-nine-wallet/seed.yml
+++ b/test/testenv/cloud-nine-wallet/seed.yml
@@ -1,42 +1,42 @@
assets:
- code: USD
scale: 2
- liquidity: 1000000
- liquidityThreshold: 100000
+ liquidity: 100000000
+ liquidityThreshold: 10000000
- code: EUR
scale: 2
- liquidity: 1000000
- liquidityThreshold: 100000
+ liquidity: 100000000
+ liquidityThreshold: 10000000
- code: MXN
scale: 2
- liquidity: 1000000
- liquidityThreshold: 100000
+ liquidity: 100000000
+ liquidityThreshold: 10000000
- code: JPY
scale: 0
- liquidity: 10000
- liquidityThreshold: 1000
+ liquidity: 1000000
+ liquidityThreshold: 100000
peeringAsset: 'USD'
peers:
- - initialLiquidity: '100000'
+ - initialLiquidity: '10000000'
peerUrl: http://happy-life-bank-test-backend:4102
peerIlpAddress: test.happy-life-bank-test
- liquidityThreshold: 10000
+ liquidityThreshold: 1000000
accounts:
- name: 'Grace Franklin'
path: accounts/gfranklin
id: 742ab7cd-1624-4d2e-af6e-e15a71638669
- initialBalance: 50000
+ initialBalance: 40000000
postmanEnvVar: gfranklinWalletAddress
assetCode: USD
- name: 'Bert Hamchest'
id: a9adbe1a-df31-4766-87c9-d2cb2e636a9b
- initialBalance: 50000
+ initialBalance: 40000000
path: accounts/bhamchest
postmanEnvVar: bhamchestWalletAddress
assetCode: USD
- name: "World's Best Donut Co"
id: 5726eefe-8737-459d-a36b-0acce152cb90
- initialBalance: 2000
+ initialBalance: 20000000
path: accounts/wbdc
postmanEnvVar: wbdcWalletAddress
assetCode: USD
diff --git a/test/testenv/happy-life-bank/seed.yml b/test/testenv/happy-life-bank/seed.yml
index cb763ce313..fb8b4cc610 100644
--- a/test/testenv/happy-life-bank/seed.yml
+++ b/test/testenv/happy-life-bank/seed.yml
@@ -1,26 +1,26 @@
assets:
- code: USD
scale: 2
- liquidity: 1000000
- liquidityThreshold: 100000
+ liquidity: 10000000000
+ liquidityThreshold: 100000000
- code: EUR
scale: 2
- liquidity: 1000000
- liquidityThreshold: 100000
+ liquidity: 10000000000
+ liquidityThreshold: 1000000
- code: MXN
scale: 2
- liquidity: 1000000
- liquidityThreshold: 100000
+ liquidity: 10000000000
+ liquidityThreshold: 10000000
- code: JPY
scale: 0
- liquidity: 10000
- liquidityThreshold: 1000
+ liquidity: 1000000000
+ liquidityThreshold: 1000000
peeringAsset: 'USD'
peers:
- initialLiquidity: '1000000000000'
peerUrl: http://cloud-nine-wallet-test-backend:3102
peerIlpAddress: test.cloud-nine-wallet-test
- liquidityThreshold: 100000
+ liquidityThreshold: 1000000
accounts:
- name: 'Philip Fry'
path: accounts/pfry
@@ -30,26 +30,26 @@ accounts:
assetCode: USD
- name: 'PlanEx Corp'
id: a455cc54-b583-455b-836a-e5275c5c05b7
- initialBalance: 2000
+ initialBalance: 2000000
path: accounts/planex
postmanEnvVar: planexWalletAddress
assetCode: USD
- name: 'Alice Smith'
path: accounts/asmith
id: f47ac10b-58cc-4372-a567-0e02b2c3d479
- initialBalance: 500
+ initialBalance: 5000000
postmanEnvVar: asmithWalletAddress
skipWalletAddressCreation: true
assetCode: USD
- name: 'Lars'
path: accounts/lars
id: fd4ecbc9-205d-4ecd-a030-507d6ce2bde6
- initialBalance: 50000
+ initialBalance: 50000000
assetCode: EUR
- name: 'David'
path: accounts/david
id: 60257507-3191-4507-9d77-9071fd6b3c30
- initialBalance: 150000
+ initialBalance: 1500000000
assetCode: MXN
rates:
EUR:
From b7022d2c91a378df99684ec7e89dc78b4b6e6ecf Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 11:42:50 -0500
Subject: [PATCH 09/54] ci: add performance test
---
.github/workflows/node-build.yml | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 8cf756e46b..12136e293a 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -159,6 +159,36 @@ jobs:
- name: Run tests
run: pnpm --filter integration run-tests
+ performance-test:
+ runs-on: ubuntu-22.04
+ needs: prerequisite
+ timeout-minutes: 5
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup environment
+ uses: ./.github/workflows/rafiki/env-setup
+
+ - name: Setup hosts
+ run: |
+ echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
+ echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
+ echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
+ echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
+
+ - name: Bundle
+ run: pnpm --filter performance bundle
+
+ - name: Start test environment
+ run: pnpm --filter performance testenv:compose up --wait --build -d
+
+ - name: Start Mock Account Entity Services
+ run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
+
+ - name: Run performance tests
+ run: pnpm --filter performance run-tests-docker:testenv
+
node-build:
runs-on: ubuntu-latest
timeout-minutes: 5
From da892992c8aeee2b9b3fc59ce4444f4c30d331dc Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 11:49:13 -0500
Subject: [PATCH 10/54] chore: fix eslint error
---
test/performance/scripts/create-outgoing-payments.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index ffb2d4d4fb..0830dcd50a 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -1,3 +1,6 @@
+// global comment below tells ESLint that __ENV exists, else get "no-undef" error
+/* global __ENV */
+
import http from 'k6/http'
import { fail } from 'k6'
import { createHMAC } from 'k6/crypto'
From 6c33b4373c64523a96a739e0961f5216fc27658a Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 12:17:36 -0500
Subject: [PATCH 11/54] chore: debug test in ci
---
test/performance/scripts/create-outgoing-payments.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 0830dcd50a..fcdea7085d 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -62,6 +62,7 @@ export function setup() {
const data = request(query)
const c9WalletAddresses = data.walletAddresses.edges
+ console.log({ c9WalletAddress }) // TODO: rm debug
const c9WalletAddress = c9WalletAddresses.find(
(edge) => edge.node.url === CLOUD_NINE_WALLET_ADDRESS
)?.node
From 001eda53fbae2fe12944255ebb850fec2d2205e3 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 12:21:48 -0500
Subject: [PATCH 12/54] chore: debug test in ci
---
test/performance/scripts/create-outgoing-payments.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index fcdea7085d..491c8b0cf6 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -62,7 +62,7 @@ export function setup() {
const data = request(query)
const c9WalletAddresses = data.walletAddresses.edges
- console.log({ c9WalletAddress }) // TODO: rm debug
+ console.log({ c9WalletAddresses }) // TODO: rm debug
const c9WalletAddress = c9WalletAddresses.find(
(edge) => edge.node.url === CLOUD_NINE_WALLET_ADDRESS
)?.node
From 6f52bc9d76b8d84d9a45977661471585bbf4d1d7 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 12:42:50 -0500
Subject: [PATCH 13/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 12136e293a..46b6e83d2a 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -170,6 +170,12 @@ jobs:
- name: Setup environment
uses: ./.github/workflows/rafiki/env-setup
+ - name: Install k6
+ run: |
+ wget https://github.com/k6io/k6/releases/download/v0.56.0/k6-linux-amd64.tar.gz
+ tar -xvzf k6-linux-amd64.tar.gz
+ sudo mv k6 /usr/local/bin/
+
- name: Setup hosts
run: |
echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
@@ -187,7 +193,7 @@ jobs:
run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
- name: Run performance tests
- run: pnpm --filter performance run-tests-docker:testenv
+ run: pnpm --filter performance run-tests:testenv
node-build:
runs-on: ubuntu-latest
From 4388003e65d1542970a938455a4511c587447aec Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 12:49:58 -0500
Subject: [PATCH 14/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 46b6e83d2a..5058139d3a 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -172,7 +172,7 @@ jobs:
- name: Install k6
run: |
- wget https://github.com/k6io/k6/releases/download/v0.56.0/k6-linux-amd64.tar.gz
+ wget https://github.com/grafana/k6/releases/download/v0.56.0/k6-v0.56.0-linux-amd64.tar.gz
tar -xvzf k6-linux-amd64.tar.gz
sudo mv k6 /usr/local/bin/
From 38ab11b80dcae89b767a56c5f291f4d6525c0e52 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 12:56:16 -0500
Subject: [PATCH 15/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 5058139d3a..1b9611a987 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -173,7 +173,7 @@ jobs:
- name: Install k6
run: |
wget https://github.com/grafana/k6/releases/download/v0.56.0/k6-v0.56.0-linux-amd64.tar.gz
- tar -xvzf k6-linux-amd64.tar.gz
+ tar -xvzf k6-v0.56.0-linux-amd64.tar.gz
sudo mv k6 /usr/local/bin/
- name: Setup hosts
From 2789afdc8b507ddc69a25beea5287d33623da8b2 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 13:01:04 -0500
Subject: [PATCH 16/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 1b9611a987..2b61da641f 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -170,11 +170,8 @@ jobs:
- name: Setup environment
uses: ./.github/workflows/rafiki/env-setup
- - name: Install k6
- run: |
- wget https://github.com/grafana/k6/releases/download/v0.56.0/k6-v0.56.0-linux-amd64.tar.gz
- tar -xvzf k6-v0.56.0-linux-amd64.tar.gz
- sudo mv k6 /usr/local/bin/
+ - name: Set up k6
+ uses: k6io/action-k6@v0.3.0
- name: Setup hosts
run: |
From f29a751613571bd2e5bba47b188b9f1b176299e6 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 13:16:27 -0500
Subject: [PATCH 17/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 2b61da641f..93f545ecc8 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -171,7 +171,7 @@ jobs:
uses: ./.github/workflows/rafiki/env-setup
- name: Set up k6
- uses: k6io/action-k6@v0.3.0
+ uses: grafana/setup-k6-action@v1
- name: Setup hosts
run: |
From e8b09b8a52961c935054d0fffef8dcd6441716e3 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 13:29:53 -0500
Subject: [PATCH 18/54] fix: script typo
---
test/performance/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/performance/package.json b/test/performance/package.json
index e9e515da41..2cd567839c 100644
--- a/test/performance/package.json
+++ b/test/performance/package.json
@@ -3,7 +3,7 @@
"version": "1.0.0",
"description": "",
"scripts": {
- "run-tests:testnev": "./scripts/run-tests.sh test",
+ "run-tests:testenv": "./scripts/run-tests.sh test",
"run-tests-docker:testenv": "./scripts/run-tests.sh test --docker",
"run-tests": "./scripts/run-tests.sh local",
"run-tests-docker": "./scripts/run-tests.sh local --docker",
From 143ab10a0af3c02e36c258a6045be57d83d6098a Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 13:41:31 -0500
Subject: [PATCH 19/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 93f545ecc8..911de2e88e 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -191,6 +191,11 @@ jobs:
- name: Run performance tests
run: pnpm --filter performance run-tests:testenv
+ continue-on-error: true
+
+ - name: Print MASE logs
+ if: always()
+ run: cat mases.log
node-build:
runs-on: ubuntu-latest
From 81a1a1270b0a0326b12f02c5b97c448e0d7c64a9 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 13:52:11 -0500
Subject: [PATCH 20/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 5 ++++-
test/performance/package.json | 3 ++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 911de2e88e..71306fd475 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -179,7 +179,10 @@ jobs:
echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
-
+
+ - name: Build dependencies
+ run: pnpm --filter performance build:deps
+
- name: Bundle
run: pnpm --filter performance bundle
diff --git a/test/performance/package.json b/test/performance/package.json
index 2cd567839c..a13425aac1 100644
--- a/test/performance/package.json
+++ b/test/performance/package.json
@@ -10,7 +10,8 @@
"hostile": "hostile",
"bundle": "webpack",
"testenv:compose": "docker compose -f ../testenv/cloud-nine-wallet/docker-compose.yml -f ../testenv/happy-life-bank/docker-compose.yml -f ../testenv/docker-compose.yml",
- "start-mases": "node ./scripts/start-mases.js"
+ "start-mases": "node ./scripts/start-mases.js",
+ "build:deps": "pnpm --filter test-lib build:deps && pnpm --filter test-lib build"
},
"keywords": [],
"author": "",
From ea8e8125e41a62abbc584fcda76e77a5d684fb8e Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 14:40:37 -0500
Subject: [PATCH 21/54] chore: debug test in ci
---
.github/workflows/node-build.yml | 7 ++++++-
test/performance/scripts/create-outgoing-payments.js | 2 ++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 71306fd475..afb9282022 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -193,13 +193,18 @@ jobs:
run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
- name: Run performance tests
+ id: perf_test
run: pnpm --filter performance run-tests:testenv
- continue-on-error: true
+ continue-on-error: true # Dont fail here, allows showing logs
- name: Print MASE logs
if: always()
run: cat mases.log
+ - name: Fail if performance tests failed
+ if: steps.perf_test.outcome == 'failure'
+ run: exit 1
+
node-build:
runs-on: ubuntu-latest
timeout-minutes: 5
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 491c8b0cf6..52eab6153a 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -13,6 +13,8 @@ export const options = {
duration: '30s'
}
+throw new Error() // TODO: rm. testing ci.
+
const CLOUD_NINE_GQL_ENDPOINT = __ENV.CLOUD_NINE_GQL_ENDPOINT
const CLOUD_NINE_WALLET_ADDRESS = __ENV.CLOUD_NINE_WALLET_ADDRESS
const HAPPY_LIFE_BANK_WALLET_ADDRESS = __ENV.HAPPY_LIFE_BANK_WALLET_ADDRESS
From c7587e7e1146baa5c78ab568a305ca98c1b31ca9 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 15:06:32 -0500
Subject: [PATCH 22/54] chore: debug test in ci
---
test/performance/scripts/create-outgoing-payments.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 52eab6153a..0382146798 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -13,6 +13,7 @@ export const options = {
duration: '30s'
}
+/* eslint-disable */
throw new Error() // TODO: rm. testing ci.
const CLOUD_NINE_GQL_ENDPOINT = __ENV.CLOUD_NINE_GQL_ENDPOINT
@@ -64,7 +65,6 @@ export function setup() {
const data = request(query)
const c9WalletAddresses = data.walletAddresses.edges
- console.log({ c9WalletAddresses }) // TODO: rm debug
const c9WalletAddress = c9WalletAddresses.find(
(edge) => edge.node.url === CLOUD_NINE_WALLET_ADDRESS
)?.node
From 036b023834f51af60d04670f6323365978e8efdc Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 15:29:59 -0500
Subject: [PATCH 23/54] chore: debug test in ci
---
test/performance/scripts/create-outgoing-payments.js | 3 ---
1 file changed, 3 deletions(-)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 0382146798..0830dcd50a 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -13,9 +13,6 @@ export const options = {
duration: '30s'
}
-/* eslint-disable */
-throw new Error() // TODO: rm. testing ci.
-
const CLOUD_NINE_GQL_ENDPOINT = __ENV.CLOUD_NINE_GQL_ENDPOINT
const CLOUD_NINE_WALLET_ADDRESS = __ENV.CLOUD_NINE_WALLET_ADDRESS
const HAPPY_LIFE_BANK_WALLET_ADDRESS = __ENV.HAPPY_LIFE_BANK_WALLET_ADDRESS
From f27d966eaef8b650832b1ecf677ec52b7b8299d6 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Fri, 7 Feb 2025 15:36:30 -0500
Subject: [PATCH 24/54] chore(auth): gql generate
---
.../src/graphql/generated/graphql.schema.json | 60 ++++++++++++++++++-
1 file changed, 58 insertions(+), 2 deletions(-)
diff --git a/packages/auth/src/graphql/generated/graphql.schema.json b/packages/auth/src/graphql/generated/graphql.schema.json
index 974e62f145..e62cfc4d67 100644
--- a/packages/auth/src/graphql/generated/graphql.schema.json
+++ b/packages/auth/src/graphql/generated/graphql.schema.json
@@ -1,10 +1,12 @@
{
"__schema": {
"queryType": {
- "name": "Query"
+ "name": "Query",
+ "kind": "OBJECT"
},
"mutationType": {
- "name": "Mutation"
+ "name": "Mutation",
+ "kind": "OBJECT"
},
"subscriptionType": null,
"types": [
@@ -12,6 +14,7 @@
"kind": "OBJECT",
"name": "Access",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "actions",
@@ -121,6 +124,7 @@
"kind": "SCALAR",
"name": "Boolean",
"description": "The `Boolean` scalar type represents `true` or `false`.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -131,6 +135,7 @@
"kind": "INPUT_OBJECT",
"name": "FilterFinalizationReason",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -182,6 +187,7 @@
"kind": "INPUT_OBJECT",
"name": "FilterGrantState",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -233,6 +239,7 @@
"kind": "INPUT_OBJECT",
"name": "FilterString",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -264,6 +271,7 @@
"kind": "OBJECT",
"name": "Grant",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "access",
@@ -381,6 +389,7 @@
"kind": "OBJECT",
"name": "GrantEdge",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "cursor",
@@ -424,6 +433,7 @@
"kind": "INPUT_OBJECT",
"name": "GrantFilter",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -471,6 +481,7 @@
"kind": "ENUM",
"name": "GrantFinalization",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -500,6 +511,7 @@
"kind": "ENUM",
"name": "GrantState",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -535,6 +547,7 @@
"kind": "OBJECT",
"name": "GrantsConnection",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "edges",
@@ -586,6 +599,7 @@
"kind": "SCALAR",
"name": "ID",
"description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -596,6 +610,7 @@
"kind": "SCALAR",
"name": "Int",
"description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -606,6 +621,7 @@
"kind": "OBJECT",
"name": "LimitData",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "debitAmount",
@@ -665,6 +681,7 @@
"kind": "INTERFACE",
"name": "Model",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "createdAt",
@@ -719,6 +736,7 @@
"kind": "OBJECT",
"name": "Mutation",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "revokeGrant",
@@ -763,6 +781,7 @@
"kind": "OBJECT",
"name": "PageInfo",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "endCursor",
@@ -830,6 +849,7 @@
"kind": "OBJECT",
"name": "PaymentAmount",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "assetCode",
@@ -889,6 +909,7 @@
"kind": "OBJECT",
"name": "Query",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "grant",
@@ -1022,6 +1043,7 @@
"kind": "INPUT_OBJECT",
"name": "RevokeGrantInput",
"description": null,
+ "isOneOf": false,
"fields": null,
"inputFields": [
{
@@ -1049,6 +1071,7 @@
"kind": "OBJECT",
"name": "RevokeGrantMutationResponse",
"description": null,
+ "isOneOf": null,
"fields": [
{
"name": "id",
@@ -1076,6 +1099,7 @@
"kind": "ENUM",
"name": "SortOrder",
"description": null,
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -1099,6 +1123,7 @@
"kind": "SCALAR",
"name": "String",
"description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -1109,6 +1134,7 @@
"kind": "SCALAR",
"name": "UInt8",
"description": "The `UInt8` scalar type represents unsigned 8-bit whole numeric values, ranging from 0 to 255.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -1119,6 +1145,7 @@
"kind": "SCALAR",
"name": "UInt64",
"description": "The `UInt64` scalar type represents unsigned 64-bit whole numeric values. It is capable of handling values that are larger than the JavaScript `Number` type limit (greater than 2^53).",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -1129,6 +1156,7 @@
"kind": "OBJECT",
"name": "__Directive",
"description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -1245,6 +1273,7 @@
"kind": "ENUM",
"name": "__DirectiveLocation",
"description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -1370,6 +1399,7 @@
"kind": "OBJECT",
"name": "__EnumValue",
"description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -1437,6 +1467,7 @@
"kind": "OBJECT",
"name": "__Field",
"description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -1557,6 +1588,7 @@
"kind": "OBJECT",
"name": "__InputValue",
"description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",
+ "isOneOf": null,
"fields": [
{
"name": "name",
@@ -1652,6 +1684,7 @@
"kind": "OBJECT",
"name": "__Schema",
"description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",
+ "isOneOf": null,
"fields": [
{
"name": "description",
@@ -1763,6 +1796,7 @@
"kind": "OBJECT",
"name": "__Type",
"description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",
+ "isOneOf": null,
"fields": [
{
"name": "kind",
@@ -1966,6 +2000,18 @@
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "isOneOf",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
@@ -1977,6 +2023,7 @@
"kind": "ENUM",
"name": "__TypeKind",
"description": "An enum describing what kind of type a given `__Type` is.",
+ "isOneOf": null,
"fields": null,
"inputFields": null,
"interfaces": null,
@@ -2087,6 +2134,15 @@
}
]
},
+ {
+ "name": "oneOf",
+ "description": "Indicates exactly one field must be supplied and this field must not be `null`.",
+ "isRepeatable": false,
+ "locations": [
+ "INPUT_OBJECT"
+ ],
+ "args": []
+ },
{
"name": "skip",
"description": "Directs the executor to skip this field or fragment when the `if` argument is true.",
From a6efa1acb98c2a709f58752e18371fd735561a9f Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 12:00:57 -0500
Subject: [PATCH 25/54] chore: test manually commenting logs from perf test
---
.github/workflows/node-build.yml | 112 ++++++++++++++++++++++++++++++-
1 file changed, 111 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index afb9282022..077dd540eb 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -159,6 +159,67 @@ jobs:
- name: Run tests
run: pnpm --filter integration run-tests
+ # Performance script options
+ # - use k6 actions for everything. k6 install and k6 run configrued to upload.
+ # kinda conflicts with how tests are setup to run with run-tests.sh script.
+ # Would need to rework or duplucate some stuff in ci (setting env vars, ???)
+ # - just use k6 action to install then run and comment manually in action.
+ # - probably not ideal because logic to comment may be a bit complicated and lose all the free stuff
+ # we get from uploading to cloud k6 (history? formatting, etc.). Would probably want to save
+ # results as json to parse for the comment.
+ # - combination... just k6 action to install then run manually (with run-tests.sh) and upload
+ # run to k6 cloud.
+ # - Might be ok... not sure if we lose anything from running with the k6 action configured to upload
+ # - enables us to use the run-scripts.sh
+
+ # Install k6 via action, run against this native k6 with run-test.sh, no comment
+ # performance-test:
+ # runs-on: ubuntu-22.04
+ # needs: prerequisite
+ # timeout-minutes: 5
+ # steps:
+ # - name: Checkout code
+ # uses: actions/checkout@v4
+
+ # - name: Setup environment
+ # uses: ./.github/workflows/rafiki/env-setup
+
+ # - name: Set up k6
+ # uses: grafana/setup-k6-action@v1
+
+ # - name: Setup hosts
+ # run: |
+ # echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
+
+ # - name: Build dependencies
+ # run: pnpm --filter performance build:deps
+
+ # - name: Bundle
+ # run: pnpm --filter performance bundle
+
+ # - name: Start test environment
+ # run: pnpm --filter performance testenv:compose up --wait --build -d
+
+ # - name: Start Mock Account Entity Services
+ # run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
+
+ # - name: Run performance tests
+ # id: perf_test
+ # run: pnpm --filter performance run-tests:testenv
+ # continue-on-error: true # Dont fail here, allows showing logs
+
+ # - name: Print MASE logs
+ # if: always()
+ # run: cat mases.log
+
+ # - name: Fail if performance tests failed
+ # if: steps.perf_test.outcome == 'failure'
+ # run: exit 1
+
+# Install k6 via action, run against this native k6 with run-test.sh, manual comment
performance-test:
runs-on: ubuntu-22.04
needs: prerequisite
@@ -194,17 +255,66 @@ jobs:
- name: Run performance tests
id: perf_test
- run: pnpm --filter performance run-tests:testenv
+ run: |
+ pnpm --filter performance run-tests:testenv | tee performance.log
continue-on-error: true # Dont fail here, allows showing logs
- name: Print MASE logs
if: always()
run: cat mases.log
+ - name: Post/Update Performance Test Logs as PR Comment
+ if: always()
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const fs = require('fs');
+ const logContent = fs.readFileSync('performance.log', 'utf8');
+ const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
+
+ const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
+
+ const { owner, repo } = context.repo;
+ const prNumber = context.payload.pull_request?.number;
+
+ if (prNumber) {
+ // Fetch existing comments on the PR
+ const comments = await github.rest.issues.listComments({
+ owner,
+ repo,
+ issue_number: prNumber
+ });
+
+ // Look for an existing comment with the "Performance Test Results" title
+ const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
+
+ if (existingComment) {
+ // If a comment exists, update it
+ await github.rest.issues.updateComment({
+ owner,
+ repo,
+ comment_id: existingComment.id,
+ body: commentBody
+ });
+ } else {
+ // If no comment exists, create a new one
+ await github.rest.issues.createComment({
+ owner,
+ repo,
+ issue_number: prNumber,
+ body: commentBody
+ });
+ }
+ } else {
+ console.log("No PR detected, skipping comment.");
+ }
+
- name: Fail if performance tests failed
if: steps.perf_test.outcome == 'failure'
run: exit 1
+
node-build:
runs-on: ubuntu-latest
timeout-minutes: 5
From 896ffd9fa02ea7a2b06099bfab691bacb1a2c160 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 14:24:47 -0500
Subject: [PATCH 26/54] chore: test comment w/ summary, not logs
---
.github/workflows/node-build.yml | 120 +++++++++++++++++-
test/performance/package.json | 8 +-
.../scripts/create-outgoing-payments.js | 26 ++++
test/performance/scripts/run-tests.sh | 27 +++-
4 files changed, 164 insertions(+), 17 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 077dd540eb..6400316d89 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -219,7 +219,102 @@ jobs:
# if: steps.perf_test.outcome == 'failure'
# run: exit 1
-# Install k6 via action, run against this native k6 with run-test.sh, manual comment
+# Install k6 via action, run against this native k6 with run-test.sh, manual comment (log only)
+ # performance-test:
+ # runs-on: ubuntu-22.04
+ # needs: prerequisite
+ # timeout-minutes: 5
+ # steps:
+ # - name: Checkout code
+ # uses: actions/checkout@v4
+
+ # - name: Setup environment
+ # uses: ./.github/workflows/rafiki/env-setup
+
+ # - name: Set up k6
+ # uses: grafana/setup-k6-action@v1
+
+ # - name: Setup hosts
+ # run: |
+ # echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
+
+ # - name: Build dependencies
+ # run: pnpm --filter performance build:deps
+
+ # - name: Bundle
+ # run: pnpm --filter performance bundle
+
+ # - name: Start test environment
+ # run: pnpm --filter performance testenv:compose up --wait --build -d
+
+ # - name: Start Mock Account Entity Services
+ # run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
+
+ # - name: Run performance tests
+ # id: perf_test
+ # run: |
+ # pnpm --filter performance run-tests:testenv | tee performance.log
+ # continue-on-error: true # Dont fail here, allows showing logs
+
+ # - name: Print MASE logs
+ # if: always()
+ # run: cat mases.log
+
+ # - name: Post/Update Performance Test Logs as PR Comment
+ # if: always()
+ # uses: actions/github-script@v7
+ # with:
+ # github-token: ${{ secrets.GITHUB_TOKEN }}
+ # script: |
+ # const fs = require('fs');
+ # const logContent = fs.readFileSync('performance.log', 'utf8');
+ # const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
+
+ # const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
+
+ # const { owner, repo } = context.repo;
+ # const prNumber = context.payload.pull_request?.number;
+
+ # if (prNumber) {
+ # // Fetch existing comments on the PR
+ # const comments = await github.rest.issues.listComments({
+ # owner,
+ # repo,
+ # issue_number: prNumber
+ # });
+
+ # // Look for an existing comment with the "Performance Test Results" title
+ # const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
+
+ # if (existingComment) {
+ # // If a comment exists, update it
+ # await github.rest.issues.updateComment({
+ # owner,
+ # repo,
+ # comment_id: existingComment.id,
+ # body: commentBody
+ # });
+ # } else {
+ # // If no comment exists, create a new one
+ # await github.rest.issues.createComment({
+ # owner,
+ # repo,
+ # issue_number: prNumber,
+ # body: commentBody
+ # });
+ # }
+ # } else {
+ # console.log("No PR detected, skipping comment.");
+ # }
+
+ # - name: Fail if performance tests failed
+ # if: steps.perf_test.outcome == 'failure'
+ # run: exit 1
+
+# Install k6 via action, run against this native k6 with run-test.sh, manual comment (summary, not logs)
performance-test:
runs-on: ubuntu-22.04
needs: prerequisite
@@ -257,23 +352,32 @@ jobs:
id: perf_test
run: |
pnpm --filter performance run-tests:testenv | tee performance.log
- continue-on-error: true # Dont fail here, allows showing logs
+ continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
if: always()
run: cat mases.log
- - name: Post/Update Performance Test Logs as PR Comment
+ - name: Post/Update Performance Test Results as PR Comment
if: always()
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
- const logContent = fs.readFileSync('performance.log', 'utf8');
- const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
-
- const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
+ const path = './test/performance/k6test-summary.txt';
+ let summaryContent = '';
+
+ if (fs.existsSync(path)) {
+ summaryContent = fs.readFileSync(path, 'utf8');
+ } else {
+ summaryContent = 'Performance test summary not found.';
+ }
+
+ // GitHub comment size limit handling
+ const truncatedSummary = summaryContent.length > 65000 ? summaryContent.slice(-65000) : summaryContent;
+
+ const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedSummary}\n\`\`\``;
const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request?.number;
@@ -315,6 +419,8 @@ jobs:
run: exit 1
+
+
node-build:
runs-on: ubuntu-latest
timeout-minutes: 5
diff --git a/test/performance/package.json b/test/performance/package.json
index a13425aac1..4d37ca88e8 100644
--- a/test/performance/package.json
+++ b/test/performance/package.json
@@ -3,10 +3,10 @@
"version": "1.0.0",
"description": "",
"scripts": {
- "run-tests:testenv": "./scripts/run-tests.sh test",
- "run-tests-docker:testenv": "./scripts/run-tests.sh test --docker",
- "run-tests": "./scripts/run-tests.sh local",
- "run-tests-docker": "./scripts/run-tests.sh local --docker",
+ "run-tests:testenv": "./scripts/run-tests.sh -e test",
+ "run-tests-docker:testenv": "./scripts/run-tests.sh -e test --docker",
+ "run-tests": "./scripts/run-tests.sh",
+ "run-tests-docker": "./scripts/run-tests.sh --docker",
"hostile": "hostile",
"bundle": "webpack",
"testenv:compose": "docker compose -f ../testenv/cloud-nine-wallet/docker-compose.yml -f ../testenv/happy-life-bank/docker-compose.yml -f ../testenv/docker-compose.yml",
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 0830dcd50a..62e84c8dce 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -4,6 +4,7 @@
import http from 'k6/http'
import { fail } from 'k6'
import { createHMAC } from 'k6/crypto'
+import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js'
import { canonicalize } from '../dist/json-canonicalize.bundle.js'
export const options = {
@@ -159,3 +160,28 @@ export default function (data) {
request(createOutgoingPaymentPayload)
}
+
+export function handleSummary(data) {
+ const requestsPerSecond = data.metrics.http_reqs.values.rate
+ const iterationsPerSecond = data.metrics.iterations.values.rate
+ const failedRequests = data.metrics.http_req_failed.values.passes
+ const failureRate = data.metrics.http_req_failed.values.rate
+ const requests = data.metrics.http_reqs.values.count
+
+ const summaryText = `
+ **Test Configuration**:
+ - VUs: ${options.vus}
+ - Duration: ${options.duration}
+
+ **Test Metrics**:
+ - Requests/s: ${requestsPerSecond.toFixed(2)}
+ - Iterations/s: ${iterationsPerSecond.toFixed(2)}
+ - Failed Requests: ${failureRate.toFixed(2)}% (${failedRequests} of ${requests})
+ `
+
+ return {
+ // Preserve standard output w/ textSummary
+ stdout: textSummary(data),
+ 'k6test-summary.txt': summaryText // saves to file
+ }
+}
diff --git a/test/performance/scripts/run-tests.sh b/test/performance/scripts/run-tests.sh
index 66d20c93f1..b8845a4c87 100755
--- a/test/performance/scripts/run-tests.sh
+++ b/test/performance/scripts/run-tests.sh
@@ -3,17 +3,32 @@
# Defaults to local environment, system k6
ENV_NAME="local"
DOCKER_MODE=false
+K6_ARGS=""
-# Parse cli args
+# Flags:
+# -e, --environment : Set the environment (e.g., local, test)
+# -d, --docker : Use docker to run k6
+# -k, --k6args : Pass all following arguments to k6 (e.g., --out cloud --vus 10)
+
+# parse cli args
while [[ $# -gt 0 ]]; do
case "$1" in
- --docker)
+ -e | --environment)
+ ENV_NAME="$2"
+ shift 2
+ ;;
+ -d | --docker)
DOCKER_MODE=true
shift
;;
- *)
- ENV_NAME="$1"
+ -k | --k6args)
shift
+ K6_ARGS="$@"
+ break
+ ;;
+ *)
+ echo "Unknown argument: $1"
+ exit 1
;;
esac
done
@@ -83,12 +98,12 @@ if $DOCKER_MODE; then
-e CLOUD_NINE_GQL_ENDPOINT=$CLOUD_NINE_GQL_ENDPOINT \
-e CLOUD_NINE_WALLET_ADDRESS=$CLOUD_NINE_WALLET_ADDRESS \
-e HAPPY_LIFE_BANK_WALLET_ADDRESS=$HAPPY_LIFE_BANK_WALLET_ADDRESS \
- -i grafana/k6 run /scripts/create-outgoing-payments.js
+ -i grafana/k6 run /scripts/create-outgoing-payments.js $K6_ARGS
else
k6 run ./scripts/create-outgoing-payments.js \
-e CLOUD_NINE_GQL_ENDPOINT=$CLOUD_NINE_GQL_ENDPOINT \
-e CLOUD_NINE_WALLET_ADDRESS=$CLOUD_NINE_WALLET_ADDRESS \
- -e HAPPY_LIFE_BANK_WALLET_ADDRESS=$HAPPY_LIFE_BANK_WALLET_ADDRESS
+ -e HAPPY_LIFE_BANK_WALLET_ADDRESS=$HAPPY_LIFE_BANK_WALLET_ADDRESS $K6_ARGS
fi
exit $?
From 55bb709ba968788efd420582f05a180b0019e830 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 16:10:48 -0500
Subject: [PATCH 27/54] fix: pr comment
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 70aa2343fe..3e4620ddb2 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -377,7 +377,7 @@ jobs:
// GitHub comment size limit handling
const truncatedSummary = summaryContent.length > 65000 ? summaryContent.slice(-65000) : summaryContent;
- const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedSummary}\n\`\`\``;
+ const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}`;
const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request?.number;
From 432c4438c8e6e073c90bfb1d5c217e445ae006b3 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 16:20:48 -0500
Subject: [PATCH 28/54] chore: try linking perf results to gh job
---
.github/workflows/node-build.yml | 64 ++++++++++++++++++-
.../scripts/create-outgoing-payments.js | 4 +-
2 files changed, 64 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 3e4620ddb2..fb6446507e 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -358,6 +358,61 @@ jobs:
if: always()
run: cat mases.log
+ # - name: Post/Update Performance Test Results as PR Comment
+ # if: always()
+ # uses: actions/github-script@v7
+ # with:
+ # github-token: ${{ secrets.GITHUB_TOKEN }}
+ # script: |
+ # const fs = require('fs');
+ # const path = './test/performance/k6test-summary.txt';
+ # let summaryContent = '';
+
+ # if (fs.existsSync(path)) {
+ # summaryContent = fs.readFileSync(path, 'utf8');
+ # } else {
+ # summaryContent = 'Performance test summary not found.';
+ # }
+
+ # // GitHub comment size limit handling
+ # const truncatedSummary = summaryContent.length > 65000 ? summaryContent.slice(-65000) : summaryContent;
+
+ # const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}`;
+
+ # const { owner, repo } = context.repo;
+ # const prNumber = context.payload.pull_request?.number;
+
+ # if (prNumber) {
+ # // Fetch existing comments on the PR
+ # const comments = await github.rest.issues.listComments({
+ # owner,
+ # repo,
+ # issue_number: prNumber
+ # });
+
+ # // Look for an existing comment with the "Performance Test Results" title
+ # const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
+
+ # if (existingComment) {
+ # // If a comment exists, update it
+ # await github.rest.issues.updateComment({
+ # owner,
+ # repo,
+ # comment_id: existingComment.id,
+ # body: commentBody
+ # });
+ # } else {
+ # // If no comment exists, create a new one
+ # await github.rest.issues.createComment({
+ # owner,
+ # repo,
+ # issue_number: prNumber,
+ # body: commentBody
+ # });
+ # }
+ # } else {
+ # console.log("No PR detected, skipping comment.");
+ # }
- name: Post/Update Performance Test Results as PR Comment
if: always()
uses: actions/github-script@v7
@@ -377,9 +432,14 @@ jobs:
// GitHub comment size limit handling
const truncatedSummary = summaryContent.length > 65000 ? summaryContent.slice(-65000) : summaryContent;
- const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}`;
+ // Construct GitHub Action log link
+ const runId = context.runId;
+ const repo = context.repo.repo;
+ const owner = context.repo.owner;
+ const jobUrl = `https://github.com/${owner}/${repo}/actions/runs/${runId}`;
+
+ const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}\n\n[🔗 View Full Logs]( ${jobUrl} )`;
- const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request?.number;
if (prNumber) {
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 62e84c8dce..53299681e9 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -169,11 +169,11 @@ export function handleSummary(data) {
const requests = data.metrics.http_reqs.values.count
const summaryText = `
- **Test Configuration**:
+ **Configuration**:
- VUs: ${options.vus}
- Duration: ${options.duration}
- **Test Metrics**:
+ **Metrics**:
- Requests/s: ${requestsPerSecond.toFixed(2)}
- Iterations/s: ${iterationsPerSecond.toFixed(2)}
- Failed Requests: ${failureRate.toFixed(2)}% (${failedRequests} of ${requests})
From 87f74fe654360f5f293c46b8cfd4324dc4237bd6 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 16:27:18 -0500
Subject: [PATCH 29/54] Revert "chore: try linking perf results to gh job"
This reverts commit 432c4438c8e6e073c90bfb1d5c217e445ae006b3.
---
.github/workflows/node-build.yml | 64 +------------------
.../scripts/create-outgoing-payments.js | 4 +-
2 files changed, 4 insertions(+), 64 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index fb6446507e..3e4620ddb2 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -358,61 +358,6 @@ jobs:
if: always()
run: cat mases.log
- # - name: Post/Update Performance Test Results as PR Comment
- # if: always()
- # uses: actions/github-script@v7
- # with:
- # github-token: ${{ secrets.GITHUB_TOKEN }}
- # script: |
- # const fs = require('fs');
- # const path = './test/performance/k6test-summary.txt';
- # let summaryContent = '';
-
- # if (fs.existsSync(path)) {
- # summaryContent = fs.readFileSync(path, 'utf8');
- # } else {
- # summaryContent = 'Performance test summary not found.';
- # }
-
- # // GitHub comment size limit handling
- # const truncatedSummary = summaryContent.length > 65000 ? summaryContent.slice(-65000) : summaryContent;
-
- # const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}`;
-
- # const { owner, repo } = context.repo;
- # const prNumber = context.payload.pull_request?.number;
-
- # if (prNumber) {
- # // Fetch existing comments on the PR
- # const comments = await github.rest.issues.listComments({
- # owner,
- # repo,
- # issue_number: prNumber
- # });
-
- # // Look for an existing comment with the "Performance Test Results" title
- # const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
-
- # if (existingComment) {
- # // If a comment exists, update it
- # await github.rest.issues.updateComment({
- # owner,
- # repo,
- # comment_id: existingComment.id,
- # body: commentBody
- # });
- # } else {
- # // If no comment exists, create a new one
- # await github.rest.issues.createComment({
- # owner,
- # repo,
- # issue_number: prNumber,
- # body: commentBody
- # });
- # }
- # } else {
- # console.log("No PR detected, skipping comment.");
- # }
- name: Post/Update Performance Test Results as PR Comment
if: always()
uses: actions/github-script@v7
@@ -432,14 +377,9 @@ jobs:
// GitHub comment size limit handling
const truncatedSummary = summaryContent.length > 65000 ? summaryContent.slice(-65000) : summaryContent;
- // Construct GitHub Action log link
- const runId = context.runId;
- const repo = context.repo.repo;
- const owner = context.repo.owner;
- const jobUrl = `https://github.com/${owner}/${repo}/actions/runs/${runId}`;
-
- const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}\n\n[🔗 View Full Logs]( ${jobUrl} )`;
+ const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}`;
+ const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request?.number;
if (prNumber) {
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 53299681e9..62e84c8dce 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -169,11 +169,11 @@ export function handleSummary(data) {
const requests = data.metrics.http_reqs.values.count
const summaryText = `
- **Configuration**:
+ **Test Configuration**:
- VUs: ${options.vus}
- Duration: ${options.duration}
- **Metrics**:
+ **Test Metrics**:
- Requests/s: ${requestsPerSecond.toFixed(2)}
- Iterations/s: ${iterationsPerSecond.toFixed(2)}
- Failed Requests: ${failureRate.toFixed(2)}% (${failedRequests} of ${requests})
From 19d5135e2759044ad00baf70903285e0601c8797 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 17:43:25 -0500
Subject: [PATCH 30/54] chore: add logs to pr comment, try link again
---
.github/workflows/node-build.yml | 51 +++++++++++++++++++++++++++-----
1 file changed, 43 insertions(+), 8 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 3e4620ddb2..0230560061 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -358,28 +358,63 @@ jobs:
if: always()
run: cat mases.log
- - name: Post/Update Performance Test Results as PR Comment
+
+- name: Post/Update Performance Test Results as PR Comment
if: always()
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
- const path = './test/performance/k6test-summary.txt';
+ const summaryPath = './test/performance/k6test-summary.txt';
+ const logPath = './performance.log';
let summaryContent = '';
+ let logContent = '';
- if (fs.existsSync(path)) {
- summaryContent = fs.readFileSync(path, 'utf8');
+ // Read the k6 summary file
+ if (fs.existsSync(summaryPath)) {
+ summaryContent = fs.readFileSync(summaryPath, 'utf8');
} else {
summaryContent = 'Performance test summary not found.';
}
- // GitHub comment size limit handling
- const truncatedSummary = summaryContent.length > 65000 ? summaryContent.slice(-65000) : summaryContent;
+ // Read the full logs
+ if (fs.existsSync(logPath)) {
+ logContent = fs.readFileSync(logPath, 'utf8');
+ } else {
+ logContent = 'Performance log not found.';
+ }
- const commentBody = `### Performance Test Results 🚀\n${truncatedSummary}`;
+ // GitHub comment size limit handling (truncate logs if necessary)
+ const maxLogSize = 60000; // 60KB limit
+ const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
+ // Build the GitHub Actions job URL using the predefined job ID
const { owner, repo } = context.repo;
+ const runId = context.runId;
+ const jobId = "${{ steps.perf_test.id }}"; // Use the predefined job ID
+
+ let jobUrl = `https://github.com/${owner}/${repo}/actions/runs/${runId}`;
+ if (jobId) {
+ jobUrl += `/job/${jobId}`;
+ }
+
+ const commentBody = `
+ ### 🚀 Performance Test Results
+ **[🔗 View Full Logs](${jobUrl})**
+
+ ${summaryContent}
+
+
+ 📜 Expand for Full Performance Logs
+
+ \`\`\`
+ ${truncatedLogs}
+ \`\`\`
+
+
+ `;
+
const prNumber = context.payload.pull_request?.number;
if (prNumber) {
@@ -391,7 +426,7 @@ jobs:
});
// Look for an existing comment with the "Performance Test Results" title
- const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
+ const existingComment = comments.data.find(comment => comment.body.includes('🚀 Performance Test Results'));
if (existingComment) {
// If a comment exists, update it
From da88616ec8c95ab2aacb5f6cd8c43415e178ea67 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 17:49:51 -0500
Subject: [PATCH 31/54] chore: fix indentation
---
.github/workflows/node-build.yml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 0230560061..d3dae7890e 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -358,8 +358,7 @@ jobs:
if: always()
run: cat mases.log
-
-- name: Post/Update Performance Test Results as PR Comment
+ - name: Post/Update Performance Test Results as PR Comment
if: always()
uses: actions/github-script@v7
with:
From aa99873141f37ed902b07ec03338b6a8e151b949 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 18:05:48 -0500
Subject: [PATCH 32/54] chore: try forming link
---
.github/workflows/node-build.yml | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index d3dae7890e..73f6a0f52f 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -388,24 +388,33 @@ jobs:
const maxLogSize = 60000; // 60KB limit
const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
- // Build the GitHub Actions job URL using the predefined job ID
+ // Fetch workflow job details
const { owner, repo } = context.repo;
const runId = context.runId;
- const jobId = "${{ steps.perf_test.id }}"; // Use the predefined job ID
+
+ const jobs = await github.rest.actions.listJobsForWorkflowRun({
+ owner,
+ repo,
+ run_id: runId
+ });
+
+ // Find the job ID for "Run performance tests"
+ const perfTestJob = jobs.data.jobs.find(job => job.name === "Run performance tests");
let jobUrl = `https://github.com/${owner}/${repo}/actions/runs/${runId}`;
- if (jobId) {
- jobUrl += `/job/${jobId}`;
+ if (perfTestJob) {
+ jobUrl += `/job/${perfTestJob.id}`;
}
+
const commentBody = `
### 🚀 Performance Test Results
- **[🔗 View Full Logs](${jobUrl})**
${summaryContent}
+ **[🔗 Run](${jobUrl})**
- 📜 Expand for Full Performance Logs
+ 📜 Performance Logs
\`\`\`
${truncatedLogs}
From ca57b9da15c99e2e749be39b2d074814f98b8100 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 20:29:48 -0500
Subject: [PATCH 33/54] chore: rm badish link
---
.github/workflows/node-build.yml | 19 -------------------
1 file changed, 19 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 73f6a0f52f..a1ab78a2f9 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -388,31 +388,12 @@ jobs:
const maxLogSize = 60000; // 60KB limit
const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
- // Fetch workflow job details
- const { owner, repo } = context.repo;
- const runId = context.runId;
-
- const jobs = await github.rest.actions.listJobsForWorkflowRun({
- owner,
- repo,
- run_id: runId
- });
-
- // Find the job ID for "Run performance tests"
- const perfTestJob = jobs.data.jobs.find(job => job.name === "Run performance tests");
-
- let jobUrl = `https://github.com/${owner}/${repo}/actions/runs/${runId}`;
- if (perfTestJob) {
- jobUrl += `/job/${perfTestJob.id}`;
- }
-
const commentBody = `
### 🚀 Performance Test Results
${summaryContent}
- **[🔗 Run](${jobUrl})**
📜 Performance Logs
From fc23590017cd70821cbd026177d7dc122cef1555 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 20:36:47 -0500
Subject: [PATCH 34/54] fix: owner undefined
---
.github/workflows/node-build.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index a1ab78a2f9..697439f24d 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -404,6 +404,7 @@ jobs:
`;
+ const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request?.number;
if (prNumber) {
From 3ce75912f6f9e2ec63b39fa5c7a581e128f2e6fd Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 21:12:19 -0500
Subject: [PATCH 35/54] chore: test ci
---
.github/workflows/node-build.yml | 272 +++++++++++++++----------------
1 file changed, 136 insertions(+), 136 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 697439f24d..4165376e44 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -220,101 +220,6 @@ jobs:
# run: exit 1
# Install k6 via action, run against this native k6 with run-test.sh, manual comment (log only)
- # performance-test:
- # runs-on: ubuntu-22.04
- # needs: prerequisite
- # timeout-minutes: 5
- # steps:
- # - name: Checkout code
- # uses: actions/checkout@v4
-
- # - name: Setup environment
- # uses: ./.github/workflows/rafiki/env-setup
-
- # - name: Set up k6
- # uses: grafana/setup-k6-action@v1
-
- # - name: Setup hosts
- # run: |
- # echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
-
- # - name: Build dependencies
- # run: pnpm --filter performance build:deps
-
- # - name: Bundle
- # run: pnpm --filter performance bundle
-
- # - name: Start test environment
- # run: pnpm --filter performance testenv:compose up --wait --build -d
-
- # - name: Start Mock Account Entity Services
- # run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
-
- # - name: Run performance tests
- # id: perf_test
- # run: |
- # pnpm --filter performance run-tests:testenv | tee performance.log
- # continue-on-error: true # Dont fail here, allows showing logs
-
- # - name: Print MASE logs
- # if: always()
- # run: cat mases.log
-
- # - name: Post/Update Performance Test Logs as PR Comment
- # if: always()
- # uses: actions/github-script@v7
- # with:
- # github-token: ${{ secrets.GITHUB_TOKEN }}
- # script: |
- # const fs = require('fs');
- # const logContent = fs.readFileSync('performance.log', 'utf8');
- # const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
-
- # const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
-
- # const { owner, repo } = context.repo;
- # const prNumber = context.payload.pull_request?.number;
-
- # if (prNumber) {
- # // Fetch existing comments on the PR
- # const comments = await github.rest.issues.listComments({
- # owner,
- # repo,
- # issue_number: prNumber
- # });
-
- # // Look for an existing comment with the "Performance Test Results" title
- # const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
-
- # if (existingComment) {
- # // If a comment exists, update it
- # await github.rest.issues.updateComment({
- # owner,
- # repo,
- # comment_id: existingComment.id,
- # body: commentBody
- # });
- # } else {
- # // If no comment exists, create a new one
- # await github.rest.issues.createComment({
- # owner,
- # repo,
- # issue_number: prNumber,
- # body: commentBody
- # });
- # }
- # } else {
- # console.log("No PR detected, skipping comment.");
- # }
-
- # - name: Fail if performance tests failed
- # if: steps.perf_test.outcome == 'failure'
- # run: exit 1
-
-# Install k6 via action, run against this native k6 with run-test.sh, manual comment (summary, not logs)
performance-test:
runs-on: ubuntu-22.04
needs: prerequisite
@@ -352,57 +257,23 @@ jobs:
id: perf_test
run: |
pnpm --filter performance run-tests:testenv | tee performance.log
- continue-on-error: true # Don't fail here, allows showing logs
+ continue-on-error: true # Dont fail here, allows showing logs
- name: Print MASE logs
if: always()
run: cat mases.log
- - name: Post/Update Performance Test Results as PR Comment
+ - name: Post/Update Performance Test Logs as PR Comment
if: always()
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
- const summaryPath = './test/performance/k6test-summary.txt';
- const logPath = './performance.log';
- let summaryContent = '';
- let logContent = '';
-
- // Read the k6 summary file
- if (fs.existsSync(summaryPath)) {
- summaryContent = fs.readFileSync(summaryPath, 'utf8');
- } else {
- summaryContent = 'Performance test summary not found.';
- }
-
- // Read the full logs
- if (fs.existsSync(logPath)) {
- logContent = fs.readFileSync(logPath, 'utf8');
- } else {
- logContent = 'Performance log not found.';
- }
-
- // GitHub comment size limit handling (truncate logs if necessary)
- const maxLogSize = 60000; // 60KB limit
- const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
-
-
- const commentBody = `
- ### 🚀 Performance Test Results
-
- ${summaryContent}
-
-
- 📜 Performance Logs
-
- \`\`\`
- ${truncatedLogs}
- \`\`\`
-
-
- `;
+ const logContent = fs.readFileSync('performance.log', 'utf8');
+ const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
+
+ const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request?.number;
@@ -416,7 +287,7 @@ jobs:
});
// Look for an existing comment with the "Performance Test Results" title
- const existingComment = comments.data.find(comment => comment.body.includes('🚀 Performance Test Results'));
+ const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
if (existingComment) {
// If a comment exists, update it
@@ -443,6 +314,135 @@ jobs:
if: steps.perf_test.outcome == 'failure'
run: exit 1
+# Install k6 via action, run against this native k6 with run-test.sh, manual comment (summary, not logs)
+ # performance-test:
+ # runs-on: ubuntu-22.04
+ # needs: prerequisite
+ # timeout-minutes: 5
+ # steps:
+ # - name: Checkout code
+ # uses: actions/checkout@v4
+
+ # - name: Setup environment
+ # uses: ./.github/workflows/rafiki/env-setup
+
+ # - name: Set up k6
+ # uses: grafana/setup-k6-action@v1
+
+ # - name: Setup hosts
+ # run: |
+ # echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
+ # echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
+
+ # - name: Build dependencies
+ # run: pnpm --filter performance build:deps
+
+ # - name: Bundle
+ # run: pnpm --filter performance bundle
+
+ # - name: Start test environment
+ # run: pnpm --filter performance testenv:compose up --wait --build -d
+
+ # - name: Start Mock Account Entity Services
+ # run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
+
+ # - name: Run performance tests
+ # id: perf_test
+ # run: |
+ # pnpm --filter performance run-tests:testenv | tee performance.log
+ # continue-on-error: true # Don't fail here, allows showing logs
+
+ # - name: Print MASE logs
+ # if: always()
+ # run: cat mases.log
+
+ # - name: Post/Update Performance Test Results as PR Comment
+ # if: always()
+ # uses: actions/github-script@v7
+ # with:
+ # github-token: ${{ secrets.GITHUB_TOKEN }}
+ # script: |
+ # const fs = require('fs');
+ # const summaryPath = './test/performance/k6test-summary.txt';
+ # const logPath = './performance.log';
+ # let summaryContent = '';
+ # let logContent = '';
+
+ # // Read the k6 summary file
+ # if (fs.existsSync(summaryPath)) {
+ # summaryContent = fs.readFileSync(summaryPath, 'utf8');
+ # } else {
+ # summaryContent = 'Performance test summary not found.';
+ # }
+
+ # // Read the full logs
+ # if (fs.existsSync(logPath)) {
+ # logContent = fs.readFileSync(logPath, 'utf8');
+ # } else {
+ # logContent = 'Performance log not found.';
+ # }
+
+ # // GitHub comment size limit handling (truncate logs if necessary)
+ # const maxLogSize = 60000; // 60KB limit
+ # const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
+
+
+ # const commentBody = `
+ # ### 🚀 Performance Test Results
+
+ # ${summaryContent}
+
+ #
+ # 📜 Performance Logs
+
+ # \`\`\`
+ # ${truncatedLogs}
+ # \`\`\`
+
+ #
+ # `;
+
+ # const { owner, repo } = context.repo;
+ # const prNumber = context.payload.pull_request?.number;
+
+ # if (prNumber) {
+ # // Fetch existing comments on the PR
+ # const comments = await github.rest.issues.listComments({
+ # owner,
+ # repo,
+ # issue_number: prNumber
+ # });
+
+ # // Look for an existing comment with the "Performance Test Results" title
+ # const existingComment = comments.data.find(comment => comment.body.includes('🚀 Performance Test Results'));
+
+ # if (existingComment) {
+ # // If a comment exists, update it
+ # await github.rest.issues.updateComment({
+ # owner,
+ # repo,
+ # comment_id: existingComment.id,
+ # body: commentBody
+ # });
+ # } else {
+ # // If no comment exists, create a new one
+ # await github.rest.issues.createComment({
+ # owner,
+ # repo,
+ # issue_number: prNumber,
+ # body: commentBody
+ # });
+ # }
+ # } else {
+ # console.log("No PR detected, skipping comment.");
+ # }
+
+ # - name: Fail if performance tests failed
+ # if: steps.perf_test.outcome == 'failure'
+ # run: exit 1
+
From d051dd6b813195faba1dcce912b0ccfb2c3aec69 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 21:16:43 -0500
Subject: [PATCH 36/54] chore: test ci
---
test/performance/scripts/create-outgoing-payments.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 62e84c8dce..af5748b607 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -181,7 +181,7 @@ export function handleSummary(data) {
return {
// Preserve standard output w/ textSummary
- stdout: textSummary(data),
+ stdout: textSummary(data, { enableColors: false }),
'k6test-summary.txt': summaryText // saves to file
}
}
From 1d0b50b16fef9d7568349f8e3c98ff2f5a498123 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 21:22:03 -0500
Subject: [PATCH 37/54] chore: test ci
---
.github/workflows/node-build.yml | 272 +++++++++++++++----------------
1 file changed, 136 insertions(+), 136 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 4165376e44..697439f24d 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -220,101 +220,6 @@ jobs:
# run: exit 1
# Install k6 via action, run against this native k6 with run-test.sh, manual comment (log only)
- performance-test:
- runs-on: ubuntu-22.04
- needs: prerequisite
- timeout-minutes: 5
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Setup environment
- uses: ./.github/workflows/rafiki/env-setup
-
- - name: Set up k6
- uses: grafana/setup-k6-action@v1
-
- - name: Setup hosts
- run: |
- echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
- echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
- echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
- echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
-
- - name: Build dependencies
- run: pnpm --filter performance build:deps
-
- - name: Bundle
- run: pnpm --filter performance bundle
-
- - name: Start test environment
- run: pnpm --filter performance testenv:compose up --wait --build -d
-
- - name: Start Mock Account Entity Services
- run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
-
- - name: Run performance tests
- id: perf_test
- run: |
- pnpm --filter performance run-tests:testenv | tee performance.log
- continue-on-error: true # Dont fail here, allows showing logs
-
- - name: Print MASE logs
- if: always()
- run: cat mases.log
-
- - name: Post/Update Performance Test Logs as PR Comment
- if: always()
- uses: actions/github-script@v7
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- script: |
- const fs = require('fs');
- const logContent = fs.readFileSync('performance.log', 'utf8');
- const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
-
- const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
-
- const { owner, repo } = context.repo;
- const prNumber = context.payload.pull_request?.number;
-
- if (prNumber) {
- // Fetch existing comments on the PR
- const comments = await github.rest.issues.listComments({
- owner,
- repo,
- issue_number: prNumber
- });
-
- // Look for an existing comment with the "Performance Test Results" title
- const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
-
- if (existingComment) {
- // If a comment exists, update it
- await github.rest.issues.updateComment({
- owner,
- repo,
- comment_id: existingComment.id,
- body: commentBody
- });
- } else {
- // If no comment exists, create a new one
- await github.rest.issues.createComment({
- owner,
- repo,
- issue_number: prNumber,
- body: commentBody
- });
- }
- } else {
- console.log("No PR detected, skipping comment.");
- }
-
- - name: Fail if performance tests failed
- if: steps.perf_test.outcome == 'failure'
- run: exit 1
-
-# Install k6 via action, run against this native k6 with run-test.sh, manual comment (summary, not logs)
# performance-test:
# runs-on: ubuntu-22.04
# needs: prerequisite
@@ -352,57 +257,23 @@ jobs:
# id: perf_test
# run: |
# pnpm --filter performance run-tests:testenv | tee performance.log
- # continue-on-error: true # Don't fail here, allows showing logs
+ # continue-on-error: true # Dont fail here, allows showing logs
# - name: Print MASE logs
# if: always()
# run: cat mases.log
- # - name: Post/Update Performance Test Results as PR Comment
+ # - name: Post/Update Performance Test Logs as PR Comment
# if: always()
# uses: actions/github-script@v7
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# script: |
# const fs = require('fs');
- # const summaryPath = './test/performance/k6test-summary.txt';
- # const logPath = './performance.log';
- # let summaryContent = '';
- # let logContent = '';
-
- # // Read the k6 summary file
- # if (fs.existsSync(summaryPath)) {
- # summaryContent = fs.readFileSync(summaryPath, 'utf8');
- # } else {
- # summaryContent = 'Performance test summary not found.';
- # }
-
- # // Read the full logs
- # if (fs.existsSync(logPath)) {
- # logContent = fs.readFileSync(logPath, 'utf8');
- # } else {
- # logContent = 'Performance log not found.';
- # }
-
- # // GitHub comment size limit handling (truncate logs if necessary)
- # const maxLogSize = 60000; // 60KB limit
- # const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
-
-
- # const commentBody = `
- # ### 🚀 Performance Test Results
-
- # ${summaryContent}
-
- #
- # 📜 Performance Logs
-
- # \`\`\`
- # ${truncatedLogs}
- # \`\`\`
-
- #
- # `;
+ # const logContent = fs.readFileSync('performance.log', 'utf8');
+ # const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
+
+ # const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
# const { owner, repo } = context.repo;
# const prNumber = context.payload.pull_request?.number;
@@ -416,7 +287,7 @@ jobs:
# });
# // Look for an existing comment with the "Performance Test Results" title
- # const existingComment = comments.data.find(comment => comment.body.includes('🚀 Performance Test Results'));
+ # const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
# if (existingComment) {
# // If a comment exists, update it
@@ -443,6 +314,135 @@ jobs:
# if: steps.perf_test.outcome == 'failure'
# run: exit 1
+# Install k6 via action, run against this native k6 with run-test.sh, manual comment (summary, not logs)
+ performance-test:
+ runs-on: ubuntu-22.04
+ needs: prerequisite
+ timeout-minutes: 5
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup environment
+ uses: ./.github/workflows/rafiki/env-setup
+
+ - name: Set up k6
+ uses: grafana/setup-k6-action@v1
+
+ - name: Setup hosts
+ run: |
+ echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
+ echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
+ echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
+ echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
+
+ - name: Build dependencies
+ run: pnpm --filter performance build:deps
+
+ - name: Bundle
+ run: pnpm --filter performance bundle
+
+ - name: Start test environment
+ run: pnpm --filter performance testenv:compose up --wait --build -d
+
+ - name: Start Mock Account Entity Services
+ run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
+
+ - name: Run performance tests
+ id: perf_test
+ run: |
+ pnpm --filter performance run-tests:testenv | tee performance.log
+ continue-on-error: true # Don't fail here, allows showing logs
+
+ - name: Print MASE logs
+ if: always()
+ run: cat mases.log
+
+ - name: Post/Update Performance Test Results as PR Comment
+ if: always()
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const fs = require('fs');
+ const summaryPath = './test/performance/k6test-summary.txt';
+ const logPath = './performance.log';
+ let summaryContent = '';
+ let logContent = '';
+
+ // Read the k6 summary file
+ if (fs.existsSync(summaryPath)) {
+ summaryContent = fs.readFileSync(summaryPath, 'utf8');
+ } else {
+ summaryContent = 'Performance test summary not found.';
+ }
+
+ // Read the full logs
+ if (fs.existsSync(logPath)) {
+ logContent = fs.readFileSync(logPath, 'utf8');
+ } else {
+ logContent = 'Performance log not found.';
+ }
+
+ // GitHub comment size limit handling (truncate logs if necessary)
+ const maxLogSize = 60000; // 60KB limit
+ const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
+
+
+ const commentBody = `
+ ### 🚀 Performance Test Results
+
+ ${summaryContent}
+
+
+ 📜 Performance Logs
+
+ \`\`\`
+ ${truncatedLogs}
+ \`\`\`
+
+
+ `;
+
+ const { owner, repo } = context.repo;
+ const prNumber = context.payload.pull_request?.number;
+
+ if (prNumber) {
+ // Fetch existing comments on the PR
+ const comments = await github.rest.issues.listComments({
+ owner,
+ repo,
+ issue_number: prNumber
+ });
+
+ // Look for an existing comment with the "Performance Test Results" title
+ const existingComment = comments.data.find(comment => comment.body.includes('🚀 Performance Test Results'));
+
+ if (existingComment) {
+ // If a comment exists, update it
+ await github.rest.issues.updateComment({
+ owner,
+ repo,
+ comment_id: existingComment.id,
+ body: commentBody
+ });
+ } else {
+ // If no comment exists, create a new one
+ await github.rest.issues.createComment({
+ owner,
+ repo,
+ issue_number: prNumber,
+ body: commentBody
+ });
+ }
+ } else {
+ console.log("No PR detected, skipping comment.");
+ }
+
+ - name: Fail if performance tests failed
+ if: steps.perf_test.outcome == 'failure'
+ run: exit 1
+
From b8e2316d92ae26deac20d420486a39324e91a853 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Tue, 11 Feb 2025 21:42:26 -0500
Subject: [PATCH 38/54] chore: clarify job script
---
.github/workflows/node-build.yml | 170 ++-----------------------------
1 file changed, 6 insertions(+), 164 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 697439f24d..e00a090725 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -159,162 +159,6 @@ jobs:
- name: Run tests
run: pnpm --filter integration run-tests
- # Performance script options
- # - use k6 actions for everything. k6 install and k6 run configrued to upload.
- # kinda conflicts with how tests are setup to run with run-tests.sh script.
- # Would need to rework or duplucate some stuff in ci (setting env vars, ???)
- # - just use k6 action to install then run and comment manually in action.
- # - probably not ideal because logic to comment may be a bit complicated and lose all the free stuff
- # we get from uploading to cloud k6 (history? formatting, etc.). Would probably want to save
- # results as json to parse for the comment.
- # - combination... just k6 action to install then run manually (with run-tests.sh) and upload
- # run to k6 cloud.
- # - Might be ok... not sure if we lose anything from running with the k6 action configured to upload
- # - enables us to use the run-scripts.sh
-
- # Install k6 via action, run against this native k6 with run-test.sh, no comment
- # performance-test:
- # runs-on: ubuntu-22.04
- # needs: prerequisite
- # timeout-minutes: 5
- # steps:
- # - name: Checkout code
- # uses: actions/checkout@v4
-
- # - name: Setup environment
- # uses: ./.github/workflows/rafiki/env-setup
-
- # - name: Set up k6
- # uses: grafana/setup-k6-action@v1
-
- # - name: Setup hosts
- # run: |
- # echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
-
- # - name: Build dependencies
- # run: pnpm --filter performance build:deps
-
- # - name: Bundle
- # run: pnpm --filter performance bundle
-
- # - name: Start test environment
- # run: pnpm --filter performance testenv:compose up --wait --build -d
-
- # - name: Start Mock Account Entity Services
- # run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
-
- # - name: Run performance tests
- # id: perf_test
- # run: pnpm --filter performance run-tests:testenv
- # continue-on-error: true # Dont fail here, allows showing logs
-
- # - name: Print MASE logs
- # if: always()
- # run: cat mases.log
-
- # - name: Fail if performance tests failed
- # if: steps.perf_test.outcome == 'failure'
- # run: exit 1
-
-# Install k6 via action, run against this native k6 with run-test.sh, manual comment (log only)
- # performance-test:
- # runs-on: ubuntu-22.04
- # needs: prerequisite
- # timeout-minutes: 5
- # steps:
- # - name: Checkout code
- # uses: actions/checkout@v4
-
- # - name: Setup environment
- # uses: ./.github/workflows/rafiki/env-setup
-
- # - name: Set up k6
- # uses: grafana/setup-k6-action@v1
-
- # - name: Setup hosts
- # run: |
- # echo "127.0.0.1 cloud-nine-wallet-test-backend" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 cloud-nine-wallet-test-auth" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 happy-life-bank-test-backend" | sudo tee -a /etc/hosts
- # echo "127.0.0.1 happy-life-bank-test-auth" | sudo tee -a /etc/hosts
-
- # - name: Build dependencies
- # run: pnpm --filter performance build:deps
-
- # - name: Bundle
- # run: pnpm --filter performance bundle
-
- # - name: Start test environment
- # run: pnpm --filter performance testenv:compose up --wait --build -d
-
- # - name: Start Mock Account Entity Services
- # run: nohup pnpm --filter performance start-mases > mases.log 2>&1 &
-
- # - name: Run performance tests
- # id: perf_test
- # run: |
- # pnpm --filter performance run-tests:testenv | tee performance.log
- # continue-on-error: true # Dont fail here, allows showing logs
-
- # - name: Print MASE logs
- # if: always()
- # run: cat mases.log
-
- # - name: Post/Update Performance Test Logs as PR Comment
- # if: always()
- # uses: actions/github-script@v7
- # with:
- # github-token: ${{ secrets.GITHUB_TOKEN }}
- # script: |
- # const fs = require('fs');
- # const logContent = fs.readFileSync('performance.log', 'utf8');
- # const truncatedLog = logContent.length > 65000 ? logContent.slice(-65000) : logContent; // GitHub limits comments to ~65KB
-
- # const commentBody = `### Performance Test Results 🚀\n\`\`\`\n${truncatedLog}\n\`\`\``;
-
- # const { owner, repo } = context.repo;
- # const prNumber = context.payload.pull_request?.number;
-
- # if (prNumber) {
- # // Fetch existing comments on the PR
- # const comments = await github.rest.issues.listComments({
- # owner,
- # repo,
- # issue_number: prNumber
- # });
-
- # // Look for an existing comment with the "Performance Test Results" title
- # const existingComment = comments.data.find(comment => comment.body.includes('### Performance Test Results'));
-
- # if (existingComment) {
- # // If a comment exists, update it
- # await github.rest.issues.updateComment({
- # owner,
- # repo,
- # comment_id: existingComment.id,
- # body: commentBody
- # });
- # } else {
- # // If no comment exists, create a new one
- # await github.rest.issues.createComment({
- # owner,
- # repo,
- # issue_number: prNumber,
- # body: commentBody
- # });
- # }
- # } else {
- # console.log("No PR detected, skipping comment.");
- # }
-
- # - name: Fail if performance tests failed
- # if: steps.perf_test.outcome == 'failure'
- # run: exit 1
-
-# Install k6 via action, run against this native k6 with run-test.sh, manual comment (summary, not logs)
performance-test:
runs-on: ubuntu-22.04
needs: prerequisite
@@ -384,8 +228,9 @@ jobs:
logContent = 'Performance log not found.';
}
- // GitHub comment size limit handling (truncate logs if necessary)
- const maxLogSize = 60000; // 60KB limit
+ // Limit in case large file size to avoid error posting comment (65kb limit)
+ // https://github.com/orgs/community/discussions/41331
+ const maxLogSize = 60000;
const truncatedLogs = logContent.length > maxLogSize ? `...(truncated)...\n${logContent.slice(-maxLogSize)}` : logContent;
@@ -395,7 +240,7 @@ jobs:
${summaryContent}
- 📜 Performance Logs
+ 📜 Logs
\`\`\`
${truncatedLogs}
@@ -408,18 +253,16 @@ jobs:
const prNumber = context.payload.pull_request?.number;
if (prNumber) {
- // Fetch existing comments on the PR
const comments = await github.rest.issues.listComments({
owner,
repo,
issue_number: prNumber
});
- // Look for an existing comment with the "Performance Test Results" title
+ // Identify existing comment via title
const existingComment = comments.data.find(comment => comment.body.includes('🚀 Performance Test Results'));
- if (existingComment) {
- // If a comment exists, update it
+ if (existingComment) { // upsert comment
await github.rest.issues.updateComment({
owner,
repo,
@@ -427,7 +270,6 @@ jobs:
body: commentBody
});
} else {
- // If no comment exists, create a new one
await github.rest.issues.createComment({
owner,
repo,
From 8a358db0457001b487f09a6c22b9a98c2bf45e93 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 12 Feb 2025 12:49:24 -0500
Subject: [PATCH 39/54] fix: override test config in ci
- not sure if config outpute by script will reflect options passed in, probably not.
config in gh pr comment may not be accurate.
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index e00a090725..73cf17d039 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -195,7 +195,7 @@ jobs:
- name: Run performance tests
id: perf_test
run: |
- pnpm --filter performance run-tests:testenv | tee performance.log
+ pnpm --filter performance run-tests:testenv -k --vus 2 --duration 30s | tee performance.log
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From a7ce6c90e4ea39d0420b265ec70f12e347f30b1b Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 12 Feb 2025 14:14:42 -0500
Subject: [PATCH 40/54] ci: test failure
---
.github/workflows/node-build.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 73cf17d039..0ca360b559 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -194,8 +194,10 @@ jobs:
- name: Run performance tests
id: perf_test
+ # TODO: testing how the rest of the steps behave (such as comment) when this fails.
run: |
pnpm --filter performance run-tests:testenv -k --vus 2 --duration 30s | tee performance.log
+ exit 1
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From 3d7f998b0e21632e91d4678a2e775e4abc8a9f88 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 12 Feb 2025 14:31:04 -0500
Subject: [PATCH 41/54] chore: ignore test summary
---
.github/workflows/node-build.yml | 2 +-
.gitignore | 2 ++
test/performance/scripts/create-outgoing-payments.js | 2 +-
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 0ca360b559..e4a52b5c65 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -211,7 +211,7 @@ jobs:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
- const summaryPath = './test/performance/k6test-summary.txt';
+ const summaryPath = './test/performance/k6-test-summary.txt';
const logPath = './performance.log';
let summaryContent = '';
let logContent = '';
diff --git a/.gitignore b/.gitignore
index 10914889f5..42e1ebd555 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,3 +63,5 @@ packages/**/src/openapi/specs/schemas.yaml
packages/**/src/openapi/specs/auth-server.yaml
packages/**/src/openapi/specs/resource-server.yaml
packages/**/src/openapi/specs/wallet-address-server.yaml
+
+k6-test-summary.txt
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index af5748b607..d18c6b55d7 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -182,6 +182,6 @@ export function handleSummary(data) {
return {
// Preserve standard output w/ textSummary
stdout: textSummary(data, { enableColors: false }),
- 'k6test-summary.txt': summaryText // saves to file
+ 'k6-test-summary.txt': summaryText // saves to file
}
}
From e4984655ddbee23560c63c33b1ae9457782a3d78 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 12 Feb 2025 14:33:22 -0500
Subject: [PATCH 42/54] ci: un-fail step
---
.github/workflows/node-build.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index e4a52b5c65..0fe060a53f 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -194,10 +194,8 @@ jobs:
- name: Run performance tests
id: perf_test
- # TODO: testing how the rest of the steps behave (such as comment) when this fails.
run: |
pnpm --filter performance run-tests:testenv -k --vus 2 --duration 30s | tee performance.log
- exit 1
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From 747aa83c21552eae2d6cd09da938106cf60fa078 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 12 Feb 2025 14:41:12 -0500
Subject: [PATCH 43/54] ci: tune test config
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 0fe060a53f..ac4a858103 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -195,7 +195,7 @@ jobs:
- name: Run performance tests
id: perf_test
run: |
- pnpm --filter performance run-tests:testenv -k --vus 2 --duration 30s | tee performance.log
+ pnpm --filter performance run-tests:testenv -k --vus 4 --duration 2m | tee performance.log
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From c5b279d4c207d6c47a9d6f48da675ef26d836207 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 12 Feb 2025 14:50:23 -0500
Subject: [PATCH 44/54] ci: tune test config
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index ac4a858103..c8544e1527 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -195,7 +195,7 @@ jobs:
- name: Run performance tests
id: perf_test
run: |
- pnpm --filter performance run-tests:testenv -k --vus 4 --duration 2m | tee performance.log
+ pnpm --filter performance run-tests:testenv -k --vus 6 --duration 1m | tee performance.log
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From 4a923db5d5512deda780b020cdfa0abc6337cb2a Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Wed, 12 Feb 2025 14:55:36 -0500
Subject: [PATCH 45/54] ci: tune test config
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index c8544e1527..3c727de297 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -195,7 +195,7 @@ jobs:
- name: Run performance tests
id: perf_test
run: |
- pnpm --filter performance run-tests:testenv -k --vus 6 --duration 1m | tee performance.log
+ pnpm --filter performance run-tests:testenv -k --vus 4 --duration 1m | tee performance.log
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From 27d9d81c9e4fbc676154bb4feb11816cf22c39a1 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 13 Feb 2025 12:27:51 -0500
Subject: [PATCH 46/54] fix: 401 bug for duplicate reqs
---
test/performance/scripts/create-outgoing-payments.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index d18c6b55d7..6d53c504be 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -4,6 +4,7 @@
import http from 'k6/http'
import { fail } from 'k6'
import { createHMAC } from 'k6/crypto'
+import { uuidv4 } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'
import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js'
import { canonicalize } from '../dist/json-canonicalize.bundle.js'
@@ -29,7 +30,7 @@ function generateSignedHeaders(requestPayload) {
return {
'Content-Type': 'application/json',
- signature: `t=${timestamp}, v${SIGNATURE_VERSION}=${digest}`
+ signature: `t=${timestamp}, v${SIGNATURE_VERSION}=${digest}, n=${uuidv4()}`
}
}
From a8296196e078817d156acab17b136e4b0d814fcb Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 13 Feb 2025 12:30:45 -0500
Subject: [PATCH 47/54] ci: tune test config
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 3c727de297..3dab577f12 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -195,7 +195,7 @@ jobs:
- name: Run performance tests
id: perf_test
run: |
- pnpm --filter performance run-tests:testenv -k --vus 4 --duration 1m | tee performance.log
+ pnpm --filter performance run-tests:testenv -k --vus 5 --duration 1m | tee performance.log
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From f17acd8f1f2f88e308a34ec303986476a4873f68 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 13 Feb 2025 12:42:12 -0500
Subject: [PATCH 48/54] docs: update performance readme
---
test/performance/README.md | 66 ++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/test/performance/README.md b/test/performance/README.md
index ab0f8ec8a0..4c3714131c 100644
--- a/test/performance/README.md
+++ b/test/performance/README.md
@@ -34,3 +34,69 @@ The test can also be run inside of a Docker container on the same Docker network
```
pnpm --filter performance run-tests-docker
```
+
+# Performance Tests
+
+This package contains a script that will determine the performance of Rafiki by repeatedly making a series of requests to a Rafiki instance to create several kinds of resources (receivers, quotes, outgoing payments).
+
+## Prerequisites
+
+- [Grafana k6](https://grafana.com/docs/k6/latest/set-up/install-k6/) (required if not running with Docker)
+
+ - [Grafana k6](https://grafana.com/docs/k6/latest/) is used to run performance test scripts against Rafiki.
+
+- **Local environment** (required if running tests against it)
+ - A local Rafiki playground may be started using the instructions in [Running local playground for Rafiki](../../localenv/README.md).
+ - It is recommended to start the local playground with Telemetry running in order to see the impact of a performance test.
+ - If the local environment isn't running, it may be started with:
+ ```sh
+ pnpm localenv:compose:telemetry:up
+ ```
+
+If running against the **test environment**, manual initialization is not required.
+
+## Run Tests
+
+The performance script relies on a node module which must be bundled before running:
+
+```sh
+pnpm --filter performance bundle
+```
+
+### Running Against Local Environment
+
+To run the performance tests against a locally running Rafiki instance:
+
+```sh
+pnpm --filter performance run-tests
+```
+
+The test makes a few checks to verify the local playground is running, then runs the k6 binary on the [create-outgoing-payments.js](./scripts/create-outgoing-payments.js) script.
+
+Alternatively, the test can be run inside a Docker container on the same Docker network as the Local Playground:
+
+```sh
+pnpm --filter performance run-tests-docker
+```
+
+### Running Against Test Environment
+
+To run the performance tests against the test environment (which does not require manual initialization):
+
+```sh
+pnpm --filter performance run-tests:testenv
+```
+
+Or using Docker:
+
+```sh
+pnpm --filter performance run-tests-docker:testenv
+```
+
+### Overriding k6 Arguments
+
+k6 test options can be overridden by passing arguments after `--k6args`, or `-k`. For example, to set the number of virtual users to 5 and duration to 1 minute:
+
+```sh
+pnpm --filter performance run-tests:testenv -k --vus 5 --duration 1m
+```
From cd832101a86e71728ccf1dff432a26ea7317c93e Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 13 Feb 2025 13:36:59 -0500
Subject: [PATCH 49/54] docs: update README
---
test/performance/README.md | 55 +++++++++++---------------------------
1 file changed, 16 insertions(+), 39 deletions(-)
diff --git a/test/performance/README.md b/test/performance/README.md
index 4c3714131c..86e54a234d 100644
--- a/test/performance/README.md
+++ b/test/performance/README.md
@@ -4,56 +4,33 @@ This package contains a script that will determine the performance of Rafiki by
## Prerequisites
-- [Grafana k6](https://grafana.com/docs/k6/latest/set-up/install-k6/)
+- [Grafana k6](https://grafana.com/docs/k6/latest/set-up/install-k6/) (required if not running with Docker)
- [Grafana k6](https://grafana.com/docs/k6/latest/) is used to run performance test scripts against Rafiki.
-- [Running local playground for Rafiki](../../localenv/README.md)
- - It is recommended to start the local playground with Telemetry running in order to see the impact of a performance test.
+- **Environment**
-If the local environment isn't running it may be started by using the command `pnpm localenv:compose:telemetry:up`.
+ It is recommended to start the local playground with Telemetry running in order to see the impact of a performance test.
-## Run tests
+ A local Rafiki playground may be started using the instructions in [Running local playground for Rafiki](../../localenv/README.md).
-The performance script relies on a node module which must be bundled before running:
+ If the local environment isn't running, it may be started with:
-```
-pnpm --filter performance bundle
-```
+ ```sh
+ pnpm localenv:compose:telemetry up
+ ```
-To run the performance tests (of which there is currently only one):
+ Alternatively, tests can be run against the test environment. This requires starting the environment:
-```
-pnpm --filter performance run-tests
-```
-
-The test makes a few checks to verify the local playground is running, then runs the k6 binary on the [create-outgoing-payments.js](./scripts/create-outgoing-payments.js) script.
-
-The test can also be run inside of a Docker container on the same Docker network as the Local Playground:
-
-```
-pnpm --filter performance run-tests-docker
-```
-
-# Performance Tests
-
-This package contains a script that will determine the performance of Rafiki by repeatedly making a series of requests to a Rafiki instance to create several kinds of resources (receivers, quotes, outgoing payments).
-
-## Prerequisites
-
-- [Grafana k6](https://grafana.com/docs/k6/latest/set-up/install-k6/) (required if not running with Docker)
-
- - [Grafana k6](https://grafana.com/docs/k6/latest/) is used to run performance test scripts against Rafiki.
+ ```sh
+ pnpm --filter performance testenv:compose up
+ ```
-- **Local environment** (required if running tests against it)
- - A local Rafiki playground may be started using the instructions in [Running local playground for Rafiki](../../localenv/README.md).
- - It is recommended to start the local playground with Telemetry running in order to see the impact of a performance test.
- - If the local environment isn't running, it may be started with:
- ```sh
- pnpm localenv:compose:telemetry:up
- ```
+ and a process for the Mock Account Servicing Entities:
-If running against the **test environment**, manual initialization is not required.
+ ```sh
+ pnpm --filter perfromance start-mases
+ ```
## Run Tests
From 128160c416d8d344994a1658b7dfaf20437ea131 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 13 Feb 2025 13:41:02 -0500
Subject: [PATCH 50/54] docs: rm inaccurate info
---
test/performance/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/performance/README.md b/test/performance/README.md
index 86e54a234d..a86d8c3348 100644
--- a/test/performance/README.md
+++ b/test/performance/README.md
@@ -58,7 +58,7 @@ pnpm --filter performance run-tests-docker
### Running Against Test Environment
-To run the performance tests against the test environment (which does not require manual initialization):
+To run the performance tests against the test environment:
```sh
pnpm --filter performance run-tests:testenv
From 248ee438b4c5347bd712ac8b332125cd8a9babb1 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 13 Feb 2025 13:48:49 -0500
Subject: [PATCH 51/54] ci: tune test config
---
.github/workflows/node-build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/node-build.yml b/.github/workflows/node-build.yml
index 3dab577f12..3c727de297 100644
--- a/.github/workflows/node-build.yml
+++ b/.github/workflows/node-build.yml
@@ -195,7 +195,7 @@ jobs:
- name: Run performance tests
id: perf_test
run: |
- pnpm --filter performance run-tests:testenv -k --vus 5 --duration 1m | tee performance.log
+ pnpm --filter performance run-tests:testenv -k --vus 4 --duration 1m | tee performance.log
continue-on-error: true # Don't fail here, allows showing logs
- name: Print MASE logs
From b910e1a00232fac093fd82cdcf14d1b228db5eba Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 13 Feb 2025 14:08:19 -0500
Subject: [PATCH 52/54] fix: return to orginal duration
---
test/performance/scripts/create-outgoing-payments.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index 6d53c504be..a018e53ee5 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -12,7 +12,7 @@ export const options = {
// A number specifying the number of VUs to run concurrently.
vus: 1,
// A string specifying the total duration of the test run.
- duration: '30s'
+ duration: '600s'
}
const CLOUD_NINE_GQL_ENDPOINT = __ENV.CLOUD_NINE_GQL_ENDPOINT
@@ -139,6 +139,7 @@ export default function (data) {
}
const createQuoteResponse = request(createQuotePayload)
+ console.log({ createQuoteResponse })
const quote = createQuoteResponse.createQuote.quote
const createOutgoingPaymentPayload = {
From bb64af61c8c8c8ac97ef48e180efa3b8df35b10a Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 27 Feb 2025 13:48:32 -0500
Subject: [PATCH 53/54] chore: fix typos
---
test/performance/README.md | 2 +-
test/performance/config/local.env | 4 ++--
test/performance/config/test.env | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/performance/README.md b/test/performance/README.md
index a86d8c3348..d6edb3ce64 100644
--- a/test/performance/README.md
+++ b/test/performance/README.md
@@ -29,7 +29,7 @@ This package contains a script that will determine the performance of Rafiki by
and a process for the Mock Account Servicing Entities:
```sh
- pnpm --filter perfromance start-mases
+ pnpm --filter performance start-mases
```
## Run Tests
diff --git a/test/performance/config/local.env b/test/performance/config/local.env
index 9738910c4e..16810bf7dd 100644
--- a/test/performance/config/local.env
+++ b/test/performance/config/local.env
@@ -1,7 +1,7 @@
C9_BACKEND_HOST="cloud-nine-wallet-backend"
HLB_BACKEND_HOST="happy-life-bank-backend"
-C9_AUTH_HOST="cloud-nine-wallet-backend"
-HLB_AUTH_HOST="happy-life-bank-backend"
+C9_AUTH_HOST="cloud-nine-wallet-auth"
+HLB_AUTH_HOST="happy-life-bank-auth"
C9_OPEN_PAYMENTS_PORT="3000"
C9_GRAPHQL_PORT="3001"
HLB_OPEN_PAYMENTS_PORT="4000"
diff --git a/test/performance/config/test.env b/test/performance/config/test.env
index cd6207b9ab..820c1b5274 100644
--- a/test/performance/config/test.env
+++ b/test/performance/config/test.env
@@ -1,7 +1,7 @@
C9_BACKEND_HOST="cloud-nine-wallet-test-backend"
HLB_BACKEND_HOST="happy-life-bank-test-backend"
-C9_AUTH_HOST="cloud-nine-wallet-test-backend"
-HLB_AUTH_HOST="happy-life-bank-test-backend"
+C9_AUTH_HOST="cloud-nine-wallet-test-auth"
+HLB_AUTH_HOST="happy-life-bank-test-auth"
C9_OPEN_PAYMENTS_PORT="3100"
C9_GRAPHQL_PORT="3101"
HLB_OPEN_PAYMENTS_PORT="4100"
From 0d728248da1948f6ee2c7cc1a5f618118f36c2a3 Mon Sep 17 00:00:00 2001
From: Blair Currey <12960453+BlairCurrey@users.noreply.github.com>
Date: Thu, 27 Feb 2025 14:12:05 -0500
Subject: [PATCH 54/54] chore: rm console.log
---
test/performance/scripts/create-outgoing-payments.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/test/performance/scripts/create-outgoing-payments.js b/test/performance/scripts/create-outgoing-payments.js
index a018e53ee5..55eb25e7fa 100644
--- a/test/performance/scripts/create-outgoing-payments.js
+++ b/test/performance/scripts/create-outgoing-payments.js
@@ -139,7 +139,6 @@ export default function (data) {
}
const createQuoteResponse = request(createQuotePayload)
- console.log({ createQuoteResponse })
const quote = createQuoteResponse.createQuote.quote
const createOutgoingPaymentPayload = {