From 1c728c55137935c08c4d3bdce83b018560ee634d Mon Sep 17 00:00:00 2001 From: George Lambert Date: Mon, 14 Sep 2026 13:32:51 -0400 Subject: [PATCH] Expand dev-overview: transport ports, sources, billing publishers, finish list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Document designed vs running NATS subjects and cluster TCP/leaf/public endpoints, per-address I/O, Zapier→Verae job path, and unwired modules. --- packages/dev-overview/00-sources.md | 55 + packages/dev-overview/01-nats-routes.md | 98 +- packages/dev-overview/02-endpoint-io.md | 57 +- packages/dev-overview/03-zapier-verae-path.md | 46 +- packages/dev-overview/04-gaps-and-finish.md | 49 +- packages/dev-overview/NATS.md | 6 +- packages/dev-overview/README.html | 1988 +++++++++++++++++ packages/dev-overview/README.md | 15 +- packages/dev-overview/README.pdf | Bin 0 -> 109022 bytes packages/dev-overview/SUMMARY.md | 7 +- 10 files changed, 2228 insertions(+), 93 deletions(-) create mode 100644 packages/dev-overview/00-sources.md create mode 100644 packages/dev-overview/README.html create mode 100644 packages/dev-overview/README.pdf diff --git a/packages/dev-overview/00-sources.md b/packages/dev-overview/00-sources.md new file mode 100644 index 0000000..25e9d8d --- /dev/null +++ b/packages/dev-overview/00-sources.md @@ -0,0 +1,55 @@ +# Sources (other documentation that names routes) + +This inventory is compiled from code and from these docs. Do not invent extra `verae.*` names. + +## Master maps + +| Path | What it names | +|------|----------------| +| `packages/docs-master/modules-and-nats.md` | Module catalog, subject table, HTTPS vs NATS | +| `packages/docs-master/MESSAGE-FLOWS.md` | Create/wait/includeAttached/batch Merkle | +| `packages/docs-master/archive-nats.md` | Archive put/query/reply | +| `docs/02-architecture/nats-subjects.md` | `verae.zapier.*` payloads + streams | +| `docs/02-architecture/modules-and-nats.md` | Same catalog as docs-master | +| `docs/02-architecture/overview.md` | Poller / events / webhooks | +| `packages/overview/03-nats-cluster.md` | Cluster URLs, who may connect | +| `packages/overview/06-address-routing.md` | Address pattern + plane mapping | +| `packages/verae-ops/06-linking-services.md` | How services attach | +| `packages/verae-nats-cluster/scripts/ensure-streams.sh` | Live stream create | +| `packages/verae-nats-cluster/conf/nats.conf.tmpl` | `:4222` / `:6222` / `:7422` / monitor `:8222` | +| `packages/verae-nats-cluster/conf/public-edge.conf.tmpl` | Public leaf `:4222`, WS `:14422` | +| `packages/verae-fleet/overlays/ns1/fleet.json` | Enabled vs in-process workers | +| `packages/verae-keep` `units.px-worker.json` | Worm/tree on LXC 510 | +| `packages/verae-zapier-middleware/src/nats/subjects.js` | Product subjects + consumers | +| `packages/zappier-account-balance/src/subjects.js` | Billing subjects | +| `packages/verae-access-authz/src/subjects.js` + `policy.js` | Authz + plane allow lists | +| `packages/zappier/src/billing-nats.ts` | Edge billing client | + +## Per-package `NATS.md` (Forgejo module copies also live under `docs-master/modules/`) + +| Package | Addresses | +|---------|-----------| +| `verae-zapier-middleware` | `jobs.watch` out, `jobs.events` in, archive.query via aggregator | +| `verae-jobs-events` | `jobs.events`; exclusive → `verae.internal.jobs.events` | +| `verae-request-splitter` | `archive.put` | +| `verae-archive-worm` | `archive.put` / `query` / `reply.` | +| `verae-tree-node` | same, `kind: tree` | +| `verae-archive-aggregator` | `query` out, `reply.` in | +| `zappier-account-balance` | `verae.billing.*` | +| `zappier` (edge) | package `NATS.md` is stale (“does not publish”); **code** publishes usage/payment/credit/customer.put when `NATS_URL` is set. Use `docs-master/modules/zappier/NATS.md` | +| `zappier-customer-service` | `statement.get`, `balance.adjust` | +| `zappier-sales-pricing` | `statement.get` | +| `zappier-accounting-export` | `statement.get` | +| `zappier-identity` | `identity.bind` / `lookup` | +| `verae-access-authz` | `authz.check` / `authz.deny` | +| `verae-access-web` | `access.web.in` / `access.web.billing.*` | +| `verae-access-api` | `access.api.*` | +| `verae-access-zapier` | `access.zapier.*` then HTTPS to middleware | +| `verae-access-leaf` | `access.leaf.in` | +| `verae-access-staff` | `access.staff.*` | +| `verae-nats-process` | `verae.example.process.*` (template) | +| `verae-nats-accounts` | policy only (INTERNAL vs LEAF) | +| `verae-zapier-simulator` | in-process replay of product addresses | +| `verae-keep` / `verae-fleet` / `verae-uptime` / `verae-backup` | no product subjects | + +Simulator `src/pipeline.js` and `src/monitors.js` list the same product addresses for traces; they are not live subscribers. diff --git a/packages/dev-overview/01-nats-routes.md b/packages/dev-overview/01-nats-routes.md index 75dd29e..34a4758 100644 --- a/packages/dev-overview/01-nats-routes.md +++ b/packages/dev-overview/01-nats-routes.md @@ -1,76 +1,106 @@ # Designed vs running NATS routes -**Designed** = named in docs (`modules-and-nats.md`, `MESSAGE-FLOWS.md`, per-package `NATS.md`) or in code (`subjects.js`, fleet JSON). +**Designed** = named in docs or in code. **Running** = a process on NS1 is subscribed or publishing it **today**, and (for durable work) a JetStream stream exists. -Cluster name `verae`. Internal URL: three LXC on `vmbr1`. Public edge is a **leaf**, not a second cluster. +Cluster name `verae`. Internal clients use the three LXC on `vmbr1`. Public edge is a **leaf**, not a second cluster. Legend: **JS** = JetStream stream; **RR** = core request-reply; **pub** = core or JS fire-and-forget; **Q** = queue group. +## Transport (TCP / leaf / public) + +These are NATS **server** routes, not `verae.*` subjects. + +| Endpoint | Designed | Running | Who | +|----------|----------|---------|-----| +| `10.10.10.21–23:4222` client | yes | **yes** | middleware, access-*, billing, worm/tree, identity, CS/sales/acct | +| `10.10.10.21–23:6222` cluster routes | yes | **yes** (private `vmbr1` only) | nats-a/b/c to each other | +| `10.10.10.21–23:7422` leaf hub | yes (public-edge) | **yes** | public edge remotes | +| `127.0.0.1:8222` monitor on each LXC | yes | **yes** | operators on the guest | +| `70.88.205.138:4222` public client | yes (token) | **yes** | leaf edge; **not** Zapier | +| `127.0.0.1:14422` WS on edge | yes | **yes** | Caddy → `wss://nats.zapier.georgelambert.org` | +| `127.0.0.1:8229` edge monitor | yes | **yes** | host loopback | +| `:6222` / `:7422` / `:8222` on `vmbr0` | **no** | **must stay closed** | — | +| Host leftover `127.0.0.1:4222` (docker-proxy) + `10.10.10.1:4222` socat | lab leftover | present | **do not** point product `NATS_URL` here | +| MQTT `:1883` | study only | **removed** | — | + +Internal keep/fleet/middleware URL: + +```text +nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +``` + +Public (token in `/etc/nats/public-edge.token` on NS1): `nats://@70.88.205.138:4222`. Isolation on the hub is still `$G` + private LAN. nkeys/mTLS sketched in `verae-nats-accounts`, **not** flipped. + ## JetStream streams (running) -Created by `verae-nats-cluster/scripts/ensure-streams.sh` (and middleware `ensureStreams` for the first three). +Created by `verae-nats-cluster/scripts/ensure-streams.sh` (middleware `ensureStreams` also creates the first three). | Stream | Subjects | Replicas | Storage | Who consumes | |--------|----------|----------|---------|--------------| -| `ZAPIER_JOBS` | `verae.zapier.jobs.watch` | 3 | file | job-poller (in middleware process) | -| `ZAPIER_EVENTS` | `verae.zapier.jobs.events` | 3 | file | middleware wait + webhook router; optional exclusive `jobs-events` | -| `ZAPIER_WEBHOOKS` | `verae.zapier.webhooks.deliver` | 3 | file | webhook-deliver (in middleware process) | -| `ZAPIER_USAGE` | `verae.zapier.usage` | 3 | file | **no durable consumer running** (`USAGE_WRITER` is named only) | +| `ZAPIER_JOBS` | `verae.zapier.jobs.watch` | 3 | file | job-poller (in middleware process), Q `job-poller` | +| `ZAPIER_EVENTS` | `verae.zapier.jobs.events` | 3 | file | middleware wait + webhook router (`event-webhook-router`); optional exclusive `jobs-events` | +| `ZAPIER_WEBHOOKS` | `verae.zapier.webhooks.deliver` | 3 | file | webhook-deliver (in middleware), Q `webhook-deliver` | +| `ZAPIER_USAGE` | `verae.zapier.usage` | 3 | file | **no durable consumer** (`USAGE_WRITER` named only) | | `VERAE_ARCHIVE` | `verae.archive.>` | 3 | file | worm + tree on LXC 510 (keep); aggregator **not** fleet-enabled | +Billing is **core request-reply / pub**, not a JetStream stream. + ## Address inventory | Address | Kind | Designed | Running | Notes | |---------|------|----------|---------|-------| | `verae.zapier.jobs.watch` | JS work Q `job-poller` | yes | **yes** | middleware publishes; in-process poller consumes | | `verae.zapier.jobs.events` | JS events | yes | **yes** | poller publishes; wait() subscribes; webhook worker routes | -| `verae.zapier.webhooks.deliver` | JS work Q `webhook-deliver` | yes | **yes** | middleware worker in same Node process as HTTP | -| `verae.zapier.usage` | JS optional | yes | stream **yes**, consumer **no** | middleware entitlement is **local files**, not this subject | +| `verae.zapier.webhooks.deliver` | JS work Q `webhook-deliver` | yes | **yes** | same Node process as HTTP | +| `verae.zapier.usage` | JS optional | yes | stream **yes**, consumer **no** | middleware entitlement is **local files** | | `verae.internal.jobs.events` | core republish | yes (`jobs-events` exclusive) | **partial** | only if `JOBS_EVENTS_EXCLUSIVE=1` | -| `verae.billing.statement.get` | RR | yes | **yes** | account-balance | +| `verae.billing.statement.get` | RR Q `account-balance` | yes | **yes** | portal, CS, sales, accounting, access-web/api | | `verae.billing.balance.get` | RR | yes | **yes** | account-balance | | `verae.billing.balance.adjust` | RR | yes | **yes** | CS credits, portal reload | -| `verae.billing.usage.recorded` | pub | yes | **partial** | designed from zappier-edge meter; confirm publisher on live edge | -| `verae.billing.payment.recorded` | pub | yes | **partial** | portal reload / invoice | -| `verae.billing.credit.applied` | pub | yes | **partial** | CS goodwill | -| `verae.billing.customer.put` | RR/pub | yes (account-balance `subjects.js`) | **unclear** | books write | +| `verae.billing.usage.recorded` | pub | yes | **yes if edge `NATS_URL` set** | `zappier/src/app.ts` `onUsage` → `natsPublish`; account-balance subscribes | +| `verae.billing.payment.recorded` | pub | yes | **yes if `NATS_URL`** | portal reload (`portal.ts`) | +| `verae.billing.credit.applied` | pub | yes | **yes if `NATS_URL`** | admin/CS (`admin.ts`) | +| `verae.billing.customer.put` | pub | yes | **yes if `NATS_URL`** | `ledger.ts`; account-balance applies | | `verae.access.authz.check` | RR Q `access-authz` | yes | **yes** | fleet keepFloor | -| `verae.access.authz.deny` | pub audit | yes | **yes** (on deny) | | -| `verae.access.web.*` | ingress | yes | **yes** | access-web after HTTP | +| `verae.access.authz.deny` | pub audit | yes | **yes** (on deny) | no SIEM sink | +| `verae.access.web.in` / `verae.access.web.billing.*` | ingress | yes | **yes** | mapped after authz, e.g. `verae.access.web.billing.statement.get` | | `verae.access.api.*` | ingress | yes | **yes** | | -| `verae.access.zapier.*` | ingress | yes | **yes** | HTTPS plane, not Zapier NATS | +| `verae.access.zapier.*` | ingress | yes | **yes** | HTTPS plane; Zapier never speaks NATS | | `verae.access.leaf.in` / `verae.access.leaf.*` | ingress | yes | **yes** | no billing | | `verae.access.staff.*` | ingress | yes | **yes** | CS/sales/accounting | -| `verae.identity.bind` | RR Q `identity` | yes | **yes** (fleet enabled) | | +| `verae.identity.bind` | RR Q `identity` | yes | **yes** | fleet | | `verae.identity.lookup` | RR Q `identity` | yes | **yes** | | -| `verae.archive.put` | JS (`VERAE_ARCHIVE`) | yes | **partial** | splitter is **in-process** in middleware; worm/tree on 510 consume | +| `verae.archive.put` | JS (`VERAE_ARCHIVE`) | yes | **partial** | splitter **in-process** in middleware; worm/tree on 510 consume | | `verae.archive.query` | broadcast (no Q) | yes | **partial** | live aggregator hook **TBD** in middleware (simulator has it) | | `verae.archive.reply.` | replies on bloom hit | yes | **partial** | worm/tree on 510 can reply; aggregator not fleet-enabled | | `verae.splitter.in` | future | yes (docs) | **no** | splitter stays a library | -| `verae.example.process.in` / `.out` / `.reply.*` | template | yes | **no** | `verae-nats-process` is a model, not a live worker | +| `verae.example.process.in` / `.out` / `.reply.*` | template | yes | **no** | `verae-nats-process` is a model | | `bench.*` | lab only | n/a | ephemeral | speed studies; not product | +Plane mapping (`verae-access-authz`): internal `verae.billing.statement.get` + plane `web` → ingress `verae.access.web.billing.statement.get`. Planes never publish internal subjects until `authz.check` returns allow. + +## Durable consumers (named in middleware) + +| Name | Stream / subject | Running | +|------|------------------|---------| +| `job-poller` | `ZAPIER_JOBS` / `jobs.watch` | **yes** (in-process) | +| `event-webhook-router` | `ZAPIER_EVENTS` / `jobs.events` | **yes** (in-process) | +| `webhook-deliver` | `ZAPIER_WEBHOOKS` / `webhooks.deliver` | **yes** (in-process) | +| `usage-writer` | `ZAPIER_USAGE` / `verae.zapier.usage` | **no** | +| `jobs-events-exclusive` | `ZAPIER_EVENTS` | **no** unless `JOBS_EVENTS_EXCLUSIVE=1` | + ## Fleet overlay vs in-process -`overlays/ns1/fleet.json` (2026-09-14): +`packages/verae-fleet/overlays/ns1/fleet.json` (2026-09-14): | Service | fleet `enabled` | Actual lab | |---------|-----------------|------------| -| middleware-http | true | **running**; also starts job-poller + webhook workers in-process when `NATS_ENABLED` | -| job-poller | **false** | covered by middleware, not a second fleet spawn | +| middleware-http | true | **running**; starts job-poller + webhook workers in-process when `NATS_ENABLED` | +| job-poller | **false** | covered by middleware; do not spawn a second copy | | webhook-deliver | **false** | same | | archive-aggregator | **false** | **not** running as a fleet worker | -| archive-worm / tree-node | **false** on host fleet | **running on LXC 510** via `verae-keep` `units.px-worker.json` (1 worm + 1 tree) | -| account-balance, access-*, identity, jobs-events, CS/sales/acct, staff-iam/session | true | keepFloor | +| archive-worm / tree-node | **false** on host fleet | **running on LXC 510** via keep `units.px-worker.json` (1 worm + 1 tree) | +| account-balance, access-*, identity, jobs-events, CS/sales/acct, staff-iam/session, zappier-edge | true keepFloor | keepFloor | | zapier-simulator | true, keepFloor false | optional | | nats | managed false | 3-node cluster + leftover host loopback | - -## Docs that name routes (do not invent extras) - -- `packages/docs-master/modules-and-nats.md`, `MESSAGE-FLOWS.md` -- `packages/overview/03-nats-cluster.md`, `06-address-routing.md` -- `packages/verae-ops/06-linking-services.md` -- Each package `NATS.md` -- `verae-nats-cluster/scripts/ensure-streams.sh` -- Public edge: `verae-nats-cluster/conf/public-edge.conf.tmpl` (leaf, not a new subject family) diff --git a/packages/dev-overview/02-endpoint-io.md b/packages/dev-overview/02-endpoint-io.md index 3cf8b6e..38d1e5f 100644 --- a/packages/dev-overview/02-endpoint-io.md +++ b/packages/dev-overview/02-endpoint-io.md @@ -2,13 +2,13 @@ Each product NATS address: **what it is for**, **who sends**, **who receives**, **how to attach**. -Connect with a **long-lived** client: +Connect with a **long-lived** client (reconnect-per-message is the anti-pattern): ```text NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 ``` -Public edge (token in `/etc/nats/public-edge.token` on NS1): `nats://@70.88.205.138:4222`. Do not put that URL in Zapier. +Public edge (token in `/etc/nats/public-edge.token` on NS1): `nats://@70.88.205.138:4222`. Do not put that URL in Zapier or in Verae. --- @@ -33,10 +33,12 @@ Payload: `tenantId`, `veraeUserId`, `jobId`, `tokenRef`, `enqueuedAt`, `attempt` |--|--| | For | Terminal outcomes: `timestamp.completed` / `failed` / `timeout` | | In from | job-poller after Verae status is not `pending` | -| Out to | (1) middleware `waitForJobEvent` (wait HTTP); (2) webhook router → `webhooks.deliver`; (3) optional `verae-jobs-events` mailbox | +| Out to | (1) middleware `waitForJobEvent` (wait HTTP); (2) webhook router → `webhooks.deliver`; (3) optional `verae-jobs-events` mailbox `:3030` | If `JOBS_EVENTS_EXCLUSIVE=1`, only `verae-jobs-events` is the durable consumer and republishes `verae.internal.jobs.events`. Default lab: middleware wait + webhook worker share the stream. +Payload: `event`, `tenantId`, `jobId`, `status`, `traceId`, `emittedAt`. + --- ## `verae.zapier.webhooks.deliver` @@ -47,7 +49,7 @@ If `JOBS_EVENTS_EXCLUSIVE=1`, only `verae-jobs-events` is the durable consumer a | In from | webhook worker on completed/failed events | | Out to | Zapier cloud **HTTPS**, never NATS | -Slow consumer: this is the flood/backlog path. Keep replica floors on the worker. +Payload: `hookId`, `tenantId`, `targetUrl`, `event`, `payload`, `attempt`, `traceId`. Slow consumer: keep replica floors on the worker if you split it out of middleware. --- @@ -55,44 +57,49 @@ Slow consumer: this is the flood/backlog path. Keep replica floors on the worker | | | |--|--| -| For | Optional meter of Zap actions on NATS | +| For | Optional meter of Zap actions on NATS (JetStream) | | In from | designed: middleware / edge | | Out to | designed: `USAGE_WRITER` → books | | Running | **stream exists; no writer; middleware uses local usage files** | -Finish: publish here from `recordUsage`, consume into `verae.billing.usage.recorded`. +Prepaid meter that **is** wired uses `verae.billing.usage.recorded` (core pub), not this stream. Finish: either publish here from `recordUsage` or drop the stream. --- -## Billing (`verae.billing.*`) — account-balance SoT +## Billing (`verae.billing.*`) — account-balance source of truth -Request-reply unless noted. Queue on account-balance. **Not** JetStream (except you could mirror later). +Request-reply unless noted. Queue `account-balance`. **Not** JetStream. | Address | For | In from | Out to | |---------|-----|---------|--------| -| `statement.get` | prepaid, credits, usage, payments | portal, CS, sales, admin, access-web/api | reply to requester | +| `statement.get` | prepaid, credits, usage, payments | portal, CS, sales, accounting, access-web/api | reply to requester | | `balance.get` | cents only | internal | reply | | `balance.adjust` | CS credit or portal reload | CS, access-web (reload kind only) | books + reply | -| `usage.recorded` | meter pub | zappier-edge (designed) | account-balance subscriber | +| `usage.recorded` | meter pub | zappier-edge `meter()` `onUsage` when `NATS_URL` set | account-balance subscriber (debits prepaid) | | `payment.recorded` | reload/invoice pub | portal | books | -| `credit.applied` | goodwill pub | CS | books | -| `customer.put` | upsert customer | edge/IAM | books | +| `credit.applied` | goodwill pub | CS/admin | books | +| `customer.put` | upsert customer | edge ledger | books | Authz **must** pass `verae.access.authz.check` before these from a public plane. Leaf plane **cannot** call billing (policy). +Middleware `recordUsage` still writes **local tenant files** and does **not** publish `usage.recorded`. Two meters until that is unified. + --- ## Access planes | Address | For | In | Out | |---------|-----|----|-----| -| `verae.access.authz.check` | allow/deny `{ plane, subject, principal }` | every plane | `{ allow, reason }`; deny also pubs `authz.deny` | -| `verae.access.web.*` | browser portal | access-web HTTP | billing statement/reload after authz | +| `verae.access.authz.check` | allow/deny `{ plane, subject, principal }` | every plane + edge `billing-nats.ts` | `{ allow, reason }`; deny also pubs `authz.deny` | +| `verae.access.authz.deny` | audit | authz on deny | **nowhere yet** (no SIEM) | +| `verae.access.web.in` / `verae.access.web.billing.*` | browser portal | access-web HTTP | `statement.get` / `balance.adjust` kind=reload after authz | | `verae.access.api.*` | customer `x-api-key` | access-api | statement; HTTPS to middleware for jobs | -| `verae.access.zapier.*` | Zapier HTTPS only | access-zapier | jobs.watch **via HTTP to middleware**, not Zapier NATS | -| `verae.access.leaf.*` | S2S | access-leaf | archive + jobs; **never billing** | +| `verae.access.zapier.*` | Zapier HTTPS only | access-zapier | jobs.watch **via HTTP to middleware**, not Zapier NATS; usage.recorded allowed by policy | +| `verae.access.leaf.in` | S2S `{ token, target, payload }` | remote leaf | archive + jobs after authz; **never billing** | | `verae.access.staff.*` | CS/sales/accounting | access-staff | billing after authz | +Ingress mapping: `accessAddress(plane, 'verae.billing.statement.get')` → `verae.access..billing.statement.get`. + --- ## Identity @@ -110,11 +117,23 @@ Queue `identity`. Fleet keepFloor. | Address | For | In | Out | |---------|-----|----|-----| -| `verae.archive.put` | WORM/tree write (hash, meta, file meta, merkle leaf) | splitter (in-process from middleware today) | every worm/tree (JS) | +| `verae.archive.put` | WORM/tree write (`kind`: publicMeta / privateMeta / file / tree) | splitter (in-process from middleware today) | every worm/tree (JS) | | `verae.archive.query` | broadcast lookup | aggregator | **all** worm/tree, **no** queue group | | `verae.archive.reply.` | bloom **hit only** | worm/tree | aggregator | -Silence = miss. Chain seal does not wait on archive. +Silence = miss. Chain seal does not wait on archive. Bytes never go to the chain. + +--- + +## Template / unused + +| Address | For | In | Out | Running | +|---------|-----|----|-----|---------| +| `verae.splitter.in` | future split-out splitter process | middleware | splitter | **no** | +| `verae.example.process.in` | template worker | any | `example-process` Q | **no** | +| `verae.example.process.out` | template fan-out | template | peers | **no** | +| `verae.example.process.reply.` | template reply | template | requester | **no** | +| `verae.internal.jobs.events` | exclusive mailbox republish | jobs-events | wait/webhook | **no** unless env | --- @@ -132,4 +151,4 @@ Silence = miss. Chain seal does not wait on archive. Do **not** point Verae at `NATS_URL`. Do **not** put NATS in Zapier env. A new worker that must see seals uses `jobs.events` or HTTP `GET /zapier/v1/status/{jobId}`. -Template for a new addressed process: clone `verae-nats-process`, rename `verae.example.process.*`. +Template for a new addressed process: clone `verae-nats-process`, rename `verae.example.process.*`, add the subject to `verae-access-authz` policy for the plane that may call it. diff --git a/packages/dev-overview/03-zapier-verae-path.md b/packages/dev-overview/03-zapier-verae-path.md index cb84fe4..a0c16de 100644 --- a/packages/dev-overview/03-zapier-verae-path.md +++ b/packages/dev-overview/03-zapier-verae-path.md @@ -30,14 +30,15 @@ Zapier never has `NATS_URL`. Verae never has `NATS_URL`. ## 1. Submit (async create) 1. Zap action **Create Timestamp** (or curl) `POST https://zap.zapier.georgelambert.org/zapier/v1/timestamp` with portal API key `zmw_…` (not a Verae JWT). -2. access-zapier / edge meters (designed: `verae.billing.usage.recorded`) and forwards to middleware. -3. Middleware `checkEntitlement` (local plan limits today). -4. `veraeClient.createTimestamp`: +2. access-zapier / edge: authz, then `meter()` records cents; if `NATS_URL` is set, `natsPublish(verae.billing.usage.recorded)`. +3. Forwards to middleware `POST /zapier/v1/timestamp`. +4. Middleware `checkEntitlement` (local plan limits today). +5. `veraeClient.createTimestamp`: - **Mock:** in-process job, fake `jobId`. - **Live:** `POST https://api.veraetime.net/api/timestamp` with JWT → **202** `{ jobId }`. -5. Splitter (in-process): hash vs attachments; optional `verae.archive.put` (bytes never go to chain). -6. `enqueueWatch` → JetStream **`verae.zapier.jobs.watch`**. -7. HTTP **202** `{ jobId, sha256, existing }` back to Zapier immediately. +6. Splitter (in-process): hash vs attachments; optional `verae.archive.put` (bytes never go to chain). +7. `enqueueWatch` → JetStream **`verae.zapier.jobs.watch`**. +8. HTTP **202** `{ jobId, sha256, existing }` back to Zapier immediately. Same SHA-256 is idempotent (`existing: true`). @@ -47,7 +48,7 @@ The poller is **in the middleware Node process** when `NATS_ENABLED=true` (`star 1. Durable consumer `job-poller` on `ZAPIER_JOBS` / `verae.zapier.jobs.watch`. 2. Resolve `tokenRef` → tenant Verae password → `POST` login → JWT (stays in middleware). -3. `GET /api/status/{jobId}` (mock or live). +3. `GET /api/status/{jobId}` (mock or live timestamp server). 4. `pending` → `nak` after `intervalMs` (retry). 5. `completed` → publish `jobs.events` `{ event: timestamp.completed, status, jobId, tenantId, traceId }`. 6. `failed` → `timestamp.failed`. Too many attempts → `timestamp.timeout`. @@ -76,6 +77,20 @@ Live OpenAPI: poll until `completed` / `failed`. Hash lookup is **501** on live `POST /zapier/v1/verify` → middleware → Verae `POST /api/verify`. No job watch. +## 6. Batch Merkle (designed; same bus) + +From `MESSAGE-FLOWS.md`: + +1. `POST /v1/timestamp/batch` — one item per line. +2. Middleware hashes leaves, builds Merkle tree. +3. Chain seals **only the root** (`POST /api/timestamp` on the root). +4. Each leaf proof → `verae.archive.put` `kind: tree`. +5. Central hash lookup of a leaf misses unless `includeTree=true`. +6. Aggregator broadcasts `verae.archive.query` `kinds=["tree"]`. +7. Tree node bloom hit → `archive.reply.` with proof. + +Live wait path does not yet call the aggregator, so tree-leaf receipts are not merged on NS1. + ## Connect live `api.veraetime.net` Still blocked on operator bind credentials. When ready: @@ -93,5 +108,18 @@ Then: working Verae login, one live seal, confirm 202/status/verify, map receipt ## Billing on this path -Designed: edge meters `usage.recorded` → account-balance; 402 if prepaid empty. -Running: middleware local usage files; account-balance NATS is up for portal/CS. **Wire edge meter → `verae.billing.usage.recorded` and 402 from books** is still a finish item. +| Hop | Designed | Running | +|-----|----------|---------| +| Edge meter | `verae.billing.usage.recorded` | **coded**; fires when edge has `NATS_URL` | +| Account-balance | subscribe + debit prepaid; 402 if empty | **subscriber running**; 402 from books not proven on every Zap | +| Middleware quota | local files via `recordUsage` | **running**; not NATS | +| `verae.zapier.usage` | optional JS meter | stream only | + +## Connect a new internal process + +```bash +export NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +# clone verae-nats-process, rename subjects, register in verae-fleet +``` + +Jobs stay: HTTP in from Zapier → HTTPS to Verae → NATS watch/events → HTTP back to Zapier. diff --git a/packages/dev-overview/04-gaps-and-finish.md b/packages/dev-overview/04-gaps-and-finish.md index b32ea72..4d3ad55 100644 --- a/packages/dev-overview/04-gaps-and-finish.md +++ b/packages/dev-overview/04-gaps-and-finish.md @@ -16,17 +16,17 @@ Modules and addresses that are designed but **not fully connected, not running a | Module | Running? | NATS | Gap | |--------|----------|------|-----| | middleware HTTP + in-process job-poller + webhook-deliver | **yes** | watch/events/deliver | live Verae + Zapier push | -| account-balance | **yes** | billing RR | edge may not publish `usage.recorded` on every Zap | +| account-balance | **yes** | billing RR + `usage.recorded` sub | prove 402 from books on a Zap when prepaid is 0 | +| zappier-edge | **yes** | `usage.recorded` / `payment.recorded` / `credit.applied` / `customer.put` **if `NATS_URL`** | confirm live process env; Stripe live | | access-* + authz | **yes** | authz + ingress | — | | identity | **yes** (fleet) | bind/lookup | confirm portal always binds `veraeUserId` | | jobs-events mailbox `:3030` | **yes** (fleet) | events counter | exclusive consumer off unless `JOBS_EVENTS_EXCLUSIVE=1` | | CS / sales / accounting | **yes** | statement/adjust | staff UX | -| zappier-edge | **yes** | billing after authz | meter → NATS; Stripe live | | archive-worm + tree-node | **yes on LXC 510** (keep) | `archive.put/query/reply` | only **1+1** copies; fleet overlay `enabled: false` for extra replicas | | archive-aggregator | **no** as fleet worker | query/reply | enable overlay **or** finish in-process hook (`includeAttached` TBD in middleware) | | request-splitter | library in middleware | `archive.put` | `verae.splitter.in` not used | | `ZAPIER_USAGE` / `USAGE_WRITER` | stream yes | `verae.zapier.usage` | no consumer; middleware usage is local files | -| fleet job-poller / webhook-deliver **extra** copies | overlay **false** | same subjects | only enable if you want SSH-spread replicas **instead of** in-process (do not double-consume without queue groups — in-process already uses queue names) | +| fleet job-poller / webhook-deliver **extra** copies | overlay **false** | same subjects | only enable if you want SSH-spread replicas **instead of** in-process (same queue names) | ## Designed, not a live worker @@ -36,32 +36,45 @@ Modules and addresses that are designed but **not fully connected, not running a | `verae-activate` | none (HTTPS Zapier) | optional tiny app; needs Zapier login | | `verae-zapier` (full app) | HTTPS | push after login | | simulator | in-process fake NATS | local `:3847`; not production | +| `verae-nats-accounts` | nkeys policy | not flipped | -## Billing triggers and event logging (aux) +## Aux (no product subjects, or HTTP only) -| Signal | Designed | Finish | -|--------|----------|--------| -| Timestamp/verify meter | `verae.billing.usage.recorded` + optional `verae.zapier.usage` | Publish from edge/middleware `recordUsage`; consume into account-balance; 402 from books not only local quota | -| Portal reload | `payment.recorded` + `balance.adjust` | confirm both fire on Stripe/test reload | -| CS credit | `balance.adjust` + `credit.applied` | running for adjust; confirm applied pub | -| Authz deny audit | `verae.access.authz.deny` | running on deny; no SIEM sink | -| Job lifecycle log | `jobs.events` | running; mailbox counts only — add structured log/export if needed | -| Archive put/query | `VERAE_ARCHIVE` | 510 worm/tree; aggregator not in wait path | -| Keep/fleet | no NATS | HTTP health only — fine | -| Uptime | HTTPS GET | no NATS | -| Backup | disk/JS snapshot | no live event subject | -| Public NATS edge | leaf, token | **do not** use from Zapier; rotate token; consider nkeys | +| Module | NATS | Notes | +|--------|------|-------| +| `verae-keep` | none | HTTP health; restarts units | +| `verae-fleet` | none | catalog + keepFloor | +| `verae-uptime` | none | off-box HTTPS GET of public doors | +| `verae-backup` | none | disk / JetStream snapshot; no live event subject | +| `verae-bootstrap` / `verae-deploy` / `verae-proxmox` / `verae-ops` | none | install/link | +| staff-iam / staff-session / staff-ui | none | HTTP cookies | +| public NATS edge | leaf, token | **do not** use from Zapier; rotate token; later nkeys LEAF vs INTERNAL | + +## Billing triggers and event logging + +| Signal | Designed | Running | Finish | +|--------|----------|---------|--------| +| Timestamp/verify meter (edge) | `verae.billing.usage.recorded` | **code path exists** (`zappier/src/app.ts` `onUsage`) | Confirm `NATS_URL` on live edge; 402 from account-balance when prepaid empty | +| Middleware quota | local files `recordUsage` | **yes** | Either publish `usage.recorded` too or drop duplicate quota | +| Optional JS meter | `verae.zapier.usage` + `USAGE_WRITER` | stream only | Wire or delete | +| Portal reload | `payment.recorded` + `balance.adjust` | coded | confirm both fire on Stripe/test reload | +| CS credit | `balance.adjust` + `credit.applied` | coded | confirm applied pub on live | +| Customer upsert | `customer.put` | coded | — | +| Authz deny audit | `verae.access.authz.deny` | running on deny | **no SIEM sink** | +| Job lifecycle log | `jobs.events` | running | mailbox counts only — add structured log/export if needed | +| Archive put/query | `VERAE_ARCHIVE` | 510 worm/tree | aggregator not in wait path | +| Public edge | leaf | running | rotate token; do not expose `:6222` | ## Ordered finish for message routing 1. **Do not double-start** job-poller: either in-process **or** fleet copies, same queue `job-poller`. -2. Wire **usage**: `recordUsage` → `verae.billing.usage.recorded` (and/or `verae.zapier.usage` + `USAGE_WRITER`). +2. Confirm edge **`NATS_URL`** so `usage.recorded` actually lands; then 402 from books. Unify or drop middleware local `recordUsage`. 3. Enable **archive-aggregator** (or in-process equivalent) so `includeAttached` and tree proofs work on wait/status. 4. Raise worm/tree **replica floors** on 510/more CTs if archive HA is required (fleet overlay min 3). 5. Operator: Zapier `push` + `MOCK_VERAE=false`. 6. Prove: Zap create → `jobs.watch` → live `GET /api/status` → `jobs.events` → wait body + REST Hook. 7. nkeys/mTLS after every client has creds; then lock down the public edge to accounts (LEAF vs INTERNAL). -8. Optional: exclusive `jobs-events` mailbox; SIEM on `authz.deny` and `jobs.events`; `verae.splitter.in` if splitter is split out. +8. Optional: exclusive `jobs-events` mailbox; SIEM on `authz.deny` and `jobs.events`; `verae.splitter.in` if splitter is split out; `USAGE_WRITER` or delete `ZAPIER_USAGE`. ## What is already enough for a mock Zap diff --git a/packages/dev-overview/NATS.md b/packages/dev-overview/NATS.md index 731740f..3af73fb 100644 --- a/packages/dev-overview/NATS.md +++ b/packages/dev-overview/NATS.md @@ -1,9 +1,9 @@ # NATS — dev-overview -This repo does not subscribe. It documents every `verae.*` address. +This repo does not subscribe. It documents every `verae.*` address and the cluster TCP/leaf ports. -Cluster (running): `nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222` on `vmbr1`. +Cluster (running): `nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222` on `vmbr1`. Cluster routes `:6222`. Leaf hubs `:7422`. Monitor `127.0.0.1:8222`. Public client edge (token): `nats://70.88.205.138:4222` and `wss://nats.zapier.georgelambert.org`. Zapier cloud still uses **HTTPS only**. -See [01-nats-routes.md](01-nats-routes.md). +See [01-nats-routes.md](01-nats-routes.md) and [02-endpoint-io.md](02-endpoint-io.md). diff --git a/packages/dev-overview/README.html b/packages/dev-overview/README.html new file mode 100644 index 0000000..2f1812e --- /dev/null +++ b/packages/dev-overview/README.html @@ -0,0 +1,1988 @@ + + + + + + + dev-overview — NATS routes + + + +
+

dev-overview — NATS routes

+
+

dev-overview

+

Developer map of the Verae Time × Zapier NATS message +fabric: what was designed, what is actually running on NS1, how +a Zapier timestamp job reaches api.veraetime.net (or the +mock) and comes back, and what is still unwired.

+

Forgejo: +https://git.georgelambert.org/marchon/dev-overview
+SSH: +ssh://git@git.georgelambert.org:2223/marchon/dev-overview.git
+Catalog: +https://zapier.georgelambert.org/packages/dev-overview/
+Date: 2026-09-14

+

Zapier cloud never connects to NATS. It talks HTTPS +to https://zap.zapier.georgelambert.org (access-zapier) +then middleware. api.veraetime.net is HTTPS +only — middleware is the NATS client.

+

Contents

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DocWhat
00-sources.mdEvery other doc that names a NATS address or TCP route
01-nats-routes.mdTransport ports + every verae.* address: designed vs +running
02-endpoint-io.mdPer-address: purpose, inbound from, outbound to, how to connect +Verae API
03-zapier-verae-path.mdZapier → middleware → Verae timestamp server → poll → events → +Zapier
04-gaps-and-finish.mdModules not connected; billing/event/aux; ordered finish list
+

Cluster (running)

+
nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222
+

JetStream streams (replicas=3, file): ZAPIER_JOBS, +ZAPIER_EVENTS, ZAPIER_WEBHOOKS, +ZAPIER_USAGE, VERAE_ARCHIVE.

+

Public token-gated client edge (not cluster routes): +nats://<token>@70.88.205.138:4222, +wss://nats.zapier.georgelambert.org. Do not put this in +Zapier.

+

Sources (other +documentation that names routes)

+

This inventory is compiled from code and from these docs. Do not +invent extra verae.* names.

+

Master maps

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathWhat it names
packages/docs-master/modules-and-nats.mdModule catalog, subject table, HTTPS vs NATS
packages/docs-master/MESSAGE-FLOWS.mdCreate/wait/includeAttached/batch Merkle
packages/docs-master/archive-nats.mdArchive put/query/reply
docs/02-architecture/nats-subjects.mdverae.zapier.* payloads + streams
docs/02-architecture/modules-and-nats.mdSame catalog as docs-master
docs/02-architecture/overview.mdPoller / events / webhooks
packages/overview/03-nats-cluster.mdCluster URLs, who may connect
packages/overview/06-address-routing.mdAddress pattern + plane mapping
packages/verae-ops/06-linking-services.mdHow services attach
packages/verae-nats-cluster/scripts/ensure-streams.shLive stream create
packages/verae-nats-cluster/conf/nats.conf.tmpl:4222 / :6222 / :7422 / +monitor :8222
packages/verae-nats-cluster/conf/public-edge.conf.tmplPublic leaf :4222, WS :14422
packages/verae-fleet/overlays/ns1/fleet.jsonEnabled vs in-process workers
packages/verae-keep +units.px-worker.jsonWorm/tree on LXC 510
packages/verae-zapier-middleware/src/nats/subjects.jsProduct subjects + consumers
packages/zappier-account-balance/src/subjects.jsBilling subjects
packages/verae-access-authz/src/subjects.js + +policy.jsAuthz + plane allow lists
packages/zappier/src/billing-nats.tsEdge billing client
+

Per-package +NATS.md (Forgejo module copies also live under +docs-master/modules/)

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageAddresses
verae-zapier-middlewarejobs.watch out, jobs.events in, +archive.query via aggregator
verae-jobs-eventsjobs.events; exclusive → +verae.internal.jobs.events
verae-request-splitterarchive.put
verae-archive-wormarchive.put / query / +reply.<id>
verae-tree-nodesame, kind: tree
verae-archive-aggregatorquery out, reply.<id> in
zappier-account-balanceverae.billing.*
zappier (edge)package NATS.md is stale (“does not publish”); +code publishes usage/payment/credit/customer.put when +NATS_URL is set. Use +docs-master/modules/zappier/NATS.md
zappier-customer-servicestatement.get, balance.adjust
zappier-sales-pricingstatement.get
zappier-accounting-exportstatement.get
zappier-identityidentity.bind / lookup
verae-access-authzauthz.check / authz.deny
verae-access-webaccess.web.in / access.web.billing.*
verae-access-apiaccess.api.*
verae-access-zapieraccess.zapier.* then HTTPS to middleware
verae-access-leafaccess.leaf.in
verae-access-staffaccess.staff.*
verae-nats-processverae.example.process.* (template)
verae-nats-accountspolicy only (INTERNAL vs LEAF)
verae-zapier-simulatorin-process replay of product addresses
verae-keep / verae-fleet / +verae-uptime / verae-backupno product subjects
+

Simulator src/pipeline.js and +src/monitors.js list the same product addresses for traces; +they are not live subscribers.

+

Designed vs running NATS +routes

+

Designed = named in docs or in code.
+Running = a process on NS1 is subscribed or publishing +it today, and (for durable work) a JetStream stream +exists.

+

Cluster name verae. Internal clients use the three LXC +on vmbr1. Public edge is a leaf, not a +second cluster.

+

Legend: JS = JetStream stream; RR = +core request-reply; pub = core or JS fire-and-forget; +Q = queue group.

+

Transport (TCP / leaf / public)

+

These are NATS server routes, not +verae.* subjects.

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EndpointDesignedRunningWho
10.10.10.21–23:4222 clientyesyesmiddleware, access-*, billing, worm/tree, identity, +CS/sales/acct
10.10.10.21–23:6222 cluster routesyesyes (private vmbr1 only)nats-a/b/c to each other
10.10.10.21–23:7422 leaf hubyes (public-edge)yespublic edge remotes
127.0.0.1:8222 monitor on each LXCyesyesoperators on the guest
70.88.205.138:4222 public clientyes (token)yesleaf edge; not Zapier
127.0.0.1:14422 WS on edgeyesyesCaddy → wss://nats.zapier.georgelambert.org
127.0.0.1:8229 edge monitoryesyeshost loopback
:6222 / :7422 / :8222 on +vmbr0nomust stay closed—
Host leftover 127.0.0.1:4222 (docker-proxy) + +10.10.10.1:4222 socatlab leftoverpresentdo not point product NATS_URL +here
MQTT :1883study onlyremoved—
+

Internal keep/fleet/middleware URL:

+
nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222
+

Public (token in /etc/nats/public-edge.token on NS1): +nats://<token>@70.88.205.138:4222. Isolation on the +hub is still $G + private LAN. nkeys/mTLS sketched in +verae-nats-accounts, not flipped.

+

JetStream streams (running)

+

Created by verae-nats-cluster/scripts/ensure-streams.sh +(middleware ensureStreams also creates the first +three).

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StreamSubjectsReplicasStorageWho consumes
ZAPIER_JOBSverae.zapier.jobs.watch3filejob-poller (in middleware process), Q job-poller
ZAPIER_EVENTSverae.zapier.jobs.events3filemiddleware wait + webhook router +(event-webhook-router); optional exclusive +jobs-events
ZAPIER_WEBHOOKSverae.zapier.webhooks.deliver3filewebhook-deliver (in middleware), Q webhook-deliver
ZAPIER_USAGEverae.zapier.usage3fileno durable consumer (USAGE_WRITER +named only)
VERAE_ARCHIVEverae.archive.>3fileworm + tree on LXC 510 (keep); aggregator not +fleet-enabled
+

Billing is core request-reply / pub, not a JetStream +stream.

+

Address inventory

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressKindDesignedRunningNotes
verae.zapier.jobs.watchJS work Q job-polleryesyesmiddleware publishes; in-process poller consumes
verae.zapier.jobs.eventsJS eventsyesyespoller publishes; wait() subscribes; webhook worker routes
verae.zapier.webhooks.deliverJS work Q webhook-deliveryesyessame Node process as HTTP
verae.zapier.usageJS optionalyesstream yes, consumer nomiddleware entitlement is local files
verae.internal.jobs.eventscore republishyes (jobs-events exclusive)partialonly if JOBS_EVENTS_EXCLUSIVE=1
verae.billing.statement.getRR Q account-balanceyesyesportal, CS, sales, accounting, access-web/api
verae.billing.balance.getRRyesyesaccount-balance
verae.billing.balance.adjustRRyesyesCS credits, portal reload
verae.billing.usage.recordedpubyesyes if edge NATS_URL setzappier/src/app.ts onUsage → +natsPublish; account-balance subscribes
verae.billing.payment.recordedpubyesyes if NATS_URLportal reload (portal.ts)
verae.billing.credit.appliedpubyesyes if NATS_URLadmin/CS (admin.ts)
verae.billing.customer.putpubyesyes if NATS_URLledger.ts; account-balance applies
verae.access.authz.checkRR Q access-authzyesyesfleet keepFloor
verae.access.authz.denypub audityesyes (on deny)no SIEM sink
verae.access.web.in / +verae.access.web.billing.*ingressyesyesmapped after authz, +e.g. verae.access.web.billing.statement.get
verae.access.api.*ingressyesyes
verae.access.zapier.*ingressyesyesHTTPS plane; Zapier never speaks NATS
verae.access.leaf.in / +verae.access.leaf.*ingressyesyesno billing
verae.access.staff.*ingressyesyesCS/sales/accounting
verae.identity.bindRR Q identityyesyesfleet
verae.identity.lookupRR Q identityyesyes
verae.archive.putJS (VERAE_ARCHIVE)yespartialsplitter in-process in middleware; worm/tree on 510 +consume
verae.archive.querybroadcast (no Q)yespartiallive aggregator hook TBD in middleware (simulator +has it)
verae.archive.reply.<id>replies on bloom hityespartialworm/tree on 510 can reply; aggregator not fleet-enabled
verae.splitter.infutureyes (docs)nosplitter stays a library
verae.example.process.in / .out / +.reply.*templateyesnoverae-nats-process is a model
bench.*lab onlyn/aephemeralspeed studies; not product
+

Plane mapping (verae-access-authz): internal +verae.billing.statement.get + plane web → +ingress verae.access.web.billing.statement.get. Planes +never publish internal subjects until authz.check returns +allow.

+

Durable consumers (named +in middleware)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameStream / subjectRunning
job-pollerZAPIER_JOBS / jobs.watchyes (in-process)
event-webhook-routerZAPIER_EVENTS / jobs.eventsyes (in-process)
webhook-deliverZAPIER_WEBHOOKS / webhooks.deliveryes (in-process)
usage-writerZAPIER_USAGE / verae.zapier.usageno
jobs-events-exclusiveZAPIER_EVENTSno unless JOBS_EVENTS_EXCLUSIVE=1
+

Fleet overlay vs in-process

+

packages/verae-fleet/overlays/ns1/fleet.json +(2026-09-14):

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Servicefleet enabledActual lab
middleware-httptruerunning; starts job-poller + webhook workers +in-process when NATS_ENABLED
job-pollerfalsecovered by middleware; do not spawn a second copy
webhook-deliverfalsesame
archive-aggregatorfalsenot running as a fleet worker
archive-worm / tree-nodefalse on host fleetrunning on LXC 510 via keep +units.px-worker.json (1 worm + 1 tree)
account-balance, access-*, identity, jobs-events, CS/sales/acct, +staff-iam/session, zappier-edgetrue keepFloorkeepFloor
zapier-simulatortrue, keepFloor falseoptional
natsmanaged false3-node cluster + leftover host loopback
+

Endpoint I/O

+

Each product NATS address: what it is for, +who sends, who receives, how +to attach.

+

Connect with a long-lived client +(reconnect-per-message is the anti-pattern):

+
NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222
+

Public edge (token in /etc/nats/public-edge.token on +NS1): nats://<token>@70.88.205.138:4222. Do not put +that URL in Zapier or in Verae.

+
+

verae.zapier.jobs.watch

+ ++++ + + + + + + + + + + + + + + + + + + +
ForWork queue: “poll Verae until this jobId is +terminal.”
In frommiddleware enqueueWatch after +POST /api/timestamp (or mock) returns +jobId
Out tojob-poller worker (queue job-poller, durable on +ZAPIER_JOBS)
Thenpoller calls Verae GET /api/status/{jobId} over +HTTPS, not NATS
+

Payload: tenantId, veraeUserId, +jobId, tokenRef, enqueuedAt, +attempt, maxAttempts, intervalMs, +traceId. JWT stays in middleware (tokenRef); +never on Zapier.

+

Connect Verae-side: do not +subscribe this from api.veraetime.net. The poller is the +Verae HTTP client. To add another watcher, start another +job-poller consumer in the same queue group.

+
+

verae.zapier.jobs.events

+ ++++ + + + + + + + + + + + + + + +
ForTerminal outcomes: timestamp.completed / +failed / timeout
In fromjob-poller after Verae status is not pending
Out to(1) middleware waitForJobEvent (wait HTTP); (2) webhook +router → webhooks.deliver; (3) optional +verae-jobs-events mailbox :3030
+

If JOBS_EVENTS_EXCLUSIVE=1, only +verae-jobs-events is the durable consumer and republishes +verae.internal.jobs.events. Default lab: middleware wait + +webhook worker share the stream.

+

Payload: event, tenantId, +jobId, status, traceId, +emittedAt.

+
+

verae.zapier.webhooks.deliver

+ + + + + + + + + + + + + + + +
ForHTTPS POST to hooks.zapier.com (REST Hook)
In fromwebhook worker on completed/failed events
Out toZapier cloud HTTPS, never NATS
+

Payload: hookId, tenantId, +targetUrl, event, payload, +attempt, traceId. Slow consumer: keep replica +floors on the worker if you split it out of middleware.

+
+

verae.zapier.usage

+ ++++ + + + + + + + + + + + + + + + + + + +
ForOptional meter of Zap actions on NATS (JetStream)
In fromdesigned: middleware / edge
Out todesigned: USAGE_WRITER → books
Runningstream exists; no writer; middleware uses local usage +files
+

Prepaid meter that is wired uses +verae.billing.usage.recorded (core pub), not this stream. +Finish: either publish here from recordUsage or drop the +stream.

+
+

Billing +(verae.billing.*) — account-balance source of truth

+

Request-reply unless noted. Queue account-balance. +Not JetStream.

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressForIn fromOut to
statement.getprepaid, credits, usage, paymentsportal, CS, sales, accounting, access-web/apireply to requester
balance.getcents onlyinternalreply
balance.adjustCS credit or portal reloadCS, access-web (reload kind only)books + reply
usage.recordedmeter pubzappier-edge meter() onUsage when +NATS_URL setaccount-balance subscriber (debits prepaid)
payment.recordedreload/invoice pubportalbooks
credit.appliedgoodwill pubCS/adminbooks
customer.putupsert customeredge ledgerbooks
+

Authz must pass +verae.access.authz.check before these from a public plane. +Leaf plane cannot call billing (policy).

+

Middleware recordUsage still writes local tenant +files and does not publish +usage.recorded. Two meters until that is unified.

+
+

Access planes

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressForInOut
verae.access.authz.checkallow/deny { plane, subject, principal }every plane + edge billing-nats.ts{ allow, reason }; deny also pubs +authz.deny
verae.access.authz.denyauditauthz on denynowhere yet (no SIEM)
verae.access.web.in / +verae.access.web.billing.*browser portalaccess-web HTTPstatement.get / balance.adjust kind=reload +after authz
verae.access.api.*customer x-api-keyaccess-apistatement; HTTPS to middleware for jobs
verae.access.zapier.*Zapier HTTPS onlyaccess-zapierjobs.watch via HTTP to middleware, not Zapier NATS; +usage.recorded allowed by policy
verae.access.leaf.inS2S { token, target, payload }remote leafarchive + jobs after authz; never billing
verae.access.staff.*CS/sales/accountingaccess-staffbilling after authz
+

Ingress mapping: +accessAddress(plane, 'verae.billing.statement.get') → +verae.access.<plane>.billing.statement.get.

+
+

Identity

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
AddressForInOut
verae.identity.bindbind email/customerId → veraeUserIdportal / middlewarereply
verae.identity.lookuplookup by customerId or veraeUserIdsamereply
+

Queue identity. Fleet keepFloor.

+
+

Archive / tree

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressForInOut
verae.archive.putWORM/tree write (kind: publicMeta / privateMeta / file +/ tree)splitter (in-process from middleware today)every worm/tree (JS)
verae.archive.querybroadcast lookupaggregatorall worm/tree, no queue group
verae.archive.reply.<correlationId>bloom hit onlyworm/treeaggregator
+

Silence = miss. Chain seal does not wait on archive. Bytes never go +to the chain.

+
+

Template / unused

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressForInOutRunning
verae.splitter.infuture split-out splitter processmiddlewaresplitterno
verae.example.process.intemplate workeranyexample-process Qno
verae.example.process.outtemplate fan-outtemplatepeersno
verae.example.process.reply.<id>template replytemplaterequesterno
verae.internal.jobs.eventsexclusive mailbox republishjobs-eventswait/webhookno unless env
+
+

How to connect Verae +API to NATS

+

api.veraetime.net is HTTPS. It does not +subscribe. The glue is middleware:

+
    +
  1. Set VERAE_API_BASE_URL=https://api.veraetime.net and +MOCK_VERAE=false.
  2. +
  3. Middleware login (username/password) → JWT stored as +tokenRef.
  4. +
  5. POST /api/timestamp → 202 { jobId }.
  6. +
  7. Publish verae.zapier.jobs.watch.
  8. +
  9. Poller GET /api/status/{jobId} until +completed / failed.
  10. +
  11. Publish verae.zapier.jobs.events.
  12. +
  13. Wait HTTP and/or REST Hook.
  14. +
+

Do not point Verae at NATS_URL. Do +not put NATS in Zapier env. A new worker that must see +seals uses jobs.events or HTTP +GET /zapier/v1/status/{jobId}.

+

Template for a new addressed process: clone +verae-nats-process, rename +verae.example.process.*, add the subject to +verae-access-authz policy for the plane that may call +it.

+

Zapier → Verae API → Zapier

+

How a timestamp job is submitted, watched, and returned. Lab today: +MOCK_VERAE=true. Live path is the same HTTP contract with +MOCK_VERAE=false.

+

Rule

+
Zapier cloud  --HTTPS only-->  zap.zapier.georgelambert.org  (access-zapier)
+                                    |
+                                    v HTTPS
+                              middleware :3100 /zapier/v1
+                                    |
+                    +---------------+----------------+
+                    | HTTPS                         | NATS (private cluster)
+                    v                               v
+            api.veraetime.net              jobs.watch → poller
+            POST /api/timestamp            GET /api/status/{jobId}
+            GET  /api/status/{jobId}              |
+            POST /api/verify                      v
+                                           jobs.events
+                                              |
+                         +--------------------+--------------------+
+                         | wait subscriber                         | webhook-deliver
+                         v                                         v
+                    HTTP response to Zap                    POST hooks.zapier.com
+

Zapier never has NATS_URL. Verae never has +NATS_URL.

+

1. Submit (async create)

+
    +
  1. Zap action Create Timestamp (or curl) +POST https://zap.zapier.georgelambert.org/zapier/v1/timestamp +with portal API key zmw_… (not a Verae JWT).
  2. +
  3. access-zapier / edge: authz, then meter() records +cents; if NATS_URL is set, +natsPublish(verae.billing.usage.recorded).
  4. +
  5. Forwards to middleware POST /zapier/v1/timestamp.
  6. +
  7. Middleware checkEntitlement (local plan limits +today).
  8. +
  9. veraeClient.createTimestamp: +
      +
    • Mock: in-process job, fake jobId.
    • +
    • Live: +POST https://api.veraetime.net/api/timestamp with JWT → +202 { jobId }.
    • +
  10. +
  11. Splitter (in-process): hash vs attachments; optional +verae.archive.put (bytes never go to chain).
  12. +
  13. enqueueWatch → JetStream +verae.zapier.jobs.watch.
  14. +
  15. HTTP 202 { jobId, sha256, existing } +back to Zapier immediately.
  16. +
+

Same SHA-256 is idempotent (existing: true).

+

2. Monitor (job poller)

+

The poller is in the middleware Node process when +NATS_ENABLED=true (startJobPollerWorker). +Fleet does not spawn a second copy +(job-poller.enabled: false).

+
    +
  1. Durable consumer job-poller on ZAPIER_JOBS +/ verae.zapier.jobs.watch.
  2. +
  3. Resolve tokenRef → tenant Verae password → +POST login → JWT (stays in middleware).
  4. +
  5. GET /api/status/{jobId} (mock or live timestamp +server).
  6. +
  7. pending → nak after +intervalMs (retry).
  8. +
  9. completed → publish jobs.events +{ event: timestamp.completed, status, jobId, tenantId, traceId }.
  10. +
  11. failed → timestamp.failed. Too many +attempts → timestamp.timeout.
  12. +
  13. ack the watch message.
  14. +
+

Live OpenAPI: poll until completed / +failed. Hash lookup is 501 on live +(lookupHash). Map certificate, +timestamp, blockIndex, sha256 +into the receipt Zap samples expect.

+

3. Wait (sync Zap step)

+

Create Timestamp and Wait → +POST /zapier/v1/timestamp/wait.

+
    +
  1. Same as submit (watch is already on NATS).
  2. +
  3. waitForJobEvent(jobId, WAIT_TIMEOUT_MS) subscribes to +verae.zapier.jobs.events.
  4. +
  5. On matching jobId event: return status JSON +(certificate / receipt).
  6. +
  7. On timeout: { status: pending, jobId } so the REST Hook +can finish the Zap.
  8. +
+

includeAttached: after seal, aggregator should +verae.archive.query; bloom hits merge extra receipts. +Simulator does this; live aggregator hook is TBD.

+

4. Push back to Zapier

+
    +
  • Wait response: HTTP body on the same Zap step.
  • +
  • REST Hook: Zapier subscribes +POST /zapier/v1/hooks. On jobs.events, +middleware enqueues +verae.zapier.webhooks.deliver. Worker +POSTs targetUrl (hooks.zapier.com).
  • +
  • Poll status: Zap action Find Job +Status → GET /zapier/v1/status/{jobId} → +middleware GET Verae (or last event).
  • +
+

5. Verify

+

POST /zapier/v1/verify → middleware → Verae +POST /api/verify. No job watch.

+

6. Batch Merkle (designed; same +bus)

+

From MESSAGE-FLOWS.md:

+
    +
  1. POST /v1/timestamp/batch — one item per line.
  2. +
  3. Middleware hashes leaves, builds Merkle tree.
  4. +
  5. Chain seals only the root +(POST /api/timestamp on the root).
  6. +
  7. Each leaf proof → verae.archive.put +kind: tree.
  8. +
  9. Central hash lookup of a leaf misses unless +includeTree=true.
  10. +
  11. Aggregator broadcasts verae.archive.query +kinds=["tree"].
  12. +
  13. Tree node bloom hit → archive.reply.<id> with +proof.
  14. +
+

Live wait path does not yet call the aggregator, so tree-leaf +receipts are not merged on NS1.

+

Connect live +api.veraetime.net

+

Still blocked on operator bind credentials. When ready:

+
# middleware env
+MOCK_VERAE=false
+VERAE_API_BASE_URL=https://api.veraetime.net
+NATS_ENABLED=true
+NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222
+JETSTREAM_REPLICAS=3
+

Then: working Verae login, one live seal, confirm 202/status/verify, +map receipt fields, REST Hook to a private Zap. See +zapier-decisions/STATUS.md “Once MOCK_VERAE=false”.

+

Billing on this path

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HopDesignedRunning
Edge meterverae.billing.usage.recordedcoded; fires when edge has +NATS_URL
Account-balancesubscribe + debit prepaid; 402 if emptysubscriber running; 402 from books not proven on +every Zap
Middleware quotalocal files via recordUsagerunning; not NATS
verae.zapier.usageoptional JS meterstream only
+

Connect a new internal +process

+
export NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222
+# clone verae-nats-process, rename subjects, register in verae-fleet
+

Jobs stay: HTTP in from Zapier → HTTPS to Verae → NATS watch/events → +HTTP back to Zapier.

+

Gaps and finish list

+

Modules and addresses that are designed but not fully +connected, not running as fleet workers, or not on the live Verae/Zapier +path.

+

Blocked on the operator +(not a NATS bug)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ItemStateTo finish
Zapier Platform pushno loginzapier login → register → +MIDDLEWARE_BASE_URL=https://zap.zapier.georgelambert.org → +push private app
Live VeraeMOCK_VERAE=truecredentials; MOCK_VERAE=false; prove one seal
nkeys / mTLScluster $G onlyverae-nats-accounts sketch; flip only after every +NATS_URL has creds
Hash lookup on live OpenAPI501Verae API gap or our store
+

Running on HTTP/NATS +but incomplete routing

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModuleRunning?NATSGap
middleware HTTP + in-process job-poller + webhook-deliveryeswatch/events/deliverlive Verae + Zapier push
account-balanceyesbilling RR + usage.recorded subprove 402 from books on a Zap when prepaid is 0
zappier-edgeyesusage.recorded / payment.recorded / +credit.applied / customer.put if +NATS_URLconfirm live process env; Stripe live
access-* + authzyesauthz + ingress—
identityyes (fleet)bind/lookupconfirm portal always binds veraeUserId
jobs-events mailbox :3030yes (fleet)events counterexclusive consumer off unless +JOBS_EVENTS_EXCLUSIVE=1
CS / sales / accountingyesstatement/adjuststaff UX
archive-worm + tree-nodeyes on LXC 510 (keep)archive.put/query/replyonly 1+1 copies; fleet overlay +enabled: false for extra replicas
archive-aggregatorno as fleet workerquery/replyenable overlay or finish in-process hook +(includeAttached TBD in middleware)
request-splitterlibrary in middlewarearchive.putverae.splitter.in not used
ZAPIER_USAGE / USAGE_WRITERstream yesverae.zapier.usageno consumer; middleware usage is local files
fleet job-poller / webhook-deliver extra +copiesoverlay falsesame subjectsonly enable if you want SSH-spread replicas instead +of in-process (same queue names)
+

Designed, not a live worker

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModuleAddressWhat to do
verae-nats-processverae.example.process.*template only; clone to add a function
verae-activatenone (HTTPS Zapier)optional tiny app; needs Zapier login
verae-zapier (full app)HTTPSpush after login
simulatorin-process fake NATSlocal :3847; not production
verae-nats-accountsnkeys policynot flipped
+

Aux (no product subjects, +or HTTP only)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModuleNATSNotes
verae-keepnoneHTTP health; restarts units
verae-fleetnonecatalog + keepFloor
verae-uptimenoneoff-box HTTPS GET of public doors
verae-backupnonedisk / JetStream snapshot; no live event subject
verae-bootstrap / verae-deploy / +verae-proxmox / verae-opsnoneinstall/link
staff-iam / staff-session / staff-uinoneHTTP cookies
public NATS edgeleaf, tokendo not use from Zapier; rotate token; later nkeys +LEAF vs INTERNAL
+

Billing triggers and event +logging

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SignalDesignedRunningFinish
Timestamp/verify meter (edge)verae.billing.usage.recordedcode path exists (zappier/src/app.ts +onUsage)Confirm NATS_URL on live edge; 402 from account-balance +when prepaid empty
Middleware quotalocal files recordUsageyesEither publish usage.recorded too or drop duplicate +quota
Optional JS meterverae.zapier.usage + USAGE_WRITERstream onlyWire or delete
Portal reloadpayment.recorded + balance.adjustcodedconfirm both fire on Stripe/test reload
CS creditbalance.adjust + credit.appliedcodedconfirm applied pub on live
Customer upsertcustomer.putcoded—
Authz deny auditverae.access.authz.denyrunning on denyno SIEM sink
Job lifecycle logjobs.eventsrunningmailbox counts only — add structured log/export if needed
Archive put/queryVERAE_ARCHIVE510 worm/treeaggregator not in wait path
Public edgeleafrunningrotate token; do not expose :6222
+

Ordered finish for message +routing

+
    +
  1. Do not double-start job-poller: either in-process +or fleet copies, same queue +job-poller.
  2. +
  3. Confirm edge NATS_URL so +usage.recorded actually lands; then 402 from books. Unify +or drop middleware local recordUsage.
  4. +
  5. Enable archive-aggregator (or in-process +equivalent) so includeAttached and tree proofs work on +wait/status.
  6. +
  7. Raise worm/tree replica floors on 510/more CTs if +archive HA is required (fleet overlay min 3).
  8. +
  9. Operator: Zapier push + +MOCK_VERAE=false.
  10. +
  11. Prove: Zap create → jobs.watch → live +GET /api/status → jobs.events → wait body + +REST Hook.
  12. +
  13. nkeys/mTLS after every client has creds; then lock down the public +edge to accounts (LEAF vs INTERNAL).
  14. +
  15. Optional: exclusive jobs-events mailbox; SIEM on +authz.deny and jobs.events; +verae.splitter.in if splitter is split out; +USAGE_WRITER or delete ZAPIER_USAGE.
  16. +
+

What is already enough +for a mock Zap

+

HTTPS zap/mw → mock create → jobs.watch → in-process +poller → mock status completed → jobs.events → wait returns +mock certificate. Archive extras and live chain are the missing +middle.

+ + diff --git a/packages/dev-overview/README.md b/packages/dev-overview/README.md index 9533a65..ce81f30 100644 --- a/packages/dev-overview/README.md +++ b/packages/dev-overview/README.md @@ -7,18 +7,17 @@ Developer map of the Verae Time × Zapier **NATS message fabric**: what was desi **Catalog:** https://zapier.georgelambert.org/packages/dev-overview/ **Date:** 2026-09-14 -Zapier cloud **never** connects to NATS. It talks HTTPS to `https://zap.zapier.georgelambert.org` (access-zapier) then middleware. +Zapier cloud **never** connects to NATS. It talks HTTPS to `https://zap.zapier.georgelambert.org` (access-zapier) then middleware. `api.veraetime.net` is **HTTPS only** — middleware is the NATS client. ## Contents | Doc | What | |-----|------| -| [01-nats-routes.md](01-nats-routes.md) | Every `verae.*` address: designed vs running, stream, queue | -| [02-endpoint-io.md](02-endpoint-io.md) | Per-address: purpose, inbound from, outbound to, how to connect | -| [03-zapier-verae-path.md](03-zapier-verae-path.md) | Zapier → middleware → Verae API → poll → events → Zapier | -| [04-gaps-and-finish.md](04-gaps-and-finish.md) | Modules not connected; billing/aux; finish list | - -Sources: `docs-master/modules-and-nats.md`, `MESSAGE-FLOWS.md`, fleet `services/*.json`, overlay `overlays/ns1/fleet.json`, middleware `src/nats/subjects.js`, `ensure-streams.sh`, keep `units.px-worker.json`, STATUS.md. +| [00-sources.md](00-sources.md) | Every other doc that names a NATS address or TCP route | +| [01-nats-routes.md](01-nats-routes.md) | Transport ports + every `verae.*` address: designed vs running | +| [02-endpoint-io.md](02-endpoint-io.md) | Per-address: purpose, inbound from, outbound to, how to connect Verae API | +| [03-zapier-verae-path.md](03-zapier-verae-path.md) | Zapier → middleware → Verae timestamp server → poll → events → Zapier | +| [04-gaps-and-finish.md](04-gaps-and-finish.md) | Modules not connected; billing/event/aux; ordered finish list | ## Cluster (running) @@ -28,4 +27,4 @@ nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 JetStream streams (replicas=3, file): `ZAPIER_JOBS`, `ZAPIER_EVENTS`, `ZAPIER_WEBHOOKS`, `ZAPIER_USAGE`, `VERAE_ARCHIVE`. -Public token-gated **client** edge (not cluster routes): `nats://@70.88.205.138:4222`, `wss://nats.zapier.georgelambert.org`. +Public token-gated **client** edge (not cluster routes): `nats://@70.88.205.138:4222`, `wss://nats.zapier.georgelambert.org`. Do not put this in Zapier. diff --git a/packages/dev-overview/README.pdf b/packages/dev-overview/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2a6fecf8768fcfc908db019afcfc84b682047b30 GIT binary patch literal 109022 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

-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

1Hj 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