@openserv-labs/client 2.2.2 → 2.4.1
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/agents-api.d.ts +4 -0
- package/dist/agents-api.d.ts.map +1 -1
- package/dist/agents-api.js +7 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +11 -6
- package/dist/erc8004-api.d.ts.map +1 -1
- package/dist/erc8004-api.js +2 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/payments-api.d.ts.map +1 -1
- package/dist/payments-api.js +9 -7
- package/dist/provision.d.ts +12 -0
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +11 -8
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +10 -0
- package/dist/web3-api.d.ts.map +1 -1
- package/dist/web3-api.js +60 -17
- package/dist/x402.d.ts +39 -0
- package/dist/x402.d.ts.map +1 -0
- package/dist/x402.js +210 -0
- package/package.json +2 -4
package/dist/agents-api.d.ts
CHANGED
|
@@ -80,12 +80,14 @@ export declare class AgentsAPI {
|
|
|
80
80
|
* @param params.name - Unique name for the agent
|
|
81
81
|
* @param params.capabilities_description - Description of what the agent can do
|
|
82
82
|
* @param params.endpoint_url - URL where the agent is hosted
|
|
83
|
+
* @param params.model_parameters - Optional model parameters (e.g. { model: "gpt-5-mini", verbosity: "medium", reasoning_effort: "low" })
|
|
83
84
|
* @returns The created agent
|
|
84
85
|
*/
|
|
85
86
|
create(params: {
|
|
86
87
|
name: string;
|
|
87
88
|
capabilities_description: string;
|
|
88
89
|
endpoint_url: string;
|
|
90
|
+
model_parameters?: Record<string, unknown>;
|
|
89
91
|
}): Promise<Agent>;
|
|
90
92
|
/**
|
|
91
93
|
* Get the API key for an agent.
|
|
@@ -103,6 +105,7 @@ export declare class AgentsAPI {
|
|
|
103
105
|
* @param params.endpoint_url - New endpoint URL (optional)
|
|
104
106
|
* @param params.name - New name (optional)
|
|
105
107
|
* @param params.capabilities_description - New description (optional)
|
|
108
|
+
* @param params.model_parameters - New model parameters (optional, e.g. { model: "gpt-4.1", temperature: 0 })
|
|
106
109
|
* @returns The updated agent
|
|
107
110
|
*/
|
|
108
111
|
update(params: {
|
|
@@ -110,6 +113,7 @@ export declare class AgentsAPI {
|
|
|
110
113
|
endpoint_url?: string;
|
|
111
114
|
name?: string;
|
|
112
115
|
capabilities_description?: string;
|
|
116
|
+
model_parameters?: Record<string, unknown>;
|
|
113
117
|
}): Promise<Agent>;
|
|
114
118
|
/**
|
|
115
119
|
* Delete an agent.
|
package/dist/agents-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-api.d.ts","sourceRoot":"","sources":["../src/agents-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EACV,KAAK,EAKL,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAE1C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAK9B;;;;;;;;OAQG;IACG,eAAe,CAAC,MAAM,CAAC,EAAE;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAetC;;;;;OAKG;IACG,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAI1D;;;;;;;OAOG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAO9D
|
|
1
|
+
{"version":3,"file":"agents-api.d.ts","sourceRoot":"","sources":["../src/agents-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EACV,KAAK,EAKL,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAE1C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAK9B;;;;;;;;OAQG;IACG,eAAe,CAAC,MAAM,CAAC,EAAE;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAetC;;;;;OAKG;IACG,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAI1D;;;;;;;OAOG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAO9D;;;;;;;;OAQG;IACG,MAAM,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,wBAAwB,EAAE,MAAM,CAAC;QACjC,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,GAAG,OAAO,CAAC,KAAK,CAAC;IAclB;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjE;;;;;;;;;OASG;IACG,MAAM,CAAC,MAAM,EAAE;QACnB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,GAAG,OAAO,CAAC,KAAK,CAAC;IA+ClB;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IAOF;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE;QAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlB"}
|
package/dist/agents-api.js
CHANGED
|
@@ -93,6 +93,7 @@ class AgentsAPI {
|
|
|
93
93
|
* @param params.name - Unique name for the agent
|
|
94
94
|
* @param params.capabilities_description - Description of what the agent can do
|
|
95
95
|
* @param params.endpoint_url - URL where the agent is hosted
|
|
96
|
+
* @param params.model_parameters - Optional model parameters (e.g. { model: "gpt-5-mini", verbosity: "medium", reasoning_effort: "low" })
|
|
96
97
|
* @returns The created agent
|
|
97
98
|
*/
|
|
98
99
|
async create(params) {
|
|
@@ -102,6 +103,9 @@ class AgentsAPI {
|
|
|
102
103
|
endpoint_url: params.endpoint_url,
|
|
103
104
|
kind: "external",
|
|
104
105
|
is_built_by_agent_builder: false,
|
|
106
|
+
...(params.model_parameters && {
|
|
107
|
+
model_parameters: params.model_parameters,
|
|
108
|
+
}),
|
|
105
109
|
});
|
|
106
110
|
return this.get({ id: data.id });
|
|
107
111
|
}
|
|
@@ -122,10 +126,11 @@ class AgentsAPI {
|
|
|
122
126
|
* @param params.endpoint_url - New endpoint URL (optional)
|
|
123
127
|
* @param params.name - New name (optional)
|
|
124
128
|
* @param params.capabilities_description - New description (optional)
|
|
129
|
+
* @param params.model_parameters - New model parameters (optional, e.g. { model: "gpt-4.1", temperature: 0 })
|
|
125
130
|
* @returns The updated agent
|
|
126
131
|
*/
|
|
127
132
|
async update(params) {
|
|
128
|
-
const { id, endpoint_url, name, capabilities_description } = params;
|
|
133
|
+
const { id, endpoint_url, name, capabilities_description, model_parameters, } = params;
|
|
129
134
|
// First get the current agent to preserve ALL required fields
|
|
130
135
|
const currentAgent = await this.get({ id });
|
|
131
136
|
// Build update payload - API uses PUT and requires ALL fields
|
|
@@ -144,6 +149,7 @@ class AgentsAPI {
|
|
|
144
149
|
is_listed_on_marketplace: currentAgent.is_listed_on_marketplace ?? false,
|
|
145
150
|
is_trading_agent: currentAgent.is_trading_agent ?? false,
|
|
146
151
|
scopes,
|
|
152
|
+
model_parameters: model_parameters ?? currentAgent.model_parameters,
|
|
147
153
|
};
|
|
148
154
|
// endpoint_url is required for external agents.
|
|
149
155
|
// For your own agents, the GET endpoint returns endpoint_url.
|
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type AxiosInstance, type AxiosRequestConfig } from "axios";
|
|
2
2
|
import { AgentsAPI } from "./agents-api";
|
|
3
3
|
import { IntegrationsAPI } from "./integrations-api";
|
|
4
|
+
import { ModelsAPI } from "./models-api";
|
|
4
5
|
import { TriggersAPI } from "./triggers-api";
|
|
5
6
|
import { TasksAPI } from "./tasks-api";
|
|
6
7
|
import { WorkflowsAPI } from "./workflows-api";
|
|
@@ -31,6 +32,8 @@ export declare class PlatformClient {
|
|
|
31
32
|
readonly agents: AgentsAPI;
|
|
32
33
|
/** API for managing integration connections */
|
|
33
34
|
readonly integrations: IntegrationsAPI;
|
|
35
|
+
/** API for discovering available LLM models */
|
|
36
|
+
readonly models: ModelsAPI;
|
|
34
37
|
/** API for managing workflow triggers */
|
|
35
38
|
readonly triggers: TriggersAPI;
|
|
36
39
|
/** API for managing workflow tasks */
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAgB;IAElC,gHAAgH;IAChH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAE7B;;;OAGG;IACH,IAAI,SAAS,IAAI,aAAa,CAE7B;IAED;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAKnE;;;;;;OAMG;IACG,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAKb;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAKb;;;;;OAKG;IACG,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAKtE;;;;;;OAMG;gBACS,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAuB3D;;;;;;;;;;;;;;;;;OAiBG;IACG,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmExD;;;;;;;;OAQG;IACH,oBAAoB,IAAI,MAAM,GAAG,SAAS;CAS3C"}
|
package/dist/client.js
CHANGED
|
@@ -5,9 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.PlatformClient = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const
|
|
8
|
+
const accounts_1 = require("viem/accounts");
|
|
9
|
+
const utils_1 = require("./utils");
|
|
9
10
|
const agents_api_1 = require("./agents-api");
|
|
10
11
|
const integrations_api_1 = require("./integrations-api");
|
|
12
|
+
const models_api_1 = require("./models-api");
|
|
11
13
|
const triggers_api_1 = require("./triggers-api");
|
|
12
14
|
const tasks_api_1 = require("./tasks-api");
|
|
13
15
|
const workflows_api_1 = require("./workflows-api");
|
|
@@ -39,6 +41,8 @@ class PlatformClient {
|
|
|
39
41
|
agents;
|
|
40
42
|
/** API for managing integration connections */
|
|
41
43
|
integrations;
|
|
44
|
+
/** API for discovering available LLM models */
|
|
45
|
+
models;
|
|
42
46
|
/** API for managing workflow triggers */
|
|
43
47
|
triggers;
|
|
44
48
|
/** API for managing workflow tasks */
|
|
@@ -119,6 +123,7 @@ class PlatformClient {
|
|
|
119
123
|
});
|
|
120
124
|
this.agents = new agents_api_1.AgentsAPI(this);
|
|
121
125
|
this.integrations = new integrations_api_1.IntegrationsAPI(this);
|
|
126
|
+
this.models = new models_api_1.ModelsAPI(this);
|
|
122
127
|
this.triggers = new triggers_api_1.TriggersAPI(this);
|
|
123
128
|
this.tasks = new tasks_api_1.TasksAPI(this);
|
|
124
129
|
this.workflows = new workflows_api_1.WorkflowsAPI(this);
|
|
@@ -150,9 +155,9 @@ class PlatformClient {
|
|
|
150
155
|
// If no wallet key, assume API key auth is already set up
|
|
151
156
|
return "";
|
|
152
157
|
}
|
|
153
|
-
// Create
|
|
154
|
-
const
|
|
155
|
-
const walletAddress =
|
|
158
|
+
// Create account and store address for x402 wallet resolution
|
|
159
|
+
const account = (0, accounts_1.privateKeyToAccount)((0, utils_1.normalizePrivateKey)(walletKey));
|
|
160
|
+
const walletAddress = account.address;
|
|
156
161
|
this.walletAddress = walletAddress;
|
|
157
162
|
// Step 1: Get nonce from platform
|
|
158
163
|
const nonceResponse = await this._apiClient.post("/auth/wallet/nonce", {
|
|
@@ -178,7 +183,7 @@ Chain ID: 1
|
|
|
178
183
|
Nonce: ${nonce}
|
|
179
184
|
Issued At: ${issuedAt}`;
|
|
180
185
|
// Step 2: Sign the message
|
|
181
|
-
const signature = await
|
|
186
|
+
const signature = await account.signMessage({ message });
|
|
182
187
|
// Step 3: Verify signature and get API key
|
|
183
188
|
const verifyResponse = await this._apiClient.post("/auth/wallet/verify", {
|
|
184
189
|
walletAddress,
|
|
@@ -203,7 +208,7 @@ Issued At: ${issuedAt}`;
|
|
|
203
208
|
if (this.walletAddress)
|
|
204
209
|
return this.walletAddress;
|
|
205
210
|
if (process.env.WALLET_PRIVATE_KEY) {
|
|
206
|
-
return
|
|
211
|
+
return (0, accounts_1.privateKeyToAccount)((0, utils_1.normalizePrivateKey)(process.env.WALLET_PRIVATE_KEY)).address;
|
|
207
212
|
}
|
|
208
213
|
return undefined;
|
|
209
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc8004-api.d.ts","sourceRoot":"","sources":["../src/erc8004-api.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACb,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"erc8004-api.d.ts","sourceRoot":"","sources":["../src/erc8004-api.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACb,MAAM,SAAS,CAAC;AAKjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAM1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACG,MAAM,CACV,MAAM,EAAE,oBAAoB,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GACpD,OAAO,CAAC,YAAY,CAAC;IAsBxB;;;OAGG;YACW,iBAAiB;IAiC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmQlC;;OAEG;YACW,YAAY;IAyB1B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA8CjC;;;;;;;;;;;;;;;;OAgBG;IACG,cAAc,CAAC,MAAM,EAAE;QAC3B,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAKpC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/erc8004-api.js
CHANGED
|
@@ -6,6 +6,7 @@ const accounts_1 = require("viem/accounts");
|
|
|
6
6
|
const pinata_1 = require("pinata");
|
|
7
7
|
const erc8004_abi_js_1 = require("./erc8004-abi.js");
|
|
8
8
|
const erc8004_contracts_js_1 = require("./erc8004-contracts.js");
|
|
9
|
+
const utils_1 = require("./utils");
|
|
9
10
|
/**
|
|
10
11
|
* API for ERC-8004 agent identity operations on the OpenServ platform.
|
|
11
12
|
*
|
|
@@ -323,8 +324,7 @@ class Erc8004API {
|
|
|
323
324
|
default: { http: [rpcUrl] },
|
|
324
325
|
},
|
|
325
326
|
});
|
|
326
|
-
const
|
|
327
|
-
const account = (0, accounts_1.privateKeyToAccount)(normalizedKey);
|
|
327
|
+
const account = (0, accounts_1.privateKeyToAccount)((0, utils_1.normalizePrivateKey)(privateKey));
|
|
328
328
|
const publicClient = (0, viem_1.createPublicClient)({
|
|
329
329
|
chain: viemChain,
|
|
330
330
|
transport: (0, viem_1.http)(rpcUrl),
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export { PlatformClient } from "./client";
|
|
|
5
5
|
export { Workflow } from "./workflow";
|
|
6
6
|
export { AgentsAPI } from "./agents-api";
|
|
7
7
|
export { IntegrationsAPI } from "./integrations-api";
|
|
8
|
+
export { ModelsAPI } from "./models-api";
|
|
9
|
+
export type { ModelParameterMeta, ModelInfo, ModelsResponse, } from "./models-api";
|
|
8
10
|
export { TriggersAPI } from "./triggers-api";
|
|
9
11
|
export { TasksAPI } from "./tasks-api";
|
|
10
12
|
export { WorkflowsAPI } from "./workflows-api";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,EAEd,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,EACd,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,YAAY,EAEZ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,kBAAkB,EAClB,iBAAiB,EAEjB,oBAAoB,EACpB,UAAU,EACV,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,YAAY,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,MAAM,GACP,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,GACV,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,EAEd,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,EACd,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,YAAY,EAEZ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,kBAAkB,EAClB,iBAAiB,EAEjB,oBAAoB,EACpB,UAAU,EACV,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,YAAY,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,MAAM,GACP,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,GACV,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setLogger = exports.clearProvisionedState = exports.getProvisionedInfo = exports.isProvisioned = exports.provision = exports.listErc8004ChainIds = exports.getErc8004Contracts = exports.getErc8004Chain = exports.ERC8004_CHAINS = exports.ERC8004_TESTNET_CONTRACTS = exports.ERC8004_MAINNET_CONTRACTS = exports.Erc8004API = exports.PaymentsAPI = exports.Web3API = exports.WorkflowsAPI = exports.TasksAPI = exports.TriggersAPI = exports.IntegrationsAPI = exports.AgentsAPI = exports.Workflow = exports.PlatformClient = exports.inputSchemaToJsonSchema = exports.triggers = void 0;
|
|
3
|
+
exports.setLogger = exports.clearProvisionedState = exports.getProvisionedInfo = exports.isProvisioned = exports.provision = exports.listErc8004ChainIds = exports.getErc8004Contracts = exports.getErc8004Chain = exports.ERC8004_CHAINS = exports.ERC8004_TESTNET_CONTRACTS = exports.ERC8004_MAINNET_CONTRACTS = exports.Erc8004API = exports.PaymentsAPI = exports.Web3API = exports.WorkflowsAPI = exports.TasksAPI = exports.TriggersAPI = exports.ModelsAPI = exports.IntegrationsAPI = exports.AgentsAPI = exports.Workflow = exports.PlatformClient = exports.inputSchemaToJsonSchema = exports.triggers = void 0;
|
|
4
4
|
// Trigger factory and helpers
|
|
5
5
|
var triggers_api_1 = require("./triggers-api");
|
|
6
6
|
Object.defineProperty(exports, "triggers", { enumerable: true, get: function () { return triggers_api_1.triggers; } });
|
|
@@ -14,6 +14,8 @@ var agents_api_1 = require("./agents-api");
|
|
|
14
14
|
Object.defineProperty(exports, "AgentsAPI", { enumerable: true, get: function () { return agents_api_1.AgentsAPI; } });
|
|
15
15
|
var integrations_api_1 = require("./integrations-api");
|
|
16
16
|
Object.defineProperty(exports, "IntegrationsAPI", { enumerable: true, get: function () { return integrations_api_1.IntegrationsAPI; } });
|
|
17
|
+
var models_api_1 = require("./models-api");
|
|
18
|
+
Object.defineProperty(exports, "ModelsAPI", { enumerable: true, get: function () { return models_api_1.ModelsAPI; } });
|
|
17
19
|
var triggers_api_2 = require("./triggers-api");
|
|
18
20
|
Object.defineProperty(exports, "TriggersAPI", { enumerable: true, get: function () { return triggers_api_2.TriggersAPI; } });
|
|
19
21
|
var tasks_api_1 = require("./tasks-api");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payments-api.d.ts","sourceRoot":"","sources":["../src/payments-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payments-api.d.ts","sourceRoot":"","sources":["../src/payments-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGrE;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkDG;IACG,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiDzE;;OAEG;YACW,qBAAqB;IAmCnC;;;;;;;;;;;;;;;;;OAiBG;IACG,gBAAgB,IAAI,OAAO,CAC/B,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC,CACH;IAmBD;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,mBAAmB,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5D,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;CAeH"}
|
package/dist/payments-api.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PaymentsAPI = void 0;
|
|
4
4
|
const accounts_1 = require("viem/accounts");
|
|
5
|
-
const
|
|
5
|
+
const x402_1 = require("./x402");
|
|
6
6
|
/**
|
|
7
7
|
* API for making x402 payments to access paid workflows.
|
|
8
8
|
*
|
|
@@ -86,10 +86,11 @@ class PaymentsAPI {
|
|
|
86
86
|
}
|
|
87
87
|
// Create account from private key (for getting address)
|
|
88
88
|
const account = (0, accounts_1.privateKeyToAccount)(privateKey);
|
|
89
|
-
// Create signer for x402 payments
|
|
90
|
-
const
|
|
89
|
+
// Create signer for x402 payments (defaults to Base mainnet)
|
|
90
|
+
const network = params.network ?? "base";
|
|
91
|
+
const signer = (0, x402_1.createSigner)(network, privateKey);
|
|
91
92
|
// Wrap fetch with x402 payment handling
|
|
92
|
-
const x402Fetch = (0,
|
|
93
|
+
const x402Fetch = (0, x402_1.wrapFetchWithPayment)(fetch, signer);
|
|
93
94
|
// Make the request - x402Fetch automatically handles 402 responses
|
|
94
95
|
const response = await x402Fetch(triggerUrl, {
|
|
95
96
|
method: "POST",
|
|
@@ -109,8 +110,8 @@ class PaymentsAPI {
|
|
|
109
110
|
txHash: "", // x402 handles this internally, tx hash not exposed
|
|
110
111
|
price: "", // Price is handled by x402 protocol
|
|
111
112
|
response: responseData,
|
|
112
|
-
network
|
|
113
|
-
chainId: 8453,
|
|
113
|
+
network,
|
|
114
|
+
chainId: signer.chain?.id ?? 8453,
|
|
114
115
|
};
|
|
115
116
|
}
|
|
116
117
|
/**
|
|
@@ -183,7 +184,8 @@ class PaymentsAPI {
|
|
|
183
184
|
*/
|
|
184
185
|
async getTriggerPreflight(params) {
|
|
185
186
|
// This endpoint is public and doesn't require authentication
|
|
186
|
-
const
|
|
187
|
+
const baseUrl = this.client.rawClient.defaults.baseURL || "https://api.openserv.ai";
|
|
188
|
+
const response = await fetch(`${baseUrl}/webhooks/trigger/${params.token}`);
|
|
187
189
|
if (!response.ok) {
|
|
188
190
|
const errorData = await response.json().catch(() => ({}));
|
|
189
191
|
throw new Error(`Failed to get trigger preflight: ${response.status} ${JSON.stringify(errorData)}`);
|
package/dist/provision.d.ts
CHANGED
|
@@ -67,6 +67,18 @@ export interface ProvisionConfig {
|
|
|
67
67
|
* Only provide this if your agent runs with a different publicly accessible URL.
|
|
68
68
|
*/
|
|
69
69
|
endpointUrl?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Optional model parameters for the agent.
|
|
72
|
+
* Controls which LLM model the runtime uses when executing tasks.
|
|
73
|
+
* If not provided, the platform default (gpt-5-mini) is used.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* model_parameters: { model: "gpt-5", verbosity: "medium", reasoning_effort: "high" }
|
|
78
|
+
* model_parameters: { model: "gpt-4o", temperature: 0.5, parallel_tool_calls: false }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
model_parameters?: Record<string, unknown>;
|
|
70
82
|
};
|
|
71
83
|
/** Workflow configuration */
|
|
72
84
|
workflow: {
|
package/dist/provision.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"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"}
|
package/dist/provision.js
CHANGED
|
@@ -38,9 +38,10 @@ exports.provision = provision;
|
|
|
38
38
|
exports.isProvisioned = isProvisioned;
|
|
39
39
|
exports.getProvisionedInfo = getProvisionedInfo;
|
|
40
40
|
exports.clearProvisionedState = clearProvisionedState;
|
|
41
|
-
const
|
|
41
|
+
const accounts_1 = require("viem/accounts");
|
|
42
42
|
const fs = __importStar(require("node:fs"));
|
|
43
43
|
const path = __importStar(require("node:path"));
|
|
44
|
+
const utils_1 = require("./utils");
|
|
44
45
|
const client_1 = require("./client");
|
|
45
46
|
const STATE_FILE = ".openserv.json";
|
|
46
47
|
const defaultLogger = {
|
|
@@ -162,13 +163,13 @@ function writeWalletToEnv(privateKey) {
|
|
|
162
163
|
async function getOrCreateWallet() {
|
|
163
164
|
const { privateKey } = getWalletFromEnv();
|
|
164
165
|
if (privateKey) {
|
|
165
|
-
const
|
|
166
|
-
return { privateKey, address:
|
|
166
|
+
const account = (0, accounts_1.privateKeyToAccount)((0, utils_1.normalizePrivateKey)(privateKey));
|
|
167
|
+
return { privateKey, address: account.address };
|
|
167
168
|
}
|
|
168
169
|
// Create new wallet
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
const newAddress =
|
|
170
|
+
const newPrivateKey = (0, accounts_1.generatePrivateKey)();
|
|
171
|
+
const account = (0, accounts_1.privateKeyToAccount)(newPrivateKey);
|
|
172
|
+
const newAddress = account.address;
|
|
172
173
|
// Persist to .env (secrets stay in .env)
|
|
173
174
|
writeWalletToEnv(newPrivateKey);
|
|
174
175
|
logger.info("Created new wallet:", newAddress);
|
|
@@ -178,8 +179,7 @@ async function getOrCreateWallet() {
|
|
|
178
179
|
// Platform API Client
|
|
179
180
|
// ============================================================================
|
|
180
181
|
async function createAuthenticatedClient(privateKey) {
|
|
181
|
-
const
|
|
182
|
-
const walletAddress = wallet.address;
|
|
182
|
+
const walletAddress = (0, accounts_1.privateKeyToAccount)((0, utils_1.normalizePrivateKey)(privateKey)).address;
|
|
183
183
|
// Check if we have a saved user API key (for session continuity)
|
|
184
184
|
const state = readState();
|
|
185
185
|
const existingApiKey = state.userApiKey;
|
|
@@ -291,6 +291,9 @@ async function provisionAgent(client, config) {
|
|
|
291
291
|
name: config.name,
|
|
292
292
|
capabilities_description: config.description,
|
|
293
293
|
endpoint_url: endpointUrl,
|
|
294
|
+
...(config.model_parameters && {
|
|
295
|
+
model_parameters: config.model_parameters,
|
|
296
|
+
}),
|
|
294
297
|
});
|
|
295
298
|
const agentId = agent.id;
|
|
296
299
|
// Get agent API key
|
package/dist/types.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export interface Agent {
|
|
|
8
8
|
is_listed_on_marketplace: boolean;
|
|
9
9
|
is_trading_agent: boolean;
|
|
10
10
|
scopes: Record<string, unknown> | string[];
|
|
11
|
+
model_parameters?: Record<string, unknown>;
|
|
11
12
|
}
|
|
12
13
|
export interface Category {
|
|
13
14
|
id: number;
|
|
@@ -325,6 +326,8 @@ export interface X402PaymentRequest {
|
|
|
325
326
|
privateKey?: string;
|
|
326
327
|
/** Input data to pass to the workflow */
|
|
327
328
|
input?: Record<string, unknown>;
|
|
329
|
+
/** Network to use for payment (default: "base"). Use "base-sepolia" for testnet. */
|
|
330
|
+
network?: string;
|
|
328
331
|
}
|
|
329
332
|
/**
|
|
330
333
|
* Result from paying and executing an x402 workflow.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAEpD"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizePrivateKey = normalizePrivateKey;
|
|
4
|
+
/**
|
|
5
|
+
* Normalize a private key string to a 0x-prefixed hex string.
|
|
6
|
+
* Accepts keys with or without the 0x prefix.
|
|
7
|
+
*/
|
|
8
|
+
function normalizePrivateKey(key) {
|
|
9
|
+
return (key.startsWith("0x") ? key : `0x${key}`);
|
|
10
|
+
}
|
package/dist/web3-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web3-api.d.ts","sourceRoot":"","sources":["../src/web3-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web3-api.d.ts","sourceRoot":"","sources":["../src/web3-api.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AA4BjB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,OAAO;IACN,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAE1C;;;;;;;;;;;;;;;;;OAiBG;IACG,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IAIpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,qBAAqB,CACzB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAO9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,KAAK,CAAC,MAAM,EAAE;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,eAAe,CAAC;CAuG7B"}
|
package/dist/web3-api.js
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Web3API = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const accounts_1 = require("viem/accounts");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
// ERC20 ABI (minimal, for balance check and transfer)
|
|
6
8
|
const ERC20_ABI = [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
{
|
|
10
|
+
name: "transfer",
|
|
11
|
+
type: "function",
|
|
12
|
+
stateMutability: "nonpayable",
|
|
13
|
+
inputs: [
|
|
14
|
+
{ name: "to", type: "address" },
|
|
15
|
+
{ name: "amount", type: "uint256" },
|
|
16
|
+
],
|
|
17
|
+
outputs: [{ name: "", type: "bool" }],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "balanceOf",
|
|
21
|
+
type: "function",
|
|
22
|
+
stateMutability: "view",
|
|
23
|
+
inputs: [{ name: "owner", type: "address" }],
|
|
24
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
25
|
+
},
|
|
9
26
|
];
|
|
10
27
|
// Known RPC URLs for supported chains
|
|
11
28
|
const CHAIN_RPC_URLS = {
|
|
@@ -143,33 +160,59 @@ class Web3API {
|
|
|
143
160
|
const rpcUrl = params.rpcUrl ||
|
|
144
161
|
CHAIN_RPC_URLS[config.chainId] ||
|
|
145
162
|
`https://rpc.ankr.com/${config.network}`;
|
|
146
|
-
// Step 2: Create
|
|
147
|
-
const
|
|
148
|
-
const
|
|
163
|
+
// Step 2: Create viem clients
|
|
164
|
+
const account = (0, accounts_1.privateKeyToAccount)((0, utils_1.normalizePrivateKey)(privateKey));
|
|
165
|
+
const chain = (0, viem_1.defineChain)({
|
|
166
|
+
id: config.chainId,
|
|
167
|
+
name: config.network,
|
|
168
|
+
nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 },
|
|
169
|
+
rpcUrls: { default: { http: [rpcUrl] } },
|
|
170
|
+
});
|
|
171
|
+
const publicClient = (0, viem_1.createPublicClient)({
|
|
172
|
+
chain,
|
|
173
|
+
transport: (0, viem_1.http)(rpcUrl),
|
|
174
|
+
});
|
|
175
|
+
const walletClient = (0, viem_1.createWalletClient)({
|
|
176
|
+
account,
|
|
177
|
+
chain,
|
|
178
|
+
transport: (0, viem_1.http)(rpcUrl),
|
|
179
|
+
});
|
|
149
180
|
// Step 3: Check USDC balance
|
|
150
|
-
const usdcContract = new ethers_1.ethers.Contract(config.usdcContractAddress, ERC20_ABI, wallet);
|
|
151
181
|
// USDC has 6 decimals
|
|
152
|
-
const amountInSmallestUnit =
|
|
153
|
-
const balance = await
|
|
182
|
+
const amountInSmallestUnit = (0, viem_1.parseUnits)(params.amountUsd.toString(), 6);
|
|
183
|
+
const balance = await publicClient.readContract({
|
|
184
|
+
address: config.usdcContractAddress,
|
|
185
|
+
abi: ERC20_ABI,
|
|
186
|
+
functionName: "balanceOf",
|
|
187
|
+
args: [account.address],
|
|
188
|
+
});
|
|
154
189
|
if (balance < amountInSmallestUnit) {
|
|
155
|
-
const balanceFormatted =
|
|
190
|
+
const balanceFormatted = (0, viem_1.formatUnits)(balance, 6);
|
|
156
191
|
throw new Error(`Insufficient USDC balance. Have: ${balanceFormatted} USDC, need: ${params.amountUsd} USDC`);
|
|
157
192
|
}
|
|
158
193
|
// Step 4: Send USDC transfer
|
|
159
|
-
const
|
|
194
|
+
const txHash = await walletClient.writeContract({
|
|
195
|
+
address: config.usdcContractAddress,
|
|
196
|
+
abi: ERC20_ABI,
|
|
197
|
+
functionName: "transfer",
|
|
198
|
+
args: [config.receiverAddress, amountInSmallestUnit],
|
|
199
|
+
});
|
|
160
200
|
// Step 5: Wait for confirmation
|
|
161
|
-
const receipt = await
|
|
162
|
-
|
|
201
|
+
const receipt = await publicClient.waitForTransactionReceipt({
|
|
202
|
+
hash: txHash,
|
|
203
|
+
});
|
|
204
|
+
if (receipt.status !== "success") {
|
|
163
205
|
throw new Error("Transaction failed or was reverted");
|
|
164
206
|
}
|
|
165
|
-
const txHash = receipt.hash;
|
|
166
207
|
// Step 6: Sign verification message
|
|
167
208
|
const verificationMessage = `Verify USDC top-up: ${txHash}`;
|
|
168
|
-
const signature = await
|
|
209
|
+
const signature = await account.signMessage({
|
|
210
|
+
message: verificationMessage,
|
|
211
|
+
});
|
|
169
212
|
// Step 7: Verify transaction and add credits
|
|
170
213
|
const verifyResult = await this.verifyUsdcTransaction({
|
|
171
214
|
txHash,
|
|
172
|
-
payerAddress:
|
|
215
|
+
payerAddress: account.address,
|
|
173
216
|
signature,
|
|
174
217
|
});
|
|
175
218
|
return {
|
package/dist/x402.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendored x402 EVM client-side payment implementation.
|
|
3
|
+
*
|
|
4
|
+
* This replaces the `x402-fetch` and `x402` npm packages to avoid pulling in
|
|
5
|
+
* wagmi, WalletConnect, Reown, MetaMask SDK, Solana SDK, and hundreds of MB
|
|
6
|
+
* of transitive dependencies that are unnecessary for server-side EVM usage.
|
|
7
|
+
*
|
|
8
|
+
* Only EVM payment support is included (Base network), which is all this SDK needs.
|
|
9
|
+
* The x402 protocol specification: https://www.x402.org/
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { type WalletClient } from "viem";
|
|
14
|
+
/**
|
|
15
|
+
* Create a viem WalletClient configured for x402 payment signing.
|
|
16
|
+
*
|
|
17
|
+
* @param network - Network name (e.g., "base", "base-sepolia")
|
|
18
|
+
* @param privateKey - Hex-encoded private key
|
|
19
|
+
* @returns Configured WalletClient
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSigner(network: string, privateKey: string): WalletClient;
|
|
22
|
+
/**
|
|
23
|
+
* Wrap a fetch function with x402 payment handling.
|
|
24
|
+
*
|
|
25
|
+
* When the wrapped fetch receives a 402 response, it automatically:
|
|
26
|
+
* 1. Parses the payment requirements from the response
|
|
27
|
+
* 2. Signs an EIP-3009 TransferWithAuthorization
|
|
28
|
+
* 3. Retries the request with the signed payment in the X-PAYMENT header
|
|
29
|
+
*
|
|
30
|
+
* The retry calls the raw (unwrapped) fetch directly, so a second 402
|
|
31
|
+
* is returned to the caller as-is without infinite retry loops.
|
|
32
|
+
*
|
|
33
|
+
* @param fetchFn - The fetch function to wrap
|
|
34
|
+
* @param walletClient - Wallet client for signing payments
|
|
35
|
+
* @param maxValue - Maximum payment amount in atomic units (default: 0.1 USDC = 100000)
|
|
36
|
+
* @returns Wrapped fetch function with x402 payment support
|
|
37
|
+
*/
|
|
38
|
+
export declare function wrapFetchWithPayment(fetchFn: typeof fetch, walletClient: WalletClient, maxValue?: bigint): typeof fetch;
|
|
39
|
+
//# sourceMappingURL=x402.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../src/x402.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAKL,KAAK,YAAY,EAElB,MAAM,MAAM,CAAC;AAqNd;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,YAAY,CAad;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,KAAK,EACrB,YAAY,EAAE,YAAY,EAC1B,QAAQ,GAAE,MAA8B,GACvC,OAAO,KAAK,CA6Cd"}
|
package/dist/x402.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vendored x402 EVM client-side payment implementation.
|
|
4
|
+
*
|
|
5
|
+
* This replaces the `x402-fetch` and `x402` npm packages to avoid pulling in
|
|
6
|
+
* wagmi, WalletConnect, Reown, MetaMask SDK, Solana SDK, and hundreds of MB
|
|
7
|
+
* of transitive dependencies that are unnecessary for server-side EVM usage.
|
|
8
|
+
*
|
|
9
|
+
* Only EVM payment support is included (Base network), which is all this SDK needs.
|
|
10
|
+
* The x402 protocol specification: https://www.x402.org/
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.createSigner = createSigner;
|
|
16
|
+
exports.wrapFetchWithPayment = wrapFetchWithPayment;
|
|
17
|
+
const viem_1 = require("viem");
|
|
18
|
+
const accounts_1 = require("viem/accounts");
|
|
19
|
+
const chains_1 = require("viem/chains");
|
|
20
|
+
const node_crypto_1 = require("node:crypto");
|
|
21
|
+
const utils_1 = require("./utils");
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Constants
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/** Map network names to viem Chain objects. */
|
|
26
|
+
const NETWORK_CHAINS = {
|
|
27
|
+
base: chains_1.base,
|
|
28
|
+
"base-sepolia": chains_1.baseSepolia,
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* EIP-712 typed data for USDC TransferWithAuthorization (EIP-3009).
|
|
32
|
+
* Used to sign USDC transfer authorizations without an on-chain transaction.
|
|
33
|
+
*/
|
|
34
|
+
const TRANSFER_WITH_AUTHORIZATION_TYPES = {
|
|
35
|
+
TransferWithAuthorization: [
|
|
36
|
+
{ name: "from", type: "address" },
|
|
37
|
+
{ name: "to", type: "address" },
|
|
38
|
+
{ name: "value", type: "uint256" },
|
|
39
|
+
{ name: "validAfter", type: "uint256" },
|
|
40
|
+
{ name: "validBefore", type: "uint256" },
|
|
41
|
+
{ name: "nonce", type: "bytes32" },
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Helpers
|
|
46
|
+
// ============================================================================
|
|
47
|
+
function base64Encode(str) {
|
|
48
|
+
return Buffer.from(str).toString("base64");
|
|
49
|
+
}
|
|
50
|
+
function createNonce() {
|
|
51
|
+
return (0, viem_1.toHex)((0, node_crypto_1.randomBytes)(32));
|
|
52
|
+
}
|
|
53
|
+
function encodePayment(payment) {
|
|
54
|
+
const safe = {
|
|
55
|
+
...payment,
|
|
56
|
+
payload: {
|
|
57
|
+
...payment.payload,
|
|
58
|
+
authorization: Object.fromEntries(Object.entries(payment.payload.authorization).map(([key, value]) => [
|
|
59
|
+
key,
|
|
60
|
+
typeof value === "bigint" ? value.toString() : value,
|
|
61
|
+
])),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
return base64Encode(JSON.stringify(safe));
|
|
65
|
+
}
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// Payment Logic
|
|
68
|
+
// ============================================================================
|
|
69
|
+
/**
|
|
70
|
+
* Select the best payment requirement from the server's options.
|
|
71
|
+
* Prefers requirements matching the wallet's network and "exact" scheme.
|
|
72
|
+
*/
|
|
73
|
+
function selectPaymentRequirements(requirements, network) {
|
|
74
|
+
if (network) {
|
|
75
|
+
const matching = requirements.filter((r) => r.scheme === "exact" && r.network === network);
|
|
76
|
+
if (matching.length > 0)
|
|
77
|
+
return matching[0];
|
|
78
|
+
}
|
|
79
|
+
// Fallback: first "exact" scheme requirement, then any
|
|
80
|
+
const exact = requirements.filter((r) => r.scheme === "exact");
|
|
81
|
+
return exact[0] ?? requirements[0];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Sign an EIP-3009 TransferWithAuthorization using the wallet client.
|
|
85
|
+
*/
|
|
86
|
+
async function signAuthorization(walletClient, authorization, paymentRequirements) {
|
|
87
|
+
const chainId = walletClient.chain?.id;
|
|
88
|
+
if (!chainId) {
|
|
89
|
+
throw new Error("Wallet client must have a chain configured");
|
|
90
|
+
}
|
|
91
|
+
const signature = await walletClient.signTypedData({
|
|
92
|
+
account: walletClient.account,
|
|
93
|
+
types: TRANSFER_WITH_AUTHORIZATION_TYPES,
|
|
94
|
+
domain: {
|
|
95
|
+
name: paymentRequirements.extra?.name,
|
|
96
|
+
version: paymentRequirements.extra?.version,
|
|
97
|
+
chainId,
|
|
98
|
+
verifyingContract: (0, viem_1.getAddress)(paymentRequirements.asset),
|
|
99
|
+
},
|
|
100
|
+
primaryType: "TransferWithAuthorization",
|
|
101
|
+
message: {
|
|
102
|
+
from: (0, viem_1.getAddress)(authorization.from),
|
|
103
|
+
to: (0, viem_1.getAddress)(authorization.to),
|
|
104
|
+
value: BigInt(authorization.value),
|
|
105
|
+
validAfter: BigInt(authorization.validAfter),
|
|
106
|
+
validBefore: BigInt(authorization.validBefore),
|
|
107
|
+
nonce: authorization.nonce,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
return signature;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a signed x402 payment header for an EVM payment.
|
|
114
|
+
*/
|
|
115
|
+
async function createPaymentHeader(walletClient, x402Version, paymentRequirements) {
|
|
116
|
+
const from = walletClient.account.address;
|
|
117
|
+
const nonce = createNonce();
|
|
118
|
+
const validAfter = BigInt(Math.floor(Date.now() / 1000) - 600).toString();
|
|
119
|
+
const validBefore = BigInt(Math.floor(Date.now() / 1000 + paymentRequirements.maxTimeoutSeconds)).toString();
|
|
120
|
+
const unsignedPayment = {
|
|
121
|
+
x402Version,
|
|
122
|
+
scheme: paymentRequirements.scheme,
|
|
123
|
+
network: paymentRequirements.network,
|
|
124
|
+
payload: {
|
|
125
|
+
signature: undefined,
|
|
126
|
+
authorization: {
|
|
127
|
+
from,
|
|
128
|
+
to: paymentRequirements.payTo,
|
|
129
|
+
value: paymentRequirements.maxAmountRequired,
|
|
130
|
+
validAfter,
|
|
131
|
+
validBefore,
|
|
132
|
+
nonce,
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
const signature = await signAuthorization(walletClient, unsignedPayment.payload.authorization, paymentRequirements);
|
|
137
|
+
return encodePayment({
|
|
138
|
+
...unsignedPayment,
|
|
139
|
+
payload: {
|
|
140
|
+
...unsignedPayment.payload,
|
|
141
|
+
signature,
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// ============================================================================
|
|
146
|
+
// Public API
|
|
147
|
+
// ============================================================================
|
|
148
|
+
/**
|
|
149
|
+
* Create a viem WalletClient configured for x402 payment signing.
|
|
150
|
+
*
|
|
151
|
+
* @param network - Network name (e.g., "base", "base-sepolia")
|
|
152
|
+
* @param privateKey - Hex-encoded private key
|
|
153
|
+
* @returns Configured WalletClient
|
|
154
|
+
*/
|
|
155
|
+
function createSigner(network, privateKey) {
|
|
156
|
+
const chain = NETWORK_CHAINS[network];
|
|
157
|
+
if (!chain) {
|
|
158
|
+
throw new Error(`Unsupported network: ${network}. Supported: ${Object.keys(NETWORK_CHAINS).join(", ")}`);
|
|
159
|
+
}
|
|
160
|
+
return (0, viem_1.createWalletClient)({
|
|
161
|
+
account: (0, accounts_1.privateKeyToAccount)((0, utils_1.normalizePrivateKey)(privateKey)),
|
|
162
|
+
chain,
|
|
163
|
+
transport: (0, viem_1.http)(),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Wrap a fetch function with x402 payment handling.
|
|
168
|
+
*
|
|
169
|
+
* When the wrapped fetch receives a 402 response, it automatically:
|
|
170
|
+
* 1. Parses the payment requirements from the response
|
|
171
|
+
* 2. Signs an EIP-3009 TransferWithAuthorization
|
|
172
|
+
* 3. Retries the request with the signed payment in the X-PAYMENT header
|
|
173
|
+
*
|
|
174
|
+
* The retry calls the raw (unwrapped) fetch directly, so a second 402
|
|
175
|
+
* is returned to the caller as-is without infinite retry loops.
|
|
176
|
+
*
|
|
177
|
+
* @param fetchFn - The fetch function to wrap
|
|
178
|
+
* @param walletClient - Wallet client for signing payments
|
|
179
|
+
* @param maxValue - Maximum payment amount in atomic units (default: 0.1 USDC = 100000)
|
|
180
|
+
* @returns Wrapped fetch function with x402 payment support
|
|
181
|
+
*/
|
|
182
|
+
function wrapFetchWithPayment(fetchFn, walletClient, maxValue = BigInt(0.1 * 10 ** 6)) {
|
|
183
|
+
return async (input, init) => {
|
|
184
|
+
const response = await fetchFn(input, init);
|
|
185
|
+
if (response.status !== 402) {
|
|
186
|
+
return response;
|
|
187
|
+
}
|
|
188
|
+
// Parse payment requirements from 402 response
|
|
189
|
+
const body = (await response.json());
|
|
190
|
+
// Detect wallet's network name from chain ID
|
|
191
|
+
const chainId = walletClient.chain?.id;
|
|
192
|
+
const network = chainId
|
|
193
|
+
? Object.entries(NETWORK_CHAINS).find(([, c]) => c.id === chainId)?.[0]
|
|
194
|
+
: undefined;
|
|
195
|
+
const selected = selectPaymentRequirements(body.accepts, network);
|
|
196
|
+
if (BigInt(selected.maxAmountRequired) > maxValue) {
|
|
197
|
+
throw new Error("Payment amount exceeds maximum allowed");
|
|
198
|
+
}
|
|
199
|
+
const paymentHeader = await createPaymentHeader(walletClient, body.x402Version, selected);
|
|
200
|
+
// Retry with payment header using raw fetchFn (not the wrapper) to avoid loops
|
|
201
|
+
return fetchFn(input, {
|
|
202
|
+
...init,
|
|
203
|
+
headers: {
|
|
204
|
+
...(init?.headers || {}),
|
|
205
|
+
"X-PAYMENT": paymentHeader,
|
|
206
|
+
"Access-Control-Expose-Headers": "X-PAYMENT-RESPONSE",
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openserv-labs/client",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"description": "OpenServ Platform Client - Manage agents, workflows, tasks, and triggers via the OpenServ API",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -38,10 +38,8 @@
|
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"axios": "^1.6.8",
|
|
41
|
-
"ethers": "^6.16.0",
|
|
42
41
|
"pinata": "^2.5.1",
|
|
43
|
-
"viem": "^2.45.1"
|
|
44
|
-
"x402-fetch": "^1.1.0"
|
|
42
|
+
"viem": "^2.45.1"
|
|
45
43
|
},
|
|
46
44
|
"devDependencies": {
|
|
47
45
|
"@eslint/js": "^9.39.2",
|