build: use pnpm for the deploy
This commit is contained in:
parent
64e358f61c
commit
bac8813a8d
36 changed files with 19068 additions and 29560 deletions
58
.github/workflows/build.yml
vendored
58
.github/workflows/build.yml
vendored
|
|
@ -4,42 +4,48 @@ on: [ workflow_dispatch ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
everything:
|
everything:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Setup Turbo cache
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Cache Docker layers
|
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: /tmp/.buildx-cache
|
path: .turbo
|
||||||
key: ${{ runner.os }}-buildx-updatetar
|
key: ${{ runner.os }}-turbo-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-buildx-updatetar
|
${{ runner.os }}-turbo-
|
||||||
- name: Build Docker image
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: build/ci.Dockerfile
|
|
||||||
load: true
|
|
||||||
tags: ci_image:latest
|
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
|
||||||
|
|
||||||
- name: Extract artifact from Docker image
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: 10.11.0
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '22'
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Build packages with Turbo
|
||||||
|
run: pnpm run build
|
||||||
|
|
||||||
|
- name: Package production build
|
||||||
run: |
|
run: |
|
||||||
docker create --name extract_artifact ci_image:latest
|
# Create production-ready server package using pnpm deploy
|
||||||
docker cp extract_artifact:/lamassu-server.tar.gz ./lamassu-server.tar.gz
|
pnpm deploy --filter=./packages/server --prod lamassu-server --legacy
|
||||||
docker rm extract_artifact
|
|
||||||
|
# Copy built admin UI to public directory
|
||||||
|
cp -r packages/admin-ui/build lamassu-server/public
|
||||||
|
|
||||||
|
# Create tarball
|
||||||
|
tar -zcf lamassu-server.tar.gz lamassu-server/
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: lamassu-server.tar.gz
|
name: lamassu-server.tar.gz
|
||||||
path: lamassu-server.tar.gz
|
path: lamassu-server.tar.gz
|
||||||
|
|
||||||
- name: Move cache
|
|
||||||
run: |
|
|
||||||
rm -rf /tmp/.buildx-cache
|
|
||||||
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
|
|
||||||
59
.github/workflows/docker-build.yml
vendored
59
.github/workflows/docker-build.yml
vendored
|
|
@ -17,16 +17,48 @@ jobs:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Setup Turbo cache
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Cache Docker layers
|
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: /tmp/.buildx-cache
|
path: .turbo
|
||||||
key: ${{ runner.os }}-buildx-updatetar
|
key: ${{ runner.os }}-turbo-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-buildx-updatetar
|
${{ runner.os }}-turbo-
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: 10.11.0
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '22'
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Build packages with Turbo
|
||||||
|
run: pnpm run build
|
||||||
|
|
||||||
|
- name: Verify build artifacts
|
||||||
|
run: |
|
||||||
|
echo "=== Verifying typesafe-db build ==="
|
||||||
|
ls -la packages/typesafe-db/lib/
|
||||||
|
echo "=== Verifying admin-ui build ==="
|
||||||
|
ls -la packages/admin-ui/build/
|
||||||
|
|
||||||
|
- name: Package production build
|
||||||
|
run: |
|
||||||
|
# Create production-ready server package using pnpm deploy
|
||||||
|
pnpm deploy --filter=./packages/server --prod lamassu-server --legacy
|
||||||
|
|
||||||
|
# Copy built admin UI to public directory
|
||||||
|
cp -r packages/admin-ui/build lamassu-server/public
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
|
|
@ -34,7 +66,7 @@ jobs:
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
||||||
|
|
||||||
- name: Build and push
|
- name: Build and push server image
|
||||||
uses: docker/build-push-action@v5
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
|
|
@ -42,10 +74,8 @@ jobs:
|
||||||
target: l-s
|
target: l-s
|
||||||
file: ./build/server.Dockerfile
|
file: ./build/server.Dockerfile
|
||||||
tags: ${{ env.DOCKERHUB_SERVER_REPO }}:latest
|
tags: ${{ env.DOCKERHUB_SERVER_REPO }}:latest
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
|
||||||
|
|
||||||
- name: Build and push
|
- name: Build and push admin server image
|
||||||
uses: docker/build-push-action@v5
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
|
|
@ -53,10 +83,3 @@ jobs:
|
||||||
target: l-a-s
|
target: l-a-s
|
||||||
file: ./build/server.Dockerfile
|
file: ./build/server.Dockerfile
|
||||||
tags: ${{ env.DOCKERHUB_ADMIN_REPO }}:latest
|
tags: ${{ env.DOCKERHUB_ADMIN_REPO }}:latest
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
|
||||||
|
|
||||||
- name: Move cache
|
|
||||||
run: |
|
|
||||||
rm -rf /tmp/.buildx-cache
|
|
||||||
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
|
|
||||||
|
|
|
||||||
26
.github/workflows/test.yml
vendored
26
.github/workflows/test.yml
vendored
|
|
@ -3,24 +3,38 @@ name: Tests
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ dev ]
|
branches: [ dev ]
|
||||||
|
push:
|
||||||
|
branches: [ dev ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Turbo cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: .turbo
|
||||||
|
key: ${{ runner.os }}-turbo-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-turbo-
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: 10.11.0
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '22'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: pnpm install
|
||||||
|
|
||||||
- name: Run admin-ui tests
|
- name: Run tests
|
||||||
working-directory: packages/admin-ui
|
run: pnpm run test
|
||||||
run: npm run test:run
|
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,9 +1,12 @@
|
||||||
**/node_modules
|
**/node_modules
|
||||||
**/.env
|
**/.env
|
||||||
|
.pnpm-store/
|
||||||
|
|
||||||
.idea/
|
.idea/
|
||||||
.settings/
|
.settings/
|
||||||
|
.turbo/
|
||||||
|
|
||||||
|
packages/server/.lamassu
|
||||||
packages/server/certs/
|
packages/server/certs/
|
||||||
packages/server/tests/stress/machines
|
packages/server/tests/stress/machines
|
||||||
packages/server/tests/stress/config.json
|
packages/server/tests/stress/config.json
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,5 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
. "$(dirname -- "$0")/_/husky.sh"
|
. "$(dirname -- "$0")/_/husky.sh"
|
||||||
|
|
||||||
# Run tests first
|
|
||||||
echo "Running tests..."
|
|
||||||
npm run test:run --workspace=packages/admin-ui
|
|
||||||
|
|
||||||
# Run linting
|
# Run linting
|
||||||
npx lint-staged
|
npx lint-staged
|
||||||
|
|
|
||||||
114
INSTALL-NIX.md
114
INSTALL-NIX.md
|
|
@ -1,114 +0,0 @@
|
||||||
# Install - nix
|
|
||||||
|
|
||||||
## Preliminaries for using nix
|
|
||||||
|
|
||||||
For a dev environment with nix package manager a postgres install on the base system is required, this guide does not cover a postgresql server running with nix-shell.
|
|
||||||
|
|
||||||
### Set up PostgreSQL
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo -u postgres createdb lamassu
|
|
||||||
sudo -u postgres psql postgres
|
|
||||||
```
|
|
||||||
|
|
||||||
In ``psql``, run the following and set password to ``postgres123``:
|
|
||||||
|
|
||||||
```
|
|
||||||
\password postgres
|
|
||||||
ctrl-d
|
|
||||||
```
|
|
||||||
|
|
||||||
### Starting up environment
|
|
||||||
|
|
||||||
shell.nix script provided, all you need to do to setup the environment is to run `nix-shell` on the folder.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### Install node modules
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Generate certificates
|
|
||||||
|
|
||||||
```
|
|
||||||
bash packages/server/tools/cert-gen.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
- This will create a ``.lamassu`` directory in your home directory.
|
|
||||||
|
|
||||||
### Set up database
|
|
||||||
|
|
||||||
Important: lamassu-migrate currently gripes about a QueryResultError. Ignore this, it works anyway.
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-migrate
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run new-lamassu-admin
|
|
||||||
|
|
||||||
```
|
|
||||||
cd packages/admin-ui/
|
|
||||||
npm run start
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run lamassu-admin-server
|
|
||||||
|
|
||||||
In a second terminal window:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-admin-server --dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Register admin user
|
|
||||||
|
|
||||||
In a third terminal window:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-register admin@example.com superuser
|
|
||||||
```
|
|
||||||
|
|
||||||
You'll use this generated URL in the brower in a moment.
|
|
||||||
|
|
||||||
### Complete configuration
|
|
||||||
|
|
||||||
Paste the URL from lamassu-register exactly as output, into a browser (chrome or firefox).
|
|
||||||
|
|
||||||
**Important**: the host must be localhost. Tell your browser to trust the certificate even though it's not signed by a recognized CA. If you get an "expired" error, try opening https://localhost:8070/graphql in another tab and trust the certificate.
|
|
||||||
|
|
||||||
Go to all the required, unconfigured red fields and choose some values. Choose mock services whenever available.
|
|
||||||
|
|
||||||
### Run lamassu-server
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-server --mockScoring
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add a lamassu-machine
|
|
||||||
|
|
||||||
Click on ``+ Add Machine`` in the sidebar. Type in a name for your machine and click **Pair**. Open up development tools to show the JavaScript console and copy the totem. You will use this to run lamassu-machine. This pairing totem expires after an hour.
|
|
||||||
|
|
||||||
Now continue with lamassu-machine instructions from the ``INSTALL.md`` file in [lamassu-machine repository](https://github.com/lamassu/lamassu-machine).
|
|
||||||
|
|
||||||
## Subsequent runs
|
|
||||||
|
|
||||||
To start the Lamassu server run:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-server --mockScoring
|
|
||||||
```
|
|
||||||
|
|
||||||
To start the Lamassu Admin run:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-admin-server --dev
|
|
||||||
```
|
|
||||||
|
|
||||||
and
|
|
||||||
|
|
||||||
```
|
|
||||||
cd packages/admin-ui/
|
|
||||||
npm run start
|
|
||||||
```
|
|
||||||
126
INSTALL.md
126
INSTALL.md
|
|
@ -1,126 +0,0 @@
|
||||||
# Install
|
|
||||||
|
|
||||||
## Preliminaries for Ubuntu 16.04
|
|
||||||
|
|
||||||
Installation for other distros may be slightly different. This assumes NodeJS 22 or higher is already installed. All of this is done in the lamassu-server directory.
|
|
||||||
|
|
||||||
### Packages
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install postgresql postgresql-contrib postgresql-server-dev-9.5 libpq-dev git
|
|
||||||
```
|
|
||||||
|
|
||||||
### Set up PostgreSQL
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo -u postgres createdb lamassu
|
|
||||||
sudo -u postgres psql postgres
|
|
||||||
```
|
|
||||||
|
|
||||||
In ``psql``, run the following and set password to ``postgres123``:
|
|
||||||
|
|
||||||
```
|
|
||||||
\password postgres
|
|
||||||
ctrl-d
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### Install node modules
|
|
||||||
|
|
||||||
Make sure you're running NodeJS 22 or higher. Ignore any warnings.
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Generate certificates
|
|
||||||
|
|
||||||
```
|
|
||||||
bash packages/server/tools/cert-gen.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
- This will create a ``.lamassu`` directory in your home directory.
|
|
||||||
|
|
||||||
### Set up database
|
|
||||||
|
|
||||||
Important: lamassu-migrate currently gripes about a QueryResultError. Ignore this, it works anyway.
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-migrate
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run new-lamassu-admin
|
|
||||||
|
|
||||||
```
|
|
||||||
cd packages/admin-ui/
|
|
||||||
npm run start
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run lamassu-admin-server
|
|
||||||
|
|
||||||
In a second terminal window:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-admin-server --dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Register admin user
|
|
||||||
|
|
||||||
In a third terminal window:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-register admin@example.com superuser
|
|
||||||
```
|
|
||||||
|
|
||||||
You'll use this generated URL in the brower in a moment.
|
|
||||||
|
|
||||||
### Complete configuration
|
|
||||||
|
|
||||||
Paste the URL from lamassu-register exactly as output, into a browser (chrome or firefox).
|
|
||||||
|
|
||||||
**Important**: the host must be localhost. Tell your browser to trust the certificate even though it's not signed by a recognized CA. If you get an "expired" error, try opening https://localhost:8070/graphql in another tab and trust the certificate.
|
|
||||||
|
|
||||||
Go to all the required, unconfigured red fields and choose some values. Choose mock services whenever available.
|
|
||||||
|
|
||||||
### Run lamassu-server
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-server --mockScoring
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add a lamassu-machine
|
|
||||||
|
|
||||||
Click on ``+ Add Machine`` in the sidebar. Type in a name for your machine and click **Pair**. Open up development tools to show the JavaScript console and copy the totem. You will use this to run lamassu-machine. This pairing totem expires after an hour.
|
|
||||||
|
|
||||||
Now continue with lamassu-machine instructions from the ``INSTALL.md`` file in [lamassu-machine repository](https://github.com/lamassu/lamassu-machine).
|
|
||||||
|
|
||||||
### Run a local coin node (BTC supported)
|
|
||||||
|
|
||||||
Run `node packages/server/bin/lamassu-coins` in the project root and select `Bitcoin`. This process will require the existence of certain environment variables that the setup will warn about.
|
|
||||||
|
|
||||||
Once that is done, the node needs to be run in a terminal with the following command `<YOUR_BLOCKCHAIN_DIR_ENV_VAR>/bin/bitcoind -datadir=<YOUR_BLOCKCHAIN_DIR_ENV_VAR>/bitcoin`
|
|
||||||
|
|
||||||
|
|
||||||
## Subsequent runs
|
|
||||||
|
|
||||||
To start the Lamassu server run:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-server --mockScoring
|
|
||||||
```
|
|
||||||
|
|
||||||
To start the Lamassu Admin run:
|
|
||||||
|
|
||||||
```
|
|
||||||
node packages/server/bin/lamassu-admin-server --dev
|
|
||||||
```
|
|
||||||
|
|
||||||
and
|
|
||||||
|
|
||||||
```
|
|
||||||
cd packages/admin-ui/
|
|
||||||
npm run start
|
|
||||||
```
|
|
||||||
55
README.md
55
README.md
|
|
@ -6,14 +6,57 @@ Lamassu remote server.
|
||||||
|
|
||||||
We do not generally accept outside pull requests for new features. Please consult with us before putting a lot of work into a pull request.
|
We do not generally accept outside pull requests for new features. Please consult with us before putting a lot of work into a pull request.
|
||||||
|
|
||||||
## Installation
|
## Development
|
||||||
|
|
||||||
See [INSTALL.md](INSTALL.md), or [INSTALL-NIX.md](INSTALL-NIX.md) for nix environment.
|
### Requirements
|
||||||
|
|
||||||
## Installation on remote server (only for production)
|
- Nodejs 22
|
||||||
See [lamassu-remote-install/README.md](lamassu-remote-install/README.md).
|
- PNPM 10+
|
||||||
|
- Postgres Database
|
||||||
|
- Python 3 (to be deprecated, required by a single dependency installation)
|
||||||
|
- OpenSSL (for cert-gen.sh, it will set up the server self-signed certificates)
|
||||||
|
|
||||||
|
There's a shell.nix file that you can use to set up your env in case you're a nix user.
|
||||||
|
There's also a .tool-versions for asdf and mise users.
|
||||||
|
|
||||||
|
This project uses Turbo for monorepo management. Install dependencies:
|
||||||
|
|
||||||
## Running
|
|
||||||
```bash
|
```bash
|
||||||
node bin/lamassu-server --mockScoring
|
pnpm install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Prepare environment files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash packages/server/tools/cert-gen.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
On packages/server/.env you can alter variables such as the postgres connection info.
|
||||||
|
|
||||||
|
After configuring the postgres connection, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node packages/server/bin/lamassu-migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Start development environment:
|
||||||
|
|
||||||
|
If you've already done the setup, you can run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a user
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node packages/server/bin/lamassu-register admin@example.com superuser
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pairing a machine
|
||||||
|
|
||||||
|
To get the pairing token from the QRCode open the browser console before picking the name of the machine, the token should appear on the terminal.
|
||||||
|
It's also possible to inspect the qrCode, the token is on the data-cy="" attr.
|
||||||
|
Lastly, you can always scan it with a phone and copy the contents over.
|
||||||
|
|
||||||
|
Now continue with lamassu-machine instructions from the `INSTALL.md` file in [lamassu-machine repository](https://github.com/lamassu/lamassu-machine).
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
FROM node:22-alpine AS build-ui
|
|
||||||
RUN apk add --no-cache npm git curl build-base python3
|
|
||||||
|
|
||||||
COPY ["packages/admin-ui/package.json", "package-lock.json", "./"]
|
|
||||||
|
|
||||||
RUN npm version --allow-same-version --git-tag-version false --commit-hooks false 1.0.0
|
|
||||||
RUN npm install
|
|
||||||
|
|
||||||
COPY packages/admin-ui/ ./
|
|
||||||
RUN npm run build
|
|
||||||
|
|
||||||
FROM ubuntu:20.04 as base
|
|
||||||
|
|
||||||
ARG VERSION
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
|
||||||
ENV TZ=Europe/Lisbon
|
|
||||||
|
|
||||||
RUN apt-get update
|
|
||||||
|
|
||||||
RUN apt-get install -y -q curl \
|
|
||||||
sudo \
|
|
||||||
git \
|
|
||||||
python2-minimal \
|
|
||||||
build-essential \
|
|
||||||
libpq-dev \
|
|
||||||
net-tools \
|
|
||||||
tar
|
|
||||||
|
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
|
||||||
RUN apt-get install nodejs -y -q
|
|
||||||
|
|
||||||
WORKDIR lamassu-server
|
|
||||||
|
|
||||||
COPY ["packages/server/package.json", "package-lock.json", "./"]
|
|
||||||
RUN npm version --allow-same-version --git-tag-version false --commit-hooks false 1.0.0
|
|
||||||
RUN npm install --production
|
|
||||||
|
|
||||||
COPY ./packages/server/ ./
|
|
||||||
COPY --from=build-ui /build /lamassu-server/public
|
|
||||||
|
|
||||||
RUN cd .. && tar -zcvf lamassu-server.tar.gz ./lamassu-server
|
|
||||||
|
|
@ -2,20 +2,16 @@ version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
lamassu-server:
|
lamassu-server:
|
||||||
build:
|
image: lamassu/lamassu-server:latest
|
||||||
context: .
|
|
||||||
dockerfile: build/server.Dockerfile
|
|
||||||
target: l-s
|
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
ports:
|
network_mode: host
|
||||||
- 3000:3000
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./lamassu-data:/lamassu-data
|
- ./lamassu-data:/lamassu-data
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- POSTGRES_USER=postgres
|
- POSTGRES_USER=postgres
|
||||||
- POSTGRES_PASSWORD=postgres123
|
- POSTGRES_PASSWORD=postgres123
|
||||||
- POSTGRES_HOST=host.docker.internal
|
- POSTGRES_HOST=localhost
|
||||||
- POSTGRES_PORT=5432
|
- POSTGRES_PORT=5432
|
||||||
- POSTGRES_DB=lamassu
|
- POSTGRES_DB=lamassu
|
||||||
- CA_PATH=/lamassu-data/certs/Lamassu_OP_Root_CA.pem
|
- CA_PATH=/lamassu-data/certs/Lamassu_OP_Root_CA.pem
|
||||||
|
|
@ -31,20 +27,16 @@ services:
|
||||||
- LOG_LEVEL=info
|
- LOG_LEVEL=info
|
||||||
|
|
||||||
lamassu-admin-server:
|
lamassu-admin-server:
|
||||||
build:
|
image: lamassu/lamassu-admin-server:latest
|
||||||
context: .
|
|
||||||
dockerfile: build/server.Dockerfile
|
|
||||||
target: l-a-s
|
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
ports:
|
network_mode: host
|
||||||
- 443:443
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./lamassu-data:/lamassu-data
|
- ./lamassu-data:/lamassu-data
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- POSTGRES_USER=postgres
|
- POSTGRES_USER=postgres
|
||||||
- POSTGRES_PASSWORD=postgres123
|
- POSTGRES_PASSWORD=postgres123
|
||||||
- POSTGRES_HOST=host.docker.internal
|
- POSTGRES_HOST=localhost
|
||||||
- POSTGRES_PORT=5432
|
- POSTGRES_PORT=5432
|
||||||
- POSTGRES_DB=lamassu
|
- POSTGRES_DB=lamassu
|
||||||
- CA_PATH=/lamassu-data/certs/Lamassu_OP_Root_CA.pem
|
- CA_PATH=/lamassu-data/certs/Lamassu_OP_Root_CA.pem
|
||||||
|
|
@ -1,49 +1,20 @@
|
||||||
FROM node:22-alpine AS build
|
FROM node:22-alpine AS base
|
||||||
RUN apk add --no-cache npm git curl build-base net-tools python3 postgresql-dev
|
RUN apk add --no-cache bash libpq openssl ca-certificates
|
||||||
|
|
||||||
WORKDIR /lamassu-server
|
WORKDIR /lamassu-server
|
||||||
|
|
||||||
COPY ["packages/server/package.json", "package-lock.json", "./"]
|
# Copy the pre-built production package from CI (with node_modules)
|
||||||
RUN npm version --allow-same-version --git-tag-version false --commit-hooks false 1.0.0
|
COPY lamassu-server/ ./
|
||||||
RUN npm install --production
|
|
||||||
|
|
||||||
COPY packages/server/ ./
|
# Install production dependencies in the container
|
||||||
|
RUN npm install --omit=dev --ignore-scripts
|
||||||
|
|
||||||
FROM node:22-alpine AS l-s-base
|
|
||||||
RUN apk add --no-cache npm git curl bash libpq openssl ca-certificates
|
|
||||||
|
|
||||||
COPY --from=build /lamassu-server /lamassu-server
|
|
||||||
|
|
||||||
|
|
||||||
FROM l-s-base AS l-s
|
|
||||||
|
|
||||||
|
FROM base AS l-s
|
||||||
RUN chmod +x /lamassu-server/bin/lamassu-server-entrypoint.sh
|
RUN chmod +x /lamassu-server/bin/lamassu-server-entrypoint.sh
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
ENTRYPOINT [ "/lamassu-server/bin/lamassu-server-entrypoint.sh" ]
|
ENTRYPOINT [ "/lamassu-server/bin/lamassu-server-entrypoint.sh" ]
|
||||||
|
|
||||||
|
FROM base AS l-a-s
|
||||||
FROM node:22-alpine AS build-ui
|
|
||||||
RUN apk add --no-cache npm git curl build-base python3
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY ["packages/admin-ui/package.json", "package-lock.json", "./"]
|
|
||||||
|
|
||||||
RUN npm version --allow-same-version --git-tag-version false --commit-hooks false 1.0.0
|
|
||||||
RUN npm install
|
|
||||||
|
|
||||||
COPY packages/admin-ui/ ./
|
|
||||||
RUN npm run build
|
|
||||||
|
|
||||||
|
|
||||||
FROM l-s-base AS l-a-s
|
|
||||||
COPY --from=build-ui /app/build /lamassu-server/public
|
|
||||||
|
|
||||||
RUN chmod +x /lamassu-server/bin/lamassu-admin-server-entrypoint.sh
|
RUN chmod +x /lamassu-server/bin/lamassu-admin-server-entrypoint.sh
|
||||||
|
|
||||||
EXPOSE 443
|
EXPOSE 443
|
||||||
|
|
||||||
ENTRYPOINT [ "/lamassu-server/bin/lamassu-admin-server-entrypoint.sh" ]
|
ENTRYPOINT [ "/lamassu-server/bin/lamassu-admin-server-entrypoint.sh" ]
|
||||||
|
|
@ -9,6 +9,7 @@ import pluginJest from 'eslint-plugin-jest'
|
||||||
|
|
||||||
export default defineConfig([
|
export default defineConfig([
|
||||||
globalIgnores([
|
globalIgnores([
|
||||||
|
'**/.lamassu',
|
||||||
'**/build',
|
'**/build',
|
||||||
'**/package.json',
|
'**/package.json',
|
||||||
'**/package-lock.json',
|
'**/package-lock.json',
|
||||||
|
|
|
||||||
29092
package-lock.json
generated
29092
package-lock.json
generated
File diff suppressed because it is too large
Load diff
24
package.json
24
package.json
|
|
@ -4,15 +4,15 @@
|
||||||
"version": "11.0.0-beta.1",
|
"version": "11.0.0-beta.1",
|
||||||
"license": "./LICENSE",
|
"license": "./LICENSE",
|
||||||
"author": "Lamassu (https://lamassu.is)",
|
"author": "Lamassu (https://lamassu.is)",
|
||||||
|
"packageManager": "pnpm@10.11.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/lamassu/lamassu-server.git"
|
"url": "https://github.com/lamassu/lamassu-server.git"
|
||||||
},
|
},
|
||||||
"workspaces": [
|
"engines": {
|
||||||
"packages/server",
|
"node": ">=22.0.0"
|
||||||
"packages/admin-ui",
|
},
|
||||||
"packages/typesafe-db"
|
"workspaces": [],
|
||||||
],
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/css": "^0.7.0",
|
"@eslint/css": "^0.7.0",
|
||||||
"@eslint/js": "^9.26.0",
|
"@eslint/js": "^9.26.0",
|
||||||
|
|
@ -25,10 +25,20 @@
|
||||||
"globals": "^16.1.0",
|
"globals": "^16.1.0",
|
||||||
"husky": "^8.0.0",
|
"husky": "^8.0.0",
|
||||||
"lint-staged": "^16.0.0",
|
"lint-staged": "^16.0.0",
|
||||||
"prettier": "^3.5.3"
|
"prettier": "^3.5.3",
|
||||||
|
"turbo": "^2.5.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prepare": "husky install"
|
"prepare": "husky install",
|
||||||
|
"build": "turbo build",
|
||||||
|
"dev": "turbo dev",
|
||||||
|
"start": "turbo start",
|
||||||
|
"test": "turbo test",
|
||||||
|
"clean": "turbo clean",
|
||||||
|
"server:dev": "turbo dev --filter=lamassu-server",
|
||||||
|
"admin:dev": "turbo dev --filter=lamassu-admin",
|
||||||
|
"typesafe-db:build": "turbo build --filter=typesafe-db",
|
||||||
|
"typesafe-db:dev": "turbo dev --filter=typesafe-db"
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
"hooks": {
|
"hooks": {
|
||||||
|
|
|
||||||
|
|
@ -10,31 +10,27 @@ To take advantage of that make sure to run `git commit` from within this folder.
|
||||||
|
|
||||||
## Available Scripts
|
## Available Scripts
|
||||||
|
|
||||||
In the project directory, you can run:
|
From the root directory (recommended with Turbo):
|
||||||
|
|
||||||
### `npm start`
|
- `pnpm run dev` - Start development environment
|
||||||
|
- `pnpm run build` - Build for production
|
||||||
|
- `pnpm run admin:dev` - Start only admin UI development
|
||||||
|
|
||||||
Runs the app in the development mode.<br>
|
In the admin-ui package directory, you can run:
|
||||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
|
||||||
|
|
||||||
The page will reload if you make edits.<br>
|
### `pnpm start` or `pnpm run dev`
|
||||||
|
|
||||||
|
Runs the app in development mode with Vite.
|
||||||
|
Open [http://localhost:5173](http://localhost:5173) to view it in the browser.
|
||||||
|
|
||||||
|
The page will reload if you make edits.
|
||||||
You will also see any lint errors in the console.
|
You will also see any lint errors in the console.
|
||||||
|
|
||||||
### `npm fix`
|
### `pnpm test`
|
||||||
|
|
||||||
Runs eslint --fix on the src folder
|
Launches the test runner with vitest.
|
||||||
|
|
||||||
### `npm test`
|
### `pnpm run build`
|
||||||
|
|
||||||
Launches the test runner in the interactive watch mode.<br>
|
Builds the app for production to the `build` folder.
|
||||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
|
||||||
|
|
||||||
### `npm run build`
|
|
||||||
|
|
||||||
Builds the app for production to the `build` folder.<br>
|
|
||||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||||
|
|
||||||
The build is minified and the filenames include the hashes.<br>
|
|
||||||
Your app is ready to be deployed!
|
|
||||||
|
|
||||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "vite",
|
"start": "vite",
|
||||||
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"test": "vitest",
|
"test": "vitest",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
import PropTypes from 'prop-types'
|
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
import Paper from '@mui/material/Paper'
|
import Paper from '@mui/material/Paper'
|
||||||
|
|
@ -18,9 +17,5 @@ const CollapsibleCard = ({ className, state, shrunkComponent, children }) => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
CollapsibleCard.propTypes = {
|
|
||||||
shrunkComponent: PropTypes.node.isRequired,
|
|
||||||
}
|
|
||||||
|
|
||||||
export default CollapsibleCard
|
export default CollapsibleCard
|
||||||
export { cardState }
|
export { cardState }
|
||||||
|
|
|
||||||
52
packages/server/certs/Lamassu_OP.key
Normal file
52
packages/server/certs/Lamassu_OP.key
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
FMgzEYeX0l+6C9iJufa/MKhajPUtXg==
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
30
packages/server/certs/Lamassu_OP.pem
Normal file
30
packages/server/certs/Lamassu_OP.pem
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFNDCCAxwCFGweNB6EP0jxoN18cP4xsaQ8TfYJMA0GCSqGSIb3DQEBCwUAMF0x
|
||||||
|
CzAJBgNVBAYTAklTMRIwEAYDVQQHDAlSZXlramF2aWsxHDAaBgNVBAoME0xhbWFz
|
||||||
|
c3UgT3BlcmF0b3IgQ0ExHDAaBgNVBAMME2xhbWFzc3Utb3BlcmF0b3IuaXMwHhcN
|
||||||
|
MjUwNTEzMTIyMDE2WhcNMzUwNTExMTIyMDE2WjBQMQswCQYDVQQGEwJJUzESMBAG
|
||||||
|
A1UEBwwJUmV5a2phdmlrMRkwFwYDVQQKDBBMYW1hc3N1IE9wZXJhdG9yMRIwEAYD
|
||||||
|
VQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCw
|
||||||
|
yTzTYjzn1un9tfiATtdVGTfnRQjTPTC8388fvhQKhF3ymdsxql7b5UPaRN3GD1V/
|
||||||
|
AVTeKRlj2heQ6Ffyi278T16moV9N11hU1I1e5TRSMKzqPwbZfyoCaSXBG9i5SnhZ
|
||||||
|
uUJz6g2JzCRB5JiXV8b1fKxRsfwJgdEp+/BZRqS1yJNMfnK3b39flFWgR375k/4L
|
||||||
|
XdGrWHQmqkCn5Mcu7RFn0/V2MbU9GdPNRDPtRdqfh9khMs1o7EBPKY9P5EyMZob0
|
||||||
|
MJ0ODA4nRFqjRvpm/I+8x0ePMOehcm612qmYc5lvZIiayonRfrt1NsUChEaGmN2a
|
||||||
|
p5UEHMll7iVXtEUdiBQYAcy36WWONzvx3NcMi+6FZ98DJ/NI4z3NwvYnbJdh+3F7
|
||||||
|
8VCQiJesqQsj3RDwL8cKohtSUMAfATXGrzymzJm6sgCaBrKy96BIWhUsu0Z/9En+
|
||||||
|
/YKJYqBBLeyuWJrTQ+1AR/pyfxmWymWWxGrN98TkEDl/gdNYg6vng17fZWwv6eL8
|
||||||
|
v5M5wYxsjlcdakHmIUEROtyQZ+IyyfGC02jPXuEGTxvpqO7J4SOqLfBTQyh1btxv
|
||||||
|
oq+PiyZayEPdfqoGma7ULng63ld0vodQW1ojlFccqJB0fBYW2lws4Z2k8vJtrq0c
|
||||||
|
AtJtSWU5H1NVaSe3YzzggjuQUqiZintqBMx4uTqG3QIDAQABMA0GCSqGSIb3DQEB
|
||||||
|
CwUAA4ICAQB0oianP/VHyMLkPzFnRxGmYw6nZDZXKCvpq1qFAm93oc3yZ/Lk7xpY
|
||||||
|
kULUaGBcSa3QBe7EBl7pumtrPVb3RNlKnrD4/d2biM+b6T43yB279AEFrOXKIGa8
|
||||||
|
ZUN1NQ1rGAQ6rA5QWDGh26VKnMts9CXqO/QXOOTG1IZpd5G+f4XQCAI+fhOi5uQG
|
||||||
|
f8oTJ6uAllCaa85mDwxo/vPyz5nR+3JtcHIUggcxvRUL9TaGf/DERZO6nILgjuws
|
||||||
|
jwSTWzTfBWRld4ZXME/e2W2T0hMUnuH/KoHGxEBgLQvwS6qmQgm9Y7eBEujEe/3O
|
||||||
|
CxfGjGlO/gxDUjL3D9bY4LD32u4vmzkHQAfDPFq+Nkd5mPupFBK5RT8AeYJpQooU
|
||||||
|
7uqr3KDa7zuUtdLpPDok5cHgw+faqoi7EhDF7b0W6IxgNpXzMliRK9zPPHRLNqus
|
||||||
|
zz+9uAO9zxfNAF1UlFXQgERe0zvalp5faGPcSUJYMLOCQJcCUWIdLxhkW5XRF5kN
|
||||||
|
pbxTE768U/iBgVT0hnV5kHyhjUdyNkdg7azj4ouOXNtNpBoY9trkXjc7aWephU06
|
||||||
|
KQOu4XPxEOTGox/fcwyzLgJBH0gXt26Ig+p+PhH+IIlwsAd4iL01XxP5z3qrEcEg
|
||||||
|
3QcWBsRrjbGX5mP8p6Sg4qF759qRGq+wpySCDeManZBtMqlkuipWhQ==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
52
packages/server/certs/Lamassu_OP_Root_CA.key
Normal file
52
packages/server/certs/Lamassu_OP_Root_CA.key
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
LfwveRB3xlGoXUUiTxU6XT8m/5Xa
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
32
packages/server/certs/Lamassu_OP_Root_CA.pem
Normal file
32
packages/server/certs/Lamassu_OP_Root_CA.pem
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
||||||
1
packages/server/certs/Lamassu_OP_Root_CA.srl
Normal file
1
packages/server/certs/Lamassu_OP_Root_CA.srl
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
6C1E341E843F48F1A0DD7C70FE31B1A43C4DF609
|
||||||
|
|
@ -16,7 +16,9 @@ const sms = require('./sms')
|
||||||
const settingsLoader = require('./new-settings-loader')
|
const settingsLoader = require('./new-settings-loader')
|
||||||
const logger = require('./logger')
|
const logger = require('./logger')
|
||||||
const externalCompliance = require('./compliance-external')
|
const externalCompliance = require('./compliance-external')
|
||||||
const { getCustomerList } = require('typesafe-db/lib/customers')
|
const {
|
||||||
|
customers: { getCustomerList },
|
||||||
|
} = require('typesafe-db')
|
||||||
|
|
||||||
const { APPROVED, RETRY } = require('./plugins/compliance/consts')
|
const { APPROVED, RETRY } = require('./plugins/compliance/consts')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ const eventBus = require('./event-bus')
|
||||||
const DATABASE_NOT_REACHABLE = 'Database not reachable.'
|
const DATABASE_NOT_REACHABLE = 'Database not reachable.'
|
||||||
|
|
||||||
const pgp = Pgp({
|
const pgp = Pgp({
|
||||||
pgNative: true,
|
|
||||||
schema: 'public',
|
schema: 'public',
|
||||||
error: (err, e) => {
|
error: (err, e) => {
|
||||||
if (e.cn) logger.error(DATABASE_NOT_REACHABLE)
|
if (e.cn) logger.error(DATABASE_NOT_REACHABLE)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
const db = require('./db')
|
||||||
|
|
||||||
|
exports.up = next =>
|
||||||
|
db.multi(
|
||||||
|
[
|
||||||
|
`CREATE INDEX cash_in_txs_customer_id_idx ON cash_in_txs (customer_id);`,
|
||||||
|
`CREATE INDEX cash_out_txs_customer_id_idx ON cash_out_txs (customer_id);`,
|
||||||
|
],
|
||||||
|
next,
|
||||||
|
)
|
||||||
|
|
||||||
|
exports.down = next => next()
|
||||||
|
|
@ -76,7 +76,6 @@
|
||||||
"p-each-series": "^1.0.0",
|
"p-each-series": "^1.0.0",
|
||||||
"p-queue": "^6.6.2",
|
"p-queue": "^6.6.2",
|
||||||
"p-retry": "^4.4.0",
|
"p-retry": "^4.4.0",
|
||||||
"pg-native": "^3.0.0",
|
|
||||||
"pg-promise": "^10.10.2",
|
"pg-promise": "^10.10.2",
|
||||||
"pify": "^3.0.0",
|
"pify": "^3.0.0",
|
||||||
"pretty-ms": "^2.1.0",
|
"pretty-ms": "^2.1.0",
|
||||||
|
|
@ -87,6 +86,7 @@
|
||||||
"serve-static": "^1.12.4",
|
"serve-static": "^1.12.4",
|
||||||
"talisman": "^0.20.0",
|
"talisman": "^0.20.0",
|
||||||
"telnyx": "^1.25.5",
|
"telnyx": "^1.25.5",
|
||||||
|
"typesafe-db": "workspace:*",
|
||||||
"tronweb": "^5.3.0",
|
"tronweb": "^5.3.0",
|
||||||
"twilio": "^3.6.1",
|
"twilio": "^3.6.1",
|
||||||
"uuid": "8.3.2",
|
"uuid": "8.3.2",
|
||||||
|
|
@ -126,7 +126,9 @@
|
||||||
"lamassu-clean-parsed-id": "./bin/lamassu-clean-parsed-id"
|
"lamassu-clean-parsed-id": "./bin/lamassu-clean-parsed-id"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"build": "echo 'Server requires no build step'",
|
||||||
"start": "node bin/lamassu-server",
|
"start": "node bin/lamassu-server",
|
||||||
|
"dev": "concurrently \"npm:server\" \"npm:admin-server\"",
|
||||||
"test": "mocha --recursive tests",
|
"test": "mocha --recursive tests",
|
||||||
"jtest": "jest --detectOpenHandles",
|
"jtest": "jest --detectOpenHandles",
|
||||||
"build-admin": "npm run build-admin:css && npm run build-admin:main && npm run build-admin:lamassu",
|
"build-admin": "npm run build-admin:css && npm run build-admin:main && npm run build-admin:lamassu",
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const os = require('os')
|
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
const setEnvVariable = require('./set-env-var')
|
const setEnvVariable = require('./set-env-var')
|
||||||
|
|
||||||
fs.copyFileSync(path.resolve(__dirname, '../.sample.env'), path.resolve(__dirname, '../.env'))
|
fs.copyFileSync(
|
||||||
|
path.resolve(__dirname, '../.sample.env'),
|
||||||
|
path.resolve(__dirname, '../.env'),
|
||||||
|
)
|
||||||
|
|
||||||
setEnvVariable('NODE_ENV', 'development')
|
setEnvVariable('NODE_ENV', 'development')
|
||||||
|
|
||||||
|
|
@ -18,13 +20,16 @@ setEnvVariable('CA_PATH', `${process.env.PWD}/certs/Lamassu_OP_Root_CA.pem`)
|
||||||
setEnvVariable('CERT_PATH', `${process.env.PWD}/certs/Lamassu_OP.pem`)
|
setEnvVariable('CERT_PATH', `${process.env.PWD}/certs/Lamassu_OP.pem`)
|
||||||
setEnvVariable('KEY_PATH', `${process.env.PWD}/certs/Lamassu_OP.key`)
|
setEnvVariable('KEY_PATH', `${process.env.PWD}/certs/Lamassu_OP.key`)
|
||||||
|
|
||||||
setEnvVariable('MNEMONIC_PATH', `${process.env.HOME}/.lamassu/mnemonics/mnemonic.txt`)
|
setEnvVariable(
|
||||||
|
'MNEMONIC_PATH',
|
||||||
|
`${process.env.PWD}/.lamassu/mnemonics/mnemonic.txt`,
|
||||||
|
)
|
||||||
|
|
||||||
setEnvVariable('BLOCKCHAIN_DIR', `${process.env.PWD}/blockchains`)
|
setEnvVariable('BLOCKCHAIN_DIR', `${process.env.PWD}/blockchains`)
|
||||||
setEnvVariable('OFAC_DATA_DIR', `${process.env.HOME}/.lamassu/ofac`)
|
setEnvVariable('OFAC_DATA_DIR', `${process.env.PWD}/.lamassu/ofac`)
|
||||||
setEnvVariable('ID_PHOTO_CARD_DIR', `${process.env.HOME}/.lamassu/idphotocard`)
|
setEnvVariable('ID_PHOTO_CARD_DIR', `${process.env.PWD}/.lamassu/idphotocard`)
|
||||||
setEnvVariable('FRONT_CAMERA_DIR', `${process.env.HOME}/.lamassu/frontcamera`)
|
setEnvVariable('FRONT_CAMERA_DIR', `${process.env.PWD}/.lamassu/frontcamera`)
|
||||||
setEnvVariable('OPERATOR_DATA_DIR', `${process.env.HOME}/.lamassu/operatordata`)
|
setEnvVariable('OPERATOR_DATA_DIR', `${process.env.PWD}/.lamassu/operatordata`)
|
||||||
|
|
||||||
setEnvVariable('BTC_NODE_LOCATION', 'remote')
|
setEnvVariable('BTC_NODE_LOCATION', 'remote')
|
||||||
setEnvVariable('BTC_WALLET_LOCATION', 'local')
|
setEnvVariable('BTC_WALLET_LOCATION', 'local')
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,13 @@ set -e
|
||||||
DOMAIN=localhost
|
DOMAIN=localhost
|
||||||
[ ! -z "$1" ] && DOMAIN=$1
|
[ ! -z "$1" ] && DOMAIN=$1
|
||||||
|
|
||||||
CONFIG_DIR=$HOME/.lamassu
|
SERVER_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
|
||||||
|
CONFIG_DIR=$SERVER_DIR/.lamassu
|
||||||
LOG_FILE=/tmp/cert-gen.log
|
LOG_FILE=/tmp/cert-gen.log
|
||||||
CERT_DIR=$PWD/certs
|
CERT_DIR=$SERVER_DIR/certs
|
||||||
KEY_DIR=$PWD/certs
|
KEY_DIR=$SERVER_DIR/certs
|
||||||
LAMASSU_CA_PATH=$PWD/Lamassu_CA.pem
|
LAMASSU_CA_PATH=$SERVER_DIR/Lamassu_CA.pem
|
||||||
POSTGRES_PASS=postgres123
|
POSTGRES_PASS=postgres123
|
||||||
OFAC_DATA_DIR=$CONFIG_DIR/ofac
|
OFAC_DATA_DIR=$CONFIG_DIR/ofac
|
||||||
IDPHOTOCARD_DIR=$CONFIG_DIR/idphotocard
|
IDPHOTOCARD_DIR=$CONFIG_DIR/idphotocard
|
||||||
|
|
@ -24,7 +26,7 @@ MNEMONIC_DIR=$CONFIG_DIR/mnemonics
|
||||||
MNEMONIC_FILE=$MNEMONIC_DIR/mnemonic.txt
|
MNEMONIC_FILE=$MNEMONIC_DIR/mnemonic.txt
|
||||||
mkdir -p $MNEMONIC_DIR >> $LOG_FILE 2>&1
|
mkdir -p $MNEMONIC_DIR >> $LOG_FILE 2>&1
|
||||||
SEED=$(openssl rand -hex 32)
|
SEED=$(openssl rand -hex 32)
|
||||||
MNEMONIC=$($PWD/bin/bip39 $SEED)
|
MNEMONIC=$($SERVER_DIR/bin/bip39 $SEED)
|
||||||
echo "$MNEMONIC" > $MNEMONIC_FILE
|
echo "$MNEMONIC" > $MNEMONIC_FILE
|
||||||
|
|
||||||
echo "Generating SSL certificates..."
|
echo "Generating SSL certificates..."
|
||||||
|
|
@ -90,6 +92,6 @@ rm /tmp/Lamassu_OP.csr.pem
|
||||||
mkdir -p $OFAC_DATA_DIR/sources
|
mkdir -p $OFAC_DATA_DIR/sources
|
||||||
touch $OFAC_DATA_DIR/etags.json
|
touch $OFAC_DATA_DIR/etags.json
|
||||||
|
|
||||||
node tools/build-dev-env.js
|
(cd $SERVER_DIR && node tools/build-dev-env.js)
|
||||||
|
|
||||||
echo "Done."
|
echo "Done."
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,23 @@
|
||||||
"license": "../LICENSE",
|
"license": "../LICENSE",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/node": "^22.0.0",
|
||||||
|
"@types/pg": "^8.11.10",
|
||||||
"kysely-codegen": "^0.18.5",
|
"kysely-codegen": "^0.18.5",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./src/index.ts",
|
||||||
|
"default": "./lib/index.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc --build",
|
||||||
"start": "tsc --watch",
|
"start": "tsc --watch",
|
||||||
"clean": "rm -rf lib",
|
"dev": "tsc --watch",
|
||||||
"generate-types": "kysely-codegen --camel-case --out-file ./src/types/types.d.ts"
|
"generate-types": "kysely-codegen --camel-case --out-file ./src/types/types.d.ts",
|
||||||
|
"postinstall": "npm run build"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"kysely": "^0.28.2",
|
"kysely": "^0.28.2",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,14 @@
|
||||||
import { DB } from './types/types.js'
|
import { DB } from './types/types.js'
|
||||||
import { Pool } from 'pg'
|
import { Pool } from 'pg'
|
||||||
import { Kysely, PostgresDialect, CamelCasePlugin } from 'kysely'
|
import { Kysely, PostgresDialect, CamelCasePlugin } from 'kysely'
|
||||||
import { PSQL_URL } from 'lamassu-server/lib/constants.js'
|
|
||||||
|
const POSTGRES_USER = process.env.POSTGRES_USER
|
||||||
|
const POSTGRES_PASSWORD = process.env.POSTGRES_PASSWORD
|
||||||
|
const POSTGRES_HOST = process.env.POSTGRES_HOST
|
||||||
|
const POSTGRES_PORT = process.env.POSTGRES_PORT
|
||||||
|
const POSTGRES_DB = process.env.POSTGRES_DB
|
||||||
|
|
||||||
|
const PSQL_URL = `postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}`
|
||||||
|
|
||||||
const dialect = new PostgresDialect({
|
const dialect = new PostgresDialect({
|
||||||
pool: new Pool({
|
pool: new Pool({
|
||||||
|
|
@ -13,12 +20,4 @@ const dialect = new PostgresDialect({
|
||||||
export default new Kysely<DB>({
|
export default new Kysely<DB>({
|
||||||
dialect,
|
dialect,
|
||||||
plugins: [new CamelCasePlugin()],
|
plugins: [new CamelCasePlugin()],
|
||||||
log(event) {
|
|
||||||
if (event.level === 'query') {
|
|
||||||
console.log('Query:', event.query.sql)
|
|
||||||
console.log('Parameters:', event.query.parameters)
|
|
||||||
console.log('Duration:', event.queryDurationMillis + 'ms')
|
|
||||||
console.log('---')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
|
||||||
1
packages/typesafe-db/src/index.ts
Normal file
1
packages/typesafe-db/src/index.ts
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
export * as customers from './customers.js'
|
||||||
|
|
@ -2,18 +2,17 @@
|
||||||
"$schema": "https://json.schemastore.org/tsconfig",
|
"$schema": "https://json.schemastore.org/tsconfig",
|
||||||
"display": "Node 22",
|
"display": "Node 22",
|
||||||
"_version": "22.0.0",
|
"_version": "22.0.0",
|
||||||
|
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"lib": ["es2023"],
|
"lib": ["es2023"],
|
||||||
|
"types": ["node"],
|
||||||
"module": "nodenext",
|
"module": "nodenext",
|
||||||
"target": "es2022",
|
"target": "es2022",
|
||||||
|
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"moduleResolution": "node16",
|
"moduleResolution": "node16",
|
||||||
|
"noEmit": false,
|
||||||
"outDir": "./lib",
|
"outDir": "./lib",
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
"declarationMap": true,
|
"declarationMap": true,
|
||||||
|
|
|
||||||
18581
pnpm-lock.yaml
generated
Normal file
18581
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load diff
4
pnpm-workspace.yaml
Normal file
4
pnpm-workspace.yaml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
packages:
|
||||||
|
- 'packages/server'
|
||||||
|
- 'packages/admin-ui'
|
||||||
|
- 'packages/typesafe-db'
|
||||||
28
shell.nix
28
shell.nix
|
|
@ -1,18 +1,18 @@
|
||||||
with import (fetchTarball {
|
with import (fetchTarball {
|
||||||
name = "nixpkgs-194846768975b7ad2c4988bdb82572c00222c0d7";
|
name = "nixpkgs-21808d22b1cda1898b71cf1a1beb524a97add2c4";
|
||||||
url = https://github.com/NixOS/nixpkgs/archive/194846768975b7ad2c4988bdb82572c00222c0d7.tar.gz;
|
url = "https://github.com/NixOS/nixpkgs/archive/21808d22b1cda1898b71cf1a1beb524a97add2c4.tar.gz";
|
||||||
sha256 = "0snj72i9dm99jlnnmk8id8ffjnfg1k81lr7aw8d01kz3hdiraqil";
|
sha256 = "0v2z6jphhbk1ik7fqhlfnihcyff5np9wb3pv19j9qb9mpildx0cg";
|
||||||
}) {};
|
}) {};
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "node";
|
name = "node";
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
nodejs_22
|
nodejs_22
|
||||||
python3
|
python3
|
||||||
openssl
|
openssl
|
||||||
postgresql
|
pnpm_10
|
||||||
];
|
];
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
export PATH="$PWD/node_modules/.bin/:$PATH"
|
export PATH="$PWD/node_modules/.bin/:$PATH"
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
48
turbo.json
Normal file
48
turbo.json
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://turbo.build/schema.json",
|
||||||
|
"remoteCache": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"build": {
|
||||||
|
"dependsOn": ["^build"],
|
||||||
|
"inputs": [
|
||||||
|
"src/**",
|
||||||
|
"lib/**",
|
||||||
|
"public/**",
|
||||||
|
"index.html",
|
||||||
|
"vite.config.js",
|
||||||
|
"tsconfig.json",
|
||||||
|
"package.json"
|
||||||
|
],
|
||||||
|
"outputs": ["lib/**", "dist/**", "build/**"]
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"dependsOn": ["^build"],
|
||||||
|
"cache": false,
|
||||||
|
"persistent": true
|
||||||
|
},
|
||||||
|
"dev": {
|
||||||
|
"dependsOn": ["^build"],
|
||||||
|
"cache": false,
|
||||||
|
"persistent": true
|
||||||
|
},
|
||||||
|
"watch": {
|
||||||
|
"dependsOn": ["^build"],
|
||||||
|
"cache": false,
|
||||||
|
"persistent": true
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"dependsOn": ["^build"],
|
||||||
|
"inputs": ["src/**", "tests/**", "lib/**", "package.json"],
|
||||||
|
"outputs": []
|
||||||
|
},
|
||||||
|
"clean": {
|
||||||
|
"cache": false
|
||||||
|
},
|
||||||
|
"generate-types": {
|
||||||
|
"inputs": ["src/**", "package.json"],
|
||||||
|
"outputs": ["src/types/**"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue