@forestrie/mcp-register 0.0.0-stage → 0.1.0

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.
Files changed (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +126 -2
  3. package/bin/mcp-register.mjs +2 -0
  4. package/dist/core/base64.d.ts +7 -0
  5. package/dist/core/base64.d.ts.map +1 -0
  6. package/dist/core/base64.js +20 -0
  7. package/dist/core/base64.js.map +1 -0
  8. package/dist/core/delegation.d.ts +56 -0
  9. package/dist/core/delegation.d.ts.map +1 -0
  10. package/dist/core/delegation.js +130 -0
  11. package/dist/core/delegation.js.map +1 -0
  12. package/dist/core/grant.d.ts +41 -0
  13. package/dist/core/grant.d.ts.map +1 -0
  14. package/dist/core/grant.js +78 -0
  15. package/dist/core/grant.js.map +1 -0
  16. package/dist/core/hex.d.ts +4 -0
  17. package/dist/core/hex.d.ts.map +1 -0
  18. package/dist/core/hex.js +18 -0
  19. package/dist/core/hex.js.map +1 -0
  20. package/dist/core/index.d.ts +28 -0
  21. package/dist/core/index.d.ts.map +1 -0
  22. package/dist/core/index.js +21 -0
  23. package/dist/core/index.js.map +1 -0
  24. package/dist/core/issue.d.ts +38 -0
  25. package/dist/core/issue.d.ts.map +1 -0
  26. package/dist/core/issue.js +135 -0
  27. package/dist/core/issue.js.map +1 -0
  28. package/dist/core/limits.d.ts +9 -0
  29. package/dist/core/limits.d.ts.map +1 -0
  30. package/dist/core/limits.js +9 -0
  31. package/dist/core/limits.js.map +1 -0
  32. package/dist/core/scrapi.d.ts +66 -0
  33. package/dist/core/scrapi.d.ts.map +1 -0
  34. package/dist/core/scrapi.js +174 -0
  35. package/dist/core/scrapi.js.map +1 -0
  36. package/dist/core/signer.d.ts +24 -0
  37. package/dist/core/signer.d.ts.map +1 -0
  38. package/dist/core/signer.js +2 -0
  39. package/dist/core/signer.js.map +1 -0
  40. package/dist/core/statement.d.ts +26 -0
  41. package/dist/core/statement.d.ts.map +1 -0
  42. package/dist/core/statement.js +70 -0
  43. package/dist/core/statement.js.map +1 -0
  44. package/dist/core/version.d.ts +23 -0
  45. package/dist/core/version.d.ts.map +1 -0
  46. package/dist/core/version.js +23 -0
  47. package/dist/core/version.js.map +1 -0
  48. package/dist/core/x402.d.ts +99 -0
  49. package/dist/core/x402.d.ts.map +1 -0
  50. package/dist/core/x402.js +202 -0
  51. package/dist/core/x402.js.map +1 -0
  52. package/dist/net/delegate.d.ts +56 -0
  53. package/dist/net/delegate.d.ts.map +1 -0
  54. package/dist/net/delegate.js +182 -0
  55. package/dist/net/delegate.js.map +1 -0
  56. package/dist/net/http.d.ts +17 -0
  57. package/dist/net/http.d.ts.map +1 -0
  58. package/dist/net/http.js +52 -0
  59. package/dist/net/http.js.map +1 -0
  60. package/dist/net/index.d.ts +14 -0
  61. package/dist/net/index.d.ts.map +1 -0
  62. package/dist/net/index.js +13 -0
  63. package/dist/net/index.js.map +1 -0
  64. package/dist/net/write.d.ts +55 -0
  65. package/dist/net/write.d.ts.map +1 -0
  66. package/dist/net/write.js +46 -0
  67. package/dist/net/write.js.map +1 -0
  68. package/dist/node/cli.d.ts +8 -0
  69. package/dist/node/cli.d.ts.map +1 -0
  70. package/dist/node/cli.js +143 -0
  71. package/dist/node/cli.js.map +1 -0
  72. package/dist/node/grant-store.d.ts +49 -0
  73. package/dist/node/grant-store.d.ts.map +1 -0
  74. package/dist/node/grant-store.js +95 -0
  75. package/dist/node/grant-store.js.map +1 -0
  76. package/dist/node/grant-tools.d.ts +29 -0
  77. package/dist/node/grant-tools.d.ts.map +1 -0
  78. package/dist/node/grant-tools.js +498 -0
  79. package/dist/node/grant-tools.js.map +1 -0
  80. package/dist/node/ledger.d.ts +26 -0
  81. package/dist/node/ledger.d.ts.map +1 -0
  82. package/dist/node/ledger.js +78 -0
  83. package/dist/node/ledger.js.map +1 -0
  84. package/dist/node/payer.d.ts +48 -0
  85. package/dist/node/payer.d.ts.map +1 -0
  86. package/dist/node/payer.js +170 -0
  87. package/dist/node/payer.js.map +1 -0
  88. package/dist/node/resolve-input.d.ts +19 -0
  89. package/dist/node/resolve-input.d.ts.map +1 -0
  90. package/dist/node/resolve-input.js +76 -0
  91. package/dist/node/resolve-input.js.map +1 -0
  92. package/dist/node/server.d.ts +47 -0
  93. package/dist/node/server.d.ts.map +1 -0
  94. package/dist/node/server.js +212 -0
  95. package/dist/node/server.js.map +1 -0
  96. package/dist/node/signer-file.d.ts +34 -0
  97. package/dist/node/signer-file.d.ts.map +1 -0
  98. package/dist/node/signer-file.js +183 -0
  99. package/dist/node/signer-file.js.map +1 -0
  100. package/dist/node/store.d.ts +40 -0
  101. package/dist/node/store.d.ts.map +1 -0
  102. package/dist/node/store.js +117 -0
  103. package/dist/node/store.js.map +1 -0
  104. package/dist/node/text.d.ts +29 -0
  105. package/dist/node/text.d.ts.map +1 -0
  106. package/dist/node/text.js +124 -0
  107. package/dist/node/text.js.map +1 -0
  108. package/dist/node/tools.d.ts +118 -0
  109. package/dist/node/tools.d.ts.map +1 -0
  110. package/dist/node/tools.js +548 -0
  111. package/dist/node/tools.js.map +1 -0
  112. package/package.json +108 -3
  113. package/src/core/base64.ts +18 -0
  114. package/src/core/delegation.ts +239 -0
  115. package/src/core/grant.ts +127 -0
  116. package/src/core/hex.ts +18 -0
  117. package/src/core/index.ts +84 -0
  118. package/src/core/issue.ts +209 -0
  119. package/src/core/limits.ts +8 -0
  120. package/src/core/scrapi.ts +236 -0
  121. package/src/core/signer.ts +23 -0
  122. package/src/core/statement.ts +133 -0
  123. package/src/core/version.ts +25 -0
  124. package/src/core/x402.ts +314 -0
  125. package/src/net/delegate.ts +274 -0
  126. package/src/net/http.ts +71 -0
  127. package/src/net/index.ts +26 -0
  128. package/src/net/write.ts +124 -0
  129. package/src/node/cli.ts +170 -0
  130. package/src/node/grant-store.ts +154 -0
  131. package/src/node/grant-tools.ts +707 -0
  132. package/src/node/ledger.ts +98 -0
  133. package/src/node/payer.ts +241 -0
  134. package/src/node/resolve-input.ts +96 -0
  135. package/src/node/server.ts +332 -0
  136. package/src/node/signer-file.ts +251 -0
  137. package/src/node/store.ts +175 -0
  138. package/src/node/text.ts +153 -0
  139. package/src/node/tools.ts +810 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/node/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,111 @@
1
1
  {
2
2
  "name": "@forestrie/mcp-register",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "mcpName": "dev.forestrie/register",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "description": "Sign and register a statement on a Forestrie transparency log under a grant you hold, then verify its receipt",
8
+ "keywords": [
9
+ "mcp",
10
+ "modelcontextprotocol",
11
+ "scitt",
12
+ "cose",
13
+ "receipt",
14
+ "transparency-log",
15
+ "forestrie",
16
+ "register",
17
+ "signed-statement",
18
+ "provenance",
19
+ "transparency",
20
+ "audit-log"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/forestrie/mcp-register.git"
25
+ },
26
+ "homepage": "https://github.com/forestrie/mcp-register#readme",
27
+ "bugs": {
28
+ "url": "https://github.com/forestrie/mcp-register/issues"
29
+ },
30
+ "engines": {
31
+ "node": ">=20.11.0"
32
+ },
33
+ "bin": {
34
+ "mcp-register": "./bin/mcp-register.mjs",
35
+ "forestrie-mcp-register": "./bin/mcp-register.mjs"
36
+ },
37
+ "exports": {
38
+ ".": {
39
+ "types": "./dist/core/index.d.ts",
40
+ "import": "./dist/core/index.js",
41
+ "default": "./dist/core/index.js"
42
+ },
43
+ "./net": {
44
+ "types": "./dist/net/index.d.ts",
45
+ "import": "./dist/net/index.js",
46
+ "default": "./dist/net/index.js"
47
+ },
48
+ "./server": {
49
+ "types": "./dist/node/server.d.ts",
50
+ "import": "./dist/node/server.js",
51
+ "default": "./dist/node/server.js"
52
+ },
53
+ "./package.json": "./package.json"
54
+ },
55
+ "main": "./dist/core/index.js",
56
+ "types": "./dist/core/index.d.ts",
57
+ "sideEffects": [
58
+ "./dist/node/cli.js",
59
+ "./bin/mcp-register.mjs"
60
+ ],
61
+ "files": [
62
+ "dist",
63
+ "src",
64
+ "bin",
65
+ "LICENSE",
66
+ "README.md"
67
+ ],
68
+ "dependencies": {
69
+ "@forestrie/delegation-cose": "0.3.2",
70
+ "@forestrie/encoding": "0.8.0",
71
+ "@forestrie/mcp-resolve": "0.3.0",
72
+ "@forestrie/mcp-verify": "0.5.0",
73
+ "@forestrie/receipt-verify": "2.0.0",
74
+ "@modelcontextprotocol/sdk": "1.30.0",
75
+ "viem": "2.57.4",
76
+ "zod": "^4.5.4"
77
+ },
78
+ "devDependencies": {
79
+ "@forestrie/grant-builder": "0.5.0",
80
+ "@types/node": "^22.14.0",
81
+ "@x402/core": "2.28.0",
82
+ "@x402/evm": "2.28.0",
83
+ "ajv": "8.20.0",
84
+ "ajv-formats": "3.0.1",
85
+ "esbuild": "^0.25.0",
86
+ "prettier": "^3.6.2",
87
+ "typescript": "^5.9.2",
88
+ "vitest": "^4.1.11"
89
+ },
90
+ "publishConfig": {
91
+ "registry": "https://registry.npmjs.org",
92
+ "access": "public",
93
+ "provenance": true
94
+ },
95
+ "scripts": {
96
+ "build": "tsc -p tsconfig.build.json",
97
+ "typecheck": "tsc --noEmit",
98
+ "format": "prettier --write .",
99
+ "format:check": "prettier --check .",
100
+ "check:browser-safe": "node tools/check-browser-safe.mjs",
101
+ "check:encoding-single-copy": "node scripts/check-encoding-single-copy.mjs",
102
+ "check:reverse-dependency": "node scripts/check-reverse-dependency.mjs",
103
+ "check:server-json": "node scripts/assert-server-json.mjs",
104
+ "check:stdio-clean": "node scripts/check-stdio-clean.mjs",
105
+ "test:unit": "vitest run --project unit",
106
+ "test:live": "vitest run --project live",
107
+ "test": "pnpm run check:browser-safe && pnpm run check:encoding-single-copy && pnpm run check:reverse-dependency && pnpm run check:server-json && vitest run --project unit",
108
+ "test:watch": "vitest --project unit",
109
+ "publish:dry-run": "pnpm pack && npm publish --dry-run --tag dryrun ./forestrie-mcp-register-*.tgz"
110
+ }
6
111
  }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Base64 without `Buffer`, so `src/core` stays browser-safe. Accepts the
3
+ * standard and URL-safe alphabets, as canopy does for a Forestrie-Grant.
4
+ */
5
+ export function base64ToBytes(b64: string): Uint8Array {
6
+ const std = b64.trim().replace(/-/g, "+").replace(/_/g, "/");
7
+ const padded = std + "=".repeat((4 - (std.length % 4)) % 4);
8
+ const bin = atob(padded);
9
+ const out = new Uint8Array(bin.length);
10
+ for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
11
+ return out;
12
+ }
13
+
14
+ export function bytesToBase64(bytes: Uint8Array): string {
15
+ let bin = "";
16
+ for (const b of bytes) bin += String.fromCharCode(b);
17
+ return btoa(bin);
18
+ }
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Sealing delegation for a data log this package's key owns.
3
+ *
4
+ * A data log's checkpoints are published by a sealer, and only the log's
5
+ * root key — here, the key the creation grant's `grantData` names — can
6
+ * authorise one. Without that authorisation entries sequence but no
7
+ * checkpoint ever covers them, and receipts 404 forever.
8
+ *
9
+ * The coordinator offers a *standing* delegate key for each log whose
10
+ * public root it knows: the pending-delegation entry with
11
+ * `suggestedTtlSeconds` and no `mmrStart`, vouched for by the registrar.
12
+ * This module picks that entry, verifies the voucher against the pinned
13
+ * registrar key (fail closed: a compromised coordinator must not get a
14
+ * root to delegate to a key the sealer does not hold), and builds the two
15
+ * artefacts the coordinator takes, both signed through the signer seam:
16
+ *
17
+ * - the delegation certificate (`buildDelegationCertificateEs256WithSigner`);
18
+ * - the on-chain delegation proof, low-s normalised because the on-chain
19
+ * P-256 verifier rejects high-s signatures.
20
+ *
21
+ * The same flow as forestrie-cli's `delegate` command and thinker's
22
+ * `delegateSealing`, over the published `@forestrie/delegation-cose`.
23
+ */
24
+ import {
25
+ buildDelegationCertificateEs256WithSigner,
26
+ buildOnchainDelegationToBeSignedEs256,
27
+ decodeDelegatedCoseKeyFromBytes,
28
+ normalizeEs256SignatureLowS,
29
+ parseDelegatedCoseKeyFromPayload,
30
+ parseDelegationCertificate,
31
+ type DelegationInput,
32
+ } from "@forestrie/delegation-cose";
33
+ import {
34
+ parseRegistrarKeyXY,
35
+ uuidToBytes,
36
+ verifyDelegateKeyVoucher,
37
+ } from "@forestrie/encoding";
38
+ import { base64ToBytes, bytesToBase64 } from "./base64.js";
39
+ import { sha256, toHex } from "./hex.js";
40
+ import type { Es256Signer } from "./signer.js";
41
+
42
+ /** Horizon default: effectively unbounded, as the CLI and thinker use. */
43
+ export const DEFAULT_MMR_END = Number.MAX_SAFE_INTEGER;
44
+
45
+ export class DelegationError extends Error {
46
+ constructor(
47
+ readonly code:
48
+ | "no_standing_entry"
49
+ | "voucher_rejected"
50
+ | "invalid_response"
51
+ | "invalid_input",
52
+ message: string,
53
+ ) {
54
+ super(message);
55
+ }
56
+ }
57
+
58
+ /** One entry of `GET /api/logs/{logId}/pending-delegation`'s `entries`. */
59
+ export interface PendingDelegationEntry {
60
+ delegatedPublicKey?: string;
61
+ suggestedTtlSeconds?: number;
62
+ mmrStart?: number;
63
+ voucher?: string;
64
+ sealerId?: string;
65
+ epoch?: number | string;
66
+ [k: string]: unknown;
67
+ }
68
+
69
+ export interface StandingEntry {
70
+ delegatedPublicKey: string;
71
+ suggestedTtlSeconds: number;
72
+ voucher: string;
73
+ sealerId: string;
74
+ epoch: number;
75
+ }
76
+
77
+ /**
78
+ * The standing delegate-key entry, or `undefined` when the coordinator has
79
+ * none — which is what it answers (200, no standing entry) when it has
80
+ * never learned the log's public root. That is the case `prepare` fixes.
81
+ */
82
+ export function findStandingEntry(body: unknown): StandingEntry | undefined {
83
+ if (typeof body !== "object" || body === null)
84
+ throw new DelegationError(
85
+ "invalid_response",
86
+ "pending-delegation did not return a JSON object",
87
+ );
88
+ const entries = (body as { entries?: unknown }).entries;
89
+ if (entries !== undefined && !Array.isArray(entries))
90
+ throw new DelegationError(
91
+ "invalid_response",
92
+ "pending-delegation `entries` is not an array",
93
+ );
94
+ const standing = ((entries ?? []) as PendingDelegationEntry[]).find(
95
+ (e) =>
96
+ typeof e === "object" &&
97
+ e !== null &&
98
+ e.suggestedTtlSeconds !== undefined &&
99
+ e.mmrStart === undefined,
100
+ );
101
+ if (!standing) return undefined;
102
+ if (
103
+ typeof standing.delegatedPublicKey !== "string" ||
104
+ typeof standing.voucher !== "string" ||
105
+ typeof standing.sealerId !== "string" ||
106
+ standing.epoch === undefined ||
107
+ typeof standing.suggestedTtlSeconds !== "number"
108
+ )
109
+ throw new DelegationError(
110
+ "voucher_rejected",
111
+ "the standing entry is missing its registrar voucher, sealerId or epoch; refusing to delegate",
112
+ );
113
+ const epoch = Number(standing.epoch);
114
+ if (!Number.isSafeInteger(epoch) || epoch < 0)
115
+ throw new DelegationError(
116
+ "voucher_rejected",
117
+ `the standing entry's epoch ${String(standing.epoch)} is not a non-negative integer`,
118
+ );
119
+ return {
120
+ delegatedPublicKey: standing.delegatedPublicKey,
121
+ suggestedTtlSeconds: standing.suggestedTtlSeconds,
122
+ voucher: standing.voucher,
123
+ sealerId: standing.sealerId,
124
+ epoch,
125
+ };
126
+ }
127
+
128
+ /** Verify the registrar's voucher for the standing key. Throws on any mismatch. */
129
+ export async function checkVoucher(
130
+ standing: StandingEntry,
131
+ knownSealerKeyXY: Uint8Array,
132
+ ): Promise<void> {
133
+ const pinned = parseRegistrarKeyXY(knownSealerKeyXY);
134
+ if (pinned === null)
135
+ throw new DelegationError(
136
+ "invalid_input",
137
+ `the known sealer key must be 64 bytes x‖y (got ${knownSealerKeyXY.length})`,
138
+ );
139
+ const result = await verifyDelegateKeyVoucher(
140
+ base64ToBytes(standing.voucher),
141
+ pinned,
142
+ {
143
+ sealerId: standing.sealerId,
144
+ epoch: standing.epoch,
145
+ publicKey: base64ToBytes(standing.delegatedPublicKey),
146
+ },
147
+ );
148
+ if (!result.ok)
149
+ throw new DelegationError(
150
+ "voucher_rejected",
151
+ `the registrar voucher does not check out against the pinned sealer key (${result.reason}); refusing to delegate`,
152
+ );
153
+ }
154
+
155
+ /** The JSON body of `POST /api/delegations/certificate`. */
156
+ export interface CertificateSubmission {
157
+ logId: string;
158
+ mmrStart: number;
159
+ mmrEnd: number;
160
+ delegatedPublicKey: string;
161
+ certificate: string;
162
+ issuedAt: number;
163
+ expiresAt: number;
164
+ onchainSignature: string;
165
+ }
166
+
167
+ export interface BuildDelegationInput {
168
+ logId: string;
169
+ standing: StandingEntry;
170
+ mmrEnd?: number;
171
+ ttlSeconds?: number;
172
+ }
173
+
174
+ /**
175
+ * Build the certificate submission, signing both artefacts with the log
176
+ * key. The certificate kid is `sha256(0x04‖x‖y)[0..16]`, the derivation
177
+ * delegation-cose's CryptoKeyPair path uses.
178
+ */
179
+ export async function buildCertificateSubmission(
180
+ input: BuildDelegationInput,
181
+ signer: Es256Signer,
182
+ ): Promise<CertificateSubmission> {
183
+ const mmrStart = 0;
184
+ const mmrEnd = input.mmrEnd ?? DEFAULT_MMR_END;
185
+ if (!Number.isSafeInteger(mmrEnd) || mmrEnd < 0)
186
+ throw new DelegationError(
187
+ "invalid_input",
188
+ `mmrEnd ${mmrEnd} is not a non-negative safe integer`,
189
+ );
190
+ const logIdHex32 = toHex(uuidToBytes(input.logId));
191
+ const delegatedPublicKeyCbor = base64ToBytes(
192
+ input.standing.delegatedPublicKey,
193
+ );
194
+
195
+ const xy = await signer.publicKeyXY();
196
+ const point = new Uint8Array(65);
197
+ point[0] = 0x04;
198
+ point.set(xy, 1);
199
+ const rootKid = (await sha256(point)).slice(0, 16);
200
+
201
+ const certInput: DelegationInput = {
202
+ logIdHex32,
203
+ mmrStart,
204
+ mmrEnd,
205
+ delegatedPublicKeyCbor,
206
+ ttlSeconds: input.ttlSeconds ?? input.standing.suggestedTtlSeconds,
207
+ };
208
+ const certificate = await buildDelegationCertificateEs256WithSigner(
209
+ certInput,
210
+ rootKid,
211
+ (sigStructure) => signer.sign(sigStructure),
212
+ );
213
+
214
+ const delegated = parseDelegatedCoseKeyFromPayload(
215
+ decodeDelegatedCoseKeyFromBytes(delegatedPublicKeyCbor),
216
+ );
217
+ const tbs = buildOnchainDelegationToBeSignedEs256({
218
+ logIdHex: logIdHex32,
219
+ mmrStart,
220
+ mmrEnd,
221
+ delegatedKeyX: delegated.x,
222
+ delegatedKeyY: delegated.y,
223
+ });
224
+ const onchainSignature = normalizeEs256SignatureLowS(
225
+ await signer.sign(tbs.sigStructureBytes),
226
+ );
227
+
228
+ const info = parseDelegationCertificate(certificate);
229
+ return {
230
+ logId: input.logId,
231
+ mmrStart,
232
+ mmrEnd,
233
+ delegatedPublicKey: input.standing.delegatedPublicKey,
234
+ certificate: bytesToBase64(certificate),
235
+ issuedAt: info.issuedAt,
236
+ expiresAt: info.expiresAt,
237
+ onchainSignature: bytesToBase64(onchainSignature),
238
+ };
239
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Read the grant a caller holds, before anything goes over the wire.
3
+ *
4
+ * The credential canopy takes as `Authorization: Forestrie-Grant <base64>`
5
+ * is the completed grant: a COSE Sign1 transparent statement carrying the
6
+ * grant at unprotected label -65538 and its inclusion receipt at 396.
7
+ * `decodeForestrieGrantCose` (`@forestrie/receipt-verify`) is the decoder
8
+ * canopy's own verifier uses.
9
+ *
10
+ * The checks here are the ones canopy applies at register-signed-statement
11
+ * and at prepare (canopy `grant/grant-flags.ts`,
12
+ * `scrapi/register-signed-statement.ts`, `forest/prepare-child-log.ts`),
13
+ * repeated so a wrong grant fails with a reason instead of a bare 403.
14
+ * canopy stays the authority: passing here promises nothing.
15
+ */
16
+ import { bytesToUuid, grantDataToBytes } from "@forestrie/encoding";
17
+ import { decodeForestrieGrantCose } from "@forestrie/receipt-verify";
18
+ import { bytesEqual, toHex } from "./hex.js";
19
+
20
+ export class GrantError extends Error {
21
+ readonly code = "invalid_grant";
22
+ }
23
+
24
+ export interface GrantView {
25
+ /** The log the grant authorises writes to (canopy's T): the data log. */
26
+ logId: string;
27
+ /** The governing authority log (canopy's O). */
28
+ ownerLogId: string;
29
+ /** The 8-byte wire flag bitmap, hex. */
30
+ flagsHex: string;
31
+ /** The key the grant names, as committed: 64 bytes x‖y for ES256. */
32
+ grantData: Uint8Array;
33
+ /** The batch ceiling, when the issuer sized the grant. */
34
+ maxHeight?: number;
35
+ /** GF_EXTEND with GF_DATA_LOG and not GF_AUTH_LOG. */
36
+ dataLogStatementGrant: boolean;
37
+ /**
38
+ * canopy's `isStatementRegistrationGrant`: a data-log statement grant, or
39
+ * an auth-log bootstrap grant (GF_AUTH_LOG only, with GF_CREATE|GF_EXTEND),
40
+ * whose grantData likewise binds the statement signer.
41
+ */
42
+ statementRegistrationGrant: boolean;
43
+ /** GF_CREATE and GF_EXTEND: the creation grant prepare requires. */
44
+ createAndExtend: boolean;
45
+ /** GF_AUTH_LOG without GF_DATA_LOG: an authority log, which can own children. */
46
+ authLog: boolean;
47
+ /** GF_DERIVED with GF_CHILD_PAYMENT_REQUIRED (adr-0062): registering a
48
+ * child grant under this one is x402 payment-gated where canopy enables it. */
49
+ requiresChildPayment: boolean;
50
+ }
51
+
52
+ export function inspectGrant(credential: Uint8Array): GrantView {
53
+ let decoded: ReturnType<typeof decodeForestrieGrantCose>;
54
+ try {
55
+ decoded = decodeForestrieGrantCose(credential);
56
+ } catch (err) {
57
+ throw new GrantError(
58
+ `not a Forestrie-Grant (a completed grant COSE Sign1 with the grant at unprotected label -65538): ${(err as Error).message}`,
59
+ );
60
+ }
61
+ const { grant } = decoded;
62
+ const flags = grant.grant;
63
+ const byte3 = flags.length >= 8 ? flags[3]! : 0;
64
+ const low = flags.length >= 8 ? flags[7]! : 0;
65
+ const dataLog =
66
+ (byte3 & 0x02) !== 0 && (low & 0x02) !== 0 && (low & 0x01) === 0;
67
+ return {
68
+ logId: bytesToUuid(grant.logId),
69
+ ownerLogId: bytesToUuid(grant.ownerLogId),
70
+ flagsHex: toHex(flags),
71
+ grantData: grantDataToBytes(grant.grantData),
72
+ ...(grant.maxHeight !== undefined ? { maxHeight: grant.maxHeight } : {}),
73
+ dataLogStatementGrant: dataLog,
74
+ statementRegistrationGrant:
75
+ dataLog || ((low & 0x03) === 0x01 && (byte3 & 0x03) === 0x03),
76
+ createAndExtend: (byte3 & 0x03) === 0x03,
77
+ authLog: (low & 0x03) === 0x01,
78
+ requiresChildPayment: (byte3 & 0x0c) === 0x0c,
79
+ };
80
+ }
81
+
82
+ /**
83
+ * Why this grant cannot carry statements signed by `signerXY`, or `[]`.
84
+ * Mirrors canopy's register-signed-statement admission
85
+ * (`isStatementRegistrationGrant`, the data-log owner rule, the signer
86
+ * binding).
87
+ */
88
+ export function statementGrantProblems(
89
+ grant: GrantView,
90
+ signerXY: Uint8Array,
91
+ ): string[] {
92
+ const problems: string[] = [];
93
+ if (!grant.statementRegistrationGrant)
94
+ problems.push(
95
+ `grant flags ${grant.flagsHex} do not authorise statement registration (need GF_DATA_LOG with GF_EXTEND, or GF_AUTH_LOG with GF_CREATE|GF_EXTEND)`,
96
+ );
97
+ // canopy applies the distinct-owner rule to data-log grants only.
98
+ if (grant.dataLogStatementGrant && grant.logId === grant.ownerLogId)
99
+ problems.push(
100
+ "a data-log grant must name a log other than its owner (logId equals ownerLogId)",
101
+ );
102
+ if (grant.grantData.length !== 64)
103
+ problems.push(
104
+ `grantData is ${grant.grantData.length} bytes; this package signs with ES256 and needs a 64-byte x‖y`,
105
+ );
106
+ else if (!bytesEqual(grant.grantData, signerXY))
107
+ problems.push(
108
+ "the grant names a different key than this server's log key (grantData ≠ the signer's x‖y); ask the grant issuer for a grant naming the key get_log_key returns",
109
+ );
110
+ return problems;
111
+ }
112
+
113
+ /** Why `prepare` would refuse this grant, or `[]`. Mirrors canopy prepare-child-log. */
114
+ export function prepareGrantProblems(grant: GrantView): string[] {
115
+ const problems: string[] = [];
116
+ if (!grant.createAndExtend)
117
+ problems.push(
118
+ `grant flags ${grant.flagsHex} lack GF_CREATE|GF_EXTEND; prepare takes the log's creation grant`,
119
+ );
120
+ if (grant.logId === grant.ownerLogId)
121
+ problems.push("prepare needs a child log (logId equals ownerLogId)");
122
+ if (grant.grantData.length !== 64)
123
+ problems.push(
124
+ `prepare accepts only 64-byte ES256 roots; grantData is ${grant.grantData.length} bytes`,
125
+ );
126
+ return problems;
127
+ }
@@ -0,0 +1,18 @@
1
+ export function toHex(bytes: Uint8Array): string {
2
+ let out = "";
3
+ for (const b of bytes) out += b.toString(16).padStart(2, "0");
4
+ return out;
5
+ }
6
+
7
+ export function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {
8
+ if (a.length !== b.length) return false;
9
+ let diff = 0;
10
+ for (let i = 0; i < a.length; i++) diff |= a[i]! ^ b[i]!;
11
+ return diff === 0;
12
+ }
13
+
14
+ export async function sha256(bytes: Uint8Array): Promise<Uint8Array> {
15
+ return new Uint8Array(
16
+ await crypto.subtle.digest("SHA-256", bytes as BufferSource),
17
+ );
18
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * `@forestrie/mcp-register` — the browser-safe core.
3
+ *
4
+ * This is the `"."` export. Everything reachable from here is pure over
5
+ * bytes: no `node:*`, no `fetch`, no filesystem, no MCP SDK, no key
6
+ * material. `"./net"` is the only place `fetch` is called, and `"./server"`
7
+ * is where the MCP adapter, the signer backend and the key file live.
8
+ * `pnpm run check:browser-safe` bundles this file for `platform: "browser"`
9
+ * and fails on any edge to a node builtin.
10
+ *
11
+ */
12
+
13
+ export {
14
+ PACKAGE_VERSION,
15
+ VERIFIER_VERSION,
16
+ RESOLVE_VERSION,
17
+ } from "./version.js";
18
+ export type { Es256Signer } from "./signer.js";
19
+ export { MAX_STATEMENT_BYTES } from "./limits.js";
20
+ export { base64ToBytes, bytesToBase64 } from "./base64.js";
21
+ export {
22
+ GrantError,
23
+ inspectGrant,
24
+ prepareGrantProblems,
25
+ statementGrantProblems,
26
+ } from "./grant.js";
27
+ export type { GrantView } from "./grant.js";
28
+ export {
29
+ MAX_PARENT_GRANT_BYTES,
30
+ completeGrant,
31
+ dataLogCreateExtendFlags,
32
+ grantContent,
33
+ issueChildGrant,
34
+ parentGrantProblems,
35
+ registerGrantBody,
36
+ } from "./issue.js";
37
+ export type { IssueGrantInput, IssuedGrant } from "./issue.js";
38
+ export {
39
+ DEFAULT_PAY_ASSET,
40
+ DEFAULT_PAY_NETWORK,
41
+ PaymentError,
42
+ TESTNETS,
43
+ grantPaymentNonce,
44
+ readPaymentPayload,
45
+ readPaymentRequired,
46
+ selectWithinCaps,
47
+ } from "./x402.js";
48
+ export type {
49
+ CapContext,
50
+ CapRefusalCode,
51
+ PaymentCaps,
52
+ PaymentOption,
53
+ PaymentRequired,
54
+ PaymentSummary,
55
+ } from "./x402.js";
56
+ export { StatementError, signStatement } from "./statement.js";
57
+ export type { SignStatementInput, SignedStatement } from "./statement.js";
58
+ export {
59
+ readProblem,
60
+ readReceiptResponse,
61
+ readRegisterGrantResponse,
62
+ readRegisterResponse,
63
+ readStatusResponse,
64
+ } from "./scrapi.js";
65
+ export type {
66
+ Problem,
67
+ ReceiptOutcome,
68
+ RegisterGrantOutcome,
69
+ RegisterOutcome,
70
+ ResponseView,
71
+ StatusOutcome,
72
+ } from "./scrapi.js";
73
+ export {
74
+ DEFAULT_MMR_END,
75
+ DelegationError,
76
+ buildCertificateSubmission,
77
+ checkVoucher,
78
+ findStandingEntry,
79
+ } from "./delegation.js";
80
+ export type {
81
+ CertificateSubmission,
82
+ PendingDelegationEntry,
83
+ StandingEntry,
84
+ } from "./delegation.js";