diff --git a/packages/hub/src/readqueue.ts b/packages/hub/src/readqueue.ts
index d71f077..768f024 100644
--- a/packages/hub/src/readqueue.ts
+++ b/packages/hub/src/readqueue.ts
@@ -10,7 +10,7 @@ import type * as P from '@dither-chat/protocol';
import type { Store } from './store.ts';
/** Time between reads on one account, in ms. */
-export const READ_PACE: Record
= { discord: 1500, matrix: 300, signal: 300, whatsapp: 1000, telegram: 500, gmessages: 500 };
+export const READ_PACE: Record = { discord: 1500, matrix: 300, signal: 300, whatsapp: 1000, telegram: 500, gmessages: 500, messenger: 1000, instagram: 1000, x: 1000 };
const MAX_ATTEMPTS = 5;
const BACKOFF = 30_000;
diff --git a/packages/protocol/src/about.ts b/packages/protocol/src/about.ts
index 9344277..ca5189a 100644
--- a/packages/protocol/src/about.ts
+++ b/packages/protocol/src/about.ts
@@ -203,6 +203,18 @@ export const ABOUT_RULES: Record = {
space: [],
nameMax: 100,
},
+ messenger: {
+ conversation: ['name', 'avatar'],
+ space: [],
+ },
+ instagram: {
+ conversation: ['name'],
+ space: [],
+ },
+ x: {
+ conversation: ['name', 'avatar'],
+ space: [],
+ },
};
export const ABOUT_LABEL: Record = {
diff --git a/packages/protocol/src/ontology.ts b/packages/protocol/src/ontology.ts
index f131674..805b91b 100644
--- a/packages/protocol/src/ontology.ts
+++ b/packages/protocol/src/ontology.ts
@@ -15,8 +15,12 @@
* (persons, folders, notification rules, triage) are never written back.
*/
-export type Network = 'discord' | 'signal' | 'matrix' | 'whatsapp' | 'telegram' | 'gmessages';
-/** The networks this hub offers. telegram and gmessages (Google Messages: SMS and RCS) run only in dither-accounts. */
+export type Network = 'discord' | 'signal' | 'matrix' | 'whatsapp' | 'telegram' | 'gmessages' | 'messenger' | 'instagram' | 'x';
+/**
+ * The networks this hub offers. telegram and gmessages (Google Messages: SMS and RCS) run only in dither-accounts.
+ * messenger, instagram and x (X's direct messages) are in the type for dither-accounts' extractors being built, and join
+ * this list once the hub runs them.
+ */
export const NETWORKS: readonly Network[] = ['discord', 'signal', 'matrix', 'whatsapp', 'telegram', 'gmessages'];
/** Where a conversation sits in the social structure, independent of network. */
@@ -116,6 +120,10 @@ export const REACTION_RULES: Record = {
telegram: { exclusive: true, freeText: false },
// RCS reactions; SMS has none.
gmessages: { exclusive: true, freeText: false },
+ // One reaction each, any emoji.
+ messenger: { exclusive: true, freeText: false },
+ instagram: { exclusive: true, freeText: false },
+ x: { exclusive: true, freeText: false },
};
export function discordEmojiUrl(id: string, animated?: boolean): string {
@@ -172,6 +180,10 @@ export const ATTACHMENT_LIMITS: Record void }) {
diff --git a/packages/web/src/ui/Profile.tsx b/packages/web/src/ui/Profile.tsx
index 993c111..d37c887 100644
--- a/packages/web/src/ui/Profile.tsx
+++ b/packages/web/src/ui/Profile.tsx
@@ -29,6 +29,9 @@ const WHAT_NETWORKS_SHARE: Record = {
whatsapp: 'The name in your address book, their About and picture, and whether it is a business.',
telegram: 'Name, username, bio and photo, and their phone number or last seen only where they allow it.',
gmessages: 'The name and number in your contacts. Messages has no profiles.',
+ messenger: 'Name and profile picture, as Facebook shows them to you.',
+ instagram: 'Username, name, bio and picture, and whether the account is private.',
+ x: 'Name, handle, bio and picture, as their X profile shows them.',
};
function externalProfile(i: P.IdentityView): string | null {