@kuestcom/clob-client 5.8.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.
Files changed (87) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +101 -0
  3. package/dist/client.d.ts +164 -0
  4. package/dist/client.js +967 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/config.d.ts +12 -0
  7. package/dist/config.js +28 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/constants.d.ts +3 -0
  10. package/dist/constants.js +7 -0
  11. package/dist/constants.js.map +1 -0
  12. package/dist/endpoints.d.ts +67 -0
  13. package/dist/endpoints.js +82 -0
  14. package/dist/endpoints.js.map +1 -0
  15. package/dist/errors.d.ts +10 -0
  16. package/dist/errors.js +16 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/headers/index.d.ts +6 -0
  19. package/dist/headers/index.js +42 -0
  20. package/dist/headers/index.js.map +1 -0
  21. package/dist/http-helpers/index.d.ts +21 -0
  22. package/dist/http-helpers/index.js +151 -0
  23. package/dist/http-helpers/index.js.map +1 -0
  24. package/dist/index.d.ts +11 -0
  25. package/dist/index.js +10 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/order-builder/builder.d.ts +29 -0
  28. package/dist/order-builder/builder.js +52 -0
  29. package/dist/order-builder/builder.js.map +1 -0
  30. package/dist/order-builder/helpers.d.ts +50 -0
  31. package/dist/order-builder/helpers.js +276 -0
  32. package/dist/order-builder/helpers.js.map +1 -0
  33. package/dist/order-builder/index.d.ts +1 -0
  34. package/dist/order-builder/index.js +2 -0
  35. package/dist/order-builder/index.js.map +1 -0
  36. package/dist/order-utils/exchange.order.builder.d.ts +31 -0
  37. package/dist/order-utils/exchange.order.builder.js +120 -0
  38. package/dist/order-utils/exchange.order.builder.js.map +1 -0
  39. package/dist/order-utils/exchange.order.const.d.ts +13 -0
  40. package/dist/order-utils/exchange.order.const.js +28 -0
  41. package/dist/order-utils/exchange.order.const.js.map +1 -0
  42. package/dist/order-utils/index.d.ts +6 -0
  43. package/dist/order-utils/index.js +7 -0
  44. package/dist/order-utils/index.js.map +1 -0
  45. package/dist/order-utils/model/eip712.model.d.ts +25 -0
  46. package/dist/order-utils/model/eip712.model.js +2 -0
  47. package/dist/order-utils/model/eip712.model.js.map +1 -0
  48. package/dist/order-utils/model/order-side.model.d.ts +4 -0
  49. package/dist/order-utils/model/order-side.model.js +6 -0
  50. package/dist/order-utils/model/order-side.model.js.map +1 -0
  51. package/dist/order-utils/model/order.model.d.ts +112 -0
  52. package/dist/order-utils/model/order.model.js +2 -0
  53. package/dist/order-utils/model/order.model.js.map +1 -0
  54. package/dist/order-utils/model/signature-types.model.d.ts +14 -0
  55. package/dist/order-utils/model/signature-types.model.js +16 -0
  56. package/dist/order-utils/model/signature-types.model.js.map +1 -0
  57. package/dist/order-utils/utils.d.ts +1 -0
  58. package/dist/order-utils/utils.js +4 -0
  59. package/dist/order-utils/utils.js.map +1 -0
  60. package/dist/rfq-client.d.ts +64 -0
  61. package/dist/rfq-client.js +403 -0
  62. package/dist/rfq-client.js.map +1 -0
  63. package/dist/rfq-deps.d.ts +44 -0
  64. package/dist/rfq-deps.js +2 -0
  65. package/dist/rfq-deps.js.map +1 -0
  66. package/dist/signer.d.ts +22 -0
  67. package/dist/signer.js +50 -0
  68. package/dist/signer.js.map +1 -0
  69. package/dist/signing/constants.d.ts +14 -0
  70. package/dist/signing/constants.js +16 -0
  71. package/dist/signing/constants.js.map +1 -0
  72. package/dist/signing/eip712.d.ts +9 -0
  73. package/dist/signing/eip712.js +40 -0
  74. package/dist/signing/eip712.js.map +1 -0
  75. package/dist/signing/hmac.d.ts +9 -0
  76. package/dist/signing/hmac.js +58 -0
  77. package/dist/signing/hmac.js.map +1 -0
  78. package/dist/signing/index.d.ts +2 -0
  79. package/dist/signing/index.js +3 -0
  80. package/dist/signing/index.js.map +1 -0
  81. package/dist/types.d.ts +667 -0
  82. package/dist/types.js +37 -0
  83. package/dist/types.js.map +1 -0
  84. package/dist/utilities.d.ts +16 -0
  85. package/dist/utilities.js +93 -0
  86. package/dist/utilities.js.map +1 -0
  87. package/package.json +85 -0
@@ -0,0 +1,403 @@
1
+ import { parseUnits } from "viem";
2
+ import { COLLATERAL_TOKEN_DECIMALS } from "./config.js";
3
+ import { CANCEL_RFQ_QUOTE, CANCEL_RFQ_REQUEST, CREATE_RFQ_QUOTE, CREATE_RFQ_REQUEST, GET_RFQ_BEST_QUOTE, GET_RFQ_QUOTER_QUOTES, GET_RFQ_REQUESTER_QUOTES, GET_RFQ_REQUESTS, RFQ_CONFIG, RFQ_QUOTE_APPROVE, RFQ_REQUESTS_ACCEPT, } from "./endpoints.js";
4
+ import { L1_AUTH_UNAVAILABLE_ERROR, L2_AUTH_NOT_AVAILABLE } from "./errors.js";
5
+ import { createL2Headers } from "./headers/index.js";
6
+ import { DELETE, GET, POST } from "./http-helpers/index.js";
7
+ import { ROUNDING_CONFIG } from "./order-builder/helpers.js";
8
+ import { RfqMatchType, Side } from "./types.js";
9
+ import { roundDown, roundNormal } from "./utilities.js";
10
+ // RFQ list params need to be repeated e.g. quoteIds=...&quoteIds=...
11
+ const buildRepeatedQuery = (params) => {
12
+ const sp = new URLSearchParams();
13
+ if (!params)
14
+ return "";
15
+ Object.entries(params).forEach(([key, value]) => {
16
+ if (value === undefined || value === null) {
17
+ return;
18
+ }
19
+ if (Array.isArray(value)) {
20
+ for (const v of value)
21
+ sp.append(key, String(v));
22
+ }
23
+ else {
24
+ sp.append(key, String(value));
25
+ }
26
+ });
27
+ return sp.toString();
28
+ };
29
+ /**
30
+ * RfqClient provides RFQ (Request for Quote) functionality on top of a CLOB client.
31
+ */
32
+ export class RfqClient {
33
+ deps;
34
+ constructor(deps) {
35
+ this.deps = deps;
36
+ }
37
+ /**
38
+ * Creates and posts an RFQ request from user order parameters.
39
+ * Converts the order into the proper RFQ request format with asset amounts and submits it.
40
+ */
41
+ async createRfqRequest(userOrder, options) {
42
+ this.ensureL2Auth();
43
+ const { tokenID, price, side, size } = userOrder;
44
+ const tickSize = await this.deps.resolveTickSize(tokenID, options?.tickSize);
45
+ const roundConfig = ROUNDING_CONFIG[tickSize];
46
+ const roundedPrice = roundNormal(price, roundConfig.price).toFixed(roundConfig.price);
47
+ const roundedSize = roundDown(size, roundConfig.size).toFixed(roundConfig.size);
48
+ // Calculate amounts based on side
49
+ const sizeNum = Number.parseFloat(roundedSize);
50
+ const priceNum = Number.parseFloat(roundedPrice);
51
+ let amountIn;
52
+ let amountOut;
53
+ let assetIn;
54
+ let assetOut;
55
+ if (side === Side.BUY) {
56
+ // Buying: pay USDC (asset 0), receive tokens (tokenID)
57
+ amountIn = parseUnits(roundedSize, COLLATERAL_TOKEN_DECIMALS).toString();
58
+ amountOut = parseUnits((sizeNum * priceNum).toFixed(roundConfig.amount), COLLATERAL_TOKEN_DECIMALS).toString();
59
+ assetIn = tokenID;
60
+ assetOut = "0"; // USDC
61
+ }
62
+ else {
63
+ // Selling: pay tokens (tokenID), receive USDC (asset 0)
64
+ amountIn = parseUnits((sizeNum * priceNum).toFixed(roundConfig.amount), COLLATERAL_TOKEN_DECIMALS).toString();
65
+ amountOut = parseUnits(roundedSize, COLLATERAL_TOKEN_DECIMALS).toString();
66
+ assetIn = "0"; // USDC
67
+ assetOut = tokenID;
68
+ }
69
+ const payload = {
70
+ assetIn,
71
+ assetOut,
72
+ amountIn,
73
+ amountOut,
74
+ userType: this.deps.userType,
75
+ };
76
+ const endpoint = CREATE_RFQ_REQUEST;
77
+ const l2HeaderArgs = {
78
+ method: POST,
79
+ requestPath: endpoint,
80
+ body: JSON.stringify(payload),
81
+ };
82
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
83
+ return this.deps.post(`${this.deps.host}${endpoint}`, { headers, data: payload });
84
+ }
85
+ /**
86
+ * Cancels an existing RFQ request
87
+ */
88
+ async cancelRfqRequest(request) {
89
+ this.ensureL2Auth();
90
+ const endpoint = CANCEL_RFQ_REQUEST;
91
+ const l2HeaderArgs = {
92
+ method: DELETE,
93
+ requestPath: endpoint,
94
+ body: JSON.stringify(request),
95
+ };
96
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
97
+ return this.deps.del(`${this.deps.host}${endpoint}`, { headers, data: request });
98
+ }
99
+ /**
100
+ * Gets RFQ requests with optional filtering parameters
101
+ */
102
+ async getRfqRequests(params) {
103
+ this.ensureL2Auth();
104
+ const endpoint = GET_RFQ_REQUESTS;
105
+ const l2HeaderArgs = {
106
+ method: GET,
107
+ requestPath: endpoint,
108
+ };
109
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
110
+ const query = buildRepeatedQuery(params);
111
+ const url = query
112
+ ? `${this.deps.host}${endpoint}?${query}`
113
+ : `${this.deps.host}${endpoint}`;
114
+ return this.deps.get(url, { headers });
115
+ }
116
+ /**
117
+ * Creates a quote in response to an RFQ request.
118
+ * Converts user-friendly parameters into the proper RFQ quote format with asset amounts and submits it.
119
+ */
120
+ async createRfqQuote(userQuote, options) {
121
+ this.ensureL2Auth();
122
+ const { requestId, tokenID, price, side, size } = userQuote;
123
+ const tickSize = await this.deps.resolveTickSize(tokenID, options?.tickSize);
124
+ const roundConfig = ROUNDING_CONFIG[tickSize];
125
+ const roundedPrice = roundNormal(price, roundConfig.price).toFixed(roundConfig.price);
126
+ const roundedSize = roundDown(size, roundConfig.size).toFixed(roundConfig.size);
127
+ // Calculate amounts based on side
128
+ const sizeNum = Number.parseFloat(roundedSize);
129
+ const priceNum = Number.parseFloat(roundedPrice);
130
+ let amountIn;
131
+ let amountOut;
132
+ let assetIn;
133
+ let assetOut;
134
+ if (side === Side.SELL) {
135
+ // Quoter selling tokens: receive USDC (asset 0), give tokens (tokenID)
136
+ amountIn = parseUnits((sizeNum * priceNum).toFixed(roundConfig.amount), COLLATERAL_TOKEN_DECIMALS).toString();
137
+ amountOut = parseUnits(roundedSize, COLLATERAL_TOKEN_DECIMALS).toString();
138
+ assetIn = "0"; // USDC
139
+ assetOut = tokenID;
140
+ }
141
+ else {
142
+ // Quoter buying tokens: receive tokens (tokenID), give USDC (asset 0)
143
+ amountIn = parseUnits(roundedSize, COLLATERAL_TOKEN_DECIMALS).toString();
144
+ amountOut = parseUnits((sizeNum * priceNum).toFixed(roundConfig.amount), COLLATERAL_TOKEN_DECIMALS).toString();
145
+ assetIn = tokenID;
146
+ assetOut = "0"; // USDC
147
+ }
148
+ const payload = {
149
+ requestId,
150
+ assetIn,
151
+ assetOut,
152
+ amountIn,
153
+ amountOut,
154
+ };
155
+ const endpoint = CREATE_RFQ_QUOTE;
156
+ // Auto-fill userType from client's signatureType
157
+ const quoteWithUserType = {
158
+ ...payload,
159
+ userType: this.deps.userType,
160
+ };
161
+ const l2HeaderArgs = {
162
+ method: POST,
163
+ requestPath: endpoint,
164
+ body: JSON.stringify(quoteWithUserType),
165
+ };
166
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
167
+ return this.deps.post(`${this.deps.host}${endpoint}`, { headers, data: quoteWithUserType });
168
+ }
169
+ /**
170
+ * Gets quotes on requests created by the authenticated user (requester view).
171
+ * Returns quotes that others have made on your requests.
172
+ */
173
+ async getRfqRequesterQuotes(params) {
174
+ this.ensureL2Auth();
175
+ const endpoint = GET_RFQ_REQUESTER_QUOTES;
176
+ const l2HeaderArgs = {
177
+ method: GET,
178
+ requestPath: endpoint,
179
+ };
180
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
181
+ const query = buildRepeatedQuery(params);
182
+ const url = query
183
+ ? `${this.deps.host}${endpoint}?${query}`
184
+ : `${this.deps.host}${endpoint}`;
185
+ return this.deps.get(url, { headers });
186
+ }
187
+ /**
188
+ * Gets quotes created by the authenticated user (quoter view).
189
+ * Returns quotes that you have made on others' requests.
190
+ */
191
+ async getRfqQuoterQuotes(params) {
192
+ this.ensureL2Auth();
193
+ const endpoint = GET_RFQ_QUOTER_QUOTES;
194
+ const l2HeaderArgs = {
195
+ method: GET,
196
+ requestPath: endpoint,
197
+ };
198
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
199
+ const query = buildRepeatedQuery(params);
200
+ const url = query
201
+ ? `${this.deps.host}${endpoint}?${query}`
202
+ : `${this.deps.host}${endpoint}`;
203
+ return this.deps.get(url, { headers });
204
+ }
205
+ /**
206
+ * Gets the best quote for a given request ID
207
+ */
208
+ async getRfqBestQuote(params) {
209
+ this.ensureL2Auth();
210
+ const endpoint = GET_RFQ_BEST_QUOTE;
211
+ const l2HeaderArgs = {
212
+ method: GET,
213
+ requestPath: endpoint,
214
+ };
215
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
216
+ return this.deps.get(`${this.deps.host}${endpoint}`, { headers, params });
217
+ }
218
+ /**
219
+ * Cancels an existing quote
220
+ */
221
+ async cancelRfqQuote(quote) {
222
+ this.ensureL2Auth();
223
+ const endpoint = CANCEL_RFQ_QUOTE;
224
+ const l2HeaderArgs = {
225
+ method: DELETE,
226
+ requestPath: endpoint,
227
+ body: JSON.stringify(quote),
228
+ };
229
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
230
+ return this.deps.del(`${this.deps.host}${endpoint}`, { headers, data: quote });
231
+ }
232
+ /**
233
+ * Gets the RFQ configuration from the server
234
+ */
235
+ async rfqConfig() {
236
+ this.ensureL2Auth();
237
+ const endpoint = RFQ_CONFIG;
238
+ const l2HeaderArgs = {
239
+ method: GET,
240
+ requestPath: endpoint,
241
+ };
242
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
243
+ return this.deps.get(`${this.deps.host}${endpoint}`, { headers });
244
+ }
245
+ /**
246
+ * Accepts a quote and creates an order (taker side)
247
+ * This fetches the request details, creates an order, and submits the acceptance
248
+ */
249
+ async acceptRfqQuote(payload) {
250
+ this.ensureL2Auth();
251
+ const rfqQuotes = await this.getRfqRequesterQuotes({
252
+ quoteIds: [payload.quoteId],
253
+ });
254
+ // Check for HTTP errors first (network failures, auth errors, server errors)
255
+ if ("error" in rfqQuotes) {
256
+ const errorMsg = typeof rfqQuotes.error === "string"
257
+ ? rfqQuotes.error
258
+ : JSON.stringify(rfqQuotes.error);
259
+ throw new Error(`Error fetching RFQ quote: ${errorMsg}`);
260
+ }
261
+ if (!rfqQuotes?.data || rfqQuotes.data.length === 0) {
262
+ throw new Error("RFQ quote not found");
263
+ }
264
+ const rfqQuote = rfqQuotes.data[0];
265
+ // Create an order, matching the quote
266
+ const orderPayload = this.getRequestOrderCreationPayload(rfqQuote);
267
+ const orderSide = orderPayload.side;
268
+ const size = orderPayload.size;
269
+ const token = orderPayload.token;
270
+ const order = await this.deps.createOrder({
271
+ tokenID: token,
272
+ price: orderPayload.price,
273
+ size: Number.parseFloat(size),
274
+ side: orderSide,
275
+ expiration: payload.expiration,
276
+ });
277
+ if (!order) {
278
+ throw new Error("Error creating order");
279
+ }
280
+ const acceptPayload = {
281
+ requestId: payload.requestId,
282
+ quoteId: payload.quoteId,
283
+ owner: this.deps.creds.key,
284
+ ...order,
285
+ expiration: Number.parseInt(order.expiration, 10),
286
+ side: orderSide,
287
+ salt: Number.parseInt(order.salt.toString(), 10),
288
+ };
289
+ const endpoint = RFQ_REQUESTS_ACCEPT;
290
+ const l2HeaderArgs = {
291
+ method: POST,
292
+ requestPath: endpoint,
293
+ body: JSON.stringify(acceptPayload),
294
+ };
295
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
296
+ return this.deps.post(`${this.deps.host}${endpoint}`, { headers, data: acceptPayload });
297
+ }
298
+ /**
299
+ * Approves a quote and creates an order (maker side)
300
+ * This fetches the quote details, creates an order, and submits the approval
301
+ */
302
+ async approveRfqOrder(payload) {
303
+ this.ensureL2Auth();
304
+ const rfqQuotes = await this.getRfqQuoterQuotes({
305
+ quoteIds: [payload.quoteId],
306
+ });
307
+ // Check for HTTP errors first (network failures, auth errors, server errors)
308
+ if ("error" in rfqQuotes) {
309
+ const errorMsg = typeof rfqQuotes.error === "string"
310
+ ? rfqQuotes.error
311
+ : JSON.stringify(rfqQuotes.error);
312
+ throw new Error(`Error fetching RFQ quote: ${errorMsg}`);
313
+ }
314
+ if (!rfqQuotes?.data || rfqQuotes.data.length === 0) {
315
+ throw new Error("RFQ quote not found");
316
+ }
317
+ const rfqQuote = rfqQuotes.data[0];
318
+ // Create an order based on the quote details
319
+ const side = rfqQuote.side === "BUY" ? Side.BUY : Side.SELL;
320
+ const size = rfqQuote.side === "BUY" ? rfqQuote.sizeIn : rfqQuote.sizeOut;
321
+ const order = await this.deps.createOrder({
322
+ tokenID: rfqQuote.token,
323
+ price: rfqQuote.price,
324
+ size: Number.parseFloat(size),
325
+ side: side,
326
+ expiration: payload.expiration,
327
+ });
328
+ if (!order) {
329
+ throw new Error("Error creating order");
330
+ }
331
+ const approvePayload = {
332
+ requestId: payload.requestId,
333
+ quoteId: payload.quoteId,
334
+ owner: this.deps.creds.key,
335
+ ...order,
336
+ expiration: Number.parseInt(order.expiration, 10),
337
+ side: side,
338
+ salt: Number.parseInt(order.salt.toString(), 10),
339
+ };
340
+ const endpoint = RFQ_QUOTE_APPROVE;
341
+ const l2HeaderArgs = {
342
+ method: POST,
343
+ requestPath: endpoint,
344
+ body: JSON.stringify(approvePayload),
345
+ };
346
+ const headers = await createL2Headers(this.deps.signer, this.deps.creds, l2HeaderArgs, this.deps.useServerTime ? await this.deps.getServerTime() : undefined);
347
+ return this.deps.post(`${this.deps.host}${endpoint}`, { headers, data: approvePayload });
348
+ }
349
+ /**
350
+ * Ensures L2 authentication is available for RFQ endpoints.
351
+ */
352
+ ensureL2Auth() {
353
+ if (this.deps.signer === undefined) {
354
+ throw L1_AUTH_UNAVAILABLE_ERROR;
355
+ }
356
+ if (this.deps.creds === undefined) {
357
+ throw L2_AUTH_NOT_AVAILABLE;
358
+ }
359
+ }
360
+ getRequestOrderCreationPayload(quote) {
361
+ const quoteSide = quote.side;
362
+ const matchType = quote.matchType;
363
+ let side;
364
+ let token;
365
+ let size;
366
+ let price;
367
+ switch (matchType) {
368
+ case RfqMatchType.COMPLEMENTARY:
369
+ // For BUY <> SELL and SELL <> BUY
370
+ // the order side is opposite the quote side
371
+ side = quoteSide === "BUY" ? Side.SELL : Side.BUY;
372
+ token = quote.token;
373
+ size = side === Side.BUY ? quote.sizeOut : quote.sizeIn;
374
+ price = quote.price;
375
+ return {
376
+ token,
377
+ side,
378
+ size,
379
+ price,
380
+ };
381
+ case RfqMatchType.MINT:
382
+ case RfqMatchType.MERGE:
383
+ // BUY<> BUY, SELL <> SELL
384
+ // the order side is the same as the quote side
385
+ side = quoteSide === "BUY" ? Side.BUY : Side.SELL;
386
+ token = quote.complement;
387
+ size = side === Side.BUY ? quote.sizeIn : quote.sizeOut;
388
+ // For a MINT or a MERGE, the requester price is the inverse of the quote price
389
+ // 95c Quote to BUY NO, implies that the Requester is buying YES at 5c
390
+ // 45c Quote to SELL NO, implies the Requester is selling YES at 55c
391
+ price = 1 - quote.price;
392
+ return {
393
+ token,
394
+ side,
395
+ size,
396
+ price,
397
+ };
398
+ default:
399
+ throw new Error("invalid match type");
400
+ }
401
+ }
402
+ }
403
+ //# sourceMappingURL=rfq-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rfq-client.js","sourceRoot":"","sources":["../src/rfq-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { RequestOptions } from "./http-helpers/index.ts";
2
+ import type { SignedOrder } from "./order-utils/index.ts";
3
+ import type { ClobSigner } from "./signer.ts";
4
+ import type { AcceptQuoteParams, ApiKeyCreds, ApproveOrderParams, CancelRfqQuoteParams, CancelRfqRequestParams, CreateOrderOptions, GetRfqBestQuoteParams, GetRfqQuotesParams, GetRfqRequestsParams, RfqQuote, RfqQuoteResponse, RfqQuotesResponse, RfqRequestResponse, RfqRequestsResponse, RfqUserOrder, RfqUserQuote, TickSize, UserOrder } from "./types.ts";
5
+ /**
6
+ * Minimal surface from the core CLOB client that RFQ functionality depends on.
7
+ */
8
+ export interface RfqDeps {
9
+ host: string;
10
+ signer?: ClobSigner;
11
+ creds?: ApiKeyCreds;
12
+ useServerTime?: boolean;
13
+ geoBlockToken?: string;
14
+ /**
15
+ * Numeric user type (backed by SignatureType in the order builder).
16
+ */
17
+ userType: number;
18
+ getServerTime(): Promise<number>;
19
+ getTickSize(tokenID: string): Promise<TickSize>;
20
+ resolveTickSize(tokenID: string, tickSize?: TickSize): Promise<TickSize>;
21
+ createOrder(userOrder: UserOrder, options?: Partial<CreateOrderOptions>): Promise<SignedOrder>;
22
+ get(endpoint: string, options?: RequestOptions): Promise<any>;
23
+ post(endpoint: string, options?: RequestOptions): Promise<any>;
24
+ put(endpoint: string, options?: RequestOptions): Promise<any>;
25
+ del(endpoint: string, options?: RequestOptions): Promise<any>;
26
+ }
27
+ /**
28
+ * Public RFQ surface exposed from a CLOB client.
29
+ *
30
+ * This is what `ClobClient.rfq` is typed as, and what `RfqClient` implements.
31
+ */
32
+ export interface IRfqClient {
33
+ createRfqRequest(userOrder: RfqUserOrder, options?: Partial<CreateOrderOptions>): Promise<RfqRequestResponse>;
34
+ cancelRfqRequest(request: CancelRfqRequestParams): Promise<"OK">;
35
+ getRfqRequests(params?: GetRfqRequestsParams): Promise<RfqRequestsResponse>;
36
+ createRfqQuote(userQuote: RfqUserQuote, options?: Partial<CreateOrderOptions>): Promise<RfqQuoteResponse>;
37
+ getRfqRequesterQuotes(params?: GetRfqQuotesParams): Promise<RfqQuotesResponse>;
38
+ getRfqQuoterQuotes(params?: GetRfqQuotesParams): Promise<RfqQuotesResponse>;
39
+ getRfqBestQuote(params?: GetRfqBestQuoteParams): Promise<RfqQuote>;
40
+ cancelRfqQuote(quote: CancelRfqQuoteParams): Promise<"OK">;
41
+ rfqConfig(): Promise<any>;
42
+ acceptRfqQuote(payload: AcceptQuoteParams): Promise<"OK">;
43
+ approveRfqOrder(payload: ApproveOrderParams): Promise<"OK">;
44
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rfq-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rfq-deps.js","sourceRoot":"","sources":["../src/rfq-deps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import type { Address, WalletClient } from "viem";
2
+ type TypedDataDomain = Record<string, unknown>;
3
+ type TypedDataTypes = Record<string, Array<{
4
+ name: string;
5
+ type: string;
6
+ }>>;
7
+ type TypedDataValue = Record<string, unknown>;
8
+ interface EthersSigner {
9
+ _signTypedData(domain: TypedDataDomain, types: TypedDataTypes, value: TypedDataValue): Promise<string>;
10
+ getAddress(): Promise<string>;
11
+ }
12
+ export type ClobSigner = EthersSigner | WalletClient;
13
+ export declare const getWalletClientAddress: (walletClient: WalletClient) => Promise<Address>;
14
+ export declare const getSignerAddress: (signer: ClobSigner) => Promise<string>;
15
+ export declare const signTypedDataWithSigner: ({ signer, domain, types, value, primaryType, }: {
16
+ signer: ClobSigner;
17
+ domain: TypedDataDomain;
18
+ types: TypedDataTypes;
19
+ value: TypedDataValue;
20
+ primaryType?: string;
21
+ }) => Promise<string>;
22
+ export {};
package/dist/signer.js ADDED
@@ -0,0 +1,50 @@
1
+ const isEthersTypedDataSigner = (signer) =>
2
+ // eslint-disable-next-line no-underscore-dangle
3
+ typeof signer._signTypedData === "function";
4
+ const isWalletClientSigner = (signer) => typeof signer.signTypedData === "function";
5
+ export const getWalletClientAddress = async (walletClient) => {
6
+ const accountAddress = walletClient.account?.address;
7
+ if (typeof accountAddress === "string" && accountAddress.length > 0) {
8
+ return accountAddress;
9
+ }
10
+ if (typeof walletClient.requestAddresses === "function") {
11
+ const [address] = await walletClient.requestAddresses();
12
+ if (typeof address === "string" && address.length > 0) {
13
+ return address;
14
+ }
15
+ }
16
+ if (typeof walletClient.getAddresses === "function") {
17
+ const [address] = await walletClient.getAddresses();
18
+ if (typeof address === "string" && address.length > 0) {
19
+ return address;
20
+ }
21
+ }
22
+ throw new Error("wallet client is missing account address");
23
+ };
24
+ export const getSignerAddress = async (signer) => {
25
+ if (isEthersTypedDataSigner(signer)) {
26
+ return signer.getAddress();
27
+ }
28
+ if (isWalletClientSigner(signer)) {
29
+ return getWalletClientAddress(signer);
30
+ }
31
+ throw new Error("unsupported signer type");
32
+ };
33
+ export const signTypedDataWithSigner = async ({ signer, domain, types, value, primaryType, }) => {
34
+ if (isEthersTypedDataSigner(signer)) {
35
+ // eslint-disable-next-line no-underscore-dangle
36
+ return signer._signTypedData(domain, types, value);
37
+ }
38
+ if (isWalletClientSigner(signer)) {
39
+ const account = signer.account ?? (await getWalletClientAddress(signer));
40
+ return signer.signTypedData({
41
+ account,
42
+ domain,
43
+ types,
44
+ primaryType,
45
+ message: value,
46
+ });
47
+ }
48
+ throw new Error("unsupported signer type");
49
+ };
50
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAiBA,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAA0B,EAAE;AAC3E,gDAAgD;AAChD,OAAQ,MAAuB,CAAC,cAAc,KAAK,UAAU,CAAC;AAElE,MAAM,oBAAoB,GAAG,CAAC,MAAkB,EAA0B,EAAE,CACxE,OAAQ,MAAuB,CAAC,aAAa,KAAK,UAAU,CAAC;AAEjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,YAA0B,EAAoB,EAAE;IACzF,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;IACrD,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,cAAyB,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,YAAY,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;QACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,OAAkB,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,IAAI,OAAO,YAAY,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,CAAC;QACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,OAAkB,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAkB,EAAmB,EAAE;IAC1E,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,EAC1C,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,EACL,WAAW,GAOd,EAAmB,EAAE;IAClB,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,gDAAgD;QAChD,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,OAAO,MAAM,CAAC,aAAa,CAAC;YACxB,OAAO;YACP,MAAM;YACN,KAAK;YACL,WAAW;YACX,OAAO,EAAE,KAAK;SAC+B,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const CLOB_DOMAIN_NAME = "ClobAuthDomain";
2
+ export declare const CLOB_VERSION = "1";
3
+ export declare const MSG_TO_SIGN = "This message attests that I control the given wallet";
4
+ export declare const CLOB_DOMAIN: {
5
+ name: string;
6
+ version: string;
7
+ chainId: number;
8
+ };
9
+ export declare const CLOB_TYPES: {
10
+ ClobAuth: {
11
+ name: string;
12
+ type: string;
13
+ }[];
14
+ };
@@ -0,0 +1,16 @@
1
+ export const CLOB_DOMAIN_NAME = "ClobAuthDomain";
2
+ export const CLOB_VERSION = "1";
3
+ export const MSG_TO_SIGN = "This message attests that I control the given wallet";
4
+ export const CLOB_DOMAIN = {
5
+ name: CLOB_DOMAIN_NAME,
6
+ version: CLOB_VERSION,
7
+ chainId: 1,
8
+ };
9
+ export const CLOB_TYPES = {
10
+ ClobAuth: [
11
+ { name: "address", type: "address" },
12
+ { name: "timestamp", type: "string" },
13
+ { name: "message", type: "string" },
14
+ ],
15
+ };
16
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/signing/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAG,sDAAsD,CAAC;AAElF,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,CAAC;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,QAAQ,EAAE;QACN,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;KACtC;CACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ClobSigner } from "../signer.ts";
2
+ import type { Chain } from "../types.ts";
3
+ /**
4
+ * Builds the canonical Kuest CLOB EIP712 signature
5
+ * @param signer
6
+ * @param ts
7
+ * @returns string
8
+ */
9
+ export declare const buildClobEip712Signature: (signer: ClobSigner, chainId: Chain, timestamp: number, nonce: number) => Promise<string>;
@@ -0,0 +1,40 @@
1
+ import { getSignerAddress, signTypedDataWithSigner } from "../signer.js";
2
+ import { MSG_TO_SIGN } from "./constants.js";
3
+ /**
4
+ * Builds the canonical Kuest CLOB EIP712 signature
5
+ * @param signer
6
+ * @param ts
7
+ * @returns string
8
+ */
9
+ export const buildClobEip712Signature = async (signer, chainId, timestamp, nonce) => {
10
+ const address = await getSignerAddress(signer);
11
+ const ts = `${timestamp}`;
12
+ const domain = {
13
+ name: "ClobAuthDomain",
14
+ version: "1",
15
+ chainId: chainId,
16
+ };
17
+ const types = {
18
+ ClobAuth: [
19
+ { name: "address", type: "address" },
20
+ { name: "timestamp", type: "string" },
21
+ { name: "nonce", type: "uint256" },
22
+ { name: "message", type: "string" },
23
+ ],
24
+ };
25
+ const value = {
26
+ address,
27
+ timestamp: ts,
28
+ nonce,
29
+ message: MSG_TO_SIGN,
30
+ };
31
+ const sig = await signTypedDataWithSigner({
32
+ signer,
33
+ domain,
34
+ types,
35
+ value,
36
+ primaryType: "ClobAuth",
37
+ });
38
+ return sig;
39
+ };
40
+ //# sourceMappingURL=eip712.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip712.js","sourceRoot":"","sources":["../../src/signing/eip712.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EACzC,MAAkB,EAClB,OAAc,EACd,SAAiB,EACjB,KAAa,EACE,EAAE;IACjB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,CAAC;IAE1B,MAAM,MAAM,GAAG;QACX,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,OAAO;KACnB,CAAC;IAEF,MAAM,KAAK,GAAG;QACV,QAAQ,EAAE;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;YACrC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;SACtC;KACJ,CAAC;IACF,MAAM,KAAK,GAAG;QACV,OAAO;QACP,SAAS,EAAE,EAAE;QACb,KAAK;QACL,OAAO,EAAE,WAAW;KACvB,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC;QACtC,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,WAAW,EAAE,UAAU;KAC1B,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACf,CAAC,CAAC"}