Skip to content

Commit 3c37b9a

Browse files
authored
feat: ID-746 Passport - ZkEvm message signing
1 parent 289a865 commit 3c37b9a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+2078
-248
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
- @imtbl/orderbook: Added `getTrade` and `listTrades` methods for querying trades
1313
- @imtbl/blockchain-data: Added method `listCollectionsByNFTOwner`
14+
- @imtbl/passport: Added support for `eth_signTypedData_v4` to Passport zkEvm provider.
1415

1516
## [0.16.0] - 2023-08-31
1617

packages/internal/guardian/src/client/api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515

1616

17+
export * from './domain/messages-api';
1718
export * from './domain/starkex-transactions-api';
1819
export * from './domain/transactions-api';
1920

packages/internal/guardian/src/client/base.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@
1313
*/
1414

1515

16-
import type { Configuration } from './configuration';
16+
import { Configuration } from "./configuration";
1717
// Some imports not used depending on template conditions
1818
// @ts-ignore
19-
import type { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
20-
import globalAxios from 'axios';
19+
import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
2120

2221
export const BASE_PATH = "https://guardian.sandbox.imtbl.com".replace(/\/+$/, "");
2322

@@ -65,8 +64,8 @@ export class BaseAPI {
6564
* @extends {Error}
6665
*/
6766
export class RequiredError extends Error {
67+
name: "RequiredError" = "RequiredError";
6868
constructor(public field: string, msg?: string) {
6969
super(msg);
70-
this.name = "RequiredError"
7170
}
7271
}

packages/internal/guardian/src/client/common.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@
1313
*/
1414

1515

16-
import type { Configuration } from "./configuration";
17-
import type { RequestArgs } from "./base";
18-
import type { AxiosInstance, AxiosResponse } from 'axios';
19-
import { RequiredError } from "./base";
16+
import { Configuration } from "./configuration";
17+
import { RequiredError, RequestArgs } from "./base";
18+
import { AxiosInstance, AxiosResponse } from 'axios';
2019

2120
/**
2221
*
@@ -85,7 +84,6 @@ export const setOAuthToObject = async function (object: any, name: string, scope
8584
}
8685

8786
function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void {
88-
if (parameter == null) return;
8987
if (typeof parameter === "object") {
9088
if (Array.isArray(parameter)) {
9189
(parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key));
Lines changed: 331 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,331 @@
1+
/* tslint:disable */
2+
/* eslint-disable */
3+
/**
4+
* Guardian
5+
* Guardian API
6+
*
7+
* The version of the OpenAPI document: 1.0.0
8+
* Contact: [email protected]
9+
*
10+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11+
* https://openapi-generator.tech
12+
* Do not edit the class manually.
13+
*/
14+
15+
16+
import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
17+
import { Configuration } from '../configuration';
18+
// Some imports not used depending on template conditions
19+
// @ts-ignore
20+
import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';
21+
// @ts-ignore
22+
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
23+
// @ts-ignore
24+
import { APIError400 } from '../models';
25+
// @ts-ignore
26+
import { APIError403 } from '../models';
27+
// @ts-ignore
28+
import { APIError404 } from '../models';
29+
// @ts-ignore
30+
import { APIError500 } from '../models';
31+
// @ts-ignore
32+
import { BasicAPIError } from '../models';
33+
// @ts-ignore
34+
import { EVMMessage } from '../models';
35+
// @ts-ignore
36+
import { MessageEvaluationRequest } from '../models';
37+
// @ts-ignore
38+
import { MessageEvaluationResponse } from '../models';
39+
/**
40+
* MessagesApi - axios parameter creator
41+
* @export
42+
*/
43+
export const MessagesApiAxiosParamCreator = function (configuration?: Configuration) {
44+
return {
45+
/**
46+
* Approve a pending evm message
47+
* @summary Approve a pending evm message
48+
* @param {string} messageID id for the message
49+
* @param {*} [options] Override http request option.
50+
* @throws {RequiredError}
51+
*/
52+
approvePendingMessage: async (messageID: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
53+
// verify required parameter 'messageID' is not null or undefined
54+
assertParamExists('approvePendingMessage', 'messageID', messageID)
55+
const localVarPath = `/guardian/v1/messages/{messageID}/approve`
56+
.replace(`{${"messageID"}}`, encodeURIComponent(String(messageID)));
57+
// use dummy base URL string because the URL constructor only accepts absolute URLs.
58+
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
59+
let baseOptions;
60+
if (configuration) {
61+
baseOptions = configuration.baseOptions;
62+
}
63+
64+
const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
65+
const localVarHeaderParameter = {} as any;
66+
const localVarQueryParameter = {} as any;
67+
68+
// authentication BearerAuth required
69+
// http bearer authentication required
70+
await setBearerAuthToObject(localVarHeaderParameter, configuration)
71+
72+
73+
74+
setSearchParams(localVarUrlObj, localVarQueryParameter);
75+
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
76+
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
77+
78+
return {
79+
url: toPathString(localVarUrlObj),
80+
options: localVarRequestOptions,
81+
};
82+
},
83+
/**
84+
* Check if a given message is valid for EVM
85+
* @summary Evaluate an evm message to sign
86+
* @param {MessageEvaluationRequest} messageEvaluationRequest Specifies the kind of transaction
87+
* @param {*} [options] Override http request option.
88+
* @throws {RequiredError}
89+
*/
90+
evaluateMessage: async (messageEvaluationRequest: MessageEvaluationRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
91+
// verify required parameter 'messageEvaluationRequest' is not null or undefined
92+
assertParamExists('evaluateMessage', 'messageEvaluationRequest', messageEvaluationRequest)
93+
const localVarPath = `/guardian/v1/messages/evaluate`;
94+
// use dummy base URL string because the URL constructor only accepts absolute URLs.
95+
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
96+
let baseOptions;
97+
if (configuration) {
98+
baseOptions = configuration.baseOptions;
99+
}
100+
101+
const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
102+
const localVarHeaderParameter = {} as any;
103+
const localVarQueryParameter = {} as any;
104+
105+
// authentication BearerAuth required
106+
// http bearer authentication required
107+
await setBearerAuthToObject(localVarHeaderParameter, configuration)
108+
109+
110+
111+
localVarHeaderParameter['Content-Type'] = 'application/json';
112+
113+
setSearchParams(localVarUrlObj, localVarQueryParameter);
114+
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
115+
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
116+
localVarRequestOptions.data = serializeDataIfNeeded(messageEvaluationRequest, localVarRequestOptions, configuration)
117+
118+
return {
119+
url: toPathString(localVarUrlObj),
120+
options: localVarRequestOptions,
121+
};
122+
},
123+
/**
124+
* Get an evm message by id
125+
* @summary Info for a specific evm message
126+
* @param {string} messageID The id of the evm message
127+
* @param {*} [options] Override http request option.
128+
* @throws {RequiredError}
129+
*/
130+
getMessageByID: async (messageID: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
131+
// verify required parameter 'messageID' is not null or undefined
132+
assertParamExists('getMessageByID', 'messageID', messageID)
133+
const localVarPath = `/guardian/v1/messages/{messageID}`
134+
.replace(`{${"messageID"}}`, encodeURIComponent(String(messageID)));
135+
// use dummy base URL string because the URL constructor only accepts absolute URLs.
136+
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
137+
let baseOptions;
138+
if (configuration) {
139+
baseOptions = configuration.baseOptions;
140+
}
141+
142+
const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
143+
const localVarHeaderParameter = {} as any;
144+
const localVarQueryParameter = {} as any;
145+
146+
// authentication BearerAuth required
147+
// http bearer authentication required
148+
await setBearerAuthToObject(localVarHeaderParameter, configuration)
149+
150+
151+
152+
setSearchParams(localVarUrlObj, localVarQueryParameter);
153+
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
154+
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
155+
156+
return {
157+
url: toPathString(localVarUrlObj),
158+
options: localVarRequestOptions,
159+
};
160+
},
161+
}
162+
};
163+
164+
/**
165+
* MessagesApi - functional programming interface
166+
* @export
167+
*/
168+
export const MessagesApiFp = function(configuration?: Configuration) {
169+
const localVarAxiosParamCreator = MessagesApiAxiosParamCreator(configuration)
170+
return {
171+
/**
172+
* Approve a pending evm message
173+
* @summary Approve a pending evm message
174+
* @param {string} messageID id for the message
175+
* @param {*} [options] Override http request option.
176+
* @throws {RequiredError}
177+
*/
178+
async approvePendingMessage(messageID: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
179+
const localVarAxiosArgs = await localVarAxiosParamCreator.approvePendingMessage(messageID, options);
180+
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
181+
},
182+
/**
183+
* Check if a given message is valid for EVM
184+
* @summary Evaluate an evm message to sign
185+
* @param {MessageEvaluationRequest} messageEvaluationRequest Specifies the kind of transaction
186+
* @param {*} [options] Override http request option.
187+
* @throws {RequiredError}
188+
*/
189+
async evaluateMessage(messageEvaluationRequest: MessageEvaluationRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<MessageEvaluationResponse>> {
190+
const localVarAxiosArgs = await localVarAxiosParamCreator.evaluateMessage(messageEvaluationRequest, options);
191+
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
192+
},
193+
/**
194+
* Get an evm message by id
195+
* @summary Info for a specific evm message
196+
* @param {string} messageID The id of the evm message
197+
* @param {*} [options] Override http request option.
198+
* @throws {RequiredError}
199+
*/
200+
async getMessageByID(messageID: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<EVMMessage>> {
201+
const localVarAxiosArgs = await localVarAxiosParamCreator.getMessageByID(messageID, options);
202+
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
203+
},
204+
}
205+
};
206+
207+
/**
208+
* MessagesApi - factory interface
209+
* @export
210+
*/
211+
export const MessagesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
212+
const localVarFp = MessagesApiFp(configuration)
213+
return {
214+
/**
215+
* Approve a pending evm message
216+
* @summary Approve a pending evm message
217+
* @param {string} messageID id for the message
218+
* @param {*} [options] Override http request option.
219+
* @throws {RequiredError}
220+
*/
221+
approvePendingMessage(messageID: string, options?: any): AxiosPromise<void> {
222+
return localVarFp.approvePendingMessage(messageID, options).then((request) => request(axios, basePath));
223+
},
224+
/**
225+
* Check if a given message is valid for EVM
226+
* @summary Evaluate an evm message to sign
227+
* @param {MessageEvaluationRequest} messageEvaluationRequest Specifies the kind of transaction
228+
* @param {*} [options] Override http request option.
229+
* @throws {RequiredError}
230+
*/
231+
evaluateMessage(messageEvaluationRequest: MessageEvaluationRequest, options?: any): AxiosPromise<MessageEvaluationResponse> {
232+
return localVarFp.evaluateMessage(messageEvaluationRequest, options).then((request) => request(axios, basePath));
233+
},
234+
/**
235+
* Get an evm message by id
236+
* @summary Info for a specific evm message
237+
* @param {string} messageID The id of the evm message
238+
* @param {*} [options] Override http request option.
239+
* @throws {RequiredError}
240+
*/
241+
getMessageByID(messageID: string, options?: any): AxiosPromise<EVMMessage> {
242+
return localVarFp.getMessageByID(messageID, options).then((request) => request(axios, basePath));
243+
},
244+
};
245+
};
246+
247+
/**
248+
* Request parameters for approvePendingMessage operation in MessagesApi.
249+
* @export
250+
* @interface MessagesApiApprovePendingMessageRequest
251+
*/
252+
export interface MessagesApiApprovePendingMessageRequest {
253+
/**
254+
* id for the message
255+
* @type {string}
256+
* @memberof MessagesApiApprovePendingMessage
257+
*/
258+
readonly messageID: string
259+
}
260+
261+
/**
262+
* Request parameters for evaluateMessage operation in MessagesApi.
263+
* @export
264+
* @interface MessagesApiEvaluateMessageRequest
265+
*/
266+
export interface MessagesApiEvaluateMessageRequest {
267+
/**
268+
* Specifies the kind of transaction
269+
* @type {MessageEvaluationRequest}
270+
* @memberof MessagesApiEvaluateMessage
271+
*/
272+
readonly messageEvaluationRequest: MessageEvaluationRequest
273+
}
274+
275+
/**
276+
* Request parameters for getMessageByID operation in MessagesApi.
277+
* @export
278+
* @interface MessagesApiGetMessageByIDRequest
279+
*/
280+
export interface MessagesApiGetMessageByIDRequest {
281+
/**
282+
* The id of the evm message
283+
* @type {string}
284+
* @memberof MessagesApiGetMessageByID
285+
*/
286+
readonly messageID: string
287+
}
288+
289+
/**
290+
* MessagesApi - object-oriented interface
291+
* @export
292+
* @class MessagesApi
293+
* @extends {BaseAPI}
294+
*/
295+
export class MessagesApi extends BaseAPI {
296+
/**
297+
* Approve a pending evm message
298+
* @summary Approve a pending evm message
299+
* @param {MessagesApiApprovePendingMessageRequest} requestParameters Request parameters.
300+
* @param {*} [options] Override http request option.
301+
* @throws {RequiredError}
302+
* @memberof MessagesApi
303+
*/
304+
public approvePendingMessage(requestParameters: MessagesApiApprovePendingMessageRequest, options?: AxiosRequestConfig) {
305+
return MessagesApiFp(this.configuration).approvePendingMessage(requestParameters.messageID, options).then((request) => request(this.axios, this.basePath));
306+
}
307+
308+
/**
309+
* Check if a given message is valid for EVM
310+
* @summary Evaluate an evm message to sign
311+
* @param {MessagesApiEvaluateMessageRequest} requestParameters Request parameters.
312+
* @param {*} [options] Override http request option.
313+
* @throws {RequiredError}
314+
* @memberof MessagesApi
315+
*/
316+
public evaluateMessage(requestParameters: MessagesApiEvaluateMessageRequest, options?: AxiosRequestConfig) {
317+
return MessagesApiFp(this.configuration).evaluateMessage(requestParameters.messageEvaluationRequest, options).then((request) => request(this.axios, this.basePath));
318+
}
319+
320+
/**
321+
* Get an evm message by id
322+
* @summary Info for a specific evm message
323+
* @param {MessagesApiGetMessageByIDRequest} requestParameters Request parameters.
324+
* @param {*} [options] Override http request option.
325+
* @throws {RequiredError}
326+
* @memberof MessagesApi
327+
*/
328+
public getMessageByID(requestParameters: MessagesApiGetMessageByIDRequest, options?: AxiosRequestConfig) {
329+
return MessagesApiFp(this.configuration).getMessageByID(requestParameters.messageID, options).then((request) => request(this.axios, this.basePath));
330+
}
331+
}

0 commit comments

Comments
 (0)