Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
1e6670a
test: add backend unit tests for indexerService getIndexerStatus/rese…
TEEZY234 Jun 1, 2026
f9fef4a
fix(test): make invocation order comparison type-safe to satisfy TS23…
TEEZY234 Jun 1, 2026
a19c5db
fix(backend): standardize default cache TTL to 5000ms
Kaycee276 Jun 1, 2026
40fb943
fix(backend): allow triggerPoll error to propagate in replayFromLedger
Kaycee276 Jun 1, 2026
b3293c0
test: add backend JWT unit tests for auth sign/verify happy paths
TEEZY234 Jun 1, 2026
dd8ab43
test: fix backend JWT test TypeScript import and token part typing
TEEZY234 Jun 1, 2026
eb3f916
feat: implement SorobanEventWorker with idempotency logic and unit tests
sweetesty Jun 1, 2026
da7211e
feat: add API route definitions for stream management with OpenAPI do…
sweetesty Jun 1, 2026
183f9e1
fix(admin): use adminAuth security scheme on all admin route annotations
sweetesty Jun 1, 2026
df3b3ad
fix(backend): remove redis constructor casts
David-patrick-chuks Jun 1, 2026
fc320a0
Fix #699 and #682: Unify template storage keys and add periodic cache…
Jun 1, 2026
4957e88
docs: remove broken discussion category links
ded-furby Jun 1, 2026
4d84838
fix(env): standardize on KEEPER_SECRET_KEY for on-chain signing secret
sweetesty Jun 1, 2026
86e2a75
fix(sse): update stream payload type in map function
kitWarse Jun 1, 2026
c2494e4
feat: validate publicKey param in getUserEvents controller (#646)
Benedict315 Jun 1, 2026
34440ec
fix: validate JWT_SECRET in production, warn in dev
Vvictor-commits Jun 1, 2026
1478aa2
fix: handle fee and admin notification events
khanavi272-spec Jun 1, 2026
4c38238
fix(backend): type prisma global singleton correctly
samueloyibodevv Jun 1, 2026
88c0188
ci: optimize contract wasm compilation loop and target paths
Francis6-git Jun 1, 2026
7c99f16
fix(backend): centralize indexer state id
Bug-Hunter-X Jun 1, 2026
83be9a7
feat(backend): make memory cache sweep interval configurable and clea…
TheDEV111 Jun 1, 2026
f8de518
Stream detail page TOKEN_SYMBOLS map is incomplete (missing FLOW) and…
Jun 1, 2026
aad6401
[Backend] sorobanService.decodeAddress uses 'addr.contractId() as any…
EbukaMoses Jun 2, 2026
c48d4b2
fix: use as unknown as Uint8Array for Hash type conversion
EbukaMoses Jun 8, 2026
fae2bf8
fix(stream_contract): remove duplicate stream.paused check in withdraw
devfoma May 30, 2026
a12adba
chore(stream_contract): delete orphaned nested stream_contract/src/ d…
devfoma May 30, 2026
84a0272
fix seed demo data
barry01-hash May 31, 2026
f31fdac
fix lockfile sync
barry01-hash May 31, 2026
5472dc9
chore: untrack 5 snapshot JSONs re-committed after 46a731f
K1NGD4VID May 30, 2026
0a47065
fix(backend): add missing @vitest/coverage-v8 dev dependency
K1NGD4VID May 30, 2026
1ed0fc1
fix(ci): fix malformed package-lock.json and resolve JSDoc YAMLSemant…
K1NGD4VID Jun 1, 2026
e0ffc20
fix(frontend): resolve all ESLint warnings and React Compiler memoiza…
K1NGD4VID Jun 2, 2026
b8b5fd4
chore: replace err any with unknown and narrow safely
dubemoyibe-star Jun 2, 2026
93c362a
Update README.md
dorismaduegbunam Jun 2, 2026
2204479
fix: resolve pagination magic numbers
devfoma Jun 2, 2026
f91b2f0
fix: ensure proper cleanup of SSE events with AbortController
extolkom Jun 2, 2026
c782125
fix: ensure proper cleanup of SSE events with AbortController
extolkom Jun 2, 2026
23c7ef4
fix: resolve setState in effect eslint error in streams page
extolkom Jun 2, 2026
2836e08
fix: ensure useEffect returns cleanup in TransactionTracker
extolkom Jun 2, 2026
6c3f740
chore(tsconfig): enable stricter TypeScript compiler checks
MerlinTheWhiz Jun 2, 2026
d7883a1
fix: update HowItWorks copy to reflect Stellar assets
q404365631 Jun 2, 2026
5d9f747
chore(frontend): enable noUncheckedIndexedAccess and noUnusedLocals
shogun444 Jun 2, 2026
3e759a4
fix(backend): SSE subscribe substr, Zod issues, users param
wheval Jun 1, 2026
f919bc0
build(deps): bump the minor-and-patch group across 1 directory with 1…
dependabot[bot] Jun 2, 2026
362e197
build(deps-dev): bump lint-staged from 16.4.0 to 17.0.7
dependabot[bot] Jun 2, 2026
020b5a5
fix: consolidate duplicate indexer integration tests
wheval Jun 1, 2026
bf860ff
Add event styles for Fee Config and Admin Transfer
T-kesh Jun 3, 2026
5fecf1f
build(deps): bump @stellar/stellar-sdk from 14.5.0 to 15.1.0
dependabot[bot] Jun 3, 2026
2e84157
build(deps-dev): bump @vitejs/plugin-react from 4.7.0 to 6.0.2
dependabot[bot] Jun 3, 2026
f2e977f
fix(frontend): correct formatTokenAmount in IncomingStreams to use In…
Mrwicks00 May 30, 2026
3901646
fix: respect STREAM_CREATE_RATE_LIMIT in streamCreationRateLimiter
wheval May 31, 2026
24c7a28
fix: remove no-op clearCache and fix cachedAt typing in claimable ser…
wheval Jun 1, 2026
62c1bb1
[Backend] sorobanService: drop second TransactionBuilder/Account/Netw…
EbukaMoses Jun 2, 2026
218345b
fix: add Account import and remove unused retval variables
EbukaMoses Jun 8, 2026
7411439
feat: add new event types and messages for fee collection and configu…
fadesany Jun 2, 2026
b149aa6
activity: render FEE_COLLECTED and ADMIN_TRANSFERRED messages; remove…
fadesany Jun 3, 2026
39f2a87
Remove mock wallet connectors
Johnpii1 May 30, 2026
186ddd5
refactor(backend): replace stream controller any types
adityabhatkar23 Jun 9, 2026
a122f5d
Fix footer dead links and update GitHub icon
Jun 1, 2026
5f415e0
build(deps): bump the minor-and-patch group across 1 directory with 1…
dependabot[bot] Jun 15, 2026
cc9589a
docs: correct environment variable names in ARCHITECTURE.md
dinahmaccodes Jun 29, 2026
2179736
fix: prevent environment variable clobbering in deploy script
dinahmaccodes Jun 29, 2026
de7365a
ci: add WASM size budget check to prevent size regressions
dinahmaccodes Jun 29, 2026
25fc79f
chore: add CODEOWNERS for automatic PR review routing
dinahmaccodes Jun 29, 2026
ce02cfd
Fix 905
JSE19 Jun 29, 2026
bb7245d
Fix 903
JSE19 Jun 29, 2026
ca4e5b6
Fix 901
JSE19 Jun 29, 2026
fadfb6b
Fix 898
JSE19 Jun 29, 2026
25b4967
fix(frontend): resolve issues #879, #877, #875, #873 - testing, color…
girly-coder01 Jun 29, 2026
5c5b4cb
ci: improve CI/CD workflows and infrastructure
designsage8 Jun 29, 2026
405c1a6
fix: ensure Prisma client is present in Docker runtime image
osasfaith Jun 29, 2026
47d7270
test: add comprehensive tests for useModalDialog hook
osasfaith Jun 29, 2026
e76232b
test: add comprehensive tests for WalletProvider context
osasfaith Jun 29, 2026
8f7cdbb
docs: add comprehensive documentation for UI primitives
osasfaith Jun 29, 2026
fe4afe4
docs: clean up README and link authentication doc
Luchi5544 Jun 29, 2026
ad31804
docs: add specific READMEs for frontend, backend, and contracts
Luchi5544 Jun 29, 2026
ac883b8
docs: fix CONTRIBUTING frontmatter, URLs, and port
Luchi5544 Jun 29, 2026
dee4364
fix: make isValidStellarPublicKey use lightweight regex check to avoi…
Jess52487 Jun 29, 2026
1827234
fix: add shimmer animation to SkeletonCard
Jess52487 Jun 29, 2026
8ffdd71
fix: add dark mode override values for root tokens and body background
Jess52487 Jun 29, 2026
5a73bd0
fix: use next-themes useTheme in ModeToggle and remove duplicate script
Jess52487 Jun 29, 2026
b3bd3f5
fix: resolve lint errors
Jess52487 Jun 29, 2026
6d3735a
test: fix incorrect test assertions for formatting utilities
Jess52487 Jun 29, 2026
2fceb6c
chore: adjust test coverage thresholds to current baseline
Jess52487 Jun 29, 2026
71edc9c
feat: implement functional Display Preferences in Settings (#865)
Jun 29, 2026
66c5f6b
Fix EURC rate formatting, stepper accessibility, stream creation vali…
LawalRahman Jun 29, 2026
0b9400c
fix(frontend): remove stray Token label from handleWithdraw
Kaycee276 Jun 29, 2026
a346291
Fix Issue 878
razeprasine Jun 29, 2026
1ae6704
Fix Issue 874
razeprasine Jun 29, 2026
612e96e
Fix Issue 876
razeprasine Jun 29, 2026
0dd8598
Fix Issue 872
razeprasine Jun 29, 2026
9d597f7
test: add unit tests for useSettings hook and formatAmountWithPrefere…
Nursca Jun 29, 2026
49b0989
test: add unit tests for fetchIncomingStreams API service
Nursca Jun 29, 2026
62a6a21
ci: add backend docker build and health check validation to CI pipeline
Nursca Jun 29, 2026
99b8c23
chore: pin Docker image versions to immutable SHA256 digests for Post…
Nursca Jun 29, 2026
da2255c
fix(#800): Remove unreachable else branch in resume_stream
caxtonacollins Jun 30, 2026
58f1765
test(#796): Add test for double-withdraw after stream completion
caxtonacollins Jun 30, 2026
caea4eb
refactor(#633): Replace 'tx: any' with Prisma.TransactionClient typing
caxtonacollins Jun 30, 2026
80358c6
fix: improve StreamDetailsModal accessibility by using useModalDialog
Henrichy Jun 29, 2026
d233f25
fix: resolve TypeScript errors in useIncomingStreams and tsconfig
Henrichy Jun 29, 2026
d343a27
Updated
Henrichy Jun 29, 2026
2634355
Update2
Henrichy Jun 29, 2026
2a00679
test(#795): exercise calculate_claimable underflow guard (withdrawn >…
OsagieCynthia Jun 30, 2026
ba49ab5
fix(#619): remove legacy /streams and /events handlers past their sun…
OsagieCynthia Jun 30, 2026
158e621
feat(#628): add frontend/src/lib/logger.ts
OsagieCynthia Jun 30, 2026
90ffd4d
fix(#628): replace console.* with logger across all frontend call-sites
OsagieCynthia Jun 30, 2026
c5fdf8c
chore(#628): add no-console ESLint rule to forbid raw console.* in fr…
OsagieCynthia Jun 30, 2026
1bd3ad4
fix(#622): consolidate NEXT_PUBLIC_API_URL fallbacks via getApiBaseUrl()
OsagieCynthia Jun 30, 2026
b5427c0
fix(security+tests): CSP/COOP/CORP headers, requireAdmin tests, secur…
Drock0 Jun 30, 2026
08968ec
fix(csp): remove unsafe-inline from global CSP; scope to /api-docs only
Drock0 Jun 30, 2026
1d8be91
fix: delegate after streamed error responses
charlesedeh021-cell Jun 29, 2026
d0aaddb
refactor: delete unused stream details page component and clean up lo…
Kaycee276 Jun 30, 2026
11e183d
feat: export Prisma namespace from prisma client for type availability
Kaycee276 Jun 30, 2026
03ab628
fix: type-only import for Prisma namespace to fix CI verbatimModuleSy…
Kaycee276 Jun 30, 2026
5d2736b
fix: deprecated endpoints returning 404 instead of 410
Kaycee276 Jun 30, 2026
8e4f097
fix: copy prisma directory to final docker image for migrations
Kaycee276 Jun 30, 2026
f1fa73e
fix: copy prisma config to docker image for db push
Kaycee276 Jun 30, 2026
a986c11
fix: copy generated prisma client to dist folder to resolve relative …
Kaycee276 Jun 30, 2026
f1530bc
Merge branch 'main' into fix-issue-862-upstream
Kaycee276 Jul 1, 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
11 changes: 11 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,17 @@ jobs:
run: npm run test:coverage
working-directory: frontend

- name: Upload frontend coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: frontend/coverage/lcov.info
flags: frontend
name: frontend-coverage
fail_ci_if_error: false
verbose: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

- name: Build
run: npm run build
working-directory: frontend
Expand Down
3 changes: 3 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ STREAM_CREATE_RATE_LIMIT=10
# (cancel_stream, top_up_stream). Must be funded on the target network.
KEEPER_SECRET_KEY=

# Max stream creation requests per wallet per minute (default: 10)
STREAM_CREATE_RATE_LIMIT=10

# ─── Auth ─────────────────────────────────────────────────────────────────────
# Secret used to sign JWTs (generate with: openssl rand -hex 32)
JWT_SECRET=
Expand Down
1 change: 1 addition & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ RUN npm install
COPY tsconfig.json ./
COPY src ./src
COPY prisma ./prisma
COPY prisma.config.ts ./

RUN npm run build

Expand Down
3 changes: 2 additions & 1 deletion backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"express-rate-limit": "^8.5.2",
"ioredis": "^5.11.1",
"pg": "^8.21.0",
"stellar-sdk": "^13.3.0",
"swagger-jsdoc": "^6.3.0",
"swagger-ui-express": "^5.0.1",
"winston": "^3.11.0",
Expand All @@ -46,7 +47,7 @@
"@types/supertest": "^7.2.0",
"@types/swagger-jsdoc": "^6.0.4",
"@types/swagger-ui-express": "^4.1.6",
"@vitest/coverage-v8": "^2.1.8",
"@vitest/coverage-v8": "^2.1.9",
"eventsource": "^2.0.2",
"nodemon": "^3.1.11",
"prisma": "^7.8.0",
Expand Down
11 changes: 11 additions & 0 deletions backend/src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,17 @@ app.use((req: Request, res: Response, next: NextFunction) => {
return next(); // Not versioned, continue to deprecated handlers
});

// Deprecated routes fallback
app.use(['/streams', '/events'], (req: Request, res: Response) => {
res.status(410).json({
deprecated: true,
migration: {
old: req.originalUrl,
new: `/v1${req.originalUrl}`
}
});
});

// Health check routes
app.use('/health', healthRoutes);

Expand Down
1 change: 1 addition & 0 deletions backend/src/controllers/sse.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ export const subscribe = async (req: Request, res: Response) => {
res.write(`data: ${JSON.stringify({ type: 'connected', clientId, requestId })}\n\n`);

sseService.addClient(clientId, res, subscriptions, sourceIp);

return;
} catch (error: unknown) {
if (error instanceof z.ZodError) {
Expand Down
2 changes: 1 addition & 1 deletion backend/src/controllers/stream.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -774,4 +774,4 @@ export const resumeStream = async (req: Request, res: Response) => {
logger.error('Error resuming stream:', error);
return res.status(500).json({ error: 'Internal server error' });
}
};
};
3 changes: 3 additions & 0 deletions frontend/src/components/dashboard/dashboard-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import toast from "react-hot-toast";
* - Error state: "Failed to load streams" with a retry button
*/

import { Skeleton } from "@/components/ui/Skeleton";

import {
getDashboardAnalytics,
Expand Down Expand Up @@ -108,6 +109,8 @@ const SIDEBAR_ITEMS: SidebarItem[] = [
/** Shimmer card used as a placeholder while data loads */
function SkeletonCard({ className = "" }: { className?: string }) {
return (
<div className={`relative overflow-hidden rounded-2xl ${className}`} aria-hidden="true">
<Skeleton className="w-full h-full" />
<div
className={`animate-pulse bg-gray-200 dark:bg-gray-700 rounded-2xl relative overflow-hidden ${className}`}
aria-hidden="true"
Expand Down
Loading
Loading