@awiki/dsh-plugin 0.3.7-dsh-test.20260831.2 → 0.3.10

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 (183) hide show
  1. package/README.md +66 -26
  2. package/README.zh.md +57 -23
  3. package/cordis.patch.yml +7 -5
  4. package/lib/builtin-tenants.json +22 -0
  5. package/lib/builtin-tenants.sha256 +1 -0
  6. package/lib/client.js +7123 -1635
  7. package/lib/client.js.map +1 -1
  8. package/lib/index.js +2534 -474
  9. package/lib/model-proxy-contract.js +11 -3
  10. package/lib/provider.js +6 -3
  11. package/lib/{sdk-adapter-FGaOi8It.mjs → sdk-adapter-CYcJH7sM.mjs} +210 -21
  12. package/lib/typert.host.js +1305 -106
  13. package/lib/typert.remote-client.d.ts +25 -1
  14. package/lib/typert.remote-client.d.ts.map +1 -1
  15. package/lib/typert.remote-client.js +1305 -106
  16. package/lib/types/builtin-tenant-config.d.ts +19 -0
  17. package/lib/types/builtin-tenant-config.d.ts.map +1 -0
  18. package/lib/types/builtin-tenant-config.js +57 -0
  19. package/lib/types/builtin-tenant-config.js.map +1 -0
  20. package/lib/types/client/AwikiDeviceJoinReminder.d.ts +15 -0
  21. package/lib/types/client/AwikiDeviceJoinReminder.d.ts.map +1 -0
  22. package/lib/types/client/AwikiDeviceJoinReminder.js +74 -0
  23. package/lib/types/client/AwikiDeviceJoinReminder.js.map +1 -0
  24. package/lib/types/client/AwikiDevices.d.ts +8 -3
  25. package/lib/types/client/AwikiDevices.d.ts.map +1 -1
  26. package/lib/types/client/AwikiDevices.js +64 -8
  27. package/lib/types/client/AwikiDevices.js.map +1 -1
  28. package/lib/types/client/AwikiGroupDetails.d.ts.map +1 -1
  29. package/lib/types/client/AwikiGroupDetails.js +16 -13
  30. package/lib/types/client/AwikiGroupDetails.js.map +1 -1
  31. package/lib/types/client/AwikiIdentityAccess.d.ts +10 -4
  32. package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -1
  33. package/lib/types/client/AwikiIdentityAccess.js +139 -36
  34. package/lib/types/client/AwikiIdentityAccess.js.map +1 -1
  35. package/lib/types/client/AwikiIntegrationSettings.d.ts +21 -0
  36. package/lib/types/client/AwikiIntegrationSettings.d.ts.map +1 -0
  37. package/lib/types/client/AwikiIntegrationSettings.js +105 -0
  38. package/lib/types/client/AwikiIntegrationSettings.js.map +1 -0
  39. package/lib/types/client/AwikiMail.d.ts.map +1 -1
  40. package/lib/types/client/AwikiMail.js +12 -8
  41. package/lib/types/client/AwikiMail.js.map +1 -1
  42. package/lib/types/client/AwikiOverlay.d.ts +0 -1
  43. package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
  44. package/lib/types/client/AwikiOverlay.js +26 -21
  45. package/lib/types/client/AwikiOverlay.js.map +1 -1
  46. package/lib/types/client/AwikiProfileCard.d.ts.map +1 -1
  47. package/lib/types/client/AwikiProfileCard.js +17 -18
  48. package/lib/types/client/AwikiProfileCard.js.map +1 -1
  49. package/lib/types/client/AwikiRecoveryForm.d.ts +5 -1
  50. package/lib/types/client/AwikiRecoveryForm.d.ts.map +1 -1
  51. package/lib/types/client/AwikiRecoveryForm.js +73 -30
  52. package/lib/types/client/AwikiRecoveryForm.js.map +1 -1
  53. package/lib/types/client/AwikiSettingsSection.d.ts +28 -13
  54. package/lib/types/client/AwikiSettingsSection.d.ts.map +1 -1
  55. package/lib/types/client/AwikiSettingsSection.js +93 -61
  56. package/lib/types/client/AwikiSettingsSection.js.map +1 -1
  57. package/lib/types/client/AwikiUpdates.d.ts +10 -0
  58. package/lib/types/client/AwikiUpdates.d.ts.map +1 -0
  59. package/lib/types/client/AwikiUpdates.js +57 -0
  60. package/lib/types/client/AwikiUpdates.js.map +1 -0
  61. package/lib/types/client/awiki-client-bridge.d.ts +1 -1
  62. package/lib/types/client/awiki-client-bridge.d.ts.map +1 -1
  63. package/lib/types/client/awiki-client-bridge.js +4 -1
  64. package/lib/types/client/awiki-client-bridge.js.map +1 -1
  65. package/lib/types/client/controller.d.ts +65 -11
  66. package/lib/types/client/controller.d.ts.map +1 -1
  67. package/lib/types/client/controller.js +480 -127
  68. package/lib/types/client/controller.js.map +1 -1
  69. package/lib/types/client/drafts.d.ts +31 -0
  70. package/lib/types/client/drafts.d.ts.map +1 -0
  71. package/lib/types/client/drafts.js +94 -0
  72. package/lib/types/client/drafts.js.map +1 -0
  73. package/lib/types/client/image-cache.d.ts +2 -2
  74. package/lib/types/client/image-cache.d.ts.map +1 -1
  75. package/lib/types/client/image-cache.js +15 -2
  76. package/lib/types/client/image-cache.js.map +1 -1
  77. package/lib/types/client/index.d.ts.map +1 -1
  78. package/lib/types/client/index.js +55 -15
  79. package/lib/types/client/index.js.map +1 -1
  80. package/lib/types/client/integration-operation.d.ts +9 -0
  81. package/lib/types/client/integration-operation.d.ts.map +1 -0
  82. package/lib/types/client/integration-operation.js +54 -0
  83. package/lib/types/client/integration-operation.js.map +1 -0
  84. package/lib/types/client/mail-list-cache.d.ts +2 -0
  85. package/lib/types/client/mail-list-cache.d.ts.map +1 -1
  86. package/lib/types/client/mail-list-cache.js +18 -0
  87. package/lib/types/client/mail-list-cache.js.map +1 -1
  88. package/lib/types/client/otp-cooldown.d.ts +6 -0
  89. package/lib/types/client/otp-cooldown.d.ts.map +1 -0
  90. package/lib/types/client/otp-cooldown.js +18 -0
  91. package/lib/types/client/otp-cooldown.js.map +1 -0
  92. package/lib/types/client/settings-controller.d.ts +34 -0
  93. package/lib/types/client/settings-controller.d.ts.map +1 -1
  94. package/lib/types/client/settings-controller.js +182 -2
  95. package/lib/types/client/settings-controller.js.map +1 -1
  96. package/lib/types/client/settings-locales.d.ts +1 -1
  97. package/lib/types/client/settings-locales.d.ts.map +1 -1
  98. package/lib/types/client/settings-locales.js +184 -6
  99. package/lib/types/client/settings-locales.js.map +1 -1
  100. package/lib/types/client/slots.d.ts +11 -1
  101. package/lib/types/client/slots.d.ts.map +1 -1
  102. package/lib/types/client/slots.js +0 -1
  103. package/lib/types/client/slots.js.map +1 -1
  104. package/lib/types/desktop-distribution.d.ts +25 -0
  105. package/lib/types/desktop-distribution.d.ts.map +1 -0
  106. package/lib/types/desktop-distribution.js +57 -0
  107. package/lib/types/desktop-distribution.js.map +1 -0
  108. package/lib/types/domain.d.ts +1 -1
  109. package/lib/types/domain.d.ts.map +1 -1
  110. package/lib/types/domain.js +2 -1
  111. package/lib/types/domain.js.map +1 -1
  112. package/lib/types/index.d.ts +112 -18
  113. package/lib/types/index.d.ts.map +1 -1
  114. package/lib/types/index.js +897 -205
  115. package/lib/types/index.js.map +1 -1
  116. package/lib/types/integration-client.d.ts +17 -0
  117. package/lib/types/integration-client.d.ts.map +1 -0
  118. package/lib/types/integration-client.js +233 -0
  119. package/lib/types/integration-client.js.map +1 -0
  120. package/lib/types/legacy-sent-mail-cache.d.ts +4 -0
  121. package/lib/types/legacy-sent-mail-cache.d.ts.map +1 -0
  122. package/lib/types/legacy-sent-mail-cache.js +29 -0
  123. package/lib/types/legacy-sent-mail-cache.js.map +1 -0
  124. package/lib/types/mail-list-client.d.ts +12 -0
  125. package/lib/types/mail-list-client.d.ts.map +1 -0
  126. package/lib/types/mail-list-client.js +254 -0
  127. package/lib/types/mail-list-client.js.map +1 -0
  128. package/lib/types/mail-recovery-observability.d.ts +8 -0
  129. package/lib/types/mail-recovery-observability.d.ts.map +1 -0
  130. package/lib/types/mail-recovery-observability.js +119 -0
  131. package/lib/types/mail-recovery-observability.js.map +1 -0
  132. package/lib/types/model-proxy-contract.d.ts.map +1 -1
  133. package/lib/types/model-proxy-contract.js +7 -0
  134. package/lib/types/model-proxy-contract.js.map +1 -1
  135. package/lib/types/package-version.generated.d.ts +4 -0
  136. package/lib/types/package-version.generated.d.ts.map +1 -0
  137. package/lib/types/package-version.generated.js +4 -0
  138. package/lib/types/package-version.generated.js.map +1 -0
  139. package/lib/types/profile-state.d.ts +6 -0
  140. package/lib/types/profile-state.d.ts.map +1 -0
  141. package/lib/types/profile-state.js +41 -0
  142. package/lib/types/profile-state.js.map +1 -0
  143. package/lib/types/provider-api.d.ts +36 -9
  144. package/lib/types/provider-api.d.ts.map +1 -1
  145. package/lib/types/provider.d.ts.map +1 -1
  146. package/lib/types/provider.js +5 -2
  147. package/lib/types/provider.js.map +1 -1
  148. package/lib/types/realtime-supervisor.d.ts +6 -0
  149. package/lib/types/realtime-supervisor.d.ts.map +1 -1
  150. package/lib/types/realtime-supervisor.js +14 -1
  151. package/lib/types/realtime-supervisor.js.map +1 -1
  152. package/lib/types/sdk-adapter.d.ts +32 -6
  153. package/lib/types/sdk-adapter.d.ts.map +1 -1
  154. package/lib/types/sdk-adapter.js +127 -24
  155. package/lib/types/sdk-adapter.js.map +1 -1
  156. package/lib/types/settings-rpc-contract.d.ts +58 -0
  157. package/lib/types/settings-rpc-contract.d.ts.map +1 -1
  158. package/lib/types/settings-rpc-contract.js +103 -0
  159. package/lib/types/settings-rpc-contract.js.map +1 -1
  160. package/lib/types/settings-rpc.d.ts +14 -1
  161. package/lib/types/settings-rpc.d.ts.map +1 -1
  162. package/lib/types/settings-rpc.js +130 -1
  163. package/lib/types/settings-rpc.js.map +1 -1
  164. package/lib/types/tenant-registry.d.ts +74 -0
  165. package/lib/types/tenant-registry.d.ts.map +1 -0
  166. package/lib/types/tenant-registry.js +440 -0
  167. package/lib/types/tenant-registry.js.map +1 -0
  168. package/lib/types/types.d.ts +173 -1
  169. package/lib/types/types.d.ts.map +1 -1
  170. package/lib/types/types.js.map +1 -1
  171. package/lib/types/update-policy.d.ts +51 -0
  172. package/lib/types/update-policy.d.ts.map +1 -0
  173. package/lib/types/update-policy.js +379 -0
  174. package/lib/types/update-policy.js.map +1 -0
  175. package/lib/types/version.d.ts +4 -0
  176. package/lib/types/version.d.ts.map +1 -0
  177. package/lib/types/version.js +44 -0
  178. package/lib/types/version.js.map +1 -0
  179. package/package.json +34 -21
  180. package/lib/types/sent-mail-store.d.ts +0 -22
  181. package/lib/types/sent-mail-store.d.ts.map +0 -1
  182. package/lib/types/sent-mail-store.js +0 -246
  183. package/lib/types/sent-mail-store.js.map +0 -1
@@ -0,0 +1,233 @@
1
+ /** Host-only fixed-scope client for Guest Integration management. */
2
+ import { AwikiExternalHttpAuthError, } from "./external-http-auth.js";
3
+ const MAX_REQUEST_BYTES = 64 * 1024;
4
+ const MAX_RESPONSE_BYTES = 1024 * 1024;
5
+ const REQUEST_TIMEOUT_MS = 10_000;
6
+ const INTEGRATION_STATUSES = ['active', 'closed'];
7
+ const TARGET_AVAILABILITIES = [
8
+ 'eligible',
9
+ 'group_not_found',
10
+ 'owner_not_active',
11
+ 'owner_mismatch',
12
+ 'not_open_join',
13
+ 'unsupported_security_profile',
14
+ 'member_send_disabled',
15
+ 'attachments_disabled',
16
+ 'group_full',
17
+ 'validation_unavailable',
18
+ ];
19
+ const OPERATIONS = {
20
+ read: { method: 'GET', path: '/guest/api/v1/management/integration' },
21
+ create: { method: 'POST', path: '/guest/api/v1/management/integration' },
22
+ update: { method: 'PATCH', path: '/guest/api/v1/management/integration' },
23
+ rotate: { method: 'POST', path: '/guest/api/v1/management/integration/rotate-id' },
24
+ close: { method: 'POST', path: '/guest/api/v1/management/integration/close' },
25
+ reopen: { method: 'POST', path: '/guest/api/v1/management/integration/reopen' },
26
+ };
27
+ /** Browser-safe management input translated to the Gateway's snake-case contract. */
28
+ function fields(request) {
29
+ return {
30
+ product_name: request.productName,
31
+ description: request.description,
32
+ contact_enabled: request.contactEnabled,
33
+ contact_description: request.contactDescription,
34
+ group_targets: request.groupTargets.map(target => ({
35
+ ...target.id === undefined ? {} : { id: target.id },
36
+ group_did: target.groupDid,
37
+ description: target.description,
38
+ })),
39
+ };
40
+ }
41
+ function view(raw) {
42
+ if (typeof raw !== 'object' || raw === null)
43
+ throw new TypeError('invalid Integration response');
44
+ const value = raw;
45
+ const owner = value.owner;
46
+ const groups = value.group_targets;
47
+ if (typeof owner !== 'object' || owner === null || !Array.isArray(groups)) {
48
+ throw new TypeError('invalid Integration response');
49
+ }
50
+ return {
51
+ id: requiredString(value.id),
52
+ publicId: nullableString(value.public_id),
53
+ integrationUrl: nullableString(value.integration_url),
54
+ owner: {
55
+ tenantId: requiredString(owner.tenant_id),
56
+ handle: requiredString(owner.handle),
57
+ currentDid: requiredString(owner.current_did),
58
+ displayName: requiredString(owner.display_name),
59
+ },
60
+ productName: requiredString(value.product_name),
61
+ description: requiredString(value.description),
62
+ contactEnabled: requiredBoolean(value.contact_enabled),
63
+ contactDescription: requiredString(value.contact_description),
64
+ groupTargets: groups.map(group => {
65
+ if (typeof group !== 'object' || group === null)
66
+ throw new TypeError('invalid Integration group');
67
+ const target = group;
68
+ return {
69
+ id: requiredString(target.id),
70
+ groupDid: requiredString(target.group_did),
71
+ displayName: requiredString(target.display_name),
72
+ avatarUrl: nullableString(target.avatar_url),
73
+ description: requiredString(target.description),
74
+ availability: requiredEnum(target.availability, TARGET_AVAILABILITIES),
75
+ };
76
+ }),
77
+ status: requiredEnum(value.status, INTEGRATION_STATUSES),
78
+ revision: requiredInteger(value.revision),
79
+ };
80
+ }
81
+ function requiredString(value) {
82
+ if (typeof value !== 'string')
83
+ throw new TypeError('invalid Integration response');
84
+ return value;
85
+ }
86
+ function nullableString(value) {
87
+ if (value === null)
88
+ return null;
89
+ return requiredString(value);
90
+ }
91
+ function requiredBoolean(value) {
92
+ if (typeof value !== 'boolean')
93
+ throw new TypeError('invalid Integration response');
94
+ return value;
95
+ }
96
+ function requiredInteger(value) {
97
+ if (!Number.isSafeInteger(value))
98
+ throw new TypeError('invalid Integration response');
99
+ return value;
100
+ }
101
+ function requiredEnum(value, allowed) {
102
+ if (typeof value !== 'string' || !allowed.includes(value)) {
103
+ throw new TypeError('invalid Integration response');
104
+ }
105
+ return value;
106
+ }
107
+ function failure(status, raw) {
108
+ const body = typeof raw === 'object' && raw !== null ? raw : {};
109
+ const nested = typeof body.error === 'object' && body.error !== null
110
+ ? body.error
111
+ : body;
112
+ const candidate = typeof nested.code === 'string' ? nested.code : '';
113
+ const code = status === 404 ? 'not-found'
114
+ : status === 409 ? 'conflict'
115
+ : status === 400 ? 'invalid-request'
116
+ : status === 401 ? 'unauthorized'
117
+ : status === 403 ? 'forbidden'
118
+ : status === 429 ? 'rate-limited'
119
+ : status >= 500 ? 'unavailable'
120
+ : ['not-found', 'conflict', 'invalid-request', 'forbidden', 'unauthorized', 'rate-limited', 'unavailable'].includes(candidate)
121
+ ? candidate
122
+ : 'remote';
123
+ return { code, message: integrationFailureMessage(code) };
124
+ }
125
+ function integrationFailureMessage(code) {
126
+ switch (code) {
127
+ case 'not-found': return '尚未创建 Integration。';
128
+ case 'conflict': return 'Integration 已在其他位置更新,请重新加载后再试。';
129
+ case 'invalid-request': return 'Integration 信息不完整或格式不正确。';
130
+ case 'forbidden': return '当前 AWiki 身份无权管理这个 Integration。';
131
+ case 'unauthorized': return '请先在 AWiki 正式版中登录。';
132
+ case 'rate-limited': return '操作过于频繁,请稍后重试。';
133
+ case 'unavailable': return '临时消息服务暂时不可用。';
134
+ case 'network': return '无法连接临时消息服务。';
135
+ default: return '临时消息服务返回了无法识别的结果。';
136
+ }
137
+ }
138
+ async function readBounded(response) {
139
+ const reader = response.body?.getReader();
140
+ if (reader === undefined)
141
+ return null;
142
+ const chunks = [];
143
+ let size = 0;
144
+ try {
145
+ while (true) {
146
+ const result = await reader.read();
147
+ if (result.done)
148
+ break;
149
+ size += result.value.byteLength;
150
+ if (size > MAX_RESPONSE_BYTES)
151
+ throw new TypeError('Integration response too large');
152
+ chunks.push(result.value);
153
+ }
154
+ }
155
+ finally {
156
+ reader.releaseLock();
157
+ }
158
+ const bytes = new Uint8Array(size);
159
+ let offset = 0;
160
+ for (const chunk of chunks) {
161
+ bytes.set(chunk, offset);
162
+ offset += chunk.byteLength;
163
+ }
164
+ if (bytes.length === 0)
165
+ return null;
166
+ return JSON.parse(new TextDecoder().decode(bytes));
167
+ }
168
+ /** Fixed-origin client; callers cannot control path, method, headers, or transport. */
169
+ export class AwikiIntegrationClient {
170
+ origin;
171
+ auth;
172
+ constructor(origin, auth) {
173
+ this.origin = origin;
174
+ this.auth = auth;
175
+ }
176
+ read() {
177
+ return this.execute('read');
178
+ }
179
+ create(request) {
180
+ return this.execute('create', fields(request), request.idempotencyKey);
181
+ }
182
+ update(request) {
183
+ return this.execute('update', { expected_revision: request.expectedRevision, ...fields(request) }, request.idempotencyKey);
184
+ }
185
+ rotate(request) {
186
+ return this.execute('rotate', { expected_revision: request.expectedRevision }, request.idempotencyKey);
187
+ }
188
+ close(request) {
189
+ return this.execute('close', { expected_revision: request.expectedRevision }, request.idempotencyKey);
190
+ }
191
+ reopen(request) {
192
+ return this.execute('reopen', { expected_revision: request.expectedRevision, ...fields(request) }, request.idempotencyKey);
193
+ }
194
+ async execute(operation, body, idempotencyKey) {
195
+ const spec = OPERATIONS[operation];
196
+ const encoded = body === undefined ? undefined : JSON.stringify(body);
197
+ if (encoded !== undefined && Buffer.byteLength(encoded, 'utf8') > MAX_REQUEST_BYTES) {
198
+ return { ok: false, error: { code: 'invalid-request', message: integrationFailureMessage('invalid-request') } };
199
+ }
200
+ const headers = new Headers({ accept: 'application/json' });
201
+ if (encoded !== undefined)
202
+ headers.set('content-type', 'application/json');
203
+ if (idempotencyKey !== undefined)
204
+ headers.set('idempotency-key', idempotencyKey);
205
+ const abort = new AbortController();
206
+ const timeout = setTimeout(() => { abort.abort(); }, REQUEST_TIMEOUT_MS);
207
+ try {
208
+ const request = new Request(new URL(spec.path, this.origin), {
209
+ method: spec.method,
210
+ headers,
211
+ ...encoded === undefined ? {} : { body: encoded },
212
+ redirect: 'error',
213
+ signal: abort.signal,
214
+ });
215
+ const response = await this.auth.dispatch(request, signed => fetch(signed));
216
+ const raw = await readBounded(response);
217
+ if (!response.ok)
218
+ return { ok: false, error: failure(response.status, raw) };
219
+ return { ok: true, value: view(raw) };
220
+ }
221
+ catch (error) {
222
+ if (error instanceof AwikiExternalHttpAuthError
223
+ && (error.code === 'not-registered' || error.code === 'signed-out')) {
224
+ return { ok: false, error: { code: 'unauthorized', message: integrationFailureMessage('unauthorized') } };
225
+ }
226
+ return { ok: false, error: { code: 'network', message: integrationFailureMessage('network') } };
227
+ }
228
+ finally {
229
+ clearTimeout(timeout);
230
+ }
231
+ }
232
+ }
233
+ //# sourceMappingURL=integration-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-client.js","sourceRoot":"","sources":["../../src/integration-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Exact cleanup for the removed Host-local sent-mail authority. */
2
+ /** Clear only the legacy cache directory during the existing destructive local-data flow. */
3
+ export declare function clearLegacySentMailCache(stateRoot: string): Promise<void>;
4
+ //# sourceMappingURL=legacy-sent-mail-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-sent-mail-cache.d.ts","sourceRoot":"","sources":["../../src/legacy-sent-mail-cache.ts"],"names":[],"mappings":"AAAA,oEAAoE;AASpE,6FAA6F;AAC7F,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/E"}
@@ -0,0 +1,29 @@
1
+ /** Exact cleanup for the removed Host-local sent-mail authority. */
2
+ import { lstat, rm, unlink } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ function isMissing(error) {
5
+ return typeof error === 'object' && error !== null && error.code === 'ENOENT';
6
+ }
7
+ /** Clear only the legacy cache directory during the existing destructive local-data flow. */
8
+ export async function clearLegacySentMailCache(stateRoot) {
9
+ const hostDirectory = join(stateRoot, '.host');
10
+ const directory = join(hostDirectory, 'sent-mail-v1');
11
+ try {
12
+ const host = await lstat(hostDirectory);
13
+ if (!host.isDirectory() || host.isSymbolicLink()) {
14
+ throw new TypeError('awiki: legacy sent-mail cache parent is invalid');
15
+ }
16
+ const target = await lstat(directory);
17
+ if (target.isDirectory() && !target.isSymbolicLink()) {
18
+ await rm(directory, { recursive: true, force: true });
19
+ }
20
+ else {
21
+ await unlink(directory);
22
+ }
23
+ }
24
+ catch (error) {
25
+ if (!isMissing(error))
26
+ throw error;
27
+ }
28
+ }
29
+ //# sourceMappingURL=legacy-sent-mail-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-sent-mail-cache.js","sourceRoot":"","sources":["../../src/legacy-sent-mail-cache.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAAqC,CAAC,IAAI,KAAK,QAAQ,CAAA;AAChH,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,SAAiB;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;QACxE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAA;QACrC,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;YACrD,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** Host-only server-authoritative outbound Mail query. */
2
+ import { type AwikiExternalHttpAuth } from './external-http-auth.ts';
3
+ import type { AwikiMailInboxPage, AwikiMailInboxRequest } from './types.ts';
4
+ /** Fixed Mail Service client; callers cannot select method, direction, headers, or transport. */
5
+ export declare class AwikiMailListClient {
6
+ private readonly origin;
7
+ private readonly auth;
8
+ constructor(origin: string, auth: AwikiExternalHttpAuth);
9
+ listOutbound(request: AwikiMailInboxRequest): Promise<AwikiMailInboxPage>;
10
+ private page;
11
+ }
12
+ //# sourceMappingURL=mail-list-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-list-client.d.ts","sourceRoot":"","sources":["../../src/mail-list-client.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EAGtB,MAAM,YAAY,CAAA;AAoKnB,iGAAiG;AACjG,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,qBAAqB;IAGjC,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAsBxE,IAAI;CA2CnB"}
@@ -0,0 +1,254 @@
1
+ /** Host-only server-authoritative outbound Mail query. */
2
+ import { AwikiExternalHttpAuthError, } from "./external-http-auth.js";
3
+ import { AwikiSdkError } from "./sdk-adapter.js";
4
+ const MAIL_LIST_PATH = '/mail/rpc';
5
+ const MAIL_LIST_PAGE_SIZE = 100;
6
+ const MAIL_LIST_TIMEOUT_MS = 10_000;
7
+ const MAX_RESPONSE_BYTES = 1024 * 1024;
8
+ const MAX_UINT32 = 0xffff_ffff;
9
+ function invalidResponse() {
10
+ throw new AwikiSdkError('remote');
11
+ }
12
+ function uint32(value) {
13
+ if (!Number.isSafeInteger(value) || value < 0 || value > MAX_UINT32) {
14
+ invalidResponse();
15
+ }
16
+ return value;
17
+ }
18
+ function requiredString(value, maxBytes) {
19
+ if (typeof value !== 'string'
20
+ || value.length === 0
21
+ || value.trim() !== value
22
+ || /[\u0000-\u001f\u007f-\u009f]/u.test(value)
23
+ || Buffer.byteLength(value, 'utf8') > maxBytes) {
24
+ invalidResponse();
25
+ }
26
+ return value;
27
+ }
28
+ function addresses(value) {
29
+ if (value === null || value === undefined || value === '')
30
+ return [];
31
+ const raw = Array.isArray(value)
32
+ ? value
33
+ : typeof value === 'string' ? value.split(/[;,]/u) : invalidResponse();
34
+ if (raw.length > 100)
35
+ invalidResponse();
36
+ return raw.map(candidate => {
37
+ const address = requiredString(typeof candidate === 'string' ? candidate.trim() : candidate, 320);
38
+ if (!address.includes('@') || /\s/u.test(address))
39
+ invalidResponse();
40
+ return address;
41
+ });
42
+ }
43
+ function timestamp(value) {
44
+ const copied = requiredString(value, 64);
45
+ const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(Z|[+-]\d{2}:\d{2})?$/u.exec(copied);
46
+ if (match === null)
47
+ invalidResponse();
48
+ const year = Number(match[1]);
49
+ const month = Number(match[2]);
50
+ const day = Number(match[3]);
51
+ const hour = Number(match[4]);
52
+ const minute = Number(match[5]);
53
+ const second = Number(match[6]);
54
+ const zone = match[8];
55
+ const leapYear = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
56
+ const monthDays = [31, leapYear ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
57
+ if (year === 0
58
+ || month < 1 || month > 12
59
+ || day < 1 || day > monthDays[month - 1]
60
+ || hour > 23
61
+ || minute > 59
62
+ || second > 59) {
63
+ invalidResponse();
64
+ }
65
+ if (zone !== undefined && zone !== 'Z') {
66
+ const offsetHour = Number(zone.slice(1, 3));
67
+ const offsetMinute = Number(zone.slice(4, 6));
68
+ if (offsetHour > 23 || offsetMinute > 59)
69
+ invalidResponse();
70
+ }
71
+ // Mail Service persists UTC-naive MySQL DATETIME and serializes it with
72
+ // datetime.isoformat(). Make that deployed shape explicit before Browser use.
73
+ return zone === undefined ? `${copied}Z` : copied;
74
+ }
75
+ function boundedText(value, maxBytes, fallback) {
76
+ const source = typeof value === 'string' && value.trim() !== '' ? value : fallback;
77
+ if (/\u0000/u.test(source))
78
+ invalidResponse();
79
+ if (Buffer.byteLength(source, 'utf8') <= maxBytes)
80
+ return { value: source, truncated: false };
81
+ const characters = Array.from(source);
82
+ while (characters.length > 0 && Buffer.byteLength(characters.join(''), 'utf8') > maxBytes) {
83
+ characters.pop();
84
+ }
85
+ return { value: characters.join(''), truncated: true };
86
+ }
87
+ function summary(raw) {
88
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
89
+ invalidResponse();
90
+ const value = raw;
91
+ if (value.direction !== 'outbound' || typeof value.has_attachments !== 'boolean')
92
+ invalidResponse();
93
+ const subject = boundedText(value.subject, 1_024, '(no subject)');
94
+ return {
95
+ id: requiredString(value.id, 2_048),
96
+ folder: 'sent',
97
+ from: addresses(value.from_addr),
98
+ to: addresses(value.to_addr),
99
+ cc: addresses(value.cc_addr),
100
+ subject: subject.value,
101
+ subjectTruncated: subject.truncated,
102
+ previewTruncated: false,
103
+ sentAt: timestamp(value.created_at),
104
+ unread: false,
105
+ hasAttachments: value.has_attachments,
106
+ };
107
+ }
108
+ async function readBounded(response) {
109
+ const declared = response.headers.get('content-length');
110
+ if (declared !== null && /^\d+$/u.test(declared) && Number(declared) > MAX_RESPONSE_BYTES) {
111
+ invalidResponse();
112
+ }
113
+ const reader = response.body?.getReader();
114
+ if (reader === undefined)
115
+ invalidResponse();
116
+ const chunks = [];
117
+ let size = 0;
118
+ try {
119
+ while (true) {
120
+ const result = await reader.read();
121
+ if (result.done)
122
+ break;
123
+ size += result.value.byteLength;
124
+ if (size > MAX_RESPONSE_BYTES)
125
+ invalidResponse();
126
+ chunks.push(result.value);
127
+ }
128
+ }
129
+ finally {
130
+ reader.releaseLock();
131
+ }
132
+ const bytes = new Uint8Array(size);
133
+ let offset = 0;
134
+ for (const chunk of chunks) {
135
+ bytes.set(chunk, offset);
136
+ offset += chunk.byteLength;
137
+ }
138
+ try {
139
+ return JSON.parse(new TextDecoder().decode(bytes));
140
+ }
141
+ catch {
142
+ invalidResponse();
143
+ }
144
+ }
145
+ function rpcFailure(code) {
146
+ if (code === -32000)
147
+ throw new AwikiSdkError('not-registered');
148
+ if (code === -32001)
149
+ throw new AwikiSdkError('forbidden');
150
+ if (code === -32002)
151
+ throw new AwikiSdkError('not-found');
152
+ if (code === -32003)
153
+ throw new AwikiSdkError('conflict');
154
+ if (code === -32004 || code === -32600 || code === -32602)
155
+ throw new AwikiSdkError('invalid-request');
156
+ if (code === -32005)
157
+ throw new AwikiSdkError('rate-limited');
158
+ invalidResponse();
159
+ }
160
+ function responseFailure(status) {
161
+ if (status === 401)
162
+ throw new AwikiSdkError('not-registered');
163
+ if (status === 403)
164
+ throw new AwikiSdkError('forbidden');
165
+ if (status === 429)
166
+ throw new AwikiSdkError('rate-limited');
167
+ if (status >= 500)
168
+ throw new AwikiSdkError('network');
169
+ invalidResponse();
170
+ }
171
+ /** Fixed Mail Service client; callers cannot select method, direction, headers, or transport. */
172
+ export class AwikiMailListClient {
173
+ origin;
174
+ auth;
175
+ constructor(origin, auth) {
176
+ this.origin = origin;
177
+ this.auth = auth;
178
+ }
179
+ async listOutbound(request) {
180
+ const offset = request.offset ?? 0;
181
+ const limit = request.limit ?? 20;
182
+ const firstPageNumber = Math.floor(offset / MAIL_LIST_PAGE_SIZE) + 1;
183
+ const first = await this.page(firstPageNumber);
184
+ const pageOffset = offset % MAIL_LIST_PAGE_SIZE;
185
+ let items = first.items.slice(pageOffset, pageOffset + limit);
186
+ let total = first.total;
187
+ if (items.length < limit && offset + items.length < total) {
188
+ const next = await this.page(firstPageNumber + 1);
189
+ total = next.total;
190
+ items = [...items, ...next.items.slice(0, limit - items.length)];
191
+ }
192
+ const nextOffset = offset + items.length;
193
+ const hasMore = nextOffset < total;
194
+ return {
195
+ items,
196
+ ...hasMore ? { nextOffset } : {},
197
+ hasMore,
198
+ };
199
+ }
200
+ async page(page) {
201
+ const abort = new AbortController();
202
+ const timeout = setTimeout(() => { abort.abort(); }, MAIL_LIST_TIMEOUT_MS);
203
+ try {
204
+ const request = new Request(new URL(MAIL_LIST_PATH, this.origin), {
205
+ method: 'POST',
206
+ headers: { accept: 'application/json', 'content-type': 'application/json' },
207
+ body: JSON.stringify({
208
+ jsonrpc: '2.0',
209
+ id: 1,
210
+ method: 'mail.list',
211
+ params: { direction: 'outbound', page, page_size: MAIL_LIST_PAGE_SIZE },
212
+ }),
213
+ redirect: 'error',
214
+ signal: abort.signal,
215
+ });
216
+ const response = await this.auth.dispatch(request, signed => fetch(signed));
217
+ if (!response.ok)
218
+ responseFailure(response.status);
219
+ const raw = await readBounded(response);
220
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
221
+ invalidResponse();
222
+ const envelope = raw;
223
+ if (envelope.jsonrpc !== '2.0' || envelope.id !== 1)
224
+ invalidResponse();
225
+ if (envelope.error !== null && envelope.error !== undefined) {
226
+ if (typeof envelope.error !== 'object' || Array.isArray(envelope.error))
227
+ invalidResponse();
228
+ rpcFailure(envelope.error.code);
229
+ }
230
+ if (typeof envelope.result !== 'object' || envelope.result === null || Array.isArray(envelope.result)) {
231
+ invalidResponse();
232
+ }
233
+ const result = envelope.result;
234
+ if (!Array.isArray(result.items) || result.items.length > MAIL_LIST_PAGE_SIZE)
235
+ invalidResponse();
236
+ return { total: uint32(result.total), items: result.items.map(summary) };
237
+ }
238
+ catch (error) {
239
+ if (error instanceof AwikiSdkError)
240
+ throw error;
241
+ if (error instanceof AwikiExternalHttpAuthError) {
242
+ if (error.code === 'not-registered')
243
+ throw new AwikiSdkError('not-registered');
244
+ if (error.code === 'signed-out')
245
+ throw new AwikiSdkError('signed-out');
246
+ }
247
+ throw new AwikiSdkError('network');
248
+ }
249
+ finally {
250
+ clearTimeout(timeout);
251
+ }
252
+ }
253
+ }
254
+ //# sourceMappingURL=mail-list-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-list-client.js","sourceRoot":"","sources":["../../src/mail-list-client.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EACL,0BAA0B,GAE3B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAQhD,MAAM,cAAc,GAAG,WAAW,CAAA;AAClC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAC/B,MAAM,oBAAoB,GAAG,MAAM,CAAA;AACnC,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAA;AACtC,MAAM,UAAU,GAAG,WAAW,CAAA;AAO9B,SAAS,eAAe;IACtB,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC,IAAK,KAAgB,GAAG,UAAU,EAAE,CAAC;QAC5F,eAAe,EAAE,CAAA;IACnB,CAAC;IACD,OAAO,KAAe,CAAA;AACxB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,QAAgB;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;WACxB,KAAK,CAAC,MAAM,KAAK,CAAC;WAClB,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK;WACtB,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC;WAC3C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACjD,eAAe,EAAE,CAAA;IACnB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IACpE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;IACxE,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QAAE,eAAe,EAAE,CAAA;IACvC,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QACzB,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACjG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,eAAe,EAAE,CAAA;QACpE,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,oFAAoF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC/G,IAAI,KAAK,KAAK,IAAI;QAAE,eAAe,EAAE,CAAA;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACrB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IAClF,IAAI,IAAI,KAAK,CAAC;WACT,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;WACvB,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAE;WACtC,IAAI,GAAG,EAAE;WACT,MAAM,GAAG,EAAE;WACX,MAAM,GAAG,EAAE,EAAE,CAAC;QACjB,eAAe,EAAE,CAAA;IACnB,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7C,IAAI,UAAU,GAAG,EAAE,IAAI,YAAY,GAAG,EAAE;YAAE,eAAe,EAAE,CAAA;IAC7D,CAAC;IACD,wEAAwE;IACxE,8EAA8E;IAC9E,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,QAAgB,EAAE,QAAgB;IAIrE,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;IAClF,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,eAAe,EAAE,CAAA;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC7F,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAC1F,UAAU,CAAC,GAAG,EAAE,CAAA;IAClB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AACxD,CAAC;AAED,SAAS,OAAO,CAAC,GAAY;IAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,eAAe,EAAE,CAAA;IACpF,MAAM,KAAK,GAAG,GAA8B,CAAA;IAC5C,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,SAAS;QAAE,eAAe,EAAE,CAAA;IACnG,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;IACjE,OAAO;QACL,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAuB;QACzD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;QAChC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,KAAK;QACtB,gBAAgB,EAAE,OAAO,CAAC,SAAS;QACnC,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;QACnC,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,KAAK,CAAC,eAAe;KACtC,CAAA;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAkB;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IACvD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC1F,eAAe,EAAE,CAAA;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAA;IACzC,IAAI,MAAM,KAAK,SAAS;QAAE,eAAe,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAClC,IAAI,MAAM,CAAC,IAAI;gBAAE,MAAK;YACtB,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAA;YAC/B,IAAI,IAAI,GAAG,kBAAkB;gBAAE,eAAe,EAAE,CAAA;YAChD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAA;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACxB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAA;IAC5B,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAY,CAAA;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,eAAe,EAAE,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAA;IAC9D,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,WAAW,CAAC,CAAA;IACzD,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,WAAW,CAAC,CAAA;IACzD,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,CAAA;IACxD,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAAA;IACrG,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,CAAA;IAC5D,eAAe,EAAE,CAAA;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,IAAI,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAA;IAC7D,IAAI,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,WAAW,CAAC,CAAA;IACxD,IAAI,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,CAAA;IAC3D,IAAI,MAAM,IAAI,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,CAAA;IACrD,eAAe,EAAE,CAAA;AACnB,CAAC;AAED,iGAAiG;AACjG,MAAM,OAAO,mBAAmB;IAEX;IACA;IAFnB,YACmB,MAAc,EACd,IAA2B;QAD3B,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAuB;IAC3C,CAAC;IAEG,KAAK,CAAC,YAAY,CAAC,OAA8B;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;QACpE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC9C,MAAM,UAAU,GAAG,MAAM,GAAG,mBAAmB,CAAA;QAC/C,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAA;QAC7D,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACvB,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAA;YACjD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YAClB,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QACxC,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,CAAA;QAClC,OAAO;YACL,KAAK;YACL,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;YAChC,OAAO;SACR,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAY;QAC7B,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;QACnC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAA;QACzE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAChE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,CAAC;oBACL,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE;iBACxE,CAAC;gBACF,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YAC3E,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAClD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAA;YACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,eAAe,EAAE,CAAA;YACpF,MAAM,QAAQ,GAAG,GAA8B,CAAA;YAC/C,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC;gBAAE,eAAe,EAAE,CAAA;YACtE,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5D,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,eAAe,EAAE,CAAA;gBAC1F,UAAU,CAAE,QAAQ,CAAC,KAAiC,CAAC,IAAI,CAAC,CAAA;YAC9D,CAAC;YACD,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtG,eAAe,EAAE,CAAA;YACnB,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAiC,CAAA;YACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB;gBAAE,eAAe,EAAE,CAAA;YAChG,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAA;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,aAAa;gBAAE,MAAM,KAAK,CAAA;YAC/C,IAAI,KAAK,YAAY,0BAA0B,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;oBAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAA;gBAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;oBAAE,MAAM,IAAI,aAAa,CAAC,YAAY,CAAC,CAAA;YACxE,CAAC;YACD,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,CAAA;QACpC,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { AwikiMailRecoveryObservability } from './types.ts';
2
+ export type AwikiMailRecoveryFailureFields = Pick<AwikiMailRecoveryObservability, 'mail_ingress_classification' | 'auth_status_class' | 'auth_stable_machine_code' | 'retryable' | 'mail_closed_classification'>;
3
+ /** Copy only a complete upstream closed classification; arbitrary errors fail closed. */
4
+ export declare function mailRecoveryFailureFields(error: unknown): AwikiMailRecoveryFailureFields | undefined;
5
+ export declare function successfulMailRecoveryObservability(): AwikiMailRecoveryObservability;
6
+ export declare function failedMailRecoveryObservability(error: unknown): AwikiMailRecoveryObservability;
7
+ export declare function fencedMailRecoveryObservability(currentPrincipalMatchesRecovery: boolean, requestGenerationClassification: 'current' | 'replaced'): AwikiMailRecoveryObservability;
8
+ //# sourceMappingURL=mail-recovery-observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-recovery-observability.d.ts","sourceRoot":"","sources":["../../src/mail-recovery-observability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,8BAA8B,EAC/B,MAAM,YAAY,CAAA;AAkCnB,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAC/C,8BAA8B,EAC5B,6BAA6B,GAC7B,mBAAmB,GACnB,0BAA0B,GAC1B,WAAW,GACX,4BAA4B,CAC/B,CAAA;AAwBD,yFAAyF;AACzF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,GAAG,SAAS,CA6BpG;AAED,wBAAgB,mCAAmC,IAAI,8BAA8B,CASpF;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,CAY9F;AAED,wBAAgB,+BAA+B,CAC7C,+BAA+B,EAAE,OAAO,EACxC,+BAA+B,EAAE,SAAS,GAAG,UAAU,GACtD,8BAA8B,CAShC"}