settld 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +2 -2
- package/docs/CONFIG.md +12 -0
- package/docs/README.md +3 -0
- package/docs/ops/HOSTED_BASELINE_R2.md +4 -2
- package/docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md +19 -7
- package/docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md +8 -3
- package/package.json +4 -1
- package/packages/api-sdk/README.md +71 -0
- package/packages/api-sdk/src/client.js +1021 -0
- package/packages/api-sdk/src/express-middleware.js +163 -0
- package/packages/api-sdk/src/index.d.ts +1662 -0
- package/packages/api-sdk/src/index.js +10 -0
- package/packages/api-sdk/src/webhook-signature.js +182 -0
- package/packages/api-sdk/src/x402-autopay.js +210 -0
- package/scripts/ci/cli-pack-smoke.mjs +2 -0
- package/scripts/ci/run-public-onboarding-gate.mjs +136 -0
- package/scripts/setup/login.mjs +73 -2
- package/scripts/setup/onboard.mjs +173 -28
- package/scripts/setup/onboarding-failure-taxonomy.mjs +107 -0
- package/scripts/setup/onboarding-state-machine.mjs +102 -0
- package/services/magic-link/README.md +352 -0
- package/services/magic-link/assets/samples/closepack/known-bad/acceptance/acceptance_criteria.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/acceptance/acceptance_evaluation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/attestation/bundle_head_attestation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/evidence/evidence_index.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/governance/policy.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/governance/revocations.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/manifest.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/attestation/bundle_head_attestation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/governance/policy.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/governance/revocations.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/invoice/invoice_claim.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/manifest.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/metering/metering_report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl +0 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl +0 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/manifest.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/verify/report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/pricing/pricing_matrix.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/pricing/pricing_matrix_signatures.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/settld.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/verify/verification_report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/settld.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/sla/sla_definition.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/sla/sla_evaluation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-bad/verify/verification_report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/acceptance/acceptance_criteria.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/acceptance/acceptance_evaluation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/attestation/bundle_head_attestation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/evidence/evidence_index.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/governance/policy.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/governance/revocations.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/manifest.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/attestation/bundle_head_attestation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/governance/policy.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/governance/revocations.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/invoice/invoice_claim.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/manifest.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/metering/metering_report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl +0 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl +0 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/manifest.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/verify/report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/pricing/pricing_matrix.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/pricing/pricing_matrix_signatures.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/settld.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/verify/verification_report.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/settld.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/sla/sla_definition.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/sla/sla_evaluation.json +1 -0
- package/services/magic-link/assets/samples/closepack/known-good/verify/verification_report.json +1 -0
- package/services/magic-link/assets/samples/trust.json +11 -0
- package/services/magic-link/src/audit-log.js +24 -0
- package/services/magic-link/src/buyer-auth.js +251 -0
- package/services/magic-link/src/buyer-notifications.js +402 -0
- package/services/magic-link/src/buyer-users.js +129 -0
- package/services/magic-link/src/decision-otp.js +187 -0
- package/services/magic-link/src/decisions.js +92 -0
- package/services/magic-link/src/email-resend.js +89 -0
- package/services/magic-link/src/ingest-keys.js +137 -0
- package/services/magic-link/src/maintenance.js +95 -0
- package/services/magic-link/src/onboarding-email-sequence.js +331 -0
- package/services/magic-link/src/payment-triggers.js +733 -0
- package/services/magic-link/src/pdf.js +149 -0
- package/services/magic-link/src/policy.js +69 -0
- package/services/magic-link/src/redaction.js +6 -0
- package/services/magic-link/src/render-model.js +70 -0
- package/services/magic-link/src/retention-gc.js +158 -0
- package/services/magic-link/src/run-records.js +496 -0
- package/services/magic-link/src/s3.js +171 -0
- package/services/magic-link/src/server.js +15849 -0
- package/services/magic-link/src/settlement-decisions.js +84 -0
- package/services/magic-link/src/smtp.js +217 -0
- package/services/magic-link/src/storage-cli.js +88 -0
- package/services/magic-link/src/storage-format.js +59 -0
- package/services/magic-link/src/tenant-billing.js +115 -0
- package/services/magic-link/src/tenant-onboarding.js +467 -0
- package/services/magic-link/src/tenant-settings.js +1140 -0
- package/services/magic-link/src/usage.js +80 -0
- package/services/magic-link/src/verify-queue.js +179 -0
- package/services/magic-link/src/verify-worker.js +157 -0
- package/services/magic-link/src/webhook-retries.js +542 -0
- package/services/magic-link/src/webhooks.js +218 -0
- package/src/api/app.js +135 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
# Magic Link (hosted verifier MVP)
|
|
2
|
+
|
|
3
|
+
This service provides a minimal “Magic Link” hosted verifier for `InvoiceBundle.v1` (and `ClosePack.v1`) uploads:
|
|
4
|
+
|
|
5
|
+
- Upload a bundle zip
|
|
6
|
+
- Run strict or compat verification server-side (`mode=strict|compat|auto`)
|
|
7
|
+
- Serve a view-only HTML report page
|
|
8
|
+
- Expose onboarding wizard APIs for SLA templates + tenant-scoped uploads
|
|
9
|
+
- Allow downloads of:
|
|
10
|
+
- original bundle zip
|
|
11
|
+
- hosted `VerifyCliOutput.v1` JSON
|
|
12
|
+
- producer receipt (if present in bundle)
|
|
13
|
+
- PDF summary (non-normative)
|
|
14
|
+
- audit packet zip (bundle + outputs)
|
|
15
|
+
- approval closepack zip (`/r/:token/closepack.zip`, once approved)
|
|
16
|
+
|
|
17
|
+
## Run
|
|
18
|
+
|
|
19
|
+
Requirements:
|
|
20
|
+
|
|
21
|
+
- `SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON` is required for `mode=strict` (optional for `mode=compat` / `mode=auto`)
|
|
22
|
+
- Node.js (repo toolchain)
|
|
23
|
+
|
|
24
|
+
Example:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
export MAGIC_LINK_HOST=127.0.0.1 # set 0.0.0.0 in prod
|
|
28
|
+
export MAGIC_LINK_PORT=8787
|
|
29
|
+
export MAGIC_LINK_API_KEY='dev_key'
|
|
30
|
+
export MAGIC_LINK_DATA_DIR=/tmp/settld-magic-link # dev only; use a persistent volume path in production
|
|
31
|
+
export MAGIC_LINK_REQUIRE_DURABLE_DATA_DIR=0 # set 1 in production to fail fast on ephemeral paths
|
|
32
|
+
export MAGIC_LINK_VERIFY_TIMEOUT_MS=60000
|
|
33
|
+
export MAGIC_LINK_RATE_LIMIT_UPLOADS_PER_HOUR=100
|
|
34
|
+
export MAGIC_LINK_VERIFY_QUEUE_WORKERS=2
|
|
35
|
+
export MAGIC_LINK_VERIFY_QUEUE_MAX_ATTEMPTS=3
|
|
36
|
+
export MAGIC_LINK_VERIFY_QUEUE_RETRY_BACKOFF_MS=250
|
|
37
|
+
export MAGIC_LINK_PAYMENT_TRIGGER_RETRY_INTERVAL_MS=2000
|
|
38
|
+
export MAGIC_LINK_PAYMENT_TRIGGER_MAX_ATTEMPTS=5
|
|
39
|
+
export MAGIC_LINK_PAYMENT_TRIGGER_RETRY_BACKOFF_MS=5000
|
|
40
|
+
export MAGIC_LINK_WEBHOOK_MAX_ATTEMPTS=3
|
|
41
|
+
export MAGIC_LINK_WEBHOOK_RETRY_BACKOFF_MS=250
|
|
42
|
+
export MAGIC_LINK_WEBHOOK_RETRY_INTERVAL_MS=2000
|
|
43
|
+
export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_THRESHOLD=10
|
|
44
|
+
export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_TARGETS='slack,zapier,defaultRelay,internal'
|
|
45
|
+
export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_URL='https://ops.example.com/hooks/settld-alerts'
|
|
46
|
+
export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_SECRET='whsec_ops_alerts'
|
|
47
|
+
export MAGIC_LINK_DEFAULT_EVENT_RELAY_URL='https://relay.example.com/settld-events'
|
|
48
|
+
export MAGIC_LINK_DEFAULT_EVENT_RELAY_SECRET='whsec_shared_relay_secret'
|
|
49
|
+
export MAGIC_LINK_INTEGRATION_OAUTH_STATE_TTL_SECONDS=900
|
|
50
|
+
export MAGIC_LINK_INTEGRATION_OAUTH_HTTP_TIMEOUT_MS=10000
|
|
51
|
+
export MAGIC_LINK_SLACK_OAUTH_CLIENT_ID='123456.123456'
|
|
52
|
+
export MAGIC_LINK_SLACK_OAUTH_CLIENT_SECRET='slack_client_secret'
|
|
53
|
+
export MAGIC_LINK_SLACK_OAUTH_SCOPES='incoming-webhook'
|
|
54
|
+
export MAGIC_LINK_ZAPIER_OAUTH_CLIENT_ID='zapier_client_id'
|
|
55
|
+
export MAGIC_LINK_ZAPIER_OAUTH_CLIENT_SECRET='zapier_client_secret'
|
|
56
|
+
export MAGIC_LINK_ZAPIER_OAUTH_AUTHORIZE_URL='https://example.zapier.app/oauth/authorize'
|
|
57
|
+
export MAGIC_LINK_ZAPIER_OAUTH_TOKEN_URL='https://example.zapier.app/oauth/token'
|
|
58
|
+
export MAGIC_LINK_ZAPIER_OAUTH_WEBHOOK_FIELD='webhookUrl'
|
|
59
|
+
export MAGIC_LINK_BUYER_OTP_DELIVERY_MODE=record # record|log|smtp
|
|
60
|
+
export MAGIC_LINK_DECISION_OTP_DELIVERY_MODE=record # record|log|smtp
|
|
61
|
+
|
|
62
|
+
# Required for strict verification:
|
|
63
|
+
export SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON='{"key_...":"-----BEGIN PUBLIC KEY-----\\n..."}'
|
|
64
|
+
|
|
65
|
+
node services/magic-link/src/server.js
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Optional DB-backed run metadata control plane:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
export MAGIC_LINK_RUN_STORE_MODE=dual # fs|dual|db
|
|
72
|
+
export MAGIC_LINK_RUN_STORE_DATABASE_URL='postgres://user:pass@host:5432/db'
|
|
73
|
+
# one-time migration (copies existing runs/* metadata into Postgres):
|
|
74
|
+
node scripts/magic-link/migrate-run-records-to-db.mjs
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`GET /v1/inbox` reads run records first (DB/FS per `MAGIC_LINK_RUN_STORE_MODE`) and falls back to legacy index/meta files for older runs.
|
|
78
|
+
|
|
79
|
+
## OTP delivery (buyer login + decision approvals)
|
|
80
|
+
|
|
81
|
+
Magic Link can deliver OTP codes in three modes:
|
|
82
|
+
|
|
83
|
+
- `record` (default): write OTPs to an on-disk outbox under `MAGIC_LINK_DATA_DIR` (dev/testing)
|
|
84
|
+
- `log`: log OTP codes to stdout (dev only)
|
|
85
|
+
- `smtp`: send OTP codes via SMTP (production)
|
|
86
|
+
- `resend`: send OTP codes via Resend HTTPS API (recommended on hosts where SMTP egress is restricted)
|
|
87
|
+
|
|
88
|
+
Env vars:
|
|
89
|
+
|
|
90
|
+
- `MAGIC_LINK_BUYER_OTP_DELIVERY_MODE=record|log|smtp|resend`
|
|
91
|
+
- `MAGIC_LINK_DECISION_OTP_DELIVERY_MODE=record|log|smtp|resend`
|
|
92
|
+
|
|
93
|
+
SMTP config (required for `smtp` mode):
|
|
94
|
+
|
|
95
|
+
- `MAGIC_LINK_SMTP_HOST`
|
|
96
|
+
- `MAGIC_LINK_SMTP_PORT` (default `587`)
|
|
97
|
+
- `MAGIC_LINK_SMTP_SECURE=1|0` (default `0`; set `1` for SMTPS/465)
|
|
98
|
+
- `MAGIC_LINK_SMTP_STARTTLS=1|0` (default `1`; ignored when `SECURE=1`)
|
|
99
|
+
- `MAGIC_LINK_SMTP_USER`, `MAGIC_LINK_SMTP_PASS` (optional; enables `AUTH PLAIN`)
|
|
100
|
+
- `MAGIC_LINK_SMTP_FROM` (required when `MAGIC_LINK_SMTP_HOST` is set; use bare email for envelope sender, e.g. `ops@settld.work`)
|
|
101
|
+
|
|
102
|
+
Resend config (required for `resend` mode):
|
|
103
|
+
|
|
104
|
+
- `MAGIC_LINK_RESEND_API_KEY`
|
|
105
|
+
- `MAGIC_LINK_RESEND_FROM` (verified sender, e.g. `onboarding@settld.work`)
|
|
106
|
+
- `MAGIC_LINK_RESEND_BASE_URL` (optional, default `https://api.resend.com`)
|
|
107
|
+
|
|
108
|
+
## Data dir format + upgrades
|
|
109
|
+
|
|
110
|
+
Magic Link persists state under `MAGIC_LINK_DATA_DIR`. A small format marker is stored at:
|
|
111
|
+
|
|
112
|
+
- `format.json` (`schemaVersion: MagicLinkDataFormat.v1`)
|
|
113
|
+
|
|
114
|
+
On startup, Magic Link can initialize/migrate this marker (default: enabled):
|
|
115
|
+
|
|
116
|
+
- `MAGIC_LINK_MIGRATE_ON_STARTUP=1` (default)
|
|
117
|
+
- `MAGIC_LINK_REQUIRE_DURABLE_DATA_DIR=1|0` (default `0`; set `1` in production to block startup when `MAGIC_LINK_DATA_DIR` points to `/tmp`)
|
|
118
|
+
|
|
119
|
+
You can also run an explicit check/migrate command without starting the server:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
node services/magic-link/src/storage-cli.js check --data-dir /path/to/data
|
|
123
|
+
node services/magic-link/src/storage-cli.js migrate --data-dir /path/to/data
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Ops endpoints
|
|
127
|
+
|
|
128
|
+
- `GET /health` and `GET /healthz` (liveness/readiness + storage format signal)
|
|
129
|
+
- `GET /metrics` (Prometheus text format)
|
|
130
|
+
|
|
131
|
+
Supportability:
|
|
132
|
+
|
|
133
|
+
- `GET /v1/tenants/:tenant/support-bundle?from=…&to=…` (zip export for debugging without SSH)
|
|
134
|
+
|
|
135
|
+
Upload:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
curl -sS -X POST \
|
|
139
|
+
-H "x-api-key: dev_key" \
|
|
140
|
+
-H "x-tenant-id: tenant_example" \
|
|
141
|
+
--data-binary @InvoiceBundle.v1.zip \
|
|
142
|
+
"http://localhost:8787/v1/upload?mode=auto"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Upload via CLI:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
export MAGIC_LINK_API_KEY='dev_key'
|
|
149
|
+
node packages/magic-link-cli/bin/settld-magic-link.js upload InvoiceBundle.v1.zip --url http://localhost:8787 --mode auto --tenant tenant_example
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Wizard + template APIs:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
156
|
+
"http://localhost:8787/v1/tenants/tenant_example/sla-templates"
|
|
157
|
+
|
|
158
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
159
|
+
--data '{"templateId":"delivery_standard_v1","overrides":{"metrics":{"targetCompletionMinutes":45}}}' \
|
|
160
|
+
"http://localhost:8787/v1/tenants/tenant_example/sla-templates/render"
|
|
161
|
+
|
|
162
|
+
curl -sS -X POST -H "x-api-key: dev_key" --data-binary @InvoiceBundle.v1.zip \
|
|
163
|
+
"http://localhost:8787/v1/tenants/tenant_example/upload?mode=auto&vendorId=vendor_a&contractId=contract_1"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Self-service tenant bootstrap + onboarding metrics:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
170
|
+
--data '{"name":"Acme Agent Ops","contactEmail":"ops@acme.example","billingEmail":"billing@acme.example"}' \
|
|
171
|
+
"http://localhost:8787/v1/tenants"
|
|
172
|
+
|
|
173
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
174
|
+
"http://localhost:8787/v1/tenants/<tenantId>/onboarding-metrics"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Integrations (self-serve Slack + Zapier):
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Open browser UI (admin auth required):
|
|
181
|
+
http://localhost:8787/v1/tenants/<tenantId>/integrations
|
|
182
|
+
|
|
183
|
+
# JSON state
|
|
184
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
185
|
+
"http://localhost:8787/v1/tenants/<tenantId>/integrations/state"
|
|
186
|
+
|
|
187
|
+
# OAuth click-connect start (browser redirect):
|
|
188
|
+
http://localhost:8787/v1/tenants/<tenantId>/integrations/slack/oauth/start
|
|
189
|
+
http://localhost:8787/v1/tenants/<tenantId>/integrations/zapier/oauth/start
|
|
190
|
+
|
|
191
|
+
# OAuth callback routes (provider redirects here):
|
|
192
|
+
# /v1/integrations/slack/oauth/callback
|
|
193
|
+
# /v1/integrations/zapier/oauth/callback
|
|
194
|
+
|
|
195
|
+
# Connect Slack incoming webhook
|
|
196
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
197
|
+
--data '{"webhookUrl":"https://hooks.slack.com/services/T000/B000/XXXXX"}' \
|
|
198
|
+
"http://localhost:8787/v1/tenants/<tenantId>/integrations/slack/connect"
|
|
199
|
+
|
|
200
|
+
# Connect Zapier catch hook
|
|
201
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
202
|
+
--data '{"webhookUrl":"https://hooks.zapier.com/hooks/catch/123456/abcdef/"}' \
|
|
203
|
+
"http://localhost:8787/v1/tenants/<tenantId>/integrations/zapier/connect"
|
|
204
|
+
|
|
205
|
+
# Send a signed test event to a connected integration
|
|
206
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
207
|
+
--data '{"event":"verification.completed"}' \
|
|
208
|
+
"http://localhost:8787/v1/tenants/<tenantId>/integrations/slack/test-send"
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Admin revoke:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
curl -sS -X POST \
|
|
215
|
+
-H "x-api-key: dev_key" \
|
|
216
|
+
-H "content-type: application/json" \
|
|
217
|
+
--data '{"token":"ml_...","reason":"optional"}' \
|
|
218
|
+
http://localhost:8787/v1/revoke
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Buyer inbox + vendor ingest
|
|
222
|
+
|
|
223
|
+
List runs (filters: `status`, `vendorId`, `contractId`, `from`, `to`, `limit`):
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
curl -sS \
|
|
227
|
+
-H "x-api-key: dev_key" \
|
|
228
|
+
-H "x-tenant-id: tenant_example" \
|
|
229
|
+
"http://localhost:8787/v1/inbox?status=green"
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Create a vendor-scoped ingest key (upload-only):
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
curl -sS -X POST \
|
|
236
|
+
-H "x-api-key: dev_key" \
|
|
237
|
+
http://localhost:8787/v1/tenants/tenant_example/vendors/vendor_a/ingest-keys
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Vendor upload using the ingest key (stamps `vendorId` from the key):
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
curl -sS -X POST \
|
|
244
|
+
-H "authorization: Bearer igk_..." \
|
|
245
|
+
--data-binary @InvoiceBundle.v1.zip \
|
|
246
|
+
"http://localhost:8787/v1/ingest/tenant_example?mode=auto&contractId=contract_1"
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Monthly exports:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
253
|
+
"http://localhost:8787/v1/tenants/tenant_example/export.csv?month=2026-02"
|
|
254
|
+
|
|
255
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
256
|
+
"http://localhost:8787/v1/tenants/tenant_example/audit-packet?month=2026-02" \
|
|
257
|
+
--output audit-packet.zip
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Tenant analytics + trust graph:
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
# browser dashboard (tenant analytics + trust graph + snapshot diff):
|
|
264
|
+
http://localhost:8787/v1/tenants/tenant_example/analytics/dashboard
|
|
265
|
+
|
|
266
|
+
# analytics report: trends + top vendors/contracts + warning/error code distribution
|
|
267
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
268
|
+
"http://localhost:8787/v1/tenants/tenant_example/analytics?month=2026-02&bucket=day&limit=20"
|
|
269
|
+
|
|
270
|
+
# trust graph: buyer→vendor and vendor→contract trust edges for the selected month
|
|
271
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
272
|
+
"http://localhost:8787/v1/tenants/tenant_example/trust-graph?month=2026-02&minRuns=1&maxEdges=200"
|
|
273
|
+
|
|
274
|
+
# save a trust graph snapshot for a month
|
|
275
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
276
|
+
--data '{"month":"2026-02","minRuns":1,"maxEdges":200}' \
|
|
277
|
+
"http://localhost:8787/v1/tenants/tenant_example/trust-graph/snapshots"
|
|
278
|
+
|
|
279
|
+
# list saved trust graph snapshots
|
|
280
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
281
|
+
"http://localhost:8787/v1/tenants/tenant_example/trust-graph/snapshots?limit=50"
|
|
282
|
+
|
|
283
|
+
# diff trust graph between two months (uses snapshots when present, otherwise builds on demand)
|
|
284
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
285
|
+
"http://localhost:8787/v1/tenants/tenant_example/trust-graph/diff?baseMonth=2026-01&compareMonth=2026-02&limit=50"
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Webhook events:
|
|
289
|
+
|
|
290
|
+
- `verification.completed`
|
|
291
|
+
- `verification.failed`
|
|
292
|
+
- `decision.approved`
|
|
293
|
+
- `decision.held`
|
|
294
|
+
|
|
295
|
+
Operational defaults:
|
|
296
|
+
|
|
297
|
+
- New tenants auto-attach a default relay webhook when `MAGIC_LINK_DEFAULT_EVENT_RELAY_URL` is set.
|
|
298
|
+
- Delivery retries/backoff are controlled by `MAGIC_LINK_WEBHOOK_MAX_ATTEMPTS` and `MAGIC_LINK_WEBHOOK_RETRY_BACKOFF_MS`.
|
|
299
|
+
- Persistent retry sweeps are controlled by `MAGIC_LINK_WEBHOOK_RETRY_INTERVAL_MS`.
|
|
300
|
+
- Dead-letter alerting is controlled by:
|
|
301
|
+
- `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_THRESHOLD` (`0` disables alerts)
|
|
302
|
+
- `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_TARGETS` (comma-separated: `slack`, `zapier`, `defaultRelay`, `internal`, or explicit `https://...` URLs)
|
|
303
|
+
- `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_URL` + `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_SECRET` (required for `internal`, and secret required for explicit URL targets)
|
|
304
|
+
- Webhook payloads are always HMAC-signed (`x-settld-signature`).
|
|
305
|
+
- Slack/Zapier OAuth click-connect is enabled when the corresponding OAuth env vars are configured.
|
|
306
|
+
|
|
307
|
+
Webhook retry ops (tenant admin):
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
# list pending/dead-letter webhook retries (optionally filter by provider=slack|zapier|defaultRelay|webhook)
|
|
311
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
312
|
+
"http://localhost:8787/v1/tenants/tenant_example/webhook-retries?state=pending&provider=slack"
|
|
313
|
+
|
|
314
|
+
# process one retry sweep for this tenant immediately
|
|
315
|
+
curl -sS -X POST -H "x-api-key: dev_key" \
|
|
316
|
+
"http://localhost:8787/v1/tenants/tenant_example/webhook-retries/run-once"
|
|
317
|
+
|
|
318
|
+
# replay the latest dead-letter webhook retry for a provider
|
|
319
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
320
|
+
--data '{"provider":"slack","resetAttempts":true,"useCurrentSettings":true}' \
|
|
321
|
+
"http://localhost:8787/v1/tenants/tenant_example/webhook-retries/replay-latest?provider=slack"
|
|
322
|
+
|
|
323
|
+
# replay a dead-letter webhook retry job back to pending (provider guard is optional)
|
|
324
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
325
|
+
--data '{"idempotencyKey":"<idempotency_key>","provider":"slack","resetAttempts":true,"useCurrentSettings":true}' \
|
|
326
|
+
"http://localhost:8787/v1/tenants/tenant_example/webhook-retries/<token>/replay?provider=slack"
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Payment trigger retry ops (tenant admin):
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# list pending/dead-letter payment trigger retries
|
|
333
|
+
curl -sS -H "x-api-key: dev_key" \
|
|
334
|
+
"http://localhost:8787/v1/tenants/tenant_example/payment-trigger-retries?state=pending"
|
|
335
|
+
|
|
336
|
+
# process one retry sweep for this tenant immediately
|
|
337
|
+
curl -sS -X POST -H "x-api-key: dev_key" \
|
|
338
|
+
"http://localhost:8787/v1/tenants/tenant_example/payment-trigger-retries/run-once"
|
|
339
|
+
|
|
340
|
+
# replay a dead-letter job back to pending
|
|
341
|
+
curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
|
|
342
|
+
--data '{"idempotencyKey":"<decision_report_hash>","resetAttempts":true,"useCurrentSettings":true}' \
|
|
343
|
+
"http://localhost:8787/v1/tenants/tenant_example/payment-trigger-retries/ml_<token>/replay"
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Tenant-scoped settings now also support:
|
|
347
|
+
|
|
348
|
+
- `buyerNotifications` (recipient list + `smtp|webhook|record` delivery mode)
|
|
349
|
+
- Buyer notifications are idempotent per artifact token, and per upload `runId` when provided.
|
|
350
|
+
- `autoDecision` (status-driven automated `approve|hold` policy with system actor stamping)
|
|
351
|
+
- `paymentTriggers` (approval delivery to `record|webhook` sinks, idempotent by decision report hash)
|
|
352
|
+
- `rateLimits` (`uploadsPerHour`, `verificationViewsPerHour`, `decisionsPerHour`, `otpRequestsPerHour`)
|
package/services/magic-link/assets/samples/closepack/known-bad/acceptance/acceptance_criteria.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"criteria":[{"criterionId":"proof_status_pass","expectedStatus":"PASS","kind":"PROOF_STATUS_EQUALS"},{"criterionId":"sla_overall_ok","kind":"SLA_OVERALL_OK"}],"generatedAt":"2026-02-02T00:00:00.000Z","schemaVersion":"AcceptanceCriteria.v1"}
|
package/services/magic-link/assets/samples/closepack/known-bad/acceptance/acceptance_evaluation.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","overallStatus":"unknown","results":[{"criterionId":"proof_status_pass","detail":{"actualStatus":null,"expectedStatus":"PASS"},"kind":"PROOF_STATUS_EQUALS","status":"unknown"},{"criterionId":"sla_overall_ok","detail":{"overallStatus":"ok"},"kind":"SLA_OVERALL_OK","status":"ok"}],"schemaVersion":"AcceptanceEvaluation.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"attestationHash":"550ab12d8aef353d28391396d534f0c72dcd4bd8588e2b6f252f3afdbc2e5224","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"invoiceBundle":{"attestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","embeddedPath":"payload/invoice_bundle","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878"}},"kind":"ClosePack.v1","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_wrong_total"},"signature":"Dfdz+9A7yuPWKTsLeyvIEb/mBxF/vUhRv6HHvLmpIh5GLYg98F5ZSThjYLqTsojn/Sv/iMTezbxYzMczBLrKDg==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","items":[{"at":null,"contentType":null,"eventId":null,"evidenceId":null,"evidenceRefHash":null,"key":"metering:job/snapshot.json","kind":null,"path":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8","sizeBytes":null,"source":"metering_evidence_ref"}],"jobProof":{"embeddedPath":"payload/invoice_bundle/payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"EvidenceIndex.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"ae01f50ce40817fb8cc57ebdee290fc0c8464da95c665c2e99b358d7613d8b95","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"m7oXX//xJ7P0X6mPDeh/rfDRRN317l1llgkBkLn7zMjH+1c66HkTsRFn1D4fFPdKQOSG28HNgsiZBGDY+nrUDQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"createdAt":"2026-02-02T00:00:00.000Z","files":[{"bytes":242,"name":"acceptance/acceptance_criteria.json","sha256":"0e1d1848479b5ffe5bb396b559b8621ece765de313c14e7de1b5150255f9a078"},{"bytes":365,"name":"acceptance/acceptance_evaluation.json","sha256":"4f89cd1e18b51dc535954d844aaeeb9f5cd10a04002cb43ea489be6cfabf757e"},{"bytes":624,"name":"evidence/evidence_index.json","sha256":"a7dca7b4b66affa9b7666030611574f941848de0df55dd5295175eb97a15eb0d"},{"bytes":941,"name":"governance/policy.json","sha256":"fdf83afee673d554a43cb6a7cc8e7dd2f09f6ca5a6dfea019fe0cce9bc3db515"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":735,"name":"payload/invoice_bundle/attestation/bundle_head_attestation.json","sha256":"774fd88046d65a31440fc9b4c8f55562133f08c4d9a951795b4ae7e89ed86371"},{"bytes":949,"name":"payload/invoice_bundle/governance/policy.json","sha256":"ecc617ae2edbddddecbc3580b509b6e2f218787238e883a348a575f278f1f662"},{"bytes":409,"name":"payload/invoice_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":410,"name":"payload/invoice_bundle/invoice/invoice_claim.json","sha256":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7"},{"bytes":3740,"name":"payload/invoice_bundle/manifest.json","sha256":"639598694e1b83238cdfa1f7e2657d9bc5059e82489f7e3c2ef7ff892538e15f"},{"bytes":547,"name":"payload/invoice_bundle/metering/metering_report.json","sha256":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b"},{"bytes":864,"name":"payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json","sha256":"641947fd28044f926bae840ad343bb4d75d6be44b29e329098210f0af4c28a43"},{"bytes":515,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"},{"bytes":1930,"name":"payload/invoice_bundle/payload/job_proof_bundle/manifest.json","sha256":"844451c8a0efb43b28c5f4ea44dd291e908590fa00583d7d9cc6934c2143c7fb"},{"bytes":297,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/report.json","sha256":"1f7725687929166e2258c0f68f4f50d5419a59a0ef490abd407fbcfc9a4123f8"},{"bytes":1312,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json","sha256":"86c22381caf30735783418f603518c8f7301b53cb2e8f4e49326e1e1d46c9f06"},{"bytes":112,"name":"payload/invoice_bundle/pricing/pricing_matrix.json","sha256":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},{"bytes":346,"name":"payload/invoice_bundle/pricing/pricing_matrix_signatures.json","sha256":"25c1ebf3c5af800807a1fe1a9b824760099c5171765fb4ef8610cfb91d20564e"},{"bytes":611,"name":"payload/invoice_bundle/settld.json","sha256":"ca76e5f8d036647fb0d8684b5b46044d9a160ecd0bb9935695abd2446f722341"},{"bytes":1573,"name":"payload/invoice_bundle/verify/verification_report.json","sha256":"4bd3ee6e58c6469e1bddabf46c0029dba14a13130d6960358066abf3d842be34"},{"bytes":1165,"name":"settld.json","sha256":"c7c697924332a03b2fce4276f1f914294a70fa8bee358df16ac856f9739ced8b"},{"bytes":89,"name":"sla/sla_definition.json","sha256":"09cede8efe384f99669edcd12d03a2c912f6b58018490641171de68bd2ada930"},{"bytes":112,"name":"sla/sla_evaluation.json","sha256":"2aab51475a2ea4b9792c3bbbf09b5ae2fa0386cb6da1ce039d86fff793be1f98"}],"hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"ClosePackManifestHash.v1"},"invoiceId":"invoice_fixture_wrong_total","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","protocol":"1.0","schemaVersion":"ClosePackManifest.v1","tenantId":"tenant_fixture","type":"ClosePack.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"attestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"jobProof":{"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"}},"kind":"InvoiceBundle.v1","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_wrong_total"},"signature":"0qNNLJ1SMz0Amh6r33eaEDXnRP3CFfwhX/8VI54xc65+ZI4n6F4lsRwrMUb0LIeDVUOcYZV9BtUUI2Rm6Su2DA==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"InvoiceBundle.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"0c0af0e6cc728d3b1eb7489c7fdcedd20602fd3adc69477357007f7150019935","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"aCG+XrKnp3ERKrAPR2VQ4P5ORcRKK5GhImmm9b/nNNpx3SpGJP9PlOMbyBocv05t8CWsiNa/YyCR6+YRTugpDQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"InvoiceBundle.v1"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"createdAt":"2026-02-02T00:00:00.000Z","currency":"USD","invoiceId":"invoice_fixture_wrong_total","jobProof":{"embeddedPath":"payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"InvoiceClaim.v1","tenantId":"tenant_fixture","totalCents":"999999"}
|
package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/manifest.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"createdAt":"2026-02-02T00:00:00.000Z","files":[{"bytes":949,"name":"governance/policy.json","sha256":"ecc617ae2edbddddecbc3580b509b6e2f218787238e883a348a575f278f1f662"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":410,"name":"invoice/invoice_claim.json","sha256":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7"},{"bytes":547,"name":"metering/metering_report.json","sha256":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b"},{"bytes":864,"name":"payload/job_proof_bundle/attestation/bundle_head_attestation.json","sha256":"641947fd28044f926bae840ad343bb4d75d6be44b29e329098210f0af4c28a43"},{"bytes":515,"name":"payload/job_proof_bundle/events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"payload/job_proof_bundle/events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"payload/job_proof_bundle/governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"payload/job_proof_bundle/governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"payload/job_proof_bundle/governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"payload/job_proof_bundle/governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"payload/job_proof_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"payload/job_proof_bundle/governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"payload/job_proof_bundle/governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"payload/job_proof_bundle/job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"payload/job_proof_bundle/keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"},{"bytes":1930,"name":"payload/job_proof_bundle/manifest.json","sha256":"844451c8a0efb43b28c5f4ea44dd291e908590fa00583d7d9cc6934c2143c7fb"},{"bytes":297,"name":"payload/job_proof_bundle/verify/report.json","sha256":"1f7725687929166e2258c0f68f4f50d5419a59a0ef490abd407fbcfc9a4123f8"},{"bytes":1312,"name":"payload/job_proof_bundle/verify/verification_report.json","sha256":"86c22381caf30735783418f603518c8f7301b53cb2e8f4e49326e1e1d46c9f06"},{"bytes":112,"name":"pricing/pricing_matrix.json","sha256":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},{"bytes":346,"name":"pricing/pricing_matrix_signatures.json","sha256":"25c1ebf3c5af800807a1fe1a9b824760099c5171765fb4ef8610cfb91d20564e"},{"bytes":611,"name":"settld.json","sha256":"ca76e5f8d036647fb0d8684b5b46044d9a160ecd0bb9935695abd2446f722341"}],"hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"InvoiceBundleManifestHash.v1"},"invoiceId":"invoice_fixture_wrong_total","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","protocol":"1.0","schemaVersion":"InvoiceBundleManifest.v1","tenantId":"tenant_fixture","type":"InvoiceBundle.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"evidenceRefs":[{"path":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"}],"generatedAt":"2026-02-02T00:00:00.000Z","invoiceId":"invoice_fixture_wrong_total","items":[{"code":"WORK_MINUTES","quantity":"10"}],"jobProof":{"embeddedPath":"payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"MeteringReport.v1","tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"governance":{"global":{"lastChainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","lastEventId":"evt_gov_serverA_registered"},"tenant":{"lastChainHash":null,"lastEventId":null}},"job":{"lastChainHash":"e698a6e1d597a4be85d31bdac90a34a66b9d43886ad43f59c0cc4e77efdde78d","lastEventId":"evt_job_created"}},"kind":"JobProofBundle.v1","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","schemaVersion":"BundleHeadAttestation.v1","scope":{"jobId":"job_fixture_1"},"signature":"WqNZduwUjQcSlBF7PnWoRyaBuyeD73eevVB3jz58Fa3xd6J+HT6ivilEdUMaATF4QxA+s2p4sMhJYrHeqKB3CQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"actor":{"id":"proxy","type":"system"},"at":"2026-02-02T00:00:00.000Z","chainHash":"e698a6e1d597a4be85d31bdac90a34a66b9d43886ad43f59c0cc4e77efdde78d","id":"evt_job_created","payload":{"jobId":"job_fixture_1"},"payloadHash":"6b46a068dfe3479d2f09f84ae0ed29bb7e2cd9e1ec4c17bccca1c1307a04c47c","prevChainHash":null,"signature":"ZmciBEg0pm549K4dpIE988oH5xwRDeimD9g73v5hHXKeGYa0RXZ3hFkJ6BzxCxODFDlUQzzyJkDkjKSpeOkvDg==","signerKeyId":"key_9ed38005b42d9364601ffab3","streamId":"job_fixture_1","type":"JOB_CREATED","v":1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"actor":{"id":"proxy","type":"system"},"at":"2026-02-02T00:00:00.000Z","id":"evt_job_created","payload":{"jobId":"job_fixture_1"},"streamId":"job_fixture_1","type":"JOB_CREATED","v":1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"actor":{"id":"proxy","type":"system"},"at":"2026-01-01T00:00:00.000Z","chainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","id":"evt_gov_serverA_registered","payload":{"keyId":"key_9ed38005b42d9364601ffab3","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQ70D1FtwopWnvJeFsiKdThSP/9QADgSeaZYKip79KQI=\n-----END PUBLIC KEY-----\n","reason":"fixture","registeredAt":"2026-01-01T00:00:00.000Z","tenantId":"tenant_default"},"payloadHash":"d996dc5347a113a6050ed453e7b5feb2f1edb93a5ffb68d4fbca7b015336c61b","prevChainHash":null,"signature":"ovzEbrAqeEhQ7xrz/cIIor85ygkD7bgBvbWxKsQetxKkWjCBDoVUfmPn9UrqF/iNtIZcqBK9TA/SXrNk/VjHAg==","signerKeyId":"key_9ed38005b42d9364601ffab3","streamId":"governance","type":"SERVER_SIGNER_KEY_REGISTERED","v":1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"actor":{"id":"proxy","type":"system"},"at":"2026-01-01T00:00:00.000Z","id":"evt_gov_serverA_registered","payload":{"keyId":"key_9ed38005b42d9364601ffab3","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQ70D1FtwopWnvJeFsiKdThSP/9QADgSeaZYKip79KQI=\n-----END PUBLIC KEY-----\n","reason":"fixture","registeredAt":"2026-01-01T00:00:00.000Z","tenantId":"tenant_default"},"streamId":"governance","type":"SERVER_SIGNER_KEY_REGISTERED","v":1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"lastChainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","lastEventId":"evt_gov_serverA_registered","streamId":"governance"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"JobProofBundle.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"f8588a9eef597dd67d29035ff157b00a79bbf2d17056ce063e9a65a390d005d7","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"lxr9K5+X7/oVnIFATriFJW/+i96UUDXPP5ATFseAtqlSe/0juicaoad8U0kMT4Xks6xDHrLLOD/ASEm/DRcVDA==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"JobProofBundle.v1"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"lastChainHash":null,"lastEventId":null,"streamId":"governance"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"job_fixture_1","lastChainHash":"e698a6e1d597a4be85d31bdac90a34a66b9d43886ad43f59c0cc4e77efdde78d","lastEventId":"evt_job_created"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","keys":[{"createdAt":null,"description":null,"keyId":"key_9ed38005b42d9364601ffab3","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQ70D1FtwopWnvJeFsiKdThSP/9QADgSeaZYKip79KQI=\n-----END PUBLIC KEY-----\n","purpose":"server","revokedAt":null,"rotatedAt":null,"status":null,"tenantId":"tenant_fixture","validFrom":null,"validTo":null}],"order":"keyId_asc","schemaVersion":"PublicKeys.v1","tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"files":[{"bytes":515,"name":"events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"}],"generatedAt":"2026-02-02T00:00:00.000Z","hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"ProofBundleManifestHash.v1"},"kind":"JobProofBundle.v1","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","schemaVersion":"ProofBundleManifest.v1","scope":{"jobId":"job_fixture_1"},"tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"artifacts":[],"compiledPolicies":[],"eventChain":{"ok":true},"generatedAt":"2026-02-02T00:00:00.000Z","kind":"JobProofBundle.v1","schemaVersion":"ProofBundleVerifyReport.v1","scope":{"jobId":"job_fixture_1"},"settlementProofRefs":{"checked":0,"errors":[],"ok":true},"tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"bundleHeadAttestation":{"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","schemaVersion":"BundleHeadAttestation.v1","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3"},"profile":"strict","reportHash":"7bfcc64af8ec9c5df4d5b87150cab3954d5748deb725be672a0cd464c20b3b29","schemaVersion":"VerificationReport.v1","signature":"4QIO0WgDiudPESt/mGSFC7zXcU7RJnF4MftOQHTB7BvtVenQ7SubgBkl1Kc8jj+GPQdtGbIxWZQRR5pL9OrKBQ==","signedAt":"2026-02-02T00:00:00.000Z","signer":{"governanceEventRef":{"chainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","eventId":"evt_gov_serverA_registered","payloadHash":"d996dc5347a113a6050ed453e7b5feb2f1edb93a5ffb68d4fbca7b015336c61b","type":"SERVER_SIGNER_KEY_REGISTERED"},"keyId":"key_9ed38005b42d9364601ffab3","scope":"global"},"signerKeyId":"key_9ed38005b42d9364601ffab3","subject":{"createdAt":"2026-02-02T00:00:00.000Z","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","scope":{"jobId":"job_fixture_1"},"tenantId":"tenant_fixture","type":"JobProofBundle.v1"},"tool":{"commit":"0123456789abcdef0123456789abcdef01234567","name":"settld","version":"0.0.0-fixture"},"warnings":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"currency":"USD","prices":[{"code":"WORK_MINUTES","unitPriceCents":"150"}],"schemaVersion":"PricingMatrix.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"pricingMatrixCanonicalHash":"0fdad09bbc49efc35602932ef73950509de0f4f929bac0af35efeeb4d138c128","schemaVersion":"PricingMatrixSignatures.v2","signatures":[{"signature":"BzQbDsMHYcKavlJznp5nc7++boaRGMzFrfTPst79HrTMp7cIfL5foPq7zYzvOc7QsIqyycFCi/WOzIqha6/KAg==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}]}
|
package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/settld.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"createdAt":"2026-02-02T00:00:00.000Z","inputs":{"invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"invoiceId":"invoice_fixture_wrong_total","protocol":"1.0","tenantId":"tenant_fixture","type":"InvoiceBundle.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"bundleHeadAttestation":{"attestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","schemaVersion":"BundleHeadAttestation.v1","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3"},"inputs":{"invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"policy":null,"profile":"strict","reportHash":"f6e04560a8d2403e4f6291b165ff18c212771f97cc8fdf402b33a6720eac93e9","schemaVersion":"VerificationReport.v1","signature":"qd5/d2acHYbeJynl2JOoqIjXdZXTptjKznwRuRMv86hQuNzDVhQIfh76dWfy5OLScoZMDU5SXvlr6ylTf++sDw==","signedAt":"2026-02-02T00:00:00.000Z","signer":{"governanceEventRef":null,"keyId":"key_9ed38005b42d9364601ffab3","scope":"global"},"signerKeyId":"key_9ed38005b42d9364601ffab3","subject":{"createdAt":"2026-02-02T00:00:00.000Z","invoiceId":"invoice_fixture_wrong_total","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","protocol":"1.0","tenantId":"tenant_fixture","type":"InvoiceBundle.v1"},"tool":{"commit":"0123456789abcdef0123456789abcdef01234567","name":"settld","version":"0.0.0-fixture"},"warnings":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"createdAt":"2026-02-02T00:00:00.000Z","inputs":{"invoiceBundleCreatedAt":"2026-02-02T00:00:00.000Z","invoiceBundleHeadAttestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","invoiceBundleManifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","invoiceBundleTenantId":"tenant_fixture","invoiceBundleType":"InvoiceBundle.v1","invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"invoiceBundle":{"embeddedPath":"payload/invoice_bundle","headAttestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878"},"invoiceId":"invoice_fixture_wrong_total","protocol":"1.0","tenantId":"tenant_fixture","type":"ClosePack.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","rules":[],"schemaVersion":"SlaDefinition.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","overallStatus":"ok","results":[],"schemaVersion":"SlaEvaluation.v1"}
|
package/services/magic-link/assets/samples/closepack/known-bad/verify/verification_report.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"bundleHeadAttestation":{"attestationHash":"550ab12d8aef353d28391396d534f0c72dcd4bd8588e2b6f252f3afdbc2e5224","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","schemaVersion":"BundleHeadAttestation.v1","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3"},"inputs":{"invoiceBundleCreatedAt":"2026-02-02T00:00:00.000Z","invoiceBundleHeadAttestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","invoiceBundleManifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","invoiceBundleTenantId":"tenant_fixture","invoiceBundleType":"InvoiceBundle.v1","invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"policy":null,"profile":"strict","reportHash":"cf90a91cbc3d69c4b3bb81035c93b4cf224f125a178bae459852f79fba2a60da","schemaVersion":"VerificationReport.v1","signature":"i9VPPvILEom7mJG70IreW0Vo+SSqxmtzClD8Od6U5TQ5cdDH/ZCetAO73DVjWVR1f76BNYfNoBEF6oCrzDdADA==","signedAt":"2026-02-02T00:00:00.000Z","signer":{"governanceEventRef":null,"keyId":"key_9ed38005b42d9364601ffab3","scope":"global"},"signerKeyId":"key_9ed38005b42d9364601ffab3","subject":{"createdAt":"2026-02-02T00:00:00.000Z","invoiceId":"invoice_fixture_wrong_total","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","protocol":"1.0","scope":{"invoiceId":"invoice_fixture_wrong_total"},"tenantId":"tenant_fixture","type":"ClosePack.v1"},"tool":{"commit":"0123456789abcdef0123456789abcdef01234567","name":"settld","version":"0.0.0-fixture"},"warnings":[]}
|
package/services/magic-link/assets/samples/closepack/known-good/acceptance/acceptance_criteria.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"criteria":[{"criterionId":"proof_status_pass","expectedStatus":"PASS","kind":"PROOF_STATUS_EQUALS"},{"criterionId":"sla_overall_ok","kind":"SLA_OVERALL_OK"}],"generatedAt":"2026-02-02T00:00:00.000Z","schemaVersion":"AcceptanceCriteria.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","overallStatus":"unknown","results":[{"criterionId":"proof_status_pass","detail":{"actualStatus":null,"expectedStatus":"PASS"},"kind":"PROOF_STATUS_EQUALS","status":"unknown"},{"criterionId":"sla_overall_ok","detail":{"overallStatus":"ok"},"kind":"SLA_OVERALL_OK","status":"ok"}],"schemaVersion":"AcceptanceEvaluation.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"attestationHash":"eaf7436e7aef6529f7d95031ffc7f741ed68a65d8d2b5e3048f9593076ae6652","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"invoiceBundle":{"attestationHash":"8b15727b811d865a5187aa9da01066a3271dd6465f6c18e6c8d1b59c0a955755","embeddedPath":"payload/invoice_bundle","manifestHash":"7b348ab1bb5a84f7899b718a08bd7827bb6b7b213b97ef74142061270fb2233a"}},"kind":"ClosePack.v1","manifestHash":"0821f3de3cf3bbe659a61a0c14ca38fc82b22239f039e908a9e4b36e4f27744a","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_1"},"signature":"3O1hc/zcj6oVOLzrqUSKdIWSfwLu8YpC30j599g4EZHgMPtIR9PAoA7Llg0/pU+ph4XjENgmnRJ5QmKDYVJXAQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","items":[{"at":null,"contentType":null,"eventId":null,"evidenceId":null,"evidenceRefHash":null,"key":"metering:job/snapshot.json","kind":null,"path":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8","sizeBytes":null,"source":"metering_evidence_ref"}],"jobProof":{"embeddedPath":"payload/invoice_bundle/payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"EvidenceIndex.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"ae01f50ce40817fb8cc57ebdee290fc0c8464da95c665c2e99b358d7613d8b95","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"m7oXX//xJ7P0X6mPDeh/rfDRRN317l1llgkBkLn7zMjH+1c66HkTsRFn1D4fFPdKQOSG28HNgsiZBGDY+nrUDQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"createdAt":"2026-02-02T00:00:00.000Z","files":[{"bytes":242,"name":"acceptance/acceptance_criteria.json","sha256":"0e1d1848479b5ffe5bb396b559b8621ece765de313c14e7de1b5150255f9a078"},{"bytes":365,"name":"acceptance/acceptance_evaluation.json","sha256":"4f89cd1e18b51dc535954d844aaeeb9f5cd10a04002cb43ea489be6cfabf757e"},{"bytes":624,"name":"evidence/evidence_index.json","sha256":"a7dca7b4b66affa9b7666030611574f941848de0df55dd5295175eb97a15eb0d"},{"bytes":941,"name":"governance/policy.json","sha256":"fdf83afee673d554a43cb6a7cc8e7dd2f09f6ca5a6dfea019fe0cce9bc3db515"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":725,"name":"payload/invoice_bundle/attestation/bundle_head_attestation.json","sha256":"4e31ad53caaa0650f98d49821ee16e3a5ebc11b7f19f4b58003294827d26893d"},{"bytes":949,"name":"payload/invoice_bundle/governance/policy.json","sha256":"ecc617ae2edbddddecbc3580b509b6e2f218787238e883a348a575f278f1f662"},{"bytes":409,"name":"payload/invoice_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":519,"name":"payload/invoice_bundle/invoice/invoice_claim.json","sha256":"fe64b5bee3e55bfdf61628896a1e92df5b4c9a48973e6ffd594e7448d250537f"},{"bytes":3730,"name":"payload/invoice_bundle/manifest.json","sha256":"9027d539a4682ecf911f523ddfa9f09e90ddc71c8c8f4d5b6fdcf000ef370877"},{"bytes":537,"name":"payload/invoice_bundle/metering/metering_report.json","sha256":"1f19f5309e33a4c133fd60fae5dbe10f50b9a12d9541fc8bb975eff432c72c06"},{"bytes":864,"name":"payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json","sha256":"641947fd28044f926bae840ad343bb4d75d6be44b29e329098210f0af4c28a43"},{"bytes":515,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"},{"bytes":1930,"name":"payload/invoice_bundle/payload/job_proof_bundle/manifest.json","sha256":"844451c8a0efb43b28c5f4ea44dd291e908590fa00583d7d9cc6934c2143c7fb"},{"bytes":297,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/report.json","sha256":"1f7725687929166e2258c0f68f4f50d5419a59a0ef490abd407fbcfc9a4123f8"},{"bytes":1312,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json","sha256":"86c22381caf30735783418f603518c8f7301b53cb2e8f4e49326e1e1d46c9f06"},{"bytes":112,"name":"payload/invoice_bundle/pricing/pricing_matrix.json","sha256":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},{"bytes":346,"name":"payload/invoice_bundle/pricing/pricing_matrix_signatures.json","sha256":"25c1ebf3c5af800807a1fe1a9b824760099c5171765fb4ef8610cfb91d20564e"},{"bytes":601,"name":"payload/invoice_bundle/settld.json","sha256":"b6033ab19043026b8c5df1c41ce33446088edebc96a0c1cf564ab3d4484b79af"},{"bytes":1563,"name":"payload/invoice_bundle/verify/verification_report.json","sha256":"d54a80c8a8441477e2cf04d814cc9f5291722c170f92a8edce6d69e43b685c1d"},{"bytes":1155,"name":"settld.json","sha256":"3859459a2ee4b6773dcc2751e90951cdbf4060f5a284bef085d4f0f71997fd74"},{"bytes":89,"name":"sla/sla_definition.json","sha256":"09cede8efe384f99669edcd12d03a2c912f6b58018490641171de68bd2ada930"},{"bytes":112,"name":"sla/sla_evaluation.json","sha256":"2aab51475a2ea4b9792c3bbbf09b5ae2fa0386cb6da1ce039d86fff793be1f98"}],"hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"ClosePackManifestHash.v1"},"invoiceId":"invoice_fixture_1","manifestHash":"0821f3de3cf3bbe659a61a0c14ca38fc82b22239f039e908a9e4b36e4f27744a","protocol":"1.0","schemaVersion":"ClosePackManifest.v1","tenantId":"tenant_fixture","type":"ClosePack.v1"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"attestationHash":"8b15727b811d865a5187aa9da01066a3271dd6465f6c18e6c8d1b59c0a955755","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"jobProof":{"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"}},"kind":"InvoiceBundle.v1","manifestHash":"7b348ab1bb5a84f7899b718a08bd7827bb6b7b213b97ef74142061270fb2233a","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_1"},"signature":"GlfGo5NvhA07IfuL/mqQotiSoZes9gtvy+HF/eL1cY/Kim46aamjw/gmGzODcN0zvZ4cuzYW4UlpjZn1SUR0CQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
|