@ledgerhq/live-common 34.52.0-nightly.0 → 34.52.0-nightly.1
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/lib/bridge/generic-alpaca/buildSubAccounts.d.ts +5 -8
- package/lib/bridge/generic-alpaca/buildSubAccounts.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/buildSubAccounts.js +37 -9
- package/lib/bridge/generic-alpaca/buildSubAccounts.js.map +1 -1
- package/lib/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/getAccountShape.js +18 -17
- package/lib/bridge/generic-alpaca/getAccountShape.js.map +1 -1
- package/lib/bridge/generic-alpaca/types.d.ts +4 -1
- package/lib/bridge/generic-alpaca/types.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/utils.d.ts +2 -1
- package/lib/bridge/generic-alpaca/utils.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/utils.js +35 -3
- package/lib/bridge/generic-alpaca/utils.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.d.ts +5 -8
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.js +35 -7
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/getAccountShape.js +20 -19
- package/lib-es/bridge/generic-alpaca/getAccountShape.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/types.d.ts +4 -1
- package/lib-es/bridge/generic-alpaca/types.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/utils.d.ts +2 -1
- package/lib-es/bridge/generic-alpaca/utils.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/utils.js +33 -2
- package/lib-es/bridge/generic-alpaca/utils.js.map +1 -1
- package/package.json +10 -10
- package/src/bridge/generic-alpaca/buildSubAccounts.test.ts +537 -0
- package/src/bridge/generic-alpaca/buildSubAccounts.ts +58 -21
- package/src/bridge/generic-alpaca/getAccountShape.ts +26 -23
- package/src/bridge/generic-alpaca/tests/getAccountShape.test.ts +10 -1
- package/src/bridge/generic-alpaca/types.ts +5 -1
- package/src/bridge/generic-alpaca/utils.test.ts +31 -1
- package/src/bridge/generic-alpaca/utils.ts +48 -4
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
|
+
import type { SyncConfig, TokenAccount } from "@ledgerhq/types-live";
|
|
3
3
|
import { AssetInfo, Balance } from "@ledgerhq/coin-framework/api/types";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
export declare const getAssetIdFromTokenId: (tokenId: string) => string;
|
|
8
|
-
export declare function buildSubAccounts({ currency, accountId, allTokenAssetsBalances, syncConfig, operations, getTokenFromAsset, }: {
|
|
9
|
-
currency: CryptoCurrency;
|
|
4
|
+
import { OperationCommon } from "./types";
|
|
5
|
+
export declare function buildSubAccounts({ accountId, allTokenAssetsBalances, syncConfig, operations, getTokenFromAsset, }: {
|
|
10
6
|
accountId: string;
|
|
11
7
|
allTokenAssetsBalances: Balance[];
|
|
12
8
|
syncConfig: SyncConfig;
|
|
13
9
|
operations: OperationCommon[];
|
|
14
10
|
getTokenFromAsset?: (asset: AssetInfo) => Promise<TokenCurrency | undefined>;
|
|
15
11
|
}): Promise<TokenAccount[]>;
|
|
12
|
+
export declare function mergeSubAccounts(oldSubAccounts: Array<TokenAccount>, newSubAccounts: Array<TokenAccount>): Array<TokenAccount>;
|
|
16
13
|
//# sourceMappingURL=buildSubAccounts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSubAccounts.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"buildSubAccounts.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAkD1C,wBAAsB,gBAAgB,CAAC,EACrC,SAAS,EACT,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,iBAAiB,GAClB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,OAAO,EAAE,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;CAC9E,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,EACnC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,GAClC,KAAK,CAAC,YAAY,CAAC,CAkCrB"}
|
|
@@ -3,24 +3,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.mergeSubAccounts = exports.buildSubAccounts = void 0;
|
|
7
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
8
|
const index_1 = require("@ledgerhq/coin-framework/account/index");
|
|
9
9
|
const operation_1 = require("@ledgerhq/coin-framework/operation");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
exports.getAssetIdFromTokenId = getAssetIdFromTokenId;
|
|
10
|
+
const jsHelpers_1 = require("../jsHelpers");
|
|
11
|
+
const utils_1 = require("./utils");
|
|
13
12
|
function buildTokenAccount({ parentAccountId, assetBalance, token, operations, }) {
|
|
14
13
|
const id = (0, index_1.encodeTokenAccountId)(parentAccountId, token);
|
|
15
14
|
const balance = new bignumber_js_1.default(assetBalance.value.toString() || "0");
|
|
16
15
|
// TODO: recheck this logic
|
|
17
16
|
const spendableBalance = new bignumber_js_1.default(assetBalance.value.toString()).minus(new bignumber_js_1.default(assetBalance.locked?.toString() || "0"));
|
|
18
|
-
const tokenOperations = operations.map(op => ({
|
|
17
|
+
const tokenOperations = operations.map(op => (0, utils_1.cleanedOperation)({
|
|
19
18
|
...op,
|
|
20
19
|
id: (0, operation_1.encodeOperationId)(id, op.hash, op.extra?.ledgerOpType),
|
|
21
20
|
accountId: id,
|
|
22
21
|
type: op.extra?.ledgerOpType,
|
|
22
|
+
contract: token.contractAddress,
|
|
23
23
|
value: op.extra?.assetAmount ? new bignumber_js_1.default(op.extra?.assetAmount) : op.value,
|
|
24
|
+
senders: op.extra?.assetSenders ?? op.senders,
|
|
25
|
+
recipients: op.extra?.assetRecipients ?? op.recipients,
|
|
24
26
|
}));
|
|
25
27
|
return {
|
|
26
28
|
type: "TokenAccount",
|
|
@@ -37,15 +39,14 @@ function buildTokenAccount({ parentAccountId, assetBalance, token, operations, }
|
|
|
37
39
|
balanceHistoryCache: index_1.emptyHistoryCache, // calculated in the jsHelpers
|
|
38
40
|
};
|
|
39
41
|
}
|
|
40
|
-
async function buildSubAccounts({
|
|
42
|
+
async function buildSubAccounts({ accountId, allTokenAssetsBalances, syncConfig, operations, getTokenFromAsset, }) {
|
|
41
43
|
const { blacklistedTokenIds = [] } = syncConfig;
|
|
42
|
-
const allTokens = (0, cryptoassets_1.listTokensForCryptoCurrency)(currency);
|
|
43
44
|
const tokenAccounts = [];
|
|
44
|
-
if (
|
|
45
|
+
if (allTokenAssetsBalances.length === 0 || !getTokenFromAsset) {
|
|
45
46
|
return tokenAccounts;
|
|
46
47
|
}
|
|
47
48
|
for (const balance of allTokenAssetsBalances) {
|
|
48
|
-
const token =
|
|
49
|
+
const token = await getTokenFromAsset(balance.asset);
|
|
49
50
|
// NOTE: for future tokens, will need to check over currencyName/standard(erc20,trc10,trc20, etc)/id
|
|
50
51
|
if (token && !blacklistedTokenIds.includes(token.id)) {
|
|
51
52
|
tokenAccounts.push(buildTokenAccount({
|
|
@@ -60,4 +61,31 @@ async function buildSubAccounts({ currency, accountId, allTokenAssetsBalances, s
|
|
|
60
61
|
return tokenAccounts;
|
|
61
62
|
}
|
|
62
63
|
exports.buildSubAccounts = buildSubAccounts;
|
|
64
|
+
function mergeSubAccounts(oldSubAccounts, newSubAccounts) {
|
|
65
|
+
if (!oldSubAccounts.length) {
|
|
66
|
+
return newSubAccounts;
|
|
67
|
+
}
|
|
68
|
+
const oldSubAccountsById = Object.fromEntries(oldSubAccounts.map(account => [account.id, account]));
|
|
69
|
+
const newSubAccountsToAdd = [];
|
|
70
|
+
for (const newSubAccount of newSubAccounts) {
|
|
71
|
+
const existingSubAccount = oldSubAccountsById[newSubAccount.id];
|
|
72
|
+
if (!existingSubAccount) {
|
|
73
|
+
// New sub account does not exist yet. Just add it as is.
|
|
74
|
+
newSubAccountsToAdd.push(newSubAccount);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// New sub account is already known, probably outdated
|
|
78
|
+
const operations = (0, jsHelpers_1.mergeOps)(existingSubAccount.operations, newSubAccount.operations);
|
|
79
|
+
oldSubAccountsById[newSubAccount.id] = {
|
|
80
|
+
...existingSubAccount,
|
|
81
|
+
balance: newSubAccount.balance,
|
|
82
|
+
spendableBalance: newSubAccount.spendableBalance,
|
|
83
|
+
operations,
|
|
84
|
+
operationsCount: operations.length,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const updatedOldSubAccounts = Object.values(oldSubAccountsById);
|
|
88
|
+
return [...updatedOldSubAccounts, ...newSubAccountsToAdd];
|
|
89
|
+
}
|
|
90
|
+
exports.mergeSubAccounts = mergeSubAccounts;
|
|
63
91
|
//# sourceMappingURL=buildSubAccounts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSubAccounts.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,kEAAiG;AAGjG,kEAAuE;
|
|
1
|
+
{"version":3,"file":"buildSubAccounts.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAccountShape.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAY,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"getAccountShape.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAY,MAAM,2CAA2C,CAAC;AAiBtF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAyFrF"}
|
|
@@ -12,6 +12,10 @@ const alpaca_1 = require("./alpaca");
|
|
|
12
12
|
const utils_1 = require("./utils");
|
|
13
13
|
const serialization_1 = require("@ledgerhq/coin-framework/serialization");
|
|
14
14
|
const buildSubAccounts_1 = require("./buildSubAccounts");
|
|
15
|
+
function isNftCoreOp(operation) {
|
|
16
|
+
return (typeof operation.details?.ledgerOpType === "string" &&
|
|
17
|
+
["NFT_IN", "NFT_OUT"].includes(operation.details?.ledgerOpType));
|
|
18
|
+
}
|
|
15
19
|
function genericGetAccountShape(network, kind) {
|
|
16
20
|
return async (info, syncConfig) => {
|
|
17
21
|
const { address, initialAccount, currency, derivationMode } = info;
|
|
@@ -50,31 +54,28 @@ function genericGetAccountShape(network, kind) {
|
|
|
50
54
|
paginationParams.lastPagingToken = lastPagingToken;
|
|
51
55
|
}
|
|
52
56
|
const [newCoreOps] = await alpacaApi.listOperations(address, paginationParams);
|
|
53
|
-
const newOps = newCoreOps
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
assetOperations.push(operation);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
const subAccounts = await (0, buildSubAccounts_1.buildSubAccounts)({
|
|
64
|
-
currency,
|
|
57
|
+
const newOps = newCoreOps
|
|
58
|
+
.filter(op => !isNftCoreOp(op))
|
|
59
|
+
.map(op => (0, utils_1.adaptCoreOperationToLiveOperation)(accountId, op));
|
|
60
|
+
const newAssetOperations = newOps.filter(operation => operation?.extra?.assetReference &&
|
|
61
|
+
operation?.extra?.assetOwner &&
|
|
62
|
+
!["OPT_IN", "OPT_OUT"].includes(operation.type));
|
|
63
|
+
const newSubAccounts = await (0, buildSubAccounts_1.buildSubAccounts)({
|
|
65
64
|
accountId,
|
|
66
65
|
allTokenAssetsBalances,
|
|
67
66
|
syncConfig,
|
|
68
|
-
operations:
|
|
67
|
+
operations: newAssetOperations,
|
|
69
68
|
getTokenFromAsset: alpacaApi.getTokenFromAsset,
|
|
70
69
|
});
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const subAccounts = (0, buildSubAccounts_1.mergeSubAccounts)(initialAccount?.subAccounts ?? [], newSubAccounts);
|
|
71
|
+
const newOpsWithSubs = newOps.map(op => {
|
|
72
|
+
const subOperations = (0, serialization_1.inferSubOperations)(op.hash, newSubAccounts);
|
|
73
|
+
return (0, utils_1.cleanedOperation)({
|
|
74
74
|
...op,
|
|
75
75
|
subOperations,
|
|
76
|
-
};
|
|
76
|
+
});
|
|
77
77
|
});
|
|
78
|
+
const operations = (0, jsHelpers_1.mergeOps)(oldOps, newOpsWithSubs);
|
|
78
79
|
const res = {
|
|
79
80
|
id: accountId,
|
|
80
81
|
xpub: address,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAccountShape.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyE;AACzE,yEAAsF;AACtF,kEAAuE;AACvE,gEAAqC;AACrC,qCAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"getAccountShape.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import { TransactionCommon } from "@ledgerhq/types-live";
|
|
3
|
+
import type { Operation, TransactionCommon } from "@ledgerhq/types-live";
|
|
4
4
|
import BigNumber from "bignumber.js";
|
|
5
5
|
import type { Unit } from "@ledgerhq/types-cryptoassets";
|
|
6
6
|
type NetworkInfo = {
|
|
@@ -26,5 +26,8 @@ export type GenericTransaction = TransactionCommon & {
|
|
|
26
26
|
assetOwner?: string;
|
|
27
27
|
networkInfo?: NetworkInfo | null;
|
|
28
28
|
};
|
|
29
|
+
export interface OperationCommon extends Operation {
|
|
30
|
+
extra: Record<string, any>;
|
|
31
|
+
}
|
|
29
32
|
export {};
|
|
30
33
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/types.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/types.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEzD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE;QACX,UAAU,EAAE;YAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;SAAE,CAAC;KACzC,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EACD,MAAM,GACN,aAAa,GACb,aAAa,GACb,cAAc,GACd,UAAU,GACV,OAAO,GACP,YAAY,GACZ,SAAS,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Account, Operation } from "@ledgerhq/types-live";
|
|
2
2
|
import { Balance, Operation as CoreOperation, TransactionIntent } from "@ledgerhq/coin-framework/api/types";
|
|
3
3
|
import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
|
|
4
|
-
import { GenericTransaction } from "./types";
|
|
4
|
+
import { GenericTransaction, OperationCommon } from "./types";
|
|
5
5
|
export declare function findCryptoCurrencyByNetwork(network: string): CryptoCurrency | undefined;
|
|
6
6
|
export declare function extractBalance(balances: Balance[], type: string): Balance;
|
|
7
|
+
export declare function cleanedOperation(operation: OperationCommon): OperationCommon;
|
|
7
8
|
export declare function adaptCoreOperationToLiveOperation(accountId: string, op: CoreOperation): Operation;
|
|
8
9
|
/**
|
|
9
10
|
* Converts a transaction object into a `TransactionIntent` object, which is used to represent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAiB,MAAM,sBAAsB,CAAC;AAGzE,OAAO,EACL,OAAO,EACP,SAAS,IAAI,aAAa,EAC1B,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAiB,MAAM,sBAAsB,CAAC;AAGzE,OAAO,EACL,OAAO,EACP,SAAS,IAAI,aAAa,EAC1B,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE9D,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAKvF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOzE;AAMD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,eAAe,GAAG,eAAe,CAkB5E;AAED,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,GAAG,SAAS,CAqEjG;AAqBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,kBAAkB,EAC/B,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,MAAM,GAC9D,iBAAiB,GAAG;IAAE,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG;IACnE,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C,CA4CA;AAED,eAAO,MAAM,wBAAwB,YAC1B,OAAO,eACH,kBAAkB,mBACd,MAAM,KACtB,SAgEF,CAAC"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.buildOptimisticOperation = exports.transactionToIntent = exports.adaptCoreOperationToLiveOperation = exports.extractBalance = exports.findCryptoCurrencyByNetwork = void 0;
|
|
6
|
+
exports.buildOptimisticOperation = exports.transactionToIntent = exports.adaptCoreOperationToLiveOperation = exports.cleanedOperation = exports.extractBalance = exports.findCryptoCurrencyByNetwork = void 0;
|
|
7
7
|
const operation_1 = require("@ledgerhq/coin-framework/operation");
|
|
8
8
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
9
|
const utils_1 = require("@ledgerhq/coin-framework/utils");
|
|
@@ -22,6 +22,26 @@ function extractBalance(balances, type) {
|
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
exports.extractBalance = extractBalance;
|
|
25
|
+
function isStringArray(value) {
|
|
26
|
+
return Array.isArray(value) && value.every(item => typeof item === "string");
|
|
27
|
+
}
|
|
28
|
+
function cleanedOperation(operation) {
|
|
29
|
+
if (!operation.extra)
|
|
30
|
+
return operation;
|
|
31
|
+
const extraToClean = new Set([
|
|
32
|
+
"assetReference",
|
|
33
|
+
"assetAmount",
|
|
34
|
+
"assetOwner",
|
|
35
|
+
"assetSenders",
|
|
36
|
+
"assetRecipients",
|
|
37
|
+
"parentSenders",
|
|
38
|
+
"parentRecipients",
|
|
39
|
+
"ledgerOpType",
|
|
40
|
+
]);
|
|
41
|
+
const cleanedExtra = Object.fromEntries(Object.entries(operation.extra).filter(([key]) => !extraToClean.has(key)));
|
|
42
|
+
return { ...operation, extra: cleanedExtra };
|
|
43
|
+
}
|
|
44
|
+
exports.cleanedOperation = cleanedOperation;
|
|
25
45
|
function adaptCoreOperationToLiveOperation(accountId, op) {
|
|
26
46
|
const opType = op.type;
|
|
27
47
|
const extra = {};
|
|
@@ -31,6 +51,18 @@ function adaptCoreOperationToLiveOperation(accountId, op) {
|
|
|
31
51
|
if (op.details?.assetAmount !== undefined) {
|
|
32
52
|
extra.assetAmount = op.details.assetAmount;
|
|
33
53
|
}
|
|
54
|
+
if (isStringArray(op.details?.assetSenders)) {
|
|
55
|
+
extra.assetSenders = op.details?.assetSenders;
|
|
56
|
+
}
|
|
57
|
+
if (isStringArray(op.details?.assetRecipients)) {
|
|
58
|
+
extra.assetRecipients = op.details?.assetRecipients;
|
|
59
|
+
}
|
|
60
|
+
if (isStringArray(op.details?.parentSenders)) {
|
|
61
|
+
extra.parentSenders = op.details?.parentSenders;
|
|
62
|
+
}
|
|
63
|
+
if (isStringArray(op.details?.parentRecipients)) {
|
|
64
|
+
extra.parentRecipients = op.details?.parentRecipients;
|
|
65
|
+
}
|
|
34
66
|
if (op.asset?.type !== "native") {
|
|
35
67
|
extra.assetReference =
|
|
36
68
|
"assetReference" in (op.asset ?? {}) ? op.asset.assetReference : "";
|
|
@@ -51,8 +83,8 @@ function adaptCoreOperationToLiveOperation(accountId, op) {
|
|
|
51
83
|
fee: bnFees,
|
|
52
84
|
blockHash: op.tx.block.hash,
|
|
53
85
|
blockHeight: op.tx.block.height,
|
|
54
|
-
senders: op.senders,
|
|
55
|
-
recipients: op.recipients,
|
|
86
|
+
senders: extra.parentSenders ?? op.senders,
|
|
87
|
+
recipients: extra.parentRecipients ?? op.recipients,
|
|
56
88
|
date: op.tx.date,
|
|
57
89
|
transactionSequenceNumber: op.details?.sequence,
|
|
58
90
|
hasFailed: op.details?.status === "failed",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/utils.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAuE;AAEvE,gEAAqC;AACrC,0DAAuE;AAMvE,kEAA2E;AAI3E,SAAgB,2BAA2B,CAAC,OAAe;IACzD,MAAM,aAAa,GAAG;QACpB,GAAG,EAAE,QAAQ;KACd,CAAC;IACF,OAAO,IAAA,mCAAsB,EAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;AACnE,CAAC;AALD,kEAKC;AAED,SAAgB,cAAc,CAAC,QAAmB,EAAE,IAAY;IAC9D,OAAO,CACL,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;QACvD,KAAK,EAAE,EAAE,IAAI,EAAE;QACf,KAAK,EAAE,EAAE;KACV,CACF,CAAC;AACJ,CAAC;AAPD,wCAOC;AAED,SAAgB,iCAAiC,CAAC,SAAiB,EAAE,EAAiB;IACpF,MAAM,MAAM,GAAG,EAAE,CAAC,IAAqB,CAAC;IAExC,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
|
+
import type { SyncConfig, TokenAccount } from "@ledgerhq/types-live";
|
|
3
3
|
import { AssetInfo, Balance } from "@ledgerhq/coin-framework/api/types";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
export declare const getAssetIdFromTokenId: (tokenId: string) => string;
|
|
8
|
-
export declare function buildSubAccounts({ currency, accountId, allTokenAssetsBalances, syncConfig, operations, getTokenFromAsset, }: {
|
|
9
|
-
currency: CryptoCurrency;
|
|
4
|
+
import { OperationCommon } from "./types";
|
|
5
|
+
export declare function buildSubAccounts({ accountId, allTokenAssetsBalances, syncConfig, operations, getTokenFromAsset, }: {
|
|
10
6
|
accountId: string;
|
|
11
7
|
allTokenAssetsBalances: Balance[];
|
|
12
8
|
syncConfig: SyncConfig;
|
|
13
9
|
operations: OperationCommon[];
|
|
14
10
|
getTokenFromAsset?: (asset: AssetInfo) => Promise<TokenCurrency | undefined>;
|
|
15
11
|
}): Promise<TokenAccount[]>;
|
|
12
|
+
export declare function mergeSubAccounts(oldSubAccounts: Array<TokenAccount>, newSubAccounts: Array<TokenAccount>): Array<TokenAccount>;
|
|
16
13
|
//# sourceMappingURL=buildSubAccounts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSubAccounts.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"buildSubAccounts.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAkD1C,wBAAsB,gBAAgB,CAAC,EACrC,SAAS,EACT,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,iBAAiB,GAClB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,OAAO,EAAE,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;CAC9E,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,EACnC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,GAClC,KAAK,CAAC,YAAY,CAAC,CAkCrB"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import BigNumber from "bignumber.js";
|
|
2
2
|
import { emptyHistoryCache, encodeTokenAccountId } from "@ledgerhq/coin-framework/account/index";
|
|
3
3
|
import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { mergeOps } from "../jsHelpers";
|
|
5
|
+
import { cleanedOperation } from "./utils";
|
|
6
6
|
function buildTokenAccount({ parentAccountId, assetBalance, token, operations, }) {
|
|
7
7
|
const id = encodeTokenAccountId(parentAccountId, token);
|
|
8
8
|
const balance = new BigNumber(assetBalance.value.toString() || "0");
|
|
9
9
|
// TODO: recheck this logic
|
|
10
10
|
const spendableBalance = new BigNumber(assetBalance.value.toString()).minus(new BigNumber(assetBalance.locked?.toString() || "0"));
|
|
11
|
-
const tokenOperations = operations.map(op => ({
|
|
11
|
+
const tokenOperations = operations.map(op => cleanedOperation({
|
|
12
12
|
...op,
|
|
13
13
|
id: encodeOperationId(id, op.hash, op.extra?.ledgerOpType),
|
|
14
14
|
accountId: id,
|
|
15
15
|
type: op.extra?.ledgerOpType,
|
|
16
|
+
contract: token.contractAddress,
|
|
16
17
|
value: op.extra?.assetAmount ? new BigNumber(op.extra?.assetAmount) : op.value,
|
|
18
|
+
senders: op.extra?.assetSenders ?? op.senders,
|
|
19
|
+
recipients: op.extra?.assetRecipients ?? op.recipients,
|
|
17
20
|
}));
|
|
18
21
|
return {
|
|
19
22
|
type: "TokenAccount",
|
|
@@ -30,15 +33,14 @@ function buildTokenAccount({ parentAccountId, assetBalance, token, operations, }
|
|
|
30
33
|
balanceHistoryCache: emptyHistoryCache, // calculated in the jsHelpers
|
|
31
34
|
};
|
|
32
35
|
}
|
|
33
|
-
export async function buildSubAccounts({
|
|
36
|
+
export async function buildSubAccounts({ accountId, allTokenAssetsBalances, syncConfig, operations, getTokenFromAsset, }) {
|
|
34
37
|
const { blacklistedTokenIds = [] } = syncConfig;
|
|
35
|
-
const allTokens = listTokensForCryptoCurrency(currency);
|
|
36
38
|
const tokenAccounts = [];
|
|
37
|
-
if (
|
|
39
|
+
if (allTokenAssetsBalances.length === 0 || !getTokenFromAsset) {
|
|
38
40
|
return tokenAccounts;
|
|
39
41
|
}
|
|
40
42
|
for (const balance of allTokenAssetsBalances) {
|
|
41
|
-
const token =
|
|
43
|
+
const token = await getTokenFromAsset(balance.asset);
|
|
42
44
|
// NOTE: for future tokens, will need to check over currencyName/standard(erc20,trc10,trc20, etc)/id
|
|
43
45
|
if (token && !blacklistedTokenIds.includes(token.id)) {
|
|
44
46
|
tokenAccounts.push(buildTokenAccount({
|
|
@@ -52,4 +54,30 @@ export async function buildSubAccounts({ currency, accountId, allTokenAssetsBala
|
|
|
52
54
|
}
|
|
53
55
|
return tokenAccounts;
|
|
54
56
|
}
|
|
57
|
+
export function mergeSubAccounts(oldSubAccounts, newSubAccounts) {
|
|
58
|
+
if (!oldSubAccounts.length) {
|
|
59
|
+
return newSubAccounts;
|
|
60
|
+
}
|
|
61
|
+
const oldSubAccountsById = Object.fromEntries(oldSubAccounts.map(account => [account.id, account]));
|
|
62
|
+
const newSubAccountsToAdd = [];
|
|
63
|
+
for (const newSubAccount of newSubAccounts) {
|
|
64
|
+
const existingSubAccount = oldSubAccountsById[newSubAccount.id];
|
|
65
|
+
if (!existingSubAccount) {
|
|
66
|
+
// New sub account does not exist yet. Just add it as is.
|
|
67
|
+
newSubAccountsToAdd.push(newSubAccount);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
// New sub account is already known, probably outdated
|
|
71
|
+
const operations = mergeOps(existingSubAccount.operations, newSubAccount.operations);
|
|
72
|
+
oldSubAccountsById[newSubAccount.id] = {
|
|
73
|
+
...existingSubAccount,
|
|
74
|
+
balance: newSubAccount.balance,
|
|
75
|
+
spendableBalance: newSubAccount.spendableBalance,
|
|
76
|
+
operations,
|
|
77
|
+
operationsCount: operations.length,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const updatedOldSubAccounts = Object.values(oldSubAccountsById);
|
|
81
|
+
return [...updatedOldSubAccounts, ...newSubAccountsToAdd];
|
|
82
|
+
}
|
|
55
83
|
//# sourceMappingURL=buildSubAccounts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSubAccounts.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAGjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"buildSubAccounts.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/buildSubAccounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAccountShape.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAY,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"getAccountShape.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAY,MAAM,2CAA2C,CAAC;AAiBtF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAyFrF"}
|
|
@@ -3,9 +3,13 @@ import { mergeOps } from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
|
3
3
|
import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
|
|
4
4
|
import BigNumber from "bignumber.js";
|
|
5
5
|
import { getAlpacaApi } from "./alpaca";
|
|
6
|
-
import { adaptCoreOperationToLiveOperation, extractBalance } from "./utils";
|
|
6
|
+
import { adaptCoreOperationToLiveOperation, cleanedOperation, extractBalance } from "./utils";
|
|
7
7
|
import { inferSubOperations } from "@ledgerhq/coin-framework/serialization";
|
|
8
|
-
import { buildSubAccounts } from "./buildSubAccounts";
|
|
8
|
+
import { buildSubAccounts, mergeSubAccounts } from "./buildSubAccounts";
|
|
9
|
+
function isNftCoreOp(operation) {
|
|
10
|
+
return (typeof operation.details?.ledgerOpType === "string" &&
|
|
11
|
+
["NFT_IN", "NFT_OUT"].includes(operation.details?.ledgerOpType));
|
|
12
|
+
}
|
|
9
13
|
export function genericGetAccountShape(network, kind) {
|
|
10
14
|
return async (info, syncConfig) => {
|
|
11
15
|
const { address, initialAccount, currency, derivationMode } = info;
|
|
@@ -44,31 +48,28 @@ export function genericGetAccountShape(network, kind) {
|
|
|
44
48
|
paginationParams.lastPagingToken = lastPagingToken;
|
|
45
49
|
}
|
|
46
50
|
const [newCoreOps] = await alpacaApi.listOperations(address, paginationParams);
|
|
47
|
-
const newOps = newCoreOps
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
assetOperations.push(operation);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
const subAccounts = await buildSubAccounts({
|
|
58
|
-
currency,
|
|
51
|
+
const newOps = newCoreOps
|
|
52
|
+
.filter(op => !isNftCoreOp(op))
|
|
53
|
+
.map(op => adaptCoreOperationToLiveOperation(accountId, op));
|
|
54
|
+
const newAssetOperations = newOps.filter(operation => operation?.extra?.assetReference &&
|
|
55
|
+
operation?.extra?.assetOwner &&
|
|
56
|
+
!["OPT_IN", "OPT_OUT"].includes(operation.type));
|
|
57
|
+
const newSubAccounts = await buildSubAccounts({
|
|
59
58
|
accountId,
|
|
60
59
|
allTokenAssetsBalances,
|
|
61
60
|
syncConfig,
|
|
62
|
-
operations:
|
|
61
|
+
operations: newAssetOperations,
|
|
63
62
|
getTokenFromAsset: alpacaApi.getTokenFromAsset,
|
|
64
63
|
});
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
const subAccounts = mergeSubAccounts(initialAccount?.subAccounts ?? [], newSubAccounts);
|
|
65
|
+
const newOpsWithSubs = newOps.map(op => {
|
|
66
|
+
const subOperations = inferSubOperations(op.hash, newSubAccounts);
|
|
67
|
+
return cleanedOperation({
|
|
68
68
|
...op,
|
|
69
69
|
subOperations,
|
|
70
|
-
};
|
|
70
|
+
});
|
|
71
71
|
});
|
|
72
|
+
const operations = mergeOps(oldOps, newOpsWithSubs);
|
|
72
73
|
const res = {
|
|
73
74
|
id: accountId,
|
|
74
75
|
xpub: address,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAccountShape.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAmB,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,iCAAiC,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"getAccountShape.js","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/getAccountShape.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import { TransactionCommon } from "@ledgerhq/types-live";
|
|
3
|
+
import type { Operation, TransactionCommon } from "@ledgerhq/types-live";
|
|
4
4
|
import BigNumber from "bignumber.js";
|
|
5
5
|
import type { Unit } from "@ledgerhq/types-cryptoassets";
|
|
6
6
|
type NetworkInfo = {
|
|
@@ -26,5 +26,8 @@ export type GenericTransaction = TransactionCommon & {
|
|
|
26
26
|
assetOwner?: string;
|
|
27
27
|
networkInfo?: NetworkInfo | null;
|
|
28
28
|
};
|
|
29
|
+
export interface OperationCommon extends Operation {
|
|
30
|
+
extra: Record<string, any>;
|
|
31
|
+
}
|
|
29
32
|
export {};
|
|
30
33
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/types.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bridge/generic-alpaca/types.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEzD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE;QACX,UAAU,EAAE;YAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;SAAE,CAAC;KACzC,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EACD,MAAM,GACN,aAAa,GACb,aAAa,GACb,cAAc,GACd,UAAU,GACV,OAAO,GACP,YAAY,GACZ,SAAS,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B"}
|