@massalabs/gossip-sdk 0.0.2-dev.20260316144414 → 0.0.2-dev.20260317085237
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/db/db.d.ts +1 -0
- package/dist/db/generated-migrations.js +8 -0
- package/dist/db/schema/discussions.d.ts +17 -0
- package/dist/db/schema/discussions.js +1 -0
- package/dist/services/discussion.d.ts +5 -0
- package/dist/services/discussion.js +5 -1
- package/dist/utils/discussions.d.ts +4 -0
- package/dist/utils/discussions.js +16 -0
- package/package.json +1 -1
package/dist/db/db.d.ts
CHANGED
|
@@ -137,6 +137,7 @@ export interface Discussion {
|
|
|
137
137
|
lastMessageContent: string | null;
|
|
138
138
|
lastMessageTimestamp: Date | null;
|
|
139
139
|
unreadCount: number;
|
|
140
|
+
pinned: boolean;
|
|
140
141
|
killedNextRetryAt?: Date | null;
|
|
141
142
|
saturatedRetryAt?: Date | null;
|
|
142
143
|
saturatedRetryDone: boolean;
|
|
@@ -40,4 +40,12 @@ export const MIGRATIONS = [
|
|
|
40
40
|
when: 1740000000000,
|
|
41
41
|
statements: ['ALTER TABLE `messages` ADD COLUMN `editOf` text;'],
|
|
42
42
|
},
|
|
43
|
+
{
|
|
44
|
+
idx: 2,
|
|
45
|
+
tag: '0002_discussions_pinned',
|
|
46
|
+
when: 1741000000000,
|
|
47
|
+
statements: [
|
|
48
|
+
'ALTER TABLE `discussions` ADD COLUMN `pinned` integer NOT NULL DEFAULT 0;',
|
|
49
|
+
],
|
|
50
|
+
},
|
|
43
51
|
];
|
|
@@ -277,6 +277,23 @@ export declare const discussions: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
277
277
|
identity: undefined;
|
|
278
278
|
generated: undefined;
|
|
279
279
|
}, {}, {}>;
|
|
280
|
+
pinned: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
281
|
+
name: "pinned";
|
|
282
|
+
tableName: "discussions";
|
|
283
|
+
dataType: "boolean";
|
|
284
|
+
columnType: "SQLiteBoolean";
|
|
285
|
+
data: boolean;
|
|
286
|
+
driverParam: number;
|
|
287
|
+
notNull: true;
|
|
288
|
+
hasDefault: true;
|
|
289
|
+
isPrimaryKey: false;
|
|
290
|
+
isAutoincrement: false;
|
|
291
|
+
hasRuntimeDefault: false;
|
|
292
|
+
enumValues: undefined;
|
|
293
|
+
baseColumn: never;
|
|
294
|
+
identity: undefined;
|
|
295
|
+
generated: undefined;
|
|
296
|
+
}, {}, {}>;
|
|
280
297
|
killedNextRetryAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
281
298
|
name: "killedNextRetryAt";
|
|
282
299
|
tableName: "discussions";
|
|
@@ -22,6 +22,7 @@ export const discussions = sqliteTable('discussions', {
|
|
|
22
22
|
mode: 'timestamp_ms',
|
|
23
23
|
}),
|
|
24
24
|
unreadCount: integer('unreadCount').notNull().default(0),
|
|
25
|
+
pinned: integer('pinned', { mode: 'boolean' }).notNull().default(false),
|
|
25
26
|
killedNextRetryAt: integer('killedNextRetryAt', { mode: 'timestamp_ms' }),
|
|
26
27
|
saturatedRetryAt: integer('saturatedRetryAt', { mode: 'timestamp_ms' }),
|
|
27
28
|
saturatedRetryDone: integer('saturatedRetryDone', { mode: 'boolean' })
|
|
@@ -98,4 +98,9 @@ export declare class DiscussionService {
|
|
|
98
98
|
get(contactUserId: string): Promise<Discussion | undefined>;
|
|
99
99
|
/** Update the custom name of a discussion */
|
|
100
100
|
updateName(discussionId: number, name: string | undefined): Promise<UpdateDiscussionNameResult>;
|
|
101
|
+
/** Pin or unpin a discussion */
|
|
102
|
+
pin(discussionId: number, pinned: boolean): Promise<{
|
|
103
|
+
success: boolean;
|
|
104
|
+
message?: string;
|
|
105
|
+
}>;
|
|
101
106
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Class-based service for initializing, accepting, and managing discussions.
|
|
5
5
|
*/
|
|
6
6
|
import { DiscussionDirection, MessageDirection, MessageStatus, MessageType, serializeSendAnnouncement, } from '../db/index.js';
|
|
7
|
-
import { toDiscussion, toSortedDiscussions, updateDiscussionName, } from '../utils/discussions.js';
|
|
7
|
+
import { toDiscussion, toSortedDiscussions, updateDiscussionName, updateDiscussionPin, } from '../utils/discussions.js';
|
|
8
8
|
import { encodeAnnouncementPayload, } from '../utils/announcementPayload.js';
|
|
9
9
|
import { UserPublicKeys } from '../wasm/bindings.js';
|
|
10
10
|
import { Logger } from '../utils/logs.js';
|
|
@@ -321,4 +321,8 @@ export class DiscussionService {
|
|
|
321
321
|
updateName(discussionId, name) {
|
|
322
322
|
return updateDiscussionName(discussionId, name, this.queries);
|
|
323
323
|
}
|
|
324
|
+
/** Pin or unpin a discussion */
|
|
325
|
+
pin(discussionId, pinned) {
|
|
326
|
+
return updateDiscussionPin(discussionId, pinned, this.queries);
|
|
327
|
+
}
|
|
324
328
|
}
|
|
@@ -10,6 +10,10 @@ import { Queries } from '../db/queries/index.js';
|
|
|
10
10
|
export declare function toDiscussion(row: DiscussionRow): Discussion;
|
|
11
11
|
/** Convert discussion rows to sorted Discussion[]. Most recent activity first. */
|
|
12
12
|
export declare function toSortedDiscussions(rows: DiscussionRow[]): Discussion[];
|
|
13
|
+
export declare function updateDiscussionPin(discussionId: number, pinned: boolean, queries: Queries): Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
message?: string;
|
|
16
|
+
}>;
|
|
13
17
|
export type UpdateDiscussionNameResult = {
|
|
14
18
|
success: true;
|
|
15
19
|
trimmedName: string | undefined;
|
|
@@ -21,6 +21,22 @@ export function toSortedDiscussions(rows) {
|
|
|
21
21
|
return b.createdAt.getTime() - a.createdAt.getTime();
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
+
export async function updateDiscussionPin(discussionId, pinned, queries) {
|
|
25
|
+
try {
|
|
26
|
+
const discussion = await queries.discussions.getById(discussionId);
|
|
27
|
+
if (!discussion)
|
|
28
|
+
return { success: false, message: 'Discussion not found.' };
|
|
29
|
+
await queries.discussions.updateById(discussionId, { pinned });
|
|
30
|
+
return { success: true };
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.error('updateDiscussionPin failed', e);
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
message: 'Failed to update pin. Please try again.',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
24
40
|
/**
|
|
25
41
|
* Update the custom name of a discussion.
|
|
26
42
|
* Pass an empty string or undefined to clear the custom name (will revert to contact name).
|
package/package.json
CHANGED