Some checks are pending
offline / test (push) Waiting to run
Zapier is one ingress. Direct web, customer API, and S2S leaf nodes are their own services. Every hop to an internal subject must pass verae.access.authz.check (default deny by plane).
32 lines
2.6 KiB
Markdown
32 lines
2.6 KiB
Markdown
# 1. System
|
|
|
|
Verae Time proves a SHA-256 existed at a given time. Zapier lets customers register and look up hashes from the tools they already use. Billing and API keys live on **zappier-edge**. Timestamping, wait, webhooks, and archive fan-out live behind **verae-middleware**. Durable messaging is the **central Verae NATS.IO 3-server JetStream cluster**.
|
|
|
|
## Hard rule
|
|
|
|
**Zapier never connects to NATS, tree nodes, WORM archives, or `api.veraetime.net`.** Those hops are middleware and workers only. If a trace ever shows a Zapier hop on a `verae.*` subject, do not push the app.
|
|
|
|
## Planes
|
|
|
|
| Plane | What | Network |
|
|
|-------|------|---------|
|
|
| Zapier cloud | `verae-zapier-app` via **access-zapier** | HTTPS to `:3024` only (not NATS) |
|
|
| Direct web | `verae-access-web` customer browser | HTTPS `:3021` |
|
|
| Direct customer API | `verae-access-api` `x-api-key` | HTTPS `:3022` |
|
|
| S2S leaf | `verae-access-leaf` | NATS `verae.access.leaf.in` / HTTPS `:3023` |
|
|
| Authz | `verae-access-authz` | `verae.access.authz.check` before any internal subject |
|
|
| Commercial edge | `zappier-edge` portal, admin, Stripe (legacy combined) | Public HTTPS; NATS billing after authz |
|
|
| Account balance | `zappier-account-balance` prepaid SoT | NATS `verae.billing.*` + HTTP `:3010` |
|
|
| CS / sales / accounting | `zappier-customer-service`, `zappier-sales-pricing`, `zappier-accounting-export` | Private HTTP; NATS statement/adjust |
|
|
| Middleware HTTP | `/zapier/v1/*` job id + wait | Public HTTPS from edge only |
|
|
| NATS cluster | JetStream subjects under `verae.*` | Private; loopback or SSH tunnel |
|
|
| Workers | poller, webhook-deliver, aggregator | NATS + HTTPS to chain or Zapier hooks |
|
|
| Archives | WORM + tree nodes | NATS broadcast query; bloom miss = silence |
|
|
| Chain | Verae timestamping | HTTPS `api.veraetime.net` or MOCK |
|
|
| Control | `verae-fleet` | Operator loopback `:3850`; SSH to extra machines |
|
|
|
|
## Request in one sentence
|
|
|
|
A Zap step POSTs to zappier-edge (`x-api-key`); edge meters the call and, when `ZAPPIER_UPSTREAM` is set, forwards timestamp/receipt/hash to middleware `/zapier/v1`. Middleware splits hash vs files, writes the hash (or Merkle root) to the chain, publishes `verae.zapier.jobs.watch`, and either returns `jobId` or waits on `verae.zapier.jobs.events`. Meter events, CS credits, and portal reloads go over NATS `verae.billing.*` to **account-balance** (source of truth). Customers review the same statement in the portal; CS (`:3011`) and sales (`:3012`) review it on their department UIs. Attached metadata and bulk-summary **leaves** are found later by broadcasting `verae.archive.query` to every archive/tree node.
|
|
|
|
See [diagrams](08-diagrams.md).
|