Milestone 0: import zappier billing, Verae middleware, and Zapier research

Compose-ready workspace: packages/zappier (rate card, portal, Stripe),
packages/verae-zapier-middleware (timestamp + NATS), packages/verae-zapier
(CLI app), vendor/zapier-platform, and research/zapier vendor corpus.

Gate 0 structure checks pass. Product code and research are not yet wired.
This commit is contained in:
George Lambert 2026-09-09 02:37:36 -04:00
commit b4150c8250
1364 changed files with 6814366 additions and 0 deletions

View file

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1100" height="640"
viewBox="0 0 1100 640" role="img" aria-label="Zapier operations mapped to middleware and Verae">
<title>Zapier operations mapped to middleware and Verae</title>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5"
markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#1A6B6B"/>
</marker>
<marker id="arrow-navy" viewBox="0 0 10 10" refX="9" refY="5"
markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#0F2744"/>
</marker>
<marker id="arrow-accent" viewBox="0 0 10 10" refX="9" refY="5"
markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#C2410C"/>
</marker>
</defs>
<rect width="100%" height="100%" fill="#F8FAFC"/>
<text x="24" y="28" font-family="Helvetica, Arial, sans-serif" font-size="11" font-weight="700" fill="#1A6B6B" text-anchor="start">OPERATIONS MAP</text>
<text x="24" y="50" font-family="Helvetica, Arial, sans-serif" font-size="20" font-weight="700" fill="#0F2744" text-anchor="start">Connector → /zapier/v1 → Verae wrap</text>
<rect x="20" y="78" width="1060" height="36" rx="0" fill="#0F2744" fill-opacity="1" stroke="#0F2744" stroke-width="1.4"/>
<text x="40" y="101" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="700" fill="#FFFFFF" text-anchor="start">Zapier</text>
<text x="280" y="101" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="700" fill="#FFFFFF" text-anchor="start">Type</text>
<text x="400" y="101" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="700" fill="#FFFFFF" text-anchor="start">Middleware</text>
<text x="700" y="101" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="700" fill="#FFFFFF" text-anchor="start">Verae</text>
<rect x="20" y="114" width="1060" height="52" rx="0" fill="#FFFFFF" fill-opacity="1" stroke="#94A3B8" stroke-width="0.6"/>
<text x="40" y="146" font-family="Helvetica, Arial, sans-serif" font-size="13" font-weight="600" fill="#0F2744" text-anchor="start">Create Timestamp</text>
<text x="280" y="146" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">create</text>
<text x="400" y="146" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="600" fill="#134848" text-anchor="start">POST /timestamp</text>
<text x="700" y="146" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">POST /api/timestamp → 202 jobId</text>
<rect x="20" y="166" width="1060" height="52" rx="0" fill="#EEF2F6" fill-opacity="1" stroke="#94A3B8" stroke-width="0.6"/>
<text x="40" y="198" font-family="Helvetica, Arial, sans-serif" font-size="13" font-weight="600" fill="#0F2744" text-anchor="start">Create Timestamp and Wait</text>
<text x="280" y="198" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">create</text>
<text x="400" y="198" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="600" fill="#134848" text-anchor="start">POST /timestamp/wait</text>
<text x="700" y="198" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">create + poll / wait</text>
<rect x="20" y="218" width="1060" height="52" rx="0" fill="#FFFFFF" fill-opacity="1" stroke="#94A3B8" stroke-width="0.6"/>
<text x="40" y="250" font-family="Helvetica, Arial, sans-serif" font-size="13" font-weight="600" fill="#0F2744" text-anchor="start">Create Batch Timestamps</text>
<text x="280" y="250" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">create</text>
<text x="400" y="250" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="600" fill="#134848" text-anchor="start">POST /timestamp/batch</text>
<text x="700" y="250" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">POST /api/batch/timestamp</text>
<rect x="20" y="270" width="1060" height="52" rx="0" fill="#EEF2F6" fill-opacity="1" stroke="#94A3B8" stroke-width="0.6"/>
<text x="40" y="302" font-family="Helvetica, Arial, sans-serif" font-size="13" font-weight="600" fill="#0F2744" text-anchor="start">Verify Certificate</text>
<text x="280" y="302" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">create</text>
<text x="400" y="302" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="600" fill="#134848" text-anchor="start">POST /verify</text>
<text x="700" y="302" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">POST /api/verify</text>
<rect x="20" y="322" width="1060" height="52" rx="0" fill="#FFFFFF" fill-opacity="1" stroke="#94A3B8" stroke-width="0.6"/>
<text x="40" y="354" font-family="Helvetica, Arial, sans-serif" font-size="13" font-weight="600" fill="#0F2744" text-anchor="start">Find Job Status</text>
<text x="280" y="354" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">search</text>
<text x="400" y="354" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="600" fill="#134848" text-anchor="start">GET /status/{jobId}</text>
<text x="700" y="354" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">GET /api/status/{jobId}</text>
<rect x="20" y="374" width="1060" height="52" rx="0" fill="#EEF2F6" fill-opacity="1" stroke="#94A3B8" stroke-width="0.6"/>
<text x="40" y="406" font-family="Helvetica, Arial, sans-serif" font-size="13" font-weight="600" fill="#0F2744" text-anchor="start">Find Job Verification</text>
<text x="280" y="406" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">search (TS)</text>
<text x="400" y="406" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="600" fill="#134848" text-anchor="start">GET /status/{jobId}/verification</text>
<text x="700" y="406" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">GET /api/verify/{jobId}</text>
<rect x="20" y="426" width="1060" height="52" rx="0" fill="#FFFFFF" fill-opacity="1" stroke="#94A3B8" stroke-width="0.6"/>
<text x="40" y="458" font-family="Helvetica, Arial, sans-serif" font-size="13" font-weight="600" fill="#0F2744" text-anchor="start">Timestamp Completed</text>
<text x="280" y="458" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">hook</text>
<text x="400" y="458" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="600" fill="#134848" text-anchor="start">POST /webhooks/subscribe</text>
<text x="700" y="458" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#334155" text-anchor="start">(no Verae hook — middleware stores targetUrl)</text>
<text x="24" y="500" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="500" fill="#64748B" text-anchor="start">Creates return one object. Searches and hook perform return arrays. 404 on status search → [].</text>
<rect x="20" y="520" width="340" height="96" rx="8" fill="#FFF1E6" fill-opacity="1" stroke="#F0D2B8" stroke-width="1.4"/>
<text x="36" y="546" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="700" fill="#C2410C" text-anchor="start">Zapier cloud</text>
<text x="36" y="566" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="400" fill="#334155" text-anchor="start">scratch/veraetime</text>
<text x="36" y="580" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="400" fill="#334155" text-anchor="start">or verae-zapier</text>
<rect x="390" y="520" width="340" height="96" rx="8" fill="#E8F1F8" fill-opacity="1" stroke="#C5D6E8" stroke-width="1.4"/>
<text x="406" y="546" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="700" fill="#1A6B6B" text-anchor="start">Middleware :3100</text>
<text x="406" y="566" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="400" fill="#334155" text-anchor="start">api_base_url / MIDDLEWARE_BASE_URL</text>
<text x="406" y="580" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="400" fill="#334155" text-anchor="start">never api.veraetime.net from Zapier</text>
<rect x="760" y="520" width="320" height="96" rx="8" fill="#E8F6EE" fill-opacity="1" stroke="#B7DCC7" stroke-width="1.4"/>
<text x="776" y="546" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="700" fill="#15803D" text-anchor="start">Verae API</text>
<text x="776" y="566" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="400" fill="#334155" text-anchor="start">JWT server-side only</text>
<text x="776" y="580" font-family="Helvetica, Arial, sans-serif" font-size="12" font-weight="400" fill="#334155" text-anchor="start">OpenAPI in scratch/our-api/</text>
<line x1="360" y1="568" x2="390" y2="568" stroke="#1A6B6B" stroke-width="1.8" marker-end="url(#arrow)"/>
<line x1="730" y1="568" x2="760" y2="568" stroke="#1A6B6B" stroke-width="1.8" marker-end="url(#arrow)"/>
</svg>

After

Width:  |  Height:  |  Size: 9.5 KiB