Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
228 commits
Select commit Hold shift + click to select a range
802b510
Generated with Hive: Fix graph-admin mock routing and extend mock cmd…
tomsmith8 Apr 7, 2026
d6618cf
Merge remote-tracking branch 'origin/master' into feature/cmnofnuqa00…
tomsmith8 Apr 7, 2026
e5bfae2
Merge origin/master - resolve double-encoded JSON comment conflict
tomsmith8 Apr 7, 2026
7a8323f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 7, 2026
3614d5e
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 7, 2026
8e4daab
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 7, 2026
ae9e6f7
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 7, 2026
86e0abf
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 7, 2026
e53a450
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 7, 2026
6fd7b18
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
5db0e2e
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
1b0c89a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
b7a5252
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
af3c56d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
2d21db0
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
c505400
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
0a2129c
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
26a69ce
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 8, 2026
b97fbf5
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
7f60ada
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
1f8a032
fix: resolve merge conflict in mock swarm cmd route
tomsmith8 Apr 9, 2026
55241dc
Merge remote-tracking branch 'origin/master' into feature/cmnofnuqa00…
tomsmith8 Apr 9, 2026
80b7218
fix: update GetBotBalance test to match new response shape
tomsmith8 Apr 9, 2026
e71a82d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
08d10a4
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
6742824
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
35170b9
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
59c7dc2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
0140310
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
a3efe46
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
0ff0763
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 9, 2026
29b45d6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
836c67a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
0a23992
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
c82ba50
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
8434087
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
7faa462
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
9641881
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
a0caa91
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 10, 2026
02c2120
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 11, 2026
8c200e2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 12, 2026
717f24b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 12, 2026
42bb7c6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 12, 2026
4c1794f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 13, 2026
009b4b4
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 13, 2026
aeb527b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 13, 2026
b18a071
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 13, 2026
b2634e3
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 13, 2026
9f70bc0
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 13, 2026
3368d1e
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 13, 2026
22191f2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
d486d18
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
fe6fd37
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
3c34339
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
bc3bfa6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
da22caa
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
58f03b5
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
18bb5de
Resolve merge conflict: add GetSecondBrainAboutDetails/UpdateSecondBr…
tomsmith8 Apr 14, 2026
c419567
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
50ee9ef
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
bf64eab
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
bc97098
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
2693f14
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
349674b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
e9e4c8a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
f6c85a2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
6258aed
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
b86946d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
0f27695
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
7645f28
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
ce151e3
Fix flaky test: wait for model select to render before asserting
tomsmith8 Apr 14, 2026
ee77a3c
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
c332a6f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
3d54048
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
a64d32b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 14, 2026
559c864
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 15, 2026
a17699f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 15, 2026
2fa5269
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 15, 2026
17d2637
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 15, 2026
ba4d154
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 15, 2026
b19b246
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 15, 2026
a6d7d21
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 16, 2026
71bf6eb
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 16, 2026
ad8163e
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 16, 2026
bb112c8
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 16, 2026
bafdc7c
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 16, 2026
67e6b9b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 16, 2026
cb427e2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 16, 2026
feeea50
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 17, 2026
9591ad9
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 17, 2026
c1f93a1
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 17, 2026
3d1d7f8
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 17, 2026
2c1afc5
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 17, 2026
3887234
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 17, 2026
b73643f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 20, 2026
cdf6a81
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 20, 2026
be59954
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 20, 2026
6879c54
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 20, 2026
81a4b9a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 20, 2026
5f2bec6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 20, 2026
eaba888
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 20, 2026
e6bf46b
Resolve merge conflict: add GetBoltwallUsers to mock cmd responses
tomsmith8 Apr 21, 2026
9e8bfbb
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
c3c9170
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
5a501e5
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
d0200bf
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
82e61b3
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
6fbe405
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
3c6f083
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
0329477
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 21, 2026
d63a470
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 22, 2026
7b665c2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 22, 2026
5888220
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 22, 2026
c123143
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 22, 2026
db61f7e
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 22, 2026
1ea6605
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 22, 2026
84b4a27
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 23, 2026
ee8967f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 23, 2026
942e0ca
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 23, 2026
1792f07
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 24, 2026
acf29fa
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 24, 2026
0aa53fe
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 24, 2026
66e8ed5
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 24, 2026
72cf26d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 24, 2026
4ae8e56
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
2d20973
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
e39a499
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
47b98d7
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
cbac78c
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
bd756b6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
5a9c286
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
92a4a98
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
5a08558
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
0830021
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
c3ac20b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
5ccb108
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 25, 2026
3b6b4e6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 26, 2026
d915462
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 26, 2026
7cee30b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 26, 2026
06e6d49
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 26, 2026
f821894
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 26, 2026
6f586e4
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 26, 2026
6c1d2f2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 26, 2026
0fb807f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
286b84a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
3b46766
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
fc81543
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
b3194b4
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
bab181d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
95bcadb
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
9b15e25
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
e75fe45
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
57329cc
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 27, 2026
3bef4d2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
d3ee25c
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
95abe83
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
f43308f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
4cda946
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
51cefeb
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
4e8d558
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
bc3db1b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
b08273e
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 28, 2026
2091c4f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
314a7e9
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
3fbf5de
Resolve merge conflict in CompactTasksList.test.tsx
tomsmith8 Apr 29, 2026
2894b13
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
e2cad5d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
11ec80f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
89da12c
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
533bd80
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
c9d9f19
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 29, 2026
bd3d0a2
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 30, 2026
8b6fb68
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 30, 2026
4f9b0d6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 30, 2026
872cdab
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 30, 2026
2ed94b3
Generated with Hive: Improve Neon endpoint detection and polling in d…
tomsmith8 Apr 30, 2026
86cb832
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 30, 2026
751cda1
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 Apr 30, 2026
f983ebf
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 1, 2026
b23c026
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 1, 2026
1175a17
Generated with Hive: Increase notification test timeout to fix async …
tomsmith8 May 1, 2026
786a604
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 1, 2026
82753b3
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 1, 2026
eec978b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 1, 2026
599c50a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 1, 2026
bdcf9c3
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 1, 2026
1b71fbf
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 3, 2026
feba44f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 3, 2026
76b3b17
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 3, 2026
136ef64
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 4, 2026
c9ecf5a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 4, 2026
96936fe
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 5, 2026
d573657
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 5, 2026
ff0a13e
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
7958c08
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
a5a2b79
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
5e39b50
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
c0ee3ec
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
888a932
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
612367b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
b519ccd
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
dac38d6
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
706af66
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 6, 2026
22e088d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
50fc03b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
0d1eed4
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
9283831
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
68960c9
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
5b021ff
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
71ae896
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
1b01936
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
98b1b8b
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
ba2f4aa
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
a225d19
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 7, 2026
971b67d
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 8, 2026
c59827f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 8, 2026
c0d6058
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 8, 2026
58d060c
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 9, 2026
79eee5a
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 11, 2026
300fa65
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 11, 2026
a1c6f00
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
21c439f
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
cafa991
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
63904b3
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
7e30220
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
bc3d881
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
764bf61
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
0f33740
Merge branch 'master' into feature/cmnofnuqa00a8ky04t14fz7ed-fix-grap…
tomsmith8 May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion .github/workflows/deployPR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,16 @@ jobs:
ENDPOINTS_JSON=$(neon_curl "https://console.neon.tech/api/v2/projects/$NEON_PROJECT_ID/endpoints" "endpoints")
ENDPOINT_ID=$(echo "$ENDPOINTS_JSON" | jq -r ".endpoints[] | select(.branch_id==\"$BRANCH_ID\") | .id")

# Validate the cached endpoint is still accessible (it may have been deleted since list was fetched)
if [ -n "$ENDPOINT_ID" ] && [ "$ENDPOINT_ID" != "null" ]; then
VALIDATE_RESP=$(curl -s -H "Authorization: Bearer $NEON_API_KEY" \
"https://console.neon.tech/api/v2/projects/$NEON_PROJECT_ID/endpoints/$ENDPOINT_ID")
if ! echo "$VALIDATE_RESP" | jq -e '.endpoint' > /dev/null 2>&1; then
echo "⚠️ Endpoint $ENDPOINT_ID found in list but no longer accessible, will create a new one"
ENDPOINT_ID=""
fi
fi

if [ -z "$ENDPOINT_ID" ] || [ "$ENDPOINT_ID" = "null" ]; then
# Try to create a new endpoint first
RESPONSE=$(curl -s -H "Authorization: Bearer $NEON_API_KEY" \
Expand Down Expand Up @@ -192,7 +202,11 @@ jobs:

# Wait until endpoint is ready (GET endpoint does not return credentials)
for i in {1..30}; do
STATUS=$(neon_curl "https://console.neon.tech/api/v2/projects/$NEON_PROJECT_ID/endpoints/$ENDPOINT_ID" "endpoint")
STATUS=$(neon_curl "https://console.neon.tech/api/v2/projects/$NEON_PROJECT_ID/endpoints/$ENDPOINT_ID" "endpoint") || {
echo "⚠️ Could not poll endpoint status (attempt $i), retrying..."
sleep 5
continue
}
STATE=$(echo "$STATUS" | jq -r '.endpoint.current_state')
DB_HOST=$(echo "$STATUS" | jq -r '.endpoint.host')
if [ "$STATE" = "ready" ] && [ -n "$DB_HOST" ] && [ "$DB_HOST" != "null" ]; then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ describe("GitHub Webhook — TASK_PR_MERGED notification", () => {
// Route should succeed
expect([200, 202]).toContain(res.status);

// Allow async notification to settle
await new Promise((r) => setTimeout(r, 300));
// Allow async notification to settle (fire-and-forget block runs several DB queries)
await new Promise((r) => setTimeout(r, 2000));

const record = await db.notificationTrigger.findFirst({
where: {
Expand Down
109 changes: 108 additions & 1 deletion src/__tests__/unit/api/mock/swarm-credentials-and-cmd.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { describe, it, expect, vi } from "vitest";
import { describe, it, expect, vi, beforeEach } from "vitest";

vi.mock("@/config/env", () => ({
env: {
Expand Down Expand Up @@ -246,3 +246,110 @@ describe("GET /api/mock/swarm-super-admin/api/cmd", () => {
expect(data).toMatchObject({ error: expect.stringContaining("Missing txt") });
});
});

// ---------------------------------------------------------------------------
// Boltwall stateful commands
// ---------------------------------------------------------------------------

describe("Boltwall stateful mock commands", () => {
// Reset state before each test to ensure isolation
beforeEach(async () => {
const { resetMockBoltwallState } = await import(
"@/app/api/mock/swarm-super-admin/api/cmd/state"
);
resetMockBoltwallState();
});

async function cmdRequest(cmd: object) {
const { GET } = await import(
"@/app/api/mock/swarm-super-admin/api/cmd/route"
);
const txt = encodeURIComponent(JSON.stringify(cmd));
return GET(
makeRequest(
`http://localhost/api/mock/swarm-super-admin/api/cmd?txt=${txt}`,
{ headers: { "x-jwt": "mock-jwt-token" } }
)
);
}

it("GetBoltwallAccessibility returns { isPublic: false } by default", async () => {
const res = await cmdRequest({ cmd: "GetBoltwallAccessibility" });
const data = await res.json();
expect(res.status).toBe(200);
expect(data).toEqual({ isPublic: false });
});

it("UpdateBoltwallAccessibility + GetBoltwallAccessibility round-trip", async () => {
// Set to true
const updateRes = await cmdRequest({
type: "Swarm",
data: { cmd: "UpdateBoltwallAccessibility", content: true },
});
expect(updateRes.status).toBe(200);
expect(await updateRes.json()).toEqual({ success: true });

// Confirm state persisted
const getRes = await cmdRequest({ cmd: "GetBoltwallAccessibility" });
expect(getRes.status).toBe(200);
expect(await getRes.json()).toEqual({ isPublic: true });
});

it("ListPaidEndpoint returns 2 endpoints by default", async () => {
const res = await cmdRequest({ cmd: "ListPaidEndpoint" });
const data = await res.json();
expect(res.status).toBe(200);
expect(data.endpoints).toHaveLength(2);
expect(data.endpoints[0]).toMatchObject({ id: 1, route: "v2/search" });
expect(data.endpoints[1]).toMatchObject({ id: 2, route: "node/content" });
});

it("UpdatePaidEndpoint mutates endpoint status", async () => {
// Disable endpoint id=1
const updateRes = await cmdRequest({
type: "Swarm",
data: { cmd: "UpdatePaidEndpoint", content: { id: 1, status: false } },
});
expect(updateRes.status).toBe(200);
expect(await updateRes.json()).toEqual({ success: true });

// Re-fetch and confirm
const listRes = await cmdRequest({ cmd: "ListPaidEndpoint" });
const data = await listRes.json();
const ep1 = data.endpoints.find((e: { id: number }) => e.id === 1);
expect(ep1.status).toBe(false);
// Other endpoint unchanged
const ep2 = data.endpoints.find((e: { id: number }) => e.id === 2);
expect(ep2.status).toBe(true);
});

it("GetBoltwallSuperAdmin returns { pubkey: null, name: null }", async () => {
const res = await cmdRequest({ cmd: "GetBoltwallSuperAdmin" });
const data = await res.json();
expect(res.status).toBe(200);
expect(data).toEqual({ pubkey: null, name: null });
});

it("GetBotBalance returns { success: true, data: { msat } }", async () => {
const res = await cmdRequest({ cmd: "GetBotBalance" });
const data = await res.json();
expect(res.status).toBe(200);
expect(data).toEqual({ success: true, message: "bot balance retrieved", data: { msat: 30000 } });
});

it("CreateBotInvoice returns an invoice string", async () => {
const res = await cmdRequest({
type: "Swarm",
data: { cmd: "CreateBotInvoice", content: { amt_msat: 1000 } },
});
const data = await res.json();
expect(res.status).toBe(200);
expect(typeof data.invoice).toBe("string");
});

it("state resets between tests (isPublic is false again)", async () => {
const res = await cmdRequest({ cmd: "GetBoltwallAccessibility" });
const data = await res.json();
expect(data).toEqual({ isPublic: false });
});
});
59 changes: 55 additions & 4 deletions src/__tests__/unit/services/swarm/cmd.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { describe, test, expect, beforeEach, vi } from "vitest";
import { describe, test, expect, beforeEach, afterEach, vi } from "vitest";

// Mock fetch globally before importing
const mockFetch = vi.fn();
Expand All @@ -7,8 +7,21 @@ global.fetch = mockFetch;
const { getSwarmCmdJwt, swarmCmdRequest } = await import("@/services/swarm/cmd");

describe("getSwarmCmdJwt", () => {
let savedUseMocks: string | undefined;

beforeEach(() => {
vi.clearAllMocks();
// Ensure production routing (no mocks) for getSwarmCmdJwt tests
savedUseMocks = process.env.USE_MOCKS;
delete process.env.USE_MOCKS;
});

afterEach(() => {
if (savedUseMocks !== undefined) {
process.env.USE_MOCKS = savedUseMocks;
} else {
delete process.env.USE_MOCKS;
}
});

const swarmUrl = "https://swarm42.sphinx.chat";
Expand Down Expand Up @@ -114,14 +127,23 @@ describe("getSwarmCmdJwt", () => {
});
});

// ---------------------------------------------------------------------------
// swarmCmdRequest — USE_MOCKS routing + double-encoded JSON handling
// ---------------------------------------------------------------------------

describe("swarmCmdRequest", () => {
const swarmUrl = "https://swarm42.sphinx.chat";
const jwt = "test-jwt-token";
const cmd = { type: "Swarm" as const, data: { cmd: "GetBoltwallAccessibility" as const } };

beforeEach(() => {
vi.clearAllMocks();
delete process.env.USE_MOCKS;
});

const swarmUrl = "https://swarm42.sphinx.chat";
const jwt = "test-jwt-token";
const cmd = { type: "Swarm" as const, data: { cmd: "GetBoltwallAccessibility" as const } };
afterEach(() => {
delete process.env.USE_MOCKS;
});

test("parses normal (single-encoded) JSON correctly", async () => {
mockFetch.mockResolvedValue({
Expand Down Expand Up @@ -209,4 +231,33 @@ describe("swarmCmdRequest", () => {
const [, init] = mockFetch.mock.calls[0];
expect(init.headers["x-jwt"]).toBe(jwt);
});

test("routes to host:8800 in production (no USE_MOCKS)", async () => {
mockFetch.mockResolvedValue({
ok: true,
status: 200,
text: async () => JSON.stringify({ isPublic: false }),
});

await swarmCmdRequest({ swarmUrl, jwt, cmd });

const [url] = mockFetch.mock.calls[0];
expect(url).toContain("swarm42.sphinx.chat:8800/api/cmd");
});

test("routes to NEXTAUTH_URL mock endpoint when USE_MOCKS=true", async () => {
process.env.USE_MOCKS = "true";
process.env.NEXTAUTH_URL = "http://localhost:3000";

mockFetch.mockResolvedValue({
ok: true,
status: 200,
text: async () => JSON.stringify({ isPublic: false }),
});

await swarmCmdRequest({ swarmUrl, jwt, cmd });

const [url] = mockFetch.mock.calls[0];
expect(url).toContain("localhost:3000/api/mock/swarm-super-admin/api/cmd");
});
});
63 changes: 60 additions & 3 deletions src/app/api/mock/swarm-super-admin/api/cmd/route.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
import { NextRequest, NextResponse } from "next/server";
import {
mockIsPublic,
mockEndpoints,
setMockIsPublic,
setMockEndpoints,
} from "./state";

const MOCK_CONTAINERS = [
{ name: "sphinx", status: "running", image: "sphinxlightning/sphinx-relay:latest" },
{ name: "neo4j", status: "running", image: "neo4j:5" },
{ name: "lnd", status: "stopped", image: "lightninglabs/lnd:v0.18" },
];

// ---------------------------------------------------------------------------
// Static responses
// ---------------------------------------------------------------------------
const MOCK_RESPONSES: Record<string, unknown> = {
ListContainers: { containers: MOCK_CONTAINERS },
StartContainer: { success: true },
Expand All @@ -25,6 +34,18 @@ const MOCK_RESPONSES: Record<string, unknown> = {
"lightninglabs/lnd": "v0.18",
},
},
// Boltwall admin
GetBoltwallSuperAdmin: { pubkey: null, name: null },
ListAdmins: { admins: [] },
GetBotBalance: { success: true, message: "bot balance retrieved", data: { msat: 30000 } },
CreateBotInvoice: { invoice: "lnbcrt1mock000000000" },
AddBoltwallUser: { success: true },
AddBoltwallAdminPubkey: { success: true },
DeleteSubAdmin: { success: true },
UpdateUser: { success: true },
GetEnrichedBoltwallUsers: { users: [] },
UpdateNeo4jConfig: { success: true },
UpdateEnv: { success: true },
GetBoltwallAccessibility: { isPublic: false },
UpdateBoltwallAccessibility: { success: true },
ListPaidEndpoint: {
Expand All @@ -34,7 +55,6 @@ const MOCK_RESPONSES: Record<string, unknown> = {
],
},
UpdatePaidEndpoint: { success: true },
GetBotBalance: { success: true, message: "bot balance retrieved", data: { msat: 30000 } },
GetBoltwallUsers: {
users: [
{ id: 1, pubkey: "03superadmin0000000000000000000000000000000000000000000000000000001", name: "Super Admin", role: "admin" },
Expand Down Expand Up @@ -63,7 +83,7 @@ export async function GET(request: NextRequest) {
return NextResponse.json({ error: "Missing txt param" }, { status: 400 });
}

let parsed: { cmd?: string; data?: { cmd?: string } };
let parsed: { type?: string; cmd?: string; data?: { cmd?: string; content?: unknown }; content?: unknown };
try {
parsed = JSON.parse(txt);
} catch {
Expand All @@ -73,7 +93,44 @@ export async function GET(request: NextRequest) {
// SwarmCmd shape: { type: "Swarm", data: { cmd: "..." } }
// Fall back to top-level .cmd for legacy callers
const cmd = parsed.data?.cmd ?? parsed.cmd;
if (!cmd || !(cmd in MOCK_RESPONSES)) {
const content = parsed.data?.content ?? parsed.content;

if (!cmd) {
return NextResponse.json({ error: "Unknown cmd: undefined" }, { status: 400 });
}

// ---------------------------------------------------------------------------
// Stateful boltwall commands
// ---------------------------------------------------------------------------
if (cmd === "GetBoltwallAccessibility") {
return NextResponse.json({ isPublic: mockIsPublic });
}

if (cmd === "UpdateBoltwallAccessibility") {
setMockIsPublic(Boolean(content));
return NextResponse.json({ success: true });
}

if (cmd === "ListPaidEndpoint") {
return NextResponse.json({ endpoints: mockEndpoints });
}

if (cmd === "UpdatePaidEndpoint") {
const update = content as { id?: number; status?: boolean } | undefined;
if (update?.id !== undefined) {
setMockEndpoints(
mockEndpoints.map((ep) =>
ep.id === update.id ? { ...ep, status: Boolean(update.status) } : ep
)
);
}
return NextResponse.json({ success: true });
}

// ---------------------------------------------------------------------------
// Static responses
// ---------------------------------------------------------------------------
if (!(cmd in MOCK_RESPONSES)) {
return NextResponse.json({ error: `Unknown cmd: ${cmd}` }, { status: 400 });
}

Expand Down
32 changes: 32 additions & 0 deletions src/app/api/mock/swarm-super-admin/api/cmd/state.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// ---------------------------------------------------------------------------
// Mutable boltwall state (reset between tests via resetMockBoltwallState)
// ---------------------------------------------------------------------------
export interface PaidEndpoint {
id: number;
route: string;
method: string;
status: boolean;
fee: number;
}

export let mockIsPublic = false;
export let mockEndpoints: PaidEndpoint[] = [
{ id: 1, route: "v2/search", method: "GET", status: true, fee: 10 },
{ id: 2, route: "node/content", method: "POST", status: true, fee: 10 },
];

export function resetMockBoltwallState() {
mockIsPublic = false;
mockEndpoints = [
{ id: 1, route: "v2/search", method: "GET", status: true, fee: 10 },
{ id: 2, route: "node/content", method: "POST", status: true, fee: 10 },
];
}

export function setMockIsPublic(value: boolean) {
mockIsPublic = value;
}

export function setMockEndpoints(endpoints: PaidEndpoint[]) {
mockEndpoints = endpoints;
}
Loading
Loading