@sundaeswap/wallet-lite 0.0.40 → 0.0.42
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/dist/cjs/@types/events.js.map +1 -1
- package/dist/cjs/@types/global.d.js.map +1 -1
- package/dist/cjs/@types/observer.js.map +1 -1
- package/dist/cjs/classes/WalletAssetMap.class.js.map +1 -1
- package/dist/cjs/classes/WalletBalanceMap.class.js +1 -1
- package/dist/cjs/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/cjs/classes/WalletObserver.class.js +1 -1
- package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
- package/dist/cjs/classes/WalletObserverEvent.js +3 -2
- package/dist/cjs/classes/WalletObserverEvent.js.map +1 -1
- package/dist/cjs/classes/WalletObserverUtils.class.js +3 -0
- package/dist/cjs/classes/WalletObserverUtils.class.js.map +1 -1
- package/dist/cjs/react-components/RenderWallet.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletHandles.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletPeerConnect.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletState.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js +6 -0
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +5 -3
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/cjs/react-components/contexts/observer/context.js.map +1 -1
- package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletLoadingState.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletPeerConnect.js.map +1 -1
- package/dist/cjs/utils/comparisons.js.map +1 -1
- package/dist/cjs/utils/hashing.js.map +1 -1
- package/dist/esm/@types/events.js.map +1 -1
- package/dist/esm/@types/global.d.js.map +1 -1
- package/dist/esm/@types/observer.js.map +1 -1
- package/dist/esm/classes/WalletAssetMap.class.js.map +1 -1
- package/dist/esm/classes/WalletBalanceMap.class.js +1 -1
- package/dist/esm/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/esm/classes/WalletObserver.class.js +3 -3
- package/dist/esm/classes/WalletObserver.class.js.map +1 -1
- package/dist/esm/classes/WalletObserverEvent.js +3 -2
- package/dist/esm/classes/WalletObserverEvent.js.map +1 -1
- package/dist/esm/classes/WalletObserverUtils.class.js +5 -0
- package/dist/esm/classes/WalletObserverUtils.class.js.map +1 -1
- package/dist/esm/react-components/RenderWallet.js.map +1 -1
- package/dist/esm/react-components/RenderWalletHandles.js.map +1 -1
- package/dist/esm/react-components/RenderWalletPeerConnect.js.map +1 -1
- package/dist/esm/react-components/RenderWalletState.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js +5 -0
- package/dist/esm/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +3 -2
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/esm/react-components/contexts/observer/context.js.map +1 -1
- package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletLoadingState.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletPeerConnect.js.map +1 -1
- package/dist/esm/utils/comparisons.js.map +1 -1
- package/dist/esm/utils/hashing.js.map +1 -1
- package/dist/types/@types/events.d.ts +2 -2
- package/dist/types/classes/WalletBalanceMap.class.d.ts +1 -1
- package/dist/types/classes/WalletBalanceMap.class.d.ts.map +1 -1
- package/dist/types/classes/WalletObserver.class.d.ts +2 -2
- package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
- package/dist/types/classes/WalletObserverEvent.d.ts +7 -7
- package/dist/types/classes/WalletObserverEvent.d.ts.map +1 -1
- package/dist/types/classes/WalletObserverUtils.class.d.ts.map +1 -1
- package/dist/types/react-components/RenderWallet.d.ts +1 -1
- package/dist/types/react-components/RenderWallet.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
- package/dist/types/react-components/contexts/observer/types.d.ts +1 -0
- package/dist/types/react-components/contexts/observer/types.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/utils/comparisons.d.ts.map +1 -1
- package/dist/types/utils/hashing.d.ts +3 -3
- package/package.json +1 -1
- package/src/@types/events.ts +4 -4
- package/src/@types/global.d.ts +1 -0
- package/src/@types/observer.ts +6 -6
- package/src/__data__/assets.ts +1 -1
- package/src/classes/WalletAssetMap.class.ts +1 -1
- package/src/classes/WalletBalanceMap.class.ts +6 -6
- package/src/classes/WalletObserver.class.ts +27 -25
- package/src/classes/WalletObserverEvent.ts +14 -13
- package/src/classes/WalletObserverUtils.class.ts +11 -5
- package/src/classes/__tests__/WalletObserver.test.ts +23 -30
- package/src/classes/__tests__/WalletObserverEvent.test.ts +8 -8
- package/src/classes/__tests__/WalletObserverUtils.test.ts +6 -6
- package/src/react-components/RenderWallet.tsx +4 -4
- package/src/react-components/RenderWalletHandles.tsx +2 -2
- package/src/react-components/RenderWalletPeerConnect.tsx +2 -2
- package/src/react-components/RenderWalletState.tsx +2 -2
- package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +3 -3
- package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +2 -2
- package/src/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.ts +1 -1
- package/src/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.ts +21 -10
- package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +19 -27
- package/src/react-components/__tests__/RenderWallet.test.tsx +1 -1
- package/src/react-components/__tests__/RenderWalletHandles.test.tsx +8 -8
- package/src/react-components/__tests__/hooks/useAvailableExtensions.test.tsx +1 -0
- package/src/react-components/__tests__/hooks/useWalletObserverRef.test.tsx +1 -1
- package/src/react-components/contexts/observer/context.ts +3 -3
- package/src/react-components/contexts/observer/types.ts +6 -5
- package/src/react-components/hooks/useWalletHandles.ts +5 -5
- package/src/react-components/hooks/useWalletLoadingState.ts +2 -2
- package/src/react-components/hooks/useWalletObserver.ts +2 -2
- package/src/react-components/hooks/useWalletPeerConnect.tsx +1 -1
- package/src/utils/__tests__/comparisons.test.ts +3 -3
- package/src/utils/__tests__/hashing.test.ts +6 -8
- package/src/utils/comparisons.ts +3 -1
- package/src/utils/hashing.ts +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparisons.d.ts","sourceRoot":"","sources":["../../../src/utils/comparisons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"comparisons.d.ts","sourceRoot":"","sources":["../../../src/utils/comparisons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,UAErB,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB,SAEnC,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB,KACzC,OA4BF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IWalletObserverEventValues, TWalletObserverEventFunction } from "../@types/events.js";
|
|
2
2
|
/**
|
|
3
3
|
* Generates a unique key for the event and callback function.
|
|
4
4
|
*
|
|
@@ -7,7 +7,7 @@ import { EWalletObserverEventValues, TWalletObserverEventFunction } from "../@ty
|
|
|
7
7
|
* @param {TWalletObserverEventFunction<E>} callback - The callback function.
|
|
8
8
|
* @returns {string} - The unique key for the event and callback.
|
|
9
9
|
*/
|
|
10
|
-
export declare const getEventKey: <E extends keyof
|
|
10
|
+
export declare const getEventKey: <E extends keyof IWalletObserverEventValues<import("@sundaeswap/asset").IAssetAmountMetadata>>(event: E, callback: TWalletObserverEventFunction<E>) => string;
|
|
11
11
|
/**
|
|
12
12
|
* Generates a hash for the callback function.
|
|
13
13
|
*
|
|
@@ -15,5 +15,5 @@ export declare const getEventKey: <E extends keyof EWalletObserverEventValues<im
|
|
|
15
15
|
* @param {TWalletObserverEventFunction<E>} callback - The callback function.
|
|
16
16
|
* @returns {number} - The hash of the callback function.
|
|
17
17
|
*/
|
|
18
|
-
export declare const getFunctionHash: <E extends keyof
|
|
18
|
+
export declare const getFunctionHash: <E extends keyof IWalletObserverEventValues<import("@sundaeswap/asset").IAssetAmountMetadata>>(callback: TWalletObserverEventFunction<E>) => number;
|
|
19
19
|
//# sourceMappingURL=hashing.d.ts.map
|
package/package.json
CHANGED
package/src/@types/events.ts
CHANGED
|
@@ -18,8 +18,8 @@ export enum EWalletObserverEvents {
|
|
|
18
18
|
/**
|
|
19
19
|
* A map of what each event passes to the event listener function.
|
|
20
20
|
*/
|
|
21
|
-
export interface
|
|
22
|
-
T extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
21
|
+
export interface IWalletObserverEventValues<
|
|
22
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
23
23
|
> {
|
|
24
24
|
[EWalletObserverEvents.SYNCING_WALLET_START]: undefined;
|
|
25
25
|
[EWalletObserverEvents.SYNCING_WALLET_END]:
|
|
@@ -44,5 +44,5 @@ export interface EWalletObserverEventValues<
|
|
|
44
44
|
* type definitions for the arguments.
|
|
45
45
|
*/
|
|
46
46
|
export type TWalletObserverEventFunction<
|
|
47
|
-
E extends keyof
|
|
48
|
-
> = (data?:
|
|
47
|
+
E extends keyof IWalletObserverEventValues,
|
|
48
|
+
> = (data?: IWalletObserverEventValues[E]) => void;
|
package/src/@types/global.d.ts
CHANGED
package/src/@types/observer.ts
CHANGED
|
@@ -49,18 +49,18 @@ export type TWindowCardano = {
|
|
|
49
49
|
* the asset ID as the key, and the metadata as the value.
|
|
50
50
|
*/
|
|
51
51
|
export type TMetadataResolverFunc<
|
|
52
|
-
T extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
52
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
53
53
|
> = (
|
|
54
54
|
assetIds: string[],
|
|
55
55
|
normalizeAssetIdFunc: typeof normalizeAssetIdWithDot,
|
|
56
|
-
isAdaAssetFunc: typeof isAdaAsset
|
|
56
|
+
isAdaAssetFunc: typeof isAdaAsset,
|
|
57
57
|
) => Promise<Map<string, T>>;
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
* Options that are passed to the WalletObserver instance.
|
|
61
61
|
*/
|
|
62
62
|
export interface IResolvedWalletObserverOptions<
|
|
63
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
63
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
64
64
|
> {
|
|
65
65
|
metadataResolver: TMetadataResolverFunc<AssetMetadata>;
|
|
66
66
|
persistence: boolean;
|
|
@@ -73,14 +73,14 @@ export interface IResolvedWalletObserverOptions<
|
|
|
73
73
|
* Options that are passed to the WalletObserver instance.
|
|
74
74
|
*/
|
|
75
75
|
export type TWalletObserverOptions<
|
|
76
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
76
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
77
77
|
> = Partial<IResolvedWalletObserverOptions<AssetMetadata>>;
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Interface describing the Map type of an asset.
|
|
81
81
|
*/
|
|
82
82
|
export type TAssetAmountMap<
|
|
83
|
-
T extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
83
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
84
84
|
> = WalletAssetMap<T>;
|
|
85
85
|
|
|
86
86
|
/**
|
|
@@ -102,7 +102,7 @@ export type TGetPeerConnectInstance = () => {
|
|
|
102
102
|
};
|
|
103
103
|
|
|
104
104
|
export interface IWalletObserverSync<
|
|
105
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
105
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
106
106
|
> {
|
|
107
107
|
balanceMap: WalletBalanceMap<AssetMetadata>;
|
|
108
108
|
usedAddresses: string[];
|
package/src/__data__/assets.ts
CHANGED
|
@@ -130,7 +130,7 @@ export const assetMap = assetIds.map((id) => {
|
|
|
130
130
|
key: assetId,
|
|
131
131
|
assetAmount: new AssetAmount(
|
|
132
132
|
isNFT ? 1 : Math.floor(Math.random() * 10000000) + 1,
|
|
133
|
-
isNFT ? nftMetadata : fungibleMetadata
|
|
133
|
+
isNFT ? nftMetadata : fungibleMetadata,
|
|
134
134
|
),
|
|
135
135
|
};
|
|
136
136
|
});
|
|
@@ -6,7 +6,7 @@ import { normalizeAssetIdWithDot } from "../utils/assets.js";
|
|
|
6
6
|
* Map wrapper to enforce asset id normalization when setting and getting assets.
|
|
7
7
|
*/
|
|
8
8
|
export class WalletAssetMap<
|
|
9
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
9
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
10
10
|
> extends Map<string, AssetAmount<AssetMetadata>> {
|
|
11
11
|
/**
|
|
12
12
|
* Overlay to enforce asset ID normalization.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IAssetAmountMetadata } from "@sundaeswap/asset";
|
|
2
2
|
|
|
3
3
|
import { TAssetAmountMap } from "../@types/observer.js";
|
|
4
4
|
import { WalletAssetMap } from "./WalletAssetMap.class.js";
|
|
@@ -10,10 +10,10 @@ import { WalletObserver } from "./WalletObserver.class.js";
|
|
|
10
10
|
* for convenience when querying against the map.
|
|
11
11
|
*
|
|
12
12
|
* @template AssetMetadata - Type extending IAssetAmountMetadata.
|
|
13
|
-
* @extends {
|
|
13
|
+
* @extends {WalletAssetMap<AssetMetadata>}
|
|
14
14
|
*/
|
|
15
15
|
export class WalletBalanceMap<
|
|
16
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
16
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
17
17
|
> extends WalletAssetMap<AssetMetadata> {
|
|
18
18
|
/**
|
|
19
19
|
* @private
|
|
@@ -62,7 +62,7 @@ export class WalletBalanceMap<
|
|
|
62
62
|
const map: TAssetAmountMap<AssetMetadata> = new WalletAssetMap();
|
|
63
63
|
[...this.entries()].forEach(([key, asset]) => {
|
|
64
64
|
const isHandle = this._handlePolicyIds[this._observer.network].some(
|
|
65
|
-
(policyId) => asset.metadata.assetId.includes(policyId)
|
|
65
|
+
(policyId) => asset.metadata.assetId.includes(policyId),
|
|
66
66
|
);
|
|
67
67
|
|
|
68
68
|
if (isHandle) {
|
|
@@ -81,14 +81,14 @@ export class WalletBalanceMap<
|
|
|
81
81
|
* @returns {TAssetAmountMap<AssetMetadata>} A map of non-fungible tokens.
|
|
82
82
|
*/
|
|
83
83
|
getNonFungibleTokens = (
|
|
84
|
-
withHandles?: boolean
|
|
84
|
+
withHandles?: boolean,
|
|
85
85
|
): TAssetAmountMap<AssetMetadata> => {
|
|
86
86
|
const map: TAssetAmountMap<AssetMetadata> = new WalletAssetMap();
|
|
87
87
|
[...this.entries()].forEach(([key, asset]) => {
|
|
88
88
|
if (
|
|
89
89
|
!withHandles &&
|
|
90
90
|
this._handlePolicyIds[this._observer.network].some((policyId) =>
|
|
91
|
-
asset.metadata.assetId.includes(policyId)
|
|
91
|
+
asset.metadata.assetId.includes(policyId),
|
|
92
92
|
)
|
|
93
93
|
) {
|
|
94
94
|
return;
|
|
@@ -42,7 +42,7 @@ import { WalletObserverUtils } from "./WalletObserverUtils.class.js";
|
|
|
42
42
|
* @extends {WalletObserverEvent}
|
|
43
43
|
*/
|
|
44
44
|
export class WalletObserver<
|
|
45
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
45
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
46
46
|
> extends WalletObserverEvent {
|
|
47
47
|
static PERSISTENCE_CACHE_KEY = "walletObserver";
|
|
48
48
|
static ADA_ASSET_ID = "ada.lovelace";
|
|
@@ -105,7 +105,7 @@ export class WalletObserver<
|
|
|
105
105
|
],
|
|
106
106
|
},
|
|
107
107
|
},
|
|
108
|
-
options
|
|
108
|
+
options,
|
|
109
109
|
);
|
|
110
110
|
|
|
111
111
|
if (!this._options.persistence) {
|
|
@@ -128,7 +128,7 @@ export class WalletObserver<
|
|
|
128
128
|
sync = async (): Promise<IWalletObserverSync<AssetMetadata>> => {
|
|
129
129
|
if (!this.api) {
|
|
130
130
|
throw new Error(
|
|
131
|
-
"Attempted to perform a sync operation without a connected wallet."
|
|
131
|
+
"Attempted to perform a sync operation without a connected wallet.",
|
|
132
132
|
);
|
|
133
133
|
}
|
|
134
134
|
|
|
@@ -218,12 +218,14 @@ export class WalletObserver<
|
|
|
218
218
|
* but the underlying intent has not.
|
|
219
219
|
*
|
|
220
220
|
* @param {TSupportedWalletExtensions} [activeWallet] - The wallet to sync with.
|
|
221
|
-
* @returns {Promise<Cip30WalletApi>} - A promise that resolves to the API instance.
|
|
221
|
+
* @returns {Promise<Cip30WalletApi | undefined>} - A promise that resolves to the API instance.
|
|
222
222
|
*/
|
|
223
|
-
syncApi = async (
|
|
223
|
+
syncApi = async (
|
|
224
|
+
activeWallet?: TSupportedWalletExtensions,
|
|
225
|
+
): Promise<Cip30WalletApi | undefined> => {
|
|
224
226
|
if (!activeWallet && !this.activeWallet) {
|
|
225
227
|
throw new Error(
|
|
226
|
-
"A wallet is required to be passed as a parameter, or to be defined in the class."
|
|
228
|
+
"A wallet is required to be passed as a parameter, or to be defined in the class.",
|
|
227
229
|
);
|
|
228
230
|
}
|
|
229
231
|
|
|
@@ -236,7 +238,7 @@ export class WalletObserver<
|
|
|
236
238
|
while (shouldContinue) {
|
|
237
239
|
if (attempts === 10) {
|
|
238
240
|
throw new Error(
|
|
239
|
-
"Could not reconnect to the selected wallet. Please check your extension."
|
|
241
|
+
"Could not reconnect to the selected wallet. Please check your extension.",
|
|
240
242
|
);
|
|
241
243
|
}
|
|
242
244
|
|
|
@@ -285,7 +287,7 @@ export class WalletObserver<
|
|
|
285
287
|
* @return {Promise<void>}
|
|
286
288
|
*/
|
|
287
289
|
connectWallet = async (
|
|
288
|
-
extension: TSupportedWalletExtensions
|
|
290
|
+
extension: TSupportedWalletExtensions,
|
|
289
291
|
): Promise<void> => {
|
|
290
292
|
const start = performance.now();
|
|
291
293
|
this.dispatch(EWalletObserverEvents.CONNECT_WALLET_START);
|
|
@@ -304,7 +306,7 @@ export class WalletObserver<
|
|
|
304
306
|
}
|
|
305
307
|
|
|
306
308
|
await new Promise((res) =>
|
|
307
|
-
setTimeout(res, (this._options.connectTimeout as number) / 40)
|
|
309
|
+
setTimeout(res, (this._options.connectTimeout as number) / 40),
|
|
308
310
|
);
|
|
309
311
|
extensionObject = window.cardano?.[extension];
|
|
310
312
|
attempts++;
|
|
@@ -324,7 +326,7 @@ export class WalletObserver<
|
|
|
324
326
|
|
|
325
327
|
window.localStorage.setItem(
|
|
326
328
|
WalletObserver.PERSISTENCE_CACHE_KEY,
|
|
327
|
-
JSON.stringify(seed)
|
|
329
|
+
JSON.stringify(seed),
|
|
328
330
|
);
|
|
329
331
|
}
|
|
330
332
|
|
|
@@ -339,7 +341,7 @@ export class WalletObserver<
|
|
|
339
341
|
if (!this.peerConnectInstance) {
|
|
340
342
|
const DAppPeerConnect = await getPeerConnect();
|
|
341
343
|
this.peerConnectInstance = new DAppPeerConnect(
|
|
342
|
-
this._options.peerConnectArgs
|
|
344
|
+
this._options.peerConnectArgs,
|
|
343
345
|
);
|
|
344
346
|
}
|
|
345
347
|
|
|
@@ -414,7 +416,7 @@ export class WalletObserver<
|
|
|
414
416
|
const balanceMap = new WalletBalanceMap<AssetMetadata>(this);
|
|
415
417
|
balanceMap.set(
|
|
416
418
|
WalletObserver.ADA_ASSET_ID,
|
|
417
|
-
new AssetAmount(data.coin(), metadata.get(WalletObserver.ADA_ASSET_ID))
|
|
419
|
+
new AssetAmount(data.coin(), metadata.get(WalletObserver.ADA_ASSET_ID)),
|
|
418
420
|
);
|
|
419
421
|
|
|
420
422
|
const multiassetEntries = data.multiasset()?.entries() ?? [];
|
|
@@ -422,7 +424,7 @@ export class WalletObserver<
|
|
|
422
424
|
for (const [id, amount] of multiassetEntries) {
|
|
423
425
|
balanceMap.set(
|
|
424
426
|
id,
|
|
425
|
-
new AssetAmount(amount, metadata.get(normalizeAssetIdWithDot(id)))
|
|
427
|
+
new AssetAmount(amount, metadata.get(normalizeAssetIdWithDot(id))),
|
|
426
428
|
);
|
|
427
429
|
}
|
|
428
430
|
}
|
|
@@ -468,7 +470,7 @@ export class WalletObserver<
|
|
|
468
470
|
getUsedAddresses = async (): Promise<string[]> => {
|
|
469
471
|
if (!this.api) {
|
|
470
472
|
throw new Error(
|
|
471
|
-
"Attempted to query used addresses without an API instance."
|
|
473
|
+
"Attempted to query used addresses without an API instance.",
|
|
472
474
|
);
|
|
473
475
|
}
|
|
474
476
|
|
|
@@ -481,7 +483,7 @@ export class WalletObserver<
|
|
|
481
483
|
]);
|
|
482
484
|
|
|
483
485
|
const data = cbor.map((val) =>
|
|
484
|
-
Cardano.Address.fromBytes(typedHex(val)).toBech32()
|
|
486
|
+
Cardano.Address.fromBytes(typedHex(val)).toBech32(),
|
|
485
487
|
);
|
|
486
488
|
|
|
487
489
|
const end = performance.now();
|
|
@@ -499,7 +501,7 @@ export class WalletObserver<
|
|
|
499
501
|
getUnusedAddresses = async (): Promise<string[]> => {
|
|
500
502
|
if (!this.api) {
|
|
501
503
|
throw new Error(
|
|
502
|
-
"Attempted to query unused addresses without an API instance."
|
|
504
|
+
"Attempted to query unused addresses without an API instance.",
|
|
503
505
|
);
|
|
504
506
|
}
|
|
505
507
|
|
|
@@ -512,7 +514,7 @@ export class WalletObserver<
|
|
|
512
514
|
]);
|
|
513
515
|
|
|
514
516
|
const data = cbor.map((val) =>
|
|
515
|
-
Cardano.Address.fromBytes(typedHex(val)).toBech32()
|
|
517
|
+
Cardano.Address.fromBytes(typedHex(val)).toBech32(),
|
|
516
518
|
);
|
|
517
519
|
|
|
518
520
|
const end = performance.now();
|
|
@@ -541,8 +543,8 @@ export class WalletObserver<
|
|
|
541
543
|
]);
|
|
542
544
|
|
|
543
545
|
const data = cbor?.map((val) => {
|
|
544
|
-
|
|
545
|
-
typedHex(val)
|
|
546
|
+
const txOutput = Serialization.TransactionUnspentOutput.fromCbor(
|
|
547
|
+
typedHex(val),
|
|
546
548
|
);
|
|
547
549
|
|
|
548
550
|
// These methods must be bound to their initial creation instance.
|
|
@@ -586,8 +588,8 @@ export class WalletObserver<
|
|
|
586
588
|
]);
|
|
587
589
|
|
|
588
590
|
const data = cbor?.map((val) => {
|
|
589
|
-
|
|
590
|
-
typedHex(val)
|
|
591
|
+
const txOutput = Serialization.TransactionUnspentOutput.fromCbor(
|
|
592
|
+
typedHex(val),
|
|
591
593
|
);
|
|
592
594
|
|
|
593
595
|
// These methods must be bound to their initial creation instance.
|
|
@@ -611,7 +613,7 @@ export class WalletObserver<
|
|
|
611
613
|
* @returns {Promise<Map<string, AssetMetadata>>} - A promise that resolves to a map of asset metadata.
|
|
612
614
|
*/
|
|
613
615
|
private __metadataResolverWithCache = async (
|
|
614
|
-
assetIds: string[]
|
|
616
|
+
assetIds: string[],
|
|
615
617
|
): Promise<Map<string, AssetMetadata>> => {
|
|
616
618
|
const start = performance.now();
|
|
617
619
|
|
|
@@ -638,7 +640,7 @@ export class WalletObserver<
|
|
|
638
640
|
newMetadata = await this._options.metadataResolver(
|
|
639
641
|
assetIds.map(normalizeAssetIdWithDot),
|
|
640
642
|
normalizeAssetIdWithDot,
|
|
641
|
-
isAdaAsset
|
|
643
|
+
isAdaAsset,
|
|
642
644
|
);
|
|
643
645
|
} catch (e) {
|
|
644
646
|
attempts++;
|
|
@@ -649,7 +651,7 @@ export class WalletObserver<
|
|
|
649
651
|
newMetadata = await this.fallbackMetadataResolver(
|
|
650
652
|
assetIds.map(normalizeAssetIdWithDot),
|
|
651
653
|
normalizeAssetIdWithDot,
|
|
652
|
-
isAdaAsset
|
|
654
|
+
isAdaAsset,
|
|
653
655
|
);
|
|
654
656
|
}
|
|
655
657
|
|
|
@@ -674,7 +676,7 @@ export class WalletObserver<
|
|
|
674
676
|
map.set(normalizeAssetIdWithDot(id), {
|
|
675
677
|
assetId: normalizeAssetIdWithDot(id),
|
|
676
678
|
decimals: 6,
|
|
677
|
-
} as AssetMetadata)
|
|
679
|
+
} as AssetMetadata),
|
|
678
680
|
);
|
|
679
681
|
|
|
680
682
|
return map;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
IWalletObserverEventValues,
|
|
3
3
|
TWalletObserverEventFunction,
|
|
4
4
|
} from "../@types/events.js";
|
|
5
5
|
import { getEventKey } from "../utils/hashing.js";
|
|
@@ -10,7 +10,8 @@ import { getEventKey } from "../utils/hashing.js";
|
|
|
10
10
|
*/
|
|
11
11
|
export class WalletObserverEvent {
|
|
12
12
|
private _eventTarget: EventTarget;
|
|
13
|
-
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
private _handlers: Map<string, (...params: any) => void> = new Map();
|
|
14
15
|
|
|
15
16
|
constructor() {
|
|
16
17
|
this._eventTarget = new EventTarget();
|
|
@@ -21,14 +22,14 @@ export class WalletObserverEvent {
|
|
|
21
22
|
*
|
|
22
23
|
* @template E - The event type.
|
|
23
24
|
* @param {E} event - The event to dispatch.
|
|
24
|
-
* @param {
|
|
25
|
+
* @param {IWalletObserverEventValues[E]} [data] - The data to pass with the event.
|
|
25
26
|
*/
|
|
26
|
-
dispatch = <E extends keyof
|
|
27
|
+
dispatch = <E extends keyof IWalletObserverEventValues>(
|
|
27
28
|
event: E,
|
|
28
|
-
data?:
|
|
29
|
+
data?: IWalletObserverEventValues[E],
|
|
29
30
|
) => {
|
|
30
31
|
this._eventTarget.dispatchEvent(
|
|
31
|
-
new CustomEvent(event as string, { detail: data })
|
|
32
|
+
new CustomEvent(event as string, { detail: data }),
|
|
32
33
|
);
|
|
33
34
|
};
|
|
34
35
|
|
|
@@ -40,9 +41,9 @@ export class WalletObserverEvent {
|
|
|
40
41
|
* @param {TWalletObserverEventFunction<E>} callback - The callback function to execute when the event is triggered.
|
|
41
42
|
* @returns {void}
|
|
42
43
|
*/
|
|
43
|
-
addEventListener = <E extends keyof
|
|
44
|
+
addEventListener = <E extends keyof IWalletObserverEventValues>(
|
|
44
45
|
event: E,
|
|
45
|
-
callback: TWalletObserverEventFunction<E
|
|
46
|
+
callback: TWalletObserverEventFunction<E>,
|
|
46
47
|
): void => {
|
|
47
48
|
const key = getEventKey(event, callback);
|
|
48
49
|
|
|
@@ -70,10 +71,10 @@ export class WalletObserverEvent {
|
|
|
70
71
|
* @param {TWalletObserverEventFunction<E>} callback - The callback function to remove.
|
|
71
72
|
* @param {boolean | EventListenerOptions} [options] - Additional options for removing the listener.
|
|
72
73
|
*/
|
|
73
|
-
removeEventListener = <E extends keyof
|
|
74
|
+
removeEventListener = <E extends keyof IWalletObserverEventValues>(
|
|
74
75
|
event: E,
|
|
75
76
|
callback: TWalletObserverEventFunction<E>,
|
|
76
|
-
options?: boolean | EventListenerOptions
|
|
77
|
+
options?: boolean | EventListenerOptions,
|
|
77
78
|
) => {
|
|
78
79
|
const key = getEventKey(event, callback);
|
|
79
80
|
const func = this._handlers.get(key);
|
|
@@ -83,7 +84,7 @@ export class WalletObserverEvent {
|
|
|
83
84
|
this._eventTarget.removeEventListener(
|
|
84
85
|
event as string,
|
|
85
86
|
func as unknown as EventListenerOrEventListenerObject,
|
|
86
|
-
options
|
|
87
|
+
options,
|
|
87
88
|
);
|
|
88
89
|
}
|
|
89
90
|
};
|
|
@@ -92,9 +93,9 @@ export class WalletObserverEvent {
|
|
|
92
93
|
* Queries the currently registered events. This is useful
|
|
93
94
|
* if you want to expose these and remove any.
|
|
94
95
|
*
|
|
95
|
-
* @returns {Map<string,
|
|
96
|
+
* @returns {Map<string, () => void>} - A map of registered event handlers.
|
|
96
97
|
*/
|
|
97
|
-
eventList(): Map<string,
|
|
98
|
+
eventList(): Map<string, () => void> {
|
|
98
99
|
return this._handlers;
|
|
99
100
|
}
|
|
100
101
|
}
|
|
@@ -2,10 +2,16 @@ import { TAddressDetails } from "../@types/utils.js";
|
|
|
2
2
|
import { getCardanoCore } from "../utils/getLibs.js";
|
|
3
3
|
|
|
4
4
|
export class WalletObserverUtils {
|
|
5
|
+
public network: number;
|
|
6
|
+
public Cardano: typeof import("@cardano-sdk/core").Cardano;
|
|
7
|
+
|
|
5
8
|
private constructor(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
) {
|
|
9
|
+
network: number,
|
|
10
|
+
Cardano: typeof import("@cardano-sdk/core").Cardano,
|
|
11
|
+
) {
|
|
12
|
+
this.network = network;
|
|
13
|
+
this.Cardano = Cardano;
|
|
14
|
+
}
|
|
9
15
|
|
|
10
16
|
static async new(network: number): Promise<WalletObserverUtils> {
|
|
11
17
|
const cardano = await getCardanoCore().then(({ Cardano }) => Cardano);
|
|
@@ -23,7 +29,7 @@ export class WalletObserverUtils {
|
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
const Address = this.Cardano.BaseAddress.fromAddress(
|
|
26
|
-
this.Cardano.Address.fromBech32(address)
|
|
32
|
+
this.Cardano.Address.fromBech32(address),
|
|
27
33
|
);
|
|
28
34
|
|
|
29
35
|
return {
|
|
@@ -40,7 +46,7 @@ export class WalletObserverUtils {
|
|
|
40
46
|
|
|
41
47
|
const stakingAddress = this.Cardano.RewardAddress.fromCredentials(
|
|
42
48
|
this.network,
|
|
43
|
-
stakingCredential
|
|
49
|
+
stakingCredential,
|
|
44
50
|
);
|
|
45
51
|
return stakingAddress.toAddress().toBech32();
|
|
46
52
|
}
|
|
@@ -28,16 +28,16 @@ describe("WalletObserver", async () => {
|
|
|
28
28
|
it("should throw appropriate errors before connected", () => {
|
|
29
29
|
const observer = new WalletObserver();
|
|
30
30
|
expect(() => observer.getBalanceMap()).toThrowError(
|
|
31
|
-
"Attempted to query balance without an API instance."
|
|
31
|
+
"Attempted to query balance without an API instance.",
|
|
32
32
|
);
|
|
33
33
|
expect(() => observer.getNetwork()).toThrowError(
|
|
34
|
-
"Attempted to query network without an API instance."
|
|
34
|
+
"Attempted to query network without an API instance.",
|
|
35
35
|
);
|
|
36
36
|
expect(() => observer.syncApi()).toThrowError(
|
|
37
|
-
"A wallet is required to be passed as a parameter, or to be defined in the class."
|
|
37
|
+
"A wallet is required to be passed as a parameter, or to be defined in the class.",
|
|
38
38
|
);
|
|
39
39
|
expect(() => observer.sync()).toThrowError(
|
|
40
|
-
"Attempted to perform a sync operation without a connected wallet."
|
|
40
|
+
"Attempted to perform a sync operation without a connected wallet.",
|
|
41
41
|
);
|
|
42
42
|
});
|
|
43
43
|
|
|
@@ -46,7 +46,7 @@ describe("WalletObserver", async () => {
|
|
|
46
46
|
expect(() =>
|
|
47
47
|
new WalletObserver({
|
|
48
48
|
connectTimeout: 10,
|
|
49
|
-
}).connectWallet("flint")
|
|
49
|
+
}).connectWallet("flint"),
|
|
50
50
|
).toThrowError("Wallet extension not found in the global context.");
|
|
51
51
|
});
|
|
52
52
|
});
|
|
@@ -93,7 +93,7 @@ describe("WalletObserver", async () => {
|
|
|
93
93
|
test("with parameters", () => {
|
|
94
94
|
const handler: TMetadataResolverFunc<IAssetAmountMetadata> = async (
|
|
95
95
|
ids: string[],
|
|
96
|
-
normalize
|
|
96
|
+
normalize,
|
|
97
97
|
) => {
|
|
98
98
|
const metadata = ids.map((id) => ({ decimals: 6, assetId: id }));
|
|
99
99
|
const map = new Map<string, IAssetAmountMetadata>();
|
|
@@ -148,18 +148,11 @@ describe("WalletObserver", async () => {
|
|
|
148
148
|
await observer.connectWallet("eternl");
|
|
149
149
|
expect(spiedDispatch).toHaveBeenNthCalledWith(
|
|
150
150
|
1,
|
|
151
|
-
EWalletObserverEvents.CONNECT_WALLET_START
|
|
152
|
-
);
|
|
153
|
-
expect(spiedDispatch).toHaveBeenNthCalledWith(
|
|
154
|
-
2,
|
|
155
|
-
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
156
|
-
{
|
|
157
|
-
extension: "eternl",
|
|
158
|
-
}
|
|
151
|
+
EWalletObserverEvents.CONNECT_WALLET_START,
|
|
159
152
|
);
|
|
160
153
|
|
|
161
154
|
expect(
|
|
162
|
-
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY)
|
|
155
|
+
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY),
|
|
163
156
|
).toBeNull();
|
|
164
157
|
expect(observer.activeWallet).toEqual("eternl");
|
|
165
158
|
expect(observer.api).toBeDefined();
|
|
@@ -167,24 +160,24 @@ describe("WalletObserver", async () => {
|
|
|
167
160
|
|
|
168
161
|
const syncResults = await observer.sync();
|
|
169
162
|
expect(spiedDispatch).toHaveBeenNthCalledWith(
|
|
170
|
-
|
|
171
|
-
EWalletObserverEvents.SYNCING_WALLET_START
|
|
163
|
+
2,
|
|
164
|
+
EWalletObserverEvents.SYNCING_WALLET_START,
|
|
172
165
|
);
|
|
173
166
|
expect(spiedDispatch).toHaveBeenNthCalledWith(
|
|
174
|
-
|
|
175
|
-
EWalletObserverEvents.GET_BALANCE_MAP_START
|
|
167
|
+
3,
|
|
168
|
+
EWalletObserverEvents.GET_BALANCE_MAP_START,
|
|
176
169
|
);
|
|
177
170
|
expect(spiedDispatch).toHaveBeenNthCalledWith(
|
|
178
|
-
|
|
171
|
+
4,
|
|
179
172
|
EWalletObserverEvents.GET_BALANCE_MAP_END,
|
|
180
173
|
{
|
|
181
174
|
balanceMap: expect.objectContaining({
|
|
182
175
|
size: assetIds.length,
|
|
183
176
|
}),
|
|
184
|
-
}
|
|
177
|
+
},
|
|
185
178
|
);
|
|
186
179
|
expect(spiedDispatch).toHaveBeenNthCalledWith(
|
|
187
|
-
|
|
180
|
+
5,
|
|
188
181
|
EWalletObserverEvents.SYNCING_WALLET_END,
|
|
189
182
|
expect.objectContaining({
|
|
190
183
|
balanceMap: expect.objectContaining({
|
|
@@ -193,7 +186,7 @@ describe("WalletObserver", async () => {
|
|
|
193
186
|
network,
|
|
194
187
|
unusedAddresses,
|
|
195
188
|
usedAddresses,
|
|
196
|
-
})
|
|
189
|
+
}),
|
|
197
190
|
);
|
|
198
191
|
|
|
199
192
|
expect(syncResults.balanceMap.size).toEqual(assetIds.length);
|
|
@@ -208,7 +201,7 @@ describe("WalletObserver", async () => {
|
|
|
208
201
|
});
|
|
209
202
|
const spiedOnSyncApi = spyOn(observer, "syncApi");
|
|
210
203
|
expect(
|
|
211
|
-
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY)
|
|
204
|
+
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY),
|
|
212
205
|
).toBeNull();
|
|
213
206
|
|
|
214
207
|
await observer.connectWallet("eternl");
|
|
@@ -224,7 +217,7 @@ describe("WalletObserver", async () => {
|
|
|
224
217
|
expect(syncResults.unusedAddresses).toEqual(unusedAddresses);
|
|
225
218
|
expect(syncResults.usedAddresses).toEqual(usedAddresses);
|
|
226
219
|
expect(
|
|
227
|
-
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY)
|
|
220
|
+
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY),
|
|
228
221
|
).toEqual('{"activeWallet":"eternl"}');
|
|
229
222
|
});
|
|
230
223
|
});
|
|
@@ -243,7 +236,7 @@ describe("WalletObserver", async () => {
|
|
|
243
236
|
|
|
244
237
|
expect(observer.activeWallet).toEqual("eternl");
|
|
245
238
|
expect(
|
|
246
|
-
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY)
|
|
239
|
+
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY),
|
|
247
240
|
).toEqual('{"activeWallet":"eternl"}');
|
|
248
241
|
|
|
249
242
|
await observer.sync();
|
|
@@ -256,11 +249,11 @@ describe("WalletObserver", async () => {
|
|
|
256
249
|
expect(observer.activeWallet).toBeUndefined();
|
|
257
250
|
expect(observer.getCachedAssetMetadata().size).not.toEqual(0);
|
|
258
251
|
expect(
|
|
259
|
-
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY)
|
|
252
|
+
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY),
|
|
260
253
|
).toBeNull();
|
|
261
254
|
expect(spiedDispatch).toHaveBeenNthCalledWith(
|
|
262
255
|
7,
|
|
263
|
-
EWalletObserverEvents.DISCONNECT
|
|
256
|
+
EWalletObserverEvents.DISCONNECT,
|
|
264
257
|
);
|
|
265
258
|
expect(spiedOnGetPeerConnect).not.toHaveBeenCalled();
|
|
266
259
|
});
|
|
@@ -290,11 +283,11 @@ describe("WalletObserver", async () => {
|
|
|
290
283
|
icon: undefined,
|
|
291
284
|
name: "My Test dApp",
|
|
292
285
|
instance: data.instance,
|
|
293
|
-
})
|
|
286
|
+
}),
|
|
294
287
|
);
|
|
295
288
|
|
|
296
289
|
// Simulate injection.
|
|
297
|
-
// @ts-
|
|
290
|
+
// @ts-expect-error Simulating the actual function.
|
|
298
291
|
data.instance.__testStartServer();
|
|
299
292
|
expect(spiedOnConnect).toHaveBeenCalledWith("eternl-p2p");
|
|
300
293
|
|