diff --git a/docs/guide.md b/docs/guide.md index 51c034b..e06819c 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -263,14 +263,9 @@ bun test ## 8. Start the Relay Server ```bash -cd packages/relay -node -e " -import('./dist/index.js').then(async ({ createRelayServer }) => { - const relay = await createRelayServer({ host: '0.0.0.0', port: 3001 }); - await relay.start(); - console.log('Relay listening on ws://0.0.0.0:3001/ws'); -}); -" +npx @authmesh/relay +# Or from the monorepo: +cd packages/relay && bun run start ``` Health check: `curl http://localhost:3001/health` diff --git a/docs/integration-guide.md b/docs/integration-guide.md index 45e975d..0d8e124 100644 --- a/docs/integration-guide.md +++ b/docs/integration-guide.md @@ -101,7 +101,7 @@ amesh init --name "prod-api" amesh init --name "my-laptop" # Start the relay (needed only for pairing) -bunx @authmesh/relay +npx @authmesh/relay # On the server (target): start listening for pairing amesh listen @@ -136,7 +136,7 @@ amesh invite 482916 --relay wss://relay.authmesh.dev/ws ```bash # On the remote server (target) -bunx @authmesh/relay # starts on port 3001 +npx @authmesh/relay # starts on port 3001 amesh listen --relay ws://localhost:3001/ws # On your laptop (controller — use the server's public IP or domain) @@ -149,7 +149,7 @@ For servers where you can't run interactive commands: ```bash # On your laptop — generate a token -amesh provision --name "prod-server" --ttl 3600 +amesh provision --name "prod-server" --ttl 1h # Outputs: AMESH_BOOTSTRAP_TOKEN=eyJ... # Set the token as an env var on the remote server, then run your app. @@ -292,7 +292,7 @@ No shared secret. The webhook sender proves its identity with a device-bound sig |----------|-------------|---------| | `AUTH_MESH_DIR` | Directory for identity and keys | `~/.amesh/` | | `AMESH_BOOTSTRAP_TOKEN` | Bootstrap token for automated pairing | (optional) | -| `RELAY_URL` | WebSocket relay URL | `wss://relay.authmesh.dev/ws` | +| `AMESH_RELAY_URL` | WebSocket relay URL | `wss://relay.authmesh.dev/ws` | | `REDIS_URL` | Redis URL for nonce store | (optional) | --- diff --git a/docs/self-hosting.md b/docs/self-hosting.md index bd6800f..ba366a5 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -136,7 +136,7 @@ npm install @authmesh/relay ```bash # Run directly -PORT=3001 HOST=0.0.0.0 bunx @authmesh/relay +PORT=3001 HOST=0.0.0.0 npx @authmesh/relay ``` Or in your own script: @@ -162,7 +162,7 @@ Type=simple User=amesh Environment=PORT=3001 Environment=HOST=0.0.0.0 -ExecStart=/usr/bin/bunx @authmesh/relay +ExecStart=/usr/bin/npx @authmesh/relay Restart=on-failure [Install] diff --git a/landpage/src/routes/docs/integration/+page.svelte b/landpage/src/routes/docs/integration/+page.svelte index 339d506..46f5556 100644 --- a/landpage/src/routes/docs/integration/+page.svelte +++ b/landpage/src/routes/docs/integration/+page.svelte @@ -123,7 +123,7 @@ amesh invite 482916 --relay ws://your-server:3001

Option C: Bootstrap token (non-interactive)

# On your laptop — generate a token -amesh provision --name "prod-server" --ttl 3600 +amesh provision --name "prod-server" --ttl 1h # Set on remote server as env var. SDK auto-pairs on first request. AMESH_BOOTSTRAP_TOKEN=eyJ... node app.js`} /> @@ -195,7 +195,7 @@ app.post('/webhooks', amesh.verify(), (req {#each [ { name: 'AUTH_MESH_DIR', desc: 'Directory for identity and keys', def: '~/.amesh/' }, { name: 'AMESH_BOOTSTRAP_TOKEN', desc: 'Bootstrap token for automated pairing', def: 'optional' }, - { name: 'RELAY_URL', desc: 'WebSocket relay URL', def: 'wss://relay.authmesh.dev/ws' }, + { name: 'AMESH_RELAY_URL', desc: 'WebSocket relay URL', def: 'wss://relay.authmesh.dev/ws' }, { name: 'REDIS_URL', desc: 'Redis URL for nonce store', def: 'optional' }, ] as env}
diff --git a/packages/cli/README.md b/packages/cli/README.md index f2e81d3..6ac8ebf 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -46,7 +46,7 @@ $ amesh invite 482916 | Variable | Description | |----------|-------------| | `AUTH_MESH_DIR` | Override `~/.amesh/` directory | -| `RELAY_URL` | WebSocket relay URL (default: `wss://relay.authmesh.dev/ws`) | +| `AMESH_RELAY_URL` | WebSocket relay URL (default: `wss://relay.authmesh.dev/ws`) | ## Full documentation diff --git a/packages/relay/README.md b/packages/relay/README.md index d26090f..4e533e4 100644 --- a/packages/relay/README.md +++ b/packages/relay/README.md @@ -7,9 +7,9 @@ The relay is **only needed during initial device pairing**. After two devices ex ## Install & Run ```bash -bunx @authmesh/relay # run directly +npx @authmesh/relay # run directly via npx # or -npm install @authmesh/relay && node -e "import('@authmesh/relay').then(m => m.createRelay())" +bun packages/relay/dist/start.js # from the monorepo ``` ## Environment variables @@ -31,9 +31,10 @@ OTC (one-time code) endpoints are rate-limited to 5 failed attempts per IP per m ## Programmatic usage ```typescript -import { createRelay } from '@authmesh/relay'; +import { createRelayServer } from '@authmesh/relay'; -const server = await createRelay({ host: '0.0.0.0', port: 3001 }); +const relay = createRelayServer({ host: '0.0.0.0', port: 3001 }); +relay.start(); ``` ## License diff --git a/packages/relay/package.json b/packages/relay/package.json index 63d5f29..68d55f5 100644 --- a/packages/relay/package.json +++ b/packages/relay/package.json @@ -22,6 +22,9 @@ "publishConfig": { "access": "public" }, + "bin": { + "amesh-relay": "./dist/start.js" + }, "exports": { ".": { "import": "./dist/index.js", diff --git a/packages/relay/src/start.ts b/packages/relay/src/start.ts index 52df5e9..6d3faf4 100644 --- a/packages/relay/src/start.ts +++ b/packages/relay/src/start.ts @@ -1,3 +1,4 @@ +#!/usr/bin/env bun import { createRelayServer } from './server.js'; const port = parseInt(process.env.PORT ?? '3001', 10);