Keep-going: tree shares, health flags, CI, compose, timestamp Zapier action

Directory-tree encrypted share mock; /health reports mockVerae/nats;
middleware OpenAPI extended; zappier receipt by jobId; activate Create
Timestamp (local mock or hosted); GitHub Actions test:offline; compose
builds zappier image; seed-demo.mjs.

No Zapier login or live Verae required.
This commit is contained in:
George Lambert 2026-09-09 03:02:08 -04:00
parent 645a24909a
commit 5925e76c72
39 changed files with 514 additions and 33 deletions

View file

@ -103,7 +103,7 @@ If `register` says the name is taken, use `"Verae Time Dev"` or `"VeraeTime"`.
- **API Key** — leave **blank**.
- **API base URL** — leave **blank**.
- Test connection → should succeed (*Verae Time (Add Numbers)* / local mode).
5. Choose action **Add Numbers** (or **Echo Text**).
5. Choose action **Add Numbers**, **Echo Text**, **SHA256 Hash Text**, or **Create Timestamp** (local mock if API fields blank).
6. Set **Number 1** = `2`, **Number 2** = `3`.
7. **Test step**. You want:

View file

@ -5,7 +5,7 @@ These cannot finish in this session:
1. **`zapier-platform login` + `register` + `push`** — browser OAuth to your Zapier account. Follow [docs/04-activate/SETUP-ZAPIER-DEVELOPER.md](04-activate/SETUP-ZAPIER-DEVELOPER.md). After push, commit `.zapierapprc`.
2. **Live `api.veraetime.net`** — hash lookup, metadata, receipts, LTS, share are **not** in the public OpenAPI. Mocks exist; live client refuses unknown paths.
3. **PDF receipts** — JSON extra-seal works; PDF is generated locally (`?format=pdf`). Legal copy/seal artwork still TBD.
4. **Encrypted LTS + share**mock AES-256-GCM blobs + share tokens exist (`/zapier/v1/objects`, `/zapier/v1/shares/:token`). Not live Verae/Peergos.
4. **Encrypted LTS + share**file **and directory tree** mocks: `/zapier/v1/objects`, `/objects/trees`, `/shares/:token`. Not live Verae/Peergos.
5. **NS1 NATS public bind** — left loopback-only; `scripts/nats-tunnel.sh` maps `14222`.
Everything else for morning Add Numbers is ready.

View file

@ -72,6 +72,63 @@ paths:
responses:
'200':
description: Unsubscribed
/zapier/v1/hashes/{sha256}:
get:
summary: Lookup timestamp by SHA256 (mock)
operationId: lookupHash
security:
- BearerAuth: []
parameters:
- name: sha256
in: path
required: true
schema: { type: string }
responses:
'200': { description: Found }
'404': { description: Missing }
/zapier/v1/receipts/{jobId}:
get:
summary: Certified retrieval receipt (json or pdf)
operationId: getReceipt
security:
- BearerAuth: []
parameters:
- name: jobId
in: path
required: true
schema: { type: string }
- name: format
in: query
schema: { type: string, enum: [json, pdf] }
responses:
'200': { description: Receipt }
/zapier/v1/objects:
post:
summary: Store encrypted blob and timestamp
operationId: putObject
security:
- BearerAuth: []
responses:
'201': { description: Stored }
/zapier/v1/objects/trees:
post:
summary: Store encrypted directory tree
operationId: putTree
security:
- BearerAuth: []
responses:
'201': { description: Stored }
/zapier/v1/shares/{token}:
get:
summary: Redeem a share token
operationId: redeemShare
parameters:
- name: token
in: path
required: true
schema: { type: string }
responses:
'200': { description: Ciphertext + dek (mock) }
components:
securitySchemes:
BearerAuth:

View file

@ -74,6 +74,7 @@ One MD file per source module.
- [verae-activate/creates/add_numbers](verae-activate/creates/add_numbers.md)
- [verae-activate/creates/echo](verae-activate/creates/echo.md)
- [verae-activate/creates/sha256](verae-activate/creates/sha256.md)
- [verae-activate/creates/timestamp](verae-activate/creates/timestamp.md)
- [verae-activate/index](verae-activate/index.md)
- [verae-zapier/authentication](verae-zapier/authentication.md)
- [verae-zapier/creates/add_numbers](verae-zapier/creates/add_numbers.md)

View file

@ -0,0 +1,40 @@
# `verae-activate/creates/timestamp`
**Package:** `verae-activate`
**Source:** `packages/verae-activate/creates/timestamp.js`
**Lines:** 55
## What this module is
Implementation module in `verae-activate`. The tables below are extracted from the source (signatures + JSDoc).
## Exports
`key`, `noun`, `display`, `label`, `description`
## Types / interfaces / classes
_None extracted._
## Functions
| Name | Parameters | Param types (JSDoc) | Returns | Calls (same file / helpers) |
|------|------------|---------------------|---------|-----------------------------|
| `perform` | `z, bundle` | — | `unknown` | see Call graph |
## What it imports / requires
- `node:crypto`
## Call graph (identifiers invoked)
`async`, `replace`, `request`, `randomUUID`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.
## Return values (how to read this)
- HTTP route handlers return Express `res.json(...)` bodies (see route docs).
- Zapier `perform` functions return a **single object** (creates) or an **array** (triggers/searches).
- Pricing functions return integer **cents** on `Quote.totalCents`.

View file

@ -2,7 +2,7 @@
**Package:** `verae-activate`
**Source:** `packages/verae-activate/index.js`
**Lines:** 25
**Lines:** 27
## What this module is
@ -10,7 +10,7 @@ Implementation module in `verae-activate`. The tables below are extracted from t
## Exports
`version`, `platformVersion`, `authentication`, `creates`, `addNumbers`, `echo`, `sha256Hash`
`version`, `platformVersion`, `authentication`, `creates`, `addNumbers`, `echo`, `sha256Hash`, `createTimestamp`
## Types / interfaces / classes
@ -26,6 +26,7 @@ _No top-level functions extracted._
- `./creates/add_numbers`
- `./creates/echo`
- `./creates/sha256`
- `./creates/timestamp`
- `./package.json`
- `zapier-platform-core`

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/app.js`
**Lines:** 51
**Lines:** 56
## What this module is
@ -30,10 +30,12 @@ _None extracted._
- `./debug/trace.js`
- `./routes/index.js`
- `./store/db.js`
- `./config.js`
- `./nats/connection.js`
## Call graph (identifiers invoked)
`createDebugger`, `app`, `import`, `createApp`, `loadStore`, `express`, `disable`, `use`, `json`, `get`, `sendError`, `info`
`createDebugger`, `app`, `import`, `createApp`, `loadStore`, `express`, `disable`, `use`, `json`, `get`, `isNatsConnected`, `sendError`, `info`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/routes/objectRoutes.js`
**Lines:** 91
**Lines:** 126
## What this module is
@ -28,6 +28,8 @@ _No top-level functions extracted._
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
## What it imports / requires
@ -38,7 +40,7 @@ _No top-level functions extracted._
## Call graph (identifiers invoked)
`post`, `asyncHandler`, `async`, `from`, `createTimestamp`, `toString`, `slice`, `putBlob`, `status`, `json`, `get`, `readBlobPlaintext`, `createShare`, `redeemShare`
`post`, `asyncHandler`, `async`, `from`, `createTimestamp`, `toString`, `slice`, `putBlob`, `status`, `json`, `get`, `readBlobPlaintext`, `isArray`, `putTree`, `map`, `createTreeShare`, `createShare`, `redeemShare`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/store/blobs.js`
**Lines:** 137
**Lines:** 209
## What this module is
@ -10,7 +10,7 @@ Implementation module in `verae-zapier-middleware`. The tables below are extract
## Exports
`decryptBlob`, `putBlob`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`
`decryptBlob`, `putBlob`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`, `putTree`, `getTree`, `createTreeShare`
## Types / interfaces / classes
@ -28,6 +28,9 @@ _None extracted._
| `readBlobPlaintext` | `id, tenantId` | id: `string`, tenantId: `string` | `unknown` | see Call graph |
| `createShare` | `{ blobId, fromTenantId, label }` | — | `unknown` | see Call graph |
| `redeemShare` | `token` | token: `string` | `unknown` | see Call graph |
| `putTree` | `{ tenantId, prefix, files }` | — | `unknown` | see Call graph |
| `getTree` | `id` | — | `unknown` | see Call graph |
| `createTreeShare` | `{ treeId, fromTenantId, label }` | — | `unknown` | see Call graph |
## Methods (class / object)
@ -35,6 +38,8 @@ _None extracted._
|------|------------|
| `persist` | `(none)` |
| `persist` | `(none)` |
| `persist` | `(none)` |
| `persist` | `(none)` |
## What it imports / requires
@ -43,7 +48,7 @@ _None extracted._
## Call graph (identifiers invoked)
`ensure`, `getStore`, `encrypt`, `randomBytes`, `createCipheriv`, `concat`, `update`, `final`, `getAuthTag`, `toString`, `decryptBlob`, `createDecipheriv`, `from`, `setAuthTag`, `putBlob`, `randomUUID`, `toISOString`, `persist`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`
`ensure`, `getStore`, `encrypt`, `randomBytes`, `createCipheriv`, `concat`, `update`, `final`, `getAuthTag`, `toString`, `decryptBlob`, `createDecipheriv`, `from`, `setAuthTag`, `putBlob`, `randomUUID`, `toISOString`, `persist`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`, `map`, `putTree`, `split`, `pop`, `push`, `getTree`, `createTreeShare`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/store/db.js`
**Lines:** 117
**Lines:** 118
## What this module is

View file

@ -2,7 +2,7 @@
**Package:** `zappier`
**Source:** `packages/zappier/src/app.ts`
**Lines:** 237
**Lines:** 257
## What this module is

View file

@ -2,7 +2,7 @@
**Package:** `zappier`
**Source:** `packages/zappier/src/pricing.ts`
**Lines:** 173
**Lines:** 174
## What this module is

View file

@ -77,6 +77,7 @@ Verae × Zapier module reference
modules/verae-activate/creates/add_numbers
modules/verae-activate/creates/echo
modules/verae-activate/creates/sha256
modules/verae-activate/creates/timestamp
modules/verae-activate/index
modules/verae-zapier/authentication
modules/verae-zapier/creates/add_numbers

View file

@ -0,0 +1,40 @@
# `verae-activate/creates/timestamp`
**Package:** `verae-activate`
**Source:** `packages/verae-activate/creates/timestamp.js`
**Lines:** 55
## What this module is
Implementation module in `verae-activate`. The tables below are extracted from the source (signatures + JSDoc).
## Exports
`key`, `noun`, `display`, `label`, `description`
## Types / interfaces / classes
_None extracted._
## Functions
| Name | Parameters | Param types (JSDoc) | Returns | Calls (same file / helpers) |
|------|------------|---------------------|---------|-----------------------------|
| `perform` | `z, bundle` | — | `unknown` | see Call graph |
## What it imports / requires
- `node:crypto`
## Call graph (identifiers invoked)
`async`, `replace`, `request`, `randomUUID`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.
## Return values (how to read this)
- HTTP route handlers return Express `res.json(...)` bodies (see route docs).
- Zapier `perform` functions return a **single object** (creates) or an **array** (triggers/searches).
- Pricing functions return integer **cents** on `Quote.totalCents`.

View file

@ -0,0 +1,7 @@
verae-activate.creates.timestamp
================================
Generated API sheet for ``verae-activate/creates/timestamp``.
.. include:: timestamp.md
:literal:

View file

@ -2,7 +2,7 @@
**Package:** `verae-activate`
**Source:** `packages/verae-activate/index.js`
**Lines:** 25
**Lines:** 27
## What this module is
@ -10,7 +10,7 @@ Implementation module in `verae-activate`. The tables below are extracted from t
## Exports
`version`, `platformVersion`, `authentication`, `creates`, `addNumbers`, `echo`, `sha256Hash`
`version`, `platformVersion`, `authentication`, `creates`, `addNumbers`, `echo`, `sha256Hash`, `createTimestamp`
## Types / interfaces / classes
@ -26,6 +26,7 @@ _No top-level functions extracted._
- `./creates/add_numbers`
- `./creates/echo`
- `./creates/sha256`
- `./creates/timestamp`
- `./package.json`
- `zapier-platform-core`

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/app.js`
**Lines:** 51
**Lines:** 56
## What this module is
@ -30,10 +30,12 @@ _None extracted._
- `./debug/trace.js`
- `./routes/index.js`
- `./store/db.js`
- `./config.js`
- `./nats/connection.js`
## Call graph (identifiers invoked)
`createDebugger`, `app`, `import`, `createApp`, `loadStore`, `express`, `disable`, `use`, `json`, `get`, `sendError`, `info`
`createDebugger`, `app`, `import`, `createApp`, `loadStore`, `express`, `disable`, `use`, `json`, `get`, `isNatsConnected`, `sendError`, `info`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/routes/objectRoutes.js`
**Lines:** 91
**Lines:** 126
## What this module is
@ -28,6 +28,8 @@ _No top-level functions extracted._
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
| `asyncHandler` | `async (req, res` |
## What it imports / requires
@ -38,7 +40,7 @@ _No top-level functions extracted._
## Call graph (identifiers invoked)
`post`, `asyncHandler`, `async`, `from`, `createTimestamp`, `toString`, `slice`, `putBlob`, `status`, `json`, `get`, `readBlobPlaintext`, `createShare`, `redeemShare`
`post`, `asyncHandler`, `async`, `from`, `createTimestamp`, `toString`, `slice`, `putBlob`, `status`, `json`, `get`, `readBlobPlaintext`, `isArray`, `putTree`, `map`, `createTreeShare`, `createShare`, `redeemShare`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/store/blobs.js`
**Lines:** 137
**Lines:** 209
## What this module is
@ -10,7 +10,7 @@ Implementation module in `verae-zapier-middleware`. The tables below are extract
## Exports
`decryptBlob`, `putBlob`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`
`decryptBlob`, `putBlob`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`, `putTree`, `getTree`, `createTreeShare`
## Types / interfaces / classes
@ -28,6 +28,9 @@ _None extracted._
| `readBlobPlaintext` | `id, tenantId` | id: `string`, tenantId: `string` | `unknown` | see Call graph |
| `createShare` | `{ blobId, fromTenantId, label }` | — | `unknown` | see Call graph |
| `redeemShare` | `token` | token: `string` | `unknown` | see Call graph |
| `putTree` | `{ tenantId, prefix, files }` | — | `unknown` | see Call graph |
| `getTree` | `id` | — | `unknown` | see Call graph |
| `createTreeShare` | `{ treeId, fromTenantId, label }` | — | `unknown` | see Call graph |
## Methods (class / object)
@ -35,6 +38,8 @@ _None extracted._
|------|------------|
| `persist` | `(none)` |
| `persist` | `(none)` |
| `persist` | `(none)` |
| `persist` | `(none)` |
## What it imports / requires
@ -43,7 +48,7 @@ _None extracted._
## Call graph (identifiers invoked)
`ensure`, `getStore`, `encrypt`, `randomBytes`, `createCipheriv`, `concat`, `update`, `final`, `getAuthTag`, `toString`, `decryptBlob`, `createDecipheriv`, `from`, `setAuthTag`, `putBlob`, `randomUUID`, `toISOString`, `persist`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`
`ensure`, `getStore`, `encrypt`, `randomBytes`, `createCipheriv`, `concat`, `update`, `final`, `getAuthTag`, `toString`, `decryptBlob`, `createDecipheriv`, `from`, `setAuthTag`, `putBlob`, `randomUUID`, `toISOString`, `persist`, `getBlobRecord`, `readBlobPlaintext`, `createShare`, `redeemShare`, `map`, `putTree`, `split`, `pop`, `push`, `getTree`, `createTreeShare`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that modules MD for parameter and return types.

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/store/db.js`
**Lines:** 117
**Lines:** 118
## What this module is

View file

@ -2,7 +2,7 @@
**Package:** `zappier`
**Source:** `packages/zappier/src/app.ts`
**Lines:** 237
**Lines:** 257
## What this module is

View file

@ -2,7 +2,7 @@
**Package:** `zappier`
**Source:** `packages/zappier/src/pricing.ts`
**Lines:** 173
**Lines:** 174
## What this module is