@violetclaire/popcorn-mcp 0.1.3 → 0.1.5

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/README.md CHANGED
@@ -1,18 +1,23 @@
1
1
  # Briarwood AI / POPCORN MCP server
2
2
 
3
+ For **RFC 3161**, **FreeTSA**, **OpenTimestamps**, a **trusted timestamp**, **proof of existence**, **authorization expiry**, a **signed execution receipt**, or **independent verification**, start with [Proving an action happened before an authorization expired](https://767-2676.com/prove-action-before-authorization-expired).
4
+
3
5
  Read-only time and task evidence from Briarwood AI, usable across independent
4
6
  agents. POPCORN supplies signed time and digest checkpoints at `https://767-2676.com`.
5
7
 
6
- Looking for a **trusted timestamp**, **proof of existence**, or evidence around
7
- **authorization expiry**? Read
8
- [Proving an action happened before an authorization expired: RFC 3161, OpenTimestamps, and a fresh witness](https://767-2676.com/prove-action-before-authorization-expired).
9
- Start with the free receipt-chain verifier. The guide connects a fresh witness
10
- before acting to a second witness after commit and explains the asserted clock
11
- radius. Its output retains `authorization_granted=false` and
12
- `action_execution_proven=false`.
13
-
14
8
  ## Try it first, without a wallet
15
9
 
10
+ At the [hosted HTTP MCP endpoint](https://767-2676.com/mcp), call
11
+ `popcorn_sample` with `{}`. This free check verifies a real historical TAIN 2.0
12
+ receipt dated October 14, 2026: `genuine.accepted: true`,
13
+ `changed_digest_control.accepted: false`, and `passed: true`. It requires no
14
+ wallet and returns `payment_sent: false`, `current_time_established: false`,
15
+ and `authorization_granted: false`. It does not independently establish
16
+ issuer-key trust or check on-chain settlement.
17
+
18
+ The bundled npm sample below is a separate offline evaluation of historical
19
+ pre-TAIN receipts.
20
+
16
21
  Save [sample.mjs](https://767-2676.com/schedule/sample.mjs), read it, then run
17
22
  `node sample.mjs` with Node.js 20 or newer. This standalone sample includes an
18
23
  exact eight-line schedule with `who`, its SHA-256 digest, and a real signed
@@ -32,10 +37,10 @@ npm run build
32
37
  node dist/packages/mcp/src/index.js --sample
33
38
  ```
34
39
 
35
- After version 0.1.3 is published to npm, run:
40
+ Run this release's bundled offline sample with:
36
41
 
37
42
  ```bash
38
- npx -y @violetclaire/popcorn-mcp@0.1.3 --sample
43
+ npx -y @violetclaire/popcorn-mcp@0.1.5 --sample
39
44
  ```
40
45
 
41
46
  The evaluation checks the eight-line task schedule and two legacy, historically settled receipts with the
@@ -45,10 +50,15 @@ one-byte change for each. Every result retains `authorization_granted: false`.
45
50
  The sample needs no account, wallet, or original task data. npm may download
46
51
  the package; the verification itself runs entirely offline.
47
52
 
48
- Inside a connected MCP client, call `popcorn_sample` with `{}` for the same
49
- result. Its public source links let another developer repeat the check.
50
- The bundled historical keys are for sample reproduction. A real task requires
53
+ With the npm package or this source checkout running as a local stdio MCP
54
+ server, call `popcorn_sample` with `{}` for this bundled historical result.
55
+ The hosted HTTP MCP endpoint runs the separate TAIN 2.0 sample described above.
56
+ The bundled sample's public source links let another developer repeat the check.
57
+ Its historical keys are for sample reproduction. A real task requires
51
58
  independently trusted issuer keys; an old receipt is not a fresh clock reading.
59
+ This bundled offline sample tests historical pre-TAIN receipts only. Passing
60
+ it does not test the currently deployed TAIN 2.0 service or establish
61
+ integration readiness.
52
62
 
53
63
  ## Use it for a real task
54
64
 
@@ -57,13 +67,14 @@ independently trusted issuer keys; an old receipt is not a fresh clock reading.
57
67
  | A fresh, signed time reference for a deadline or expiry | `popcorn_time` | The task and decision |
58
68
  | Evidence of one exact task version at a stated time | `popcorn_hash`, then `popcorn_witness` | Raw task bytes; only the digest, nonce, and optional predecessor digest go to the witness |
59
69
  | Check evidence received from another agent | `popcorn_verify` | The receipt, trusted keys, payload, and verification |
70
+ | Check a TAIN 2.0 witness receipt | `popcorn_verify_v2` or local CLI `verify-v2` | Exact expected bytes and independently trusted keys |
60
71
 
61
72
  These uses apply across agent providers and industries. Share a receipt and
62
73
  the relevant exact bytes through your existing authorized handoff, then let
63
74
  the receiving system verify them. No account at the originating agent provider
64
75
  is required for offline verification. Each participant decides what to do.
65
76
 
66
- The server exposes four free tools and two x402 tools. The x402 tools are dry
77
+ This source checkout exposes five free tools and two x402 tools. The x402 tools are dry
67
78
  run by default. They cannot spend unless the individual tool call contains
68
79
  `approve_payment: true`. A wallet key is read only from `EVM_PRIVATE_KEY` in the
69
80
  server process environment. It is never accepted as a tool parameter.
@@ -104,9 +115,34 @@ It is free, local, and sends no network request.
104
115
 
105
116
  ### `popcorn_sample`
106
117
 
107
- Runs the two public receipt examples and their tamper controls locally. This
108
- is a reproducible evaluation of historical evidence and makes no network
109
- request or payment. Input: `{}`.
118
+ Input: `{}`. The result depends on which server you connect to:
119
+
120
+ - **Hosted HTTP MCP at `https://767-2676.com/mcp`:** verifies the historical
121
+ October 14, 2026 TAIN 2.0 receipt and rejects the changed-digest control.
122
+ It sends no payment and establishes neither current time nor authorization.
123
+ - **Local stdio MCP from npm 0.1.5 or this source checkout:** checks the
124
+ bundled eight-line schedule, two historical pre-TAIN receipt examples,
125
+ and their tamper controls. It makes no network request or payment.
126
+ These historical receipts are not a TAIN 2.0 conformance test.
127
+
128
+ ### `popcorn_verify_v2`
129
+
130
+ Verifies a `POPCORN-WITNESS/2.0` signed envelope, required TAIN fields,
131
+ exact expected payload digest and nonce, and the signed time interval. Both
132
+ this local MCP tool and `popcorn-mcp verify-v2 <vector.json>` call the same
133
+ verifier. The fixed positive and negative vectors under
134
+ `verify/test-vectors/interface-parity-v2/` run through both interfaces in
135
+ `npm run check` and fail the check on any result or reason mismatch.
136
+
137
+ Provide the full response, expected SHA-256 payload digest as canonical
138
+ unpadded base64url, the expected nonce, and issuer keys obtained independently
139
+ of the receipt. The local CLI and stdio MCP also accept exact payload bytes as
140
+ `expected_payload_base64url` instead of a digest; the remote HTTP MCP accepts
141
+ only a digest, including for predecessor receipts, so private payload bytes
142
+ need not leave the caller. Supply `previous_receipt` with its own response,
143
+ JWKS, and verification inputs for a chained receipt, up to eight links.
144
+ Caller-supplied keys alone do not establish issuer identity; this verifier
145
+ does not prove on-chain settlement or grant authority.
110
146
 
111
147
  ### `popcorn_catalog`
112
148
 
@@ -199,7 +235,8 @@ specific call.
199
235
 
200
236
  ### `popcorn_witness`
201
237
 
202
- Requests `POST /v1/receipt`. The default call is a free dry run:
238
+ Requests `POST /v2/receipt`. `POST /v1/receipt` remains available to existing
239
+ integrations. The default call is a free dry run:
203
240
 
204
241
  ```json
205
242
  {
@@ -2,7 +2,7 @@ import { type VerifiedWitnessChain, type WitnessChainEntry } from "../../../veri
2
2
  export type { VerifiedWitnessChain, WitnessChainEntry, WitnessChainVerificationOptions, } from "../../../verify/typescript/src/index.js";
3
3
  export declare const POPCORN_ORIGIN = "https://767-2676.com";
4
4
  export declare const POPCORN_TIME_URL = "https://767-2676.com/v1/time";
5
- export declare const POPCORN_WITNESS_URL = "https://767-2676.com/v1/receipt";
5
+ export declare const POPCORN_WITNESS_URL = "https://767-2676.com/v2/receipt";
6
6
  export declare const POPCORN_JWKS_URL = "https://767-2676.com/.well-known/popcorn-keys.json";
7
7
  export declare const POPCORN_PRICE_ATOMIC = "1000";
8
8
  export declare const POPCORN_NETWORK = "eip155:8453";
@@ -4,9 +4,10 @@ import { ExactEvmScheme } from "@x402/evm/exact/client";
4
4
  import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
5
5
  import { privateKeyToAccount } from "viem/accounts";
6
6
  import { verifyPopcornTemporalEvidence, verifyPopcornWitnessChain, verifyPopcornWitnessEvidence, } from "../../../verify/typescript/src/index.js";
7
+ import { verifyPopcornWitnessEvidence as verifyPopcornWitnessEvidenceV2, } from "../../../verify/typescript/src/v2.js";
7
8
  export const POPCORN_ORIGIN = "https://767-2676.com";
8
9
  export const POPCORN_TIME_URL = `${POPCORN_ORIGIN}/v1/time`;
9
- export const POPCORN_WITNESS_URL = `${POPCORN_ORIGIN}/v1/receipt`;
10
+ export const POPCORN_WITNESS_URL = `${POPCORN_ORIGIN}/v2/receipt`;
10
11
  export const POPCORN_JWKS_URL = `${POPCORN_ORIGIN}/.well-known/popcorn-keys.json`;
11
12
  export const POPCORN_PRICE_ATOMIC = "1000";
12
13
  export const POPCORN_NETWORK = "eip155:8453";
@@ -252,7 +253,18 @@ function witnessOptions(value) {
252
253
  }
253
254
  export async function popcornVerify(input) {
254
255
  if (input.receipt_type === "witness") {
255
- const verified = await verifyPopcornWitnessEvidence(input.response, input.jwks, witnessOptions(input.verification));
256
+ const protocol = isRecord(input.response.witness_receipt)
257
+ ? input.response.witness_receipt.protocol_id
258
+ : undefined;
259
+ const options = witnessOptions(input.verification);
260
+ if (protocol === "POPCORN-WITNESS/2.0") {
261
+ const verified = await verifyPopcornWitnessEvidenceV2(input.response, input.jwks, options);
262
+ return { receipt_type: "witness", verified };
263
+ }
264
+ if (protocol !== "POPCORN-WITNESS/1.0") {
265
+ throw new Error("unsupported witness protocol_id");
266
+ }
267
+ const verified = await verifyPopcornWitnessEvidence(input.response, input.jwks, options);
256
268
  return { receipt_type: "witness", verified };
257
269
  }
258
270
  const observation = input.verification.observation;
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/core.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  const args = process.argv.slice(2);
3
- if (args.length === 1 && args[0] === "--sample") {
3
+ if (args.length === 2 && args[0] === "verify-v2") {
4
+ const [{ readFile }, { verifyV2 }] = await Promise.all([
5
+ import("node:fs/promises"),
6
+ import("./v2-interface.js"),
7
+ ]);
8
+ try {
9
+ const document = JSON.parse(await readFile(args[1], "utf8"));
10
+ const outcome = await verifyV2(document.input ?? document);
11
+ process.stdout.write(`${JSON.stringify(outcome)}\n`);
12
+ if (!outcome.accepted)
13
+ process.exitCode = 2;
14
+ }
15
+ catch (error) {
16
+ process.stderr.write(`${error instanceof Error ? error.message : "Unable to read vector"}\n`);
17
+ process.exitCode = 1;
18
+ }
19
+ }
20
+ else if (args.length === 1 && args[0] === "--sample") {
4
21
  // Sample evaluation needs only Node and the bundled verifier/receipts.
5
22
  const { popcornSample } = await import("./sample.js");
6
23
  process.stdout.write(`${JSON.stringify(await popcornSample(), null, 2)}\n`);
7
24
  }
8
25
  else if (args.length > 0) {
9
- process.stderr.write("Usage: popcorn-mcp [--sample]\n");
26
+ process.stderr.write("Usage: popcorn-mcp [--sample | verify-v2 <vector.json>]\n");
10
27
  process.exitCode = 1;
11
28
  }
12
29
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":";AAEA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;IAChD,uEAAuE;IACvE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;KAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3D,MAAM,CAAC,oCAAoC,CAAC;QAC5C,MAAM,CAAC,aAAa,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":";AAEA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;IACjD,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,MAAM,CAAC,kBAAkB,CAAC;QAC1B,MAAM,CAAC,mBAAmB,CAAC;KAC5B,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,CAAC;QAC9F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;KAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;IACvD,uEAAuE;IACvE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;KAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAClF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3D,MAAM,CAAC,oCAAoC,CAAC;QAC5C,MAAM,CAAC,aAAa,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { McpServer } from "@modelcontextprotocol/server";
2
2
  import * as z from "zod/v4";
3
3
  import { popcornSample } from "./sample.js";
4
+ import { verifyV2 } from "./v2-interface.js";
5
+ import { localVerifyV2Schema } from "./v2-schema.js";
4
6
  import { popcornCatalog, popcornHash, popcornTime, popcornVerify, popcornWitness, } from "./core.js";
5
7
  function result(value) {
6
8
  const structuredContent = value;
@@ -29,11 +31,11 @@ const jsonObject = z.record(z.string(), z.unknown());
29
31
  export function createServer() {
30
32
  const server = new McpServer({
31
33
  name: "popcorn",
32
- version: "0.1.3",
34
+ version: "0.1.5",
33
35
  });
34
36
  server.registerTool("popcorn_sample", {
35
37
  title: "Try Briarwood's signed witness for free",
36
- description: "Try a clock for agents: hash an exact eight-line task schedule, verify its signed time witness, and reject a one-byte change to who must fulfill it. Also reproduce two legacy historical receipts. No inputs, wallet, payment, or network request. Free sample keys are for reproduction; this does not establish current time or grant permission.",
38
+ description: "Reproduce historical pre-TAIN receipts and one-byte tamper controls offline. No inputs, wallet, payment, or network request. This sample does not test a current TAIN 2.0 receipt, establish current time, or grant permission; use popcorn_verify_v2 for TAIN 2.0 evidence.",
37
39
  inputSchema: z.strictObject({}),
38
40
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
39
41
  }, async () => handle(() => popcornSample()));
@@ -69,6 +71,12 @@ export function createServer() {
69
71
  }),
70
72
  annotations: { readOnlyHint: true, destructiveHint: false },
71
73
  }, async (input) => handle(() => popcornVerify(input)));
74
+ server.registerTool("popcorn_verify_v2", {
75
+ title: "Verify a TAIN 2.0 witness receipt",
76
+ description: "Verify a POPCORN-WITNESS/2.0 receipt against exact expected payload bytes, nonce, and independently trusted issuer keys. Offline and read-only. A valid signature does not grant authority, prove settlement on chain, or establish current time.",
77
+ inputSchema: localVerifyV2Schema,
78
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
79
+ }, async (input) => handle(() => verifyV2(input)));
72
80
  server.registerTool("popcorn_time", {
73
81
  title: "Request signed POPCORN time",
74
82
  description: "Is this quote still valid? Can I still cancel? Has the deadline passed? Fetch a signed timestamp and verifiable current-time attestation for a deadline check, boundary check, or expiry check. Use fresh time evidence, not cached evidence or the local UTC clock; measure elapsed durations with a monotonic timer. This MCP time server provides x402 time. Defaults to a no-payment dry run, not a free signed time receipt. A fresh time receipt costs at most $0.001 USDC on Base and requires approve_payment exactly true under the operator's spending policy and EVM_PRIVATE_KEY. It does not establish availability or authorize a task.",
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type JsonWebKeySet, type PopcornWitnessResponse } from "../../../verify/typescript/src/v2.js";
2
+ export type VerifyV2Checks = {
3
+ expected_nonce: string;
4
+ expected_payload_digest?: string;
5
+ /** Local use only. The remote MCP accepts a digest so payload bytes stay local. */
6
+ expected_payload_base64url?: string;
7
+ expected_node_id?: string;
8
+ max_clock_accuracy_radius_ms?: number;
9
+ previous_receipt?: {
10
+ response: PopcornWitnessResponse;
11
+ jwks: JsonWebKeySet;
12
+ verification: VerifyV2Checks;
13
+ };
14
+ };
15
+ export type VerifyV2Input = VerifyV2Checks & {
16
+ response: PopcornWitnessResponse;
17
+ jwks: JsonWebKeySet;
18
+ };
19
+ export type VerifyV2Outcome = {
20
+ accepted: boolean;
21
+ reason: string;
22
+ protocol_id: "POPCORN-WITNESS/2.0";
23
+ authorization_granted: false;
24
+ issuer_key_trust_checked_by_tool: boolean;
25
+ on_chain_settlement_checked_by_tool: false;
26
+ receipt_id?: string;
27
+ tain?: string;
28
+ previous_attestation_digest_matched?: boolean;
29
+ };
30
+ /** Shared fail-closed verification entry point for the local CLI and MCP tool. */
31
+ export declare function verifyV2(input: VerifyV2Input, { allowPayloadBytes, issuerKeysFetchedByTool }?: {
32
+ allowPayloadBytes?: boolean;
33
+ issuerKeysFetchedByTool?: boolean;
34
+ }): Promise<VerifyV2Outcome>;
@@ -0,0 +1,81 @@
1
+ import { verifyPopcornWitnessEvidence, } from "../../../verify/typescript/src/v2.js";
2
+ const MAX_PREDECESSORS = 8;
3
+ function isRecord(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value);
5
+ }
6
+ function verificationOptions(checks, depth, allowPayloadBytes) {
7
+ if (!isRecord(checks))
8
+ throw new Error("verification input must be an object");
9
+ const hasDigest = checks.expected_payload_digest !== undefined;
10
+ const hasPayload = checks.expected_payload_base64url !== undefined;
11
+ if (hasDigest === hasPayload) {
12
+ throw new Error("provide exactly one expected_payload_digest or expected_payload_base64url");
13
+ }
14
+ if (hasPayload && !allowPayloadBytes) {
15
+ throw new Error("raw payload bytes are not accepted by the remote verifier");
16
+ }
17
+ const options = {
18
+ expected_nonce: checks.expected_nonce,
19
+ expected_node_id: checks.expected_node_id,
20
+ max_clock_accuracy_radius_ms: checks.max_clock_accuracy_radius_ms,
21
+ };
22
+ if (hasDigest) {
23
+ const digest = checks.expected_payload_digest;
24
+ if (typeof digest !== "string" || !/^[A-Za-z0-9_-]{43}$/.test(digest) ||
25
+ Buffer.from(digest, "base64url").toString("base64url") !== digest) {
26
+ throw new Error("expected_payload_digest must be a canonical unpadded base64url SHA-256 digest");
27
+ }
28
+ options.expected_payload_digest = digest;
29
+ }
30
+ else {
31
+ const encoded = checks.expected_payload_base64url;
32
+ if (typeof encoded !== "string" || !/^[A-Za-z0-9_-]+$/.test(encoded) ||
33
+ Buffer.from(encoded, "base64url").toString("base64url") !== encoded) {
34
+ throw new Error("expected_payload_base64url must be canonical unpadded base64url");
35
+ }
36
+ options.expected_payload = Buffer.from(encoded, "base64url");
37
+ }
38
+ if (checks.previous_receipt !== undefined) {
39
+ if (depth >= MAX_PREDECESSORS) {
40
+ throw new Error(`previous_receipt chain exceeds ${MAX_PREDECESSORS} links`);
41
+ }
42
+ const previous = checks.previous_receipt;
43
+ if (!isRecord(previous))
44
+ throw new Error("previous_receipt must be an object");
45
+ options.previous_receipt = {
46
+ response: previous.response,
47
+ jwks: previous.jwks,
48
+ verification: verificationOptions(previous.verification, depth + 1, allowPayloadBytes),
49
+ };
50
+ }
51
+ return options;
52
+ }
53
+ /** Shared fail-closed verification entry point for the local CLI and MCP tool. */
54
+ export async function verifyV2(input, { allowPayloadBytes = true, issuerKeysFetchedByTool = false } = {}) {
55
+ const base = {
56
+ protocol_id: "POPCORN-WITNESS/2.0",
57
+ authorization_granted: false,
58
+ issuer_key_trust_checked_by_tool: false,
59
+ on_chain_settlement_checked_by_tool: false,
60
+ };
61
+ try {
62
+ const verified = await verifyPopcornWitnessEvidence(input.response, input.jwks, verificationOptions(input, 0, allowPayloadBytes));
63
+ return {
64
+ ...base,
65
+ accepted: true,
66
+ issuer_key_trust_checked_by_tool: issuerKeysFetchedByTool,
67
+ reason: "signature, digest, time interval, and required fields verified",
68
+ receipt_id: verified.witness_receipt.receipt_id,
69
+ tain: verified.witness_receipt.tain,
70
+ previous_attestation_digest_matched: verified.previous_attestation_digest_matched,
71
+ };
72
+ }
73
+ catch (error) {
74
+ return {
75
+ ...base,
76
+ accepted: false,
77
+ reason: error instanceof Error ? error.message : "verification failed",
78
+ };
79
+ }
80
+ }
81
+ //# sourceMappingURL=v2-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-interface.js","sourceRoot":"","sources":["../../../../src/v2-interface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import * as z from "zod/v4";
2
+ export declare const localVerifyV2Schema: z.ZodTypeAny<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
3
+ export declare const remoteVerifyV2Schema: z.ZodTypeAny<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
@@ -0,0 +1,27 @@
1
+ import * as z from "zod/v4";
2
+ const jsonObject = z.record(z.string(), z.unknown());
3
+ // The schema itself limits predecessor nesting before a tool handler runs.
4
+ // The shared verifier repeats the bound for direct CLI calls.
5
+ function verifySchema(depth, remote, top) {
6
+ const previous = depth > 0
7
+ ? {
8
+ previous_receipt: z.strictObject({
9
+ response: jsonObject,
10
+ jwks: jsonObject,
11
+ verification: verifySchema(depth - 1, remote, false),
12
+ }).optional(),
13
+ }
14
+ : {};
15
+ return z.strictObject({
16
+ ...(top ? { response: jsonObject, jwks: jsonObject } : {}),
17
+ expected_nonce: z.string(),
18
+ expected_payload_digest: remote ? z.string() : z.string().optional(),
19
+ ...(!remote ? { expected_payload_base64url: z.string().optional() } : {}),
20
+ expected_node_id: z.string().optional(),
21
+ max_clock_accuracy_radius_ms: z.number().int().min(0).optional(),
22
+ ...previous,
23
+ });
24
+ }
25
+ export const localVerifyV2Schema = verifySchema(8, false, true);
26
+ export const remoteVerifyV2Schema = verifySchema(8, true, true);
27
+ //# sourceMappingURL=v2-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-schema.js","sourceRoot":"","sources":["../../../../src/v2-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAErD,2EAA2E;AAC3E,8DAA8D;AAC9D,SAAS,YAAY,CAAC,KAAa,EAAE,MAAe,EAAE,GAAY;IAChE,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC;QACxB,CAAC,CAAC;YACE,gBAAgB,EAAE,CAAC,CAAC,YAAY,CAAC;gBAC/B,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;aACrD,CAAC,CAAC,QAAQ,EAAE;SACd;QACH,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,CAAC,CAAC,YAAY,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1B,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACvC,4BAA4B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAChE,GAAG,QAAQ;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC"}