@owney/sdk 0.7.25-beta.0 → 0.7.25-beta.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/README.md CHANGED
@@ -14,12 +14,15 @@ npm install @owney/sdk
14
14
  import { OwneySDK } from "@owney/sdk";
15
15
 
16
16
  // Create the SDK instance
17
- const sdk = new OwneySDK({ apiKey: "your-owney-api-key" });
17
+ const sdk = new OwneySDK({
18
+ apiKey: "your-owney-api-key",
19
+ routingApiBaseUrl: "https://your-routing-api.example",
20
+ });
18
21
 
19
22
  // Connect with an EIP-1193 wallet provider
20
23
  await sdk.connect(provider);
21
24
 
22
- // Activate agents on Base (fetches agent keys on first call)
25
+ // Activate agents on Base (creates and initializes provider wallets as needed)
23
26
  await sdk.activateAgent(8453);
24
27
 
25
28
  // Get balances across all agents
@@ -32,36 +35,79 @@ const balances = await sdk.getBalances();
32
35
 
33
36
  Create a new SDK instance.
34
37
 
35
- | Param | Type | Description |
36
- | --------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------- |
37
- | `config.apiKey` | `string` | Your Owney API key, used to authenticate with the routing API and fetch agent-specific keys |
38
- | `config.zyfaiRpcUrls` | `{ 8453?: string; 42161?: string }` (optional) | Per-chain RPC URL overrides used by Zyfai SDK network calls |
38
+ | Param | Type | Description |
39
+ | --------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
40
+ | `config.apiKey` | `string` | Your Owney API key, used to authenticate with the routing API and fetch agent-specific keys |
41
+ | `config.routingApiBaseUrl` | `string` (optional) | Routing API URL; required for proxy reads unless the SDK build has `OWNEY_ROUTING_API_BASE_URL` or all `rpcUrls` are set |
42
+ | `config.rpcUrls` | `{ 1?: string; 8453?: string; 42161?: string }` (optional) | Per-chain RPC overrides used by agent reads and transaction-receipt polling |
43
+ | `config.zyfaiRpcUrls` | Same as `rpcUrls` (deprecated) | Legacy Zyfai-only override; use `rpcUrls` for all application-owned reads |
39
44
 
40
45
  ```typescript
41
46
  import { OwneySDK } from "@owney/sdk";
42
47
 
43
- const sdk = new OwneySDK({ apiKey: "your-owney-api-key" });
48
+ const sdk = new OwneySDK({
49
+ apiKey: "your-owney-api-key",
50
+ routingApiBaseUrl: "https://your-routing-api.example",
51
+ });
44
52
  ```
45
53
 
46
- #### Custom Zyfai RPC URLs
54
+ #### Dedicated RPC URLs
55
+
56
+ Use `rpcUrls` for application-owned chain reads and transaction-receipt
57
+ polling. The connected wallet provider remains responsible for accounts, chain
58
+ switching, signatures, and transaction submission.
59
+
60
+ `rpcUrls` is optional. The SDK resolves an endpoint independently for each
61
+ supported chain using this precedence:
62
+
63
+ 1. The caller-provided `rpcUrls[chainId]`, when present and non-empty.
64
+ 2. The Owney routing API read-only RPC proxy for that chain.
65
+
66
+ The Alchemy credential stays on the routing API server. The SDK sends its
67
+ existing organization key to the proxy for per-organization rate limiting.
68
+ The proxy base URL must be provided through `routingApiBaseUrl` or the SDK
69
+ build's `OWNEY_ROUTING_API_BASE_URL`; there is no hardcoded production fallback.
70
+
71
+ ```typescript
72
+ // All supported chains use the Owney routing API proxy.
73
+ const sdk = new OwneySDK({
74
+ apiKey: "your-owney-api-key",
75
+ routingApiBaseUrl: "https://your-routing-api.example",
76
+ });
77
+ ```
47
78
 
48
- Use `zyfaiRpcUrls` to override Zyfai SDK RPC endpoints (for example, to avoid public endpoint rate limits).
79
+ Overrides can be complete or partial:
49
80
 
50
81
  ```typescript
51
82
  const sdk = new OwneySDK({
52
83
  apiKey: "your-owney-api-key",
53
- zyfaiRpcUrls: {
54
- 8453: "https://base-mainnet.g.alchemy.com/v2/<key>",
55
- 42161: "https://arb-mainnet.g.alchemy.com/v2/<key>",
84
+ routingApiBaseUrl: "https://your-routing-api.example",
85
+ rpcUrls: {
86
+ // Ethereum and Arbitrum continue using the routing API proxy.
87
+ 8453: "https://your-own-rpc.example/rpc",
56
88
  },
57
89
  });
58
90
  ```
59
91
 
92
+ The resolved URLs are shared across Owney-owned reads and agent integrations:
93
+
94
+ - Wagmi or application transports remain the consuming application's
95
+ responsibility; Owney mini-apps configure them from the same URL map.
96
+ - Zyfai receives the resolved Owney URL map, so its internal provider defaults
97
+ do not determine routing for Owney SDK consumers.
98
+ - Yieldseeker uses the resolved Base URL for transaction-receipt polling.
99
+ - Balance, allowance, module-state, and receipt reads use the resolved RPC.
100
+ - Account access, chain switching, signatures, approvals, and transaction
101
+ submission continue through the connected wallet provider.
102
+
60
103
  Notes:
61
104
 
62
- - These overrides are used by Zyfai SDK flows only.
63
- - If omitted, Zyfai SDK uses its default RPC endpoints.
64
- - Other app-level RPC clients (for example, direct viem calls outside Zyfai) are configured separately.
105
+ - Owney mini-apps pass the same routing API proxy URLs to Wagmi and the SDK.
106
+ - SDK consumers may override endpoints if they operate their own RPC provider.
107
+ - Partial maps override only the supplied chains; missing chains use Owney's
108
+ routing API proxy.
109
+ - HTTP reads use bounded retries and honor provider `Retry-After` responses.
110
+ - `zyfaiRpcUrls` remains available for compatibility but applies only to Zyfai.
65
111
 
66
112
  ### `connect(provider)`
67
113
 
@@ -108,7 +154,7 @@ if (chainId) {
108
154
 
109
155
  ### `activateAgent(chainId, agentId?)`
110
156
 
111
- Activate the user's smart wallet for the specified agents, or all chain-compatible agents if omitted. Smart wallets are pre-deployed by the underlying providers, so activation only performs authentication and profile syncing — no deploy or session-key signatures. Saves the chainId for use by all subsequent SDK calls.
157
+ Activate the user's smart wallet for the specified agents, or all chain-compatible agents if omitted. Activation performs each provider's required setup before deposits are allowed. For Yieldseeker, this creates the user and agent when needed and calls the agent `/deploy` endpoint before any funding transfer. Saves the chainId for use by all subsequent SDK calls.
112
158
 
113
159
  | Param | Type | Description |
114
160
  | --------- | ---------------------- | ----------------------------------------------------------------------------- |
@@ -125,7 +171,7 @@ await sdk.activateAgent(42161);
125
171
 
126
172
  ### `deposit(options)`
127
173
 
128
- Deposit funds into a specific agent, or split equally across all agents if `agentId` is omitted. Validates that the asset is supported by the target agent(s) on the active chain, and per-agent minimum deposit amounts (defined per chain+asset on `agent.supportedAssets[].assets[].minDepositAmount`) are taken into account. When splitting across agents, `depositCallback` is invoked once per final valid agent with that agent's split amount and smart wallet address — expect multiple wallet prompts.
174
+ Deposit funds into a specific agent, or split equally across all agents if `agentId` is omitted. Validates that the asset is supported by the target agent(s) on the active chain, and per-agent minimum deposit amounts (defined per chain+asset on `agent.supportedAssets[].assets[].minDepositAmount`) are taken into account. Custom `depositCallback` implementations run once per final valid agent. The default Permit2 flow signs one recipient-bound batch authorization for every agent share. On the first Base USDC deposit, the SDK first requests an ERC-2612 signature and atomically bundles the maximum Permit2 approval with that batch in one sponsored transaction; later deposits need only the batch signature.
129
175
 
130
176
  | Param | Type | Description |
131
177
  | ------------------------- | -------------------- | --------------------------------------------------------------- |
@@ -218,6 +264,10 @@ Balances are shown after any applicable performance fees have been deducted.
218
264
 
219
265
  Returns: `AgentBalance` (single agent) or `OwneyBalances` (all agents)
220
266
 
267
+ Aggregate reads keep successful agents when another agent fails. The response
268
+ includes `agentErrors` and, for rate limits, absolute `agentRetryAt` deadlines.
269
+ The SDK throws `BALANCE_ALL_FAILED` when every active agent fails.
270
+
221
271
  ```typescript
222
272
  // Single agent
223
273
  const balance = await sdk.getBalances("zyfai");
@@ -245,6 +295,10 @@ Earnings are shown after any applicable performance fees have been deducted.
245
295
 
246
296
  Returns: `AgentEarnings` (single agent) or `OwneyEarnings` (all agents)
247
297
 
298
+ Aggregate reads keep successful agents when another agent fails. The response
299
+ includes `agentErrors` and, for rate limits, absolute `agentRetryAt` deadlines.
300
+ The SDK throws `EARNINGS_ALL_FAILED` when every active agent fails.
301
+
248
302
  ```typescript
249
303
  // Single agent
250
304
  const earnings = await sdk.getEarnings("zyfai");
@@ -274,6 +328,9 @@ snapshot is less than one hour old, the SDK returns it without recalculating.
274
328
 
275
329
  Returns: `AgentEarnings` (single agent) or `OwneyEarnings` (all agents)
276
330
 
331
+ Aggregate refreshes use the same partial-result and all-failed behavior as
332
+ `getEarnings()`.
333
+
277
334
  ```typescript
278
335
  // Single agent
279
336
  const refreshed = await sdk.refreshEarnings("zyfai");
@@ -439,8 +496,8 @@ console.log(usdcBaseApy.agentApy.zyfai.averageApy); // APY scoped to USDC on Bas
439
496
  type AgentId = "zyfai";
440
497
  type Asset = string;
441
498
  type DailyApyDays = "7D" | "14D" | "30D";
442
- type OwneySupportedChainId = 8453 | 42161;
443
- type OwneySupportedChains = "BASE" | "ARBITRUM";
499
+ type OwneySupportedChainId = 1 | 8453 | 42161;
500
+ type OwneySupportedChains = "ETHEREUM" | "BASE" | "ARBITRUM";
444
501
  type OwneySupportedTokens = "USDC" | "WETH";
445
502
 
446
503
  type AgentSupportedAsset = {
@@ -457,7 +514,14 @@ type AgentSupportedAssets = {
457
514
 
458
515
  interface OwneySDKConfig {
459
516
  apiKey: string;
517
+ rpcUrls?: {
518
+ 1?: string;
519
+ 8453?: string;
520
+ 42161?: string;
521
+ };
522
+ /** @deprecated Use rpcUrls. */
460
523
  zyfaiRpcUrls?: {
524
+ 1?: string;
461
525
  8453?: string;
462
526
  42161?: string;
463
527
  };
@@ -572,12 +636,14 @@ interface AccountAgentApy {
572
636
  weightedApyAfterFee?: number;
573
637
  weightedApyAfterFeeDetails?: AgentApyDetails;
574
638
  apyByChainAndAsset?: ApyByChainAndAsset;
639
+ history?: ApyHistoryPoint[];
575
640
  }
576
641
 
577
642
  interface OwneyAccountApy {
578
643
  totalApy: string;
579
644
  agentApy: Record<AgentId, AccountAgentApy>;
580
645
  apyByChainAndAsset: ApyByChainAndAsset;
646
+ history?: ApyHistoryPoint[]; // balance-weighted aggregate daily series
581
647
  }
582
648
 
583
649
  type HistoryAction = "Rebalance" | "Deposit" | "Top up" | "Withdraw" | "Earned";
@@ -719,6 +785,7 @@ type OwneyErrorCode =
719
785
  | "API_NO_AGENTS" // No supported agents returned by routing API
720
786
  // Aggregation
721
787
  | "BALANCE_ALL_FAILED" // All agents failed to return balances
788
+ | "EARNINGS_ALL_FAILED" // All agents failed to return earnings
722
789
  | "ALLOCATION_ALL_FAILED" // All agents failed to return allocation data
723
790
  // Validation
724
791
  | "VALIDATION_INVALID_DAYS"; // Invalid days value (expected "7D", "14D", or "30D")