@happyvertical/smrt-messages 0.51.39 → 0.52.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/AGENTS.md +20 -0
- package/README.md +31 -0
- package/dist/chunks/{AccountCollection-DCF0TWbR.js → AccountCollection-Br2mRkSe.js} +2 -2
- package/dist/chunks/{AccountCollection-DCF0TWbR.js.map → AccountCollection-Br2mRkSe.js.map} +1 -1
- package/dist/chunks/{Email-vrwFmhSB.js → Email-C6TU_YXp.js} +3 -3
- package/dist/chunks/{Email-vrwFmhSB.js.map → Email-C6TU_YXp.js.map} +1 -1
- package/dist/chunks/{EmailFolder-DfL2gUXy.js → EmailFolder-CvGCE75K.js} +2 -2
- package/dist/chunks/{EmailFolder-DfL2gUXy.js.map → EmailFolder-CvGCE75K.js.map} +1 -1
- package/dist/chunks/{Message-CwXVgr93.js → Message-jz7qKbcY.js} +4 -4
- package/dist/chunks/{Message-CwXVgr93.js.map → Message-jz7qKbcY.js.map} +1 -1
- package/dist/chunks/{MessageCollection-BatENTTm.js → MessageCollection-B9mLJ6Jt.js} +2 -2
- package/dist/chunks/{MessageCollection-BatENTTm.js.map → MessageCollection-B9mLJ6Jt.js.map} +1 -1
- package/dist/chunks/__smrt-register__-Mwpskcnl.js +6 -0
- package/dist/chunks/{__smrt-register__-CQyfwBLY.js.map → __smrt-register__-Mwpskcnl.js.map} +1 -1
- package/dist/collections/UserNotificationCollection.d.ts +6 -0
- package/dist/collections/UserNotificationCollection.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +293 -41
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +409 -1
- package/dist/models/UserNotification.d.ts +60 -0
- package/dist/models/UserNotification.d.ts.map +1 -0
- package/dist/services/UserNotificationService.d.ts +74 -0
- package/dist/services/UserNotificationService.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +131 -9
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +3 -1
- package/dist/ui.js.map +1 -1
- package/package.json +16 -16
- package/dist/chunks/__smrt-register__-CQyfwBLY.js +0 -6
package/dist/smrt-knowledge.json
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"sensitiveFieldsExcluded": true,
|
|
4
4
|
"generatedAt": "1970-01-01T00:00:00.000Z",
|
|
5
5
|
"packageName": "@happyvertical/smrt-messages",
|
|
6
|
-
"packageVersion": "0.
|
|
6
|
+
"packageVersion": "0.52.0",
|
|
7
7
|
"sourceManifestPath": "dist/manifest.json",
|
|
8
8
|
"agentDocPath": "AGENTS.md",
|
|
9
9
|
"sourceHashes": {
|
|
10
|
-
"manifest": "
|
|
11
|
-
"packageJson": "
|
|
12
|
-
"agents": "
|
|
10
|
+
"manifest": "790d2a3f4dea43c830e5c061ac5c5f6523abe168cde41397cbbebd057499ac04",
|
|
11
|
+
"packageJson": "8ed81ec1cb0be63b402c47f52fbd23d802623ed01de919e71a1648cd7f34fd95",
|
|
12
|
+
"agents": "36405a8a9cefd4f831381d3670572dc3489d43fbc1787fb12b70814cc1e59f34"
|
|
13
13
|
},
|
|
14
14
|
"exports": [
|
|
15
15
|
".",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@sveltejs/package": "^2.5.8",
|
|
42
42
|
"@sveltejs/vite-plugin-svelte": "^7.3.0",
|
|
43
43
|
"@types/node": "24.13.6",
|
|
44
|
-
"svelte": "^5.57.
|
|
44
|
+
"svelte": "^5.57.0",
|
|
45
45
|
"svelte-check": "^4.7.6",
|
|
46
46
|
"typescript": "6.0.3",
|
|
47
47
|
"vite": "8.1.4",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"typescript"
|
|
80
80
|
],
|
|
81
81
|
"risks": [
|
|
82
|
-
"cross-package-refs:
|
|
82
|
+
"cross-package-refs:7",
|
|
83
83
|
"sensitive-fields-excluded",
|
|
84
84
|
"sti-inheritance"
|
|
85
85
|
],
|
|
@@ -3840,6 +3840,23 @@
|
|
|
3840
3840
|
"tags": [],
|
|
3841
3841
|
"risks": []
|
|
3842
3842
|
},
|
|
3843
|
+
{
|
|
3844
|
+
"name": "UserNotificationCollection",
|
|
3845
|
+
"qualifiedName": "@happyvertical/smrt-messages:UserNotificationCollection",
|
|
3846
|
+
"collection": "usernotifications",
|
|
3847
|
+
"tableName": "user_notifications",
|
|
3848
|
+
"packageName": "@happyvertical/smrt-messages",
|
|
3849
|
+
"extends": "SmrtCollection",
|
|
3850
|
+
"fields": [],
|
|
3851
|
+
"relationships": [],
|
|
3852
|
+
"methods": [],
|
|
3853
|
+
"surfaces": [],
|
|
3854
|
+
"relationshipFeatures": [
|
|
3855
|
+
"uuidColumns"
|
|
3856
|
+
],
|
|
3857
|
+
"tags": [],
|
|
3858
|
+
"risks": []
|
|
3859
|
+
},
|
|
3843
3860
|
{
|
|
3844
3861
|
"name": "WhitelistCollection",
|
|
3845
3862
|
"qualifiedName": "@happyvertical/smrt-messages:WhitelistCollection",
|
|
@@ -10112,6 +10129,111 @@
|
|
|
10112
10129
|
"tags": [],
|
|
10113
10130
|
"risks": []
|
|
10114
10131
|
},
|
|
10132
|
+
{
|
|
10133
|
+
"name": "UserNotification",
|
|
10134
|
+
"qualifiedName": "@happyvertical/smrt-messages:UserNotification",
|
|
10135
|
+
"collection": "usernotifications",
|
|
10136
|
+
"tableName": "user_notifications",
|
|
10137
|
+
"packageName": "@happyvertical/smrt-messages",
|
|
10138
|
+
"extends": "SmrtObject",
|
|
10139
|
+
"fields": [
|
|
10140
|
+
{
|
|
10141
|
+
"name": "tenantId",
|
|
10142
|
+
"type": "text",
|
|
10143
|
+
"required": true,
|
|
10144
|
+
"columnType": "UUID"
|
|
10145
|
+
},
|
|
10146
|
+
{
|
|
10147
|
+
"name": "recipientUserId",
|
|
10148
|
+
"type": "crossPackageRef",
|
|
10149
|
+
"required": true,
|
|
10150
|
+
"related": "@happyvertical/smrt-users:User",
|
|
10151
|
+
"columnType": "UUID"
|
|
10152
|
+
},
|
|
10153
|
+
{
|
|
10154
|
+
"name": "kind",
|
|
10155
|
+
"type": "text",
|
|
10156
|
+
"required": true,
|
|
10157
|
+
"columnType": "TEXT"
|
|
10158
|
+
},
|
|
10159
|
+
{
|
|
10160
|
+
"name": "title",
|
|
10161
|
+
"type": "text",
|
|
10162
|
+
"required": true,
|
|
10163
|
+
"columnType": "TEXT"
|
|
10164
|
+
},
|
|
10165
|
+
{
|
|
10166
|
+
"name": "body",
|
|
10167
|
+
"type": "text",
|
|
10168
|
+
"required": false,
|
|
10169
|
+
"columnType": "TEXT"
|
|
10170
|
+
},
|
|
10171
|
+
{
|
|
10172
|
+
"name": "href",
|
|
10173
|
+
"type": "text",
|
|
10174
|
+
"required": false,
|
|
10175
|
+
"columnType": "TEXT"
|
|
10176
|
+
},
|
|
10177
|
+
{
|
|
10178
|
+
"name": "severity",
|
|
10179
|
+
"type": "text",
|
|
10180
|
+
"required": false,
|
|
10181
|
+
"columnType": "TEXT",
|
|
10182
|
+
"default": "info"
|
|
10183
|
+
},
|
|
10184
|
+
{
|
|
10185
|
+
"name": "sourceRef",
|
|
10186
|
+
"type": "text",
|
|
10187
|
+
"required": true,
|
|
10188
|
+
"columnType": "TEXT"
|
|
10189
|
+
},
|
|
10190
|
+
{
|
|
10191
|
+
"name": "occurredAt",
|
|
10192
|
+
"type": "text",
|
|
10193
|
+
"required": false,
|
|
10194
|
+
"columnType": "TEXT"
|
|
10195
|
+
},
|
|
10196
|
+
{
|
|
10197
|
+
"name": "readAt",
|
|
10198
|
+
"type": "datetime",
|
|
10199
|
+
"required": false,
|
|
10200
|
+
"columnType": "TIMESTAMP"
|
|
10201
|
+
},
|
|
10202
|
+
{
|
|
10203
|
+
"name": "dismissedAt",
|
|
10204
|
+
"type": "datetime",
|
|
10205
|
+
"required": false,
|
|
10206
|
+
"columnType": "TIMESTAMP"
|
|
10207
|
+
}
|
|
10208
|
+
],
|
|
10209
|
+
"relationships": [
|
|
10210
|
+
{
|
|
10211
|
+
"name": "recipientUserId",
|
|
10212
|
+
"type": "crossPackageRef",
|
|
10213
|
+
"required": true,
|
|
10214
|
+
"related": "@happyvertical/smrt-users:User",
|
|
10215
|
+
"columnType": "UUID"
|
|
10216
|
+
}
|
|
10217
|
+
],
|
|
10218
|
+
"methods": [],
|
|
10219
|
+
"tenant": {
|
|
10220
|
+
"scoped": true,
|
|
10221
|
+
"mode": "required",
|
|
10222
|
+
"field": "tenantId"
|
|
10223
|
+
},
|
|
10224
|
+
"conflictColumns": [
|
|
10225
|
+
"tenant_id",
|
|
10226
|
+
"recipient_user_id",
|
|
10227
|
+
"source_ref"
|
|
10228
|
+
],
|
|
10229
|
+
"surfaces": [],
|
|
10230
|
+
"relationshipFeatures": [
|
|
10231
|
+
"crossPackageRef",
|
|
10232
|
+
"uuidColumns"
|
|
10233
|
+
],
|
|
10234
|
+
"tags": [],
|
|
10235
|
+
"risks": []
|
|
10236
|
+
},
|
|
10115
10237
|
{
|
|
10116
10238
|
"name": "Whitelist",
|
|
10117
10239
|
"qualifiedName": "@happyvertical/smrt-messages:Whitelist",
|
|
@@ -15001,11 +15123,11 @@
|
|
|
15001
15123
|
"prompts": [],
|
|
15002
15124
|
"relationshipsV2": {
|
|
15003
15125
|
"foreignKeyFields": 16,
|
|
15004
|
-
"crossPackageRefFields":
|
|
15126
|
+
"crossPackageRefFields": 7,
|
|
15005
15127
|
"junctionCollections": 0,
|
|
15006
15128
|
"hierarchicalObjects": 0,
|
|
15007
15129
|
"polymorphicAssociations": 0,
|
|
15008
|
-
"uuidColumns":
|
|
15130
|
+
"uuidColumns": 96
|
|
15009
15131
|
},
|
|
15010
|
-
"agentDoc": "# @happyvertical/smrt-messages\n\nMulti-channel messaging with STI hierarchies for both messages and accounts. Credential encryption via smrt-secrets.\n\n## STI Hierarchies\n\n**Messages** (share `messages` table):\n- `Message` (base): accountId, personaId, endpointId, correlationId, threadId, subject, body, fromAddress, toAddresses (JSON), sendStatus (draft/sending/sent/failed), retryCount\n- `Email`: messageId (RFC 822), inReplyTo, ccAddresses, bccAddresses, htmlBody, textBody, folderId, labels, headers\n- `Tweet`: tweetId, retweetCount, likeCount, mediaUrls, hashtags, mentions\n- `SlackMessage`: channelId, slackTs, slackThreadTs, reactions, blocks\n\n**Accounts** (share `accounts` table):\n- `Account` (base): channelType, providerType, public configuration,\n credentialSecretId, isActive, lastSyncAt, deprecated sensitive settings\n- `EmailAccount`, `TwitterAccount`, `SlackAccount`, `ZulipAccount`,\n `TelegramAccount`: provider-specific identity/sender behavior\n\n## Persona messaging\n\n- `MessagingEndpoint`: tenant-owned, write-only destination JSON with masked\n display helper.\n- `PersonaMessageRoute`: persona → account + endpoint, selected by purpose and\n descending priority.\n- `PersonaMessagingService`: persists and sends through an enabled route.\n- Provider registry: public setup descriptors + optional sender factory. Keep\n channel (`sms`) separate from provider (`twilio`).\n- Permissions: `messages.send`, `messages.manage-routes`,\n `messages.manage-credentials`.\n- `MessagingSettingsService` is the permissioned server boundary;\n its host-supplied `resolvePersonaTenantId` proves cross-package ownership.\n `MessagingSettingsPanel` is the callback-driven Svelte surface.\n- Account, endpoint, and route generated surfaces are read-only. Do not add\n generated mutations around the settings service or make secret fields writable.\n\n## Credential Security\n\nAccount credentials stored via tenant-bound `credentialSecretId` →\nsmrt-secrets. Use `setCredentials()`/`getCredentials()` — never store passwords\ndirectly. Credential descriptor schemas contain field definitions, never values.\n\n## Send Lifecycle\n\n`message.send()`: resolves account → creates provider sender → updates sendStatus. Retry support with `maxRetries` budget.\n\n## Provider entry points (bundle boundary, #1979)\n\nThe package root is provider-neutral: models, collections, services,\npermissions, and the provider registry carry **zero provider-SDK weight**.\nProvider SDK wrappers (`@happyvertical/email`, `@happyvertical/messages`) are\nreachable only through explicit entry points, imported once at server startup:\n\n```ts\nimport '@happyvertical/smrt-messages/providers/email'; // smtp/imap/pop3/gmail\nimport '@happyvertical/smrt-messages/providers/slack';\nimport '@happyvertical/smrt-messages/providers/twitter';\nimport '@happyvertical/smrt-messages/providers/all'; // all of the above\n```\n\n- Without the matching entry, `EmailAccount.createClient()` (send + mailbox\n sync) throws an actionable error and `SlackSender`/`TweetSender` return a\n failure result naming the entry to import. Telegram and Zulip are\n fetch-based and always work from the root.\n- Builtin registry definitions stay metadata-only (setup fields for UIs); the\n entries upgrade them with `createEmailClient`/`createMessageClient`/\n `createSender` hooks. Never import a provider SDK from any module reachable\n from `src/index.ts` — the consumer bundle gate (`packages/bundle-gate`)\n fails CI when one becomes reachable.\n- `Attachment.readContent()` loads `@happyvertical/files` through core's\n `importOptionalDependency` boundary and keeps its null-on-failure contract\n in builds where the SDK is absent.\n\n## Gotchas\n\n- **Manifest before decorators**: every decorated model imports\n `../__smrt-register__.js`, and `package.json#sideEffects` lists\n `./src/__smrt-register__.ts`. Without both, the library build dropped or\n reordered the self-registration, so dist classes registered with only their\n decorated fields and could adopt smrt-ledgers' same-named `Account` (#3098).\n- **`Account` is not unique**: smrt-ledgers also declares `Account` (on\n `ledger_accounts`). Resolve by constructor or qualified name; the\n coexistence tests (`ledger-account-identity-*`, and the PostgreSQL lane\n `pnpm test:postgres`) load both packages in both orders.\n- **STI `_meta_type`**: qualified format `@happyvertical/smrt-messages:Email`\n- **JSON fields**: all address/metadata fields are JSON strings with `getX()`/`setX()` helpers\n- **RFC 822 threading**: Email uses `inReplyTo`/`messageId`/`references` — manual management required\n- **Attachment.messageId**: use this field (not `emailId`); old getter/setter mapped via deprecation wrapper\n- **Optional tenancy**: `@TenantScoped({ mode: 'optional' })` on Message, Account, Attachment\n- **Required tenancy**: endpoints and persona routes are always tenant scoped\n- **Secrets are write-only**: never serialize credentials or endpoint.address to an app\n"
|
|
15132
|
+
"agentDoc": "# @happyvertical/smrt-messages\n\nMulti-channel messaging with STI hierarchies for both messages and accounts. Credential encryption via smrt-secrets.\n\n## STI Hierarchies\n\n**Messages** (share `messages` table):\n- `Message` (base): accountId, personaId, endpointId, correlationId, threadId, subject, body, fromAddress, toAddresses (JSON), sendStatus (draft/sending/sent/failed), retryCount\n- `Email`: messageId (RFC 822), inReplyTo, ccAddresses, bccAddresses, htmlBody, textBody, folderId, labels, headers\n- `Tweet`: tweetId, retweetCount, likeCount, mediaUrls, hashtags, mentions\n- `SlackMessage`: channelId, slackTs, slackThreadTs, reactions, blocks\n\n**Accounts** (share `accounts` table):\n- `Account` (base): channelType, providerType, public configuration,\n credentialSecretId, isActive, lastSyncAt, deprecated sensitive settings\n- `EmailAccount`, `TwitterAccount`, `SlackAccount`, `ZulipAccount`,\n `TelegramAccount`: provider-specific identity/sender behavior\n\n## Persona messaging\n\n- `MessagingEndpoint`: tenant-owned, write-only destination JSON with masked\n display helper.\n- `PersonaMessageRoute`: persona → account + endpoint, selected by purpose and\n descending priority.\n- `PersonaMessagingService`: persists and sends through an enabled route.\n- Provider registry: public setup descriptors + optional sender factory. Keep\n channel (`sms`) separate from provider (`twilio`).\n- Permissions: `messages.send`, `messages.manage-routes`,\n `messages.manage-credentials`.\n- `MessagingSettingsService` is the permissioned server boundary;\n its host-supplied `resolvePersonaTenantId` proves cross-package ownership.\n `MessagingSettingsPanel` is the callback-driven Svelte surface.\n- Account, endpoint, and route generated surfaces are read-only. Do not add\n generated mutations around the settings service or make secret fields writable.\n\n## In-app notifications (`UserNotification`)\n\nThe in-app channel: one stored row per person, with read state.\n`user_notifications`: `tenantId` (required), `recipientUserId`\n(`@crossPackageRef` smrt-users:User, uuid), `kind`, `title`, `body`, `href`,\n`severity` (info/success/warning/error), `sourceRef`, `occurredAt`, `readAt`,\n`dismissedAt`. Conflict identity `(tenant_id, recipient_user_id, source_ref)`.\n\n- `UserNotificationService` is the only access path: `notify()` /\n `notifyMany()` (dedupe on `sourceRef`, existing row returned untouched;\n a unique ref is generated when omitted), `listForUser()` / `countUnread()`\n across explicit `tenantIds` (each read under `withTenant`), `markRead()`,\n `dismiss()` (also marks read), `markAllRead()`. Every write filters on the\n recipient, so another user's id matches nothing.\n- Generated REST/MCP/CLI are off (`api`/`mcp`/`cli: false`): a tenant-scoped\n list would expose every member's rows. Hosts expose their own routes that\n pass the signed-in user's id, never a request-chosen one.\n- Hosts decide who is told (e.g. `SocialPost.createdByUserId` for a failed\n post). New table: consumers run `db:migrate`.\n\n## Credential Security\n\nAccount credentials stored via tenant-bound `credentialSecretId` →\nsmrt-secrets. Use `setCredentials()`/`getCredentials()` — never store passwords\ndirectly. Credential descriptor schemas contain field definitions, never values.\n\n## Send Lifecycle\n\n`message.send()`: resolves account → creates provider sender → updates sendStatus. Retry support with `maxRetries` budget.\n\n## Provider entry points (bundle boundary, #1979)\n\nThe package root is provider-neutral: models, collections, services,\npermissions, and the provider registry carry **zero provider-SDK weight**.\nProvider SDK wrappers (`@happyvertical/email`, `@happyvertical/messages`) are\nreachable only through explicit entry points, imported once at server startup:\n\n```ts\nimport '@happyvertical/smrt-messages/providers/email'; // smtp/imap/pop3/gmail\nimport '@happyvertical/smrt-messages/providers/slack';\nimport '@happyvertical/smrt-messages/providers/twitter';\nimport '@happyvertical/smrt-messages/providers/all'; // all of the above\n```\n\n- Without the matching entry, `EmailAccount.createClient()` (send + mailbox\n sync) throws an actionable error and `SlackSender`/`TweetSender` return a\n failure result naming the entry to import. Telegram and Zulip are\n fetch-based and always work from the root.\n- Builtin registry definitions stay metadata-only (setup fields for UIs); the\n entries upgrade them with `createEmailClient`/`createMessageClient`/\n `createSender` hooks. Never import a provider SDK from any module reachable\n from `src/index.ts` — the consumer bundle gate (`packages/bundle-gate`)\n fails CI when one becomes reachable.\n- `Attachment.readContent()` loads `@happyvertical/files` through core's\n `importOptionalDependency` boundary and keeps its null-on-failure contract\n in builds where the SDK is absent.\n\n## Gotchas\n\n- **Manifest before decorators**: every decorated model imports\n `../__smrt-register__.js`, and `package.json#sideEffects` lists\n `./src/__smrt-register__.ts`. Without both, the library build dropped or\n reordered the self-registration, so dist classes registered with only their\n decorated fields and could adopt smrt-ledgers' same-named `Account` (#3098).\n- **`Account` is not unique**: smrt-ledgers also declares `Account` (on\n `ledger_accounts`). Resolve by constructor or qualified name; the\n coexistence tests (`ledger-account-identity-*`, and the PostgreSQL lane\n `pnpm test:postgres`) load both packages in both orders.\n- **STI `_meta_type`**: qualified format `@happyvertical/smrt-messages:Email`\n- **JSON fields**: all address/metadata fields are JSON strings with `getX()`/`setX()` helpers\n- **RFC 822 threading**: Email uses `inReplyTo`/`messageId`/`references` — manual management required\n- **Attachment.messageId**: use this field (not `emailId`); old getter/setter mapped via deprecation wrapper\n- **Optional tenancy**: `@TenantScoped({ mode: 'optional' })` on Message, Account, Attachment\n- **Required tenancy**: endpoints and persona routes are always tenant scoped\n- **Secrets are write-only**: never serialize credentials or endpoint.address to an app\n"
|
|
15011
15133
|
}
|
package/dist/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAkF1D,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAkF1D,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cAgClC,CAAC"}
|
package/dist/ui.js
CHANGED
|
@@ -100,6 +100,7 @@ var MESSAGES_MODULE_META = {
|
|
|
100
100
|
"ZulipAccount",
|
|
101
101
|
"MessagingEndpoint",
|
|
102
102
|
"PersonaMessageRoute",
|
|
103
|
+
"UserNotification",
|
|
103
104
|
"Attachment"
|
|
104
105
|
],
|
|
105
106
|
collections: [
|
|
@@ -109,7 +110,8 @@ var MESSAGES_MODULE_META = {
|
|
|
109
110
|
"EmailAccountCollection",
|
|
110
111
|
"AttachmentCollection",
|
|
111
112
|
"MessagingEndpointCollection",
|
|
112
|
-
"PersonaMessageRouteCollection"
|
|
113
|
+
"PersonaMessageRouteCollection",
|
|
114
|
+
"UserNotificationCollection"
|
|
113
115
|
]
|
|
114
116
|
};
|
|
115
117
|
//#endregion
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","names":[],"sources":["../src/ui.ts"],"sourcesContent":["/**\n * Messages Module UI Slot Declarations\n *\n * Defines UI extension points for the messages module.\n * UI components are implemented in the ./svelte subpath.\n */\n\nimport type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\nexport const MESSAGES_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'message-card': {\n id: 'message-card',\n label: 'Message Card',\n description: 'Single message row with type-adaptive rendering',\n icon: 'mail',\n category: 'display',\n order: 1,\n propsInterface: 'MessageCardProps',\n },\n 'message-list': {\n id: 'message-list',\n label: 'Message List',\n description: 'Unified message list with selection and filtering',\n icon: 'list',\n category: 'list',\n order: 2,\n propsInterface: 'MessageListProps',\n },\n 'message-detail': {\n id: 'message-detail',\n label: 'Message Detail',\n description: 'Full message view with type-adaptive sections',\n icon: 'file-text',\n category: 'display',\n order: 3,\n propsInterface: 'MessageDetailProps',\n },\n 'message-filters': {\n id: 'message-filters',\n label: 'Message Filters',\n description: 'Filter and sort controls for message lists',\n icon: 'filter',\n category: 'action',\n order: 4,\n propsInterface: 'MessageFiltersProps',\n },\n 'account-list': {\n id: 'account-list',\n label: 'Account List',\n description: 'Account management list with sync status',\n icon: 'users',\n category: 'list',\n order: 5,\n propsInterface: 'AccountListProps',\n },\n 'thread-view': {\n id: 'thread-view',\n label: 'Thread View',\n description: 'Conversation thread with collapsible messages',\n icon: 'message-circle',\n category: 'display',\n order: 6,\n propsInterface: 'ThreadViewProps',\n },\n 'compose-form': {\n id: 'compose-form',\n label: 'Compose Form',\n description: 'Full message compose form with type-adaptive fields',\n icon: 'edit',\n category: 'action',\n order: 7,\n propsInterface: 'ComposeFormProps',\n },\n 'reply-form': {\n id: 'reply-form',\n label: 'Reply Form',\n description: 'Inline reply form with quoted original',\n icon: 'reply',\n category: 'action',\n order: 8,\n propsInterface: 'ReplyFormProps',\n },\n 'messaging-settings': {\n id: 'messaging-settings',\n label: 'Messaging Settings',\n description: 'Schema-driven accounts, destinations, and persona routes',\n icon: 'settings',\n category: 'action',\n order: 9,\n propsInterface: 'MessagingSettingsPanelProps',\n },\n};\n\nexport const MESSAGES_MODULE_META: SmrtModuleMeta = {\n name: '@happyvertical/smrt-messages',\n displayName: 'Messages',\n description:\n 'Unified multi-channel messaging: email, Slack, Twitter, and more',\n uiSlots: MESSAGES_UI_SLOTS,\n models: [\n 'Message',\n 'Email',\n 'Tweet',\n 'SlackMessage',\n 'Account',\n 'EmailAccount',\n 'SlackAccount',\n 'TwitterAccount',\n 'TelegramAccount',\n 'ZulipAccount',\n 'MessagingEndpoint',\n 'PersonaMessageRoute',\n 'Attachment',\n ],\n collections: [\n 'MessageCollection',\n 'EmailCollection',\n 'AccountCollection',\n 'EmailAccountCollection',\n 'AttachmentCollection',\n 'MessagingEndpointCollection',\n 'PersonaMessageRouteCollection',\n ],\n};\n"],"mappings":";AASO,IAAM,oBAAkD;CAC7D,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,eAAe;EACb,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,cAAc;EACZ,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,sBAAsB;EACpB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;AACF;AAEO,IAAM,uBAAuC;CAClD,MAAM;CACN,aAAa;CACb,aACE;CACF,SAAS;CACT,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,aAAa;EACX;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"ui.js","names":[],"sources":["../src/ui.ts"],"sourcesContent":["/**\n * Messages Module UI Slot Declarations\n *\n * Defines UI extension points for the messages module.\n * UI components are implemented in the ./svelte subpath.\n */\n\nimport type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\nexport const MESSAGES_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'message-card': {\n id: 'message-card',\n label: 'Message Card',\n description: 'Single message row with type-adaptive rendering',\n icon: 'mail',\n category: 'display',\n order: 1,\n propsInterface: 'MessageCardProps',\n },\n 'message-list': {\n id: 'message-list',\n label: 'Message List',\n description: 'Unified message list with selection and filtering',\n icon: 'list',\n category: 'list',\n order: 2,\n propsInterface: 'MessageListProps',\n },\n 'message-detail': {\n id: 'message-detail',\n label: 'Message Detail',\n description: 'Full message view with type-adaptive sections',\n icon: 'file-text',\n category: 'display',\n order: 3,\n propsInterface: 'MessageDetailProps',\n },\n 'message-filters': {\n id: 'message-filters',\n label: 'Message Filters',\n description: 'Filter and sort controls for message lists',\n icon: 'filter',\n category: 'action',\n order: 4,\n propsInterface: 'MessageFiltersProps',\n },\n 'account-list': {\n id: 'account-list',\n label: 'Account List',\n description: 'Account management list with sync status',\n icon: 'users',\n category: 'list',\n order: 5,\n propsInterface: 'AccountListProps',\n },\n 'thread-view': {\n id: 'thread-view',\n label: 'Thread View',\n description: 'Conversation thread with collapsible messages',\n icon: 'message-circle',\n category: 'display',\n order: 6,\n propsInterface: 'ThreadViewProps',\n },\n 'compose-form': {\n id: 'compose-form',\n label: 'Compose Form',\n description: 'Full message compose form with type-adaptive fields',\n icon: 'edit',\n category: 'action',\n order: 7,\n propsInterface: 'ComposeFormProps',\n },\n 'reply-form': {\n id: 'reply-form',\n label: 'Reply Form',\n description: 'Inline reply form with quoted original',\n icon: 'reply',\n category: 'action',\n order: 8,\n propsInterface: 'ReplyFormProps',\n },\n 'messaging-settings': {\n id: 'messaging-settings',\n label: 'Messaging Settings',\n description: 'Schema-driven accounts, destinations, and persona routes',\n icon: 'settings',\n category: 'action',\n order: 9,\n propsInterface: 'MessagingSettingsPanelProps',\n },\n};\n\nexport const MESSAGES_MODULE_META: SmrtModuleMeta = {\n name: '@happyvertical/smrt-messages',\n displayName: 'Messages',\n description:\n 'Unified multi-channel messaging: email, Slack, Twitter, and more',\n uiSlots: MESSAGES_UI_SLOTS,\n models: [\n 'Message',\n 'Email',\n 'Tweet',\n 'SlackMessage',\n 'Account',\n 'EmailAccount',\n 'SlackAccount',\n 'TwitterAccount',\n 'TelegramAccount',\n 'ZulipAccount',\n 'MessagingEndpoint',\n 'PersonaMessageRoute',\n 'UserNotification',\n 'Attachment',\n ],\n collections: [\n 'MessageCollection',\n 'EmailCollection',\n 'AccountCollection',\n 'EmailAccountCollection',\n 'AttachmentCollection',\n 'MessagingEndpointCollection',\n 'PersonaMessageRouteCollection',\n 'UserNotificationCollection',\n ],\n};\n"],"mappings":";AASO,IAAM,oBAAkD;CAC7D,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,kBAAkB;EAChB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,eAAe;EACb,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,cAAc;EACZ,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,sBAAsB;EACpB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;AACF;AAEO,IAAM,uBAAuC;CAClD,MAAM;CACN,aAAa;CACb,aACE;CACF,SAAS;CACT,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,aAAa;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-messages",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.0",
|
|
4
4
|
"smrtJsdoc": "strict",
|
|
5
5
|
"description": "Unified multi-channel messaging with STI-based hierarchies",
|
|
6
6
|
"type": "module",
|
|
@@ -58,22 +58,22 @@
|
|
|
58
58
|
"./dist/svelte/index.js"
|
|
59
59
|
],
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@happyvertical/email": "^0.96.
|
|
62
|
-
"@happyvertical/files": "^0.96.
|
|
63
|
-
"@happyvertical/logger": "^0.96.
|
|
64
|
-
"@happyvertical/messages": "^0.96.
|
|
65
|
-
"@happyvertical/smrt-core": "0.
|
|
66
|
-
"@happyvertical/smrt-types": "0.
|
|
67
|
-
"@happyvertical/smrt-secrets": "0.
|
|
68
|
-
"@happyvertical/smrt-tenancy": "0.
|
|
69
|
-
"@happyvertical/smrt-ui": "0.
|
|
70
|
-
"@happyvertical/smrt-users": "0.
|
|
71
|
-
"@happyvertical/sql": "^0.96.
|
|
72
|
-
"@happyvertical/utils": "^0.96.
|
|
61
|
+
"@happyvertical/email": "^0.96.1",
|
|
62
|
+
"@happyvertical/files": "^0.96.1",
|
|
63
|
+
"@happyvertical/logger": "^0.96.1",
|
|
64
|
+
"@happyvertical/messages": "^0.96.1",
|
|
65
|
+
"@happyvertical/smrt-core": "0.52.0",
|
|
66
|
+
"@happyvertical/smrt-types": "0.52.0",
|
|
67
|
+
"@happyvertical/smrt-secrets": "0.52.0",
|
|
68
|
+
"@happyvertical/smrt-tenancy": "0.52.0",
|
|
69
|
+
"@happyvertical/smrt-ui": "0.52.0",
|
|
70
|
+
"@happyvertical/smrt-users": "0.52.0",
|
|
71
|
+
"@happyvertical/sql": "^0.96.1",
|
|
72
|
+
"@happyvertical/utils": "^0.96.1"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"@happyvertical/encryption": "*",
|
|
76
|
-
"svelte": "^5.57.
|
|
76
|
+
"svelte": "^5.57.0"
|
|
77
77
|
},
|
|
78
78
|
"peerDependenciesMeta": {
|
|
79
79
|
"@happyvertical/encryption": {
|
|
@@ -84,8 +84,8 @@
|
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
|
-
"@happyvertical/smrt-ledgers": "0.
|
|
88
|
-
"@happyvertical/smrt-vitest": "0.
|
|
87
|
+
"@happyvertical/smrt-ledgers": "0.52.0",
|
|
88
|
+
"@happyvertical/smrt-vitest": "0.52.0",
|
|
89
89
|
"@sveltejs/package": "^2.5.8",
|
|
90
90
|
"@sveltejs/vite-plugin-svelte": "^7.3.0",
|
|
91
91
|
"@types/node": "24.13.6",
|