@subwallet/extension-base 1.3.20-0 → 1.3.21-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/background/KoniTypes.d.ts +8 -1
  2. package/cjs/defaults.js +1 -1
  3. package/cjs/koni/background/handlers/Extension.js +519 -90
  4. package/cjs/packageInfo.js +1 -1
  5. package/cjs/services/chain-service/handler/EvmApi.js +1 -3
  6. package/cjs/services/chain-service/utils/patch.js +1 -1
  7. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +19 -8
  8. package/cjs/services/earning-service/handlers/special.js +16 -10
  9. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +14 -5
  10. package/cjs/services/history-service/index.js +15 -3
  11. package/cjs/services/inapp-notification-service/index.js +78 -0
  12. package/cjs/services/inapp-notification-service/interfaces.js +2 -0
  13. package/cjs/services/keyring-service/context/state.js +2 -1
  14. package/cjs/services/request-service/handler/EvmRequestHandler.js +10 -0
  15. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +4 -3
  16. package/cjs/services/request-service/index.js +2 -2
  17. package/cjs/services/setting-service/constants.js +5 -2
  18. package/cjs/services/storage-service/DatabaseService.js +98 -2
  19. package/cjs/services/storage-service/databases/index.js +3 -0
  20. package/cjs/services/storage-service/db-stores/ProcessTransaction.js +47 -0
  21. package/cjs/services/storage-service/db-stores/Transaction.js +2 -0
  22. package/cjs/services/storage-service/db-stores/index.js +8 -1
  23. package/cjs/services/swap-service/handler/asset-hub/handler.js +30 -11
  24. package/cjs/services/swap-service/handler/hydradx-handler.js +18 -10
  25. package/cjs/services/swap-service/index.js +3 -0
  26. package/cjs/services/swap-service/utils.js +1 -0
  27. package/cjs/services/transaction-service/index.js +218 -9
  28. package/cjs/types/index.js +11 -0
  29. package/cjs/types/setting.js +1 -0
  30. package/cjs/types/swap/index.js +4 -1
  31. package/cjs/types/transaction/index.js +11 -0
  32. package/cjs/types/transaction/process.js +28 -0
  33. package/cjs/types/yield/actions/join/submit.js +16 -1
  34. package/defaults.d.ts +1 -1
  35. package/defaults.js +1 -1
  36. package/koni/background/handlers/Extension.d.ts +5 -0
  37. package/koni/background/handlers/Extension.js +437 -12
  38. package/package.json +21 -6
  39. package/packageInfo.js +1 -1
  40. package/services/chain-service/handler/EvmApi.js +1 -3
  41. package/services/chain-service/utils/patch.js +1 -1
  42. package/services/earning-service/handlers/liquid-staking/stella-swap.js +19 -8
  43. package/services/earning-service/handlers/special.js +18 -12
  44. package/services/history-service/helpers/recoverHistoryStatus.js +14 -5
  45. package/services/history-service/index.d.ts +6 -5
  46. package/services/history-service/index.js +16 -5
  47. package/services/inapp-notification-service/index.d.ts +2 -0
  48. package/services/inapp-notification-service/index.js +79 -1
  49. package/services/inapp-notification-service/interfaces.d.ts +8 -1
  50. package/services/inapp-notification-service/interfaces.js +2 -0
  51. package/services/keyring-service/context/state.d.ts +1 -1
  52. package/services/keyring-service/context/state.js +3 -2
  53. package/services/request-service/handler/EvmRequestHandler.js +10 -0
  54. package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -1
  55. package/services/request-service/handler/SubstrateRequestHandler.js +4 -3
  56. package/services/request-service/index.d.ts +1 -1
  57. package/services/request-service/index.js +2 -2
  58. package/services/setting-service/constants.d.ts +1 -0
  59. package/services/setting-service/constants.js +3 -1
  60. package/services/storage-service/DatabaseService.d.ts +12 -3
  61. package/services/storage-service/DatabaseService.js +100 -4
  62. package/services/storage-service/databases/index.d.ts +2 -1
  63. package/services/storage-service/databases/index.js +3 -0
  64. package/services/storage-service/db-stores/ProcessTransaction.d.ts +14 -0
  65. package/services/storage-service/db-stores/ProcessTransaction.js +39 -0
  66. package/services/storage-service/db-stores/Transaction.js +2 -0
  67. package/services/storage-service/db-stores/index.d.ts +1 -0
  68. package/services/storage-service/db-stores/index.js +2 -1
  69. package/services/swap-service/handler/asset-hub/handler.js +30 -11
  70. package/services/swap-service/handler/hydradx-handler.js +18 -10
  71. package/services/swap-service/index.js +3 -0
  72. package/services/swap-service/utils.js +1 -0
  73. package/services/transaction-service/index.d.ts +19 -1
  74. package/services/transaction-service/index.js +220 -11
  75. package/services/transaction-service/types.d.ts +13 -4
  76. package/types/index.d.ts +1 -0
  77. package/types/index.js +1 -0
  78. package/types/setting.d.ts +3 -0
  79. package/types/setting.js +1 -0
  80. package/types/swap/index.d.ts +3 -2
  81. package/types/swap/index.js +4 -1
  82. package/types/transaction/index.d.ts +1 -0
  83. package/types/transaction/index.js +1 -0
  84. package/types/transaction/process.d.ts +84 -0
  85. package/types/transaction/process.js +20 -0
  86. package/types/transaction/request.d.ts +3 -1
  87. package/types/yield/actions/join/submit.d.ts +18 -3
  88. package/types/yield/actions/join/submit.js +11 -1
@@ -14,7 +14,7 @@ import { parseLiquidStakingEvents, parseLiquidStakingFastUnstakeEvents, parseTra
14
14
  import { getBaseTransactionInfo, getTransactionId, isSubstrateTransaction, isTonTransaction } from '@subwallet/extension-base/services/transaction-service/helpers';
15
15
  import { getExplorerLink, parseTransactionData } from '@subwallet/extension-base/services/transaction-service/utils';
16
16
  import { isWalletConnectRequest } from '@subwallet/extension-base/services/wallet-connect-service/helpers';
17
- import { BasicTxErrorType, YieldPoolType } from '@subwallet/extension-base/types';
17
+ import { BasicTxErrorType, StepStatus, YieldPoolType } from '@subwallet/extension-base/types';
18
18
  import { anyNumberToBN, pairToAccount, reformatAddress } from '@subwallet/extension-base/utils';
19
19
  import { mergeTransactionAndSignature } from '@subwallet/extension-base/utils/eth/mergeTransactionAndSignature';
20
20
  import { isContractAddress, parseContractInput } from '@subwallet/extension-base/utils/eth/parseTransaction';
@@ -26,11 +26,13 @@ import { addHexPrefix } from 'ethereumjs-util';
26
26
  import { ethers } from 'ethers';
27
27
  import EventEmitter from 'eventemitter3';
28
28
  import { t } from 'i18next';
29
- import { BehaviorSubject, interval as rxjsInterval } from 'rxjs';
29
+ import { BehaviorSubject, interval as rxjsInterval, map as rxjsMap } from 'rxjs';
30
30
  import { hexToU8a, isHex } from '@polkadot/util';
31
31
  export default class TransactionService {
32
- transactionSubject = new BehaviorSubject({});
33
32
  watchTransactionSubscribes = {};
33
+ aliveProcessMap = new Map();
34
+ transactionSubject = new BehaviorSubject({});
35
+ aliveProcessSubject = new BehaviorSubject(this.aliveProcessMap);
34
36
  get transactions() {
35
37
  return this.transactionSubject.getValue();
36
38
  }
@@ -59,11 +61,13 @@ export default class TransactionService {
59
61
  return [];
60
62
  }
61
63
  async validateTransaction(transactionInput) {
64
+ var _transactionInput$ste;
62
65
  const validationResponse = {
63
66
  ...transactionInput,
64
67
  status: undefined,
65
68
  errors: transactionInput.errors || [],
66
- warnings: transactionInput.warnings || []
69
+ warnings: transactionInput.warnings || [],
70
+ processId: (_transactionInput$ste = transactionInput.step) === null || _transactionInput$ste === void 0 ? void 0 : _transactionInput$ste.processId
67
71
  };
68
72
  const {
69
73
  additionalValidator,
@@ -130,6 +134,44 @@ export default class TransactionService {
130
134
  getTransactionSubject() {
131
135
  return this.transactionSubject;
132
136
  }
137
+ get observables() {
138
+ const transactionSubject = this.transactionSubject;
139
+ const aliveProcessSubject = this.aliveProcessSubject;
140
+ return {
141
+ get transaction() {
142
+ return transactionSubject.asObservable();
143
+ },
144
+ get aliveProcess() {
145
+ return aliveProcessSubject.asObservable().pipe(rxjsMap(aliveProcessMap => {
146
+ const aliveProcessRecord = {};
147
+ aliveProcessMap.forEach((value, key) => {
148
+ aliveProcessRecord[key] = value;
149
+ });
150
+ return aliveProcessRecord;
151
+ }));
152
+ }
153
+ };
154
+ }
155
+ get values() {
156
+ const transactionSubject = this.transactionSubject;
157
+ const aliveProcessSubject = this.aliveProcessSubject;
158
+ return {
159
+ get transaction() {
160
+ return transactionSubject.value;
161
+ },
162
+ get aliveProcess() {
163
+ const aliveProcessMap = aliveProcessSubject.value;
164
+ const aliveProcessRecord = {};
165
+ aliveProcessMap.forEach((value, key) => {
166
+ aliveProcessRecord[key] = value;
167
+ });
168
+ return aliveProcessRecord;
169
+ }
170
+ };
171
+ }
172
+ updateAliveProcess() {
173
+ this.aliveProcessSubject.next(this.aliveProcessMap);
174
+ }
133
175
  fillTransactionDefaultInfo(transaction) {
134
176
  const isInternal = !transaction.url;
135
177
  const transactionId = getTransactionId(transaction.chainType, transaction.chain, isInternal, isWalletConnectRequest(transaction.id));
@@ -207,6 +249,12 @@ export default class TransactionService {
207
249
  resolve();
208
250
  }
209
251
  });
252
+ emitter.on('timeout', data => {
253
+ if (transaction.errorOnTimeOut && data.errors.length > 0) {
254
+ validatedTransaction.errors.push(...data.errors);
255
+ resolve();
256
+ }
257
+ });
210
258
  });
211
259
 
212
260
  // @ts-ignore
@@ -219,20 +267,39 @@ export default class TransactionService {
219
267
  // Send Transaction
220
268
  const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : transaction.chainType === 'evm' ? this.signAndSendEvmTransaction(transaction) : this.signAndSendTonTransaction(transaction));
221
269
  const {
222
- eventsHandler
270
+ eventsHandler,
271
+ step
223
272
  } = transaction;
224
273
  emitter.on('signed', data => {
225
274
  this.onSigned(data);
226
275
  });
227
276
  emitter.on('send', data => {
228
277
  this.onSend(data);
278
+ if (step) {
279
+ this.updateProcessStepStatus(step, {
280
+ transactionId: transaction.id,
281
+ status: StepStatus.SUBMITTING,
282
+ chain: transaction.chain
283
+ });
284
+ }
229
285
  });
230
286
  emitter.on('extrinsicHash', data => {
231
287
  this.onHasTransactionHash(data);
288
+ if (step) {
289
+ this.updateProcessStepStatus(step, {
290
+ extrinsicHash: data.extrinsicHash,
291
+ status: StepStatus.PROCESSING
292
+ });
293
+ }
232
294
  });
233
295
  emitter.on('success', data => {
234
296
  this.handlePostProcessing(data.id);
235
297
  this.onSuccess(data);
298
+ if (step) {
299
+ this.updateProcessStepStatus(step, {
300
+ status: StepStatus.COMPLETE
301
+ });
302
+ }
236
303
  });
237
304
  emitter.on('error', data => {
238
305
  // this.handlePostProcessing(data.id); // might enable this later
@@ -240,12 +307,33 @@ export default class TransactionService {
240
307
  ...data,
241
308
  errors: [...data.errors, new TransactionError(BasicTxErrorType.INTERNAL_ERROR)]
242
309
  });
310
+ if (step) {
311
+ const rejectError = data.errors.find(error => {
312
+ // TODO: REFACTOR ERROR CODE
313
+ if ([BasicTxErrorType.UNABLE_TO_SIGN, BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType)) {
314
+ return true;
315
+ }
316
+ return false;
317
+ });
318
+ if (rejectError) {
319
+ this.deleteProcess(step);
320
+ } else {
321
+ this.updateProcessStepStatus(step, {
322
+ status: StepStatus.FAILED
323
+ });
324
+ }
325
+ }
243
326
  });
244
327
  emitter.on('timeout', data => {
245
328
  this.onTimeOut({
246
329
  ...data,
247
330
  errors: [...data.errors, new TransactionError(BasicTxErrorType.TIMEOUT)]
248
331
  });
332
+ if (step) {
333
+ this.updateProcessStepStatus(step, {
334
+ status: StepStatus.TIMEOUT
335
+ });
336
+ }
249
337
  });
250
338
 
251
339
  // Todo: handle any event with transaction.eventsHandler
@@ -276,6 +364,7 @@ export default class TransactionService {
276
364
  return getExplorerLink(chainInfo, transaction.extrinsicHash, 'tx');
277
365
  }
278
366
  transactionToHistories(id, startBlock, nonce, eventLogs) {
367
+ var _transaction$step;
279
368
  const transaction = this.getTransaction(id);
280
369
  const extrinsicType = transaction.extrinsicType;
281
370
  const chainInfo = this.state.chainService.getChainInfoByKey(transaction.chain);
@@ -299,7 +388,8 @@ export default class TransactionService {
299
388
  blockHash: '',
300
389
  // Will be added in next step
301
390
  nonce: nonce !== null && nonce !== void 0 ? nonce : 0,
302
- startBlock: startBlock || 0
391
+ startBlock: startBlock || 0,
392
+ processId: (_transaction$step = transaction.step) === null || _transaction$step === void 0 ? void 0 : _transaction$step.processId
303
393
  };
304
394
  const nativeAsset = _getChainNativeTokenBasicInfo(chainInfo);
305
395
  const baseNativeAmount = {
@@ -650,6 +740,7 @@ export default class TransactionService {
650
740
 
651
741
  // Create Input History Transaction History
652
742
  this.state.historyService.insertHistories(this.transactionToHistories(id, startBlock, nonce)).catch(console.error);
743
+ this.createProcessNotification(id).catch(console.error);
653
744
  console.debug(`Transaction "${id}" is sent`);
654
745
  }
655
746
  onHasTransactionHash({
@@ -856,6 +947,8 @@ export default class TransactionService {
856
947
  address,
857
948
  chain,
858
949
  id,
950
+ isPassConfirmation,
951
+ step,
859
952
  transaction,
860
953
  url
861
954
  }) {
@@ -934,7 +1027,8 @@ export default class TransactionService {
934
1027
  id,
935
1028
  errors: [],
936
1029
  warnings: [],
937
- extrinsicHash: id
1030
+ extrinsicHash: id,
1031
+ processId: step === null || step === void 0 ? void 0 : step.processId
938
1032
  };
939
1033
  if (isInjected) {
940
1034
  this.state.requestService.addConfirmation(id, url || EXTENSION_REQUEST_URL, 'evmWatchTransactionRequest', payload, {}).then(async ({
@@ -1001,7 +1095,9 @@ export default class TransactionService {
1001
1095
  emitter.emit('error', eventData);
1002
1096
  });
1003
1097
  } else {
1004
- this.state.requestService.addConfirmation(id, url || EXTENSION_REQUEST_URL, 'evmSendTransactionRequest', payload, {}).then(async ({
1098
+ this.state.requestService.addConfirmation(id, url || EXTENSION_REQUEST_URL, 'evmSendTransactionRequest', payload, {
1099
+ isPassConfirmation
1100
+ }).then(async ({
1005
1101
  isApproved,
1006
1102
  payload
1007
1103
  }) => {
@@ -1066,6 +1162,8 @@ export default class TransactionService {
1066
1162
  feeCustom,
1067
1163
  id,
1068
1164
  nonNativeTokenPayFeeSlug,
1165
+ signAfterCreate,
1166
+ step,
1069
1167
  transaction,
1070
1168
  url
1071
1169
  }) {
@@ -1077,7 +1175,8 @@ export default class TransactionService {
1077
1175
  id,
1078
1176
  errors: [],
1079
1177
  warnings: [],
1080
- extrinsicHash: id
1178
+ extrinsicHash: id,
1179
+ processId: step === null || step === void 0 ? void 0 : step.processId
1081
1180
  };
1082
1181
  const extrinsic = transaction;
1083
1182
  // const registry = extrinsic.registry;
@@ -1089,7 +1188,7 @@ export default class TransactionService {
1089
1188
  const {
1090
1189
  signature,
1091
1190
  signedTransaction
1092
- } = await this.state.requestService.signInternalTransaction(id, address, url || EXTENSION_REQUEST_URL, payload);
1191
+ } = await this.state.requestService.signInternalTransaction(id, address, url || EXTENSION_REQUEST_URL, payload, signAfterCreate);
1093
1192
  return {
1094
1193
  id: new Date().getTime(),
1095
1194
  signature,
@@ -1173,6 +1272,7 @@ export default class TransactionService {
1173
1272
  chain,
1174
1273
  extrinsicType,
1175
1274
  id,
1275
+ step,
1176
1276
  transaction,
1177
1277
  url
1178
1278
  }) {
@@ -1182,7 +1282,8 @@ export default class TransactionService {
1182
1282
  id,
1183
1283
  errors: [],
1184
1284
  warnings: [],
1185
- extrinsicHash: id
1285
+ extrinsicHash: id,
1286
+ processId: step === null || step === void 0 ? void 0 : step.processId
1186
1287
  };
1187
1288
  const payload = transaction;
1188
1289
  const signer = message => {
@@ -1301,6 +1402,114 @@ export default class TransactionService {
1301
1402
  extrinsicHash: transaction.extrinsicHash
1302
1403
  }).catch(console.error);
1303
1404
  }
1405
+ async createProcessIfNeed(process) {
1406
+ if (!this.aliveProcessMap.has(process.id)) {
1407
+ this.aliveProcessMap.set(process.id, process);
1408
+ this.updateAliveProcess();
1409
+ await this.state.dbService.upsertProcessTransaction(process);
1410
+ }
1411
+ }
1412
+ checkProcessExist(processId) {
1413
+ return this.aliveProcessMap.has(processId);
1414
+ }
1415
+ deleteProcess(step) {
1416
+ const {
1417
+ processId
1418
+ } = step;
1419
+ this.aliveProcessMap.delete(processId);
1420
+ this.state.dbService.deleteProcessTransactionById(processId).catch(console.error);
1421
+ this.updateAliveProcess();
1422
+ }
1423
+ updateProcessStepStatus(step, data) {
1424
+ const {
1425
+ processId,
1426
+ stepId
1427
+ } = step;
1428
+ const process = this.aliveProcessMap.get(processId);
1429
+ if (process) {
1430
+ const step = process.steps.find(item => item.id === stepId);
1431
+ if (step) {
1432
+ Object.assign(step, data);
1433
+ if ([StepStatus.PREPARE || StepStatus.PROCESSING].includes(step.status)) {
1434
+ process.currentStepId = step.id;
1435
+ }
1436
+ if (step.status === StepStatus.COMPLETE) {
1437
+ const nextStep = process.steps.find(item => item.id === stepId + 1);
1438
+ if (nextStep) {
1439
+ nextStep.status = StepStatus.PREPARE;
1440
+ process.currentStepId = nextStep.id;
1441
+ }
1442
+ } else if ([StepStatus.FAILED, StepStatus.TIMEOUT].includes(step.status)) {
1443
+ const nextSteps = process.steps.filter(item => item.id > stepId);
1444
+ nextSteps.forEach(item => {
1445
+ item.status = StepStatus.CANCELLED;
1446
+ });
1447
+ }
1448
+ }
1449
+ if (process.steps.some(item => [StepStatus.PROCESSING, StepStatus.SUBMITTING].includes(item.status))) {
1450
+ process.status = StepStatus.PROCESSING;
1451
+ }
1452
+ if (process.steps.some(item => item.status === StepStatus.TIMEOUT)) {
1453
+ process.status = StepStatus.TIMEOUT;
1454
+ }
1455
+ if (process.steps.every(item => item.status === StepStatus.COMPLETE)) {
1456
+ const lastStep = process.steps[process.steps.length - 1];
1457
+ process.lastTransactionChain = lastStep.chain;
1458
+ process.lastTransactionId = lastStep.transactionId;
1459
+ process.status = StepStatus.COMPLETE;
1460
+ }
1461
+ if (process.steps.some(item => item.status === StepStatus.FAILED)) {
1462
+ process.status = StepStatus.FAILED;
1463
+ }
1464
+ this.aliveProcessMap.set(processId, process);
1465
+ this.state.dbService.upsertProcessTransaction(process).catch(console.error);
1466
+ if ([StepStatus.COMPLETE, StepStatus.FAILED, StepStatus.TIMEOUT].includes(process.status)) {
1467
+ this.aliveProcessMap.delete(processId);
1468
+ }
1469
+ this.updateAliveProcess();
1470
+ } else {
1471
+ this.state.dbService.getProcessTransactionById(processId).then(process => {
1472
+ if (process) {
1473
+ const step = process.steps.find(item => item.id === stepId);
1474
+ if (step && step.status === StepStatus.TIMEOUT && [StepStatus.COMPLETE, StepStatus.FAILED].includes(data.status)) {
1475
+ Object.assign(step, data);
1476
+ const isLastStep = process.steps[process.steps.length - 1].id = stepId;
1477
+ if (isLastStep) {
1478
+ process.status = data.status;
1479
+ }
1480
+ this.state.dbService.upsertProcessTransaction(process).catch(console.error);
1481
+ }
1482
+ }
1483
+ }).catch(console.error);
1484
+ }
1485
+ }
1486
+ async updateProcessInfo(id, combineInfo, step) {
1487
+ const process = this.aliveProcessMap.get(id);
1488
+ if (process) {
1489
+ if (step) {
1490
+ const index = process.steps.findIndex(item => item.id === (step === null || step === void 0 ? void 0 : step.id));
1491
+ if (index !== -1) {
1492
+ process.steps[index] = step;
1493
+ }
1494
+ }
1495
+ if (combineInfo) {
1496
+ process.combineInfo = combineInfo;
1497
+ }
1498
+ this.aliveProcessMap.set(process.id, process);
1499
+ this.updateAliveProcess();
1500
+ await this.state.dbService.upsertProcessTransaction(process);
1501
+ }
1502
+ }
1503
+ async createProcessNotification(transactionId) {
1504
+ var _transaction$step2;
1505
+ const transaction = this.getTransaction(transactionId);
1506
+ if (transaction && (_transaction$step2 = transaction.step) !== null && _transaction$step2 !== void 0 && _transaction$step2.processId) {
1507
+ const process = this.aliveProcessMap.get(transaction.step.processId);
1508
+ if (process) {
1509
+ await this.state.inappNotificationService.createProcessNotification(process);
1510
+ }
1511
+ }
1512
+ }
1304
1513
  resetWallet() {
1305
1514
  this.transactionSubject.next({});
1306
1515
  }
@@ -1,6 +1,6 @@
1
1
  import { ChainType, ExtrinsicDataTypeMap, ExtrinsicStatus, ExtrinsicType, FeeData, ValidateTransactionResponse } from '@subwallet/extension-base/background/KoniTypes';
2
2
  import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
3
- import { BaseRequestSign, TransactionFee } from '@subwallet/extension-base/types';
3
+ import { BaseRequestSign, BriefProcessStep, ProcessTransactionData, TransactionFee } from '@subwallet/extension-base/types';
4
4
  import EventEmitter from 'eventemitter3';
5
5
  import { TransactionConfig } from 'web3-core';
6
6
  import { SubmittableExtrinsic } from '@polkadot/api/promise/types';
@@ -22,10 +22,16 @@ export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick
22
22
  transaction: SubmittableExtrinsic | TransactionConfig | TonTransactionConfig;
23
23
  additionalValidator?: (inputTransaction: SWTransactionResponse) => Promise<void>;
24
24
  eventsHandler?: (eventEmitter: TransactionEmitter) => void;
25
+ isPassConfirmation?: boolean;
26
+ errorOnTimeOut?: boolean;
27
+ signAfterCreate?: (id: string) => void;
28
+ step?: BriefProcessStep;
29
+ }
30
+ export interface SWTransactionResult extends Omit<SWTransaction, 'transaction' | 'additionalValidator' | 'eventsHandler' | 'process'> {
31
+ process?: ProcessTransactionData;
25
32
  }
26
- export declare type SWTransactionResult = Omit<SWTransaction, 'transaction' | 'additionalValidator' | 'eventsHandler'>;
27
33
  declare type SwInputBase = Pick<SWTransaction, 'address' | 'url' | 'data' | 'extrinsicType' | 'chain' | 'chainType' | 'ignoreWarnings' | 'transferNativeAmount'> & Partial<Pick<SWTransaction, 'additionalValidator' | 'eventsHandler'>>;
28
- export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransaction, 'estimateFee'>>, TransactionFee {
34
+ export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransaction, 'estimateFee' | 'signAfterCreate' | 'isPassConfirmation' | 'step' | 'errorOnTimeOut'>>, TransactionFee {
29
35
  id?: string;
30
36
  transaction?: SWTransaction['transaction'] | null;
31
37
  warnings?: SWTransaction['warnings'];
@@ -36,11 +42,14 @@ export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransact
36
42
  resolveOnDone?: boolean;
37
43
  skipFeeValidation?: boolean;
38
44
  }
39
- export declare type SWTransactionResponse = SwInputBase & Pick<SWTransaction, 'warnings' | 'errors'> & Partial<Pick<SWTransaction, 'id' | 'extrinsicHash' | 'status' | 'estimateFee'>> & TransactionFee;
45
+ export declare type SWTransactionResponse = SwInputBase & Pick<SWTransaction, 'warnings' | 'errors'> & Partial<Pick<SWTransaction, 'id' | 'extrinsicHash' | 'status' | 'estimateFee'>> & TransactionFee & {
46
+ processId?: string;
47
+ };
40
48
  export declare type ValidateTransactionResponseInput = SWTransactionInput;
41
49
  export declare type TransactionEmitter = EventEmitter<TransactionEventMap>;
42
50
  export interface TransactionEventResponse extends ValidateTransactionResponse {
43
51
  id: string;
52
+ processId?: string;
44
53
  extrinsicHash?: string;
45
54
  blockHash?: string;
46
55
  blockNumber?: number;
package/types/index.d.ts CHANGED
@@ -22,3 +22,4 @@ export * from './service-base';
22
22
  export * from './swap';
23
23
  export * from './transaction';
24
24
  export * from './yield';
25
+ export * from './setting';
package/types/index.js CHANGED
@@ -15,4 +15,5 @@ export * from "./service-base.js";
15
15
  export * from "./swap/index.js";
16
16
  export * from "./transaction/index.js";
17
17
  export * from "./yield/index.js";
18
+ export * from "./setting.js";
18
19
  export {};
@@ -0,0 +1,3 @@
1
+ export declare type RequestChangeAllowOneSign = {
2
+ allowOneSign: boolean;
3
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,9 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
3
3
  import { AmountData, ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
4
- import { TransactionData } from '@subwallet/extension-base/types';
5
4
  import { BaseStepDetail, CommonOptimalPath, CommonStepFeeInfo } from '@subwallet/extension-base/types/service-base';
6
5
  import BigN from 'bignumber.js';
6
+ import { BaseProcessRequestSign, TransactionData } from '../transaction';
7
7
  export declare type SwapRate = number;
8
8
  export interface SwapPair {
9
9
  slug: string;
@@ -54,6 +54,7 @@ export declare enum SwapProviderId {
54
54
  POLKADOT_ASSET_HUB = "POLKADOT_ASSET_HUB",
55
55
  KUSAMA_ASSET_HUB = "KUSAMA_ASSET_HUB",
56
56
  ROCOCO_ASSET_HUB = "ROCOCO_ASSET_HUB",
57
+ WESTEND_ASSET_HUB = "WESTEND_ASSET_HUB",
57
58
  SIMPLE_SWAP = "SIMPLE_SWAP"
58
59
  }
59
60
  export declare const _SUPPORTED_SWAP_PROVIDERS: SwapProviderId[];
@@ -131,7 +132,7 @@ export interface SwapQuoteResponse {
131
132
  aliveUntil: number;
132
133
  error?: SwapError;
133
134
  }
134
- export interface SwapSubmitParams {
135
+ export interface SwapSubmitParams extends BaseProcessRequestSign {
135
136
  process: CommonOptimalPath;
136
137
  currentStep: number;
137
138
  quote: SwapQuote;
@@ -31,9 +31,12 @@ export let SwapProviderId;
31
31
  SwapProviderId["POLKADOT_ASSET_HUB"] = "POLKADOT_ASSET_HUB";
32
32
  SwapProviderId["KUSAMA_ASSET_HUB"] = "KUSAMA_ASSET_HUB";
33
33
  SwapProviderId["ROCOCO_ASSET_HUB"] = "ROCOCO_ASSET_HUB";
34
+ SwapProviderId["WESTEND_ASSET_HUB"] = "WESTEND_ASSET_HUB";
34
35
  SwapProviderId["SIMPLE_SWAP"] = "SIMPLE_SWAP";
35
36
  })(SwapProviderId || (SwapProviderId = {}));
36
- export const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET, SwapProviderId.HYDRADX_TESTNET, SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB, SwapProviderId.ROCOCO_ASSET_HUB, SwapProviderId.SIMPLE_SWAP];
37
+ export const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET, SwapProviderId.HYDRADX_TESTNET, SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB, SwapProviderId.ROCOCO_ASSET_HUB,
38
+ // SwapProviderId.WESTEND_ASSET_HUB,
39
+ SwapProviderId.SIMPLE_SWAP];
37
40
  // process handling
38
41
  export let SwapFeeType;
39
42
  (function (SwapFeeType) {
@@ -1,4 +1,5 @@
1
1
  export * from './data';
2
2
  export * from './error';
3
+ export * from './process';
3
4
  export * from './request';
4
5
  export * from './warning';
@@ -3,5 +3,6 @@
3
3
 
4
4
  export * from "./data.js";
5
5
  export * from "./error.js";
6
+ export * from "./process.js";
6
7
  export * from "./request.js";
7
8
  export * from "./warning.js";
@@ -0,0 +1,84 @@
1
+ import { _ChainAsset } from '@subwallet/chain-list/types';
2
+ import { TransactionEventResponse } from '@subwallet/extension-base/services/transaction-service/types';
3
+ import { CommonStepDetail, CommonStepFeeInfo } from '../service-base';
4
+ import { SwapPair, SwapProvider, SwapRate, SwapRoute, SwapSubmitParams } from '../swap';
5
+ import { RequestYieldStepSubmit } from '../yield';
6
+ export interface BaseProcessRequestSign {
7
+ isPassConfirmation?: boolean;
8
+ onSend?: (rs: TransactionEventResponse) => void;
9
+ errorOnTimeOut?: boolean;
10
+ processId?: string;
11
+ }
12
+ export declare enum ProcessType {
13
+ SWAP = "swap",
14
+ EARNING = "earning"
15
+ }
16
+ export interface RequestSubmitProcessTransaction {
17
+ address: string;
18
+ type: ProcessType;
19
+ request: SwapSubmitParams | RequestYieldStepSubmit;
20
+ id: string;
21
+ }
22
+ export declare enum StepStatus {
23
+ QUEUED = "QUEUED",
24
+ PREPARE = "PREPARE",
25
+ SUBMITTING = "SUBMITTING",
26
+ PROCESSING = "PROCESSING",
27
+ COMPLETE = "COMPLETE",
28
+ FAILED = "FAILED",
29
+ CANCELLED = "CANCELLED",
30
+ TIMEOUT = "TIMEOUT"
31
+ }
32
+ export declare const PROCESSING_STEP_STATUS: StepStatus[];
33
+ export interface ProcessStep extends CommonStepDetail {
34
+ fee: CommonStepFeeInfo;
35
+ status: StepStatus;
36
+ chain?: string;
37
+ transactionId?: string;
38
+ extrinsicHash?: string;
39
+ }
40
+ export interface ProcessTransactionData {
41
+ id: string;
42
+ type: ProcessType;
43
+ address: string;
44
+ status: StepStatus;
45
+ steps: ProcessStep[];
46
+ combineInfo: unknown;
47
+ currentStepId: number;
48
+ lastTransactionId?: string;
49
+ lastTransactionChain?: string;
50
+ }
51
+ export interface BriefProcessStep {
52
+ processId: string;
53
+ stepId: number;
54
+ }
55
+ export interface BriefXCMStep {
56
+ sendingValue: string;
57
+ originTokenInfo: _ChainAsset;
58
+ destinationTokenInfo: _ChainAsset;
59
+ }
60
+ export interface BriefSwapStep {
61
+ pair: SwapPair;
62
+ fromAmount: string;
63
+ toAmount: string;
64
+ rate: SwapRate;
65
+ provider: SwapProvider;
66
+ aliveUntil: number;
67
+ route: SwapRoute;
68
+ }
69
+ export interface ApproveStepMetadata {
70
+ tokenApprove: string;
71
+ contractAddress: string;
72
+ spenderAddress: string;
73
+ amount?: string;
74
+ }
75
+ export interface RequestSubscribeProcessById {
76
+ processId: string;
77
+ }
78
+ export interface ResponseSubscribeProcessById {
79
+ process: ProcessTransactionData | undefined;
80
+ id: string;
81
+ }
82
+ export interface ResponseSubscribeProcessAlive {
83
+ processes: Record<string, ProcessTransactionData>;
84
+ }
@@ -0,0 +1,20 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export let ProcessType;
5
+ (function (ProcessType) {
6
+ ProcessType["SWAP"] = "swap";
7
+ ProcessType["EARNING"] = "earning";
8
+ })(ProcessType || (ProcessType = {}));
9
+ export let StepStatus;
10
+ (function (StepStatus) {
11
+ StepStatus["QUEUED"] = "QUEUED";
12
+ StepStatus["PREPARE"] = "PREPARE";
13
+ StepStatus["SUBMITTING"] = "SUBMITTING";
14
+ StepStatus["PROCESSING"] = "PROCESSING";
15
+ StepStatus["COMPLETE"] = "COMPLETE";
16
+ StepStatus["FAILED"] = "FAILED";
17
+ StepStatus["CANCELLED"] = "CANCELLED";
18
+ StepStatus["TIMEOUT"] = "TIMEOUT";
19
+ })(StepStatus || (StepStatus = {}));
20
+ export const PROCESSING_STEP_STATUS = [StepStatus.PREPARE, StepStatus.SUBMITTING, StepStatus.PROCESSING];
@@ -1,4 +1,5 @@
1
- import { TransactionFee, TransactionWarningType } from '@subwallet/extension-base/types';
1
+ import { TransactionFee } from '../fee';
2
+ import { TransactionWarningType } from './warning';
2
3
  export declare type BaseRequestSign = {
3
4
  ignoreWarnings?: TransactionWarningType[];
4
5
  };
@@ -10,6 +11,7 @@ export interface RequestBaseTransfer {
10
11
  value?: string;
11
12
  transferAll?: boolean;
12
13
  transferBounceable?: boolean;
14
+ isPassConfirmation?: boolean;
13
15
  }
14
16
  export interface RequestCheckTransfer extends RequestBaseTransfer, TransactionFee {
15
17
  networkKey: string;
@@ -1,6 +1,6 @@
1
1
  import { _Address, ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
2
- import { BaseRequestSign, InternalRequestSign, TransactionData } from '../../../transaction';
3
- import { NominationPoolInfo, ValidatorInfo, YieldPositionInfo } from '../../info';
2
+ import { BaseProcessRequestSign, BaseRequestSign, InternalRequestSign, TransactionData } from '../../../transaction';
3
+ import { NominationPoolInfo, ValidatorInfo, YieldPoolType, YieldPositionInfo } from '../../info';
4
4
  import { OptimalYieldPath } from './step';
5
5
  export interface HandleYieldStepData {
6
6
  txChain: string;
@@ -29,7 +29,22 @@ export interface SubmitYieldStepData extends AbstractSubmitYieldJoinData {
29
29
  feeTokenSlug: string;
30
30
  }
31
31
  export declare type SubmitYieldJoinData = SubmitYieldStepData | SubmitJoinNativeStaking | SubmitJoinNominationPool;
32
- export interface HandleYieldStepParams extends BaseRequestSign {
32
+ export declare enum EarningProcessType {
33
+ NOMINATION_POOL = "NOMINATION_POOL",
34
+ NATIVE_STAKING = "NATIVE_STAKING",
35
+ YIELD = "YIELD"
36
+ }
37
+ export interface SummaryEarningProcessData {
38
+ data: SubmitYieldJoinData;
39
+ type: EarningProcessType;
40
+ brief: {
41
+ token: string;
42
+ amount: string;
43
+ chain: string;
44
+ method: YieldPoolType;
45
+ };
46
+ }
47
+ export interface HandleYieldStepParams extends BaseRequestSign, BaseProcessRequestSign {
33
48
  path: OptimalYieldPath;
34
49
  data: SubmitYieldJoinData;
35
50
  currentStep: number;
@@ -1 +1,11 @@
1
- export {};
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ // Result after create extrinsic
5
+
6
+ export let EarningProcessType;
7
+ (function (EarningProcessType) {
8
+ EarningProcessType["NOMINATION_POOL"] = "NOMINATION_POOL";
9
+ EarningProcessType["NATIVE_STAKING"] = "NATIVE_STAKING";
10
+ EarningProcessType["YIELD"] = "YIELD";
11
+ })(EarningProcessType || (EarningProcessType = {}));