@azeth/common 0.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/LICENSE +21 -0
- package/README.md +65 -0
- package/dist/abis/AzethAccount.d.ts +585 -0
- package/dist/abis/AzethAccount.d.ts.map +1 -0
- package/dist/abis/AzethAccount.js +760 -0
- package/dist/abis/AzethAccount.js.map +1 -0
- package/dist/abis/AzethFactory.d.ts +579 -0
- package/dist/abis/AzethFactory.d.ts.map +1 -0
- package/dist/abis/AzethFactory.js +747 -0
- package/dist/abis/AzethFactory.js.map +1 -0
- package/dist/abis/AzethOracle.d.ts +495 -0
- package/dist/abis/AzethOracle.d.ts.map +1 -0
- package/dist/abis/AzethOracle.js +643 -0
- package/dist/abis/AzethOracle.js.map +1 -0
- package/dist/abis/ERC8004ReputationRegistry.d.ts +319 -0
- package/dist/abis/ERC8004ReputationRegistry.d.ts.map +1 -0
- package/dist/abis/ERC8004ReputationRegistry.js +405 -0
- package/dist/abis/ERC8004ReputationRegistry.js.map +1 -0
- package/dist/abis/GuardianModule.d.ts +825 -0
- package/dist/abis/GuardianModule.d.ts.map +1 -0
- package/dist/abis/GuardianModule.js +1067 -0
- package/dist/abis/GuardianModule.js.map +1 -0
- package/dist/abis/PaymentAgreementModule.d.ts +716 -0
- package/dist/abis/PaymentAgreementModule.d.ts.map +1 -0
- package/dist/abis/PaymentAgreementModule.js +915 -0
- package/dist/abis/PaymentAgreementModule.js.map +1 -0
- package/dist/abis/ReputationModule.d.ts +837 -0
- package/dist/abis/ReputationModule.d.ts.map +1 -0
- package/dist/abis/ReputationModule.js +1080 -0
- package/dist/abis/ReputationModule.js.map +1 -0
- package/dist/abis/TrustRegistryModule.d.ts +238 -0
- package/dist/abis/TrustRegistryModule.d.ts.map +1 -0
- package/dist/abis/TrustRegistryModule.js +311 -0
- package/dist/abis/TrustRegistryModule.js.map +1 -0
- package/dist/abis/index.d.ts +9 -0
- package/dist/abis/index.d.ts.map +1 -0
- package/dist/abis/index.js +9 -0
- package/dist/abis/index.js.map +1 -0
- package/dist/constants/addresses.d.ts +52 -0
- package/dist/constants/addresses.d.ts.map +1 -0
- package/dist/constants/addresses.js +56 -0
- package/dist/constants/addresses.js.map +1 -0
- package/dist/constants/chains.d.ts +73 -0
- package/dist/constants/chains.d.ts.map +1 -0
- package/dist/constants/chains.js +66 -0
- package/dist/constants/chains.js.map +1 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +4 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/tokens.d.ts +19 -0
- package/dist/constants/tokens.d.ts.map +1 -0
- package/dist/constants/tokens.js +19 -0
- package/dist/constants/tokens.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/types/contracts.d.ts +34 -0
- package/dist/types/contracts.d.ts.map +1 -0
- package/dist/types/contracts.js +2 -0
- package/dist/types/contracts.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messaging.d.ts +215 -0
- package/dist/types/messaging.d.ts.map +1 -0
- package/dist/types/messaging.js +3 -0
- package/dist/types/messaging.js.map +1 -0
- package/dist/types/participant.d.ts +23 -0
- package/dist/types/participant.d.ts.map +1 -0
- package/dist/types/participant.js +2 -0
- package/dist/types/participant.js.map +1 -0
- package/dist/types/payments.d.ts +35 -0
- package/dist/types/payments.d.ts.map +1 -0
- package/dist/types/payments.js +2 -0
- package/dist/types/payments.js.map +1 -0
- package/dist/types/registry.d.ts +84 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +2 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/reputation.d.ts +91 -0
- package/dist/types/reputation.d.ts.map +1 -0
- package/dist/types/reputation.js +2 -0
- package/dist/types/reputation.js.map +1 -0
- package/dist/utils/chains.d.ts +9 -0
- package/dist/utils/chains.d.ts.map +1 -0
- package/dist/utils/chains.js +19 -0
- package/dist/utils/chains.js.map +1 -0
- package/dist/utils/formatting.d.ts +11 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +69 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/validation.d.ts +32 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +100 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface ParticipantIdentity {
|
|
2
|
+
address: `0x${string}`;
|
|
3
|
+
entityType: EntityType;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
}
|
|
7
|
+
export type EntityType = 'agent' | 'service' | 'infrastructure';
|
|
8
|
+
/** On-chain guardrail configuration matching IGuardianModule.Guardrails struct.
|
|
9
|
+
* All spending limits are denominated in 18-decimal USD, aggregated across all tokens.
|
|
10
|
+
* Token amounts are converted to USD via the AzethPriceOracle (Chainlink) at validation time. */
|
|
11
|
+
export interface Guardrails {
|
|
12
|
+
/** Maximum single-transaction amount in 18-decimal USD */
|
|
13
|
+
maxTxAmountUSD: bigint;
|
|
14
|
+
/** Aggregate daily spend limit in 18-decimal USD (across all tokens) */
|
|
15
|
+
dailySpendLimitUSD: bigint;
|
|
16
|
+
/** Maximum single-transaction amount with guardian co-signature (18-decimal USD) */
|
|
17
|
+
guardianMaxTxAmountUSD: bigint;
|
|
18
|
+
/** Aggregate daily spend limit with guardian co-signature (18-decimal USD) */
|
|
19
|
+
guardianDailySpendLimitUSD: bigint;
|
|
20
|
+
guardian: `0x${string}`;
|
|
21
|
+
emergencyWithdrawTo: `0x${string}`;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=participant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"participant.d.ts","sourceRoot":"","sources":["../../src/types/participant.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAEhE;;kGAEkG;AAClG,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,0BAA0B,EAAE,MAAM,CAAC;IACnC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACxB,mBAAmB,EAAE,KAAK,MAAM,EAAE,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"participant.js","sourceRoot":"","sources":["../../src/types/participant.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface X402PaymentRequirement {
|
|
2
|
+
scheme: string;
|
|
3
|
+
network: string;
|
|
4
|
+
maxAmountRequired: string;
|
|
5
|
+
resource: string;
|
|
6
|
+
description: string;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
payTo: `0x${string}`;
|
|
9
|
+
maxTimeoutSeconds: number;
|
|
10
|
+
asset: `0x${string}`;
|
|
11
|
+
extra?: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/** On-chain payment agreement matching IPaymentAgreementModule.Agreement struct */
|
|
14
|
+
export interface PaymentAgreement {
|
|
15
|
+
id: bigint;
|
|
16
|
+
payee: `0x${string}`;
|
|
17
|
+
token: `0x${string}`;
|
|
18
|
+
amount: bigint;
|
|
19
|
+
/** Minimum seconds between executions */
|
|
20
|
+
interval: bigint;
|
|
21
|
+
/** Unix timestamp after which agreement expires (0 = no expiry) */
|
|
22
|
+
endTime: bigint;
|
|
23
|
+
/** Unix timestamp of last execution (0 if never executed) */
|
|
24
|
+
lastExecuted: bigint;
|
|
25
|
+
/** Maximum number of executions (0 = unlimited) */
|
|
26
|
+
maxExecutions: bigint;
|
|
27
|
+
/** Number of times this agreement has been executed */
|
|
28
|
+
executionCount: bigint;
|
|
29
|
+
/** Maximum total amount that can be paid over the agreement's lifetime (0 = unlimited) */
|
|
30
|
+
totalCap: bigint;
|
|
31
|
+
/** Total amount paid so far across all executions */
|
|
32
|
+
totalPaid: bigint;
|
|
33
|
+
active: boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=payments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/types/payments.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.js","sourceRoot":"","sources":["../../src/types/payments.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { EntityType } from './participant.js';
|
|
2
|
+
import type { WeightedReputation } from './reputation.js';
|
|
3
|
+
/** A single offering in a service provider's catalog.
|
|
4
|
+
* Multi-service providers list their offerings here, each with its own
|
|
5
|
+
* path (relative to the base endpoint), pricing, and description. */
|
|
6
|
+
export interface CatalogEntry {
|
|
7
|
+
/** Display name for this offering */
|
|
8
|
+
name: string;
|
|
9
|
+
/** URL path relative to the provider's base endpoint (e.g., "/v1/price/{coin}") */
|
|
10
|
+
path: string;
|
|
11
|
+
/** Listed price (e.g., "$0.001/request", "Free") */
|
|
12
|
+
pricing?: string;
|
|
13
|
+
/** What this offering does */
|
|
14
|
+
description?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface RegistryEntry {
|
|
17
|
+
tokenId: bigint;
|
|
18
|
+
owner: `0x${string}`;
|
|
19
|
+
entityType: EntityType;
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
capabilities: string[];
|
|
23
|
+
/** Service endpoint URL. Optional for infrastructure nodes. */
|
|
24
|
+
endpoint?: string;
|
|
25
|
+
/** Listed service price (e.g., "$0.01/request"). Informational — actual
|
|
26
|
+
* settlement price comes from the x402 402 response at transaction time. */
|
|
27
|
+
pricing?: string;
|
|
28
|
+
/** Service catalog for multi-service providers. Each entry describes one
|
|
29
|
+
* offering with its own path, pricing, and description. Optional — single-service
|
|
30
|
+
* providers use the top-level endpoint and pricing instead. */
|
|
31
|
+
catalog?: CatalogEntry[];
|
|
32
|
+
active: boolean;
|
|
33
|
+
/** Payment-weighted reputation score (0-100). Populated when discovery
|
|
34
|
+
* is called with sortByReputation or minReputation. */
|
|
35
|
+
reputation?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface DiscoveryParams {
|
|
38
|
+
capability?: string;
|
|
39
|
+
entityType?: EntityType;
|
|
40
|
+
/** Exact case-insensitive name match (NOT substring). */
|
|
41
|
+
name?: string;
|
|
42
|
+
/** Filter by owner address (case-insensitive). Returns all entries for this owner. */
|
|
43
|
+
owner?: `0x${string}`;
|
|
44
|
+
minReputation?: number;
|
|
45
|
+
/** When true, results are sorted by reputation score (highest first).
|
|
46
|
+
* Triggers reputation lookup even when minReputation is not set. */
|
|
47
|
+
sortByReputation?: boolean;
|
|
48
|
+
limit?: number;
|
|
49
|
+
offset?: number;
|
|
50
|
+
}
|
|
51
|
+
/** Registry entry enriched with cache metadata */
|
|
52
|
+
export interface CachedRegistryEntry extends RegistryEntry {
|
|
53
|
+
/** When this entry was cached (unix ms) */
|
|
54
|
+
cachedAt: number;
|
|
55
|
+
/** Cached weighted reputation (may be stale within TTL) */
|
|
56
|
+
reputationScore?: WeightedReputation;
|
|
57
|
+
/** How this entry entered the cache.
|
|
58
|
+
* Note: distinct from DiscoveryWithFallbackResult.source ('server'|'on-chain')
|
|
59
|
+
* and SyncStats.source ('full'|'incremental') — this describes the cache ingestion path. */
|
|
60
|
+
source: 'full-sync' | 'event' | 'manual';
|
|
61
|
+
}
|
|
62
|
+
/** Statistics from a cache sync operation */
|
|
63
|
+
export interface SyncStats {
|
|
64
|
+
totalEntries: number;
|
|
65
|
+
newEntries: number;
|
|
66
|
+
updatedEntries: number;
|
|
67
|
+
removedEntries: number;
|
|
68
|
+
/** Duration in milliseconds */
|
|
69
|
+
duration: number;
|
|
70
|
+
source: 'full' | 'incremental';
|
|
71
|
+
errors: number;
|
|
72
|
+
}
|
|
73
|
+
/** Current state of the registry cache */
|
|
74
|
+
export interface CacheStats {
|
|
75
|
+
totalEntries: number;
|
|
76
|
+
lastFullSyncAt: number;
|
|
77
|
+
lastIncrementalSyncAt: number;
|
|
78
|
+
/** Milliseconds since cache was started */
|
|
79
|
+
uptimeMs: number;
|
|
80
|
+
isRunning: boolean;
|
|
81
|
+
isSyncing: boolean;
|
|
82
|
+
reputationCacheSize: number;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;sEAEsE;AACtE,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;iFAC6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;oEAEgE;IAChE,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB;4DACwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,KAAK,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;yEACqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,kDAAkD;AAClD,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC;;iGAE6F;IAC7F,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;CAC1C;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/** Active opinion state for a rater→agent relationship (from ReputationModule) */
|
|
2
|
+
export interface ActiveOpinion {
|
|
3
|
+
/** Current index in ERC-8004 Reputation Registry (1-indexed) */
|
|
4
|
+
opinionIndex: bigint;
|
|
5
|
+
/** Whether active opinion exists for this relationship */
|
|
6
|
+
exists: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Parameters for submitting on-chain opinion via ReputationModule (payment-gated, $1 USD minimum) */
|
|
9
|
+
export interface OnChainOpinion {
|
|
10
|
+
/** Target agent's ERC-8004 token ID */
|
|
11
|
+
agentId: bigint;
|
|
12
|
+
/** Opinion value (int128 — can be negative) */
|
|
13
|
+
value: bigint;
|
|
14
|
+
/** Decimal precision for the value (0-18) */
|
|
15
|
+
valueDecimals: number;
|
|
16
|
+
/** Primary categorization tag (e.g., "quality", "uptime") */
|
|
17
|
+
tag1: string;
|
|
18
|
+
/** Secondary categorization tag (e.g., "x402", "rpc") */
|
|
19
|
+
tag2: string;
|
|
20
|
+
/** Service endpoint being rated */
|
|
21
|
+
endpoint: string;
|
|
22
|
+
/** URI containing detailed opinion data */
|
|
23
|
+
opinionURI: string;
|
|
24
|
+
/** Hash of the opinion data for integrity verification */
|
|
25
|
+
opinionHash: `0x${string}`;
|
|
26
|
+
}
|
|
27
|
+
/** Value-weighted reputation result from ReputationModule.getWeightedReputation() */
|
|
28
|
+
export interface WeightedReputation {
|
|
29
|
+
/** Weighted average value (int256, can be negative) */
|
|
30
|
+
weightedValue: bigint;
|
|
31
|
+
/** Sum of all raters' x^(2/3) dampened USD weights */
|
|
32
|
+
totalWeight: bigint;
|
|
33
|
+
/** Number of raters with valid opinion and sufficient USD payment */
|
|
34
|
+
opinionCount: bigint;
|
|
35
|
+
}
|
|
36
|
+
/** A single opinion entry read from the ERC-8004 Reputation Registry */
|
|
37
|
+
export interface OpinionEntry {
|
|
38
|
+
/** Opinion value (int128 from registry) */
|
|
39
|
+
value: bigint;
|
|
40
|
+
/** Decimal precision of the value */
|
|
41
|
+
valueDecimals: number;
|
|
42
|
+
/** Primary tag */
|
|
43
|
+
tag1: string;
|
|
44
|
+
/** Secondary tag */
|
|
45
|
+
tag2: string;
|
|
46
|
+
/** Whether the opinion has been revoked */
|
|
47
|
+
isRevoked: boolean;
|
|
48
|
+
}
|
|
49
|
+
/** Net payment delta between two accounts for a specific token */
|
|
50
|
+
export interface PaymentDelta {
|
|
51
|
+
/** The address that paid */
|
|
52
|
+
from: `0x${string}`;
|
|
53
|
+
/** The address that received */
|
|
54
|
+
to: `0x${string}`;
|
|
55
|
+
/** Token address (0x0 for native ETH) */
|
|
56
|
+
token: `0x${string}`;
|
|
57
|
+
/** Net amount paid (positive = from paid more, negative = to paid more) */
|
|
58
|
+
netPaid: bigint;
|
|
59
|
+
}
|
|
60
|
+
/** @deprecated Use ActiveOpinion instead */
|
|
61
|
+
export type ActiveFeedback = ActiveOpinion;
|
|
62
|
+
/** @deprecated Use OnChainOpinion instead */
|
|
63
|
+
export type OnChainFeedback = OnChainOpinion;
|
|
64
|
+
/** @deprecated Use OpinionEntry instead */
|
|
65
|
+
export type FeedbackEntry = OpinionEntry;
|
|
66
|
+
export interface ReputationScore {
|
|
67
|
+
tokenId: bigint;
|
|
68
|
+
/** Uptime ratio (0.0 to 1.0) */
|
|
69
|
+
uptime: number;
|
|
70
|
+
/** Average response time in milliseconds */
|
|
71
|
+
responseTimeMs: number;
|
|
72
|
+
/** Success rate ratio (0.0 to 1.0) */
|
|
73
|
+
successRate: number;
|
|
74
|
+
/** Data freshness ratio (0.0 to 1.0) */
|
|
75
|
+
dataFreshness: number;
|
|
76
|
+
/** Total volume processed in wei */
|
|
77
|
+
volumeProcessed: bigint;
|
|
78
|
+
/** Total number of interactions */
|
|
79
|
+
totalInteractions: bigint;
|
|
80
|
+
/** Unix timestamp of last update */
|
|
81
|
+
lastUpdated: number;
|
|
82
|
+
}
|
|
83
|
+
export interface ReputationFeedback {
|
|
84
|
+
serviceTokenId: bigint;
|
|
85
|
+
success: boolean;
|
|
86
|
+
/** Response time in milliseconds */
|
|
87
|
+
responseTimeMs: number;
|
|
88
|
+
/** Quality score (0.0 to 1.0). Optional. */
|
|
89
|
+
qualityScore?: number;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=reputation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation.d.ts","sourceRoot":"","sources":["../../src/types/reputation.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,sGAAsG;AACtG,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;CAC5B;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;IACpB,gCAAgC;IAChC,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC;IAClB,yCAAyC;IACzC,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;AAC3C,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC;AAC7C,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AAIzC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation.js","sourceRoot":"","sources":["../../src/types/reputation.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Chain } from 'viem';
|
|
2
|
+
import type { SupportedChainName } from '../constants/chains.js';
|
|
3
|
+
/** Map a SupportedChainName to the corresponding viem Chain object.
|
|
4
|
+
*
|
|
5
|
+
* Centralises the chain resolution logic so every package
|
|
6
|
+
* uses the same mapping and new chains only need to be added here.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveViemChain(chainName: SupportedChainName): Chain;
|
|
9
|
+
//# sourceMappingURL=chains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../src/utils/chains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,GAAG,KAAK,CAWrE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { base, baseSepolia, sepolia, mainnet } from 'viem/chains';
|
|
2
|
+
/** Map a SupportedChainName to the corresponding viem Chain object.
|
|
3
|
+
*
|
|
4
|
+
* Centralises the chain resolution logic so every package
|
|
5
|
+
* uses the same mapping and new chains only need to be added here.
|
|
6
|
+
*/
|
|
7
|
+
export function resolveViemChain(chainName) {
|
|
8
|
+
switch (chainName) {
|
|
9
|
+
case 'base':
|
|
10
|
+
return base;
|
|
11
|
+
case 'baseSepolia':
|
|
12
|
+
return baseSepolia;
|
|
13
|
+
case 'ethereumSepolia':
|
|
14
|
+
return sepolia;
|
|
15
|
+
case 'ethereum':
|
|
16
|
+
return mainnet;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=chains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../src/utils/chains.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGlE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA6B;IAC5D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC;QACrB,KAAK,iBAAiB;YACpB,OAAO,OAAO,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Truncate an Ethereum address for display: 0x1234...abcd */
|
|
2
|
+
export declare function formatAddress(address: string, chars?: number): string;
|
|
3
|
+
/** Format a BigInt token amount with decimal places.
|
|
4
|
+
* F-9: Handles negative amounts correctly by working with the absolute value
|
|
5
|
+
* and prepending a minus sign.
|
|
6
|
+
* When maxFractionDigits is specified, rounds (>=5 up) instead of truncating.
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatTokenAmount(amount: bigint, decimals: number, maxFractionDigits?: number): string;
|
|
9
|
+
/** Format USDC amount (6 decimals) */
|
|
10
|
+
export declare function formatUSDC(amountMicro: bigint): string;
|
|
11
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,CAGhE;AA+BD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BtG;AAED,sCAAsC;AACtC,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** Truncate an Ethereum address for display: 0x1234...abcd */
|
|
2
|
+
export function formatAddress(address, chars = 4) {
|
|
3
|
+
if (address.length <= chars * 2 + 2)
|
|
4
|
+
return address;
|
|
5
|
+
return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;
|
|
6
|
+
}
|
|
7
|
+
/** Round a fraction string to the specified number of digits (standard rounding: >=5 rounds up).
|
|
8
|
+
* Returns the rounded string and a carry flag if rounding overflows (e.g., "999" → "000" + carry).
|
|
9
|
+
*/
|
|
10
|
+
function roundFraction(fractionStr, digits) {
|
|
11
|
+
if (digits >= fractionStr.length)
|
|
12
|
+
return { value: fractionStr, carry: false };
|
|
13
|
+
if (digits === 0) {
|
|
14
|
+
return { value: '', carry: parseInt(fractionStr[0] ?? '0', 10) >= 5 };
|
|
15
|
+
}
|
|
16
|
+
const kept = fractionStr.slice(0, digits);
|
|
17
|
+
const nextDigit = parseInt(fractionStr[digits] ?? '0', 10);
|
|
18
|
+
if (nextDigit < 5)
|
|
19
|
+
return { value: kept, carry: false };
|
|
20
|
+
// Round up: increment from the rightmost kept digit
|
|
21
|
+
const result = kept.split('').map(Number);
|
|
22
|
+
let i = result.length - 1;
|
|
23
|
+
let carry = true;
|
|
24
|
+
while (i >= 0 && carry) {
|
|
25
|
+
result[i] += 1;
|
|
26
|
+
if (result[i] >= 10) {
|
|
27
|
+
result[i] = 0;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
carry = false;
|
|
31
|
+
}
|
|
32
|
+
i--;
|
|
33
|
+
}
|
|
34
|
+
return { value: result.join(''), carry };
|
|
35
|
+
}
|
|
36
|
+
/** Format a BigInt token amount with decimal places.
|
|
37
|
+
* F-9: Handles negative amounts correctly by working with the absolute value
|
|
38
|
+
* and prepending a minus sign.
|
|
39
|
+
* When maxFractionDigits is specified, rounds (>=5 up) instead of truncating.
|
|
40
|
+
*/
|
|
41
|
+
export function formatTokenAmount(amount, decimals, maxFractionDigits) {
|
|
42
|
+
if (!Number.isInteger(decimals) || decimals < 0 || decimals > 78) {
|
|
43
|
+
throw new RangeError(`decimals must be an integer between 0 and 78, got ${decimals}`);
|
|
44
|
+
}
|
|
45
|
+
const negative = amount < 0n;
|
|
46
|
+
const abs = negative ? -amount : amount;
|
|
47
|
+
const divisor = 10n ** BigInt(decimals);
|
|
48
|
+
let whole = abs / divisor;
|
|
49
|
+
const fraction = abs % divisor;
|
|
50
|
+
const sign = negative ? '-' : '';
|
|
51
|
+
if (fraction === 0n)
|
|
52
|
+
return `${sign}${whole.toString()}`;
|
|
53
|
+
const fractionStr = fraction.toString().padStart(decimals, '0');
|
|
54
|
+
if (maxFractionDigits !== undefined) {
|
|
55
|
+
const { value: rounded, carry } = roundFraction(fractionStr, maxFractionDigits);
|
|
56
|
+
if (carry)
|
|
57
|
+
whole += 1n;
|
|
58
|
+
if (rounded === '' || /^0+$/.test(rounded))
|
|
59
|
+
return `${sign}${whole.toString()}`;
|
|
60
|
+
return `${sign}${whole}.${rounded}`;
|
|
61
|
+
}
|
|
62
|
+
const trimmed = fractionStr.replace(/0+$/, '');
|
|
63
|
+
return `${sign}${whole}.${trimmed}`;
|
|
64
|
+
}
|
|
65
|
+
/** Format USDC amount (6 decimals) */
|
|
66
|
+
export function formatUSDC(amountMicro) {
|
|
67
|
+
return formatTokenAmount(amountMicro, 6);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type SupportedChainName } from '../constants/chains.js';
|
|
2
|
+
/** Resolve a chain alias (case-insensitive) to a canonical SupportedChainName.
|
|
3
|
+
* Returns undefined if the alias is not recognized.
|
|
4
|
+
*/
|
|
5
|
+
export declare function resolveChainAlias(input: string): SupportedChainName | undefined;
|
|
6
|
+
/** Resolve a chain ID to a canonical SupportedChainName.
|
|
7
|
+
* Returns undefined if the chain ID is not recognized.
|
|
8
|
+
*/
|
|
9
|
+
export declare function chainIdToName(chainId: number): SupportedChainName | undefined;
|
|
10
|
+
/** Validate an Ethereum address (0x-prefixed, 40 hex chars) */
|
|
11
|
+
export declare function isValidAddress(address: string): address is `0x${string}`;
|
|
12
|
+
/** Validate and return a typed Ethereum address, or throw */
|
|
13
|
+
export declare function validateAddress(address: string): `0x${string}`;
|
|
14
|
+
/** Check if an address is the zero address */
|
|
15
|
+
export declare function isZeroAddress(address: string): boolean;
|
|
16
|
+
/** Validate a private key format (0x-prefixed, 64 hex chars) */
|
|
17
|
+
export declare function isValidPrivateKey(key: string): boolean;
|
|
18
|
+
/** Validate and return a typed private key, or throw */
|
|
19
|
+
export declare function validatePrivateKey(key: string): `0x${string}`;
|
|
20
|
+
/** Validate a chain name against supported chains */
|
|
21
|
+
export declare function isValidChainName(chain: string): chain is SupportedChainName;
|
|
22
|
+
/** Validate and return a typed chain name, or throw.
|
|
23
|
+
* Accepts aliases (e.g. 'base-sepolia', 'eth-sepolia', 'sepolia').
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateChainName(chain: string): SupportedChainName;
|
|
26
|
+
/** Validate a bytes32 hex string (0x-prefixed, 64 hex chars) */
|
|
27
|
+
export declare function isValidBytes32(value: string): boolean;
|
|
28
|
+
/** Validate a URL, optionally requiring HTTPS */
|
|
29
|
+
export declare function isValidUrl(url: string, requireHttps?: boolean): boolean;
|
|
30
|
+
/** Validate a BigInt is within uint256 range */
|
|
31
|
+
export declare function isValidUint256(value: bigint): boolean;
|
|
32
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAwBnF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAK/E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAE7E;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,KAAK,MAAM,EAAE,CAExE;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAK9D;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wDAAwD;AACxD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAK7D;AAED,qDAAqD;AACrD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAE3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAOnE;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAUrE;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { SUPPORTED_CHAINS } from '../constants/chains.js';
|
|
2
|
+
/** All supported chain names, derived from SUPPORTED_CHAINS at runtime */
|
|
3
|
+
const VALID_CHAIN_NAMES = new Set(Object.keys(SUPPORTED_CHAINS));
|
|
4
|
+
/** Map of chain aliases to canonical chain names */
|
|
5
|
+
const CHAIN_ALIASES = {
|
|
6
|
+
'base': 'base',
|
|
7
|
+
'basesepolia': 'baseSepolia',
|
|
8
|
+
'base-sepolia': 'baseSepolia',
|
|
9
|
+
'ethereumsepolia': 'ethereumSepolia',
|
|
10
|
+
'ethereum-sepolia': 'ethereumSepolia',
|
|
11
|
+
'eth-sepolia': 'ethereumSepolia',
|
|
12
|
+
'sepolia': 'ethereumSepolia',
|
|
13
|
+
'ethereum': 'ethereum',
|
|
14
|
+
'eth': 'ethereum',
|
|
15
|
+
'mainnet': 'ethereum',
|
|
16
|
+
};
|
|
17
|
+
/** Map of chain IDs to canonical chain names */
|
|
18
|
+
const CHAIN_ID_MAP = Object.fromEntries(Object.entries(SUPPORTED_CHAINS).map(([name, config]) => [config.id, name]));
|
|
19
|
+
/** Resolve a chain alias (case-insensitive) to a canonical SupportedChainName.
|
|
20
|
+
* Returns undefined if the alias is not recognized.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveChainAlias(input) {
|
|
23
|
+
// Try exact match first
|
|
24
|
+
if (VALID_CHAIN_NAMES.has(input))
|
|
25
|
+
return input;
|
|
26
|
+
// Try lowercase alias
|
|
27
|
+
return CHAIN_ALIASES[input.toLowerCase()];
|
|
28
|
+
}
|
|
29
|
+
/** Resolve a chain ID to a canonical SupportedChainName.
|
|
30
|
+
* Returns undefined if the chain ID is not recognized.
|
|
31
|
+
*/
|
|
32
|
+
export function chainIdToName(chainId) {
|
|
33
|
+
return CHAIN_ID_MAP[chainId];
|
|
34
|
+
}
|
|
35
|
+
/** Validate an Ethereum address (0x-prefixed, 40 hex chars) */
|
|
36
|
+
export function isValidAddress(address) {
|
|
37
|
+
return /^0x[0-9a-fA-F]{40}$/.test(address);
|
|
38
|
+
}
|
|
39
|
+
/** Validate and return a typed Ethereum address, or throw */
|
|
40
|
+
export function validateAddress(address) {
|
|
41
|
+
if (!isValidAddress(address)) {
|
|
42
|
+
throw new Error('Invalid Ethereum address format');
|
|
43
|
+
}
|
|
44
|
+
return address;
|
|
45
|
+
}
|
|
46
|
+
/** Check if an address is the zero address */
|
|
47
|
+
export function isZeroAddress(address) {
|
|
48
|
+
return address === '0x0000000000000000000000000000000000000000';
|
|
49
|
+
}
|
|
50
|
+
/** Validate a private key format (0x-prefixed, 64 hex chars) */
|
|
51
|
+
export function isValidPrivateKey(key) {
|
|
52
|
+
return /^0x[0-9a-fA-F]{64}$/.test(key);
|
|
53
|
+
}
|
|
54
|
+
/** Validate and return a typed private key, or throw */
|
|
55
|
+
export function validatePrivateKey(key) {
|
|
56
|
+
if (!isValidPrivateKey(key)) {
|
|
57
|
+
throw new Error('Invalid private key format. Must be 0x-prefixed followed by 64 hex characters.');
|
|
58
|
+
}
|
|
59
|
+
return key;
|
|
60
|
+
}
|
|
61
|
+
/** Validate a chain name against supported chains */
|
|
62
|
+
export function isValidChainName(chain) {
|
|
63
|
+
return VALID_CHAIN_NAMES.has(chain);
|
|
64
|
+
}
|
|
65
|
+
/** Validate and return a typed chain name, or throw.
|
|
66
|
+
* Accepts aliases (e.g. 'base-sepolia', 'eth-sepolia', 'sepolia').
|
|
67
|
+
*/
|
|
68
|
+
export function validateChainName(chain) {
|
|
69
|
+
const resolved = resolveChainAlias(chain);
|
|
70
|
+
if (!resolved) {
|
|
71
|
+
const valid = Array.from(VALID_CHAIN_NAMES).join(', ');
|
|
72
|
+
throw new Error(`Invalid chain "${chain}". Must be one of: ${valid}`);
|
|
73
|
+
}
|
|
74
|
+
return resolved;
|
|
75
|
+
}
|
|
76
|
+
/** Validate a bytes32 hex string (0x-prefixed, 64 hex chars) */
|
|
77
|
+
export function isValidBytes32(value) {
|
|
78
|
+
return /^0x[0-9a-fA-F]{64}$/.test(value);
|
|
79
|
+
}
|
|
80
|
+
/** Validate a URL, optionally requiring HTTPS */
|
|
81
|
+
export function isValidUrl(url, requireHttps = false) {
|
|
82
|
+
try {
|
|
83
|
+
const parsed = new URL(url);
|
|
84
|
+
if (requireHttps && parsed.protocol !== 'https:')
|
|
85
|
+
return false;
|
|
86
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:')
|
|
87
|
+
return false;
|
|
88
|
+
if (!parsed.hostname)
|
|
89
|
+
return false;
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Validate a BigInt is within uint256 range */
|
|
97
|
+
export function isValidUint256(value) {
|
|
98
|
+
return value >= 0n && value < 2n ** 256n;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@azeth/common",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Shared types, constants, ABIs, and errors for the Azeth trust infrastructure",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/azeth-protocol/common.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://azeth.ai",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"azeth",
|
|
14
|
+
"machine-economy",
|
|
15
|
+
"trust-registry",
|
|
16
|
+
"erc-8004",
|
|
17
|
+
"erc-4337",
|
|
18
|
+
"smart-accounts",
|
|
19
|
+
"x402"
|
|
20
|
+
],
|
|
21
|
+
"main": "dist/index.js",
|
|
22
|
+
"types": "dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"import": "./dist/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./abis": {
|
|
29
|
+
"types": "./dist/abis/index.d.ts",
|
|
30
|
+
"import": "./dist/abis/index.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist/",
|
|
35
|
+
"README.md",
|
|
36
|
+
"LICENSE"
|
|
37
|
+
],
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"viem": "^2.21.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"typescript": "^5.7.0",
|
|
43
|
+
"@changesets/cli": "^2.27.0"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=20.0.0"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "tsc --project tsconfig.json",
|
|
53
|
+
"typecheck": "tsc --noEmit",
|
|
54
|
+
"clean": "rm -rf dist",
|
|
55
|
+
"release": "pnpm build && changeset publish"
|
|
56
|
+
}
|
|
57
|
+
}
|