@1stdex/first-sdk 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,31 +4,26 @@ exports.approveControllerAsOrderOperator = exports.setOrderOperatorApproval = vo
4
4
  const viem_1 = require("viem");
5
5
  const chain_1 = require("../../constants/chain-configs/chain");
6
6
  const addresses_1 = require("../../constants/chain-configs/addresses");
7
- const setOrderOperatorApproval = async ({ chainId, walletClient, operator, approved, options, }) => {
8
- if (!walletClient.account) {
9
- throw new Error('Account is not found');
10
- }
7
+ const build_transaction_1 = require("../../utils/build-transaction");
8
+ const operator_1 = require("../../entities/open-order/apis/operator");
9
+ const setOrderOperatorApproval = async ({ chainId, userAddress, operator, approved, options, }) => {
11
10
  const publicClient = (0, viem_1.createPublicClient)({
12
11
  chain: chain_1.CHAIN_MAP[chainId],
13
12
  transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
14
13
  });
15
- const { request } = await publicClient.simulateContract({
16
- account: walletClient.account,
14
+ const isOrderOperator = await (0, operator_1.fetchIsOrderOperator)(publicClient, chainId, userAddress);
15
+ if (!isOrderOperator) {
16
+ return undefined;
17
+ }
18
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
17
19
  chain: chain_1.CHAIN_MAP[chainId],
20
+ account: userAddress,
18
21
  address: addresses_1.CONTRACT_ADDRESSES[chainId].BookManager,
19
22
  abi: [
20
23
  {
21
24
  inputs: [
22
- {
23
- internalType: 'address',
24
- name: 'operator',
25
- type: 'address',
26
- },
27
- {
28
- internalType: 'bool',
29
- name: 'approved',
30
- type: 'bool',
31
- },
25
+ { internalType: 'address', name: 'operator', type: 'address' },
26
+ { internalType: 'bool', name: 'approved', type: 'bool' },
32
27
  ],
33
28
  name: 'setOrderOperator',
34
29
  outputs: [],
@@ -38,21 +33,17 @@ const setOrderOperatorApproval = async ({ chainId, walletClient, operator, appro
38
33
  ],
39
34
  functionName: 'setOrderOperator',
40
35
  args: [operator, approved],
41
- });
42
- return walletClient.writeContract(request);
36
+ }, options?.gasLimit);
43
37
  };
44
38
  exports.setOrderOperatorApproval = setOrderOperatorApproval;
45
- const approveControllerAsOrderOperator = async ({ chainId, walletClient, options, }) => {
46
- const params = {
39
+ const approveControllerAsOrderOperator = async ({ chainId, userAddress, options, }) => {
40
+ return (0, exports.setOrderOperatorApproval)({
47
41
  chainId,
48
- walletClient,
42
+ userAddress,
49
43
  operator: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
50
44
  approved: true,
51
- };
52
- if (options) {
53
- params.options = options;
54
- }
55
- return (0, exports.setOrderOperatorApproval)(params);
45
+ ...(options && { options }),
46
+ });
56
47
  };
57
48
  exports.approveControllerAsOrderOperator = approveControllerAsOrderOperator;
58
49
  //# sourceMappingURL=order.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../../src/calls/approval/order.ts"],"names":[],"mappings":";;;AAAA,+BAA8D;AAE9D,+DAA2E;AAE3E,uEAA6E;AA8BtE,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,OAAO,GAOR,EAA0B,EAAE;IAC3B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,YAAY,GAAG,IAAA,yBAAkB,EAAC;QACtC,KAAK,EAAE,iBAAS,CAAC,OAAO,CAAC;QACzB,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,WAAI,GAAE;KAC3D,CAAC,CAAC;IAEH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC;QACtD,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,KAAK,EAAE,iBAAS,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,8BAAkB,CAAC,OAAO,CAAE,CAAC,WAAW;QACjD,GAAG,EAAE;YACH;gBACE,MAAM,EAAE;oBACN;wBACE,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,SAAS;qBAChB;oBACD;wBACE,YAAY,EAAE,MAAM;wBACpB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,MAAM;qBACb;iBACF;gBACD,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,EAAE;gBACX,eAAe,EAAE,YAAY;gBAC7B,IAAI,EAAE,UAAU;aACjB;SACO;QACV,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC3B,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC;AAlDW,QAAA,wBAAwB,4BAkDnC;AA2BK,MAAM,gCAAgC,GAAG,KAAK,EAAE,EACrD,OAAO,EACP,YAAY,EACZ,OAAO,GAKR,EAA0B,EAAE;IAC3B,MAAM,MAAM,GAAmD;QAC7D,OAAO;QACP,YAAY;QACZ,QAAQ,EAAE,8BAAkB,CAAC,OAAO,CAAE,CAAC,UAAU;QACjD,QAAQ,EAAE,IAAI;KACf,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO,IAAA,gCAAwB,EAAC,MAAM,CAAC,CAAC;AAC1C,CAAC,CAAC;AArBW,QAAA,gCAAgC,oCAqB3C"}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../../src/calls/approval/order.ts"],"names":[],"mappings":";;;AAAA,+BAAgD;AAEhD,+DAA2E;AAE3E,uEAA6E;AAC7E,qEAAiE;AACjE,sEAA+E;AAwBxE,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,GAOR,EAAoC,EAAE;IACrC,MAAM,YAAY,GAAG,IAAA,yBAAkB,EAAC;QACtC,KAAK,EAAE,iBAAS,CAAC,OAAO,CAAC;QACzB,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,WAAI,GAAE;KAC3D,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,IAAA,+BAAoB,EAChD,YAAY,EACZ,OAAO,EACP,WAAW,CACZ,CAAC;IACF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAA,oCAAgB,EACrB,YAAY,EACZ;QACE,KAAK,EAAE,iBAAS,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,8BAAkB,CAAC,OAAO,CAAE,CAAC,WAAW;QACjD,GAAG,EAAE;YACH;gBACE,MAAM,EAAE;oBACN,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC9D,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;iBACzD;gBACD,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,EAAE;gBACX,eAAe,EAAE,YAAY;gBAC7B,IAAI,EAAE,UAAU;aACjB;SACO;QACV,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC3B,EACD,OAAO,EAAE,QAAQ,CAClB,CAAC;AACJ,CAAC,CAAC;AAlDW,QAAA,wBAAwB,4BAkDnC;AAqBK,MAAM,gCAAgC,GAAG,KAAK,EAAE,EACrD,OAAO,EACP,WAAW,EACX,OAAO,GAKR,EAAoC,EAAE;IACrC,OAAO,IAAA,gCAAwB,EAAC;QAC9B,OAAO;QACP,WAAW;QACX,QAAQ,EAAE,8BAAkB,CAAC,OAAO,CAAE,CAAC,UAAU;QACjD,QAAQ,EAAE,IAAI;QACd,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC;AAhBW,QAAA,gCAAgC,oCAgB3C"}
@@ -7,10 +7,8 @@ const apis_1 = require("../../entities/currency/apis");
7
7
  const allowance_1 = require("../../entities/currency/apis/allowance");
8
8
  const addresses_1 = require("../../constants/chain-configs/addresses");
9
9
  const vault_1 = require("../../views/vault");
10
- const setTokenAllowances = async ({ chainId, walletClient, tokenAddress, options, }) => {
11
- if (!walletClient.account) {
12
- throw new Error('Account is not found');
13
- }
10
+ const build_transaction_1 = require("../../utils/build-transaction");
11
+ const setTokenAllowances = async ({ chainId, userAddress, tokenAddress, options, }) => {
14
12
  const publicClient = (0, viem_1.createPublicClient)({
15
13
  chain: chain_1.CHAIN_MAP[chainId],
16
14
  transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
@@ -29,139 +27,54 @@ const setTokenAllowances = async ({ chainId, walletClient, tokenAddress, options
29
27
  const oneMillionTokens = 10n ** BigInt(currency.decimals) * 1000000n;
30
28
  const threshold = maxValue - oneMillionTokens;
31
29
  const [tokenToControllerAllowance, vaultToControllerAllowance, vaultToBookManagerAllowance,] = await Promise.all([
32
- (0, allowance_1.fetchAllowance)(publicClient, tokenAddress, walletClient.account.address, controllerAddress),
33
- (0, allowance_1.fetchAllowance)(publicClient, vault.address, walletClient.account.address, controllerAddress),
34
- (0, allowance_1.fetchAllowance)(publicClient, vault.address, walletClient.account.address, bookManagerAddress),
30
+ (0, allowance_1.fetchAllowance)(publicClient, tokenAddress, userAddress, controllerAddress),
31
+ (0, allowance_1.fetchAllowance)(publicClient, vault.address, userAddress, controllerAddress),
32
+ (0, allowance_1.fetchAllowance)(publicClient, vault.address, userAddress, bookManagerAddress),
35
33
  ]);
36
34
  const approvalAbi = [
37
35
  {
38
36
  inputs: [
39
- {
40
- internalType: 'address',
41
- name: 'spender',
42
- type: 'address',
43
- },
44
- {
45
- internalType: 'uint256',
46
- name: 'value',
47
- type: 'uint256',
48
- },
37
+ { internalType: 'address', name: 'spender', type: 'address' },
38
+ { internalType: 'uint256', name: 'value', type: 'uint256' },
49
39
  ],
50
40
  name: 'approve',
51
- outputs: [
52
- {
53
- internalType: 'bool',
54
- name: '',
55
- type: 'bool',
56
- },
57
- ],
41
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
58
42
  stateMutability: 'nonpayable',
59
43
  type: 'function',
60
44
  },
61
45
  ];
62
- const transactionHashes = [];
46
+ const transactions = [];
63
47
  if (tokenToControllerAllowance < threshold) {
64
- let hash;
65
- try {
66
- const { request } = await publicClient.simulateContract({
67
- account: walletClient.account,
68
- chain: chain_1.CHAIN_MAP[chainId],
69
- address: tokenAddress,
70
- abi: approvalAbi,
71
- functionName: 'approve',
72
- args: [controllerAddress, maxValue],
73
- });
74
- hash = await walletClient.writeContract(request);
75
- }
76
- catch (error) {
77
- if (error.message?.includes('Nonce provided for the transaction is lower than the current nonce')) {
78
- await new Promise((resolve) => setTimeout(resolve, 2000));
79
- const { request } = await publicClient.simulateContract({
80
- account: walletClient.account,
81
- chain: chain_1.CHAIN_MAP[chainId],
82
- address: tokenAddress,
83
- abi: approvalAbi,
84
- functionName: 'approve',
85
- args: [controllerAddress, maxValue],
86
- });
87
- hash = await walletClient.writeContract(request);
88
- }
89
- else {
90
- throw error;
91
- }
92
- }
93
- transactionHashes.push(hash);
94
- await publicClient.waitForTransactionReceipt({ hash });
95
- await new Promise((resolve) => setTimeout(resolve, 1000));
48
+ transactions.push(await (0, build_transaction_1.buildTransaction)(publicClient, {
49
+ chain: chain_1.CHAIN_MAP[chainId],
50
+ account: userAddress,
51
+ address: tokenAddress,
52
+ abi: approvalAbi,
53
+ functionName: 'approve',
54
+ args: [controllerAddress, maxValue],
55
+ }, options?.gasLimit));
96
56
  }
97
57
  if (vaultToControllerAllowance < threshold) {
98
- let hash;
99
- try {
100
- const { request } = await publicClient.simulateContract({
101
- account: walletClient.account,
102
- chain: chain_1.CHAIN_MAP[chainId],
103
- address: vault.address,
104
- abi: approvalAbi,
105
- functionName: 'approve',
106
- args: [controllerAddress, maxValue],
107
- });
108
- hash = await walletClient.writeContract(request);
109
- }
110
- catch (error) {
111
- if (error.message?.includes('Nonce provided for the transaction is lower than the current nonce')) {
112
- await new Promise((resolve) => setTimeout(resolve, 2000));
113
- const { request } = await publicClient.simulateContract({
114
- account: walletClient.account,
115
- chain: chain_1.CHAIN_MAP[chainId],
116
- address: vault.address,
117
- abi: approvalAbi,
118
- functionName: 'approve',
119
- args: [controllerAddress, maxValue],
120
- });
121
- hash = await walletClient.writeContract(request);
122
- }
123
- else {
124
- throw error;
125
- }
126
- }
127
- transactionHashes.push(hash);
128
- await publicClient.waitForTransactionReceipt({ hash });
129
- await new Promise((resolve) => setTimeout(resolve, 1000));
58
+ transactions.push(await (0, build_transaction_1.buildTransaction)(publicClient, {
59
+ chain: chain_1.CHAIN_MAP[chainId],
60
+ account: userAddress,
61
+ address: vault.address,
62
+ abi: approvalAbi,
63
+ functionName: 'approve',
64
+ args: [controllerAddress, maxValue],
65
+ }, options?.gasLimit));
130
66
  }
131
67
  if (vaultToBookManagerAllowance < threshold) {
132
- let hash;
133
- try {
134
- const { request } = await publicClient.simulateContract({
135
- account: walletClient.account,
136
- chain: chain_1.CHAIN_MAP[chainId],
137
- address: vault.address,
138
- abi: approvalAbi,
139
- functionName: 'approve',
140
- args: [bookManagerAddress, maxValue],
141
- });
142
- hash = await walletClient.writeContract(request);
143
- }
144
- catch (error) {
145
- if (error.message?.includes('Nonce provided for the transaction is lower than the current nonce')) {
146
- await new Promise((resolve) => setTimeout(resolve, 2000));
147
- const { request } = await publicClient.simulateContract({
148
- account: walletClient.account,
149
- chain: chain_1.CHAIN_MAP[chainId],
150
- address: vault.address,
151
- abi: approvalAbi,
152
- functionName: 'approve',
153
- args: [bookManagerAddress, maxValue],
154
- });
155
- hash = await walletClient.writeContract(request);
156
- }
157
- else {
158
- throw error;
159
- }
160
- }
161
- transactionHashes.push(hash);
162
- await publicClient.waitForTransactionReceipt({ hash });
68
+ transactions.push(await (0, build_transaction_1.buildTransaction)(publicClient, {
69
+ chain: chain_1.CHAIN_MAP[chainId],
70
+ account: userAddress,
71
+ address: vault.address,
72
+ abi: approvalAbi,
73
+ functionName: 'approve',
74
+ args: [bookManagerAddress, maxValue],
75
+ }, options?.gasLimit));
163
76
  }
164
- return transactionHashes;
77
+ return transactions;
165
78
  };
166
79
  exports.setTokenAllowances = setTokenAllowances;
167
80
  //# sourceMappingURL=token.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/calls/approval/token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/calls/approval/token.ts"],"names":[],"mappings":"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"}
@@ -1,60 +1,48 @@
1
1
  import { createPublicClient, http } from 'viem';
2
2
  import { CHAIN_MAP } from '../../constants/chain-configs/chain';
3
3
  import { CONTRACT_ADDRESSES } from '../../constants/chain-configs/addresses';
4
+ import { buildTransaction } from '../../utils/build-transaction';
5
+ import { fetchIsOrderOperator } from '../../entities/open-order/apis/operator';
4
6
  /**
5
- * @dev This function relates with `viem` dependency
6
- * Sets the order operator approval for the specified operator address on the given chain.
7
+ * Prepares a transaction to set the order operator approval for the specified operator address on the given chain.
7
8
  *
8
9
  * @param {CHAIN_IDS} chainId The chain ID.
9
- * @param {WalletClient} walletClient The wallet client.
10
+ * @param {`0x${string}`} userAddress The user address.
10
11
  * @param {`0x${string}`} operator The operator address to approve or revoke.
11
12
  * @param {boolean} approved Whether to approve or revoke the operator.
12
13
  * @param {Object} [options] Optional parameters for setting approval.
13
- * @param {string} options.rpcUrl The RPC URL to use for executing the transaction.
14
- * @returns {Promise<`0x${string}`>} Promise resolving to the transaction hash.
14
+ * @param {string} options.rpcUrl The RPC URL to use for building the transaction.
15
+ * @returns {Promise<Transaction>} Promise resolving to the transaction object.
15
16
  * @example
16
17
  * import { setOrderOperatorApproval } from '@clober/v2-sdk'
17
- * import { mnemonicToAccount } from 'viem/accounts'
18
18
  *
19
- * const walletClient = createWalletClient({
20
- * chain: arbitrumSepolia,
21
- * account: mnemonicToAccount('legal ...'),
22
- * transport: http(),
23
- * })
24
- *
25
- * const hash = await setOrderOperatorApproval({
19
+ * const transaction = await setOrderOperatorApproval({
26
20
  * chainId: 421614,
27
- * walletClient,
21
+ * userAddress: '0xF8c1869Ecd4df136693C45EcE1b67f85B6bDaE69',
28
22
  * operator: '0x1234567890123456789012345678901234567890',
29
23
  * approved: true
30
24
  * })
25
+ *
26
+ * const hash = await walletClient.sendTransaction(transaction)
31
27
  */
32
- export const setOrderOperatorApproval = async ({ chainId, walletClient, operator, approved, options, }) => {
33
- if (!walletClient.account) {
34
- throw new Error('Account is not found');
35
- }
28
+ export const setOrderOperatorApproval = async ({ chainId, userAddress, operator, approved, options, }) => {
36
29
  const publicClient = createPublicClient({
37
30
  chain: CHAIN_MAP[chainId],
38
31
  transport: options?.rpcUrl ? http(options.rpcUrl) : http(),
39
32
  });
40
- // Simulate the contract call first to validate it will succeed
41
- const { request } = await publicClient.simulateContract({
42
- account: walletClient.account,
33
+ const isOrderOperator = await fetchIsOrderOperator(publicClient, chainId, userAddress);
34
+ if (!isOrderOperator) {
35
+ return undefined;
36
+ }
37
+ return buildTransaction(publicClient, {
43
38
  chain: CHAIN_MAP[chainId],
39
+ account: userAddress,
44
40
  address: CONTRACT_ADDRESSES[chainId].BookManager,
45
41
  abi: [
46
42
  {
47
43
  inputs: [
48
- {
49
- internalType: 'address',
50
- name: 'operator',
51
- type: 'address',
52
- },
53
- {
54
- internalType: 'bool',
55
- name: 'approved',
56
- type: 'bool',
57
- },
44
+ { internalType: 'address', name: 'operator', type: 'address' },
45
+ { internalType: 'bool', name: 'approved', type: 'bool' },
58
46
  ],
59
47
  name: 'setOrderOperator',
60
48
  outputs: [],
@@ -64,44 +52,34 @@ export const setOrderOperatorApproval = async ({ chainId, walletClient, operator
64
52
  ],
65
53
  functionName: 'setOrderOperator',
66
54
  args: [operator, approved],
67
- });
68
- return walletClient.writeContract(request);
55
+ }, options?.gasLimit);
69
56
  };
70
57
  /**
71
- * @dev This function relates with `viem` dependency
72
- * Approves the controller as an order operator for the specified chain.
58
+ * Prepares a transaction to approve the controller as an order operator for the specified chain.
73
59
  * This is a convenience function that delegates to `setOrderOperatorApproval`.
74
60
  *
75
61
  * @param {CHAIN_IDS} chainId The chain ID.
76
- * @param {WalletClient} walletClient The wallet client.
62
+ * @param {`0x${string}`} userAddress The user address.
77
63
  * @param {Object} [options] Optional parameters for setting approval.
78
- * @param {string} options.rpcUrl The RPC URL to use for executing the transaction.
79
- * @returns {Promise<`0x${string}`>} Promise resolving to the transaction hash.
64
+ * @param {string} options.rpcUrl The RPC URL to use for building the transaction.
65
+ * @returns {Promise<Transaction>} Promise resolving to the transaction object.
80
66
  * @example
81
67
  * import { approveControllerAsOrderOperator } from '@clober/v2-sdk'
82
- * import { mnemonicToAccount } from 'viem/accounts'
83
68
  *
84
- * const walletClient = createWalletClient({
85
- * chain: arbitrumSepolia,
86
- * account: mnemonicToAccount('legal ...'),
87
- * transport: http(),
88
- * })
89
- *
90
- * const hash = await approveControllerAsOrderOperator({
69
+ * const transaction = await approveControllerAsOrderOperator({
91
70
  * chainId: 421614,
92
- * walletClient
71
+ * userAddress: '0xF8c1869Ecd4df136693C45EcE1b67f85B6bDaE69'
93
72
  * })
73
+ *
74
+ * const hash = await walletClient.sendTransaction(transaction)
94
75
  */
95
- export const approveControllerAsOrderOperator = async ({ chainId, walletClient, options, }) => {
96
- const params = {
76
+ export const approveControllerAsOrderOperator = async ({ chainId, userAddress, options, }) => {
77
+ return setOrderOperatorApproval({
97
78
  chainId,
98
- walletClient,
79
+ userAddress,
99
80
  operator: CONTRACT_ADDRESSES[chainId].Controller,
100
81
  approved: true,
101
- };
102
- if (options) {
103
- params.options = options;
104
- }
105
- return setOrderOperatorApproval(params);
82
+ ...(options && { options }),
83
+ });
106
84
  };
107
85
  //# sourceMappingURL=order.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../../src/calls/approval/order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE9D,OAAO,EAAa,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,OAAO,GAOR,EAA0B,EAAE;IAC3B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;QACzB,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KAC3D,CAAC,CAAC;IACH,+DAA+D;IAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC;QACtD,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAE,CAAC,WAAW;QACjD,GAAG,EAAE;YACH;gBACE,MAAM,EAAE;oBACN;wBACE,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,SAAS;qBAChB;oBACD;wBACE,YAAY,EAAE,MAAM;wBACpB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,MAAM;qBACb;iBACF;gBACD,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,EAAE;gBACX,eAAe,EAAE,YAAY;gBAC7B,IAAI,EAAE,UAAU;aACjB;SACO;QACV,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC3B,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,EAAE,EACrD,OAAO,EACP,YAAY,EACZ,OAAO,GAKR,EAA0B,EAAE;IAC3B,MAAM,MAAM,GAAmD;QAC7D,OAAO;QACP,YAAY;QACZ,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAE,CAAC,UAAU;QACjD,QAAQ,EAAE,IAAI;KACf,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC,CAAC"}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../../src/calls/approval/order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,EAAa,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,GAOR,EAAoC,EAAE;IACrC,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;QACzB,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KAC3D,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,oBAAoB,CAChD,YAAY,EACZ,OAAO,EACP,WAAW,CACZ,CAAC;IACF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,gBAAgB,CACrB,YAAY,EACZ;QACE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAE,CAAC,WAAW;QACjD,GAAG,EAAE;YACH;gBACE,MAAM,EAAE;oBACN,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC9D,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;iBACzD;gBACD,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,EAAE;gBACX,eAAe,EAAE,YAAY;gBAC7B,IAAI,EAAE,UAAU;aACjB;SACO;QACV,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC3B,EACD,OAAO,EAAE,QAAQ,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,EAAE,EACrD,OAAO,EACP,WAAW,EACX,OAAO,GAKR,EAAoC,EAAE;IACrC,OAAO,wBAAwB,CAAC;QAC9B,OAAO;QACP,WAAW;QACX,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAE,CAAC,UAAU;QACjD,QAAQ,EAAE,IAAI;QACd,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC"}