@kya-os/cli 1.1.0 → 1.2.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/dist/commands/build.d.ts +5 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +173 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +9 -31
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/claim.d.ts +7 -1
- package/dist/commands/claim.d.ts.map +1 -1
- package/dist/commands/claim.js +196 -44
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/demo.d.ts +10 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +584 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/dev.d.ts +5 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +111 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +530 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/env.d.ts +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +113 -15
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/identity.d.ts +14 -0
- package/dist/commands/identity.d.ts.map +1 -0
- package/dist/commands/identity.js +204 -0
- package/dist/commands/identity.js.map +1 -0
- package/dist/commands/init.d.ts +6 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +86 -670
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/receipts.d.ts +11 -0
- package/dist/commands/receipts.d.ts.map +1 -0
- package/dist/commands/receipts.js +179 -0
- package/dist/commands/receipts.js.map +1 -0
- package/dist/commands/register.d.ts +15 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +220 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/rotate.d.ts +7 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +149 -109
- package/dist/commands/rotate.js.map +1 -1
- package/dist/commands/start.d.ts +5 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +129 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +177 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/verify.d.ts +22 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +491 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/components/claim-experience.d.ts +21 -0
- package/dist/components/claim-experience.d.ts.map +1 -0
- package/dist/components/claim-experience.js +138 -0
- package/dist/components/claim-experience.js.map +1 -0
- package/dist/effects/animation-engine.d.ts +173 -0
- package/dist/effects/animation-engine.d.ts.map +1 -0
- package/dist/effects/animation-engine.js +254 -0
- package/dist/effects/animation-engine.js.map +1 -0
- package/dist/effects/cli-integration.js +8 -8
- package/dist/effects/cli-integration.js.map +1 -1
- package/dist/effects/config.d.ts +86 -10
- package/dist/effects/config.d.ts.map +1 -1
- package/dist/effects/config.js +201 -18
- package/dist/effects/config.js.map +1 -1
- package/dist/effects/effect-runner.d.ts +69 -0
- package/dist/effects/effect-runner.d.ts.map +1 -0
- package/dist/effects/effect-runner.js +255 -0
- package/dist/effects/effect-runner.js.map +1 -0
- package/dist/effects/gradient.d.ts +131 -0
- package/dist/effects/gradient.d.ts.map +1 -0
- package/dist/effects/gradient.js +236 -0
- package/dist/effects/gradient.js.map +1 -0
- package/dist/effects/implementations/beams.d.ts +80 -0
- package/dist/effects/implementations/beams.d.ts.map +1 -0
- package/dist/effects/implementations/beams.js +221 -0
- package/dist/effects/implementations/beams.js.map +1 -0
- package/dist/effects/implementations/blackhole.d.ts +98 -0
- package/dist/effects/implementations/blackhole.d.ts.map +1 -0
- package/dist/effects/implementations/blackhole.js +421 -0
- package/dist/effects/implementations/blackhole.js.map +1 -0
- package/dist/effects/implementations/burn.d.ts +74 -0
- package/dist/effects/implementations/burn.d.ts.map +1 -0
- package/dist/effects/implementations/burn.js +234 -0
- package/dist/effects/implementations/burn.js.map +1 -0
- package/dist/effects/implementations/decrypt.d.ts +115 -0
- package/dist/effects/implementations/decrypt.d.ts.map +1 -0
- package/dist/effects/implementations/decrypt.js +394 -0
- package/dist/effects/implementations/decrypt.js.map +1 -0
- package/dist/effects/implementations/waves.d.ts +78 -0
- package/dist/effects/implementations/waves.d.ts.map +1 -0
- package/dist/effects/implementations/waves.js +278 -0
- package/dist/effects/implementations/waves.js.map +1 -0
- package/dist/effects/index.d.ts +34 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +114 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/motion-engine.d.ts +168 -0
- package/dist/effects/motion-engine.d.ts.map +1 -0
- package/dist/effects/motion-engine.js +353 -0
- package/dist/effects/motion-engine.js.map +1 -0
- package/dist/effects/safe-executor.d.ts +55 -0
- package/dist/effects/safe-executor.d.ts.map +1 -0
- package/dist/effects/safe-executor.js +210 -0
- package/dist/effects/safe-executor.js.map +1 -0
- package/dist/effects/types.d.ts +199 -0
- package/dist/effects/types.d.ts.map +1 -0
- package/dist/effects/types.js +80 -0
- package/dist/effects/types.js.map +1 -0
- package/dist/effects/utils.d.ts +104 -0
- package/dist/effects/utils.d.ts.map +1 -0
- package/dist/effects/utils.js +280 -0
- package/dist/effects/utils.js.map +1 -0
- package/dist/index.js +154 -19
- package/dist/utils/env-manager.d.ts +6 -7
- package/dist/utils/env-manager.d.ts.map +1 -1
- package/dist/utils/env-manager.js +52 -40
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/utils/identity-manager.d.ts +41 -0
- package/dist/utils/identity-manager.d.ts.map +1 -0
- package/dist/utils/identity-manager.js +159 -0
- package/dist/utils/identity-manager.js.map +1 -0
- package/dist/utils/kta-api.d.ts +67 -0
- package/dist/utils/kta-api.d.ts.map +1 -0
- package/dist/utils/kta-api.js +137 -0
- package/dist/utils/kta-api.js.map +1 -0
- package/package.json +8 -7
- package/dist/utils/validation.d.ts +0 -101
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -109
- package/dist/utils/validation.js.map +0 -1
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local verification command for XMCP-I CLI
|
|
3
|
+
*
|
|
4
|
+
* Implements Requirements 15.5, 15.6:
|
|
5
|
+
* - Perform offline verification without KTA calls
|
|
6
|
+
* - Validate signatures, proofs, and key relationships locally
|
|
7
|
+
* - Return detailed validation results for debugging
|
|
8
|
+
*/
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import ora from "ora";
|
|
11
|
+
import { readFileSync, existsSync } from "fs";
|
|
12
|
+
import { importJWK, jwtVerify } from "jose";
|
|
13
|
+
import { createHash } from "crypto";
|
|
14
|
+
import { loadCurrentIdentity } from "../utils/identity-manager.js";
|
|
15
|
+
import { showSuccess, showError, } from "../utils/prompts.js";
|
|
16
|
+
/**
|
|
17
|
+
* Verify command implementation
|
|
18
|
+
*/
|
|
19
|
+
export async function verify(options = {}) {
|
|
20
|
+
const { local = false, json = false, verbose = false } = options;
|
|
21
|
+
if (!local) {
|
|
22
|
+
if (json) {
|
|
23
|
+
console.log(JSON.stringify({
|
|
24
|
+
success: false,
|
|
25
|
+
error: "Only --local verification is currently supported",
|
|
26
|
+
}, null, 2));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
showError("Only --local verification is currently supported");
|
|
30
|
+
console.log(chalk.gray("Use: mcpi verify --local"));
|
|
31
|
+
}
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
if (!json) {
|
|
35
|
+
console.log(chalk.cyan("\n🔍 Local Proof Verification\n"));
|
|
36
|
+
}
|
|
37
|
+
const spinner = json
|
|
38
|
+
? null
|
|
39
|
+
: ora("Loading identity and proof data...").start();
|
|
40
|
+
try {
|
|
41
|
+
// Load current identity
|
|
42
|
+
const identity = loadCurrentIdentity();
|
|
43
|
+
if (!identity) {
|
|
44
|
+
const error = 'No XMCP-I identity found. Run "mcpi init" first.';
|
|
45
|
+
if (json) {
|
|
46
|
+
console.log(JSON.stringify({ success: false, error }, null, 2));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
spinner?.fail(error);
|
|
50
|
+
}
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
// Load proof data
|
|
54
|
+
const proofData = await loadProofData(options);
|
|
55
|
+
if (!proofData) {
|
|
56
|
+
const error = "No proof data provided. Use --proof, --request, and --response options.";
|
|
57
|
+
if (json) {
|
|
58
|
+
console.log(JSON.stringify({ success: false, error }, null, 2));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
spinner?.fail(error);
|
|
62
|
+
}
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
if (spinner) {
|
|
66
|
+
spinner.text = "Performing local verification...";
|
|
67
|
+
}
|
|
68
|
+
// Perform local verification
|
|
69
|
+
const result = await performLocalVerification(identity, proofData);
|
|
70
|
+
if (json) {
|
|
71
|
+
console.log(JSON.stringify(result, null, 2));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
spinner?.stop();
|
|
75
|
+
displayVerificationResults(result, verbose);
|
|
76
|
+
}
|
|
77
|
+
// Exit with appropriate code
|
|
78
|
+
process.exit(result.success ? 0 : 1);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
82
|
+
if (json) {
|
|
83
|
+
console.log(JSON.stringify({
|
|
84
|
+
success: false,
|
|
85
|
+
error: errorMessage,
|
|
86
|
+
}, null, 2));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
spinner?.fail(`Verification failed: ${errorMessage}`);
|
|
90
|
+
}
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Load proof data from options or interactive input
|
|
96
|
+
*/
|
|
97
|
+
async function loadProofData(options) {
|
|
98
|
+
try {
|
|
99
|
+
let proof;
|
|
100
|
+
let request;
|
|
101
|
+
let response;
|
|
102
|
+
// Load proof
|
|
103
|
+
if (options.proof) {
|
|
104
|
+
proof = loadJsonData(options.proof, "proof");
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Try to find proof in common locations
|
|
108
|
+
const commonProofPaths = [
|
|
109
|
+
".mcpi/last-proof.json",
|
|
110
|
+
"proof.json",
|
|
111
|
+
"test-proof.json",
|
|
112
|
+
];
|
|
113
|
+
let proofPath = null;
|
|
114
|
+
for (const path of commonProofPaths) {
|
|
115
|
+
if (existsSync(path)) {
|
|
116
|
+
proofPath = path;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (!proofPath) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
proof = loadJsonData(proofPath, "proof");
|
|
124
|
+
}
|
|
125
|
+
// Load request if provided
|
|
126
|
+
if (options.request) {
|
|
127
|
+
request = loadJsonData(options.request, "request");
|
|
128
|
+
}
|
|
129
|
+
// Load response if provided
|
|
130
|
+
if (options.response) {
|
|
131
|
+
response = loadJsonData(options.response, "response");
|
|
132
|
+
}
|
|
133
|
+
return { proof, request, response };
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw new Error(`Failed to load proof data: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Load JSON data from file path or JSON string
|
|
141
|
+
*/
|
|
142
|
+
function loadJsonData(input, type) {
|
|
143
|
+
try {
|
|
144
|
+
// Check if it's a file path
|
|
145
|
+
if (existsSync(input)) {
|
|
146
|
+
const content = readFileSync(input, "utf-8");
|
|
147
|
+
return JSON.parse(content);
|
|
148
|
+
}
|
|
149
|
+
// Try to parse as JSON string
|
|
150
|
+
return JSON.parse(input);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
throw new Error(`Invalid ${type} data: ${error instanceof Error ? error.message : "Parse error"}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Perform comprehensive local verification
|
|
158
|
+
*/
|
|
159
|
+
async function performLocalVerification(identity, proofData) {
|
|
160
|
+
const result = {
|
|
161
|
+
success: false,
|
|
162
|
+
details: {
|
|
163
|
+
proofStructure: { valid: false, issues: [] },
|
|
164
|
+
signature: { valid: false, issues: [] },
|
|
165
|
+
hashes: { valid: false, issues: [] },
|
|
166
|
+
keyRelationship: { valid: false, issues: [] },
|
|
167
|
+
timestamp: { valid: false, issues: [] },
|
|
168
|
+
},
|
|
169
|
+
warnings: [],
|
|
170
|
+
identity: {
|
|
171
|
+
did: identity.did,
|
|
172
|
+
keyId: identity.keyId,
|
|
173
|
+
environment: process.env.AGENT_PRIVATE_KEY ? "prod" : "dev",
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
// 1. Validate proof structure
|
|
177
|
+
result.details.proofStructure = validateProofStructure(proofData.proof);
|
|
178
|
+
// 2. Validate signature
|
|
179
|
+
result.details.signature = await validateSignature(proofData.proof, identity);
|
|
180
|
+
// 3. Validate hashes (if request/response provided)
|
|
181
|
+
if (proofData.request && proofData.response) {
|
|
182
|
+
result.details.hashes = validateHashes(proofData.proof, proofData.request, proofData.response);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
result.warnings.push("Request/response data not provided - hash validation skipped");
|
|
186
|
+
}
|
|
187
|
+
// 4. Validate key relationship
|
|
188
|
+
result.details.keyRelationship = validateKeyRelationship(proofData.proof, identity);
|
|
189
|
+
// 5. Validate timestamp
|
|
190
|
+
result.details.timestamp = validateTimestamp(proofData.proof);
|
|
191
|
+
// Determine overall success
|
|
192
|
+
result.success =
|
|
193
|
+
result.details.proofStructure.valid &&
|
|
194
|
+
result.details.signature.valid &&
|
|
195
|
+
(result.details.hashes.valid ||
|
|
196
|
+
!proofData.request ||
|
|
197
|
+
!proofData.response) &&
|
|
198
|
+
result.details.keyRelationship.valid &&
|
|
199
|
+
result.details.timestamp.valid;
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Validate proof structure
|
|
204
|
+
*/
|
|
205
|
+
function validateProofStructure(proof) {
|
|
206
|
+
const issues = [];
|
|
207
|
+
// Check required fields
|
|
208
|
+
if (!proof.jws) {
|
|
209
|
+
issues.push("Missing JWS field");
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// Check detached JWS format (header..signature)
|
|
213
|
+
const parts = proof.jws.split(".");
|
|
214
|
+
if (parts.length !== 3) {
|
|
215
|
+
issues.push("Invalid JWS format - expected 3 parts");
|
|
216
|
+
}
|
|
217
|
+
else if (parts[1] !== "") {
|
|
218
|
+
issues.push("JWS is not detached - payload should be empty");
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (!proof.meta) {
|
|
222
|
+
issues.push("Missing meta field");
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const meta = proof.meta;
|
|
226
|
+
const requiredFields = [
|
|
227
|
+
"did",
|
|
228
|
+
"kid",
|
|
229
|
+
"ts",
|
|
230
|
+
"nonce",
|
|
231
|
+
"audience",
|
|
232
|
+
"sessionId",
|
|
233
|
+
"requestHash",
|
|
234
|
+
"responseHash",
|
|
235
|
+
];
|
|
236
|
+
for (const field of requiredFields) {
|
|
237
|
+
if (!meta[field]) {
|
|
238
|
+
issues.push(`Missing meta.${field}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Validate hash format
|
|
242
|
+
if (meta.requestHash && !meta.requestHash.match(/^sha256:[a-f0-9]{64}$/)) {
|
|
243
|
+
issues.push("Invalid requestHash format - expected sha256:hex");
|
|
244
|
+
}
|
|
245
|
+
if (meta.responseHash &&
|
|
246
|
+
!meta.responseHash.match(/^sha256:[a-f0-9]{64}$/)) {
|
|
247
|
+
issues.push("Invalid responseHash format - expected sha256:hex");
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
valid: issues.length === 0,
|
|
252
|
+
issues,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Validate JWS signature
|
|
257
|
+
*/
|
|
258
|
+
async function validateSignature(proof, identity) {
|
|
259
|
+
const issues = [];
|
|
260
|
+
try {
|
|
261
|
+
// Convert base64 public key to JWK format for JOSE
|
|
262
|
+
const publicKeyBuffer = Buffer.from(identity.publicKey, "base64");
|
|
263
|
+
// For Ed25519, we need to create a proper JWK
|
|
264
|
+
const publicKeyJwk = {
|
|
265
|
+
kty: "OKP",
|
|
266
|
+
crv: "Ed25519",
|
|
267
|
+
x: Buffer.from(publicKeyBuffer).toString("base64url"),
|
|
268
|
+
};
|
|
269
|
+
// Import the public key
|
|
270
|
+
const publicKey = await importJWK(publicKeyJwk, "EdDSA");
|
|
271
|
+
// Reconstruct the full JWT for verification
|
|
272
|
+
const payload = Buffer.from(JSON.stringify(proof.meta)).toString("base64url");
|
|
273
|
+
const fullJwt = proof.jws.replace("..", `.${payload}.`);
|
|
274
|
+
// Verify the signature
|
|
275
|
+
const { payload: verifiedPayload } = await jwtVerify(fullJwt, publicKey, {
|
|
276
|
+
algorithms: ["EdDSA"],
|
|
277
|
+
});
|
|
278
|
+
// Verify the payload matches our meta
|
|
279
|
+
const expectedMeta = JSON.stringify(proof.meta);
|
|
280
|
+
const actualMeta = JSON.stringify(verifiedPayload);
|
|
281
|
+
if (expectedMeta !== actualMeta) {
|
|
282
|
+
issues.push("Payload mismatch - meta does not match signed payload");
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
issues.push(`Signature verification failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
valid: issues.length === 0,
|
|
290
|
+
issues,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Validate hashes against request/response
|
|
295
|
+
*/
|
|
296
|
+
function validateHashes(proof, request, response) {
|
|
297
|
+
const issues = [];
|
|
298
|
+
try {
|
|
299
|
+
// Generate expected hashes using the same canonicalization as the runtime
|
|
300
|
+
const expectedHashes = generateCanonicalHashes(request, response);
|
|
301
|
+
const result = {
|
|
302
|
+
valid: false,
|
|
303
|
+
issues,
|
|
304
|
+
expected: expectedHashes,
|
|
305
|
+
actual: {
|
|
306
|
+
requestHash: proof.meta.requestHash,
|
|
307
|
+
responseHash: proof.meta.responseHash,
|
|
308
|
+
},
|
|
309
|
+
};
|
|
310
|
+
// Compare hashes
|
|
311
|
+
if (proof.meta.requestHash !== expectedHashes.requestHash) {
|
|
312
|
+
issues.push(`Request hash mismatch - expected ${expectedHashes.requestHash}, got ${proof.meta.requestHash}`);
|
|
313
|
+
}
|
|
314
|
+
if (proof.meta.responseHash !== expectedHashes.responseHash) {
|
|
315
|
+
issues.push(`Response hash mismatch - expected ${expectedHashes.responseHash}, got ${proof.meta.responseHash}`);
|
|
316
|
+
}
|
|
317
|
+
result.valid = issues.length === 0;
|
|
318
|
+
return result;
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
issues.push(`Hash validation failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
322
|
+
return { valid: false, issues };
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Generate canonical hashes (matching runtime implementation)
|
|
327
|
+
*/
|
|
328
|
+
function generateCanonicalHashes(request, response) {
|
|
329
|
+
// Canonicalize request (exclude transport metadata, include method and params)
|
|
330
|
+
const canonicalRequest = {
|
|
331
|
+
method: request.method,
|
|
332
|
+
...(request.params && { params: request.params }),
|
|
333
|
+
};
|
|
334
|
+
// Canonicalize response (only the data part, exclude meta)
|
|
335
|
+
const canonicalResponse = response.data || response;
|
|
336
|
+
// Generate SHA-256 hashes with JCS canonicalization
|
|
337
|
+
const requestHash = generateSHA256Hash(canonicalRequest);
|
|
338
|
+
const responseHash = generateSHA256Hash(canonicalResponse);
|
|
339
|
+
return { requestHash, responseHash };
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Generate SHA-256 hash with JCS canonicalization
|
|
343
|
+
*/
|
|
344
|
+
function generateSHA256Hash(data) {
|
|
345
|
+
// JCS canonicalization (simplified implementation)
|
|
346
|
+
const canonicalJson = canonicalizeJSON(data);
|
|
347
|
+
// Generate SHA-256 hash
|
|
348
|
+
const hash = createHash("sha256").update(canonicalJson, "utf8").digest("hex");
|
|
349
|
+
return `sha256:${hash}`;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* JCS canonicalization implementation (matching runtime)
|
|
353
|
+
*/
|
|
354
|
+
function canonicalizeJSON(obj) {
|
|
355
|
+
if (obj === null)
|
|
356
|
+
return "null";
|
|
357
|
+
if (typeof obj === "boolean")
|
|
358
|
+
return obj.toString();
|
|
359
|
+
if (typeof obj === "number") {
|
|
360
|
+
if (Number.isNaN(obj))
|
|
361
|
+
return "null";
|
|
362
|
+
if (!Number.isFinite(obj))
|
|
363
|
+
return "null";
|
|
364
|
+
return obj.toString();
|
|
365
|
+
}
|
|
366
|
+
if (typeof obj === "string")
|
|
367
|
+
return JSON.stringify(obj);
|
|
368
|
+
if (Array.isArray(obj)) {
|
|
369
|
+
const items = obj.map((item) => canonicalizeJSON(item));
|
|
370
|
+
return `[${items.join(",")}]`;
|
|
371
|
+
}
|
|
372
|
+
if (typeof obj === "object") {
|
|
373
|
+
// Sort keys for canonical ordering
|
|
374
|
+
const sortedKeys = Object.keys(obj).sort();
|
|
375
|
+
const pairs = sortedKeys.map((key) => {
|
|
376
|
+
const value = canonicalizeJSON(obj[key]);
|
|
377
|
+
return `${JSON.stringify(key)}:${value}`;
|
|
378
|
+
});
|
|
379
|
+
return `{${pairs.join(",")}}`;
|
|
380
|
+
}
|
|
381
|
+
// Fallback for other types
|
|
382
|
+
return JSON.stringify(obj);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Validate key relationship between proof and identity
|
|
386
|
+
*/
|
|
387
|
+
function validateKeyRelationship(proof, identity) {
|
|
388
|
+
const issues = [];
|
|
389
|
+
// Check DID match
|
|
390
|
+
if (proof.meta.did !== identity.did) {
|
|
391
|
+
issues.push(`DID mismatch - proof: ${proof.meta.did}, identity: ${identity.did}`);
|
|
392
|
+
}
|
|
393
|
+
// Check key ID match
|
|
394
|
+
if (proof.meta.kid !== identity.keyId) {
|
|
395
|
+
issues.push(`Key ID mismatch - proof: ${proof.meta.kid}, identity: ${identity.keyId}`);
|
|
396
|
+
}
|
|
397
|
+
return {
|
|
398
|
+
valid: issues.length === 0,
|
|
399
|
+
issues,
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Validate timestamp
|
|
404
|
+
*/
|
|
405
|
+
function validateTimestamp(proof) {
|
|
406
|
+
const issues = [];
|
|
407
|
+
const now = Math.floor(Date.now() / 1000);
|
|
408
|
+
const proofTime = proof.meta.ts;
|
|
409
|
+
const skew = Math.abs(now - proofTime);
|
|
410
|
+
// Default skew tolerance (can be configured via XMCP_I_TS_SKEW_SEC)
|
|
411
|
+
const maxSkew = parseInt(process.env.XMCP_I_TS_SKEW_SEC || "120");
|
|
412
|
+
if (skew > maxSkew) {
|
|
413
|
+
issues.push(`Timestamp skew too large: ${skew}s (max: ${maxSkew}s)`);
|
|
414
|
+
}
|
|
415
|
+
return {
|
|
416
|
+
valid: issues.length === 0,
|
|
417
|
+
issues,
|
|
418
|
+
skew,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Display verification results in human-readable format
|
|
423
|
+
*/
|
|
424
|
+
function displayVerificationResults(result, verbose) {
|
|
425
|
+
console.log(chalk.bold("\n📊 Verification Results\n"));
|
|
426
|
+
// Overall status
|
|
427
|
+
if (result.success) {
|
|
428
|
+
showSuccess("✅ Local verification passed");
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
showError("❌ Local verification failed");
|
|
432
|
+
}
|
|
433
|
+
// Identity info
|
|
434
|
+
if (result.identity) {
|
|
435
|
+
console.log(chalk.bold("\n🔑 Identity:"));
|
|
436
|
+
console.log(` DID: ${chalk.cyan(result.identity.did)}`);
|
|
437
|
+
console.log(` Key ID: ${chalk.cyan(result.identity.keyId)}`);
|
|
438
|
+
console.log(` Environment: ${chalk.cyan(result.identity.environment)}`);
|
|
439
|
+
}
|
|
440
|
+
// Detailed results
|
|
441
|
+
console.log(chalk.bold("\n🔍 Verification Details:"));
|
|
442
|
+
const checks = [
|
|
443
|
+
{ name: "Proof Structure", result: result.details.proofStructure },
|
|
444
|
+
{ name: "Signature", result: result.details.signature },
|
|
445
|
+
{ name: "Hash Validation", result: result.details.hashes },
|
|
446
|
+
{ name: "Key Relationship", result: result.details.keyRelationship },
|
|
447
|
+
{ name: "Timestamp", result: result.details.timestamp },
|
|
448
|
+
];
|
|
449
|
+
for (const check of checks) {
|
|
450
|
+
const status = check.result.valid ? "✅" : "❌";
|
|
451
|
+
const color = check.result.valid ? chalk.green : chalk.red;
|
|
452
|
+
console.log(` ${status} ${color(check.name)}`);
|
|
453
|
+
if (check.result.issues.length > 0 && (verbose || !check.result.valid)) {
|
|
454
|
+
for (const issue of check.result.issues) {
|
|
455
|
+
console.log(` ${chalk.gray("•")} ${chalk.yellow(issue)}`);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
// Hash details
|
|
460
|
+
if (result.details.hashes.expected &&
|
|
461
|
+
result.details.hashes.actual &&
|
|
462
|
+
verbose) {
|
|
463
|
+
console.log(chalk.bold("\n📝 Hash Details:"));
|
|
464
|
+
console.log(` Expected Request Hash: ${chalk.gray(result.details.hashes.expected.requestHash)}`);
|
|
465
|
+
console.log(` Actual Request Hash: ${chalk.gray(result.details.hashes.actual.requestHash)}`);
|
|
466
|
+
console.log(` Expected Response Hash: ${chalk.gray(result.details.hashes.expected.responseHash)}`);
|
|
467
|
+
console.log(` Actual Response Hash: ${chalk.gray(result.details.hashes.actual.responseHash)}`);
|
|
468
|
+
}
|
|
469
|
+
// Timestamp details
|
|
470
|
+
if (result.details.timestamp.skew !== undefined && verbose) {
|
|
471
|
+
console.log(chalk.bold("\n⏰ Timestamp Details:"));
|
|
472
|
+
console.log(` Clock Skew: ${chalk.gray(result.details.timestamp.skew + "s")}`);
|
|
473
|
+
console.log(` Max Allowed: ${chalk.gray(process.env.XMCP_I_TS_SKEW_SEC || "120")}s`);
|
|
474
|
+
}
|
|
475
|
+
// Warnings
|
|
476
|
+
if (result.warnings.length > 0) {
|
|
477
|
+
console.log(chalk.bold("\n⚠️ Warnings:"));
|
|
478
|
+
for (const warning of result.warnings) {
|
|
479
|
+
console.log(` ${chalk.yellow("•")} ${warning}`);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
// Usage hints
|
|
483
|
+
if (!result.success || verbose) {
|
|
484
|
+
console.log(chalk.bold("\n💡 Usage:"));
|
|
485
|
+
console.log(chalk.gray(" mcpi verify --local --proof proof.json"));
|
|
486
|
+
console.log(chalk.gray(" mcpi verify --local --proof proof.json --request request.json --response response.json"));
|
|
487
|
+
console.log(chalk.gray(" mcpi verify --local --json # JSON output"));
|
|
488
|
+
console.log(chalk.gray(" mcpi verify --local --verbose # Detailed output"));
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,WAAW,EACX,SAAS,GAGV,MAAM,qBAAqB,CAAC;AAsD7B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAyB,EAAE;IACtD,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kDAAkD;aAC1D,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,kDAAkD,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI;QAClB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,kDAAkD,CAAC;YACjE,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,KAAK,GACT,yEAAyE,CAAC;YAC5E,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,GAAG,kCAAkC,CAAC;QACpD,CAAC;QAED,6BAA6B;QAC7B,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEnE,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,IAAI,EAAE,CAAC;YAChB,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,6BAA6B;QAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAE3D,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,YAAY;aACpB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,IAAI,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,OAAsB;IAKjD,IAAI,CAAC;QACH,IAAI,KAAoB,CAAC;QACzB,IAAI,OAAY,CAAC;QACjB,IAAI,QAAa,CAAC;QAElB,aAAa;QACb,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,MAAM,gBAAgB,GAAG;gBACvB,uBAAuB;gBACvB,YAAY;gBACZ,iBAAiB;aAClB,CAAC;YAEF,IAAI,SAAS,GAAkB,IAAI,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACpC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;YAED,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,4BAA4B;QAC5B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACzF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,IAAY;IAC/C,IAAI,CAAC;QACH,4BAA4B;QAC5B,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,8BAA8B;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB,CACrC,QAAwB,EACxB,SAAkE;IAElE,MAAM,MAAM,GAA4B;QACtC,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACvC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;SACxC;QACD,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE;YACR,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;SAC5D;KACF,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAExE,wBAAwB;IACxB,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE9E,oDAAoD;IACpD,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,cAAc,CACpC,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,QAAQ,CACnB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,OAAO,CAAC,eAAe,GAAG,uBAAuB,CACtD,SAAS,CAAC,KAAK,EACf,QAAQ,CACT,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE9D,4BAA4B;IAC5B,MAAM,CAAC,OAAO;QACZ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK;YACnC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK;YAC9B,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;gBAC1B,CAAC,SAAS,CAAC,OAAO;gBAClB,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK;YACpC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;IAEjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAoB;IAIlD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,wBAAwB;IACxB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,gDAAgD;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,cAAc,GAAG;YACrB,KAAK;YACL,KAAK;YACL,IAAI;YACJ,OAAO;YACP,UAAU;YACV,WAAW;YACX,aAAa;YACb,cAAc;SACf,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,KAAwB,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;QAED,IACE,IAAI,CAAC,YAAY;YACjB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC,EACjD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,KAAoB,EACpB,QAAwB;IAExB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,mDAAmD;QACnD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAElE,8CAA8C;QAC9C,MAAM,YAAY,GAAG;YACnB,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,SAAS;YACd,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;SACtD,CAAC;QAEF,wBAAwB;QACxB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAEzD,4CAA4C;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAC9D,WAAW,CACZ,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;QAExD,uBAAuB;QACvB,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE;YACvE,UAAU,EAAE,CAAC,OAAO,CAAC;SACtB,CAAC,CAAC;QAEH,sCAAsC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEnD,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC7F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,KAAoB,EACpB,OAAY,EACZ,QAAa;IAEb,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,0EAA0E;QAC1E,MAAM,cAAc,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,KAAK;YACZ,MAAM;YACN,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE;gBACN,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;gBACnC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY;aACtC;SACF,CAAC;QAEF,iBAAiB;QACjB,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CACT,oCAAoC,cAAc,CAAC,WAAW,SAAS,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAChG,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,cAAc,CAAC,YAAY,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CACT,qCAAqC,cAAc,CAAC,YAAY,SAAS,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CACnG,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACtF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,OAAY,EACZ,QAAa;IAEb,+EAA+E;IAC/E,MAAM,gBAAgB,GAAG;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KAClD,CAAC;IAEF,2DAA2D;IAC3D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IAEpD,oDAAoD;IACpD,MAAM,WAAW,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAE3D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAS;IACnC,mDAAmD;IACnD,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE7C,wBAAwB;IACxB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9E,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAQ;IAChC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;QACzC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAExD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,mCAAmC;QACnC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,CAAC;IAED,2BAA2B;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,KAAoB,EACpB,QAAwB;IAExB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,kBAAkB;IAClB,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CACT,yBAAyB,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,QAAQ,CAAC,GAAG,EAAE,CACrE,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CACT,4BAA4B,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,QAAQ,CAAC,KAAK,EAAE,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAoB;IAK7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IAEvC,oEAAoE;IACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;IAElE,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,WAAW,OAAO,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CACjC,MAA+B,EAC/B,OAAgB;IAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAEvD,iBAAiB;IACjB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG;QACb,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE;QAClE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE;QACvD,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QAC1D,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE;QACpE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE;KACxD,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEjD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAe;IACf,IACE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ;QAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;QAC5B,OAAO,EACP,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CACT,6BAA6B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CACtF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,6BAA6B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACpF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,8BAA8B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CACxF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,8BAA8B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CACT,kBAAkB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CACpE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,mBAAmB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;IAED,WAAW;IACX,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,2FAA2F,CAC5F,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAClE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim Experience Component
|
|
3
|
+
* Clean, professional claim interface with vertical draw-down effect
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Create clean claim interface without broken formatting
|
|
7
|
+
*/
|
|
8
|
+
export declare function createAmazingClaimExperience(claimUrl: string, agentData?: any, status?: "unclaimed" | "claimed"): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Create vertical draw-down effect for the clean boxen card
|
|
11
|
+
*/
|
|
12
|
+
export declare function createClaimDrawDown(claimUrl: string, agentData?: any): AsyncGenerator<string, void, unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* Simple claim sequence - just show the clean card with draw-down
|
|
15
|
+
*/
|
|
16
|
+
export declare function createClaimSequence(claimUrl: string, agentData: any): AsyncGenerator<string, void, unknown>;
|
|
17
|
+
/**
|
|
18
|
+
* Clean portal sequence without complex effects
|
|
19
|
+
*/
|
|
20
|
+
export declare function createPortalSequence(duration?: number): AsyncGenerator<string, void, unknown>;
|
|
21
|
+
//# sourceMappingURL=claim-experience.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-experience.d.ts","sourceRoot":"","sources":["../../src/components/claim-experience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,EACf,MAAM,GAAE,WAAW,GAAG,SAAuB,GAC5C,OAAO,CAAC,MAAM,CAAC,CAgDjB;AAED;;GAEG;AACH,wBAAuB,mBAAmB,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,GACd,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAyBvC;AAED;;GAEG;AACH,wBAAuB,mBAAmB,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,GACb,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CA6BvC;AAED;;GAEG;AACH,wBAAuB,oBAAoB,CACzC,QAAQ,GAAE,MAAa,GACtB,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAevC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim Experience Component
|
|
3
|
+
* Clean, professional claim interface with vertical draw-down effect
|
|
4
|
+
*/
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import gradient from "gradient-string";
|
|
7
|
+
import boxen from "boxen";
|
|
8
|
+
/**
|
|
9
|
+
* Simple KYA logomark without complex characters
|
|
10
|
+
*/
|
|
11
|
+
const SIMPLE_KYA_LOGO = `
|
|
12
|
+
╭───╮ ╭───╮
|
|
13
|
+
╱ ╲─────╱ ╲
|
|
14
|
+
│ ● │ ◊ │ ● │
|
|
15
|
+
╲ ╱─────╲ ╱
|
|
16
|
+
╰───╯ ╰───╯
|
|
17
|
+
KNOW YOUR AI
|
|
18
|
+
`;
|
|
19
|
+
/**
|
|
20
|
+
* Create clean claim interface without broken formatting
|
|
21
|
+
*/
|
|
22
|
+
export async function createAmazingClaimExperience(claimUrl, agentData, status = "unclaimed") {
|
|
23
|
+
// Clean, readable colors
|
|
24
|
+
const headerColor = chalk.bold.cyan;
|
|
25
|
+
const labelColor = chalk.bold.white;
|
|
26
|
+
const valueColor = chalk.green;
|
|
27
|
+
const urlColor = chalk.cyan.underline;
|
|
28
|
+
const promptColor = chalk.bold.yellow;
|
|
29
|
+
// Properly format URL to ensure it's clickable
|
|
30
|
+
const displayUrl = claimUrl; // Show full URL, no truncation
|
|
31
|
+
const content = `
|
|
32
|
+
${headerColor("CLAIM YOUR AGENT")}
|
|
33
|
+
|
|
34
|
+
${labelColor("STATUS:")} ${status === "claimed"
|
|
35
|
+
? valueColor("CLAIMED")
|
|
36
|
+
: chalk.yellow("AWAITING AUTHORIZATION")}
|
|
37
|
+
|
|
38
|
+
${labelColor("PROTOCOL:")} Model Context Protocol - Identity (MCP-I)
|
|
39
|
+
|
|
40
|
+
${labelColor("ACTION:")} Establish cryptographic authority chain
|
|
41
|
+
|
|
42
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
${labelColor("CLAIM PORTAL:")}
|
|
45
|
+
|
|
46
|
+
${urlColor(displayUrl)}
|
|
47
|
+
|
|
48
|
+
This cryptographically signed link grants you control
|
|
49
|
+
over your agent's identity and capabilities.
|
|
50
|
+
|
|
51
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
52
|
+
|
|
53
|
+
${promptColor("PRESS ENTER TO OPEN IN BROWSER")}
|
|
54
|
+
|
|
55
|
+
Your agent awaits activation...
|
|
56
|
+
`;
|
|
57
|
+
return boxen(content, {
|
|
58
|
+
padding: 1,
|
|
59
|
+
margin: 1,
|
|
60
|
+
borderStyle: "round",
|
|
61
|
+
borderColor: "cyan",
|
|
62
|
+
backgroundColor: undefined,
|
|
63
|
+
width: 100, // Wider to accommodate full URL
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create vertical draw-down effect for the clean boxen card
|
|
68
|
+
*/
|
|
69
|
+
export async function* createClaimDrawDown(claimUrl, agentData) {
|
|
70
|
+
// Get the final clean card
|
|
71
|
+
const finalCard = await createAmazingClaimExperience(claimUrl, agentData);
|
|
72
|
+
const lines = finalCard.split("\n");
|
|
73
|
+
// Create gradient from cyan to white
|
|
74
|
+
const cyanToWhite = gradient(["#00bcd4", "#ffffff"]);
|
|
75
|
+
// Draw down effect - each line appears with gradient, ending in white
|
|
76
|
+
for (let i = 0; i < lines.length; i++) {
|
|
77
|
+
const visibleLines = lines.slice(0, i + 1);
|
|
78
|
+
const output = visibleLines
|
|
79
|
+
.map((line, index) => {
|
|
80
|
+
if (index === i) {
|
|
81
|
+
// Current line gets gradient effect
|
|
82
|
+
return cyanToWhite(line);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Previous lines are white (final state)
|
|
86
|
+
return chalk.white(line);
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
.join("\n");
|
|
90
|
+
yield output;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Simple claim sequence - just show the clean card with draw-down
|
|
95
|
+
*/
|
|
96
|
+
export async function* createClaimSequence(claimUrl, agentData) {
|
|
97
|
+
// Phase 1: Draw down the clean claim card
|
|
98
|
+
yield* createClaimDrawDown(claimUrl, agentData);
|
|
99
|
+
// Phase 2: Show success message
|
|
100
|
+
const successContent = `
|
|
101
|
+
${chalk.bold.green("AUTHORIZATION SUCCESSFUL")}
|
|
102
|
+
|
|
103
|
+
Agent identity has been claimed and is now active.
|
|
104
|
+
|
|
105
|
+
${chalk.bold.white("Agent:")} ${agentData.name}
|
|
106
|
+
${chalk.bold.white("DID:")} ${agentData.did.length > 50
|
|
107
|
+
? agentData.did.substring(0, 47) + "..."
|
|
108
|
+
: agentData.did}
|
|
109
|
+
${chalk.bold.white("Status:")} ${chalk.green("ACTIVE AND READY")}
|
|
110
|
+
`;
|
|
111
|
+
const successCard = boxen(successContent, {
|
|
112
|
+
padding: 1,
|
|
113
|
+
margin: 1,
|
|
114
|
+
borderStyle: "round",
|
|
115
|
+
borderColor: "green",
|
|
116
|
+
backgroundColor: undefined,
|
|
117
|
+
width: 70,
|
|
118
|
+
});
|
|
119
|
+
yield successCard;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Clean portal sequence without complex effects
|
|
123
|
+
*/
|
|
124
|
+
export async function* createPortalSequence(duration = 2000) {
|
|
125
|
+
const frames = [
|
|
126
|
+
"Portal forming...",
|
|
127
|
+
"Portal forming...",
|
|
128
|
+
"Portal forming...",
|
|
129
|
+
"Portal ready.",
|
|
130
|
+
"Portal established.",
|
|
131
|
+
];
|
|
132
|
+
const delay = duration / frames.length;
|
|
133
|
+
for (const frame of frames) {
|
|
134
|
+
yield chalk.cyan(frame);
|
|
135
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=claim-experience.js.map
|