@velora-dex/sdk 9.1.0 → 9.2.0-dev.0

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 (33) hide show
  1. package/dist/examples/wagmi.d.ts +121 -10
  2. package/dist/examples/wagmi.d.ts.map +1 -1
  3. package/dist/helpers/providers/helpers.d.ts +1 -1
  4. package/dist/helpers/providers/helpers.d.ts.map +1 -1
  5. package/dist/index.d.ts +3 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts +6 -0
  8. package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts.map +1 -1
  9. package/dist/methods/delta/helpers/types.d.ts +2 -1
  10. package/dist/methods/delta/helpers/types.d.ts.map +1 -1
  11. package/dist/methods/delta/index.d.ts +2 -1
  12. package/dist/methods/delta/index.d.ts.map +1 -1
  13. package/dist/methods/delta/preSignDeltaOrder.d.ts +17 -0
  14. package/dist/methods/delta/preSignDeltaOrder.d.ts.map +1 -0
  15. package/dist/methods/delta/signDeltaOrder.d.ts +0 -3
  16. package/dist/methods/delta/signDeltaOrder.d.ts.map +1 -1
  17. package/dist/sdk/partial.d.ts +3 -1
  18. package/dist/sdk/partial.d.ts.map +1 -1
  19. package/dist/sdk.cjs.development.js +152 -1
  20. package/dist/sdk.cjs.development.js.map +1 -1
  21. package/dist/sdk.cjs.production.min.js +1 -1
  22. package/dist/sdk.cjs.production.min.js.map +1 -1
  23. package/dist/sdk.esm.js +152 -2
  24. package/dist/sdk.esm.js.map +1 -1
  25. package/package.json +5 -4
  26. package/src/helpers/providers/helpers.ts +5 -5
  27. package/src/index.ts +6 -0
  28. package/src/methods/delta/helpers/buildDeltaOrderData.ts +1 -1
  29. package/src/methods/delta/helpers/types.ts +2 -0
  30. package/src/methods/delta/index.ts +8 -0
  31. package/src/methods/delta/preSignDeltaOrder.ts +157 -0
  32. package/src/methods/delta/signDeltaOrder.ts +0 -6
  33. package/src/sdk/partial.ts +3 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velora-dex/sdk",
3
- "version": "9.1.0",
3
+ "version": "9.2.0-dev.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/sdk.esm.js",
6
6
  "typings": "dist/index.d.ts",
@@ -68,8 +68,8 @@
68
68
  "typedoc-plugin-missing-exports": "^3.0.0",
69
69
  "typedoc-plugin-replace-text": "^4.0.0",
70
70
  "typescript": "^5.6.3",
71
- "viem": "^2.21.39",
72
- "wagmi": "^2.12.25",
71
+ "viem": "^2.39.0",
72
+ "wagmi": "^2.19.4",
73
73
  "web3": "^4.14.0"
74
74
  },
75
75
  "peerDependencies": {
@@ -94,7 +94,8 @@
94
94
  },
95
95
  "dependencies": {
96
96
  "@paraswap/core": "2.4.0",
97
- "ts-essentials": "^10.0.3"
97
+ "ts-essentials": "^10.0.3",
98
+ "viem": "^2.21.0"
98
99
  },
99
100
  "author": "Velora",
100
101
  "description": "Velora SDK",
@@ -5,10 +5,10 @@ import { TypedDataField } from '../../methods/common/orders/buildOrderData';
5
5
  // may be overly strict, but reliable
6
6
  const baseTypeRegex = /^([^\x5b]*)(\x5b|$)/;
7
7
 
8
- export function findPrimaryType(
9
- types: Record<string, TypedDataField[]>
10
- ): string {
11
- const candidates = Object.keys(types);
8
+ export function findPrimaryType<P extends string>(
9
+ types: Record<P, TypedDataField[]>
10
+ ): P {
11
+ const candidates = Object.keys(types) as P[];
12
12
  const candidatesSet = new Set(candidates);
13
13
 
14
14
  candidates.forEach((candidate) => {
@@ -21,7 +21,7 @@ export function findPrimaryType(
21
21
  if (!baseType) return;
22
22
 
23
23
  // if type was referred to as a child of another type, it can't be the primaryType
24
- candidatesSet.delete(baseType);
24
+ candidatesSet.delete(baseType as P);
25
25
  });
26
26
  });
27
27
 
package/src/index.ts CHANGED
@@ -161,6 +161,10 @@ import {
161
161
  constructSignDeltaOrder,
162
162
  SignDeltaOrderFunctions,
163
163
  } from './methods/delta/signDeltaOrder';
164
+ import {
165
+ constructPreSignDeltaOrder,
166
+ PreSignDeltaOrderFunctions,
167
+ } from './methods/delta/preSignDeltaOrder';
164
168
  import {
165
169
  GetDeltaContractFunctions,
166
170
  constructGetDeltaContract,
@@ -288,6 +292,7 @@ export {
288
292
  constructBuildDeltaOrder,
289
293
  constructPostDeltaOrder,
290
294
  constructSignDeltaOrder,
295
+ constructPreSignDeltaOrder,
291
296
  constructGetDeltaContract,
292
297
  constructGetDeltaPrice,
293
298
  constructGetDeltaOrders,
@@ -379,6 +384,7 @@ export type {
379
384
  PostDeltaOrderFunctions,
380
385
  PostDeltaOrderParams,
381
386
  SignDeltaOrderFunctions,
387
+ PreSignDeltaOrderFunctions,
382
388
  GetDeltaContractFunctions,
383
389
  GetDeltaPriceFunctions,
384
390
  GetDeltaOrdersFunctions,
@@ -59,7 +59,7 @@ type SignDeltaOrderInput = {
59
59
  chainId: number;
60
60
  };
61
61
 
62
- function produceDeltaOrderTypedData({
62
+ export function produceDeltaOrderTypedData({
63
63
  orderInput,
64
64
  chainId,
65
65
  paraswapDeltaAddress,
@@ -54,6 +54,7 @@ export type Bridge = {
54
54
 
55
55
  export type DeltaAuctionStatus =
56
56
  | 'NOT_STARTED'
57
+ | 'AWAITING_PRE_SIGNATURE'
57
58
  | 'RUNNING'
58
59
  | 'EXECUTING'
59
60
  | 'EXECUTED'
@@ -69,6 +70,7 @@ type DeltaAuctionTransaction = {
69
70
  bidId: string | null;
70
71
  blockNumber: number;
71
72
  blockHash: string;
73
+ blockTimestamp: string | null; // ISO string, null for older Orders
72
74
  gasUsed: bigint;
73
75
  gasPrice: bigint;
74
76
  blobGasUsed: bigint;
@@ -46,6 +46,10 @@ import {
46
46
  CancelDeltaOrderFunctions,
47
47
  constructCancelDeltaOrder,
48
48
  } from './cancelDeltaOrder';
49
+ import {
50
+ constructPreSignDeltaOrder,
51
+ PreSignDeltaOrderFunctions,
52
+ } from './preSignDeltaOrder';
49
53
 
50
54
  export type SubmitDeltaOrderParams = BuildDeltaOrderDataParams & {
51
55
  /** @description designates the Order as being able to be partially filled, as opposed to fill-or-kill */
@@ -66,6 +70,7 @@ export const constructSubmitDeltaOrder = (
66
70
  options: ConstructProviderFetchInput<any, 'signTypedDataCall'>
67
71
  ): SubmitDeltaOrderFuncs => {
68
72
  const { buildDeltaOrder } = constructBuildDeltaOrder(options);
73
+ // in the normal submitOrderFlow preSign tx is not involved
69
74
  const { signDeltaOrder } = constructSignDeltaOrder(options);
70
75
  const { postDeltaOrder } = constructPostDeltaOrder(options);
71
76
 
@@ -101,6 +106,7 @@ export type DeltaOrderHandlers<T> = SubmitDeltaOrderFuncs &
101
106
  IsTokenSupportedInDeltaFunctions &
102
107
  PostDeltaOrderFunctions &
103
108
  SignDeltaOrderFunctions &
109
+ PreSignDeltaOrderFunctions<T> &
104
110
  CancelDeltaOrderFunctions;
105
111
 
106
112
  /** @description construct SDK with every Delta Order-related method, fetching from API and Order signing */
@@ -124,6 +130,7 @@ export const constructAllDeltaOrdersHandlers = <TxResponse>(
124
130
 
125
131
  const deltaOrdersBuild = constructBuildDeltaOrder(options);
126
132
  const deltaOrdersSign = constructSignDeltaOrder(options);
133
+ const deltaOrdersPreSign = constructPreSignDeltaOrder(options);
127
134
  const deltaOrdersPost = constructPostDeltaOrder(options);
128
135
 
129
136
  const deltaOrdersCancel = constructCancelDeltaOrder(options);
@@ -139,6 +146,7 @@ export const constructAllDeltaOrdersHandlers = <TxResponse>(
139
146
  ...deltaOrdersSubmit,
140
147
  ...deltaOrdersBuild,
141
148
  ...deltaOrdersSign,
149
+ ...deltaOrdersPreSign,
142
150
  ...deltaOrdersPost,
143
151
  ...deltaOrdersCancel,
144
152
  };
@@ -0,0 +1,157 @@
1
+ import { hashTypedData } from 'viem/utils';
2
+ import type {
3
+ ConstructProviderFetchInput,
4
+ RequestParameters,
5
+ TxSendOverrides,
6
+ } from '../../types';
7
+ import {
8
+ produceDeltaOrderTypedData,
9
+ SignableDeltaOrderData,
10
+ } from './helpers/buildDeltaOrderData';
11
+ import { sanitizeDeltaOrderData } from './helpers/misc';
12
+ import { constructGetDeltaContract, DeltaAuctionOrder } from '../..';
13
+ import { ExtractAbiMethodNames } from '../../helpers/misc';
14
+ import { findPrimaryType } from '../../helpers/providers/helpers';
15
+
16
+ type HashDeltaOrderTypedData = (
17
+ signableOrderData: SignableDeltaOrderData
18
+ ) => string;
19
+
20
+ type HashDeltaOrder = (
21
+ orderData: DeltaAuctionOrder,
22
+ requestParams?: RequestParameters
23
+ ) => Promise<string>;
24
+
25
+ export type SetDeltaOrderPreSignature<T> = (
26
+ orderHash: string,
27
+ overrides?: TxSendOverrides,
28
+ requestParams?: RequestParameters
29
+ ) => Promise<T>;
30
+
31
+ export type PreSignDeltaOrder<T> = (
32
+ signableOrderData: SignableDeltaOrderData,
33
+ overrides?: TxSendOverrides,
34
+ requestParams?: RequestParameters
35
+ ) => Promise<T>;
36
+
37
+ export type PreSignDeltaOrderFunctions<T> = {
38
+ hashDeltaOrderTypedData: HashDeltaOrderTypedData;
39
+ hashDeltaOrder: HashDeltaOrder;
40
+ setDeltaOrderPreSignature: SetDeltaOrderPreSignature<T>;
41
+ preSignDeltaOrder: PreSignDeltaOrder<T>;
42
+ };
43
+
44
+ const PreSignatureModuleAbi = [
45
+ {
46
+ inputs: [
47
+ {
48
+ internalType: 'bytes32',
49
+ name: 'orderHash',
50
+ type: 'bytes32',
51
+ },
52
+ {
53
+ internalType: 'bool',
54
+ name: 'preSigned',
55
+ type: 'bool',
56
+ },
57
+ ],
58
+ name: 'setPreSignature',
59
+ outputs: [],
60
+ stateMutability: 'nonpayable',
61
+ type: 'function',
62
+ },
63
+ ] as const;
64
+
65
+ type AvailableMethods = ExtractAbiMethodNames<typeof PreSignatureModuleAbi>;
66
+
67
+ // returns whatever `contractCaller` returns
68
+ // to allow for better versatility
69
+ export const constructPreSignDeltaOrder = <T>(
70
+ options: ConstructProviderFetchInput<T, 'transactCall'>
71
+ ): PreSignDeltaOrderFunctions<T> => {
72
+ const hashDeltaOrderTypedData: HashDeltaOrderTypedData = (typedData) => {
73
+ // types allow to pass OrderData & extra_stuff, but tx will break like that
74
+ const typedDataOnly: SignableDeltaOrderData = {
75
+ ...typedData,
76
+ data: sanitizeDeltaOrderData(typedData.data),
77
+ };
78
+
79
+ const orderHash = produceDeltaOrderHash(typedDataOnly);
80
+
81
+ return orderHash;
82
+ };
83
+ // cached internally
84
+ const { getDeltaContract } = constructGetDeltaContract(options);
85
+
86
+ const hashDeltaOrder: HashDeltaOrder = async (orderData, requestParams) => {
87
+ const ParaswapDelta = await getDeltaContract(requestParams);
88
+ if (!ParaswapDelta) {
89
+ throw new Error(`Delta is not available on chain ${options.chainId}`);
90
+ }
91
+
92
+ const typedData = produceDeltaOrderTypedData({
93
+ orderInput: orderData,
94
+ chainId: options.chainId,
95
+ paraswapDeltaAddress: ParaswapDelta,
96
+ });
97
+ return hashDeltaOrderTypedData(typedData);
98
+ };
99
+
100
+ const setDeltaOrderPreSignature: SetDeltaOrderPreSignature<T> = async (
101
+ orderHash,
102
+ overrides = {},
103
+ requestParams
104
+ ) => {
105
+ const ParaswapDelta = await getDeltaContract(requestParams);
106
+ if (!ParaswapDelta) {
107
+ throw new Error(`Delta is not available on chain ${options.chainId}`);
108
+ }
109
+
110
+ const res = await options.contractCaller.transactCall<AvailableMethods>({
111
+ address: ParaswapDelta,
112
+ abi: PreSignatureModuleAbi,
113
+ contractMethod: 'setPreSignature',
114
+ args: [orderHash, true],
115
+ overrides,
116
+ });
117
+
118
+ return res;
119
+ };
120
+
121
+ const preSignDeltaOrder: PreSignDeltaOrder<T> = async (
122
+ signableOrderData,
123
+ overrides = {},
124
+ requestParams
125
+ ) => {
126
+ const orderHash = hashDeltaOrderTypedData(signableOrderData);
127
+ const res = await setDeltaOrderPreSignature(
128
+ orderHash,
129
+ overrides,
130
+ requestParams
131
+ );
132
+ return res;
133
+ };
134
+
135
+ return {
136
+ hashDeltaOrderTypedData,
137
+ hashDeltaOrder,
138
+ setDeltaOrderPreSignature,
139
+ preSignDeltaOrder,
140
+ };
141
+ };
142
+
143
+ export function produceDeltaOrderHash(
144
+ typedData: SignableDeltaOrderData
145
+ ): string {
146
+ return hashTypedData({
147
+ domain: {
148
+ name: typedData.domain.name,
149
+ version: typedData.domain.version,
150
+ chainId: typedData.domain.chainId,
151
+ verifyingContract: typedData.domain.verifyingContract as `0x${string}`,
152
+ },
153
+ types: typedData.types,
154
+ primaryType: findPrimaryType(typedData.types),
155
+ message: typedData.data,
156
+ });
157
+ }
@@ -2,12 +2,6 @@ import type { ConstructProviderFetchInput } from '../../types';
2
2
  import { SignableDeltaOrderData } from './helpers/buildDeltaOrderData';
3
3
  import { sanitizeDeltaOrderData } from './helpers/misc';
4
4
 
5
- export type SignLimitOrderFunctions = {
6
- signLimitOrder: (
7
- signableOrderData: SignableDeltaOrderData
8
- ) => Promise<string>;
9
- };
10
-
11
5
  type SignDeltaOrder = (
12
6
  signableOrderData: SignableDeltaOrderData
13
7
  ) => Promise<string>;
@@ -12,6 +12,7 @@ import type { CancelNFTOrderFunctions } from '../methods/nftOrders/cancelOrder';
12
12
  import type { ApproveTokenForNFTOrderFunctions } from '../methods/nftOrders/approveForOrder';
13
13
  import type { FillOrderDirectlyFunctions } from '../methods/limitOrders/fillOrderDirectly';
14
14
  import type { ApproveTokenForDeltaFunctions } from '../methods/delta/approveForDelta';
15
+ import type { PreSignDeltaOrderFunctions } from '../methods/delta/preSignDeltaOrder';
15
16
  import { API_URL, DEFAULT_VERSION } from '../constants';
16
17
 
17
18
  export type SDKConfig<TxResponse = any> = ConstructProviderFetchInput<
@@ -50,7 +51,8 @@ type InferWithTxResponse<
50
51
  ApproveTokenForLimitOrderFunctions<TxResponse>,
51
52
  CancelNFTOrderFunctions<TxResponse>,
52
53
  ApproveTokenForNFTOrderFunctions<TxResponse>,
53
- ApproveTokenForDeltaFunctions<TxResponse>
54
+ ApproveTokenForDeltaFunctions<TxResponse>,
55
+ PreSignDeltaOrderFunctions<TxResponse>
54
56
  ]
55
57
  // then merge IntersectionOfReturns<Funcs> with them recursively
56
58
  >