@ledgerhq/live-wallet 0.9.2 → 0.9.3
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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +14 -0
- package/lib/cloudsync/__tests__/cipher.test.js +10 -19
- package/lib/cloudsync/__tests__/cipher.test.js.map +1 -1
- package/lib/cloudsync/__tests__/sdk.test.js +55 -58
- package/lib/cloudsync/__tests__/sdk.test.js.map +1 -1
- package/lib/cloudsync/api.js +46 -63
- package/lib/cloudsync/api.js.map +1 -1
- package/lib/cloudsync/cipher.js +6 -15
- package/lib/cloudsync/cipher.js.map +1 -1
- package/lib/cloudsync/sdk.js +51 -59
- package/lib/cloudsync/sdk.js.map +1 -1
- package/lib/liveqr/cross.test.js +5 -2
- package/lib/liveqr/cross.test.js.map +1 -1
- package/lib/liveqr/importAccounts.js +6 -15
- package/lib/liveqr/importAccounts.js.map +1 -1
- package/lib/ordering.js +1 -1
- package/lib/ordering.js.map +1 -1
- package/lib/store.js +16 -10
- package/lib/store.js.map +1 -1
- package/lib/store.test.js +4 -1
- package/lib/store.test.js.map +1 -1
- package/lib/walletsync/__mocks__/modules/accounts.js +1 -1
- package/lib/walletsync/__mocks__/modules/accounts.js.map +1 -1
- package/lib/walletsync/__mocks__/watchLoop.js +14 -27
- package/lib/walletsync/__mocks__/watchLoop.js.map +1 -1
- package/lib/walletsync/__tests__/compatibility.test.js +45 -24
- package/lib/walletsync/__tests__/compatibility.test.js.map +1 -1
- package/lib/walletsync/__tests__/generic.test.js +9 -18
- package/lib/walletsync/__tests__/generic.test.js.map +1 -1
- package/lib/walletsync/__tests__/modules/accountNames.test.js +9 -18
- package/lib/walletsync/__tests__/modules/accountNames.test.js.map +1 -1
- package/lib/walletsync/__tests__/modules/accounts.test.js +88 -82
- package/lib/walletsync/__tests__/modules/accounts.test.js.map +1 -1
- package/lib/walletsync/__tests__/specific.test.js +10 -4
- package/lib/walletsync/__tests__/specific.test.js.map +1 -1
- package/lib/walletsync/__tests__/trustchainLifecyle.test.js +8 -17
- package/lib/walletsync/__tests__/trustchainLifecyle.test.js.map +1 -1
- package/lib/walletsync/aggregator.js +15 -23
- package/lib/walletsync/aggregator.js.map +1 -1
- package/lib/walletsync/createWalletSyncWatchLoop.js +49 -60
- package/lib/walletsync/createWalletSyncWatchLoop.js.map +1 -1
- package/lib/walletsync/createWalletSyncWatchLoop.test.js +37 -46
- package/lib/walletsync/createWalletSyncWatchLoop.test.js.map +1 -1
- package/lib/walletsync/incrementalUpdates.js +11 -20
- package/lib/walletsync/incrementalUpdates.js.map +1 -1
- package/lib/walletsync/modules/accountNames.js +13 -24
- package/lib/walletsync/modules/accountNames.js.map +1 -1
- package/lib/walletsync/modules/accounts.js +99 -114
- package/lib/walletsync/modules/accounts.js.map +1 -1
- package/lib/walletsync/trustchainLifecyle.js +9 -18
- package/lib/walletsync/trustchainLifecyle.js.map +1 -1
- package/lib-es/cloudsync/__tests__/cipher.test.js +10 -19
- package/lib-es/cloudsync/__tests__/cipher.test.js.map +1 -1
- package/lib-es/cloudsync/__tests__/sdk.test.js +55 -58
- package/lib-es/cloudsync/__tests__/sdk.test.js.map +1 -1
- package/lib-es/cloudsync/api.js +46 -63
- package/lib-es/cloudsync/api.js.map +1 -1
- package/lib-es/cloudsync/cipher.js +6 -15
- package/lib-es/cloudsync/cipher.js.map +1 -1
- package/lib-es/cloudsync/sdk.js +51 -59
- package/lib-es/cloudsync/sdk.js.map +1 -1
- package/lib-es/liveqr/cross.test.js +5 -2
- package/lib-es/liveqr/cross.test.js.map +1 -1
- package/lib-es/liveqr/importAccounts.js +6 -15
- package/lib-es/liveqr/importAccounts.js.map +1 -1
- package/lib-es/ordering.js +1 -1
- package/lib-es/ordering.js.map +1 -1
- package/lib-es/store.js +16 -10
- package/lib-es/store.js.map +1 -1
- package/lib-es/store.test.js +4 -1
- package/lib-es/store.test.js.map +1 -1
- package/lib-es/walletsync/__mocks__/modules/accounts.js +1 -1
- package/lib-es/walletsync/__mocks__/modules/accounts.js.map +1 -1
- package/lib-es/walletsync/__mocks__/watchLoop.js +14 -27
- package/lib-es/walletsync/__mocks__/watchLoop.js.map +1 -1
- package/lib-es/walletsync/__tests__/compatibility.test.js +45 -24
- package/lib-es/walletsync/__tests__/compatibility.test.js.map +1 -1
- package/lib-es/walletsync/__tests__/generic.test.js +9 -18
- package/lib-es/walletsync/__tests__/generic.test.js.map +1 -1
- package/lib-es/walletsync/__tests__/modules/accountNames.test.js +9 -18
- package/lib-es/walletsync/__tests__/modules/accountNames.test.js.map +1 -1
- package/lib-es/walletsync/__tests__/modules/accounts.test.js +88 -82
- package/lib-es/walletsync/__tests__/modules/accounts.test.js.map +1 -1
- package/lib-es/walletsync/__tests__/specific.test.js +10 -4
- package/lib-es/walletsync/__tests__/specific.test.js.map +1 -1
- package/lib-es/walletsync/__tests__/trustchainLifecyle.test.js +8 -17
- package/lib-es/walletsync/__tests__/trustchainLifecyle.test.js.map +1 -1
- package/lib-es/walletsync/aggregator.js +15 -23
- package/lib-es/walletsync/aggregator.js.map +1 -1
- package/lib-es/walletsync/createWalletSyncWatchLoop.js +49 -60
- package/lib-es/walletsync/createWalletSyncWatchLoop.js.map +1 -1
- package/lib-es/walletsync/createWalletSyncWatchLoop.test.js +37 -46
- package/lib-es/walletsync/createWalletSyncWatchLoop.test.js.map +1 -1
- package/lib-es/walletsync/incrementalUpdates.js +11 -20
- package/lib-es/walletsync/incrementalUpdates.js.map +1 -1
- package/lib-es/walletsync/modules/accountNames.js +13 -24
- package/lib-es/walletsync/modules/accountNames.js.map +1 -1
- package/lib-es/walletsync/modules/accounts.js +99 -114
- package/lib-es/walletsync/modules/accounts.js.map +1 -1
- package/lib-es/walletsync/trustchainLifecyle.js +9 -18
- package/lib-es/walletsync/trustchainLifecyle.js.map +1 -1
- package/package.json +4 -4
- package/tsconfig.json +0 -1
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { z } from "zod";
|
|
11
2
|
import { accountDataToAccount } from "../../liveqr/cross";
|
|
12
3
|
import { firstValueFrom, reduce } from "rxjs";
|
|
@@ -26,7 +17,7 @@ const manager = {
|
|
|
26
17
|
let hasChanges = false;
|
|
27
18
|
// let's figure out the new local accounts
|
|
28
19
|
const added = [];
|
|
29
|
-
const distantServerAccountIds = new Set(
|
|
20
|
+
const distantServerAccountIds = new Set(latestState?.map(a => a.id) || []);
|
|
30
21
|
for (const account of localData.list) {
|
|
31
22
|
const id = account.id;
|
|
32
23
|
if (!distantServerAccountIds.has(id)) {
|
|
@@ -72,78 +63,76 @@ const manager = {
|
|
|
72
63
|
nextState,
|
|
73
64
|
};
|
|
74
65
|
},
|
|
75
|
-
resolveIncrementalUpdate(ctx, localData, latestState, incomingState) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
continue; // we actually have the account. ignore.
|
|
92
|
-
}
|
|
93
|
-
const accountDescriptor = incomingState.find(a => a.id === id);
|
|
94
|
-
if (!accountDescriptor) {
|
|
95
|
-
hasChanges = true; // at least we need to save the deletion
|
|
96
|
-
// we don't have the account anymore in the distant state. ignore.
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
const now = Date.now();
|
|
100
|
-
const shouldRetry = shouldRetryImportAccount(now - attemptsLastTimestamp, attempts);
|
|
101
|
-
if (shouldRetry) {
|
|
102
|
-
diff.added.push(accountDescriptor);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// we don't retry so we preserve the non imported account for the future
|
|
106
|
-
nextNonImportedById.set(id, nonImported);
|
|
107
|
-
}
|
|
66
|
+
async resolveIncrementalUpdate(ctx, localData, latestState, incomingState) {
|
|
67
|
+
if (!incomingState) {
|
|
68
|
+
return { hasChanges: false }; // nothing to do, the data is no longer available
|
|
69
|
+
}
|
|
70
|
+
const diff = diffWalletSyncState(latestState, incomingState);
|
|
71
|
+
const existingIds = new Set(localData.list.map(a => a.id));
|
|
72
|
+
let hasChanges = false;
|
|
73
|
+
// non imported accounts are considered as "added" so we have opportunity to recheck them
|
|
74
|
+
const nonImportedById = new Map();
|
|
75
|
+
const nextNonImportedById = new Map();
|
|
76
|
+
for (const nonImported of localData.nonImportedAccountInfos) {
|
|
77
|
+
nonImportedById.set(nonImported.id, nonImported);
|
|
78
|
+
const { id, attempts, attemptsLastTimestamp } = nonImported;
|
|
79
|
+
if (existingIds.has(id) || diff.added.some(a => a.id === id)) {
|
|
80
|
+
hasChanges = true; // at least we need to save the deletion
|
|
81
|
+
continue; // we actually have the account. ignore.
|
|
108
82
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const { error } = resolved.failures[failedId];
|
|
115
|
-
hasChanges = true;
|
|
116
|
-
nextNonImportedById.set(failedId, {
|
|
117
|
-
id: failedId,
|
|
118
|
-
attempts: ((nonImported === null || nonImported === void 0 ? void 0 : nonImported.attempts) || 0) + 1,
|
|
119
|
-
attemptsLastTimestamp: Date.now(),
|
|
120
|
-
error: {
|
|
121
|
-
name: error.name,
|
|
122
|
-
message: error.message,
|
|
123
|
-
},
|
|
124
|
-
});
|
|
83
|
+
const accountDescriptor = incomingState.find(a => a.id === id);
|
|
84
|
+
if (!accountDescriptor) {
|
|
85
|
+
hasChanges = true; // at least we need to save the deletion
|
|
86
|
+
// we don't have the account anymore in the distant state. ignore.
|
|
87
|
+
continue;
|
|
125
88
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
else if (resolved.removed.length > 0) {
|
|
131
|
-
hasChanges = true;
|
|
132
|
-
}
|
|
89
|
+
const now = Date.now();
|
|
90
|
+
const shouldRetry = shouldRetryImportAccount(now - attemptsLastTimestamp, attempts);
|
|
91
|
+
if (shouldRetry) {
|
|
92
|
+
diff.added.push(accountDescriptor);
|
|
133
93
|
}
|
|
134
|
-
|
|
135
|
-
//
|
|
136
|
-
|
|
94
|
+
else {
|
|
95
|
+
// we don't retry so we preserve the non imported account for the future
|
|
96
|
+
nextNonImportedById.set(id, nonImported);
|
|
137
97
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
98
|
+
}
|
|
99
|
+
// filter out accounts we may already have
|
|
100
|
+
diff.added = diff.added.filter(a => !existingIds.has(a.id));
|
|
101
|
+
const resolved = await resolveWalletSyncDiffIntoSyncUpdate(existingIds, diff, ctx);
|
|
102
|
+
for (const failedId in resolved.failures) {
|
|
103
|
+
const nonImported = nonImportedById.get(failedId);
|
|
104
|
+
const { error } = resolved.failures[failedId];
|
|
105
|
+
hasChanges = true;
|
|
106
|
+
nextNonImportedById.set(failedId, {
|
|
107
|
+
id: failedId,
|
|
108
|
+
attempts: (nonImported?.attempts || 0) + 1,
|
|
109
|
+
attemptsLastTimestamp: Date.now(),
|
|
110
|
+
error: {
|
|
111
|
+
name: error.name,
|
|
112
|
+
message: error.message,
|
|
144
113
|
},
|
|
145
|
-
};
|
|
146
|
-
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (!hasChanges) {
|
|
117
|
+
if (resolved.added.length > 0) {
|
|
118
|
+
hasChanges = true;
|
|
119
|
+
}
|
|
120
|
+
else if (resolved.removed.length > 0) {
|
|
121
|
+
hasChanges = true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!hasChanges) {
|
|
125
|
+
// nothing to do
|
|
126
|
+
return { hasChanges };
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
hasChanges: true,
|
|
130
|
+
update: {
|
|
131
|
+
removed: resolved.removed,
|
|
132
|
+
added: resolved.added,
|
|
133
|
+
nonImportedAccountInfos: Array.from(nextNonImportedById.values()),
|
|
134
|
+
},
|
|
135
|
+
};
|
|
147
136
|
},
|
|
148
137
|
applyUpdate(localData, update) {
|
|
149
138
|
const existingIds = new Set(localData.list.map(a => a.id));
|
|
@@ -193,47 +182,43 @@ export function diffWalletSyncState(currentState, newState) {
|
|
|
193
182
|
* @param getAccountBridge: implementation of live-common's getAccountBridge (since this lib don't depends on live-common)
|
|
194
183
|
*
|
|
195
184
|
*/
|
|
196
|
-
export function integrateNewAccountDescriptor(accountDescriptor, getAccountBridge, bridgeCache, blacklistedTokenIds) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
return synced;
|
|
210
|
-
});
|
|
185
|
+
export async function integrateNewAccountDescriptor(accountDescriptor, getAccountBridge, bridgeCache, blacklistedTokenIds) {
|
|
186
|
+
// FIXME: in future, it should be part of the bridge to accept an AccountDescriptor. today we rely on accountDataToAccount to not duplicates its internal hacks to not break coin implementations but eventually this logic will have to be simplified/unified.
|
|
187
|
+
const [accountShaped] = accountDataToAccount({ ...accountDescriptor, balance: "0", name: "" });
|
|
188
|
+
const bridge = getAccountBridge(accountShaped);
|
|
189
|
+
await bridgeCache.prepareCurrency(accountShaped.currency);
|
|
190
|
+
const syncConfig = {
|
|
191
|
+
paginationConfig: {},
|
|
192
|
+
blacklistedTokenIds,
|
|
193
|
+
};
|
|
194
|
+
const observable = bridge.sync(accountShaped, syncConfig);
|
|
195
|
+
const reduced = observable.pipe(reduce((a, f) => f(a), accountShaped));
|
|
196
|
+
const synced = await firstValueFrom(reduced);
|
|
197
|
+
return synced;
|
|
211
198
|
}
|
|
212
199
|
/**
|
|
213
200
|
* logic related to {wallet sync data update -> local state} management
|
|
214
201
|
*/
|
|
215
|
-
export function resolveWalletSyncDiffIntoSyncUpdate(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
return { removed, added, failures };
|
|
236
|
-
});
|
|
202
|
+
export async function resolveWalletSyncDiffIntoSyncUpdate(existingIds, diff, { getAccountBridge, bridgeCache, blacklistedTokenIds }) {
|
|
203
|
+
const failures = {};
|
|
204
|
+
let added = (await promiseAllBatched(3, diff.added, async (descriptor) => {
|
|
205
|
+
try {
|
|
206
|
+
const account = await integrateNewAccountDescriptor(descriptor, getAccountBridge, bridgeCache, blacklistedTokenIds);
|
|
207
|
+
return account;
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
failures[descriptor.id] = {
|
|
211
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
212
|
+
timestamp: Date.now(),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
})).filter(Boolean);
|
|
216
|
+
const addedIds = new Set(added.map(a => a.id));
|
|
217
|
+
// if some of the account ends up resolving one of the removed, we need to clean it up, this is the case if there were an implicit migration of account ids
|
|
218
|
+
const removed = diff.removed.filter(id => !addedIds.has(id));
|
|
219
|
+
// if some of the resolved are converging to the same account.id, we also remove them out
|
|
220
|
+
added = added.filter(a => !existingIds.has(a.id));
|
|
221
|
+
return { removed, added, failures };
|
|
237
222
|
}
|
|
238
223
|
const MINUTE = 60 * 1000;
|
|
239
224
|
const backoffFactor = 1.3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/walletsync/modules/accounts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/walletsync/modules/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import getCloudSyncApi from "../cloudsync/api";
|
|
11
2
|
import { makeCipher } from "../cloudsync/cipher";
|
|
12
3
|
export const liveSlug = "live";
|
|
@@ -15,22 +6,22 @@ export const liveSlug = "live";
|
|
|
15
6
|
*/
|
|
16
7
|
export function trustchainLifecycle({ cloudSyncApiBaseUrl, getCurrentWSState, }) {
|
|
17
8
|
return {
|
|
18
|
-
onTrustchainRotation: (trustchainSdk, oldTrustchain, memberCredentials) =>
|
|
19
|
-
const oldJwt =
|
|
20
|
-
return (newTrustchain) =>
|
|
9
|
+
onTrustchainRotation: async (trustchainSdk, oldTrustchain, memberCredentials) => {
|
|
10
|
+
const oldJwt = await trustchainSdk.withAuth(oldTrustchain, memberCredentials, jwt => Promise.resolve(jwt), "refresh");
|
|
11
|
+
return async (newTrustchain) => {
|
|
21
12
|
const api = getCloudSyncApi(cloudSyncApiBaseUrl);
|
|
22
13
|
// when trustchain rotates, we need to delete old data to inform members still on the old id
|
|
23
|
-
|
|
24
|
-
const newJwt =
|
|
14
|
+
await api.deleteData(oldJwt, liveSlug, oldTrustchain);
|
|
15
|
+
const newJwt = await trustchainSdk.withAuth(newTrustchain, memberCredentials, jwt => Promise.resolve(jwt), "refresh");
|
|
25
16
|
// we then need to push back data to a new CloudSync id with the new encryption key
|
|
26
17
|
const { version, data } = getCurrentWSState();
|
|
27
18
|
if (!data)
|
|
28
19
|
return;
|
|
29
20
|
const cipher = makeCipher(trustchainSdk);
|
|
30
|
-
const payload =
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
}
|
|
21
|
+
const payload = await cipher.encrypt(newTrustchain, data);
|
|
22
|
+
await api.uploadData(newJwt, liveSlug, version, payload, newTrustchain);
|
|
23
|
+
};
|
|
24
|
+
},
|
|
34
25
|
};
|
|
35
26
|
}
|
|
36
27
|
//# sourceMappingURL=trustchainLifecyle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trustchainLifecyle.js","sourceRoot":"","sources":["../../src/walletsync/trustchainLifecyle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trustchainLifecyle.js","sourceRoot":"","sources":["../../src/walletsync/trustchainLifecyle.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,mBAAmB,EACnB,iBAAiB,GAIlB;IACC,OAAO;QACL,oBAAoB,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,EAAE;YAC9E,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CACzC,aAAa,EACb,iBAAiB,EACjB,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAC3B,SAAS,CACV,CAAC;YACF,OAAO,KAAK,EAAC,aAAa,EAAC,EAAE;gBAC3B,MAAM,GAAG,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;gBACjD,4FAA4F;gBAC5F,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CACzC,aAAa,EACb,iBAAiB,EACjB,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAC3B,SAAS,CACV,CAAC;gBACF,mFAAmF;gBACnF,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAC1E,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/live-wallet",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "Ledger Live wallet",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"pako": "^2.0.4",
|
|
30
30
|
"rxjs": "7",
|
|
31
31
|
"zod": "^3.22.4",
|
|
32
|
-
"@ledgerhq/coin-framework": "0.
|
|
32
|
+
"@ledgerhq/coin-framework": "1.0.0",
|
|
33
33
|
"@ledgerhq/cryptoassets": "13.10.0",
|
|
34
34
|
"@ledgerhq/devices": "8.4.4",
|
|
35
35
|
"@ledgerhq/live-env": "2.5.0",
|
|
@@ -85,10 +85,10 @@
|
|
|
85
85
|
},
|
|
86
86
|
"scripts": {
|
|
87
87
|
"clean": "rimraf lib lib-es",
|
|
88
|
-
"build": "tsc && tsc -m
|
|
88
|
+
"build": "tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es",
|
|
89
89
|
"prewatch": "pnpm build",
|
|
90
90
|
"watch": "tsc --watch",
|
|
91
|
-
"watch:es": "tsc --watch -m
|
|
91
|
+
"watch:es": "tsc --watch -m esnext --moduleResolution bundler --outDir lib-es",
|
|
92
92
|
"lint": "eslint ./src --no-error-on-unmatched-pattern --ext .ts,.tsx --cache",
|
|
93
93
|
"lint:fix": "pnpm lint --fix",
|
|
94
94
|
"typecheck": "tsc --noEmit",
|