applesauce-wallet 0.0.0-next-20250310162525 → 0.0.0-next-20250310173615

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.
@@ -1,5 +1,27 @@
1
1
  import { combineLatest, filter, map, startWith } from "rxjs";
2
2
  import { getTokenDetails, isTokenDetailsLocked, WALLET_TOKEN_KIND } from "../helpers/tokens.js";
3
+ /** removes deleted events from sorted array */
4
+ function filterDeleted(tokens) {
5
+ const deleted = new Set();
6
+ return Array.from(tokens)
7
+ .reverse()
8
+ .filter((token) => {
9
+ // skip this event if it a newer event says its deleted
10
+ if (deleted.has(token.id))
11
+ return false;
12
+ // skip if token is locked
13
+ if (isTokenDetailsLocked(token))
14
+ return false;
15
+ else {
16
+ // add ids to deleted array
17
+ const details = getTokenDetails(token);
18
+ for (const id of details.del)
19
+ deleted.add(id);
20
+ }
21
+ return true;
22
+ })
23
+ .reverse();
24
+ }
3
25
  /** A query that subscribes to all token events for a wallet, passing locked will filter by token locked status */
4
26
  export function WalletTokensQuery(pubkey, locked) {
5
27
  return {
@@ -7,12 +29,16 @@ export function WalletTokensQuery(pubkey, locked) {
7
29
  run: (events) => {
8
30
  const updates = events.updates.pipe(filter((e) => e.kind === WALLET_TOKEN_KIND && e.pubkey === pubkey), startWith(undefined));
9
31
  const timeline = events.timeline({ kinds: [WALLET_TOKEN_KIND], authors: [pubkey] });
10
- return combineLatest([updates, timeline]).pipe(map(([_, tokens]) => {
32
+ return combineLatest([updates, timeline]).pipe(
33
+ // filter out locked tokens
34
+ map(([_, tokens]) => {
11
35
  if (locked === undefined)
12
36
  return tokens;
13
37
  else
14
38
  return tokens.filter((t) => isTokenDetailsLocked(t) === locked);
15
- }));
39
+ }),
40
+ // remove deleted events
41
+ map(filterDeleted));
16
42
  },
17
43
  };
18
44
  }
@@ -23,28 +49,15 @@ export function WalletBalanceQuery(pubkey) {
23
49
  run: (events) => {
24
50
  const updates = events.updates.pipe(filter((e) => e.kind === WALLET_TOKEN_KIND && e.pubkey === pubkey), startWith(undefined));
25
51
  const timeline = events.timeline({ kinds: [WALLET_TOKEN_KIND], authors: [pubkey] });
26
- return combineLatest([updates, timeline]).pipe(map(([_, tokens]) => {
27
- const deleted = new Set();
28
- return (tokens
29
- // count the tokens from newest to oldest (so del gets applied correctly)
30
- .reverse()
31
- .reduce((totals, token) => {
32
- // skip this event if it a newer event says its deleted
33
- if (deleted.has(token.id))
34
- return totals;
35
- // skip if token is locked
36
- if (isTokenDetailsLocked(token))
37
- return totals;
38
- const details = getTokenDetails(token);
39
- if (!details)
40
- return totals;
41
- // add deleted ids
42
- for (const id of details.del)
43
- deleted.add(id);
44
- const total = details.proofs.reduce((t, p) => t + p.amount, 0);
45
- return { ...totals, [details.mint]: (totals[details.mint] ?? 0) + total };
46
- }, {}));
47
- }));
52
+ return combineLatest([updates, timeline]).pipe(map(([_, tokens]) => tokens),
53
+ // filter out deleted tokens
54
+ map(filterDeleted),
55
+ // map tokens to totals
56
+ map((tokens) => tokens.reduce((totals, token) => {
57
+ const details = getTokenDetails(token);
58
+ const total = details.proofs.reduce((t, p) => t + p.amount, 0);
59
+ return { ...totals, [details.mint]: (totals[details.mint] ?? 0) + total };
60
+ }, {})));
48
61
  },
49
62
  };
50
63
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "applesauce-wallet",
3
- "version": "0.0.0-next-20250310162525",
3
+ "version": "0.0.0-next-20250310173615",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -42,7 +42,7 @@
42
42
  }
43
43
  },
44
44
  "dependencies": {
45
- "applesauce-core": "0.0.0-next-20250310162525",
45
+ "applesauce-core": "0.0.0-next-20250310173615",
46
46
  "nostr-tools": "^2.10.4",
47
47
  "rxjs": "^7.8.1"
48
48
  },