@evolu/relay 1.1.2-preview.5 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -67
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +37 -0
- package/package.json +32 -24
- package/.dockerignore +0 -16
- package/.turbo/turbo-build.log +0 -4
- package/CHANGELOG.md +0 -1202
- package/Dockerfile +0 -27
- package/README.docker.md +0 -154
- package/data/.gitkeep +0 -2
- package/dist/package.json +0 -41
- package/dist/src/cli.d.ts +0 -3
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -43
- package/dist/src/logger.d.ts +0 -2
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -4
- package/dist/src/nodejs.d.ts +0 -3
- package/dist/src/nodejs.d.ts.map +0 -1
- package/dist/src/nodejs.js +0 -24
- package/dist/src/params.d.ts +0 -7
- package/dist/src/params.d.ts.map +0 -1
- package/dist/src/params.js +0 -6
- package/docker-compose.yml +0 -60
- package/src/cli.ts +0 -59
- package/src/logger.ts +0 -5
- package/src/nodejs.ts +0 -30
- package/src/params.ts +0 -9
- package/tsconfig.json +0 -10
package/Dockerfile
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
FROM node:22-alpine
|
|
2
|
-
|
|
3
|
-
ARG RELAY_VERSION=latest
|
|
4
|
-
|
|
5
|
-
# Install required dependencies and create non-root user
|
|
6
|
-
RUN apk add --no-cache wget && \
|
|
7
|
-
addgroup --system --gid 1001 nodejs && \
|
|
8
|
-
adduser --system --uid 1001 evolu --ingroup nodejs && \
|
|
9
|
-
npm install -g @evolu/relay@${RELAY_VERSION} && \
|
|
10
|
-
mkdir -p /app/data && \
|
|
11
|
-
chown -R evolu:nodejs /app
|
|
12
|
-
|
|
13
|
-
WORKDIR /app
|
|
14
|
-
USER evolu
|
|
15
|
-
|
|
16
|
-
ENV RELAY_PORT=4000 \
|
|
17
|
-
RELAY_NAME=evolu-relay \
|
|
18
|
-
RELAY_ENABLE_LOGGING=false \
|
|
19
|
-
NODE_ENV=production \
|
|
20
|
-
LOG_LEVEL=error
|
|
21
|
-
|
|
22
|
-
EXPOSE ${RELAY_PORT}
|
|
23
|
-
|
|
24
|
-
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
|
|
25
|
-
CMD wget --no-verbose --tries=1 --spider http://localhost:${RELAY_PORT}
|
|
26
|
-
|
|
27
|
-
CMD ["sh", "-c", "npx @evolu/relay@${RELAY_VERSION} start --port $RELAY_PORT --name $RELAY_NAME $([ \"$RELAY_ENABLE_LOGGING\" = \"true\" ] && echo --enable-logging)"]
|
package/README.docker.md
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
# Evolu Relay - Docker Setup
|
|
2
|
-
|
|
3
|
-
Docker configuration for the Evolu Relay.
|
|
4
|
-
|
|
5
|
-
## 🚀 Quick Start for Developers
|
|
6
|
-
|
|
7
|
-
**Just one command to get started:**
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
cd apps/relay
|
|
11
|
-
pnpm docker:up
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
That's it! This will:
|
|
15
|
-
|
|
16
|
-
- ✅ Automatically build the Docker image
|
|
17
|
-
- ✅ Start the Evolu Relay service
|
|
18
|
-
- ✅ Show real-time logs
|
|
19
|
-
- ✅ Make the service available at `http://localhost:4000`
|
|
20
|
-
|
|
21
|
-
Press `Ctrl+C` to stop the service.
|
|
22
|
-
|
|
23
|
-
### Background Mode (Optional)
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
cd apps/relay
|
|
27
|
-
|
|
28
|
-
# Start in background
|
|
29
|
-
pnpm docker:up:detached
|
|
30
|
-
|
|
31
|
-
# View logs when needed
|
|
32
|
-
pnpm docker:logs
|
|
33
|
-
|
|
34
|
-
# Stop when done
|
|
35
|
-
pnpm docker:down
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## 🔧 Advanced Usage
|
|
39
|
-
|
|
40
|
-
### All Available Commands
|
|
41
|
-
|
|
42
|
-
| Command | Description | Auto-builds? | Persistence |
|
|
43
|
-
| ------------------------- | ---------------------------------------------- | ------------ | ------------ |
|
|
44
|
-
| `pnpm docker:up` | **Recommended**: Start in foreground with logs | ✅ Yes | Named volume |
|
|
45
|
-
| `pnpm docker:up:detached` | Start in background | ✅ Yes | Named volume |
|
|
46
|
-
| `pnpm docker:down` | Stop services | N/A | N/A |
|
|
47
|
-
| `pnpm docker:restart` | Restart with rebuild | ✅ Yes | Named volume |
|
|
48
|
-
| `pnpm docker:logs` | View logs (live) | N/A | N/A |
|
|
49
|
-
| `pnpm docker:shell` | Access running container shell | N/A | N/A |
|
|
50
|
-
| `pnpm docker:stats` | View container resource usage | N/A | N/A |
|
|
51
|
-
| `pnpm docker:inspect` | View container details | N/A | N/A |
|
|
52
|
-
| `pnpm docker:build` | Build image only | N/A | N/A |
|
|
53
|
-
| `pnpm docker:clean` | Clean up containers and images | N/A | N/A |
|
|
54
|
-
| `pnpm docker:clean:all` | **Full cleanup**: Remove everything | N/A | N/A |
|
|
55
|
-
|
|
56
|
-
### Manual Docker Commands (Alternative)
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
# Build manually
|
|
60
|
-
docker-compose build
|
|
61
|
-
|
|
62
|
-
# Run with Docker Compose
|
|
63
|
-
docker-compose up --build
|
|
64
|
-
|
|
65
|
-
# Run directly with Docker
|
|
66
|
-
docker run -p 4000:4000 evolu/relay:latest
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## ❓ FAQ
|
|
70
|
-
|
|
71
|
-
**Q: Do I need to build the image first?**
|
|
72
|
-
A: No! `pnpm docker:up` automatically builds and starts everything.
|
|
73
|
-
|
|
74
|
-
**Q: How do I update after code changes?**
|
|
75
|
-
A: Just run `pnpm docker:restart` or stop and start again.
|
|
76
|
-
|
|
77
|
-
**Q: How do I know if it's working?**
|
|
78
|
-
A: Check `http://localhost:4000` - you should get a "426 Upgrade Required" response (this is correct for WebSocket servers).
|
|
79
|
-
|
|
80
|
-
**Q: How do I see what's happening?**
|
|
81
|
-
A: Use `pnpm docker:logs` to view live logs.
|
|
82
|
-
|
|
83
|
-
**Q: How do I access the container?**
|
|
84
|
-
A: Use `pnpm docker:shell` to get shell access inside the running container.
|
|
85
|
-
|
|
86
|
-
**Q: How do I clean up everything?**
|
|
87
|
-
A: Run `pnpm docker:clean:all` to remove all containers, images, and networks.
|
|
88
|
-
|
|
89
|
-
## 📁 Docker Files
|
|
90
|
-
|
|
91
|
-
- `Dockerfile` - Multi-stage Docker build configuration
|
|
92
|
-
- `docker-compose.yml` - Docker Compose configuration with health checks
|
|
93
|
-
- `.dockerignore` - Files to exclude from Docker build context
|
|
94
|
-
|
|
95
|
-
## ⚙️ Configuration
|
|
96
|
-
|
|
97
|
-
- **Port**: 4000 (modify in `docker-compose.yml` if needed)
|
|
98
|
-
- **Environment**: `NODE_ENV=production` in Docker
|
|
99
|
-
- **Health Check**: Built-in health monitoring via Docker Compose
|
|
100
|
-
- **Data Persistence**: SQLite database automatically persists via Docker volumes
|
|
101
|
-
|
|
102
|
-
### Container Details
|
|
103
|
-
|
|
104
|
-
| Component | Value | Description |
|
|
105
|
-
| ------------------ | --------------------- | ---------------------------------- |
|
|
106
|
-
| **Container Name** | `evolu-relay-server` | Easy identification |
|
|
107
|
-
| **Image Name** | `evolu/relay:latest` | Tagged for production deployment |
|
|
108
|
-
| **Network** | `evolu-relay-network` | Isolated Docker network |
|
|
109
|
-
| **Volume** | `evolu-relay-data` | Persistent SQLite database storage |
|
|
110
|
-
| **User** | `evolu:nodejs` (1001) | Non-root user for security |
|
|
111
|
-
| **Memory Limit** | 1GB | Resource constraint |
|
|
112
|
-
| **CPU Limit** | 1.0 | CPU resource constraint |
|
|
113
|
-
|
|
114
|
-
## 🚨 Troubleshooting
|
|
115
|
-
|
|
116
|
-
| Issue | Solution |
|
|
117
|
-
| ------------------------ | ---------------------------------------------------------- |
|
|
118
|
-
| Build fails | Run `pnpm docker:clean:all` and try again |
|
|
119
|
-
| Port already in use | Change port in `docker-compose.yml` or stop other services |
|
|
120
|
-
| Container won't start | Check logs with `pnpm docker:logs` |
|
|
121
|
-
| Need container access | Use `pnpm docker:shell` for interactive shell |
|
|
122
|
-
| Performance issues | Check resources with `pnpm docker:stats` |
|
|
123
|
-
| Need to reset everything | Run `pnpm docker:clean:all` |
|
|
124
|
-
|
|
125
|
-
## 🔍 Monitoring & Debugging
|
|
126
|
-
|
|
127
|
-
### Real-time Monitoring
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
# View live logs
|
|
131
|
-
pnpm docker:logs
|
|
132
|
-
|
|
133
|
-
# Monitor resource usage
|
|
134
|
-
pnpm docker:stats
|
|
135
|
-
|
|
136
|
-
# Container details
|
|
137
|
-
pnpm docker:inspect
|
|
138
|
-
|
|
139
|
-
# Access container shell
|
|
140
|
-
pnpm docker:shell
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Inside Container Commands
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
# Access container
|
|
147
|
-
pnpm docker:shell
|
|
148
|
-
|
|
149
|
-
# Then inside container:
|
|
150
|
-
ls -la /app/apps/relay/data/ # View database files
|
|
151
|
-
ps aux # Check running processes
|
|
152
|
-
top # Monitor resource usage
|
|
153
|
-
netstat -tlnp # Check port bindings
|
|
154
|
-
```
|
package/data/.gitkeep
DELETED
package/dist/package.json
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@evolu/relay",
|
|
3
|
-
"version": "1.1.2-preview.5",
|
|
4
|
-
"type": "module",
|
|
5
|
-
"bin": {
|
|
6
|
-
"@evolu/relay": "dist/src/cli.js"
|
|
7
|
-
},
|
|
8
|
-
"scripts": {
|
|
9
|
-
"dev": "tsx --watch src/cli.ts -- start",
|
|
10
|
-
"build": "shx rm -rf dist && tsc",
|
|
11
|
-
"start": "node dist/src/cli.js",
|
|
12
|
-
"clean": "shx rm -rf .turbo node_modules dist db.sqlite",
|
|
13
|
-
"docker:build": "docker-compose build --no-cache",
|
|
14
|
-
"docker:up": "docker-compose up --build",
|
|
15
|
-
"docker:up:detached": "docker-compose up -d --build",
|
|
16
|
-
"docker:down": "docker-compose down -v",
|
|
17
|
-
"docker:restart": "docker-compose down && docker-compose up --build",
|
|
18
|
-
"docker:logs": "docker-compose logs -f evolu-relay",
|
|
19
|
-
"docker:shell": "docker exec -it evolu-relay-server sh",
|
|
20
|
-
"docker:inspect": "docker inspect evolu-relay-server",
|
|
21
|
-
"docker:stats": "docker stats evolu-relay-server",
|
|
22
|
-
"docker:clean": "docker-compose down -v && docker system prune -f",
|
|
23
|
-
"docker:clean:all": "docker-compose down -v && docker system prune -af && docker volume prune -f"
|
|
24
|
-
},
|
|
25
|
-
"dependencies": {
|
|
26
|
-
"@evolu/common": "workspace:*",
|
|
27
|
-
"@evolu/nodejs": "workspace:*",
|
|
28
|
-
"commander": "^14.0.1"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@evolu/tsconfig": "workspace:*",
|
|
32
|
-
"@types/node": "^22.17.1",
|
|
33
|
-
"typescript": "^5.9.2"
|
|
34
|
-
},
|
|
35
|
-
"engines": {
|
|
36
|
-
"node": ">=22.0.0"
|
|
37
|
-
},
|
|
38
|
-
"publishConfig": {
|
|
39
|
-
"access": "public"
|
|
40
|
-
}
|
|
41
|
-
}
|
package/dist/src/cli.d.ts
DELETED
package/dist/src/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/src/cli.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { Command, Option } from "commander";
|
|
3
|
-
import packageJson from "../package.json" with { type: "json" };
|
|
4
|
-
import { logger } from "./logger.js";
|
|
5
|
-
import { startNodeJsRelay } from "./nodejs.js";
|
|
6
|
-
import { cliParams } from "./params.js";
|
|
7
|
-
function main() {
|
|
8
|
-
const program = new Command()
|
|
9
|
-
.name("@evolu/relay")
|
|
10
|
-
.description("Evolu Relay server")
|
|
11
|
-
.version(packageJson.version || "1.0.0", "-v, --version", "display the version number");
|
|
12
|
-
program
|
|
13
|
-
.command("start")
|
|
14
|
-
.description("start the relay server")
|
|
15
|
-
.addOption(new Option("-n, --name <name>", "database name").default("evolu-relay"))
|
|
16
|
-
.addOption(new Option("-l, --enable-logging", "enable logging").default(false))
|
|
17
|
-
.addOption(new Option("-p, --port <number>", "port to listen on")
|
|
18
|
-
.default(4000)
|
|
19
|
-
.argParser(Number))
|
|
20
|
-
// .addOption(
|
|
21
|
-
// new Option("--platform <platform>", "platform")
|
|
22
|
-
// .choices(["nodejs", "bun"])
|
|
23
|
-
// .default("nodejs"),
|
|
24
|
-
// )
|
|
25
|
-
.action(async (options) => {
|
|
26
|
-
logger.enabled = true;
|
|
27
|
-
const params = cliParams.fromUnknown(options);
|
|
28
|
-
logger.log("Evolu Relay", packageJson.version);
|
|
29
|
-
if (!params.ok) {
|
|
30
|
-
logger.error(params.error.reason);
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
await startNodeJsRelay(params.value);
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
logger.error(error);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
program.parse();
|
|
42
|
-
}
|
|
43
|
-
main();
|
package/dist/src/logger.d.ts
DELETED
package/dist/src/logger.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM,iCAAkB,CAAC"}
|
package/dist/src/logger.js
DELETED
package/dist/src/nodejs.d.ts
DELETED
package/dist/src/nodejs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nodejs.d.ts","sourceRoot":"","sources":["../../src/nodejs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxE"}
|
package/dist/src/nodejs.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { createNodeJsRelay } from "@evolu/nodejs";
|
|
2
|
-
import { mkdirSync } from "fs";
|
|
3
|
-
import { once } from "node:events";
|
|
4
|
-
import { logger } from "./logger.js";
|
|
5
|
-
export async function startNodeJsRelay(options) {
|
|
6
|
-
// Ensure the database is created in a predictable location for Docker.
|
|
7
|
-
mkdirSync("data", { recursive: true });
|
|
8
|
-
process.chdir("data");
|
|
9
|
-
if (options.enableLogging) {
|
|
10
|
-
logger.enabled = true;
|
|
11
|
-
}
|
|
12
|
-
const relay = await createNodeJsRelay({ console: logger })({
|
|
13
|
-
port: options.port,
|
|
14
|
-
enableLogging: options.enableLogging,
|
|
15
|
-
name: options.name,
|
|
16
|
-
});
|
|
17
|
-
await Promise.race([
|
|
18
|
-
once(process, "SIGINT"), // Ctrl-C
|
|
19
|
-
once(process, "SIGTERM"), // OS/k8s/etc requested termination
|
|
20
|
-
]);
|
|
21
|
-
logger.enabled = true;
|
|
22
|
-
logger.log("Shutting down relay server");
|
|
23
|
-
relay[Symbol.dispose]();
|
|
24
|
-
}
|
package/dist/src/params.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const cliParams: import("@evolu/common").ObjectType<{
|
|
2
|
-
name: import("@evolu/common").BrandType<import("@evolu/common").Type<"String", string, string, import("@evolu/common").StringError, string, import("@evolu/common").StringError>, "SimpleName", import("@evolu/common").RegexError<"SimpleName">, import("@evolu/common").StringError>;
|
|
3
|
-
enableLogging: import("@evolu/common").Type<"Boolean", boolean, boolean, import("@evolu/common").BooleanError, boolean, import("@evolu/common").BooleanError>;
|
|
4
|
-
port: import("@evolu/common").Type<"Number", number, number, import("@evolu/common").NumberError, number, import("@evolu/common").NumberError>;
|
|
5
|
-
}>;
|
|
6
|
-
export type CliParams = typeof cliParams.Type;
|
|
7
|
-
//# sourceMappingURL=params.d.ts.map
|
package/dist/src/params.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/params.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;EAIpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC"}
|
package/dist/src/params.js
DELETED
package/docker-compose.yml
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
services:
|
|
2
|
-
evolu-relay:
|
|
3
|
-
container_name: evolu-relay-server
|
|
4
|
-
image: evolu/relay:latest
|
|
5
|
-
build:
|
|
6
|
-
context: .
|
|
7
|
-
dockerfile: Dockerfile
|
|
8
|
-
tags:
|
|
9
|
-
- evolu/relay:latest
|
|
10
|
-
ports:
|
|
11
|
-
- "${RELAY_PORT:-4000}:${RELAY_PORT:-4000}"
|
|
12
|
-
volumes:
|
|
13
|
-
# Use named volume by default, can be overridden with bind mount if needed
|
|
14
|
-
- evolu-relay-data:/app/data
|
|
15
|
-
environment:
|
|
16
|
-
- NODE_ENV=${NODE_ENV:-production}
|
|
17
|
-
- LOG_LEVEL=${LOG_LEVEL:-error}
|
|
18
|
-
- RELAY_NAME=${RELAY_NAME:-evolu-relay}
|
|
19
|
-
- RELAY_PORT=${RELAY_PORT:-4000}
|
|
20
|
-
- RELAY_ENABLE_LOGGING=${RELAY_ENABLE_LOGGING:-false}
|
|
21
|
-
restart: unless-stopped
|
|
22
|
-
deploy:
|
|
23
|
-
resources:
|
|
24
|
-
limits:
|
|
25
|
-
memory: ${MEMORY_LIMIT:-1G}
|
|
26
|
-
cpus: ${CPU_LIMIT:-1.0}
|
|
27
|
-
reservations:
|
|
28
|
-
memory: ${MEMORY_RESERVED:-512M}
|
|
29
|
-
cpus: ${CPU_RESERVED:-0.5}
|
|
30
|
-
healthcheck:
|
|
31
|
-
test:
|
|
32
|
-
[
|
|
33
|
-
"CMD",
|
|
34
|
-
"wget",
|
|
35
|
-
"--no-verbose",
|
|
36
|
-
"--tries=1",
|
|
37
|
-
"--spider",
|
|
38
|
-
"http://localhost:4000",
|
|
39
|
-
]
|
|
40
|
-
interval: 30s
|
|
41
|
-
timeout: 5s
|
|
42
|
-
retries: 3
|
|
43
|
-
start_period: 30s
|
|
44
|
-
logging:
|
|
45
|
-
driver: "json-file"
|
|
46
|
-
options:
|
|
47
|
-
max-size: ${LOG_MAX_SIZE:-50m}
|
|
48
|
-
max-file: ${LOG_MAX_FILES:-5}
|
|
49
|
-
networks:
|
|
50
|
-
- evolu-network
|
|
51
|
-
|
|
52
|
-
volumes:
|
|
53
|
-
evolu-relay-data:
|
|
54
|
-
driver: local
|
|
55
|
-
name: evolu-relay-data
|
|
56
|
-
|
|
57
|
-
networks:
|
|
58
|
-
evolu-network:
|
|
59
|
-
name: evolu-relay-network
|
|
60
|
-
driver: bridge
|
package/src/cli.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { Command, Option } from "commander";
|
|
4
|
-
import packageJson from "../package.json" with { type: "json" };
|
|
5
|
-
import { logger } from "./logger.js";
|
|
6
|
-
import { startNodeJsRelay } from "./nodejs.js";
|
|
7
|
-
import { cliParams } from "./params.js";
|
|
8
|
-
|
|
9
|
-
function main() {
|
|
10
|
-
const program = new Command()
|
|
11
|
-
.name("@evolu/relay")
|
|
12
|
-
.description("Evolu Relay server")
|
|
13
|
-
.version(
|
|
14
|
-
packageJson.version || "1.0.0",
|
|
15
|
-
"-v, --version",
|
|
16
|
-
"display the version number",
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
program
|
|
20
|
-
.command("start")
|
|
21
|
-
.description("start the relay server")
|
|
22
|
-
.addOption(
|
|
23
|
-
new Option("-n, --name <name>", "database name").default("evolu-relay"),
|
|
24
|
-
)
|
|
25
|
-
.addOption(
|
|
26
|
-
new Option("-l, --enable-logging", "enable logging").default(false),
|
|
27
|
-
)
|
|
28
|
-
.addOption(
|
|
29
|
-
new Option("-p, --port <number>", "port to listen on")
|
|
30
|
-
.default(4000)
|
|
31
|
-
.argParser(Number),
|
|
32
|
-
)
|
|
33
|
-
// .addOption(
|
|
34
|
-
// new Option("--platform <platform>", "platform")
|
|
35
|
-
// .choices(["nodejs", "bun"])
|
|
36
|
-
// .default("nodejs"),
|
|
37
|
-
// )
|
|
38
|
-
.action(async (options: unknown) => {
|
|
39
|
-
logger.enabled = true;
|
|
40
|
-
const params = cliParams.fromUnknown(options);
|
|
41
|
-
logger.log("Evolu Relay", packageJson.version);
|
|
42
|
-
|
|
43
|
-
if (!params.ok) {
|
|
44
|
-
logger.error(params.error.reason);
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
try {
|
|
49
|
-
await startNodeJsRelay(params.value);
|
|
50
|
-
} catch (error: unknown) {
|
|
51
|
-
logger.error(error);
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
program.parse();
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
main();
|
package/src/logger.ts
DELETED
package/src/nodejs.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { createNodeJsRelay } from "@evolu/nodejs";
|
|
2
|
-
import { mkdirSync } from "fs";
|
|
3
|
-
import { once } from "node:events";
|
|
4
|
-
import { logger } from "./logger.js";
|
|
5
|
-
import { CliParams } from "./params.js";
|
|
6
|
-
|
|
7
|
-
export async function startNodeJsRelay(options: CliParams): Promise<void> {
|
|
8
|
-
// Ensure the database is created in a predictable location for Docker.
|
|
9
|
-
mkdirSync("data", { recursive: true });
|
|
10
|
-
process.chdir("data");
|
|
11
|
-
|
|
12
|
-
if (options.enableLogging) {
|
|
13
|
-
logger.enabled = true;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const relay = await createNodeJsRelay({ console: logger })({
|
|
17
|
-
port: options.port,
|
|
18
|
-
enableLogging: options.enableLogging,
|
|
19
|
-
name: options.name,
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
await Promise.race([
|
|
23
|
-
once(process, "SIGINT"), // Ctrl-C
|
|
24
|
-
once(process, "SIGTERM"), // OS/k8s/etc requested termination
|
|
25
|
-
]);
|
|
26
|
-
|
|
27
|
-
logger.enabled = true;
|
|
28
|
-
logger.log("Shutting down relay server");
|
|
29
|
-
relay[Symbol.dispose]();
|
|
30
|
-
}
|
package/src/params.ts
DELETED