@happyvertical/smrt-messages 0.43.9 → 0.44.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/chunks/{Email-BwMhh-Dr.js → Email-BR0NkbZc.js} +2 -2
- package/dist/chunks/{Email-BwMhh-Dr.js.map → Email-BR0NkbZc.js.map} +1 -1
- package/dist/chunks/{Message-CORy3jwy.js → Message-68WwnJi0.js} +89 -35
- package/dist/chunks/Message-68WwnJi0.js.map +1 -0
- package/dist/chunks/{MessageCollection-D6zqQoJV.js → MessageCollection-Db1A7xHc.js} +2 -2
- package/dist/chunks/{MessageCollection-D6zqQoJV.js.map → MessageCollection-Db1A7xHc.js.map} +1 -1
- package/dist/index.js +5 -5
- package/dist/manifest.json +351 -11
- package/dist/models/Message.d.ts +1 -0
- package/dist/models/Message.d.ts.map +1 -1
- package/dist/smrt-knowledge.json +223 -13
- package/dist/svelte/components/AccountAvatar.svelte +3 -0
- package/dist/svelte/components/AccountAvatar.svelte.d.ts +3 -0
- package/dist/svelte/components/AccountAvatar.svelte.d.ts.map +1 -1
- package/dist/svelte/components/AccountCard.svelte +5 -0
- package/dist/svelte/components/AccountCard.svelte.d.ts +5 -0
- package/dist/svelte/components/AccountCard.svelte.d.ts.map +1 -1
- package/dist/svelte/components/AccountList.svelte +5 -0
- package/dist/svelte/components/AccountList.svelte.d.ts +5 -0
- package/dist/svelte/components/AccountList.svelte.d.ts.map +1 -1
- package/dist/svelte/components/AttachmentChip.svelte +2 -0
- package/dist/svelte/components/AttachmentChip.svelte.d.ts +2 -0
- package/dist/svelte/components/AttachmentChip.svelte.d.ts.map +1 -1
- package/dist/svelte/components/AttachmentUpload.svelte +4 -0
- package/dist/svelte/components/AttachmentUpload.svelte.d.ts +4 -0
- package/dist/svelte/components/AttachmentUpload.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ComposeForm.svelte +6 -0
- package/dist/svelte/components/ComposeForm.svelte.d.ts +6 -0
- package/dist/svelte/components/ComposeForm.svelte.d.ts.map +1 -1
- package/dist/svelte/components/EmailAccountManager.svelte +5 -0
- package/dist/svelte/components/EmailAccountManager.svelte.d.ts +5 -0
- package/dist/svelte/components/EmailAccountManager.svelte.d.ts.map +1 -1
- package/dist/svelte/components/EmailFilterManager.svelte +7 -0
- package/dist/svelte/components/EmailFilterManager.svelte.d.ts +7 -0
- package/dist/svelte/components/EmailFilterManager.svelte.d.ts.map +1 -1
- package/dist/svelte/components/FolderNav.svelte +4 -0
- package/dist/svelte/components/FolderNav.svelte.d.ts +4 -0
- package/dist/svelte/components/FolderNav.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ForwardForm.svelte +3 -0
- package/dist/svelte/components/ForwardForm.svelte.d.ts +3 -0
- package/dist/svelte/components/ForwardForm.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessageCard.svelte +10 -0
- package/dist/svelte/components/MessageCard.svelte.d.ts +10 -0
- package/dist/svelte/components/MessageCard.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessageDetail.svelte +8 -0
- package/dist/svelte/components/MessageDetail.svelte.d.ts +8 -0
- package/dist/svelte/components/MessageDetail.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessageFilters.svelte +6 -0
- package/dist/svelte/components/MessageFilters.svelte.d.ts +6 -0
- package/dist/svelte/components/MessageFilters.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessageList.svelte +13 -0
- package/dist/svelte/components/MessageList.svelte.d.ts +13 -0
- package/dist/svelte/components/MessageList.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessageStatusIndicator.svelte +5 -0
- package/dist/svelte/components/MessageStatusIndicator.svelte.d.ts +5 -0
- package/dist/svelte/components/MessageStatusIndicator.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessageToolbar.svelte +6 -0
- package/dist/svelte/components/MessageToolbar.svelte.d.ts +6 -0
- package/dist/svelte/components/MessageToolbar.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessageTypeBadge.svelte +2 -0
- package/dist/svelte/components/MessageTypeBadge.svelte.d.ts +2 -0
- package/dist/svelte/components/MessageTypeBadge.svelte.d.ts.map +1 -1
- package/dist/svelte/components/MessagingSettingsPanel.svelte +9 -0
- package/dist/svelte/components/MessagingSettingsPanel.svelte.d.ts +9 -0
- package/dist/svelte/components/MessagingSettingsPanel.svelte.d.ts.map +1 -1
- package/dist/svelte/components/RecipientInput.svelte +4 -0
- package/dist/svelte/components/RecipientInput.svelte.d.ts +4 -0
- package/dist/svelte/components/RecipientInput.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ReplyForm.svelte +4 -0
- package/dist/svelte/components/ReplyForm.svelte.d.ts +4 -0
- package/dist/svelte/components/ReplyForm.svelte.d.ts.map +1 -1
- package/dist/svelte/components/SendStatusBadge.svelte +2 -0
- package/dist/svelte/components/SendStatusBadge.svelte.d.ts +2 -0
- package/dist/svelte/components/SendStatusBadge.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ThreadView.svelte +5 -0
- package/dist/svelte/components/ThreadView.svelte.d.ts +5 -0
- package/dist/svelte/components/ThreadView.svelte.d.ts.map +1 -1
- package/package.json +9 -8
- package/dist/chunks/Message-CORy3jwy.js.map +0 -1
|
@@ -3,16 +3,25 @@ import type { MessagingProviderDefinition } from '../../providers.js';
|
|
|
3
3
|
import type { MessagingAccountInput, MessagingAccountView, MessagingEndpointInput, MessagingEndpointView, PersonaMessageRouteInput } from '../../services/MessagingSettingsService.js';
|
|
4
4
|
type PublicProvider = Omit<MessagingProviderDefinition, 'createSender'>;
|
|
5
5
|
export interface Props {
|
|
6
|
+
/** Persona ID to configure messaging settings for. */
|
|
6
7
|
personaId: string;
|
|
7
8
|
/** Current user's profile, attached to destinations created by this panel. */
|
|
8
9
|
profileId?: string;
|
|
10
|
+
/** Available messaging providers to choose from. */
|
|
9
11
|
providers: PublicProvider[];
|
|
12
|
+
/** Configured messaging accounts to display and manage. */
|
|
10
13
|
accounts: MessagingAccountView[];
|
|
14
|
+
/** Configured message endpoints for sending. */
|
|
11
15
|
endpoints: MessagingEndpointView[];
|
|
16
|
+
/** Configured routing rules mapping message types to endpoints. */
|
|
12
17
|
routes: PersonaMessageRoute[];
|
|
18
|
+
/** Called when user saves account settings. */
|
|
13
19
|
onSaveAccount?: (input: MessagingAccountInput) => Promise<void>;
|
|
20
|
+
/** Called when user saves endpoint settings. */
|
|
14
21
|
onSaveEndpoint?: (input: MessagingEndpointInput) => Promise<void>;
|
|
22
|
+
/** Called when user saves message route settings. */
|
|
15
23
|
onSaveRoute?: (input: PersonaMessageRouteInput) => Promise<void>;
|
|
24
|
+
/** Disables editing when true; view-only mode. */
|
|
16
25
|
readonly?: boolean;
|
|
17
26
|
}
|
|
18
27
|
declare const MessagingSettingsPanel: import("svelte").Component<Props, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessagingSettingsPanel.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/MessagingSettingsPanel.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AAKpD,KAAK,cAAc,GAAG,IAAI,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;AAExE,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA8WD,QAAA,MAAM,sBAAsB,2CAAwC,CAAC;AACrE,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACxE,eAAe,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"MessagingSettingsPanel.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/MessagingSettingsPanel.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AAKpD,KAAK,cAAc,GAAG,IAAI,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;AAExE,MAAM,WAAW,KAAK;IACpB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,gDAAgD;IAChD,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,mEAAmE;IACnE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,gDAAgD;IAChD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,qDAAqD;IACrD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA8WD,QAAA,MAAM,sBAAsB,2CAAwC,CAAC;AACrE,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACxE,eAAe,sBAAsB,CAAC"}
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
import type { RecipientEntry } from '../types.js';
|
|
3
3
|
|
|
4
4
|
export interface Props {
|
|
5
|
+
/** Field label such as To, Cc, or Bcc. */
|
|
5
6
|
label?: string;
|
|
7
|
+
/** Array of email recipients or addresses. */
|
|
6
8
|
recipients: RecipientEntry[];
|
|
9
|
+
/** Called when user adds or removes a recipient. */
|
|
7
10
|
onchange?: (recipients: RecipientEntry[]) => void;
|
|
11
|
+
/** Placeholder text for the recipient input field. */
|
|
8
12
|
placeholder?: string;
|
|
9
13
|
}
|
|
10
14
|
</script>
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { RecipientEntry } from '../types.js';
|
|
2
2
|
export interface Props {
|
|
3
|
+
/** Field label such as To, Cc, or Bcc. */
|
|
3
4
|
label?: string;
|
|
5
|
+
/** Array of email recipients or addresses. */
|
|
4
6
|
recipients: RecipientEntry[];
|
|
7
|
+
/** Called when user adds or removes a recipient. */
|
|
5
8
|
onchange?: (recipients: RecipientEntry[]) => void;
|
|
9
|
+
/** Placeholder text for the recipient input field. */
|
|
6
10
|
placeholder?: string;
|
|
7
11
|
}
|
|
8
12
|
declare const RecipientInput: import("svelte").Component<Props, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecipientInput.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RecipientInput.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0ED,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"RecipientInput.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RecipientInput.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,KAAK;IACpB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAClD,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0ED,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
import type { MessageData } from '../types.js';
|
|
3
3
|
|
|
4
4
|
export interface Props {
|
|
5
|
+
/** Message to reply to, shown as quoted text. */
|
|
5
6
|
originalMessage: MessageData;
|
|
7
|
+
/** Reply to all recipients when true; reply to sender only when false. */
|
|
6
8
|
replyAll?: boolean;
|
|
9
|
+
/** Called when user sends the reply. */
|
|
7
10
|
onsend?: (body: string) => void;
|
|
11
|
+
/** Called when user cancels the reply. */
|
|
8
12
|
oncancel?: () => void;
|
|
9
13
|
}
|
|
10
14
|
</script>
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { MessageData } from '../types.js';
|
|
2
2
|
export interface Props {
|
|
3
|
+
/** Message to reply to, shown as quoted text. */
|
|
3
4
|
originalMessage: MessageData;
|
|
5
|
+
/** Reply to all recipients when true; reply to sender only when false. */
|
|
4
6
|
replyAll?: boolean;
|
|
7
|
+
/** Called when user sends the reply. */
|
|
5
8
|
onsend?: (body: string) => void;
|
|
9
|
+
/** Called when user cancels the reply. */
|
|
6
10
|
oncancel?: () => void;
|
|
7
11
|
}
|
|
8
12
|
declare const ReplyForm: import("svelte").Component<Props, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplyForm.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ReplyForm.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,KAAK;IACpB,eAAe,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAwFD,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"ReplyForm.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ReplyForm.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,KAAK;IACpB,iDAAiD;IACjD,eAAe,EAAE,WAAW,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAwFD,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
2
|
export interface Props {
|
|
3
|
+
/** Send status to display: draft, pending, sending, sent, failed, or scheduled. */
|
|
3
4
|
status: 'draft' | 'pending' | 'sending' | 'sent' | 'failed' | 'scheduled';
|
|
5
|
+
/** Visual size of the badge: small or medium. */
|
|
4
6
|
size?: 'sm' | 'md';
|
|
5
7
|
}
|
|
6
8
|
</script>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export interface Props {
|
|
2
|
+
/** Send status to display: draft, pending, sending, sent, failed, or scheduled. */
|
|
2
3
|
status: 'draft' | 'pending' | 'sending' | 'sent' | 'failed' | 'scheduled';
|
|
4
|
+
/** Visual size of the badge: small or medium. */
|
|
3
5
|
size?: 'sm' | 'md';
|
|
4
6
|
}
|
|
5
7
|
declare const SendStatusBadge: import("svelte").Component<Props, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SendStatusBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/SendStatusBadge.svelte.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB;AAoCD,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"SendStatusBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/SendStatusBadge.svelte.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK;IACpB,mFAAmF;IACnF,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1E,iDAAiD;IACjD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB;AAoCD,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -11,10 +11,15 @@ import MessageDetail from './MessageDetail.svelte';
|
|
|
11
11
|
const { t } = useI18n();
|
|
12
12
|
|
|
13
13
|
export interface Props {
|
|
14
|
+
/** Messages in the thread to display. */
|
|
14
15
|
messages: MessageData[];
|
|
16
|
+
/** ID of the currently active or expanded message. */
|
|
15
17
|
activeMessageId?: string;
|
|
18
|
+
/** Set of message IDs to start in collapsed state. */
|
|
16
19
|
initialCollapsed?: Set<string>;
|
|
20
|
+
/** Called when user clicks on a message to expand it. */
|
|
17
21
|
onmessageclick?: (message: MessageData) => void;
|
|
22
|
+
/** Called when user clicks reply on a message. */
|
|
18
23
|
onreply?: (message: MessageData) => void;
|
|
19
24
|
}
|
|
20
25
|
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { MessageData } from '../types.js';
|
|
2
2
|
export interface Props {
|
|
3
|
+
/** Messages in the thread to display. */
|
|
3
4
|
messages: MessageData[];
|
|
5
|
+
/** ID of the currently active or expanded message. */
|
|
4
6
|
activeMessageId?: string;
|
|
7
|
+
/** Set of message IDs to start in collapsed state. */
|
|
5
8
|
initialCollapsed?: Set<string>;
|
|
9
|
+
/** Called when user clicks on a message to expand it. */
|
|
6
10
|
onmessageclick?: (message: MessageData) => void;
|
|
11
|
+
/** Called when user clicks reply on a message. */
|
|
7
12
|
onreply?: (message: MessageData) => void;
|
|
8
13
|
}
|
|
9
14
|
declare const ThreadView: import("svelte").Component<Props, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadView.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ThreadView.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1C;AAsID,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"ThreadView.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ThreadView.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,MAAM,WAAW,KAAK;IACpB,yCAAyC;IACzC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,yDAAyD;IACzD,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAChD,kDAAkD;IAClD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1C;AAsID,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-messages",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
|
+
"smrtJsdoc": "strict",
|
|
4
5
|
"description": "Unified multi-channel messaging with STI-based hierarchies",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"smrtRawPrimitives": "strict",
|
|
@@ -62,12 +63,12 @@
|
|
|
62
63
|
"@happyvertical/messages": "^0.89.4",
|
|
63
64
|
"@happyvertical/sql": "^0.89.4",
|
|
64
65
|
"@happyvertical/utils": "^0.89.4",
|
|
65
|
-
"@happyvertical/smrt-
|
|
66
|
-
"@happyvertical/smrt-
|
|
67
|
-
"@happyvertical/smrt-
|
|
68
|
-
"@happyvertical/smrt-
|
|
69
|
-
"@happyvertical/smrt-
|
|
70
|
-
"@happyvertical/smrt-users": "0.
|
|
66
|
+
"@happyvertical/smrt-core": "0.44.0",
|
|
67
|
+
"@happyvertical/smrt-tenancy": "0.44.0",
|
|
68
|
+
"@happyvertical/smrt-types": "0.44.0",
|
|
69
|
+
"@happyvertical/smrt-ui": "0.44.0",
|
|
70
|
+
"@happyvertical/smrt-secrets": "0.44.0",
|
|
71
|
+
"@happyvertical/smrt-users": "0.44.0"
|
|
71
72
|
},
|
|
72
73
|
"peerDependencies": {
|
|
73
74
|
"@happyvertical/encryption": "*",
|
|
@@ -90,7 +91,7 @@
|
|
|
90
91
|
"typescript": "5.9.3",
|
|
91
92
|
"vite": "8.1.4",
|
|
92
93
|
"vitest": "4.1.10",
|
|
93
|
-
"@happyvertical/smrt-vitest": "0.
|
|
94
|
+
"@happyvertical/smrt-vitest": "0.44.0"
|
|
94
95
|
},
|
|
95
96
|
"keywords": [
|
|
96
97
|
"email",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Message-CORy3jwy.js","names":[],"sources":["../../src/models/Message.ts"],"sourcesContent":["/**\n * Message model - Base class for all message types (STI)\n *\n * Common fields shared across email, tweets, slack messages, etc.\n */\n\nimport {\n crossPackageRef,\n foreignKey,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type {\n MessageOptions,\n MessageSendResult,\n SendMessageOptions,\n SendStatus,\n} from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get'] },\n mcp: { include: ['list', 'get'] },\n cli: true,\n})\nexport class Message extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @foreignKey('Account')\n accountId = '';\n @crossPackageRef('@happyvertical/smrt-personas:AgentPersona', {\n nullable: true,\n })\n personaId: string | null = null;\n @foreignKey('MessagingEndpoint')\n endpointId: string | null = null;\n correlationId = '';\n threadId = '';\n subject = '';\n body = ''; // Normalized plain text\n fromAddress = '';\n fromName = '';\n toAddresses = ''; // JSON array of {address, name}\n date: Date | null = null;\n isRead = false;\n isFlagged = false;\n hasAttachments = false;\n size = 0;\n metadata = ''; // JSON extension bag\n\n // Send lifecycle fields\n sendStatus: SendStatus = 'draft';\n sentAt: Date | null = null;\n sendError = '';\n retryCount = 0;\n maxRetries = 3;\n scheduledSendAt: Date | null = null;\n @foreignKey('Message')\n inReplyToMessageId = '';\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: MessageOptions = {}) {\n super(options);\n\n if (options.tenantId !== undefined) this.tenantId = options.tenantId;\n if (options.accountId !== undefined) this.accountId = options.accountId;\n if (options.personaId !== undefined) this.personaId = options.personaId;\n if (options.endpointId !== undefined) this.endpointId = options.endpointId;\n if (options.correlationId !== undefined)\n this.correlationId = options.correlationId;\n if (options.threadId !== undefined) this.threadId = options.threadId;\n if (options.subject !== undefined) this.subject = options.subject;\n if (options.body !== undefined) this.body = options.body;\n if (options.fromAddress !== undefined)\n this.fromAddress = options.fromAddress;\n if (options.fromName !== undefined) this.fromName = options.fromName;\n if (options.toAddresses !== undefined)\n this.toAddresses = options.toAddresses;\n if (options.date !== undefined) this.date = options.date || null;\n if (options.isRead !== undefined) this.isRead = options.isRead;\n if (options.isFlagged !== undefined) this.isFlagged = options.isFlagged;\n if (options.hasAttachments !== undefined)\n this.hasAttachments = options.hasAttachments;\n if (options.size !== undefined) this.size = options.size;\n if (options.metadata !== undefined) this.metadata = options.metadata;\n if (options.sendStatus !== undefined) this.sendStatus = options.sendStatus;\n if (options.sentAt !== undefined) this.sentAt = options.sentAt || null;\n if (options.sendError !== undefined) this.sendError = options.sendError;\n if (options.retryCount !== undefined) this.retryCount = options.retryCount;\n if (options.maxRetries !== undefined) this.maxRetries = options.maxRetries;\n if (options.scheduledSendAt !== undefined)\n this.scheduledSendAt = options.scheduledSendAt || null;\n if (options.inReplyToMessageId !== undefined)\n this.inReplyToMessageId = options.inReplyToMessageId;\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get to addresses as parsed array\n */\n getToAddresses(): Array<{ address: string; name?: string }> {\n if (!this.toAddresses) return [];\n try {\n return JSON.parse(this.toAddresses);\n } catch {\n return [];\n }\n }\n\n /**\n * Set to addresses from array\n */\n setToAddresses(addresses: Array<{ address: string; name?: string }>): void {\n this.toAddresses = JSON.stringify(addresses);\n }\n\n /**\n * Get metadata as parsed object\n */\n getMetadata(): Record<string, unknown> {\n if (!this.metadata) return {};\n try {\n return JSON.parse(this.metadata);\n } catch {\n return {};\n }\n }\n\n /**\n * Set metadata from object\n */\n setMetadata(data: Record<string, unknown>): void {\n this.metadata = JSON.stringify(data);\n }\n\n /**\n * Mark message as read\n */\n async markRead(): Promise<void> {\n this.isRead = true;\n this.updatedAt = new Date();\n await this.save();\n }\n\n /**\n * Mark message as unread\n */\n async markUnread(): Promise<void> {\n this.isRead = false;\n this.updatedAt = new Date();\n await this.save();\n }\n\n /**\n * Toggle flagged status\n */\n async toggleFlagged(): Promise<void> {\n this.isFlagged = !this.isFlagged;\n this.updatedAt = new Date();\n await this.save();\n }\n\n /**\n * Check if message is unread\n */\n isUnread(): boolean {\n return !this.isRead;\n }\n\n /**\n * Get a short preview of the message body\n */\n getPreview(maxLength = 200): string {\n const text = this.body || '';\n if (text.length <= maxLength) return text;\n return `${text.slice(0, maxLength)}...`;\n }\n\n /**\n * Get the account for this message\n */\n async getAccount() {\n if (!this.accountId) return null;\n\n const { AccountCollection } = await import(\n '../collections/AccountCollection'\n );\n const collection = await AccountCollection.create(this.options);\n\n return await collection.get({ id: this.accountId });\n }\n\n async getEndpoint() {\n if (!this.endpointId) return null;\n const { MessagingEndpointCollection } = await import(\n '../collections/MessagingEndpointCollection.js'\n );\n const collection = await MessagingEndpointCollection.create(this.options);\n return collection.get({ id: this.endpointId });\n }\n\n /**\n * Get messages in the same thread\n */\n async getThreadMessages(): Promise<Message[]> {\n if (!this.threadId) return [this];\n\n const { MessageCollection } = await import(\n '../collections/MessageCollection'\n );\n const collection = await MessageCollection.create(this.options);\n\n return await collection.list({ where: { threadId: this.threadId } });\n }\n\n /**\n * Get attachments for this message\n */\n async getAttachments() {\n const { AttachmentCollection } = await import(\n '../collections/AttachmentCollection'\n );\n const collection = await AttachmentCollection.create(this.options);\n\n return await collection.list({ where: { messageId: this.id } });\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Send Lifecycle\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Send this message via its account's sender\n */\n async send(options?: SendMessageOptions): Promise<MessageSendResult> {\n // Entry guard: a message that is already in flight or delivered must not be\n // sent again. Catches same-instance double-clicks before any work happens.\n if (this.sendStatus === 'sending' || this.sendStatus === 'sent') {\n return {\n success: false,\n error: `Cannot send: message is already '${this.sendStatus}'`,\n sentAt: new Date(),\n };\n }\n\n // Resolve account\n const account = await this.getAccount();\n if (!account) {\n const result: MessageSendResult = {\n success: false,\n error: 'No account associated with this message',\n sentAt: new Date(),\n };\n this.sendStatus = 'failed';\n this.sendError = result.error ?? '';\n this.updatedAt = new Date();\n await this.save();\n return result;\n }\n\n if (!account.isActive) {\n const result: MessageSendResult = {\n success: false,\n error: 'Messaging account is inactive',\n sentAt: new Date(),\n };\n this.sendStatus = 'failed';\n this.sendError = result.error ?? '';\n this.updatedAt = new Date();\n await this.save();\n return result;\n }\n\n // Get sender from account\n let sender: Awaited<ReturnType<typeof account.createSender>>;\n try {\n sender = await account.createSender();\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.sendStatus = 'failed';\n this.sendError = errorMessage;\n this.updatedAt = new Date();\n await this.save();\n return {\n success: false,\n error: errorMessage,\n sentAt: new Date(),\n };\n }\n\n // Claim the send. For a persisted row, do a compare-and-set so only one\n // concurrent sender wins: flip send_status to 'sending' atomically, gated on\n // the status we observed. If no row matched, another sender already claimed\n // it — abort without delivering (prevents duplicate sends). For an unsaved\n // draft there is no row yet, so the in-memory transition + save() (INSERT)\n // serves as the claim.\n const claimFromStatus = this.sendStatus;\n if (this.isPersisted && this.id) {\n const claim = await this.db.update(\n this.tableName,\n { id: this.id, send_status: claimFromStatus },\n { send_status: 'sending', updated_at: new Date() },\n );\n if (!claim || claim.affected < 1) {\n return {\n success: false,\n error: 'Cannot send: message is already being sent',\n sentAt: new Date(),\n };\n }\n this.sendStatus = 'sending';\n this.updatedAt = new Date();\n } else {\n this.sendStatus = 'sending';\n this.updatedAt = new Date();\n await this.save();\n }\n\n try {\n const result = await sender.send(this, options);\n\n if (result.success) {\n this.sendStatus = 'sent';\n this.sentAt = result.sentAt;\n this.sendError = '';\n } else {\n this.sendStatus = 'failed';\n this.sendError = result.error ?? 'Send failed';\n }\n\n this.updatedAt = new Date();\n await this.save();\n return result;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.sendStatus = 'failed';\n this.sendError = errorMessage;\n this.updatedAt = new Date();\n await this.save();\n\n return {\n success: false,\n error: errorMessage,\n sentAt: new Date(),\n };\n }\n }\n\n /**\n * Retry sending a failed message\n */\n async retrySend(options?: SendMessageOptions): Promise<MessageSendResult> {\n if (this.sendStatus !== 'failed') {\n return {\n success: false,\n error: `Cannot retry: message status is '${this.sendStatus}', expected 'failed'`,\n sentAt: new Date(),\n };\n }\n\n if (this.retryCount >= this.maxRetries) {\n return {\n success: false,\n error: `Retry budget exhausted (${this.retryCount}/${this.maxRetries})`,\n sentAt: new Date(),\n };\n }\n\n this.retryCount++;\n this.updatedAt = new Date();\n await this.save();\n\n return this.send(options);\n }\n\n /**\n * Options for a derived draft (reply/forward) built from this message. Carries\n * the DB connection + tenant context from `this.options`, but strips this\n * message's own identity fields. When this message was hydrated from the DB,\n * `this.options` holds the row's `id`/`slug`/`context`/`_skipLoad`; spreading\n * those into a new draft would make `draft.save()` upsert onto the natural-key\n * conflict columns (`slug`/`context`/`_meta_type`) and overwrite the ORIGINAL\n * message instead of inserting a new row. See EmailAccount.childOptions().\n */\n protected draftOptions(): Record<string, unknown> {\n const rest = { ...(this.options as Record<string, unknown>) };\n delete rest.id;\n delete rest.slug;\n delete rest.context;\n delete rest._skipLoad;\n return rest;\n }\n\n /**\n * Create a reply to this message (returns unsaved draft)\n */\n createReply(_options?: { replyAll?: boolean }): Message {\n const reply = new (this.constructor as typeof Message)({\n ...this.draftOptions(),\n id: undefined,\n accountId: this.accountId,\n threadId: this.threadId || this.id || '',\n subject: this.subject.startsWith('Re:')\n ? this.subject\n : `Re: ${this.subject}`,\n toAddresses: JSON.stringify([\n { address: this.fromAddress, name: this.fromName },\n ]),\n fromAddress: '',\n fromName: '',\n body: this.buildQuotedBody(),\n inReplyToMessageId: this.id || '',\n sendStatus: 'draft',\n isRead: true,\n date: null,\n createdAt: undefined,\n updatedAt: undefined,\n });\n\n return reply;\n }\n\n /**\n * Create a forward of this message (returns unsaved draft)\n */\n createForward(): Message {\n const forward = new (this.constructor as typeof Message)({\n ...this.draftOptions(),\n id: undefined,\n accountId: this.accountId,\n threadId: '',\n subject: this.subject.startsWith('Fwd:')\n ? this.subject\n : `Fwd: ${this.subject}`,\n toAddresses: '[]',\n fromAddress: '',\n fromName: '',\n body: this.buildQuotedBody(),\n hasAttachments: this.hasAttachments,\n inReplyToMessageId: '',\n sendStatus: 'draft',\n isRead: true,\n date: null,\n createdAt: undefined,\n updatedAt: undefined,\n });\n\n return forward;\n }\n\n /**\n * Build quoted body for reply/forward\n */\n protected buildQuotedBody(): string {\n const dateStr = this.date ? this.date.toLocaleString() : 'unknown date';\n const from = this.fromName\n ? `${this.fromName} <${this.fromAddress}>`\n : this.fromAddress;\n\n const quotedLines = (this.body || '')\n .split('\\n')\n .map((line) => `> ${line}`)\n .join('\\n');\n\n return `\\n\\nOn ${dateStr}, ${from} wrote:\\n${quotedLines}`;\n }\n}\n"],"mappings":"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"}
|