Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
eb92f87
feat: created the backbone for the card service (#3508)
oana-lolea Jul 7, 2025
85393e2
feat: initialize POS service (#3509)
oana-lolea Jul 8, 2025
086a3f1
feat(card-service): card payments table (#3514)
lengyel-arpad85 Jul 8, 2025
8f0f1f0
feat(pos): create merchants table (#3519)
lengyel-arpad85 Jul 8, 2025
133167d
typo
lengyel-arpad85 Jul 8, 2025
cfed0a1
Docker compose fix (for slower PCs) on localenv (#3522)
oana-lolea Jul 8, 2025
fa4ccfc
fix(cards-service): add dependencies to package.json (#3530)
beniaminmunteanu Jul 9, 2025
9b6601a
feat: Added CardService client in rafiki backend (#3510)
zeppelin44 Jul 9, 2025
2cb622f
feat(pos): pos card services table (#3526)
lengyel-arpad85 Jul 9, 2025
55b86b2
feat(card-service): introduce testcontainers for database and redis (…
beniaminmunteanu Jul 9, 2025
5035a9b
feat(pos): merchants services (#3528)
lengyel-arpad85 Jul 10, 2025
c40f4e4
feat: Integrate Redis client in Card Service for (requestId, posServi…
zeppelin44 Jul 10, 2025
a20fa7a
feat(pos): create merchant route (#3538)
lengyel-arpad85 Jul 10, 2025
359b6be
feat(card-service): introduce AuditLogService (#3525)
beniaminmunteanu Jul 10, 2025
babc426
fix(localenv): add required env vars to docker-compose (#3550)
njlie Jul 10, 2025
9177953
feat(point-of-sale): POS Device service (#3548)
oana-lolea Jul 10, 2025
2a01ae1
feat(pos): RAF-1121-revoke merchant route (#3553)
beniaminmunteanu Jul 10, 2025
d9bf4b5
feat(ci/cd): add ci jobs for testing point of sale and card-service (…
beniaminmunteanu Jul 10, 2025
86a14f1
fix: (rafiki backend) Augment Wallet Address response with cardServic…
MiguelLescasJorgeSebastian Jul 10, 2025
51c333a
fix(localenv): rename CARD_SERVICE_HOST to CARD_SERVICE_URL
njlie Jul 10, 2025
8b4c3a2
feat(point-of-sale): added route for registering a POS device (#3555)
oana-lolea Jul 11, 2025
4642dfd
fix: typo in route
njlie Jul 11, 2025
950b488
feat: bruno calls for creating merchant and registering POS device (#…
njlie Jul 11, 2025
f5a9a07
feat: [RAF-1083][POS Service]: Add GQL Client for Rafiki BE calls for…
zeppelin44 Jul 14, 2025
23dee08
feat(pos): device revoke (#3560)
beniaminmunteanu Jul 22, 2025
0167e61
feat: added card service client to initiate a payment from pos servic…
oana-lolea Aug 4, 2025
41e7f55
feat(backend): Raul/raf 1095 augment outgoing payments for card (#3539)
RaulBR Aug 4, 2025
764ca8b
feat(point-of-sale): service for obtaining walletAddress by its url f…
oana-lolea Aug 6, 2025
4bd9565
feat(card-service): add endpoints to initiate payment and receive pay…
dragosp1011 Aug 13, 2025
c09345b
fix(backend): made CARD_SERVICE_URL optional (#3600)
oana-lolea Aug 14, 2025
058a0ed
feat(point-of-sale): POST payment route (#3597)
oana-lolea Aug 18, 2025
1fa8e81
feat(backend): publish webhooks to POS service if applicable (#3596)
njlie Aug 26, 2025
fb5d701
feat(point-of-sale): handle incoming payment completed webhooks from …
njlie Aug 26, 2025
ddc8a90
fix: test
njlie Aug 26, 2025
7d2cc15
feat(card-service): call outgoing payment creation during payment rou…
njlie Aug 27, 2025
f3eaaf2
chore(backend): remove tenant id from card service path in WA respons…
sanducb Sep 5, 2025
52fd5a5
chore(point-of-sale): add expiry for incoming payments created by pos…
sanducb Sep 5, 2025
494fade
Merge branch 'main' into pos-card-services
mkurapov Sep 8, 2025
a99c9af
feat(card-service): remove `debitAmount` from outgoing payment creati…
mkurapov Sep 8, 2025
7002c47
feat(backend): add custom webhook URL for POS (#3628)
sanducb Sep 10, 2025
50efa05
fix(point-of-sale): added bruno script + added missing env variables …
oana-lolea Sep 17, 2025
9cc2f38
fix: match payment bodies for pos and card service (#3653)
oana-lolea Sep 18, 2025
3be9ecf
feat(card-service, pos-service): updating payment routes with new pay…
mkurapov Sep 19, 2025
6a457f4
feat(backend): additional webhook events for outgoing payments (#3651)
sanducb Sep 23, 2025
66e44d3
feat(backend): Update handling of `OutgoingPaymentCardDetails` (#3658)
mkurapov Sep 23, 2025
741461a
fix(backend): fix webhook resolver filter for OP funded and cancelle…
sanducb Sep 24, 2025
ba2e599
chore: add sha.js override to fix security vulnerability
mkurapov Sep 25, 2025
f49eaa9
feat(card-service): handle payment cancelled & funded events (#3667)
sanducb Sep 26, 2025
e2d4cde
chore: add card-service and pos-service image build steps in CI (#3657)
oana-lolea Sep 29, 2025
e73a86e
chore(point-of-sale): update pos service response structure (#3675)
sanducb Oct 6, 2025
bfe099e
feat: add integration test for pos-card flow (#3678)
oana-lolea Oct 13, 2025
76229df
feat: added sender wallet address to incoming payment (#3705)
oana-lolea Oct 21, 2025
c9b56e7
Merge branch 'main' into pos-card-services
mkurapov Oct 22, 2025
ae75943
chore(card,pos-service): update alpine image
mkurapov Oct 24, 2025
59e01e5
Merge branch 'main' into pos-card-services
mkurapov Oct 24, 2025
b7e7b40
chore(card-service, pos-service): cleanup unused code (#3718)
mkurapov Oct 27, 2025
5f6e296
Merge branch 'main' into pos-card-services
mkurapov Oct 27, 2025
a3c9587
chore(point-of-sale, card-service): update webhook handling (#3725)
mkurapov Oct 28, 2025
673623a
feat(point-of-sale): pos service API for getting incoming payments (#…
njlie Oct 28, 2025
3d5c477
Merge branch 'main' into pos-card-services
mkurapov Oct 28, 2025
99f64ed
feat(backend): add filtering incoming payments by initiatedBy (#3714)
oana-lolea Oct 29, 2025
58a0ee2
feat(point-of-sale): filter incoming payments by those initiated by c…
njlie Oct 30, 2025
3f29d13
Merge branch 'main' into pos-card-services
mkurapov Oct 30, 2025
d52aa17
chore(card-service): remove unused components (#3736)
mkurapov Oct 31, 2025
4d1e1e4
Merge branch 'main' into pos-card-services
mkurapov Oct 31, 2025
9c6b9d1
chore: remove unused pos & card service components (#3737)
mkurapov Oct 31, 2025
babbd74
feat(point-of-sale): add `senderWalletAddress` to incoming payment cr…
mkurapov Oct 31, 2025
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
2 changes: 1 addition & 1 deletion .eslintrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ parserOptions:
plugins:
- '@typescript-eslint'
rules:
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }]
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }]
overrides:
- files: ["*.js"]
rules:
Expand Down
90 changes: 71 additions & 19 deletions .github/workflows/node-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ name: Node Build
on:
workflow_dispatch:
schedule:
- cron: '0 21 * * *'
- cron: "0 21 * * *"
pull_request:
branches:
- '**'
- "**"
push:
branches:
- main
Expand All @@ -17,9 +17,9 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/rafiki/env-setup
- run: pnpm checks
- uses: actions/checkout@v4
- uses: ./.github/workflows/rafiki/env-setup
- run: pnpm checks

backend:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -84,6 +84,32 @@ jobs:
run: |
npx @stoplight/spectral-cli lint ./packages/token-introspection/src/openapi/specs/*.yaml

card-service:
runs-on: ubuntu-latest
needs: prerequisite
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/rafiki/env-setup
- run: pnpm --filter card-service test:ci
- run: pnpm --filter card-service build
- name: AsyncAPI extension
run: |
echo "{\"extends\":[\"spectral:oas\",\"spectral:asyncapi\"]}" >> .spectral.json
- name: Validate Open API specs
run: |
npx @stoplight/spectral-cli lint ./packages/card-service/src/openapi/specs/*.yaml

point-of-sale:
runs-on: ubuntu-latest
needs: prerequisite
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/rafiki/env-setup
- run: pnpm --filter point-of-sale build
- run: pnpm --filter point-of-sale test:ci

mock-account-servicing-entity:
runs-on: ubuntu-latest
needs: prerequisite
Expand Down Expand Up @@ -127,20 +153,20 @@ jobs:
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
language: ["javascript"]
config:
- './.github/codeql/source.yml'
- './.github/codeql/tests.yml'
- "./.github/codeql/source.yml"
- "./.github/codeql/tests.yml"
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/rafiki/env-setup
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
config-file: ${{ matrix.config }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
- uses: actions/checkout@v4
- uses: ./.github/workflows/rafiki/env-setup
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
config-file: ${{ matrix.config }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3

integration-test:
runs-on: ubuntu-22.04
Expand All @@ -160,8 +186,10 @@ jobs:
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 cloud-nine-wallet-test-card-service" | 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
echo "127.0.0.1 happy-life-bank-test-point-of-sale" | sudo tee -a /etc/hosts
- name: Build dependencies
run: pnpm --filter integration build:deps

Expand All @@ -188,9 +216,11 @@ jobs:
- 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-card-service" | 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
echo "127.0.0.1 happy-life-bank-test-point-of-sale" | sudo tee -a /etc/hosts

- name: Build dependencies
run: pnpm --filter performance build:deps
Expand Down Expand Up @@ -312,7 +342,19 @@ jobs:
node-build:
runs-on: ubuntu-latest
timeout-minutes: 5
needs: [auth, backend, frontend, token-introspection, mock-account-servicing-entity, graphql, codeql-analyze, integration-test]
needs:
[
auth,
backend,
frontend,
token-introspection,
card-service,
point-of-sale,
mock-account-servicing-entity,
graphql,
codeql-analyze,
integration-test
]
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/rafiki/env-setup
Expand Down Expand Up @@ -410,6 +452,8 @@ jobs:
- auth
- backend
- frontend
- card-service
- point-of-sale
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down Expand Up @@ -447,6 +491,8 @@ jobs:
- auth
- backend
- frontend
- card-service
- point-of-sale
steps:
- uses: actions/checkout@v4
- name: Fetch docker image from cache
Expand Down Expand Up @@ -483,6 +529,8 @@ jobs:
- auth
- backend
- frontend
- card-service
- point-of-sale
steps:
- uses: actions/checkout@v4
- name: Fetch docker image from cache
Expand Down Expand Up @@ -515,6 +563,8 @@ jobs:
- auth
- backend
- frontend
- card-service
- point-of-sale
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/image-push
Expand All @@ -527,7 +577,7 @@ jobs:

push-manifest:
name: Push multi-arch manifest list
needs: [version-generator,push]
needs: [version-generator, push]
runs-on: ubuntu-latest
if: needs.version-generator.outputs.dockerPush == 'true'
strategy:
Expand All @@ -536,6 +586,8 @@ jobs:
- auth
- backend
- frontend
- card-service
- point-of-sale
steps:
- uses: actions/checkout@v4
- name: Push manifest list
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
meta {
name: Get Incoming Payments
type: http
seq: 4
}

get {
url: http://localhost:4008/payments?receiverWalletAddress=https://happy-life-bank-backend/accounts/pfry
body: none
auth: inherit
}

params:query {
receiverWalletAddress: https://happy-life-bank-backend/accounts/pfry
}
26 changes: 26 additions & 0 deletions bruno/collections/Rafiki/POS Service APIs/Initiate Payment.bru
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
meta {
name: Initiate Payment
type: http
seq: 3
}

post {
url: http://localhost:4008/payment
body: json
auth: inherit
}

body:json {
{
"signature": "signature",
"payload": "payload",
"amount": {
"value": "1000",
"assetScale": 2,
"assetCode": "USD"
},
"senderWalletAddress": "https://cloud-nine-wallet-backend/accounts/gfranklin",
"receiverWalletAddress": "https://happy-life-bank-backend/accounts/pfry",
"timestamp": 1758105181325
}
}
8 changes: 8 additions & 0 deletions bruno/collections/Rafiki/POS Service APIs/folder.bru
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
meta {
name: POS Service APIs
seq: 8
}

auth {
mode: inherit
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
meta {
name: Get Incoming Payments
type: graphql
seq: 60
}

post {
url: {{RafikiGraphqlHost}}/graphql
body: graphql
auth: none
}

body:graphql {
query IncomingPayments($filter: IncomingPaymentFilter) {
incomingPayments(filter: $filter) {
edges {
node {
id
walletAddressId
client
state
expiresAt
incomingAmount {
value
assetCode
assetScale
}
receivedAmount {
value
assetCode
assetScale
}
metadata
createdAt
}
cursor
}
}
}
}

script:pre-request {
const scripts = require('./scripts');

scripts.addApiSignatureHeader();
}
32 changes: 32 additions & 0 deletions localenv/cloud-nine-wallet/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
name: c9
services:
cloud-nine-wallet-card-service:
hostname: cloud-nine-wallet-card-service
image: rafiki-card-service
build:
context: ../..
dockerfile: ./packages/card-service/Dockerfile.dev
restart: always
networks:
- rafiki
ports:
- '9234:9229'
environment:
NODE_ENV: ${NODE_ENV:-development}
INSTANCE_NAME: CLOUD-NINE
TRUST_PROXY: ${TRUST_PROXY}
LOG_LEVEL: debug
CARD_SERVICE_PORT: 3007
GRAPHQL_URL: http://cloud-nine-wallet-backend:3001/graphql
TENANT_ID: 438fa74a-fa7d-4317-9ced-dde32ece1787
TENANT_SECRET: iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964=
TENANT_SIGNATURE_VERSION: 1
depends_on:
- shared-database
healthcheck:
test: ["CMD", "wget", "--spider", "http://localhost:3007/healthz"]
start_period: 60s
start_interval: 5s
interval: 30s
retries: 1
timeout: 3s
cloud-nine-mock-ase:
hostname: cloud-nine-wallet
image: rafiki-mock-ase
Expand Down Expand Up @@ -80,6 +110,8 @@ services:
ENABLE_TELEMETRY: true
KEY_ID: 7097F83B-CB84-469E-96C6-2141C72E22C0
OPERATOR_TENANT_ID: 438fa74a-fa7d-4317-9ced-dde32ece1787
CARD_SERVICE_URL: 'http://cloud-nine-wallet-card-service:3007'
CARD_WEBHOOK_SERVICE_URL: 'http://cloud-nine-wallet-card-service:3007/webhook'
depends_on:
- shared-database
- shared-redis
Expand Down
37 changes: 37 additions & 0 deletions localenv/happy-life-bank/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
name: hl
services:
happy-life-bank-point-of-sale:
hostname: happy-life-bank-point-of-sale
image: rafiki-point-of-sale
build:
context: ../..
dockerfile: ./packages/point-of-sale/Dockerfile.dev
restart: always
networks:
- rafiki
ports:
- '4008:4008'
- '9233:9229'
environment:
NODE_ENV: ${NODE_ENV:-development}
INSTANCE_NAME: HAPPY-LIFE
TRUST_PROXY: ${TRUST_PROXY}
LOG_LEVEL: debug
PORT: 4008
TENANT_ID: cf5fd7d3-1eb1-4041-8e43-ba45747e9e5d
TENANT_SECRET: iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964=
GRAPHQL_URL: http://happy-life-bank-backend:3001/graphql
WEBHOOK_SIGNATURE_SECRET: iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964=
WEBHOOK_SIGNATURE_VERSION: 1
USE_HTTP: true
depends_on:
- shared-database
healthcheck:
test: ["CMD", "wget", "--spider", "http://localhost:4008/healthz"]
start_period: 60s
start_interval: 5s
interval: 30s
retries: 1
timeout: 3s
happy-life-mock-ase:
hostname: happy-life-bank
image: rafiki-mock-ase
Expand Down Expand Up @@ -67,6 +100,8 @@ services:
ILP_ADDRESS: test.happy-life-bank
ILP_CONNECTOR_URL: http://happy-life-bank-backend:4002
STREAM_SECRET: BjPXtnd00G2mRQwP/8ZpwyZASOch5sUXT5o0iR5b5wU=
SIGNATURE_SECRET: iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964= # webhook signature
SIGNATURE_VERSION: 1
ADMIN_API_SECRET: iyIgCprjb9uL8wFckR+pLEkJWMB7FJhgkvqhTQR/964=
WEBHOOK_URL: http://happy-life-bank/webhooks
EXCHANGE_RATES_URL: http://happy-life-bank/rates
Expand All @@ -76,6 +111,8 @@ services:
ENABLE_TELEMETRY: true
KEY_ID: 53f2d913-e98a-40b9-b270-372d0547f23d
OPERATOR_TENANT_ID: cf5fd7d3-1eb1-4041-8e43-ba45747e9e5d
CARD_SERVICE_URL: 'http://happy-life-bank-card-service:4007'
POS_WEBHOOK_SERVICE_URL: 'http://happy-life-bank-point-of-sale:4008/webhook'
WALLET_ADDRESS_NOT_FOUND_POLLING_ENABLED: true
depends_on:
- cloud-nine-backend
Expand Down
Loading
Loading