@h-ai/feedback 1.0.0-beta.18 → 1.0.0-beta.19
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.en.md +13 -7
- package/README.ja.md +13 -7
- package/README.md +13 -7
- package/dist/bundle/index.d.ts +2 -1
- package/dist/bundle/index.js +1 -1
- package/dist/capacitor.d.ts +1 -1
- package/dist/capacitor.js +18 -4
- package/dist/capacitor.js.map +1 -1
- package/dist/chunk-IFJHL5VK.js +442 -0
- package/dist/chunk-IFJHL5VK.js.map +1 -0
- package/dist/client/index.d.ts +4 -3
- package/dist/client/index.js +323 -68
- package/dist/client/index.js.map +1 -1
- package/dist/{feedback-client-files-B88nCOo_.d.ts → feedback-client-files-BlNJ94nn.d.ts} +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +788 -169
- package/dist/index.js.map +1 -1
- package/dist/tauri.d.ts +1 -1
- package/package.json +18 -18
- package/dist/chunk-KGMLTOMM.js +0 -340
- package/dist/chunk-KGMLTOMM.js.map +0 -1
package/README.en.md
CHANGED
|
@@ -35,7 +35,11 @@ const initialized = await feedback.init({
|
|
|
35
35
|
})
|
|
36
36
|
if (!initialized.success)
|
|
37
37
|
return initialized
|
|
38
|
-
const context = {
|
|
38
|
+
const context = {
|
|
39
|
+
scopeId: 'tenant-1',
|
|
40
|
+
userId: 'user-1',
|
|
41
|
+
permissions: ['feedback:create']
|
|
42
|
+
}
|
|
39
43
|
const submitted = await feedback.submit({ appId: 'orders', submissionId: 'stable-client-operation' }, context)
|
|
40
44
|
if (!submitted.success)
|
|
41
45
|
return submitted
|
|
@@ -110,12 +114,14 @@ async function startFeedback(config: FeedbackConfigInput) {
|
|
|
110
114
|
collectEvidence: async ({ report, signal }) => ({
|
|
111
115
|
text: `Diagnostics for ${report.number}`,
|
|
112
116
|
data: { businessSystem: 'orders', scopeId: report.scopeId },
|
|
113
|
-
attachments: [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
attachments: [
|
|
118
|
+
{
|
|
119
|
+
id: 'business-logs',
|
|
120
|
+
name: 'business-logs.zip',
|
|
121
|
+
contentType: 'application/zip',
|
|
122
|
+
bytes: await readFile('diagnostics/sanitized-logs.zip', { signal }),
|
|
123
|
+
}
|
|
124
|
+
],
|
|
119
125
|
}),
|
|
120
126
|
})
|
|
121
127
|
if (!result.success)
|
package/README.ja.md
CHANGED
|
@@ -35,7 +35,11 @@ const initialized = await feedback.init({
|
|
|
35
35
|
})
|
|
36
36
|
if (!initialized.success)
|
|
37
37
|
return initialized
|
|
38
|
-
const context = {
|
|
38
|
+
const context = {
|
|
39
|
+
scopeId: 'tenant-1',
|
|
40
|
+
userId: 'user-1',
|
|
41
|
+
permissions: ['feedback:create']
|
|
42
|
+
}
|
|
39
43
|
const submitted = await feedback.submit({ appId: 'orders', submissionId: 'stable-client-operation' }, context)
|
|
40
44
|
if (!submitted.success)
|
|
41
45
|
return submitted
|
|
@@ -110,12 +114,14 @@ async function startFeedback(config: FeedbackConfigInput) {
|
|
|
110
114
|
collectEvidence: async ({ report, signal }) => ({
|
|
111
115
|
text: `Diagnostics for ${report.number}`,
|
|
112
116
|
data: { businessSystem: 'orders', scopeId: report.scopeId },
|
|
113
|
-
attachments: [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
attachments: [
|
|
118
|
+
{
|
|
119
|
+
id: 'business-logs',
|
|
120
|
+
name: 'business-logs.zip',
|
|
121
|
+
contentType: 'application/zip',
|
|
122
|
+
bytes: await readFile('diagnostics/sanitized-logs.zip', { signal }),
|
|
123
|
+
}
|
|
124
|
+
],
|
|
119
125
|
}),
|
|
120
126
|
})
|
|
121
127
|
if (!result.success)
|
package/README.md
CHANGED
|
@@ -34,7 +34,11 @@ const initialized = await feedback.init({
|
|
|
34
34
|
if (!initialized.success)
|
|
35
35
|
return initialized
|
|
36
36
|
|
|
37
|
-
const context = {
|
|
37
|
+
const context = {
|
|
38
|
+
scopeId: 'tenant-1',
|
|
39
|
+
userId: 'user-1',
|
|
40
|
+
permissions: ['feedback:create']
|
|
41
|
+
}
|
|
38
42
|
const submitted = await feedback.submit({ appId: 'orders', submissionId: 'stable-client-operation' }, context)
|
|
39
43
|
if (!submitted.success)
|
|
40
44
|
return submitted
|
|
@@ -112,12 +116,14 @@ async function startFeedback(config: FeedbackConfigInput) {
|
|
|
112
116
|
collectEvidence: async ({ report, signal }) => ({
|
|
113
117
|
text: `Diagnostics for ${report.number}`,
|
|
114
118
|
data: { businessSystem: 'orders', scopeId: report.scopeId },
|
|
115
|
-
attachments: [
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
attachments: [
|
|
120
|
+
{
|
|
121
|
+
id: 'business-logs',
|
|
122
|
+
name: 'business-logs.zip',
|
|
123
|
+
contentType: 'application/zip',
|
|
124
|
+
bytes: await readFile('diagnostics/sanitized-logs.zip', { signal }),
|
|
125
|
+
}
|
|
126
|
+
],
|
|
121
127
|
}),
|
|
122
128
|
})
|
|
123
129
|
if (!result.success)
|
package/dist/bundle/index.d.ts
CHANGED
|
@@ -213,4 +213,5 @@ declare function queryFeedbackBundle(bundle: FeedbackBundle, query?: FeedbackBun
|
|
|
213
213
|
*/
|
|
214
214
|
declare function getFeedbackBundleViewerFiles(): Readonly<Record<string, Uint8Array>>;
|
|
215
215
|
|
|
216
|
-
export {
|
|
216
|
+
export { createFeedbackBundle, getFeedbackBundleViewerFiles, queryFeedbackBundle, readFeedbackBundle, summarizeFeedbackBundle };
|
|
217
|
+
export type { FeedbackBundle, FeedbackBundleAttachment, FeedbackBundleEvidence, FeedbackBundleEvidencePage, FeedbackBundleFile, FeedbackBundleInput, FeedbackBundleManifest, FeedbackBundleQuery, FeedbackBundleReadOptions };
|
package/dist/bundle/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createFeedbackBundle, getFeedbackBundleViewerFiles, queryFeedbackBundle, readFeedbackBundle, summarizeFeedbackBundle } from '../chunk-
|
|
1
|
+
export { createFeedbackBundle, getFeedbackBundleViewerFiles, queryFeedbackBundle, readFeedbackBundle, summarizeFeedbackBundle } from '../chunk-IFJHL5VK.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/capacitor.d.ts
CHANGED
package/dist/capacitor.js
CHANGED
|
@@ -4,7 +4,11 @@ import { Share } from '@capacitor/share';
|
|
|
4
4
|
// src/client/feedback-client-capacitor.ts
|
|
5
5
|
var saveCapacitorFeedbackFile = async (bytes, filename, _contentType, signal) => {
|
|
6
6
|
const path = `feedback/${globalThis.crypto.randomUUID()}/${filename}`;
|
|
7
|
-
const cleanup = () => Filesystem.rmdir({
|
|
7
|
+
const cleanup = () => Filesystem.rmdir({
|
|
8
|
+
path: path.slice(0, path.lastIndexOf("/")),
|
|
9
|
+
directory: Directory.Cache,
|
|
10
|
+
recursive: true
|
|
11
|
+
}).catch(() => void 0);
|
|
8
12
|
const abort = () => {
|
|
9
13
|
void cleanup();
|
|
10
14
|
};
|
|
@@ -14,12 +18,22 @@ var saveCapacitorFeedbackFile = async (bytes, filename, _contentType, signal) =>
|
|
|
14
18
|
try {
|
|
15
19
|
if (signal?.aborted)
|
|
16
20
|
return { status: "cancelled" };
|
|
17
|
-
const file = await Filesystem.writeFile({
|
|
21
|
+
const file = await Filesystem.writeFile({
|
|
22
|
+
path,
|
|
23
|
+
data: btoa(raw),
|
|
24
|
+
directory: Directory.Cache,
|
|
25
|
+
recursive: true
|
|
26
|
+
});
|
|
18
27
|
if (signal?.aborted)
|
|
19
28
|
return { status: "cancelled" };
|
|
20
29
|
signal?.addEventListener("abort", abort, { once: true });
|
|
21
|
-
await Share.share({
|
|
22
|
-
|
|
30
|
+
await Share.share({
|
|
31
|
+
files: [file.uri],
|
|
32
|
+
dialogTitle: filename
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
status: signal?.aborted ? "cancelled" : "shared"
|
|
36
|
+
};
|
|
23
37
|
} catch (cause) {
|
|
24
38
|
if (cause instanceof Error && cause.message === "Share canceled")
|
|
25
39
|
return { status: "cancelled" };
|
package/dist/capacitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/feedback-client-capacitor.ts"],"names":[],"mappings":";;;;AAcO,IAAM,yBAAA,GAA+C,OAAO,KAAA,EAAO,QAAA,EAAU,cAAc,MAAA,KAAW;AAC3G,EAAA,MAAM,OAAO,CAAA,SAAA,EAAY,UAAA,CAAW,OAAO,UAAA,EAAY,IAAI,QAAQ,CAAA,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,KAAA,CAAM,
|
|
1
|
+
{"version":3,"sources":["../src/client/feedback-client-capacitor.ts"],"names":[],"mappings":";;;;AAcO,IAAM,yBAAA,GAA+C,OAAO,KAAA,EAAO,QAAA,EAAU,cAAc,MAAA,KAAW;AAC3G,EAAA,MAAM,OAAO,CAAA,SAAA,EAAY,UAAA,CAAW,OAAO,UAAA,EAAY,IAAI,QAAQ,CAAA,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,KAAA,CAAM;AAAA,IACrC,MAAM,IAAA,CAAK,KAAA,CAAM,GAAG,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,IACzC,WAAW,SAAA,CAAU,KAAA;AAAA,IACrB,SAAA,EAAW;AAAA,GACZ,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACxB,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA;AACA,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,KAAA,CAAM,QAAQ,MAAA,IAAU,KAAA;AACpD,IAAA,GAAA,IAAO,MAAA,CAAO,aAAa,GAAG,KAAA,CAAM,SAAS,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAC,CAAA;AACtE,EAAA,IAAI;AACF,IAAA,IAAI,MAAA,EAAQ,OAAA;AACV,MAAA,OAAO,EAAE,QAAQ,WAAA,EAAY;AAC/B,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,SAAA,CAAU;AAAA,MACtC,IAAA;AAAA,MACA,IAAA,EAAM,KAAK,GAAG,CAAA;AAAA,MACd,WAAW,SAAA,CAAU,KAAA;AAAA,MACrB,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,IAAI,MAAA,EAAQ,OAAA;AACV,MAAA,OAAO,EAAE,QAAQ,WAAA,EAAY;AAC/B,IAAA,MAAA,EAAQ,iBAAiB,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AACvD,IAAA,MAAM,MAAM,KAAA,CAAM;AAAA,MAChB,KAAA,EAAO,CAAC,IAAA,CAAK,GAAG,CAAA;AAAA,MAChB,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA,EAAQ,OAAA,GAAU,WAAA,GAAc;AAAA,KAC1C;AAAA,EACF,SACO,KAAA,EAAO;AAEZ,IAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,gBAAA;AAC9C,MAAA,OAAO,EAAE,QAAQ,WAAA,EAAY;AAC/B,IAAA,MAAM,KAAA;AAAA,EACR,CAAA,SACA;AACE,IAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAC1C,IAAA,MAAM,OAAA,EAAQ;AAAA,EAChB;AACF","file":"capacitor.js","sourcesContent":["/** Capacitor 独立入口,只在 App 中导入插件,缓存目录由本次调用负责清理。 */\nimport type { FeedbackFileSaver } from './feedback-client-files.js'\nimport { Directory, Filesystem } from '@capacitor/filesystem'\nimport { Share } from '@capacitor/share'\n\n/**\n * 以原生分享保存临时诊断包;分享结束、失败或退出会话均清理缓存。\n * @example\n * ```ts\n * import { configureFeedbackSaving } from '@h-ai/feedback/client'\n * import { saveCapacitorFeedbackFile } from '@h-ai/feedback/capacitor'\n * configureFeedbackSaving(saveCapacitorFeedbackFile)\n * ```\n */\nexport const saveCapacitorFeedbackFile: FeedbackFileSaver = async (bytes, filename, _contentType, signal) => {\n const path = `feedback/${globalThis.crypto.randomUUID()}/${filename}`\n const cleanup = () => Filesystem.rmdir({\n path: path.slice(0, path.lastIndexOf('/')),\n directory: Directory.Cache,\n recursive: true,\n }).catch(() => undefined)\n const abort = () => {\n void cleanup()\n }\n let raw = ''\n for (let offset = 0; offset < bytes.length; offset += 32768)\n raw += String.fromCharCode(...bytes.subarray(offset, offset + 32768))\n try {\n if (signal?.aborted)\n return { status: 'cancelled' }\n const file = await Filesystem.writeFile({\n path,\n data: btoa(raw),\n directory: Directory.Cache,\n recursive: true,\n })\n if (signal?.aborted)\n return { status: 'cancelled' }\n signal?.addEventListener('abort', abort, { once: true })\n await Share.share({\n files: [file.uri],\n dialogTitle: filename,\n })\n return {\n status: signal?.aborted ? 'cancelled' : 'shared',\n }\n }\n catch (cause) {\n // 原生插件以固定消息表示主动取消;其余异常交给统一保存边界记录并返回失败。\n if (cause instanceof Error && cause.message === 'Share canceled')\n return { status: 'cancelled' }\n throw cause\n }\n finally {\n signal?.removeEventListener('abort', abort)\n await cleanup()\n }\n}\n"]}
|