@wirecat/cli-core 0.558.0 → 0.560.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/CHANGELOG.md +60 -0
- package/dist/background/schedules.d.ts +2 -0
- package/dist/cli/effects.d.ts +13 -2
- package/dist/cli/effects.js +23 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +2 -2
- package/dist/cli/meeting-findings-input.d.ts +3 -0
- package/dist/cli/meeting-findings-input.js +4 -0
- package/dist/cli/messenger/conversation-answers.d.ts +3 -0
- package/dist/cli/messenger/message-answers.d.ts +3 -0
- package/dist/cli/messenger/message-writes.d.ts +6 -0
- package/dist/cli/schedule/schedule-command.d.ts +6 -1
- package/dist/cli/schedule/schedule-command.js +24 -2
- package/dist/domain/records.d.ts +161 -0
- package/dist/domain/records.js +234 -0
- package/dist/entities/contact-context.d.ts +6 -0
- package/dist/entities/conversation-results.d.ts +6 -0
- package/dist/entities/evidence.d.ts +24 -0
- package/dist/entities/index.d.ts +190 -0
- package/dist/entities/index.js +3 -0
- package/dist/entities/listener.d.ts +12 -0
- package/dist/entities/mail-findings.d.ts +116 -0
- package/dist/entities/mail-findings.js +68 -0
- package/dist/entities/message-context.d.ts +9 -0
- package/dist/entities/message-write.d.ts +12 -0
- package/dist/entities/message.d.ts +6 -0
- package/dist/entities/message.js +6 -0
- package/dist/entities/store-records.d.ts +3 -0
- package/dist/errors/reasons.js +11 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/mail/cli/marks.d.ts +1 -0
- package/dist/mail/cli/marks.js +11 -4
- package/dist/mail/cli/review.js +10 -2
- package/dist/mail/findings.d.ts +55 -0
- package/dist/mail/findings.js +140 -0
- package/dist/mail/index.d.ts +2 -1
- package/dist/mail/index.js +2 -1
- package/dist/mail/marks.d.ts +10 -3
- package/dist/mail/marks.js +34 -5
- package/dist/meetings/findings-rules.d.ts +24 -0
- package/dist/meetings/findings-rules.js +136 -116
- package/dist/meetings/index.d.ts +2 -1
- package/dist/meetings/index.js +2 -1
- package/dist/meetings/mcp/index.d.ts +15 -15
- package/dist/runs/secrets.d.ts +2 -0
- package/dist/runs/secrets.js +2 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +1 -0
- package/dist/services/ingest.d.ts +45 -0
- package/dist/services/ingest.js +80 -0
- package/dist/services/proposals/kinds/mail-findings.d.ts +8 -0
- package/dist/services/proposals/kinds/mail-findings.js +87 -0
- package/dist/services/proposals/registry.js +3 -1
- package/dist/services/proposals/types.d.ts +2 -0
- package/dist/store/decisions.d.ts +1 -1
- package/dist/store/decisions.js +1 -1
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.js +1 -0
- package/dist/store/mail-findings.d.ts +51 -0
- package/dist/store/mail-findings.js +1 -0
- package/dist/store/path.d.ts +2 -0
- package/dist/store/path.js +21 -1
- package/dist/store/sqlite/accounts.js +4 -0
- package/dist/store/sqlite/email-activity.d.ts +8 -0
- package/dist/store/sqlite/email-activity.js +31 -5
- package/dist/store/sqlite/findings-core.d.ts +1 -0
- package/dist/store/sqlite/findings-core.js +1 -1
- package/dist/store/sqlite/mail-findings.d.ts +3 -0
- package/dist/store/sqlite/mail-findings.js +333 -0
- package/dist/store/sqlite/manifest.js +2 -0
- package/dist/store/sqlite/memories.d.ts +4 -1
- package/dist/store/sqlite/memories.js +48 -43
- package/dist/store/sqlite/migrations.generated.js +16 -0
- package/dist/store/sqlite/open-store.d.ts +1 -1
- package/dist/store/sqlite/open-store.js +4 -1
- package/dist/store/sqlite/open.js +2 -1
- package/dist/store/sqlite/proposed-actions.js +2 -1
- package/dist/store/sqlite/records.d.ts +81 -0
- package/dist/store/sqlite/records.js +372 -0
- package/dist/store/sqlite/schema.d.ts +353 -0
- package/dist/store/sqlite/schema.js +37 -0
- package/dist/store/sqlite/tasks.d.ts +2 -0
- package/dist/store/sqlite/tasks.js +26 -24
- package/dist/store/sqlite/test-accounts.d.ts +8 -0
- package/dist/store/sqlite/test-accounts.js +31 -0
- package/dist/store/sqlite/work-tasks.d.ts +1 -0
- package/dist/store/sqlite/work-tasks.js +6 -0
- package/dist/store/store.d.ts +6 -0
- package/dist/store/store.js +10 -0
- package/package.json +4 -2
- package/schemas/records-envelope.v1.schema.json +108 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { holdsCredential, secretNamed } from "../runs/secrets.js";
|
|
3
|
+
export const RECORDS_SCHEMA_VERSION = 1;
|
|
4
|
+
export const RECORD_OPERATIONS = ["upsert", "delete"];
|
|
5
|
+
/** Types with a table of their own; anything else a source sends is `custom:<name>` and stays a record only. */
|
|
6
|
+
export const RECORD_ENTITY_TYPES = ["invoice", "payment", "person", "organization", "project"];
|
|
7
|
+
const WORD = "^[a-z0-9][a-z0-9_-]{0,62}$";
|
|
8
|
+
const TYPE = "^(invoice|payment|person|organization|project|custom:[a-z0-9][a-z0-9_-]{0,62})$";
|
|
9
|
+
const MAX_ID = 512;
|
|
10
|
+
const MAX_FIELDS_BYTES = 65_536;
|
|
11
|
+
const MAX_RELATIONS = 100;
|
|
12
|
+
/** The v1 envelope as JSON Schema (Draft 2020-12); `schemas/records-envelope.v1.schema.json` is this, written out. */
|
|
13
|
+
export const RECORDS_ENVELOPE_SCHEMA = {
|
|
14
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
15
|
+
title: "WireCat records envelope, version 1",
|
|
16
|
+
description: "Records one source sends to the store. JSONL is the same model: the first line holds schema_version and " +
|
|
17
|
+
"source, each further line one record.",
|
|
18
|
+
type: "object",
|
|
19
|
+
required: ["schema_version", "source", "records"],
|
|
20
|
+
additionalProperties: false,
|
|
21
|
+
properties: {
|
|
22
|
+
schema_version: { const: RECORDS_SCHEMA_VERSION },
|
|
23
|
+
source: { $ref: "#/$defs/source" },
|
|
24
|
+
records: { type: "array", items: { $ref: "#/$defs/record" } },
|
|
25
|
+
},
|
|
26
|
+
$defs: {
|
|
27
|
+
source: {
|
|
28
|
+
type: "object",
|
|
29
|
+
required: ["provider", "account", "batch_id"],
|
|
30
|
+
additionalProperties: false,
|
|
31
|
+
properties: {
|
|
32
|
+
provider: { type: "string", pattern: WORD, description: "The system the records come from" },
|
|
33
|
+
account: { type: "string", minLength: 1, maxLength: MAX_ID, description: "The account in that system" },
|
|
34
|
+
batch_id: { type: "string", minLength: 1, maxLength: MAX_ID, description: "This import, for the receipt" },
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
record: {
|
|
38
|
+
type: "object",
|
|
39
|
+
required: ["key", "type", "external_id", "operation"],
|
|
40
|
+
additionalProperties: false,
|
|
41
|
+
properties: {
|
|
42
|
+
key: { type: "string", minLength: 1, maxLength: MAX_ID },
|
|
43
|
+
type: { type: "string", pattern: TYPE },
|
|
44
|
+
external_id: { type: "string", minLength: 1, maxLength: MAX_ID },
|
|
45
|
+
operation: { enum: [...RECORD_OPERATIONS] },
|
|
46
|
+
fields: {
|
|
47
|
+
type: "object",
|
|
48
|
+
description: "What the source says, as data: never secrets, never instructions",
|
|
49
|
+
},
|
|
50
|
+
revision: { type: "integer", minimum: 0, maximum: Number.MAX_SAFE_INTEGER },
|
|
51
|
+
relations: { type: "array", maxItems: MAX_RELATIONS, items: { $ref: "#/$defs/relation" } },
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
relation: {
|
|
55
|
+
type: "object",
|
|
56
|
+
required: ["role", "type", "external_id"],
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
properties: {
|
|
59
|
+
role: { type: "string", pattern: WORD },
|
|
60
|
+
type: { type: "string", pattern: TYPE },
|
|
61
|
+
external_id: { type: "string", minLength: 1, maxLength: MAX_ID },
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
const wordPattern = new RegExp(WORD);
|
|
67
|
+
const typePattern = new RegExp(TYPE);
|
|
68
|
+
const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
69
|
+
const escapePointer = (segment) => String(segment).replaceAll("~", "~0").replaceAll("/", "~1");
|
|
70
|
+
export const pointerOf = (...segments) => segments.map((s) => `/${escapePointer(s)}`).join("");
|
|
71
|
+
const idText = (value) => typeof value === "string" && value.trim() !== "" && value.length <= MAX_ID && !value.includes("\0");
|
|
72
|
+
const extraKeys = (value, allowed) => Object.keys(value).filter((key) => !allowed.includes(key));
|
|
73
|
+
/** The first secret in `fields`, as a pointer below it: a secret-named key, or a value in a known credential shape. */
|
|
74
|
+
const secretIn = (value, at) => {
|
|
75
|
+
if (typeof value === "string")
|
|
76
|
+
return holdsCredential(value) ? at : undefined;
|
|
77
|
+
if (Array.isArray(value)) {
|
|
78
|
+
for (const [index, item] of value.entries()) {
|
|
79
|
+
const found = secretIn(item, [...at, index]);
|
|
80
|
+
if (found)
|
|
81
|
+
return found;
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
if (!isObject(value))
|
|
86
|
+
return undefined;
|
|
87
|
+
for (const [key, item] of Object.entries(value)) {
|
|
88
|
+
if (secretNamed(key))
|
|
89
|
+
return [...at, key];
|
|
90
|
+
const found = secretIn(item, [...at, key]);
|
|
91
|
+
if (found)
|
|
92
|
+
return found;
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
};
|
|
96
|
+
const relationErrors = (relations, at) => {
|
|
97
|
+
if (relations === undefined)
|
|
98
|
+
return [];
|
|
99
|
+
if (!Array.isArray(relations) || relations.length > MAX_RELATIONS)
|
|
100
|
+
return [invalid(at, `relations is a list of at most ${MAX_RELATIONS}`)];
|
|
101
|
+
return relations.flatMap((relation, index) => {
|
|
102
|
+
const here = [...at, index];
|
|
103
|
+
if (!isObject(relation))
|
|
104
|
+
return [invalid(here, "a relation is an object")];
|
|
105
|
+
const extra = extraKeys(relation, ["role", "type", "external_id"]);
|
|
106
|
+
if (extra.length > 0)
|
|
107
|
+
return [invalid([...here, extra[0]], "a relation holds role, type and external_id")];
|
|
108
|
+
if (typeof relation.role !== "string" || !wordPattern.test(relation.role))
|
|
109
|
+
return [invalid([...here, "role"], "a role is lowercase letters, digits, - and _")];
|
|
110
|
+
if (typeof relation.type !== "string" || !typePattern.test(relation.type))
|
|
111
|
+
return [invalid([...here, "type"], `a type is one of ${RECORD_ENTITY_TYPES.join(", ")} or custom:<name>`)];
|
|
112
|
+
if (!idText(relation.external_id))
|
|
113
|
+
return [invalid([...here, "external_id"], `an external id takes 1–${MAX_ID} characters`)];
|
|
114
|
+
return [];
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
const invalid = (at, message, code = "record.invalid") => ({
|
|
118
|
+
pointer: pointerOf(...at),
|
|
119
|
+
code,
|
|
120
|
+
message,
|
|
121
|
+
});
|
|
122
|
+
/** Why one record cannot be taken, or nothing; `index` is its place in `records`. */
|
|
123
|
+
export const recordErrors = (record, index) => {
|
|
124
|
+
const at = ["records", index];
|
|
125
|
+
if (!isObject(record))
|
|
126
|
+
return [invalid(at, "a record is an object")];
|
|
127
|
+
const key = typeof record.key === "string" ? record.key : undefined;
|
|
128
|
+
const withKey = (errors) => errors.map((error) => (key === undefined ? error : { ...error, key }));
|
|
129
|
+
const extra = extraKeys(record, ["key", "type", "external_id", "operation", "fields", "revision", "relations"]);
|
|
130
|
+
if (extra.length > 0)
|
|
131
|
+
return withKey([invalid([...at, extra[0]], `a record has no ${extra[0]}`)]);
|
|
132
|
+
if (!idText(record.key))
|
|
133
|
+
return [invalid([...at, "key"], `a key takes 1–${MAX_ID} characters`)];
|
|
134
|
+
if (typeof record.type !== "string" || !typePattern.test(record.type))
|
|
135
|
+
return withKey([
|
|
136
|
+
invalid([...at, "type"], `a type is one of ${RECORD_ENTITY_TYPES.join(", ")} or custom:<name>`, "record.type"),
|
|
137
|
+
]);
|
|
138
|
+
if (!idText(record.external_id))
|
|
139
|
+
return withKey([invalid([...at, "external_id"], `an external id takes 1–${MAX_ID} characters`)]);
|
|
140
|
+
if (!RECORD_OPERATIONS.includes(record.operation))
|
|
141
|
+
return withKey([invalid([...at, "operation"], "an operation is upsert or delete")]);
|
|
142
|
+
if (record.revision !== undefined &&
|
|
143
|
+
(typeof record.revision !== "number" || !Number.isSafeInteger(record.revision) || record.revision < 0))
|
|
144
|
+
return withKey([invalid([...at, "revision"], "a revision is a whole number, 0 or more")]);
|
|
145
|
+
if (record.operation === "upsert" && !isObject(record.fields))
|
|
146
|
+
return withKey([invalid([...at, "fields"], "an upsert carries its fields as an object")]);
|
|
147
|
+
if (record.fields !== undefined && !isObject(record.fields))
|
|
148
|
+
return withKey([invalid([...at, "fields"], "fields is an object")]);
|
|
149
|
+
if (record.fields !== undefined && Buffer.byteLength(JSON.stringify(record.fields)) > MAX_FIELDS_BYTES)
|
|
150
|
+
return withKey([invalid([...at, "fields"], `fields take at most ${MAX_FIELDS_BYTES} bytes`, "record.too-large")]);
|
|
151
|
+
const secret = record.fields === undefined ? undefined : secretIn(record.fields, [...at, "fields"]);
|
|
152
|
+
if (secret)
|
|
153
|
+
return withKey([
|
|
154
|
+
invalid(secret, "a secret never goes into the store: drop this field at the source", "record.secret-field"),
|
|
155
|
+
]);
|
|
156
|
+
return withKey(relationErrors(record.relations, [...at, "relations"]));
|
|
157
|
+
};
|
|
158
|
+
/** The envelope's own errors (not its records'): when there is one, no record is taken. */
|
|
159
|
+
export const envelopeErrors = (envelope, account) => {
|
|
160
|
+
if (!isObject(envelope))
|
|
161
|
+
return [invalid([], "an envelope is an object", "envelope.invalid")];
|
|
162
|
+
const extra = extraKeys(envelope, ["schema_version", "source", "records"]);
|
|
163
|
+
if (extra.length > 0)
|
|
164
|
+
return [invalid([extra[0]], `an envelope has no ${extra[0]}`, "envelope.invalid")];
|
|
165
|
+
if (envelope.schema_version !== RECORDS_SCHEMA_VERSION)
|
|
166
|
+
return [
|
|
167
|
+
invalid(["schema_version"], `this build reads schema_version ${RECORDS_SCHEMA_VERSION}, not ${JSON.stringify(envelope.schema_version)}`, "envelope.schema-version"),
|
|
168
|
+
];
|
|
169
|
+
const { source } = envelope;
|
|
170
|
+
if (!isObject(source))
|
|
171
|
+
return [invalid(["source"], "source is an object", "envelope.invalid")];
|
|
172
|
+
const sourceExtra = extraKeys(source, ["provider", "account", "batch_id"]);
|
|
173
|
+
if (sourceExtra.length > 0)
|
|
174
|
+
return [
|
|
175
|
+
invalid(["source", sourceExtra[0]], "source holds provider, account and batch_id", "envelope.invalid"),
|
|
176
|
+
];
|
|
177
|
+
if (typeof source.provider !== "string" || !wordPattern.test(source.provider))
|
|
178
|
+
return [invalid(["source", "provider"], "a provider is lowercase letters, digits, - and _", "envelope.invalid")];
|
|
179
|
+
if (!idText(source.account))
|
|
180
|
+
return [invalid(["source", "account"], `an account takes 1–${MAX_ID} characters`, "envelope.invalid")];
|
|
181
|
+
if (!idText(source.batch_id))
|
|
182
|
+
return [invalid(["source", "batch_id"], `a batch id takes 1–${MAX_ID} characters`, "envelope.invalid")];
|
|
183
|
+
if (source.account !== account)
|
|
184
|
+
return [
|
|
185
|
+
invalid(["source", "account"], `the envelope is for account ${JSON.stringify(source.account)}, the import for ${JSON.stringify(account)}`, "envelope.account-mismatch"),
|
|
186
|
+
];
|
|
187
|
+
if (!Array.isArray(envelope.records))
|
|
188
|
+
return [invalid(["records"], "records is a list", "envelope.invalid")];
|
|
189
|
+
return [];
|
|
190
|
+
};
|
|
191
|
+
const canonical = (value) => {
|
|
192
|
+
if (Array.isArray(value))
|
|
193
|
+
return value.map(canonical);
|
|
194
|
+
if (!isObject(value))
|
|
195
|
+
return value;
|
|
196
|
+
return Object.fromEntries(Object.keys(value)
|
|
197
|
+
.sort()
|
|
198
|
+
.map((key) => [key, canonical(value[key])]));
|
|
199
|
+
};
|
|
200
|
+
/** The same fields and relations in any key or relation order give the same fingerprint. */
|
|
201
|
+
export const recordFingerprint = (fields, relations) => createHash("sha256")
|
|
202
|
+
.update(JSON.stringify(canonical({
|
|
203
|
+
fields,
|
|
204
|
+
relations: relations
|
|
205
|
+
.map((relation) => [relation.role, relation.type, relation.external_id])
|
|
206
|
+
.sort((a, b) => a.join("\0").localeCompare(b.join("\0"))),
|
|
207
|
+
})))
|
|
208
|
+
.digest("hex");
|
|
209
|
+
/**
|
|
210
|
+
* A JSONL import as the envelope it stands for: the first line holds `schema_version` and `source`, each further
|
|
211
|
+
* non-empty line one record. A line that is not JSON comes back as a record the envelope check refuses, at its index.
|
|
212
|
+
*/
|
|
213
|
+
export const envelopeOfJsonl = (text) => {
|
|
214
|
+
const lines = text.split(/\r?\n/);
|
|
215
|
+
const first = lines.findIndex((line) => line.trim() !== "");
|
|
216
|
+
if (first < 0)
|
|
217
|
+
return {};
|
|
218
|
+
const parse = (line) => {
|
|
219
|
+
try {
|
|
220
|
+
return JSON.parse(line);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return line;
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
const header = parse(lines[first]);
|
|
227
|
+
const records = [];
|
|
228
|
+
for (let at = first + 1; at < lines.length; at++) {
|
|
229
|
+
const line = lines[at];
|
|
230
|
+
if (line.trim() !== "")
|
|
231
|
+
records.push(parse(line));
|
|
232
|
+
}
|
|
233
|
+
return isObject(header) ? { ...header, records } : header;
|
|
234
|
+
};
|
|
@@ -349,6 +349,9 @@ export declare const contactMessages: v.StrictObjectSchema<{
|
|
|
349
349
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
350
350
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
351
351
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
352
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
353
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
354
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
352
355
|
readonly reply_to: v.ArraySchema<v.StrictObjectSchema<{
|
|
353
356
|
readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
354
357
|
readonly address: v.StringSchema<undefined>;
|
|
@@ -1124,6 +1127,9 @@ export declare const contactContext: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1124
1127
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1125
1128
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
1126
1129
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
1130
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
1131
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1132
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1127
1133
|
readonly reply_to: v.ArraySchema<v.StrictObjectSchema<{
|
|
1128
1134
|
readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
1129
1135
|
readonly address: v.StringSchema<undefined>;
|
|
@@ -227,6 +227,9 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
227
227
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
228
228
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
229
229
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
230
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
231
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
232
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
230
233
|
}, undefined>, undefined>;
|
|
231
234
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
232
235
|
}, undefined>, undefined>;
|
|
@@ -447,6 +450,9 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
447
450
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
448
451
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
449
452
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
453
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
454
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
455
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
450
456
|
}, undefined>, undefined>;
|
|
451
457
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
452
458
|
}, undefined>], undefined>;
|
|
@@ -218,6 +218,9 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
218
218
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
219
219
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
220
220
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
221
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
222
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
223
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
221
224
|
}, undefined>, undefined>;
|
|
222
225
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
223
226
|
}, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
|
|
@@ -438,6 +441,9 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
438
441
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
439
442
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
440
443
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
444
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
445
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
446
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
441
447
|
}, undefined>, undefined>;
|
|
442
448
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
443
449
|
}, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
|
|
@@ -696,6 +702,9 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
696
702
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
697
703
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
698
704
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
705
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
706
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
707
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
699
708
|
}, undefined>, undefined>;
|
|
700
709
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
701
710
|
}, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
|
|
@@ -916,6 +925,9 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
916
925
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
917
926
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
918
927
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
928
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
929
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
930
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
919
931
|
}, undefined>, undefined>;
|
|
920
932
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
921
933
|
}, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
|
|
@@ -1210,6 +1222,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1210
1222
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1211
1223
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
1212
1224
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
1225
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
1226
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1227
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1213
1228
|
}, undefined>, undefined>;
|
|
1214
1229
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
1215
1230
|
}, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
|
|
@@ -1430,6 +1445,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1430
1445
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1431
1446
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
1432
1447
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
1448
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
1449
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1450
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1433
1451
|
}, undefined>, undefined>;
|
|
1434
1452
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
1435
1453
|
}, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
|
|
@@ -1688,6 +1706,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1688
1706
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1689
1707
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
1690
1708
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
1709
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
1710
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1711
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1691
1712
|
}, undefined>, undefined>;
|
|
1692
1713
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
1693
1714
|
}, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
|
|
@@ -1908,6 +1929,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1908
1929
|
readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1909
1930
|
readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
1910
1931
|
readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
1932
|
+
readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
|
|
1933
|
+
readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1934
|
+
readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1911
1935
|
}, undefined>, undefined>;
|
|
1912
1936
|
readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
|
|
1913
1937
|
}, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
|