Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
623401f
ENG-297 feat(bridge): add core Bridge integration
forge0x May 13, 2026
9714626
ENG-278 ENG-280 ENG-281 ENG-282 ENG-283 ENG-284 ENG-285 ENG-349 ENG-3…
forge0x May 13, 2026
05739f5
ENG-276 feat(bridge): add reconciliation and replay tooling
forge0x May 13, 2026
1818b7c
ENG-394 feat(accounts): create ETH-USDT Cash Wallet for new accounts
forge0x May 13, 2026
2096387
ENG-297 docs: document Bridge rebase PR-readiness plan
forge0x May 13, 2026
18f1ac7
ENG-376 fix(bridge): reuse pending withdrawal idempotency rows
forge0x May 13, 2026
dd75901
ENG-297 chore(bridge): satisfy scoped lint on branch changes
forge0x May 13, 2026
c8569de
ENG-297 fix(graphql): add isExternal to UsdtWallet
forge0x May 13, 2026
f01c0ad
fix(graphql): preserve latest account upgrade request query
forge0x May 15, 2026
0fe5263
feat: bridge reconciliation + USDT provisioning additions (#354)
heyolaniran May 16, 2026
bab26d8
ENG-297 - IBEX USD -> USDT Parity (#355)
islandbitcoin May 19, 2026
6e15c4c
fix(graphql): serialize USDT fee probe amounts (#358)
forge0x May 19, 2026
e2fb12e
Feat/bridge reconciliation (#360)
heyolaniran May 21, 2026
91c22d3
fix: expose usdt amounts as usd cents
forge0x May 29, 2026
836405e
fix: keep usdt cent boundaries explicit
forge0x May 29, 2026
b1af168
feat(cutover): prepare cash wallet migration for bridge (#377)
forge0x Jun 1, 2026
f405524
fix(bridge): restore cutover repository build
forge0x Jun 2, 2026
79d764f
fix(cutover): preserve cash wallet history after cutover (#380)
forge0x Jun 2, 2026
5c1b954
fix(wallets): preserve USDT transaction history precision (#382)
forge0x Jun 3, 2026
886b207
feat(bridge): external account webhook + ENG-350 transfer failure res…
heyolaniran Jun 3, 2026
f5c9077
test(bridge): verify webhook signature contract (#383)
patoo0x Jun 3, 2026
851c1ca
fix(cash-wallet): guard cutover start
patoo0x Jun 3, 2026
f1d5f10
feat: add BridgeTransferRequest ERPNext audit model and webhook wirin…
patoo0x Jun 4, 2026
563153b
fix(bridge): lower account level requirement from level 2 to level > …
heyolaniran Jun 4, 2026
6686332
fix(bridge): correct replay tooling for Bridge webhook_events API (#381)
heyolaniran Jun 4, 2026
cafd2d1
fix(bridge): add external account webhook config (#390)
patoo0x Jun 6, 2026
0964448
fix(bridge): align GraphQL contract and error codes (#393)
patoo0x Jun 6, 2026
9633256
fix(ibex): wire USDT LNURL-pay msat conversion (#389)
patoo0x Jun 7, 2026
ca878ae
feat(bridge): push notification on deposit settlement [ENG-275] (#392)
islandbitcoin Jun 7, 2026
a3acbc1
feat(bridge): split withdrawal into request, confirm, and cancel step…
heyolaniran Jun 8, 2026
7e321f2
feat(bridge): add KYC tier ceiling error code (ENG-354) (#394)
patoo0x Jun 8, 2026
c6db7d6
feat(alerts): Bridge alerting to PagerDuty / Slack / Discord [ENG-361…
islandbitcoin Jun 10, 2026
a23c9fd
feat(cashout): route Cashout V1 wallets via cutover guard (ENG-357) (…
islandbitcoin Jun 10, 2026
8532284
chore(bridge): add sandbox e2e test suite (#388)
patoo0x Jun 11, 2026
c067119
chore(bridge): add refreshed ERPNext dev backup (#400)
patoo0x Jun 11, 2026
f4ee0de
improve backup and restore scripts, updated to latest frappe backup
forge0x Jun 15, 2026
3d1a026
fix(dev): make local Frappe startup repair frontend
forge0x Jun 16, 2026
1967135
fix(bridge): resolve type errors in bridge-sandbox-e2e suite (#409)
islandbitcoin Jun 17, 2026
dbfdae0
fix(bridge): remove leaked sandbox API key from base config (#412)
islandbitcoin Jun 18, 2026
8c508cf
Normalize Bridge webhook payload envelopes (#406)
islandbitcoin Jun 18, 2026
340c9cb
Map IBEX crypto sends as USDT on-chain transactions (#405)
islandbitcoin Jun 18, 2026
e8ddd62
feat(bridge): withdrawal fee estimates — request/confirm/cancel flow …
heyolaniran Jun 18, 2026
5b4d6bd
Send Bridge cashout USDT to transfer deposit addresses (#407)
islandbitcoin Jun 19, 2026
979f9db
merge: resolve conflicts with origin/main (PR #413)
forge0x Jun 19, 2026
9c36c6b
feat: Add notification on Kyc system and extend notification for depo…
heyolaniran Jun 24, 2026
95be662
fix: harden bridge webhook remediation
patoo0x Jun 24, 2026
43bcf7a
fix: restore public ibex client install
patoo0x Jun 24, 2026
0dabd32
fix: point quickstart vendir at flash repo
patoo0x Jun 24, 2026
5b96e1f
fix: clean up bridge remediation ci noise
patoo0x Jun 24, 2026
cad57b9
fix: address bridge ci security findings
patoo0x Jun 24, 2026
b52fc29
fix: repair bridge ci followups
patoo0x Jun 24, 2026
67636e6
fix: provide config for integration tests
patoo0x Jun 24, 2026
f40e1ea
fix: repair integration ibex mock
patoo0x Jun 24, 2026
8d80d19
fix: complete integration ibex mock
patoo0x Jun 24, 2026
d5498c1
fix: avoid duplicate integration wallet ids
patoo0x Jun 24, 2026
50af5e6
ci: run checks on the bridge-rebase integration branch (#408)
islandbitcoin Jun 24, 2026
ac1ddce
fix: route quickstart through flash service (#415)
forge0x Jun 24, 2026
5c8c970
test: clean up bridge CI checks
patoo0x Jun 24, 2026
6f8f1dc
ci: retry supergraph composition
patoo0x Jun 24, 2026
cd7ad8f
fix: harden ibex webhook routes
patoo0x Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .env.ci
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ LNDOUTSIDE1ADDR=lnd-outside-1
LNDOUTSIDE2ADDR=lnd-outside-2
MONGODB_CON="mongodb://mongodb:27017/galoy"
REDIS_0_DNS=redis
REDIS_0_PORT=${REDIS_0_PORT}
REDIS_0_PORT=6379
REDIS_TYPE=${REDIS_TYPE}
REDIS_MASTER_NAME=${REDIS_MASTER_NAME}
REDIS_PASSWORD=${REDIS_PASSWORD}
Expand Down Expand Up @@ -72,4 +72,4 @@ UNSECURE_DEFAULT_LOGIN_CODE=${UNSECURE_DEFAULT_LOGIN_CODE}
UNSECURE_IP_FROM_REQUEST_OBJECT=${UNSECURE_IP_FROM_REQUEST_OBJECT}

IBEX_PASSWORD=${IBEX_PASSWORD}
IBEX_EXTERNAL_URI=${IBEX_EXTERNAL_URI}
IBEX_EXTERNAL_URI=${IBEX_EXTERNAL_URI}
2 changes: 1 addition & 1 deletion .github/workflows/audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ name: Audit

on:
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
audit:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bats.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: "Bats test"

on:
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
integration:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/check-code.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
name: Check Code

on:
push:
branches: [tmp/bridge-rebase-pr-ready]
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
check-code:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/integration-test.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
name: "Integration test"

on:
push:
branches: [tmp/bridge-rebase-pr-ready]
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
integration:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mobile-schema-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: "Mobile Schema Compatibility"

on:
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
check-secret:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mongodb-migrate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: "Migrate Mongodb"

on:
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
migrate_mongodb:
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/quickstart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: "Quickstart"

on:
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
integration:
Expand All @@ -19,7 +19,6 @@ jobs:
- name: Test quickstart
run: |
cd quickstart
./bin/bump-galoy-git-ref.sh ${{ github.event.pull_request.head.sha }}
./bin/bump-galoy-image-digest.sh local
./bin/bump-mongodb-migrate-image-digest.sh local
make re-render
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spelling.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ name: Spelling

on:
pull_request:
branches: [ main ]
branches: [ main, tmp/bridge-rebase-pr-ready ]

jobs:
spelling:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/unit-test.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
name: "Unit test"

on:
push:
branches: [tmp/bridge-rebase-pr-ready]
pull_request:
branches: [main]
branches: [main, tmp/bridge-rebase-pr-ready]

jobs:
unit-test:
Expand Down
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,12 @@ junit.xml
.yarnrc.yml

docker-compose.local.yml

# Local ERPNext backup outputs
dev/erpnext/backups/*
!dev/erpnext/backups/clean-snapshot.sql.gz

# Planning scratch files
findings.md
progress.md
task_plan.md
21 changes: 21 additions & 0 deletions DEV.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,27 @@ make stop-frappe # stop local Frappe

Update your `dev-overrides.yaml` with local Frappe credentials if running locally.

### Admin Panel API URL

The Frappe Admin Panel uses the Frappe site config key `flash_admin_api_url` to
call the Flash admin GraphQL API for pages such as `alert-users`.

- **Local Docker Frappe:** use `http://host.docker.internal:4001/graphql` so the
Frappe container can reach the backend admin GraphQL server running on the
host machine. Compose maps that hostname with Docker's symbolic
`host-gateway`, and the value can be overridden locally with
`FRAPPE_FLASH_API` if a developer's Docker runtime needs a different host
route.
- **Test / production Kubernetes:** do **not** use `host.docker.internal`. Set
`flash_admin_api_url` from the deployment config to the environment-specific
Kubernetes-reachable admin GraphQL endpoint, such as an internal service DNS
name or routed internal gateway URL. The endpoint should route to the admin
GraphQL server's `/graphql` path unless that environment explicitly rewrites a
different path.

If a local full Frappe backup includes `site_config_backup.json`, treat this key
as environment-specific and override it during deployment restore.

---

## Testing
Expand Down
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ RUN yarn install --frozen-lockfile

COPY ./src ./src

RUN chmod -R a+rX /app/src

RUN yarn build

RUN yarn install --frozen-lockfile --production
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -107,15 +107,15 @@ reset-integration: reset-deps-integration integration

bats:
yarn build && \
bats -t test/bats
if [ -d test/bats ]; then bats -t test/bats; else echo "No test/bats suite found; skipping"; fi

reset-bats: reset-deps bats

execute-bats-from-within-container:
git config --global --add safe.directory /repo # otherwise bats complains
yarn install && \
yarn build && \
bats -t test/bats
if [ -d test/bats ]; then bats -t test/bats; else echo "No test/bats suite found; skipping"; fi

integration-in-ci:
make create-tmp-env-ci && \
Expand All @@ -125,12 +125,12 @@ integration-in-ci:
# heap allocation issue has been resolved in dependencies (fails at 2048).
execute-integration-from-within-container:
yarn install && \
SVIX_ENDPOINT= \
SVIX_SECRET= \
NODE_OPTIONS="--max-old-space-size=6144" \
NODE_ENV=test LOGLEVEL=error $(BIN_DIR)/jest --config ./test/flash/legacy-integration/jest.config.js --bail --runInBand --ci --reporters=default --reporters=jest-junit && \
NODE_OPTIONS="--max-old-space-size=6144" \
NODE_ENV=test LOGLEVEL=error $(BIN_DIR)/jest --config ./test/flash/integration/jest.config.js --bail --runInBand --ci --reporters=default --reporters=jest-junit
if [ -f ./test/flash/legacy-integration/jest.config.js ]; then \
SVIX_ENDPOINT= SVIX_SECRET= NODE_OPTIONS="--max-old-space-size=6144" NODE_ENV=test LOGLEVEL=error $(BIN_DIR)/jest --config ./test/flash/legacy-integration/jest.config.js --bail --runInBand --ci --reporters=default --reporters=jest-junit; \
else \
echo "No legacy integration suite found; skipping"; \
fi && \
SVIX_ENDPOINT= SVIX_SECRET= NODE_OPTIONS="--max-old-space-size=6144" NODE_ENV=test LOGLEVEL=error $(BIN_DIR)/jest --config ./test/flash/integration/jest.config.js --bail --runInBand --ci --reporters=default --reporters=jest-junit

unit-in-ci:
. ./.env && \
Expand Down
2 changes: 1 addition & 1 deletion ci/repipe
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ else
# Set selected_target to only the name field of the chosen target
target="${target_names[$((selection - 1))]}"
fi
echo "Targetting $target"
echo "Targeting $target"

team=main # dev
pipeline="${PIPELINE_NAME:-flash-app}"
Expand Down
Loading
Loading