@agentic-trust/agentic-trust-sdk 1.0.43

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.
Files changed (78) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +213 -0
  3. package/abis/BaseRegistrarImplementation.json +1013 -0
  4. package/abis/ETHRegistrarController.json +1004 -0
  5. package/abis/IdentityRegistry.json +1044 -0
  6. package/abis/NameWrapper.json +2026 -0
  7. package/abis/PublicResolver.json +1772 -0
  8. package/abis/ReputationRegistry.json +701 -0
  9. package/abis/ValidationRegistry.json +505 -0
  10. package/dist/AIAgentAssociationClient.d.ts +58 -0
  11. package/dist/AIAgentAssociationClient.d.ts.map +1 -0
  12. package/dist/AIAgentAssociationClient.js +100 -0
  13. package/dist/AIAgentAssociationClient.js.map +1 -0
  14. package/dist/AIAgentDiscoveryClient.d.ts +673 -0
  15. package/dist/AIAgentDiscoveryClient.d.ts.map +1 -0
  16. package/dist/AIAgentDiscoveryClient.js +3184 -0
  17. package/dist/AIAgentDiscoveryClient.js.map +1 -0
  18. package/dist/AIAgentENSClient.d.ts +149 -0
  19. package/dist/AIAgentENSClient.d.ts.map +1 -0
  20. package/dist/AIAgentENSClient.js +958 -0
  21. package/dist/AIAgentENSClient.js.map +1 -0
  22. package/dist/AIAgentIdentityClient.d.ts +159 -0
  23. package/dist/AIAgentIdentityClient.d.ts.map +1 -0
  24. package/dist/AIAgentIdentityClient.js +660 -0
  25. package/dist/AIAgentIdentityClient.js.map +1 -0
  26. package/dist/AIAgentL2ENSDurenClient.d.ts +120 -0
  27. package/dist/AIAgentL2ENSDurenClient.d.ts.map +1 -0
  28. package/dist/AIAgentL2ENSDurenClient.js +735 -0
  29. package/dist/AIAgentL2ENSDurenClient.js.map +1 -0
  30. package/dist/AIAgentL2ENSNamespaceClient.d.ts +58 -0
  31. package/dist/AIAgentL2ENSNamespaceClient.d.ts.map +1 -0
  32. package/dist/AIAgentL2ENSNamespaceClient.js +214 -0
  33. package/dist/AIAgentL2ENSNamespaceClient.js.map +1 -0
  34. package/dist/AIAgentReputationClient.d.ts +69 -0
  35. package/dist/AIAgentReputationClient.d.ts.map +1 -0
  36. package/dist/AIAgentReputationClient.js +203 -0
  37. package/dist/AIAgentReputationClient.js.map +1 -0
  38. package/dist/AIAgentValidationClient.d.ts +60 -0
  39. package/dist/AIAgentValidationClient.d.ts.map +1 -0
  40. package/dist/AIAgentValidationClient.js +123 -0
  41. package/dist/AIAgentValidationClient.js.map +1 -0
  42. package/dist/OrgIdentityClient.d.ts +27 -0
  43. package/dist/OrgIdentityClient.d.ts.map +1 -0
  44. package/dist/OrgIdentityClient.js +169 -0
  45. package/dist/OrgIdentityClient.js.map +1 -0
  46. package/dist/abis/BaseRegistrarImplementation.json +1013 -0
  47. package/dist/abis/ETHRegistrarController.json +1004 -0
  48. package/dist/abis/IdentityRegistry.json +1044 -0
  49. package/dist/abis/NameWrapper.json +2026 -0
  50. package/dist/abis/PublicResolver.json +1772 -0
  51. package/dist/abis/ReputationRegistry.json +701 -0
  52. package/dist/abis/ValidationRegistry.json +505 -0
  53. package/dist/index.d.ts +25 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +24 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/schema.d.ts +13 -0
  58. package/dist/schema.d.ts.map +1 -0
  59. package/dist/schema.js +696 -0
  60. package/dist/schema.js.map +1 -0
  61. package/dist/schemaKb.d.ts +12 -0
  62. package/dist/schemaKb.d.ts.map +1 -0
  63. package/dist/schemaKb.js +593 -0
  64. package/dist/schemaKb.js.map +1 -0
  65. package/dist/tsconfig.tsbuildinfo +1 -0
  66. package/dist/utils/did8004.d.ts +57 -0
  67. package/dist/utils/did8004.d.ts.map +1 -0
  68. package/dist/utils/did8004.js +127 -0
  69. package/dist/utils/did8004.js.map +1 -0
  70. package/dist/utils/didEns.d.ts +46 -0
  71. package/dist/utils/didEns.d.ts.map +1 -0
  72. package/dist/utils/didEns.js +107 -0
  73. package/dist/utils/didEns.js.map +1 -0
  74. package/dist/utils/didEthr.d.ts +40 -0
  75. package/dist/utils/didEthr.d.ts.map +1 -0
  76. package/dist/utils/didEthr.js +87 -0
  77. package/dist/utils/didEthr.js.map +1 -0
  78. package/package.json +79 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Agentic Trust SDK - Validation Client
3
+ * Extends the base ERC-8004 ValidationClient with AccountProvider support.
4
+ * Uses AccountProvider (Ports & Adapters pattern) for chain I/O.
5
+ */
6
+ import { ValidationClient as BaseValidationClient, type ValidationStatus, AccountProvider, type TxRequest } from '@agentic-trust/8004-sdk';
7
+ export interface ValidationRequestParams {
8
+ validatorAddress: string;
9
+ agentId: bigint;
10
+ requestUri: string;
11
+ requestHash: string;
12
+ }
13
+ export interface ValidationResponseParams {
14
+ requestHash: string;
15
+ response: number;
16
+ responseUri?: string;
17
+ responseHash?: string;
18
+ tag?: string;
19
+ }
20
+ export declare class AIAgentValidationClient extends BaseValidationClient {
21
+ private chain;
22
+ private accountProvider;
23
+ private validationRegistryAddress;
24
+ constructor(accountProvider: AccountProvider, validationRegistryAddress: `0x${string}`);
25
+ static create(accountProvider: AccountProvider, validationRegistryAddress: `0x${string}`): Promise<AIAgentValidationClient>;
26
+ getIdentityRegistry(): Promise<string>;
27
+ getAgentValidations(agentId: bigint): Promise<string[]>;
28
+ getValidatorRequests(validatorAddress: string): Promise<string[]>;
29
+ getValidationStatus(requestHash: string): Promise<ValidationStatus>;
30
+ getSummary(agentId: bigint, validatorAddresses?: string[], tag?: string): Promise<{
31
+ count: bigint;
32
+ avgResponse: number;
33
+ }>;
34
+ validationRequest(params: ValidationRequestParams): Promise<{
35
+ txHash: string;
36
+ requestHash: string;
37
+ }>;
38
+ validationResponse(params: ValidationResponseParams): Promise<{
39
+ txHash: string;
40
+ }>;
41
+ /**
42
+ * Prepare the validationRequest transaction data without sending it.
43
+ * Requires the validator account address to be provided (computed server-side).
44
+ */
45
+ prepareValidationRequestTx(params: {
46
+ agentId: string | number | bigint;
47
+ validatorAddress: `0x${string}`;
48
+ requestUri?: string;
49
+ requestHash?: string;
50
+ }): Promise<{
51
+ txRequest: TxRequest;
52
+ requestHash: string;
53
+ }>;
54
+ /**
55
+ * Prepare the validationResponse transaction data without sending it.
56
+ * This encodes the transaction that can be sent via a bundler using account abstraction.
57
+ */
58
+ prepareValidationResponseTx(params: ValidationResponseParams): Promise<TxRequest>;
59
+ }
60
+ //# sourceMappingURL=AIAgentValidationClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIAgentValidationClient.d.ts","sourceRoot":"","sources":["../AIAgentValidationClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EACL,gBAAgB,IAAI,oBAAoB,EACxC,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,uBAAwB,SAAQ,oBAAoB;IAC/D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,yBAAyB,CAAgB;gBAErC,eAAe,EAAE,eAAe,EAAE,yBAAyB,EAAE,KAAK,MAAM,EAAE;WA6BzE,MAAM,CACjB,eAAe,EAAE,eAAe,EAChC,yBAAyB,EAAE,KAAK,MAAM,EAAE,GACvC,OAAO,CAAC,uBAAuB,CAAC;IAKnC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIvD,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOjE,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAInE,UAAU,CACR,OAAO,EAAE,MAAM,EACf,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAC7B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IASlD,iBAAiB,CACf,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAInD,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAIjF;;;OAGG;IACG,0BAA0B,CAAC,MAAM,EAAE;QACvC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAClC,gBAAgB,EAAE,KAAK,MAAM,EAAE,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAgC1D;;;OAGG;IACG,2BAA2B,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,SAAS,CAAC;CAwBxF"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Agentic Trust SDK - Validation Client
3
+ * Extends the base ERC-8004 ValidationClient with AccountProvider support.
4
+ * Uses AccountProvider (Ports & Adapters pattern) for chain I/O.
5
+ */
6
+ import { sepolia } from 'viem/chains';
7
+ import { keccak256, stringToHex } from 'viem';
8
+ import { ValidationClient as BaseValidationClient, } from '@agentic-trust/8004-sdk';
9
+ import ValidationRegistryABI from './abis/ValidationRegistry.json';
10
+ export class AIAgentValidationClient extends BaseValidationClient {
11
+ chain;
12
+ accountProvider;
13
+ validationRegistryAddress;
14
+ constructor(accountProvider, validationRegistryAddress) {
15
+ // Minimal adapter wrapper using AccountProvider for BaseValidationClient compatibility
16
+ const minimalAdapter = {
17
+ call: async (to, abi, functionName, args) => {
18
+ return accountProvider?.call({ to: to, abi, functionName, args });
19
+ },
20
+ send: async (to, abi, functionName, args) => {
21
+ const data = await accountProvider?.encodeFunctionData({
22
+ abi,
23
+ functionName,
24
+ args: args || [],
25
+ });
26
+ if (data) {
27
+ const tx = { to: to, data };
28
+ const result = await accountProvider?.send(tx);
29
+ return { hash: result?.hash, txHash: result?.hash };
30
+ }
31
+ return { hash: undefined, txHash: undefined };
32
+ },
33
+ };
34
+ super(minimalAdapter, validationRegistryAddress);
35
+ this.chain = sepolia;
36
+ this.accountProvider = accountProvider;
37
+ this.validationRegistryAddress = validationRegistryAddress;
38
+ }
39
+ // Factory helper to mirror AIAgentReputationClient.create-style API
40
+ static async create(accountProvider, validationRegistryAddress) {
41
+ return new AIAgentValidationClient(accountProvider, validationRegistryAddress);
42
+ }
43
+ // Re-expose base-class methods for TypeScript consumers
44
+ getIdentityRegistry() {
45
+ return BaseValidationClient.prototype.getIdentityRegistry.call(this);
46
+ }
47
+ getAgentValidations(agentId) {
48
+ return BaseValidationClient.prototype.getAgentValidations.call(this, agentId);
49
+ }
50
+ getValidatorRequests(validatorAddress) {
51
+ return BaseValidationClient.prototype.getValidatorRequests.call(this, validatorAddress);
52
+ }
53
+ getValidationStatus(requestHash) {
54
+ return BaseValidationClient.prototype.getValidationStatus.call(this, requestHash);
55
+ }
56
+ getSummary(agentId, validatorAddresses, tag) {
57
+ return BaseValidationClient.prototype.getSummary.call(this, agentId, validatorAddresses, tag);
58
+ }
59
+ validationRequest(params) {
60
+ return BaseValidationClient.prototype.validationRequest.call(this, params);
61
+ }
62
+ validationResponse(params) {
63
+ return BaseValidationClient.prototype.validationResponse.call(this, params);
64
+ }
65
+ /**
66
+ * Prepare the validationRequest transaction data without sending it.
67
+ * Requires the validator account address to be provided (computed server-side).
68
+ */
69
+ async prepareValidationRequestTx(params) {
70
+ if (!params.agentId) {
71
+ throw new Error('agentId requesting validation is required');
72
+ }
73
+ if (!params.validatorAddress) {
74
+ throw new Error('validatorAddress that performs the validation is required');
75
+ }
76
+ // Prepare validation request parameters
77
+ const agentIdBigInt = typeof params.agentId === 'bigint'
78
+ ? params.agentId
79
+ : BigInt(params.agentId.toString());
80
+ const finalRequestUri = params.requestUri || `https://agentic-trust.org/validation/${params.agentId}`;
81
+ const finalRequestHash = params.requestHash || keccak256(stringToHex(finalRequestUri));
82
+ // Encode the validation request call
83
+ const data = await this.accountProvider?.encodeFunctionData({
84
+ abi: ValidationRegistryABI,
85
+ functionName: 'validationRequest',
86
+ args: [params.validatorAddress, agentIdBigInt, finalRequestUri, finalRequestHash],
87
+ });
88
+ return {
89
+ txRequest: {
90
+ to: this.validationRegistryAddress,
91
+ data: data || '0x',
92
+ value: 0n,
93
+ },
94
+ requestHash: finalRequestHash,
95
+ };
96
+ }
97
+ /**
98
+ * Prepare the validationResponse transaction data without sending it.
99
+ * This encodes the transaction that can be sent via a bundler using account abstraction.
100
+ */
101
+ async prepareValidationResponseTx(params) {
102
+ if (params.response < 0 || params.response > 100) {
103
+ throw new Error('Response MUST be between 0 and 100');
104
+ }
105
+ // Convert optional parameters to proper format (matching BaseValidationClient logic)
106
+ const { ethers } = await import('ethers');
107
+ const responseUri = params.responseUri || '';
108
+ const responseHash = params.responseHash || ethers.ZeroHash;
109
+ const tag = params.tag || '';
110
+ // Encode the validation response call
111
+ const data = await this.accountProvider?.encodeFunctionData({
112
+ abi: ValidationRegistryABI,
113
+ functionName: 'validationResponse',
114
+ args: [params.requestHash, params.response, responseUri, responseHash, tag],
115
+ });
116
+ return {
117
+ to: this.validationRegistryAddress,
118
+ data: data || '0x',
119
+ value: 0n,
120
+ };
121
+ }
122
+ }
123
+ //# sourceMappingURL=AIAgentValidationClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIAgentValidationClient.js","sourceRoot":"","sources":["../AIAgentValidationClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { AccountProvider } from '@agentic-trust/8004-sdk';
2
+ /**
3
+ * Org Identity Client - ENS utilities for organizations
4
+ * Uses AccountProvider (Ports & Adapters pattern) for chain I/O.
5
+ * Provides helpers to resolve an org's ENS name to its account address and URL text record.
6
+ */
7
+ export declare class OrgIdentityClient {
8
+ private accountProvider;
9
+ private ensRegistryAddress;
10
+ private publicClient;
11
+ constructor(accountProvider: AccountProvider, options?: {
12
+ ensRegistry?: `0x${string}`;
13
+ rpcUrl?: string;
14
+ });
15
+ /** Resolve the account address for an org ENS name via resolver.addr(namehash(name)). */
16
+ getOrgAccountByName(orgName: string): Promise<`0x${string}` | null>;
17
+ getOrgEoaByAccount(orgAccount: `0x${string}`): Promise<string | null>;
18
+ /** Resolve the URL text record for an org ENS name via resolver.text(namehash(name), 'url'). */
19
+ getOrgUrlByName(orgName: string): Promise<string | null>;
20
+ /** Reverse lookup: account address -> ENS name via resolver.name(reverseNode) */
21
+ getOrgNameByAccount(account: `0x${string}`): Promise<string | null>;
22
+ private getResolver;
23
+ private normalizeEnsName;
24
+ private namehash;
25
+ private isZeroAddress;
26
+ }
27
+ //# sourceMappingURL=OrgIdentityClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrgIdentityClient.d.ts","sourceRoot":"","sources":["../OrgIdentityClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,YAAY,CAA6B;gBAG/C,eAAe,EAAE,eAAe,EAChC,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAgB5D,yFAAyF;IACnF,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;IA2BnE,kBAAkB,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa3E,gGAAgG;IAC1F,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA0B9D,iFAAiF;IAC3E,mBAAmB,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAqC3D,WAAW;IAgBzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,169 @@
1
+ import { createPublicClient, http } from 'viem';
2
+ import { sepolia } from 'viem/chains';
3
+ /**
4
+ * Org Identity Client - ENS utilities for organizations
5
+ * Uses AccountProvider (Ports & Adapters pattern) for chain I/O.
6
+ * Provides helpers to resolve an org's ENS name to its account address and URL text record.
7
+ */
8
+ export class OrgIdentityClient {
9
+ accountProvider;
10
+ ensRegistryAddress;
11
+ publicClient = null;
12
+ constructor(accountProvider, options) {
13
+ this.accountProvider = accountProvider;
14
+ this.ensRegistryAddress = (options?.ensRegistry || '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e');
15
+ if (options?.rpcUrl) {
16
+ // @ts-ignore - viem version compatibility issue
17
+ this.publicClient = createPublicClient({ chain: sepolia, transport: http(options.rpcUrl) });
18
+ }
19
+ // Try to extract publicClient from AccountProvider if it's a ViemAccountProvider
20
+ const viemProvider = accountProvider;
21
+ if (viemProvider.publicClient) {
22
+ this.publicClient = viemProvider.publicClient;
23
+ }
24
+ }
25
+ /** Resolve the account address for an org ENS name via resolver.addr(namehash(name)). */
26
+ async getOrgAccountByName(orgName) {
27
+ const ensName = this.normalizeEnsName(orgName);
28
+ if (!ensName)
29
+ return null;
30
+ const node = this.namehash(ensName);
31
+ const resolver = await this.getResolver(node);
32
+ if (!resolver)
33
+ return null;
34
+ const RESOLVER_ABI = [
35
+ { name: 'addr', type: 'function', stateMutability: 'view', inputs: [{ name: 'node', type: 'bytes32' }], outputs: [{ name: '', type: 'address' }] },
36
+ ];
37
+ try {
38
+ const addr = await this.accountProvider.call({
39
+ to: resolver,
40
+ abi: RESOLVER_ABI,
41
+ functionName: 'addr',
42
+ args: [node],
43
+ });
44
+ if (addr && /^0x[a-fA-F0-9]{40}$/.test(addr) && !this.isZeroAddress(addr)) {
45
+ return addr;
46
+ }
47
+ }
48
+ catch { }
49
+ return null;
50
+ }
51
+ async getOrgEoaByAccount(orgAccount) {
52
+ if (this.publicClient) {
53
+ // @ts-ignore - viem version compatibility issue
54
+ const eoa = await this.publicClient.readContract({
55
+ address: orgAccount,
56
+ abi: [{ name: 'owner', type: 'function', stateMutability: 'view', inputs: [], outputs: [{ type: 'address' }] }],
57
+ functionName: 'owner',
58
+ });
59
+ return eoa;
60
+ }
61
+ return null;
62
+ }
63
+ /** Resolve the URL text record for an org ENS name via resolver.text(namehash(name), 'url'). */
64
+ async getOrgUrlByName(orgName) {
65
+ const ensName = this.normalizeEnsName(orgName);
66
+ if (!ensName)
67
+ return null;
68
+ const node = this.namehash(ensName);
69
+ const resolver = await this.getResolver(node);
70
+ if (!resolver)
71
+ return null;
72
+ const RESOLVER_ABI = [
73
+ { name: 'text', type: 'function', stateMutability: 'view', inputs: [{ name: 'node', type: 'bytes32' }, { name: 'key', type: 'string' }], outputs: [{ name: '', type: 'string' }] },
74
+ ];
75
+ try {
76
+ const value = await this.accountProvider.call({
77
+ to: resolver,
78
+ abi: RESOLVER_ABI,
79
+ functionName: 'text',
80
+ args: [node, 'url'],
81
+ });
82
+ const trimmed = (value || '').trim();
83
+ return trimmed.length > 0 ? trimmed : null;
84
+ }
85
+ catch { }
86
+ return null;
87
+ }
88
+ /** Reverse lookup: account address -> ENS name via resolver.name(reverseNode) */
89
+ async getOrgNameByAccount(account) {
90
+ const ENS_REGISTRY_ABI = [
91
+ { name: 'resolver', type: 'function', stateMutability: 'view', inputs: [{ name: 'node', type: 'bytes32' }], outputs: [{ name: '', type: 'address' }] },
92
+ ];
93
+ const RESOLVER_ABI = [
94
+ { name: 'name', type: 'function', stateMutability: 'view', inputs: [{ name: 'node', type: 'bytes32' }], outputs: [{ name: '', type: 'string' }] },
95
+ ];
96
+ const lower = account.toLowerCase();
97
+ const reverseNode = this.namehash(`${lower.slice(2)}.addr.reverse`);
98
+ let resolver = null;
99
+ try {
100
+ resolver = await this.accountProvider.call({
101
+ to: this.ensRegistryAddress,
102
+ abi: ENS_REGISTRY_ABI,
103
+ functionName: 'resolver',
104
+ args: [reverseNode],
105
+ });
106
+ }
107
+ catch { }
108
+ if (!resolver || this.isZeroAddress(resolver))
109
+ return null;
110
+ try {
111
+ const name = await this.accountProvider.call({
112
+ to: resolver,
113
+ abi: RESOLVER_ABI,
114
+ functionName: 'name',
115
+ args: [reverseNode],
116
+ });
117
+ const normalized = (name || '').trim().toLowerCase();
118
+ return normalized.length > 0 ? normalized : null;
119
+ }
120
+ catch {
121
+ return null;
122
+ }
123
+ }
124
+ // --- internals ---
125
+ async getResolver(node) {
126
+ const ENS_REGISTRY_ABI = [
127
+ { name: 'resolver', type: 'function', stateMutability: 'view', inputs: [{ name: 'node', type: 'bytes32' }], outputs: [{ name: '', type: 'address' }] },
128
+ ];
129
+ try {
130
+ const resolver = await this.accountProvider.call({
131
+ to: this.ensRegistryAddress,
132
+ abi: ENS_REGISTRY_ABI,
133
+ functionName: 'resolver',
134
+ args: [node],
135
+ });
136
+ if (resolver && !this.isZeroAddress(resolver))
137
+ return resolver;
138
+ }
139
+ catch { }
140
+ return null;
141
+ }
142
+ normalizeEnsName(name) {
143
+ const cleaned = (name || '').trim().toLowerCase().replace(/^ens:\s*/i, '');
144
+ if (!cleaned)
145
+ return '';
146
+ if (!/\./.test(cleaned))
147
+ return `${cleaned}.eth`;
148
+ return cleaned;
149
+ }
150
+ namehash(name) {
151
+ const { keccak256, toUtf8Bytes } = require('ethers');
152
+ let node = '0x' + '00'.repeat(32);
153
+ if (!name)
154
+ return node;
155
+ const labels = name.split('.');
156
+ for (let i = labels.length - 1; i >= 0; i--) {
157
+ const label = labels[i];
158
+ if (!label)
159
+ continue;
160
+ const labelSha = keccak256(toUtf8Bytes(label));
161
+ node = keccak256(Buffer.concat([Buffer.from(node.slice(2), 'hex'), Buffer.from(labelSha.slice(2), 'hex')]));
162
+ }
163
+ return node;
164
+ }
165
+ isZeroAddress(addr) {
166
+ return /^0x0{40}$/i.test(addr);
167
+ }
168
+ }
169
+ //# sourceMappingURL=OrgIdentityClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrgIdentityClient.js","sourceRoot":"","sources":["../OrgIdentityClient.ts"],"names":[],"mappings":"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"}