Milestone 3: NATS wait (gate 9), hash lookup, zappier timestamp, NS1 tunnel

Wait-via-NATS returns completed or pending+jobId (GATE 9). Mock SHA256
idempotent register + GET /hashes/{sha256}. Zappier commercial edge has
POST /v1/timestamp and hash-lookup. GATE 12 smoke (signup + wait) passes.

NS1 NATS is 127.0.0.1:4222 on 70.88.205.138; SSH tunnel :14222. Local
nats-server -js used for isolated tests. Activate app adds Echo Text.

Learned: JetStream on NS1 is loopback-only; do not bind 4222 public.
This commit is contained in:
George Lambert 2026-09-09 02:54:02 -04:00
commit 51ae79b75f
75 changed files with 1114 additions and 123 deletions

View file

@ -13,6 +13,8 @@ They are **imported, not yet wired**. Public Zapier traffic should eventually hi
Original brief (features a–m): [docs/00-sources/workspace-brief.md](docs/00-sources/workspace-brief.md).
Where each tree came from: [docs/00-sources/provenance.md](docs/00-sources/provenance.md).
**Tomorrow morning:** [docs/04-activate/SETUP-ZAPIER-DEVELOPER.md](docs/04-activate/SETUP-ZAPIER-DEVELOPER.md) — create a Zapier developer account and push **Add Numbers**.
## Quick start
```bash
@ -36,6 +38,10 @@ Gates (`npm run gate:N`) continue the middleware plan in [TODO.md](TODO.md). Pha
| [docs/02-architecture/overview.md](docs/02-architecture/overview.md) | Adapter internals (imported) |
| [docs/03-zapier/operations.md](docs/03-zapier/operations.md) | Platform nouns |
| [research/README.md](research/README.md) | Imported Zapier vendor research |
| [docs/04-activate/SETUP-ZAPIER-DEVELOPER.md](docs/04-activate/SETUP-ZAPIER-DEVELOPER.md) | **Morning: Zapier developer account + push Add Numbers** |
| [docs/modules/README.md](docs/modules/README.md) | Per-module API sheets (params, callees, returns) |
| [docs/models/README.md](docs/models/README.md) | Data models |
| [docs/sphinx/_build/html/index.html](docs/sphinx/_build/html/index.html) | Sphinx HTML (rebuild: `npm run docs:sphinx`) |
## Environment (middleware)

18
TODO.md
View file

@ -378,10 +378,10 @@ npm run gate:8
### Tasks
- [ ] 9.1 API waits on job event (subscription or inbox) after enqueue watch
- [ ] 9.2 Hard timeout returns `{ jobId, status: "pending" }` (document Zapier fallback)
- [ ] 9.3 Tests: fast complete; timeout path; cancellation on client disconnect (if feasible)
- [ ] 9.4 Docs update: wait semantics, Zapier multi-step fallback
- [x] 9.1 API waits on job event (subscription or inbox) after enqueue watch
- [x] 9.2 Hard timeout returns `{ jobId, status: "pending" }` (document Zapier fallback)
- [x] 9.3 Tests: fast complete; timeout path; cancellation on client disconnect (if feasible)
- [x] 9.4 Docs update: wait semantics, Zapier multi-step fallback
### GATE 9 — Wait path
@ -399,7 +399,7 @@ npm run gate:9
| Date | Result | Notes |
|------|--------|-------|
| | | |
| 2026-09-09 | pass | wait via NATS + timeout pending; NS1 tunnel 70.88.205.138 |
---
@ -480,9 +480,9 @@ npm run gate:11
### Tasks
- [ ] 12.1 `docker-compose.yml`: middleware + NATS (+ optional mock Verae)
- [ ] 12.2 Compose smoke script: health, auth, timestamp wait, webhook
- [ ] 12.3 Debug mode runbook: reproduce a failed job with `DEBUG_VERAE=*`
- [x] 12.1 `docker-compose.yml`: middleware + NATS (+ optional mock Verae)
- [x] 12.2 Compose smoke script: health, auth, timestamp wait, webhook
- [x] 12.3 Debug mode runbook: reproduce a failed job with `DEBUG_VERAE=*`
- [ ] 12.4 Record sample traces in `docs/developer/debugging.md`
### GATE 12 — E2E local
@ -502,7 +502,7 @@ npm run gate:12
| Date | Result | Notes |
|------|--------|-------|
| | | |
| 2026-09-09 | pass | harness/scripts/smoke.sh health + signup + wait |
---

View file

@ -6,8 +6,8 @@ Source: [workspace-brief.md](../00-sources/workspace-brief.md). Owners after com
|----|------------|-------|-------------------------|--------------------|
| a | Customer gets own API key | zappier `/portal` signup + regen | Built (`x-api-key`) | No |
| b | Billing after usage limit | zappier meter + credit + portal reload + Stripe + admin PO | Built | No |
| c | Register SHA256 or return original timestamp + ref | verae middleware | Partial: `POST /zapier/v1/timestamp` → `jobId`. No idempotent hash key | `POST /api/timestamp` (`data`, `hashAlg`) → 202 `jobId` |
| d | Lookup by SHA256 | verae mock (later) | Missing | No (verify is certificate; status is jobId) |
| c | Register SHA256 or return original timestamp + ref | verae middleware mock + zappier `/v1/timestamp` | **Mock done** — second create returns original `jobId` + `existing: true` | Live OpenAPI still `data` only |
| d | Lookup by SHA256 | `GET /zapier/v1/hashes/{sha256}` and zappier `/v1/hashes/{sha256}` | **Mock done** | No live Verae route |
| e | Timestamp + public/private metadata | verae mock | Missing | No |
| f | e + encrypted LTS binary | verae mock | Missing. Do not use zappier demo `/v1/storage` | No |
| g | Share file/dir + decryption key | verae mock | Missing | No |

View file

@ -0,0 +1,21 @@
# NATS gateway
JetStream for job watch, events, and webhook delivery lives on **NS1** (`70.88.205.138`, host `NS1.GEORGELAMBERT.ORG`).
The client port is **not public**. `nats-server -js` listens on `127.0.0.1:4222` (monitoring `8222`) with JetStream enabled (NATS 2.11.17).
## Tunnel from this Mac
```bash
ssh -fN -L 14222:127.0.0.1:4222 marchon@70.88.205.138
export NATS_URL=nats://127.0.0.1:14222
export NATS_ENABLED=true
```
Local isolated tests use a laptop `nats-server -js -p 4222`.
## Streams created by middleware
`ZAPIER_JOBS`, `ZAPIER_EVENTS`, `ZAPIER_WEBHOOKS` (optional `ZAPIER_USAGE`).
Do not expose 4222 on `0.0.0.0` without auth; keep SSH tunnel or private network.

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**.
5. Choose action **Add Numbers** (or **Echo Text**).
6. Set **Number 1** = `2`, **Number 2** = `3`.
7. **Test step**. You want:

View file

@ -11,7 +11,13 @@ Running record of milestones. Ordered by dependency.
| M4 | Sphinx + PDF for every module + 10 models | M3 | done |
| M5 | Git checkin docs + lessons | M4 | this commit |
| M6 | Integration hardening (`/v1/add` on zappier, Add Numbers local) | M2 | done for activate-now |
| M7 | Ready-to-activate final checkin | M5 | this commit |
| M7 | Ready-to-activate final checkin | M5 | done `10c663c` |
| M8 | Phase 9 wait-via-NATS + tests | M7 | done |
| M9 | Phase 12 smoke | M8 | done |
| M10 | Hash idempotent register/lookup mock | M7 | done |
| M11 | Zappier /v1/timestamp + hash-lookup | M10 | done |
| M12 | NS1 NATS 70.88.205.138 via SSH tunnel | — | done |
| M13 | Echo action on activate app | M7 | done |
## Learned (M1)

View file

@ -37,7 +37,7 @@ endobj
endobj
7 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -68,7 +68,7 @@ xref
trailer
<<
/ID
[<e38cd4e3b12db9314a8a6cdfd05bcc34><e38cd4e3b12db9314a8a6cdfd05bcc34>]
[<2f955ee0641a9f5c09cc35b2e18cf0bf><2f955ee0641a9f5c09cc35b2e18cf0bf>]
% ReportLab generated PDF document -- digest (opensource)
/Info 7 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<eb33f0ae6981c12449e5508c1221d03d><eb33f0ae6981c12449e5508c1221d03d>]
[<9cae5edd3d4e0bcf06baee891a5999ff><9cae5edd3d4e0bcf06baee891a5999ff>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<e356e73e01b5bea5f656fc16dfd0b270><e356e73e01b5bea5f656fc16dfd0b270>]
[<e59336adb7766dc7e628986470cb6a9f><e59336adb7766dc7e628986470cb6a9f>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<08dab07d9f5bd9cd434cb151f6b84b52><08dab07d9f5bd9cd434cb151f6b84b52>]
[<19922f9449900f729a32c70fe4a164c4><19922f9449900f729a32c70fe4a164c4>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -37,7 +37,7 @@ endobj
endobj
7 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -68,7 +68,7 @@ xref
trailer
<<
/ID
[<73bc4dd8168535f5f72a61a3ae8226cb><73bc4dd8168535f5f72a61a3ae8226cb>]
[<1be202b4fec6e54a0454781367cd42da><1be202b4fec6e54a0454781367cd42da>]
% ReportLab generated PDF document -- digest (opensource)
/Info 7 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<fab0642124fc4550c20555ce3f6892e5><fab0642124fc4550c20555ce3f6892e5>]
[<d4a492432643ad2a4084a0f340f7142d><d4a492432643ad2a4084a0f340f7142d>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<8ee03c12859ca5bbdda2373d43becfb5><8ee03c12859ca5bbdda2373d43becfb5>]
[<30f5c8829cce51759bfaf173130abd2c><30f5c8829cce51759bfaf173130abd2c>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<7bcbdd69c5f87d3b17d28804fb2d17ec><7bcbdd69c5f87d3b17d28804fb2d17ec>]
[<c181c74e37ebeffdb7bb103101eba033><c181c74e37ebeffdb7bb103101eba033>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<15b24e6977023f8f031ff632a7b75f3a><15b24e6977023f8f031ff632a7b75f3a>]
[<b55af8c14874e3eb9c9101a8dd7fc1d9><b55af8c14874e3eb9c9101a8dd7fc1d9>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -32,7 +32,7 @@ endobj
endobj
6 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260909024418-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909024418-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Author (\(anonymous\)) /CreationDate (D:20260909025402-04'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260909025402-04'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
@ -62,7 +62,7 @@ xref
trailer
<<
/ID
[<6238e19d13481b62a4a5fa415f64c0ba><6238e19d13481b62a4a5fa415f64c0ba>]
[<14925b40184e6843f15b1b917d7c0c9c><14925b40184e6843f15b1b917d7c0c9c>]
% ReportLab generated PDF document -- digest (opensource)
/Info 6 0 R

View file

@ -43,7 +43,9 @@ One MD file per source module.
- [verae-zapier-middleware/nats/connection](verae-zapier-middleware/nats/connection.md)
- [verae-zapier-middleware/nats/publishers](verae-zapier-middleware/nats/publishers.md)
- [verae-zapier-middleware/nats/subjects](verae-zapier-middleware/nats/subjects.md)
- [verae-zapier-middleware/nats/wait](verae-zapier-middleware/nats/wait.md)
- [verae-zapier-middleware/routes/authRoutes](verae-zapier-middleware/routes/authRoutes.md)
- [verae-zapier-middleware/routes/hashRoutes](verae-zapier-middleware/routes/hashRoutes.md)
- [verae-zapier-middleware/routes/index](verae-zapier-middleware/routes/index.md)
- [verae-zapier-middleware/routes/statusRoutes](verae-zapier-middleware/routes/statusRoutes.md)
- [verae-zapier-middleware/routes/tenantRoutes](verae-zapier-middleware/routes/tenantRoutes.md)
@ -66,6 +68,7 @@ One MD file per source module.
- [verae-zapier-middleware/workers/webhookWorker](verae-zapier-middleware/workers/webhookWorker.md)
- [verae-activate/authentication](verae-activate/authentication.md)
- [verae-activate/creates/add_numbers](verae-activate/creates/add_numbers.md)
- [verae-activate/creates/echo](verae-activate/creates/echo.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)
@ -74,5 +77,6 @@ One MD file per source module.
- [verae-zapier/creates/timestamp_and_wait](verae-zapier/creates/timestamp_and_wait.md)
- [verae-zapier/creates/verify_timestamp](verae-zapier/creates/verify_timestamp.md)
- [verae-zapier/index](verae-zapier/index.md)
- [verae-zapier/searches/hash_lookup](verae-zapier/searches/hash_lookup.md)
- [verae-zapier/searches/job_status](verae-zapier/searches/job_status.md)
- [verae-zapier/triggers/timestamp_completed](verae-zapier/triggers/timestamp_completed.md)

View file

@ -0,0 +1,40 @@
# `verae-activate/creates/echo`
**Package:** `verae-activate`
**Source:** `packages/verae-activate/creates/echo.js`
**Lines:** 30
## 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
_No imports detected._
## Call graph (identifiers invoked)
`action`, `async`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that module’s 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:** 21
**Lines:** 23
## 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`
`version`, `platformVersion`, `authentication`, `creates`, `addNumbers`, `echo`
## Types / interfaces / classes
@ -24,6 +24,7 @@ _No top-level functions extracted._
- `./authentication`
- `./creates/add_numbers`
- `./creates/echo`
- `./package.json`
- `zapier-platform-core`

View file

@ -2,7 +2,7 @@
**Package:** `verae-zapier-middleware`
**Source:** `packages/verae-zapier-middleware/src/clients/veraeClient.js`
**Lines:** 288
**Lines:** 351
## What this module is
@ -10,7 +10,7 @@ Implementation module in `verae-zapier-middleware`. The tables below are extract
## Exports
`veraeClient`, `clearMockJobs`
`sha256Hex`, `veraeClient`, `clearMockJobs`
## Types / interfaces / classes
@ -20,11 +20,13 @@ _None extracted._
| Name | Parameters | Param types (JSDoc) | Returns | Calls (same file / helpers) |
|------|------------|---------------------|---------|-----------------------------|
| `sha256Hex` | `data` | data: `string` | `string` | see Call graph |
| `delay` | `ms` | ms: `number` | `Promise<void>` | see Call graph |
| `mockLogin` | `{ username, password }` | ms: `number` | `Promise<void>` | see Call graph |
| `mockValidate` | `token` | — | `unknown` | see Call graph |
| `mockCreateTimestamp` | `{ data, hashAlg }` | — | `unknown` | see Call graph |
| `mockCreateTimestamp` | `{ data, hashAlg, sha256, publicMetadata, privateMetadata }` | — | `unknown` | see Call graph |
| `mockGetStatus` | `jobId` | — | `unknown` | see Call graph |
| `mockLookupHash` | `sha256` | — | `unknown` | see Call graph |
| `mockVerify` | `{ certificate }` | — | `unknown` | see Call graph |
| `request` | `path, { method = 'GET', token, body } = {}` | path: `string` | `Promise<any>` | see Call graph |
| `clearMockJobs` | `(none)` | — | `void` | see Call graph |
@ -37,6 +39,7 @@ _None extracted._
| `login` | `credentials` |
| `validate` | `token` |
| `createTimestamp` | `token, body` |
| `lookupHash` | `token, sha256` |
| `createBatchTimestamp` | `token, body` |
| `getStatus` | `token, jobId` |
| `getBatchStatus` | `token, body` |
@ -54,7 +57,7 @@ _None extracted._
## Call graph (identifiers invoked)
`net`, `createDebugger`, `delay`, `setTimeout`, `mockLogin`, `now`, `toISOString`, `randomUUID`, `includes`, `mockValidate`, `startsWith`, `replace`, `mockCreateTimestamp`, `set`, `get`, `mockGetStatus`, `mockVerify`, `request`, `debug`, `fetch`, `stringify`, `text`, `parse`, `error`, `client`, `login`, `validate`, `createTimestamp`, `createBatchTimestamp`, `push`, `getStatus`, `encodeURIComponent`, `getBatchStatus`, `verify`, `verifyBatch`, `getJobVerification`, `waitForJob`, `jobs`, `clearMockJobs`, `clear`
`net`, `createDebugger`, `sha256Hex`, `createHash`, `update`, `digest`, `delay`, `setTimeout`, `mockLogin`, `now`, `toISOString`, `randomUUID`, `includes`, `mockValidate`, `startsWith`, `replace`, `mockCreateTimestamp`, `toLowerCase`, `get`, `set`, `mockGetStatus`, `mockLookupHash`, `mockVerify`, `request`, `debug`, `fetch`, `stringify`, `text`, `parse`, `error`, `client`, `login`, `validate`, `createTimestamp`, `lookupHash`, `createBatchTimestamp`, `push`, `getStatus`, `encodeURIComponent`, `getBatchStatus`, `verify`, `verifyBatch`, `getJobVerification`, `waitForJob`, `jobs`, `clearMockJobs`, `clear`
Each identifier is a call site in this file. Follow the import list to see the defining module; open that module’s MD for parameter and return types.

Some files were not shown because too many files have changed in this diff Show more