@mcp-index/sdk 0.18.1 → 0.19.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 (43) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +178 -0
  3. package/dist/src/ai.d.ts +96 -0
  4. package/dist/src/ai.d.ts.map +1 -0
  5. package/dist/src/ai.js +151 -0
  6. package/dist/src/ai.js.map +1 -0
  7. package/dist/src/lock/check.d.ts +143 -0
  8. package/dist/src/lock/check.d.ts.map +1 -0
  9. package/dist/src/lock/check.js +274 -0
  10. package/dist/src/lock/check.js.map +1 -0
  11. package/dist/src/lock/digest.d.ts +48 -0
  12. package/dist/src/lock/digest.d.ts.map +1 -0
  13. package/dist/src/lock/digest.js +234 -0
  14. package/dist/src/lock/digest.js.map +1 -0
  15. package/dist/src/lock/events.d.ts +82 -0
  16. package/dist/src/lock/events.d.ts.map +1 -0
  17. package/dist/src/lock/events.js +80 -0
  18. package/dist/src/lock/events.js.map +1 -0
  19. package/dist/src/lock/index.d.ts +20 -0
  20. package/dist/src/lock/index.d.ts.map +1 -0
  21. package/dist/src/lock/index.js +14 -0
  22. package/dist/src/lock/index.js.map +1 -0
  23. package/dist/src/lock/lock.d.ts +195 -0
  24. package/dist/src/lock/lock.d.ts.map +1 -0
  25. package/dist/src/lock/lock.js +1075 -0
  26. package/dist/src/lock/lock.js.map +1 -0
  27. package/dist/src/lock/pg.d.ts +150 -0
  28. package/dist/src/lock/pg.d.ts.map +1 -0
  29. package/dist/src/lock/pg.js +539 -0
  30. package/dist/src/lock/pg.js.map +1 -0
  31. package/dist/src/lock/rawList.d.ts +127 -0
  32. package/dist/src/lock/rawList.d.ts.map +1 -0
  33. package/dist/src/lock/rawList.js +561 -0
  34. package/dist/src/lock/rawList.js.map +1 -0
  35. package/dist/src/lock/signing.d.ts +35 -0
  36. package/dist/src/lock/signing.d.ts.map +1 -0
  37. package/dist/src/lock/signing.js +85 -0
  38. package/dist/src/lock/signing.js.map +1 -0
  39. package/dist/src/lock/store.d.ts +149 -0
  40. package/dist/src/lock/store.d.ts.map +1 -0
  41. package/dist/src/lock/store.js +459 -0
  42. package/dist/src/lock/store.js.map +1 -0
  43. package/package.json +31 -2
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Manifest signature verification (section 8.2).
3
+ *
4
+ * The signer identity and the trust root come from the host's own config
5
+ * object. Nothing here reads the lock repository or the environment for
6
+ * either. `sigstore` is an optional peer dependency, loaded on the verify
7
+ * path only; when it is missing, verify returns false and the reader fails
8
+ * with lock-signature-invalid, as it does for a missing or bad bundle.
9
+ *
10
+ * Verification is offline against a trusted_root.json the operator supplies.
11
+ * The issuer and SAN are matched exactly: sigstore treats the SAN policy as a
12
+ * regular expression, so it gets an escaped, anchored pattern, and the signer
13
+ * it returns is compared again by plain string equality.
14
+ */
15
+ import { lstatSync, readFileSync } from "node:fs";
16
+ import { createRequire } from "node:module";
17
+ function escapeRegExp(text) {
18
+ return text.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&");
19
+ }
20
+ /** Exact, anchored pattern for sigstore's regex-based SAN policy. */
21
+ export function anchoredPattern(text) {
22
+ return `^${escapeRegExp(text)}$`;
23
+ }
24
+ function readTrustedRoot(path) {
25
+ const st = lstatSync(path);
26
+ if (st.isSymbolicLink() || !st.isFile())
27
+ throw new Error("trusted root is not a regular file");
28
+ return JSON.parse(readFileSync(path, "utf8"));
29
+ }
30
+ function defaultLoader() {
31
+ const here = createRequire(import.meta.url);
32
+ // Resolve the @sigstore/* parts from sigstore's own location, so this works
33
+ // whether or not the package manager hoists them.
34
+ const main = here.resolve("sigstore");
35
+ const fromSigstore = createRequire(main);
36
+ return (name) => (name === "sigstore" ? here(main) : fromSigstore(name));
37
+ }
38
+ function loadParts(load) {
39
+ load("sigstore"); // presence check for the declared peer
40
+ const verify = load("@sigstore/verify");
41
+ const bundle = load("@sigstore/bundle");
42
+ const specs = load("@sigstore/protobuf-specs");
43
+ return {
44
+ bundleFromJSON: bundle.bundleFromJSON,
45
+ toSignedEntity: verify.toSignedEntity,
46
+ toTrustMaterial: verify.toTrustMaterial,
47
+ Verifier: verify.Verifier,
48
+ TrustedRoot: specs.TrustedRoot,
49
+ };
50
+ }
51
+ /**
52
+ * Sigstore verifier for MANIFEST.json. Returns false (never throws) on a
53
+ * missing module, unreadable trust root, malformed bundle, failed signature,
54
+ * or a signer that differs from the configured issuer and SAN.
55
+ */
56
+ export function sigstoreVerifier(options) {
57
+ return {
58
+ async verify(manifest, bundle, signer) {
59
+ try {
60
+ if (typeof signer.issuer !== "string" || typeof signer.san !== "string" || !signer.issuer || !signer.san) {
61
+ return false;
62
+ }
63
+ const parts = loadParts(options.load ?? defaultLoader());
64
+ const root = parts.TrustedRoot.fromJSON(readTrustedRoot(options.trustedRootPath));
65
+ const trust = parts.toTrustMaterial(root);
66
+ const verifier = new parts.Verifier(trust, {
67
+ tlogThreshold: options.tlogThreshold ?? 1,
68
+ ctlogThreshold: options.ctlogThreshold ?? 1,
69
+ });
70
+ const parsed = parts.bundleFromJSON(JSON.parse(Buffer.from(bundle).toString("utf8")));
71
+ const entity = parts.toSignedEntity(parsed, Buffer.from(manifest));
72
+ const result = verifier.verify(entity, {
73
+ subjectAlternativeName: anchoredPattern(signer.san),
74
+ extensions: { issuer: signer.issuer },
75
+ });
76
+ const identity = result?.identity;
77
+ return identity?.subjectAlternativeName === signer.san && identity?.extensions?.issuer === signer.issuer;
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ },
83
+ };
84
+ }
85
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../../src/lock/signing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * LockStore: where a host gets its lock snapshot and where approvals land.
3
+ *
4
+ * A snapshot is frozen and carries a snapshotId, so a decision can name the
5
+ * lock state it came from. loadSnapshot never throws for a bad lock: a lock
6
+ * failure comes back as a LockError inside the snapshot, and the check then
7
+ * withholds everything. It may throw when the store itself cannot be reached;
8
+ * hosts treat that as lock-unreadable.
9
+ *
10
+ * The file store reads `.mcp/` once per load (see lock.ts). Approvals and
11
+ * revocations take the existing create-excl file lock on `.mcp/lock.lck`
12
+ * (fileLock.ts), write the contract, then replace the shard (and the manifest,
13
+ * when one exists) by rename from a temporary file in `.mcp/`, so `.mcp/lock`
14
+ * never holds a partial file.
15
+ */
16
+ import { LockError } from "./lock.js";
17
+ import type { Approval, Identity, Lock, ManifestVerifier, SignerIdentity, Via } from "./lock.js";
18
+ export interface LockSnapshot {
19
+ readonly snapshotId: string;
20
+ /** Epoch ms when the store produced this snapshot. */
21
+ readonly loadedAt: number;
22
+ readonly lock: Lock | LockError;
23
+ }
24
+ interface ApprovalCommon {
25
+ readonly identity: Identity;
26
+ /** Who approved. A database store records its authenticated principal instead. */
27
+ readonly subject?: string;
28
+ readonly via: Via;
29
+ readonly ref?: string;
30
+ /** RFC 3339; defaults to now, to the second. */
31
+ readonly at?: string;
32
+ }
33
+ /** Approve one tool: `tool` is the raw Tool object as served (JSON.parse output). */
34
+ export type ApproveToolRequest = ApprovalCommon & {
35
+ readonly tool: unknown;
36
+ };
37
+ /** Approve the server's instructions text. */
38
+ export type ApproveInstructionsRequest = ApprovalCommon & {
39
+ readonly instructions: string;
40
+ };
41
+ export type ApproveRequest = ApproveToolRequest | ApproveInstructionsRequest;
42
+ export type RevokeRequest = {
43
+ readonly identity: Identity;
44
+ readonly tool: string;
45
+ } | {
46
+ readonly identity: Identity;
47
+ readonly instructions: true;
48
+ };
49
+ export interface LockStore {
50
+ loadSnapshot(): Promise<LockSnapshot>;
51
+ approve(request: ApproveRequest): Promise<void>;
52
+ revoke(request: RevokeRequest): Promise<void>;
53
+ }
54
+ export declare function nowRfc3339(date?: Date): string;
55
+ export declare function snapshotOfError(error: LockError, loadedAt?: number): LockSnapshot;
56
+ /** What an approval writes: digest, contract bytes and contract filename. */
57
+ export interface PreparedTool {
58
+ readonly name: string;
59
+ readonly digest: string;
60
+ readonly contract: string;
61
+ readonly body: Buffer;
62
+ /** Digest of the served top-level `_meta`, when the tool has one with a digest. */
63
+ readonly metaDigest: string | null;
64
+ }
65
+ export declare function prepareTool(tool: unknown): PreparedTool;
66
+ export declare function checkApprovalFields(request: ApprovalCommon, subject: string): Approval;
67
+ /**
68
+ * Where a host keeps the highest manifest (or head) sequence it accepted, so
69
+ * a rollback is refused across restarts (section 8.2 step 3). `read` returns
70
+ * null when nothing was recorded yet and throws when the record is unusable.
71
+ */
72
+ export interface SequenceStore {
73
+ read(): number | null;
74
+ write(sequence: number): void;
75
+ }
76
+ /**
77
+ * A host-owned file holding the sequence as ASCII digits and a newline, the
78
+ * format the Python host writes to its sequence_path. A missing file is no
79
+ * record; a file that is not a regular file or does not hold digits throws.
80
+ */
81
+ export declare function fileSequenceStore(path: string): SequenceStore;
82
+ /** A host configuration the host must not run with. Thrown when a store is constructed. */
83
+ export declare class HostConfigError extends Error {
84
+ constructor(message: string);
85
+ }
86
+ /**
87
+ * Where the system puts a host path: realpath of its longest existing part
88
+ * with the rest appended. FileLockStore opens this form, so the file it
89
+ * writes is the one hostPathProblem checked.
90
+ */
91
+ export declare function resolvedHostPath(value: string): string;
92
+ /**
93
+ * The repository that holds the lock (section 8.2, draft 1e), walking up
94
+ * from the resolved lock root. A `.git` directory ends the walk, and so does
95
+ * a `.git` file pointing into a git directory's `worktrees/` (a linked
96
+ * worktree's top). Any other `.git` file, a submodule's or one that names
97
+ * neither, is a candidate: the walk goes on so a submodule resolves to its
98
+ * superproject, and the candidate stands when nothing above has a `.git`
99
+ * entry. With no entry at all the repository is the lock root, and only the
100
+ * lock root is protected.
101
+ */
102
+ export declare function repositoryRoot(lockRoot: string): string;
103
+ /**
104
+ * Null if every named host path lies outside the repository that holds the
105
+ * lock and the lock root, else what is wrong. Inside means an existing
106
+ * leading part of the path as given, or an ancestor of its resolved form, is
107
+ * the same directory (device and inode) as the repository root or the lock
108
+ * root.
109
+ */
110
+ export declare function hostPathProblem(lockRoot: string, paths: Readonly<Record<string, string | null | undefined>>): string | null;
111
+ export interface FileLockStoreOptions {
112
+ /** Lock root: the directory that contains `.mcp/`. */
113
+ readonly root: string;
114
+ readonly requireManifest?: boolean;
115
+ /**
116
+ * From host configuration only. With a signer set, every load verifies
117
+ * MANIFEST.json, and the host must also name a sequence store
118
+ * (sequencePath or sequenceStore); without one every load is
119
+ * lock-signature-invalid.
120
+ */
121
+ readonly signer?: SignerIdentity | null;
122
+ readonly verifier?: ManifestVerifier | null;
123
+ /**
124
+ * Sigstore trusted_root.json from host configuration. Without `verifier`,
125
+ * the store verifies with sigstoreVerifier over this file. It must lie
126
+ * outside the repository that holds the lock (section 8.2).
127
+ */
128
+ readonly trustedRootPath?: string;
129
+ /**
130
+ * Host-owned file for the last accepted sequence (see fileSequenceStore).
131
+ * It must lie outside the repository that holds the lock.
132
+ */
133
+ readonly sequencePath?: string;
134
+ /** Or any other place the host keeps it. Takes precedence over sequencePath. */
135
+ readonly sequenceStore?: SequenceStore;
136
+ readonly now?: () => number;
137
+ }
138
+ /** The higher of two sequence floors; null only when both are. */
139
+ export declare function sequenceFloor(a: number | null, b: number | null): number | null;
140
+ export declare class FileLockStore implements LockStore {
141
+ #private;
142
+ /** Throws HostConfigError when sequencePath or trustedRootPath lies inside the lock's repository. */
143
+ constructor(options: FileLockStoreOptions);
144
+ loadSnapshot(): Promise<LockSnapshot>;
145
+ approve(request: ApproveRequest): Promise<void>;
146
+ revoke(request: RevokeRequest): Promise<void>;
147
+ }
148
+ export {};
149
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/lock/store.ts"],"names":[],"mappings":"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"}