@ledgerhq/coin-framework 5.2.0 → 5.3.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/jest.config.js +2 -9
- package/lib/account/groupOperations.d.ts +29 -0
- package/lib/account/groupOperations.d.ts.map +1 -1
- package/lib/account/groupOperations.js +60 -8
- package/lib/account/groupOperations.js.map +1 -1
- package/lib/account/groupOperations.test.d.ts +2 -0
- package/lib/account/groupOperations.test.d.ts.map +1 -0
- package/lib/account/groupOperations.test.js +93 -0
- package/lib/account/groupOperations.test.js.map +1 -0
- package/lib/account/pending.d.ts.map +1 -1
- package/lib/account/pending.js +20 -0
- package/lib/account/pending.js.map +1 -1
- package/lib/account/pending.test.d.ts +3 -1
- package/lib/account/pending.test.d.ts.map +1 -1
- package/lib/account/pending.test.js +31 -0
- package/lib/account/pending.test.js.map +1 -1
- package/lib/api/types.d.ts +67 -10
- package/lib/api/types.d.ts.map +1 -1
- package/lib/config.d.ts +3 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js.map +1 -1
- package/lib/operation.test.js +18 -0
- package/lib/operation.test.js.map +1 -1
- package/lib-es/account/groupOperations.d.ts +29 -0
- package/lib-es/account/groupOperations.d.ts.map +1 -1
- package/lib-es/account/groupOperations.js +60 -8
- package/lib-es/account/groupOperations.js.map +1 -1
- package/lib-es/account/groupOperations.test.d.ts +2 -0
- package/lib-es/account/groupOperations.test.d.ts.map +1 -0
- package/lib-es/account/groupOperations.test.js +91 -0
- package/lib-es/account/groupOperations.test.js.map +1 -0
- package/lib-es/account/pending.d.ts.map +1 -1
- package/lib-es/account/pending.js +20 -0
- package/lib-es/account/pending.js.map +1 -1
- package/lib-es/account/pending.test.d.ts +3 -1
- package/lib-es/account/pending.test.d.ts.map +1 -1
- package/lib-es/account/pending.test.js +30 -2
- package/lib-es/account/pending.test.js.map +1 -1
- package/lib-es/api/types.d.ts +67 -10
- package/lib-es/api/types.d.ts.map +1 -1
- package/lib-es/config.d.ts +3 -0
- package/lib-es/config.d.ts.map +1 -1
- package/lib-es/config.js.map +1 -1
- package/lib-es/operation.test.js +18 -0
- package/lib-es/operation.test.js.map +1 -1
- package/package.json +5 -6
- package/src/account/groupOperations.test.ts +123 -0
- package/src/account/groupOperations.ts +61 -11
- package/src/account/pending.test.ts +38 -2
- package/src/account/pending.ts +20 -0
- package/src/api/types.ts +100 -23
- package/src/config.ts +4 -0
- package/src/operation.test.ts +25 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @ledgerhq/coin-framework
|
|
2
2
|
|
|
3
|
+
## 5.3.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#10422](https://github.com/LedgerHQ/ledger-live/pull/10422) [`18bc0d4`](https://github.com/LedgerHQ/ledger-live/commit/18bc0d4a27696491400df6ce26b915a88b56792f) Thanks [@Moustafa-Koterba](https://github.com/Moustafa-Koterba)! - Logic implementation for sanctioned addresses
|
|
8
|
+
|
|
9
|
+
- [#10217](https://github.com/LedgerHQ/ledger-live/pull/10217) [`e04d215`](https://github.com/LedgerHQ/ledger-live/commit/e04d21576919fa21cb3ab6e1c4e8e50fb6c17eca) Thanks [@Wozacosta](https://github.com/Wozacosta)! - feat: update transactionintent generic types + remove xrp bridge and introduce the generic alpaca bridge in LLC
|
|
10
|
+
|
|
11
|
+
- [#10171](https://github.com/LedgerHQ/ledger-live/pull/10171) [`1535307`](https://github.com/LedgerHQ/ledger-live/commit/1535307f78d345d7f652ac2c91c8a67e62fedef2) Thanks [@Wozacosta](https://github.com/Wozacosta)! - fix: ensure btc transactionSequenceNumber is preserved when input sequence is 0 (previously resulted in undefined)
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [[`8551c28`](https://github.com/LedgerHQ/ledger-live/commit/8551c280f24f7bd4475c6cc12f1b1d92636d9357), [`b7d3d59`](https://github.com/LedgerHQ/ledger-live/commit/b7d3d59d299c3d3541d598536651b9047fda4526)]:
|
|
16
|
+
- @ledgerhq/live-env@2.10.0-next.0
|
|
17
|
+
- @ledgerhq/types-live@6.73.0-next.0
|
|
18
|
+
- @ledgerhq/cryptoassets@13.18.1-next.0
|
|
19
|
+
- @ledgerhq/live-network@2.0.10-next.0
|
|
20
|
+
|
|
3
21
|
## 5.2.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
package/jest.config.js
CHANGED
|
@@ -13,16 +13,9 @@ module.exports = {
|
|
|
13
13
|
"!src/**/__integrations__/**",
|
|
14
14
|
"!src/**/__tests__/**",
|
|
15
15
|
],
|
|
16
|
-
coverageReporters: [
|
|
17
|
-
"json",
|
|
18
|
-
["lcov", { file: "framework-lcov.info", projectRoot: "../" }],
|
|
19
|
-
"text",
|
|
20
|
-
],
|
|
16
|
+
coverageReporters: ["json", ["lcov", { file: "lcov.info", projectRoot: "../../" }], "text"],
|
|
21
17
|
reporters: [
|
|
22
18
|
"default",
|
|
23
|
-
[
|
|
24
|
-
"jest-sonar",
|
|
25
|
-
{ outputName: "framework-sonar-executionTests-report.xml", reportedFilePath: "absolute" },
|
|
26
|
-
],
|
|
19
|
+
["jest-sonar", { outputName: "sonar-executionTests-report.xml", reportedFilePath: "absolute" }],
|
|
27
20
|
],
|
|
28
21
|
};
|
|
@@ -5,6 +5,35 @@ type GroupOpsByDayOpts = {
|
|
|
5
5
|
filterOperation?: (arg0: Operation, arg1: AccountLike) => boolean;
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
|
+
* Groups operations from one or more accounts into day-based sections,
|
|
9
|
+
* ordered from most recent to oldest.
|
|
10
|
+
*
|
|
11
|
+
* This function collects operations incrementally, scanning one operation
|
|
12
|
+
* at a time per account in a round-robin fashion (including subaccounts if enabled).
|
|
13
|
+
* In each round, it picks the most recent operation based on:
|
|
14
|
+
* - `date` (newer comes first)
|
|
15
|
+
* - `transactionSequenceNumber` (higher means more recent, used as a tiebreaker when dates are equal)
|
|
16
|
+
*
|
|
17
|
+
* The process stops once the requested `count` of operations has been collected.
|
|
18
|
+
* Pending operations are included unless:
|
|
19
|
+
* - They are duplicates of confirmed operations (based on `hash`)
|
|
20
|
+
* - They are filtered out via the optional `filterOperation` callback
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ Due to its round-by-account design, operations from the same account
|
|
23
|
+
* are not compared against each other in the same pass. This may lead to
|
|
24
|
+
* chronological inconsistencies if relying solely on `transactionSequenceNumber`
|
|
25
|
+
* for intra-account ordering. Consider sorting operations manually if strict ordering is required.
|
|
26
|
+
*
|
|
27
|
+
* @param inputAccounts - A list of accounts (or parent accounts) to pull operations from
|
|
28
|
+
* @param options - Options to configure grouping behavior
|
|
29
|
+
* @param options.count - Maximum number of operations to include in the result
|
|
30
|
+
* @param options.withSubAccounts - Whether to include subaccounts in the input set
|
|
31
|
+
* @param options.filterOperation - Optional function to selectively include/exclude operations
|
|
32
|
+
*
|
|
33
|
+
* @returns A `DailyOperations` object containing:
|
|
34
|
+
* - `sections`: An array of `{ day, data[] }` groups
|
|
35
|
+
* - `completed`: Boolean indicating whether fewer operations were available than requested
|
|
36
|
+
*
|
|
8
37
|
* @memberof account
|
|
9
38
|
*/
|
|
10
39
|
export declare function groupAccountsOperationsByDay(inputAccounts: AccountLikeArray, { count, withSubAccounts, filterOperation }: GroupOpsByDayOpts): DailyOperations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groupOperations.d.ts","sourceRoot":"","sources":["../../src/account/groupOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,SAAS,EACV,MAAM,sBAAsB,CAAC;AAS9B,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC;CACnE,CAAC;
|
|
1
|
+
{"version":3,"file":"groupOperations.d.ts","sourceRoot":"","sources":["../../src/account/groupOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,SAAS,EACV,MAAM,sBAAsB,CAAC;AAS9B,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC;CACnE,CAAC;AAqCF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,gBAAgB,EAC/B,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,EAAE,iBAAiB,GAC7D,eAAe,CAqHjB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,iBAAiB,GACrB,eAAe,CAGjB"}
|
|
@@ -10,6 +10,66 @@ const emptyDailyOperations = {
|
|
|
10
10
|
};
|
|
11
11
|
const hasStableOperation = (account, hash) => account.operations.some(op => op.hash === hash);
|
|
12
12
|
/**
|
|
13
|
+
* Compares two operations to determine if the first one (`op1`) is more recent than the second (`op2`).
|
|
14
|
+
* This is used to sort operations in descending chronological order.
|
|
15
|
+
*
|
|
16
|
+
* - First compares by `date` (newer dates come first).
|
|
17
|
+
* - If both operations have the same `date`, and both define `transactionSequenceNumber`,
|
|
18
|
+
* the one with the higher sequence number is considered more recent.
|
|
19
|
+
* - If only one operation has a defined `transactionSequenceNumber`, it is prioritized
|
|
20
|
+
* over the one that does not (under the assumption it's more precisely ordered).
|
|
21
|
+
* - If neither has a defined sequence, fallback returns `false` (preserving existing order).
|
|
22
|
+
*
|
|
23
|
+
* @param op1 - First operation
|
|
24
|
+
* @param op2 - Second operation
|
|
25
|
+
* @returns `true` if `op1` should come before `op2`, `false` otherwise
|
|
26
|
+
*/
|
|
27
|
+
function compareOps(op1, op2) {
|
|
28
|
+
if (op1.date > op2.date)
|
|
29
|
+
return true;
|
|
30
|
+
if (op1.date < op2.date)
|
|
31
|
+
return false;
|
|
32
|
+
const seq1 = op1.transactionSequenceNumber;
|
|
33
|
+
const seq2 = op2.transactionSequenceNumber;
|
|
34
|
+
if (seq1 !== undefined && seq2 !== undefined) {
|
|
35
|
+
return seq1 > seq2;
|
|
36
|
+
}
|
|
37
|
+
if (seq1 !== undefined && seq2 === undefined)
|
|
38
|
+
return true;
|
|
39
|
+
if (seq1 === undefined && seq2 !== undefined)
|
|
40
|
+
return false;
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Groups operations from one or more accounts into day-based sections,
|
|
45
|
+
* ordered from most recent to oldest.
|
|
46
|
+
*
|
|
47
|
+
* This function collects operations incrementally, scanning one operation
|
|
48
|
+
* at a time per account in a round-robin fashion (including subaccounts if enabled).
|
|
49
|
+
* In each round, it picks the most recent operation based on:
|
|
50
|
+
* - `date` (newer comes first)
|
|
51
|
+
* - `transactionSequenceNumber` (higher means more recent, used as a tiebreaker when dates are equal)
|
|
52
|
+
*
|
|
53
|
+
* The process stops once the requested `count` of operations has been collected.
|
|
54
|
+
* Pending operations are included unless:
|
|
55
|
+
* - They are duplicates of confirmed operations (based on `hash`)
|
|
56
|
+
* - They are filtered out via the optional `filterOperation` callback
|
|
57
|
+
*
|
|
58
|
+
* ⚠️ Due to its round-by-account design, operations from the same account
|
|
59
|
+
* are not compared against each other in the same pass. This may lead to
|
|
60
|
+
* chronological inconsistencies if relying solely on `transactionSequenceNumber`
|
|
61
|
+
* for intra-account ordering. Consider sorting operations manually if strict ordering is required.
|
|
62
|
+
*
|
|
63
|
+
* @param inputAccounts - A list of accounts (or parent accounts) to pull operations from
|
|
64
|
+
* @param options - Options to configure grouping behavior
|
|
65
|
+
* @param options.count - Maximum number of operations to include in the result
|
|
66
|
+
* @param options.withSubAccounts - Whether to include subaccounts in the input set
|
|
67
|
+
* @param options.filterOperation - Optional function to selectively include/exclude operations
|
|
68
|
+
*
|
|
69
|
+
* @returns A `DailyOperations` object containing:
|
|
70
|
+
* - `sections`: An array of `{ day, data[] }` groups
|
|
71
|
+
* - `completed`: Boolean indicating whether fewer operations were available than requested
|
|
72
|
+
*
|
|
13
73
|
* @memberof account
|
|
14
74
|
*/
|
|
15
75
|
function groupAccountsOperationsByDay(inputAccounts, { count, withSubAccounts, filterOperation }) {
|
|
@@ -18,14 +78,6 @@ function groupAccountsOperationsByDay(inputAccounts, { count, withSubAccounts, f
|
|
|
18
78
|
const indexes = Array(accounts.length).fill(0);
|
|
19
79
|
// Track indexes of account.pendingOperations[] for each account
|
|
20
80
|
const indexesPending = Array(accounts.length).fill(0);
|
|
21
|
-
// Retruns true if operation 1 is later than operation 2
|
|
22
|
-
function compareOps(op1, op2) {
|
|
23
|
-
return (op1.date > op2.date ||
|
|
24
|
-
(op1.date === op2.date &&
|
|
25
|
-
op1.transactionSequenceNumber !== undefined &&
|
|
26
|
-
op2.transactionSequenceNumber !== undefined &&
|
|
27
|
-
op1.transactionSequenceNumber > op2.transactionSequenceNumber));
|
|
28
|
-
}
|
|
29
81
|
// Returns the next most recent operation from the account with current indexes
|
|
30
82
|
function getNext() {
|
|
31
83
|
let bestOp;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groupOperations.js","sourceRoot":"","sources":["../../src/account/groupOperations.ts"],"names":[],"mappings":";;;AAMA,4CAAoE;AACpE,uCAA4C;AAC5C,+DAAmD;AAEnD,MAAM,oBAAoB,GAAG;IAC3B,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,IAAI;CAChB,CAAC;AAOF,MAAM,kBAAkB,GAAG,CAAC,OAAoB,EAAE,IAAY,EAAE,EAAE,CAChE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"groupOperations.js","sourceRoot":"","sources":["../../src/account/groupOperations.ts"],"names":[],"mappings":";;;AAMA,4CAAoE;AACpE,uCAA4C;AAC5C,+DAAmD;AAEnD,MAAM,oBAAoB,GAAG;IAC3B,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,IAAI;CAChB,CAAC;AAOF,MAAM,kBAAkB,GAAG,CAAC,OAAoB,EAAE,IAAY,EAAE,EAAE,CAChE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,SAAS,UAAU,CAAC,GAAc,EAAE,GAAc;IAChD,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAEtC,MAAM,IAAI,GAAG,GAAG,CAAC,yBAAyB,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,yBAAyB,CAAC;IAE3C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAE3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,SAAgB,4BAA4B,CAC1C,aAA+B,EAC/B,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAqB;IAE9D,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,IAAA,yBAAe,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAClF,yDAAyD;IACzD,MAAM,OAAO,GAAa,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzD,gEAAgE;IAChE,MAAM,cAAc,GAAa,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhE,+EAA+E;IAC/E,SAAS,OAAO;QAOd,IAAI,MAAoC,CAAC;QACzC,IAAI,UAAU,GAAG;YACf,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,KAAK;SACnB,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,qBAAqB;YACrB,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAExC,IAAI,eAAe,EAAE,CAAC;gBACpB,uCAAuC;gBACvC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC3C,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC9C,MAAM,GAAG,EAAE,CAAC;gBACZ,UAAU,GAAG;oBACX,QAAQ,EAAE,CAAC;oBACX,WAAW,EAAE,KAAK;iBACnB,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAEvD,OACE,GAAG,IAAI,6DAA6D;gBACpE,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,mCAAmC;oBAC3E,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACtD,CAAC;gBACD,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,CAAC;gBACb,UAAU,GAAG;oBACX,QAAQ,EAAE,CAAC;oBACX,WAAW,EAAE,IAAI;iBAClB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC3B,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,CAAC;YAED,MAAM,GAAG,GAAG,IAAA,gDAAoC,EAAC,MAAM,CAAC,CAAC;YACzD,OAAO;gBACL,GAAG;gBACH,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC,IAAI;QAAE,OAAO,oBAAoB,CAAC;IACvC,MAAM,QAAQ,GAGT,EAAE,CAAC;IACR,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,GAAG,GAAG,IAAA,gCAAU,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,GAAgB,EAAE,CAAC;IAE3B,OAAO,eAAe,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,CAAC;gBAC1D,QAAQ,CAAC,IAAI,CAAC;oBACZ,GAAG;oBACH,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;gBACH,eAAe,IAAI,UAAU,CAAC,MAAM,CAAC;YACvC,CAAC;YAED,GAAG,GAAG,IAAA,gCAAU,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,GAAG,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,GAAG,KAAK,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC;YACZ,GAAG;YACH,IAAI;SACL,CAAC,CAAC;QACH,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;IACD,OAAO;QACL,QAAQ;QACR,SAAS,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;KACtC,CAAC;AACJ,CAAC;AAxHD,oEAwHC;AAED;;;GAGG;AACH,SAAgB,2BAA2B,CACzC,OAAoB,EACpB,GAAsB;IAEtB,MAAM,QAAQ,GAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,4BAA4B,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAND,kEAMC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupOperations.test.d.ts","sourceRoot":"","sources":["../../src/account/groupOperations.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const groupOperations_1 = require("./groupOperations");
|
|
4
|
+
const pending_test_1 = require("./pending.test");
|
|
5
|
+
// Wrapper around createOperation to set transactionSequenceNumber and optional date override
|
|
6
|
+
const createOp = (id, isoDate, sequence, isPending = false) => {
|
|
7
|
+
const op = (0, pending_test_1.createOperation)("acc1", ["sender"], sequence);
|
|
8
|
+
return {
|
|
9
|
+
...op,
|
|
10
|
+
id,
|
|
11
|
+
hash: id,
|
|
12
|
+
accountId: "acc1",
|
|
13
|
+
date: new Date(isoDate),
|
|
14
|
+
transactionSequenceNumber: sequence,
|
|
15
|
+
blockHeight: isPending ? null : 1,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
// Wrap createAccount to support injecting confirmed & pending operations
|
|
19
|
+
const createAccount = ({ confirmed = [], pending = [], }) => {
|
|
20
|
+
const base = (0, pending_test_1.createAccount)("acc1");
|
|
21
|
+
return {
|
|
22
|
+
...base,
|
|
23
|
+
id: "acc1",
|
|
24
|
+
operations: confirmed,
|
|
25
|
+
operationsCount: confirmed.length,
|
|
26
|
+
pendingOperations: pending,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
describe("groupAccountOperationsByDay", () => {
|
|
30
|
+
it("groups confirmed ops by day and preserves order", () => {
|
|
31
|
+
const op1 = createOp("op1", "2024-01-01T10:00:00Z");
|
|
32
|
+
const op2 = createOp("op2", "2024-01-01T08:00:00Z");
|
|
33
|
+
const op3 = createOp("op3", "2024-01-02T12:00:00Z");
|
|
34
|
+
const acc = createAccount({ confirmed: [op3, op1, op2] });
|
|
35
|
+
const result = (0, groupOperations_1.groupAccountsOperationsByDay)([acc], { count: 10 });
|
|
36
|
+
expect(result.sections.length).toBe(2);
|
|
37
|
+
expect(result.sections[0].day.toISOString()).toContain("2024-01-02");
|
|
38
|
+
expect(result.sections[0].data.map((op) => op.id)).toEqual(["op3"]);
|
|
39
|
+
expect(result.sections[1].data.map((op) => op.id)).toEqual(["op1", "op2"]);
|
|
40
|
+
});
|
|
41
|
+
it("orders ops with equal date by transactionSequenceNumber", () => {
|
|
42
|
+
const op1 = createOp("op1", "2024-01-01T10:00:00Z", 3);
|
|
43
|
+
const op2 = createOp("op2", "2024-01-01T10:00:00Z", 5);
|
|
44
|
+
const acc1 = createAccount({ confirmed: [op1] });
|
|
45
|
+
const acc2 = createAccount({ confirmed: [op2] });
|
|
46
|
+
const result = (0, groupOperations_1.groupAccountsOperationsByDay)([acc1, acc2], { count: 10 });
|
|
47
|
+
expect(result.sections.length).toBe(1);
|
|
48
|
+
expect(result.sections[0].data.map((op) => op.id)).toEqual(["op2", "op1"]);
|
|
49
|
+
});
|
|
50
|
+
it("prioritizes defined transactionSequenceNumber over undefined", () => {
|
|
51
|
+
const op1 = createOp("op1", "2024-01-01T10:00:00Z");
|
|
52
|
+
const op2 = createOp("op2", "2024-01-01T10:00:00Z", 0);
|
|
53
|
+
const acc1 = createAccount({ confirmed: [op1] });
|
|
54
|
+
const acc2 = createAccount({ confirmed: [op2] });
|
|
55
|
+
const result = (0, groupOperations_1.groupAccountsOperationsByDay)([acc1, acc2], { count: 10 });
|
|
56
|
+
expect(result.sections[0].data.map((op) => op.id)).toEqual(["op2", "op1"]);
|
|
57
|
+
});
|
|
58
|
+
it("includes pending ops if not duplicated", () => {
|
|
59
|
+
const confirmed = createOp("op1", "2024-01-01T10:00:00Z", 5);
|
|
60
|
+
const pending = createOp("op2", "2024-01-02T10:00:00Z", 10, true);
|
|
61
|
+
const acc = createAccount({
|
|
62
|
+
confirmed: [confirmed],
|
|
63
|
+
pending: [pending],
|
|
64
|
+
});
|
|
65
|
+
const result = (0, groupOperations_1.groupAccountsOperationsByDay)([acc], { count: 10 });
|
|
66
|
+
expect(result.sections.length).toBe(2);
|
|
67
|
+
expect(result.sections[0].data.map((op) => op.id)).toEqual(["op2"]);
|
|
68
|
+
expect(result.sections[1].data.map((op) => op.id)).toEqual(["op1"]);
|
|
69
|
+
});
|
|
70
|
+
it("filters out pending ops with duplicate hash", () => {
|
|
71
|
+
const confirmed = createOp("op1", "2024-01-01T10:00:00Z", 5);
|
|
72
|
+
const pendingDuplicate = createOp("op1", "2024-01-02T10:00:00Z", 10, true); // same hash/id
|
|
73
|
+
const acc = createAccount({
|
|
74
|
+
confirmed: [confirmed],
|
|
75
|
+
pending: [pendingDuplicate],
|
|
76
|
+
});
|
|
77
|
+
const result = (0, groupOperations_1.groupAccountsOperationsByDay)([acc], { count: 10 });
|
|
78
|
+
expect(result.sections.length).toBe(1);
|
|
79
|
+
expect(result.sections[0].data.map((op) => op.id)).toEqual(["op1"]);
|
|
80
|
+
});
|
|
81
|
+
it("respects filterOperation if provided", () => {
|
|
82
|
+
const op1 = createOp("op1", "2024-01-01T10:00:00Z");
|
|
83
|
+
const op2 = createOp("op2", "2024-01-01T09:00:00Z");
|
|
84
|
+
const acc = createAccount({ confirmed: [op1, op2] });
|
|
85
|
+
const result = (0, groupOperations_1.groupAccountsOperationsByDay)([acc], {
|
|
86
|
+
count: 10,
|
|
87
|
+
filterOperation: (op) => op.id === "op1",
|
|
88
|
+
});
|
|
89
|
+
expect(result.sections.length).toBe(1);
|
|
90
|
+
expect(result.sections[0].data.map((op) => op.id)).toEqual(["op1"]);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=groupOperations.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupOperations.test.js","sourceRoot":"","sources":["../../src/account/groupOperations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending.d.ts","sourceRoot":"","sources":["../../src/account/pending.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"pending.d.ts","sourceRoot":"","sources":["../../src/account/pending.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AAO7E,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAerF;AAoCD,eAAO,MAAM,mBAAmB,YAAa,OAAO,aAAa,SAAS,KAAG,OAsB5E,CAAC"}
|
package/lib/account/pending.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addPendingOperation = exports.shouldRetainPendingOperation = void 0;
|
|
4
4
|
const live_env_1 = require("@ledgerhq/live-env");
|
|
5
|
+
/*
|
|
6
|
+
We want to discard pendingOperations if their transaction sequence number
|
|
7
|
+
has been out-numbered by the last operation...
|
|
8
|
+
*/
|
|
5
9
|
function shouldRetainPendingOperation(account, op) {
|
|
6
10
|
// FIXME: valueOf to compare dates in typescript
|
|
7
11
|
const delay = new Date().valueOf() - op.date.valueOf();
|
|
@@ -15,6 +19,22 @@ function shouldRetainPendingOperation(account, op) {
|
|
|
15
19
|
return delay < (0, live_env_1.getEnv)("OPERATION_OPTIMISTIC_RETENTION");
|
|
16
20
|
}
|
|
17
21
|
exports.shouldRetainPendingOperation = shouldRetainPendingOperation;
|
|
22
|
+
/**
|
|
23
|
+
* Appends a pending operation to the list, ensuring no duplicates based on transactionSequenceNumber.
|
|
24
|
+
*
|
|
25
|
+
* If another operation in the list has the same `transactionSequenceNumber` as the new one,
|
|
26
|
+
* it is removed first — the new one replaces it at the beginning of the list.
|
|
27
|
+
*
|
|
28
|
+
* This ensures optimistic operations (e.g., from RBF or retry logic) don't stack up multiple times
|
|
29
|
+
* when they refer to the same transaction.
|
|
30
|
+
*
|
|
31
|
+
* Note: If `transactionSequenceNumber` is `undefined`, all existing ops with `undefined` are preserved,
|
|
32
|
+
* which may lead to duplicates — this is acceptable for receive-only txs or ops with incomplete metadata.
|
|
33
|
+
*
|
|
34
|
+
* @param ops - Existing list of pending operations
|
|
35
|
+
* @param op - The new pending operation to insert
|
|
36
|
+
* @returns A new array with `op` prepended and any conflicting op removed
|
|
37
|
+
*/
|
|
18
38
|
const appendPendingOp = (ops, op) => {
|
|
19
39
|
const filtered = ops.filter(o => o.transactionSequenceNumber !== op.transactionSequenceNumber);
|
|
20
40
|
filtered.unshift(op);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/account/pending.ts"],"names":[],"mappings":";;;AACA,iDAA4C;AAE5C,SAAgB,4BAA4B,CAAC,OAAgB,EAAE,EAAa;IAC1E,gDAAgD;IAChD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,IACE,IAAI;QACJ,IAAI,CAAC,yBAAyB;QAC9B,EAAE,CAAC,yBAAyB;QAC5B,EAAE,CAAC,yBAAyB,IAAI,IAAI,CAAC,yBAAyB,EAC9D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,GAAG,IAAA,iBAAM,EAAC,gCAAgC,CAAC,CAAC;AAC1D,CAAC;AAfD,oEAeC;AAED,MAAM,eAAe,GAAG,CAAC,GAAgB,EAAE,EAAa,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAgB,GAAG,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,KAAK,EAAE,CAAC,yBAAyB,CAClE,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,SAAS,eAAe,CAAC,WAA2B,EAAE,EAAa;IACjE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,IAAI,GAAiB,EAAE,GAAG,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACpE,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/C,CAAC;AACH,CAAC;AAEM,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,SAAoB,EAAW,EAAE;IACrF,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IACnC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEhC,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,MAAM,GAAmB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACzB,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,IAAI,WAAW,CAAC,EAAE,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;QAC3C,WAAW,CAAC,iBAAiB,GAAG,eAAe,CAAC,WAAW,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC5F,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,MAAM,MAAM,GAAmB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnC,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAtBW,QAAA,mBAAmB,uBAsB9B"}
|
|
1
|
+
{"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/account/pending.ts"],"names":[],"mappings":";;;AACA,iDAA4C;AAE5C;;;EAGE;AACF,SAAgB,4BAA4B,CAAC,OAAgB,EAAE,EAAa;IAC1E,gDAAgD;IAChD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,IACE,IAAI;QACJ,IAAI,CAAC,yBAAyB;QAC9B,EAAE,CAAC,yBAAyB;QAC5B,EAAE,CAAC,yBAAyB,IAAI,IAAI,CAAC,yBAAyB,EAC9D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,GAAG,IAAA,iBAAM,EAAC,gCAAgC,CAAC,CAAC;AAC1D,CAAC;AAfD,oEAeC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,eAAe,GAAG,CAAC,GAAgB,EAAE,EAAa,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAgB,GAAG,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,KAAK,EAAE,CAAC,yBAAyB,CAClE,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,SAAS,eAAe,CAAC,WAA2B,EAAE,EAAa;IACjE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,IAAI,GAAiB,EAAE,GAAG,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACpE,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/C,CAAC;AACH,CAAC;AAEM,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,SAAoB,EAAW,EAAE;IACrF,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IACnC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEhC,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,MAAM,GAAmB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACzB,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,IAAI,WAAW,CAAC,EAAE,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;QAC3C,WAAW,CAAC,iBAAiB,GAAG,eAAe,CAAC,WAAW,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC5F,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,MAAM,MAAM,GAAmB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnC,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAtBW,QAAA,mBAAmB,uBAsB9B"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { Account, Operation } from "@ledgerhq/types-live";
|
|
2
|
+
export declare function createAccount(id: string): Account;
|
|
3
|
+
export declare function createOperation(accountId: string, sender?: string[], sequenceNumber?: number, date?: Date): Operation;
|
|
2
4
|
//# sourceMappingURL=pending.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending.test.d.ts","sourceRoot":"","sources":["../../src/account/pending.test.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"pending.test.d.ts","sourceRoot":"","sources":["../../src/account/pending.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AA2NxE,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAyBjD;AAmBD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,cAAc,CAAC,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,IAAI,GACV,SAAS,CAiBX"}
|
|
@@ -3,6 +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.createOperation = exports.createAccount = void 0;
|
|
6
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
7
8
|
const index_1 = require("@ledgerhq/cryptoassets/index");
|
|
8
9
|
const pending_1 = require("./pending");
|
|
@@ -154,6 +155,34 @@ describe("shouldRetainPendingOperation", () => {
|
|
|
154
155
|
// Then
|
|
155
156
|
expect(shouldRetainPending).toBe(true);
|
|
156
157
|
});
|
|
158
|
+
it("should replace existing pending operation with same transactionSequenceNumber", () => {
|
|
159
|
+
const account = createAccount("12");
|
|
160
|
+
const op1 = createOperation("12", ["addr"], 5);
|
|
161
|
+
const op2 = createOperation("12", ["addr"], 5); // same sequence
|
|
162
|
+
const result = (0, pending_1.addPendingOperation)((0, pending_1.addPendingOperation)(account, op1), op2);
|
|
163
|
+
expect(result.pendingOperations.length).toBe(1);
|
|
164
|
+
expect(result.pendingOperations[0]).toBe(op2);
|
|
165
|
+
});
|
|
166
|
+
it("should remove the pending operation when confirmed version appears in second sync", () => {
|
|
167
|
+
const account = createAccount("12");
|
|
168
|
+
const now = new Date();
|
|
169
|
+
const senders = ["abc"];
|
|
170
|
+
// First sync: we get a pending operation
|
|
171
|
+
const pendingOp = createOperation("12", senders, 42, now);
|
|
172
|
+
const withPending = (0, pending_1.addPendingOperation)(account, pendingOp);
|
|
173
|
+
expect(withPending.pendingOperations).toHaveLength(1);
|
|
174
|
+
expect(withPending.pendingOperations[0]).toBe(pendingOp);
|
|
175
|
+
// Second sync: confirmed operation shows up in the history
|
|
176
|
+
const confirmedOp = {
|
|
177
|
+
...pendingOp,
|
|
178
|
+
blockHeight: 100,
|
|
179
|
+
blockHash: "blockhash",
|
|
180
|
+
};
|
|
181
|
+
withPending.operations.push(confirmedOp);
|
|
182
|
+
// Should not retain pending now
|
|
183
|
+
const retain = (0, pending_1.shouldRetainPendingOperation)(withPending, pendingOp);
|
|
184
|
+
expect(retain).toBe(false);
|
|
185
|
+
});
|
|
157
186
|
});
|
|
158
187
|
function createAccount(id) {
|
|
159
188
|
const currency = (0, index_1.listCryptoCurrencies)(true)[0];
|
|
@@ -180,6 +209,7 @@ function createAccount(id) {
|
|
|
180
209
|
swapHistory: [],
|
|
181
210
|
};
|
|
182
211
|
}
|
|
212
|
+
exports.createAccount = createAccount;
|
|
183
213
|
function createTokenAccount(id) {
|
|
184
214
|
return {
|
|
185
215
|
type: "TokenAccount",
|
|
@@ -214,4 +244,5 @@ function createOperation(accountId, sender, sequenceNumber, date) {
|
|
|
214
244
|
extra: null,
|
|
215
245
|
};
|
|
216
246
|
}
|
|
247
|
+
exports.createOperation = createOperation;
|
|
217
248
|
//# sourceMappingURL=pending.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending.test.js","sourceRoot":"","sources":["../../src/account/pending.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pending.test.js","sourceRoot":"","sources":["../../src/account/pending.test.ts"],"names":[],"mappings":"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"}
|
package/lib/api/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Unit } from "@ledgerhq/types-cryptoassets";
|
|
1
2
|
export type BlockInfo = {
|
|
2
3
|
height: number;
|
|
3
4
|
hash?: string;
|
|
@@ -9,13 +10,23 @@ export type Asset<TokenInfo extends TokenInfoCommon = never> = {
|
|
|
9
10
|
} | (TokenInfo extends never ? TokenInfo : {
|
|
10
11
|
type: "token";
|
|
11
12
|
} & TokenInfo);
|
|
12
|
-
export type Operation<AssetInfo extends Asset<TokenInfoCommon
|
|
13
|
+
export type Operation<AssetInfo extends Asset<TokenInfoCommon> = Asset<TokenInfoCommon>, MemoType extends Memo = MemoNotSupported> = {
|
|
13
14
|
id: string;
|
|
14
15
|
type: string;
|
|
15
16
|
senders: string[];
|
|
16
17
|
recipients: string[];
|
|
17
18
|
value: bigint;
|
|
18
19
|
asset: AssetInfo;
|
|
20
|
+
/**
|
|
21
|
+
* Optional memo associated with the operation.
|
|
22
|
+
* Use a `Memo` interface like `StringMemo<"text">`, `MapMemo<Kind, Value>`, or `MyMemo`.
|
|
23
|
+
* Defaults to `MemoNotSupported`.
|
|
24
|
+
*/
|
|
25
|
+
memo?: MemoType;
|
|
26
|
+
/**
|
|
27
|
+
* Arbitrary per-blockchain extra fields.
|
|
28
|
+
* This can include things like status, error messages, swap info, etc.
|
|
29
|
+
*/
|
|
19
30
|
details?: Record<string, unknown>;
|
|
20
31
|
tx: {
|
|
21
32
|
hash: string;
|
|
@@ -30,32 +41,78 @@ export type Transaction = {
|
|
|
30
41
|
amount: bigint;
|
|
31
42
|
fee: bigint;
|
|
32
43
|
} & Record<string, unknown>;
|
|
44
|
+
export type Account = {
|
|
45
|
+
currencyName: string;
|
|
46
|
+
address: string;
|
|
47
|
+
balance: bigint;
|
|
48
|
+
currencyUnit: Unit;
|
|
49
|
+
};
|
|
33
50
|
export type Balance<AssetInfo extends Asset<TokenInfoCommon>> = {
|
|
34
51
|
value: bigint;
|
|
52
|
+
locked?: bigint;
|
|
35
53
|
asset: AssetInfo;
|
|
36
54
|
};
|
|
37
|
-
export
|
|
55
|
+
export interface Memo {
|
|
56
|
+
type: string;
|
|
57
|
+
}
|
|
58
|
+
export interface MemoNotSupported extends Memo {
|
|
59
|
+
type: "none";
|
|
60
|
+
}
|
|
61
|
+
export interface StringMemo<Kind extends string = "text"> extends Memo {
|
|
62
|
+
type: "string";
|
|
63
|
+
kind: Kind;
|
|
64
|
+
value: string;
|
|
65
|
+
}
|
|
66
|
+
export interface MapMemo<Kind extends string, Value> extends Memo {
|
|
67
|
+
type: "map";
|
|
68
|
+
memos: Map<Kind, Value>;
|
|
69
|
+
}
|
|
70
|
+
export interface TypedMapMemo<KindToValueMap extends Record<string, unknown>> extends Memo {
|
|
71
|
+
type: "map";
|
|
72
|
+
memos: Map<keyof KindToValueMap, KindToValueMap[keyof KindToValueMap]>;
|
|
73
|
+
}
|
|
74
|
+
type MaybeMemo<MemoType extends Memo> = MemoType extends MemoNotSupported ? {} : {
|
|
75
|
+
memo: MemoType;
|
|
76
|
+
};
|
|
77
|
+
export type TransactionIntent<AssetInfo extends Asset<TokenInfoCommon>, MemoType extends Memo = MemoNotSupported> = {
|
|
38
78
|
type: string;
|
|
39
|
-
sender:
|
|
79
|
+
sender: string;
|
|
80
|
+
senderPublicKey?: string;
|
|
81
|
+
expiration?: number;
|
|
40
82
|
recipient: string;
|
|
41
83
|
amount: bigint;
|
|
42
84
|
asset: AssetInfo;
|
|
43
|
-
} &
|
|
44
|
-
export type
|
|
85
|
+
} & MaybeMemo<MemoType>;
|
|
86
|
+
export type TransactionValidation = {
|
|
87
|
+
errors: Record<string, Error>;
|
|
88
|
+
warnings: Record<string, Error>;
|
|
89
|
+
estimatedFees: bigint;
|
|
90
|
+
amount: bigint;
|
|
91
|
+
totalSpent: bigint;
|
|
92
|
+
};
|
|
93
|
+
export type FeeEstimation = {
|
|
45
94
|
value: bigint;
|
|
46
|
-
parameters?:
|
|
95
|
+
parameters?: {
|
|
96
|
+
storageLimit: bigint;
|
|
97
|
+
gasLimit: bigint;
|
|
98
|
+
gasPrice?: bigint;
|
|
99
|
+
};
|
|
47
100
|
};
|
|
48
101
|
export type Pagination = {
|
|
49
102
|
minHeight: number;
|
|
50
103
|
};
|
|
51
|
-
export type
|
|
104
|
+
export type AlpacaApi<AssetInfo extends Asset<TokenInfoCommon>, MemoType extends Memo = MemoNotSupported> = {
|
|
52
105
|
broadcast: (tx: string) => Promise<string>;
|
|
53
|
-
combine: (tx: string, signature: string, pubkey?: string) => string
|
|
54
|
-
estimateFees: (transactionIntent: TransactionIntent<AssetInfo,
|
|
55
|
-
craftTransaction: (transactionIntent: TransactionIntent<AssetInfo,
|
|
106
|
+
combine: (tx: string, signature: string, pubkey?: string) => string | Promise<string>;
|
|
107
|
+
estimateFees: (transactionIntent: TransactionIntent<AssetInfo, MemoType>) => Promise<FeeEstimation>;
|
|
108
|
+
craftTransaction: (transactionIntent: TransactionIntent<AssetInfo, MemoType>, customFees?: bigint) => Promise<string>;
|
|
56
109
|
getBalance: (address: string) => Promise<Balance<AssetInfo>[]>;
|
|
57
110
|
lastBlock: () => Promise<BlockInfo>;
|
|
58
111
|
listOperations: (address: string, pagination: Pagination) => Promise<[Operation<AssetInfo>[], string]>;
|
|
59
112
|
};
|
|
113
|
+
export type BridgeApi = {
|
|
114
|
+
validateIntent: (account: Account, transaction: Transaction) => Promise<TransactionValidation>;
|
|
115
|
+
};
|
|
116
|
+
export type Api<AssetInfo extends Asset<TokenInfoCommon>, MemoType extends Memo = MemoNotSupported> = AlpacaApi<AssetInfo, MemoType> & BridgeApi;
|
|
60
117
|
export {};
|
|
61
118
|
//# sourceMappingURL=types.d.ts.map
|
package/lib/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,IAAI,CAAC,EAAE,IAAI,CAAC;CACb,CAAC;AAEF,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C,MAAM,MAAM,KAAK,CAAC,SAAS,SAAS,eAAe,GAAG,KAAK,IACvD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB,CAAC,SAAS,SAAS,KAAK,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC;AAE1E,MAAM,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts
CHANGED
|
@@ -25,6 +25,9 @@ export type CurrencyConfig = {
|
|
|
25
25
|
[key: string]: unknown;
|
|
26
26
|
};
|
|
27
27
|
export type CoinConfig<T extends CurrencyConfig> = (currency?: CryptoCurrency) => T;
|
|
28
|
+
export type SharedConfig = {
|
|
29
|
+
checkBlacklistAddress?: boolean;
|
|
30
|
+
};
|
|
28
31
|
declare function buildCoinConfig<T extends CurrencyConfig>(): {
|
|
29
32
|
setCoinConfig: (config: CoinConfig<T>) => void;
|
|
30
33
|
getCoinConfig: (currency?: CryptoCurrency) => T;
|