@zyfai/sdk 0.2.8 → 0.2.10

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/index.d.mts CHANGED
@@ -425,6 +425,12 @@ interface BestOpportunityResponse {
425
425
  };
426
426
  enabledChains?: number[];
427
427
  }
428
+ interface RegisterAgentResponse {
429
+ success: boolean;
430
+ txHash: string;
431
+ chainId: number;
432
+ smartWallet: string;
433
+ }
428
434
  interface PolicyData {
429
435
  policy: Address;
430
436
  initData: Hex;
@@ -1082,6 +1088,34 @@ declare class ZyfaiSDK {
1082
1088
  * ```
1083
1089
  */
1084
1090
  getBestOpportunity(walletAddress: Address, chainId: SupportedChainId): Promise<BestOpportunityResponse>;
1091
+ /**
1092
+ * Supported chain IDs for the Identity Registry (ERC-8004)
1093
+ */
1094
+ private static readonly IDENTITY_REGISTRY_CHAIN_IDS;
1095
+ /**
1096
+ * Check if a chain ID supports the Identity Registry
1097
+ */
1098
+ private isSupportedIdentityRegistryChain;
1099
+ /**
1100
+ * Register an agent on the Identity Registry (ERC-8004)
1101
+ *
1102
+ * Fetches a tokenUri from the Zyfai API for the given smart wallet,
1103
+ * then calls `register(tokenUri)` on the Identity Registry contract.
1104
+ *
1105
+ * @param smartWallet - The smart wallet address to register as an agent
1106
+ * @param chainId - Chain ID to register on (only Base 8453 and Arbitrum 42161 supported)
1107
+ * @returns Response with transaction hash and registration details
1108
+ *
1109
+ * @example
1110
+ * ```typescript
1111
+ * const sdk = new ZyfaiSDK({ apiKey: "your-api-key" });
1112
+ * await sdk.connectAccount(privateKey, 8453);
1113
+ *
1114
+ * const result = await sdk.registerAgentOnIdentityRegistry("0xSmartWallet", 8453);
1115
+ * console.log("Tx hash:", result.txHash);
1116
+ * ```
1117
+ */
1118
+ registerAgentOnIdentityRegistry(smartWallet: string, chainId: SupportedChainId): Promise<RegisterAgentResponse>;
1085
1119
  }
1086
1120
 
1087
- export { type APYPerStrategy, type APYPerStrategyResponse, type ActionData, type ActiveWallet, type ActiveWalletsResponse, type AddWalletToSdkResponse, type Address, type BestOpportunityDetails, type BestOpportunityResponse, type ChainConfig, type ChainPortfolio, DEFAULT_TOKEN_ADDRESSES, type DailyApyEntry, type DailyApyHistoryResponse, type DailyEarning, type DailyEarningsResponse, type DebankPortfolioResponse, type DeploySafeResponse, type DepositResponse, type ERC7739Context, type ERC7739Data, type FirstTopupResponse, type Hex, type HistoryEntry, type HistoryPosition, type HistoryResponse, type OnchainEarnings, type OnchainEarningsResponse, type OpportunitiesResponse, type Opportunity, type OpportunityPosition, type PolicyData, type Pool, type PortfolioToken, type Position, type PositionSlot, type PositionsResponse, type Protocol, type ProtocolsResponse, type RebalanceFrequencyResponse, type SDKConfig, type SdkKeyTVLResponse, type Session, type SessionKeyResponse, type SmartWalletByEOAResponse, type SmartWalletResponse, type Strategy, type SupportedChainId, type TVLResponse, type UserDetails, type UserDetailsResponse, type VolumeResponse, type WalletTVL, type WithdrawResponse, ZyfaiSDK, getChainConfig, getDefaultTokenAddress, getSupportedChainIds, isSupportedChain };
1121
+ export { type APYPerStrategy, type APYPerStrategyResponse, type ActionData, type ActiveWallet, type ActiveWalletsResponse, type AddWalletToSdkResponse, type Address, type BestOpportunityDetails, type BestOpportunityResponse, type ChainConfig, type ChainPortfolio, DEFAULT_TOKEN_ADDRESSES, type DailyApyEntry, type DailyApyHistoryResponse, type DailyEarning, type DailyEarningsResponse, type DebankPortfolioResponse, type DeploySafeResponse, type DepositResponse, type ERC7739Context, type ERC7739Data, type FirstTopupResponse, type Hex, type HistoryEntry, type HistoryPosition, type HistoryResponse, type OnchainEarnings, type OnchainEarningsResponse, type OpportunitiesResponse, type Opportunity, type OpportunityPosition, type PolicyData, type Pool, type PortfolioToken, type Position, type PositionSlot, type PositionsResponse, type Protocol, type ProtocolsResponse, type RebalanceFrequencyResponse, type RegisterAgentResponse, type SDKConfig, type SdkKeyTVLResponse, type Session, type SessionKeyResponse, type SmartWalletByEOAResponse, type SmartWalletResponse, type Strategy, type SupportedChainId, type TVLResponse, type UserDetails, type UserDetailsResponse, type VolumeResponse, type WalletTVL, type WithdrawResponse, ZyfaiSDK, getChainConfig, getDefaultTokenAddress, getSupportedChainIds, isSupportedChain };
package/dist/index.d.ts CHANGED
@@ -425,6 +425,12 @@ interface BestOpportunityResponse {
425
425
  };
426
426
  enabledChains?: number[];
427
427
  }
428
+ interface RegisterAgentResponse {
429
+ success: boolean;
430
+ txHash: string;
431
+ chainId: number;
432
+ smartWallet: string;
433
+ }
428
434
  interface PolicyData {
429
435
  policy: Address;
430
436
  initData: Hex;
@@ -1082,6 +1088,34 @@ declare class ZyfaiSDK {
1082
1088
  * ```
1083
1089
  */
1084
1090
  getBestOpportunity(walletAddress: Address, chainId: SupportedChainId): Promise<BestOpportunityResponse>;
1091
+ /**
1092
+ * Supported chain IDs for the Identity Registry (ERC-8004)
1093
+ */
1094
+ private static readonly IDENTITY_REGISTRY_CHAIN_IDS;
1095
+ /**
1096
+ * Check if a chain ID supports the Identity Registry
1097
+ */
1098
+ private isSupportedIdentityRegistryChain;
1099
+ /**
1100
+ * Register an agent on the Identity Registry (ERC-8004)
1101
+ *
1102
+ * Fetches a tokenUri from the Zyfai API for the given smart wallet,
1103
+ * then calls `register(tokenUri)` on the Identity Registry contract.
1104
+ *
1105
+ * @param smartWallet - The smart wallet address to register as an agent
1106
+ * @param chainId - Chain ID to register on (only Base 8453 and Arbitrum 42161 supported)
1107
+ * @returns Response with transaction hash and registration details
1108
+ *
1109
+ * @example
1110
+ * ```typescript
1111
+ * const sdk = new ZyfaiSDK({ apiKey: "your-api-key" });
1112
+ * await sdk.connectAccount(privateKey, 8453);
1113
+ *
1114
+ * const result = await sdk.registerAgentOnIdentityRegistry("0xSmartWallet", 8453);
1115
+ * console.log("Tx hash:", result.txHash);
1116
+ * ```
1117
+ */
1118
+ registerAgentOnIdentityRegistry(smartWallet: string, chainId: SupportedChainId): Promise<RegisterAgentResponse>;
1085
1119
  }
1086
1120
 
1087
- export { type APYPerStrategy, type APYPerStrategyResponse, type ActionData, type ActiveWallet, type ActiveWalletsResponse, type AddWalletToSdkResponse, type Address, type BestOpportunityDetails, type BestOpportunityResponse, type ChainConfig, type ChainPortfolio, DEFAULT_TOKEN_ADDRESSES, type DailyApyEntry, type DailyApyHistoryResponse, type DailyEarning, type DailyEarningsResponse, type DebankPortfolioResponse, type DeploySafeResponse, type DepositResponse, type ERC7739Context, type ERC7739Data, type FirstTopupResponse, type Hex, type HistoryEntry, type HistoryPosition, type HistoryResponse, type OnchainEarnings, type OnchainEarningsResponse, type OpportunitiesResponse, type Opportunity, type OpportunityPosition, type PolicyData, type Pool, type PortfolioToken, type Position, type PositionSlot, type PositionsResponse, type Protocol, type ProtocolsResponse, type RebalanceFrequencyResponse, type SDKConfig, type SdkKeyTVLResponse, type Session, type SessionKeyResponse, type SmartWalletByEOAResponse, type SmartWalletResponse, type Strategy, type SupportedChainId, type TVLResponse, type UserDetails, type UserDetailsResponse, type VolumeResponse, type WalletTVL, type WithdrawResponse, ZyfaiSDK, getChainConfig, getDefaultTokenAddress, getSupportedChainIds, isSupportedChain };
1121
+ export { type APYPerStrategy, type APYPerStrategyResponse, type ActionData, type ActiveWallet, type ActiveWalletsResponse, type AddWalletToSdkResponse, type Address, type BestOpportunityDetails, type BestOpportunityResponse, type ChainConfig, type ChainPortfolio, DEFAULT_TOKEN_ADDRESSES, type DailyApyEntry, type DailyApyHistoryResponse, type DailyEarning, type DailyEarningsResponse, type DebankPortfolioResponse, type DeploySafeResponse, type DepositResponse, type ERC7739Context, type ERC7739Data, type FirstTopupResponse, type Hex, type HistoryEntry, type HistoryPosition, type HistoryResponse, type OnchainEarnings, type OnchainEarningsResponse, type OpportunitiesResponse, type Opportunity, type OpportunityPosition, type PolicyData, type Pool, type PortfolioToken, type Position, type PositionSlot, type PositionsResponse, type Protocol, type ProtocolsResponse, type RebalanceFrequencyResponse, type RegisterAgentResponse, type SDKConfig, type SdkKeyTVLResponse, type Session, type SessionKeyResponse, type SmartWalletByEOAResponse, type SmartWalletResponse, type Strategy, type SupportedChainId, type TVLResponse, type UserDetails, type UserDetailsResponse, type VolumeResponse, type WalletTVL, type WithdrawResponse, ZyfaiSDK, getChainConfig, getDefaultTokenAddress, getSupportedChainIds, isSupportedChain };
package/dist/index.js CHANGED
@@ -76,7 +76,9 @@ var ENDPOINTS = {
76
76
  SDK_ALLOWED_WALLETS: "/data/sdk-allowed-wallets",
77
77
  SDK_TVL: "/data/sdk-tvl",
78
78
  // Best Opportunity
79
- BEST_OPPORTUNITY: (walletAddress, chainId) => `/data/best-opportunity?walletAddress=${walletAddress}&chainId=${chainId}`
79
+ BEST_OPPORTUNITY: (walletAddress, chainId) => `/data/best-opportunity?walletAddress=${walletAddress}&chainId=${chainId}`,
80
+ // Agent Identity Registry
81
+ AGENT_TOKEN_URI: "/users/me/agent-token-uri"
80
82
  };
81
83
  var DATA_ENDPOINTS = {
82
84
  // User Initialization
@@ -288,6 +290,7 @@ var HttpClient = class {
288
290
  };
289
291
 
290
292
  // src/config/abis.ts
293
+ var import_viem = require("viem");
291
294
  var ERC20_ABI = [
292
295
  {
293
296
  name: "transfer",
@@ -355,16 +358,22 @@ var ERC20_ABI = [
355
358
  outputs: [{ name: "", type: "uint256" }]
356
359
  }
357
360
  ];
361
+ var IDENTITY_REGISTRY_ABI = (0, import_viem.parseAbi)([
362
+ "function register() external returns (uint256 agentId)",
363
+ "function register(string tokenUri) external returns (uint256 agentId)",
364
+ "function register(string tokenUri, (string key, bytes value)[] metadata) external returns (uint256 agentId)"
365
+ ]);
366
+ var IDENTITY_REGISTRY_ADDRESS = "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432";
358
367
 
359
368
  // src/core/ZyfaiSDK.ts
360
369
  var import_accounts2 = require("viem/accounts");
361
- var import_viem4 = require("viem");
370
+ var import_viem5 = require("viem");
362
371
 
363
372
  // src/config/chains.ts
364
- var import_viem = require("viem");
365
- var import_chains = require("viem/chains");
366
373
  var import_viem2 = require("viem");
367
- var plasma = (0, import_viem2.defineChain)({
374
+ var import_chains = require("viem/chains");
375
+ var import_viem3 = require("viem");
376
+ var plasma = (0, import_viem3.defineChain)({
368
377
  id: 9745,
369
378
  name: "Plasma",
370
379
  nativeCurrency: {
@@ -417,9 +426,9 @@ var getChainConfig = (chainId, rpcUrls) => {
417
426
  throw new Error(`Unsupported chain ID: ${chainId}`);
418
427
  }
419
428
  const rpcUrl = rpcUrls && rpcUrls[chainId] || DEFAULT_RPC_URLS[chainId];
420
- const publicClient = (0, import_viem.createPublicClient)({
429
+ const publicClient = (0, import_viem2.createPublicClient)({
421
430
  chain,
422
- transport: (0, import_viem.http)(rpcUrl)
431
+ transport: (0, import_viem2.http)(rpcUrl)
423
432
  });
424
433
  return {
425
434
  chain,
@@ -437,7 +446,7 @@ var getSupportedChainIds = () => {
437
446
  // src/utils/safe-account.ts
438
447
  var import_module_sdk = require("@rhinestone/module-sdk");
439
448
  var import_accounts = require("permissionless/accounts");
440
- var import_viem3 = require("viem");
449
+ var import_viem4 = require("viem");
441
450
  var import_account_abstraction = require("viem/account-abstraction");
442
451
  var SAFE_7579_ADDRESS = "0x7579EE8307284F293B1927136486880611F20002";
443
452
  var ERC7579_LAUNCHPAD_ADDRESS = "0x7579011aB74c46090561ea277Ba79D510c6C00ff";
@@ -447,12 +456,12 @@ var getSafeAccount = async (config) => {
447
456
  if (!safeOwnerAddress) {
448
457
  throw new Error("Safe owner address is required");
449
458
  }
450
- const formattedOwnerAddress = (0, import_viem3.getAddress)(safeOwnerAddress);
459
+ const formattedOwnerAddress = (0, import_viem4.getAddress)(safeOwnerAddress);
451
460
  const ownableValidator = (0, import_module_sdk.getOwnableValidator)({
452
461
  owners: [formattedOwnerAddress],
453
462
  threshold: 1
454
463
  });
455
- const saltHex = (0, import_viem3.fromHex)((0, import_viem3.toHex)(ACCOUNT_SALT), "bigint");
464
+ const saltHex = (0, import_viem4.fromHex)((0, import_viem4.toHex)(ACCOUNT_SALT), "bigint");
456
465
  const tempOwner = {
457
466
  address: formattedOwnerAddress,
458
467
  type: "json-rpc"
@@ -663,7 +672,7 @@ function convertStrategiesToPublic(array) {
663
672
 
664
673
  // src/core/ZyfaiSDK.ts
665
674
  var import_siwe = require("siwe");
666
- var ZyfaiSDK = class {
675
+ var _ZyfaiSDK = class _ZyfaiSDK {
667
676
  constructor(config) {
668
677
  this.signer = null;
669
678
  this.walletClient = null;
@@ -692,7 +701,7 @@ var ZyfaiSDK = class {
692
701
  return;
693
702
  }
694
703
  const walletClient = this.getWalletClient();
695
- const userAddress = (0, import_viem4.getAddress)(walletClient.account.address);
704
+ const userAddress = (0, import_viem5.getAddress)(walletClient.account.address);
696
705
  const chainId = this.currentChainId || walletClient.chain?.id || 8453;
697
706
  const challengeResponse = await this.httpClient.post(ENDPOINTS.AUTH_CHALLENGE, {});
698
707
  let uri;
@@ -840,7 +849,10 @@ var ZyfaiSDK = class {
840
849
  * console.log('Splitting enabled:', result.success);
841
850
  * ```
842
851
  */
843
- async enableSplitting(minSplits = 3) {
852
+ async enableSplitting(minSplits = 1) {
853
+ if (minSplits > 4) {
854
+ throw new Error("minSplits cannot exceed 4");
855
+ }
844
856
  try {
845
857
  const response = await this.updateUserProfile({
846
858
  splitting: true,
@@ -968,10 +980,10 @@ var ZyfaiSDK = class {
968
980
  this.walletClient.chain?.id || 8453,
969
981
  this.rpcUrls
970
982
  );
971
- this.walletClient = (0, import_viem4.createWalletClient)({
983
+ this.walletClient = (0, import_viem5.createWalletClient)({
972
984
  account: newAddress,
973
985
  chain: chainConfig.chain,
974
- transport: (0, import_viem4.custom)(this.currentProvider)
986
+ transport: (0, import_viem5.custom)(this.currentProvider)
975
987
  });
976
988
  this.currentChainId = this.walletClient.chain?.id || null;
977
989
  try {
@@ -1023,10 +1035,10 @@ var ZyfaiSDK = class {
1023
1035
  }
1024
1036
  this.signer = (0, import_accounts2.privateKeyToAccount)(privateKey);
1025
1037
  this.currentChainId = chainId;
1026
- this.walletClient = (0, import_viem4.createWalletClient)({
1038
+ this.walletClient = (0, import_viem5.createWalletClient)({
1027
1039
  account: this.signer,
1028
1040
  chain: chainConfig.chain,
1029
- transport: (0, import_viem4.http)(chainConfig.rpcUrl)
1041
+ transport: (0, import_viem5.http)(chainConfig.rpcUrl)
1030
1042
  });
1031
1043
  connectedAddress = this.signer.address;
1032
1044
  this.currentProvider = null;
@@ -1044,10 +1056,10 @@ var ZyfaiSDK = class {
1044
1056
  if (!accounts || accounts.length === 0) {
1045
1057
  throw new Error("No accounts found in wallet provider");
1046
1058
  }
1047
- this.walletClient = (0, import_viem4.createWalletClient)({
1059
+ this.walletClient = (0, import_viem5.createWalletClient)({
1048
1060
  account: accounts[0],
1049
1061
  chain: chainConfig.chain,
1050
- transport: (0, import_viem4.custom)(provider)
1062
+ transport: (0, import_viem5.custom)(provider)
1051
1063
  });
1052
1064
  connectedAddress = accounts[0];
1053
1065
  this.currentProvider = provider;
@@ -1056,7 +1068,7 @@ var ZyfaiSDK = class {
1056
1068
  provider.on("accountsChanged", this.handleAccountsChanged.bind(this));
1057
1069
  }
1058
1070
  } else if (provider.account && provider.transport) {
1059
- this.walletClient = (0, import_viem4.createWalletClient)({
1071
+ this.walletClient = (0, import_viem5.createWalletClient)({
1060
1072
  account: provider.account,
1061
1073
  chain: chainConfig.chain,
1062
1074
  transport: provider.transport
@@ -1109,10 +1121,10 @@ var ZyfaiSDK = class {
1109
1121
  targetChainId,
1110
1122
  this.rpcUrls
1111
1123
  );
1112
- return (0, import_viem4.createWalletClient)({
1124
+ return (0, import_viem5.createWalletClient)({
1113
1125
  account: this.signer,
1114
1126
  chain: targetChainConfig.chain,
1115
- transport: (0, import_viem4.http)(targetChainConfig.rpcUrl)
1127
+ transport: (0, import_viem5.http)(targetChainConfig.rpcUrl)
1116
1128
  });
1117
1129
  } else {
1118
1130
  if (!this.walletClient) {
@@ -1737,7 +1749,9 @@ var ZyfaiSDK = class {
1737
1749
  omniAccount: convertedResponse.omniAccount,
1738
1750
  crosschainStrategy: convertedResponse.crosschainStrategy,
1739
1751
  agentName: convertedResponse.agentName,
1740
- customization: convertedResponse.customization
1752
+ customization: convertedResponse.customization,
1753
+ splitting: convertedResponse.splitting,
1754
+ minSplits: convertedResponse.minSplits
1741
1755
  }
1742
1756
  };
1743
1757
  } catch (error) {
@@ -2419,7 +2433,88 @@ var ZyfaiSDK = class {
2419
2433
  );
2420
2434
  }
2421
2435
  }
2436
+ /**
2437
+ * Check if a chain ID supports the Identity Registry
2438
+ */
2439
+ isSupportedIdentityRegistryChain(chainId) {
2440
+ return _ZyfaiSDK.IDENTITY_REGISTRY_CHAIN_IDS.includes(chainId);
2441
+ }
2442
+ /**
2443
+ * Register an agent on the Identity Registry (ERC-8004)
2444
+ *
2445
+ * Fetches a tokenUri from the Zyfai API for the given smart wallet,
2446
+ * then calls `register(tokenUri)` on the Identity Registry contract.
2447
+ *
2448
+ * @param smartWallet - The smart wallet address to register as an agent
2449
+ * @param chainId - Chain ID to register on (only Base 8453 and Arbitrum 42161 supported)
2450
+ * @returns Response with transaction hash and registration details
2451
+ *
2452
+ * @example
2453
+ * ```typescript
2454
+ * const sdk = new ZyfaiSDK({ apiKey: "your-api-key" });
2455
+ * await sdk.connectAccount(privateKey, 8453);
2456
+ *
2457
+ * const result = await sdk.registerAgentOnIdentityRegistry("0xSmartWallet", 8453);
2458
+ * console.log("Tx hash:", result.txHash);
2459
+ * ```
2460
+ */
2461
+ async registerAgentOnIdentityRegistry(smartWallet, chainId) {
2462
+ if (!smartWallet) {
2463
+ throw new Error("Smart wallet address is required");
2464
+ }
2465
+ if (!this.isSupportedIdentityRegistryChain(chainId)) {
2466
+ throw new Error(
2467
+ `Chain ${chainId} is not supported for Identity Registry. Supported chains: Base (8453), Arbitrum (42161)`
2468
+ );
2469
+ }
2470
+ try {
2471
+ const tokenUriResponse = await this.httpClient.post(
2472
+ ENDPOINTS.AGENT_TOKEN_URI,
2473
+ { smartWallet }
2474
+ );
2475
+ if (!tokenUriResponse.tokenUri) {
2476
+ throw new Error("API did not return a tokenUri");
2477
+ }
2478
+ const callData = (0, import_viem5.encodeFunctionData)({
2479
+ abi: IDENTITY_REGISTRY_ABI,
2480
+ functionName: "register",
2481
+ args: [tokenUriResponse.tokenUri]
2482
+ });
2483
+ const walletClient = this.getWalletClient(chainId);
2484
+ const chainConfig = getChainConfig(chainId, this.rpcUrls);
2485
+ const txHash = await walletClient.sendTransaction({
2486
+ to: IDENTITY_REGISTRY_ADDRESS,
2487
+ data: callData,
2488
+ chain: chainConfig.chain,
2489
+ account: walletClient.account
2490
+ });
2491
+ const receipt = await chainConfig.publicClient.waitForTransactionReceipt({
2492
+ hash: txHash
2493
+ });
2494
+ if (receipt.status !== "success") {
2495
+ throw new Error("Identity Registry registration transaction failed");
2496
+ }
2497
+ return {
2498
+ success: true,
2499
+ txHash,
2500
+ chainId,
2501
+ smartWallet
2502
+ };
2503
+ } catch (error) {
2504
+ throw new Error(
2505
+ `Failed to register agent on Identity Registry: ${error.message}`
2506
+ );
2507
+ }
2508
+ }
2422
2509
  };
2510
+ // ============================================================================
2511
+ // Agent Identity Registry
2512
+ // ============================================================================
2513
+ /**
2514
+ * Supported chain IDs for the Identity Registry (ERC-8004)
2515
+ */
2516
+ _ZyfaiSDK.IDENTITY_REGISTRY_CHAIN_IDS = [8453, 42161];
2517
+ var ZyfaiSDK = _ZyfaiSDK;
2423
2518
  // Annotate the CommonJS export names for ESM import in node:
2424
2519
  0 && (module.exports = {
2425
2520
  DEFAULT_TOKEN_ADDRESSES,
package/dist/index.mjs CHANGED
@@ -35,7 +35,9 @@ var ENDPOINTS = {
35
35
  SDK_ALLOWED_WALLETS: "/data/sdk-allowed-wallets",
36
36
  SDK_TVL: "/data/sdk-tvl",
37
37
  // Best Opportunity
38
- BEST_OPPORTUNITY: (walletAddress, chainId) => `/data/best-opportunity?walletAddress=${walletAddress}&chainId=${chainId}`
38
+ BEST_OPPORTUNITY: (walletAddress, chainId) => `/data/best-opportunity?walletAddress=${walletAddress}&chainId=${chainId}`,
39
+ // Agent Identity Registry
40
+ AGENT_TOKEN_URI: "/users/me/agent-token-uri"
39
41
  };
40
42
  var DATA_ENDPOINTS = {
41
43
  // User Initialization
@@ -247,6 +249,7 @@ var HttpClient = class {
247
249
  };
248
250
 
249
251
  // src/config/abis.ts
252
+ import { parseAbi } from "viem";
250
253
  var ERC20_ABI = [
251
254
  {
252
255
  name: "transfer",
@@ -314,6 +317,12 @@ var ERC20_ABI = [
314
317
  outputs: [{ name: "", type: "uint256" }]
315
318
  }
316
319
  ];
320
+ var IDENTITY_REGISTRY_ABI = parseAbi([
321
+ "function register() external returns (uint256 agentId)",
322
+ "function register(string tokenUri) external returns (uint256 agentId)",
323
+ "function register(string tokenUri, (string key, bytes value)[] metadata) external returns (uint256 agentId)"
324
+ ]);
325
+ var IDENTITY_REGISTRY_ADDRESS = "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432";
317
326
 
318
327
  // src/core/ZyfaiSDK.ts
319
328
  import { privateKeyToAccount } from "viem/accounts";
@@ -321,7 +330,8 @@ import {
321
330
  createWalletClient,
322
331
  custom,
323
332
  http as http2,
324
- getAddress as getAddress2
333
+ getAddress as getAddress2,
334
+ encodeFunctionData
325
335
  } from "viem";
326
336
 
327
337
  // src/config/chains.ts
@@ -640,7 +650,7 @@ function convertStrategiesToPublic(array) {
640
650
 
641
651
  // src/core/ZyfaiSDK.ts
642
652
  import { SiweMessage } from "siwe";
643
- var ZyfaiSDK = class {
653
+ var _ZyfaiSDK = class _ZyfaiSDK {
644
654
  constructor(config) {
645
655
  this.signer = null;
646
656
  this.walletClient = null;
@@ -817,7 +827,10 @@ var ZyfaiSDK = class {
817
827
  * console.log('Splitting enabled:', result.success);
818
828
  * ```
819
829
  */
820
- async enableSplitting(minSplits = 3) {
830
+ async enableSplitting(minSplits = 1) {
831
+ if (minSplits > 4) {
832
+ throw new Error("minSplits cannot exceed 4");
833
+ }
821
834
  try {
822
835
  const response = await this.updateUserProfile({
823
836
  splitting: true,
@@ -1714,7 +1727,9 @@ var ZyfaiSDK = class {
1714
1727
  omniAccount: convertedResponse.omniAccount,
1715
1728
  crosschainStrategy: convertedResponse.crosschainStrategy,
1716
1729
  agentName: convertedResponse.agentName,
1717
- customization: convertedResponse.customization
1730
+ customization: convertedResponse.customization,
1731
+ splitting: convertedResponse.splitting,
1732
+ minSplits: convertedResponse.minSplits
1718
1733
  }
1719
1734
  };
1720
1735
  } catch (error) {
@@ -2396,7 +2411,88 @@ var ZyfaiSDK = class {
2396
2411
  );
2397
2412
  }
2398
2413
  }
2414
+ /**
2415
+ * Check if a chain ID supports the Identity Registry
2416
+ */
2417
+ isSupportedIdentityRegistryChain(chainId) {
2418
+ return _ZyfaiSDK.IDENTITY_REGISTRY_CHAIN_IDS.includes(chainId);
2419
+ }
2420
+ /**
2421
+ * Register an agent on the Identity Registry (ERC-8004)
2422
+ *
2423
+ * Fetches a tokenUri from the Zyfai API for the given smart wallet,
2424
+ * then calls `register(tokenUri)` on the Identity Registry contract.
2425
+ *
2426
+ * @param smartWallet - The smart wallet address to register as an agent
2427
+ * @param chainId - Chain ID to register on (only Base 8453 and Arbitrum 42161 supported)
2428
+ * @returns Response with transaction hash and registration details
2429
+ *
2430
+ * @example
2431
+ * ```typescript
2432
+ * const sdk = new ZyfaiSDK({ apiKey: "your-api-key" });
2433
+ * await sdk.connectAccount(privateKey, 8453);
2434
+ *
2435
+ * const result = await sdk.registerAgentOnIdentityRegistry("0xSmartWallet", 8453);
2436
+ * console.log("Tx hash:", result.txHash);
2437
+ * ```
2438
+ */
2439
+ async registerAgentOnIdentityRegistry(smartWallet, chainId) {
2440
+ if (!smartWallet) {
2441
+ throw new Error("Smart wallet address is required");
2442
+ }
2443
+ if (!this.isSupportedIdentityRegistryChain(chainId)) {
2444
+ throw new Error(
2445
+ `Chain ${chainId} is not supported for Identity Registry. Supported chains: Base (8453), Arbitrum (42161)`
2446
+ );
2447
+ }
2448
+ try {
2449
+ const tokenUriResponse = await this.httpClient.post(
2450
+ ENDPOINTS.AGENT_TOKEN_URI,
2451
+ { smartWallet }
2452
+ );
2453
+ if (!tokenUriResponse.tokenUri) {
2454
+ throw new Error("API did not return a tokenUri");
2455
+ }
2456
+ const callData = encodeFunctionData({
2457
+ abi: IDENTITY_REGISTRY_ABI,
2458
+ functionName: "register",
2459
+ args: [tokenUriResponse.tokenUri]
2460
+ });
2461
+ const walletClient = this.getWalletClient(chainId);
2462
+ const chainConfig = getChainConfig(chainId, this.rpcUrls);
2463
+ const txHash = await walletClient.sendTransaction({
2464
+ to: IDENTITY_REGISTRY_ADDRESS,
2465
+ data: callData,
2466
+ chain: chainConfig.chain,
2467
+ account: walletClient.account
2468
+ });
2469
+ const receipt = await chainConfig.publicClient.waitForTransactionReceipt({
2470
+ hash: txHash
2471
+ });
2472
+ if (receipt.status !== "success") {
2473
+ throw new Error("Identity Registry registration transaction failed");
2474
+ }
2475
+ return {
2476
+ success: true,
2477
+ txHash,
2478
+ chainId,
2479
+ smartWallet
2480
+ };
2481
+ } catch (error) {
2482
+ throw new Error(
2483
+ `Failed to register agent on Identity Registry: ${error.message}`
2484
+ );
2485
+ }
2486
+ }
2399
2487
  };
2488
+ // ============================================================================
2489
+ // Agent Identity Registry
2490
+ // ============================================================================
2491
+ /**
2492
+ * Supported chain IDs for the Identity Registry (ERC-8004)
2493
+ */
2494
+ _ZyfaiSDK.IDENTITY_REGISTRY_CHAIN_IDS = [8453, 42161];
2495
+ var ZyfaiSDK = _ZyfaiSDK;
2400
2496
  export {
2401
2497
  DEFAULT_TOKEN_ADDRESSES,
2402
2498
  ZyfaiSDK,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zyfai/sdk",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "TypeScript SDK for Zyfai Yield Optimization Engine - Deploy Safe smart wallets, manage session keys, and interact with DeFi protocols",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",