target-supabase-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/dist/auth/auth.api.d.ts +28 -0
- package/dist/auth/auth.api.d.ts.map +1 -0
- package/dist/auth/auth.api.js +50 -0
- package/dist/auth/auth.api.js.map +1 -0
- package/dist/core.api.d.ts +68 -0
- package/dist/core.api.d.ts.map +1 -0
- package/dist/core.api.js +226 -0
- package/dist/core.api.js.map +1 -0
- package/dist/core.interface.d.ts +36 -0
- package/dist/core.interface.d.ts.map +1 -0
- package/dist/core.interface.js +46 -0
- package/dist/core.interface.js.map +1 -0
- package/dist/core.utils.d.ts +19 -0
- package/dist/core.utils.d.ts.map +1 -0
- package/dist/core.utils.js +86 -0
- package/dist/core.utils.js.map +1 -0
- package/dist/feed/feed.interface.d.ts +27 -0
- package/dist/feed/feed.interface.d.ts.map +1 -0
- package/dist/feed/feed.interface.js +17 -0
- package/dist/feed/feed.interface.js.map +1 -0
- package/dist/file/file-manager.d.ts +24 -0
- package/dist/file/file-manager.d.ts.map +1 -0
- package/dist/file/file-manager.js +109 -0
- package/dist/file/file-manager.js.map +1 -0
- package/dist/file/file.api.d.ts +15 -0
- package/dist/file/file.api.d.ts.map +1 -0
- package/dist/file/file.api.js +30 -0
- package/dist/file/file.api.js.map +1 -0
- package/dist/file/file.interface.d.ts +25 -0
- package/dist/file/file.interface.d.ts.map +1 -0
- package/dist/file/file.interface.js +9 -0
- package/dist/file/file.interface.js.map +1 -0
- package/dist/file-list/file-list.api.d.ts +15 -0
- package/dist/file-list/file-list.api.d.ts.map +1 -0
- package/dist/file-list/file-list.api.js +54 -0
- package/dist/file-list/file-list.api.js.map +1 -0
- package/dist/file-list/file-list.interface.d.ts +22 -0
- package/dist/file-list/file-list.interface.d.ts.map +1 -0
- package/dist/file-list/file-list.interface.js +5 -0
- package/dist/file-list/file-list.interface.js.map +1 -0
- package/dist/idea/idea.interface.d.ts +25 -0
- package/dist/idea/idea.interface.d.ts.map +1 -0
- package/dist/idea/idea.interface.js +15 -0
- package/dist/idea/idea.interface.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/link/link.interface.d.ts +18 -0
- package/dist/link/link.interface.d.ts.map +1 -0
- package/dist/link/link.interface.js +6 -0
- package/dist/link/link.interface.js.map +1 -0
- package/dist/parcel/parcel-manager.d.ts +39 -0
- package/dist/parcel/parcel-manager.d.ts.map +1 -0
- package/dist/parcel/parcel-manager.js +156 -0
- package/dist/parcel/parcel-manager.js.map +1 -0
- package/dist/parcel/parcel.interface.d.ts +34 -0
- package/dist/parcel/parcel.interface.d.ts.map +1 -0
- package/dist/parcel/parcel.interface.js +11 -0
- package/dist/parcel/parcel.interface.js.map +1 -0
- package/dist/question-list/question-list.api.d.ts +13 -0
- package/dist/question-list/question-list.api.d.ts.map +1 -0
- package/dist/question-list/question-list.api.js +35 -0
- package/dist/question-list/question-list.api.js.map +1 -0
- package/dist/question-list/question-list.interface.d.ts +18 -0
- package/dist/question-list/question-list.interface.d.ts.map +1 -0
- package/dist/question-list/question-list.interface.js +5 -0
- package/dist/question-list/question-list.interface.js.map +1 -0
- package/dist/review/review.api.d.ts +14 -0
- package/dist/review/review.api.d.ts.map +1 -0
- package/dist/review/review.api.js +133 -0
- package/dist/review/review.api.js.map +1 -0
- package/dist/review/review.interface.d.ts +24 -0
- package/dist/review/review.interface.d.ts.map +1 -0
- package/dist/review/review.interface.js +10 -0
- package/dist/review/review.interface.js.map +1 -0
- package/dist/review-v2/apis/post-review-setting.api.d.ts +12 -0
- package/dist/review-v2/apis/post-review-setting.api.d.ts.map +1 -0
- package/dist/review-v2/apis/post-review-setting.api.js +27 -0
- package/dist/review-v2/apis/post-review-setting.api.js.map +1 -0
- package/dist/review-v2/apis/post-review.api.d.ts +13 -0
- package/dist/review-v2/apis/post-review.api.d.ts.map +1 -0
- package/dist/review-v2/apis/post-review.api.js +46 -0
- package/dist/review-v2/apis/post-review.api.js.map +1 -0
- package/dist/review-v2/review-setting.interface.d.ts +23 -0
- package/dist/review-v2/review-setting.interface.d.ts.map +1 -0
- package/dist/review-v2/review-setting.interface.js +5 -0
- package/dist/review-v2/review-setting.interface.js.map +1 -0
- package/dist/review-v2/review.interface.d.ts +20 -0
- package/dist/review-v2/review.interface.d.ts.map +1 -0
- package/dist/review-v2/review.interface.js +5 -0
- package/dist/review-v2/review.interface.js.map +1 -0
- package/dist/service/api.interface.d.ts +35 -0
- package/dist/service/api.interface.d.ts.map +1 -0
- package/dist/service/api.interface.js +12 -0
- package/dist/service/api.interface.js.map +1 -0
- package/dist/service/base.interface.d.ts +83 -0
- package/dist/service/base.interface.d.ts.map +1 -0
- package/dist/service/base.interface.js +7 -0
- package/dist/service/base.interface.js.map +1 -0
- package/dist/service/service.interface.d.ts +24 -0
- package/dist/service/service.interface.d.ts.map +1 -0
- package/dist/service/service.interface.js +11 -0
- package/dist/service/service.interface.js.map +1 -0
- package/dist/supabase.d.ts +32 -0
- package/dist/supabase.d.ts.map +1 -0
- package/dist/supabase.js +100 -0
- package/dist/supabase.js.map +1 -0
- package/package.json +45 -0
- package/src/auth/auth.api.ts +85 -0
- package/src/core.api.ts +338 -0
- package/src/core.interface.ts +74 -0
- package/src/core.utils.ts +98 -0
- package/src/feed/feed.interface.ts +33 -0
- package/src/file/file-manager.ts +145 -0
- package/src/file/file.api.ts +43 -0
- package/src/file/file.interface.ts +30 -0
- package/src/file-list/file-list.api.ts +64 -0
- package/src/file-list/file-list.interface.ts +24 -0
- package/src/idea/idea.interface.ts +28 -0
- package/src/index.ts +50 -0
- package/src/link/link.interface.ts +21 -0
- package/src/parcel/parcel-manager.ts +209 -0
- package/src/parcel/parcel.interface.ts +40 -0
- package/src/question-list/question-list.api.ts +42 -0
- package/src/question-list/question-list.interface.ts +21 -0
- package/src/review/review.api.ts +145 -0
- package/src/review/review.interface.ts +26 -0
- package/src/review-v2/apis/post-review-setting.api.ts +35 -0
- package/src/review-v2/apis/post-review.api.ts +59 -0
- package/src/review-v2/review-setting.interface.ts +26 -0
- package/src/review-v2/review.interface.ts +23 -0
- package/src/service/api.interface.ts +47 -0
- package/src/service/base.interface.ts +97 -0
- package/src/service/service.interface.ts +27 -0
- package/src/supabase.ts +143 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Target } from "../core.interface";
|
|
2
|
+
export declare enum CategoryLink {
|
|
3
|
+
LINK = "link"
|
|
4
|
+
}
|
|
5
|
+
export interface Link extends Target {
|
|
6
|
+
/** 鏈接名稱 */
|
|
7
|
+
name: string;
|
|
8
|
+
/** URL */
|
|
9
|
+
value: string;
|
|
10
|
+
details: LinkDetails;
|
|
11
|
+
category: CategoryLink;
|
|
12
|
+
}
|
|
13
|
+
export interface LinkDetails {
|
|
14
|
+
manifestVersion: number;
|
|
15
|
+
description: string;
|
|
16
|
+
iconUrl: string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=link.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.interface.d.ts","sourceRoot":"","sources":["../../src/link/link.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,oBAAY,YAAY;IACpB,IAAI,SAAS;CAChB;AAED,MAAM,WAAW,IAAK,SAAQ,MAAM;IAChC,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.interface.js","sourceRoot":"","sources":["../../src/link/link.interface.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,YAEX;AAFD,WAAY,YAAY;IACpB,6BAAa,CAAA;AACjB,CAAC,EAFW,YAAY,KAAZ,YAAY,QAEvB;AAeA,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Parcel, ParcelDetails } from "./parcel.interface";
|
|
2
|
+
/** 可插拔的存储适配器:不同文件系统 */
|
|
3
|
+
interface StorageAdapter {
|
|
4
|
+
/** 上传一段数据,返回可下载的 URL */
|
|
5
|
+
upload(data: ArrayBuffer, pathOrKey: string): Promise<{
|
|
6
|
+
url: string;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
interface CreateOptions {
|
|
10
|
+
/** 每个 chunk 的字节数,默认 256KB */
|
|
11
|
+
chunkSize?: number;
|
|
12
|
+
/** AES-GCM 加密密钥;不传则生成并返回 */
|
|
13
|
+
key?: CryptoKey;
|
|
14
|
+
}
|
|
15
|
+
interface CreateResult {
|
|
16
|
+
/** 元数据,chunk 的 url 由 save 填充 */
|
|
17
|
+
details: ParcelDetails;
|
|
18
|
+
/** 已加密的 chunk 数据,供 save 上传 */
|
|
19
|
+
chunks: ArrayBuffer[];
|
|
20
|
+
/** Base64 编码的 IV,需在 save 时写入 Parcel.extra 供 reassembly 使用 */
|
|
21
|
+
ivBase64: string;
|
|
22
|
+
/** 若 create 时未传 key,则返回此处,调用方需妥善保存 */
|
|
23
|
+
key?: CryptoKey;
|
|
24
|
+
}
|
|
25
|
+
/** 调用方提供的 Target 基础字段,用于拼成完整 Parcel */
|
|
26
|
+
type ParcelTargetBase = Pick<Parcel, "id" | "category" | "name" | "value" | "tagList" | "created_at">;
|
|
27
|
+
/** 将文件加密后拆分成多个 chunk */
|
|
28
|
+
declare function create(file: ArrayBuffer, options?: CreateOptions): Promise<CreateResult>;
|
|
29
|
+
/** 将 chunk 均匀分布到不同文件系统并存储 */
|
|
30
|
+
declare function save(createResult: CreateResult, fileSystems: StorageAdapter[], targetBase: ParcelTargetBase): Promise<Parcel>;
|
|
31
|
+
/** 根据 Parcel 下载各 chunk,重组并校验后返回原文件 */
|
|
32
|
+
declare function reassembly(parcel: Parcel, key: CryptoKey): Promise<ArrayBuffer>;
|
|
33
|
+
declare const ParcelManager: {
|
|
34
|
+
create: typeof create;
|
|
35
|
+
save: typeof save;
|
|
36
|
+
reassembly: typeof reassembly;
|
|
37
|
+
};
|
|
38
|
+
export default ParcelManager;
|
|
39
|
+
//# sourceMappingURL=parcel-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parcel-manager.d.ts","sourceRoot":"","sources":["../../src/parcel/parcel-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUvE,uBAAuB;AACvB,UAAU,cAAc;IACtB,wBAAwB;IACxB,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAED,UAAU,aAAa;IACrB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,UAAU,YAAY;IACpB,gCAAgC;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,8BAA8B;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,uCAAuC;AACvC,KAAK,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;AAoCtG,wBAAwB;AACxB,iBAAe,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgD3F;AAED,6BAA6B;AAC7B,iBAAe,IAAI,CACjB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,cAAc,EAAE,EAC7B,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,sCAAsC;AACtC,iBAAe,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CA+C9E;AAED,QAAA,MAAM,aAAa;;;;CAIlB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
const MANIFEST_VERSION = 1;
|
|
2
|
+
const DEFAULT_CHUNK_SIZE = 256 * 1024; // 256KB
|
|
3
|
+
const AES_GCM_IV_LENGTH = 12;
|
|
4
|
+
const AES_GCM_TAG_LENGTH = 128;
|
|
5
|
+
/** IV 存在 Parcel.extra 中的 JSON 键 */
|
|
6
|
+
const EXTRA_IV_KEY = "iv";
|
|
7
|
+
function getCrypto() {
|
|
8
|
+
if (typeof globalThis !== "undefined" && globalThis.crypto)
|
|
9
|
+
return globalThis.crypto;
|
|
10
|
+
throw new Error("ParcelManager: crypto not available");
|
|
11
|
+
}
|
|
12
|
+
/** 计算 ArrayBuffer 的 SHA-256,返回 hex 字符串 */
|
|
13
|
+
async function sha256Hex(buffer) {
|
|
14
|
+
const crypto = getCrypto();
|
|
15
|
+
const hash = await crypto.subtle.digest("SHA-256", buffer);
|
|
16
|
+
return Array.from(new Uint8Array(hash))
|
|
17
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
18
|
+
.join("");
|
|
19
|
+
}
|
|
20
|
+
/** AES-GCM 加密 */
|
|
21
|
+
async function encrypt(data, key, iv) {
|
|
22
|
+
const crypto = getCrypto();
|
|
23
|
+
const ivCopy = new Uint8Array(iv);
|
|
24
|
+
return crypto.subtle.encrypt({ name: "AES-GCM", iv: ivCopy, tagLength: AES_GCM_TAG_LENGTH }, key, data);
|
|
25
|
+
}
|
|
26
|
+
/** AES-GCM 解密 */
|
|
27
|
+
async function decrypt(data, key, iv) {
|
|
28
|
+
const crypto = getCrypto();
|
|
29
|
+
const ivCopy = new Uint8Array(iv);
|
|
30
|
+
return crypto.subtle.decrypt({ name: "AES-GCM", iv: ivCopy, tagLength: AES_GCM_TAG_LENGTH }, key, data);
|
|
31
|
+
}
|
|
32
|
+
/** 生成 AES-GCM 密钥(256 位) */
|
|
33
|
+
async function generateKey() {
|
|
34
|
+
const crypto = getCrypto();
|
|
35
|
+
return crypto.subtle.generateKey({ name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]);
|
|
36
|
+
}
|
|
37
|
+
/** 将文件加密后拆分成多个 chunk */
|
|
38
|
+
async function create(file, options = {}) {
|
|
39
|
+
const chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE;
|
|
40
|
+
let key = options.key;
|
|
41
|
+
const generatedKey = !key;
|
|
42
|
+
if (!key)
|
|
43
|
+
key = await generateKey();
|
|
44
|
+
const crypto = getCrypto();
|
|
45
|
+
const iv = crypto.getRandomValues(new Uint8Array(AES_GCM_IV_LENGTH));
|
|
46
|
+
const encrypted = await encrypt(file, key, iv);
|
|
47
|
+
const totalSize = encrypted.byteLength;
|
|
48
|
+
const chunks = [];
|
|
49
|
+
const chunkList = [];
|
|
50
|
+
let offset = 0;
|
|
51
|
+
let index = 0;
|
|
52
|
+
while (offset < totalSize) {
|
|
53
|
+
const end = Math.min(offset + chunkSize, totalSize);
|
|
54
|
+
const chunkBuffer = encrypted.slice(offset, end);
|
|
55
|
+
chunks.push(chunkBuffer);
|
|
56
|
+
const checksum = await sha256Hex(chunkBuffer);
|
|
57
|
+
chunkList.push({
|
|
58
|
+
index,
|
|
59
|
+
size: chunkBuffer.byteLength,
|
|
60
|
+
checksum,
|
|
61
|
+
url: "", // 由 save 填充
|
|
62
|
+
});
|
|
63
|
+
offset = end;
|
|
64
|
+
index += 1;
|
|
65
|
+
}
|
|
66
|
+
const checksum = await sha256Hex(file);
|
|
67
|
+
const details = {
|
|
68
|
+
manifestVersion: MANIFEST_VERSION,
|
|
69
|
+
chunkList: chunkList,
|
|
70
|
+
checksum,
|
|
71
|
+
size: file.byteLength,
|
|
72
|
+
};
|
|
73
|
+
const result = {
|
|
74
|
+
details,
|
|
75
|
+
chunks,
|
|
76
|
+
ivBase64: btoa(String.fromCharCode(...iv)),
|
|
77
|
+
};
|
|
78
|
+
if (generatedKey)
|
|
79
|
+
result.key = key;
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/** 将 chunk 均匀分布到不同文件系统并存储 */
|
|
83
|
+
async function save(createResult, fileSystems, targetBase) {
|
|
84
|
+
if (fileSystems.length === 0)
|
|
85
|
+
throw new Error("ParcelManager.save: fileSystems 不能为空");
|
|
86
|
+
const { details, chunks, ivBase64 } = createResult;
|
|
87
|
+
const chunkListWithUrls = [];
|
|
88
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
89
|
+
const fs = fileSystems[i % fileSystems.length];
|
|
90
|
+
const pathOrKey = `chunk-${i}-${details.checksum.slice(0, 8)}`;
|
|
91
|
+
const { url } = await fs.upload(chunks[i], pathOrKey);
|
|
92
|
+
chunkListWithUrls.push({ ...details.chunkList[i], url });
|
|
93
|
+
}
|
|
94
|
+
const extra = JSON.stringify({ [EXTRA_IV_KEY]: ivBase64 });
|
|
95
|
+
return {
|
|
96
|
+
...targetBase,
|
|
97
|
+
category: "parcel",
|
|
98
|
+
details: {
|
|
99
|
+
...details,
|
|
100
|
+
chunkList: chunkListWithUrls,
|
|
101
|
+
},
|
|
102
|
+
extra,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** 根据 Parcel 下载各 chunk,重组并校验后返回原文件 */
|
|
106
|
+
async function reassembly(parcel, key) {
|
|
107
|
+
const { details } = parcel;
|
|
108
|
+
let ivBase64;
|
|
109
|
+
try {
|
|
110
|
+
const extra = parcel.extra ? JSON.parse(parcel.extra) : {};
|
|
111
|
+
ivBase64 = extra[EXTRA_IV_KEY];
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
throw new Error("ParcelManager.reassembly: 无法从 extra 解析 IV");
|
|
115
|
+
}
|
|
116
|
+
if (!ivBase64 || typeof ivBase64 !== "string") {
|
|
117
|
+
throw new Error("ParcelManager.reassembly: Parcel.extra 中缺少 iv");
|
|
118
|
+
}
|
|
119
|
+
const iv = Uint8Array.from(atob(ivBase64), (c) => c.charCodeAt(0));
|
|
120
|
+
if (iv.length !== AES_GCM_IV_LENGTH) {
|
|
121
|
+
throw new Error("ParcelManager.reassembly: IV 长度无效");
|
|
122
|
+
}
|
|
123
|
+
const sortedChunks = [...details.chunkList].sort((a, b) => a.index - b.index);
|
|
124
|
+
const buffers = [];
|
|
125
|
+
for (const chunkMeta of sortedChunks) {
|
|
126
|
+
const res = await fetch(chunkMeta.url);
|
|
127
|
+
if (!res.ok)
|
|
128
|
+
throw new Error(`ParcelManager.reassembly: 下载 chunk ${chunkMeta.index} 失败: ${res.status}`);
|
|
129
|
+
const chunkBuffer = await res.arrayBuffer();
|
|
130
|
+
const chunkChecksum = await sha256Hex(chunkBuffer);
|
|
131
|
+
if (chunkChecksum !== chunkMeta.checksum) {
|
|
132
|
+
throw new Error(`ParcelManager.reassembly: chunk ${chunkMeta.index} 校验失败 (checksum 不一致)`);
|
|
133
|
+
}
|
|
134
|
+
buffers.push(chunkBuffer);
|
|
135
|
+
}
|
|
136
|
+
const totalEncryptedLength = buffers.reduce((s, b) => s + b.byteLength, 0);
|
|
137
|
+
const encrypted = new Uint8Array(totalEncryptedLength);
|
|
138
|
+
let offset = 0;
|
|
139
|
+
for (const b of buffers) {
|
|
140
|
+
encrypted.set(new Uint8Array(b), offset);
|
|
141
|
+
offset += b.byteLength;
|
|
142
|
+
}
|
|
143
|
+
const decrypted = await decrypt(encrypted.buffer, key, iv);
|
|
144
|
+
const fileChecksum = await sha256Hex(decrypted);
|
|
145
|
+
if (fileChecksum !== details.checksum) {
|
|
146
|
+
throw new Error("ParcelManager.reassembly: 重组后文件校验失败 (sha256 与 details.checksum 不一致)");
|
|
147
|
+
}
|
|
148
|
+
return decrypted;
|
|
149
|
+
}
|
|
150
|
+
const ParcelManager = {
|
|
151
|
+
create,
|
|
152
|
+
save,
|
|
153
|
+
reassembly,
|
|
154
|
+
};
|
|
155
|
+
export default ParcelManager;
|
|
156
|
+
//# sourceMappingURL=parcel-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parcel-manager.js","sourceRoot":"","sources":["../../src/parcel/parcel-manager.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAC/C,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,mCAAmC;AACnC,MAAM,YAAY,GAAG,IAAI,CAAC;AA6B1B,SAAS,SAAS;IAChB,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC;IACrF,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACzD,CAAC;AAED,0CAA0C;AAC1C,KAAK,UAAU,SAAS,CAAC,MAAmB;IAC1C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,iBAAiB;AACjB,KAAK,UAAU,OAAO,CAAC,IAAiB,EAAE,GAAc,EAAE,EAAc;IACtE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1G,CAAC;AAED,iBAAiB;AACjB,KAAK,UAAU,OAAO,CAAC,IAAiB,EAAE,GAAc,EAAE,EAAc;IACtE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1G,CAAC;AAED,2BAA2B;AAC3B,KAAK,UAAU,WAAW;IACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,wBAAwB;AACxB,KAAK,UAAU,MAAM,CAAC,IAAiB,EAAE,UAAyB,EAAE;IAClE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtB,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC;IAC1B,IAAI,CAAC,GAAG;QAAE,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;IAEpC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC;IAEvC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,SAAS,GAAY,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,MAAM,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC;YACb,KAAK;YACL,IAAI,EAAE,WAAW,CAAC,UAAU;YAC5B,QAAQ;YACR,GAAG,EAAE,EAAE,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,CAAC;QACb,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAkB;QAC7B,eAAe,EAAE,gBAAgB;QACjC,SAAS,EAAE,SAAS;QACpB,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,UAAU;KACtB,CAAC;IAEF,MAAM,MAAM,GAAiB;QAC3B,OAAO;QACP,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;KAC3C,CAAC;IACF,IAAI,YAAY;QAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6BAA6B;AAC7B,KAAK,UAAU,IAAI,CACjB,YAA0B,EAC1B,WAA6B,EAC7B,UAA4B;IAE5B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;IAEnD,MAAM,iBAAiB,GAAY,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACtD,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE3D,OAAO;QACL,GAAG,UAAU;QACb,QAAQ,EAAE,QAA8B;QACxC,OAAO,EAAE;YACP,GAAG,OAAO;YACV,SAAS,EAAE,iBAAiB;SAC7B;QACD,KAAK;KACN,CAAC;AACJ,CAAC;AAED,sCAAsC;AACtC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,GAAc;IACtD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,EAAE,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,CAAC,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,aAAa,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mCAAmC,SAAS,CAAC,KAAK,sBAAsB,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACvD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,YAAY,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,MAAM;IACN,IAAI;IACJ,UAAU;CACX,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Target } from "../core.interface";
|
|
2
|
+
export interface Parcel extends Target {
|
|
3
|
+
category: CategoryParcel;
|
|
4
|
+
details: ParcelDetails;
|
|
5
|
+
}
|
|
6
|
+
export declare enum CategoryParcel {
|
|
7
|
+
PARCEL = "parcel"
|
|
8
|
+
}
|
|
9
|
+
export interface ParcelDetails {
|
|
10
|
+
manifestVersion: number;
|
|
11
|
+
chunkList: Chunk[];
|
|
12
|
+
/** sha256 */
|
|
13
|
+
checksum: string;
|
|
14
|
+
size: number;
|
|
15
|
+
}
|
|
16
|
+
export declare enum LifecycleStatus {
|
|
17
|
+
STORED = "STORED",
|
|
18
|
+
SOFT_DELETED = "SOFT_DELETED",
|
|
19
|
+
HARD_DELETED = "HARD_DELETED"
|
|
20
|
+
}
|
|
21
|
+
export interface Lifecycle {
|
|
22
|
+
status: LifecycleStatus;
|
|
23
|
+
storedAt: string;
|
|
24
|
+
softDeletedAt: string | null;
|
|
25
|
+
hardDeletedAt: string | null;
|
|
26
|
+
}
|
|
27
|
+
export interface Chunk {
|
|
28
|
+
index: number;
|
|
29
|
+
/** TODO Storage service provider */
|
|
30
|
+
size: number;
|
|
31
|
+
checksum: string;
|
|
32
|
+
url: string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=parcel.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parcel.interface.d.ts","sourceRoot":"","sources":["../../src/parcel/parcel.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,oBAAY,cAAc;IACxB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,KAAK,EAAE,CAAC;IACnB,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IAEpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export var CategoryParcel;
|
|
2
|
+
(function (CategoryParcel) {
|
|
3
|
+
CategoryParcel["PARCEL"] = "parcel";
|
|
4
|
+
})(CategoryParcel || (CategoryParcel = {}));
|
|
5
|
+
export var LifecycleStatus;
|
|
6
|
+
(function (LifecycleStatus) {
|
|
7
|
+
LifecycleStatus["STORED"] = "STORED";
|
|
8
|
+
LifecycleStatus["SOFT_DELETED"] = "SOFT_DELETED";
|
|
9
|
+
LifecycleStatus["HARD_DELETED"] = "HARD_DELETED";
|
|
10
|
+
})(LifecycleStatus || (LifecycleStatus = {}));
|
|
11
|
+
//# sourceMappingURL=parcel.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parcel.interface.js","sourceRoot":"","sources":["../../src/parcel/parcel.interface.ts"],"names":[],"mappings":"AAOA,MAAM,CAAN,IAAY,cAEX;AAFD,WAAY,cAAc;IACxB,mCAAiB,CAAA;AACnB,CAAC,EAFW,cAAc,KAAd,cAAc,QAEzB;AAUD,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,gDAA6B,CAAA;IAC7B,gDAA6B,CAAA;AAC/B,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseValidator } from "../core.utils";
|
|
2
|
+
import { QuestionList, QuestionListDetails } from "./question-list.interface";
|
|
3
|
+
export declare class PostCreateQuestionListValidator extends BaseValidator<PostCreateQuestionListPayload> {
|
|
4
|
+
protected requiredFields: (keyof PostCreateQuestionListPayload)[];
|
|
5
|
+
protected optionalFields: (keyof PostCreateQuestionListPayload)[];
|
|
6
|
+
constructor();
|
|
7
|
+
}
|
|
8
|
+
export interface PostCreateQuestionListPayload {
|
|
9
|
+
name: QuestionListDetails["name"];
|
|
10
|
+
list: QuestionListDetails["list"];
|
|
11
|
+
}
|
|
12
|
+
export declare const postCreateQuestionList: (payload: PostCreateQuestionListPayload) => Promise<import("..").SupabaseResponse<QuestionList>>;
|
|
13
|
+
//# sourceMappingURL=question-list.api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-list.api.d.ts","sourceRoot":"","sources":["../../src/question-list/question-list.api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAwB,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEpG,qBAAa,+BAAgC,SAAQ,aAAa,CAAC,6BAA6B,CAAC;IAC/F,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,6BAA6B,CAAC,EAAE,CAAoB;IACrF,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,6BAA6B,CAAC,EAAE,CAAM;;CASxE;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,eAAO,MAAM,sBAAsB,YAAmB,6BAA6B,yDAmBlF,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createTarget } from "../core.api";
|
|
2
|
+
import { BaseValidator } from "../core.utils";
|
|
3
|
+
import { CategoryQuestionList } from "./question-list.interface";
|
|
4
|
+
export class PostCreateQuestionListValidator extends BaseValidator {
|
|
5
|
+
requiredFields = ["name", "list"];
|
|
6
|
+
optionalFields = [];
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
// Add custom
|
|
10
|
+
this.addValidator((val) => {
|
|
11
|
+
return true;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const postCreateQuestionList = async (payload) => {
|
|
16
|
+
return createTarget({
|
|
17
|
+
payload: payload,
|
|
18
|
+
validator: PostCreateQuestionListValidator,
|
|
19
|
+
createFn: (validPayload) => {
|
|
20
|
+
const { name, list } = validPayload;
|
|
21
|
+
const details = {
|
|
22
|
+
name,
|
|
23
|
+
list,
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
name: validPayload.name,
|
|
27
|
+
category: CategoryQuestionList.QUESTION_LIST,
|
|
28
|
+
value: "",
|
|
29
|
+
tagList: [],
|
|
30
|
+
details,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=question-list.api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-list.api.js","sourceRoot":"","sources":["../../src/question-list/question-list.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAgB,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AAEpG,MAAM,OAAO,+BAAgC,SAAQ,aAA4C;IACrF,cAAc,GAA4C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3E,cAAc,GAA4C,EAAE,CAAC;IAEvE;QACE,KAAK,EAAE,CAAC;QACR,aAAa;QACb,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAOD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAsC,EAAE,EAAE;IACrF,OAAO,YAAY,CAA8C;QAC/D,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,+BAA+B;QAC1C,QAAQ,EAAE,CAAC,YAAY,EAAE,EAAE;YACzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YACpC,MAAM,OAAO,GAAwB;gBACnC,IAAI;gBACJ,IAAI;aACL,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,QAAQ,EAAE,oBAAoB,CAAC,aAAa;gBAC5C,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,EAAE;gBACX,OAAO;aACR,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Target } from "../core.interface";
|
|
2
|
+
export interface Question {
|
|
3
|
+
ans: string;
|
|
4
|
+
reminder: string;
|
|
5
|
+
}
|
|
6
|
+
export type QuestionListDetails = {
|
|
7
|
+
/** Human readable name, should be same to Target.name */
|
|
8
|
+
name: string;
|
|
9
|
+
list: Question[];
|
|
10
|
+
};
|
|
11
|
+
export declare enum CategoryQuestionList {
|
|
12
|
+
QUESTION_LIST = "question-list"
|
|
13
|
+
}
|
|
14
|
+
export interface QuestionList extends Target {
|
|
15
|
+
category: CategoryQuestionList;
|
|
16
|
+
details: QuestionListDetails;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=question-list.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-list.interface.d.ts","sourceRoot":"","sources":["../../src/question-list/question-list.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB,CAAC;AAEF,oBAAY,oBAAoB;IAC9B,aAAa,kBAAkB;CAChC;AAED,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,mBAAmB,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-list.interface.js","sourceRoot":"","sources":["../../src/question-list/question-list.interface.ts"],"names":[],"mappings":"AAaA,MAAM,CAAN,IAAY,oBAEX;AAFD,WAAY,oBAAoB;IAC9B,uDAA+B,CAAA;AACjC,CAAC,EAFW,oBAAoB,KAApB,oBAAoB,QAE/B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseValidator } from "../core.utils";
|
|
2
|
+
import { Review, ReviewDetails } from "./review.interface";
|
|
3
|
+
export declare const patchUpsertReview: (payload: ReviewDetails) => Promise<import("..").SupabaseResponse<Review>>;
|
|
4
|
+
export interface PostReviewPayload {
|
|
5
|
+
reviewTargetId: ReviewDetails["reviewTargetId"];
|
|
6
|
+
reviewDomain: ReviewDetails["reviewDomain"];
|
|
7
|
+
}
|
|
8
|
+
export declare class PostReviewValidator extends BaseValidator<PostReviewPayload> {
|
|
9
|
+
protected requiredFields: (keyof PostReviewPayload)[];
|
|
10
|
+
protected optionalFields: (keyof PostReviewPayload)[];
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
13
|
+
export declare const postReview: (payload: PostReviewPayload) => Promise<import("..").SupabaseResponse<Review>>;
|
|
14
|
+
//# sourceMappingURL=review.api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.api.d.ts","sourceRoot":"","sources":["../../src/review/review.api.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAkB,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmB3E,eAAO,MAAM,iBAAiB,YAAmB,aAAa,mDA6D7D,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CAC7C;AAED,qBAAa,mBAAoB,SAAQ,aAAa,CAAC,iBAAiB,CAAC;IACvE,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,iBAAiB,CAAC,EAAE,CAAsC;IAC3F,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,iBAAiB,CAAC,EAAE,CAAM;;CAS5D;AAED,eAAO,MAAM,UAAU,YAAmB,iBAAiB,mDAwC1D,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { cloneDeep } from "lodash-es";
|
|
2
|
+
import { createTarget, getPossibleTarget, updateTargetDetails } from "../core.api";
|
|
3
|
+
import { createResponse } from "../core.interface";
|
|
4
|
+
import { BaseValidator } from "../core.utils";
|
|
5
|
+
import { CategoryReview } from "./review.interface";
|
|
6
|
+
class PatchUpsertReviewValidator extends BaseValidator {
|
|
7
|
+
requiredFields = ["reviewTargetId", "reviewDomain", "reviewResult"];
|
|
8
|
+
optionalFields = [];
|
|
9
|
+
ignoredFields = ["reviewCount", "lastUpdated"];
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
// Add custom
|
|
13
|
+
this.addValidator((val) => {
|
|
14
|
+
if (val.reviewResult == null || Object.values(val.reviewResult).some((v) => typeof v !== "number")) {
|
|
15
|
+
return "[Check reviewResult] reviewResult invalid";
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export const patchUpsertReview = async (payload) => {
|
|
22
|
+
const validPayload = new PatchUpsertReviewValidator().validate(payload);
|
|
23
|
+
const { reviewTargetId, reviewDomain } = validPayload;
|
|
24
|
+
// Check redundancy
|
|
25
|
+
const { data: possibleReview } = await getPossibleTarget({
|
|
26
|
+
filterList: [
|
|
27
|
+
{
|
|
28
|
+
field: "category",
|
|
29
|
+
operator: "eq",
|
|
30
|
+
value: CategoryReview.REVIEW,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
field: "details->>reviewTargetId",
|
|
34
|
+
operator: "eq",
|
|
35
|
+
value: reviewTargetId,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
field: "details->>reviewDomain",
|
|
39
|
+
operator: "eq",
|
|
40
|
+
value: reviewDomain,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
});
|
|
44
|
+
if (possibleReview != null) {
|
|
45
|
+
const existingReview = possibleReview;
|
|
46
|
+
const id = existingReview.id;
|
|
47
|
+
// Update
|
|
48
|
+
const data = await updateTargetDetails({
|
|
49
|
+
id,
|
|
50
|
+
updateFn: (details) => {
|
|
51
|
+
const incrementResult = validPayload.reviewResult;
|
|
52
|
+
if (incrementResult != null) {
|
|
53
|
+
const updatedResult = details.reviewResult != null ? cloneDeep(details.reviewResult) : {};
|
|
54
|
+
Object.entries(incrementResult).forEach(([key, value]) => {
|
|
55
|
+
updatedResult[key] = (updatedResult[key] ?? 0) + value;
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
...details,
|
|
59
|
+
reviewResult: updatedResult,
|
|
60
|
+
reviewCount: (details.reviewCount ?? 0) + 1,
|
|
61
|
+
lastUpdated: Date.now(),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return details;
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
return createResponse.success(data);
|
|
68
|
+
}
|
|
69
|
+
// Create
|
|
70
|
+
const { data: newReview } = await postReview({
|
|
71
|
+
reviewTargetId,
|
|
72
|
+
reviewDomain,
|
|
73
|
+
});
|
|
74
|
+
if (newReview == null) {
|
|
75
|
+
const msg = "[patchUpsertReview] Unable to create Review";
|
|
76
|
+
console.error(msg);
|
|
77
|
+
throw new Error(msg);
|
|
78
|
+
}
|
|
79
|
+
return createResponse.success(newReview);
|
|
80
|
+
};
|
|
81
|
+
export class PostReviewValidator extends BaseValidator {
|
|
82
|
+
requiredFields = ["reviewTargetId", "reviewDomain"];
|
|
83
|
+
optionalFields = [];
|
|
84
|
+
constructor() {
|
|
85
|
+
super();
|
|
86
|
+
// Add custom
|
|
87
|
+
this.addValidator((val) => {
|
|
88
|
+
return true;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export const postReview = async (payload) => {
|
|
93
|
+
return createTarget({
|
|
94
|
+
payload: payload,
|
|
95
|
+
validator: PostReviewValidator,
|
|
96
|
+
checkRedundancyFilterList: [
|
|
97
|
+
{
|
|
98
|
+
field: "category",
|
|
99
|
+
operator: "eq",
|
|
100
|
+
value: CategoryReview.REVIEW,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
field: "details->>reviewTargetId",
|
|
104
|
+
operator: "eq",
|
|
105
|
+
value: payload.reviewTargetId,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
field: "details->>reviewDomain",
|
|
109
|
+
operator: "eq",
|
|
110
|
+
value: payload.reviewDomain,
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
createFn: (validPayload) => {
|
|
114
|
+
const { reviewTargetId, reviewDomain } = validPayload;
|
|
115
|
+
const details = {
|
|
116
|
+
reviewTargetId,
|
|
117
|
+
reviewDomain,
|
|
118
|
+
lastUpdated: Date.now(),
|
|
119
|
+
reviewCount: 0,
|
|
120
|
+
reviewResult: {},
|
|
121
|
+
};
|
|
122
|
+
const reviewStr = `Review ${reviewTargetId} ${reviewDomain}`;
|
|
123
|
+
return {
|
|
124
|
+
name: reviewStr,
|
|
125
|
+
category: CategoryReview.REVIEW,
|
|
126
|
+
value: "",
|
|
127
|
+
tagList: [],
|
|
128
|
+
details,
|
|
129
|
+
};
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=review.api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.api.js","sourceRoot":"","sources":["../../src/review/review.api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Target } from "../core.interface";
|
|
2
|
+
export declare enum ReviewDomain {
|
|
3
|
+
/** the larger the number, the more popular it is */
|
|
4
|
+
LIKES = "likes"
|
|
5
|
+
}
|
|
6
|
+
export type ReviewDetails = {
|
|
7
|
+
reviewTargetId: string;
|
|
8
|
+
lastUpdated: number;
|
|
9
|
+
reviewDomain: ReviewDomain;
|
|
10
|
+
/** Auto increment */
|
|
11
|
+
reviewCount?: number;
|
|
12
|
+
reviewResult?: {
|
|
13
|
+
/** reviewDomain */
|
|
14
|
+
[name: string]: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare enum CategoryReview {
|
|
18
|
+
REVIEW = "review"
|
|
19
|
+
}
|
|
20
|
+
export interface Review extends Target {
|
|
21
|
+
category: CategoryReview;
|
|
22
|
+
details: ReviewDetails;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=review.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.interface.d.ts","sourceRoot":"","sources":["../../src/review/review.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,oBAAY,YAAY;IACtB,oDAAoD;IACpD,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,qBAAqB;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE;QACb,mBAAmB;QACnB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH,CAAC;AAEF,oBAAY,cAAc;IACxB,MAAM,WAAW;CAClB;AACD,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;CACxB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export var ReviewDomain;
|
|
2
|
+
(function (ReviewDomain) {
|
|
3
|
+
/** the larger the number, the more popular it is */
|
|
4
|
+
ReviewDomain["LIKES"] = "likes";
|
|
5
|
+
})(ReviewDomain || (ReviewDomain = {}));
|
|
6
|
+
export var CategoryReview;
|
|
7
|
+
(function (CategoryReview) {
|
|
8
|
+
CategoryReview["REVIEW"] = "review";
|
|
9
|
+
})(CategoryReview || (CategoryReview = {}));
|
|
10
|
+
//# sourceMappingURL=review.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.interface.js","sourceRoot":"","sources":["../../src/review/review.interface.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,oDAAoD;IACpD,+BAAe,CAAA;AACjB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAcD,MAAM,CAAN,IAAY,cAEX;AAFD,WAAY,cAAc;IACxB,mCAAiB,CAAA;AACnB,CAAC,EAFW,cAAc,KAAd,cAAc,QAEzB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseValidator } from "../../core.utils";
|
|
2
|
+
import { ReviewSettingDetails, ReviewSetting } from "../review-setting.interface";
|
|
3
|
+
export interface PostReviewSettingPayload {
|
|
4
|
+
name: ReviewSettingDetails["name"];
|
|
5
|
+
questionList: ReviewSettingDetails["questionList"];
|
|
6
|
+
}
|
|
7
|
+
export declare class PostReviewSettingValidator extends BaseValidator<PostReviewSettingPayload> {
|
|
8
|
+
protected requiredFields: (keyof PostReviewSettingPayload)[];
|
|
9
|
+
protected optionalFields: (keyof PostReviewSettingPayload)[];
|
|
10
|
+
}
|
|
11
|
+
export declare const postReviewSetting: (payload: PostReviewSettingPayload) => Promise<import("../..").SupabaseResponse<ReviewSetting>>;
|
|
12
|
+
//# sourceMappingURL=post-review-setting.api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-review-setting.api.d.ts","sourceRoot":"","sources":["../../../src/review-v2/apis/post-review-setting.api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAyB,MAAM,6BAA6B,CAAC;AAEzG,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnC,YAAY,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAC;CACpD;AAED,qBAAa,0BAA2B,SAAQ,aAAa,CAAC,wBAAwB,CAAC;IACrF,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,wBAAwB,CAAC,EAAE,CAA4B;IACxF,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,wBAAwB,CAAC,EAAE,CAAM;CACnE;AAED,eAAO,MAAM,iBAAiB,iGAoB5B,CAAC"}
|