@rainlanguage/ui-components 0.0.1-alpha.237 → 0.0.1-alpha.239
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.
- package/README.md +14 -6
- package/dist/__fixtures__/settings.yaml +18 -20
- package/dist/__mocks__/MockCodeMirrorEditor.svelte +17 -0
- package/dist/__mocks__/MockCodeMirrorEditor.svelte.d.ts +21 -0
- package/dist/__mocks__/MockComponent.js +1 -1
- package/dist/__mocks__/MockComponent.svelte +7 -3
- package/dist/__mocks__/MockComponent.svelte.d.ts +1 -0
- package/dist/__mocks__/mockWeb3Config.d.ts +1 -1
- package/dist/__mocks__/mockWeb3Config.js +10 -7
- package/dist/__mocks__/queries.js +9 -9
- package/dist/__mocks__/stores.d.ts +4 -4
- package/dist/__mocks__/stores.js +40 -40
- package/dist/app.css +3 -3
- package/dist/components/ButtonDarkMode.svelte +7 -1
- package/dist/components/ButtonScrub.svelte +22 -0
- package/dist/components/ButtonScrub.svelte.d.ts +25 -0
- package/dist/components/ButtonVaultLink.svelte +3 -2
- package/dist/components/ButtonVaultLink.svelte.d.ts +2 -2
- package/dist/components/CodeMirrorRainlang.svelte +19 -2
- package/dist/components/CodeMirrorRainlang.svelte.d.ts +2 -1
- package/dist/components/Hash.svelte +3 -2
- package/dist/components/{ListViewOrderbookFilters.svelte → ListViewRaindexFilters.svelte} +7 -7
- package/dist/components/{ListViewOrderbookFilters.svelte.d.ts → ListViewRaindexFilters.svelte.d.ts} +7 -7
- package/dist/components/LocalDbStatusBadge.svelte.d.ts +1 -1
- package/dist/components/LocalDbStatusCard.svelte +7 -4
- package/dist/components/LocalDbStatusCard.svelte.d.ts +2 -2
- package/dist/components/LocalDbStatusModal.svelte +16 -14
- package/dist/components/LocalDbStatusModal.svelte.d.ts +2 -2
- package/dist/components/OrderOrVaultHash.svelte +2 -2
- package/dist/components/OrderOrVaultHash.svelte.d.ts +2 -2
- package/dist/components/Sensitive.svelte +16 -0
- package/dist/components/Sensitive.svelte.d.ts +28 -0
- package/dist/components/TanstackAppTable.svelte +146 -87
- package/dist/components/TanstackAppTable.svelte.d.ts +1 -1
- package/dist/components/VaultBalanceChangeTypeFilter.svelte +1 -1
- package/dist/components/VaultBalanceChangeTypeFilter.svelte.d.ts +1 -1
- package/dist/components/VaultCard.svelte +1 -1
- package/dist/components/VaultCard.svelte.d.ts +1 -1
- package/dist/components/charts/OrderTradesChart.svelte +116 -97
- package/dist/components/charts/OrderTradesChart.svelte.d.ts +2 -2
- package/dist/components/charts/transformAndSortData.d.ts +1 -1
- package/dist/components/charts/transformAndSortData.js +19 -19
- package/dist/components/deployment/DeploymentSteps.svelte +5 -2
- package/dist/components/deployment/DeploymentSteps.svelte.d.ts +1 -1
- package/dist/components/deployment/DeploymentsSection.svelte.d.ts +1 -1
- package/dist/components/deployment/DepositInput.svelte +1 -1
- package/dist/components/deployment/DepositInput.svelte.d.ts +1 -1
- package/dist/components/deployment/FieldDefinitionInput.svelte +1 -1
- package/dist/components/deployment/FieldDefinitionInput.svelte.d.ts +1 -1
- package/dist/components/deployment/OrderPage.svelte.d.ts +1 -1
- package/dist/components/deployment/SelectToken.svelte.d.ts +1 -1
- package/dist/components/deployment/TokenIOInput.svelte +1 -1
- package/dist/components/deployment/TokenIOInput.svelte.d.ts +1 -1
- package/dist/components/deployment/TokenSelectionModal.svelte.d.ts +1 -1
- package/dist/components/detail/OrderDetail.svelte +12 -6
- package/dist/components/detail/OrderDetail.svelte.d.ts +2 -2
- package/dist/components/detail/TanstackOrderQuote.svelte +22 -0
- package/dist/components/detail/TanstackOrderQuote.svelte.d.ts +1 -1
- package/dist/components/detail/VaultDetail.svelte +12 -10
- package/dist/components/detail/VaultDetail.svelte.d.ts +2 -2
- package/dist/components/dropdown/{DropdownOrderbooksFilter.svelte → DropdownRaindexesFilter.svelte} +54 -54
- package/dist/components/dropdown/DropdownRaindexesFilter.svelte.d.ts +25 -0
- package/dist/components/dropdown/DropdownTokensFilter.svelte.d.ts +1 -1
- package/dist/components/icon/Refresh.svelte +2 -1
- package/dist/components/icon/Refresh.svelte.d.ts +1 -0
- package/dist/components/input/InputTokenAmount.svelte +16 -1
- package/dist/components/input/InputTokenAmount.svelte.d.ts +1 -1
- package/dist/components/tables/OrderTradesListTable.svelte +113 -98
- package/dist/components/tables/OrderTradesListTable.svelte.d.ts +1 -1
- package/dist/components/tables/OrderVaultsVolTable.svelte +1 -1
- package/dist/components/tables/OrderVaultsVolTable.svelte.d.ts +1 -1
- package/dist/components/tables/OrdersListTable.svelte +19 -17
- package/dist/components/tables/OrdersListTable.svelte.d.ts +1 -1
- package/dist/components/tables/VaultBalanceChangesTable.svelte +1 -1
- package/dist/components/tables/VaultBalanceChangesTable.svelte.d.ts +1 -1
- package/dist/components/tables/VaultsListTable.svelte +24 -21
- package/dist/components/tables/VaultsListTable.svelte.d.ts +2 -2
- package/dist/components/transactions/FixedBottomTransaction.svelte +1 -0
- package/dist/components/transactions/getStatusEmoji.d.ts +1 -1
- package/dist/components/transactions/getStatusEmoji.js +13 -13
- package/dist/consts.js +1 -1
- package/dist/errors/DeploymentStepsError.js +3 -3
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/hooks/useLocalDb.d.ts +1 -1
- package/dist/hooks/useLocalDb.js +3 -3
- package/dist/hooks/useRaindexClient.d.ts +1 -1
- package/dist/hooks/useRaindexClient.js +4 -4
- package/dist/hooks/useRaindexOrderBuilder.d.ts +1 -1
- package/dist/hooks/useRaindexOrderBuilder.js +4 -4
- package/dist/index.d.ts +122 -114
- package/dist/index.js +115 -109
- package/dist/models/Transaction.d.ts +4 -4
- package/dist/models/Transaction.js +9 -9
- package/dist/providers/RaindexClientProvider.svelte +1 -1
- package/dist/providers/RaindexClientProvider.svelte.d.ts +1 -1
- package/dist/providers/RaindexOrderBuilderProvider.svelte +1 -1
- package/dist/providers/RaindexOrderBuilderProvider.svelte.d.ts +1 -1
- package/dist/providers/dotrainRegistry/DotrainRegistryProvider.svelte.d.ts +1 -1
- package/dist/providers/dotrainRegistry/context.d.ts +2 -2
- package/dist/providers/dotrainRegistry/context.js +13 -10
- package/dist/providers/dotrainRegistry/useDotrainRegistry.d.ts +1 -1
- package/dist/providers/dotrainRegistry/useDotrainRegistry.js +8 -8
- package/dist/providers/registry/RegistryManager.js +8 -7
- package/dist/providers/registry/context.d.ts +1 -1
- package/dist/providers/registry/context.js +9 -9
- package/dist/providers/registry/useRegistry.d.ts +1 -1
- package/dist/providers/registry/useRegistry.js +5 -5
- package/dist/providers/toasts/context.d.ts +2 -2
- package/dist/providers/toasts/context.js +4 -4
- package/dist/providers/toasts/useToasts.d.ts +1 -1
- package/dist/providers/toasts/useToasts.js +4 -4
- package/dist/providers/transactions/TransactionManager.d.ts +14 -15
- package/dist/providers/transactions/TransactionManager.js +107 -107
- package/dist/providers/transactions/context.d.ts +1 -1
- package/dist/providers/transactions/context.js +4 -4
- package/dist/providers/transactions/useTransactions.js +2 -2
- package/dist/providers/wallet/context.d.ts +1 -1
- package/dist/providers/wallet/context.js +11 -11
- package/dist/providers/wallet/useAccount.js +27 -27
- package/dist/queries/keys.js +10 -10
- package/dist/queries/queryClient.d.ts +1 -1
- package/dist/queries/queryClient.js +8 -8
- package/dist/services/awaitTransactionIndexing.d.ts +8 -8
- package/dist/services/awaitTransactionIndexing.js +10 -8
- package/dist/services/getExplorerLink.js +2 -2
- package/dist/services/handleShareChoices.d.ts +1 -1
- package/dist/services/handleShareChoices.js +4 -4
- package/dist/services/historicalOrderCharts.d.ts +2 -2
- package/dist/services/historicalOrderCharts.js +260 -201
- package/dist/services/index.d.ts +5 -3
- package/dist/services/index.js +3 -2
- package/dist/services/loadRegistryUrl.d.ts +1 -1
- package/dist/services/loadRegistryUrl.js +5 -5
- package/dist/services/pairTradesChartData.d.ts +2 -2
- package/dist/services/pairTradesChartData.js +28 -24
- package/dist/services/registry.d.ts +1 -1
- package/dist/services/registry.js +10 -10
- package/dist/services/time.d.ts +1 -1
- package/dist/services/time.js +35 -35
- package/dist/services/validateAmount.d.ts +30 -0
- package/dist/services/validateAmount.js +53 -0
- package/dist/storesGeneric/cachedWritableStore.d.ts +2 -2
- package/dist/storesGeneric/cachedWritableStore.js +3 -3
- package/dist/storesGeneric/scrub.d.ts +14 -0
- package/dist/storesGeneric/scrub.js +22 -0
- package/dist/test/matchers.d.ts +2 -2
- package/dist/test/matchers.js +2 -2
- package/dist/types/account.d.ts +2 -2
- package/dist/types/appStores.d.ts +3 -3
- package/dist/types/modal.d.ts +3 -3
- package/dist/types/order.d.ts +1 -1
- package/dist/types/toast.d.ts +2 -2
- package/dist/types/tokenBalance.d.ts +1 -1
- package/dist/types/transaction.d.ts +4 -4
- package/dist/utils/breadcrumbs.js +2 -2
- package/dist/utils/codeMirrorThemes.js +80 -74
- package/dist/utils/configHelpers.d.ts +1 -1
- package/dist/utils/configHelpers.js +6 -6
- package/dist/utils/constructHashLink.d.ts +3 -3
- package/dist/utils/constructHashLink.js +39 -37
- package/dist/utils/getNetworkName.js +5 -5
- package/dist/utils/hex.js +1 -1
- package/dist/utils/lightweightChartsThemes.d.ts +1 -1
- package/dist/utils/lightweightChartsThemes.js +11 -11
- package/dist/utils/localDbStatus.d.ts +26 -0
- package/dist/utils/localDbStatus.js +22 -0
- package/dist/utils/number.js +5 -3
- package/dist/utils/stripTrailingWhitespace.d.ts +16 -0
- package/dist/utils/stripTrailingWhitespace.js +22 -0
- package/dist/utils/tokens.d.ts +1 -1
- package/dist/utils/tokens.js +1 -1
- package/dist/utils/vaultBalanceChangeLabels.d.ts +1 -1
- package/dist/utils/vaultBalanceChangeLabels.js +11 -11
- package/package.json +89 -89
- package/dist/components/dropdown/DropdownOrderbooksFilter.svelte.d.ts +0 -25
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { writable } from
|
|
2
|
-
import { TransactionStore } from
|
|
3
|
-
import { TransactionName, TransactionStatusMessage, TransactionStoreErrorMessage } from
|
|
4
|
-
import { getExplorerLink } from
|
|
5
|
-
import { RaindexClient, Float } from
|
|
1
|
+
import { writable } from "svelte/store";
|
|
2
|
+
import { TransactionStore } from "../../models/Transaction";
|
|
3
|
+
import { TransactionName, TransactionStatusMessage, TransactionStoreErrorMessage, } from "../../types/transaction";
|
|
4
|
+
import { getExplorerLink } from "../../services/getExplorerLink";
|
|
5
|
+
import { RaindexClient, Float, } from "@rainlanguage/raindex";
|
|
6
|
+
const ADD_ORDER_INDEXING_MAX_ATTEMPTS = 12;
|
|
7
|
+
const ADD_ORDER_INDEXING_INTERVAL_MS = 5_000;
|
|
6
8
|
/**
|
|
7
9
|
* Creates an indexing function that wraps SDK-based polling logic.
|
|
8
|
-
* The SDK handles
|
|
9
|
-
* so we only need to call it once.
|
|
10
|
+
* The SDK handles the retry loop internally, so we only need to call it once.
|
|
10
11
|
*
|
|
11
12
|
* @param options Configuration for SDK-based indexing
|
|
12
13
|
* @param options.call Function that calls the SDK method (e.g. getAddOrdersForTransaction)
|
|
@@ -20,17 +21,17 @@ export function createSdkIndexingFn(options) {
|
|
|
20
21
|
try {
|
|
21
22
|
const result = await options.call();
|
|
22
23
|
if (result.error) {
|
|
23
|
-
const errorMsg = result.error.readableMsg?.toLowerCase() ??
|
|
24
|
-
if (errorMsg.includes(
|
|
24
|
+
const errorMsg = result.error.readableMsg?.toLowerCase() ?? "";
|
|
25
|
+
if (errorMsg.includes("timeout")) {
|
|
25
26
|
ctx.updateState({
|
|
26
27
|
status: TransactionStatusMessage.ERROR,
|
|
27
|
-
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_TIMEOUT_ERROR
|
|
28
|
+
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_TIMEOUT_ERROR,
|
|
28
29
|
});
|
|
29
30
|
}
|
|
30
31
|
else {
|
|
31
32
|
ctx.updateState({
|
|
32
33
|
status: TransactionStatusMessage.ERROR,
|
|
33
|
-
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_FAILED
|
|
34
|
+
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_FAILED,
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
37
|
return ctx.onError();
|
|
@@ -47,14 +48,14 @@ export function createSdkIndexingFn(options) {
|
|
|
47
48
|
// No valid data after polling
|
|
48
49
|
ctx.updateState({
|
|
49
50
|
status: TransactionStatusMessage.ERROR,
|
|
50
|
-
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_FAILED
|
|
51
|
+
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_FAILED,
|
|
51
52
|
});
|
|
52
53
|
return ctx.onError();
|
|
53
54
|
}
|
|
54
55
|
catch {
|
|
55
56
|
ctx.updateState({
|
|
56
57
|
status: TransactionStatusMessage.ERROR,
|
|
57
|
-
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_FAILED
|
|
58
|
+
errorDetails: TransactionStoreErrorMessage.SUBGRAPH_FAILED,
|
|
58
59
|
});
|
|
59
60
|
return ctx.onError();
|
|
60
61
|
}
|
|
@@ -87,7 +88,7 @@ export class TransactionManager {
|
|
|
87
88
|
this.transactions = writable([]);
|
|
88
89
|
}
|
|
89
90
|
/**
|
|
90
|
-
* Creates and initializes a new transaction for removing an order from the
|
|
91
|
+
* Creates and initializes a new transaction for removing an order from the raindex.
|
|
91
92
|
* @param args - Configuration for the remove order transaction.
|
|
92
93
|
* @param args.txHash - Hash of the transaction to track.
|
|
93
94
|
* @param args.chainId - Chain ID where the transaction is being executed.
|
|
@@ -104,19 +105,19 @@ export class TransactionManager {
|
|
|
104
105
|
*/
|
|
105
106
|
async createRemoveOrderTransaction(args) {
|
|
106
107
|
const name = TransactionName.REMOVAL;
|
|
107
|
-
const errorMessage =
|
|
108
|
-
const successMessage =
|
|
109
|
-
const { chainId, entity: {
|
|
110
|
-
const explorerLink = await getExplorerLink(txHash, chainId,
|
|
108
|
+
const errorMessage = "Order removal failed.";
|
|
109
|
+
const successMessage = "Order removed successfully.";
|
|
110
|
+
const { chainId, entity: { raindex }, queryKey, txHash, raindexClient, } = args;
|
|
111
|
+
const explorerLink = await getExplorerLink(txHash, chainId, "tx");
|
|
111
112
|
const toastLinks = [
|
|
112
113
|
{
|
|
113
114
|
link: explorerLink,
|
|
114
|
-
label:
|
|
115
|
-
}
|
|
115
|
+
label: "View on explorer",
|
|
116
|
+
},
|
|
116
117
|
];
|
|
117
118
|
const awaitIndexingFn = createSdkIndexingFn({
|
|
118
|
-
call: () => raindexClient.getRemoveOrdersForTransaction(chainId,
|
|
119
|
-
isSuccess: (orders) => Array.isArray(orders) && orders.length > 0
|
|
119
|
+
call: () => raindexClient.getRemoveOrdersForTransaction(chainId, raindex, txHash),
|
|
120
|
+
isSuccess: (orders) => Array.isArray(orders) && orders.length > 0,
|
|
120
121
|
});
|
|
121
122
|
return this.createTransaction({
|
|
122
123
|
...args,
|
|
@@ -125,7 +126,7 @@ export class TransactionManager {
|
|
|
125
126
|
successMessage,
|
|
126
127
|
queryKey,
|
|
127
128
|
toastLinks,
|
|
128
|
-
awaitIndexingFn
|
|
129
|
+
awaitIndexingFn,
|
|
129
130
|
});
|
|
130
131
|
}
|
|
131
132
|
/**
|
|
@@ -146,23 +147,23 @@ export class TransactionManager {
|
|
|
146
147
|
*/
|
|
147
148
|
async createWithdrawTransaction(args) {
|
|
148
149
|
const name = TransactionName.WITHDRAWAL;
|
|
149
|
-
const errorMessage =
|
|
150
|
-
const successMessage =
|
|
151
|
-
const { chainId, entity: {
|
|
152
|
-
const explorerLink = await getExplorerLink(txHash, chainId,
|
|
150
|
+
const errorMessage = "Withdrawal failed.";
|
|
151
|
+
const successMessage = "Withdrawal successful.";
|
|
152
|
+
const { chainId, entity: { raindex }, queryKey, txHash, raindexClient, } = args;
|
|
153
|
+
const explorerLink = await getExplorerLink(txHash, chainId, "tx");
|
|
153
154
|
const toastLinks = [
|
|
154
155
|
{
|
|
155
|
-
link: `/vaults/${chainId}-${
|
|
156
|
-
label:
|
|
156
|
+
link: `/vaults/${chainId}-${raindex}-${queryKey}`,
|
|
157
|
+
label: "View vault",
|
|
157
158
|
},
|
|
158
159
|
{
|
|
159
160
|
link: explorerLink,
|
|
160
|
-
label:
|
|
161
|
-
}
|
|
161
|
+
label: "View on explorer",
|
|
162
|
+
},
|
|
162
163
|
];
|
|
163
164
|
const awaitIndexingFn = createSdkIndexingFn({
|
|
164
|
-
call: () => raindexClient.getTransaction(chainId,
|
|
165
|
-
isSuccess: (tx) => !!tx
|
|
165
|
+
call: () => raindexClient.getTransaction(chainId, raindex, txHash),
|
|
166
|
+
isSuccess: (tx) => !!tx,
|
|
166
167
|
});
|
|
167
168
|
return this.createTransaction({
|
|
168
169
|
...args,
|
|
@@ -171,18 +172,18 @@ export class TransactionManager {
|
|
|
171
172
|
successMessage,
|
|
172
173
|
queryKey,
|
|
173
174
|
toastLinks,
|
|
174
|
-
awaitIndexingFn
|
|
175
|
+
awaitIndexingFn,
|
|
175
176
|
});
|
|
176
177
|
}
|
|
177
178
|
/**
|
|
178
179
|
* Creates a multicall withdrawal transaction.
|
|
179
180
|
*
|
|
180
|
-
* Precondition: all provided vaults must share the same
|
|
181
|
+
* Precondition: all provided vaults must share the same raindex.
|
|
181
182
|
* This is enforced upstream in handleVaultsWithdrawAll.ts:
|
|
182
|
-
* if (vaults.some(v => v.
|
|
183
|
+
* if (vaults.some(v => v.raindex !== vaults[0].raindex)) { … }
|
|
183
184
|
*
|
|
184
185
|
* @param args.chainId the target chain ID
|
|
185
|
-
* @param args.vaults list of RaindexVault instances (must share
|
|
186
|
+
* @param args.vaults list of RaindexVault instances (must share a raindex)
|
|
186
187
|
* @param args.txHash the transaction hash to wrap
|
|
187
188
|
* @param args.queryKey cache key for invalidation
|
|
188
189
|
* @param args.raindexClient Raindex API client * @example
|
|
@@ -196,29 +197,29 @@ export class TransactionManager {
|
|
|
196
197
|
*/
|
|
197
198
|
async createVaultsWithdrawAllTransaction(args) {
|
|
198
199
|
const name = TransactionName.WITHDRAWAL_MULTIPLE;
|
|
199
|
-
const errorMessage =
|
|
200
|
-
const successMessage =
|
|
200
|
+
const errorMessage = "Withdrawal failed.";
|
|
201
|
+
const successMessage = "Withdrawal successful.";
|
|
201
202
|
const { chainId, vaults, txHash, queryKey, raindexClient } = args;
|
|
202
203
|
if (vaults.length === 0) {
|
|
203
|
-
throw new Error(
|
|
204
|
+
throw new Error("At least one vault is required for withdrawal");
|
|
204
205
|
}
|
|
205
|
-
// All vaults must share the same
|
|
206
|
+
// All vaults must share the same raindex for multicall transactions
|
|
206
207
|
// It should be validated before calling this method
|
|
207
|
-
const
|
|
208
|
-
const explorerLink = await getExplorerLink(txHash, chainId,
|
|
208
|
+
const raindex = vaults[0].raindex;
|
|
209
|
+
const explorerLink = await getExplorerLink(txHash, chainId, "tx");
|
|
209
210
|
const toastLinks = [
|
|
210
211
|
{
|
|
211
|
-
link:
|
|
212
|
-
label:
|
|
212
|
+
link: "/vaults/",
|
|
213
|
+
label: "View all vaults",
|
|
213
214
|
},
|
|
214
215
|
{
|
|
215
216
|
link: explorerLink,
|
|
216
|
-
label:
|
|
217
|
-
}
|
|
217
|
+
label: "View on explorer",
|
|
218
|
+
},
|
|
218
219
|
];
|
|
219
220
|
const awaitIndexingFn = createSdkIndexingFn({
|
|
220
|
-
call: () => raindexClient.getTransaction(chainId,
|
|
221
|
-
isSuccess: (tx) => !!tx
|
|
221
|
+
call: () => raindexClient.getTransaction(chainId, raindex, txHash),
|
|
222
|
+
isSuccess: (tx) => !!tx,
|
|
222
223
|
});
|
|
223
224
|
return this.createTransaction({
|
|
224
225
|
...args,
|
|
@@ -227,7 +228,7 @@ export class TransactionManager {
|
|
|
227
228
|
successMessage,
|
|
228
229
|
toastLinks,
|
|
229
230
|
queryKey,
|
|
230
|
-
awaitIndexingFn
|
|
231
|
+
awaitIndexingFn,
|
|
231
232
|
});
|
|
232
233
|
}
|
|
233
234
|
/**
|
|
@@ -249,24 +250,24 @@ export class TransactionManager {
|
|
|
249
250
|
*/
|
|
250
251
|
async createApprovalTransaction(args) {
|
|
251
252
|
const { entity, queryKey, chainId } = args;
|
|
252
|
-
const tokenSymbol = entity?.token.symbol ||
|
|
253
|
+
const tokenSymbol = entity?.token.symbol || "token";
|
|
253
254
|
const name = `Approving ${tokenSymbol} spend`;
|
|
254
|
-
const errorMessage =
|
|
255
|
-
const successMessage =
|
|
256
|
-
const explorerLink = await getExplorerLink(args.txHash, args.chainId,
|
|
255
|
+
const errorMessage = "Approval failed.";
|
|
256
|
+
const successMessage = "Approval successful.";
|
|
257
|
+
const explorerLink = await getExplorerLink(args.txHash, args.chainId, "tx");
|
|
257
258
|
let toastLinks = [
|
|
258
259
|
{
|
|
259
260
|
link: explorerLink,
|
|
260
|
-
label:
|
|
261
|
-
}
|
|
261
|
+
label: "View on explorer",
|
|
262
|
+
},
|
|
262
263
|
];
|
|
263
264
|
if (entity) {
|
|
264
265
|
toastLinks = [
|
|
265
266
|
{
|
|
266
|
-
link: `/vaults/${chainId}-${entity.
|
|
267
|
-
label:
|
|
267
|
+
link: `/vaults/${chainId}-${entity.raindex}-${queryKey}`,
|
|
268
|
+
label: "View vault",
|
|
268
269
|
},
|
|
269
|
-
...toastLinks
|
|
270
|
+
...toastLinks,
|
|
270
271
|
];
|
|
271
272
|
}
|
|
272
273
|
return this.createTransaction({
|
|
@@ -274,7 +275,7 @@ export class TransactionManager {
|
|
|
274
275
|
name,
|
|
275
276
|
errorMessage,
|
|
276
277
|
successMessage,
|
|
277
|
-
toastLinks
|
|
278
|
+
toastLinks,
|
|
278
279
|
});
|
|
279
280
|
}
|
|
280
281
|
/**
|
|
@@ -285,22 +286,22 @@ export class TransactionManager {
|
|
|
285
286
|
* @param args.queryKey - Identifier used for query invalidation, typically the order hash.
|
|
286
287
|
*/
|
|
287
288
|
async createMetaTransaction(args) {
|
|
288
|
-
const name =
|
|
289
|
-
const errorMessage =
|
|
290
|
-
const successMessage =
|
|
291
|
-
const explorerLink = await getExplorerLink(args.txHash, args.chainId,
|
|
289
|
+
const name = "Publishing metadata";
|
|
290
|
+
const errorMessage = "Metadata publication failed.";
|
|
291
|
+
const successMessage = "Metadata published.";
|
|
292
|
+
const explorerLink = await getExplorerLink(args.txHash, args.chainId, "tx");
|
|
292
293
|
const toastLinks = [
|
|
293
294
|
{
|
|
294
295
|
link: explorerLink,
|
|
295
|
-
label:
|
|
296
|
-
}
|
|
296
|
+
label: "View on explorer",
|
|
297
|
+
},
|
|
297
298
|
];
|
|
298
299
|
return this.createTransaction({
|
|
299
300
|
...args,
|
|
300
301
|
name,
|
|
301
302
|
errorMessage,
|
|
302
303
|
successMessage,
|
|
303
|
-
toastLinks
|
|
304
|
+
toastLinks,
|
|
304
305
|
});
|
|
305
306
|
}
|
|
306
307
|
/**
|
|
@@ -324,23 +325,23 @@ export class TransactionManager {
|
|
|
324
325
|
async createDepositTransaction(args) {
|
|
325
326
|
const tokenSymbol = args.entity.token.symbol;
|
|
326
327
|
const name = `Depositing ${args.amount.format().value} ${tokenSymbol}`;
|
|
327
|
-
const errorMessage =
|
|
328
|
-
const successMessage =
|
|
329
|
-
const { chainId, entity: {
|
|
330
|
-
const explorerLink = await getExplorerLink(txHash, chainId,
|
|
328
|
+
const errorMessage = "Deposit failed.";
|
|
329
|
+
const successMessage = "Deposit successful.";
|
|
330
|
+
const { chainId, entity: { raindex }, txHash, queryKey, raindexClient, } = args;
|
|
331
|
+
const explorerLink = await getExplorerLink(txHash, chainId, "tx");
|
|
331
332
|
const toastLinks = [
|
|
332
333
|
{
|
|
333
|
-
link: `/vaults/${chainId}-${
|
|
334
|
-
label:
|
|
334
|
+
link: `/vaults/${chainId}-${raindex}-${queryKey}`,
|
|
335
|
+
label: "View vault",
|
|
335
336
|
},
|
|
336
337
|
{
|
|
337
338
|
link: explorerLink,
|
|
338
|
-
label:
|
|
339
|
-
}
|
|
339
|
+
label: "View on explorer",
|
|
340
|
+
},
|
|
340
341
|
];
|
|
341
342
|
const awaitIndexingFn = createSdkIndexingFn({
|
|
342
|
-
call: () => raindexClient.getTransaction(chainId,
|
|
343
|
-
isSuccess: (tx) => !!tx
|
|
343
|
+
call: () => raindexClient.getTransaction(chainId, raindex, txHash),
|
|
344
|
+
isSuccess: (tx) => !!tx,
|
|
344
345
|
});
|
|
345
346
|
return this.createTransaction({
|
|
346
347
|
...args,
|
|
@@ -349,7 +350,7 @@ export class TransactionManager {
|
|
|
349
350
|
successMessage,
|
|
350
351
|
queryKey,
|
|
351
352
|
toastLinks,
|
|
352
|
-
awaitIndexingFn
|
|
353
|
+
awaitIndexingFn,
|
|
353
354
|
});
|
|
354
355
|
}
|
|
355
356
|
/**
|
|
@@ -367,21 +368,20 @@ export class TransactionManager {
|
|
|
367
368
|
* });
|
|
368
369
|
*/
|
|
369
370
|
async createAddOrderTransaction(args) {
|
|
370
|
-
const { queryKey, txHash, chainId,
|
|
371
|
-
const name =
|
|
372
|
-
const errorMessage =
|
|
373
|
-
const successMessage =
|
|
374
|
-
const explorerLink = await getExplorerLink(txHash, chainId,
|
|
371
|
+
const { queryKey, txHash, chainId, raindex, raindexClient } = args;
|
|
372
|
+
const name = "Deploying order";
|
|
373
|
+
const errorMessage = "Deployment failed.";
|
|
374
|
+
const successMessage = "Order deployed successfully.";
|
|
375
|
+
const explorerLink = await getExplorerLink(txHash, chainId, "tx");
|
|
375
376
|
const toastLinks = [
|
|
376
377
|
{
|
|
377
378
|
link: explorerLink,
|
|
378
|
-
label:
|
|
379
|
-
}
|
|
379
|
+
label: "View on explorer",
|
|
380
|
+
},
|
|
380
381
|
];
|
|
381
|
-
// SDK-based indexing - the
|
|
382
|
-
// local-DB-first polling followed by subgraph fallback internally
|
|
382
|
+
// SDK-based indexing - getAddOrdersForTransaction handles the retry loop.
|
|
383
383
|
const awaitIndexingFn = createSdkIndexingFn({
|
|
384
|
-
call: () => raindexClient.getAddOrdersForTransaction(chainId,
|
|
384
|
+
call: () => raindexClient.getAddOrdersForTransaction(chainId, raindex, txHash, ADD_ORDER_INDEXING_MAX_ATTEMPTS, ADD_ORDER_INDEXING_INTERVAL_MS),
|
|
385
385
|
isSuccess: (orders) => Array.isArray(orders) && orders.length > 0,
|
|
386
386
|
buildLinks: (orders) => {
|
|
387
387
|
if (!Array.isArray(orders) || orders.length === 0)
|
|
@@ -391,11 +391,11 @@ export class TransactionManager {
|
|
|
391
391
|
return [];
|
|
392
392
|
return [
|
|
393
393
|
{
|
|
394
|
-
link: `/orders/${chainId}-${
|
|
395
|
-
label:
|
|
396
|
-
}
|
|
394
|
+
link: `/orders/${chainId}-${raindex}-${firstOrder.orderHash}`,
|
|
395
|
+
label: "View order",
|
|
396
|
+
},
|
|
397
397
|
];
|
|
398
|
-
}
|
|
398
|
+
},
|
|
399
399
|
});
|
|
400
400
|
return this.createTransaction({
|
|
401
401
|
...args,
|
|
@@ -404,7 +404,7 @@ export class TransactionManager {
|
|
|
404
404
|
successMessage,
|
|
405
405
|
queryKey,
|
|
406
406
|
toastLinks,
|
|
407
|
-
awaitIndexingFn
|
|
407
|
+
awaitIndexingFn,
|
|
408
408
|
});
|
|
409
409
|
}
|
|
410
410
|
/**
|
|
@@ -426,19 +426,19 @@ export class TransactionManager {
|
|
|
426
426
|
*/
|
|
427
427
|
async createTakeOrderTransaction(args) {
|
|
428
428
|
const name = TransactionName.TAKE_ORDER;
|
|
429
|
-
const errorMessage =
|
|
430
|
-
const successMessage =
|
|
431
|
-
const { chainId, entity: {
|
|
432
|
-
const explorerLink = await getExplorerLink(txHash, chainId,
|
|
429
|
+
const errorMessage = "Take order failed.";
|
|
430
|
+
const successMessage = "Order taken successfully.";
|
|
431
|
+
const { chainId, entity: { raindex }, queryKey, txHash, raindexClient, } = args;
|
|
432
|
+
const explorerLink = await getExplorerLink(txHash, chainId, "tx");
|
|
433
433
|
const toastLinks = [
|
|
434
434
|
{
|
|
435
435
|
link: explorerLink,
|
|
436
|
-
label:
|
|
437
|
-
}
|
|
436
|
+
label: "View on explorer",
|
|
437
|
+
},
|
|
438
438
|
];
|
|
439
439
|
const awaitIndexingFn = createSdkIndexingFn({
|
|
440
|
-
call: () => raindexClient.getTransaction(chainId,
|
|
441
|
-
isSuccess: (tx) => !!tx
|
|
440
|
+
call: () => raindexClient.getTransaction(chainId, raindex, txHash),
|
|
441
|
+
isSuccess: (tx) => !!tx,
|
|
442
442
|
});
|
|
443
443
|
return this.createTransaction({
|
|
444
444
|
...args,
|
|
@@ -447,7 +447,7 @@ export class TransactionManager {
|
|
|
447
447
|
successMessage,
|
|
448
448
|
queryKey,
|
|
449
449
|
toastLinks,
|
|
450
|
-
awaitIndexingFn
|
|
450
|
+
awaitIndexingFn,
|
|
451
451
|
});
|
|
452
452
|
}
|
|
453
453
|
/**
|
|
@@ -465,7 +465,7 @@ export class TransactionManager {
|
|
|
465
465
|
async createTransaction(args) {
|
|
466
466
|
const createTransactionArgs = {
|
|
467
467
|
...args,
|
|
468
|
-
config: this.wagmiConfig
|
|
468
|
+
config: this.wagmiConfig,
|
|
469
469
|
};
|
|
470
470
|
const onSuccess = () => {
|
|
471
471
|
if (args.queryKey) {
|
|
@@ -475,15 +475,15 @@ export class TransactionManager {
|
|
|
475
475
|
const onError = () => {
|
|
476
476
|
this.addToast({
|
|
477
477
|
message: args.errorMessage,
|
|
478
|
-
type:
|
|
479
|
-
color:
|
|
480
|
-
links: args.toastLinks
|
|
478
|
+
type: "error",
|
|
479
|
+
color: "red",
|
|
480
|
+
links: args.toastLinks,
|
|
481
481
|
});
|
|
482
482
|
};
|
|
483
483
|
const transactionInstance = new TransactionStore(createTransactionArgs, onSuccess, onError);
|
|
484
484
|
this.transactions.update((currentTransactions) => [
|
|
485
485
|
...currentTransactions,
|
|
486
|
-
transactionInstance
|
|
486
|
+
transactionInstance,
|
|
487
487
|
]);
|
|
488
488
|
await transactionInstance.execute();
|
|
489
489
|
return transactionInstance;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { getContext, setContext } from
|
|
2
|
-
import { TransactionManager } from
|
|
1
|
+
import { getContext, setContext } from "svelte";
|
|
2
|
+
import { TransactionManager } from "./TransactionManager";
|
|
3
3
|
/**
|
|
4
4
|
* The context key used to store and retrieve the TransactionManager instance
|
|
5
5
|
*/
|
|
6
|
-
export const TRANSACTION_MANAGER_CONTEXT_KEY =
|
|
6
|
+
export const TRANSACTION_MANAGER_CONTEXT_KEY = "rain:ui-components:transactionManager";
|
|
7
7
|
/**
|
|
8
8
|
* Sets the TransactionManager instance in Svelte's context
|
|
9
9
|
*
|
|
@@ -22,7 +22,7 @@ export function setTransactionManagerContext(manager) {
|
|
|
22
22
|
export function getTransactionManagerContext() {
|
|
23
23
|
const manager = getContext(TRANSACTION_MANAGER_CONTEXT_KEY);
|
|
24
24
|
if (!manager) {
|
|
25
|
-
throw new Error(
|
|
25
|
+
throw new Error("TransactionManager not found. Did you forget to setTransactionManagerContext?");
|
|
26
26
|
}
|
|
27
27
|
return manager;
|
|
28
28
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getTransactionManagerContext } from
|
|
1
|
+
import { getTransactionManagerContext } from "./context";
|
|
2
2
|
/**
|
|
3
3
|
* Hook for accessing the transaction manager in the application.
|
|
4
4
|
* Provides access to the transactions store for monitoring transaction states.
|
|
@@ -13,6 +13,6 @@ export function useTransactions() {
|
|
|
13
13
|
const transactions = manager.getTransactions();
|
|
14
14
|
return {
|
|
15
15
|
manager,
|
|
16
|
-
transactions
|
|
16
|
+
transactions,
|
|
17
17
|
};
|
|
18
18
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { getContext, setContext } from
|
|
2
|
-
import { readable } from
|
|
3
|
-
export const ACCOUNT_KEY =
|
|
1
|
+
import { getContext, setContext } from "svelte";
|
|
2
|
+
import { readable } from "svelte/store";
|
|
3
|
+
export const ACCOUNT_KEY = "account_key";
|
|
4
4
|
/**
|
|
5
5
|
* Retrieves the account store directly from Svelte's context
|
|
6
6
|
*/
|
|
7
7
|
export const getAccountContext = () => {
|
|
8
8
|
const account = getContext(ACCOUNT_KEY);
|
|
9
9
|
if (!account) {
|
|
10
|
-
throw new Error(
|
|
10
|
+
throw new Error("No account was found in Svelte context. Did you forget to wrap your component with WalletProvider?");
|
|
11
11
|
}
|
|
12
12
|
return account;
|
|
13
13
|
};
|
|
@@ -19,17 +19,17 @@ export const setAccountContext = (account) => {
|
|
|
19
19
|
};
|
|
20
20
|
if (import.meta.vitest) {
|
|
21
21
|
const { describe, it, expect, vi, beforeEach } = import.meta.vitest;
|
|
22
|
-
vi.mock(
|
|
22
|
+
vi.mock("svelte", async (importOriginal) => ({
|
|
23
23
|
...(await importOriginal()),
|
|
24
|
-
getContext: vi.fn()
|
|
24
|
+
getContext: vi.fn(),
|
|
25
25
|
}));
|
|
26
|
-
describe(
|
|
26
|
+
describe("getAccountContext", () => {
|
|
27
27
|
const mockGetContext = vi.mocked(getContext);
|
|
28
28
|
beforeEach(() => {
|
|
29
29
|
mockGetContext.mockReset();
|
|
30
30
|
});
|
|
31
|
-
it(
|
|
32
|
-
const mockAccount = readable(
|
|
31
|
+
it("should return the account from context when it exists", () => {
|
|
32
|
+
const mockAccount = readable("0x456");
|
|
33
33
|
mockGetContext.mockImplementation((key) => {
|
|
34
34
|
if (key === ACCOUNT_KEY)
|
|
35
35
|
return mockAccount;
|
|
@@ -39,9 +39,9 @@ if (import.meta.vitest) {
|
|
|
39
39
|
expect(mockGetContext).toHaveBeenCalledWith(ACCOUNT_KEY);
|
|
40
40
|
expect(result).toEqual(mockAccount);
|
|
41
41
|
});
|
|
42
|
-
it(
|
|
42
|
+
it("should throw an error when account is not in context", () => {
|
|
43
43
|
mockGetContext.mockReturnValue(undefined);
|
|
44
|
-
expect(() => getAccountContext()).toThrow(
|
|
44
|
+
expect(() => getAccountContext()).toThrow("No account was found in Svelte context. Did you forget to wrap your component with WalletProvider?");
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
47
|
}
|