@cedulon/mcp-server 0.2.4 → 0.3.1
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/dist/index.js +32 -2
- package/dist/index.js.map +1 -1
- package/dist/session.d.ts +81 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +412 -10
- package/dist/session.js.map +1 -1
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -43,6 +43,22 @@ const TOOLS = [
|
|
|
43
43
|
type: "object",
|
|
44
44
|
additionalProperties: false,
|
|
45
45
|
properties: {
|
|
46
|
+
trust: {
|
|
47
|
+
type: "object",
|
|
48
|
+
description: "Rail key you hold out of band: { publicKeyPem, accountId?, railId?, windowStartMs?, windowEndMs? }",
|
|
49
|
+
},
|
|
50
|
+
issuerTrust: {
|
|
51
|
+
type: "object",
|
|
52
|
+
description: "Issuer key(s) you hold out of band: { publicKeyPem: string | string[] }. Without it the audit checks this server's records against this server's own key.",
|
|
53
|
+
},
|
|
54
|
+
witnessTrust: {
|
|
55
|
+
type: "object",
|
|
56
|
+
description: "Transparency log key you hold out of band: { publicKeyPem: string | string[] }",
|
|
57
|
+
},
|
|
58
|
+
payeeTrust: {
|
|
59
|
+
type: "object",
|
|
60
|
+
description: "Payee keys you hold out of band, keyed by payee: { \"payee-1\": publicKeyPem }",
|
|
61
|
+
},
|
|
46
62
|
extraSettlements: {
|
|
47
63
|
type: "array",
|
|
48
64
|
description: "Optional extra extract rows, used to inject a bypass settlement in tests",
|
|
@@ -62,7 +78,7 @@ const TOOLS = [
|
|
|
62
78
|
},
|
|
63
79
|
{
|
|
64
80
|
name: "cedulon_verify_receipt",
|
|
65
|
-
description: "Verify a spend receipt COSE_Sign1 (and payee countersignature when present).",
|
|
81
|
+
description: "Verify a spend receipt COSE_Sign1 (and payee countersignature when present). Supply expectIssuerKeyPem to check it against a key you already hold; without one the receipt is only checked against the key it carries, which any key satisfies.",
|
|
66
82
|
annotations: {
|
|
67
83
|
title: "Verify a spend receipt",
|
|
68
84
|
readOnlyHint: true,
|
|
@@ -77,6 +93,14 @@ const TOOLS = [
|
|
|
77
93
|
publicKeyPem: { type: "string" },
|
|
78
94
|
counterCoseHex: { type: "string" },
|
|
79
95
|
payeePublicKeyPem: { type: "string" },
|
|
96
|
+
expectIssuerKeyPem: {
|
|
97
|
+
type: "string",
|
|
98
|
+
description: "Issuer key you hold out of band. Omit and the check is self-referential.",
|
|
99
|
+
},
|
|
100
|
+
expectPayeeKeyPem: {
|
|
101
|
+
type: "string",
|
|
102
|
+
description: "Payee key you hold out of band, for the countersignature.",
|
|
103
|
+
},
|
|
80
104
|
},
|
|
81
105
|
},
|
|
82
106
|
},
|
|
@@ -141,7 +165,13 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
141
165
|
return textResult(outcome, !outcome.ok);
|
|
142
166
|
}
|
|
143
167
|
case "cedulon_audit": {
|
|
144
|
-
const report = session.audit({
|
|
168
|
+
const report = session.audit({
|
|
169
|
+
extraSettlements: asExtraSettlements(args.extraSettlements),
|
|
170
|
+
trust: args.trust,
|
|
171
|
+
issuerTrust: args.issuerTrust,
|
|
172
|
+
witnessTrust: args.witnessTrust,
|
|
173
|
+
payeeTrust: args.payeeTrust,
|
|
174
|
+
});
|
|
145
175
|
return textResult({
|
|
146
176
|
ok: report.ok,
|
|
147
177
|
summary: report.summary,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAmC,MAAM,cAAc,CAAC;AAGnG,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;AAErC,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,qHAAqH;QACvH,WAAW,EAAE;YACX,KAAK,EAAE,wBAAwB;YAC/B,uEAAuE;YACvE,kEAAkE;YAClE,4DAA4D;YAC5D,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;gBAC7E,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;aACnF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC;SACnD;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,sHAAsH;QACxH,WAAW,EAAE;YACX,KAAK,EAAE,yBAAyB;YAChC,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,gBAAgB,EAAE;oBAChB,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,0EAA0E;oBACvF,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACvB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC5B,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAChC;wBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC;qBACvD;iBACF;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Finding } from "@cedulon/audit";
|
|
1
|
+
import { type Finding, type IssuerTrustPin, type PayeeTrustPins, type RailTrustPin } from "@cedulon/audit";
|
|
2
2
|
import { type SignedCheckpoint } from "@cedulon/checkpoint";
|
|
3
3
|
import { PolicyEngine, type Policy } from "@cedulon/core";
|
|
4
4
|
import { type SignedReceipt } from "@cedulon/receipts";
|
|
@@ -22,12 +22,29 @@ export type SpendDeny = {
|
|
|
22
22
|
export type SpendOutcome = SpendOk | SpendDeny;
|
|
23
23
|
export type AuditArgs = {
|
|
24
24
|
extraSettlements?: RailSettlement[];
|
|
25
|
+
/**
|
|
26
|
+
* Trust roots the caller holds out of band. Without them the audit is checking
|
|
27
|
+
* this server's records against this server's own key, which is a question
|
|
28
|
+
* that answers itself - so every answer it could give was conditional.
|
|
29
|
+
*/
|
|
30
|
+
trust?: RailTrustPin;
|
|
31
|
+
issuerTrust?: IssuerTrustPin;
|
|
32
|
+
witnessTrust?: IssuerTrustPin;
|
|
33
|
+
payeeTrust?: PayeeTrustPins;
|
|
25
34
|
};
|
|
35
|
+
/**
|
|
36
|
+
* Whether the file holding this server's signing key is protected by the OS.
|
|
37
|
+
* `owner-only` is a mode this platform enforces; `unprotected-on-this-platform`
|
|
38
|
+
* is Windows, where the same call succeeds and protects nothing because the
|
|
39
|
+
* access control there is the directory ACL, which this server does not set.
|
|
40
|
+
*/
|
|
41
|
+
export type StateProtection = "in-memory" | "absent" | "owner-only" | "unprotected-on-this-platform";
|
|
26
42
|
export type StatusReport = {
|
|
27
43
|
version: string;
|
|
28
44
|
policy: Record<string, unknown>;
|
|
29
45
|
receiptCount: number;
|
|
30
46
|
chainHead: string | null;
|
|
47
|
+
stateProtection: StateProtection;
|
|
31
48
|
};
|
|
32
49
|
export type PanelReceipt = {
|
|
33
50
|
payer: string;
|
|
@@ -44,7 +61,8 @@ export type PanelCheckpoint = {
|
|
|
44
61
|
startMs: number;
|
|
45
62
|
endMs: number;
|
|
46
63
|
receiptCount: number;
|
|
47
|
-
totals
|
|
64
|
+
/** `null` when the checkpoint was signed with its totals withheld. */
|
|
65
|
+
totals: Record<string, string> | null;
|
|
48
66
|
chainHead: string | null;
|
|
49
67
|
hash: string;
|
|
50
68
|
};
|
|
@@ -62,6 +80,10 @@ export type LedgerExport = {
|
|
|
62
80
|
warnings: Finding[];
|
|
63
81
|
};
|
|
64
82
|
export type VerifyArgs = {
|
|
83
|
+
/** Issuer key the caller holds out of band; without it the check is self-referential. */
|
|
84
|
+
expectIssuerKeyPem?: string;
|
|
85
|
+
/** Payee key the caller holds out of band, for the countersignature. */
|
|
86
|
+
expectPayeeKeyPem?: string;
|
|
65
87
|
receipt?: SignedReceipt;
|
|
66
88
|
coseHex?: string;
|
|
67
89
|
publicKeyPem?: string;
|
|
@@ -77,6 +99,9 @@ export declare class CedulonSession {
|
|
|
77
99
|
checkpoints: SignedCheckpoint[];
|
|
78
100
|
readonly payer: string;
|
|
79
101
|
private readonly statePath;
|
|
102
|
+
/** Fingerprint of the state file as this session last saw it. */
|
|
103
|
+
private lastSeenState;
|
|
104
|
+
private lockDepth;
|
|
80
105
|
constructor(opts?: {
|
|
81
106
|
policy?: Policy;
|
|
82
107
|
keys?: AdapterKeys;
|
|
@@ -84,17 +109,71 @@ export declare class CedulonSession {
|
|
|
84
109
|
payer?: string;
|
|
85
110
|
});
|
|
86
111
|
spend(args: SpendArgs, nowMs?: number): SpendOutcome;
|
|
112
|
+
/**
|
|
113
|
+
* Discard what this session was holding and take the file as it now stands.
|
|
114
|
+
* A conflict is otherwise permanent - the session keeps a view the disk no
|
|
115
|
+
* longer matches and refuses every write, with no way back short of restarting
|
|
116
|
+
* the process. Returns the nonces this session was holding that the file does
|
|
117
|
+
* not have, so nothing disappears silently.
|
|
118
|
+
*/
|
|
119
|
+
reload(): {
|
|
120
|
+
dropped: string[];
|
|
121
|
+
};
|
|
122
|
+
private snapshot;
|
|
123
|
+
private restore;
|
|
124
|
+
private settleAndRecord;
|
|
87
125
|
audit(args?: AuditArgs): import("@cedulon/audit").AuditReport;
|
|
88
126
|
status(): StatusReport;
|
|
127
|
+
/**
|
|
128
|
+
* Said out loud rather than left to be inferred from the absence of an error:
|
|
129
|
+
* a server that writes a private key to disk has to report which protection it
|
|
130
|
+
* actually got.
|
|
131
|
+
*/
|
|
132
|
+
stateProtection(): StateProtection;
|
|
133
|
+
/**
|
|
134
|
+
* A path checked once at startup is a path an attacker can replace afterwards,
|
|
135
|
+
* and the directories were never checked at all. Anything symlinked on the way
|
|
136
|
+
* lets whoever placed the link choose where the private key lands.
|
|
137
|
+
*/
|
|
138
|
+
private assertNoSymlink;
|
|
139
|
+
/**
|
|
140
|
+
* Reading the fingerprint and then writing leaves a window: two servers that
|
|
141
|
+
* both read before either wrote each saw an unchanged file, and one receipt
|
|
142
|
+
* disappeared with both sides reporting success. An exclusive create is the
|
|
143
|
+
* cheapest thing that actually closes it. A lock whose holder is gone is taken
|
|
144
|
+
* over rather than obeyed forever.
|
|
145
|
+
*/
|
|
146
|
+
private withStateLock;
|
|
147
|
+
private lockHolderPid;
|
|
148
|
+
/**
|
|
149
|
+
* A temp file from a write that never finished still holds the signing key in
|
|
150
|
+
* the clear. The writer that left it is gone; nothing else is going to clean
|
|
151
|
+
* it up.
|
|
152
|
+
*/
|
|
153
|
+
private sweepStaleTemp;
|
|
154
|
+
private pidIsGone;
|
|
155
|
+
private lockHolderIsGone;
|
|
89
156
|
exportLedger(): LedgerExport;
|
|
157
|
+
/**
|
|
158
|
+
* `expectIssuerKeyPem` / `expectPayeeKeyPem` are the keys the caller already
|
|
159
|
+
* holds. Without them this answers whether the receipt is internally
|
|
160
|
+
* consistent, which any minted key satisfies - so the answer says which
|
|
161
|
+
* question it answered rather than letting the caller assume the stronger one.
|
|
162
|
+
*/
|
|
90
163
|
verify(args: VerifyArgs): {
|
|
91
164
|
ok: boolean;
|
|
92
165
|
receipt: boolean;
|
|
93
166
|
countersignature: boolean | null;
|
|
167
|
+
issuerCheckedAgainstSuppliedKey: boolean;
|
|
168
|
+
payeeCheckedAgainstSuppliedKey: boolean | null;
|
|
94
169
|
};
|
|
95
170
|
private rebuildCheckpoint;
|
|
96
171
|
private load;
|
|
97
172
|
private save;
|
|
173
|
+
private writeLocked;
|
|
174
|
+
private writeState;
|
|
175
|
+
/** What the state file looked like the last time this session agreed with it. */
|
|
176
|
+
private readStateFingerprint;
|
|
98
177
|
}
|
|
99
178
|
export declare function receiptFromArgs(args: VerifyArgs): SignedReceipt;
|
|
100
179
|
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/session.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
2
3
|
import { createRequire } from "node:module";
|
|
3
|
-
import { dirname } from "node:path";
|
|
4
|
-
import { audit } from "@cedulon/audit";
|
|
4
|
+
import { basename, dirname, join } from "node:path";
|
|
5
|
+
import { audit, } from "@cedulon/audit";
|
|
5
6
|
import { buildCheckpointClaims, checkpointHash, signCheckpoint, } from "@cedulon/checkpoint";
|
|
6
7
|
import { PolicyEngine, policyDocument } from "@cedulon/core";
|
|
7
8
|
import { claimsFromCbor, generateReceiptKeys, receiptHash, verifyCounterSignature, verifyReceipt } from "@cedulon/receipts";
|
|
@@ -44,6 +45,9 @@ export class CedulonSession {
|
|
|
44
45
|
checkpoints = [];
|
|
45
46
|
payer;
|
|
46
47
|
statePath;
|
|
48
|
+
/** Fingerprint of the state file as this session last saw it. */
|
|
49
|
+
lastSeenState = null;
|
|
50
|
+
lockDepth = 0;
|
|
47
51
|
constructor(opts) {
|
|
48
52
|
this.payer = opts?.payer ?? envOr("CEDULON_PAYER", "payer-1");
|
|
49
53
|
this.statePath = opts?.statePath !== undefined ? opts.statePath : process.env.CEDULON_STATE_PATH || null;
|
|
@@ -54,10 +58,107 @@ export class CedulonSession {
|
|
|
54
58
|
receiptPublicPem: generated.publicKeyPem,
|
|
55
59
|
};
|
|
56
60
|
if (this.statePath) {
|
|
61
|
+
// Read through on load, a symlink at this path lets whoever placed it
|
|
62
|
+
// decide what this server starts up believing. Refusing the path is the
|
|
63
|
+
// only answer that does not depend on write ordering.
|
|
64
|
+
this.assertNoSymlink();
|
|
57
65
|
this.load();
|
|
66
|
+
this.lastSeenState = this.readStateFingerprint();
|
|
58
67
|
}
|
|
59
68
|
}
|
|
60
69
|
spend(args, nowMs = Date.now()) {
|
|
70
|
+
// Settle first and save afterwards and a failed save leaves the rail holding
|
|
71
|
+
// a settlement whose receipt exists only in memory. Restart, and it is a
|
|
72
|
+
// settlement with no receipt - the one condition this project exists to make
|
|
73
|
+
// impossible. So the whole thing happens under the lock, and the write is
|
|
74
|
+
// proven possible before any money moves.
|
|
75
|
+
let locked = null;
|
|
76
|
+
try {
|
|
77
|
+
locked = this.withStateLock(() => {
|
|
78
|
+
if (this.statePath) {
|
|
79
|
+
// The path is checked before the fingerprint, not after. A fingerprint
|
|
80
|
+
// taken through a replaced path answers a question about the
|
|
81
|
+
// attacker's file, and the mismatch it produces is reported as
|
|
82
|
+
// state-conflict - which an operator reads as another writer rather
|
|
83
|
+
// than as a stolen destination. Checking the path first means a
|
|
84
|
+
// hijacked one is named as what it is.
|
|
85
|
+
this.assertNoSymlink();
|
|
86
|
+
if (this.readStateFingerprint() !== this.lastSeenState) {
|
|
87
|
+
return { ok: false, reason: "state-conflict" };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Everything from here is undone together if the record cannot be
|
|
91
|
+
// written. A settlement the caller was told failed must not survive in
|
|
92
|
+
// memory, must not reach the ledger, and must not be carried out to disk
|
|
93
|
+
// by the next payment that succeeds.
|
|
94
|
+
const undo = this.snapshot();
|
|
95
|
+
try {
|
|
96
|
+
return this.settleAndRecord(args, nowMs);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
this.restore(undo);
|
|
100
|
+
if (err?.message === "cedulon-state-symlink") {
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
return { ok: false, reason: "state-io" };
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err?.message ?? "";
|
|
109
|
+
if (message.startsWith("cedulon-state-locked")) {
|
|
110
|
+
return { ok: false, reason: `state-locked:${message.split(":")[1] ?? "unknown"}` };
|
|
111
|
+
}
|
|
112
|
+
if (message === "cedulon-state-lock-io") {
|
|
113
|
+
return { ok: false, reason: "state-io" };
|
|
114
|
+
}
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
return locked;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Discard what this session was holding and take the file as it now stands.
|
|
121
|
+
* A conflict is otherwise permanent - the session keeps a view the disk no
|
|
122
|
+
* longer matches and refuses every write, with no way back short of restarting
|
|
123
|
+
* the process. Returns the nonces this session was holding that the file does
|
|
124
|
+
* not have, so nothing disappears silently.
|
|
125
|
+
*/
|
|
126
|
+
reload() {
|
|
127
|
+
const held = this.receipts.map((r) => r.claims.nonce);
|
|
128
|
+
this.receipts.length = 0;
|
|
129
|
+
this.checkpoints = [];
|
|
130
|
+
this.ledger.restore([]);
|
|
131
|
+
this.engine.store.reset();
|
|
132
|
+
this.load();
|
|
133
|
+
this.lastSeenState = this.readStateFingerprint();
|
|
134
|
+
const now = new Set(this.receipts.map((r) => r.claims.nonce));
|
|
135
|
+
return { dropped: held.filter((nonce) => !now.has(nonce)) };
|
|
136
|
+
}
|
|
137
|
+
snapshot() {
|
|
138
|
+
return {
|
|
139
|
+
receipts: [...this.receipts],
|
|
140
|
+
settlements: this.ledger.extract(),
|
|
141
|
+
checkpoints: this.checkpoints,
|
|
142
|
+
usedNonces: new Set(this.engine.store.usedNonces),
|
|
143
|
+
consumedDecisions: new Set(this.engine.store.consumedDecisions),
|
|
144
|
+
counters: { ...this.engine.store.counters },
|
|
145
|
+
nextDecision: this.engine.nextDecision,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
restore(snap) {
|
|
149
|
+
this.receipts.splice(0, this.receipts.length, ...snap.receipts);
|
|
150
|
+
this.ledger.restore(snap.settlements);
|
|
151
|
+
this.checkpoints = snap.checkpoints;
|
|
152
|
+
this.engine.store.usedNonces.clear();
|
|
153
|
+
for (const n of snap.usedNonces)
|
|
154
|
+
this.engine.store.usedNonces.add(n);
|
|
155
|
+
this.engine.store.consumedDecisions.clear();
|
|
156
|
+
for (const d of snap.consumedDecisions)
|
|
157
|
+
this.engine.store.consumedDecisions.add(d);
|
|
158
|
+
this.engine.store.counters = { ...snap.counters };
|
|
159
|
+
this.engine.nextDecision = snap.nextDecision;
|
|
160
|
+
}
|
|
161
|
+
settleAndRecord(args, nowMs) {
|
|
61
162
|
const prev = this.receipts.length === 0 ? null : receiptHash(this.receipts[this.receipts.length - 1]);
|
|
62
163
|
const result = gatedSettleWithLedger(this.engine, {
|
|
63
164
|
req: {
|
|
@@ -85,6 +186,10 @@ export class CedulonSession {
|
|
|
85
186
|
receipts: this.receipts,
|
|
86
187
|
checkpoints: this.checkpoints,
|
|
87
188
|
settlements,
|
|
189
|
+
trust: args.trust,
|
|
190
|
+
issuerTrust: args.issuerTrust,
|
|
191
|
+
witnessTrust: args.witnessTrust,
|
|
192
|
+
payeeTrust: args.payeeTrust,
|
|
88
193
|
});
|
|
89
194
|
}
|
|
90
195
|
status() {
|
|
@@ -93,8 +198,225 @@ export class CedulonSession {
|
|
|
93
198
|
policy: policyDocument(this.engine.policy),
|
|
94
199
|
receiptCount: this.receipts.length,
|
|
95
200
|
chainHead: this.receipts.length === 0 ? null : receiptHash(this.receipts[this.receipts.length - 1]),
|
|
201
|
+
stateProtection: this.stateProtection(),
|
|
96
202
|
};
|
|
97
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Said out loud rather than left to be inferred from the absence of an error:
|
|
206
|
+
* a server that writes a private key to disk has to report which protection it
|
|
207
|
+
* actually got.
|
|
208
|
+
*/
|
|
209
|
+
stateProtection() {
|
|
210
|
+
if (!this.statePath) {
|
|
211
|
+
return "in-memory";
|
|
212
|
+
}
|
|
213
|
+
let file;
|
|
214
|
+
try {
|
|
215
|
+
// Read back off the file rather than inferred from process.platform. A
|
|
216
|
+
// mount that ignores POSIX modes - a Windows drive seen from WSL, some
|
|
217
|
+
// network shares - accepts the call and leaves the file world-readable,
|
|
218
|
+
// and the claim would have been wrong in exactly the case that matters.
|
|
219
|
+
file = statSync(this.statePath);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// "There is no file" is a different fact from "the file has no
|
|
223
|
+
// protection", and an operator acting on the second would be chasing a
|
|
224
|
+
// permission problem that does not exist.
|
|
225
|
+
return "absent";
|
|
226
|
+
}
|
|
227
|
+
if ((file.mode & 0o777) !== 0o600) {
|
|
228
|
+
return "unprotected-on-this-platform";
|
|
229
|
+
}
|
|
230
|
+
// Mode 0600 says who can open the file, and the parent says who can replace
|
|
231
|
+
// it - but a grandparent anyone can write lets the parent itself be renamed
|
|
232
|
+
// away, key and all, with a decoy left in its place. So walk up: every
|
|
233
|
+
// directory on the path has to be closed to others, or sticky, which is what
|
|
234
|
+
// makes a shared /tmp safe against exactly that rename.
|
|
235
|
+
let dir = dirname(this.statePath);
|
|
236
|
+
for (;;) {
|
|
237
|
+
let entry;
|
|
238
|
+
try {
|
|
239
|
+
entry = statSync(dir);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return "unprotected-on-this-platform";
|
|
243
|
+
}
|
|
244
|
+
const openToOthers = (entry.mode & 0o022) !== 0;
|
|
245
|
+
const sticky = (entry.mode & 0o1000) !== 0;
|
|
246
|
+
if (openToOthers && !sticky) {
|
|
247
|
+
return "unprotected-on-this-platform";
|
|
248
|
+
}
|
|
249
|
+
const parent = dirname(dir);
|
|
250
|
+
if (parent === dir) {
|
|
251
|
+
return "owner-only";
|
|
252
|
+
}
|
|
253
|
+
dir = parent;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* A path checked once at startup is a path an attacker can replace afterwards,
|
|
258
|
+
* and the directories were never checked at all. Anything symlinked on the way
|
|
259
|
+
* lets whoever placed the link choose where the private key lands.
|
|
260
|
+
*/
|
|
261
|
+
assertNoSymlink() {
|
|
262
|
+
if (!this.statePath) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const seen = [];
|
|
266
|
+
let node = this.statePath;
|
|
267
|
+
for (;;) {
|
|
268
|
+
seen.push(node);
|
|
269
|
+
const parent = dirname(node);
|
|
270
|
+
if (parent === node) {
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
node = parent;
|
|
274
|
+
}
|
|
275
|
+
for (const path of seen) {
|
|
276
|
+
try {
|
|
277
|
+
if (lstatSync(path).isSymbolicLink()) {
|
|
278
|
+
throw new Error("cedulon-state-symlink");
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
if (err?.code === "ENOENT") {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
throw err;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Reading the fingerprint and then writing leaves a window: two servers that
|
|
291
|
+
* both read before either wrote each saw an unchanged file, and one receipt
|
|
292
|
+
* disappeared with both sides reporting success. An exclusive create is the
|
|
293
|
+
* cheapest thing that actually closes it. A lock whose holder is gone is taken
|
|
294
|
+
* over rather than obeyed forever.
|
|
295
|
+
*/
|
|
296
|
+
withStateLock(run) {
|
|
297
|
+
if (!this.statePath || this.lockDepth > 0) {
|
|
298
|
+
// Already held by an outer call - settling and saving happen under one
|
|
299
|
+
// lock, so the payment and the record it needs cannot be separated.
|
|
300
|
+
this.lockDepth += 1;
|
|
301
|
+
try {
|
|
302
|
+
return run();
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
this.lockDepth -= 1;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// The lock now guards the whole settle-and-save, which can run before the
|
|
309
|
+
// state file has ever been written, so its directory has to exist first.
|
|
310
|
+
mkdirSync(dirname(this.statePath), { recursive: true, mode: 0o700 });
|
|
311
|
+
const lockPath = `${this.statePath}.lock`;
|
|
312
|
+
// The lock path decides where a file gets created just as the state path
|
|
313
|
+
// does, so it is guarded the same way.
|
|
314
|
+
try {
|
|
315
|
+
if (lstatSync(lockPath).isSymbolicLink()) {
|
|
316
|
+
throw new Error("cedulon-state-symlink");
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
if (err?.code !== "ENOENT") {
|
|
321
|
+
throw err;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
this.sweepStaleTemp();
|
|
325
|
+
const claim = () => writeFileSync(lockPath, JSON.stringify({ pid: process.pid }), { flag: "wx", mode: 0o600 });
|
|
326
|
+
try {
|
|
327
|
+
claim();
|
|
328
|
+
}
|
|
329
|
+
catch (err) {
|
|
330
|
+
if (err?.code !== "EEXIST") {
|
|
331
|
+
// The lock sits beside the state file, so a directory that cannot be
|
|
332
|
+
// written refuses the lock before it ever refuses the record. That is
|
|
333
|
+
// the same failure as a write that cannot complete, and the caller has
|
|
334
|
+
// to hear it as a refused payment rather than as a crash: the mapping
|
|
335
|
+
// to state-io lives inside the lock and is unreachable from here.
|
|
336
|
+
throw new Error("cedulon-state-lock-io", { cause: err });
|
|
337
|
+
}
|
|
338
|
+
if (!this.lockHolderIsGone(lockPath)) {
|
|
339
|
+
throw new Error(`cedulon-state-locked:${this.lockHolderPid(lockPath) ?? "unknown"}`);
|
|
340
|
+
}
|
|
341
|
+
rmSync(lockPath, { force: true });
|
|
342
|
+
claim();
|
|
343
|
+
}
|
|
344
|
+
this.lockDepth += 1;
|
|
345
|
+
try {
|
|
346
|
+
return run();
|
|
347
|
+
}
|
|
348
|
+
finally {
|
|
349
|
+
this.lockDepth -= 1;
|
|
350
|
+
rmSync(lockPath, { force: true });
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
lockHolderPid(lockPath) {
|
|
354
|
+
try {
|
|
355
|
+
const pid = JSON.parse(readFileSync(lockPath, "utf8")).pid;
|
|
356
|
+
return typeof pid === "number" ? pid : null;
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* A temp file from a write that never finished still holds the signing key in
|
|
364
|
+
* the clear. The writer that left it is gone; nothing else is going to clean
|
|
365
|
+
* it up.
|
|
366
|
+
*/
|
|
367
|
+
sweepStaleTemp() {
|
|
368
|
+
if (!this.statePath) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
const dir = dirname(this.statePath);
|
|
372
|
+
const prefix = `.${basename(this.statePath)}.`;
|
|
373
|
+
let entries;
|
|
374
|
+
try {
|
|
375
|
+
entries = readdirSync(dir);
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
for (const entry of entries) {
|
|
381
|
+
if (!entry.startsWith(prefix) || !entry.endsWith(".tmp")) {
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
const pid = Number(entry.slice(prefix.length, -".tmp".length));
|
|
385
|
+
if (Number.isFinite(pid) && pid !== process.pid && !this.pidIsGone(pid)) {
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
rmSync(join(dir, entry), { force: true });
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
pidIsGone(pid) {
|
|
392
|
+
try {
|
|
393
|
+
process.kill(pid, 0);
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
catch (err) {
|
|
397
|
+
return err?.code !== "EPERM";
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
lockHolderIsGone(lockPath) {
|
|
401
|
+
let pid;
|
|
402
|
+
try {
|
|
403
|
+
pid = JSON.parse(readFileSync(lockPath, "utf8")).pid;
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
// A lock we cannot read says nothing about who holds it.
|
|
407
|
+
return true;
|
|
408
|
+
}
|
|
409
|
+
if (typeof pid !== "number" || pid === process.pid) {
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
try {
|
|
413
|
+
process.kill(pid, 0);
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
catch (err) {
|
|
417
|
+
return err?.code !== "EPERM";
|
|
418
|
+
}
|
|
419
|
+
}
|
|
98
420
|
exportLedger() {
|
|
99
421
|
const report = this.audit();
|
|
100
422
|
const gap = report.findings.find((f) => f.code === "settlement-without-receipt");
|
|
@@ -129,14 +451,35 @@ export class CedulonSession {
|
|
|
129
451
|
warnings: report.warnings,
|
|
130
452
|
};
|
|
131
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* `expectIssuerKeyPem` / `expectPayeeKeyPem` are the keys the caller already
|
|
456
|
+
* holds. Without them this answers whether the receipt is internally
|
|
457
|
+
* consistent, which any minted key satisfies - so the answer says which
|
|
458
|
+
* question it answered rather than letting the caller assume the stronger one.
|
|
459
|
+
*/
|
|
132
460
|
verify(args) {
|
|
133
461
|
const signed = receiptFromArgs(args);
|
|
134
|
-
const receiptOk = verifyReceipt(signed);
|
|
462
|
+
const receiptOk = verifyReceipt(signed, args.expectIssuerKeyPem);
|
|
463
|
+
// Two questions, so two answers. One flag read as "nothing was checked"
|
|
464
|
+
// whenever either key was missing, including when the issuer had been.
|
|
465
|
+
const issuerCheckedAgainstSuppliedKey = args.expectIssuerKeyPem !== undefined;
|
|
135
466
|
if (!signed.counterCoseHex) {
|
|
136
|
-
return {
|
|
467
|
+
return {
|
|
468
|
+
ok: receiptOk,
|
|
469
|
+
receipt: receiptOk,
|
|
470
|
+
countersignature: null,
|
|
471
|
+
issuerCheckedAgainstSuppliedKey,
|
|
472
|
+
payeeCheckedAgainstSuppliedKey: null,
|
|
473
|
+
};
|
|
137
474
|
}
|
|
138
|
-
const counterOk = verifyCounterSignature(signed);
|
|
139
|
-
return {
|
|
475
|
+
const counterOk = verifyCounterSignature(signed, args.expectPayeeKeyPem);
|
|
476
|
+
return {
|
|
477
|
+
ok: receiptOk && counterOk,
|
|
478
|
+
receipt: receiptOk,
|
|
479
|
+
countersignature: counterOk,
|
|
480
|
+
issuerCheckedAgainstSuppliedKey,
|
|
481
|
+
payeeCheckedAgainstSuppliedKey: args.expectPayeeKeyPem !== undefined,
|
|
482
|
+
};
|
|
140
483
|
}
|
|
141
484
|
rebuildCheckpoint(nowMs) {
|
|
142
485
|
if (this.receipts.length === 0) {
|
|
@@ -161,7 +504,15 @@ export class CedulonSession {
|
|
|
161
504
|
catch {
|
|
162
505
|
return;
|
|
163
506
|
}
|
|
164
|
-
|
|
507
|
+
let parsed;
|
|
508
|
+
try {
|
|
509
|
+
parsed = JSON.parse(raw);
|
|
510
|
+
}
|
|
511
|
+
catch {
|
|
512
|
+
// A file that does not parse is not an empty ledger. Starting from zero
|
|
513
|
+
// here would quietly drop every receipt the state was holding.
|
|
514
|
+
throw new Error("cedulon-state-unreadable");
|
|
515
|
+
}
|
|
165
516
|
if (parsed.version !== 1) {
|
|
166
517
|
throw new Error("cedulon-state-version");
|
|
167
518
|
}
|
|
@@ -204,8 +555,59 @@ export class CedulonSession {
|
|
|
204
555
|
allowedSum: this.engine.store.counters.allowedSum.toString(),
|
|
205
556
|
},
|
|
206
557
|
};
|
|
207
|
-
|
|
208
|
-
|
|
558
|
+
// The receipt private key is in this payload in the clear: there is no
|
|
559
|
+
// secret to encrypt it with here, so the file mode is the whole protection.
|
|
560
|
+
// And writeFileSync truncates before it writes - a crash in between leaves a
|
|
561
|
+
// short file that the next start would read as the whole ledger. Write to a
|
|
562
|
+
// temporary name in the same directory, then rename: on POSIX and on NTFS
|
|
563
|
+
// the swap is atomic, so a reader sees the old file or the new one.
|
|
564
|
+
const dir = dirname(this.statePath);
|
|
565
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
566
|
+
this.assertNoSymlink();
|
|
567
|
+
this.writeLocked(dir, payload);
|
|
568
|
+
}
|
|
569
|
+
writeLocked(dir, payload) {
|
|
570
|
+
if (!this.statePath) {
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
this.withStateLock(() => {
|
|
574
|
+
// Atomic writes stop a torn file; they do not stop a lost one. Two servers
|
|
575
|
+
// sharing a state path both load it, both append, and the later rename
|
|
576
|
+
// wins - the other one's receipt is simply gone. Comparing under the lock
|
|
577
|
+
// turns that into a loud stop.
|
|
578
|
+
const current = this.readStateFingerprint();
|
|
579
|
+
if (current !== this.lastSeenState) {
|
|
580
|
+
throw new Error("cedulon-state-conflict");
|
|
581
|
+
}
|
|
582
|
+
this.writeState(dir, payload);
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
writeState(dir, payload) {
|
|
586
|
+
if (!this.statePath) {
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
const tmp = join(dir, `.${basename(this.statePath)}.${process.pid}.tmp`);
|
|
590
|
+
writeFileSync(tmp, `${JSON.stringify(payload)}\n`, { mode: 0o600 });
|
|
591
|
+
try {
|
|
592
|
+
renameSync(tmp, this.statePath);
|
|
593
|
+
}
|
|
594
|
+
catch (err) {
|
|
595
|
+
rmSync(tmp, { force: true });
|
|
596
|
+
throw err;
|
|
597
|
+
}
|
|
598
|
+
this.lastSeenState = this.readStateFingerprint();
|
|
599
|
+
}
|
|
600
|
+
/** What the state file looked like the last time this session agreed with it. */
|
|
601
|
+
readStateFingerprint() {
|
|
602
|
+
if (!this.statePath) {
|
|
603
|
+
return null;
|
|
604
|
+
}
|
|
605
|
+
try {
|
|
606
|
+
return createHash("sha256").update(readFileSync(this.statePath)).digest("hex");
|
|
607
|
+
}
|
|
608
|
+
catch {
|
|
609
|
+
return null;
|
|
610
|
+
}
|
|
209
611
|
}
|
|
210
612
|
}
|
|
211
613
|
export function receiptFromArgs(args) {
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cedulon/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"mcpName": "io.github.dogrucanemek-alt/cedulon",
|
|
5
5
|
"description": "Local stdio MCP server for policy-gated Cedulon spend and audit.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@cedulon/audit": "^0.
|
|
48
|
-
"@cedulon/checkpoint": "^0.
|
|
49
|
-
"@cedulon/core": "^0.
|
|
50
|
-
"@cedulon/cose": "^0.
|
|
51
|
-
"@cedulon/receipts": "^0.
|
|
52
|
-
"@cedulon/x402-adapter": "^0.
|
|
47
|
+
"@cedulon/audit": "^0.3.0",
|
|
48
|
+
"@cedulon/checkpoint": "^0.3.0",
|
|
49
|
+
"@cedulon/core": "^0.3.0",
|
|
50
|
+
"@cedulon/cose": "^0.3.0",
|
|
51
|
+
"@cedulon/receipts": "^0.3.0",
|
|
52
|
+
"@cedulon/x402-adapter": "^0.3.0",
|
|
53
53
|
"@modelcontextprotocol/sdk": "^1.30.0"
|
|
54
54
|
}
|
|
55
55
|
}
|