@xpr-agents/sdk 0.1.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/utils.js ADDED
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateTrustScore = calculateTrustScore;
4
+ exports.getTrustRating = getTrustRating;
5
+ exports.validationResultFromNumber = validationResultFromNumber;
6
+ exports.validationResultToNumber = validationResultToNumber;
7
+ exports.disputeStatusFromNumber = disputeStatusFromNumber;
8
+ exports.safeJsonParse = safeJsonParse;
9
+ exports.parseCapabilities = parseCapabilities;
10
+ exports.parseSpecializations = parseSpecializations;
11
+ exports.parseTags = parseTags;
12
+ exports.formatXpr = formatXpr;
13
+ exports.parseXpr = parseXpr;
14
+ exports.safeParseInt = safeParseInt;
15
+ exports.formatTimestamp = formatTimestamp;
16
+ exports.calculateWeightedAverage = calculateWeightedAverage;
17
+ exports.isValidAccountName = isValidAccountName;
18
+ exports.isValidUrl = isValidUrl;
19
+ exports.getKycWeight = getKycWeight;
20
+ /**
21
+ * Calculate trust score for an agent
22
+ * Combines KYC level, stake, reputation, and longevity
23
+ * @param agent - Agent data
24
+ * @param agentScore - Aggregated score from feedback
25
+ * @param kycLevel - KYC verification level (0-4)
26
+ * @param stakeAmount - Staked XPR in smallest units (optional, fetched from system staking)
27
+ */
28
+ function calculateTrustScore(agent, agentScore, kycLevel, stakeAmount = 0) {
29
+ const breakdown = {
30
+ kyc: 0,
31
+ stake: 0,
32
+ reputation: 0,
33
+ longevity: 0,
34
+ };
35
+ // KYC score (0-30 points)
36
+ // Level 0 = 0, Level 1 = 10, Level 2 = 20, Level 3 = 30
37
+ breakdown.kyc = Math.min(kycLevel * 10, 30);
38
+ // Stake score (0-20 points, caps at 10000 XPR)
39
+ // Every 500 XPR = 1 point, max 20 points
40
+ const stakeXpr = stakeAmount / 10000; // Convert from smallest unit
41
+ breakdown.stake = Math.min(Math.floor(stakeXpr / 500), 20);
42
+ // Reputation score (0-40 points)
43
+ if (agentScore && agentScore.total_weight > 0) {
44
+ // avg_score is 0-10000 (representing 0-100.00%)
45
+ // We need to convert to 0-40 points
46
+ // If avg_score is 10000 (100%), that means perfect 5/5 rating
47
+ breakdown.reputation = Math.floor((agentScore.avg_score / 10000) * 40);
48
+ }
49
+ // Longevity score (0-10 points, 1 point per month)
50
+ const now = Math.floor(Date.now() / 1000);
51
+ const monthsActive = Math.floor((now - agent.registered_at) / (30 * 24 * 60 * 60));
52
+ breakdown.longevity = Math.min(monthsActive, 10);
53
+ // Total score (0-100)
54
+ const total = breakdown.kyc + breakdown.stake + breakdown.reputation + breakdown.longevity;
55
+ return {
56
+ agent: agent.account,
57
+ total,
58
+ breakdown,
59
+ rating: getTrustRating(total),
60
+ };
61
+ }
62
+ /**
63
+ * Get trust rating label from numeric score
64
+ */
65
+ function getTrustRating(score) {
66
+ if (score >= 80)
67
+ return 'verified';
68
+ if (score >= 60)
69
+ return 'high';
70
+ if (score >= 40)
71
+ return 'medium';
72
+ if (score >= 20)
73
+ return 'low';
74
+ return 'untrusted';
75
+ }
76
+ /**
77
+ * Convert validation result number to string
78
+ */
79
+ function validationResultFromNumber(result) {
80
+ switch (result) {
81
+ case 0:
82
+ return 'fail';
83
+ case 1:
84
+ return 'pass';
85
+ case 2:
86
+ return 'partial';
87
+ default:
88
+ return 'fail';
89
+ }
90
+ }
91
+ /**
92
+ * Convert validation result string to number
93
+ */
94
+ function validationResultToNumber(result) {
95
+ switch (result) {
96
+ case 'fail':
97
+ return 0;
98
+ case 'pass':
99
+ return 1;
100
+ case 'partial':
101
+ return 2;
102
+ default:
103
+ return 0;
104
+ }
105
+ }
106
+ /**
107
+ * Convert dispute status number to string
108
+ */
109
+ function disputeStatusFromNumber(status) {
110
+ switch (status) {
111
+ case 0:
112
+ return 'pending';
113
+ case 1:
114
+ return 'upheld';
115
+ case 2:
116
+ return 'rejected';
117
+ case 3:
118
+ return 'cancelled';
119
+ default:
120
+ return 'pending';
121
+ }
122
+ }
123
+ /**
124
+ * Parse JSON safely with fallback
125
+ */
126
+ function safeJsonParse(json, fallback) {
127
+ try {
128
+ return JSON.parse(json);
129
+ }
130
+ catch {
131
+ return fallback;
132
+ }
133
+ }
134
+ /**
135
+ * Parse capabilities string to array
136
+ */
137
+ function parseCapabilities(capabilities) {
138
+ if (!capabilities)
139
+ return [];
140
+ return safeJsonParse(capabilities, []);
141
+ }
142
+ /**
143
+ * Parse specializations string to array
144
+ */
145
+ function parseSpecializations(specializations) {
146
+ if (!specializations)
147
+ return [];
148
+ return safeJsonParse(specializations, []);
149
+ }
150
+ /**
151
+ * Parse tags string to array (comma-separated)
152
+ */
153
+ function parseTags(tags) {
154
+ if (!tags)
155
+ return [];
156
+ return tags.split(',').map((t) => t.trim()).filter((t) => t.length > 0);
157
+ }
158
+ /**
159
+ * Format XPR amount from smallest unit
160
+ */
161
+ function formatXpr(amount) {
162
+ return (amount / 10000).toFixed(4) + ' XPR';
163
+ }
164
+ /**
165
+ * Parse XPR amount string to smallest unit (integer math to avoid float precision issues)
166
+ * "100.5000 XPR" → 1005000, "0.7000 XPR" → 7000
167
+ */
168
+ function parseXpr(amount) {
169
+ const match = amount.match(/^(\d+)(?:\.(\d{1,4}))?/);
170
+ if (!match)
171
+ return 0;
172
+ const whole = parseInt(match[1], 10) || 0;
173
+ const fracStr = (match[2] || '').padEnd(4, '0').slice(0, 4);
174
+ const frac = parseInt(fracStr, 10) || 0;
175
+ return whole * 10000 + frac;
176
+ }
177
+ /**
178
+ * Safe parseInt with fallback - returns fallback on NaN
179
+ */
180
+ function safeParseInt(value, fallback = 0) {
181
+ if (value === undefined || value === null || value === '')
182
+ return fallback;
183
+ const parsed = parseInt(value, 10);
184
+ return isNaN(parsed) ? fallback : parsed;
185
+ }
186
+ /**
187
+ * Format timestamp to ISO string
188
+ */
189
+ function formatTimestamp(timestamp) {
190
+ return new Date(timestamp * 1000).toISOString();
191
+ }
192
+ /**
193
+ * Calculate weighted average score
194
+ */
195
+ function calculateWeightedAverage(scores) {
196
+ if (scores.length === 0)
197
+ return 0;
198
+ let totalScore = 0;
199
+ let totalWeight = 0;
200
+ for (const { score, weight } of scores) {
201
+ totalScore += score * weight;
202
+ totalWeight += weight;
203
+ }
204
+ if (totalWeight === 0)
205
+ return 0;
206
+ return totalScore / totalWeight;
207
+ }
208
+ /**
209
+ * Validate XPR account name
210
+ * Must be 1-12 characters, a-z, 1-5, and .
211
+ */
212
+ function isValidAccountName(name) {
213
+ if (!name || name.length > 12)
214
+ return false;
215
+ return /^[a-z1-5.]+$/.test(name);
216
+ }
217
+ /**
218
+ * Validate URL format
219
+ */
220
+ function isValidUrl(url) {
221
+ try {
222
+ new URL(url);
223
+ return true;
224
+ }
225
+ catch {
226
+ return false;
227
+ }
228
+ }
229
+ /**
230
+ * Get KYC level weight for feedback scoring
231
+ */
232
+ function getKycWeight(kycLevel) {
233
+ return 1 + kycLevel;
234
+ }
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFrQkEsa0RBNENDO0FBS0Qsd0NBTUM7QUFLRCxnRUFXQztBQUtELDREQVdDO0FBS0QsMERBYUM7QUFLRCxzQ0FNQztBQUtELDhDQUdDO0FBS0Qsb0RBR0M7QUFLRCw4QkFHQztBQUtELDhCQUVDO0FBTUQsNEJBT0M7QUFLRCxvQ0FJQztBQUtELDBDQUVDO0FBS0QsNERBZUM7QUFNRCxnREFHQztBQUtELGdDQU9DO0FBS0Qsb0NBRUM7QUF4T0Q7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxLQUFZLEVBQ1osVUFBNkIsRUFDN0IsUUFBZ0IsRUFDaEIsY0FBc0IsQ0FBQztJQUV2QixNQUFNLFNBQVMsR0FBd0I7UUFDckMsR0FBRyxFQUFFLENBQUM7UUFDTixLQUFLLEVBQUUsQ0FBQztRQUNSLFVBQVUsRUFBRSxDQUFDO1FBQ2IsU0FBUyxFQUFFLENBQUM7S0FDYixDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLHdEQUF3RDtJQUN4RCxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU1QywrQ0FBK0M7SUFDL0MseUNBQXlDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyw2QkFBNkI7SUFDbkUsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTNELGlDQUFpQztJQUNqQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlDLGdEQUFnRDtRQUNoRCxvQ0FBb0M7UUFDcEMsOERBQThEO1FBQzlELFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkYsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVqRCxzQkFBc0I7SUFDdEIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUUzRixPQUFPO1FBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3BCLEtBQUs7UUFDTCxTQUFTO1FBQ1QsTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUM7S0FDOUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLElBQUksS0FBSyxJQUFJLEVBQUU7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUNuQyxJQUFJLEtBQUssSUFBSSxFQUFFO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDL0IsSUFBSSxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ2pDLElBQUksS0FBSyxJQUFJLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5QixPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiwwQkFBMEIsQ0FBQyxNQUFjO0lBQ3ZELFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLENBQUM7WUFDSixPQUFPLE1BQU0sQ0FBQztRQUNoQixLQUFLLENBQUM7WUFDSixPQUFPLE1BQU0sQ0FBQztRQUNoQixLQUFLLENBQUM7WUFDSixPQUFPLFNBQVMsQ0FBQztRQUNuQjtZQUNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxNQUF3QjtJQUMvRCxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxNQUFNO1lBQ1QsT0FBTyxDQUFDLENBQUM7UUFDWCxLQUFLLE1BQU07WUFDVCxPQUFPLENBQUMsQ0FBQztRQUNYLEtBQUssU0FBUztZQUNaLE9BQU8sQ0FBQyxDQUFDO1FBQ1g7WUFDRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxNQUFjO0lBQ3BELFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLENBQUM7WUFDSixPQUFPLFNBQVMsQ0FBQztRQUNuQixLQUFLLENBQUM7WUFDSixPQUFPLFFBQVEsQ0FBQztRQUNsQixLQUFLLENBQUM7WUFDSixPQUFPLFVBQVUsQ0FBQztRQUNwQixLQUFLLENBQUM7WUFDSixPQUFPLFdBQVcsQ0FBQztRQUNyQjtZQUNFLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUksSUFBWSxFQUFFLFFBQVc7SUFDeEQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBTSxDQUFDO0lBQy9CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsWUFBb0I7SUFDcEQsSUFBSSxDQUFDLFlBQVk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QixPQUFPLGFBQWEsQ0FBVyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsZUFBdUI7SUFDMUQsSUFBSSxDQUFDLGVBQWU7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNoQyxPQUFPLGFBQWEsQ0FBVyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLElBQVk7SUFDcEMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLE1BQWM7SUFDdEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixRQUFRLENBQUMsTUFBYztJQUNyQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsT0FBTyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUM5QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBZ0MsRUFBRSxXQUFtQixDQUFDO0lBQ2pGLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDM0UsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDM0MsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFNBQWlCO0lBQy9DLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxNQUFnRDtJQUVoRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWxDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFFcEIsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLFVBQVUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQzdCLFdBQVcsSUFBSSxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksV0FBVyxLQUFLLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxPQUFPLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLElBQVk7SUFDN0MsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEdBQVc7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsUUFBZ0I7SUFDM0MsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZ2VudCxcbiAgQWdlbnRTY29yZSxcbiAgVHJ1c3RTY29yZSxcbiAgVHJ1c3RTY29yZUJyZWFrZG93bixcbiAgVHJ1c3RSYXRpbmcsXG4gIFZhbGlkYXRpb25SZXN1bHQsXG4gIERpc3B1dGVTdGF0dXMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0cnVzdCBzY29yZSBmb3IgYW4gYWdlbnRcbiAqIENvbWJpbmVzIEtZQyBsZXZlbCwgc3Rha2UsIHJlcHV0YXRpb24sIGFuZCBsb25nZXZpdHlcbiAqIEBwYXJhbSBhZ2VudCAtIEFnZW50IGRhdGFcbiAqIEBwYXJhbSBhZ2VudFNjb3JlIC0gQWdncmVnYXRlZCBzY29yZSBmcm9tIGZlZWRiYWNrXG4gKiBAcGFyYW0ga3ljTGV2ZWwgLSBLWUMgdmVyaWZpY2F0aW9uIGxldmVsICgwLTQpXG4gKiBAcGFyYW0gc3Rha2VBbW91bnQgLSBTdGFrZWQgWFBSIGluIHNtYWxsZXN0IHVuaXRzIChvcHRpb25hbCwgZmV0Y2hlZCBmcm9tIHN5c3RlbSBzdGFraW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlVHJ1c3RTY29yZShcbiAgYWdlbnQ6IEFnZW50LFxuICBhZ2VudFNjb3JlOiBBZ2VudFNjb3JlIHwgbnVsbCxcbiAga3ljTGV2ZWw6IG51bWJlcixcbiAgc3Rha2VBbW91bnQ6IG51bWJlciA9IDBcbik6IFRydXN0U2NvcmUge1xuICBjb25zdCBicmVha2Rvd246IFRydXN0U2NvcmVCcmVha2Rvd24gPSB7XG4gICAga3ljOiAwLFxuICAgIHN0YWtlOiAwLFxuICAgIHJlcHV0YXRpb246IDAsXG4gICAgbG9uZ2V2aXR5OiAwLFxuICB9O1xuXG4gIC8vIEtZQyBzY29yZSAoMC0zMCBwb2ludHMpXG4gIC8vIExldmVsIDAgPSAwLCBMZXZlbCAxID0gMTAsIExldmVsIDIgPSAyMCwgTGV2ZWwgMyA9IDMwXG4gIGJyZWFrZG93bi5reWMgPSBNYXRoLm1pbihreWNMZXZlbCAqIDEwLCAzMCk7XG5cbiAgLy8gU3Rha2Ugc2NvcmUgKDAtMjAgcG9pbnRzLCBjYXBzIGF0IDEwMDAwIFhQUilcbiAgLy8gRXZlcnkgNTAwIFhQUiA9IDEgcG9pbnQsIG1heCAyMCBwb2ludHNcbiAgY29uc3Qgc3Rha2VYcHIgPSBzdGFrZUFtb3VudCAvIDEwMDAwOyAvLyBDb252ZXJ0IGZyb20gc21hbGxlc3QgdW5pdFxuICBicmVha2Rvd24uc3Rha2UgPSBNYXRoLm1pbihNYXRoLmZsb29yKHN0YWtlWHByIC8gNTAwKSwgMjApO1xuXG4gIC8vIFJlcHV0YXRpb24gc2NvcmUgKDAtNDAgcG9pbnRzKVxuICBpZiAoYWdlbnRTY29yZSAmJiBhZ2VudFNjb3JlLnRvdGFsX3dlaWdodCA+IDApIHtcbiAgICAvLyBhdmdfc2NvcmUgaXMgMC0xMDAwMCAocmVwcmVzZW50aW5nIDAtMTAwLjAwJSlcbiAgICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQgdG8gMC00MCBwb2ludHNcbiAgICAvLyBJZiBhdmdfc2NvcmUgaXMgMTAwMDAgKDEwMCUpLCB0aGF0IG1lYW5zIHBlcmZlY3QgNS81IHJhdGluZ1xuICAgIGJyZWFrZG93bi5yZXB1dGF0aW9uID0gTWF0aC5mbG9vcigoYWdlbnRTY29yZS5hdmdfc2NvcmUgLyAxMDAwMCkgKiA0MCk7XG4gIH1cblxuICAvLyBMb25nZXZpdHkgc2NvcmUgKDAtMTAgcG9pbnRzLCAxIHBvaW50IHBlciBtb250aClcbiAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IG1vbnRoc0FjdGl2ZSA9IE1hdGguZmxvb3IoKG5vdyAtIGFnZW50LnJlZ2lzdGVyZWRfYXQpIC8gKDMwICogMjQgKiA2MCAqIDYwKSk7XG4gIGJyZWFrZG93bi5sb25nZXZpdHkgPSBNYXRoLm1pbihtb250aHNBY3RpdmUsIDEwKTtcblxuICAvLyBUb3RhbCBzY29yZSAoMC0xMDApXG4gIGNvbnN0IHRvdGFsID0gYnJlYWtkb3duLmt5YyArIGJyZWFrZG93bi5zdGFrZSArIGJyZWFrZG93bi5yZXB1dGF0aW9uICsgYnJlYWtkb3duLmxvbmdldml0eTtcblxuICByZXR1cm4ge1xuICAgIGFnZW50OiBhZ2VudC5hY2NvdW50LFxuICAgIHRvdGFsLFxuICAgIGJyZWFrZG93bixcbiAgICByYXRpbmc6IGdldFRydXN0UmF0aW5nKHRvdGFsKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdHJ1c3QgcmF0aW5nIGxhYmVsIGZyb20gbnVtZXJpYyBzY29yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJ1c3RSYXRpbmcoc2NvcmU6IG51bWJlcik6IFRydXN0UmF0aW5nIHtcbiAgaWYgKHNjb3JlID49IDgwKSByZXR1cm4gJ3ZlcmlmaWVkJztcbiAgaWYgKHNjb3JlID49IDYwKSByZXR1cm4gJ2hpZ2gnO1xuICBpZiAoc2NvcmUgPj0gNDApIHJldHVybiAnbWVkaXVtJztcbiAgaWYgKHNjb3JlID49IDIwKSByZXR1cm4gJ2xvdyc7XG4gIHJldHVybiAndW50cnVzdGVkJztcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHZhbGlkYXRpb24gcmVzdWx0IG51bWJlciB0byBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRpb25SZXN1bHRGcm9tTnVtYmVyKHJlc3VsdDogbnVtYmVyKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIHN3aXRjaCAocmVzdWx0KSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuICdmYWlsJztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gJ3Bhc3MnO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAncGFydGlhbCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnZmFpbCc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IHZhbGlkYXRpb24gcmVzdWx0IHN0cmluZyB0byBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRpb25SZXN1bHRUb051bWJlcihyZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQpOiBudW1iZXIge1xuICBzd2l0Y2ggKHJlc3VsdCkge1xuICAgIGNhc2UgJ2ZhaWwnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAncGFzcyc6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICdwYXJ0aWFsJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgZGlzcHV0ZSBzdGF0dXMgbnVtYmVyIHRvIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcHV0ZVN0YXR1c0Zyb21OdW1iZXIoc3RhdHVzOiBudW1iZXIpOiBEaXNwdXRlU3RhdHVzIHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAndXBoZWxkJztcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gJ3JlamVjdGVkJztcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gJ2NhbmNlbGxlZCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncGVuZGluZyc7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBKU09OIHNhZmVseSB3aXRoIGZhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlSnNvblBhcnNlPFQ+KGpzb246IHN0cmluZywgZmFsbGJhY2s6IFQpOiBUIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyBUO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBjYXBhYmlsaXRpZXMgc3RyaW5nIHRvIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXM6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgaWYgKCFjYXBhYmlsaXRpZXMpIHJldHVybiBbXTtcbiAgcmV0dXJuIHNhZmVKc29uUGFyc2U8c3RyaW5nW10+KGNhcGFiaWxpdGllcywgW10pO1xufVxuXG4vKipcbiAqIFBhcnNlIHNwZWNpYWxpemF0aW9ucyBzdHJpbmcgdG8gYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbGl6YXRpb25zKHNwZWNpYWxpemF0aW9uczogc3RyaW5nKTogc3RyaW5nW10ge1xuICBpZiAoIXNwZWNpYWxpemF0aW9ucykgcmV0dXJuIFtdO1xuICByZXR1cm4gc2FmZUpzb25QYXJzZTxzdHJpbmdbXT4oc3BlY2lhbGl6YXRpb25zLCBbXSk7XG59XG5cbi8qKlxuICogUGFyc2UgdGFncyBzdHJpbmcgdG8gYXJyYXkgKGNvbW1hLXNlcGFyYXRlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFncyh0YWdzOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmICghdGFncykgcmV0dXJuIFtdO1xuICByZXR1cm4gdGFncy5zcGxpdCgnLCcpLm1hcCgodCkgPT4gdC50cmltKCkpLmZpbHRlcigodCkgPT4gdC5sZW5ndGggPiAwKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgWFBSIGFtb3VudCBmcm9tIHNtYWxsZXN0IHVuaXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFhwcihhbW91bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiAoYW1vdW50IC8gMTAwMDApLnRvRml4ZWQoNCkgKyAnIFhQUic7XG59XG5cbi8qKlxuICogUGFyc2UgWFBSIGFtb3VudCBzdHJpbmcgdG8gc21hbGxlc3QgdW5pdCAoaW50ZWdlciBtYXRoIHRvIGF2b2lkIGZsb2F0IHByZWNpc2lvbiBpc3N1ZXMpXG4gKiBcIjEwMC41MDAwIFhQUlwiIOKGkiAxMDA1MDAwLCBcIjAuNzAwMCBYUFJcIiDihpIgNzAwMFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VYcHIoYW1vdW50OiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBtYXRjaCA9IGFtb3VudC5tYXRjaCgvXihcXGQrKSg/OlxcLihcXGR7MSw0fSkpPy8pO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gMDtcbiAgY29uc3Qgd2hvbGUgPSBwYXJzZUludChtYXRjaFsxXSwgMTApIHx8IDA7XG4gIGNvbnN0IGZyYWNTdHIgPSAobWF0Y2hbMl0gfHwgJycpLnBhZEVuZCg0LCAnMCcpLnNsaWNlKDAsIDQpO1xuICBjb25zdCBmcmFjID0gcGFyc2VJbnQoZnJhY1N0ciwgMTApIHx8IDA7XG4gIHJldHVybiB3aG9sZSAqIDEwMDAwICsgZnJhYztcbn1cblxuLyoqXG4gKiBTYWZlIHBhcnNlSW50IHdpdGggZmFsbGJhY2sgLSByZXR1cm5zIGZhbGxiYWNrIG9uIE5hTlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FmZVBhcnNlSW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBmYWxsYmFjazogbnVtYmVyID0gMCk6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IGZhbGxiYWNrIDogcGFyc2VkO1xufVxuXG4vKipcbiAqIEZvcm1hdCB0aW1lc3RhbXAgdG8gSVNPIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHdlaWdodGVkIGF2ZXJhZ2Ugc2NvcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVdlaWdodGVkQXZlcmFnZShcbiAgc2NvcmVzOiBBcnJheTx7IHNjb3JlOiBudW1iZXI7IHdlaWdodDogbnVtYmVyIH0+XG4pOiBudW1iZXIge1xuICBpZiAoc2NvcmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgbGV0IHRvdGFsU2NvcmUgPSAwO1xuICBsZXQgdG90YWxXZWlnaHQgPSAwO1xuXG4gIGZvciAoY29uc3QgeyBzY29yZSwgd2VpZ2h0IH0gb2Ygc2NvcmVzKSB7XG4gICAgdG90YWxTY29yZSArPSBzY29yZSAqIHdlaWdodDtcbiAgICB0b3RhbFdlaWdodCArPSB3ZWlnaHQ7XG4gIH1cblxuICBpZiAodG90YWxXZWlnaHQgPT09IDApIHJldHVybiAwO1xuICByZXR1cm4gdG90YWxTY29yZSAvIHRvdGFsV2VpZ2h0O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIFhQUiBhY2NvdW50IG5hbWVcbiAqIE11c3QgYmUgMS0xMiBjaGFyYWN0ZXJzLCBhLXosIDEtNSwgYW5kIC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBY2NvdW50TmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoID4gMTIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIC9eW2EtejEtNS5dKyQvLnRlc3QobmFtZSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgVVJMIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIG5ldyBVUkwodXJsKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogR2V0IEtZQyBsZXZlbCB3ZWlnaHQgZm9yIGZlZWRiYWNrIHNjb3JpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEt5Y1dlaWdodChreWNMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDEgKyBreWNMZXZlbDtcbn1cbiJdfQ==
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@xpr-agents/sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for XPR Network Trustless Agent Registry - register agents, submit feedback, validate outputs, and manage escrow jobs",
5
+ "author": "XPR Network",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/XPRNetwork/xpr-agents#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/XPRNetwork/xpr-agents.git",
11
+ "directory": "sdk"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/XPRNetwork/xpr-agents/issues"
15
+ },
16
+ "keywords": [
17
+ "xpr",
18
+ "xpr-network",
19
+ "proton",
20
+ "blockchain",
21
+ "agents",
22
+ "ai-agents",
23
+ "registry",
24
+ "reputation",
25
+ "validation",
26
+ "escrow",
27
+ "trustless"
28
+ ],
29
+ "main": "dist/index.js",
30
+ "types": "dist/index.d.ts",
31
+ "files": [
32
+ "dist",
33
+ "README.md"
34
+ ],
35
+ "sideEffects": false,
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "scripts": {
40
+ "build": "tsc",
41
+ "clean": "rm -rf dist",
42
+ "prepublishOnly": "npm run clean && npm run build",
43
+ "test": "jest",
44
+ "lint": "eslint src/**/*.ts"
45
+ },
46
+ "dependencies": {
47
+ "@proton/js": "^28.1.2"
48
+ },
49
+ "peerDependencies": {
50
+ "@proton/web-sdk": "^4.4.0"
51
+ },
52
+ "peerDependenciesMeta": {
53
+ "@proton/web-sdk": {
54
+ "optional": true
55
+ }
56
+ },
57
+ "devDependencies": {
58
+ "@proton/web-sdk": "^4.4.1",
59
+ "@types/jest": "^29.5.0",
60
+ "@types/node": "^20.0.0",
61
+ "jest": "^29.5.0",
62
+ "ts-jest": "^29.1.0",
63
+ "typescript": "^5.0.0"
64
+ }
65
+ }