@huma-finance/widgets 0.0.10 → 0.0.11

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 (169) hide show
  1. package/.env.example +2 -2
  2. package/.eslintignore +2 -2
  3. package/.eslintrc.js +64 -64
  4. package/.prettierignore +4 -4
  5. package/.prettierrc.js +16 -16
  6. package/API.md +331 -331
  7. package/LICENSE +660 -660
  8. package/README.md +48 -48
  9. package/babel.config.js +15 -15
  10. package/config-overrides.js +9 -9
  11. package/cosmos.config.json +7 -7
  12. package/cypress/e2e/01-invoice-factoring-borrow.test.ts +62 -62
  13. package/cypress/support/e2e.ts +76 -76
  14. package/cypress/support/ethereum.ts +142 -142
  15. package/cypress/tsconfig.json +9 -9
  16. package/cypress/utils/index.ts +54 -54
  17. package/cypress.config.ts +20 -20
  18. package/dist/assets/output-15e10f9f.css +44 -0
  19. package/dist/cjs/assets/output-15e10f9f.css +44 -0
  20. package/dist/cjs/index.cjs +7731 -0
  21. package/dist/cjs/index.cjs.map +1 -0
  22. package/dist/index.d.ts +211 -0
  23. package/dist/index.js +7687 -0
  24. package/dist/index.js.map +1 -0
  25. package/jsdoc2md.json +20 -20
  26. package/package.json +4 -4
  27. package/public/index.html +40 -40
  28. package/public/manifest.json +25 -25
  29. package/public/robots.txt +3 -3
  30. package/rollup.config.js +81 -81
  31. package/src/components/Activity.tsx +123 -123
  32. package/src/components/AllowListModal.tsx +113 -113
  33. package/src/components/ApolloWrapper.tsx +15 -15
  34. package/src/components/ApproveAllowanceModal.tsx +118 -118
  35. package/src/components/BottomButton.tsx +31 -31
  36. package/src/components/ChooseAmountModal.tsx +315 -315
  37. package/src/components/CreditLine/borrow/1-Evaluation.tsx +158 -159
  38. package/src/components/CreditLine/borrow/2-AllowList.tsx +34 -34
  39. package/src/components/CreditLine/borrow/3-ChooseAmount.tsx +74 -74
  40. package/src/components/CreditLine/borrow/4-ApproveAllowance.tsx +29 -29
  41. package/src/components/CreditLine/borrow/5-Transfer.tsx +30 -30
  42. package/src/components/CreditLine/borrow/6-Success.tsx +30 -30
  43. package/src/components/CreditLine/borrow/index.tsx +119 -119
  44. package/src/components/CreditLine/payment/1-ChooseAmount.tsx +67 -67
  45. package/src/components/CreditLine/payment/2-ApproveAllowance.tsx +23 -23
  46. package/src/components/CreditLine/payment/3-Transfer.tsx +34 -34
  47. package/src/components/CreditLine/payment/4-Success.tsx +39 -39
  48. package/src/components/CreditLine/payment/index.tsx +94 -94
  49. package/src/components/ErrorModal.tsx +132 -132
  50. package/src/components/Factoring/FactoredList.tsx +143 -143
  51. package/src/components/Factoring/UpcomingList.tsx +90 -90
  52. package/src/components/Factoring/index.ts +2 -2
  53. package/src/components/HumaLoading.tsx +68 -68
  54. package/src/components/HumaTable.tsx +158 -158
  55. package/src/components/InvoiceFactoring/borrow/1-Evaluation.tsx +52 -46
  56. package/src/components/InvoiceFactoring/borrow/2-AllowList.tsx +34 -34
  57. package/src/components/InvoiceFactoring/borrow/3-ChooseAmount.tsx +86 -86
  58. package/src/components/InvoiceFactoring/borrow/4-ConfirmTransfer.tsx +104 -104
  59. package/src/components/InvoiceFactoring/borrow/5-ApproveNFT.tsx +55 -55
  60. package/src/components/InvoiceFactoring/borrow/6-Transfer.tsx +34 -34
  61. package/src/components/InvoiceFactoring/borrow/7-Success.tsx +20 -20
  62. package/src/components/InvoiceFactoring/borrow/index.tsx +96 -96
  63. package/src/components/InvoiceFactoring/payment/1-ChooseAmount.tsx +67 -67
  64. package/src/components/InvoiceFactoring/payment/2-ApproveAllowance.tsx +23 -23
  65. package/src/components/InvoiceFactoring/payment/3-Transfer.tsx +34 -34
  66. package/src/components/InvoiceFactoring/payment/4-Success.tsx +23 -23
  67. package/src/components/InvoiceFactoring/payment/index.tsx +86 -86
  68. package/src/components/Lend/supply/1-Evaluation.tsx +86 -86
  69. package/src/components/Lend/supply/2-ChooseAmount.tsx +70 -70
  70. package/src/components/Lend/supply/3-ApproveAllowance.tsx +25 -25
  71. package/src/components/Lend/supply/4-ConfirmTransfer.tsx +104 -104
  72. package/src/components/Lend/supply/6-Transfer.tsx +32 -32
  73. package/src/components/Lend/supply/7-Success.tsx +49 -49
  74. package/src/components/Lend/supply/index.tsx +144 -144
  75. package/src/components/Lend/withdraw/1-CheckWithdrawble.tsx +73 -73
  76. package/src/components/Lend/withdraw/2-ChooseAmount.tsx +50 -50
  77. package/src/components/Lend/withdraw/3-Transfer.tsx +32 -32
  78. package/src/components/Lend/withdraw/4-Success.tsx +49 -49
  79. package/src/components/Lend/withdraw/index.tsx +101 -101
  80. package/src/components/LoadingModal.tsx +49 -49
  81. package/src/components/StreamFactoring/borrow/1-Evaluation.tsx +47 -57
  82. package/src/components/StreamFactoring/borrow/2-ChooseAmount.tsx +124 -124
  83. package/src/components/StreamFactoring/borrow/3-ConfirmTransfer.tsx +104 -104
  84. package/src/components/StreamFactoring/borrow/4-ApproveAllowance.tsx +65 -65
  85. package/src/components/StreamFactoring/borrow/5-Permit.tsx +144 -144
  86. package/src/components/StreamFactoring/borrow/6-Transfer.tsx +37 -37
  87. package/src/components/StreamFactoring/borrow/7-Success.tsx +20 -20
  88. package/src/components/StreamFactoring/borrow/index.tsx +94 -95
  89. package/src/components/StreamFactoring/payment/ChooseAmount.tsx +54 -54
  90. package/src/components/StreamFactoring/payment/Success.tsx +23 -23
  91. package/src/components/StreamFactoring/payment/Transfer.tsx +34 -34
  92. package/src/components/StreamFactoring/payment/index.tsx +66 -66
  93. package/src/components/SuperfluidFactoring/SuperfluidFactoredList.tsx +61 -61
  94. package/src/components/SuperfluidFactoring/SuperfluidUpcomingList.tsx +185 -185
  95. package/src/components/SuperfluidFactoring/index.tsx +85 -85
  96. package/src/components/TxDoneModal.tsx +83 -83
  97. package/src/components/TxSendModal.tsx +59 -59
  98. package/src/components/ViewOnExplorer.tsx +26 -26
  99. package/src/components/WidgetWrapper.tsx +74 -74
  100. package/src/components/WrapperModal.tsx +54 -54
  101. package/src/components/buttons/TableActionButton.tsx +36 -36
  102. package/src/components/buttons/index.ts +1 -1
  103. package/src/components/humaModal/HumaModal.tsx +68 -68
  104. package/src/components/humaModal/HumaModalHeader.tsx +70 -70
  105. package/src/components/humaModal/index.tsx +2 -2
  106. package/src/components/icons/approve-lender.svg +30 -30
  107. package/src/components/icons/auto-payback.svg +40 -40
  108. package/src/components/icons/check-circle.svg +3 -3
  109. package/src/components/icons/check-green.svg +3 -3
  110. package/src/components/icons/check.svg +10 -10
  111. package/src/components/icons/donut.svg +904 -904
  112. package/src/components/icons/ellipse.svg +3 -3
  113. package/src/components/icons/huma-full.svg +22 -22
  114. package/src/components/icons/huma.svg +15 -15
  115. package/src/components/icons/index.tsx +93 -93
  116. package/src/components/icons/loader.svg +229 -229
  117. package/src/components/icons/metamask.svg +31 -31
  118. package/src/components/icons/polygon.svg +16 -16
  119. package/src/components/icons/receipt.svg +3 -3
  120. package/src/components/icons/separator.svg +3 -3
  121. package/src/components/icons/sorry.svg +31 -31
  122. package/src/components/icons/usdc.svg +5 -5
  123. package/src/components/icons/wallet-connect.svg +11 -11
  124. package/src/cosmos/CreditLineBorrow.fixture.tsx +85 -85
  125. package/src/cosmos/CreditLinePayment.fixture.tsx +49 -49
  126. package/src/cosmos/InvoiceFactoringBorrow.fixture.tsx +111 -111
  127. package/src/cosmos/InvoiceFactoringPayment.fixture.tsx +67 -67
  128. package/src/cosmos/LendSupply.fixture.tsx +75 -75
  129. package/src/cosmos/LendWithdraw.fixture.tsx +43 -43
  130. package/src/cosmos/SDKTesting.fixture.tsx +557 -516
  131. package/src/cosmos/SuperfluidFactoringBorrow.fixture.tsx +12 -12
  132. package/src/cosmos/WalletWrapper.tsx +52 -52
  133. package/src/cosmos/abis/InvoiceNFT.json +644 -644
  134. package/src/cosmos/abis/ReceivableFactoringPool.json +1529 -1529
  135. package/src/cosmos/utils/index.ts +169 -169
  136. package/src/fonts/Recoleta/Recoleta-Black.otf +0 -0
  137. package/src/fonts/Recoleta/Recoleta-Bold.otf +0 -0
  138. package/src/fonts/Recoleta/Recoleta-Light.otf +0 -0
  139. package/src/fonts/Recoleta/Recoleta-Medium.otf +0 -0
  140. package/src/fonts/Recoleta/Recoleta-Regular.otf +0 -0
  141. package/src/fonts/Recoleta/Recoleta-RegularDEMO.otf +0 -0
  142. package/src/fonts/Recoleta/Recoleta-SemiBold.otf +0 -0
  143. package/src/fonts/Recoleta/Recoleta-Thin.otf +0 -0
  144. package/src/hooks/useEA.ts +72 -72
  145. package/src/hooks/useRedux.ts +6 -6
  146. package/src/index.css +61 -61
  147. package/src/index.tsx +219 -213
  148. package/src/react-app-env.d.ts +1 -1
  149. package/src/reportWebVitals.ts +15 -15
  150. package/src/setupTests.ts +6 -6
  151. package/src/store/index.ts +27 -27
  152. package/src/store/widgets.reducers.ts +120 -120
  153. package/src/store/widgets.selectors.ts +3 -3
  154. package/src/store/widgets.store.ts +55 -55
  155. package/src/theme/breakpoints.ts +10 -10
  156. package/src/theme/components.ts +70 -70
  157. package/src/theme/coreThemeConstants.ts +29 -29
  158. package/src/theme/cssMixins.ts +92 -92
  159. package/src/theme/hooks/useGetSizes.ts +31 -31
  160. package/src/theme/index.ts +24 -24
  161. package/src/theme/palette.ts +150 -150
  162. package/src/theme/shape.ts +7 -7
  163. package/src/theme/theme.types.ts +80 -80
  164. package/src/theme/typography.ts +117 -117
  165. package/src/utilTypes.d.ts +29 -29
  166. package/src/utils/env.ts +9 -9
  167. package/tsconfig.build.json +7 -7
  168. package/tsconfig.json +32 -32
  169. package/webpack.cosmos.js +54 -54
@@ -1,142 +1,142 @@
1
- /**
2
- * Updates cy.visit() to include an injected window.ethereum provider.
3
- */
4
- import { Eip1193Bridge } from '@ethersproject/experimental/lib/eip1193-bridge'
5
- import { ethers } from 'ethers'
6
- import { deepCopy } from 'ethers/lib/utils'
7
-
8
- import {
9
- addressForApprove,
10
- addressForTx,
11
- provider,
12
- signerForApprove,
13
- signerForTx,
14
- } from '../utils'
15
-
16
- class MetamaskBridge extends Eip1193Bridge {
17
- private walletAddress: string
18
-
19
- constructor(
20
- signer: ethers.Signer,
21
- provider: ethers.providers.Provider,
22
- walletAddress: string,
23
- ) {
24
- super(signer, provider)
25
- this.walletAddress = walletAddress
26
- }
27
-
28
- chainId = 5
29
-
30
- async sendAsync(...args: any[]) {
31
- console.debug('sendAsync called', ...args)
32
- return this.send(...args)
33
- }
34
- async send(...args: any[]) {
35
- console.debug('send called', ...args)
36
- const isCallbackForm =
37
- typeof args[0] === 'object' && typeof args[1] === 'function'
38
- let callback
39
- let method
40
- let params
41
- if (isCallbackForm) {
42
- callback = args[1]
43
- method = args[0].method
44
- params = args[0].params
45
- } else {
46
- method = args[0]
47
- params = args[1]
48
- }
49
- if (method === 'eth_requestAccounts' || method === 'eth_accounts') {
50
- if (isCallbackForm) {
51
- callback({ result: [this.walletAddress] })
52
- } else {
53
- return Promise.resolve([this.walletAddress])
54
- }
55
- }
56
- if (method === 'eth_chainId') {
57
- if (isCallbackForm) {
58
- callback(null, { result: '0x5' })
59
- } else {
60
- return Promise.resolve('0x5')
61
- }
62
- }
63
- // Eip1193Bridge only supports eth_sign
64
- // address is the first param for eth_sign
65
- if (method === 'personal_sign') {
66
- method = 'eth_sign'
67
- const [data, address] = deepCopy(params)
68
- params[0] = address
69
- params[1] = data
70
- }
71
- try {
72
- // Please refer to: https://github.com/ethers-io/ethers.js/issues/1683
73
- // If from is present on eth_call it errors, removing it makes the library set
74
- // from as the connected wallet which works fine
75
- if (params && params.length && method === 'eth_call') {
76
- if (params[0].from) {
77
- delete params[0].from
78
- }
79
- if (params[0].gas) {
80
- delete params[0].gas
81
- }
82
- }
83
-
84
- let result
85
- // For sending a transaction if we call send it will error
86
- // as it wants gasLimit in sendTransaction but hexlify sets the property gas
87
- // to gasLimit which makes sensd transaction error.
88
- // This have taken the code from the super method for sendTransaction and altered
89
- // it slightly to make it work with the gas limit issues.
90
- if (
91
- params &&
92
- params.length &&
93
- params[0].from &&
94
- method === 'eth_sendTransaction'
95
- ) {
96
- // Hexlify will not take gas, must be gasLimit, set this property to be gasLimit
97
- params[0].gasLimit = params[0].gas
98
- delete params[0].gas
99
- // If from is present on eth_sendTransaction it errors, removing it makes the library set
100
- // from as the connected wallet which works fine
101
- delete params[0].from
102
- const req = ethers.providers.JsonRpcProvider.hexlifyTransaction(
103
- params[0],
104
- )
105
- // Hexlify sets the gasLimit property to be gas again and send transaction requires gasLimit
106
- req.gasLimit = req.gas
107
- delete req.gas
108
- // Send the transaction
109
- const tx = await this.signer.sendTransaction(req)
110
- result = tx.hash
111
- } else {
112
- // All other transactions the base class works for
113
- result = await super.send(method, params)
114
- }
115
- console.debug('result received', method, params, result)
116
- if (isCallbackForm) {
117
- callback(null, { result })
118
- } else {
119
- return result
120
- }
121
- } catch (error) {
122
- console.log(error)
123
- if (isCallbackForm) {
124
- callback(error, null)
125
- } else {
126
- throw error
127
- }
128
- }
129
- }
130
- }
131
-
132
- export const injectedForTx = new MetamaskBridge(
133
- signerForTx,
134
- provider,
135
- addressForTx,
136
- )
137
-
138
- export const injectedForApprove = new MetamaskBridge(
139
- signerForApprove,
140
- provider,
141
- addressForApprove,
142
- )
1
+ /**
2
+ * Updates cy.visit() to include an injected window.ethereum provider.
3
+ */
4
+ import { Eip1193Bridge } from '@ethersproject/experimental/lib/eip1193-bridge'
5
+ import { ethers } from 'ethers'
6
+ import { deepCopy } from 'ethers/lib/utils'
7
+
8
+ import {
9
+ addressForApprove,
10
+ addressForTx,
11
+ provider,
12
+ signerForApprove,
13
+ signerForTx,
14
+ } from '../utils'
15
+
16
+ class MetamaskBridge extends Eip1193Bridge {
17
+ private walletAddress: string
18
+
19
+ constructor(
20
+ signer: ethers.Signer,
21
+ provider: ethers.providers.Provider,
22
+ walletAddress: string,
23
+ ) {
24
+ super(signer, provider)
25
+ this.walletAddress = walletAddress
26
+ }
27
+
28
+ chainId = 5
29
+
30
+ async sendAsync(...args: any[]) {
31
+ console.debug('sendAsync called', ...args)
32
+ return this.send(...args)
33
+ }
34
+ async send(...args: any[]) {
35
+ console.debug('send called', ...args)
36
+ const isCallbackForm =
37
+ typeof args[0] === 'object' && typeof args[1] === 'function'
38
+ let callback
39
+ let method
40
+ let params
41
+ if (isCallbackForm) {
42
+ callback = args[1]
43
+ method = args[0].method
44
+ params = args[0].params
45
+ } else {
46
+ method = args[0]
47
+ params = args[1]
48
+ }
49
+ if (method === 'eth_requestAccounts' || method === 'eth_accounts') {
50
+ if (isCallbackForm) {
51
+ callback({ result: [this.walletAddress] })
52
+ } else {
53
+ return Promise.resolve([this.walletAddress])
54
+ }
55
+ }
56
+ if (method === 'eth_chainId') {
57
+ if (isCallbackForm) {
58
+ callback(null, { result: '0x5' })
59
+ } else {
60
+ return Promise.resolve('0x5')
61
+ }
62
+ }
63
+ // Eip1193Bridge only supports eth_sign
64
+ // address is the first param for eth_sign
65
+ if (method === 'personal_sign') {
66
+ method = 'eth_sign'
67
+ const [data, address] = deepCopy(params)
68
+ params[0] = address
69
+ params[1] = data
70
+ }
71
+ try {
72
+ // Please refer to: https://github.com/ethers-io/ethers.js/issues/1683
73
+ // If from is present on eth_call it errors, removing it makes the library set
74
+ // from as the connected wallet which works fine
75
+ if (params && params.length && method === 'eth_call') {
76
+ if (params[0].from) {
77
+ delete params[0].from
78
+ }
79
+ if (params[0].gas) {
80
+ delete params[0].gas
81
+ }
82
+ }
83
+
84
+ let result
85
+ // For sending a transaction if we call send it will error
86
+ // as it wants gasLimit in sendTransaction but hexlify sets the property gas
87
+ // to gasLimit which makes sensd transaction error.
88
+ // This have taken the code from the super method for sendTransaction and altered
89
+ // it slightly to make it work with the gas limit issues.
90
+ if (
91
+ params &&
92
+ params.length &&
93
+ params[0].from &&
94
+ method === 'eth_sendTransaction'
95
+ ) {
96
+ // Hexlify will not take gas, must be gasLimit, set this property to be gasLimit
97
+ params[0].gasLimit = params[0].gas
98
+ delete params[0].gas
99
+ // If from is present on eth_sendTransaction it errors, removing it makes the library set
100
+ // from as the connected wallet which works fine
101
+ delete params[0].from
102
+ const req = ethers.providers.JsonRpcProvider.hexlifyTransaction(
103
+ params[0],
104
+ )
105
+ // Hexlify sets the gasLimit property to be gas again and send transaction requires gasLimit
106
+ req.gasLimit = req.gas
107
+ delete req.gas
108
+ // Send the transaction
109
+ const tx = await this.signer.sendTransaction(req)
110
+ result = tx.hash
111
+ } else {
112
+ // All other transactions the base class works for
113
+ result = await super.send(method, params)
114
+ }
115
+ console.debug('result received', method, params, result)
116
+ if (isCallbackForm) {
117
+ callback(null, { result })
118
+ } else {
119
+ return result
120
+ }
121
+ } catch (error) {
122
+ console.log(error)
123
+ if (isCallbackForm) {
124
+ callback(error, null)
125
+ } else {
126
+ throw error
127
+ }
128
+ }
129
+ }
130
+ }
131
+
132
+ export const injectedForTx = new MetamaskBridge(
133
+ signerForTx,
134
+ provider,
135
+ addressForTx,
136
+ )
137
+
138
+ export const injectedForApprove = new MetamaskBridge(
139
+ signerForApprove,
140
+ provider,
141
+ addressForApprove,
142
+ )
@@ -1,9 +1,9 @@
1
- {
2
- "compilerOptions": {
3
- "strict": true,
4
- "target": "es5",
5
- "lib": ["es5", "dom"],
6
- "types": ["cypress"]
7
- },
8
- "include": ["**/*.ts"]
9
- }
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "target": "es5",
5
+ "lib": ["es5", "dom"],
6
+ "types": ["cypress"]
7
+ },
8
+ "include": ["**/*.ts"]
9
+ }
@@ -1,54 +1,54 @@
1
- import { JsonRpcProvider } from '@ethersproject/providers'
2
- import { Wallet } from '@ethersproject/wallet'
3
- import { ethers } from 'ethers'
4
-
5
- export const ONE_SECOND = 1 * 1000
6
- export const THREE_SECONDS = 3 * 1000
7
- export const FIVE_SECONDS = 5 * 1000
8
- export const TEN_SECONDS = 10 * 1000
9
- export const TWENTY_SECONDS = 20 * 1000
10
- export const ONE_MINUTE = 60 * 1000
11
- export const TWO_MINUTES = 120 * 1000
12
- export const INVOICE_AMOUNT = 100
13
- export const INVOICE_FACTORED_AMOUNT = 80
14
- export const INVOICE_FEES = 8
15
-
16
- const chain = { name: 'Goerli', chainId: 5 }
17
- const infuraKey = Cypress.env('E2E_TEST_INFURA_GOERLI')
18
- export const provider = new JsonRpcProvider(infuraKey, chain)
19
-
20
- export const privateKeyForTx = Cypress.env('E2E_TEST_PRIVATE_KEY')
21
- export const addressForTx = new Wallet(privateKeyForTx).address
22
- export const signerForTx = new Wallet(privateKeyForTx, provider)
23
-
24
- const wallet = ethers.Wallet.createRandom()
25
- export const addressForApprove = wallet.address
26
- export const signerForApprove = new Wallet(wallet.privateKey, provider)
27
-
28
- export const toNumber = (text: string) => {
29
- return Number(text.replace('$', '').replace(/,/g, '').replace('%', ''))
30
- }
31
-
32
- export const getWalletAddressAbbr = (address: string) => {
33
- if (!address) {
34
- return address
35
- }
36
- const { length } = address
37
- return `${address.slice(0, 6)}...${address.slice(length - 4, length)}`
38
- }
39
-
40
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
- export const isEmpty = (value: undefined | null | any) =>
42
- value === undefined || value === null
43
-
44
- const formatter = new Intl.NumberFormat('en-US', {
45
- style: 'currency',
46
- currency: 'USD',
47
- })
48
-
49
- export const formatMoney = (num: number | string | undefined) => {
50
- if (isEmpty(num) || Number.isNaN(num)) {
51
- return num
52
- }
53
- return formatter.format(Number(num))
54
- }
1
+ import { JsonRpcProvider } from '@ethersproject/providers'
2
+ import { Wallet } from '@ethersproject/wallet'
3
+ import { ethers } from 'ethers'
4
+
5
+ export const ONE_SECOND = 1 * 1000
6
+ export const THREE_SECONDS = 3 * 1000
7
+ export const FIVE_SECONDS = 5 * 1000
8
+ export const TEN_SECONDS = 10 * 1000
9
+ export const TWENTY_SECONDS = 20 * 1000
10
+ export const ONE_MINUTE = 60 * 1000
11
+ export const TWO_MINUTES = 120 * 1000
12
+ export const INVOICE_AMOUNT = 100
13
+ export const INVOICE_FACTORED_AMOUNT = 80
14
+ export const INVOICE_FEES = 8
15
+
16
+ const chain = { name: 'Goerli', chainId: 5 }
17
+ const infuraKey = Cypress.env('E2E_TEST_INFURA_GOERLI')
18
+ export const provider = new JsonRpcProvider(infuraKey, chain)
19
+
20
+ export const privateKeyForTx = Cypress.env('E2E_TEST_PRIVATE_KEY')
21
+ export const addressForTx = new Wallet(privateKeyForTx).address
22
+ export const signerForTx = new Wallet(privateKeyForTx, provider)
23
+
24
+ const wallet = ethers.Wallet.createRandom()
25
+ export const addressForApprove = wallet.address
26
+ export const signerForApprove = new Wallet(wallet.privateKey, provider)
27
+
28
+ export const toNumber = (text: string) => {
29
+ return Number(text.replace('$', '').replace(/,/g, '').replace('%', ''))
30
+ }
31
+
32
+ export const getWalletAddressAbbr = (address: string) => {
33
+ if (!address) {
34
+ return address
35
+ }
36
+ const { length } = address
37
+ return `${address.slice(0, 6)}...${address.slice(length - 4, length)}`
38
+ }
39
+
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ export const isEmpty = (value: undefined | null | any) =>
42
+ value === undefined || value === null
43
+
44
+ const formatter = new Intl.NumberFormat('en-US', {
45
+ style: 'currency',
46
+ currency: 'USD',
47
+ })
48
+
49
+ export const formatMoney = (num: number | string | undefined) => {
50
+ if (isEmpty(num) || Number.isNaN(num)) {
51
+ return num
52
+ }
53
+ return formatter.format(Number(num))
54
+ }
package/cypress.config.ts CHANGED
@@ -1,20 +1,20 @@
1
- import { defineConfig } from 'cypress'
2
-
3
- export default defineConfig({
4
- projectId: 'yq9qu9',
5
- videoUploadOnPasses: false,
6
- defaultCommandTimeout: 10000,
7
- chromeWebSecurity: false,
8
- e2e: {
9
- testIsolation: false,
10
- setupNodeEvents(on, config) {
11
- return {
12
- ...config,
13
- // Only enable Chrome.
14
- // Electron (the default) has issues injecting window.ethereum before pageload, so it is not viable.
15
- browsers: config.browsers.filter(({ name }) => name === 'chrome'),
16
- }
17
- },
18
- specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
19
- },
20
- })
1
+ import { defineConfig } from 'cypress'
2
+
3
+ export default defineConfig({
4
+ projectId: 'yq9qu9',
5
+ videoUploadOnPasses: false,
6
+ defaultCommandTimeout: 10000,
7
+ chromeWebSecurity: false,
8
+ e2e: {
9
+ testIsolation: false,
10
+ setupNodeEvents(on, config) {
11
+ return {
12
+ ...config,
13
+ // Only enable Chrome.
14
+ // Electron (the default) has issues injecting window.ethereum before pageload, so it is not viable.
15
+ browsers: config.browsers.filter(({ name }) => name === 'chrome'),
16
+ }
17
+ },
18
+ specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
19
+ },
20
+ })
@@ -0,0 +1,44 @@
1
+ @font-face {
2
+ font-family: 'Recoleta-Medium';
3
+ src: local("Recoleta-Medium"), url(./fonts/Recoleta/Recoleta-Medium.otf) format("truetype");
4
+ font-weight: 500; }
5
+
6
+ @font-face {
7
+ font-family: 'Roboto-Medium';
8
+ src: local("Roboto-Medium"), url(./fonts/Roboto/Roboto-Medium.ttf) format("truetype");
9
+ font-weight: 500; }
10
+
11
+ @font-face {
12
+ font-family: 'Roboto-Regular';
13
+ src: local("Roboto-Regular"), url(./fonts/Roboto/Roboto-Regular.ttf) format("truetype");
14
+ font-weight: 400; }
15
+
16
+ @font-face {
17
+ font-family: 'Inter-Bold';
18
+ src: local("Inter-Bold"), url(./fonts/Inter/Inter-Bold.ttf) format("truetype");
19
+ font-weight: 700; }
20
+
21
+ @font-face {
22
+ font-family: 'Inter-Medium';
23
+ src: local("Inter-Medium"), url(./fonts/Inter/Inter-Medium.ttf) format("truetype");
24
+ font-weight: 500; }
25
+
26
+ @font-face {
27
+ font-family: 'Inter-Regular';
28
+ src: local("Inter-Regular"), url(./fonts/Inter/Inter-Regular.ttf) format("truetype");
29
+ font-weight: 400; }
30
+
31
+ @font-face {
32
+ font-family: 'Uni-Neue-Black';
33
+ src: local("Uni-Neue-Black"), url(./fonts/UniNeue/UniNeue-Black.ttf) format("truetype");
34
+ font-weight: 800; }
35
+
36
+ @font-face {
37
+ font-family: 'Uni-Neue-Bold';
38
+ src: local("Uni-Neue-Bold"), url(./fonts/UniNeue/UniNeue-Bold.ttf) format("truetype");
39
+ font-weight: 700; }
40
+
41
+ @font-face {
42
+ font-family: 'Uni-Neue-Regular';
43
+ src: local("Uni-Neue-Regular"), url(./fonts/UniNeue/UniNeue-Regular.ttf) format("truetype");
44
+ font-weight: 400; }
@@ -0,0 +1,44 @@
1
+ @font-face {
2
+ font-family: 'Recoleta-Medium';
3
+ src: local("Recoleta-Medium"), url(./fonts/Recoleta/Recoleta-Medium.otf) format("truetype");
4
+ font-weight: 500; }
5
+
6
+ @font-face {
7
+ font-family: 'Roboto-Medium';
8
+ src: local("Roboto-Medium"), url(./fonts/Roboto/Roboto-Medium.ttf) format("truetype");
9
+ font-weight: 500; }
10
+
11
+ @font-face {
12
+ font-family: 'Roboto-Regular';
13
+ src: local("Roboto-Regular"), url(./fonts/Roboto/Roboto-Regular.ttf) format("truetype");
14
+ font-weight: 400; }
15
+
16
+ @font-face {
17
+ font-family: 'Inter-Bold';
18
+ src: local("Inter-Bold"), url(./fonts/Inter/Inter-Bold.ttf) format("truetype");
19
+ font-weight: 700; }
20
+
21
+ @font-face {
22
+ font-family: 'Inter-Medium';
23
+ src: local("Inter-Medium"), url(./fonts/Inter/Inter-Medium.ttf) format("truetype");
24
+ font-weight: 500; }
25
+
26
+ @font-face {
27
+ font-family: 'Inter-Regular';
28
+ src: local("Inter-Regular"), url(./fonts/Inter/Inter-Regular.ttf) format("truetype");
29
+ font-weight: 400; }
30
+
31
+ @font-face {
32
+ font-family: 'Uni-Neue-Black';
33
+ src: local("Uni-Neue-Black"), url(./fonts/UniNeue/UniNeue-Black.ttf) format("truetype");
34
+ font-weight: 800; }
35
+
36
+ @font-face {
37
+ font-family: 'Uni-Neue-Bold';
38
+ src: local("Uni-Neue-Bold"), url(./fonts/UniNeue/UniNeue-Bold.ttf) format("truetype");
39
+ font-weight: 700; }
40
+
41
+ @font-face {
42
+ font-family: 'Uni-Neue-Regular';
43
+ src: local("Uni-Neue-Regular"), url(./fonts/UniNeue/UniNeue-Regular.ttf) format("truetype");
44
+ font-weight: 400; }