@awiki/dsh-plugin 0.2.4 → 0.3.0-rc.1

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.
Files changed (142) hide show
  1. package/README.md +131 -22
  2. package/README.zh.md +110 -20
  3. package/THIRD_PARTY_NOTICES.md +8 -1
  4. package/cordis.patch.yml +5 -0
  5. package/lib/client.js +12534 -2647
  6. package/lib/client.js.map +1 -1
  7. package/lib/index.js +2431 -92
  8. package/lib/model-proxy-contract.js +96 -0
  9. package/lib/provider.js +4 -1
  10. package/lib/sdk-adapter-DLhLrLI6.mjs +886 -0
  11. package/lib/typert.host.js +1269 -534
  12. package/lib/typert.remote-client.d.ts +47 -1
  13. package/lib/typert.remote-client.d.ts.map +1 -1
  14. package/lib/typert.remote-client.js +1254 -141
  15. package/lib/types/attachment-cache.d.ts +28 -0
  16. package/lib/types/attachment-cache.d.ts.map +1 -0
  17. package/lib/types/attachment-cache.js +194 -0
  18. package/lib/types/attachment-cache.js.map +1 -0
  19. package/lib/types/client/AwikiGroupDetails.d.ts +16 -0
  20. package/lib/types/client/AwikiGroupDetails.d.ts.map +1 -0
  21. package/lib/types/client/AwikiGroupDetails.js +108 -0
  22. package/lib/types/client/AwikiGroupDetails.js.map +1 -0
  23. package/lib/types/client/AwikiIdentityAccess.d.ts +21 -0
  24. package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -0
  25. package/lib/types/client/AwikiIdentityAccess.js +148 -0
  26. package/lib/types/client/AwikiIdentityAccess.js.map +1 -0
  27. package/lib/types/client/AwikiIdentityPage.d.ts +11 -0
  28. package/lib/types/client/AwikiIdentityPage.d.ts.map +1 -0
  29. package/lib/types/client/AwikiIdentityPage.js +8 -0
  30. package/lib/types/client/AwikiIdentityPage.js.map +1 -0
  31. package/lib/types/client/AwikiMail.d.ts +15 -0
  32. package/lib/types/client/AwikiMail.d.ts.map +1 -0
  33. package/lib/types/client/AwikiMail.js +380 -0
  34. package/lib/types/client/AwikiMail.js.map +1 -0
  35. package/lib/types/client/AwikiOnboarding.d.ts +22 -0
  36. package/lib/types/client/AwikiOnboarding.d.ts.map +1 -0
  37. package/lib/types/client/AwikiOnboarding.js +104 -0
  38. package/lib/types/client/AwikiOnboarding.js.map +1 -0
  39. package/lib/types/client/AwikiOverlay.d.ts +10 -0
  40. package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
  41. package/lib/types/client/AwikiOverlay.js +370 -127
  42. package/lib/types/client/AwikiOverlay.js.map +1 -1
  43. package/lib/types/client/AwikiProfileCard.d.ts +9 -0
  44. package/lib/types/client/AwikiProfileCard.d.ts.map +1 -0
  45. package/lib/types/client/AwikiProfileCard.js +90 -0
  46. package/lib/types/client/AwikiProfileCard.js.map +1 -0
  47. package/lib/types/client/AwikiRecoveryForm.d.ts +24 -0
  48. package/lib/types/client/AwikiRecoveryForm.d.ts.map +1 -0
  49. package/lib/types/client/AwikiRecoveryForm.js +148 -0
  50. package/lib/types/client/AwikiRecoveryForm.js.map +1 -0
  51. package/lib/types/client/AwikiSettingsSection.d.ts +18 -4
  52. package/lib/types/client/AwikiSettingsSection.d.ts.map +1 -1
  53. package/lib/types/client/AwikiSettingsSection.js +277 -23
  54. package/lib/types/client/AwikiSettingsSection.js.map +1 -1
  55. package/lib/types/client/MentionText.d.ts +7 -0
  56. package/lib/types/client/MentionText.d.ts.map +1 -0
  57. package/lib/types/client/MentionText.js +10 -0
  58. package/lib/types/client/MentionText.js.map +1 -0
  59. package/lib/types/client/RechargeComingSoonDialog.d.ts +11 -0
  60. package/lib/types/client/RechargeComingSoonDialog.d.ts.map +1 -0
  61. package/lib/types/client/RechargeComingSoonDialog.js +8 -0
  62. package/lib/types/client/RechargeComingSoonDialog.js.map +1 -0
  63. package/lib/types/client/controller.d.ts +174 -4
  64. package/lib/types/client/controller.d.ts.map +1 -1
  65. package/lib/types/client/controller.js +975 -79
  66. package/lib/types/client/controller.js.map +1 -1
  67. package/lib/types/client/image-cache.d.ts +20 -0
  68. package/lib/types/client/image-cache.d.ts.map +1 -0
  69. package/lib/types/client/image-cache.js +177 -0
  70. package/lib/types/client/image-cache.js.map +1 -0
  71. package/lib/types/client/index.d.ts +2 -0
  72. package/lib/types/client/index.d.ts.map +1 -1
  73. package/lib/types/client/index.js +102 -42
  74. package/lib/types/client/index.js.map +1 -1
  75. package/lib/types/client/mail-list-cache.d.ts +15 -0
  76. package/lib/types/client/mail-list-cache.d.ts.map +1 -0
  77. package/lib/types/client/mail-list-cache.js +212 -0
  78. package/lib/types/client/mail-list-cache.js.map +1 -0
  79. package/lib/types/client/mentions.d.ts +51 -0
  80. package/lib/types/client/mentions.d.ts.map +1 -0
  81. package/lib/types/client/mentions.js +165 -0
  82. package/lib/types/client/mentions.js.map +1 -0
  83. package/lib/types/client/model-availability-controller.d.ts +27 -0
  84. package/lib/types/client/model-availability-controller.d.ts.map +1 -0
  85. package/lib/types/client/model-availability-controller.js +111 -0
  86. package/lib/types/client/model-availability-controller.js.map +1 -0
  87. package/lib/types/client/model-proxy-controller.d.ts +45 -0
  88. package/lib/types/client/model-proxy-controller.d.ts.map +1 -0
  89. package/lib/types/client/model-proxy-controller.js +306 -0
  90. package/lib/types/client/model-proxy-controller.js.map +1 -0
  91. package/lib/types/client/recharge-availability.d.ts +6 -0
  92. package/lib/types/client/recharge-availability.d.ts.map +1 -0
  93. package/lib/types/client/recharge-availability.js +6 -0
  94. package/lib/types/client/recharge-availability.js.map +1 -0
  95. package/lib/types/client/settings-locales.d.ts +1 -1
  96. package/lib/types/client/settings-locales.d.ts.map +1 -1
  97. package/lib/types/client/settings-locales.js +186 -8
  98. package/lib/types/client/settings-locales.js.map +1 -1
  99. package/lib/types/client/slots.d.ts +34 -2
  100. package/lib/types/client/slots.d.ts.map +1 -1
  101. package/lib/types/index.d.ts +95 -7
  102. package/lib/types/index.d.ts.map +1 -1
  103. package/lib/types/index.js +968 -37
  104. package/lib/types/index.js.map +1 -1
  105. package/lib/types/listener-state.d.ts +23 -0
  106. package/lib/types/listener-state.d.ts.map +1 -0
  107. package/lib/types/listener-state.js +124 -0
  108. package/lib/types/listener-state.js.map +1 -0
  109. package/lib/types/listener.d.ts +96 -0
  110. package/lib/types/listener.d.ts.map +1 -0
  111. package/lib/types/listener.js +575 -0
  112. package/lib/types/listener.js.map +1 -0
  113. package/lib/types/mail.d.ts +8 -0
  114. package/lib/types/mail.d.ts.map +1 -0
  115. package/lib/types/mail.js +75 -0
  116. package/lib/types/mail.js.map +1 -0
  117. package/lib/types/model-proxy-contract.d.ts +67 -0
  118. package/lib/types/model-proxy-contract.d.ts.map +1 -0
  119. package/lib/types/model-proxy-contract.js +135 -0
  120. package/lib/types/model-proxy-contract.js.map +1 -0
  121. package/lib/types/provider-api.d.ts +106 -2
  122. package/lib/types/provider-api.d.ts.map +1 -1
  123. package/lib/types/provider.d.ts.map +1 -1
  124. package/lib/types/provider.js +3 -0
  125. package/lib/types/provider.js.map +1 -1
  126. package/lib/types/sdk-adapter.d.ts +43 -2
  127. package/lib/types/sdk-adapter.d.ts.map +1 -1
  128. package/lib/types/sdk-adapter.js +622 -24
  129. package/lib/types/sdk-adapter.js.map +1 -1
  130. package/lib/types/sent-mail-store.d.ts +22 -0
  131. package/lib/types/sent-mail-store.d.ts.map +1 -0
  132. package/lib/types/sent-mail-store.js +246 -0
  133. package/lib/types/sent-mail-store.js.map +1 -0
  134. package/lib/types/tools.d.ts +10 -0
  135. package/lib/types/tools.d.ts.map +1 -1
  136. package/lib/types/tools.js +98 -0
  137. package/lib/types/tools.js.map +1 -1
  138. package/lib/types/types.d.ts +254 -2
  139. package/lib/types/types.d.ts.map +1 -1
  140. package/lib/types/types.js.map +1 -1
  141. package/package.json +31 -17
  142. package/lib/sdk-adapter-DK6RqV-c.mjs +0 -355
@@ -3,8 +3,12 @@ import awikiRemote from '@awiki/dsh-plugin/remote';
3
3
  import { AWIKI_DOMAIN_FIELD, normalizeAwikiDomain, } from "../domain.js";
4
4
  import { AWIKI_CLEAR_LOCAL_DATA_CONFIRMATION, AWIKI_LOGOUT_CONFIRMATION } from "../types.js";
5
5
  import { AwikiController } from "./controller.js";
6
+ import { AwikiOnboarding } from "./AwikiOnboarding.js";
6
7
  import { AwikiOverlay } from "./AwikiOverlay.js";
7
8
  import { AwikiSettingsSection } from "./AwikiSettingsSection.js";
9
+ import { ModelAvailabilityController } from "./model-availability-controller.js";
10
+ import { AwikiModelProxyController } from "./model-proxy-controller.js";
11
+ import { AWIKI_RECHARGE_ENABLED } from "./recharge-availability.js";
8
12
  import { createAwikiOverlayStore } from "./store.js";
9
13
  import { en, zh } from "./settings-locales.js";
10
14
  import { AwikiSettingsController } from "./settings-controller.js";
@@ -20,8 +24,11 @@ export async function apply(ctx) {
20
24
  const disposeRemote = await ctx.remote.$mount(awikiRemote);
21
25
  let disposeOverlay;
22
26
  let disposeSettings;
27
+ let disposeOnboarding;
23
28
  let settingsController;
24
- let activeController;
29
+ let modelController;
30
+ let availabilityController;
31
+ let awikiController;
25
32
  try {
26
33
  const remote = ctx.get('remote.awiki');
27
34
  if (remote === undefined)
@@ -31,50 +38,88 @@ export async function apply(ctx) {
31
38
  throw new Error('ui-awiki: Connection service is unavailable');
32
39
  const settings = new AwikiSettingsController(connection);
33
40
  settingsController = settings;
34
- await settings.load();
41
+ const awiki = new AwikiController(remote);
42
+ awikiController = awiki;
43
+ const availability = new ModelAvailabilityController(connection);
44
+ availabilityController = availability;
45
+ const models = new AwikiModelProxyController(connection, awiki, AWIKI_RECHARGE_ENABLED);
46
+ modelController = models;
47
+ await Promise.all([settings.load(), models.probe()]);
35
48
  ctx.effect(() => {
36
49
  const disposeZh = ctx.locale.register('settings.awiki', 'zh', zh);
37
50
  const disposeEn = ctx.locale.register('settings.awiki', 'en', en);
38
51
  return () => { disposeEn(); disposeZh(); };
39
52
  }, 'ui-awiki: settings dictionaries');
53
+ ctx.effect(() => {
54
+ const refresh = () => { availability.refreshIfLoaded(); };
55
+ const disposers = [
56
+ ctx.remote.$on('settings/document-updated', refresh),
57
+ ctx.remote.$on('credentials/updated', refresh),
58
+ ctx.remote.$on('llm/adapters-updated', refresh),
59
+ ctx.on('connection/reset', refresh),
60
+ ];
61
+ return () => { for (const dispose of disposers)
62
+ dispose(); };
63
+ }, 'ui-awiki: model availability invalidations');
40
64
  disposeOverlay = ctx.slots.inject('shell.overlay', () => {
41
- const controller = new AwikiController(remote);
42
- activeController = controller;
43
65
  const dispose = ctx.slots.register({
44
66
  name: 'shell.overlay',
45
67
  id: 'awiki',
46
68
  order: 20,
47
69
  store: createAwikiOverlayStore,
48
70
  inject: () => ({
49
- hooks: { awiki: controller },
50
- open: () => controller.open(),
51
- close: () => { controller.close(); },
52
- sendRegistrationOtp: request => controller.sendRegistrationOtp(request),
53
- registerIdentity: request => controller.registerIdentity(request),
54
- updateDisplayName: displayName => controller.updateDisplayName(displayName),
55
- loadMoreConversations: () => controller.loadMoreConversations(),
56
- startDirectChat: handle => controller.startDirectChat(handle),
57
- selectConversation: conversationId => controller.selectConversation(conversationId),
58
- markSelectedConversationRead: () => controller.markSelectedConversationRead(),
59
- loadOlderHistory: () => controller.loadOlderHistory(),
60
- summarizeConversation: () => controller.summarizeConversation(),
61
- setSummaryCollapsed: (conversationId, collapsed) => { controller.setSummaryCollapsed(conversationId, collapsed); },
62
- sendText: text => controller.sendText(text),
63
- sendAttachment: file => controller.sendAttachment(file),
64
- downloadAttachment: (messageId, attachmentId) => controller.downloadAttachment(messageId, attachmentId),
65
- logout: () => controller.logout({ confirmation: AWIKI_LOGOUT_CONFIRMATION }),
66
- login: () => controller.login(),
71
+ hooks: { awiki },
72
+ open: () => awiki.open(),
73
+ close: () => { awiki.close(); },
74
+ inspectIdentityAccess: request => awiki.inspectIdentityAccess(request),
75
+ sendRegistrationOtp: request => awiki.sendRegistrationOtp(request),
76
+ registerIdentity: request => awiki.registerIdentity(request),
77
+ updateDisplayName: displayName => awiki.updateDisplayName(displayName),
78
+ updateProfile: request => awiki.updateProfile(request),
79
+ sendRecoveryOtp: request => awiki.sendRecoveryOtp(request),
80
+ prepareRecovery: request => awiki.prepareRecovery(request),
81
+ activateRecovery: () => awiki.activateRecovery(),
82
+ refreshRecoveryStatus: () => awiki.refreshRecoveryStatus(),
83
+ resumeRecovery: () => awiki.resumeRecovery(),
84
+ discardRecovery: () => awiki.discardRecovery(),
85
+ loadMoreConversations: () => awiki.loadMoreConversations(),
86
+ retryGroupRebindRecovery: () => awiki.retryGroupRebindRecovery(),
87
+ startDirectChat: handle => awiki.startDirectChat(handle),
88
+ createGroup: (name, members) => awiki.createGroup(name, members),
89
+ joinGroup: groupDid => awiki.joinGroup(groupDid),
90
+ refreshSelectedGroup: () => awiki.refreshSelectedGroup(),
91
+ loadMoreGroupMembers: () => awiki.loadMoreGroupMembers(),
92
+ addSelectedGroupMember: member => awiki.addSelectedGroupMember(member),
93
+ removeSelectedGroupMember: member => awiki.removeSelectedGroupMember(member),
94
+ leaveSelectedGroup: () => awiki.leaveSelectedGroup(),
95
+ selectConversation: conversationId => awiki.selectConversation(conversationId),
96
+ markSelectedConversationRead: () => awiki.markSelectedConversationRead(),
97
+ loadOlderHistory: () => awiki.loadOlderHistory(),
98
+ summarizeConversation: () => awiki.summarizeConversation(),
99
+ setSummaryCollapsed: (conversationId, collapsed) => { awiki.setSummaryCollapsed(conversationId, collapsed); },
100
+ sendText: (text, clientMessageId, mentions) => awiki.sendText(text, clientMessageId, mentions),
101
+ sendAttachment: file => awiki.sendAttachment(file),
102
+ downloadAttachment: (messageId, attachmentId) => awiki.downloadAttachment(messageId, attachmentId),
103
+ logout: () => awiki.logout({ confirmation: AWIKI_LOGOUT_CONFIRMATION }),
104
+ login: () => awiki.login(),
105
+ clearLocalIdentity: async () => {
106
+ const result = await awiki.clearLocalData({ confirmation: AWIKI_CLEAR_LOCAL_DATA_CONFIRMATION });
107
+ return result.ok ? { ok: true, value: undefined } : result;
108
+ },
109
+ getMailAccount: () => awiki.getMailAccount(),
110
+ listMailInbox: request => awiki.listMailInbox(request),
111
+ readMail: request => awiki.readMail(request),
112
+ markMailRead: request => awiki.markMailRead(request),
113
+ sendMail: request => awiki.sendMail(request),
67
114
  }),
68
115
  }, AwikiOverlay);
69
- return () => {
70
- dispose();
71
- controller.dispose();
72
- if (activeController === controller)
73
- activeController = undefined;
74
- };
116
+ return dispose;
75
117
  });
76
118
  const injectedSettings = () => ({
77
- hooks: { awikiSettings: settings },
119
+ hooks: { awikiSettings: settings, awikiModelProxy: models, awikiSession: awiki },
120
+ identity: awiki,
121
+ models,
122
+ rechargeEnabled: AWIKI_RECHARGE_ENABLED,
78
123
  saveDomain: async (raw) => {
79
124
  const domain = normalizeAwikiDomain(raw);
80
125
  await settings.set(AWIKI_DOMAIN_FIELD, domain);
@@ -93,17 +138,9 @@ export async function apply(ctx) {
93
138
  }
94
139
  },
95
140
  clearLocalData: async () => {
96
- const controller = activeController ?? new AwikiController(remote);
97
- const temporary = activeController === undefined;
98
- try {
99
- const result = await controller.clearLocalData({ confirmation: AWIKI_CLEAR_LOCAL_DATA_CONFIRMATION });
100
- if (!result.ok)
101
- throw new Error(result.error);
102
- }
103
- finally {
104
- if (temporary)
105
- controller.dispose();
106
- }
141
+ const result = await awiki.clearLocalData({ confirmation: AWIKI_CLEAR_LOCAL_DATA_CONFIRMATION });
142
+ if (!result.ok)
143
+ throw new Error(result.error);
107
144
  },
108
145
  });
109
146
  disposeSettings = ctx.slots.inject('settings.section', () => ctx.slots.register({
@@ -114,15 +151,38 @@ export async function apply(ctx) {
114
151
  locale: 'settings.awiki',
115
152
  inject: injectedSettings,
116
153
  }, AwikiSettingsSection));
154
+ disposeOnboarding = ctx.slots.inject('settings.onboarding', () => ctx.slots.register({
155
+ name: 'settings.onboarding',
156
+ id: 'awiki-model-proxy',
157
+ order: -10,
158
+ locale: 'settings.awiki',
159
+ inject: () => ({
160
+ hooks: { awikiOnboarding: awiki, awikiModelAvailability: availability, awikiModelProxy: models },
161
+ identity: awiki,
162
+ availability,
163
+ models,
164
+ rechargeEnabled: AWIKI_RECHARGE_ENABLED,
165
+ }),
166
+ }, AwikiOnboarding));
117
167
  }
118
168
  catch (error) {
169
+ disposeOnboarding?.();
170
+ disposeSettings?.();
171
+ disposeOverlay?.();
172
+ modelController?.dispose();
173
+ availabilityController?.dispose();
174
+ awikiController?.dispose();
119
175
  settingsController?.dispose();
120
176
  await disposeRemote();
121
177
  throw error;
122
178
  }
123
179
  return async () => {
124
- disposeSettings();
125
- disposeOverlay();
180
+ disposeOnboarding?.();
181
+ disposeSettings?.();
182
+ disposeOverlay?.();
183
+ modelController?.dispose();
184
+ availabilityController?.dispose();
185
+ awikiController?.dispose();
126
186
  settingsController?.dispose();
127
187
  await disposeRemote();
128
188
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Bounded browser cache for mailbox summaries. Message bodies are never persisted here. */
2
+ import type { AwikiDid, AwikiMailInboxPage } from '@awiki/dsh-plugin/types';
3
+ export type CachedMailFolder = 'inbox' | 'sent';
4
+ export declare const MAIL_LIST_CACHE_MAX_AGE_MS: number;
5
+ /** Stable owner known before Mail Account loads, preventing cache data from crossing identities. */
6
+ export declare function mailListCacheOwner(ownerDid: AwikiDid): string | undefined;
7
+ /** Read one fresh, owner-bound cache entry. Invalid or expired data is discarded. */
8
+ export declare function readMailListCache(storage: Storage, ownerDid: AwikiDid, folder: CachedMailFolder, now?: number): AwikiMailInboxPage | undefined;
9
+ /** Persist one bounded list projection. Failures never block live mailbox behavior. */
10
+ export declare function writeMailListCache(storage: Storage, ownerDid: AwikiDid, folder: CachedMailFolder, page: AwikiMailInboxPage, now?: number): void;
11
+ /** Restore the last folder selected for one AWiki identity. */
12
+ export declare function readMailFolderCache(storage: Storage, ownerDid: AwikiDid): CachedMailFolder;
13
+ /** Remember the current folder without storing any message content. */
14
+ export declare function writeMailFolderCache(storage: Storage, ownerDid: AwikiDid, folder: CachedMailFolder): void;
15
+ //# sourceMappingURL=mail-list-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-list-cache.d.ts","sourceRoot":"","sources":["../../../src/client/mail-list-cache.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAE5F,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAGnB,MAAM,yBAAyB,CAAA;AAEhC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAA;AAa/C,eAAO,MAAM,0BAA0B,QAA2B,CAAA;AAgFlE,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAOzE;AAcD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,gBAAgB,EACxB,GAAG,SAAa,GACf,kBAAkB,GAAG,SAAS,CAwDhC;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,kBAAkB,EACxB,GAAG,SAAa,GACf,IAAI,CAmBN;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CAQ1F;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAQzG"}
@@ -0,0 +1,212 @@
1
+ /** Bounded browser cache for mailbox summaries. Message bodies are never persisted here. */
2
+ const CACHE_VERSION = 2;
3
+ const CACHE_PREFIX = 'awiki:mail-list:v2:';
4
+ const FOLDER_PREFIX = 'awiki:mail-folder:v1:';
5
+ const MAX_ITEMS = 200;
6
+ const MAX_CACHE_CHARACTERS = 768 * 1024;
7
+ const MAX_PARTICIPANTS = 20;
8
+ const MAX_ADDRESS_CHARACTERS = 320;
9
+ const MAX_SUBJECT_CHARACTERS = 4_096;
10
+ const MAX_PREVIEW_CHARACTERS = 16_384;
11
+ const MAX_TOKEN_CHARACTERS = 2_048;
12
+ const CLOCK_SKEW_MS = 5 * 60 * 1_000;
13
+ export const MAIL_LIST_CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1_000;
14
+ function validString(value, maxCharacters, allowEmpty = true) {
15
+ return typeof value === 'string'
16
+ && (allowEmpty || value.length > 0)
17
+ && Array.from(value).length <= maxCharacters
18
+ && !/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/u.test(value);
19
+ }
20
+ function stringArray(value) {
21
+ if (!Array.isArray(value) || value.length > MAX_PARTICIPANTS)
22
+ return undefined;
23
+ const items = [];
24
+ for (const item of value) {
25
+ if (!validString(item, MAX_ADDRESS_CHARACTERS, false))
26
+ return undefined;
27
+ items.push(item);
28
+ }
29
+ return items;
30
+ }
31
+ function optionalString(value, maxCharacters) {
32
+ if (value === undefined)
33
+ return undefined;
34
+ return validString(value, maxCharacters) ? value : false;
35
+ }
36
+ function decodeSummary(input, folder) {
37
+ if (typeof input !== 'object' || input === null || Array.isArray(input))
38
+ return undefined;
39
+ const value = input;
40
+ const from = stringArray(value.from);
41
+ const to = stringArray(value.to);
42
+ const cc = stringArray(value.cc);
43
+ const storedFolder = optionalString(value.folder, 32);
44
+ const preview = optionalString(value.preview, MAX_PREVIEW_CHARACTERS);
45
+ const receivedAt = optionalString(value.receivedAt, 128);
46
+ const sentAt = optionalString(value.sentAt, 128);
47
+ const attachmentCount = value.attachmentCount;
48
+ if (!validString(value.id, MAX_TOKEN_CHARACTERS, false)
49
+ || from === undefined
50
+ || to === undefined
51
+ || cc === undefined
52
+ || !validString(value.subject, MAX_SUBJECT_CHARACTERS)
53
+ || typeof value.subjectTruncated !== 'boolean'
54
+ || storedFolder === false
55
+ || (storedFolder !== undefined && storedFolder !== folder)
56
+ || preview === false
57
+ || receivedAt === false
58
+ || sentAt === false
59
+ || typeof value.previewTruncated !== 'boolean'
60
+ || typeof value.unread !== 'boolean'
61
+ || typeof value.hasAttachments !== 'boolean'
62
+ || (attachmentCount !== undefined
63
+ && (!Number.isSafeInteger(attachmentCount) || attachmentCount < 0)))
64
+ return undefined;
65
+ return {
66
+ id: value.id,
67
+ ...(storedFolder === undefined ? {} : { folder: storedFolder }),
68
+ from,
69
+ to,
70
+ cc,
71
+ subject: value.subject,
72
+ subjectTruncated: value.subjectTruncated,
73
+ ...(preview === undefined ? {} : { preview }),
74
+ previewTruncated: value.previewTruncated,
75
+ ...(receivedAt === undefined ? {} : { receivedAt }),
76
+ ...(sentAt === undefined ? {} : { sentAt }),
77
+ unread: value.unread,
78
+ hasAttachments: value.hasAttachments,
79
+ ...(attachmentCount === undefined ? {} : { attachmentCount: attachmentCount }),
80
+ };
81
+ }
82
+ /** Stable owner known before Mail Account loads, preventing cache data from crossing identities. */
83
+ export function mailListCacheOwner(ownerDid) {
84
+ const owner = String(ownerDid);
85
+ return owner.length > 0
86
+ && Array.from(owner).length <= MAX_TOKEN_CHARACTERS
87
+ && !/[\s\u0000-\u001f\u007f-\u009f]/u.test(owner)
88
+ ? owner
89
+ : undefined;
90
+ }
91
+ function storageKey(owner, folder) {
92
+ return `${CACHE_PREFIX}${encodeURIComponent(owner)}:${folder}`;
93
+ }
94
+ function remove(storage, key) {
95
+ try {
96
+ storage.removeItem(key);
97
+ }
98
+ catch {
99
+ // Storage can be unavailable in privacy-restricted or quota-constrained contexts.
100
+ }
101
+ }
102
+ /** Read one fresh, owner-bound cache entry. Invalid or expired data is discarded. */
103
+ export function readMailListCache(storage, ownerDid, folder, now = Date.now()) {
104
+ const owner = mailListCacheOwner(ownerDid);
105
+ if (owner === undefined)
106
+ return undefined;
107
+ const key = storageKey(owner, folder);
108
+ let raw;
109
+ try {
110
+ raw = storage.getItem(key);
111
+ }
112
+ catch {
113
+ return undefined;
114
+ }
115
+ if (raw === null)
116
+ return undefined;
117
+ if (raw.length > MAX_CACHE_CHARACTERS) {
118
+ remove(storage, key);
119
+ return undefined;
120
+ }
121
+ let parsed;
122
+ try {
123
+ parsed = JSON.parse(raw);
124
+ }
125
+ catch {
126
+ remove(storage, key);
127
+ return undefined;
128
+ }
129
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
130
+ remove(storage, key);
131
+ return undefined;
132
+ }
133
+ const value = parsed;
134
+ if (value.version !== CACHE_VERSION
135
+ || value.owner !== owner
136
+ || value.folder !== folder
137
+ || !Number.isSafeInteger(value.savedAt)
138
+ || value.savedAt < 0
139
+ || value.savedAt > now + CLOCK_SKEW_MS
140
+ || now - value.savedAt > MAIL_LIST_CACHE_MAX_AGE_MS
141
+ || !Array.isArray(value.items)
142
+ || value.items.length > MAX_ITEMS
143
+ || typeof value.hasMore !== 'boolean'
144
+ || (value.nextOffset !== undefined
145
+ && (!Number.isSafeInteger(value.nextOffset) || value.nextOffset < 0))) {
146
+ remove(storage, key);
147
+ return undefined;
148
+ }
149
+ const items = [];
150
+ for (const item of value.items) {
151
+ const decoded = decodeSummary(item, folder);
152
+ if (decoded === undefined) {
153
+ remove(storage, key);
154
+ return undefined;
155
+ }
156
+ items.push(decoded);
157
+ }
158
+ return {
159
+ items,
160
+ ...(value.nextOffset === undefined ? {} : { nextOffset: value.nextOffset }),
161
+ hasMore: value.hasMore,
162
+ };
163
+ }
164
+ /** Persist one bounded list projection. Failures never block live mailbox behavior. */
165
+ export function writeMailListCache(storage, ownerDid, folder, page, now = Date.now()) {
166
+ const owner = mailListCacheOwner(ownerDid);
167
+ if (owner === undefined || page.items.length > MAX_ITEMS)
168
+ return;
169
+ const stored = {
170
+ version: CACHE_VERSION,
171
+ owner,
172
+ folder,
173
+ savedAt: now,
174
+ items: page.items,
175
+ ...(page.nextOffset === undefined ? {} : { nextOffset: page.nextOffset }),
176
+ hasMore: page.hasMore,
177
+ };
178
+ const raw = JSON.stringify(stored);
179
+ if (raw.length > MAX_CACHE_CHARACTERS)
180
+ return;
181
+ try {
182
+ storage.setItem(storageKey(owner, folder), raw);
183
+ }
184
+ catch {
185
+ // Caching is opportunistic; live mailbox requests remain authoritative.
186
+ }
187
+ }
188
+ /** Restore the last folder selected for one AWiki identity. */
189
+ export function readMailFolderCache(storage, ownerDid) {
190
+ const owner = mailListCacheOwner(ownerDid);
191
+ if (owner === undefined)
192
+ return 'inbox';
193
+ try {
194
+ return storage.getItem(`${FOLDER_PREFIX}${encodeURIComponent(owner)}`) === 'sent' ? 'sent' : 'inbox';
195
+ }
196
+ catch {
197
+ return 'inbox';
198
+ }
199
+ }
200
+ /** Remember the current folder without storing any message content. */
201
+ export function writeMailFolderCache(storage, ownerDid, folder) {
202
+ const owner = mailListCacheOwner(ownerDid);
203
+ if (owner === undefined)
204
+ return;
205
+ try {
206
+ storage.setItem(`${FOLDER_PREFIX}${encodeURIComponent(owner)}`, folder);
207
+ }
208
+ catch {
209
+ // Folder restoration is optional and must never block mailbox navigation.
210
+ }
211
+ }
212
+ //# sourceMappingURL=mail-list-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-list-cache.js","sourceRoot":"","sources":["../../../src/client/mail-list-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /** Browser-only AWiki mention editing helpers. All ranges use Unicode code points. */
2
+ import type { AwikiDid, AwikiGroupMemberRecord, AwikiMention } from '@awiki/dsh-plugin/types';
3
+ export interface AwikiMentionDraft {
4
+ readonly id: string;
5
+ readonly start: number;
6
+ readonly end: number;
7
+ readonly surface: string;
8
+ readonly did: AwikiDid;
9
+ readonly displayName?: string;
10
+ }
11
+ export interface AwikiMentionQuery {
12
+ readonly start: number;
13
+ readonly end: number;
14
+ readonly query: string;
15
+ }
16
+ export interface AwikiMentionCandidate {
17
+ readonly member: AwikiGroupMemberRecord & {
18
+ readonly did: AwikiDid;
19
+ };
20
+ readonly label: string;
21
+ }
22
+ export interface AwikiMentionSegment {
23
+ readonly text: string;
24
+ readonly mention: boolean;
25
+ readonly id?: string;
26
+ }
27
+ /** Convert a DOM textarea UTF-16 offset into the code-point unit used by ANP-P9. */
28
+ export declare function utf16IndexToCodePointIndex(value: string, utf16Index: number): number;
29
+ /** Convert a code-point range offset back into a DOM textarea UTF-16 offset. */
30
+ export declare function codePointIndexToUtf16Index(value: string, codePointIndex: number): number;
31
+ /** Find an unfinished @query ending at the current caret. */
32
+ export declare function activeMentionQuery(value: string, caret: number): AwikiMentionQuery | null;
33
+ export declare function shortenedDid(did: AwikiDid): string;
34
+ export declare function mentionMemberLabel(member: AwikiGroupMemberRecord & {
35
+ readonly did: AwikiDid;
36
+ }): string;
37
+ /** Keep only active human peers that have a stable DID and are not the current identity. */
38
+ export declare function mentionCandidates(members: readonly AwikiGroupMemberRecord[], currentDid: AwikiDid, query: string): AwikiMentionCandidate[];
39
+ /** Insert a selected candidate at the current query and return the next caret position. */
40
+ export declare function insertMention(value: string, query: AwikiMentionQuery, candidate: AwikiMentionCandidate, id: string): {
41
+ readonly text: string;
42
+ readonly caret: number;
43
+ readonly mention: AwikiMentionDraft;
44
+ };
45
+ /** Shift unaffected ranges after one edit and drop any mention touched by the edit. */
46
+ export declare function transformMentionDrafts(previousText: string, nextText: string, drafts: readonly AwikiMentionDraft[]): AwikiMentionDraft[];
47
+ /** Produce validated protocol mentions; stale or overlapping browser drafts are ignored. */
48
+ export declare function protocolMentions(value: string, drafts: readonly AwikiMentionDraft[]): AwikiMention[];
49
+ /** Split valid mention ranges for visual highlighting; malformed metadata becomes plain text. */
50
+ export declare function mentionSegments(value: string, mentions: readonly AwikiMention[] | undefined): AwikiMentionSegment[];
51
+ //# sourceMappingURL=mentions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/client/mentions.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE7F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,GAAG;QAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAA;KAAE,CAAA;IACpE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CACrB;AAYD,oFAAoF;AACpF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGpF;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAazF;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAGlD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,CAKtG;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,UAAU,EAAE,QAAQ,EACpB,KAAK,EAAE,MAAM,GACZ,qBAAqB,EAAE,CAazB;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,qBAAqB,EAChC,EAAE,EAAE,MAAM,GACT;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAkBxF;AAUD,uFAAuF;AACvF,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,iBAAiB,EAAE,GACnC,iBAAiB,EAAE,CAqBrB;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAepG;AAED,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GAAG,mBAAmB,EAAE,CAuBnH"}