@leemour/cli-messaging 0.150.0 → 0.152.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/dist/cli/index.d.ts +2 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/chats-members-command.d.ts.map +1 -1
- package/dist/cli/messenger/chats-members-command.js +6 -3
- package/dist/cli/messenger/chats-members-command.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +2 -0
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/replies-command.d.ts.map +1 -1
- package/dist/cli/messenger/replies-command.js +27 -6
- package/dist/cli/messenger/replies-command.js.map +1 -1
- package/dist/cli/messenger/serve-command.js +15 -3
- package/dist/cli/messenger/serve-command.js.map +1 -1
- package/dist/mcp/http/oauth.d.ts.map +1 -1
- package/dist/mcp/http/oauth.js +2 -1
- package/dist/mcp/http/oauth.js.map +1 -1
- package/dist/replies/decide.d.ts +7 -3
- package/dist/replies/decide.d.ts.map +1 -1
- package/dist/replies/decide.js +14 -5
- package/dist/replies/decide.js.map +1 -1
- package/dist/replies/dry-run.d.ts +7 -3
- package/dist/replies/dry-run.d.ts.map +1 -1
- package/dist/replies/dry-run.js +6 -4
- package/dist/replies/dry-run.js.map +1 -1
- package/dist/replies/rules.d.ts +40 -34
- package/dist/replies/rules.d.ts.map +1 -1
- package/dist/replies/rules.js +39 -5
- package/dist/replies/rules.js.map +1 -1
- package/dist/replies/serve.d.ts +10 -2
- package/dist/replies/serve.d.ts.map +1 -1
- package/dist/replies/serve.js +31 -10
- package/dist/replies/serve.js.map +1 -1
- package/dist/services/task-rules.d.ts +5 -0
- package/dist/services/task-rules.d.ts.map +1 -1
- package/dist/services/task-rules.js +20 -0
- package/dist/services/task-rules.js.map +1 -1
- package/package.json +1 -1
- package/parity.json +83 -110
package/dist/replies/decide.js
CHANGED
|
@@ -16,8 +16,11 @@ export const decide = (rule, incoming, state, now) => {
|
|
|
16
16
|
return skip(message.outgoing ? "your own message" : "the account is not known");
|
|
17
17
|
if (message.senderIsChat || message.senderId === null)
|
|
18
18
|
return skip("sent as a chat, not by a person");
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// A task stays on this machine; only an answer to a real person waits for the testing to end.
|
|
20
|
+
const answerable = sender.isTester && !incoming.outside;
|
|
21
|
+
const actions = answerable ? rule.do : rule.do.filter((action) => action !== "reply");
|
|
22
|
+
if (actions.length === 0)
|
|
23
|
+
return skip(sender.isTester ? (incoming.outside ?? NOT_A_TESTER) : NOT_A_TESTER);
|
|
21
24
|
if (sender.isBot)
|
|
22
25
|
return skip("sent by a bot");
|
|
23
26
|
if (chat.kind !== "dialog" && chat.kind !== "group")
|
|
@@ -62,10 +65,16 @@ export const decide = (rule, incoming, state, now) => {
|
|
|
62
65
|
return skip("the chat's limit is reached");
|
|
63
66
|
if (over(sent?.people[message.senderId], rule.limits.perPerson, now))
|
|
64
67
|
return skip("the person's limit is reached");
|
|
68
|
+
if (!actions.includes("reply"))
|
|
69
|
+
return { actions, reply: null };
|
|
65
70
|
const text = filled(rule.reply.template, message.senderName);
|
|
66
|
-
if (text === undefined)
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
if (text === undefined) {
|
|
72
|
+
const rest = actions.filter((action) => action !== "reply");
|
|
73
|
+
return rest.length === 0
|
|
74
|
+
? skip("the template needs a name the sender has not given")
|
|
75
|
+
: { actions: rest, reply: null };
|
|
76
|
+
}
|
|
77
|
+
return { actions, reply: { text, asReply: rule.reply.asReply, model: rule.reply.model } };
|
|
69
78
|
};
|
|
70
79
|
const mentionsOwner = (message, owner) => message.replyTo?.outgoing === true ||
|
|
71
80
|
(owner.id !== null && (message.mentions ?? []).includes(owner.id)) ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../../src/replies/decide.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../../src/replies/decide.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Id } from "../domain/models.js";
|
|
2
2
|
import type { AccountKey, MessageStore } from "../store/store.js";
|
|
3
|
-
import { type ReplyRule, type Tester } from "./rules.js";
|
|
3
|
+
import { type Audience, type ReplyRule, type Tester } from "./rules.js";
|
|
4
4
|
export declare const DRY_RUN_DAYS = 7;
|
|
5
5
|
export interface WouldReply {
|
|
6
6
|
locator: string;
|
|
@@ -11,8 +11,11 @@ export interface WouldReply {
|
|
|
11
11
|
name: string | null;
|
|
12
12
|
};
|
|
13
13
|
at: string;
|
|
14
|
-
|
|
14
|
+
/** `null`: the rule would send nothing here — it only opens a task, or the sender is not a test account. */
|
|
15
|
+
text: string | null;
|
|
15
16
|
asReply: boolean;
|
|
17
|
+
/** It would open a task for the message. */
|
|
18
|
+
task: boolean;
|
|
16
19
|
}
|
|
17
20
|
export interface RuleDryRun {
|
|
18
21
|
id: string;
|
|
@@ -33,11 +36,12 @@ export interface DryRun {
|
|
|
33
36
|
* The state starts empty and lives only here, so a run changes no file and sends nothing. A rule that
|
|
34
37
|
* is off is tried as if on: trying it before turning it on is the point.
|
|
35
38
|
*/
|
|
36
|
-
export declare const dryRun: (store: MessageStore, account: AccountKey, rules: ReplyRule[], { since, until, only, testers, }: {
|
|
39
|
+
export declare const dryRun: (store: MessageStore, account: AccountKey, rules: ReplyRule[], { since, until, only, testers, audience, }: {
|
|
37
40
|
since: number;
|
|
38
41
|
until?: number;
|
|
39
42
|
only?: string;
|
|
40
43
|
testers: readonly Tester[];
|
|
44
|
+
audience?: Audience;
|
|
41
45
|
}) => Promise<DryRun>;
|
|
42
46
|
/**
|
|
43
47
|
* What a message does not say about its sender, from the store: a contact is someone with a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../src/replies/dry-run.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,EAAE,EAAW,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEjE,OAAO,
|
|
1
|
+
{"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../src/replies/dry-run.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,EAAE,EAAW,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEjE,OAAO,EAAE,KAAK,QAAQ,EAAuC,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAA;AAG5G,eAAO,MAAM,YAAY,IAAI,CAAA;AAG7B,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,EAAE,CAAA;IACV,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,EAAE,EAAE;QAAE,EAAE,EAAE,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,4GAA4G;IAC5G,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,4CAA4C;IAC5C,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,UACV,YAAY,WACV,UAAU,SACZ,SAAS,EAAE,8CAOf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,KACnG,OAAO,CAAC,MAAM,CA4EhB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAiB,YAAY,WAAW,UAAU;oBAa/C,EAAE;gBARF,EAAE,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;;EAStD,CAAA"}
|
package/dist/replies/dry-run.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CliError } from "@leemour/cli-core";
|
|
2
2
|
import { formatLocator } from "../domain/locator.js";
|
|
3
3
|
import { decide } from "./decide.js";
|
|
4
|
-
import { isTester } from "./rules.js";
|
|
4
|
+
import { EVERYONE, isTester, outsideAudience } from "./rules.js";
|
|
5
5
|
import { emptyState, recordReply } from "./state.js";
|
|
6
6
|
export const DRY_RUN_DAYS = 7;
|
|
7
7
|
const PAGE = 500;
|
|
@@ -11,7 +11,7 @@ const PAGE = 500;
|
|
|
11
11
|
* The state starts empty and lives only here, so a run changes no file and sends nothing. A rule that
|
|
12
12
|
* is off is tried as if on: trying it before turning it on is the point.
|
|
13
13
|
*/
|
|
14
|
-
export const dryRun = async (store, account, rules, { since, until = Date.now(), only, testers, }) => {
|
|
14
|
+
export const dryRun = async (store, account, rules, { since, until = Date.now(), only, testers, audience = EVERYONE, }) => {
|
|
15
15
|
const tried = only === undefined ? rules : rules.filter((rule) => rule.id === only);
|
|
16
16
|
if (only !== undefined && tried.length === 0) {
|
|
17
17
|
throw new CliError("not_found", `no reply rule "${only}" — the rules are: ${rules.map((one) => one.id).join(", ")}`);
|
|
@@ -48,6 +48,7 @@ export const dryRun = async (store, account, rules, { since, until = Date.now(),
|
|
|
48
48
|
isContact: sender !== null && isContact(sender),
|
|
49
49
|
isTester: isTester(testers, account.provider, sender),
|
|
50
50
|
},
|
|
51
|
+
outside: outsideAudience(audience, sender, chat.id),
|
|
51
52
|
since,
|
|
52
53
|
}, state, now);
|
|
53
54
|
if ("skip" in decision) {
|
|
@@ -65,8 +66,9 @@ export const dryRun = async (store, account, rules, { since, until = Date.now(),
|
|
|
65
66
|
chatTitle: chat.title,
|
|
66
67
|
to: { id: sender, name: message.senderName ?? people.get(sender)?.name ?? null },
|
|
67
68
|
at: message.timestamp,
|
|
68
|
-
text: decision.reply
|
|
69
|
-
asReply: decision.reply
|
|
69
|
+
text: decision.reply?.text ?? null,
|
|
70
|
+
asReply: decision.reply?.asReply ?? false,
|
|
71
|
+
task: decision.actions.includes("task"),
|
|
70
72
|
});
|
|
71
73
|
state = recordReply(state, rule, message, now);
|
|
72
74
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/replies/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAA+B,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/replies/dry-run.ts"],"names":[],"mappings":"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"}
|
package/dist/replies/rules.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as v from "valibot";
|
|
|
2
2
|
import type { AppIdentity } from "../cli/app.js";
|
|
3
3
|
export declare const REPLY_ACTIONS: readonly ["reply", "task"];
|
|
4
4
|
export declare const REPLY_MODELS: readonly ["fill-only", "may-reword"];
|
|
5
|
+
export type ReplyAction = (typeof REPLY_ACTIONS)[number];
|
|
5
6
|
/** Channels, saved messages and chats of unknown kind are never answered, so a rule cannot name them. */
|
|
6
7
|
export declare const REPLY_KINDS: readonly ["dialog", "group"];
|
|
7
8
|
export declare const PLACEHOLDERS: readonly ["firstName", "name"];
|
|
@@ -50,46 +51,45 @@ declare const rule: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{
|
|
|
50
51
|
readonly perChat: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a limit is written \"1/12h\": this many replies in this long — m, h or d">, v.TransformAction<string, Limit>]>;
|
|
51
52
|
readonly perPerson: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a limit is written \"1/12h\": this many replies in this long — m, h or d">, v.TransformAction<string, Limit>]>;
|
|
52
53
|
}, undefined>;
|
|
53
|
-
}, undefined
|
|
54
|
-
id: string;
|
|
55
|
-
on: boolean;
|
|
56
|
-
do: ("reply" | "task")[];
|
|
57
|
-
where: {
|
|
58
|
-
kinds: ("dialog" | "group")[];
|
|
59
|
-
chats: string[];
|
|
60
|
-
notChats: string[];
|
|
61
|
-
};
|
|
62
|
-
when: {
|
|
63
|
-
hours: {
|
|
64
|
-
outside: Window;
|
|
65
|
-
days: ("fri" | "mon" | "sat" | "sun" | "thu" | "tue" | "wed")[];
|
|
66
|
-
timezone: string;
|
|
67
|
-
} | null;
|
|
68
|
-
words: string[];
|
|
69
|
-
question: boolean;
|
|
70
|
-
mentionsMe: boolean;
|
|
71
|
-
from: {
|
|
72
|
-
people: string[];
|
|
73
|
-
notPeople: string[];
|
|
74
|
-
contactsOnly: boolean;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
reply: {
|
|
78
|
-
template: string;
|
|
79
|
-
model: "fill-only" | "may-reword";
|
|
80
|
-
asReply: boolean;
|
|
81
|
-
};
|
|
82
|
-
limits: {
|
|
83
|
-
perChat: Limit;
|
|
84
|
-
perPerson: Limit;
|
|
85
|
-
};
|
|
86
|
-
}, "\"task\" waits for the tasks package; only \"reply\" works now">]>;
|
|
54
|
+
}, undefined>]>;
|
|
87
55
|
export type ReplyRule = v.InferOutput<typeof rule>;
|
|
88
56
|
declare const tester: v.StrictObjectSchema<{
|
|
89
57
|
readonly provider: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
|
|
90
58
|
readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
91
59
|
}, undefined>;
|
|
92
60
|
export type Tester = v.InferOutput<typeof tester>;
|
|
61
|
+
/**
|
|
62
|
+
* Who may get an answer at all, whatever a rule says: everyone, or only those listed in `allow`; and
|
|
63
|
+
* never anyone in `deny`, which wins when an id is in both. Tasks are not limited by it.
|
|
64
|
+
*/
|
|
65
|
+
declare const audienceShape: v.OptionalSchema<v.StrictObjectSchema<{
|
|
66
|
+
readonly reply: v.OptionalSchema<v.PicklistSchema<["all", "listed"], undefined>, "all">;
|
|
67
|
+
readonly allow: v.OptionalSchema<v.StrictObjectSchema<{
|
|
68
|
+
readonly people: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, readonly []>;
|
|
69
|
+
readonly chats: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, readonly []>;
|
|
70
|
+
}, undefined>, {
|
|
71
|
+
readonly people: readonly [];
|
|
72
|
+
readonly chats: readonly [];
|
|
73
|
+
}>;
|
|
74
|
+
readonly deny: v.OptionalSchema<v.StrictObjectSchema<{
|
|
75
|
+
readonly people: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, readonly []>;
|
|
76
|
+
readonly chats: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, readonly []>;
|
|
77
|
+
}, undefined>, {
|
|
78
|
+
readonly people: readonly [];
|
|
79
|
+
readonly chats: readonly [];
|
|
80
|
+
}>;
|
|
81
|
+
}, undefined>, {
|
|
82
|
+
readonly reply: "all";
|
|
83
|
+
readonly allow: {
|
|
84
|
+
readonly people: readonly [];
|
|
85
|
+
readonly chats: readonly [];
|
|
86
|
+
};
|
|
87
|
+
readonly deny: {
|
|
88
|
+
readonly people: readonly [];
|
|
89
|
+
readonly chats: readonly [];
|
|
90
|
+
};
|
|
91
|
+
}>;
|
|
92
|
+
export type Audience = v.InferOutput<typeof audienceShape>;
|
|
93
93
|
/**
|
|
94
94
|
* Every key written out, so the file shows all there is to set, as moderation's does (max-cli
|
|
95
95
|
* `NEED-314`). Off until the owner turns it on, and the limits are the tightest worth having.
|
|
@@ -127,8 +127,14 @@ export declare const defaultRule: (id: string) => {
|
|
|
127
127
|
export declare const repliesPathFor: (app: AppIdentity, profile: string, env?: NodeJS.ProcessEnv) => string;
|
|
128
128
|
export interface Replies {
|
|
129
129
|
testers: Tester[];
|
|
130
|
+
audience: Audience;
|
|
130
131
|
rules: ReplyRule[];
|
|
131
132
|
}
|
|
133
|
+
export declare const EVERYONE: Audience;
|
|
134
|
+
/** Why nobody may be answered here, or `null` when the audience lets the reply go. */
|
|
135
|
+
export declare const outsideAudience: (audience: Audience, person: string | null, chat: string) => string | null;
|
|
136
|
+
/** What in the audience does not do what it seems to say — said, never refused. */
|
|
137
|
+
export declare const audienceWarnings: ({ reply, allow, deny }: Audience) => string[];
|
|
132
138
|
/** The owner's rules, in file order. No file is no rules; a file that does not check out refuses, naming the field. */
|
|
133
139
|
export declare const readReplyRules: (path: string) => ReplyRule[];
|
|
134
140
|
export declare const readReplies: (path: string) => Replies;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/replies/rules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,aAAa,YAAI,OAAO,EAAE,MAAM,CAAU,CAAA;AACvD,eAAO,MAAM,YAAY,YAAI,WAAW,EAAE,YAAY,CAAU,CAAA;AAChE,yGAAyG;AACzG,eAAO,MAAM,WAAW,YAAI,QAAQ,EAAE,OAAO,CAAU,CAAA;AACvD,eAAO,MAAM,YAAY,YAAI,WAAW,EAAE,MAAM,CAAU,CAAA;AAC1D,eAAO,MAAM,IAAI,YAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAA;AAE9E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAA;AAMvC,gFAAgF;AAChF,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED,6CAA6C;AAC7C,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;CACX;AAoED,QAAA,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/replies/rules.ts"],"names":[],"mappings":"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"}
|
package/dist/replies/rules.js
CHANGED
|
@@ -64,16 +64,23 @@ const rule = v.pipe(v.strictObject({
|
|
|
64
64
|
}),
|
|
65
65
|
reply: v.strictObject({ template, model: v.picklist(REPLY_MODELS), asReply: v.boolean() }),
|
|
66
66
|
limits: v.strictObject({ perChat: limit, perPerson: limit }),
|
|
67
|
-
})
|
|
68
|
-
// NEED-582: a rule may open a task, but there is no tasks package to open it in yet.
|
|
69
|
-
v.check((one) => !one.do.includes("task"), '"task" waits for the tasks package; only "reply" works now'));
|
|
67
|
+
}));
|
|
70
68
|
const tester = v.strictObject({
|
|
71
69
|
provider: v.optional(v.pipe(v.string(), v.minLength(1))),
|
|
72
70
|
id: v.pipe(v.string(), v.minLength(1)),
|
|
73
71
|
});
|
|
72
|
+
const side = v.optional(v.strictObject({ people: v.optional(ids, []), chats: v.optional(ids, []) }), {
|
|
73
|
+
people: [],
|
|
74
|
+
chats: [],
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* Who may get an answer at all, whatever a rule says: everyone, or only those listed in `allow`; and
|
|
78
|
+
* never anyone in `deny`, which wins when an id is in both. Tasks are not limited by it.
|
|
79
|
+
*/
|
|
80
|
+
const audienceShape = v.optional(v.strictObject({ reply: v.optional(v.picklist(["all", "listed"]), "all"), allow: side, deny: side }), { reply: "all", allow: { people: [], chats: [] }, deny: { people: [], chats: [] } });
|
|
74
81
|
const file = v.pipe(
|
|
75
82
|
// NEED-601: rules answer test accounts only, until the owner rules otherwise; no list, nobody.
|
|
76
|
-
v.strictObject({ testers: v.optional(v.array(tester), []), rules: v.array(rule) }), v.check(({ rules }) => new Set(rules.map((one) => one.id)).size === rules.length, "two rules share an id; each needs its own"));
|
|
83
|
+
v.strictObject({ testers: v.optional(v.array(tester), []), audience: audienceShape, rules: v.array(rule) }), v.check(({ rules }) => new Set(rules.map((one) => one.id)).size === rules.length, "two rules share an id; each needs its own"));
|
|
77
84
|
/**
|
|
78
85
|
* Every key written out, so the file shows all there is to set, as moderation's does (max-cli
|
|
79
86
|
* `NEED-314`). Off until the owner turns it on, and the limits are the tightest worth having.
|
|
@@ -94,11 +101,38 @@ export const defaultRule = (id) => ({
|
|
|
94
101
|
limits: { perChat: "1/1d", perPerson: "1/1d" },
|
|
95
102
|
});
|
|
96
103
|
export const repliesPathFor = (app, profile, env = process.env) => join(resolvePaths({ appName: app.appName, prefix: app.envPrefix, env }).config, `${profile}.replies.json`);
|
|
104
|
+
export const EVERYONE = { reply: "all", allow: { people: [], chats: [] }, deny: { people: [], chats: [] } };
|
|
105
|
+
/** Why nobody may be answered here, or `null` when the audience lets the reply go. */
|
|
106
|
+
export const outsideAudience = (audience, person, chat) => {
|
|
107
|
+
if (person !== null && audience.deny.people.includes(person))
|
|
108
|
+
return "a person on the deny list";
|
|
109
|
+
if (audience.deny.chats.includes(chat))
|
|
110
|
+
return "a chat on the deny list";
|
|
111
|
+
if (audience.reply === "all")
|
|
112
|
+
return null;
|
|
113
|
+
const listed = (person !== null && audience.allow.people.includes(person)) || audience.allow.chats.includes(chat);
|
|
114
|
+
return listed ? null : "not on the allow list";
|
|
115
|
+
};
|
|
116
|
+
/** What in the audience does not do what it seems to say — said, never refused. */
|
|
117
|
+
export const audienceWarnings = ({ reply, allow, deny }) => [
|
|
118
|
+
...allow.people
|
|
119
|
+
.filter((id) => deny.people.includes(id))
|
|
120
|
+
.map((id) => `person ${id} is on both lists: deny wins, nobody answers them`),
|
|
121
|
+
...allow.chats
|
|
122
|
+
.filter((id) => deny.chats.includes(id))
|
|
123
|
+
.map((id) => `chat ${id} is on both lists: deny wins, nothing is answered there`),
|
|
124
|
+
...(reply === "all" && allow.people.length + allow.chats.length > 0
|
|
125
|
+
? ['the allow list does nothing while audience.reply is "all" — set it to "listed" to answer only those']
|
|
126
|
+
: []),
|
|
127
|
+
...(reply === "listed" && allow.people.length + allow.chats.length === 0
|
|
128
|
+
? ['audience.reply is "listed" and the allow list is empty: nobody is answered']
|
|
129
|
+
: []),
|
|
130
|
+
];
|
|
97
131
|
/** The owner's rules, in file order. No file is no rules; a file that does not check out refuses, naming the field. */
|
|
98
132
|
export const readReplyRules = (path) => readReplies(path).rules;
|
|
99
133
|
export const readReplies = (path) => {
|
|
100
134
|
if (!existsSync(path))
|
|
101
|
-
return { testers: [], rules: [] };
|
|
135
|
+
return { testers: [], audience: EVERYONE, rules: [] };
|
|
102
136
|
let parsed;
|
|
103
137
|
try {
|
|
104
138
|
parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/replies/rules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/replies/rules.ts"],"names":[],"mappings":"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"}
|
package/dist/replies/serve.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { Chat, Id, Message } from "../domain/models.js";
|
|
2
2
|
export declare const NOT_ALLOWED = "replies.send is not allow";
|
|
3
3
|
export declare const NO_RULES = "no rules";
|
|
4
|
+
export declare const ONLY_TASK = "opened a task, sent nothing";
|
|
5
|
+
export declare const NO_TASKS = "this serve cannot open tasks";
|
|
6
|
+
/** `task`: the rule that opened a task for the message — beside a reply, or beside why none went. */
|
|
4
7
|
export type Replied = {
|
|
5
8
|
sent: string;
|
|
9
|
+
task?: string;
|
|
6
10
|
} | {
|
|
7
11
|
skip: string;
|
|
12
|
+
task?: string;
|
|
8
13
|
};
|
|
9
14
|
export interface Replier {
|
|
10
15
|
/** The profile's rules and state files, read on every message so an edit or `replies pause` applies at once. */
|
|
@@ -32,11 +37,14 @@ export interface Replier {
|
|
|
32
37
|
origin: string;
|
|
33
38
|
}) => Promise<unknown>;
|
|
34
39
|
newSendId: () => string;
|
|
40
|
+
/** A rule's `task` action: a `request` task for the message; `false` when the message already had one. */
|
|
41
|
+
openTask?: (message: Message, origin: string) => Promise<boolean>;
|
|
35
42
|
now?: () => number;
|
|
36
43
|
}
|
|
37
44
|
/**
|
|
38
|
-
* One arriving message through the rules, in file order, the first that
|
|
39
|
-
* sender named in `testers` (NEED-601)
|
|
45
|
+
* One arriving message through the rules, in file order, the first that matches acting: a task opens
|
|
46
|
+
* for anyone (NEED-582), a reply goes only to a sender named in `testers` (NEED-601) and only with
|
|
47
|
+
* `replies.send` at `allow`. A send that fails is
|
|
40
48
|
* tried once more with the same send id, so the messenger delivers at most one; a message whose
|
|
41
49
|
* reply may have gone is kept as answered.
|
|
42
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/replies/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAM5D,eAAO,MAAM,WAAW,8BAA8B,CAAA;AACtD,eAAO,MAAM,QAAQ,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/replies/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAM5D,eAAO,MAAM,WAAW,8BAA8B,CAAA;AACtD,eAAO,MAAM,QAAQ,aAAa,CAAA;AAClC,eAAO,MAAM,SAAS,gCAAgC,CAAA;AACtD,eAAO,MAAM,QAAQ,iCAAiC,CAAA;AAEtD,qGAAqG;AACrG,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvF,MAAM,WAAW,OAAO;IACtB,gHAAgH;IAChH,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE;QAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAA;IACb,+FAA+F;IAC/F,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAA;IACxD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACzE,IAAI,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3G,SAAS,EAAE,MAAM,MAAM,CAAA;IACvB,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACjE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAKD;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,SAAgB,OAAO,WAAW,OAAO,KAAG,OAAO,CAAC,OAAO,CAkE9E,CAAA"}
|
package/dist/replies/serve.js
CHANGED
|
@@ -1,31 +1,37 @@
|
|
|
1
1
|
import { codeOf } from "../sends/guarded.js";
|
|
2
2
|
import { decide } from "./decide.js";
|
|
3
|
-
import { isTester, readReplies } from "./rules.js";
|
|
3
|
+
import { isTester, outsideAudience, readReplies } from "./rules.js";
|
|
4
4
|
import { readRepliesState, recordReply, writeRepliesState } from "./state.js";
|
|
5
5
|
export const NOT_ALLOWED = "replies.send is not allow";
|
|
6
6
|
export const NO_RULES = "no rules";
|
|
7
|
+
export const ONLY_TASK = "opened a task, sent nothing";
|
|
8
|
+
export const NO_TASKS = "this serve cannot open tasks";
|
|
7
9
|
/** Refusals that a second try with the same id would only repeat. */
|
|
8
10
|
const FINAL = new Set(["permission_error", "confirmation_required", "rate_limited", "validation_error", "not_found"]);
|
|
9
11
|
/**
|
|
10
|
-
* One arriving message through the rules, in file order, the first that
|
|
11
|
-
* sender named in `testers` (NEED-601)
|
|
12
|
+
* One arriving message through the rules, in file order, the first that matches acting: a task opens
|
|
13
|
+
* for anyone (NEED-582), a reply goes only to a sender named in `testers` (NEED-601) and only with
|
|
14
|
+
* `replies.send` at `allow`. A send that fails is
|
|
12
15
|
* tried once more with the same send id, so the messenger delivers at most one; a message whose
|
|
13
16
|
* reply may have gone is kept as answered.
|
|
14
17
|
*/
|
|
15
18
|
export const replyTo = async (deps, message) => {
|
|
16
|
-
const { rules, testers } = readReplies(deps.rulesPath);
|
|
19
|
+
const { rules, testers, audience } = readReplies(deps.rulesPath);
|
|
17
20
|
if (rules.length === 0)
|
|
18
21
|
return { skip: NO_RULES };
|
|
19
22
|
let state = readRepliesState(deps.statePath);
|
|
20
23
|
const now = deps.now?.() ?? Date.now();
|
|
21
24
|
const tester = isTester(testers, deps.provider, message.senderId);
|
|
22
|
-
|
|
23
|
-
const
|
|
25
|
+
// Asked only where a rule may act: for a test account, or when a rule opens tasks for anyone.
|
|
26
|
+
const looks = tester || rules.some((rule) => rule.on && rule.do.includes("task"));
|
|
27
|
+
const chat = looks ? await deps.chatOf(message.chatId) : { id: message.chatId, kind: "unknown" };
|
|
28
|
+
const facts = looks && message.senderId !== null ? await deps.senderOf(message.senderId) : { isBot: false, isContact: false };
|
|
24
29
|
const incoming = {
|
|
25
30
|
message,
|
|
26
31
|
chat,
|
|
27
32
|
owner: deps.owner,
|
|
28
33
|
sender: { ...facts, isTester: tester },
|
|
34
|
+
outside: outsideAudience(audience, message.senderId, message.chatId),
|
|
29
35
|
since: deps.since,
|
|
30
36
|
};
|
|
31
37
|
let why = "no rule matched";
|
|
@@ -35,15 +41,30 @@ export const replyTo = async (deps, message) => {
|
|
|
35
41
|
why = decision.skip;
|
|
36
42
|
continue;
|
|
37
43
|
}
|
|
44
|
+
const origin = `rule:${rule.id}`;
|
|
45
|
+
let task;
|
|
46
|
+
if (decision.actions.includes("task")) {
|
|
47
|
+
if (deps.openTask) {
|
|
48
|
+
await deps.openTask(message, origin);
|
|
49
|
+
task = rule.id;
|
|
50
|
+
}
|
|
51
|
+
else if (decision.reply === null)
|
|
52
|
+
return { skip: NO_TASKS };
|
|
53
|
+
}
|
|
54
|
+
const opened = task === undefined ? {} : { task };
|
|
55
|
+
if (decision.reply === null) {
|
|
56
|
+
writeRepliesState(deps.statePath, recordReply(readRepliesState(deps.statePath), rule, message, now));
|
|
57
|
+
return { skip: ONLY_TASK, ...opened };
|
|
58
|
+
}
|
|
38
59
|
if (!deps.allowed())
|
|
39
|
-
return { skip: NOT_ALLOWED };
|
|
60
|
+
return { skip: NOT_ALLOWED, ...opened };
|
|
40
61
|
const sendId = deps.newSendId();
|
|
41
62
|
const reply = {
|
|
42
63
|
chat: message.chatId,
|
|
43
64
|
text: decision.reply.text,
|
|
44
65
|
...(decision.reply.asReply ? { replyTo: message.id } : {}),
|
|
45
66
|
sendId,
|
|
46
|
-
origin
|
|
67
|
+
origin,
|
|
47
68
|
};
|
|
48
69
|
let failed;
|
|
49
70
|
try {
|
|
@@ -51,7 +72,7 @@ export const replyTo = async (deps, message) => {
|
|
|
51
72
|
}
|
|
52
73
|
catch (error) {
|
|
53
74
|
if (FINAL.has(codeOf(error)))
|
|
54
|
-
return { skip: codeOf(error) };
|
|
75
|
+
return { skip: codeOf(error), ...opened };
|
|
55
76
|
try {
|
|
56
77
|
await deps.send(reply);
|
|
57
78
|
}
|
|
@@ -63,7 +84,7 @@ export const replyTo = async (deps, message) => {
|
|
|
63
84
|
writeRepliesState(deps.statePath, state);
|
|
64
85
|
if (failed !== undefined)
|
|
65
86
|
throw failed;
|
|
66
|
-
return { sent: rule.id };
|
|
87
|
+
return { sent: rule.id, ...opened };
|
|
67
88
|
}
|
|
68
89
|
return { skip: why };
|
|
69
90
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/replies/serve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/replies/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,4 +24,9 @@ export declare const applyTaskRules: (review: {
|
|
|
24
24
|
export declare const ARRIVAL_WINDOW = 50;
|
|
25
25
|
/** `serve`'s rule pass: the new message with the chat's stored messages before it, as a review would read them. */
|
|
26
26
|
export declare const applyTaskRulesOnArrival: (store: MessageStore, account: AccountKey, message: Message) => Promise<RuleResult>;
|
|
27
|
+
/**
|
|
28
|
+
* A reply rule's `task` action: one `request` task pointing at the message. The service gives back
|
|
29
|
+
* the task a source already has, so a message arriving twice opens one.
|
|
30
|
+
*/
|
|
31
|
+
export declare const openRequestTask: (store: MessageStore, account: AccountKey, message: Message) => Promise<boolean>;
|
|
27
32
|
//# sourceMappingURL=task-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-rules.d.ts","sourceRoot":"","sources":["../../src/services/task-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,KAAK,EAAM,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGjE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,WAAW,0BAA2B,UAAU,KAAG,MAAkC,CAAA;AAElG;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,WACjB;IAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,CAAC,EAAE,CAAA;CAAE,2BAC/B;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,KACnF,OAAO,CAAC,UAAU,CAsCpB,CAAA;AAED,6GAA6G;AAC7G,eAAO,MAAM,cAAc,KAAK,CAAA;AAEhC,mHAAmH;AACnH,eAAO,MAAM,uBAAuB,UAC3B,YAAY,WACV,UAAU,WACV,OAAO,KACf,OAAO,CAAC,UAAU,CAMpB,CAAA"}
|
|
1
|
+
{"version":3,"file":"task-rules.d.ts","sourceRoot":"","sources":["../../src/services/task-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,KAAK,EAAM,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGjE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,WAAW,0BAA2B,UAAU,KAAG,MAAkC,CAAA;AAElG;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,WACjB;IAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,CAAC,EAAE,CAAA;CAAE,2BAC/B;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,KACnF,OAAO,CAAC,UAAU,CAsCpB,CAAA;AAED,6GAA6G;AAC7G,eAAO,MAAM,cAAc,KAAK,CAAA;AAEhC,mHAAmH;AACnH,eAAO,MAAM,uBAAuB,UAC3B,YAAY,WACV,UAAU,WACV,OAAO,KACf,OAAO,CAAC,UAAU,CAMpB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,UAAiB,YAAY,WAAW,UAAU,WAAW,OAAO,KAAG,OAAO,CAAC,OAAO,CAejH,CAAA"}
|
|
@@ -60,6 +60,26 @@ export const applyTaskRulesOnArrival = async (store, account, message) => {
|
|
|
60
60
|
const messages = [...page.items.filter((one) => one.id !== message.id), message].sort((a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp));
|
|
61
61
|
return applyTaskRules({ chats: [{ id: message.chatId, messages }] }, { store: store.tasks, account });
|
|
62
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* A reply rule's `task` action: one `request` task pointing at the message. The service gives back
|
|
65
|
+
* the task a source already has, so a message arriving twice opens one.
|
|
66
|
+
*/
|
|
67
|
+
export const openRequestTask = async (store, account, message) => {
|
|
68
|
+
const { created } = await createTaskService({ store: store.tasks }).add({
|
|
69
|
+
source: formatLocator({
|
|
70
|
+
provider: account.provider,
|
|
71
|
+
account: account.account,
|
|
72
|
+
chat: message.chatId,
|
|
73
|
+
message: message.id,
|
|
74
|
+
}),
|
|
75
|
+
sourceKind: "message",
|
|
76
|
+
account: taskAccount(account),
|
|
77
|
+
group: message.chatId,
|
|
78
|
+
kind: "request",
|
|
79
|
+
origin: "rule",
|
|
80
|
+
});
|
|
81
|
+
return created;
|
|
82
|
+
};
|
|
63
83
|
/** The owner replied to the message, or to anything its sender said, later in the chat. */
|
|
64
84
|
const ownerAnswered = (messages, index) => {
|
|
65
85
|
const message = messages[index];
|