Move to the fixed crypto stack and patched dependencies; run quality CI on hosted runners (#47)

- Move backend and root transitive deps to patched versions
- Upgrade web to react-router 7.18 and patched vitest/dompurify
- Move the sign app to vite 6.4.3
- Depend on the fixed crypto stack in web, sign and backend
- sign: typecheck the shared code it compiles
- ci: run the quality jobs on GitHub-hosted runners, and build sign
- Move to @pezkuwi/api 16.5.39
- ci: run CodeQL for JavaScript/TypeScript on a GitHub-hosted runner
This commit is contained in:
SatoshiQaziMuhammed authored and GitHub committed 2026-10-09 01:34:14 +04:00
1 parent 74db90a5d4
commit b09af9bfbd
11 files changed
+1330 -1163

No files matched your search

+1 -1
View File
@@ -21,7 +21,7 @@ concurrency:
jobs: jobs:
analyze: analyze:
name: Analyze ${{ matrix.language }} name: Analyze ${{ matrix.language }}
runs-on: pwap-runner runs-on: ubuntu-latest
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
+36 -10
View File
@@ -33,7 +33,7 @@ jobs:
# ======================================== # ========================================
web: web:
name: Web App name: Web App
runs-on: pwap-runner runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
@@ -93,14 +93,11 @@ jobs:
# ======================================== # ========================================
# BACKEND - INDEXER SERVICE (lint/smoke/audit) # BACKEND - INDEXER SERVICE (lint/smoke/audit)
# No build step exists (plain ESM node service); we lockfile-enforce install, # No build step exists (plain ESM node service); we lockfile-enforce install,
# syntax-check the entry point, and audit. The audit is currently non-blocking # syntax-check the entry point, and audit.
# because the express@5 + sqlite3(node-gyp) trees carry transitive advisories
# that need a broader dependency upgrade; flip continue-on-error off once the
# tree is clean.
# ======================================== # ========================================
backend: backend:
name: Backend Indexer name: Backend Indexer
runs-on: pwap-runner runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
@@ -138,7 +135,36 @@ jobs:
- name: npm audit (high + critical, production deps) - name: npm audit (high + critical, production deps)
working-directory: ./backend working-directory: ./backend
continue-on-error: true run: npm audit --audit-level=high --omit=dev
# ========================================
# SIGN - MULTISIG SIGNING PORTAL (typecheck + build)
# sign/ compiles ../shared/lib with tsc before vite builds it, so this is also
# the check that shared/ still typechecks against the chain's augmented API.
# ========================================
sign:
name: Signing Portal
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
working-directory: ./sign
run: npm ci
- name: Typecheck and build
working-directory: ./sign
run: npm run build
- name: npm audit (high + critical, production deps)
working-directory: ./sign
run: npm audit --audit-level=high --omit=dev run: npm audit --audit-level=high --omit=dev
# ======================================== # ========================================
@@ -1090,7 +1116,7 @@ jobs:
# ======================================== # ========================================
security-audit: security-audit:
name: Security Audit name: Security Audit
runs-on: pwap-runner runs-on: ubuntu-latest
needs: [web] needs: [web]
steps: steps:
@@ -1235,8 +1261,8 @@ jobs:
ci-gate: ci-gate:
name: CI Gate ✅ name: CI Gate ✅
runs-on: pwap-runner runs-on: ubuntu-latest
needs: [web, backend, security-audit, migration-test, workflow-guard] needs: [web, backend, sign, security-audit, migration-test, workflow-guard]
if: always() if: always()
steps: steps:
+318 -384
View File
File diff suppressed because it is too large. Load diff
+24 -23
View File
@@ -12,30 +12,31 @@
"overrides": { "overrides": {
"tar": "^7.5.22", "tar": "^7.5.22",
"ws": "^8.21.1", "ws": "^8.21.1",
"@pezkuwi/api": "^16.5.23", "@pezkuwi/api": "^16.5.39",
"@pezkuwi/api-augment": "^16.5.23", "@pezkuwi/api-augment": "^16.5.39",
"@pezkuwi/api-base": "^16.5.23", "@pezkuwi/api-base": "^16.5.39",
"@pezkuwi/api-derive": "^16.5.23", "@pezkuwi/api-derive": "^16.5.39",
"@pezkuwi/rpc-augment": "^16.5.23", "@pezkuwi/rpc-augment": "^16.5.39",
"@pezkuwi/rpc-core": "^16.5.23", "@pezkuwi/rpc-core": "^16.5.39",
"@pezkuwi/rpc-provider": "^16.5.23", "@pezkuwi/rpc-provider": "^16.5.39",
"@pezkuwi/types": "^16.5.23", "@pezkuwi/types": "^16.5.39",
"@pezkuwi/types-augment": "^16.5.23", "@pezkuwi/types-augment": "^16.5.39",
"@pezkuwi/types-codec": "^16.5.23", "@pezkuwi/types-codec": "^16.5.39",
"@pezkuwi/types-create": "^16.5.23", "@pezkuwi/types-create": "^16.5.39",
"@pezkuwi/types-known": "^16.5.23", "@pezkuwi/types-known": "^16.5.39",
"@pezkuwi/types-support": "^16.5.23", "@pezkuwi/types-support": "^16.5.39",
"@pezkuwi/keyring": "^14.0.13", "@pezkuwi/keyring": "^14.0.26",
"@pezkuwi/util": "^14.0.13", "@pezkuwi/util": "^14.0.26",
"@pezkuwi/util-crypto": "^14.0.13", "@pezkuwi/util-crypto": "^14.0.26",
"@pezkuwi/networks": "^14.0.13", "@pezkuwi/networks": "^14.0.26",
"@pezkuwi/x-bigint": "^14.0.13", "@pezkuwi/x-bigint": "^14.0.26",
"@pezkuwi/x-randomvalues": "^14.0.13" "@pezkuwi/x-randomvalues": "^14.0.26",
"@tootallnate/once": "^2.0.1"
}, },
"dependencies": { "dependencies": {
"@pezkuwi/api": "^16.5.23", "@pezkuwi/api": "^16.5.39",
"@pezkuwi/util": "^14.0.13", "@pezkuwi/util": "^14.0.26",
"@pezkuwi/util-crypto": "^14.0.13", "@pezkuwi/util-crypto": "^14.0.26",
"@supabase/supabase-js": "^2.45.0", "@supabase/supabase-js": "^2.45.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^17.2.3", "dotenv": "^17.2.3",
@@ -47,7 +48,7 @@
"sqlite3": "^5.1.7" "sqlite3": "^5.1.7"
}, },
"devDependencies": { "devDependencies": {
"@pezkuwi/keyring": "^14.0.13", "@pezkuwi/keyring": "^14.0.26",
"supertest": "^7.0.0" "supertest": "^7.0.0"
} }
} }
+7 -7
View File
@@ -103,15 +103,15 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/concurrently": { "node_modules/concurrently": {
"version": "9.2.1", "version": "9.2.4",
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.4.tgz",
"integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", "integrity": "sha512-TZ0CEhyzvFjgtAvHTusDMgj7wNdihCh7LLLrzdUOXIhdlnL2JBBGA9eJxR24rtqgmdjh3OA3hrN1rCHj6HM8qA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"chalk": "4.1.2", "chalk": "4.1.2",
"rxjs": "7.8.2", "rxjs": "7.8.2",
"shell-quote": "1.8.3", "shell-quote": "1.9.0",
"supports-color": "8.1.1", "supports-color": "8.1.1",
"tree-kill": "1.2.2", "tree-kill": "1.2.2",
"yargs": "17.7.2" "yargs": "17.7.2"
@@ -195,9 +195,9 @@
} }
}, },
"node_modules/shell-quote": { "node_modules/shell-quote": {
"version": "1.8.3", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz",
"integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
+485 -379
View File
File diff suppressed because it is too large. Load diff
+11 -9
View File
@@ -10,21 +10,23 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@pezkuwi/api": "^16.5.39",
"@pezkuwi/extension-dapp": "^0.62.27",
"@pezkuwi/extension-inject": "^0.62.27",
"@pezkuwi/keyring": "^14.0.26",
"@pezkuwi/util": "^14.0.26",
"@pezkuwi/util-crypto": "^14.0.26",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1"
"@pezkuwi/api": "^16.5.36",
"@pezkuwi/extension-dapp": "^0.62.20",
"@pezkuwi/extension-inject": "^0.62.20",
"@pezkuwi/keyring": "^14.0.25",
"@pezkuwi/util": "^14.0.25",
"@pezkuwi/util-crypto": "^14.0.25"
}, },
"devDependencies": { "devDependencies": {
"@pezkuwi/api-augment": "^16.5.39",
"@types/node": "^22.20.5",
"@types/react": "^18.3.12", "@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^18.3.1",
"@vitejs/plugin-react-swc": "^3.5.0", "@vitejs/plugin-react-swc": "^3.5.0",
"typescript": "^5.6.3", "typescript": "^5.6.3",
"vite": "^5.4.10", "vite": "^6.4.3",
"vite-plugin-node-polyfills": "^0.22.0" "vite-plugin-node-polyfills": "^0.25.0"
} }
} }
+3
View File
@@ -0,0 +1,3 @@
// Types only: gives api.query/api.tx/api.events their chain-specific shapes, as
// web/src/main.tsx does with a runtime import. Nothing here reaches the bundle.
import '@pezkuwi/api-augment';
+3 -2
View File
@@ -24,9 +24,10 @@
"paths": { "paths": {
"@/*": ["./src/*"], "@/*": ["./src/*"],
"@pezkuwi/lib": ["../shared/lib"], "@pezkuwi/lib": ["../shared/lib"],
"@pezkuwi/lib/*": ["../shared/lib/*"] "@pezkuwi/lib/*": ["../shared/lib/*"],
"@pezkuwi/*": ["./node_modules/@pezkuwi/*"]
}, },
"types": ["vite/client"] "types": ["vite/client", "node"]
}, },
"include": ["src"] "include": ["src"]
} }
+406 -312
View File
File diff suppressed because it is too large. Load diff
+36 -36
View File
@@ -25,11 +25,11 @@
"@noble/ciphers": "^2.1.1", "@noble/ciphers": "^2.1.1",
"@noble/curves": "^2.0.1", "@noble/curves": "^2.0.1",
"@noble/hashes": "^2.0.1", "@noble/hashes": "^2.0.1",
"@pezkuwi/api": "^16.5.36", "@pezkuwi/api": "^16.5.39",
"@pezkuwi/extension-dapp": "^0.62.20", "@pezkuwi/extension-dapp": "^0.62.27",
"@pezkuwi/keyring": "^14.0.25", "@pezkuwi/keyring": "^14.0.26",
"@pezkuwi/util": "^14.0.25", "@pezkuwi/util": "^14.0.26",
"@pezkuwi/util-crypto": "^14.0.25", "@pezkuwi/util-crypto": "^14.0.26",
"@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-accordion": "^1.2.0",
"@radix-ui/react-alert-dialog": "^1.1.1", "@radix-ui/react-alert-dialog": "^1.1.1",
"@radix-ui/react-aspect-ratio": "^1.1.0", "@radix-ui/react-aspect-ratio": "^1.1.0",
@@ -61,9 +61,6 @@
"@supabase/supabase-js": "^2.49.4", "@supabase/supabase-js": "^2.49.4",
"@tanstack/react-query": "^5.56.2", "@tanstack/react-query": "^5.56.2",
"@twa-dev/sdk": "^8.0.2", "@twa-dev/sdk": "^8.0.2",
"@types/dompurify": "^3.0.5",
"@types/react-syntax-highlighter": "^15.5.13",
"@types/uuid": "^10.0.0",
"@walletconnect/sign-client": "^2.23.6", "@walletconnect/sign-client": "^2.23.6",
"@walletconnect/types": "^2.23.6", "@walletconnect/types": "^2.23.6",
"buffer": "^6.0.3", "buffer": "^6.0.3",
@@ -71,7 +68,7 @@
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cmdk": "^1.0.0", "cmdk": "^1.0.0",
"date-fns": "^3.6.0", "date-fns": "^3.6.0",
"dompurify": "^3.4.12", "dompurify": "^3.4.16",
"embla-carousel-react": "^8.3.0", "embla-carousel-react": "^8.3.0",
"highlight.js": "^11.9.0", "highlight.js": "^11.9.0",
"i18next": "^23.7.6", "i18next": "^23.7.6",
@@ -87,41 +84,40 @@
"react-hook-form": "^7.53.0", "react-hook-form": "^7.53.0",
"react-i18next": "^14.0.0", "react-i18next": "^14.0.0",
"react-resizable-panels": "^2.1.3", "react-resizable-panels": "^2.1.3",
"react-router-dom": "^6.26.2", "react-router-dom": "^7.18.4",
"react-syntax-highlighter": "^16.1.0", "react-syntax-highlighter": "^16.1.0",
"recharts": "^2.12.7", "recharts": "^2.12.7",
"sonner": "^1.5.0", "sonner": "^1.5.0",
"tailwind-merge": "^2.5.2", "tailwind-merge": "^2.5.2",
"tailwindcss-animate": "^1.0.7",
"uuid": "^11.1.0", "uuid": "^11.1.0",
"vaul": "^0.9.3", "vaul": "^0.9.3",
"zod": "^3.23.8" "zod": "^3.23.8"
}, },
"overrides": { "overrides": {
"@pezkuwi/api": "^16.5.36", "@pezkuwi/api": "^16.5.39",
"@pezkuwi/api-augment": "^16.5.36", "@pezkuwi/api-augment": "^16.5.39",
"@pezkuwi/api-base": "^16.5.36", "@pezkuwi/api-base": "^16.5.39",
"@pezkuwi/api-derive": "^16.5.36", "@pezkuwi/api-derive": "^16.5.39",
"@pezkuwi/rpc-augment": "^16.5.36", "@pezkuwi/rpc-augment": "^16.5.39",
"@pezkuwi/rpc-core": "^16.5.36", "@pezkuwi/rpc-core": "^16.5.39",
"@pezkuwi/rpc-provider": "^16.5.36", "@pezkuwi/rpc-provider": "^16.5.39",
"@pezkuwi/types": "^16.5.36", "@pezkuwi/types": "^16.5.39",
"@pezkuwi/types-augment": "^16.5.36", "@pezkuwi/types-augment": "^16.5.39",
"@pezkuwi/types-codec": "^16.5.36", "@pezkuwi/types-codec": "^16.5.39",
"@pezkuwi/types-create": "^16.5.36", "@pezkuwi/types-create": "^16.5.39",
"@pezkuwi/types-known": "^16.5.36", "@pezkuwi/types-known": "^16.5.39",
"@pezkuwi/types-support": "^16.5.36", "@pezkuwi/types-support": "^16.5.39",
"@pezkuwi/keyring": "^14.0.25", "@pezkuwi/keyring": "^14.0.26",
"@pezkuwi/util": "^14.0.25", "@pezkuwi/util": "^14.0.26",
"@pezkuwi/util-crypto": "^14.0.25", "@pezkuwi/util-crypto": "^14.0.26",
"@pezkuwi/x-bigint": "^14.0.25", "@pezkuwi/x-bigint": "^14.0.26",
"@pezkuwi/x-fetch": "^14.0.25", "@pezkuwi/x-fetch": "^14.0.26",
"@pezkuwi/x-global": "^14.0.25", "@pezkuwi/x-global": "^14.0.26",
"@pezkuwi/x-randomvalues": "^14.0.25", "@pezkuwi/x-randomvalues": "^14.0.26",
"@pezkuwi/x-textdecoder": "^14.0.25", "@pezkuwi/x-textdecoder": "^14.0.26",
"@pezkuwi/x-textencoder": "^14.0.25", "@pezkuwi/x-textencoder": "^14.0.26",
"@pezkuwi/x-ws": "^14.0.25", "@pezkuwi/x-ws": "^14.0.26",
"@pezkuwi/networks": "^14.0.25", "@pezkuwi/networks": "^14.0.26",
"elliptic": "^6.6.1" "elliptic": "^6.6.1"
}, },
"devDependencies": { "devDependencies": {
@@ -130,10 +126,13 @@
"@testing-library/jest-dom": "^6.9.1", "@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0", "@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1", "@testing-library/user-event": "^14.6.1",
"@types/dompurify": "^3.0.5",
"@types/node": "^22.5.5", "@types/node": "^22.5.5",
"@types/qrcode": "^1.5.6", "@types/qrcode": "^1.5.6",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@types/react-syntax-highlighter": "^15.5.13",
"@types/uuid": "^10.0.0",
"@vitejs/plugin-react-swc": "^3.5.0", "@vitejs/plugin-react-swc": "^3.5.0",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"eslint": "^9.9.0", "eslint": "^9.9.0",
@@ -145,11 +144,12 @@
"jsdom": "^27.2.0", "jsdom": "^27.2.0",
"postcss": "^8.5.23", "postcss": "^8.5.23",
"tailwindcss": "^3.4.11", "tailwindcss": "^3.4.11",
"tailwindcss-animate": "^1.0.7",
"typescript": "^5.5.3", "typescript": "^5.5.3",
"typescript-eslint": "^8.0.1", "typescript-eslint": "^8.0.1",
"vite": "^7.3.1", "vite": "^7.3.1",
"vite-plugin-node-polyfills": "^0.25.0", "vite-plugin-node-polyfills": "^0.25.0",
"vite-plugin-subresource-integrity": "^0.0.12", "vite-plugin-subresource-integrity": "^0.0.12",
"vitest": "^4.0.10" "vitest": "^4.1.11"
} }
} }