Some checks are pending
offline / test (push) Waiting to run
Internal billing now uses verae.billing.* request-reply and pubs. zappier-account-balance tracks prepaid, credits, usage, and payments. Portal, admin, CS, and sales all review the same statement. Independent Forgejo repos stay split via push-module-repos.
5.2 KiB
5.2 KiB
Modules and NATS message contracts
Master map of every service in the Zapier ↔ middleware ↔ chain ↔ WORM-archive path.
Zapier cloud never connects to NATS. Internal services do: middleware workers, archives, account-balance, zappier-edge billing, CS, sales, and accounting.
Who talks to whom (HTTPS vs NATS)
[Zapier Platform app] HTTPS [zappier-edge] HTTPS [middleware-http]
| | NATS verae.billing.* |
| v |
[customer portal] [account-balance] NATS JetStream
[CS :3011] queue account-balance (NS1 loopback :4222)
[sales :3012] ^ |
[accounting :3013] | request-reply |
+-------------------------------+
+------------------+------------------+-------------+
| | |
[job-poller] [webhook-deliver] [archive-aggregator]
| |
| HTTPS | NATS query/reply
[verae-chain-client] |
[archive-worm × N]
bloom miss = silence
Module catalog
| Module | Repo (Forgejo) | Runtime | Listens | Sends |
|---|---|---|---|---|
| zapier-platform-app | verae-zapier-app |
Zapier cloud | User Zap steps | HTTPS to zappier-edge |
| zappier-edge | zappier-edge |
Public HTTPS :3000 | Zapier, portal, admin | HTTPS to middleware; NATS billing pub |
| account-balance | zappier-account-balance |
:3010 + NATS | verae.billing.* |
statement/adjust replies |
| customer-service | zappier-customer-service |
:3011 | CS staff HTTP | NATS balance.adjust / statement.get |
| sales-pricing | zappier-sales-pricing |
:3012 | Sales HTTP | NATS statement.get; HTTPS to edge for multipliers |
| accounting-export | zappier-accounting-export |
:3013 | Accounting HTTP | reads invoices; NATS statement |
| middleware-http | verae-middleware |
Public HTTPS :3100 | zappier-edge | NATS jobs.watch; HTTP to chain; wait on jobs.events |
| job-poller | verae-job-poller |
Worker | verae.zapier.jobs.watch |
verae.zapier.jobs.events; HTTP GET chain status |
| webhook-deliver | verae-webhook-deliver |
Worker | verae.zapier.webhooks.deliver + events |
HTTPS POST Zapier REST Hook |
| request-splitter | verae-request-splitter |
In middleware | HTTP body / multipart | chain hash; verae.archive.put |
| archive-aggregator | verae-archive-aggregator |
Worker / in wait | includeAttached on wait |
verae.archive.query; reads verae.archive.reply.<id> |
| archive-worm | verae-archive-worm |
N copies | verae.archive.query, verae.archive.put |
verae.archive.reply.<id> if bloom hits |
| tree-node | verae-tree-node |
N copies (WORM role) | verae.archive.query, verae.archive.put kind tree |
verae.archive.reply.<id> if bloom hits |
| zapier-simulator | verae-zapier-simulator |
Local HTTP :3847 | operator browser | in-process replay of all addresses |
| zapier-user-docs | zapier-user-docs |
Static | — | catalog /user-docs/ |
| verae-chain-client | verae-chain-client |
Library | — | HTTPS api.veraetime.net or MOCK |
| fleet | verae-fleet |
Local HTTP :3850 | operator | keepFloor + SSH hosts |
| overview | overview |
Static | — | high-level map |
| nats-process | verae-nats-process |
Template worker | verae.example.process.in |
.out / .reply.* |
| docs-master | zapier-docs-master |
Static | — | published on zapier.georgelambert.org |
Addresses (subjects)
| Address | Kind | Payload (required fields) |
|---|---|---|
verae.zapier.jobs.watch |
JetStream work queue | tenantId, jobId, tokenRef, enqueuedAt, attempt, maxAttempts, intervalMs, traceId |
verae.zapier.jobs.events |
JetStream events | event (timestamp.completed|failed|timeout), tenantId, jobId, status, traceId, emittedAt |
verae.zapier.webhooks.deliver |
JetStream work queue | hookId, tenantId, targetUrl, event, payload, attempt, traceId |
verae.zapier.usage |
optional | tenantId, action, amount, at |
verae.billing.statement.get |
request-reply | customerId → prepaid, credits, usage, payments |
verae.billing.balance.adjust |
request-reply | customerId, cents, reason, agent |
verae.billing.usage.recorded |
pub | meter events from zappier-edge |
verae.billing.payment.recorded |
pub | portal reload / invoice paid |
verae.billing.credit.applied |
pub | CS goodwill |
verae.archive.put |
JetStream | sha256, tenantId, kind (publicMeta|privateMeta|file|tree), record, traceId |
verae.archive.query |
pub to all archives | correlationId, sha256, tenantId, kinds[], traceId |
verae.archive.reply.<correlationId> |
replies | archiveId, sha256, records[], traceId |
Completed job JSON (back to Zapier)
See docs/02-architecture/archive-nats.md. Seal receipts from chain; extra receipts and files[] from archive aggregation when includeAttached is true.