@cardano-sdk/wallet 0.1.4 → 0.1.8

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/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/README.md +8 -0
  4. package/dist/KeyManagement/InMemoryKeyManager.d.ts +9 -0
  5. package/dist/KeyManagement/InMemoryKeyManager.d.ts.map +1 -0
  6. package/dist/KeyManagement/InMemoryKeyManager.js +94 -0
  7. package/dist/KeyManagement/InMemoryKeyManager.js.map +1 -0
  8. package/dist/KeyManagement/errors/InvalidMnemonic.d.ts +5 -0
  9. package/dist/KeyManagement/errors/InvalidMnemonic.d.ts.map +1 -0
  10. package/dist/KeyManagement/errors/InvalidMnemonic.js +13 -0
  11. package/dist/KeyManagement/errors/InvalidMnemonic.js.map +1 -0
  12. package/{src/KeyManagement/errors/index.ts → dist/KeyManagement/errors/index.d.ts} +1 -0
  13. package/dist/KeyManagement/errors/index.d.ts.map +1 -0
  14. package/dist/KeyManagement/errors/index.js +6 -0
  15. package/dist/KeyManagement/errors/index.js.map +1 -0
  16. package/{src/KeyManagement/index.ts → dist/KeyManagement/index.d.ts} +1 -0
  17. package/dist/KeyManagement/index.d.ts.map +1 -0
  18. package/dist/KeyManagement/index.js +30 -0
  19. package/dist/KeyManagement/index.js.map +1 -0
  20. package/dist/KeyManagement/types.d.ts +30 -0
  21. package/dist/KeyManagement/types.d.ts.map +1 -0
  22. package/dist/KeyManagement/types.js +15 -0
  23. package/dist/KeyManagement/types.js.map +1 -0
  24. package/dist/KeyManagement/util.d.ts +6 -0
  25. package/dist/KeyManagement/util.d.ts.map +1 -0
  26. package/dist/KeyManagement/util.js +31 -0
  27. package/dist/KeyManagement/util.js.map +1 -0
  28. package/dist/SingleAddressWallet.d.ts +45 -0
  29. package/dist/SingleAddressWallet.d.ts.map +1 -0
  30. package/dist/SingleAddressWallet.js +158 -0
  31. package/dist/SingleAddressWallet.js.map +1 -0
  32. package/dist/Transaction/computeImplicitCoin.d.ts +4 -0
  33. package/dist/Transaction/computeImplicitCoin.d.ts.map +1 -0
  34. package/dist/Transaction/computeImplicitCoin.js +21 -0
  35. package/dist/Transaction/computeImplicitCoin.js.map +1 -0
  36. package/dist/Transaction/createTransactionInternals.d.ts +16 -0
  37. package/dist/Transaction/createTransactionInternals.d.ts.map +1 -0
  38. package/dist/Transaction/createTransactionInternals.js +28 -0
  39. package/dist/Transaction/createTransactionInternals.js.map +1 -0
  40. package/dist/Transaction/ensureValidityInterval.d.ts +3 -0
  41. package/dist/Transaction/ensureValidityInterval.d.ts.map +1 -0
  42. package/dist/Transaction/ensureValidityInterval.js +6 -0
  43. package/dist/Transaction/ensureValidityInterval.js.map +1 -0
  44. package/dist/Transaction/index.d.ts +4 -0
  45. package/dist/Transaction/index.d.ts.map +1 -0
  46. package/dist/Transaction/index.js +16 -0
  47. package/dist/Transaction/index.js.map +1 -0
  48. package/dist/index.d.ts +6 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +31 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/services/AssetsTracker.d.ts +16 -0
  53. package/dist/services/AssetsTracker.d.ts.map +1 -0
  54. package/dist/services/AssetsTracker.js +13 -0
  55. package/dist/services/AssetsTracker.js.map +1 -0
  56. package/dist/services/BalanceTracker.d.ts +5 -0
  57. package/dist/services/BalanceTracker.d.ts.map +1 -0
  58. package/dist/services/BalanceTracker.js +43 -0
  59. package/dist/services/BalanceTracker.js.map +1 -0
  60. package/dist/services/DelegationTracker/DelegationTracker.d.ts +26 -0
  61. package/dist/services/DelegationTracker/DelegationTracker.d.ts.map +1 -0
  62. package/dist/services/DelegationTracker/DelegationTracker.js +39 -0
  63. package/dist/services/DelegationTracker/DelegationTracker.js.map +1 -0
  64. package/dist/services/DelegationTracker/RewardAccounts.d.ts +36 -0
  65. package/dist/services/DelegationTracker/RewardAccounts.d.ts.map +1 -0
  66. package/dist/services/DelegationTracker/RewardAccounts.js +86 -0
  67. package/dist/services/DelegationTracker/RewardAccounts.js.map +1 -0
  68. package/dist/services/DelegationTracker/RewardsHistory.d.ts +14 -0
  69. package/dist/services/DelegationTracker/RewardsHistory.d.ts.map +1 -0
  70. package/dist/services/DelegationTracker/RewardsHistory.js +27 -0
  71. package/dist/services/DelegationTracker/RewardsHistory.js.map +1 -0
  72. package/dist/services/DelegationTracker/index.d.ts +5 -0
  73. package/dist/services/DelegationTracker/index.d.ts.map +1 -0
  74. package/dist/services/DelegationTracker/index.js +17 -0
  75. package/dist/services/DelegationTracker/index.js.map +1 -0
  76. package/dist/services/DelegationTracker/transactionCertificates.d.ts +9 -0
  77. package/dist/services/DelegationTracker/transactionCertificates.d.ts.map +1 -0
  78. package/dist/services/DelegationTracker/transactionCertificates.js +33 -0
  79. package/dist/services/DelegationTracker/transactionCertificates.js.map +1 -0
  80. package/dist/services/DelegationTracker/types.d.ts +6 -0
  81. package/dist/services/DelegationTracker/types.d.ts.map +1 -0
  82. package/dist/services/DelegationTracker/types.js +3 -0
  83. package/dist/services/DelegationTracker/types.js.map +1 -0
  84. package/dist/services/TransactionError.d.ts +15 -0
  85. package/dist/services/TransactionError.d.ts.map +1 -0
  86. package/dist/services/TransactionError.js +23 -0
  87. package/dist/services/TransactionError.js.map +1 -0
  88. package/dist/services/TransactionsTracker.d.ts +22 -0
  89. package/dist/services/TransactionsTracker.d.ts.map +1 -0
  90. package/dist/services/TransactionsTracker.js +75 -0
  91. package/dist/services/TransactionsTracker.js.map +1 -0
  92. package/dist/services/UtxoTracker.d.ts +18 -0
  93. package/dist/services/UtxoTracker.d.ts.map +1 -0
  94. package/dist/services/UtxoTracker.js +20 -0
  95. package/dist/services/UtxoTracker.js.map +1 -0
  96. package/dist/services/index.d.ts +9 -0
  97. package/dist/services/index.d.ts.map +1 -0
  98. package/dist/services/index.js +21 -0
  99. package/dist/services/index.js.map +1 -0
  100. package/dist/services/types.d.ts +81 -0
  101. package/dist/services/types.d.ts.map +1 -0
  102. package/dist/services/types.js +16 -0
  103. package/dist/services/types.js.map +1 -0
  104. package/dist/services/util/SyncableIntervalTrackerSubject.d.ts +19 -0
  105. package/dist/services/util/SyncableIntervalTrackerSubject.d.ts.map +1 -0
  106. package/dist/services/util/SyncableIntervalTrackerSubject.js +30 -0
  107. package/dist/services/util/SyncableIntervalTrackerSubject.js.map +1 -0
  108. package/dist/services/util/TrackerSubject.d.ts +14 -0
  109. package/dist/services/util/TrackerSubject.d.ts.map +1 -0
  110. package/dist/services/util/TrackerSubject.js +46 -0
  111. package/dist/services/util/TrackerSubject.js.map +1 -0
  112. package/dist/services/util/coldObservableProvider.d.ts +4 -0
  113. package/dist/services/util/coldObservableProvider.d.ts.map +1 -0
  114. package/dist/services/util/coldObservableProvider.js +14 -0
  115. package/dist/services/util/coldObservableProvider.js.map +1 -0
  116. package/dist/services/util/equals.d.ts +9 -0
  117. package/dist/services/util/equals.d.ts.map +1 -0
  118. package/dist/services/util/equals.js +19 -0
  119. package/dist/services/util/equals.js.map +1 -0
  120. package/dist/services/util/index.d.ts +6 -0
  121. package/dist/services/util/index.d.ts.map +1 -0
  122. package/dist/services/util/index.js +18 -0
  123. package/dist/services/util/index.js.map +1 -0
  124. package/dist/services/util/trigger.d.ts +5 -0
  125. package/dist/services/util/trigger.d.ts.map +1 -0
  126. package/dist/services/util/trigger.js +9 -0
  127. package/dist/services/util/trigger.js.map +1 -0
  128. package/dist/types.d.ts +35 -0
  129. package/dist/types.d.ts.map +1 -0
  130. package/dist/types.js +3 -0
  131. package/dist/types.js.map +1 -0
  132. package/package.json +17 -8
  133. package/jest.config.js +0 -1
  134. package/src/Address.ts +0 -12
  135. package/src/BalanceTracker.ts +0 -62
  136. package/src/InMemoryTransactionTracker.ts +0 -87
  137. package/src/InMemoryUtxoRepository.ts +0 -192
  138. package/src/KeyManagement/InMemoryKeyManager.ts +0 -67
  139. package/src/KeyManagement/errors/InvalidMnemonic.ts +0 -9
  140. package/src/KeyManagement/types.ts +0 -15
  141. package/src/KeyManagement/util.ts +0 -14
  142. package/src/SingleAddressWallet.ts +0 -120
  143. package/src/Transaction/CertificateFactory.ts +0 -154
  144. package/src/Transaction/computeImplicitCoin.ts +0 -36
  145. package/src/Transaction/createTransactionInternals.ts +0 -60
  146. package/src/Transaction/index.ts +0 -5
  147. package/src/Transaction/types.ts +0 -12
  148. package/src/Transaction/withdrawal.ts +0 -17
  149. package/src/TransactionError.ts +0 -17
  150. package/src/index.ts +0 -9
  151. package/src/tsconfig.json +0 -11
  152. package/src/types.ts +0 -56
  153. package/test/.eslintrc.js +0 -7
  154. package/test/BalanceTracker.test.ts +0 -44
  155. package/test/InMemoryTransactionTracker.test.ts +0 -108
  156. package/test/InMemoryUtxoRepository.test.ts +0 -242
  157. package/test/KeyManagement/InMemoryKeyManager.test.ts +0 -39
  158. package/test/SingleAddressWallet.test.ts +0 -87
  159. package/test/Transaction/CertificateFactory.test.ts +0 -89
  160. package/test/Transaction/computeImplicitCoin.test.ts +0 -26
  161. package/test/Transaction/createTransactionInternals.test.ts +0 -84
  162. package/test/Transaction/withdrawal.test.ts +0 -13
  163. package/test/integration/withdrawal.test.ts +0 -108
  164. package/test/mocks/MockTransactionTracker.ts +0 -8
  165. package/test/mocks/MockUtxoRepository.ts +0 -13
  166. package/test/mocks/ProviderStub.ts +0 -151
  167. package/test/mocks/index.ts +0 -4
  168. package/test/mocks/testKeyManager.ts +0 -10
  169. package/test/tsconfig.json +0 -12
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRewardAccountsTracker = exports.toRewardAccounts = exports.addressRewards = exports.addressDelegatees = exports.addressKeyStatuses = exports.createDelegateeTracker = exports.getStakePoolIdAtEpoch = exports.createRewardsProvider = exports.fetchRewardsTrigger$ = exports.createQueryStakePoolsProvider = void 0;
4
+ const core_1 = require("@cardano-sdk/core");
5
+ const types_1 = require("../types");
6
+ const rxjs_1 = require("rxjs");
7
+ const _1 = require(".");
8
+ const __1 = require("..");
9
+ const util_1 = require("../util");
10
+ const lodash_es_1 = require("lodash-es");
11
+ const transactionCertificates_1 = require("./transactionCertificates");
12
+ const createQueryStakePoolsProvider = (stakePoolSearchProvider, retryBackoffConfig) => (fragments) => util_1.coldObservableProvider(() => stakePoolSearchProvider.queryStakePools(fragments), retryBackoffConfig);
13
+ exports.createQueryStakePoolsProvider = createQueryStakePoolsProvider;
14
+ const getWithdrawalQuantity = ({ body: { withdrawals } }, rewardAccount) => core_1.BigIntMath.sum(withdrawals?.map(({ quantity, stakeAddress }) => (stakeAddress === rewardAccount ? quantity : 0n)) || []);
15
+ const fetchRewardsTrigger$ = (epoch$, txConfirmed$, rewardAccount) => rxjs_1.merge(epoch$, txConfirmed$.pipe(rxjs_1.map((tx) => getWithdrawalQuantity(tx, rewardAccount)), rxjs_1.filter((withdrawalQty) => withdrawalQty > 0n)));
16
+ exports.fetchRewardsTrigger$ = fetchRewardsTrigger$;
17
+ const createRewardsProvider = (epoch$, txConfirmed$, walletProvider, retryBackoffConfig) => (rewardAccounts) => rxjs_1.combineLatest(rewardAccounts.map((rewardAccount) => util_1.coldObservableProvider(() => walletProvider.utxoDelegationAndRewards([], rewardAccount), retryBackoffConfig, exports.fetchRewardsTrigger$(epoch$, txConfirmed$, rewardAccount)).pipe(rxjs_1.map(({ delegationAndRewards }) => delegationAndRewards?.rewards || 0n), rxjs_1.distinctUntilChanged())));
18
+ exports.createRewardsProvider = createRewardsProvider;
19
+ const isDelegationCertificate = (cert) => cert.__typename === core_1.Cardano.CertificateType.StakeDelegation;
20
+ const getAccountsKeyStatus = (addresses) => ([transactions, transactionsInFlight]) => {
21
+ const certificatesInFlight = transactionsInFlight.map(({ body: { certificates } }) => certificates || []);
22
+ return addresses.map((address) => {
23
+ const isRegistered = transactionCertificates_1.isLastStakeKeyCertOfType(transactions.map(({ tx: { body: { certificates } } }) => certificates || []), core_1.Cardano.CertificateType.StakeKeyRegistration, address);
24
+ const isRegistering = transactionCertificates_1.isLastStakeKeyCertOfType(certificatesInFlight, core_1.Cardano.CertificateType.StakeKeyRegistration, address);
25
+ const isUnregistering = transactionCertificates_1.isLastStakeKeyCertOfType(certificatesInFlight, core_1.Cardano.CertificateType.StakeKeyDeregistration, address);
26
+ return isRegistering
27
+ ? types_1.StakeKeyStatus.Registering
28
+ : isUnregistering
29
+ ? types_1.StakeKeyStatus.Unregistering
30
+ : isRegistered
31
+ ? types_1.StakeKeyStatus.Registered
32
+ : types_1.StakeKeyStatus.Unregistered;
33
+ });
34
+ };
35
+ const accountCertificateTransactions = (transactions$, rewardAccount) => transactions$.pipe(rxjs_1.map((transactions) => transactions
36
+ .map(({ tx, epoch }) => ({
37
+ certificates: (tx.body.certificates || [])
38
+ .filter((cert) => [..._1.RegAndDeregCertificateTypes, core_1.Cardano.CertificateType.StakeDelegation].includes(cert.__typename))
39
+ .filter((cert) => cert.address === rewardAccount),
40
+ epoch
41
+ }))
42
+ .filter(({ certificates }) => certificates.length > 0)), rxjs_1.distinctUntilChanged((a, b) => lodash_es_1.isEqual(a, b)));
43
+ const getStakePoolIdAtEpoch = (transactions) => (atEpoch) => {
44
+ const certificatesUpToEpoch = transactions
45
+ .filter(({ epoch }) => epoch < atEpoch - 2)
46
+ .map(({ certificates }) => certificates);
47
+ if (!transactionCertificates_1.isLastStakeKeyCertOfType(certificatesUpToEpoch, core_1.Cardano.CertificateType.StakeKeyRegistration))
48
+ return;
49
+ const delegationTxCertificates = lodash_es_1.findLast(certificatesUpToEpoch, (certs) => __1.includesAnyCertificate(certs, [core_1.Cardano.CertificateType.StakeDelegation]));
50
+ if (!delegationTxCertificates)
51
+ return;
52
+ return lodash_es_1.findLast(delegationTxCertificates.filter(isDelegationCertificate))?.poolId;
53
+ };
54
+ exports.getStakePoolIdAtEpoch = getStakePoolIdAtEpoch;
55
+ const createDelegateeTracker = (stakePoolSearchProvider, epoch$, certificates$) => rxjs_1.combineLatest([certificates$, epoch$]).pipe(rxjs_1.switchMap(([transactions, lastEpoch]) => {
56
+ const stakePoolIds = [lastEpoch + 1, lastEpoch + 2, lastEpoch + 3].map(exports.getStakePoolIdAtEpoch(transactions));
57
+ return stakePoolSearchProvider(lodash_es_1.uniq(stakePoolIds.filter(core_1.util.isNotNil))).pipe(rxjs_1.map((stakePools) => stakePoolIds.map((poolId) => stakePools.find((pool) => pool.id === poolId) || undefined)), rxjs_1.map(([currentEpoch, nextEpoch, nextNextEpoch]) => {
58
+ if (!nextNextEpoch)
59
+ return;
60
+ return { currentEpoch, nextEpoch, nextNextEpoch };
61
+ }));
62
+ }), rxjs_1.distinctUntilChanged((a, b) => lodash_es_1.isEqual(a, b)));
63
+ exports.createDelegateeTracker = createDelegateeTracker;
64
+ const addressKeyStatuses = (addresses, transactions$, transactionsInFlight$) => rxjs_1.combineLatest([transactions$, transactionsInFlight$]).pipe(rxjs_1.map(getAccountsKeyStatus(addresses)), rxjs_1.distinctUntilChanged(util_1.shallowArrayEquals));
65
+ exports.addressKeyStatuses = addressKeyStatuses;
66
+ const addressDelegatees = (addresses, transactions$, stakePoolSearchProvider, epoch$) => rxjs_1.combineLatest(addresses.map((address) => exports.createDelegateeTracker(stakePoolSearchProvider, epoch$, accountCertificateTransactions(transactions$, address))));
67
+ exports.addressDelegatees = addressDelegatees;
68
+ const addressRewards = (rewardAccounts, transactionsInFlight$, rewardsProvider) => rxjs_1.combineLatest([rewardsProvider(rewardAccounts), transactionsInFlight$]).pipe(rxjs_1.map(([totalRewards, transactionsInFlight]) => totalRewards.map((total, i) => ({
69
+ available: total - transactionsInFlight.reduce((sum, tx) => sum + getWithdrawalQuantity(tx, rewardAccounts[i]), 0n),
70
+ total
71
+ }))), rxjs_1.distinctUntilChanged(util_1.deepEquals));
72
+ exports.addressRewards = addressRewards;
73
+ const toRewardAccounts = (addresses) => ([statuses, delegatees, rewards]) => addresses.map((address, i) => ({
74
+ address,
75
+ delegatee: delegatees[i],
76
+ keyStatus: statuses[i],
77
+ rewardBalance: rewards[i]
78
+ }));
79
+ exports.toRewardAccounts = toRewardAccounts;
80
+ const createRewardAccountsTracker = ({ rewardAccountAddresses$, stakePoolSearchProvider, rewardsProvider, epoch$, transactions$, transactionsInFlight$ }) => rewardAccountAddresses$.pipe(rxjs_1.switchMap((rewardAccounts) => rxjs_1.combineLatest([
81
+ exports.addressKeyStatuses(rewardAccounts, transactions$, transactionsInFlight$),
82
+ exports.addressDelegatees(rewardAccounts, transactions$, stakePoolSearchProvider, epoch$),
83
+ exports.addressRewards(rewardAccounts, transactionsInFlight$, rewardsProvider)
84
+ ]).pipe(rxjs_1.map(exports.toRewardAccounts(rewardAccounts)))));
85
+ exports.createRewardAccountsTracker = createRewardAccountsTracker;
86
+ //# sourceMappingURL=RewardAccounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RewardAccounts.js","sourceRoot":"","sources":["../../../src/services/DelegationTracker/RewardAccounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Cardano, WalletProvider } from '@cardano-sdk/core';
2
+ import { Observable } from 'rxjs';
3
+ import { RetryBackoffConfig } from 'backoff-rxjs';
4
+ import { RewardAccount } from '@cardano-ogmios/schema';
5
+ import { TxWithEpoch } from './types';
6
+ export declare const createRewardsHistoryProvider: (walletProvider: WalletProvider, rewardAccountAddresses$: Observable<RewardAccount[]>, retryBackoffConfig: RetryBackoffConfig) => (lowerBound: Cardano.Epoch | null) => Observable<import("@cardano-sdk/core").EpochRewards[]>;
7
+ export declare type RewardsHistoryProvider = ReturnType<typeof createRewardsHistoryProvider>;
8
+ export declare const createRewardsHistoryTracker: (transactions$: Observable<TxWithEpoch[]>, rewardsHistoryProvider: RewardsHistoryProvider) => Observable<{
9
+ all: import("@cardano-sdk/core").EpochRewards[];
10
+ avgReward: bigint | null;
11
+ lastReward: import("@cardano-sdk/core").EpochRewards | null;
12
+ lifetimeRewards: bigint;
13
+ }>;
14
+ //# sourceMappingURL=RewardsHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RewardsHistory.d.ts","sourceRoot":"","sources":["../../../src/services/DelegationTracker/RewardsHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,cAAc,EAAQ,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAA4C,MAAM,MAAM,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKtC,eAAO,MAAM,4BAA4B,mBAErB,cAAc,2BACL,WAAW,aAAa,EAAE,CAAC,sBAChC,kBAAkB,kBAE3B,QAAQ,KAAK,GAAG,IAAI,2DAcrB,CAAC;AAEf,oBAAY,sBAAsB,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAarF,eAAO,MAAM,2BAA2B,kBACvB,WAAW,WAAW,EAAE,CAAC,0BAChB,sBAAsB;;;;;EAa7C,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRewardsHistoryTracker = exports.createRewardsHistoryProvider = void 0;
4
+ const core_1 = require("@cardano-sdk/core");
5
+ const rxjs_1 = require("rxjs");
6
+ const util_1 = require("../util");
7
+ const lodash_es_1 = require("lodash-es");
8
+ const transactionCertificates_1 = require("./transactionCertificates");
9
+ const createRewardsHistoryProvider = (walletProvider, rewardAccountAddresses$, retryBackoffConfig) => (lowerBound) => lowerBound
10
+ ? rewardAccountAddresses$.pipe(rxjs_1.switchMap((stakeAddresses) => util_1.coldObservableProvider(() => walletProvider.rewardsHistory({
11
+ epochs: { lowerBound },
12
+ stakeAddresses
13
+ }), retryBackoffConfig)))
14
+ : rxjs_1.of([]);
15
+ exports.createRewardsHistoryProvider = createRewardsHistoryProvider;
16
+ const firstDelegationEpoch$ = (transactions$) => transactions$.pipe(rxjs_1.map((transactions) => lodash_es_1.first(transactions.filter(({ tx }) => transactionCertificates_1.transactionHasAnyCertificate(tx, [core_1.Cardano.CertificateType.StakeDelegation])))), rxjs_1.map((tx) => (core_1.util.isNotNil(tx) ? tx.epoch + 3 : null)), rxjs_1.distinctUntilChanged());
17
+ const createRewardsHistoryTracker = (transactions$, rewardsHistoryProvider) => firstDelegationEpoch$(transactions$).pipe(rxjs_1.switchMap((firstEpoch) => rewardsHistoryProvider(firstEpoch)), rxjs_1.map((all) => {
18
+ const lifetimeRewards = core_1.BigIntMath.sum(all.map(({ rewards }) => rewards));
19
+ return {
20
+ all,
21
+ avgReward: all.length > 0 ? lifetimeRewards / BigInt(all.length) : null,
22
+ lastReward: all.length > 0 ? all[all.length - 1] : null,
23
+ lifetimeRewards
24
+ };
25
+ }));
26
+ exports.createRewardsHistoryTracker = createRewardsHistoryTracker;
27
+ //# sourceMappingURL=RewardsHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RewardsHistory.js","sourceRoot":"","sources":["../../../src/services/DelegationTracker/RewardsHistory.ts"],"names":[],"mappings":";;;AAAA,4CAA8E;AAC9E,+BAA4E;AAI5E,kCAAiD;AACjD,yCAAkC;AAClC,uEAAyE;AAElE,MAAM,4BAA4B,GACvC,CACE,cAA8B,EAC9B,uBAAoD,EACpD,kBAAsC,EACtC,EAAE,CACJ,CAAC,UAAgC,EAAE,EAAE,CACnC,UAAU;IACR,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAC1B,gBAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAC3B,6BAAsB,CACpB,GAAG,EAAE,CACH,cAAc,CAAC,cAAc,CAAC;QAC5B,MAAM,EAAE,EAAE,UAAU,EAAE;QACtB,cAAc;KACf,CAAC,EACJ,kBAAkB,CACnB,CACF,CACF;IACH,CAAC,CAAC,SAAE,CAAC,EAAE,CAAC,CAAC;AApBF,QAAA,4BAA4B,gCAoB1B;AAIf,MAAM,qBAAqB,GAAG,CAAC,aAAwC,EAAE,EAAE,CACzE,aAAa,CAAC,IAAI,CAChB,UAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CACnB,iBAAK,CACH,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,sDAA4B,CAAC,EAAE,EAAE,CAAC,cAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAC7G,CACF,EACD,UAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EACtD,2BAAoB,EAAE,CACvB,CAAC;AAEG,MAAM,2BAA2B,GAAG,CACzC,aAAwC,EACxC,sBAA8C,EAC9C,EAAE,CACF,qBAAqB,CAAC,aAAa,CAAC,CAAC,IAAI,CACvC,gBAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,EAC7D,UAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IACV,MAAM,eAAe,GAAG,iBAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,OAAO;QACL,GAAG;QACH,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QACvE,UAAU,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACvD,eAAe;KAChB,CAAC;AACJ,CAAC,CAAC,CACH,CAAC;AAfS,QAAA,2BAA2B,+BAepC"}
@@ -0,0 +1,5 @@
1
+ export * from './RewardsHistory';
2
+ export * from './DelegationTracker';
3
+ export * from './RewardAccounts';
4
+ export * from './transactionCertificates';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/DelegationTracker/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./RewardsHistory"), exports);
14
+ __exportStar(require("./DelegationTracker"), exports);
15
+ __exportStar(require("./RewardAccounts"), exports);
16
+ __exportStar(require("./transactionCertificates"), exports);
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/DelegationTracker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAiC;AACjC,sDAAoC;AACpC,mDAAiC;AACjC,4DAA0C"}
@@ -0,0 +1,9 @@
1
+ import { Cardano } from '@cardano-sdk/core';
2
+ import { Observable } from 'rxjs';
3
+ export declare const RegAndDeregCertificateTypes: Cardano.CertificateType[];
4
+ export declare const stakeKeyCertficates: (certificates?: Cardano.Certificate[] | undefined) => Cardano.StakeAddressCertificate[];
5
+ export declare const includesAnyCertificate: (haystack: Cardano.Certificate[], needle: Cardano.CertificateType[]) => boolean;
6
+ export declare const transactionHasAnyCertificate: ({ body: { certificates } }: Cardano.TxAlonzo, certificateTypes: Cardano.CertificateType[]) => boolean;
7
+ export declare const isLastStakeKeyCertOfType: (transactionsCertificates: Cardano.Certificate[][], certType: Cardano.CertificateType.StakeKeyRegistration | Cardano.CertificateType.StakeKeyDeregistration, rewardAccount?: string | undefined) => boolean;
8
+ export declare const transactionsWithCertificates: (transactions$: Observable<Cardano.TxAlonzo[]>, certificateTypes: Cardano.CertificateType[]) => Observable<Cardano.TxAlonzo[]>;
9
+ //# sourceMappingURL=transactionCertificates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionCertificates.d.ts","sourceRoot":"","sources":["../../../src/services/DelegationTracker/transactionCertificates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAA6B,MAAM,MAAM,CAAC;AAI7D,eAAO,MAAM,2BAA2B,2BAGvC,CAAC;AAEF,eAAO,MAAM,mBAAmB,yFAGvB,CAAC;AAEV,eAAO,MAAM,sBAAsB,aAAc,QAAQ,WAAW,EAAE,UAAU,QAAQ,eAAe,EAAE,YAChC,CAAC;AAE1E,eAAO,MAAM,4BAA4B,+BACX,QAAQ,QAAQ,oBAC1B,QAAQ,eAAe,EAAE,YACoB,CAAC;AAElE,eAAO,MAAM,wBAAwB,6BACT,QAAQ,WAAW,EAAE,EAAE,YACvC,QAAQ,eAAe,CAAC,oBAAoB,GAAG,QAAQ,eAAe,CAAC,sBAAsB,gDAexG,CAAC;AAEF,eAAO,MAAM,4BAA4B,kBACxB,WAAW,QAAQ,QAAQ,EAAE,CAAC,oBAC3B,QAAQ,eAAe,EAAE,mCAK1C,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transactionsWithCertificates = exports.isLastStakeKeyCertOfType = exports.transactionHasAnyCertificate = exports.includesAnyCertificate = exports.stakeKeyCertficates = exports.RegAndDeregCertificateTypes = void 0;
4
+ const core_1 = require("@cardano-sdk/core");
5
+ const rxjs_1 = require("rxjs");
6
+ const lodash_es_1 = require("lodash-es");
7
+ const equals_1 = require("../util/equals");
8
+ exports.RegAndDeregCertificateTypes = [
9
+ core_1.Cardano.CertificateType.StakeKeyRegistration,
10
+ core_1.Cardano.CertificateType.StakeKeyDeregistration
11
+ ];
12
+ const stakeKeyCertficates = (certificates) => certificates?.filter((certificate) => exports.RegAndDeregCertificateTypes.includes(certificate.__typename)) || [];
13
+ exports.stakeKeyCertficates = stakeKeyCertficates;
14
+ const includesAnyCertificate = (haystack, needle) => haystack.some(({ __typename }) => needle.includes(__typename)) || false;
15
+ exports.includesAnyCertificate = includesAnyCertificate;
16
+ const transactionHasAnyCertificate = ({ body: { certificates } }, certificateTypes) => exports.includesAnyCertificate(certificates || [], certificateTypes);
17
+ exports.transactionHasAnyCertificate = transactionHasAnyCertificate;
18
+ const isLastStakeKeyCertOfType = (transactionsCertificates, certType, rewardAccount) => {
19
+ const lastRegOrDereg = lodash_es_1.last(transactionsCertificates
20
+ .map((certificates) => {
21
+ const allStakeKeyCertificates = exports.stakeKeyCertficates(certificates);
22
+ const addressStakeKeyCertificates = rewardAccount
23
+ ? allStakeKeyCertificates.filter(({ address }) => rewardAccount === address)
24
+ : allStakeKeyCertificates;
25
+ return lodash_es_1.last(addressStakeKeyCertificates);
26
+ })
27
+ .filter(core_1.util.isNotNil));
28
+ return lastRegOrDereg?.__typename === certType;
29
+ };
30
+ exports.isLastStakeKeyCertOfType = isLastStakeKeyCertOfType;
31
+ const transactionsWithCertificates = (transactions$, certificateTypes) => transactions$.pipe(rxjs_1.map((transactions) => transactions.filter((tx) => exports.transactionHasAnyCertificate(tx, certificateTypes))), rxjs_1.distinctUntilChanged(equals_1.transactionsEquals));
32
+ exports.transactionsWithCertificates = transactionsWithCertificates;
33
+ //# sourceMappingURL=transactionCertificates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionCertificates.js","sourceRoot":"","sources":["../../../src/services/DelegationTracker/transactionCertificates.ts"],"names":[],"mappings":";;;AAAA,4CAAkD;AAClD,+BAA6D;AAC7D,yCAAiC;AACjC,2CAAoD;AAEvC,QAAA,2BAA2B,GAAG;IACzC,cAAO,CAAC,eAAe,CAAC,oBAAoB;IAC5C,cAAO,CAAC,eAAe,CAAC,sBAAsB;CAC/C,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,YAAoC,EAAE,EAAE,CAC1E,YAAY,EAAE,MAAM,CAAC,CAAC,WAAW,EAAkD,EAAE,CACnF,mCAA2B,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAC7D,IAAI,EAAE,CAAC;AAHG,QAAA,mBAAmB,uBAGtB;AAEH,MAAM,sBAAsB,GAAG,CAAC,QAA+B,EAAE,MAAiC,EAAE,EAAE,CAC3G,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC;AAD7D,QAAA,sBAAsB,0BACuC;AAEnE,MAAM,4BAA4B,GAAG,CAC1C,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAoB,EAC5C,gBAA2C,EAC3C,EAAE,CAAC,8BAAsB,CAAC,YAAY,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAHrD,QAAA,4BAA4B,gCAGyB;AAE3D,MAAM,wBAAwB,GAAG,CACtC,wBAAiD,EACjD,QAAuG,EACvG,aAA+B,EAC/B,EAAE;IACF,MAAM,cAAc,GAAG,gBAAI,CACzB,wBAAwB;SACrB,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;QACpB,MAAM,uBAAuB,GAAG,2BAAmB,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,2BAA2B,GAAG,aAAa;YAC/C,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,aAAa,KAAK,OAAO,CAAC;YAC5E,CAAC,CAAC,uBAAuB,CAAC;QAC5B,OAAO,gBAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC,CAAC;SACD,MAAM,CAAC,WAAI,CAAC,QAAQ,CAAC,CACzB,CAAC;IACF,OAAO,cAAc,EAAE,UAAU,KAAK,QAAQ,CAAC;AACjD,CAAC,CAAC;AAjBW,QAAA,wBAAwB,4BAiBnC;AAEK,MAAM,4BAA4B,GAAG,CAC1C,aAA6C,EAC7C,gBAA2C,EAC3C,EAAE,CACF,aAAa,CAAC,IAAI,CAChB,UAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,oCAA4B,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,EACtG,2BAAoB,CAAC,2BAAkB,CAAC,CACzC,CAAC;AAPS,QAAA,4BAA4B,gCAOrC"}
@@ -0,0 +1,6 @@
1
+ import { Cardano } from '@cardano-sdk/core';
2
+ export interface TxWithEpoch {
3
+ tx: Cardano.TxAlonzo;
4
+ epoch: Cardano.Epoch;
5
+ }
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/DelegationTracker/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;CACtB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/DelegationTracker/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { CustomError } from 'ts-custom-error';
2
+ export declare enum TransactionFailure {
3
+ InvalidTransaction = "INVALID_TRANSACTION",
4
+ FailedToSubmit = "FAILED_TO_SUBMIT",
5
+ Unknown = "UNKNOWN",
6
+ CannotTrack = "CANNOT_TRACK",
7
+ Timeout = "TIMEOUT"
8
+ }
9
+ export declare class TransactionError extends CustomError {
10
+ reason: TransactionFailure;
11
+ innerError?: unknown;
12
+ detail?: string | undefined;
13
+ constructor(reason: TransactionFailure, innerError?: unknown, detail?: string | undefined);
14
+ }
15
+ //# sourceMappingURL=TransactionError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionError.d.ts","sourceRoot":"","sources":["../../src/services/TransactionError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,oBAAY,kBAAkB;IAC5B,kBAAkB,wBAAwB;IAC1C,cAAc,qBAAqB;IACnC,OAAO,YAAY;IACnB,WAAW,iBAAiB;IAC5B,OAAO,YAAY;CACpB;AAID,qBAAa,gBAAiB,SAAQ,WAAW;IAC5B,MAAM,EAAE,kBAAkB;IAAS,UAAU,CAAC;IAAkB,MAAM,CAAC;gBAAvE,MAAM,EAAE,kBAAkB,EAAS,UAAU,CAAC,SAAS,EAAS,MAAM,CAAC,oBAAQ;CAGnG"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionError = exports.TransactionFailure = void 0;
4
+ const ts_custom_error_1 = require("ts-custom-error");
5
+ var TransactionFailure;
6
+ (function (TransactionFailure) {
7
+ TransactionFailure["InvalidTransaction"] = "INVALID_TRANSACTION";
8
+ TransactionFailure["FailedToSubmit"] = "FAILED_TO_SUBMIT";
9
+ TransactionFailure["Unknown"] = "UNKNOWN";
10
+ TransactionFailure["CannotTrack"] = "CANNOT_TRACK";
11
+ TransactionFailure["Timeout"] = "TIMEOUT";
12
+ })(TransactionFailure = exports.TransactionFailure || (exports.TransactionFailure = {}));
13
+ const formatDetail = (detail) => (detail ? ` (${detail})` : '');
14
+ class TransactionError extends ts_custom_error_1.CustomError {
15
+ constructor(reason, innerError, detail) {
16
+ super(`Transaction failed: ${reason}${formatDetail(detail)}`);
17
+ this.reason = reason;
18
+ this.innerError = innerError;
19
+ this.detail = detail;
20
+ }
21
+ }
22
+ exports.TransactionError = TransactionError;
23
+ //# sourceMappingURL=TransactionError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionError.js","sourceRoot":"","sources":["../../src/services/TransactionError.ts"],"names":[],"mappings":";;;AAAA,qDAA8C;AAE9C,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,gEAA0C,CAAA;IAC1C,yDAAmC,CAAA;IACnC,yCAAmB,CAAA;IACnB,kDAA4B,CAAA;IAC5B,yCAAmB,CAAA;AACrB,CAAC,EANW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAM7B;AAED,MAAM,YAAY,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEzE,MAAa,gBAAiB,SAAQ,6BAAW;IAC/C,YAAmB,MAA0B,EAAS,UAAoB,EAAS,MAAe;QAChG,KAAK,CAAC,uBAAuB,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAD7C,WAAM,GAAN,MAAM,CAAoB;QAAS,eAAU,GAAV,UAAU,CAAU;QAAS,WAAM,GAAN,MAAM,CAAS;IAElG,CAAC;CACF;AAJD,4CAIC"}
@@ -0,0 +1,22 @@
1
+ import { Cardano, WalletProvider } from '@cardano-sdk/core';
2
+ import { DirectionalTransaction, FailedTx, TransactionsTracker } from './types';
3
+ import { Observable } from 'rxjs';
4
+ import { RetryBackoffConfig } from 'backoff-rxjs';
5
+ import { TrackerSubject } from './util/TrackerSubject';
6
+ export interface TransactionsTrackerProps {
7
+ walletProvider: WalletProvider;
8
+ addresses$: Observable<Cardano.Address[]>;
9
+ tip$: Observable<Cardano.Tip>;
10
+ retryBackoffConfig: RetryBackoffConfig;
11
+ newTransactions: {
12
+ submitting$: Observable<Cardano.NewTxAlonzo>;
13
+ pending$: Observable<Cardano.NewTxAlonzo>;
14
+ failedToSubmit$: Observable<FailedTx>;
15
+ };
16
+ }
17
+ export interface TransactionsTrackerInternals {
18
+ transactionsSource$?: TrackerSubject<DirectionalTransaction[]>;
19
+ }
20
+ export declare const createAddressTransactionsProvider: (walletProvider: WalletProvider, addresses$: Observable<Cardano.Address[]>, retryBackoffConfig: RetryBackoffConfig, tipBlockHeight$: Observable<number>) => Observable<DirectionalTransaction[]>;
21
+ export declare const createTransactionsTracker: ({ tip$, walletProvider, addresses$, newTransactions: { submitting$, pending$, failedToSubmit$ }, retryBackoffConfig }: TransactionsTrackerProps, { transactionsSource$ }?: TransactionsTrackerInternals) => TransactionsTracker;
22
+ //# sourceMappingURL=TransactionsTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionsTracker.d.ts","sourceRoot":"","sources":["../../src/services/TransactionsTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAwB,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACtG,OAAO,EAEL,UAAU,EAgBX,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE;QACf,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7C,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;KACvC,CAAC;CACH;AAED,MAAM,WAAW,4BAA4B;IAC3C,mBAAmB,CAAC,EAAE,cAAc,CAAC,sBAAsB,EAAE,CAAC,CAAC;CAChE;AAED,eAAO,MAAM,iCAAiC,mBAC5B,cAAc,cAClB,WAAW,QAAQ,OAAO,EAAE,CAAC,sBACrB,kBAAkB,mBACrB,WAAW,MAAM,CAAC,KAClC,WAAW,sBAAsB,EAAE,CA4BrC,CAAC;AAgBF,eAAO,MAAM,yBAAyB,0HAOjC,wBAAwB,4BAKxB,4BAA4B,KAC9B,mBA+FF,CAAC"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTransactionsTracker = exports.createAddressTransactionsProvider = void 0;
4
+ const types_1 = require("./types");
5
+ const rxjs_1 = require("rxjs");
6
+ const TrackerSubject_1 = require("./util/TrackerSubject");
7
+ const TransactionError_1 = require("./TransactionError");
8
+ const util_1 = require("./util");
9
+ const lodash_es_1 = require("lodash-es");
10
+ const createAddressTransactionsProvider = (walletProvider, addresses$, retryBackoffConfig, tipBlockHeight$) => {
11
+ const isMyAddress = (addresses) => ({ address }) => addresses.includes(address);
12
+ return addresses$.pipe(rxjs_1.switchMap((addresses) => util_1.coldObservableProvider(() => walletProvider.queryTransactionsByAddresses(addresses), retryBackoffConfig, tipBlockHeight$, util_1.transactionsEquals).pipe(rxjs_1.map((transactions) => lodash_es_1.sortBy(transactions, ({ blockHeader: { blockHeight } }) => blockHeight, ({ index }) => index).map((tx) => {
13
+ const direction = tx.body.inputs.some(isMyAddress(addresses))
14
+ ? types_1.TransactionDirection.Outgoing
15
+ : types_1.TransactionDirection.Incoming;
16
+ return { direction, tx };
17
+ })))));
18
+ };
19
+ exports.createAddressTransactionsProvider = createAddressTransactionsProvider;
20
+ const newTransactions$ = (transactions$) => transactions$.pipe(rxjs_1.take(1), rxjs_1.map((transactions) => transactions.map(({ id }) => id)), rxjs_1.mergeMap((initialTransactionIds) => {
21
+ const ignoredTransactionIds = [...initialTransactionIds];
22
+ return transactions$.pipe(rxjs_1.map((transactions) => transactions.filter(({ id }) => !ignoredTransactionIds.includes(id))), rxjs_1.tap((newTransactions) => ignoredTransactionIds.push(...newTransactions.map(({ id }) => id))), rxjs_1.mergeMap((newTransactions) => rxjs_1.concat(...newTransactions.map((tx) => rxjs_1.of(tx)))));
23
+ }));
24
+ const createTransactionsTracker = ({ tip$, walletProvider, addresses$, newTransactions: { submitting$, pending$, failedToSubmit$ }, retryBackoffConfig }, { transactionsSource$ = new TrackerSubject_1.TrackerSubject(exports.createAddressTransactionsProvider(walletProvider, addresses$, retryBackoffConfig, util_1.sharedDistinctBlock(tip$))) } = {}) => {
25
+ const providerTransactionsByDirection$ = (direction) => transactionsSource$.pipe(rxjs_1.map((transactions) => transactions.filter((tx) => tx.direction === direction).map(({ tx }) => tx)), rxjs_1.distinctUntilChanged(util_1.transactionsEquals));
26
+ const incomingTransactionHistory$ = new TrackerSubject_1.TrackerSubject(providerTransactionsByDirection$(types_1.TransactionDirection.Incoming));
27
+ const outgoingTransactionHistory$ = new TrackerSubject_1.TrackerSubject(providerTransactionsByDirection$(types_1.TransactionDirection.Outgoing));
28
+ const txConfirmed$ = (tx) => newTransactions$(outgoingTransactionHistory$).pipe(rxjs_1.filter((historyTx) => historyTx.id === tx.id), rxjs_1.take(1), rxjs_1.map(() => tx));
29
+ const failed$ = new rxjs_1.Subject();
30
+ const failedSubscription = submitting$
31
+ .pipe(rxjs_1.mergeMap((tx) => {
32
+ const invalidHereafter = tx.body.validityInterval.invalidHereafter;
33
+ return rxjs_1.race(failedToSubmit$.pipe(rxjs_1.filter((failed) => failed.tx === tx), rxjs_1.take(1)), invalidHereafter
34
+ ? tip$.pipe(rxjs_1.filter(({ slot }) => slot > invalidHereafter), rxjs_1.map(() => ({ reason: TransactionError_1.TransactionFailure.Timeout, tx })), rxjs_1.take(1))
35
+ : rxjs_1.EMPTY).pipe(rxjs_1.takeUntil(txConfirmed$(tx)));
36
+ }))
37
+ .subscribe(failed$);
38
+ const txFailed$ = (tx) => failed$.pipe(rxjs_1.filter((failed) => failed.tx === tx), rxjs_1.take(1));
39
+ const inFlight$ = new TrackerSubject_1.TrackerSubject(submitting$.pipe(rxjs_1.mergeMap((tx) => rxjs_1.merge(rxjs_1.of({ op: 'add', tx }), rxjs_1.race(txConfirmed$(tx), txFailed$(tx)).pipe(rxjs_1.map(() => ({ op: 'remove', tx }))))), rxjs_1.scan((inFlight, { op, tx }) => {
40
+ if (op === 'add') {
41
+ return [...inFlight, tx];
42
+ }
43
+ const idx = inFlight.indexOf(tx);
44
+ return [...inFlight.splice(0, idx), ...inFlight.splice(idx + 1)];
45
+ }, []), rxjs_1.startWith([])));
46
+ const confirmed$ = new rxjs_1.Subject();
47
+ const confirmedSubscription = submitting$
48
+ .pipe(rxjs_1.mergeMap((tx) => txConfirmed$(tx).pipe(rxjs_1.takeUntil(txFailed$(tx)))))
49
+ .subscribe(confirmed$);
50
+ return {
51
+ history: {
52
+ all$: transactionsSource$,
53
+ incoming$: incomingTransactionHistory$,
54
+ outgoing$: outgoingTransactionHistory$
55
+ },
56
+ incoming$: newTransactions$(incomingTransactionHistory$),
57
+ outgoing: {
58
+ confirmed$,
59
+ failed$,
60
+ inFlight$,
61
+ pending$,
62
+ submitting$
63
+ },
64
+ shutdown: () => {
65
+ transactionsSource$.complete();
66
+ inFlight$.complete();
67
+ confirmedSubscription.unsubscribe();
68
+ confirmed$.complete();
69
+ failedSubscription.unsubscribe();
70
+ failed$.complete();
71
+ }
72
+ };
73
+ };
74
+ exports.createTransactionsTracker = createTransactionsTracker;
75
+ //# sourceMappingURL=TransactionsTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionsTracker.js","sourceRoot":"","sources":["../../src/services/TransactionsTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Cardano, WalletProvider } from '@cardano-sdk/core';
2
+ import { Observable } from 'rxjs';
3
+ import { RetryBackoffConfig } from 'backoff-rxjs';
4
+ import { TrackerSubject } from './util';
5
+ import { TransactionalTracker } from './types';
6
+ export interface UtxoTrackerProps {
7
+ walletProvider: WalletProvider;
8
+ addresses$: Observable<Cardano.Address[]>;
9
+ transactionsInFlight$: Observable<Cardano.NewTxAlonzo[]>;
10
+ tipBlockHeight$: Observable<number>;
11
+ retryBackoffConfig: RetryBackoffConfig;
12
+ }
13
+ export interface UtxoTrackerInternals {
14
+ utxoSource$?: TrackerSubject<Cardano.Utxo[]>;
15
+ }
16
+ export declare const createUtxoProvider: (walletProvider: WalletProvider, addresses$: Observable<Cardano.Address[]>, tipBlockHeight$: Observable<number>, retryBackoffConfig: RetryBackoffConfig) => Observable<Cardano.Utxo[]>;
17
+ export declare const createUtxoTracker: ({ walletProvider, addresses$, transactionsInFlight$, retryBackoffConfig, tipBlockHeight$ }: UtxoTrackerProps, { utxoSource$ }?: UtxoTrackerInternals) => TransactionalTracker<Cardano.Utxo[]>;
18
+ //# sourceMappingURL=UtxoTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UtxoTracker.d.ts","sourceRoot":"","sources":["../../src/services/UtxoTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAiC,MAAM,MAAM,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,cAAc,EAAsC,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,qBAAqB,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,eAAe,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,kBAAkB,mBACb,cAAc,cAClB,WAAW,QAAQ,OAAO,EAAE,CAAC,mBACxB,WAAW,MAAM,CAAC,sBACf,kBAAkB,+BAWrC,CAAC;AAEJ,eAAO,MAAM,iBAAiB,+FACgE,gBAAgB,oBAKzG,oBAAoB,KACtB,qBAAqB,QAAQ,IAAI,EAAE,CAyBrC,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createUtxoTracker = exports.createUtxoProvider = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const util_1 = require("./util");
6
+ const createUtxoProvider = (walletProvider, addresses$, tipBlockHeight$, retryBackoffConfig) => addresses$.pipe(rxjs_1.switchMap((addresses) => util_1.coldObservableProvider(() => walletProvider.utxoDelegationAndRewards(addresses).then(({ utxo }) => utxo), retryBackoffConfig, tipBlockHeight$, util_1.utxoEquals)));
7
+ exports.createUtxoProvider = createUtxoProvider;
8
+ const createUtxoTracker = ({ walletProvider, addresses$, transactionsInFlight$, retryBackoffConfig, tipBlockHeight$ }, { utxoSource$ = new util_1.TrackerSubject(exports.createUtxoProvider(walletProvider, addresses$, tipBlockHeight$, retryBackoffConfig)) } = {}) => {
9
+ const available$ = new util_1.TrackerSubject(rxjs_1.combineLatest([utxoSource$, transactionsInFlight$]).pipe(rxjs_1.map(([utxo, transactionsInFlight]) => utxo.filter(([utxoTxIn]) => !transactionsInFlight.some(({ body: { inputs } }) => inputs.some((input) => input.txId === utxoTxIn.txId && input.index === utxoTxIn.index))))));
10
+ return {
11
+ available$,
12
+ shutdown: () => {
13
+ utxoSource$.complete();
14
+ available$.complete();
15
+ },
16
+ total$: utxoSource$
17
+ };
18
+ };
19
+ exports.createUtxoTracker = createUtxoTracker;
20
+ //# sourceMappingURL=UtxoTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UtxoTracker.js","sourceRoot":"","sources":["../../src/services/UtxoTracker.ts"],"names":[],"mappings":";;;AACA,+BAAiE;AAEjE,iCAA4E;AAerE,MAAM,kBAAkB,GAAG,CAChC,cAA8B,EAC9B,UAAyC,EACzC,eAAmC,EACnC,kBAAsC,EACtC,EAAE,CACF,UAAU,CAAC,IAAI,CACb,gBAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CACtB,6BAAsB,CACpB,GAAG,EAAE,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EACjF,kBAAkB,EAClB,eAAe,EACf,iBAAU,CACX,CACF,CACF,CAAC;AAfS,QAAA,kBAAkB,sBAe3B;AAEG,MAAM,iBAAiB,GAAG,CAC/B,EAAE,cAAc,EAAE,UAAU,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,eAAe,EAAoB,EAC5G,EACE,WAAW,GAAG,IAAI,qBAAc,CAC9B,0BAAkB,CAAC,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,CAAC,CACpF,KACuB,EAAE,EACU,EAAE;IACxC,MAAM,UAAU,GAAG,IAAI,qBAAc,CACnC,oBAAa,CAAC,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAEtD,UAAG,CAAC,CAAC,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,EAAE,CACnC,IAAI,CAAC,MAAM,CACT,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CACb,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAClD,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CACvF,CACJ,CACF,CACF,CACF,CAAC;IACF,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,GAAG,EAAE;YACb,WAAW,CAAC,QAAQ,EAAE,CAAC;YACvB,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAID,MAAM,EAAE,WAAW;KACpB,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,iBAAiB,qBAgC5B"}
@@ -0,0 +1,9 @@
1
+ export * from './util';
2
+ export * from './BalanceTracker';
3
+ export * from './UtxoTracker';
4
+ export * from './DelegationTracker';
5
+ export * from './TransactionsTracker';
6
+ export * from './AssetsTracker';
7
+ export * from './TransactionError';
8
+ export * from './types';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./util"), exports);
14
+ __exportStar(require("./BalanceTracker"), exports);
15
+ __exportStar(require("./UtxoTracker"), exports);
16
+ __exportStar(require("./DelegationTracker"), exports);
17
+ __exportStar(require("./TransactionsTracker"), exports);
18
+ __exportStar(require("./AssetsTracker"), exports);
19
+ __exportStar(require("./TransactionError"), exports);
20
+ __exportStar(require("./types"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAuB;AACvB,mDAAiC;AACjC,gDAA8B;AAC9B,sDAAoC;AACpC,wDAAsC;AACtC,kDAAgC;AAChC,qDAAmC;AACnC,0CAAwB"}
@@ -0,0 +1,81 @@
1
+ import { BehaviorObservable } from './util';
2
+ import { Cardano, EpochRewards } from '@cardano-sdk/core';
3
+ import { Observable } from 'rxjs';
4
+ import { TransactionFailure } from './TransactionError';
5
+ export interface Balance extends Cardano.Value {
6
+ rewards: Cardano.Lovelace;
7
+ deposit: Cardano.Lovelace;
8
+ }
9
+ export interface TransactionalObservables<T> {
10
+ total$: BehaviorObservable<T>;
11
+ available$: BehaviorObservable<T>;
12
+ }
13
+ export interface TransactionalTracker<T> extends TransactionalObservables<T> {
14
+ shutdown(): void;
15
+ }
16
+ export declare type Milliseconds = number;
17
+ export interface PollingConfig {
18
+ readonly interval?: Milliseconds;
19
+ readonly maxInterval?: Milliseconds;
20
+ }
21
+ export declare enum TransactionDirection {
22
+ Incoming = "Incoming",
23
+ Outgoing = "Outgoing"
24
+ }
25
+ export interface DirectionalTransaction {
26
+ tx: Cardano.TxAlonzo;
27
+ direction: TransactionDirection;
28
+ }
29
+ export interface FailedTx {
30
+ tx: Cardano.NewTxAlonzo;
31
+ reason: TransactionFailure;
32
+ }
33
+ export interface TransactionsTracker {
34
+ readonly history: {
35
+ all$: BehaviorObservable<DirectionalTransaction[]>;
36
+ outgoing$: BehaviorObservable<Cardano.TxAlonzo[]>;
37
+ incoming$: BehaviorObservable<Cardano.TxAlonzo[]>;
38
+ };
39
+ readonly outgoing: {
40
+ readonly inFlight$: BehaviorObservable<Cardano.NewTxAlonzo[]>;
41
+ readonly submitting$: Observable<Cardano.NewTxAlonzo>;
42
+ readonly pending$: Observable<Cardano.NewTxAlonzo>;
43
+ readonly failed$: Observable<FailedTx>;
44
+ readonly confirmed$: Observable<Cardano.NewTxAlonzo>;
45
+ };
46
+ readonly incoming$: Observable<Cardano.TxAlonzo>;
47
+ shutdown(): void;
48
+ }
49
+ export interface RewardsHistory {
50
+ all: EpochRewards[];
51
+ lastReward: EpochRewards | null;
52
+ avgReward: Cardano.Lovelace | null;
53
+ lifetimeRewards: Cardano.Lovelace;
54
+ }
55
+ export interface Delegatee {
56
+ currentEpoch?: Cardano.StakePool;
57
+ nextEpoch?: Cardano.StakePool;
58
+ nextNextEpoch: Cardano.StakePool;
59
+ }
60
+ export declare enum StakeKeyStatus {
61
+ Registering = "REGISTERING",
62
+ Registered = "REGISTERED",
63
+ Unregistering = "UNREGISTERING",
64
+ Unregistered = "UNREGISTERED"
65
+ }
66
+ export interface RewardBalance {
67
+ total: Cardano.Lovelace;
68
+ available: Cardano.Lovelace;
69
+ }
70
+ export interface RewardAccount {
71
+ address: Cardano.Address;
72
+ keyStatus: StakeKeyStatus;
73
+ delegatee?: Delegatee;
74
+ rewardBalance: RewardBalance;
75
+ }
76
+ export interface DelegationTracker {
77
+ rewardsHistory$: BehaviorObservable<RewardsHistory>;
78
+ rewardAccounts$: Observable<RewardAccount[]>;
79
+ shutdown(): void;
80
+ }
81
+ //# sourceMappingURL=types.d.ts.map