spectrum-ts 1.9.0 → 1.9.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.
@@ -578,8 +578,6 @@ var MessageCache = class {
578
578
  var PollCache = class {
579
579
  map = /* @__PURE__ */ new Map();
580
580
  max;
581
- selectionEventTimesByPoll = /* @__PURE__ */ new Map();
582
- selectionsByPoll = /* @__PURE__ */ new Map();
583
581
  constructor(max = DEFAULT_MAX) {
584
582
  this.max = max;
585
583
  }
@@ -595,61 +593,11 @@ var PollCache = class {
595
593
  const first = this.map.keys().next().value;
596
594
  if (first !== void 0) {
597
595
  this.map.delete(first);
598
- this.selectionEventTimesByPoll.delete(first);
599
- this.selectionsByPoll.delete(first);
600
596
  }
601
597
  }
602
598
  }
603
599
  clear() {
604
600
  this.map.clear();
605
- this.selectionEventTimesByPoll.clear();
606
- this.selectionsByPoll.clear();
607
- }
608
- actorSelectionDeltas(pollId, actorId, optionIds) {
609
- const previous = this.selectionsByPoll.get(pollId)?.get(actorId);
610
- if (!previous) {
611
- return optionIds.map((optionId) => ({ optionId, selected: true }));
612
- }
613
- const current = new Set(optionIds);
614
- const selected = optionIds.filter((optionId) => !previous.has(optionId)).map((optionId) => ({ optionId, selected: true }));
615
- const deselected = [...previous].filter((optionId) => !current.has(optionId)).map((optionId) => ({ optionId, selected: false }));
616
- return [...selected, ...deselected];
617
- }
618
- clearedActorSelectionDeltas(pollId, actorId) {
619
- const previous = this.selectionsByPoll.get(pollId)?.get(actorId);
620
- if (!previous) {
621
- return [];
622
- }
623
- return [...previous].map((optionId) => ({ optionId, selected: false }));
624
- }
625
- actorSelection(pollId, actorId) {
626
- const selection = this.selectionsByPoll.get(pollId)?.get(actorId);
627
- return selection ? [...selection] : void 0;
628
- }
629
- commitActorSelection(pollId, actorId, optionIds, at) {
630
- let selections = this.selectionsByPoll.get(pollId);
631
- if (!selections) {
632
- selections = /* @__PURE__ */ new Map();
633
- this.selectionsByPoll.set(pollId, selections);
634
- }
635
- selections.set(actorId, new Set(optionIds));
636
- if (!at) {
637
- return;
638
- }
639
- let eventTimes = this.selectionEventTimesByPoll.get(pollId);
640
- if (!eventTimes) {
641
- eventTimes = /* @__PURE__ */ new Map();
642
- this.selectionEventTimesByPoll.set(pollId, eventTimes);
643
- }
644
- const eventTime = at.getTime();
645
- const previousTime = eventTimes.get(actorId);
646
- if (previousTime === void 0 || eventTime >= previousTime) {
647
- eventTimes.set(actorId, eventTime);
648
- }
649
- }
650
- isStaleActorSelectionEvent(pollId, actorId, at) {
651
- const previousTime = this.selectionEventTimesByPoll.get(pollId)?.get(actorId);
652
- return previousTime !== void 0 && at.getTime() < previousTime;
653
601
  }
654
602
  };
655
603
  var messageCaches = /* @__PURE__ */ new WeakMap();
@@ -1711,8 +1659,7 @@ var fetchPollInfo = async (client, cache, event) => {
1711
1659
  }
1712
1660
  };
1713
1661
  var resolvePoll = async (client, cache, event) => {
1714
- const pollId = event.pollMessageGuid;
1715
- const cached = cache.get(pollId);
1662
+ const cached = cache.get(event.pollMessageGuid);
1716
1663
  if (cached) {
1717
1664
  return cached;
1718
1665
  }
@@ -1747,25 +1694,6 @@ var buildPollOptionMessage = (input) => {
1747
1694
  })
1748
1695
  };
1749
1696
  };
1750
- var buildPollOptionMessages = (input) => {
1751
- const messages5 = [];
1752
- for (const delta of input.deltas) {
1753
- const message = buildPollOptionMessage({
1754
- cached: input.cached,
1755
- chatGuid: input.chatGuid,
1756
- event: input.event,
1757
- optionId: delta.optionId,
1758
- phone: input.phone,
1759
- selected: delta.selected,
1760
- senderAddress: input.senderAddress
1761
- });
1762
- if (message) {
1763
- messages5.push(message);
1764
- }
1765
- }
1766
- return messages5;
1767
- };
1768
- var allOptionIdsKnown = (cached, optionIds) => optionIds.every((optionId) => cached.optionsByIdentifier.has(optionId));
1769
1697
  var refreshPollMetadata = async (client, pollCache, event) => {
1770
1698
  const info = await fetchPollInfo(client, pollCache, event);
1771
1699
  if (!info) {
@@ -1773,94 +1701,39 @@ var refreshPollMetadata = async (client, pollCache, event) => {
1773
1701
  }
1774
1702
  return pollCache.get(info.pollMessageGuid);
1775
1703
  };
1776
- var toPollVoteMessages = async (client, pollCache, event, phone) => {
1704
+ var toPollOptionMessage = async (client, pollCache, event, phone) => {
1777
1705
  const senderAddress = event.actor?.address;
1778
- if (!senderAddress) {
1779
- return [];
1780
- }
1781
- const pollId = event.pollMessageGuid;
1782
- if (pollCache.isStaleActorSelectionEvent(
1783
- pollId,
1784
- senderAddress,
1785
- event.occurredAt
1786
- )) {
1706
+ const optionId = event.delta.optionIdentifier;
1707
+ if (!(senderAddress && optionId)) {
1787
1708
  return [];
1788
1709
  }
1789
- const cached = await resolvePoll(client, pollCache, event);
1710
+ let cached = await resolvePoll(client, pollCache, event);
1790
1711
  if (!cached) {
1791
1712
  return [];
1792
1713
  }
1793
- const chatGuidStr = event.chatGuid;
1794
- const currentOptionIds = [event.delta.optionIdentifier];
1795
- let resolvedPoll = cached;
1796
- if (currentOptionIds.some(
1797
- (optionId) => !resolvedPoll.optionsByIdentifier.has(optionId)
1798
- )) {
1799
- const snapshot = await refreshPollMetadata(client, pollCache, event);
1800
- if (snapshot) {
1801
- resolvedPoll = snapshot;
1714
+ if (!cached.optionsByIdentifier.has(optionId)) {
1715
+ const refreshed = await refreshPollMetadata(client, pollCache, event);
1716
+ if (refreshed) {
1717
+ cached = refreshed;
1802
1718
  }
1803
1719
  }
1804
- if (!allOptionIdsKnown(resolvedPoll, currentOptionIds)) {
1805
- return [];
1806
- }
1807
- const deltas = pollCache.actorSelectionDeltas(
1808
- pollId,
1809
- senderAddress,
1810
- currentOptionIds
1811
- );
1812
- const messages5 = buildPollOptionMessages({
1813
- cached: resolvedPoll,
1814
- chatGuid: chatGuidStr,
1815
- deltas,
1816
- event,
1817
- phone,
1818
- senderAddress
1819
- });
1820
- pollCache.commitActorSelection(
1821
- pollId,
1822
- senderAddress,
1823
- currentOptionIds,
1824
- event.occurredAt
1825
- );
1826
- return messages5;
1827
- };
1828
- var toPollUnvoteMessages = async (client, pollCache, event, phone) => {
1829
- const senderAddress = event.actor?.address;
1830
- if (!senderAddress) {
1831
- return [];
1832
- }
1833
- const pollId = event.pollMessageGuid;
1834
- if (pollCache.isStaleActorSelectionEvent(
1835
- pollId,
1836
- senderAddress,
1837
- event.occurredAt
1838
- )) {
1839
- return [];
1840
- }
1841
- const cached = await resolvePoll(client, pollCache, event);
1842
- if (!cached) {
1843
- return [];
1844
- }
1845
- const chatGuidStr = event.chatGuid;
1846
- const deltas = pollCache.clearedActorSelectionDeltas(pollId, senderAddress);
1847
- const messages5 = buildPollOptionMessages({
1720
+ const message = buildPollOptionMessage({
1848
1721
  cached,
1849
- chatGuid: chatGuidStr,
1850
- deltas,
1722
+ chatGuid: event.chatGuid,
1851
1723
  event,
1724
+ optionId,
1852
1725
  phone,
1726
+ selected: event.delta.type === "voted",
1853
1727
  senderAddress
1854
1728
  });
1855
- pollCache.commitActorSelection(pollId, senderAddress, [], event.occurredAt);
1856
- return messages5;
1729
+ return message ? [message] : [];
1857
1730
  };
1858
1731
  var toPollDeltaMessages = async (client, pollCache, event, phone) => {
1859
1732
  if (isVotedPollEvent(event)) {
1860
- return toPollVoteMessages(client, pollCache, event, phone);
1733
+ return toPollOptionMessage(client, pollCache, event, phone);
1861
1734
  }
1862
1735
  if (isUnvotedPollEvent(event)) {
1863
- return toPollUnvoteMessages(client, pollCache, event, phone);
1736
+ return toPollOptionMessage(client, pollCache, event, phone);
1864
1737
  }
1865
1738
  return [];
1866
1739
  };
@@ -1875,7 +1748,7 @@ var isRetryableIMessageStreamError = (error) => {
1875
1748
  }
1876
1749
  return false;
1877
1750
  };
1878
- var isEventFromCurrentAccount = (event, phone) => phone !== SHARED_PHONE && event.actor?.address !== void 0 && event.actor.address === phone;
1751
+ var isEventFromCurrentAccount = (event, phone) => event.isFromMe || phone !== SHARED_PHONE && event.actor?.address !== void 0 && event.actor.address === phone;
1879
1752
  var toMessageItem = async (client, event, phone, cursor) => {
1880
1753
  if (event.type === "message.received") {
1881
1754
  if (event.message.isFromMe) {
@@ -2,7 +2,7 @@ import {
2
2
  background,
3
3
  effect,
4
4
  imessage
5
- } from "../../chunk-OM5VSKWD.js";
5
+ } from "../../chunk-3RBWEAQQ.js";
6
6
  import "../../chunk-5NHNMN4H.js";
7
7
  import "../../chunk-HWADNTQF.js";
8
8
  import "../../chunk-XZSBR26X.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  imessage
3
- } from "../chunk-OM5VSKWD.js";
3
+ } from "../chunk-3RBWEAQQ.js";
4
4
  import "../chunk-5NHNMN4H.js";
5
5
  import {
6
6
  terminal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spectrum-ts",
3
- "version": "1.9.0",
3
+ "version": "1.9.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -23,7 +23,7 @@
23
23
  }
24
24
  },
25
25
  "dependencies": {
26
- "@photon-ai/advanced-imessage": "^0.7.0",
26
+ "@photon-ai/advanced-imessage": "^0.7.2",
27
27
  "@photon-ai/imessage-kit": "^3.0.0",
28
28
  "@photon-ai/otel": "^0.1.1",
29
29
  "@photon-ai/whatsapp-business": "^0.1.1",