@localhostdevs/sdk 0.12.0 → 0.14.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/bot.d.ts +11 -0
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +156 -1
- package/dist/bot.js.map +1 -1
- package/dist/collect.d.ts +46 -0
- package/dist/collect.d.ts.map +1 -0
- package/dist/collect.js +68 -0
- package/dist/collect.js.map +1 -0
- package/dist/collectStore.d.ts +31 -0
- package/dist/collectStore.d.ts.map +1 -0
- package/dist/collectStore.js +96 -0
- package/dist/collectStore.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/poll.d.ts +31 -0
- package/dist/poll.d.ts.map +1 -0
- package/dist/poll.js +48 -0
- package/dist/poll.js.map +1 -0
- package/dist/pollStore.d.ts +26 -0
- package/dist/pollStore.d.ts.map +1 -0
- package/dist/pollStore.js +79 -0
- package/dist/pollStore.js.map +1 -0
- package/dist/transport.d.ts +17 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +5 -0
- package/dist/transport.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +61 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/poll.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { PollOption } from './pollStore.js';
|
|
2
|
+
import type { PollStore } from './pollStore.js';
|
|
3
|
+
import type { CommandContext } from './types.js';
|
|
4
|
+
export type PollResult = {
|
|
5
|
+
action: string | null;
|
|
6
|
+
noVotes?: boolean;
|
|
7
|
+
tally: Array<{
|
|
8
|
+
action: string;
|
|
9
|
+
label: string;
|
|
10
|
+
votes: number;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
/** Plurality; on a tie the earliest-declared option (lowest index) wins; zero
|
|
14
|
+
* total votes → { action: null, noVotes: true }. The tally lists every option
|
|
15
|
+
* in declaration order. */
|
|
16
|
+
export declare function resolveWinner(options: PollOption[], counts: Record<string, number>): PollResult;
|
|
17
|
+
export type PollResultSink = (event: {
|
|
18
|
+
promptId: string;
|
|
19
|
+
result: PollResult;
|
|
20
|
+
origin: Record<string, unknown>;
|
|
21
|
+
}) => Promise<void>;
|
|
22
|
+
/** One close-loop pass: resolve every due open poll, emit to the sink, mark
|
|
23
|
+
* closed. Emit-before-mark with at-least-once intent — if the sink throws the
|
|
24
|
+
* poll stays open and is retried next pass (the sink/#2 dedups on promptId).
|
|
25
|
+
* Never rejects: a per-poll failure is isolated so one bad poll can't stall
|
|
26
|
+
* the rest. */
|
|
27
|
+
export declare function closeDuePolls(store: PollStore, now: number, sink: PollResultSink): Promise<void>;
|
|
28
|
+
/** The internal `__poll_vote` action handler: upsert one vote per member.
|
|
29
|
+
* Ignores votes for an unknown/closed poll or an option not in the poll. */
|
|
30
|
+
export declare function makeVoteHandler(store: PollStore): (ctx: CommandContext) => Promise<void>;
|
|
31
|
+
//# sourceMappingURL=poll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE,CAAC;AAEF;;4BAE4B;AAC5B,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CAQ/F;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB;;;;gBAIgB;AAChB,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtG;AAED;6EAC6E;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAYxF"}
|
package/dist/poll.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** Plurality; on a tie the earliest-declared option (lowest index) wins; zero
|
|
2
|
+
* total votes → { action: null, noVotes: true }. The tally lists every option
|
|
3
|
+
* in declaration order. */
|
|
4
|
+
export function resolveWinner(options, counts) {
|
|
5
|
+
const tally = options.map((o) => ({ action: o.action, label: o.label, votes: counts[o.action] ?? 0 }));
|
|
6
|
+
const total = tally.reduce((s, t) => s + t.votes, 0);
|
|
7
|
+
if (total === 0)
|
|
8
|
+
return { action: null, noVotes: true, tally };
|
|
9
|
+
// Iterate in declaration order so the first option to reach the max wins ties.
|
|
10
|
+
let best = tally[0];
|
|
11
|
+
for (const t of tally)
|
|
12
|
+
if (t.votes > best.votes)
|
|
13
|
+
best = t;
|
|
14
|
+
return { action: best.action, tally };
|
|
15
|
+
}
|
|
16
|
+
/** One close-loop pass: resolve every due open poll, emit to the sink, mark
|
|
17
|
+
* closed. Emit-before-mark with at-least-once intent — if the sink throws the
|
|
18
|
+
* poll stays open and is retried next pass (the sink/#2 dedups on promptId).
|
|
19
|
+
* Never rejects: a per-poll failure is isolated so one bad poll can't stall
|
|
20
|
+
* the rest. */
|
|
21
|
+
export async function closeDuePolls(store, now, sink) {
|
|
22
|
+
for (const poll of store.dueOpenPolls(now)) {
|
|
23
|
+
try {
|
|
24
|
+
const result = resolveWinner(poll.options, store.tally(poll.promptId));
|
|
25
|
+
await sink({ promptId: poll.promptId, result, origin: poll.origin });
|
|
26
|
+
store.markClosed(poll.promptId);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Leave it open; next pass retries.
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** The internal `__poll_vote` action handler: upsert one vote per member.
|
|
34
|
+
* Ignores votes for an unknown/closed poll or an option not in the poll. */
|
|
35
|
+
export function makeVoteHandler(store) {
|
|
36
|
+
return async (ctx) => {
|
|
37
|
+
const promptId = typeof ctx.args.promptId === 'string' ? ctx.args.promptId : '';
|
|
38
|
+
const option = typeof ctx.args.option === 'string' ? ctx.args.option : '';
|
|
39
|
+
const voterId = ctx.user?.id;
|
|
40
|
+
const poll = promptId ? store.getPoll(promptId) : null;
|
|
41
|
+
if (poll && poll.status === 'open' && voterId && poll.options.some((o) => o.action === option)) {
|
|
42
|
+
store.recordVote(promptId, voterId, option);
|
|
43
|
+
}
|
|
44
|
+
// Always ack so the dispatch completes (the visible tally update is #2's job).
|
|
45
|
+
await ctx.reply({ kind: 'text', text: 'voted' });
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=poll.js.map
|
package/dist/poll.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type PollOption = {
|
|
2
|
+
label: string;
|
|
3
|
+
action: string;
|
|
4
|
+
};
|
|
5
|
+
export type StoredPoll = {
|
|
6
|
+
promptId: string;
|
|
7
|
+
question: string;
|
|
8
|
+
options: PollOption[];
|
|
9
|
+
closesAt: number;
|
|
10
|
+
origin: Record<string, unknown>;
|
|
11
|
+
status: 'open' | 'closed';
|
|
12
|
+
};
|
|
13
|
+
/** Durable poll + vote storage over the built-in node:sqlite (synchronous). */
|
|
14
|
+
export declare class PollStore {
|
|
15
|
+
private readonly db;
|
|
16
|
+
constructor(path: string);
|
|
17
|
+
openPoll(p: Omit<StoredPoll, 'status'>): void;
|
|
18
|
+
recordVote(promptId: string, voterId: string, option: string): void;
|
|
19
|
+
getPoll(promptId: string): StoredPoll | null;
|
|
20
|
+
/** option(action) → count, with every option present (0 for unvoted). */
|
|
21
|
+
tally(promptId: string): Record<string, number>;
|
|
22
|
+
dueOpenPolls(now: number): StoredPoll[];
|
|
23
|
+
markClosed(promptId: string): void;
|
|
24
|
+
close(): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=pollStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pollStore.d.ts","sourceRoot":"","sources":["../src/pollStore.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC3B,CAAC;AAoBF,+EAA+E;AAC/E,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;gBAEtB,IAAI,EAAE,MAAM;IAKxB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,IAAI;IAU7C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASnE,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAe5C,yEAAyE;IACzE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW/C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE;IAOvC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
const DDL = `
|
|
3
|
+
CREATE TABLE IF NOT EXISTS polls (
|
|
4
|
+
prompt_id TEXT PRIMARY KEY,
|
|
5
|
+
question TEXT NOT NULL,
|
|
6
|
+
options TEXT NOT NULL,
|
|
7
|
+
closes_at INTEGER NOT NULL,
|
|
8
|
+
origin TEXT NOT NULL,
|
|
9
|
+
status TEXT NOT NULL DEFAULT 'open'
|
|
10
|
+
);
|
|
11
|
+
CREATE TABLE IF NOT EXISTS poll_votes (
|
|
12
|
+
prompt_id TEXT NOT NULL,
|
|
13
|
+
voter_id TEXT NOT NULL,
|
|
14
|
+
option TEXT NOT NULL,
|
|
15
|
+
PRIMARY KEY (prompt_id, voter_id)
|
|
16
|
+
);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS polls_open_due_idx ON polls (status, closes_at);
|
|
18
|
+
`;
|
|
19
|
+
/** Durable poll + vote storage over the built-in node:sqlite (synchronous). */
|
|
20
|
+
export class PollStore {
|
|
21
|
+
db;
|
|
22
|
+
constructor(path) {
|
|
23
|
+
this.db = new DatabaseSync(path);
|
|
24
|
+
this.db.exec(DDL);
|
|
25
|
+
}
|
|
26
|
+
openPoll(p) {
|
|
27
|
+
this.db
|
|
28
|
+
.prepare(`INSERT INTO polls (prompt_id, question, options, closes_at, origin, status)
|
|
29
|
+
VALUES (?, ?, ?, ?, ?, 'open')
|
|
30
|
+
ON CONFLICT(prompt_id) DO NOTHING`)
|
|
31
|
+
.run(p.promptId, p.question, JSON.stringify(p.options), p.closesAt, JSON.stringify(p.origin));
|
|
32
|
+
}
|
|
33
|
+
recordVote(promptId, voterId, option) {
|
|
34
|
+
this.db
|
|
35
|
+
.prepare(`INSERT INTO poll_votes (prompt_id, voter_id, option) VALUES (?, ?, ?)
|
|
36
|
+
ON CONFLICT(prompt_id, voter_id) DO UPDATE SET option = excluded.option`)
|
|
37
|
+
.run(promptId, voterId, option);
|
|
38
|
+
}
|
|
39
|
+
getPoll(promptId) {
|
|
40
|
+
const row = this.db.prepare(`SELECT * FROM polls WHERE prompt_id = ?`).get(promptId);
|
|
41
|
+
if (!row)
|
|
42
|
+
return null;
|
|
43
|
+
return {
|
|
44
|
+
promptId: row.prompt_id,
|
|
45
|
+
question: row.question,
|
|
46
|
+
options: JSON.parse(row.options),
|
|
47
|
+
closesAt: row.closes_at,
|
|
48
|
+
origin: JSON.parse(row.origin),
|
|
49
|
+
status: row.status,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** option(action) → count, with every option present (0 for unvoted). */
|
|
53
|
+
tally(promptId) {
|
|
54
|
+
const poll = this.getPoll(promptId);
|
|
55
|
+
const counts = {};
|
|
56
|
+
for (const o of poll?.options ?? [])
|
|
57
|
+
counts[o.action] = 0;
|
|
58
|
+
const rows = this.db
|
|
59
|
+
.prepare(`SELECT option, COUNT(*) AS n FROM poll_votes WHERE prompt_id = ? GROUP BY option`)
|
|
60
|
+
.all(promptId);
|
|
61
|
+
for (const r of rows)
|
|
62
|
+
if (r.option in counts)
|
|
63
|
+
counts[r.option] = r.n;
|
|
64
|
+
return counts;
|
|
65
|
+
}
|
|
66
|
+
dueOpenPolls(now) {
|
|
67
|
+
const rows = this.db
|
|
68
|
+
.prepare(`SELECT prompt_id FROM polls WHERE status = 'open' AND closes_at <= ?`)
|
|
69
|
+
.all(now);
|
|
70
|
+
return rows.map((r) => this.getPoll(r.prompt_id)).filter(Boolean);
|
|
71
|
+
}
|
|
72
|
+
markClosed(promptId) {
|
|
73
|
+
this.db.prepare(`UPDATE polls SET status = 'closed' WHERE prompt_id = ?`).run(promptId);
|
|
74
|
+
}
|
|
75
|
+
close() {
|
|
76
|
+
this.db.close();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=pollStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pollStore.js","sourceRoot":"","sources":["../src/pollStore.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const OP: {
|
|
|
5
5
|
readonly HEARTBEAT: 2;
|
|
6
6
|
readonly REPLY: 3;
|
|
7
7
|
readonly UPDATE: 4;
|
|
8
|
+
readonly COLLECT_RESULT: 5;
|
|
8
9
|
readonly ERROR: 9;
|
|
9
10
|
readonly HELLO: 10;
|
|
10
11
|
readonly HEARTBEAT_ACK: 11;
|
|
@@ -64,6 +65,20 @@ export type ReplyBodyShape = {
|
|
|
64
65
|
style?: 'primary' | 'danger' | 'default';
|
|
65
66
|
charge?: boolean;
|
|
66
67
|
}>;
|
|
68
|
+
} | {
|
|
69
|
+
kind: 'collect';
|
|
70
|
+
promptId: string;
|
|
71
|
+
prompt: {
|
|
72
|
+
text: string;
|
|
73
|
+
};
|
|
74
|
+
submission: 'option' | 'text';
|
|
75
|
+
options?: ReadonlyArray<{
|
|
76
|
+
label: string;
|
|
77
|
+
action: string;
|
|
78
|
+
}>;
|
|
79
|
+
aggregate: 'plurality' | 'list';
|
|
80
|
+
closesAt?: number;
|
|
81
|
+
until?: number;
|
|
67
82
|
};
|
|
68
83
|
export type Progress = number | {
|
|
69
84
|
current: number;
|
|
@@ -139,6 +154,8 @@ export declare class Transport {
|
|
|
139
154
|
replayReply(msgId: string): void;
|
|
140
155
|
sendCannotReplay(msgId: string): void;
|
|
141
156
|
sendUpdate(msgId: string, progress: Progress | undefined, body: UpdateBodyShape): void;
|
|
157
|
+
/** Proactive (no msgId): the bot pushes a closed collect's result. */
|
|
158
|
+
sendCollectResult(promptId: string, result: unknown): void;
|
|
142
159
|
private send;
|
|
143
160
|
private startHeartbeat;
|
|
144
161
|
close(): Promise<void>;
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.js
CHANGED
|
@@ -6,6 +6,7 @@ export const OP = {
|
|
|
6
6
|
HEARTBEAT: 2,
|
|
7
7
|
REPLY: 3,
|
|
8
8
|
UPDATE: 4,
|
|
9
|
+
COLLECT_RESULT: 5,
|
|
9
10
|
ERROR: 9,
|
|
10
11
|
HELLO: 10,
|
|
11
12
|
HEARTBEAT_ACK: 11,
|
|
@@ -149,6 +150,10 @@ export class Transport {
|
|
|
149
150
|
sendUpdate(msgId, progress, body) {
|
|
150
151
|
this.send({ op: OP.UPDATE, d: { msgId, progress, body } });
|
|
151
152
|
}
|
|
153
|
+
/** Proactive (no msgId): the bot pushes a closed collect's result. */
|
|
154
|
+
sendCollectResult(promptId, result) {
|
|
155
|
+
this.send({ op: OP.COLLECT_RESULT, d: { promptId, result } });
|
|
156
|
+
}
|
|
152
157
|
send(msg) {
|
|
153
158
|
if (!this.ws || this.ws.readyState !== WebSocket.OPEN)
|
|
154
159
|
return;
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,2FAA2F;AAC3F,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,EAAE;CACT,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|