@awiki/dsh-plugin 0.3.7 → 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.
- package/README.md +109 -71
- package/README.zh.md +89 -61
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/cordis.patch.yml +6 -5
- package/lib/builtin-tenants.json +22 -0
- package/lib/builtin-tenants.sha256 +1 -0
- package/lib/client.js +7973 -2264
- package/lib/client.js.map +1 -1
- package/lib/index.js +3481 -1145
- package/lib/model-proxy-contract.js +11 -3
- package/lib/provider.js +73 -17
- package/lib/{sdk-adapter--trNlr-T.mjs → sdk-adapter-CYcJH7sM.mjs} +374 -101
- package/lib/typert.host.js +1595 -168
- package/lib/typert.remote-client.d.ts +43 -7
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +1595 -168
- package/lib/types/builtin-tenant-config.d.ts +19 -0
- package/lib/types/builtin-tenant-config.d.ts.map +1 -0
- package/lib/types/builtin-tenant-config.js +57 -0
- package/lib/types/builtin-tenant-config.js.map +1 -0
- package/lib/types/client/AwikiDeviceJoinReminder.d.ts +15 -0
- package/lib/types/client/AwikiDeviceJoinReminder.d.ts.map +1 -0
- package/lib/types/client/AwikiDeviceJoinReminder.js +74 -0
- package/lib/types/client/AwikiDeviceJoinReminder.js.map +1 -0
- package/lib/types/client/AwikiDevices.d.ts +33 -0
- package/lib/types/client/AwikiDevices.d.ts.map +1 -0
- package/lib/types/client/AwikiDevices.js +141 -0
- package/lib/types/client/AwikiDevices.js.map +1 -0
- package/lib/types/client/AwikiGroupDetails.d.ts.map +1 -1
- package/lib/types/client/AwikiGroupDetails.js +16 -13
- package/lib/types/client/AwikiGroupDetails.js.map +1 -1
- package/lib/types/client/AwikiIdentityAccess.d.ts +15 -8
- package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -1
- package/lib/types/client/AwikiIdentityAccess.js +203 -39
- package/lib/types/client/AwikiIdentityAccess.js.map +1 -1
- package/lib/types/client/AwikiIntegrationSettings.d.ts +21 -0
- package/lib/types/client/AwikiIntegrationSettings.d.ts.map +1 -0
- package/lib/types/client/AwikiIntegrationSettings.js +105 -0
- package/lib/types/client/AwikiIntegrationSettings.js.map +1 -0
- package/lib/types/client/AwikiMail.d.ts +1 -1
- package/lib/types/client/AwikiMail.d.ts.map +1 -1
- package/lib/types/client/AwikiMail.js +17 -137
- package/lib/types/client/AwikiMail.js.map +1 -1
- package/lib/types/client/AwikiOverlay.d.ts +0 -1
- package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
- package/lib/types/client/AwikiOverlay.js +26 -28
- package/lib/types/client/AwikiOverlay.js.map +1 -1
- package/lib/types/client/AwikiProfileCard.d.ts.map +1 -1
- package/lib/types/client/AwikiProfileCard.js +17 -18
- package/lib/types/client/AwikiProfileCard.js.map +1 -1
- package/lib/types/client/AwikiRecoveryForm.d.ts +5 -1
- package/lib/types/client/AwikiRecoveryForm.d.ts.map +1 -1
- package/lib/types/client/AwikiRecoveryForm.js +73 -30
- package/lib/types/client/AwikiRecoveryForm.js.map +1 -1
- package/lib/types/client/AwikiSettingsSection.d.ts +28 -13
- package/lib/types/client/AwikiSettingsSection.d.ts.map +1 -1
- package/lib/types/client/AwikiSettingsSection.js +93 -61
- package/lib/types/client/AwikiSettingsSection.js.map +1 -1
- package/lib/types/client/AwikiUpdates.d.ts +10 -0
- package/lib/types/client/AwikiUpdates.d.ts.map +1 -0
- package/lib/types/client/AwikiUpdates.js +57 -0
- package/lib/types/client/AwikiUpdates.js.map +1 -0
- package/lib/types/client/awiki-client-bridge.d.ts +1 -1
- package/lib/types/client/awiki-client-bridge.d.ts.map +1 -1
- package/lib/types/client/awiki-client-bridge.js +4 -1
- package/lib/types/client/awiki-client-bridge.js.map +1 -1
- package/lib/types/client/controller.d.ts +84 -44
- package/lib/types/client/controller.d.ts.map +1 -1
- package/lib/types/client/controller.js +515 -309
- package/lib/types/client/controller.js.map +1 -1
- package/lib/types/client/drafts.d.ts +31 -0
- package/lib/types/client/drafts.d.ts.map +1 -0
- package/lib/types/client/drafts.js +94 -0
- package/lib/types/client/drafts.js.map +1 -0
- package/lib/types/client/image-cache.d.ts +2 -2
- package/lib/types/client/image-cache.d.ts.map +1 -1
- package/lib/types/client/image-cache.js +15 -2
- package/lib/types/client/image-cache.js.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +63 -19
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/integration-operation.d.ts +9 -0
- package/lib/types/client/integration-operation.d.ts.map +1 -0
- package/lib/types/client/integration-operation.js +54 -0
- package/lib/types/client/integration-operation.js.map +1 -0
- package/lib/types/client/mail-list-cache.d.ts +2 -0
- package/lib/types/client/mail-list-cache.d.ts.map +1 -1
- package/lib/types/client/mail-list-cache.js +18 -0
- package/lib/types/client/mail-list-cache.js.map +1 -1
- package/lib/types/client/otp-cooldown.d.ts +6 -0
- package/lib/types/client/otp-cooldown.d.ts.map +1 -0
- package/lib/types/client/otp-cooldown.js +18 -0
- package/lib/types/client/otp-cooldown.js.map +1 -0
- package/lib/types/client/settings-controller.d.ts +34 -0
- package/lib/types/client/settings-controller.d.ts.map +1 -1
- package/lib/types/client/settings-controller.js +182 -2
- package/lib/types/client/settings-controller.js.map +1 -1
- package/lib/types/client/settings-locales.d.ts +1 -1
- package/lib/types/client/settings-locales.d.ts.map +1 -1
- package/lib/types/client/settings-locales.js +192 -14
- package/lib/types/client/settings-locales.js.map +1 -1
- package/lib/types/client/slots.d.ts +20 -10
- package/lib/types/client/slots.d.ts.map +1 -1
- package/lib/types/client/slots.js +0 -1
- package/lib/types/client/slots.js.map +1 -1
- package/lib/types/conversation-preferences.d.ts.map +1 -1
- package/lib/types/conversation-preferences.js +0 -17
- package/lib/types/conversation-preferences.js.map +1 -1
- package/lib/types/desktop-distribution.d.ts +25 -0
- package/lib/types/desktop-distribution.d.ts.map +1 -0
- package/lib/types/desktop-distribution.js +57 -0
- package/lib/types/desktop-distribution.js.map +1 -0
- package/lib/types/domain.d.ts +1 -1
- package/lib/types/domain.d.ts.map +1 -1
- package/lib/types/domain.js +2 -1
- package/lib/types/domain.js.map +1 -1
- package/lib/types/index.d.ts +164 -41
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +1562 -529
- package/lib/types/index.js.map +1 -1
- package/lib/types/integration-client.d.ts +17 -0
- package/lib/types/integration-client.d.ts.map +1 -0
- package/lib/types/integration-client.js +233 -0
- package/lib/types/integration-client.js.map +1 -0
- package/lib/types/legacy-sent-mail-cache.d.ts +4 -0
- package/lib/types/legacy-sent-mail-cache.d.ts.map +1 -0
- package/lib/types/legacy-sent-mail-cache.js +29 -0
- package/lib/types/legacy-sent-mail-cache.js.map +1 -0
- package/lib/types/listener-state.d.ts +5 -3
- package/lib/types/listener-state.d.ts.map +1 -1
- package/lib/types/listener-state.js +28 -13
- package/lib/types/listener-state.js.map +1 -1
- package/lib/types/listener.d.ts +9 -32
- package/lib/types/listener.d.ts.map +1 -1
- package/lib/types/listener.js +11 -127
- package/lib/types/listener.js.map +1 -1
- package/lib/types/mail-list-client.d.ts +12 -0
- package/lib/types/mail-list-client.d.ts.map +1 -0
- package/lib/types/mail-list-client.js +254 -0
- package/lib/types/mail-list-client.js.map +1 -0
- package/lib/types/mail-recovery-observability.d.ts +8 -0
- package/lib/types/mail-recovery-observability.d.ts.map +1 -0
- package/lib/types/mail-recovery-observability.js +119 -0
- package/lib/types/mail-recovery-observability.js.map +1 -0
- package/lib/types/mail.d.ts +2 -28
- package/lib/types/mail.d.ts.map +1 -1
- package/lib/types/mail.js +2 -79
- package/lib/types/mail.js.map +1 -1
- package/lib/types/model-proxy-contract.d.ts.map +1 -1
- package/lib/types/model-proxy-contract.js +7 -0
- package/lib/types/model-proxy-contract.js.map +1 -1
- package/lib/types/package-version.generated.d.ts +4 -0
- package/lib/types/package-version.generated.d.ts.map +1 -0
- package/lib/types/package-version.generated.js +4 -0
- package/lib/types/package-version.generated.js.map +1 -0
- package/lib/types/profile-state.d.ts +2 -13
- package/lib/types/profile-state.d.ts.map +1 -1
- package/lib/types/profile-state.js +3 -20
- package/lib/types/profile-state.js.map +1 -1
- package/lib/types/provider-api.d.ts +134 -43
- package/lib/types/provider-api.d.ts.map +1 -1
- package/lib/types/provider.d.ts +8 -2
- package/lib/types/provider.d.ts.map +1 -1
- package/lib/types/provider.js +76 -16
- package/lib/types/provider.js.map +1 -1
- package/lib/types/realtime-supervisor.d.ts +60 -0
- package/lib/types/realtime-supervisor.d.ts.map +1 -0
- package/lib/types/realtime-supervisor.js +255 -0
- package/lib/types/realtime-supervisor.js.map +1 -0
- package/lib/types/sdk-adapter.d.ts +62 -11
- package/lib/types/sdk-adapter.d.ts.map +1 -1
- package/lib/types/sdk-adapter.js +285 -123
- package/lib/types/sdk-adapter.js.map +1 -1
- package/lib/types/settings-rpc-contract.d.ts +58 -0
- package/lib/types/settings-rpc-contract.d.ts.map +1 -1
- package/lib/types/settings-rpc-contract.js +103 -0
- package/lib/types/settings-rpc-contract.js.map +1 -1
- package/lib/types/settings-rpc.d.ts +14 -1
- package/lib/types/settings-rpc.d.ts.map +1 -1
- package/lib/types/settings-rpc.js +130 -1
- package/lib/types/settings-rpc.js.map +1 -1
- package/lib/types/tenant-registry.d.ts +74 -0
- package/lib/types/tenant-registry.d.ts.map +1 -0
- package/lib/types/tenant-registry.js +440 -0
- package/lib/types/tenant-registry.js.map +1 -0
- package/lib/types/tools.d.ts +1 -1
- package/lib/types/tools.d.ts.map +1 -1
- package/lib/types/tools.js +4 -20
- package/lib/types/tools.js.map +1 -1
- package/lib/types/types.d.ts +249 -66
- package/lib/types/types.d.ts.map +1 -1
- package/lib/types/types.js.map +1 -1
- package/lib/types/update-policy.d.ts +51 -0
- package/lib/types/update-policy.d.ts.map +1 -0
- package/lib/types/update-policy.js +379 -0
- package/lib/types/update-policy.js.map +1 -0
- package/lib/types/version.d.ts +4 -0
- package/lib/types/version.d.ts.map +1 -0
- package/lib/types/version.js +44 -0
- package/lib/types/version.js.map +1 -0
- package/package.json +26 -8
- package/lib/types/base64.d.ts +0 -4
- package/lib/types/base64.d.ts.map +0 -1
- package/lib/types/base64.js +0 -28
- package/lib/types/base64.js.map +0 -1
- package/lib/types/client/mail-attachment.d.ts +0 -40
- package/lib/types/client/mail-attachment.d.ts.map +0 -1
- package/lib/types/client/mail-attachment.js +0 -187
- package/lib/types/client/mail-attachment.js.map +0 -1
- package/lib/types/sent-mail-store.d.ts +0 -27
- package/lib/types/sent-mail-store.d.ts.map +0 -1
- package/lib/types/sent-mail-store.js +0 -348
- package/lib/types/sent-mail-store.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awiki/dsh-plugin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.10",
|
|
4
4
|
"description": "AWiki identity and messaging plugin for DeepSeek Harness",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -103,11 +103,13 @@
|
|
|
103
103
|
}
|
|
104
104
|
},
|
|
105
105
|
"dependencies": {
|
|
106
|
-
"@awiki/im-core-node": "0.
|
|
106
|
+
"@awiki/im-core-node": "0.2.4",
|
|
107
107
|
"@deepseek-ai/schemastery": "^3.18.1",
|
|
108
|
+
"semver": "7.8.5",
|
|
108
109
|
"zod": "^4.4.3"
|
|
109
110
|
},
|
|
110
111
|
"peerDependencies": {
|
|
112
|
+
"@agent-network-protocol/dsh-anp-identity": "^0.1.1",
|
|
111
113
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
112
114
|
"@deepseek-ai/dsh-agent": "0.1.1-rc.2",
|
|
113
115
|
"@deepseek-ai/dsh-agent-default-model": "0.1.1-rc.2",
|
|
@@ -135,6 +137,7 @@
|
|
|
135
137
|
}
|
|
136
138
|
},
|
|
137
139
|
"devDependencies": {
|
|
140
|
+
"@agent-network-protocol/dsh-anp-identity": "0.1.1",
|
|
138
141
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
139
142
|
"@deepseek-ai/cordis-plugin-include": "^1.0.6",
|
|
140
143
|
"@deepseek-ai/cordis-plugin-loader": "^1.0.2",
|
|
@@ -161,10 +164,12 @@
|
|
|
161
164
|
"@deepseek-ai/dsh-typert-protocol": "0.1.1-rc.2",
|
|
162
165
|
"@deepseek-ai/dsh-user-approval": "0.1.1-rc.2",
|
|
163
166
|
"@deepseek-ai/dsh-workspace": "0.1.1-rc.2",
|
|
167
|
+
"@playwright/test": "1.62.1",
|
|
164
168
|
"@testing-library/react": "^16.3.2",
|
|
165
169
|
"@types/node": "^24.3.0",
|
|
166
170
|
"@types/react": "^18.3.23",
|
|
167
171
|
"@types/react-dom": "^18.3.7",
|
|
172
|
+
"@types/semver": "7.7.1",
|
|
168
173
|
"jsdom": "^26.1.0",
|
|
169
174
|
"lightningcss": "^1.30.1",
|
|
170
175
|
"qrcode": "1.5.4",
|
|
@@ -173,7 +178,8 @@
|
|
|
173
178
|
"tsdown": "^0.22.14",
|
|
174
179
|
"typescript": "^6.0.3",
|
|
175
180
|
"vite": "^8.2.1",
|
|
176
|
-
"vitest": "^4.1.10"
|
|
181
|
+
"vitest": "^4.1.10",
|
|
182
|
+
"yaml": "2.9.0"
|
|
177
183
|
},
|
|
178
184
|
"engines": {
|
|
179
185
|
"node": "^22.19.0 || >=24.0.0"
|
|
@@ -182,12 +188,24 @@
|
|
|
182
188
|
"build:types": "tsc -p tsconfig.host.json && tsc -p tsconfig.client.json",
|
|
183
189
|
"build:typert": "node scripts/generate-typert.mjs",
|
|
184
190
|
"build:bundle": "pnpm run build:typert && tsdown && node scripts/normalize-built.mjs",
|
|
185
|
-
"build": "
|
|
186
|
-
"
|
|
191
|
+
"build": "node scripts/sync-package-versions.mjs && node scripts/build.mjs",
|
|
192
|
+
"build:raw": "pnpm run build:types && pnpm run build:bundle",
|
|
193
|
+
"typecheck": "tsc -p tsconfig.host.json --noEmit && tsc -p tsconfig.client.json --noEmit",
|
|
194
|
+
"typecheck:e2e": "tsc -p tsconfig.e2e.json --noEmit",
|
|
187
195
|
"test": "vitest run",
|
|
188
|
-
"
|
|
196
|
+
"e2e:smoke": "node tests/e2e/support/run-e2e.ts smoke",
|
|
197
|
+
"e2e:smoke:webkit": "node tests/e2e/support/run-e2e.ts smoke-webkit",
|
|
198
|
+
"e2e:live": "node tests/e2e/support/run-e2e.ts live",
|
|
199
|
+
"prepare:test-native": "node scripts/prepare-e2e-native-fixtures.mjs",
|
|
200
|
+
"check:generated": "node scripts/sync-package-versions.mjs --check && node scripts/check-generated.mjs",
|
|
189
201
|
"check:public": "node scripts/check-public.mjs",
|
|
190
|
-
"verify": "pnpm run check:public && pnpm run build && pnpm run typecheck && pnpm run check:generated && pnpm run test",
|
|
191
|
-
"verify:workspace": "pnpm run verify && pnpm --filter @awiki/dsh-model-proxy run verify"
|
|
202
|
+
"verify": "pnpm run test:dependencies && pnpm run check:public && pnpm run build && pnpm run typecheck && pnpm run typecheck:e2e && pnpm run check:generated && pnpm run prepare:test-native && pnpm run test",
|
|
203
|
+
"verify:workspace": "pnpm run verify && pnpm --filter @awiki/dsh-model-proxy run verify",
|
|
204
|
+
"verify:candidate": "node scripts/verify-release-candidate.mjs",
|
|
205
|
+
"build:registry": "python3 scripts/dependencies/run.py",
|
|
206
|
+
"build:local": "python3 scripts/dependencies/run.py --deps local --local-config dependencies.local.json",
|
|
207
|
+
"build:release": "python3 scripts/dependencies/run.py --profile release",
|
|
208
|
+
"check:dependencies": "node scripts/check-dependency-sources.mjs",
|
|
209
|
+
"test:dependencies": "python3 -m unittest discover -s scripts/dependencies -p \"test_*.py\" -v && node --test scripts/dependencies/source-lock.test.mjs"
|
|
192
210
|
}
|
|
193
211
|
}
|
package/lib/types/base64.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/** Linear-time standard Base64 syntax validation for bounded binary payloads. */
|
|
2
|
-
/** Reject misplaced padding and non-Base64 bytes without recursive regexp matching. */
|
|
3
|
-
export declare function standardBase64Syntax(value: string): boolean;
|
|
4
|
-
//# sourceMappingURL=base64.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/base64.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAUjF,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAY3D"}
|
package/lib/types/base64.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/** Linear-time standard Base64 syntax validation for bounded binary payloads. */
|
|
2
|
-
function base64Character(code) {
|
|
3
|
-
return (code >= 0x41 && code <= 0x5a)
|
|
4
|
-
|| (code >= 0x61 && code <= 0x7a)
|
|
5
|
-
|| (code >= 0x30 && code <= 0x39)
|
|
6
|
-
|| code === 0x2b
|
|
7
|
-
|| code === 0x2f;
|
|
8
|
-
}
|
|
9
|
-
/** Reject misplaced padding and non-Base64 bytes without recursive regexp matching. */
|
|
10
|
-
export function standardBase64Syntax(value) {
|
|
11
|
-
if (value.length % 4 !== 0)
|
|
12
|
-
return false;
|
|
13
|
-
let dataEnd = value.length;
|
|
14
|
-
if (dataEnd > 0 && value.charCodeAt(dataEnd - 1) === 0x3d)
|
|
15
|
-
dataEnd -= 1;
|
|
16
|
-
if (dataEnd > 0 && value.charCodeAt(dataEnd - 1) === 0x3d)
|
|
17
|
-
dataEnd -= 1;
|
|
18
|
-
for (let index = 0; index < dataEnd; index += 1) {
|
|
19
|
-
if (!base64Character(value.charCodeAt(index)))
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
for (let index = dataEnd; index < value.length; index += 1) {
|
|
23
|
-
if (value.charCodeAt(index) !== 0x3d)
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=base64.js.map
|
package/lib/types/base64.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/base64.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;WAChC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;WAC9B,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;WAC9B,IAAI,KAAK,IAAI;WACb,IAAI,KAAK,IAAI,CAAA;AACpB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAA;IAC1B,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,CAAA;IACvE,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,CAAA;IACvE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IAC7D,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3D,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;IACpD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/** Browser-only mail attachment selection, encoding, integrity, and download helpers. */
|
|
2
|
-
import type { AwikiDownloadedMailAttachment, AwikiMailAttachmentDownloadRequest, AwikiMailAttachmentMetadata, AwikiMailSendAttachment } from '@awiki/dsh-plugin/types';
|
|
3
|
-
import type { AwikiActionResult } from './controller.ts';
|
|
4
|
-
export interface BrowserMailAttachmentLimits {
|
|
5
|
-
readonly maxCount: number;
|
|
6
|
-
readonly maxBytes: number;
|
|
7
|
-
readonly totalMaxBytes: number;
|
|
8
|
-
}
|
|
9
|
-
export interface SelectedMailAttachment {
|
|
10
|
-
readonly id: string;
|
|
11
|
-
readonly file: File;
|
|
12
|
-
readonly fileName: string;
|
|
13
|
-
readonly contentType: string;
|
|
14
|
-
readonly sizeBytes: number;
|
|
15
|
-
readonly lastModified: number;
|
|
16
|
-
}
|
|
17
|
-
export interface DownloadableMailAttachment {
|
|
18
|
-
readonly index: number;
|
|
19
|
-
readonly fileName: string;
|
|
20
|
-
readonly contentType: string;
|
|
21
|
-
readonly sizeBytes: number;
|
|
22
|
-
}
|
|
23
|
-
export interface PreparedMailAttachmentDownload {
|
|
24
|
-
readonly fileName: string;
|
|
25
|
-
readonly contentType: string;
|
|
26
|
-
readonly bytes: Uint8Array<ArrayBuffer>;
|
|
27
|
-
}
|
|
28
|
-
/** Append browser File references after enforcing the exact Host-owned limits. */
|
|
29
|
-
export declare function selectMailAttachments(current: readonly SelectedMailAttachment[], selected: Iterable<File>, limits: BrowserMailAttachmentLimits, createId: () => string): readonly SelectedMailAttachment[];
|
|
30
|
-
/** Re-read the same approved File objects and return JSON-safe Remote attachments. */
|
|
31
|
-
export declare function encodeMailAttachments(attachments: readonly SelectedMailAttachment[], limits: BrowserMailAttachmentLimits): Promise<readonly AwikiMailSendAttachment[]>;
|
|
32
|
-
/** Return canonical download metadata only when the service supplied every required field. */
|
|
33
|
-
export declare function downloadableMailAttachment(value: AwikiMailAttachmentMetadata, maxBytes: number): DownloadableMailAttachment | undefined;
|
|
34
|
-
/** Validate exact metadata, canonical Base64, byte length, and SHA-256 before download. */
|
|
35
|
-
export declare function prepareMailAttachmentDownload(value: AwikiDownloadedMailAttachment, expected: DownloadableMailAttachment, maxBytes: number): Promise<PreparedMailAttachmentDownload>;
|
|
36
|
-
/** Trigger one download and always revoke the temporary object URL immediately. */
|
|
37
|
-
export declare function savePreparedMailAttachment(value: PreparedMailAttachmentDownload): void;
|
|
38
|
-
/** Execute the exact Browser UI download path: Remote, integrity check, Blob, and save click. */
|
|
39
|
-
export declare function downloadAndSaveMailAttachment(download: (request: AwikiMailAttachmentDownloadRequest) => Promise<AwikiActionResult<AwikiDownloadedMailAttachment>>, request: AwikiMailAttachmentDownloadRequest, expected: DownloadableMailAttachment, maxBytes: number, active?: () => boolean): Promise<boolean>;
|
|
40
|
-
//# sourceMappingURL=mail-attachment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail-attachment.d.ts","sourceRoot":"","sources":["../../../src/client/mail-attachment.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAEzF,OAAO,KAAK,EACV,6BAA6B,EAC7B,kCAAkC,EAClC,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;CACxC;AA+CD,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EACxB,MAAM,EAAE,2BAA2B,EACnC,QAAQ,EAAE,MAAM,MAAM,GACrB,SAAS,sBAAsB,EAAE,CAuBnC;AAED,sFAAsF;AACtF,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,SAAS,sBAAsB,EAAE,EAC9C,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CA4B7C;AAED,8FAA8F;AAC9F,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,2BAA2B,EAClC,QAAQ,EAAE,MAAM,GACf,0BAA0B,GAAG,SAAS,CAgBxC;AAED,2FAA2F;AAC3F,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,0BAA0B,EACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,8BAA8B,CAAC,CA4BzC;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,8BAA8B,GAAG,IAAI,CAatF;AAED,iGAAiG;AACjG,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,CACR,OAAO,EAAE,kCAAkC,KACxC,OAAO,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAAC,EAC9D,OAAO,EAAE,kCAAkC,EAC3C,QAAQ,EAAE,0BAA0B,EACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,OAAoB,GACjC,OAAO,CAAC,OAAO,CAAC,CAQlB"}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
/** Browser-only mail attachment selection, encoding, integrity, and download helpers. */
|
|
2
|
-
import { standardBase64Syntax } from "../base64.js";
|
|
3
|
-
function invalid(message) {
|
|
4
|
-
throw new TypeError(message);
|
|
5
|
-
}
|
|
6
|
-
function fileName(value) {
|
|
7
|
-
if (value.length === 0
|
|
8
|
-
|| value.trim() !== value
|
|
9
|
-
|| value.replace(/[. ]+$/u, '') !== value
|
|
10
|
-
|| value === '.'
|
|
11
|
-
|| value === '..'
|
|
12
|
-
|| new TextEncoder().encode(value).byteLength > 255
|
|
13
|
-
|| /[\\/\p{C}]/u.test(value)) {
|
|
14
|
-
invalid('附件文件名无效。');
|
|
15
|
-
}
|
|
16
|
-
return value;
|
|
17
|
-
}
|
|
18
|
-
function contentType(value) {
|
|
19
|
-
if (value === '')
|
|
20
|
-
return 'application/octet-stream';
|
|
21
|
-
if (!/^[A-Za-z0-9!#$&^_.+-]+\/[A-Za-z0-9!#$&^_.+-]+$/u.test(value)) {
|
|
22
|
-
invalid('附件 MIME 类型无效。');
|
|
23
|
-
}
|
|
24
|
-
return value;
|
|
25
|
-
}
|
|
26
|
-
function assertLimits(limits) {
|
|
27
|
-
if (!Number.isSafeInteger(limits.maxCount)
|
|
28
|
-
|| limits.maxCount < 0
|
|
29
|
-
|| !Number.isSafeInteger(limits.maxBytes)
|
|
30
|
-
|| limits.maxBytes < 1
|
|
31
|
-
|| !Number.isSafeInteger(limits.totalMaxBytes)
|
|
32
|
-
|| limits.totalMaxBytes < limits.maxBytes) {
|
|
33
|
-
invalid('邮件附件限制暂不可用。');
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function base64(bytes) {
|
|
37
|
-
let binary = '';
|
|
38
|
-
const chunkSize = 0x8000;
|
|
39
|
-
for (let offset = 0; offset < bytes.length; offset += chunkSize) {
|
|
40
|
-
binary += String.fromCharCode(...bytes.subarray(offset, offset + chunkSize));
|
|
41
|
-
}
|
|
42
|
-
return btoa(binary);
|
|
43
|
-
}
|
|
44
|
-
/** Append browser File references after enforcing the exact Host-owned limits. */
|
|
45
|
-
export function selectMailAttachments(current, selected, limits, createId) {
|
|
46
|
-
assertLimits(limits);
|
|
47
|
-
const additions = Array.from(selected, (file) => ({
|
|
48
|
-
id: createId(),
|
|
49
|
-
file,
|
|
50
|
-
fileName: fileName(file.name),
|
|
51
|
-
contentType: contentType(file.type),
|
|
52
|
-
sizeBytes: file.size,
|
|
53
|
-
lastModified: file.lastModified,
|
|
54
|
-
}));
|
|
55
|
-
const combined = [...current, ...additions];
|
|
56
|
-
if (combined.length > limits.maxCount)
|
|
57
|
-
invalid(`邮件最多选择 ${limits.maxCount} 个附件。`);
|
|
58
|
-
for (const attachment of combined) {
|
|
59
|
-
if (!Number.isSafeInteger(attachment.sizeBytes) || attachment.sizeBytes < 0)
|
|
60
|
-
invalid('附件大小无效。');
|
|
61
|
-
if (attachment.sizeBytes > limits.maxBytes) {
|
|
62
|
-
invalid(`单个附件不能超过 ${limits.maxBytes} bytes。`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const total = combined.reduce((sum, attachment) => sum + attachment.sizeBytes, 0);
|
|
66
|
-
if (!Number.isSafeInteger(total) || total > limits.totalMaxBytes) {
|
|
67
|
-
invalid(`附件总大小不能超过 ${limits.totalMaxBytes} bytes。`);
|
|
68
|
-
}
|
|
69
|
-
return combined;
|
|
70
|
-
}
|
|
71
|
-
/** Re-read the same approved File objects and return JSON-safe Remote attachments. */
|
|
72
|
-
export async function encodeMailAttachments(attachments, limits) {
|
|
73
|
-
selectMailAttachments([], attachments.map(value => value.file), limits, () => 'validation-only');
|
|
74
|
-
const encoded = [];
|
|
75
|
-
for (const attachment of attachments) {
|
|
76
|
-
if (attachment.file.name !== attachment.fileName
|
|
77
|
-
|| contentType(attachment.file.type) !== attachment.contentType
|
|
78
|
-
|| attachment.file.size !== attachment.sizeBytes
|
|
79
|
-
|| attachment.file.lastModified !== attachment.lastModified) {
|
|
80
|
-
invalid(`附件 ${attachment.fileName} 已发生变化,请重新选择。`);
|
|
81
|
-
}
|
|
82
|
-
let buffer;
|
|
83
|
-
try {
|
|
84
|
-
buffer = await attachment.file.arrayBuffer();
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
invalid(`无法读取附件 ${attachment.fileName},请重新选择。`);
|
|
88
|
-
}
|
|
89
|
-
const bytes = new Uint8Array(buffer);
|
|
90
|
-
if (bytes.byteLength !== attachment.sizeBytes) {
|
|
91
|
-
invalid(`附件 ${attachment.fileName} 的大小已发生变化,请重新选择。`);
|
|
92
|
-
}
|
|
93
|
-
encoded.push({
|
|
94
|
-
fileName: attachment.fileName,
|
|
95
|
-
contentType: attachment.contentType,
|
|
96
|
-
sizeBytes: bytes.byteLength,
|
|
97
|
-
bytesBase64: base64(bytes),
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return encoded;
|
|
101
|
-
}
|
|
102
|
-
/** Return canonical download metadata only when the service supplied every required field. */
|
|
103
|
-
export function downloadableMailAttachment(value, maxBytes) {
|
|
104
|
-
if (!Number.isSafeInteger(value.index) || value.index < 0 || value.index > 0xffff_ffff)
|
|
105
|
-
return undefined;
|
|
106
|
-
if (value.fileName === undefined || value.contentType === undefined || value.sizeBytes === undefined)
|
|
107
|
-
return undefined;
|
|
108
|
-
if (!/^(?:0|[1-9][0-9]*)$/u.test(value.sizeBytes))
|
|
109
|
-
return undefined;
|
|
110
|
-
const sizeBytes = Number(value.sizeBytes);
|
|
111
|
-
if (!Number.isSafeInteger(sizeBytes) || sizeBytes < 0 || sizeBytes > maxBytes)
|
|
112
|
-
return undefined;
|
|
113
|
-
try {
|
|
114
|
-
return {
|
|
115
|
-
index: value.index,
|
|
116
|
-
fileName: fileName(value.fileName),
|
|
117
|
-
contentType: contentType(value.contentType),
|
|
118
|
-
sizeBytes,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
return undefined;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/** Validate exact metadata, canonical Base64, byte length, and SHA-256 before download. */
|
|
126
|
-
export async function prepareMailAttachmentDownload(value, expected, maxBytes) {
|
|
127
|
-
if (fileName(value.fileName) !== expected.fileName
|
|
128
|
-
|| contentType(value.contentType) !== expected.contentType
|
|
129
|
-
|| value.sizeBytes !== expected.sizeBytes
|
|
130
|
-
|| value.sizeBytes > maxBytes) {
|
|
131
|
-
invalid('下载附件与邮件元数据不一致。');
|
|
132
|
-
}
|
|
133
|
-
if (!/^[a-f0-9]{64}$/u.test(value.sha256))
|
|
134
|
-
invalid('下载附件完整性信息无效。');
|
|
135
|
-
const expectedEncodedLength = Math.ceil(value.sizeBytes / 3) * 4;
|
|
136
|
-
if (value.bytesBase64.length !== expectedEncodedLength
|
|
137
|
-
|| value.bytesBase64.length % 4 !== 0
|
|
138
|
-
|| !standardBase64Syntax(value.bytesBase64)) {
|
|
139
|
-
invalid('下载附件编码无效。');
|
|
140
|
-
}
|
|
141
|
-
let binary;
|
|
142
|
-
try {
|
|
143
|
-
binary = atob(value.bytesBase64);
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
invalid('下载附件编码无效。');
|
|
147
|
-
}
|
|
148
|
-
const bytes = Uint8Array.from(binary, character => character.charCodeAt(0));
|
|
149
|
-
if (bytes.byteLength !== value.sizeBytes || base64(bytes) !== value.bytesBase64) {
|
|
150
|
-
invalid('下载附件大小或编码不一致。');
|
|
151
|
-
}
|
|
152
|
-
const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', bytes));
|
|
153
|
-
const sha256 = Array.from(digest, byte => byte.toString(16).padStart(2, '0')).join('');
|
|
154
|
-
if (sha256 !== value.sha256)
|
|
155
|
-
invalid('下载附件完整性校验失败。');
|
|
156
|
-
return { fileName: expected.fileName, contentType: expected.contentType, bytes };
|
|
157
|
-
}
|
|
158
|
-
/** Trigger one download and always revoke the temporary object URL immediately. */
|
|
159
|
-
export function savePreparedMailAttachment(value) {
|
|
160
|
-
const url = URL.createObjectURL(new Blob([value.bytes], { type: value.contentType }));
|
|
161
|
-
const anchor = document.createElement('a');
|
|
162
|
-
try {
|
|
163
|
-
anchor.href = url;
|
|
164
|
-
anchor.download = value.fileName;
|
|
165
|
-
anchor.hidden = true;
|
|
166
|
-
document.body.append(anchor);
|
|
167
|
-
anchor.click();
|
|
168
|
-
}
|
|
169
|
-
finally {
|
|
170
|
-
anchor.remove();
|
|
171
|
-
URL.revokeObjectURL(url);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
/** Execute the exact Browser UI download path: Remote, integrity check, Blob, and save click. */
|
|
175
|
-
export async function downloadAndSaveMailAttachment(download, request, expected, maxBytes, active = () => true) {
|
|
176
|
-
const result = await download(request);
|
|
177
|
-
if (!active())
|
|
178
|
-
return false;
|
|
179
|
-
if (!result.ok)
|
|
180
|
-
invalid(result.error);
|
|
181
|
-
const prepared = await prepareMailAttachmentDownload(result.value, expected, maxBytes);
|
|
182
|
-
if (!active())
|
|
183
|
-
return false;
|
|
184
|
-
savePreparedMailAttachment(prepared);
|
|
185
|
-
return true;
|
|
186
|
-
}
|
|
187
|
-
//# sourceMappingURL=mail-attachment.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail-attachment.js","sourceRoot":"","sources":["../../../src/client/mail-attachment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/** Private, owner-bound persistence for mail successfully sent by this installation. */
|
|
2
|
-
import type { AwikiValidatedMailSendRequest } from './mail.ts';
|
|
3
|
-
import type { AwikiDid, AwikiMailAccount, AwikiMailInboxPage, AwikiMailInboxRequest, AwikiMailMessage, AwikiMailMessageId, AwikiMailSendResult } from './types.ts';
|
|
4
|
-
export declare const LOCAL_SENT_MAIL_ID_PREFIX = "awiki-sent-v1:";
|
|
5
|
-
export declare function isLocalSentMailId(messageId: AwikiMailMessageId): boolean;
|
|
6
|
-
/** Atomic, bounded history of sends accepted by the Mail Service. */
|
|
7
|
-
export declare class AwikiSentMailStore {
|
|
8
|
-
private readonly hostDirectory;
|
|
9
|
-
private readonly directory;
|
|
10
|
-
private readonly legacyDirectory;
|
|
11
|
-
private mutation;
|
|
12
|
-
constructor(stateRoot: string);
|
|
13
|
-
list(ownerDid: AwikiDid, request: AwikiMailInboxRequest): Promise<AwikiMailInboxPage>;
|
|
14
|
-
read(ownerDid: AwikiDid, messageId: AwikiMailMessageId): Promise<AwikiMailMessage | undefined>;
|
|
15
|
-
append(ownerDid: AwikiDid, request: AwikiValidatedMailSendRequest, result: AwikiMailSendResult, account?: AwikiMailAccount): Promise<void>;
|
|
16
|
-
clear(): Promise<void>;
|
|
17
|
-
resolveAttachment(ownerDid: AwikiDid, messageId: AwikiMailMessageId, attachmentIndex: number): Promise<AwikiMailMessageId | undefined>;
|
|
18
|
-
private clearDirectory;
|
|
19
|
-
private load;
|
|
20
|
-
private loadFile;
|
|
21
|
-
private write;
|
|
22
|
-
private ensureDirectory;
|
|
23
|
-
private hasDirectory;
|
|
24
|
-
private path;
|
|
25
|
-
private key;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=sent-mail-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sent-mail-store.d.ts","sourceRoot":"","sources":["../../src/sent-mail-store.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAMxF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAA;AAC9D,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAA;AASnB,eAAO,MAAM,yBAAyB,mBAAmB,CAAA;AA6MzD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAExE;AAED,qEAAqE;AACrE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAmC;gBAEhC,SAAS,EAAE,MAAM;IAMvB,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAcrF,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMpG,MAAM,CACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,6BAA6B,EACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC;IA6BH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,iBAAiB,CAC5B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,kBAAkB,EAC7B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;YAQ5B,cAAc;YAcd,IAAI;YAOJ,QAAQ;YAkCR,KAAK;YAgBL,eAAe;YAWf,YAAY;IAW1B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,GAAG;CAGZ"}
|