# Developer credentials and connection info Lab pack for the Verae Time × Zapier stack on **NS1.GEORGELAMBERT.ORG** (`70.88.205.138`). Values below were checked **2026-09-14**. These are **lab defaults**, not production secrets. Rotate the public NATS token and admin secrets before treating this as a customer environment. Zapier cloud **never** gets a NATS URL or a Verae password. ## 1. Who you are talking to | Host | Role | |------|------| | `70.88.205.138` | NS1 Proxmox. Public HTTPS + public NATS **client** edge | | `10.10.10.20` | LXC 510 `verae-px-worker` (worm + tree) | | `10.10.10.21–23` | LXC 511–513 `nats-a/b/c` JetStream cluster `verae` | SSH to the box: `ssh marchon@70.88.205.138` Git SSH: `ssh://git@git.georgelambert.org:2223/marchon/.git` (port **2223**) ## 2. Public HTTPS doors (live) Wildcard `*.zapier.georgelambert.org` → `70.88.205.138`. | URL | Process | Port | Last check | |-----|---------|------|------------| | https://zapier.georgelambert.org/ | docs catalog | files | 200 | | https://git.georgelambert.org/ | Forgejo | :443 / SSH :2223 | 200 | | https://portal.zapier.georgelambert.org/ | access-web → `/portal/` | :3021 | 302 → portal | | https://api.zapier.georgelambert.org/health | access-api | :3022 | 200 | | https://leaf.zapier.georgelambert.org/health | access-leaf | :3023 | 200 | | https://zap.zapier.georgelambert.org/health | access-zapier | :3024 | 200 | | https://staff.zapier.georgelambert.org/ | access-staff | :3025 | 302 login | | https://login.zapier.georgelambert.org/ | staff-session | :3027 | 200 | | https://iam.zapier.georgelambert.org/health | staff-iam | :3028 | 200 (`users: 5`) | | https://cs.zapier.georgelambert.org/ | customer-service | :3011 | 302 | | https://sales.zapier.georgelambert.org/ | sales-pricing | :3012 | 302 | | https://acct.zapier.georgelambert.org/ | accounting-export | :3013 | 302 | | https://mw.zapier.georgelambert.org/health | middleware | :3100 | 200 `mockVerae:true` `natsConnected:true` | | https://fleet.zapier.georgelambert.org/ | fleet console | :3850 | 302 | | https://nats.zapier.georgelambert.org/ | NATS WebSocket (Caddy) | 14422 | **400** on GET (expected; it is WS) | Loopback on NS1 (not public): zappier-edge **`127.0.0.1:13000`** (admin + Stripe + SQLite). Tunnel: ```bash ssh -L 13000:127.0.0.1:13000 marchon@70.88.205.138 # then http://127.0.0.1:13000/admin and /docs ``` Operator console tunnel: `ssh -L 3850:127.0.0.1:3850 marchon@70.88.205.138` ## 3. NATS ### Internal cluster (workers, keep, fleet) No token. Private `vmbr1` only. ```text NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 JETSTREAM_REPLICAS=3 ``` | Port | Bind | Use | |------|------|-----| | `:4222` | `10.10.10.21–23` | clients | | `:6222` | same, `vmbr1` | cluster routes — **do not publish** | | `:7422` | same | leaf hubs for the public edge — **do not publish** | | `:8222` | `127.0.0.1` on each LXC | monitor | From a laptop you **cannot** reach `10.10.10.x` unless you are on NS1 or you tunnel: ```bash ssh -L 14222:10.10.10.21:4222 -L 14223:10.10.10.22:4222 -L 14224:10.10.10.23:4222 marchon@70.88.205.138 export NATS_URL=nats://127.0.0.1:14222,nats://127.0.0.1:14223,nats://127.0.0.1:14224 ``` ### Public client edge (token) Live token (file `/etc/nats/public-edge.token` on NS1): ```text 4743a49383ce2ce86e99d9d41c45c0004fe75eb23ef3a2b9 ``` ```text nats://4743a49383ce2ce86e99d9d41c45c0004fe75eb23ef3a2b9@70.88.205.138:4222 wss://nats.zapier.georgelambert.org ``` `CONNECT` with that token returns `PONG` (checked 2026-09-14). `auth_required: true`. Server name `nats-public-edge`. **Do not** put this URL in Zapier. Recreate: `bash packages/verae-nats-cluster/scripts/expose-public.sh` on NS1. Leftover lab listeners (ignore for new clients): host `127.0.0.1:4222` docker-proxy, `10.10.10.1:4222` socat. zappier-edge process still has `NATS_URL=nats://127.0.0.1:4222` — billing pubs may miss the 3-node cluster until that env is flipped. nkeys/mTLS: **not** on. Isolation is LAN + token. ## 4. Middleware (jobs) Live: `MOCK_VERAE=true`, `NATS_ENABLED=true`, cluster URL as above, `ADMIN_SECRET=change-me-admin` (default), `TOKEN_SECRET=dev-secret-change-me` (default). ### Lab tenant (created 2026-09-14 for this pack) | Field | Value | |-------|--------| | tenantId | `tenant-dev-lab-local-89ab82de` | | plan | free | | API key | `zmw_pXdwlUUyMHkAvqj3RRoQ2gOG6yAUQlun` | | mock Verae user | `lab-dev` / `lab-dev-pass` | | veraeUserId | `vu_20ed6029b99efb2e` | Proven: `GET /zapier/v1/auth/me` → valid; `POST /zapier/v1/timestamp` → 202 `jobId`; wait → mock certificate `blockIndex: 42`. ```bash KEY=zmw_pXdwlUUyMHkAvqj3RRoQ2gOG6yAUQlun curl -sS -H "x-api-key: $KEY" https://mw.zapier.georgelambert.org/zapier/v1/auth/me curl -sS -H "x-api-key: $KEY" -H "content-type: application/json" \ -d '{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}' \ https://mw.zapier.georgelambert.org/zapier/v1/timestamp curl -sS -H "x-api-key: $KEY" -H "content-type: application/json" \ -d '{"sha256":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}' \ https://mw.zapier.georgelambert.org/zapier/v1/timestamp/wait ``` Customer API plane (forwards `x-api-key` to middleware): ```bash curl -sS -H "x-api-key: $KEY" -H "content-type: application/json" \ -d '{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}' \ https://api.zapier.georgelambert.org/v1/timestamp ``` `https://zap.zapier.georgelambert.org` is the Zapier **plane**. It does **not** currently forward `x-api-key` on timestamp (401 if you curl it with a key). Zapier Platform push is still waiting on login; when it is live, set `MIDDLEWARE_BASE_URL=https://zap.zapier.georgelambert.org` and use a `zmw_…` key in the Zap. Mint another key (mock Verae accepts any username/password): ```bash curl -sS -H "content-type: application/json" \ -d '{"email":"you@lab.local","name":"You","veraeUsername":"you","veraePassword":"you-pass"}' \ https://mw.zapier.georgelambert.org/zapier/v1/signup ``` Admin list/provision: ```bash curl -sS -H "x-admin-secret: change-me-admin" \ https://mw.zapier.georgelambert.org/zapier/v1/admin/tenants ``` ## 5. Portal / zappier-edge (billing users) SQLite `/SSD3/moved/home-marchon/verae-stack/packages/zappier/zappier.db`. Bind `127.0.0.1:13000`. Seed **customer API keys** (`x-api-key` on edge `/v1/*`, **not** middleware `zmw_`): | Customer | tier | key | |----------|------|-----| | Ada (free) | free | `key-ada` | | Grace (pro) | pro | `key-grace` | | Linus (business) | business | `key-linus` | | Docs Capture | free | `key-021851970d8a22c6` | These keys are for the **edge meter / portal**. Middleware jobs need a `zmw_…` key (section 4). Seed **admin console** (`/admin`, `x-admin-key` or login): | username | password | |----------|----------| | `admin` | `admin-dev-key` | | `demo` | `$$$Adm1n###` | `ZAPPIER_ADMIN_KEY` default on CS/sales/staff processes: `admin-dev-key`. Stripe: **not** live (lab quotes only). Env `STRIPE_*` unset on the sampled edge process. Signup more customers at https://portal.zapier.georgelambert.org/portal/ ## 6. Staff IAM https://login.zapier.georgelambert.org/ · https://iam.zapier.georgelambert.org/ Seed users (defaults; live IAM has these five): | username | password | role | |----------|----------|------| | `admin` | `admin-dev-key` | owner | | `cs` | `cs-dev-key` | cs | | `sales` | `sales-dev-key` | sales | | `accounting` | `acct-dev-key` | accounting | | `operator` | `fleet-dev-key` | operator | `STAFF_KEY` / session fallback: `admin-dev-key`. ## 7. Leaf plane https://leaf.zapier.georgelambert.org/health → `verae.access.leaf.in` Live: `LEAF_TOKEN=leaf-dev-token` ```bash curl -sS -H "content-type: application/json" \ -d '{"token":"leaf-dev-token","target":"verae.archive.put","payload":{},"principal":"dev"}' \ https://leaf.zapier.georgelambert.org/ ``` Billing targets are **denied** on this plane. ## 8. Git (Forgejo) | | | |--|--| | Web | https://git.georgelambert.org/marchon/ | | SSH | `ssh://git@git.georgelambert.org:2223/marchon/.git` | | User | `marchon` | | Overview of routes | https://git.georgelambert.org/marchon/dev-overview | | Monorepo | `master-zapier-plan-draft` | | Bootstrap | https://git.georgelambert.org/marchon/verae-bootstrap | ```bash GIT_SSH_COMMAND="ssh -p 2223" git clone ssh://git@git.georgelambert.org:2223/marchon/dev-overview.git ``` Add your SSH public key on Forgejo (user **marchon** or a new account). Do not commit deploy tokens. Clone-all: ```bash git clone ssh://git@git.georgelambert.org:2223/marchon/verae-bootstrap.git cd verae-bootstrap export VERAE_SRC=$HOME/verae-src bash scripts/fetch.sh ns1-all-in-one ``` ## 9. Environment cheat sheet (new worker on the cluster) ```bash export NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 export JETSTREAM_REPLICAS=3 export NATS_ENABLED=true export MOCK_VERAE=true # flip to false only with live Verae login export VERAE_API_BASE_URL=https://api.veraetime.net export AUTHZ_URL=http://127.0.0.1:3020 export ZAPPIER_UPSTREAM=http://127.0.0.1:3100 export ZAPPIER_ADMIN_URL=http://127.0.0.1:13000 export ZAPPIER_ADMIN_KEY=admin-dev-key export LEAF_TOKEN=leaf-dev-token export STAFF_IAM_URL=http://127.0.0.1:3028 ``` Template worker: clone `verae-nats-process`, rename `verae.example.process.*`. ## 10. Not issued yet (blocked) | Item | Why | |------|-----| | Zapier Platform deploy key / `zapier login` | operator has not logged the CLI in | | Live `api.veraetime.net` username/password | `MOCK_VERAE=true`; JWT would stay in middleware | | NATS nkeys / account creds | cluster is `$G` + LAN | | Stripe live secret | lab only | | lan-134 SSH worker | disabled | When Zapier login exists: `MIDDLEWARE_BASE_URL=https://zap.zapier.georgelambert.org`, auth field `api_key` = `zmw_…`. When live Verae exists: middleware `MOCK_VERAE=false` + `VERAE_API_BASE_URL=https://api.veraetime.net` + working login. Zapier still never sees that password. ## 11. Related docs - Routes: [01-nats-routes.md](01-nats-routes.md) - Endpoint I/O: [02-endpoint-io.md](02-endpoint-io.md) - Job path: [03-zapier-verae-path.md](03-zapier-verae-path.md) - Gaps: [04-gaps-and-finish.md](04-gaps-and-finish.md) - Ops start: https://zapier.georgelambert.org/packages/verae-ops/GETTING-STARTED.pdf - Status: https://zapier.georgelambert.org/packages/zapier-decisions/STATUS.pdf