@photon-ai/advanced-imessage-kit 1.11.1 → 1.11.4
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/README.md +1 -0
- package/dist/index.cjs +53 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +53 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -22,11 +22,14 @@ var Logger = class extends EventEmitter$1 {
|
|
|
22
22
|
this.tag = tag;
|
|
23
23
|
this.logLevel = level;
|
|
24
24
|
if (logToFile) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
fs.
|
|
25
|
+
try {
|
|
26
|
+
const logDir = path.join(os.homedir(), "Library", "Logs", "AdvancedIMessageKit");
|
|
27
|
+
if (!fs.existsSync(logDir)) {
|
|
28
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
this.logFile = path.join(logDir, "sdk.log");
|
|
31
|
+
} catch {
|
|
28
32
|
}
|
|
29
|
-
this.logFile = path.join(logDir, "sdk.log");
|
|
30
33
|
}
|
|
31
34
|
}
|
|
32
35
|
setLogLevel(level) {
|
|
@@ -91,16 +94,20 @@ var Logger = class extends EventEmitter$1 {
|
|
|
91
94
|
// lib/Loggable.ts
|
|
92
95
|
var loggers = {};
|
|
93
96
|
var globalLogLevel = "info";
|
|
97
|
+
var globalLogToFile = true;
|
|
94
98
|
var setGlobalLogLevel = (level) => {
|
|
95
99
|
globalLogLevel = level;
|
|
96
100
|
Object.values(loggers).forEach((logger) => {
|
|
97
101
|
logger.setLogLevel(level);
|
|
98
102
|
});
|
|
99
103
|
};
|
|
104
|
+
var setGlobalLogToFile = (logToFile) => {
|
|
105
|
+
globalLogToFile = logToFile;
|
|
106
|
+
};
|
|
100
107
|
var getLogger = (tag) => {
|
|
101
108
|
let logger = loggers[tag];
|
|
102
109
|
if (!logger) {
|
|
103
|
-
logger = new Logger(tag, globalLogLevel);
|
|
110
|
+
logger = new Logger(tag, globalLogLevel, globalLogToFile);
|
|
104
111
|
loggers[tag] = logger;
|
|
105
112
|
}
|
|
106
113
|
return logger;
|
|
@@ -740,6 +747,8 @@ var _AdvancedIMessageKit = class _AdvancedIMessageKit extends EventEmitter {
|
|
|
740
747
|
// the same message content with different GUIDs due to unstable Socket.IO connections.
|
|
741
748
|
// This is especially problematic when the polling transport causes connection issues.
|
|
742
749
|
__publicField(this, "processedMessages", /* @__PURE__ */ new Set());
|
|
750
|
+
// Last message timestamp for reconnect recovery
|
|
751
|
+
__publicField(this, "lastMessageTime", 0);
|
|
743
752
|
// Send queue for sequential message delivery
|
|
744
753
|
//
|
|
745
754
|
// Purpose: Ensure all outgoing messages (text, attachments, stickers, etc.) from
|
|
@@ -759,8 +768,12 @@ var _AdvancedIMessageKit = class _AdvancedIMessageKit extends EventEmitter {
|
|
|
759
768
|
this.config = {
|
|
760
769
|
serverUrl: "http://localhost:1234",
|
|
761
770
|
logLevel: "info",
|
|
771
|
+
logToFile: true,
|
|
762
772
|
...config
|
|
763
773
|
};
|
|
774
|
+
if (this.config.logToFile === false) {
|
|
775
|
+
setGlobalLogToFile(false);
|
|
776
|
+
}
|
|
764
777
|
if (this.config.logLevel) {
|
|
765
778
|
setGlobalLogLevel(this.config.logLevel);
|
|
766
779
|
}
|
|
@@ -877,6 +890,9 @@ var _AdvancedIMessageKit = class _AdvancedIMessageKit extends EventEmitter {
|
|
|
877
890
|
return;
|
|
878
891
|
}
|
|
879
892
|
this.processedMessages.add(message.guid);
|
|
893
|
+
if (message.dateCreated && message.dateCreated > this.lastMessageTime) {
|
|
894
|
+
this.lastMessageTime = message.dateCreated;
|
|
895
|
+
}
|
|
880
896
|
}
|
|
881
897
|
}
|
|
882
898
|
if (args.length > 0) {
|
|
@@ -907,10 +923,11 @@ var _AdvancedIMessageKit = class _AdvancedIMessageKit extends EventEmitter {
|
|
|
907
923
|
this.socket.io.on("reconnect_failed", () => {
|
|
908
924
|
this.logger.error("All reconnection attempts failed");
|
|
909
925
|
});
|
|
910
|
-
this.socket.on("auth-ok", () => {
|
|
926
|
+
this.socket.on("auth-ok", async () => {
|
|
911
927
|
this.logger.info("Authentication successful");
|
|
912
928
|
if (!this.readyEmitted) {
|
|
913
929
|
this.readyEmitted = true;
|
|
930
|
+
await this.recoverMissedMessages();
|
|
914
931
|
this.emit("ready");
|
|
915
932
|
}
|
|
916
933
|
});
|
|
@@ -918,12 +935,13 @@ var _AdvancedIMessageKit = class _AdvancedIMessageKit extends EventEmitter {
|
|
|
918
935
|
this.logger.error(`Authentication failed: ${error.message} ${error.reason ? `(${error.reason})` : ""}`);
|
|
919
936
|
this.emit("error", new Error(`Authentication failed: ${error.message}`));
|
|
920
937
|
});
|
|
921
|
-
this.socket.on("connect", () => {
|
|
938
|
+
this.socket.on("connect", async () => {
|
|
922
939
|
this.logger.info("Connected to iMessage server, waiting for authentication...");
|
|
923
940
|
if (!this.config.apiKey) {
|
|
924
941
|
this.logger.info("No API key provided, skipping authentication (legacy server mode)");
|
|
925
942
|
if (!this.readyEmitted) {
|
|
926
943
|
this.readyEmitted = true;
|
|
944
|
+
await this.recoverMissedMessages();
|
|
927
945
|
this.emit("ready");
|
|
928
946
|
}
|
|
929
947
|
}
|
|
@@ -935,6 +953,33 @@ var _AdvancedIMessageKit = class _AdvancedIMessageKit extends EventEmitter {
|
|
|
935
953
|
async close() {
|
|
936
954
|
this.socket.disconnect();
|
|
937
955
|
}
|
|
956
|
+
async recoverMissedMessages() {
|
|
957
|
+
if (this.lastMessageTime <= 0) return;
|
|
958
|
+
try {
|
|
959
|
+
const after = this.lastMessageTime;
|
|
960
|
+
const messages = await this.messages.getMessages({
|
|
961
|
+
after,
|
|
962
|
+
sort: "ASC",
|
|
963
|
+
limit: 100
|
|
964
|
+
});
|
|
965
|
+
if (messages.length === 0) {
|
|
966
|
+
this.logger.debug("No missed messages to recover");
|
|
967
|
+
return;
|
|
968
|
+
}
|
|
969
|
+
this.logger.info(`Recovering ${messages.length} missed message(s)`);
|
|
970
|
+
for (const msg of messages) {
|
|
971
|
+
if (msg.guid && !this.processedMessages.has(msg.guid)) {
|
|
972
|
+
this.processedMessages.add(msg.guid);
|
|
973
|
+
if (msg.dateCreated && msg.dateCreated > this.lastMessageTime) {
|
|
974
|
+
this.lastMessageTime = msg.dateCreated;
|
|
975
|
+
}
|
|
976
|
+
super.emit("new-message", msg);
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
} catch (e) {
|
|
980
|
+
this.logger.warn(`Failed to recover missed messages: ${e}`);
|
|
981
|
+
}
|
|
982
|
+
}
|
|
938
983
|
/**
|
|
939
984
|
* Clear processed message records (prevent memory leaks)
|
|
940
985
|
* @param maxSize Maximum number of messages to retain, default 1000
|
|
@@ -1147,6 +1192,6 @@ function getPollOneLiner(message) {
|
|
|
1147
1192
|
return "[Poll]";
|
|
1148
1193
|
}
|
|
1149
1194
|
|
|
1150
|
-
export { AdvancedIMessageKit, CHAT_READ_STATUS_CHANGED, FT_CALL_STATUS_CHANGED, GROUP_ICON_CHANGED, GROUP_ICON_REMOVED, GROUP_NAME_CHANGE, HELLO_WORLD, IMESSAGE_ALIASES_REMOVED, INCOMING_FACETIME, MESSAGE_SEND_ERROR, MESSAGE_UPDATED, NEW_FINDMY_LOCATION, NEW_MESSAGE, NEW_SERVER, PARTICIPANT_ADDED, PARTICIPANT_LEFT, PARTICIPANT_REMOVED, SCHEDULED_MESSAGE_CREATED, SCHEDULED_MESSAGE_DELETED, SCHEDULED_MESSAGE_ERROR, SCHEDULED_MESSAGE_SENT, SCHEDULED_MESSAGE_UPDATED, SDK, SERVER_UPDATE, SERVER_UPDATE_DOWNLOADING, SERVER_UPDATE_INSTALLING, SETTINGS_BACKUP_CREATED, SETTINGS_BACKUP_DELETED, SETTINGS_BACKUP_UPDATED, THEME_BACKUP_CREATED, THEME_BACKUP_DELETED, THEME_BACKUP_UPDATED, TYPING_INDICATOR, getLogger, getOptionTextById, getPollOneLiner, getPollSummary, isPollMessage, isPollVote, parsePollDefinition, parsePollVotes, setGlobalLogLevel };
|
|
1195
|
+
export { AdvancedIMessageKit, CHAT_READ_STATUS_CHANGED, FT_CALL_STATUS_CHANGED, GROUP_ICON_CHANGED, GROUP_ICON_REMOVED, GROUP_NAME_CHANGE, HELLO_WORLD, IMESSAGE_ALIASES_REMOVED, INCOMING_FACETIME, MESSAGE_SEND_ERROR, MESSAGE_UPDATED, NEW_FINDMY_LOCATION, NEW_MESSAGE, NEW_SERVER, PARTICIPANT_ADDED, PARTICIPANT_LEFT, PARTICIPANT_REMOVED, SCHEDULED_MESSAGE_CREATED, SCHEDULED_MESSAGE_DELETED, SCHEDULED_MESSAGE_ERROR, SCHEDULED_MESSAGE_SENT, SCHEDULED_MESSAGE_UPDATED, SDK, SERVER_UPDATE, SERVER_UPDATE_DOWNLOADING, SERVER_UPDATE_INSTALLING, SETTINGS_BACKUP_CREATED, SETTINGS_BACKUP_DELETED, SETTINGS_BACKUP_UPDATED, THEME_BACKUP_CREATED, THEME_BACKUP_DELETED, THEME_BACKUP_UPDATED, TYPING_INDICATOR, getLogger, getOptionTextById, getPollOneLiner, getPollSummary, isPollMessage, isPollVote, parsePollDefinition, parsePollVotes, setGlobalLogLevel, setGlobalLogToFile };
|
|
1151
1196
|
//# sourceMappingURL=index.js.map
|
|
1152
1197
|
//# sourceMappingURL=index.js.map
|