@zhin.js/plugin-rss 1.1.9 → 1.1.10
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 +8 -0
- package/commands/rss-add/[url]/index.js +12 -10
- package/commands/rss-add/[url]/index.ts +12 -10
- package/commands/rss-check/[[url]]/index.js +8 -7
- package/commands/rss-check/[[url]]/index.ts +8 -7
- package/commands/rss-list/index.js +9 -7
- package/commands/rss-list/index.ts +9 -7
- package/commands/rss-preview/[url]/index.js +7 -6
- package/commands/rss-preview/[url]/index.ts +7 -6
- package/commands/rss-remove/[url]/index.js +8 -7
- package/commands/rss-remove/[url]/index.ts +8 -7
- package/lib/admin-i18n.d.ts +219 -0
- package/lib/admin-i18n.d.ts.map +1 -0
- package/lib/admin-i18n.js +216 -0
- package/lib/admin-i18n.js.map +1 -0
- package/lib/admin-tasks.d.ts +40 -2
- package/lib/admin-tasks.d.ts.map +1 -1
- package/lib/admin-tasks.js +99 -72
- package/lib/admin-tasks.js.map +1 -1
- package/lib/channel.d.ts +2 -1
- package/lib/channel.d.ts.map +1 -1
- package/lib/channel.js +3 -3
- package/lib/channel.js.map +1 -1
- package/lib/feed.d.ts +2 -1
- package/lib/feed.d.ts.map +1 -1
- package/lib/feed.js +6 -5
- package/lib/feed.js.map +1 -1
- package/lib/i18n.d.ts +2 -0
- package/lib/i18n.d.ts.map +1 -0
- package/lib/i18n.js +168 -0
- package/lib/i18n.js.map +1 -0
- package/lib/poll.d.ts +3 -1
- package/lib/poll.d.ts.map +1 -1
- package/lib/poll.js +23 -18
- package/lib/poll.js.map +1 -1
- package/lib/quiet-hours.d.ts +5 -0
- package/lib/quiet-hours.d.ts.map +1 -1
- package/lib/quiet-hours.js +9 -4
- package/lib/quiet-hours.js.map +1 -1
- package/lib/runtime.d.ts +3 -0
- package/lib/runtime.d.ts.map +1 -1
- package/lib/runtime.js.map +1 -1
- package/lib/storage.d.ts.map +1 -1
- package/lib/storage.js +6 -5
- package/lib/storage.js.map +1 -1
- package/package.json +7 -7
- package/plugin.js +6 -2
- package/schema.json +6 -1
- package/skills/rss/tools/rss_list_subscriptions/index.js +4 -3
- package/skills/rss/tools/rss_list_subscriptions/index.ts +4 -3
- package/skills/rss/tools/rss_preview_feed/index.js +4 -3
- package/skills/rss/tools/rss_preview_feed/index.ts +4 -3
- package/src/admin-i18n.ts +218 -0
- package/src/admin-tasks.ts +95 -72
- package/src/channel.ts +4 -2
- package/src/feed.ts +7 -5
- package/src/i18n.ts +168 -0
- package/src/poll.ts +24 -18
- package/src/quiet-hours.ts +11 -4
- package/src/runtime.ts +3 -0
- package/src/storage.ts +6 -5
package/lib/feed.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Locale } from 'zhin.js/i18n';
|
|
1
2
|
export interface FeedItem {
|
|
2
3
|
title: string;
|
|
3
4
|
link: string;
|
|
@@ -25,5 +26,5 @@ export declare function fetchFeed(url: string, timeout?: number): Promise<{
|
|
|
25
26
|
title: string;
|
|
26
27
|
items: FeedItem[];
|
|
27
28
|
}>;
|
|
28
|
-
export declare function formatFeedPreview(title: string, items: FeedItem[]): string;
|
|
29
|
+
export declare function formatFeedPreview(title: string, items: FeedItem[], locale?: Locale): string;
|
|
29
30
|
//# sourceMappingURL=feed.d.ts.map
|
package/lib/feed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,kBAAkB,EAAE,SAKhC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS,CAE/E;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgC9C;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,SAA6B,GACnC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,CAiB/C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,GAAE,MAAgB,GAAG,MAAM,CAWpG"}
|
package/lib/feed.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { rssMessages as t } from './i18n.js';
|
|
1
2
|
/**
|
|
2
3
|
* RSS feed fetch/preview helpers (no Plugin host).
|
|
3
4
|
*/
|
|
@@ -70,20 +71,20 @@ export async function fetchFeed(url, timeout = DEFAULT_RSS_CONFIG.timeout) {
|
|
|
70
71
|
}));
|
|
71
72
|
return { title: (feed.title || url).trim(), items };
|
|
72
73
|
}
|
|
73
|
-
export function formatFeedPreview(title, items) {
|
|
74
|
+
export function formatFeedPreview(title, items, locale = 'zh-CN') {
|
|
74
75
|
if (items.length === 0)
|
|
75
|
-
return
|
|
76
|
-
const lines = [
|
|
76
|
+
return t(locale, 'previewEmpty', { title });
|
|
77
|
+
const lines = [t(locale, 'previewTitle', { title, count: items.length })];
|
|
77
78
|
for (const item of items.slice(0, 5)) {
|
|
78
79
|
lines.push('');
|
|
79
80
|
lines.push(`${item.title}`);
|
|
80
81
|
if (item.date)
|
|
81
|
-
lines.push(` ${new Date(item.date).toLocaleString(
|
|
82
|
+
lines.push(` ${new Date(item.date).toLocaleString(locale)}`);
|
|
82
83
|
if (item.link)
|
|
83
84
|
lines.push(` ${item.link}`);
|
|
84
85
|
}
|
|
85
86
|
if (items.length > 5)
|
|
86
|
-
lines.push(
|
|
87
|
+
lines.push(t(locale, 'more', { count: items.length - 5 }));
|
|
87
88
|
return lines.join('\n');
|
|
88
89
|
}
|
|
89
90
|
//# sourceMappingURL=feed.js.map
|
package/lib/feed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AAC7C;;GAEG;AACH,OAAO,MAAM,MAAM,YAAY,CAAC;AAiBhC,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,QAAQ,EAAE,eAAe;IACzB,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,GAAmC;IAClE,OAAO,EAAE,GAAG,kBAAkB,EAAE,GAAG,GAAG,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACpB,IAAI,EAAE,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBACb,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,mCAAmC;YACnC,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/C,YAAY,GAAG,IAAI,CAAC;YACpB,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,YAAY,GAAG,IAAI,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,YAAY,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,IAAI,GAAG,CAAC;QAC/C,YAAY,GAAG,KAAK,CAAC;QACrB,GAAG,IAAI,EAAE,CAAC;QACV,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,OAAO,GAAG,kBAAkB,CAAC,OAAO;IAEpC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,OAAO;QACP,OAAO,EAAE;YACP,YAAY,EAAE,iBAAiB;YAC/B,MAAM,EAAE,sEAAsE;SAC/E;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAe,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAChC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE;QACxC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAC3E,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;KACjD,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,KAAiB,EAAE,SAAiB,OAAO;IAC1F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/lib/i18n.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const rssMessages: (locale: import("zhin.js").Locale | undefined, key: "notFound" | "noNew" | "toolPreviewEmpty" | "toolPreviewFailed" | "allEmpty" | "allList" | "databaseUnavailable" | "databaseRetry" | "urlRequired" | "httpRequired" | "existing" | "limit" | "loadFailed" | "added" | "empty" | "addHint" | "unknownTitle" | "list" | "notSubscribed" | "noSubscriptions" | "removeUrl" | "removed" | "previewFailed" | "channelRequired" | "unsupportedAddress" | "previewEmpty" | "previewTitle" | "more" | "newItems" | "moreSource" | "checkFailed" | "nothingToCheck" | "pushed" | "notPushed" | "localOnly" | "checked" | "checkedEmpty" | "noFeeds" | "summaryTitle" | "summaryHeading" | "atLeast" | "source" | "untitled" | "summaryMore", values?: import("zhin.js").MessageValues) => string;
|
|
2
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,6vBAqKtB,CAAC"}
|
package/lib/i18n.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { createMessages } from 'zhin.js/i18n';
|
|
2
|
+
export const rssMessages = createMessages({
|
|
3
|
+
toolPreviewEmpty: { 'zh-CN': '{title}: 无内容', en: '{title}: No items' },
|
|
4
|
+
toolPreviewFailed: { 'zh-CN': '解析失败: {error}', en: 'Parsing failed: {error}' },
|
|
5
|
+
allEmpty: { 'zh-CN': '暂无任何 RSS 订阅', en: 'There are no RSS subscriptions' },
|
|
6
|
+
allList: { 'zh-CN': 'RSS 订阅总览 ({count} 条):\n{items}', en: 'RSS subscriptions ({count}):\n{items}' },
|
|
7
|
+
"databaseUnavailable": {
|
|
8
|
+
"zh-CN": "RSS 数据库尚未就绪",
|
|
9
|
+
"en": "The RSS database is not ready"
|
|
10
|
+
},
|
|
11
|
+
"databaseRetry": {
|
|
12
|
+
"zh-CN": "RSS 数据库尚未就绪,请稍后重试",
|
|
13
|
+
"en": "The RSS database is not ready; try again later"
|
|
14
|
+
},
|
|
15
|
+
"urlRequired": {
|
|
16
|
+
"zh-CN": "请提供 RSS 源地址",
|
|
17
|
+
"en": "Provide an RSS feed URL"
|
|
18
|
+
},
|
|
19
|
+
"httpRequired": {
|
|
20
|
+
"zh-CN": "请提供有效的 HTTP/HTTPS 地址",
|
|
21
|
+
"en": "Provide a valid HTTP/HTTPS URL"
|
|
22
|
+
},
|
|
23
|
+
"existing": {
|
|
24
|
+
"zh-CN": "当前会话已订阅该源,无需重复添加",
|
|
25
|
+
"en": "This conversation already subscribes to that feed"
|
|
26
|
+
},
|
|
27
|
+
"limit": {
|
|
28
|
+
"zh-CN": "当前会话订阅数已达上限 ({max}),请先取消一些",
|
|
29
|
+
"en": "This conversation has reached its subscription limit ({max}); remove a subscription first"
|
|
30
|
+
},
|
|
31
|
+
"loadFailed": {
|
|
32
|
+
"zh-CN": "无法解析该地址: {error}\n请确认是有效的 RSS/Atom 源",
|
|
33
|
+
"en": "Could not parse this URL: {error}\nCheck that it is a valid RSS/Atom feed"
|
|
34
|
+
},
|
|
35
|
+
"added": {
|
|
36
|
+
"zh-CN": "订阅成功!\n源: {feed}\n新内容将在轮询时推送到本会话(需 OutboundHost)",
|
|
37
|
+
"en": "Subscribed!\nFeed: {feed}\nNew items will be sent to this conversation when polled (requires OutboundHost)"
|
|
38
|
+
},
|
|
39
|
+
"empty": {
|
|
40
|
+
"zh-CN": "当前会话没有订阅任何 RSS 源",
|
|
41
|
+
"en": "This conversation has no RSS subscriptions"
|
|
42
|
+
},
|
|
43
|
+
"addHint": {
|
|
44
|
+
"zh-CN": "使用 {command} <URL> 添加订阅",
|
|
45
|
+
"en": "Use {command} <URL> to subscribe"
|
|
46
|
+
},
|
|
47
|
+
"unknownTitle": {
|
|
48
|
+
"zh-CN": "(未知标题)",
|
|
49
|
+
"en": "(Untitled)"
|
|
50
|
+
},
|
|
51
|
+
"list": {
|
|
52
|
+
"zh-CN": "当前订阅 ({count}/{max}):\n{items}",
|
|
53
|
+
"en": "Subscriptions ({count}/{max}):\n{items}"
|
|
54
|
+
},
|
|
55
|
+
"notSubscribed": {
|
|
56
|
+
"zh-CN": "当前会话未订阅该源",
|
|
57
|
+
"en": "This conversation does not subscribe to that feed"
|
|
58
|
+
},
|
|
59
|
+
"noSubscriptions": {
|
|
60
|
+
"zh-CN": "当前会话没有任何订阅",
|
|
61
|
+
"en": "This conversation has no subscriptions"
|
|
62
|
+
},
|
|
63
|
+
"removeUrl": {
|
|
64
|
+
"zh-CN": "请提供要取消的 RSS 源地址",
|
|
65
|
+
"en": "Provide the RSS feed URL to unsubscribe"
|
|
66
|
+
},
|
|
67
|
+
"notFound": {
|
|
68
|
+
"zh-CN": "未找到该订阅",
|
|
69
|
+
"en": "Subscription not found"
|
|
70
|
+
},
|
|
71
|
+
"removed": {
|
|
72
|
+
"zh-CN": "已取消订阅: {feed}",
|
|
73
|
+
"en": "Unsubscribed: {feed}"
|
|
74
|
+
},
|
|
75
|
+
"previewFailed": {
|
|
76
|
+
"zh-CN": "解析失败: {error}\n请确认是有效的 RSS/Atom 地址",
|
|
77
|
+
"en": "Parsing failed: {error}\nCheck that it is a valid RSS/Atom URL"
|
|
78
|
+
},
|
|
79
|
+
"channelRequired": {
|
|
80
|
+
"zh-CN": "请在机器人私聊、群聊或频道内执行此命令;当前调用没有有效的订阅会话",
|
|
81
|
+
"en": "Run this command in a bot private chat, group or channel; this invocation has no valid subscription conversation"
|
|
82
|
+
},
|
|
83
|
+
"unsupportedAddress": {
|
|
84
|
+
"zh-CN": "暂不支持线程/父频道寻址的订阅,请在无需线程或父频道信息的会话内执行",
|
|
85
|
+
"en": "Thread or parent-channel subscription addresses are not supported; use a conversation that does not require them"
|
|
86
|
+
},
|
|
87
|
+
"previewEmpty": {
|
|
88
|
+
"zh-CN": "{title}: 暂无内容",
|
|
89
|
+
"en": "{title}: No items"
|
|
90
|
+
},
|
|
91
|
+
"previewTitle": {
|
|
92
|
+
"zh-CN": "{title} (共 {count} 条)",
|
|
93
|
+
"en": "{title} ({count} items)"
|
|
94
|
+
},
|
|
95
|
+
"more": {
|
|
96
|
+
"zh-CN": "\n...还有 {count} 条",
|
|
97
|
+
"en": "\n...{count} more items"
|
|
98
|
+
},
|
|
99
|
+
"newItems": {
|
|
100
|
+
"zh-CN": "{title} 有 {count} 条新内容:",
|
|
101
|
+
"en": "{title}: {count} new items:"
|
|
102
|
+
},
|
|
103
|
+
"moreSource": {
|
|
104
|
+
"zh-CN": "\n...还有 {count} 条,请查看源站",
|
|
105
|
+
"en": "\n...{count} more items; visit the source website"
|
|
106
|
+
},
|
|
107
|
+
"noNew": {
|
|
108
|
+
"zh-CN": "{title}: 无新内容",
|
|
109
|
+
"en": "{title}: No new items"
|
|
110
|
+
},
|
|
111
|
+
"checkFailed": {
|
|
112
|
+
"zh-CN": "{url}: 检查失败 — {error}",
|
|
113
|
+
"en": "{url}: Check failed — {error}"
|
|
114
|
+
},
|
|
115
|
+
"nothingToCheck": {
|
|
116
|
+
"zh-CN": "没有可检查的订阅",
|
|
117
|
+
"en": "There are no subscriptions to check"
|
|
118
|
+
},
|
|
119
|
+
"pushed": {
|
|
120
|
+
"zh-CN": ",已推送 {count} 个会话",
|
|
121
|
+
"en": ", sent to {count} conversations"
|
|
122
|
+
},
|
|
123
|
+
"notPushed": {
|
|
124
|
+
"zh-CN": ",无出站推送",
|
|
125
|
+
"en": ", no outbound delivery"
|
|
126
|
+
},
|
|
127
|
+
"localOnly": {
|
|
128
|
+
"zh-CN": "(未装配 OutboundHost,仅本地标记)",
|
|
129
|
+
"en": " (OutboundHost is not configured; items were only marked locally)"
|
|
130
|
+
},
|
|
131
|
+
"checked": {
|
|
132
|
+
"zh-CN": "检查完成,共 {count} 条新内容{pushNote}",
|
|
133
|
+
"en": "Check complete: {count} new items{pushNote}"
|
|
134
|
+
},
|
|
135
|
+
"checkedEmpty": {
|
|
136
|
+
"zh-CN": "检查完成,暂无新内容",
|
|
137
|
+
"en": "Check complete: no new items"
|
|
138
|
+
},
|
|
139
|
+
"noFeeds": {
|
|
140
|
+
"zh-CN": "暂无任何 RSS 订阅",
|
|
141
|
+
"en": "There are no RSS subscriptions"
|
|
142
|
+
},
|
|
143
|
+
"summaryTitle": {
|
|
144
|
+
"zh-CN": "RSS 静默摘要",
|
|
145
|
+
"en": "RSS quiet-hours digest"
|
|
146
|
+
},
|
|
147
|
+
"summaryHeading": {
|
|
148
|
+
"zh-CN": "RSS 静默摘要:累计检测到{minimum} {count} 条更新",
|
|
149
|
+
"en": "RSS quiet-hours digest: detected {minimum} {count} updates"
|
|
150
|
+
},
|
|
151
|
+
"atLeast": {
|
|
152
|
+
"zh-CN": "至少",
|
|
153
|
+
"en": "at least"
|
|
154
|
+
},
|
|
155
|
+
"source": {
|
|
156
|
+
"zh-CN": "来源:{url}",
|
|
157
|
+
"en": "Source: {url}"
|
|
158
|
+
},
|
|
159
|
+
"untitled": {
|
|
160
|
+
"zh-CN": "未命名文章",
|
|
161
|
+
"en": "Untitled article"
|
|
162
|
+
},
|
|
163
|
+
"summaryMore": {
|
|
164
|
+
"zh-CN": "仅展示 {count} 条短明细,其余请查看源站;计数基于有界轮询窗口。",
|
|
165
|
+
"en": "Showing {count} short items; visit the source for the rest. Counts are based on the bounded polling window."
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=i18n.js.map
|
package/lib/i18n.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
|
package/lib/poll.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { type Locale } from 'zhin.js/i18n';
|
|
1
2
|
/**
|
|
2
3
|
* Feed poll helpers: detect new items; optional OutboundHost push to subscribers.
|
|
3
4
|
*/
|
|
4
5
|
import { type FeedItem } from './feed.js';
|
|
5
6
|
import type { RssRuntime } from './runtime.js';
|
|
6
|
-
export declare function formatNewItems(feedTitle: string, items: FeedItem[], maxItems: number): string;
|
|
7
|
+
export declare function formatNewItems(feedTitle: string, items: FeedItem[], maxItems: number, locale?: Locale): string;
|
|
7
8
|
export declare function markItemsSeen(runtime: RssRuntime, feedUrl: string, items: FeedItem[]): Promise<void>;
|
|
8
9
|
export interface CheckResult {
|
|
9
10
|
readonly text: string;
|
|
@@ -16,6 +17,7 @@ export interface CheckResult {
|
|
|
16
17
|
*/
|
|
17
18
|
export declare function checkSubscriptions(runtime: RssRuntime, options: {
|
|
18
19
|
urls: readonly string[];
|
|
20
|
+
locale?: Locale;
|
|
19
21
|
}): Promise<CheckResult>;
|
|
20
22
|
/**
|
|
21
23
|
* Periodically clean seen records older than 7 days.
|
package/lib/poll.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE1D;;GAEG;AACH,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAgB,GAAG,MAAM,CAYvH;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1G;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAkCD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE;IACrE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,WAAW,CAAC,CAwCvB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAQ5E"}
|
package/lib/poll.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { resolveLocale } from 'zhin.js/i18n';
|
|
2
|
+
import { rssMessages as t } from './i18n.js';
|
|
1
3
|
/**
|
|
2
4
|
* Feed poll helpers: detect new items; optional OutboundHost push to subscribers.
|
|
3
5
|
*/
|
|
@@ -6,8 +8,8 @@ import { getRssSeen, getRssSubs } from './db-store.js';
|
|
|
6
8
|
function ts() {
|
|
7
9
|
return new Date().toISOString();
|
|
8
10
|
}
|
|
9
|
-
export function formatNewItems(feedTitle, items, maxItems) {
|
|
10
|
-
const lines = [
|
|
11
|
+
export function formatNewItems(feedTitle, items, maxItems, locale = 'zh-CN') {
|
|
12
|
+
const lines = [t(locale, 'newItems', { title: feedTitle, count: items.length })];
|
|
11
13
|
for (const item of items.slice(0, maxItems)) {
|
|
12
14
|
lines.push('');
|
|
13
15
|
lines.push(`${item.title}`);
|
|
@@ -17,7 +19,7 @@ export function formatNewItems(feedTitle, items, maxItems) {
|
|
|
17
19
|
lines.push(item.link);
|
|
18
20
|
}
|
|
19
21
|
if (items.length > maxItems) {
|
|
20
|
-
lines.push(
|
|
22
|
+
lines.push(t(locale, 'moreSource', { count: items.length - maxItems }));
|
|
21
23
|
}
|
|
22
24
|
return lines.join('\n');
|
|
23
25
|
}
|
|
@@ -37,7 +39,7 @@ export async function markItemsSeen(runtime, feedUrl, items) {
|
|
|
37
39
|
}
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
|
-
async function pushToSubscribers(runtime, feedUrl,
|
|
42
|
+
async function pushToSubscribers(runtime, feedUrl, feedTitle, items) {
|
|
41
43
|
const push = runtime.outbound;
|
|
42
44
|
const Subs = getRssSubs(runtime.db);
|
|
43
45
|
if (!push || !Subs)
|
|
@@ -60,7 +62,8 @@ async function pushToSubscribers(runtime, feedUrl, content) {
|
|
|
60
62
|
endpointKey,
|
|
61
63
|
channelType,
|
|
62
64
|
channelId,
|
|
63
|
-
|
|
65
|
+
locale: resolveLocale(sub.locale),
|
|
66
|
+
content: formatNewItems(feedTitle, items, runtime.config.maxItems, resolveLocale(sub.locale)),
|
|
64
67
|
});
|
|
65
68
|
pushed += 1;
|
|
66
69
|
}
|
|
@@ -75,10 +78,11 @@ async function pushToSubscribers(runtime, feedUrl, content) {
|
|
|
75
78
|
* When OutboundHost is wired, pushes formatted text to each subscriber channel.
|
|
76
79
|
*/
|
|
77
80
|
export async function checkSubscriptions(runtime, options) {
|
|
81
|
+
const locale = resolveLocale(options.locale);
|
|
78
82
|
const Seen = getRssSeen(runtime.db);
|
|
79
83
|
const Subs = getRssSubs(runtime.db);
|
|
80
84
|
if (!Seen || !Subs) {
|
|
81
|
-
return { text:
|
|
85
|
+
return { text: t(locale, 'databaseUnavailable'), totalNew: 0, pushed: 0 };
|
|
82
86
|
}
|
|
83
87
|
const parts = [];
|
|
84
88
|
let totalNew = 0;
|
|
@@ -90,27 +94,27 @@ export async function checkSubscriptions(runtime, options) {
|
|
|
90
94
|
const seenGuids = new Set(seenRows.map((r) => String(r.item_guid ?? '')));
|
|
91
95
|
const newItems = items.filter((item) => item.guid && !seenGuids.has(item.guid));
|
|
92
96
|
if (newItems.length === 0) {
|
|
93
|
-
parts.push(
|
|
97
|
+
parts.push(t(locale, 'noNew', { title: title || url }));
|
|
94
98
|
continue;
|
|
95
99
|
}
|
|
96
100
|
await markItemsSeen(runtime, url, newItems);
|
|
97
101
|
totalNew += newItems.length;
|
|
98
|
-
const body = formatNewItems(title || url, newItems, runtime.config.maxItems);
|
|
102
|
+
const body = formatNewItems(title || url, newItems, runtime.config.maxItems, locale);
|
|
99
103
|
parts.push(body);
|
|
100
|
-
pushed += await pushToSubscribers(runtime, url,
|
|
104
|
+
pushed += await pushToSubscribers(runtime, url, title || url, newItems);
|
|
101
105
|
}
|
|
102
106
|
catch (e) {
|
|
103
|
-
parts.push(
|
|
107
|
+
parts.push(t(locale, 'checkFailed', { url, error: e.message }));
|
|
104
108
|
}
|
|
105
109
|
}
|
|
106
110
|
if (parts.length === 0)
|
|
107
|
-
return { text: '
|
|
111
|
+
return { text: t(locale, 'nothingToCheck'), totalNew: 0, pushed: 0 };
|
|
108
112
|
const pushNote = runtime.outbound
|
|
109
|
-
? (pushed > 0 ?
|
|
110
|
-
:
|
|
113
|
+
? (pushed > 0 ? t(locale, 'pushed', { count: pushed }) : t(locale, 'notPushed'))
|
|
114
|
+
: t(locale, 'localOnly');
|
|
111
115
|
const header = totalNew > 0
|
|
112
|
-
?
|
|
113
|
-
: '
|
|
116
|
+
? t(locale, 'checked', { count: totalNew, pushNote })
|
|
117
|
+
: t(locale, 'checkedEmpty');
|
|
114
118
|
return { text: `${header}\n\n${parts.join('\n\n')}`, totalNew, pushed };
|
|
115
119
|
}
|
|
116
120
|
/**
|
|
@@ -140,13 +144,14 @@ export async function cleanOldSeen(runtime) {
|
|
|
140
144
|
* Poll all unique feed URLs across subscriptions.
|
|
141
145
|
*/
|
|
142
146
|
export async function pollAllFeeds(runtime) {
|
|
147
|
+
const locale = resolveLocale(runtime.locale);
|
|
143
148
|
const Subs = getRssSubs(runtime.db);
|
|
144
149
|
if (!Subs)
|
|
145
|
-
return { text:
|
|
150
|
+
return { text: t(locale, 'databaseUnavailable'), totalNew: 0, pushed: 0 };
|
|
146
151
|
const all = await Subs.select();
|
|
147
152
|
const urls = [...new Set(all.map((s) => String(s.url ?? '')).filter(Boolean))];
|
|
148
153
|
if (urls.length === 0)
|
|
149
|
-
return { text:
|
|
150
|
-
return checkSubscriptions(runtime, { urls });
|
|
154
|
+
return { text: t(locale, 'noFeeds'), totalNew: 0, pushed: 0 };
|
|
155
|
+
return checkSubscriptions(runtime, { urls, locale });
|
|
151
156
|
}
|
|
152
157
|
//# sourceMappingURL=poll.js.map
|
package/lib/poll.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAiB,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGvD,SAAS,EAAE;IACT,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,KAAiB,EAAE,QAAgB;
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"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"}
|
package/lib/quiet-hours.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import { type AdminTextKey } from './admin-i18n.js';
|
|
2
|
+
export declare class LocalizedQuietHoursError extends TypeError {
|
|
3
|
+
readonly messageKey: AdminTextKey;
|
|
4
|
+
constructor(messageKey: AdminTextKey);
|
|
5
|
+
}
|
|
1
6
|
export type RssQuietHours = {
|
|
2
7
|
readonly timezone: string;
|
|
3
8
|
readonly start: string;
|
package/lib/quiet-hours.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quiet-hours.d.ts","sourceRoot":"","sources":["../src/quiet-hours.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,yGAAyG;AACzG,wBAAgB,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAYxG;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAK3E"}
|
|
1
|
+
{"version":3,"file":"quiet-hours.d.ts","sourceRoot":"","sources":["../src/quiet-hours.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;gBACtB,UAAU,EAAE,YAAY;CACrC;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,yGAAyG;AACzG,wBAAgB,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAYxG;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAK3E"}
|
package/lib/quiet-hours.js
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
|
+
import { adminText } from './admin-i18n.js';
|
|
2
|
+
export class LocalizedQuietHoursError extends TypeError {
|
|
3
|
+
messageKey;
|
|
4
|
+
constructor(messageKey) { super(adminText('zh-CN', messageKey)); this.messageKey = messageKey; }
|
|
5
|
+
}
|
|
1
6
|
/** Flat provider parameters keep the generic task form editable, including clearing all three inputs. */
|
|
2
7
|
export function parseQuietHours(parameters) {
|
|
3
8
|
const values = [parameters.quietTimezone, parameters.quietStart, parameters.quietEnd];
|
|
4
9
|
if (values.every(value => value === undefined || (typeof value === 'string' && !value.trim())))
|
|
5
10
|
return undefined;
|
|
6
11
|
if (!values.every(value => typeof value === 'string' && value.trim()))
|
|
7
|
-
throw new
|
|
12
|
+
throw new LocalizedQuietHoursError('quietFields');
|
|
8
13
|
const [timezone, start, end] = values.map(value => value.trim());
|
|
9
14
|
if (timezone.length > 128 || !/^[A-Za-z][A-Za-z0-9_+/-]*$/u.test(timezone))
|
|
10
|
-
throw new
|
|
15
|
+
throw new LocalizedQuietHoursError('quietZoneOffset');
|
|
11
16
|
try {
|
|
12
17
|
new Intl.DateTimeFormat('en-GB', { timeZone: timezone }).format(0);
|
|
13
18
|
}
|
|
14
19
|
catch {
|
|
15
|
-
throw new
|
|
20
|
+
throw new LocalizedQuietHoursError('quietZone');
|
|
16
21
|
}
|
|
17
22
|
if (!/^([01]\d|2[0-3]):[0-5]\d$/u.test(start) || !/^([01]\d|2[0-3]):[0-5]\d$/u.test(end) || start === end) {
|
|
18
|
-
throw new
|
|
23
|
+
throw new LocalizedQuietHoursError('quietClock');
|
|
19
24
|
}
|
|
20
25
|
return Object.freeze({ timezone, start, end });
|
|
21
26
|
}
|
package/lib/quiet-hours.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quiet-hours.js","sourceRoot":"","sources":["../src/quiet-hours.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"quiet-hours.js","sourceRoot":"","sources":["../src/quiet-hours.ts"],"names":[],"mappings":"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"}
|
package/lib/runtime.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Locale } from 'zhin.js/i18n';
|
|
1
2
|
import type { RssConfig } from './feed.js';
|
|
2
3
|
import type { RssMemoryDb } from './memory-store.js';
|
|
3
4
|
import type { ChannelInfo } from './channel.js';
|
|
@@ -7,8 +8,10 @@ export type RssOutboundPush = (input: {
|
|
|
7
8
|
readonly channelType: ChannelInfo['channelType'];
|
|
8
9
|
readonly channelId: string;
|
|
9
10
|
readonly content: string;
|
|
11
|
+
readonly locale?: Locale;
|
|
10
12
|
}) => Promise<void>;
|
|
11
13
|
export interface RssRuntime {
|
|
14
|
+
readonly locale?: Locale;
|
|
12
15
|
readonly db: RssMemoryDb;
|
|
13
16
|
readonly config: Readonly<RssConfig>;
|
|
14
17
|
readonly outbound: RssOutboundPush | null;
|
package/lib/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,eAAe,qCAG3B,CAAC"}
|
package/lib/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqBtC,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CACxC,kBAAkB,EAClB,0BAA0B,CAC3B,CAAC"}
|
package/lib/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EACiF,KAAK,kBAAkB,EAA6B,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EACiF,KAAK,kBAAkB,EAA6B,MAAM,wBAAwB,CAAC;AAuD3K,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,kBAAkB,sCAEvE"}
|
package/lib/storage.js
CHANGED
|
@@ -7,9 +7,10 @@ const child = { id: { type: 'text', length: 80, primary: true }, task_id: { type
|
|
|
7
7
|
const codec = {
|
|
8
8
|
key: ADMIN_RSS_STATE_KEY,
|
|
9
9
|
header: { table: 'admin_rss_book', definition: { version: { type: 'integer', nullable: true }, revision: text } },
|
|
10
|
+
addColumns: { [tasks]: ['locale', 'detail_key'] },
|
|
10
11
|
tables: {
|
|
11
12
|
[tasks]: { id: { type: 'text', length: 36, primary: true }, position: { type: 'integer', nullable: false }, ...TASK_TARGET_COLUMNS,
|
|
12
|
-
creation: text, version: text, url: text, state: text, created_at: time, claim_id: text, last_check_at: time, last_run_at: time, detail: text,
|
|
13
|
+
creation: text, version: text, locale: text, url: text, state: text, created_at: time, claim_id: text, last_check_at: time, last_run_at: time, detail: text, detail_key: text,
|
|
13
14
|
seen_known: { type: 'boolean', nullable: false }, quiet_timezone: text, quiet_start: text, quiet_end: text,
|
|
14
15
|
pending_kind: text, pending_from: time, pending_to: time, pending_count: { type: 'integer', nullable: true },
|
|
15
16
|
pending_capped: { type: 'boolean', nullable: true } },
|
|
@@ -23,8 +24,8 @@ const codec = {
|
|
|
23
24
|
throw new Error('Unsupported RSS book; original state was preserved');
|
|
24
25
|
return { header: { version: book.version, revision: book.revision }, rows: {
|
|
25
26
|
[tasks]: book.tasks.map((task, position) => ({ id: task.id, position, ...encodeTaskTarget(task.target),
|
|
26
|
-
creation: task.creation, version: task.version, url: encodeStorageIdentity(task.url), state: task.state, created_at: task.createdAt,
|
|
27
|
-
claim_id: task.claimId, last_check_at: task.lastCheckAt, last_run_at: task.lastRunAt, detail: encodeStorageIdentity(task.detail),
|
|
27
|
+
creation: task.creation, version: task.version, locale: task.locale ?? 'zh-CN', url: encodeStorageIdentity(task.url), state: task.state, created_at: task.createdAt,
|
|
28
|
+
claim_id: task.claimId, last_check_at: task.lastCheckAt, last_run_at: task.lastRunAt, detail: encodeStorageIdentity(task.detail), detail_key: task.detailKey ?? null,
|
|
28
29
|
seen_known: task.seen !== null, quiet_timezone: task.quiet?.timezone ?? null, quiet_start: task.quiet?.start ?? null, quiet_end: task.quiet?.end ?? null,
|
|
29
30
|
pending_kind: task.pending === undefined ? 'absent' : task.pending === null ? 'null' : 'value',
|
|
30
31
|
pending_from: task.pending?.from ?? null, pending_to: task.pending?.to ?? null,
|
|
@@ -38,8 +39,8 @@ const codec = {
|
|
|
38
39
|
decode(header, rows) {
|
|
39
40
|
return { version: Number(header.version), revision: String(header.revision), receipts: decodeTaskReceipts(rows[receipts]),
|
|
40
41
|
tasks: rows[tasks].map(row => ({ id: String(row.id), target: decodeTaskTarget(row), creation: String(row.creation), version: String(row.version),
|
|
41
|
-
url: decodeStorageIdentity(row.url), state: String(row.state), createdAt: Number(row.created_at), claimId: row.claim_id == null ? null : String(row.claim_id),
|
|
42
|
-
lastCheckAt: row.last_check_at == null ? null : Number(row.last_check_at), lastRunAt: row.last_run_at == null ? null : Number(row.last_run_at), detail: decodeStorageIdentity(row.detail),
|
|
42
|
+
url: decodeStorageIdentity(row.url), locale: row.locale == null ? 'zh-CN' : String(row.locale), state: String(row.state), createdAt: Number(row.created_at), claimId: row.claim_id == null ? null : String(row.claim_id),
|
|
43
|
+
lastCheckAt: row.last_check_at == null ? null : Number(row.last_check_at), lastRunAt: row.last_run_at == null ? null : Number(row.last_run_at), detail: decodeStorageIdentity(row.detail), ...(row.detail_key == null ? {} : { detailKey: String(row.detail_key) }),
|
|
43
44
|
seen: row.seen_known ? rows[seen].filter(item => item.task_id === row.id).map(item => decodeStorageIdentity(item.item_key)) : null,
|
|
44
45
|
...(row.quiet_timezone == null ? {} : { quiet: { timezone: String(row.quiet_timezone), start: String(row.quiet_start), end: String(row.quiet_end) } }),
|
|
45
46
|
...(row.pending_kind === 'absent' ? {} : { pending: row.pending_kind === 'null' ? null : {
|
package/lib/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAChH,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAsD,MAAM,wBAAwB,CAAC;AAC3K,OAAO,EAAE,mBAAmB,EAA6B,MAAM,kBAAkB,CAAC;AAElF,MAAM,KAAK,GAAG,iBAAiB,EAAE,IAAI,GAAG,gBAAgB,EAAE,KAAK,GAAG,yBAAyB,EAAE,QAAQ,GAAG,oBAAoB,CAAC;AAC7H,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAC;AACvD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAC;AACzD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;AAE1K,MAAM,KAAK,GAAyB;IAClC,GAAG,EAAE,mBAAmB;IACxB,MAAM,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IACjH,MAAM,EAAE;QACN,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,mBAAmB;YAChI,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|