@motebit/verify 0.3.0 → 0.5.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/LICENSE +1 -1
- package/README.md +59 -21
- package/dist/index.d.ts +158 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +535 -39
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/LICENSE
CHANGED
|
@@ -20,7 +20,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
|
22
22
|
|
|
23
|
-
"Motebit" is a trademark of
|
|
23
|
+
"Motebit" is a trademark of Motebit, Inc. The MIT License grants rights to
|
|
24
24
|
this software, not to any Motebit trademarks, logos, or branding. You may not
|
|
25
25
|
use Motebit branding in a way that suggests endorsement or affiliation without
|
|
26
26
|
written permission.
|
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,13 +59,123 @@ 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;
|
|
89
|
+
}
|
|
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 {
|
|
125
|
+
valid: boolean;
|
|
126
|
+
errors?: VerificationError[];
|
|
50
127
|
}
|
|
51
|
-
export interface
|
|
128
|
+
export interface IdentityVerifyResult extends BaseResult {
|
|
129
|
+
type: "identity";
|
|
130
|
+
identity: MotebitIdentityFile | null;
|
|
131
|
+
did?: string;
|
|
132
|
+
/** First error message. Convenience accessor for backward compatibility. */
|
|
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
|
+
/** Clock skew tolerance in seconds for credential expiry checks. Default: 60. */
|
|
165
|
+
clockSkewSeconds?: number;
|
|
166
|
+
}
|
|
167
|
+
/** @deprecated Use VerifyResult instead. Kept for backward compatibility. */
|
|
168
|
+
export interface LegacyVerifyResult {
|
|
52
169
|
valid: boolean;
|
|
53
170
|
identity: MotebitIdentityFile | null;
|
|
54
|
-
/** W3C did:key URI derived from the Ed25519 public key. Present when valid. */
|
|
55
171
|
did?: string;
|
|
56
172
|
error?: string;
|
|
173
|
+
succession?: {
|
|
174
|
+
valid: boolean;
|
|
175
|
+
genesis_public_key?: string;
|
|
176
|
+
rotations: number;
|
|
177
|
+
error?: string;
|
|
178
|
+
};
|
|
57
179
|
}
|
|
58
180
|
/**
|
|
59
181
|
* Parse a motebit.md file into its components.
|
|
@@ -65,12 +187,38 @@ export declare function parse(content: string): {
|
|
|
65
187
|
rawFrontmatter: string;
|
|
66
188
|
};
|
|
67
189
|
/**
|
|
68
|
-
* Verify
|
|
190
|
+
* Verify any Motebit artifact: identity file, execution receipt,
|
|
191
|
+
* verifiable credential, or verifiable presentation.
|
|
192
|
+
*
|
|
193
|
+
* Accepts strings (identity files, JSON) or parsed objects (receipts,
|
|
194
|
+
* credentials, presentations). Detects the artifact type automatically.
|
|
195
|
+
*
|
|
196
|
+
* Use `options.expectedType` to fail fast if the artifact doesn't match
|
|
197
|
+
* the expected type.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```ts
|
|
201
|
+
* import { verify } from "@motebit/verify";
|
|
69
202
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
203
|
+
* // Identity file (string)
|
|
204
|
+
* const r1 = await verify(identityFileContent);
|
|
205
|
+
* if (r1.type === "identity" && r1.valid) console.log(r1.did);
|
|
206
|
+
*
|
|
207
|
+
* // Execution receipt (object or JSON string)
|
|
208
|
+
* const r2 = await verify(receipt, { expectedType: "receipt" });
|
|
209
|
+
* if (r2.type === "receipt" && r2.valid) console.log(r2.signer);
|
|
210
|
+
*
|
|
211
|
+
* // Verifiable credential
|
|
212
|
+
* const r3 = await verify(credential);
|
|
213
|
+
* if (r3.type === "credential" && r3.valid) console.log(r3.issuer);
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
export declare function verify(artifact: unknown, options?: VerifyOptions): Promise<VerifyResult>;
|
|
217
|
+
/**
|
|
218
|
+
* Verify a motebit.md identity file. Backward-compatible with pre-0.4.0.
|
|
72
219
|
*
|
|
73
|
-
*
|
|
220
|
+
* @deprecated Use `verify(content)` instead — it handles all artifact types.
|
|
74
221
|
*/
|
|
75
|
-
export declare function
|
|
222
|
+
export declare function verifyIdentityFile(content: string): Promise<LegacyVerifyResult>;
|
|
223
|
+
export {};
|
|
76
224
|
//# 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) {
|
|
@@ -144,17 +156,44 @@ function hexToBytes(hex) {
|
|
|
144
156
|
return bytes;
|
|
145
157
|
}
|
|
146
158
|
function fromBase64Url(str) {
|
|
147
|
-
|
|
148
|
-
|
|
159
|
+
// Replace URL-safe chars and re-pad (atob requires padding in some environments)
|
|
160
|
+
let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
161
|
+
const pad = base64.length % 4;
|
|
162
|
+
if (pad === 2)
|
|
163
|
+
base64 += "==";
|
|
164
|
+
else if (pad === 3)
|
|
165
|
+
base64 += "=";
|
|
166
|
+
const binary = atob(base64);
|
|
149
167
|
const bytes = new Uint8Array(binary.length);
|
|
150
168
|
for (let i = 0; i < binary.length; i++) {
|
|
151
169
|
bytes[i] = binary.charCodeAt(i);
|
|
152
170
|
}
|
|
153
171
|
return bytes;
|
|
154
172
|
}
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
//
|
|
173
|
+
// ===========================================================================
|
|
174
|
+
// Canonical JSON (JCS/RFC 8785) — must match @motebit/crypto exactly
|
|
175
|
+
// ===========================================================================
|
|
176
|
+
function canonicalJson(obj) {
|
|
177
|
+
if (obj === null || obj === undefined)
|
|
178
|
+
return JSON.stringify(obj);
|
|
179
|
+
if (typeof obj !== "object")
|
|
180
|
+
return JSON.stringify(obj);
|
|
181
|
+
if (Array.isArray(obj)) {
|
|
182
|
+
return "[" + obj.map((item) => canonicalJson(item)).join(",") + "]";
|
|
183
|
+
}
|
|
184
|
+
const sorted = Object.keys(obj).sort();
|
|
185
|
+
const entries = [];
|
|
186
|
+
for (const key of sorted) {
|
|
187
|
+
const val = obj[key];
|
|
188
|
+
if (val === undefined)
|
|
189
|
+
continue;
|
|
190
|
+
entries.push(JSON.stringify(key) + ":" + canonicalJson(val));
|
|
191
|
+
}
|
|
192
|
+
return "{" + entries.join(",") + "}";
|
|
193
|
+
}
|
|
194
|
+
// ===========================================================================
|
|
195
|
+
// Base58btc encoding/decoding (for did:key and VC proof values)
|
|
196
|
+
// ===========================================================================
|
|
158
197
|
const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
159
198
|
function base58btcEncode(bytes) {
|
|
160
199
|
let zeros = 0;
|
|
@@ -172,6 +211,31 @@ function base58btcEncode(bytes) {
|
|
|
172
211
|
}
|
|
173
212
|
return BASE58_ALPHABET[0].repeat(zeros) + result;
|
|
174
213
|
}
|
|
214
|
+
function base58btcDecode(str) {
|
|
215
|
+
let zeros = 0;
|
|
216
|
+
while (zeros < str.length && str[zeros] === BASE58_ALPHABET[0])
|
|
217
|
+
zeros++;
|
|
218
|
+
let value = 0n;
|
|
219
|
+
for (let i = 0; i < str.length; i++) {
|
|
220
|
+
const idx = BASE58_ALPHABET.indexOf(str[i]);
|
|
221
|
+
if (idx === -1)
|
|
222
|
+
throw new Error(`Invalid base58 character: ${str[i]}`);
|
|
223
|
+
value = value * 58n + BigInt(idx);
|
|
224
|
+
}
|
|
225
|
+
const hex = [];
|
|
226
|
+
while (value > 0n) {
|
|
227
|
+
const byte = Number(value & 0xffn);
|
|
228
|
+
hex.unshift(byte.toString(16).padStart(2, "0"));
|
|
229
|
+
value >>= 8n;
|
|
230
|
+
}
|
|
231
|
+
const dataBytes = hex.length > 0 ? new Uint8Array(hex.map((h) => parseInt(h, 16))) : new Uint8Array(0);
|
|
232
|
+
const result = new Uint8Array(zeros + dataBytes.length);
|
|
233
|
+
result.set(dataBytes, zeros);
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
// ===========================================================================
|
|
237
|
+
// did:key derivation and parsing
|
|
238
|
+
// ===========================================================================
|
|
175
239
|
function publicKeyToDidKey(pubKey) {
|
|
176
240
|
const prefixed = new Uint8Array(34);
|
|
177
241
|
prefixed[0] = 0xed;
|
|
@@ -179,14 +243,71 @@ function publicKeyToDidKey(pubKey) {
|
|
|
179
243
|
prefixed.set(pubKey, 2);
|
|
180
244
|
return `did:key:z${base58btcEncode(prefixed)}`;
|
|
181
245
|
}
|
|
182
|
-
|
|
246
|
+
function didKeyToPublicKey(did) {
|
|
247
|
+
if (!did.startsWith("did:key:z")) {
|
|
248
|
+
throw new Error("Invalid did:key URI: must start with did:key:z");
|
|
249
|
+
}
|
|
250
|
+
const encoded = did.slice("did:key:z".length);
|
|
251
|
+
const decoded = base58btcDecode(encoded);
|
|
252
|
+
if (decoded.length !== 34) {
|
|
253
|
+
throw new Error(`Invalid did:key: expected 34 bytes (2 prefix + 32 key), got ${decoded.length}`);
|
|
254
|
+
}
|
|
255
|
+
if (decoded[0] !== 0xed || decoded[1] !== 0x01) {
|
|
256
|
+
throw new Error("Invalid did:key: multicodec prefix is not ed25519-pub (0xed01)");
|
|
257
|
+
}
|
|
258
|
+
return decoded.slice(2);
|
|
259
|
+
}
|
|
260
|
+
// ===========================================================================
|
|
261
|
+
// SHA-256 (Web Crypto — available in Node 18+ and all browsers)
|
|
262
|
+
// ===========================================================================
|
|
263
|
+
async function sha256(data) {
|
|
264
|
+
const buf = await crypto.subtle.digest("SHA-256", data);
|
|
265
|
+
return new Uint8Array(buf);
|
|
266
|
+
}
|
|
267
|
+
// ===========================================================================
|
|
183
268
|
// Constants
|
|
184
|
-
//
|
|
269
|
+
// ===========================================================================
|
|
185
270
|
const SIG_PREFIX = "<!-- motebit:sig:Ed25519:";
|
|
186
271
|
const SIG_SUFFIX = " -->";
|
|
187
|
-
//
|
|
188
|
-
//
|
|
189
|
-
//
|
|
272
|
+
// ===========================================================================
|
|
273
|
+
// Artifact detection
|
|
274
|
+
// ===========================================================================
|
|
275
|
+
function detectArtifactType(artifact) {
|
|
276
|
+
// String → identity file (YAML frontmatter) or JSON
|
|
277
|
+
if (typeof artifact === "string") {
|
|
278
|
+
// Any string containing frontmatter delimiters is an identity file attempt
|
|
279
|
+
if (artifact.includes("---")) {
|
|
280
|
+
return "identity";
|
|
281
|
+
}
|
|
282
|
+
// Try parsing as JSON
|
|
283
|
+
try {
|
|
284
|
+
const parsed = JSON.parse(artifact);
|
|
285
|
+
return detectArtifactType(parsed);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (typeof artifact !== "object" || artifact === null)
|
|
292
|
+
return null;
|
|
293
|
+
const obj = artifact;
|
|
294
|
+
// Verifiable Presentation: has "holder" + "verifiableCredential" + "proof"
|
|
295
|
+
if ("holder" in obj && "verifiableCredential" in obj && "proof" in obj) {
|
|
296
|
+
return "presentation";
|
|
297
|
+
}
|
|
298
|
+
// Verifiable Credential: has "credentialSubject" + "issuer" + "proof"
|
|
299
|
+
if ("credentialSubject" in obj && "issuer" in obj && "proof" in obj) {
|
|
300
|
+
return "credential";
|
|
301
|
+
}
|
|
302
|
+
// Execution Receipt: has "task_id" + "motebit_id" + "signature" + "prompt_hash"
|
|
303
|
+
if ("task_id" in obj && "motebit_id" in obj && "signature" in obj && "prompt_hash" in obj) {
|
|
304
|
+
return "receipt";
|
|
305
|
+
}
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
// ===========================================================================
|
|
309
|
+
// Identity file parsing and verification
|
|
310
|
+
// ===========================================================================
|
|
190
311
|
/**
|
|
191
312
|
* Parse a motebit.md file into its components.
|
|
192
313
|
* Does not verify the signature — use `verify()` for that.
|
|
@@ -211,50 +332,42 @@ export function parse(content) {
|
|
|
211
332
|
const signature = content.slice(sigValueStart, sigEnd);
|
|
212
333
|
return { frontmatter, signature, rawFrontmatter };
|
|
213
334
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
* or `{ valid: false, identity: null, error }` if verification fails.
|
|
219
|
-
*
|
|
220
|
-
* Implements the motebit/identity@1.0 verification algorithm (spec §4.3).
|
|
221
|
-
*/
|
|
222
|
-
export async function verify(content) {
|
|
335
|
+
function identityError(msg) {
|
|
336
|
+
return { type: "identity", valid: false, identity: null, error: msg, errors: [{ message: msg }] };
|
|
337
|
+
}
|
|
338
|
+
async function verifyIdentity(content) {
|
|
223
339
|
let parsed;
|
|
224
340
|
try {
|
|
225
341
|
parsed = parse(content);
|
|
226
342
|
}
|
|
227
343
|
catch (err) {
|
|
228
344
|
const msg = err instanceof Error ? err.message : String(err);
|
|
229
|
-
return
|
|
345
|
+
return identityError(msg);
|
|
230
346
|
}
|
|
231
|
-
// Step 6: Extract and validate public key
|
|
232
347
|
const pubKeyHex = parsed.frontmatter.identity?.public_key;
|
|
233
348
|
if (!pubKeyHex) {
|
|
234
|
-
return
|
|
349
|
+
return identityError("No public key in frontmatter");
|
|
235
350
|
}
|
|
236
351
|
let pubKey;
|
|
237
352
|
try {
|
|
238
353
|
pubKey = hexToBytes(pubKeyHex);
|
|
239
354
|
}
|
|
240
355
|
catch {
|
|
241
|
-
return
|
|
356
|
+
return identityError("Invalid public key hex");
|
|
242
357
|
}
|
|
243
358
|
if (pubKey.length !== 32) {
|
|
244
|
-
return
|
|
359
|
+
return identityError("Public key must be 32 bytes");
|
|
245
360
|
}
|
|
246
|
-
// Step 5: Extract and validate signature
|
|
247
361
|
let sigBytes;
|
|
248
362
|
try {
|
|
249
363
|
sigBytes = fromBase64Url(parsed.signature);
|
|
250
364
|
}
|
|
251
365
|
catch {
|
|
252
|
-
return
|
|
366
|
+
return identityError("Invalid signature encoding");
|
|
253
367
|
}
|
|
254
368
|
if (sigBytes.length !== 64) {
|
|
255
|
-
return
|
|
369
|
+
return identityError("Signature must be 64 bytes");
|
|
256
370
|
}
|
|
257
|
-
// Steps 7-8: Verify Ed25519 signature over frontmatter bytes
|
|
258
371
|
const frontmatterBytes = new TextEncoder().encode(parsed.rawFrontmatter);
|
|
259
372
|
let valid;
|
|
260
373
|
try {
|
|
@@ -263,11 +376,394 @@ export async function verify(content) {
|
|
|
263
376
|
catch {
|
|
264
377
|
valid = false;
|
|
265
378
|
}
|
|
379
|
+
if (!valid) {
|
|
380
|
+
return identityError("Signature verification failed");
|
|
381
|
+
}
|
|
382
|
+
const chain = parsed.frontmatter.succession;
|
|
383
|
+
let successionResult;
|
|
384
|
+
if (chain && chain.length > 0) {
|
|
385
|
+
successionResult = await verifySuccessionChain(chain, pubKeyHex);
|
|
386
|
+
}
|
|
387
|
+
return {
|
|
388
|
+
type: "identity",
|
|
389
|
+
valid: true,
|
|
390
|
+
identity: parsed.frontmatter,
|
|
391
|
+
did: publicKeyToDidKey(pubKey),
|
|
392
|
+
...(successionResult ? { succession: successionResult } : {}),
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
// ===========================================================================
|
|
396
|
+
// Succession chain verification
|
|
397
|
+
// ===========================================================================
|
|
398
|
+
async function verifySuccessionChain(chain, currentPublicKeyHex) {
|
|
399
|
+
try {
|
|
400
|
+
for (let i = 0; i < chain.length; i++) {
|
|
401
|
+
const record = chain[i];
|
|
402
|
+
const payloadObj = {
|
|
403
|
+
old_public_key: record.old_public_key,
|
|
404
|
+
new_public_key: record.new_public_key,
|
|
405
|
+
timestamp: record.timestamp,
|
|
406
|
+
};
|
|
407
|
+
if (record.reason !== undefined) {
|
|
408
|
+
payloadObj.reason = record.reason;
|
|
409
|
+
}
|
|
410
|
+
const payload = canonicalJson(payloadObj);
|
|
411
|
+
const message = new TextEncoder().encode(payload);
|
|
412
|
+
const oldPubKey = hexToBytes(record.old_public_key);
|
|
413
|
+
const oldSig = hexToBytes(record.old_key_signature);
|
|
414
|
+
const oldValid = await ed.verifyAsync(oldSig, message, oldPubKey);
|
|
415
|
+
if (!oldValid) {
|
|
416
|
+
return {
|
|
417
|
+
valid: false,
|
|
418
|
+
rotations: chain.length,
|
|
419
|
+
error: `Succession record ${i}: old_key_signature verification failed`,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
const newPubKey = hexToBytes(record.new_public_key);
|
|
423
|
+
const newSig = hexToBytes(record.new_key_signature);
|
|
424
|
+
const newValid = await ed.verifyAsync(newSig, message, newPubKey);
|
|
425
|
+
if (!newValid) {
|
|
426
|
+
return {
|
|
427
|
+
valid: false,
|
|
428
|
+
rotations: chain.length,
|
|
429
|
+
error: `Succession record ${i}: new_key_signature verification failed`,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
if (i < chain.length - 1) {
|
|
433
|
+
const next = chain[i + 1];
|
|
434
|
+
if (record.new_public_key !== next.old_public_key) {
|
|
435
|
+
return {
|
|
436
|
+
valid: false,
|
|
437
|
+
rotations: chain.length,
|
|
438
|
+
error: `Succession chain broken at record ${i}: new_public_key does not match next record's old_public_key`,
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (i < chain.length - 1) {
|
|
443
|
+
const next = chain[i + 1];
|
|
444
|
+
if (record.timestamp >= next.timestamp) {
|
|
445
|
+
return {
|
|
446
|
+
valid: false,
|
|
447
|
+
rotations: chain.length,
|
|
448
|
+
error: `Succession chain temporal ordering violated at record ${i}`,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
const lastRecord = chain[chain.length - 1];
|
|
454
|
+
if (lastRecord.new_public_key !== currentPublicKeyHex) {
|
|
455
|
+
return {
|
|
456
|
+
valid: false,
|
|
457
|
+
rotations: chain.length,
|
|
458
|
+
error: "Succession chain terminal: last new_public_key does not match identity public_key",
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
return {
|
|
462
|
+
valid: true,
|
|
463
|
+
genesis_public_key: chain[0].old_public_key,
|
|
464
|
+
rotations: chain.length,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
catch (err) {
|
|
468
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
469
|
+
return {
|
|
470
|
+
valid: false,
|
|
471
|
+
rotations: 0,
|
|
472
|
+
error: `Succession verification error: ${msg}`,
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
// ===========================================================================
|
|
477
|
+
// Receipt verification
|
|
478
|
+
// ===========================================================================
|
|
479
|
+
async function verifyReceiptSignature(receipt, publicKey) {
|
|
480
|
+
const { signature, ...body } = receipt;
|
|
481
|
+
if (!signature || signature.trim() === "") {
|
|
482
|
+
return { valid: false, error: "Receipt signature is empty" };
|
|
483
|
+
}
|
|
484
|
+
let sig;
|
|
485
|
+
try {
|
|
486
|
+
sig = fromBase64Url(signature);
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
return { valid: false, error: "Receipt signature is not valid base64url" };
|
|
490
|
+
}
|
|
491
|
+
if (sig.length !== 64) {
|
|
492
|
+
return { valid: false, error: `Receipt signature must be 64 bytes, got ${sig.length}` };
|
|
493
|
+
}
|
|
494
|
+
const canonical = canonicalJson(body);
|
|
495
|
+
const message = new TextEncoder().encode(canonical);
|
|
496
|
+
try {
|
|
497
|
+
const valid = await ed.verifyAsync(sig, message, publicKey);
|
|
498
|
+
return { valid };
|
|
499
|
+
}
|
|
500
|
+
catch {
|
|
501
|
+
return { valid: false, error: "Ed25519 verification threw" };
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
async function verifyReceipt(receipt) {
|
|
505
|
+
// Resolve public key: embedded in receipt, or fail
|
|
506
|
+
let publicKey = null;
|
|
507
|
+
let signerDid;
|
|
508
|
+
if (receipt.public_key) {
|
|
509
|
+
try {
|
|
510
|
+
publicKey = hexToBytes(receipt.public_key);
|
|
511
|
+
if (publicKey.length === 32) {
|
|
512
|
+
signerDid = publicKeyToDidKey(publicKey);
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
publicKey = null;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
catch {
|
|
519
|
+
publicKey = null;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
if (!publicKey) {
|
|
523
|
+
// Recursively verify delegations even if root can't be verified
|
|
524
|
+
const delegations = await verifyReceiptDelegations(receipt);
|
|
525
|
+
return {
|
|
526
|
+
type: "receipt",
|
|
527
|
+
valid: false,
|
|
528
|
+
receipt,
|
|
529
|
+
errors: [{ message: "No embedded public_key — cannot verify without known keys" }],
|
|
530
|
+
...(delegations.length > 0 ? { delegations } : {}),
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
const sigResult = await verifyReceiptSignature(receipt, publicKey);
|
|
534
|
+
const errors = [];
|
|
535
|
+
if (!sigResult.valid) {
|
|
536
|
+
errors.push({ message: sigResult.error ?? "Receipt signature verification failed" });
|
|
537
|
+
}
|
|
538
|
+
// Recursively verify delegation receipts
|
|
539
|
+
const delegations = await verifyReceiptDelegations(receipt);
|
|
540
|
+
const delegationErrors = delegations.filter((d) => !d.valid);
|
|
541
|
+
for (const d of delegationErrors) {
|
|
542
|
+
errors.push({
|
|
543
|
+
message: `Delegation ${d.receipt?.task_id ?? "unknown"}: verification failed`,
|
|
544
|
+
path: `delegation_receipts`,
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
return {
|
|
548
|
+
type: "receipt",
|
|
549
|
+
valid: sigResult.valid && delegationErrors.length === 0,
|
|
550
|
+
receipt,
|
|
551
|
+
signer: signerDid,
|
|
552
|
+
...(delegations.length > 0 ? { delegations } : {}),
|
|
553
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
554
|
+
};
|
|
555
|
+
}
|
|
556
|
+
async function verifyReceiptDelegations(receipt) {
|
|
557
|
+
if (!receipt.delegation_receipts || receipt.delegation_receipts.length === 0) {
|
|
558
|
+
return [];
|
|
559
|
+
}
|
|
560
|
+
return Promise.all(receipt.delegation_receipts.map((dr) => verifyReceipt(dr)));
|
|
561
|
+
}
|
|
562
|
+
// ===========================================================================
|
|
563
|
+
// Verifiable Credential verification (eddsa-jcs-2022)
|
|
564
|
+
// ===========================================================================
|
|
565
|
+
async function verifyDataIntegrity(document, proof) {
|
|
566
|
+
if (proof.type !== "DataIntegrityProof" || proof.cryptosuite !== "eddsa-jcs-2022") {
|
|
567
|
+
return false;
|
|
568
|
+
}
|
|
569
|
+
// Extract public key from verificationMethod (did:key URI)
|
|
570
|
+
const did = proof.verificationMethod.split("#")[0];
|
|
571
|
+
let publicKey;
|
|
572
|
+
try {
|
|
573
|
+
publicKey = didKeyToPublicKey(did);
|
|
574
|
+
}
|
|
575
|
+
catch {
|
|
576
|
+
return false;
|
|
577
|
+
}
|
|
578
|
+
// Reconstruct proof options (without proofValue)
|
|
579
|
+
const { proofValue, ...proofOptions } = proof;
|
|
580
|
+
const encoder = new TextEncoder();
|
|
581
|
+
// Hash proof options and document separately
|
|
582
|
+
const proofHash = await sha256(encoder.encode(canonicalJson(proofOptions)));
|
|
583
|
+
const { proof: _proof, ...docWithoutProof } = document;
|
|
584
|
+
const docHash = await sha256(encoder.encode(canonicalJson(docWithoutProof)));
|
|
585
|
+
// Concatenate hashes and verify
|
|
586
|
+
const combined = new Uint8Array(proofHash.length + docHash.length);
|
|
587
|
+
combined.set(proofHash);
|
|
588
|
+
combined.set(docHash, proofHash.length);
|
|
589
|
+
// Decode signature (strip "z" prefix — base58btc multibase)
|
|
590
|
+
if (!proofValue.startsWith("z"))
|
|
591
|
+
return false;
|
|
592
|
+
let signature;
|
|
593
|
+
try {
|
|
594
|
+
signature = base58btcDecode(proofValue.slice(1));
|
|
595
|
+
}
|
|
596
|
+
catch {
|
|
597
|
+
return false;
|
|
598
|
+
}
|
|
599
|
+
try {
|
|
600
|
+
return await ed.verifyAsync(signature, combined, publicKey);
|
|
601
|
+
}
|
|
602
|
+
catch {
|
|
603
|
+
return false;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
const DEFAULT_CLOCK_SKEW_SECONDS = 60;
|
|
607
|
+
async function verifyCredential(vc, clockSkewSeconds = DEFAULT_CLOCK_SKEW_SECONDS) {
|
|
608
|
+
const errors = [];
|
|
609
|
+
// Check expiry (with clock skew tolerance for distributed systems)
|
|
610
|
+
let expired = false;
|
|
611
|
+
if (vc.validUntil) {
|
|
612
|
+
const expiresAt = new Date(vc.validUntil).getTime();
|
|
613
|
+
const skewMs = clockSkewSeconds * 1000;
|
|
614
|
+
if (Date.now() > expiresAt + skewMs) {
|
|
615
|
+
expired = true;
|
|
616
|
+
errors.push({ message: "Credential has expired", path: "validUntil" });
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
// Verify proof
|
|
620
|
+
const proofValid = await verifyDataIntegrity(vc, vc.proof);
|
|
621
|
+
if (!proofValid) {
|
|
622
|
+
errors.push({ message: "Credential proof verification failed", path: "proof" });
|
|
623
|
+
}
|
|
624
|
+
// Extract issuer DID
|
|
625
|
+
const issuerDid = typeof vc.issuer === "string" ? vc.issuer : undefined;
|
|
626
|
+
const subjectId = vc.credentialSubject?.id;
|
|
627
|
+
return {
|
|
628
|
+
type: "credential",
|
|
629
|
+
valid: proofValid && !expired,
|
|
630
|
+
credential: vc,
|
|
631
|
+
issuer: issuerDid,
|
|
632
|
+
subject: subjectId,
|
|
633
|
+
expired,
|
|
634
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
// ===========================================================================
|
|
638
|
+
// Verifiable Presentation verification
|
|
639
|
+
// ===========================================================================
|
|
640
|
+
async function verifyPresentation(vp, clockSkewSeconds = DEFAULT_CLOCK_SKEW_SECONDS) {
|
|
641
|
+
const errors = [];
|
|
642
|
+
// Verify VP envelope proof
|
|
643
|
+
const envelopeValid = await verifyDataIntegrity(vp, vp.proof);
|
|
644
|
+
if (!envelopeValid) {
|
|
645
|
+
errors.push({ message: "Presentation proof verification failed", path: "proof" });
|
|
646
|
+
}
|
|
647
|
+
// Verify each contained credential
|
|
648
|
+
const credentialResults = [];
|
|
649
|
+
for (let i = 0; i < vp.verifiableCredential.length; i++) {
|
|
650
|
+
const vc = vp.verifiableCredential[i];
|
|
651
|
+
const vcResult = await verifyCredential(vc, clockSkewSeconds);
|
|
652
|
+
credentialResults.push(vcResult);
|
|
653
|
+
if (!vcResult.valid) {
|
|
654
|
+
errors.push({
|
|
655
|
+
message: `Credential ${i} verification failed`,
|
|
656
|
+
path: `verifiableCredential[${i}]`,
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
const allValid = envelopeValid && credentialResults.every((c) => c.valid);
|
|
661
|
+
return {
|
|
662
|
+
type: "presentation",
|
|
663
|
+
valid: allValid,
|
|
664
|
+
presentation: vp,
|
|
665
|
+
holder: vp.holder,
|
|
666
|
+
credentials: credentialResults,
|
|
667
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
668
|
+
};
|
|
669
|
+
}
|
|
670
|
+
// ===========================================================================
|
|
671
|
+
// Public API
|
|
672
|
+
// ===========================================================================
|
|
673
|
+
/**
|
|
674
|
+
* Verify any Motebit artifact: identity file, execution receipt,
|
|
675
|
+
* verifiable credential, or verifiable presentation.
|
|
676
|
+
*
|
|
677
|
+
* Accepts strings (identity files, JSON) or parsed objects (receipts,
|
|
678
|
+
* credentials, presentations). Detects the artifact type automatically.
|
|
679
|
+
*
|
|
680
|
+
* Use `options.expectedType` to fail fast if the artifact doesn't match
|
|
681
|
+
* the expected type.
|
|
682
|
+
*
|
|
683
|
+
* @example
|
|
684
|
+
* ```ts
|
|
685
|
+
* import { verify } from "@motebit/verify";
|
|
686
|
+
*
|
|
687
|
+
* // Identity file (string)
|
|
688
|
+
* const r1 = await verify(identityFileContent);
|
|
689
|
+
* if (r1.type === "identity" && r1.valid) console.log(r1.did);
|
|
690
|
+
*
|
|
691
|
+
* // Execution receipt (object or JSON string)
|
|
692
|
+
* const r2 = await verify(receipt, { expectedType: "receipt" });
|
|
693
|
+
* if (r2.type === "receipt" && r2.valid) console.log(r2.signer);
|
|
694
|
+
*
|
|
695
|
+
* // Verifiable credential
|
|
696
|
+
* const r3 = await verify(credential);
|
|
697
|
+
* if (r3.type === "credential" && r3.valid) console.log(r3.issuer);
|
|
698
|
+
* ```
|
|
699
|
+
*/
|
|
700
|
+
export async function verify(artifact, options) {
|
|
701
|
+
const detected = detectArtifactType(artifact);
|
|
702
|
+
if (detected === null) {
|
|
703
|
+
// Return a generic failure — use identity as the default type for backward compat
|
|
704
|
+
const fallbackType = options?.expectedType ?? "identity";
|
|
705
|
+
return {
|
|
706
|
+
type: fallbackType,
|
|
707
|
+
valid: false,
|
|
708
|
+
...(fallbackType === "identity" ? { identity: null } : {}),
|
|
709
|
+
...(fallbackType === "receipt" ? { receipt: null } : {}),
|
|
710
|
+
...(fallbackType === "credential" ? { credential: null } : {}),
|
|
711
|
+
...(fallbackType === "presentation" ? { presentation: null } : {}),
|
|
712
|
+
errors: [{ message: "Unrecognized artifact format" }],
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
if (options?.expectedType && options.expectedType !== detected) {
|
|
716
|
+
return {
|
|
717
|
+
type: detected,
|
|
718
|
+
valid: false,
|
|
719
|
+
...(detected === "identity" ? { identity: null } : {}),
|
|
720
|
+
...(detected === "receipt" ? { receipt: null } : {}),
|
|
721
|
+
...(detected === "credential" ? { credential: null } : {}),
|
|
722
|
+
...(detected === "presentation" ? { presentation: null } : {}),
|
|
723
|
+
errors: [{ message: `Expected type "${options.expectedType}" but detected "${detected}"` }],
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
// Parse JSON strings into objects for non-identity types
|
|
727
|
+
let resolved = artifact;
|
|
728
|
+
if (typeof artifact === "string" && detected !== "identity") {
|
|
729
|
+
try {
|
|
730
|
+
resolved = JSON.parse(artifact);
|
|
731
|
+
}
|
|
732
|
+
catch {
|
|
733
|
+
return {
|
|
734
|
+
type: detected,
|
|
735
|
+
valid: false,
|
|
736
|
+
...(detected === "receipt" ? { receipt: null } : {}),
|
|
737
|
+
...(detected === "credential" ? { credential: null } : {}),
|
|
738
|
+
...(detected === "presentation" ? { presentation: null } : {}),
|
|
739
|
+
errors: [{ message: "Failed to parse JSON" }],
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
switch (detected) {
|
|
744
|
+
case "identity":
|
|
745
|
+
return verifyIdentity(resolved);
|
|
746
|
+
case "receipt":
|
|
747
|
+
return verifyReceipt(resolved);
|
|
748
|
+
case "credential":
|
|
749
|
+
return verifyCredential(resolved, options?.clockSkewSeconds);
|
|
750
|
+
case "presentation":
|
|
751
|
+
return verifyPresentation(resolved, options?.clockSkewSeconds);
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* Verify a motebit.md identity file. Backward-compatible with pre-0.4.0.
|
|
756
|
+
*
|
|
757
|
+
* @deprecated Use `verify(content)` instead — it handles all artifact types.
|
|
758
|
+
*/
|
|
759
|
+
export async function verifyIdentityFile(content) {
|
|
760
|
+
const result = await verifyIdentity(content);
|
|
266
761
|
return {
|
|
267
|
-
valid,
|
|
268
|
-
identity:
|
|
269
|
-
did:
|
|
270
|
-
error:
|
|
762
|
+
valid: result.valid,
|
|
763
|
+
identity: result.identity,
|
|
764
|
+
did: result.did,
|
|
765
|
+
error: result.errors?.[0]?.message,
|
|
766
|
+
succession: result.succession,
|
|
271
767
|
};
|
|
272
768
|
}
|
|
273
769
|
//# 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.5.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",
|
|
@@ -43,8 +43,9 @@
|
|
|
43
43
|
"@noble/hashes": "^1.6.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
+
"@types/node": "^22.0.0",
|
|
46
47
|
"typescript": "^5.6.0",
|
|
47
|
-
"vitest": "^
|
|
48
|
+
"vitest": "^2.1.0"
|
|
48
49
|
},
|
|
49
50
|
"engines": {
|
|
50
51
|
"node": ">=18"
|
|
@@ -52,7 +53,9 @@
|
|
|
52
53
|
"scripts": {
|
|
53
54
|
"build": "tsc -b",
|
|
54
55
|
"test": "vitest run",
|
|
56
|
+
"test:coverage": "vitest run --coverage",
|
|
55
57
|
"typecheck": "tsc --noEmit",
|
|
58
|
+
"lint": "eslint --parser-options=project:tsconfig.eslint.json src/",
|
|
56
59
|
"clean": "rm -rf dist .turbo *.tsbuildinfo"
|
|
57
60
|
}
|
|
58
61
|
}
|