@vetro-protocol/gateway 1.0.0-beta

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 (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -0
  3. package/_esm/abi/gatewayAbi.js +185 -0
  4. package/_esm/abi/gatewayAbi.js.map +1 -0
  5. package/_esm/actions/index.js +18 -0
  6. package/_esm/actions/index.js.map +1 -0
  7. package/_esm/actions/public/getMaxWithdraw.js +28 -0
  8. package/_esm/actions/public/getMaxWithdraw.js.map +1 -0
  9. package/_esm/actions/public/getMintFee.js +28 -0
  10. package/_esm/actions/public/getMintFee.js.map +1 -0
  11. package/_esm/actions/public/getPeggedToken.js +23 -0
  12. package/_esm/actions/public/getPeggedToken.js.map +1 -0
  13. package/_esm/actions/public/getRedeemFee.js +28 -0
  14. package/_esm/actions/public/getRedeemFee.js.map +1 -0
  15. package/_esm/actions/public/getRedeemRequest.js +28 -0
  16. package/_esm/actions/public/getRedeemRequest.js.map +1 -0
  17. package/_esm/actions/public/getTreasury.js +23 -0
  18. package/_esm/actions/public/getTreasury.js.map +1 -0
  19. package/_esm/actions/public/getWithdrawalDelay.js +23 -0
  20. package/_esm/actions/public/getWithdrawalDelay.js.map +1 -0
  21. package/_esm/actions/public/getWithdrawalDelayEnabled.js +23 -0
  22. package/_esm/actions/public/getWithdrawalDelayEnabled.js.map +1 -0
  23. package/_esm/actions/public/index.js +12 -0
  24. package/_esm/actions/public/index.js.map +1 -0
  25. package/_esm/actions/public/isInstantRedeemWhitelisted.js +28 -0
  26. package/_esm/actions/public/isInstantRedeemWhitelisted.js.map +1 -0
  27. package/_esm/actions/public/previewDeposit.js +35 -0
  28. package/_esm/actions/public/previewDeposit.js.map +1 -0
  29. package/_esm/actions/public/previewRedeem.js +35 -0
  30. package/_esm/actions/public/previewRedeem.js.map +1 -0
  31. package/_esm/actions/wallet/cancelRedeemRequest.js +89 -0
  32. package/_esm/actions/wallet/cancelRedeemRequest.js.map +1 -0
  33. package/_esm/actions/wallet/deposit.js +193 -0
  34. package/_esm/actions/wallet/deposit.js.map +1 -0
  35. package/_esm/actions/wallet/redeem.js +226 -0
  36. package/_esm/actions/wallet/redeem.js.map +1 -0
  37. package/_esm/actions/wallet/requestRedeem.js +153 -0
  38. package/_esm/actions/wallet/requestRedeem.js.map +1 -0
  39. package/_esm/gatewayAddresses.js +18 -0
  40. package/_esm/gatewayAddresses.js.map +1 -0
  41. package/_esm/index.js +30 -0
  42. package/_esm/index.js.map +1 -0
  43. package/_esm/types.js +2 -0
  44. package/_esm/types.js.map +1 -0
  45. package/_esm/utils/isAddressValid.js +3 -0
  46. package/_esm/utils/isAddressValid.js.map +1 -0
  47. package/_types/abi/gatewayAbi.d.ts +252 -0
  48. package/_types/abi/gatewayAbi.d.ts.map +1 -0
  49. package/_types/actions/index.d.ts +16 -0
  50. package/_types/actions/index.d.ts.map +1 -0
  51. package/_types/actions/public/getMaxWithdraw.d.ts +6 -0
  52. package/_types/actions/public/getMaxWithdraw.d.ts.map +1 -0
  53. package/_types/actions/public/getMintFee.d.ts +6 -0
  54. package/_types/actions/public/getMintFee.d.ts.map +1 -0
  55. package/_types/actions/public/getPeggedToken.d.ts +5 -0
  56. package/_types/actions/public/getPeggedToken.d.ts.map +1 -0
  57. package/_types/actions/public/getRedeemFee.d.ts +6 -0
  58. package/_types/actions/public/getRedeemFee.d.ts.map +1 -0
  59. package/_types/actions/public/getRedeemRequest.d.ts +6 -0
  60. package/_types/actions/public/getRedeemRequest.d.ts.map +1 -0
  61. package/_types/actions/public/getTreasury.d.ts +5 -0
  62. package/_types/actions/public/getTreasury.d.ts.map +1 -0
  63. package/_types/actions/public/getWithdrawalDelay.d.ts +5 -0
  64. package/_types/actions/public/getWithdrawalDelay.d.ts.map +1 -0
  65. package/_types/actions/public/getWithdrawalDelayEnabled.d.ts +5 -0
  66. package/_types/actions/public/getWithdrawalDelayEnabled.d.ts.map +1 -0
  67. package/_types/actions/public/index.d.ts +12 -0
  68. package/_types/actions/public/index.d.ts.map +1 -0
  69. package/_types/actions/public/isInstantRedeemWhitelisted.d.ts +6 -0
  70. package/_types/actions/public/isInstantRedeemWhitelisted.d.ts.map +1 -0
  71. package/_types/actions/public/previewDeposit.d.ts +7 -0
  72. package/_types/actions/public/previewDeposit.d.ts.map +1 -0
  73. package/_types/actions/public/previewRedeem.d.ts +7 -0
  74. package/_types/actions/public/previewRedeem.d.ts.map +1 -0
  75. package/_types/actions/wallet/cancelRedeemRequest.d.ts +14 -0
  76. package/_types/actions/wallet/cancelRedeemRequest.d.ts.map +1 -0
  77. package/_types/actions/wallet/deposit.d.ts +19 -0
  78. package/_types/actions/wallet/deposit.d.ts.map +1 -0
  79. package/_types/actions/wallet/redeem.d.ts +24 -0
  80. package/_types/actions/wallet/redeem.d.ts.map +1 -0
  81. package/_types/actions/wallet/requestRedeem.d.ts +18 -0
  82. package/_types/actions/wallet/requestRedeem.d.ts.map +1 -0
  83. package/_types/gatewayAddresses.d.ts +8 -0
  84. package/_types/gatewayAddresses.d.ts.map +1 -0
  85. package/_types/index.d.ts +42 -0
  86. package/_types/index.d.ts.map +1 -0
  87. package/_types/types.d.ts +53 -0
  88. package/_types/types.d.ts.map +1 -0
  89. package/_types/utils/isAddressValid.d.ts +3 -0
  90. package/_types/utils/isAddressValid.d.ts.map +1 -0
  91. package/package.json +59 -0
  92. package/src/abi/gatewayAbi.ts +184 -0
  93. package/src/actions/index.ts +18 -0
  94. package/src/actions/public/getMaxWithdraw.ts +40 -0
  95. package/src/actions/public/getMintFee.ts +40 -0
  96. package/src/actions/public/getPeggedToken.ts +33 -0
  97. package/src/actions/public/getRedeemFee.ts +40 -0
  98. package/src/actions/public/getRedeemRequest.ts +40 -0
  99. package/src/actions/public/getTreasury.ts +33 -0
  100. package/src/actions/public/getWithdrawalDelay.ts +33 -0
  101. package/src/actions/public/getWithdrawalDelayEnabled.ts +33 -0
  102. package/src/actions/public/index.ts +11 -0
  103. package/src/actions/public/isInstantRedeemWhitelisted.ts +40 -0
  104. package/src/actions/public/previewDeposit.ts +49 -0
  105. package/src/actions/public/previewRedeem.ts +49 -0
  106. package/src/actions/wallet/cancelRedeemRequest.ts +135 -0
  107. package/src/actions/wallet/deposit.ts +277 -0
  108. package/src/actions/wallet/redeem.ts +321 -0
  109. package/src/actions/wallet/requestRedeem.ts +226 -0
  110. package/src/gatewayAddresses.ts +27 -0
  111. package/src/index.ts +79 -0
  112. package/src/types.ts +60 -0
  113. package/src/utils/isAddressValid.ts +4 -0
@@ -0,0 +1,35 @@
1
+ import { readContract } from "viem/actions";
2
+ import { gatewayAbi } from "../../abi/gatewayAbi.js";
3
+ import { isAddressValid } from "../../utils/isAddressValid.js";
4
+ export async function previewDeposit(client, parameters) {
5
+ // Validate client
6
+ if (!client) {
7
+ throw new Error("Client is not defined");
8
+ }
9
+ // Validate parameters exist
10
+ if (!parameters) {
11
+ throw new Error("Parameters are required");
12
+ }
13
+ // Validate gateway address
14
+ if (!isAddressValid(parameters.address)) {
15
+ throw new Error("Gateway is invalid");
16
+ }
17
+ // Validate tokenIn address
18
+ if (!isAddressValid(parameters.tokenIn)) {
19
+ throw new Error("Token is invalid");
20
+ }
21
+ // Validate amountIn
22
+ if (typeof parameters.amountIn !== "bigint") {
23
+ throw new Error("Amount must be a bigint");
24
+ }
25
+ if (parameters.amountIn <= 0n) {
26
+ throw new Error("Amount must be greater than 0");
27
+ }
28
+ return readContract(client, {
29
+ abi: gatewayAbi,
30
+ address: parameters.address,
31
+ args: [parameters.tokenIn, parameters.amountIn],
32
+ functionName: "previewDeposit",
33
+ });
34
+ }
35
+ //# sourceMappingURL=previewDeposit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previewDeposit.js","sourceRoot":"","sources":["../../../src/actions/public/previewDeposit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,UAIC;IAED,kBAAkB;IAClB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,EAAE;QAC1B,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC;QAC/C,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { readContract } from "viem/actions";
2
+ import { gatewayAbi } from "../../abi/gatewayAbi.js";
3
+ import { isAddressValid } from "../../utils/isAddressValid.js";
4
+ export async function previewRedeem(client, parameters) {
5
+ // Validate client
6
+ if (!client) {
7
+ throw new Error("Client is not defined");
8
+ }
9
+ // Validate parameters exist
10
+ if (!parameters) {
11
+ throw new Error("Parameters are required");
12
+ }
13
+ // Validate gateway address
14
+ if (!isAddressValid(parameters.address)) {
15
+ throw new Error("Gateway is invalid");
16
+ }
17
+ // Validate tokenOut address
18
+ if (!isAddressValid(parameters.tokenOut)) {
19
+ throw new Error("Token is invalid");
20
+ }
21
+ // Validate peggedTokenIn
22
+ if (typeof parameters.peggedTokenIn !== "bigint") {
23
+ throw new Error("Amount must be a bigint");
24
+ }
25
+ if (parameters.peggedTokenIn <= 0n) {
26
+ throw new Error("Amount must be greater than 0");
27
+ }
28
+ return readContract(client, {
29
+ abi: gatewayAbi,
30
+ address: parameters.address,
31
+ args: [parameters.tokenOut, parameters.peggedTokenIn],
32
+ functionName: "previewRedeem",
33
+ });
34
+ }
35
+ //# sourceMappingURL=previewRedeem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previewRedeem.js","sourceRoot":"","sources":["../../../src/actions/public/previewRedeem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,UAIC;IAED,kBAAkB;IAClB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,UAAU,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,UAAU,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,EAAE;QAC1B,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC;QACrD,YAAY,EAAE,eAAe;KAC9B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { toPromiseEvent } from "to-promise-event";
2
+ import { encodeFunctionData, isAddress, isAddressEqual, zeroAddress, } from "viem";
3
+ import { waitForTransactionReceipt, writeContract } from "viem/actions";
4
+ import { gatewayAbi } from "../../abi/gatewayAbi.js";
5
+ const canCancelRedeemRequest = function ({ client, gatewayAddress, }) {
6
+ if (!client) {
7
+ return {
8
+ canCancelRedeemRequest: false,
9
+ reason: "Client is not defined",
10
+ };
11
+ }
12
+ if (!client.chain) {
13
+ return {
14
+ canCancelRedeemRequest: false,
15
+ reason: "Chain is not defined on wallet client",
16
+ };
17
+ }
18
+ if (!client.account) {
19
+ return {
20
+ canCancelRedeemRequest: false,
21
+ reason: "Client must have an account",
22
+ };
23
+ }
24
+ // Validate gateway address
25
+ if (!gatewayAddress || !isAddress(gatewayAddress)) {
26
+ return {
27
+ canCancelRedeemRequest: false,
28
+ reason: "Invalid gateway address",
29
+ };
30
+ }
31
+ if (isAddressEqual(gatewayAddress, zeroAddress)) {
32
+ return {
33
+ canCancelRedeemRequest: false,
34
+ reason: "Gateway address cannot be zero address",
35
+ };
36
+ }
37
+ return { canCancelRedeemRequest: true };
38
+ };
39
+ const runCancelRedeemRequest = (walletClient, { gatewayAddress }) => async function (emitter) {
40
+ try {
41
+ const { canCancelRedeemRequest: canCancelRedeemRequestFlag, reason } = canCancelRedeemRequest({
42
+ client: walletClient,
43
+ gatewayAddress,
44
+ });
45
+ if (!canCancelRedeemRequestFlag) {
46
+ emitter.emit("cancel-redeem-request-failed-validation", reason);
47
+ return;
48
+ }
49
+ emitter.emit("pre-cancel-redeem-request");
50
+ const cancelHash = await writeContract(walletClient, {
51
+ abi: gatewayAbi,
52
+ account: walletClient.account,
53
+ address: gatewayAddress,
54
+ chain: walletClient.chain,
55
+ functionName: "cancelRedeemRequest",
56
+ }).catch(function (error) {
57
+ emitter.emit("user-signing-cancel-redeem-request-error", error);
58
+ });
59
+ if (!cancelHash) {
60
+ return;
61
+ }
62
+ emitter.emit("user-signed-cancel-redeem-request", cancelHash);
63
+ const cancelReceipt = await waitForTransactionReceipt(walletClient, {
64
+ hash: cancelHash,
65
+ }).catch(function (error) {
66
+ emitter.emit("cancel-redeem-request-failed", error);
67
+ });
68
+ if (!cancelReceipt) {
69
+ return;
70
+ }
71
+ const cancelEventMap = {
72
+ reverted: "cancel-redeem-request-transaction-reverted",
73
+ success: "cancel-redeem-request-transaction-succeeded",
74
+ };
75
+ emitter.emit(cancelEventMap[cancelReceipt.status], cancelReceipt);
76
+ }
77
+ catch (error) {
78
+ emitter.emit("unexpected-error", error);
79
+ }
80
+ finally {
81
+ emitter.emit("cancel-redeem-request-settled");
82
+ }
83
+ };
84
+ export const cancelRedeemRequest = (...args) => toPromiseEvent(runCancelRedeemRequest(...args));
85
+ export const encodeCancelRedeemRequest = () => encodeFunctionData({
86
+ abi: gatewayAbi,
87
+ functionName: "cancelRedeemRequest",
88
+ });
89
+ //# sourceMappingURL=cancelRedeemRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancelRedeemRequest.js","sourceRoot":"","sources":["../../../src/actions/wallet/cancelRedeemRequest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ import { toPromiseEvent } from "to-promise-event";
2
+ import { encodeFunctionData, isAddress, isAddressEqual, zeroAddress, } from "viem";
3
+ import { waitForTransactionReceipt, writeContract } from "viem/actions";
4
+ import { allowance, approve } from "viem-erc20/actions";
5
+ import { gatewayAbi } from "../../abi/gatewayAbi.js";
6
+ const canDeposit = function ({ amountIn, approveAmount, client, gatewayAddress, minPeggedTokenOut, receiver, tokenIn, }) {
7
+ // Validate client
8
+ if (!client) {
9
+ return {
10
+ canDeposit: false,
11
+ reason: "Client is not defined",
12
+ };
13
+ }
14
+ if (!client.chain) {
15
+ return {
16
+ canDeposit: false,
17
+ reason: "Chain is not defined on wallet client",
18
+ };
19
+ }
20
+ // Validate client has required properties
21
+ if (!client.account) {
22
+ return {
23
+ canDeposit: false,
24
+ reason: "Client must have an account",
25
+ };
26
+ }
27
+ // Validate gateway address
28
+ if (!gatewayAddress || !isAddress(gatewayAddress)) {
29
+ return {
30
+ canDeposit: false,
31
+ reason: "Invalid gateway address",
32
+ };
33
+ }
34
+ if (isAddressEqual(gatewayAddress, zeroAddress)) {
35
+ return {
36
+ canDeposit: false,
37
+ reason: "Gateway address cannot be zero address",
38
+ };
39
+ }
40
+ // Validate tokenIn address
41
+ if (!tokenIn || !isAddress(tokenIn)) {
42
+ return {
43
+ canDeposit: false,
44
+ reason: "Invalid token address",
45
+ };
46
+ }
47
+ if (isAddressEqual(tokenIn, zeroAddress)) {
48
+ return {
49
+ canDeposit: false,
50
+ reason: "Token address cannot be zero address",
51
+ };
52
+ }
53
+ // Validate receiver address
54
+ if (!receiver || !isAddress(receiver)) {
55
+ return {
56
+ canDeposit: false,
57
+ reason: "Invalid receiver address",
58
+ };
59
+ }
60
+ if (isAddressEqual(receiver, zeroAddress)) {
61
+ return {
62
+ canDeposit: false,
63
+ reason: "Receiver address cannot be zero address",
64
+ };
65
+ }
66
+ // Validate amountIn
67
+ if (typeof amountIn !== "bigint") {
68
+ return {
69
+ canDeposit: false,
70
+ reason: "Amount must be a bigint",
71
+ };
72
+ }
73
+ if (amountIn <= 0n) {
74
+ return {
75
+ canDeposit: false,
76
+ reason: "Amount must be greater than 0",
77
+ };
78
+ }
79
+ // Validate minPeggedTokenOut
80
+ if (typeof minPeggedTokenOut !== "bigint") {
81
+ return {
82
+ canDeposit: false,
83
+ reason: "Minimum output must be a bigint",
84
+ };
85
+ }
86
+ if (minPeggedTokenOut < 0n) {
87
+ return {
88
+ canDeposit: false,
89
+ reason: "Minimum output cannot be negative",
90
+ };
91
+ }
92
+ // Validate approveAmount
93
+ if (approveAmount < amountIn) {
94
+ return {
95
+ canDeposit: false,
96
+ reason: "Approve amount must be greater than or equal to amount",
97
+ };
98
+ }
99
+ return { canDeposit: true };
100
+ };
101
+ const runDeposit = (walletClient, { amountIn, approveAmount = amountIn, gatewayAddress, minPeggedTokenOut, receiver, tokenIn, }) => async function (emitter) {
102
+ try {
103
+ const { canDeposit: canDepositFlag, reason } = canDeposit({
104
+ amountIn,
105
+ approveAmount,
106
+ client: walletClient,
107
+ gatewayAddress,
108
+ minPeggedTokenOut,
109
+ receiver,
110
+ tokenIn,
111
+ });
112
+ if (!canDepositFlag) {
113
+ emitter.emit("deposit-failed-validation", reason);
114
+ return;
115
+ }
116
+ // Check current allowance
117
+ const currentAllowance = await allowance(walletClient, {
118
+ address: tokenIn,
119
+ // account is already validated
120
+ owner: walletClient.account.address,
121
+ spender: gatewayAddress,
122
+ });
123
+ // If allowance is insufficient, approve first
124
+ if (currentAllowance < amountIn) {
125
+ emitter.emit("pre-approve");
126
+ const approvalHash = await approve(walletClient, {
127
+ address: tokenIn,
128
+ amount: approveAmount,
129
+ spender: gatewayAddress,
130
+ }).catch(function (error) {
131
+ emitter.emit("user-signing-approval-error", error);
132
+ });
133
+ if (!approvalHash) {
134
+ return;
135
+ }
136
+ emitter.emit("user-signed-approval", approvalHash);
137
+ const approvalReceipt = await waitForTransactionReceipt(walletClient, {
138
+ hash: approvalHash,
139
+ }).catch(function (error) {
140
+ emitter.emit("deposit-failed", error);
141
+ });
142
+ if (!approvalReceipt) {
143
+ return;
144
+ }
145
+ if (approvalReceipt.status === "reverted") {
146
+ emitter.emit("approve-transaction-reverted", approvalReceipt);
147
+ return;
148
+ }
149
+ emitter.emit("approve-transaction-succeeded", approvalReceipt);
150
+ }
151
+ emitter.emit("pre-deposit");
152
+ const depositHash = await writeContract(walletClient, {
153
+ abi: gatewayAbi,
154
+ account: walletClient.account,
155
+ address: gatewayAddress,
156
+ args: [tokenIn, amountIn, minPeggedTokenOut, receiver],
157
+ chain: walletClient.chain,
158
+ functionName: "deposit",
159
+ }).catch(function (error) {
160
+ emitter.emit("user-signing-deposit-error", error);
161
+ });
162
+ if (!depositHash) {
163
+ return;
164
+ }
165
+ emitter.emit("user-signed-deposit", depositHash);
166
+ const depositReceipt = await waitForTransactionReceipt(walletClient, {
167
+ hash: depositHash,
168
+ }).catch(function (error) {
169
+ emitter.emit("deposit-failed", error);
170
+ });
171
+ if (!depositReceipt) {
172
+ return;
173
+ }
174
+ const depositEventMap = {
175
+ reverted: "deposit-transaction-reverted",
176
+ success: "deposit-transaction-succeeded",
177
+ };
178
+ emitter.emit(depositEventMap[depositReceipt.status], depositReceipt);
179
+ }
180
+ catch (error) {
181
+ emitter.emit("unexpected-error", error);
182
+ }
183
+ finally {
184
+ emitter.emit("deposit-settled");
185
+ }
186
+ };
187
+ export const deposit = (...args) => toPromiseEvent(runDeposit(...args));
188
+ export const encodeDeposit = ({ amountIn, minPeggedTokenOut, receiver, tokenIn, }) => encodeFunctionData({
189
+ abi: gatewayAbi,
190
+ args: [tokenIn, amountIn, minPeggedTokenOut, receiver],
191
+ functionName: "deposit",
192
+ });
193
+ //# sourceMappingURL=deposit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../src/actions/wallet/deposit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import { toPromiseEvent } from "to-promise-event";
2
+ import { encodeFunctionData, isAddress, isAddressEqual, zeroAddress, } from "viem";
3
+ import { waitForTransactionReceipt, writeContract } from "viem/actions";
4
+ import { allowance, approve } from "viem-erc20/actions";
5
+ import { gatewayAbi } from "../../abi/gatewayAbi.js";
6
+ import { getMaxWithdraw } from "../public/getMaxWithdraw.js";
7
+ import { getPeggedToken } from "../public/getPeggedToken.js";
8
+ import { getWithdrawalDelayEnabled } from "../public/getWithdrawalDelayEnabled.js";
9
+ import { isInstantRedeemWhitelisted } from "../public/isInstantRedeemWhitelisted.js";
10
+ const canRedeem = async function ({ approveAmount, client, gatewayAddress, minAmountOut, peggedTokenIn, receiver, tokenOut, }) {
11
+ // Validate client
12
+ if (!client) {
13
+ return {
14
+ canRedeem: false,
15
+ reason: "Client is not defined",
16
+ };
17
+ }
18
+ if (!client.chain) {
19
+ return {
20
+ canRedeem: false,
21
+ reason: "Chain is not defined on wallet client",
22
+ };
23
+ }
24
+ // Validate client has required properties
25
+ if (!client.account) {
26
+ return {
27
+ canRedeem: false,
28
+ reason: "Client must have an account",
29
+ };
30
+ }
31
+ // Validate gateway address
32
+ if (!gatewayAddress || !isAddress(gatewayAddress)) {
33
+ return {
34
+ canRedeem: false,
35
+ reason: "Invalid gateway address",
36
+ };
37
+ }
38
+ if (isAddressEqual(gatewayAddress, zeroAddress)) {
39
+ return {
40
+ canRedeem: false,
41
+ reason: "Gateway address cannot be zero address",
42
+ };
43
+ }
44
+ // Validate tokenOut address
45
+ if (!tokenOut || !isAddress(tokenOut)) {
46
+ return {
47
+ canRedeem: false,
48
+ reason: "Invalid token address",
49
+ };
50
+ }
51
+ if (isAddressEqual(tokenOut, zeroAddress)) {
52
+ return {
53
+ canRedeem: false,
54
+ reason: "Token address cannot be zero address",
55
+ };
56
+ }
57
+ // Validate receiver address
58
+ if (!receiver || !isAddress(receiver)) {
59
+ return {
60
+ canRedeem: false,
61
+ reason: "Invalid receiver address",
62
+ };
63
+ }
64
+ if (isAddressEqual(receiver, zeroAddress)) {
65
+ return {
66
+ canRedeem: false,
67
+ reason: "Receiver address cannot be zero address",
68
+ };
69
+ }
70
+ // Validate peggedTokenIn
71
+ if (typeof peggedTokenIn !== "bigint") {
72
+ return {
73
+ canRedeem: false,
74
+ reason: "Amount must be a bigint",
75
+ };
76
+ }
77
+ if (peggedTokenIn <= 0n) {
78
+ return {
79
+ canRedeem: false,
80
+ reason: "Amount must be greater than 0",
81
+ };
82
+ }
83
+ // Validate minAmountOut
84
+ if (typeof minAmountOut !== "bigint") {
85
+ return {
86
+ canRedeem: false,
87
+ reason: "Minimum output must be a bigint",
88
+ };
89
+ }
90
+ if (minAmountOut < 0n) {
91
+ return {
92
+ canRedeem: false,
93
+ reason: "Minimum output cannot be negative",
94
+ };
95
+ }
96
+ // Validate approveAmount
97
+ if (approveAmount < peggedTokenIn) {
98
+ return {
99
+ canRedeem: false,
100
+ reason: "Approve amount must be greater than or equal to amount",
101
+ };
102
+ }
103
+ // Check treasury has enough balance for the requested token
104
+ const maxWithdrawable = await getMaxWithdraw(client, {
105
+ address: gatewayAddress,
106
+ tokenOut,
107
+ });
108
+ if (minAmountOut > maxWithdrawable) {
109
+ return {
110
+ canRedeem: false,
111
+ reason: "Not enough balance in treasury",
112
+ };
113
+ }
114
+ return { canRedeem: true };
115
+ };
116
+ const runRedeem = (walletClient, { approveAmount, gatewayAddress, minAmountOut, peggedTokenIn, receiver, tokenOut, }) => async function (emitter) {
117
+ const resolvedApproveAmount = approveAmount ?? peggedTokenIn;
118
+ try {
119
+ const { canRedeem: canRedeemFlag, reason } = await canRedeem({
120
+ approveAmount: resolvedApproveAmount,
121
+ client: walletClient,
122
+ gatewayAddress,
123
+ minAmountOut,
124
+ peggedTokenIn,
125
+ receiver,
126
+ tokenOut,
127
+ });
128
+ if (!canRedeemFlag) {
129
+ emitter.emit("redeem-failed-validation", reason);
130
+ return;
131
+ }
132
+ // Check if user is whitelisted for instant redeem
133
+ const [isWhitelisted, delayEnabled] = await Promise.all([
134
+ isInstantRedeemWhitelisted(walletClient, {
135
+ account: walletClient.account.address,
136
+ address: gatewayAddress,
137
+ }),
138
+ getWithdrawalDelayEnabled(walletClient, {
139
+ address: gatewayAddress,
140
+ }),
141
+ ]);
142
+ // Approval is needed when the user is whitelisted (instant redeem burns pegged tokens)
143
+ // or when delay is disabled (redeem completes immediately)
144
+ if (isWhitelisted || !delayEnabled) {
145
+ // Get the pegged token address
146
+ const peggedTokenAddress = await getPeggedToken(walletClient, {
147
+ address: gatewayAddress,
148
+ });
149
+ // Check current allowance for pegged token
150
+ const currentAllowance = await allowance(walletClient, {
151
+ address: peggedTokenAddress,
152
+ owner: walletClient.account.address,
153
+ spender: gatewayAddress,
154
+ });
155
+ // If allowance is insufficient, approve first
156
+ if (currentAllowance < peggedTokenIn) {
157
+ emitter.emit("pre-approve");
158
+ const approvalHash = await approve(walletClient, {
159
+ address: peggedTokenAddress,
160
+ amount: resolvedApproveAmount,
161
+ spender: gatewayAddress,
162
+ }).catch(function (error) {
163
+ emitter.emit("user-signing-approval-error", error);
164
+ });
165
+ if (!approvalHash) {
166
+ return;
167
+ }
168
+ emitter.emit("user-signed-approval", approvalHash);
169
+ const approvalReceipt = await waitForTransactionReceipt(walletClient, {
170
+ hash: approvalHash,
171
+ }).catch(function (error) {
172
+ emitter.emit("redeem-failed", error);
173
+ });
174
+ if (!approvalReceipt) {
175
+ return;
176
+ }
177
+ if (approvalReceipt.status === "reverted") {
178
+ emitter.emit("approve-transaction-reverted", approvalReceipt);
179
+ return;
180
+ }
181
+ emitter.emit("approve-transaction-succeeded", approvalReceipt);
182
+ }
183
+ }
184
+ emitter.emit("pre-redeem");
185
+ const redeemHash = await writeContract(walletClient, {
186
+ abi: gatewayAbi,
187
+ account: walletClient.account,
188
+ address: gatewayAddress,
189
+ args: [tokenOut, peggedTokenIn, minAmountOut, receiver],
190
+ chain: walletClient.chain,
191
+ functionName: "redeem",
192
+ }).catch(function (error) {
193
+ emitter.emit("user-signing-redeem-error", error);
194
+ });
195
+ if (!redeemHash) {
196
+ return;
197
+ }
198
+ emitter.emit("user-signed-redeem", redeemHash);
199
+ const redeemReceipt = await waitForTransactionReceipt(walletClient, {
200
+ hash: redeemHash,
201
+ }).catch(function (error) {
202
+ emitter.emit("redeem-failed", error);
203
+ });
204
+ if (!redeemReceipt) {
205
+ return;
206
+ }
207
+ const redeemEventMap = {
208
+ reverted: "redeem-transaction-reverted",
209
+ success: "redeem-transaction-succeeded",
210
+ };
211
+ emitter.emit(redeemEventMap[redeemReceipt.status], redeemReceipt);
212
+ }
213
+ catch (error) {
214
+ emitter.emit("unexpected-error", error);
215
+ }
216
+ finally {
217
+ emitter.emit("redeem-settled");
218
+ }
219
+ };
220
+ export const redeem = (...args) => toPromiseEvent(runRedeem(...args));
221
+ export const encodeRedeem = ({ minAmountOut, peggedTokenIn, receiver, tokenOut, }) => encodeFunctionData({
222
+ abi: gatewayAbi,
223
+ args: [tokenOut, peggedTokenIn, minAmountOut, receiver],
224
+ functionName: "redeem",
225
+ });
226
+ //# sourceMappingURL=redeem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redeem.js","sourceRoot":"","sources":["../../../src/actions/wallet/redeem.ts"],"names":[],"mappings":"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"}