Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
b908d48
fix: ensure lockfiles are used on ci builds (#443)
dasanra Sep 9, 2025
2314ed8
Bump coverallsapp/github-action from 2.3.6 to 2.3.7
dependabot[bot] Nov 24, 2025
1afba1c
Bump actions/checkout from 4 to 6
dependabot[bot] Nov 24, 2025
778c929
Bump docker/setup-qemu-action from 3.6.0 to 3.7.0
dependabot[bot] Nov 26, 2025
92ee70e
Bump @typescript-eslint/eslint-plugin from 8.32.0 to 8.46.2
dependabot[bot] Oct 20, 2025
4bb6ca5
Update node 22 -> 24 and dependencies
Uxio0 Nov 27, 2025
8fcc425
Refactor tests
Uxio0 Nov 27, 2025
3b07859
Update README.md
Uxio0 Nov 27, 2025
deb4d8c
Bump actions/setup-node from 4 to 6
dependabot[bot] Nov 26, 2025
cbbd3e1
Update README.md (#440)
Olexandr88 Nov 27, 2025
f2128e2
Update Node.js version badge in README
Uxio0 Nov 27, 2025
0d175d7
Bump ts-jest from 29.4.5 to 29.4.6
dependabot[bot] Dec 1, 2025
9ef3ef3
Bump @nestjs/cli from 11.0.13 to 11.0.14
dependabot[bot] Dec 1, 2025
1ea87fe
Bump @eslint/eslintrc from 3.3.1 to 3.3.3
dependabot[bot] Dec 1, 2025
42b2bfa
Bump @types/express from 5.0.5 to 5.0.6
dependabot[bot] Dec 1, 2025
b61a479
Bump version from 0.15.0 to 0.16.0
Uxio0 Dec 9, 2025
7c3f4d5
fix: Set Json format to Warning logs (#468)
falvaradorodriguez Jan 12, 2026
f301149
Bump viem from 2.40.3 to 2.42.1
dependabot[bot] Dec 15, 2025
50e5dd6
Bump prettier from 3.7.1 to 3.7.4
dependabot[bot] Dec 15, 2025
65996d9
Bump typeorm from 0.3.27 to 0.3.28
dependabot[bot] Feb 12, 2026
5e18b99
Set version v1.0.0 (#470)
falvaradorodriguez Feb 12, 2026
02ed8c6
Update License
akshay-ap Feb 17, 2026
7c9a7c4
Merge pull request #476 from safe-global/update-license
akshay-ap Feb 17, 2026
3a07843
feat: Add support for proxy headers (#481)
falvaradorodriguez Mar 27, 2026
66d8171
Add supply chain protection cooldown period
Uxio0 Mar 31, 2026
ed11442
Bump docker/build-push-action from 6 to 7
dependabot[bot] Mar 9, 2026
a8235f1
Bump docker/setup-buildx-action from 3 to 4
dependabot[bot] Mar 9, 2026
4b6f240
feat: Enable keep-alive on HTTP/HTTPS agents for webhook dispatch
Uxio0 Mar 31, 2026
91b2a78
fix: security hardening and configuration improvements
Uxio0 Mar 31, 2026
1fc84ab
Bump version from 1.0.0 to 1.1.0
Uxio0 Mar 31, 2026
d3d83ea
fix: await processEvent before acking RabbitMQ message to restore bac…
Uxio0 Apr 14, 2026
97ee12e
Bump @nestjs/core from 11.1.9 to 11.1.17
dependabot[bot] Mar 31, 2026
0fef664
Bump docker/login-action from 3 to 4
dependabot[bot] Mar 31, 2026
c57673a
Bump docker/setup-qemu-action from 3.7.0 to 4.0.0
dependabot[bot] Mar 31, 2026
222909e
Bump version from 1.1.0 to 1.2.0
Uxio0 Apr 14, 2026
ed5d0fa
Rewrite admin routes in HTML and patch router
yagopv Apr 21, 2026
6410ba9
Improve protection against header injection attacks
yagopv Apr 21, 2026
d5a109e
warn in case adminLayer not present
yagopv Apr 22, 2026
0254938
fix: Enable access to the Admin panel through configured proxy
yagopv Apr 22, 2026
80f1716
Bump eslint-plugin-prettier from 5.5.4 to 5.5.5 (#473)
dependabot[bot] Apr 22, 2026
385aa98
Bump axios from 1.13.2 to 1.15.0 (#493)
dependabot[bot] Apr 22, 2026
5e7d732
chore: Set release version (#498)
yagopv Apr 23, 2026
c953200
feat: migrate webhook HTTP client from axios to undici with retry (#492)
Uxio0 Apr 23, 2026
0daf6b5
build: harden pnpm migration and pin GitHub Actions (#497)
Uxio0 Apr 23, 2026
eb6bb7a
Add missing dependencies for AdminJS
Uxio0 Apr 23, 2026
3fec49a
feat: Add explicit permissions to GitHub Actions workflows (#514)
luarx May 19, 2026
5298054
perf: optimize webhook dispatch and bound response body size (#524)
Uxio0 May 27, 2026
707474c
Bump the nestjs group across 1 directory with 12 updates (#522)
dependabot[bot] May 27, 2026
3731b94
fix: harden auth with constant-time comparison (#523)
Uxio0 May 27, 2026
7607834
Bump version from 1.3.0 to 1.4.0 (#525)
Uxio0 May 27, 2026
714d98a
fix: serve AdminJS static assets under pnpm (PLA-1573) (#526)
Uxio0 Jun 2, 2026
4c2b41d
Bump version from 1.4.0 to 1.4.1 (#527)
Uxio0 Jun 2, 2026
c2795c9
refactor: drop dependabot.yml
lorks Nov 22, 2023
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
12 changes: 11 additions & 1 deletion .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,20 @@ AMQP_EXCHANGE=safe-transaction-service-events
AMQP_QUEUE=safe-events-service
ADMIN_EMAIL=admin@safe
ADMIN_PASSWORD=password
ADMIN_COOKIE_SECRET=change-me-in-production
ADMIN_SESSION_SECRET=change-me-in-production
WEBHOOKS_CACHE_TTL=300000
NODE_ENV=dev
SSE_AUTH_TOKEN=aW5mcmFAc2FmZS5nbG9iYWw6YWJjMTIz
DATABASE_SSL_ENABLED=false
ADMIN_WEBHOOK_AUTH=super-secret-token
# DATABASE_CA_PATH=/path/of/db/certificate
# URL_BASE_PATH=/test # Set a globlal url path
# URL_BASE_PATH=/test # Set a global url path
# HTTP_TIMEOUT=5000 # Webhook HTTP client timeout in milliseconds (default: 5000)
# HTTP_MAX_RETRIES=2 # Max retry attempts for transient errors/5xx responses (default: 2)
# DB_HEALTH_CHECK_TIMEOUT=5000 # Database health check timeout in milliseconds (default: 5000)
# AMQP_PREFETCH_MESSAGES=100 # RabbitMQ prefetch message count (default: 10)
# WEBHOOK_AUTO_DISABLE=false # Auto-disable webhooks exceeding the failure threshold (default: false)
# WEBHOOK_FAILURE_THRESHOLD=90 # Failure rate percentage to trigger auto-disable (default: 90)
# WEBHOOK_HEALTH_MINUTES_WINDOW=60 # Rolling window in minutes for webhook health stats (default: 60)
# LOG_LEVEL=log # Logging level: verbose, debug, log, warn, error, fatal (default: log)
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence.
* @safe-global/mainframe
* @safe-global/platform
28 changes: 0 additions & 28 deletions .github/dependabot.yml

This file was deleted.

96 changes: 62 additions & 34 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,44 @@ on:
release:
types: [released]

permissions: {}

jobs:
format:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '22.x'
cache: 'npm'
- run: npm i
- run: npm run format
node-version: '24.x'
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
env:
HUSKY: 0
- run: pnpm run format

lint:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '22.x'
cache: 'npm'
- run: npm i
- run: npm run lint
node-version: '24.x'
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
env:
HUSKY: 0
- run: pnpm run lint

db-migrations:
permissions:
contents: read
runs-on: ubuntu-latest
services:
postgres:
Expand All @@ -48,18 +62,23 @@ jobs:
- 5433:5432

steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '22.x'
cache: 'npm'
- run: npm i
node-version: '24.x'
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
env:
HUSKY: 0
- run: cp .env.sample .env
- run: npm run build
- run: pnpm run build
- run: bash ./scripts/db_run_migrations.sh
- run: bash ./scripts/db_check_migrations.sh

tests:
permissions:
contents: read
runs-on: ubuntu-latest
services:
postgres:
Expand Down Expand Up @@ -90,52 +109,59 @@ jobs:
matrix:
task: ['test:cov', 'test:e2e:cov']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '22.x'
cache: 'npm'
- run: npm i
node-version: '24.x'
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
env:
HUSKY: 0
- run: cp .env.sample .env
- run: npm run build
- run: npm run ${{matrix.task}}
- run: pnpm run build
- run: pnpm run ${{matrix.task}}
- name: Coveralls Parallel
uses: coverallsapp/github-action@v2.3.6
uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: run-${{ matrix.task }}
parallel: true

tests-finish:
permissions:
contents: read
needs: tests
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@v2.3.6
uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true

docker-publish:
permissions:
contents: read
if: github.ref == 'refs/heads/main' || (github.event_name == 'release' && github.event.action == 'released')
needs:
- format
- lint
- tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3.6.0
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
with:
platforms: arm64
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
- uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
- uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Deploy main
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v6
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
platforms: linux/amd64,linux/arm64
push: true
Expand All @@ -144,7 +170,7 @@ jobs:
cache-to: type=gha,mode=max
- name: Deploy Tag
if: (github.event_name == 'release' && github.event.action == 'released')
uses: docker/build-push-action@v6
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
platforms: linux/amd64,linux/arm64
push: true
Expand All @@ -155,11 +181,13 @@ jobs:
cache-to: type=gha,mode=max

autodeploy:
permissions:
contents: read
runs-on: ubuntu-latest
needs: [docker-publish]
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Deploy Staging
if: github.ref == 'refs/heads/main'
run: bash scripts/autodeploy.sh
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/cla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@ on:
pull_request_target:
types: [opened, closed, synchronize]

permissions: {}

jobs:
CLAAssistant:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- name: 'CLA Assistant'
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
# Beta Release
uses: contributor-assistant/github-action@v2.6.1
uses: contributor-assistant/github-action@ca4a40a7d1004f18d9960b404b97e5f30a505a08 # v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# the below token should have repo scope and must be manually added by you in the repository's secret
Expand Down
5 changes: 5 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# adminjs creates a virtual Babel entry file at the project root to resolve its
# .babelrc.json at runtime. pnpm strict hoisting prevents Babel from finding
# adminjs's own babel plugins from that path, so we hoist them to root node_modules.
public-hoist-pattern[]=@babel/plugin-syntax-import-assertions
public-hoist-pattern[]=@babel/plugin-syntax-import-attributes
22 changes: 6 additions & 16 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,16 @@
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"skipFiles": ["<node_internals>/**"],
"program": "${workspaceFolder}/src/main.ts",
"preLaunchTask": "tsc: build - tsconfig.json",
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
]
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
},
{
"type": "node",
"request": "launch",
"name": "Debug tests",
"skipFiles": [
"<node_internals>/**"
],
"skipFiles": ["<node_internals>/**"],
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/.bin/jest",
Expand All @@ -37,9 +31,7 @@
"type": "node",
"request": "launch",
"name": "Debug current test file",
"skipFiles": [
"<node_internals>/**"
],
"skipFiles": ["<node_internals>/**"],
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/.bin/jest",
Expand All @@ -54,9 +46,7 @@
"type": "node",
"request": "launch",
"name": "Debug current E2E test file",
"skipFiles": [
"<node_internals>/**"
],
"skipFiles": ["<node_internals>/**"],
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/.bin/jest",
Expand All @@ -68,4 +58,4 @@
"console": "integratedTerminal"
}
]
}
}
30 changes: 30 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Contributing

Thanks for your interest in contributing to this repository.

## Licensing and CLA

This repository contains code under two licensing regimes, split by a cut-over
date:

- Up to and including February 16, 2026:
Copyright (c) Safe Ecosystem Foundation, licensed under the MIT License.
- From February 17, 2026 onward:
Copyright (c) Safe Labs GmbH, licensed under the Functional Source License
v1.1 (MIT Future License).

By submitting a pull request, you agree that your contribution will be licensed
under the regime applicable at the time your pull request is merged.

For contributions merged on or after February 17, 2026, acceptance of the Safe
Labs Contributor License Agreement (CLA) is required and enforced via CI.

For details, see:
- `LICENSE`
- `NOTICE`

## Process

- Open an issue or pull request with a clear description of your change.
- Keep pull requests focused and minimal.
- Follow the guidance in `README.md`.
Loading
Loading