@4mica/sdk 1.2.3 → 1.2.6

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.
@@ -32,7 +32,9 @@ export declare class UserClient {
32
32
  * locked collateral and any pending withdrawal.
33
33
  * @throws {@link ContractError} if the contract call fails.
34
34
  */
35
- getUser(): Promise<UserInfo[]>;
35
+ getUser(opts?: {
36
+ blockNumber?: bigint;
37
+ }): Promise<UserInfo[]>;
36
38
  /**
37
39
  * Query the on-chain payment status of a tab.
38
40
  *
@@ -43,8 +43,8 @@ class UserClient {
43
43
  * locked collateral and any pending withdrawal.
44
44
  * @throws {@link ContractError} if the contract call fails.
45
45
  */
46
- async getUser() {
47
- const assets = await this.client.gateway.getUserAssets();
46
+ async getUser(opts) {
47
+ const assets = await this.client.gateway.getUserAssets(opts);
48
48
  return assets.map((a) => ({
49
49
  asset: a.asset,
50
50
  collateral: (0, utils_1.parseU256)(a.collateral),
package/dist/config.d.ts CHANGED
@@ -48,15 +48,15 @@ export declare class ConfigBuilder {
48
48
  * Resolves to the corresponding core API URL.
49
49
  * Mutually exclusive with {@link rpcUrl} — last call wins.
50
50
  *
51
- * Supported values: `"base-sepolia"` / `"eip155:84532"`,
51
+ * Supported values: `"base"` / `"eip155:8453"`, `"base-sepolia"` / `"eip155:84532"`,
52
52
  * `"ethereum-sepolia"` / `"eip155:11155111"`.
53
53
  *
54
54
  * @throws {@link ConfigError} if the network is not recognised.
55
55
  *
56
56
  * @example
57
57
  * ```ts
58
- * new ConfigBuilder().network("base-sepolia").walletPrivateKey("0x...").build();
59
- * new ConfigBuilder().network("eip155:84532").walletPrivateKey("0x...").build();
58
+ * new ConfigBuilder().network("base").walletPrivateKey("0x...").build();
59
+ * new ConfigBuilder().network("eip155:8453").walletPrivateKey("0x...").build();
60
60
  * ```
61
61
  */
62
62
  network(value: string): ConfigBuilder;
@@ -82,7 +82,7 @@ export declare class ConfigBuilder {
82
82
  * Load configuration from environment variables.
83
83
  *
84
84
  * Recognised variables:
85
- * - `4MICA_NETWORK` — shorthand or CAIP-2 id (e.g. `base-sepolia`); takes precedence over `4MICA_RPC_URL`
85
+ * - `4MICA_NETWORK` — shorthand or CAIP-2 id (e.g. `base`); takes precedence over `4MICA_RPC_URL`
86
86
  * - `4MICA_RPC_URL`
87
87
  * - `4MICA_WALLET_PRIVATE_KEY`
88
88
  * - `4MICA_ETHEREUM_HTTP_RPC_URL`
package/dist/config.js CHANGED
@@ -38,21 +38,21 @@ class ConfigBuilder {
38
38
  * Resolves to the corresponding core API URL.
39
39
  * Mutually exclusive with {@link rpcUrl} — last call wins.
40
40
  *
41
- * Supported values: `"base-sepolia"` / `"eip155:84532"`,
41
+ * Supported values: `"base"` / `"eip155:8453"`, `"base-sepolia"` / `"eip155:84532"`,
42
42
  * `"ethereum-sepolia"` / `"eip155:11155111"`.
43
43
  *
44
44
  * @throws {@link ConfigError} if the network is not recognised.
45
45
  *
46
46
  * @example
47
47
  * ```ts
48
- * new ConfigBuilder().network("base-sepolia").walletPrivateKey("0x...").build();
49
- * new ConfigBuilder().network("eip155:84532").walletPrivateKey("0x...").build();
48
+ * new ConfigBuilder().network("base").walletPrivateKey("0x...").build();
49
+ * new ConfigBuilder().network("eip155:8453").walletPrivateKey("0x...").build();
50
50
  * ```
51
51
  */
52
52
  network(value) {
53
53
  const url = (0, networks_1.resolveNetworkRpcUrl)(value);
54
54
  if (!url) {
55
- throw new errors_1.ConfigError(`unknown network "${value}". Use a known shorthand (e.g. "base-sepolia") or CAIP-2 id, or call rpcUrl() directly.`);
55
+ throw new errors_1.ConfigError(`unknown network "${value}". Use a known shorthand (e.g. "base") or CAIP-2 id, or call rpcUrl() directly.`);
56
56
  }
57
57
  this._rpcUrl = url;
58
58
  return this;
@@ -108,7 +108,7 @@ class ConfigBuilder {
108
108
  * Load configuration from environment variables.
109
109
  *
110
110
  * Recognised variables:
111
- * - `4MICA_NETWORK` — shorthand or CAIP-2 id (e.g. `base-sepolia`); takes precedence over `4MICA_RPC_URL`
111
+ * - `4MICA_NETWORK` — shorthand or CAIP-2 id (e.g. `base`); takes precedence over `4MICA_RPC_URL`
112
112
  * - `4MICA_RPC_URL`
113
113
  * - `4MICA_WALLET_PRIVATE_KEY`
114
114
  * - `4MICA_ETHEREUM_HTTP_RPC_URL`
@@ -122,7 +122,7 @@ class ConfigBuilder {
122
122
  const env = process.env;
123
123
  if (env['4MICA_NETWORK'])
124
124
  this.network(env['4MICA_NETWORK']);
125
- if (env['4MICA_RPC_URL'])
125
+ else if (env['4MICA_RPC_URL'])
126
126
  this._rpcUrl = env['4MICA_RPC_URL'];
127
127
  if (env['4MICA_WALLET_PRIVATE_KEY'])
128
128
  this._walletPrivateKey = env['4MICA_WALLET_PRIVATE_KEY'];
@@ -31,7 +31,9 @@ export declare class ContractGateway {
31
31
  }>;
32
32
  approveErc20(token: string, amount: number | bigint | string, waitOptions?: TxReceiptWaitOptions): Promise<import("viem").TransactionReceipt>;
33
33
  deposit(amount: number | bigint | string, erc20Token?: string, waitOptions?: TxReceiptWaitOptions): Promise<import("viem").TransactionReceipt>;
34
- getUserAssets(): Promise<{
34
+ getUserAssets(opts?: {
35
+ blockNumber?: bigint;
36
+ }): Promise<{
35
37
  asset: `0x${string}`;
36
38
  collateral: bigint;
37
39
  withdrawalRequestTimestamp: bigint;
package/dist/contract.js CHANGED
@@ -136,9 +136,14 @@ class ContractGateway {
136
136
  }
137
137
  // Verify the allowance was actually set on-chain. The catch path above can
138
138
  // leave allowance at 0 if the re-approve transaction fails silently.
139
+ // Read at "latest" — waitForTransactionReceipt already confirmed the block,
140
+ // and many public RPCs reject eth_call at a specific recent blockNumber.
139
141
  const account = this.walletClient.account;
140
142
  if (account) {
141
- const actual = await erc20.read.allowance([account.address, spender]);
143
+ const actual = (await erc20.read.allowance([
144
+ account.address,
145
+ spender,
146
+ ]));
142
147
  if (actual < targetAllowance) {
143
148
  throw new errors_1.ContractError(`ERC20 allowance verification failed: on-chain allowance is ${actual} but expected ${targetAllowance}. ` +
144
149
  `Try calling approveErc20 again.`);
@@ -181,13 +186,13 @@ class ContractGateway {
181
186
  }
182
187
  return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });
183
188
  }
184
- async getUserAssets() {
189
+ async getUserAssets(opts) {
185
190
  const account = this.walletClient.account;
186
191
  if (!account) {
187
192
  throw new errors_1.ContractError('wallet client has no account configured');
188
193
  }
189
194
  const addr = account.address;
190
- const result = await this.contract.read.getUserAllAssets([addr]);
195
+ const result = await this.contract.read.getUserAllAssets([addr], opts);
191
196
  return result.map((a) => ({
192
197
  asset: a.asset,
193
198
  collateral: a.collateral,
@@ -17,12 +17,12 @@ export interface NetworkInfo {
17
17
  *
18
18
  * // By shorthand
19
19
  * const cfg = new ConfigBuilder()
20
- * .network("base-sepolia")
20
+ * .network("base")
21
21
  * .walletPrivateKey("0x...")
22
22
  * .build();
23
23
  *
24
24
  * // Inspect available networks
25
- * console.log(NETWORKS["base-sepolia"].caip2); // "eip155:84532"
25
+ * console.log(NETWORKS["base"].caip2); // "eip155:8453"
26
26
  * ```
27
27
  */
28
28
  export declare const NETWORKS: Record<string, NetworkInfo>;
@@ -32,8 +32,8 @@ export declare const NETWORKS: Record<string, NetworkInfo>;
32
32
  *
33
33
  * @example
34
34
  * ```ts
35
- * resolveNetworkRpcUrl("base-sepolia"); // "https://base.sepolia.api.4mica.xyz/"
36
- * resolveNetworkRpcUrl("eip155:84532"); // "https://base.sepolia.api.4mica.xyz/"
35
+ * resolveNetworkRpcUrl("base"); // "https://base.api.4mica.xyz/"
36
+ * resolveNetworkRpcUrl("eip155:8453"); // "https://base.api.4mica.xyz/"
37
37
  * resolveNetworkRpcUrl("eip155:1"); // undefined
38
38
  * ```
39
39
  */
package/dist/networks.js CHANGED
@@ -14,15 +14,19 @@ exports.resolveNetworkRpcUrl = resolveNetworkRpcUrl;
14
14
  *
15
15
  * // By shorthand
16
16
  * const cfg = new ConfigBuilder()
17
- * .network("base-sepolia")
17
+ * .network("base")
18
18
  * .walletPrivateKey("0x...")
19
19
  * .build();
20
20
  *
21
21
  * // Inspect available networks
22
- * console.log(NETWORKS["base-sepolia"].caip2); // "eip155:84532"
22
+ * console.log(NETWORKS["base"].caip2); // "eip155:8453"
23
23
  * ```
24
24
  */
25
25
  exports.NETWORKS = {
26
+ base: {
27
+ caip2: 'eip155:8453',
28
+ rpcUrl: 'https://base.api.4mica.xyz/',
29
+ },
26
30
  'base-sepolia': {
27
31
  caip2: 'eip155:84532',
28
32
  rpcUrl: 'https://base.sepolia.api.4mica.xyz/',
@@ -39,8 +43,8 @@ const NETWORKS_BY_CAIP2 = Object.fromEntries(Object.values(exports.NETWORKS).map
39
43
  *
40
44
  * @example
41
45
  * ```ts
42
- * resolveNetworkRpcUrl("base-sepolia"); // "https://base.sepolia.api.4mica.xyz/"
43
- * resolveNetworkRpcUrl("eip155:84532"); // "https://base.sepolia.api.4mica.xyz/"
46
+ * resolveNetworkRpcUrl("base"); // "https://base.api.4mica.xyz/"
47
+ * resolveNetworkRpcUrl("eip155:8453"); // "https://base.api.4mica.xyz/"
44
48
  * resolveNetworkRpcUrl("eip155:1"); // undefined
45
49
  * ```
46
50
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4mica/sdk",
3
- "version": "1.2.3",
3
+ "version": "1.2.6",
4
4
  "description": "TypeScript SDK for interacting with the 4Mica payment network",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -45,6 +45,9 @@
45
45
  "test:e2e": "vitest run --config vitest.e2e.config.ts",
46
46
  "example:base-sepolia:x402-v2": "node_modules/.bin/tsx examples/base-sepolia-x402-facilitator-e2e.ts",
47
47
  "example:manual:agents": "node_modules/.bin/tsx examples/manual-agents/demo.ts",
48
+ "example:wachai:v2": "node_modules/.bin/tsx examples/wachai-v2-demo/demo.ts",
49
+ "example:deposit": "node_modules/.bin/tsx examples/deposit.ts",
50
+ "example:yield": "node_modules/.bin/tsx examples/yield.ts",
48
51
  "lint": "eslint . --ext .ts",
49
52
  "fmt": "prettier --check \"{src,tests}/**/*.{ts,js,json}\""
50
53
  },