@motebit/verify 0.2.0 → 0.4.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.
- package/README.md +59 -21
- package/dist/index.d.ts +157 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +531 -33
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# @motebit/verify
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Verify any Motebit artifact — identity files, execution receipts, verifiable credentials, and verifiable presentations.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
One function. Any artifact. Zero monorepo dependencies. MIT licensed.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -14,18 +14,45 @@ npm install @motebit/verify
|
|
|
14
14
|
|
|
15
15
|
```typescript
|
|
16
16
|
import { verify } from "@motebit/verify";
|
|
17
|
-
import { readFileSync } from "node:fs";
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
const
|
|
18
|
+
// Identity file
|
|
19
|
+
const r1 = await verify(fs.readFileSync("motebit.md", "utf-8"));
|
|
20
|
+
if (r1.type === "identity" && r1.valid) {
|
|
21
|
+
console.log(r1.did); // did:key:z...
|
|
22
|
+
console.log(r1.identity); // full identity file contents
|
|
23
|
+
console.log(r1.succession); // key rotation chain (if present)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Execution receipt (object or JSON string)
|
|
27
|
+
const r2 = await verify(receipt);
|
|
28
|
+
if (r2.type === "receipt" && r2.valid) {
|
|
29
|
+
console.log(r2.signer); // did:key of the signing agent
|
|
30
|
+
console.log(r2.delegations); // nested delegation verification results
|
|
31
|
+
}
|
|
21
32
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
console.log(
|
|
26
|
-
|
|
27
|
-
console.
|
|
33
|
+
// Verifiable credential
|
|
34
|
+
const r3 = await verify(credential);
|
|
35
|
+
if (r3.type === "credential" && r3.valid) {
|
|
36
|
+
console.log(r3.issuer); // did:key of the issuer
|
|
37
|
+
console.log(r3.subject); // did:key of the subject
|
|
38
|
+
console.log(r3.expired); // false
|
|
28
39
|
}
|
|
40
|
+
|
|
41
|
+
// Verifiable presentation
|
|
42
|
+
const r4 = await verify(presentation);
|
|
43
|
+
if (r4.type === "presentation" && r4.valid) {
|
|
44
|
+
console.log(r4.holder); // did:key of the holder
|
|
45
|
+
console.log(r4.credentials); // each credential verified independently
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Strict mode
|
|
50
|
+
|
|
51
|
+
Pass `expectedType` to fail fast if the artifact doesn't match:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
const result = await verify(artifact, { expectedType: "receipt" });
|
|
55
|
+
// result.valid is false if artifact is not a receipt
|
|
29
56
|
```
|
|
30
57
|
|
|
31
58
|
### Parse without verifying
|
|
@@ -33,29 +60,40 @@ if (result.valid) {
|
|
|
33
60
|
```typescript
|
|
34
61
|
import { parse } from "@motebit/verify";
|
|
35
62
|
|
|
36
|
-
const { frontmatter, signature, rawFrontmatter } = parse(
|
|
63
|
+
const { frontmatter, signature, rawFrontmatter } = parse(identityFileContent);
|
|
37
64
|
console.log(frontmatter.motebit_id);
|
|
38
65
|
```
|
|
39
66
|
|
|
40
67
|
## API
|
|
41
68
|
|
|
42
|
-
### `verify(
|
|
69
|
+
### `verify(artifact, options?): Promise<VerifyResult>`
|
|
70
|
+
|
|
71
|
+
Verify any Motebit artifact. Detects the type automatically from the input.
|
|
72
|
+
|
|
73
|
+
- **Strings** containing `---` are parsed as identity files
|
|
74
|
+
- **Strings** containing JSON are parsed and detected by shape
|
|
75
|
+
- **Objects** are detected by shape: receipts have `task_id` + `signature`, credentials have `credentialSubject` + `proof`, presentations have `holder` + `verifiableCredential` + `proof`
|
|
43
76
|
|
|
44
|
-
|
|
77
|
+
Returns a discriminated union — narrow on `result.type` to access type-specific fields.
|
|
45
78
|
|
|
46
|
-
|
|
79
|
+
### `verifyIdentityFile(content): Promise<LegacyVerifyResult>`
|
|
47
80
|
|
|
48
|
-
|
|
81
|
+
Verify a `motebit.md` identity file. Returns the legacy result shape with `.identity`, `.did`, `.error` fields directly (no type narrowing needed).
|
|
49
82
|
|
|
50
|
-
|
|
83
|
+
### `parse(content): { frontmatter, signature, rawFrontmatter }`
|
|
51
84
|
|
|
52
|
-
|
|
85
|
+
Parse a `motebit.md` file into its components. Does not verify the signature. Throws if malformed.
|
|
53
86
|
|
|
54
|
-
## What
|
|
87
|
+
## What can it verify?
|
|
55
88
|
|
|
56
|
-
|
|
89
|
+
| Artifact | Input | What it checks |
|
|
90
|
+
| ----------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
91
|
+
| Identity file | String (YAML frontmatter + Ed25519 signature) | Signature over frontmatter, succession chain linkage + temporal ordering |
|
|
92
|
+
| Execution receipt | Object or JSON | Ed25519 signature over canonical JSON, embedded public key, recursive delegation chain |
|
|
93
|
+
| Verifiable credential | Object or JSON | eddsa-jcs-2022 Data Integrity proof, expiry, issuer DID extraction |
|
|
94
|
+
| Verifiable presentation | Object or JSON | Envelope proof + each contained credential independently |
|
|
57
95
|
|
|
58
|
-
|
|
96
|
+
All verification is **offline** — no network calls, no relay lookup, no runtime dependency. Receipts embed the signer's public key. Credentials embed the issuer's DID. Everything needed for verification is in the artifact itself.
|
|
59
97
|
|
|
60
98
|
## License
|
|
61
99
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @motebit/verify — Standalone verifier for
|
|
2
|
+
* @motebit/verify — Standalone verifier for all Motebit artifacts.
|
|
3
|
+
*
|
|
4
|
+
* Verifies identity files, execution receipts, verifiable credentials,
|
|
5
|
+
* and verifiable presentations. One function, any artifact, zero config.
|
|
3
6
|
*
|
|
4
|
-
* Implements the verification algorithm from the motebit/identity@1.0 spec.
|
|
5
7
|
* Zero monorepo dependencies — only @noble/ed25519 for cryptography.
|
|
6
8
|
*
|
|
7
9
|
* Usage:
|
|
8
10
|
* import { verify } from "@motebit/verify";
|
|
11
|
+
*
|
|
12
|
+
* // Identity file
|
|
9
13
|
* const result = await verify(fs.readFileSync("motebit.md", "utf-8"));
|
|
10
|
-
*
|
|
14
|
+
*
|
|
15
|
+
* // Execution receipt (JSON)
|
|
16
|
+
* const result = await verify(receiptJson);
|
|
17
|
+
*
|
|
18
|
+
* // Verifiable credential or presentation (JSON)
|
|
19
|
+
* const result = await verify(credentialJson);
|
|
20
|
+
*
|
|
21
|
+
* // With expected type (fail-fast on misclassification)
|
|
22
|
+
* const result = await verify(artifact, { expectedType: "receipt" });
|
|
11
23
|
*/
|
|
12
24
|
export interface MotebitIdentityFile {
|
|
13
25
|
spec: string;
|
|
@@ -47,11 +59,121 @@ export interface MotebitIdentityFile {
|
|
|
47
59
|
public_key: string;
|
|
48
60
|
registered_at: string;
|
|
49
61
|
}>;
|
|
62
|
+
succession?: Array<SuccessionRecord>;
|
|
63
|
+
}
|
|
64
|
+
export interface SuccessionRecord {
|
|
65
|
+
old_public_key: string;
|
|
66
|
+
new_public_key: string;
|
|
67
|
+
timestamp: number;
|
|
68
|
+
reason?: string;
|
|
69
|
+
old_key_signature: string;
|
|
70
|
+
new_key_signature: string;
|
|
71
|
+
}
|
|
72
|
+
export interface ExecutionReceipt {
|
|
73
|
+
task_id: string;
|
|
74
|
+
motebit_id: string;
|
|
75
|
+
/** Signer's Ed25519 public key (hex). Enables verification without relay lookup. */
|
|
76
|
+
public_key?: string;
|
|
77
|
+
device_id: string;
|
|
78
|
+
submitted_at: number;
|
|
79
|
+
completed_at: number;
|
|
80
|
+
status: string;
|
|
81
|
+
result: string;
|
|
82
|
+
tools_used: string[];
|
|
83
|
+
memories_formed: number;
|
|
84
|
+
prompt_hash: string;
|
|
85
|
+
result_hash: string;
|
|
86
|
+
delegation_receipts?: ExecutionReceipt[];
|
|
87
|
+
delegated_scope?: string;
|
|
88
|
+
signature: string;
|
|
50
89
|
}
|
|
51
|
-
export interface
|
|
90
|
+
export interface DataIntegrityProof {
|
|
91
|
+
type: "DataIntegrityProof";
|
|
92
|
+
cryptosuite: "eddsa-jcs-2022";
|
|
93
|
+
created: string;
|
|
94
|
+
verificationMethod: string;
|
|
95
|
+
proofPurpose: "assertionMethod" | "authentication";
|
|
96
|
+
proofValue: string;
|
|
97
|
+
}
|
|
98
|
+
export interface VerifiableCredential {
|
|
99
|
+
"@context": string[];
|
|
100
|
+
type: string[];
|
|
101
|
+
issuer: string;
|
|
102
|
+
credentialSubject: Record<string, unknown> & {
|
|
103
|
+
id: string;
|
|
104
|
+
};
|
|
105
|
+
validFrom: string;
|
|
106
|
+
validUntil?: string;
|
|
107
|
+
credentialStatus?: {
|
|
108
|
+
id: string;
|
|
109
|
+
type: string;
|
|
110
|
+
};
|
|
111
|
+
proof: DataIntegrityProof;
|
|
112
|
+
}
|
|
113
|
+
export interface VerifiablePresentation {
|
|
114
|
+
"@context": string[];
|
|
115
|
+
type: string[];
|
|
116
|
+
holder: string;
|
|
117
|
+
verifiableCredential: VerifiableCredential[];
|
|
118
|
+
proof: DataIntegrityProof;
|
|
119
|
+
}
|
|
120
|
+
export interface VerificationError {
|
|
121
|
+
message: string;
|
|
122
|
+
path?: string;
|
|
123
|
+
}
|
|
124
|
+
interface BaseResult {
|
|
52
125
|
valid: boolean;
|
|
126
|
+
errors?: VerificationError[];
|
|
127
|
+
}
|
|
128
|
+
export interface IdentityVerifyResult extends BaseResult {
|
|
129
|
+
type: "identity";
|
|
53
130
|
identity: MotebitIdentityFile | null;
|
|
131
|
+
did?: string;
|
|
132
|
+
/** First error message. Convenience accessor for backward compatibility. */
|
|
54
133
|
error?: string;
|
|
134
|
+
succession?: {
|
|
135
|
+
valid: boolean;
|
|
136
|
+
genesis_public_key?: string;
|
|
137
|
+
rotations: number;
|
|
138
|
+
error?: string;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export interface ReceiptVerifyResult extends BaseResult {
|
|
142
|
+
type: "receipt";
|
|
143
|
+
receipt: ExecutionReceipt | null;
|
|
144
|
+
signer?: string;
|
|
145
|
+
delegations?: ReceiptVerifyResult[];
|
|
146
|
+
}
|
|
147
|
+
export interface CredentialVerifyResult extends BaseResult {
|
|
148
|
+
type: "credential";
|
|
149
|
+
credential: VerifiableCredential | null;
|
|
150
|
+
issuer?: string;
|
|
151
|
+
subject?: string;
|
|
152
|
+
expired?: boolean;
|
|
153
|
+
}
|
|
154
|
+
export interface PresentationVerifyResult extends BaseResult {
|
|
155
|
+
type: "presentation";
|
|
156
|
+
presentation: VerifiablePresentation | null;
|
|
157
|
+
holder?: string;
|
|
158
|
+
credentials?: CredentialVerifyResult[];
|
|
159
|
+
}
|
|
160
|
+
export type VerifyResult = IdentityVerifyResult | ReceiptVerifyResult | CredentialVerifyResult | PresentationVerifyResult;
|
|
161
|
+
export type ArtifactType = VerifyResult["type"];
|
|
162
|
+
export interface VerifyOptions {
|
|
163
|
+
expectedType?: ArtifactType;
|
|
164
|
+
}
|
|
165
|
+
/** @deprecated Use VerifyResult instead. Kept for backward compatibility. */
|
|
166
|
+
export interface LegacyVerifyResult {
|
|
167
|
+
valid: boolean;
|
|
168
|
+
identity: MotebitIdentityFile | null;
|
|
169
|
+
did?: string;
|
|
170
|
+
error?: string;
|
|
171
|
+
succession?: {
|
|
172
|
+
valid: boolean;
|
|
173
|
+
genesis_public_key?: string;
|
|
174
|
+
rotations: number;
|
|
175
|
+
error?: string;
|
|
176
|
+
};
|
|
55
177
|
}
|
|
56
178
|
/**
|
|
57
179
|
* Parse a motebit.md file into its components.
|
|
@@ -63,12 +185,38 @@ export declare function parse(content: string): {
|
|
|
63
185
|
rawFrontmatter: string;
|
|
64
186
|
};
|
|
65
187
|
/**
|
|
66
|
-
* Verify
|
|
188
|
+
* Verify any Motebit artifact: identity file, execution receipt,
|
|
189
|
+
* verifiable credential, or verifiable presentation.
|
|
190
|
+
*
|
|
191
|
+
* Accepts strings (identity files, JSON) or parsed objects (receipts,
|
|
192
|
+
* credentials, presentations). Detects the artifact type automatically.
|
|
193
|
+
*
|
|
194
|
+
* Use `options.expectedType` to fail fast if the artifact doesn't match
|
|
195
|
+
* the expected type.
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* import { verify } from "@motebit/verify";
|
|
67
200
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
201
|
+
* // Identity file (string)
|
|
202
|
+
* const r1 = await verify(identityFileContent);
|
|
203
|
+
* if (r1.type === "identity" && r1.valid) console.log(r1.did);
|
|
204
|
+
*
|
|
205
|
+
* // Execution receipt (object or JSON string)
|
|
206
|
+
* const r2 = await verify(receipt, { expectedType: "receipt" });
|
|
207
|
+
* if (r2.type === "receipt" && r2.valid) console.log(r2.signer);
|
|
208
|
+
*
|
|
209
|
+
* // Verifiable credential
|
|
210
|
+
* const r3 = await verify(credential);
|
|
211
|
+
* if (r3.type === "credential" && r3.valid) console.log(r3.issuer);
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
export declare function verify(artifact: unknown, options?: VerifyOptions): Promise<VerifyResult>;
|
|
215
|
+
/**
|
|
216
|
+
* Verify a motebit.md identity file. Backward-compatible with pre-0.4.0.
|
|
70
217
|
*
|
|
71
|
-
*
|
|
218
|
+
* @deprecated Use `verify(content)` instead — it handles all artifact types.
|
|
72
219
|
*/
|
|
73
|
-
export declare function
|
|
220
|
+
export declare function verifyIdentityFile(content: string): Promise<LegacyVerifyResult>;
|
|
221
|
+
export {};
|
|
74
222
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @motebit/verify — Standalone verifier for
|
|
2
|
+
* @motebit/verify — Standalone verifier for all Motebit artifacts.
|
|
3
|
+
*
|
|
4
|
+
* Verifies identity files, execution receipts, verifiable credentials,
|
|
5
|
+
* and verifiable presentations. One function, any artifact, zero config.
|
|
3
6
|
*
|
|
4
|
-
* Implements the verification algorithm from the motebit/identity@1.0 spec.
|
|
5
7
|
* Zero monorepo dependencies — only @noble/ed25519 for cryptography.
|
|
6
8
|
*
|
|
7
9
|
* Usage:
|
|
8
10
|
* import { verify } from "@motebit/verify";
|
|
11
|
+
*
|
|
12
|
+
* // Identity file
|
|
9
13
|
* const result = await verify(fs.readFileSync("motebit.md", "utf-8"));
|
|
10
|
-
*
|
|
14
|
+
*
|
|
15
|
+
* // Execution receipt (JSON)
|
|
16
|
+
* const result = await verify(receiptJson);
|
|
17
|
+
*
|
|
18
|
+
* // Verifiable credential or presentation (JSON)
|
|
19
|
+
* const result = await verify(credentialJson);
|
|
20
|
+
*
|
|
21
|
+
* // With expected type (fail-fast on misclassification)
|
|
22
|
+
* const result = await verify(artifact, { expectedType: "receipt" });
|
|
11
23
|
*/
|
|
12
24
|
import * as ed from "@noble/ed25519";
|
|
13
25
|
import { sha512 } from "@noble/hashes/sha512";
|
|
@@ -15,9 +27,9 @@ import { sha512 } from "@noble/hashes/sha512";
|
|
|
15
27
|
if (!ed.hashes.sha512) {
|
|
16
28
|
ed.hashes.sha512 = (msg) => sha512(msg);
|
|
17
29
|
}
|
|
18
|
-
//
|
|
30
|
+
// ===========================================================================
|
|
19
31
|
// Minimal YAML parser — handles only the motebit identity schema
|
|
20
|
-
//
|
|
32
|
+
// ===========================================================================
|
|
21
33
|
function parseYamlValue(raw) {
|
|
22
34
|
const trimmed = raw.trim();
|
|
23
35
|
if (trimmed === "null")
|
|
@@ -133,9 +145,9 @@ function parseYaml(text) {
|
|
|
133
145
|
}
|
|
134
146
|
return root;
|
|
135
147
|
}
|
|
136
|
-
//
|
|
148
|
+
// ===========================================================================
|
|
137
149
|
// Encoding helpers
|
|
138
|
-
//
|
|
150
|
+
// ===========================================================================
|
|
139
151
|
function hexToBytes(hex) {
|
|
140
152
|
const bytes = new Uint8Array(hex.length / 2);
|
|
141
153
|
for (let i = 0; i < hex.length; i += 2) {
|
|
@@ -152,14 +164,144 @@ function fromBase64Url(str) {
|
|
|
152
164
|
}
|
|
153
165
|
return bytes;
|
|
154
166
|
}
|
|
155
|
-
//
|
|
167
|
+
// ===========================================================================
|
|
168
|
+
// Canonical JSON (JCS/RFC 8785) — must match @motebit/crypto exactly
|
|
169
|
+
// ===========================================================================
|
|
170
|
+
function canonicalJson(obj) {
|
|
171
|
+
if (obj === null || obj === undefined)
|
|
172
|
+
return JSON.stringify(obj);
|
|
173
|
+
if (typeof obj !== "object")
|
|
174
|
+
return JSON.stringify(obj);
|
|
175
|
+
if (Array.isArray(obj)) {
|
|
176
|
+
return "[" + obj.map((item) => canonicalJson(item)).join(",") + "]";
|
|
177
|
+
}
|
|
178
|
+
const sorted = Object.keys(obj).sort();
|
|
179
|
+
const entries = [];
|
|
180
|
+
for (const key of sorted) {
|
|
181
|
+
const val = obj[key];
|
|
182
|
+
if (val === undefined)
|
|
183
|
+
continue;
|
|
184
|
+
entries.push(JSON.stringify(key) + ":" + canonicalJson(val));
|
|
185
|
+
}
|
|
186
|
+
return "{" + entries.join(",") + "}";
|
|
187
|
+
}
|
|
188
|
+
// ===========================================================================
|
|
189
|
+
// Base58btc encoding/decoding (for did:key and VC proof values)
|
|
190
|
+
// ===========================================================================
|
|
191
|
+
const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
192
|
+
function base58btcEncode(bytes) {
|
|
193
|
+
let zeros = 0;
|
|
194
|
+
while (zeros < bytes.length && bytes[zeros] === 0)
|
|
195
|
+
zeros++;
|
|
196
|
+
let value = 0n;
|
|
197
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
198
|
+
value = value * 256n + BigInt(bytes[i]);
|
|
199
|
+
}
|
|
200
|
+
let result = "";
|
|
201
|
+
while (value > 0n) {
|
|
202
|
+
const remainder = Number(value % 58n);
|
|
203
|
+
value = value / 58n;
|
|
204
|
+
result = BASE58_ALPHABET[remainder] + result;
|
|
205
|
+
}
|
|
206
|
+
return BASE58_ALPHABET[0].repeat(zeros) + result;
|
|
207
|
+
}
|
|
208
|
+
function base58btcDecode(str) {
|
|
209
|
+
let zeros = 0;
|
|
210
|
+
while (zeros < str.length && str[zeros] === BASE58_ALPHABET[0])
|
|
211
|
+
zeros++;
|
|
212
|
+
let value = 0n;
|
|
213
|
+
for (let i = 0; i < str.length; i++) {
|
|
214
|
+
const idx = BASE58_ALPHABET.indexOf(str[i]);
|
|
215
|
+
if (idx === -1)
|
|
216
|
+
throw new Error(`Invalid base58 character: ${str[i]}`);
|
|
217
|
+
value = value * 58n + BigInt(idx);
|
|
218
|
+
}
|
|
219
|
+
const hex = [];
|
|
220
|
+
while (value > 0n) {
|
|
221
|
+
const byte = Number(value & 0xffn);
|
|
222
|
+
hex.unshift(byte.toString(16).padStart(2, "0"));
|
|
223
|
+
value >>= 8n;
|
|
224
|
+
}
|
|
225
|
+
const dataBytes = hex.length > 0 ? new Uint8Array(hex.map((h) => parseInt(h, 16))) : new Uint8Array(0);
|
|
226
|
+
const result = new Uint8Array(zeros + dataBytes.length);
|
|
227
|
+
result.set(dataBytes, zeros);
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
// ===========================================================================
|
|
231
|
+
// did:key derivation and parsing
|
|
232
|
+
// ===========================================================================
|
|
233
|
+
function publicKeyToDidKey(pubKey) {
|
|
234
|
+
const prefixed = new Uint8Array(34);
|
|
235
|
+
prefixed[0] = 0xed;
|
|
236
|
+
prefixed[1] = 0x01;
|
|
237
|
+
prefixed.set(pubKey, 2);
|
|
238
|
+
return `did:key:z${base58btcEncode(prefixed)}`;
|
|
239
|
+
}
|
|
240
|
+
function didKeyToPublicKey(did) {
|
|
241
|
+
if (!did.startsWith("did:key:z")) {
|
|
242
|
+
throw new Error("Invalid did:key URI: must start with did:key:z");
|
|
243
|
+
}
|
|
244
|
+
const encoded = did.slice("did:key:z".length);
|
|
245
|
+
const decoded = base58btcDecode(encoded);
|
|
246
|
+
if (decoded.length !== 34) {
|
|
247
|
+
throw new Error(`Invalid did:key: expected 34 bytes (2 prefix + 32 key), got ${decoded.length}`);
|
|
248
|
+
}
|
|
249
|
+
if (decoded[0] !== 0xed || decoded[1] !== 0x01) {
|
|
250
|
+
throw new Error("Invalid did:key: multicodec prefix is not ed25519-pub (0xed01)");
|
|
251
|
+
}
|
|
252
|
+
return decoded.slice(2);
|
|
253
|
+
}
|
|
254
|
+
// ===========================================================================
|
|
255
|
+
// SHA-256 (Web Crypto — available in Node 18+ and all browsers)
|
|
256
|
+
// ===========================================================================
|
|
257
|
+
async function sha256(data) {
|
|
258
|
+
const buf = await crypto.subtle.digest("SHA-256", data);
|
|
259
|
+
return new Uint8Array(buf);
|
|
260
|
+
}
|
|
261
|
+
// ===========================================================================
|
|
156
262
|
// Constants
|
|
157
|
-
//
|
|
263
|
+
// ===========================================================================
|
|
158
264
|
const SIG_PREFIX = "<!-- motebit:sig:Ed25519:";
|
|
159
265
|
const SIG_SUFFIX = " -->";
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
//
|
|
266
|
+
// ===========================================================================
|
|
267
|
+
// Artifact detection
|
|
268
|
+
// ===========================================================================
|
|
269
|
+
function detectArtifactType(artifact) {
|
|
270
|
+
// String → identity file (YAML frontmatter) or JSON
|
|
271
|
+
if (typeof artifact === "string") {
|
|
272
|
+
// Any string containing frontmatter delimiters is an identity file attempt
|
|
273
|
+
if (artifact.includes("---")) {
|
|
274
|
+
return "identity";
|
|
275
|
+
}
|
|
276
|
+
// Try parsing as JSON
|
|
277
|
+
try {
|
|
278
|
+
const parsed = JSON.parse(artifact);
|
|
279
|
+
return detectArtifactType(parsed);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
if (typeof artifact !== "object" || artifact === null)
|
|
286
|
+
return null;
|
|
287
|
+
const obj = artifact;
|
|
288
|
+
// Verifiable Presentation: has "holder" + "verifiableCredential" + "proof"
|
|
289
|
+
if ("holder" in obj && "verifiableCredential" in obj && "proof" in obj) {
|
|
290
|
+
return "presentation";
|
|
291
|
+
}
|
|
292
|
+
// Verifiable Credential: has "credentialSubject" + "issuer" + "proof"
|
|
293
|
+
if ("credentialSubject" in obj && "issuer" in obj && "proof" in obj) {
|
|
294
|
+
return "credential";
|
|
295
|
+
}
|
|
296
|
+
// Execution Receipt: has "task_id" + "motebit_id" + "signature" + "prompt_hash"
|
|
297
|
+
if ("task_id" in obj && "motebit_id" in obj && "signature" in obj && "prompt_hash" in obj) {
|
|
298
|
+
return "receipt";
|
|
299
|
+
}
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
// ===========================================================================
|
|
303
|
+
// Identity file parsing and verification
|
|
304
|
+
// ===========================================================================
|
|
163
305
|
/**
|
|
164
306
|
* Parse a motebit.md file into its components.
|
|
165
307
|
* Does not verify the signature — use `verify()` for that.
|
|
@@ -184,50 +326,42 @@ export function parse(content) {
|
|
|
184
326
|
const signature = content.slice(sigValueStart, sigEnd);
|
|
185
327
|
return { frontmatter, signature, rawFrontmatter };
|
|
186
328
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
* or `{ valid: false, identity: null, error }` if verification fails.
|
|
192
|
-
*
|
|
193
|
-
* Implements the motebit/identity@1.0 verification algorithm (spec §4.3).
|
|
194
|
-
*/
|
|
195
|
-
export async function verify(content) {
|
|
329
|
+
function identityError(msg) {
|
|
330
|
+
return { type: "identity", valid: false, identity: null, error: msg, errors: [{ message: msg }] };
|
|
331
|
+
}
|
|
332
|
+
async function verifyIdentity(content) {
|
|
196
333
|
let parsed;
|
|
197
334
|
try {
|
|
198
335
|
parsed = parse(content);
|
|
199
336
|
}
|
|
200
337
|
catch (err) {
|
|
201
338
|
const msg = err instanceof Error ? err.message : String(err);
|
|
202
|
-
return
|
|
339
|
+
return identityError(msg);
|
|
203
340
|
}
|
|
204
|
-
// Step 6: Extract and validate public key
|
|
205
341
|
const pubKeyHex = parsed.frontmatter.identity?.public_key;
|
|
206
342
|
if (!pubKeyHex) {
|
|
207
|
-
return
|
|
343
|
+
return identityError("No public key in frontmatter");
|
|
208
344
|
}
|
|
209
345
|
let pubKey;
|
|
210
346
|
try {
|
|
211
347
|
pubKey = hexToBytes(pubKeyHex);
|
|
212
348
|
}
|
|
213
349
|
catch {
|
|
214
|
-
return
|
|
350
|
+
return identityError("Invalid public key hex");
|
|
215
351
|
}
|
|
216
352
|
if (pubKey.length !== 32) {
|
|
217
|
-
return
|
|
353
|
+
return identityError("Public key must be 32 bytes");
|
|
218
354
|
}
|
|
219
|
-
// Step 5: Extract and validate signature
|
|
220
355
|
let sigBytes;
|
|
221
356
|
try {
|
|
222
357
|
sigBytes = fromBase64Url(parsed.signature);
|
|
223
358
|
}
|
|
224
359
|
catch {
|
|
225
|
-
return
|
|
360
|
+
return identityError("Invalid signature encoding");
|
|
226
361
|
}
|
|
227
362
|
if (sigBytes.length !== 64) {
|
|
228
|
-
return
|
|
363
|
+
return identityError("Signature must be 64 bytes");
|
|
229
364
|
}
|
|
230
|
-
// Steps 7-8: Verify Ed25519 signature over frontmatter bytes
|
|
231
365
|
const frontmatterBytes = new TextEncoder().encode(parsed.rawFrontmatter);
|
|
232
366
|
let valid;
|
|
233
367
|
try {
|
|
@@ -236,10 +370,374 @@ export async function verify(content) {
|
|
|
236
370
|
catch {
|
|
237
371
|
valid = false;
|
|
238
372
|
}
|
|
373
|
+
if (!valid) {
|
|
374
|
+
return identityError("Signature verification failed");
|
|
375
|
+
}
|
|
376
|
+
const chain = parsed.frontmatter.succession;
|
|
377
|
+
let successionResult;
|
|
378
|
+
if (chain && chain.length > 0) {
|
|
379
|
+
successionResult = await verifySuccessionChain(chain, pubKeyHex);
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
type: "identity",
|
|
383
|
+
valid: true,
|
|
384
|
+
identity: parsed.frontmatter,
|
|
385
|
+
did: publicKeyToDidKey(pubKey),
|
|
386
|
+
...(successionResult ? { succession: successionResult } : {}),
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
// ===========================================================================
|
|
390
|
+
// Succession chain verification
|
|
391
|
+
// ===========================================================================
|
|
392
|
+
async function verifySuccessionChain(chain, currentPublicKeyHex) {
|
|
393
|
+
try {
|
|
394
|
+
for (let i = 0; i < chain.length; i++) {
|
|
395
|
+
const record = chain[i];
|
|
396
|
+
const payloadObj = {
|
|
397
|
+
old_public_key: record.old_public_key,
|
|
398
|
+
new_public_key: record.new_public_key,
|
|
399
|
+
timestamp: record.timestamp,
|
|
400
|
+
};
|
|
401
|
+
if (record.reason !== undefined) {
|
|
402
|
+
payloadObj.reason = record.reason;
|
|
403
|
+
}
|
|
404
|
+
const payload = canonicalJson(payloadObj);
|
|
405
|
+
const message = new TextEncoder().encode(payload);
|
|
406
|
+
const oldPubKey = hexToBytes(record.old_public_key);
|
|
407
|
+
const oldSig = hexToBytes(record.old_key_signature);
|
|
408
|
+
const oldValid = await ed.verifyAsync(oldSig, message, oldPubKey);
|
|
409
|
+
if (!oldValid) {
|
|
410
|
+
return {
|
|
411
|
+
valid: false,
|
|
412
|
+
rotations: chain.length,
|
|
413
|
+
error: `Succession record ${i}: old_key_signature verification failed`,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
const newPubKey = hexToBytes(record.new_public_key);
|
|
417
|
+
const newSig = hexToBytes(record.new_key_signature);
|
|
418
|
+
const newValid = await ed.verifyAsync(newSig, message, newPubKey);
|
|
419
|
+
if (!newValid) {
|
|
420
|
+
return {
|
|
421
|
+
valid: false,
|
|
422
|
+
rotations: chain.length,
|
|
423
|
+
error: `Succession record ${i}: new_key_signature verification failed`,
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
if (i < chain.length - 1) {
|
|
427
|
+
const next = chain[i + 1];
|
|
428
|
+
if (record.new_public_key !== next.old_public_key) {
|
|
429
|
+
return {
|
|
430
|
+
valid: false,
|
|
431
|
+
rotations: chain.length,
|
|
432
|
+
error: `Succession chain broken at record ${i}: new_public_key does not match next record's old_public_key`,
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
if (i < chain.length - 1) {
|
|
437
|
+
const next = chain[i + 1];
|
|
438
|
+
if (record.timestamp >= next.timestamp) {
|
|
439
|
+
return {
|
|
440
|
+
valid: false,
|
|
441
|
+
rotations: chain.length,
|
|
442
|
+
error: `Succession chain temporal ordering violated at record ${i}`,
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
const lastRecord = chain[chain.length - 1];
|
|
448
|
+
if (lastRecord.new_public_key !== currentPublicKeyHex) {
|
|
449
|
+
return {
|
|
450
|
+
valid: false,
|
|
451
|
+
rotations: chain.length,
|
|
452
|
+
error: "Succession chain terminal: last new_public_key does not match identity public_key",
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
return {
|
|
456
|
+
valid: true,
|
|
457
|
+
genesis_public_key: chain[0].old_public_key,
|
|
458
|
+
rotations: chain.length,
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
catch (err) {
|
|
462
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
463
|
+
return {
|
|
464
|
+
valid: false,
|
|
465
|
+
rotations: 0,
|
|
466
|
+
error: `Succession verification error: ${msg}`,
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
// ===========================================================================
|
|
471
|
+
// Receipt verification
|
|
472
|
+
// ===========================================================================
|
|
473
|
+
async function verifyReceiptSignature(receipt, publicKey) {
|
|
474
|
+
const { signature, ...body } = receipt;
|
|
475
|
+
const canonical = canonicalJson(body);
|
|
476
|
+
const message = new TextEncoder().encode(canonical);
|
|
477
|
+
try {
|
|
478
|
+
const sig = fromBase64Url(signature);
|
|
479
|
+
return await ed.verifyAsync(sig, message, publicKey);
|
|
480
|
+
}
|
|
481
|
+
catch {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
async function verifyReceipt(receipt) {
|
|
486
|
+
// Resolve public key: embedded in receipt, or fail
|
|
487
|
+
let publicKey = null;
|
|
488
|
+
let signerDid;
|
|
489
|
+
if (receipt.public_key) {
|
|
490
|
+
try {
|
|
491
|
+
publicKey = hexToBytes(receipt.public_key);
|
|
492
|
+
if (publicKey.length === 32) {
|
|
493
|
+
signerDid = publicKeyToDidKey(publicKey);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
publicKey = null;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
publicKey = null;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
if (!publicKey) {
|
|
504
|
+
// Recursively verify delegations even if root can't be verified
|
|
505
|
+
const delegations = await verifyReceiptDelegations(receipt);
|
|
506
|
+
return {
|
|
507
|
+
type: "receipt",
|
|
508
|
+
valid: false,
|
|
509
|
+
receipt,
|
|
510
|
+
errors: [{ message: "No embedded public_key — cannot verify without known keys" }],
|
|
511
|
+
...(delegations.length > 0 ? { delegations } : {}),
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
const signatureValid = await verifyReceiptSignature(receipt, publicKey);
|
|
515
|
+
const errors = [];
|
|
516
|
+
if (!signatureValid) {
|
|
517
|
+
errors.push({ message: "Receipt signature verification failed" });
|
|
518
|
+
}
|
|
519
|
+
// Recursively verify delegation receipts
|
|
520
|
+
const delegations = await verifyReceiptDelegations(receipt);
|
|
521
|
+
const delegationErrors = delegations.filter((d) => !d.valid);
|
|
522
|
+
for (const d of delegationErrors) {
|
|
523
|
+
errors.push({
|
|
524
|
+
message: `Delegation ${d.receipt?.task_id ?? "unknown"}: verification failed`,
|
|
525
|
+
path: `delegation_receipts`,
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
return {
|
|
529
|
+
type: "receipt",
|
|
530
|
+
valid: signatureValid && delegationErrors.length === 0,
|
|
531
|
+
receipt,
|
|
532
|
+
signer: signerDid,
|
|
533
|
+
...(delegations.length > 0 ? { delegations } : {}),
|
|
534
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
async function verifyReceiptDelegations(receipt) {
|
|
538
|
+
if (!receipt.delegation_receipts || receipt.delegation_receipts.length === 0) {
|
|
539
|
+
return [];
|
|
540
|
+
}
|
|
541
|
+
return Promise.all(receipt.delegation_receipts.map((dr) => verifyReceipt(dr)));
|
|
542
|
+
}
|
|
543
|
+
// ===========================================================================
|
|
544
|
+
// Verifiable Credential verification (eddsa-jcs-2022)
|
|
545
|
+
// ===========================================================================
|
|
546
|
+
async function verifyDataIntegrity(document, proof) {
|
|
547
|
+
if (proof.type !== "DataIntegrityProof" || proof.cryptosuite !== "eddsa-jcs-2022") {
|
|
548
|
+
return false;
|
|
549
|
+
}
|
|
550
|
+
// Extract public key from verificationMethod (did:key URI)
|
|
551
|
+
const did = proof.verificationMethod.split("#")[0];
|
|
552
|
+
let publicKey;
|
|
553
|
+
try {
|
|
554
|
+
publicKey = didKeyToPublicKey(did);
|
|
555
|
+
}
|
|
556
|
+
catch {
|
|
557
|
+
return false;
|
|
558
|
+
}
|
|
559
|
+
// Reconstruct proof options (without proofValue)
|
|
560
|
+
const { proofValue, ...proofOptions } = proof;
|
|
561
|
+
const encoder = new TextEncoder();
|
|
562
|
+
// Hash proof options and document separately
|
|
563
|
+
const proofHash = await sha256(encoder.encode(canonicalJson(proofOptions)));
|
|
564
|
+
const { proof: _proof, ...docWithoutProof } = document;
|
|
565
|
+
const docHash = await sha256(encoder.encode(canonicalJson(docWithoutProof)));
|
|
566
|
+
// Concatenate hashes and verify
|
|
567
|
+
const combined = new Uint8Array(proofHash.length + docHash.length);
|
|
568
|
+
combined.set(proofHash);
|
|
569
|
+
combined.set(docHash, proofHash.length);
|
|
570
|
+
// Decode signature (strip "z" prefix — base58btc multibase)
|
|
571
|
+
if (!proofValue.startsWith("z"))
|
|
572
|
+
return false;
|
|
573
|
+
let signature;
|
|
574
|
+
try {
|
|
575
|
+
signature = base58btcDecode(proofValue.slice(1));
|
|
576
|
+
}
|
|
577
|
+
catch {
|
|
578
|
+
return false;
|
|
579
|
+
}
|
|
580
|
+
return ed.verifyAsync(signature, combined, publicKey);
|
|
581
|
+
}
|
|
582
|
+
async function verifyCredential(vc) {
|
|
583
|
+
const errors = [];
|
|
584
|
+
// Check expiry
|
|
585
|
+
let expired = false;
|
|
586
|
+
if (vc.validUntil) {
|
|
587
|
+
const expiresAt = new Date(vc.validUntil).getTime();
|
|
588
|
+
if (Date.now() > expiresAt) {
|
|
589
|
+
expired = true;
|
|
590
|
+
errors.push({ message: "Credential has expired", path: "validUntil" });
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
// Verify proof
|
|
594
|
+
const proofValid = await verifyDataIntegrity(vc, vc.proof);
|
|
595
|
+
if (!proofValid) {
|
|
596
|
+
errors.push({ message: "Credential proof verification failed", path: "proof" });
|
|
597
|
+
}
|
|
598
|
+
// Extract issuer DID
|
|
599
|
+
const issuerDid = typeof vc.issuer === "string" ? vc.issuer : undefined;
|
|
600
|
+
const subjectId = vc.credentialSubject?.id;
|
|
601
|
+
return {
|
|
602
|
+
type: "credential",
|
|
603
|
+
valid: proofValid && !expired,
|
|
604
|
+
credential: vc,
|
|
605
|
+
issuer: issuerDid,
|
|
606
|
+
subject: subjectId,
|
|
607
|
+
expired,
|
|
608
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
// ===========================================================================
|
|
612
|
+
// Verifiable Presentation verification
|
|
613
|
+
// ===========================================================================
|
|
614
|
+
async function verifyPresentation(vp) {
|
|
615
|
+
const errors = [];
|
|
616
|
+
// Verify VP envelope proof
|
|
617
|
+
const envelopeValid = await verifyDataIntegrity(vp, vp.proof);
|
|
618
|
+
if (!envelopeValid) {
|
|
619
|
+
errors.push({ message: "Presentation proof verification failed", path: "proof" });
|
|
620
|
+
}
|
|
621
|
+
// Verify each contained credential
|
|
622
|
+
const credentialResults = [];
|
|
623
|
+
for (let i = 0; i < vp.verifiableCredential.length; i++) {
|
|
624
|
+
const vc = vp.verifiableCredential[i];
|
|
625
|
+
const vcResult = await verifyCredential(vc);
|
|
626
|
+
credentialResults.push(vcResult);
|
|
627
|
+
if (!vcResult.valid) {
|
|
628
|
+
errors.push({
|
|
629
|
+
message: `Credential ${i} verification failed`,
|
|
630
|
+
path: `verifiableCredential[${i}]`,
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
const allValid = envelopeValid && credentialResults.every((c) => c.valid);
|
|
635
|
+
return {
|
|
636
|
+
type: "presentation",
|
|
637
|
+
valid: allValid,
|
|
638
|
+
presentation: vp,
|
|
639
|
+
holder: vp.holder,
|
|
640
|
+
credentials: credentialResults,
|
|
641
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
642
|
+
};
|
|
643
|
+
}
|
|
644
|
+
// ===========================================================================
|
|
645
|
+
// Public API
|
|
646
|
+
// ===========================================================================
|
|
647
|
+
/**
|
|
648
|
+
* Verify any Motebit artifact: identity file, execution receipt,
|
|
649
|
+
* verifiable credential, or verifiable presentation.
|
|
650
|
+
*
|
|
651
|
+
* Accepts strings (identity files, JSON) or parsed objects (receipts,
|
|
652
|
+
* credentials, presentations). Detects the artifact type automatically.
|
|
653
|
+
*
|
|
654
|
+
* Use `options.expectedType` to fail fast if the artifact doesn't match
|
|
655
|
+
* the expected type.
|
|
656
|
+
*
|
|
657
|
+
* @example
|
|
658
|
+
* ```ts
|
|
659
|
+
* import { verify } from "@motebit/verify";
|
|
660
|
+
*
|
|
661
|
+
* // Identity file (string)
|
|
662
|
+
* const r1 = await verify(identityFileContent);
|
|
663
|
+
* if (r1.type === "identity" && r1.valid) console.log(r1.did);
|
|
664
|
+
*
|
|
665
|
+
* // Execution receipt (object or JSON string)
|
|
666
|
+
* const r2 = await verify(receipt, { expectedType: "receipt" });
|
|
667
|
+
* if (r2.type === "receipt" && r2.valid) console.log(r2.signer);
|
|
668
|
+
*
|
|
669
|
+
* // Verifiable credential
|
|
670
|
+
* const r3 = await verify(credential);
|
|
671
|
+
* if (r3.type === "credential" && r3.valid) console.log(r3.issuer);
|
|
672
|
+
* ```
|
|
673
|
+
*/
|
|
674
|
+
export async function verify(artifact, options) {
|
|
675
|
+
const detected = detectArtifactType(artifact);
|
|
676
|
+
if (detected === null) {
|
|
677
|
+
// Return a generic failure — use identity as the default type for backward compat
|
|
678
|
+
const fallbackType = options?.expectedType ?? "identity";
|
|
679
|
+
return {
|
|
680
|
+
type: fallbackType,
|
|
681
|
+
valid: false,
|
|
682
|
+
...(fallbackType === "identity" ? { identity: null } : {}),
|
|
683
|
+
...(fallbackType === "receipt" ? { receipt: null } : {}),
|
|
684
|
+
...(fallbackType === "credential" ? { credential: null } : {}),
|
|
685
|
+
...(fallbackType === "presentation" ? { presentation: null } : {}),
|
|
686
|
+
errors: [{ message: "Unrecognized artifact format" }],
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
if (options?.expectedType && options.expectedType !== detected) {
|
|
690
|
+
return {
|
|
691
|
+
type: detected,
|
|
692
|
+
valid: false,
|
|
693
|
+
...(detected === "identity" ? { identity: null } : {}),
|
|
694
|
+
...(detected === "receipt" ? { receipt: null } : {}),
|
|
695
|
+
...(detected === "credential" ? { credential: null } : {}),
|
|
696
|
+
...(detected === "presentation" ? { presentation: null } : {}),
|
|
697
|
+
errors: [{ message: `Expected type "${options.expectedType}" but detected "${detected}"` }],
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
// Parse JSON strings into objects for non-identity types
|
|
701
|
+
let resolved = artifact;
|
|
702
|
+
if (typeof artifact === "string" && detected !== "identity") {
|
|
703
|
+
try {
|
|
704
|
+
resolved = JSON.parse(artifact);
|
|
705
|
+
}
|
|
706
|
+
catch {
|
|
707
|
+
return {
|
|
708
|
+
type: detected,
|
|
709
|
+
valid: false,
|
|
710
|
+
...(detected === "receipt" ? { receipt: null } : {}),
|
|
711
|
+
...(detected === "credential" ? { credential: null } : {}),
|
|
712
|
+
...(detected === "presentation" ? { presentation: null } : {}),
|
|
713
|
+
errors: [{ message: "Failed to parse JSON" }],
|
|
714
|
+
};
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
switch (detected) {
|
|
718
|
+
case "identity":
|
|
719
|
+
return verifyIdentity(resolved);
|
|
720
|
+
case "receipt":
|
|
721
|
+
return verifyReceipt(resolved);
|
|
722
|
+
case "credential":
|
|
723
|
+
return verifyCredential(resolved);
|
|
724
|
+
case "presentation":
|
|
725
|
+
return verifyPresentation(resolved);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
/**
|
|
729
|
+
* Verify a motebit.md identity file. Backward-compatible with pre-0.4.0.
|
|
730
|
+
*
|
|
731
|
+
* @deprecated Use `verify(content)` instead — it handles all artifact types.
|
|
732
|
+
*/
|
|
733
|
+
export async function verifyIdentityFile(content) {
|
|
734
|
+
const result = await verifyIdentity(content);
|
|
239
735
|
return {
|
|
240
|
-
valid,
|
|
241
|
-
identity:
|
|
242
|
-
|
|
736
|
+
valid: result.valid,
|
|
737
|
+
identity: result.identity,
|
|
738
|
+
did: result.did,
|
|
739
|
+
error: result.errors?.[0]?.message,
|
|
740
|
+
succession: result.succession,
|
|
243
741
|
};
|
|
244
742
|
}
|
|
245
743
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@motebit/verify",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Verify
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Verify any Motebit artifact — identity files, execution receipts, verifiable credentials, and presentations. One function, zero deps, MIT.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"build": "tsc -b",
|
|
54
54
|
"test": "vitest run",
|
|
55
55
|
"typecheck": "tsc --noEmit",
|
|
56
|
+
"lint": "eslint --parser-options=project:tsconfig.eslint.json src/",
|
|
56
57
|
"clean": "rm -rf dist .turbo *.tsbuildinfo"
|
|
57
58
|
}
|
|
58
59
|
}
|