sa2kit 3.0.0 → 3.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/dist/ai/llm/ui/miniapp/index.d.mts +2 -2
- package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
- package/dist/ai/llm/ui/rn/index.d.mts +2 -2
- package/dist/ai/llm/ui/rn/index.d.ts +2 -2
- package/dist/ai/llm/ui/web/index.d.mts +3 -3
- package/dist/ai/llm/ui/web/index.d.ts +3 -3
- package/dist/analytics/index.d.mts +1 -1
- package/dist/analytics/index.d.ts +1 -1
- package/dist/{chunk-QP5N3ER6.js → chunk-3CSCIRQY.js} +5 -6
- package/dist/chunk-3CSCIRQY.js.map +1 -0
- package/dist/{chunk-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
- package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
- package/dist/chunk-5FUAQLGC.mjs +14 -0
- package/dist/chunk-5FUAQLGC.mjs.map +1 -0
- package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
- package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
- package/dist/chunk-6YLCRWKM.mjs +8 -0
- package/dist/chunk-6YLCRWKM.mjs.map +1 -0
- package/dist/{chunk-IBWDBBX5.mjs → chunk-7B5SI4OF.mjs} +3 -4
- package/dist/chunk-7B5SI4OF.mjs.map +1 -0
- package/dist/chunk-EQXPL7TN.mjs +78 -0
- package/dist/chunk-EQXPL7TN.mjs.map +1 -0
- package/dist/{chunk-GQZHGSRR.js → chunk-GSNGCENJ.js} +39 -2
- package/dist/chunk-GSNGCENJ.js.map +1 -0
- package/dist/chunk-HQLKOXG7.js +16 -0
- package/dist/chunk-HQLKOXG7.js.map +1 -0
- package/dist/{chunk-S3PUP7N4.js → chunk-PA4ELVGI.js} +2 -2
- package/dist/{chunk-S3PUP7N4.js.map → chunk-PA4ELVGI.js.map} +1 -1
- package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
- package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
- package/dist/{chunk-LHJKLUM7.mjs → chunk-TNJ6LYX7.mjs} +2 -2
- package/dist/{chunk-LHJKLUM7.mjs.map → chunk-TNJ6LYX7.mjs.map} +1 -1
- package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
- package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
- package/dist/chunk-YTGUIRRH.js +10 -0
- package/dist/chunk-YTGUIRRH.js.map +1 -0
- package/dist/common/auth/client/index.d.mts +1 -31
- package/dist/common/auth/client/index.d.ts +1 -31
- package/dist/common/auth/client/index.js +2 -15
- package/dist/common/auth/client/index.mjs +1 -2
- package/dist/common/auth/components/index.d.mts +14 -248
- package/dist/common/auth/components/index.d.ts +14 -248
- package/dist/common/auth/components/index.js +878 -49
- package/dist/common/auth/components/index.js.map +1 -1
- package/dist/common/auth/components/index.mjs +871 -5
- package/dist/common/auth/components/index.mjs.map +1 -1
- package/dist/common/auth/hooks/index.d.mts +2 -29
- package/dist/common/auth/hooks/index.d.ts +2 -29
- package/dist/common/auth/hooks/index.js +2 -11
- package/dist/common/auth/hooks/index.mjs +1 -2
- package/dist/common/auth/index.d.mts +5 -9
- package/dist/common/auth/index.d.ts +5 -9
- package/dist/common/auth/index.js +7 -28
- package/dist/common/auth/index.mjs +3 -4
- package/dist/common/auth/react/index.d.mts +3 -3
- package/dist/common/auth/react/index.d.ts +3 -3
- package/dist/common/auth/rn/index.d.mts +3 -19
- package/dist/common/auth/rn/index.d.ts +3 -19
- package/dist/common/auth/rn/index.js +0 -32
- package/dist/common/auth/rn/index.js.map +1 -1
- package/dist/common/auth/rn/index.mjs +1 -30
- package/dist/common/auth/rn/index.mjs.map +1 -1
- package/dist/common/auth/server/index.d.mts +81 -2
- package/dist/common/auth/server/index.d.ts +81 -2
- package/dist/common/auth/server/index.js +128 -37
- package/dist/common/auth/server/index.js.map +1 -1
- package/dist/common/auth/server/index.mjs +124 -1
- package/dist/common/auth/server/index.mjs.map +1 -1
- package/dist/common/auth/services/index.js +12 -9
- package/dist/common/auth/services/index.js.map +1 -1
- package/dist/common/auth/services/index.mjs +10 -1
- package/dist/common/auth/services/index.mjs.map +1 -1
- package/dist/common/file/server/index.js +32 -32
- package/dist/common/file/server/index.mjs +3 -3
- package/dist/common/index.d.mts +5 -8
- package/dist/common/index.d.ts +5 -8
- package/dist/common/index.js +12 -14
- package/dist/common/index.mjs +6 -8
- package/dist/common/request/index.js +4 -5
- package/dist/common/request/index.mjs +2 -3
- package/dist/i18n/index.d.mts +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/imageCrop/index.d.mts +3 -3
- package/dist/imageCrop/index.d.ts +3 -3
- package/dist/index-Bd7cKF1j.d.mts +50 -0
- package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.mts} +5 -5
- package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.ts} +5 -5
- package/dist/index-DRQxtCDw.d.ts +50 -0
- package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.mts} +8 -8
- package/dist/{index-BxZauNN_.d.ts → index-DoUo8IrU.d.ts} +8 -8
- package/dist/index.d.mts +152 -131
- package/dist/index.d.ts +152 -131
- package/dist/index.js +105 -554
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +106 -555
- package/dist/index.mjs.map +1 -1
- package/dist/ossFile/server/index.js +32 -32
- package/dist/ossFile/server/index.mjs +3 -3
- package/dist/request/index.js +3 -4
- package/dist/request/index.mjs +1 -2
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalFile/index.d.mts +5 -5
- package/dist/universalFile/index.d.ts +5 -5
- package/dist/universalFile/server/index.js +62 -62
- package/dist/universalFile/server/index.mjs +2 -2
- package/package.json +1 -36
- package/dist/auth/client/index.d.mts +0 -13
- package/dist/auth/client/index.d.ts +0 -13
- package/dist/auth/client/index.js +0 -26
- package/dist/auth/client/index.js.map +0 -1
- package/dist/auth/client/index.mjs +0 -5
- package/dist/auth/client/index.mjs.map +0 -1
- package/dist/auth/components/index.d.mts +0 -10
- package/dist/auth/components/index.d.ts +0 -10
- package/dist/auth/components/index.js +0 -70
- package/dist/auth/components/index.js.map +0 -1
- package/dist/auth/components/index.mjs +0 -9
- package/dist/auth/components/index.mjs.map +0 -1
- package/dist/auth/hooks/index.d.mts +0 -13
- package/dist/auth/hooks/index.d.ts +0 -13
- package/dist/auth/hooks/index.js +0 -28
- package/dist/auth/hooks/index.js.map +0 -1
- package/dist/auth/hooks/index.mjs +0 -7
- package/dist/auth/hooks/index.mjs.map +0 -1
- package/dist/auth/index.d.mts +0 -21
- package/dist/auth/index.d.ts +0 -21
- package/dist/auth/index.js +0 -112
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/index.mjs +0 -11
- package/dist/auth/index.mjs.map +0 -1
- package/dist/auth/rn/index.d.mts +0 -3133
- package/dist/auth/rn/index.d.ts +0 -3133
- package/dist/auth/rn/index.js +0 -684
- package/dist/auth/rn/index.js.map +0 -1
- package/dist/auth/rn/index.mjs +0 -663
- package/dist/auth/rn/index.mjs.map +0 -1
- package/dist/auth/schema/index.d.mts +0 -4
- package/dist/auth/schema/index.d.ts +0 -4
- package/dist/auth/schema/index.js +0 -49
- package/dist/auth/schema/index.js.map +0 -1
- package/dist/auth/schema/index.mjs +0 -4
- package/dist/auth/schema/index.mjs.map +0 -1
- package/dist/auth/services/index.d.mts +0 -1
- package/dist/auth/services/index.d.ts +0 -1
- package/dist/auth/services/index.js +0 -17
- package/dist/auth/services/index.js.map +0 -1
- package/dist/auth/services/index.mjs +0 -4
- package/dist/auth/services/index.mjs.map +0 -1
- package/dist/base-api-client-BpmcQt4Q.d.ts +0 -103
- package/dist/base-api-client-CFIhZK4C.d.mts +0 -277
- package/dist/base-api-client-CFIhZK4C.d.ts +0 -277
- package/dist/base-api-client-DXLsq2yz.d.mts +0 -103
- package/dist/chunk-7E3J7VAD.mjs +0 -3
- package/dist/chunk-7E3J7VAD.mjs.map +0 -1
- package/dist/chunk-B3CZ3HXJ.mjs +0 -126
- package/dist/chunk-B3CZ3HXJ.mjs.map +0 -1
- package/dist/chunk-FOQEQWX5.js +0 -4
- package/dist/chunk-FOQEQWX5.js.map +0 -1
- package/dist/chunk-G4NFB2QA.mjs +0 -212
- package/dist/chunk-G4NFB2QA.mjs.map +0 -1
- package/dist/chunk-G5HJGXGC.mjs +0 -39
- package/dist/chunk-G5HJGXGC.mjs.map +0 -1
- package/dist/chunk-GQZHGSRR.js.map +0 -1
- package/dist/chunk-GS7XLKET.js +0 -41
- package/dist/chunk-GS7XLKET.js.map +0 -1
- package/dist/chunk-IBWDBBX5.mjs.map +0 -1
- package/dist/chunk-MWSAH7ZG.mjs +0 -42
- package/dist/chunk-MWSAH7ZG.mjs.map +0 -1
- package/dist/chunk-MZOGYD4N.mjs +0 -186
- package/dist/chunk-MZOGYD4N.mjs.map +0 -1
- package/dist/chunk-QDUBO567.js +0 -1148
- package/dist/chunk-QDUBO567.js.map +0 -1
- package/dist/chunk-QP5N3ER6.js.map +0 -1
- package/dist/chunk-RWCD2CAD.mjs +0 -1132
- package/dist/chunk-RWCD2CAD.mjs.map +0 -1
- package/dist/chunk-S37OK2QG.js +0 -216
- package/dist/chunk-S37OK2QG.js.map +0 -1
- package/dist/chunk-SFDJNKWC.js +0 -22
- package/dist/chunk-SFDJNKWC.js.map +0 -1
- package/dist/chunk-TXMX6PZR.js +0 -190
- package/dist/chunk-TXMX6PZR.js.map +0 -1
- package/dist/chunk-VHN7PF5I.js +0 -20
- package/dist/chunk-VHN7PF5I.js.map +0 -1
- package/dist/chunk-XBZIS3MV.mjs +0 -13
- package/dist/chunk-XBZIS3MV.mjs.map +0 -1
- package/dist/chunk-XFOZ56FB.mjs +0 -20
- package/dist/chunk-XFOZ56FB.mjs.map +0 -1
- package/dist/chunk-Z23HAXHL.js +0 -136
- package/dist/chunk-Z23HAXHL.js.map +0 -1
- package/dist/index-BcjDRcKp.d.mts +0 -40
- package/dist/index-BlpXrrTy.d.ts +0 -40
- package/dist/session-BCXvGCnm.d.mts +0 -81
- package/dist/session-BCXvGCnm.d.ts +0 -81
- package/dist/types-C_W_CoUD.d.ts +0 -99
- package/dist/types-DCRvasyH.d.mts +0 -99
- package/dist/types.legacy-J-j-_ig_.d.mts +0 -25
- package/dist/types.legacy-J-j-_ig_.d.ts +0 -25
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/hooks/useSession.ts"],"names":[],"mappings":";AAOO,SAAS,WAAW,UAAA,EAA8B;AACvD,EAAA,OAAO,WAAW,UAAA,EAAW;AAC/B","file":"chunk-6YLCRWKM.mjs","sourcesContent":["'use client';\n\nimport type { Sa2kitAuthClient } from '../react';\n\n/**\n * 薄封装 Better Auth React `useSession`\n */\nexport function useSession(authClient: Sa2kitAuthClient) {\n return authClient.useSession();\n}\n\nexport type UseSessionReturn = ReturnType<typeof useSession>;\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { MiniappRequestAdapter } from './chunk-
|
|
2
|
-
import { ReactNativeRequestAdapter } from './chunk-G5HJGXGC.mjs';
|
|
1
|
+
import { ReactNativeRequestAdapter, MiniappRequestAdapter } from './chunk-EQXPL7TN.mjs';
|
|
3
2
|
import { WebRequestAdapter } from './chunk-G7UBMCUT.mjs';
|
|
4
3
|
import { __export } from './chunk-MAI35PU6.mjs';
|
|
5
4
|
|
|
@@ -12,5 +11,5 @@ __export(request_exports, {
|
|
|
12
11
|
});
|
|
13
12
|
|
|
14
13
|
export { request_exports };
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
14
|
+
//# sourceMappingURL=chunk-7B5SI4OF.mjs.map
|
|
15
|
+
//# sourceMappingURL=chunk-7B5SI4OF.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/request/index.ts"],"names":[],"mappings":";;;;;AAAA,IAAA,eAAA,GAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-7B5SI4OF.mjs","sourcesContent":["/**\n * @package sa2kit/common/request\n */\nexport * from '../../request';\n"]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// src/request/adapters/miniapp-adapter.ts
|
|
2
|
+
var MiniappRequestAdapter = class {
|
|
3
|
+
constructor(taro) {
|
|
4
|
+
if (!taro) {
|
|
5
|
+
throw new Error("MiniappRequestAdapter requires Taro instance");
|
|
6
|
+
}
|
|
7
|
+
this.taro = taro;
|
|
8
|
+
}
|
|
9
|
+
async request(config) {
|
|
10
|
+
const { url, method = "GET", headers = {}, body, params } = config;
|
|
11
|
+
try {
|
|
12
|
+
const response = await this.taro.request({
|
|
13
|
+
url,
|
|
14
|
+
method,
|
|
15
|
+
header: {
|
|
16
|
+
"Content-Type": "application/json",
|
|
17
|
+
...headers
|
|
18
|
+
},
|
|
19
|
+
data: method === "GET" ? params : body
|
|
20
|
+
});
|
|
21
|
+
const data = response.data;
|
|
22
|
+
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
23
|
+
return data;
|
|
24
|
+
} else {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
error: data.error || "\u8BF7\u6C42\u5931\u8D25: " + response.statusCode
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error("[MiniappRequestAdapter] request error:", error);
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
error: error instanceof Error ? error.message : "\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// src/request/adapters/react-native-adapter.ts
|
|
41
|
+
var ReactNativeRequestAdapter = class {
|
|
42
|
+
async request(config) {
|
|
43
|
+
const { url, method = "GET", headers = {}, body, params } = config;
|
|
44
|
+
let fullUrl = url;
|
|
45
|
+
if (params) {
|
|
46
|
+
const searchParams = new URLSearchParams();
|
|
47
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
48
|
+
if (value !== void 0 && value !== null) {
|
|
49
|
+
searchParams.append(key, String(value));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const qs = searchParams.toString();
|
|
53
|
+
if (qs) {
|
|
54
|
+
fullUrl += url.includes("?") ? `&${qs}` : `?${qs}`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const response = await fetch(fullUrl, {
|
|
58
|
+
method,
|
|
59
|
+
headers: {
|
|
60
|
+
"Content-Type": "application/json",
|
|
61
|
+
...headers
|
|
62
|
+
},
|
|
63
|
+
body: body ? JSON.stringify(body) : void 0
|
|
64
|
+
});
|
|
65
|
+
const data = await response.json();
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
error: data.error ?? `\u8BF7\u6C42\u5931\u8D25 (${response.status})`
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return data;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export { MiniappRequestAdapter, ReactNativeRequestAdapter };
|
|
77
|
+
//# sourceMappingURL=chunk-EQXPL7TN.mjs.map
|
|
78
|
+
//# sourceMappingURL=chunk-EQXPL7TN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/request/adapters/miniapp-adapter.ts","../src/request/adapters/react-native-adapter.ts"],"names":[],"mappings":"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","file":"chunk-EQXPL7TN.mjs","sourcesContent":["import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * Taro Request 接口定义\n * 兼容 @tarojs/taro request API\n */\ninterface TaroRequestStatic {\n request<T = any>(options: {\n url: string;\n method?: string;\n header?: Record<string, string>;\n data?: any;\n }): Promise<{\n statusCode: number;\n data: T;\n }>;\n}\n\n/**\n * Miniapp 平台请求适配器\n * 基于 Taro.request API\n *\n * 使用方式:\n * ```typescript\n * import Taro from '@tarojs/taro'\n * const adapter = new MiniappRequestAdapter(Taro)\n * ```\n *\n * 适用平台:\n * - WeChat Miniapp\n * - Other Taro-based miniapps\n */\nexport class MiniappRequestAdapter implements RequestAdapter {\n private taro: TaroRequestStatic;\n\n constructor(taro: TaroRequestStatic) {\n if (!taro) {\n throw new Error('MiniappRequestAdapter requires Taro instance');\n }\n this.taro = taro;\n }\n\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n try {\n const response = await this.taro.request({\n url,\n method: method as any,\n header: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n data: method === 'GET' ? params : body,\n });\n\n const data = response.data as any;\n\n // 统一返回格式\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return data;\n } else {\n return {\n success: false,\n error: data.error || '请求失败: ' + (response.statusCode),\n } as T;\n }\n } catch (error) {\n console.error('[MiniappRequestAdapter] request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络请求失败',\n } as T;\n }\n }\n}\n\n","import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * React Native 请求适配器(fetch,不携带 Cookie)\n * 与 WebRequestAdapter 的区别:RN 跨域场景下 credentials:include 无效且易误导\n */\nexport class ReactNativeRequestAdapter implements RequestAdapter {\n async request<T = unknown>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const qs = searchParams.toString();\n if (qs) {\n fullUrl += url.includes('?') ? `&${qs}` : `?${qs}`;\n }\n }\n\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const data = (await response.json()) as T & { error?: string };\n if (!response.ok) {\n return {\n success: false,\n error:\n (data as { error?: string }).error ??\n `请求失败 (${response.status})`,\n } as T;\n }\n return data;\n }\n}\n"]}
|
|
@@ -39,6 +39,43 @@ var MiniappRequestAdapter = class {
|
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
+
// src/request/adapters/react-native-adapter.ts
|
|
43
|
+
var ReactNativeRequestAdapter = class {
|
|
44
|
+
async request(config) {
|
|
45
|
+
const { url, method = "GET", headers = {}, body, params } = config;
|
|
46
|
+
let fullUrl = url;
|
|
47
|
+
if (params) {
|
|
48
|
+
const searchParams = new URLSearchParams();
|
|
49
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
50
|
+
if (value !== void 0 && value !== null) {
|
|
51
|
+
searchParams.append(key, String(value));
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
const qs = searchParams.toString();
|
|
55
|
+
if (qs) {
|
|
56
|
+
fullUrl += url.includes("?") ? `&${qs}` : `?${qs}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const response = await fetch(fullUrl, {
|
|
60
|
+
method,
|
|
61
|
+
headers: {
|
|
62
|
+
"Content-Type": "application/json",
|
|
63
|
+
...headers
|
|
64
|
+
},
|
|
65
|
+
body: body ? JSON.stringify(body) : void 0
|
|
66
|
+
});
|
|
67
|
+
const data = await response.json();
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: data.error ?? `\u8BF7\u6C42\u5931\u8D25 (${response.status})`
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return data;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
42
78
|
exports.MiniappRequestAdapter = MiniappRequestAdapter;
|
|
43
|
-
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
exports.ReactNativeRequestAdapter = ReactNativeRequestAdapter;
|
|
80
|
+
//# sourceMappingURL=chunk-GSNGCENJ.js.map
|
|
81
|
+
//# sourceMappingURL=chunk-GSNGCENJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/request/adapters/miniapp-adapter.ts","../src/request/adapters/react-native-adapter.ts"],"names":[],"mappings":"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","file":"chunk-GSNGCENJ.js","sourcesContent":["import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * Taro Request 接口定义\n * 兼容 @tarojs/taro request API\n */\ninterface TaroRequestStatic {\n request<T = any>(options: {\n url: string;\n method?: string;\n header?: Record<string, string>;\n data?: any;\n }): Promise<{\n statusCode: number;\n data: T;\n }>;\n}\n\n/**\n * Miniapp 平台请求适配器\n * 基于 Taro.request API\n *\n * 使用方式:\n * ```typescript\n * import Taro from '@tarojs/taro'\n * const adapter = new MiniappRequestAdapter(Taro)\n * ```\n *\n * 适用平台:\n * - WeChat Miniapp\n * - Other Taro-based miniapps\n */\nexport class MiniappRequestAdapter implements RequestAdapter {\n private taro: TaroRequestStatic;\n\n constructor(taro: TaroRequestStatic) {\n if (!taro) {\n throw new Error('MiniappRequestAdapter requires Taro instance');\n }\n this.taro = taro;\n }\n\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n try {\n const response = await this.taro.request({\n url,\n method: method as any,\n header: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n data: method === 'GET' ? params : body,\n });\n\n const data = response.data as any;\n\n // 统一返回格式\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return data;\n } else {\n return {\n success: false,\n error: data.error || '请求失败: ' + (response.statusCode),\n } as T;\n }\n } catch (error) {\n console.error('[MiniappRequestAdapter] request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络请求失败',\n } as T;\n }\n }\n}\n\n","import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * React Native 请求适配器(fetch,不携带 Cookie)\n * 与 WebRequestAdapter 的区别:RN 跨域场景下 credentials:include 无效且易误导\n */\nexport class ReactNativeRequestAdapter implements RequestAdapter {\n async request<T = unknown>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const qs = searchParams.toString();\n if (qs) {\n fullUrl += url.includes('?') ? `&${qs}` : `?${qs}`;\n }\n }\n\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const data = (await response.json()) as T & { error?: string };\n if (!response.ok) {\n return {\n success: false,\n error:\n (data as { error?: string }).error ??\n `请求失败 (${response.status})`,\n } as T;\n }\n return data;\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkYTGUIRRH_js = require('./chunk-YTGUIRRH.js');
|
|
4
|
+
var chunkPA4ELVGI_js = require('./chunk-PA4ELVGI.js');
|
|
5
|
+
var chunkNSBPE2FW_js = require('./chunk-NSBPE2FW.js');
|
|
6
|
+
|
|
7
|
+
// src/common/auth/index.ts
|
|
8
|
+
var auth_exports = {};
|
|
9
|
+
chunkNSBPE2FW_js.__export(auth_exports, {
|
|
10
|
+
createSa2kitAuthClient: () => chunkPA4ELVGI_js.createSa2kitAuthClient,
|
|
11
|
+
useSession: () => chunkYTGUIRRH_js.useSession
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
exports.auth_exports = auth_exports;
|
|
15
|
+
//# sourceMappingURL=chunk-HQLKOXG7.js.map
|
|
16
|
+
//# sourceMappingURL=chunk-HQLKOXG7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/index.ts"],"names":["__export","createSa2kitAuthClient","useSession"],"mappings":";;;;;;;AAAA,IAAA,YAAA,GAAA;AAAAA,yBAAA,CAAA,YAAA,EAAA;AAAA,EAAA,sBAAA,EAAA,MAAAC,uCAAA;AAAA,EAAA,UAAA,EAAA,MAAAC;AAAA,CAAA,CAAA","file":"chunk-HQLKOXG7.js","sourcesContent":["/**\n * @package sa2kit/common/auth\n *\n * Browser / client 安全入口(Better Auth 3.0)\n */\nexport {\n createSa2kitAuthClient,\n type Sa2kitAuthClient,\n type Sa2kitAuthClientOptions,\n} from './client';\nexport { useSession, type UseSessionReturn } from './hooks/useSession';\n\nexport * from './types';\n"]}
|
|
@@ -16,5 +16,5 @@ function createSa2kitAuthClient(options) {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
exports.createSa2kitAuthClient = createSa2kitAuthClient;
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-PA4ELVGI.js.map
|
|
20
|
+
//# sourceMappingURL=chunk-PA4ELVGI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/auth/client/create-auth-client.ts"],"names":["createAuthClient","emailOTPClient","phoneNumberClient"],"mappings":";;;;;;AAYA,SAAS,sBAAsB,OAAA,EAAkC;AAC/D,EAAA,OAAOA,uBAAA,CAAiB;AAAA,IACtB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IAC3C,QAAA,EAAU,QAAQ,QAAA,IAAY,WAAA;AAAA,IAC9B,OAAA,EAAS,CAACC,sBAAA,EAAe,EAAGC,2BAAmB;AAAA,GAChD,CAAA;AACH;AAIO,SAAS,uBAAuB,OAAA,EAAoD;AACzF,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/client/create-auth-client.ts"],"names":["createAuthClient","emailOTPClient","phoneNumberClient"],"mappings":";;;;;;AAYA,SAAS,sBAAsB,OAAA,EAAkC;AAC/D,EAAA,OAAOA,uBAAA,CAAiB;AAAA,IACtB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IAC3C,QAAA,EAAU,QAAQ,QAAA,IAAY,WAAA;AAAA,IAC9B,OAAA,EAAS,CAACC,sBAAA,EAAe,EAAGC,2BAAmB;AAAA,GAChD,CAAA;AACH;AAIO,SAAS,uBAAuB,OAAA,EAAoD;AACzF,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC","file":"chunk-PA4ELVGI.js","sourcesContent":["/**\n * Better Auth 客户端(vanilla — RN / 小程序 / Node fetch)\n */\nimport { createAuthClient } from 'better-auth/client';\nimport { emailOTPClient } from 'better-auth/client/plugins';\nimport { phoneNumberClient } from 'better-auth/client/plugins';\n\nexport type Sa2kitAuthClientOptions = {\n baseURL: string;\n basePath?: string;\n};\n\nfunction buildSa2kitAuthClient(options: Sa2kitAuthClientOptions) {\n return createAuthClient({\n baseURL: options.baseURL.replace(/\\/+$/, ''),\n basePath: options.basePath ?? '/api/auth',\n plugins: [emailOTPClient(), phoneNumberClient()],\n });\n}\n\nexport type Sa2kitAuthClient = ReturnType<typeof buildSa2kitAuthClient>;\n\nexport function createSa2kitAuthClient(options: Sa2kitAuthClientOptions): Sa2kitAuthClient {\n return buildSa2kitAuthClient(options);\n}\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk6PMXAK7F_js = require('./chunk-6PMXAK7F.js');
|
|
4
4
|
var chunkATUCZXJY_js = require('./chunk-ATUCZXJY.js');
|
|
5
5
|
|
|
6
6
|
// src/ossFile/server/config.ts
|
|
7
7
|
function createOssFileConfigManager(options = {}) {
|
|
8
8
|
const { ossConfig, fallbackToLocal = true, customConfig } = options;
|
|
9
|
-
const manager = new
|
|
10
|
-
const resolvedOss = ossConfig ??
|
|
9
|
+
const manager = new chunk6PMXAK7F_js.FileServiceConfigManager(customConfig);
|
|
10
|
+
const resolvedOss = ossConfig ?? chunk6PMXAK7F_js.loadOSSConfigFromEnv();
|
|
11
11
|
if (chunkATUCZXJY_js.isCompleteOssConfig(resolvedOss)) {
|
|
12
12
|
manager.enableStorageProvider("aliyun-oss", resolvedOss);
|
|
13
13
|
manager.updateConfig({ defaultStorage: "aliyun-oss" });
|
|
@@ -20,7 +20,7 @@ function createOssFileConfigManager(options = {}) {
|
|
|
20
20
|
return manager;
|
|
21
21
|
}
|
|
22
22
|
async function createOssFileConfigManagerFromEnv(customConfig) {
|
|
23
|
-
return
|
|
23
|
+
return chunk6PMXAK7F_js.createFileServiceConfigWithConfigManager(customConfig);
|
|
24
24
|
}
|
|
25
25
|
function getOssStorageModeLabel(config) {
|
|
26
26
|
const oss = config.storageProviders["aliyun-oss"];
|
|
@@ -37,7 +37,7 @@ function isOssEnabledInConfig(config) {
|
|
|
37
37
|
// src/ossFile/server/service.ts
|
|
38
38
|
async function createOssFileServiceWithDrizzlePersistence(options) {
|
|
39
39
|
const configManager = options.configManager ?? await createOssFileConfigManagerFromEnv();
|
|
40
|
-
const repository =
|
|
40
|
+
const repository = chunk6PMXAK7F_js.createDrizzleFileRepository({
|
|
41
41
|
db: options.persistence.db,
|
|
42
42
|
fileMetadata: options.persistence.fileMetadata,
|
|
43
43
|
fileStorageProviders: options.persistence.fileStorageProviders
|
|
@@ -91,7 +91,7 @@ async function createUniversalFileServiceFromConfigManager(configManager, reposi
|
|
|
91
91
|
}
|
|
92
92
|
} : {}
|
|
93
93
|
};
|
|
94
|
-
const service = new
|
|
94
|
+
const service = new chunk6PMXAK7F_js.UniversalFileService(serviceConfig);
|
|
95
95
|
await service.initialize();
|
|
96
96
|
return service;
|
|
97
97
|
}
|
|
@@ -106,7 +106,7 @@ async function getFileUrlByFileId(fileId, options) {
|
|
|
106
106
|
);
|
|
107
107
|
return await service2.getFileUrl(fileId, options.userId);
|
|
108
108
|
}
|
|
109
|
-
const service = await
|
|
109
|
+
const service = await chunk6PMXAK7F_js.createUniversalFileServiceWithConfigManager();
|
|
110
110
|
return await service.getFileUrl(fileId, options?.userId);
|
|
111
111
|
} catch {
|
|
112
112
|
return null;
|
|
@@ -152,8 +152,8 @@ function createFileUrlResolver(options = {}) {
|
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
async function createOssFileService(options = {}) {
|
|
155
|
-
return
|
|
156
|
-
configLoaders: [() => Promise.resolve(
|
|
155
|
+
return chunk6PMXAK7F_js.createFileServiceWithFactory({
|
|
156
|
+
configLoaders: [() => Promise.resolve(chunk6PMXAK7F_js.loadConfigFromEnv())],
|
|
157
157
|
autoInitialize: true,
|
|
158
158
|
...options
|
|
159
159
|
});
|
|
@@ -203,5 +203,5 @@ exports.isOssEnabledInConfig = isOssEnabledInConfig;
|
|
|
203
203
|
exports.resolveFileUrlMap = resolveFileUrlMap;
|
|
204
204
|
exports.resolveUploadAccessUrl = resolveUploadAccessUrl;
|
|
205
205
|
exports.uploadFileAndResolveAccessUrl = uploadFileAndResolveAccessUrl;
|
|
206
|
-
//# sourceMappingURL=chunk-
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
206
|
+
//# sourceMappingURL=chunk-QSKLQX6H.js.map
|
|
207
|
+
//# sourceMappingURL=chunk-QSKLQX6H.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ossFile/server/config.ts","../src/ossFile/server/service.ts","../src/ossFile/server/bootstrap.ts"],"names":["FileServiceConfigManager","loadOSSConfigFromEnv","isCompleteOssConfig","createFileServiceConfigWithConfigManager","createDrizzleFileRepository","UniversalFileService","service","createUniversalFileServiceWithConfigManager","createFileServiceWithFactory","loadConfigFromEnv"],"mappings":"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","file":"chunk-WZDTNDYR.js","sourcesContent":["import type { AliyunOSSConfig } from '../../universalFile/server/types';\nimport type { FileServiceConfig } from '../../universalFile/server/config-manager';\nimport {\n FileServiceConfigManager,\n createFileServiceConfigWithConfigManager,\n} from '../../universalFile/server/config-manager';\nimport { loadOSSConfigFromEnv } from '../../universalFile/server/config-helpers';\nimport {\n parseAliyunOssConfigFromMap,\n isCompleteOssConfig,\n STANDARD_ALIYUN_OSS_KEYS,\n type OssConfigKeyMap,\n} from '../shared/ossConfig';\n\nexport {\n STANDARD_ALIYUN_OSS_KEYS,\n parseAliyunOssConfigFromMap,\n type OssConfigKeyMap,\n};\n\nexport interface CreateOssFileConfigManagerOptions {\n ossConfig?: AliyunOSSConfig | null;\n fallbackToLocal?: boolean;\n customConfig?: Partial<FileServiceConfig>;\n}\n\nexport function createOssFileConfigManager(\n options: CreateOssFileConfigManagerOptions = {},\n): FileServiceConfigManager {\n const { ossConfig, fallbackToLocal = true, customConfig } = options;\n const manager = new FileServiceConfigManager(customConfig);\n\n const resolvedOss = ossConfig ?? loadOSSConfigFromEnv();\n if (isCompleteOssConfig(resolvedOss)) {\n manager.enableStorageProvider('aliyun-oss', resolvedOss);\n manager.updateConfig({ defaultStorage: 'aliyun-oss' });\n return manager;\n }\n\n if (fallbackToLocal) {\n manager.enableStorageProvider('local');\n manager.updateConfig({ defaultStorage: 'local' });\n }\n\n return manager;\n}\n\nexport async function createOssFileConfigManagerFromEnv(\n customConfig?: Partial<FileServiceConfig>,\n): Promise<FileServiceConfigManager> {\n return createFileServiceConfigWithConfigManager(customConfig);\n}\n\nexport function getOssStorageModeLabel(config: FileServiceConfig): string {\n const oss = config.storageProviders['aliyun-oss'] as AliyunOSSConfig | undefined;\n if (oss?.enabled) {\n return oss.customDomain\n ? '阿里云 OSS + 自定义域名'\n : '阿里云 OSS';\n }\n return '本地存储';\n}\n\nexport function isOssEnabledInConfig(config: FileServiceConfig): boolean {\n const oss = config.storageProviders['aliyun-oss'];\n return Boolean(oss?.enabled);\n}\n\n/** @deprecated 使用 createOssFileConfigManagerFromEnv */\nexport async function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager> {\n return createOssFileConfigManagerFromEnv();\n}\n","import {\n UniversalFileService,\n createFileServiceWithFactory,\n loadConfigFromEnv,\n createDrizzleFileRepository,\n} from '../../universalFile/server';\nimport type { FileServiceFactoryOptions } from '../../universalFile/server/config-helpers';\nimport type { UploadFileInfo } from '../../universalFile/types';\nimport {\n FileServiceConfigManager,\n type FileServiceConfig,\n} from '../../universalFile/server/config-manager';\nimport { createUniversalFileServiceWithConfigManager } from '../../universalFile/server/service-helpers';\nimport { createOssFileConfigManagerFromEnv } from './config';\n\nexport { UniversalFileService, createUniversalFileServiceWithConfigManager };\n\nexport interface DrizzlePersistenceOptions {\n db: unknown;\n fileMetadata: unknown;\n fileStorageProviders: unknown;\n}\n\nexport async function createOssFileServiceWithDrizzlePersistence(options: {\n configManager?: FileServiceConfigManager;\n persistence: DrizzlePersistenceOptions;\n}): Promise<UniversalFileService> {\n const configManager = options.configManager\n ?? await createOssFileConfigManagerFromEnv();\n const repository = createDrizzleFileRepository({\n db: options.persistence.db,\n fileMetadata: options.persistence.fileMetadata,\n fileStorageProviders: options.persistence.fileStorageProviders,\n });\n return createUniversalFileServiceFromConfigManager(configManager, repository);\n}\n\nexport async function resolveUploadAccessUrl(\n service: UniversalFileService,\n fileId: string,\n options?: { cdnUrl?: string | null; userId?: string; fallbackPath?: string },\n): Promise<string> {\n if (options?.cdnUrl) {\n return options.cdnUrl;\n }\n try {\n const url = await service.getFileUrl(fileId, options?.userId);\n if (url) return url;\n } catch {\n // fall through\n }\n return options?.fallbackPath ?? `/uploads/${fileId}`;\n}\n\nexport async function uploadFileAndResolveAccessUrl(\n service: UniversalFileService,\n uploadInfo: UploadFileInfo,\n userId?: string,\n): Promise<{ fileId: string; accessUrl: string; uploadResult: Awaited<ReturnType<UniversalFileService['uploadFile']>> }> {\n const uploadResult = await service.uploadFile(uploadInfo);\n const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {\n cdnUrl: uploadResult.cdnUrl,\n userId,\n fallbackPath: `/uploads/${uploadResult.storagePath}`,\n });\n return {\n fileId: uploadResult.id,\n accessUrl,\n uploadResult,\n };\n}\n\n/**\n * 基于配置管理器创建并初始化 UniversalFileService。\n */\nexport async function createUniversalFileServiceFromConfigManager(\n configManager: FileServiceConfigManager,\n repository?: unknown,\n): Promise<UniversalFileService> {\n const config = configManager.getConfig();\n const serviceConfig = {\n storage: config.storageProviders[config.defaultStorage],\n defaultStorage: config.defaultStorage,\n defaultCDN: config.defaultCDN,\n storageProviders: config.storageProviders,\n cdnProviders: config.cdnProviders,\n maxFileSize: config.maxFileSize,\n allowedMimeTypes: config.allowedMimeTypes,\n cache: {\n enabled: true,\n metadataTTL: config.cache.metadataTTL,\n urlTTL: config.cache.urlTTL,\n },\n ...(repository\n ? {\n persistence: {\n enabled: true,\n repository,\n autoPersist: true,\n },\n }\n : {}),\n };\n\n const service = new UniversalFileService(serviceConfig as any);\n await service.initialize();\n return service;\n}\n\n/**\n * 通过 fileId 解析访问 URL(需已初始化的 UniversalFileService 或全局 ConfigManager)。\n */\nexport async function getFileUrlByFileId(\n fileId: string,\n options?: {\n configManager?: FileServiceConfigManager;\n service?: UniversalFileService;\n userId?: string;\n },\n): Promise<string | null> {\n try {\n if (options?.service) {\n return await options.service.getFileUrl(fileId, options.userId);\n }\n if (options?.configManager) {\n const service = await createUniversalFileServiceFromConfigManager(\n options.configManager,\n );\n return await service.getFileUrl(fileId, options.userId);\n }\n const service = await createUniversalFileServiceWithConfigManager();\n return await service.getFileUrl(fileId, options?.userId);\n } catch {\n return null;\n }\n}\n\n/**\n * 批量解析 fileId → URL。\n */\nexport async function resolveFileUrlMap(\n fileIds: string[],\n options?: {\n resolver?: (fileId: string) => Promise<string | null | undefined>;\n configManager?: FileServiceConfigManager;\n userId?: string;\n },\n): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n const uniqueIds = [...new Set(fileIds.filter(Boolean))];\n\n await Promise.all(\n uniqueIds.map(async (fileId) => {\n let url: string | null | undefined;\n if (options?.resolver) {\n url = await options.resolver(fileId);\n } else {\n url = await getFileUrlByFileId(fileId, {\n configManager: options?.configManager,\n userId: options?.userId,\n });\n }\n if (url) {\n map.set(fileId, url);\n }\n }),\n );\n\n return map;\n}\n\nexport type FileUrlResolver = (\n fileId: string,\n userId?: string,\n) => Promise<string | null | undefined>;\n\nexport interface CreateFileUrlResolverOptions {\n configManager?: FileServiceConfigManager;\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n userId?: string;\n}\n\n/**\n * 显式创建 fileId → URL 解析器(替代 globalThis 单例,R2-203)。\n */\nexport function createFileUrlResolver(\n options: CreateFileUrlResolverOptions = {},\n): FileUrlResolver {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n async function getConfigManager(): Promise<FileServiceConfigManager> {\n if (options.configManager) {\n return options.configManager;\n }\n if (options.loadConfigManager) {\n configManagerPromise ??= options.loadConfigManager();\n return configManagerPromise;\n }\n configManagerPromise ??= createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n }\n\n return async (fileId: string, userId?: string) =>\n getFileUrlByFileId(fileId, {\n configManager: await getConfigManager(),\n userId: userId ?? options.userId,\n });\n}\n\nexport async function createOssFileService(\n options: FileServiceFactoryOptions = {},\n): Promise<UniversalFileService> {\n return createFileServiceWithFactory({\n configLoaders: [() => Promise.resolve(loadConfigFromEnv())],\n autoInitialize: true,\n ...options,\n });\n}\n\nexport type { FileServiceConfig, FileServiceConfigManager };\n","import type { FileServiceConfigManager } from '../../universalFile/server/config-manager';\nimport type { UniversalFileService } from '../../universalFile/server';\nimport { createOssFileConfigManagerFromEnv } from './config';\nimport {\n createOssFileServiceWithDrizzlePersistence,\n createUniversalFileServiceFromConfigManager,\n createFileUrlResolver,\n getFileUrlByFileId,\n type DrizzlePersistenceOptions,\n type FileUrlResolver,\n} from './service';\n\nexport interface OssFileBootstrapOptions {\n /** 自定义配置加载(如从 DB 注入 env 后再 createOssFileConfigManagerFromEnv) */\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n /** Drizzle 持久化;传入后 createPersistentFileService 会写入 file_metadata */\n persistence?: DrizzlePersistenceOptions;\n}\n\nexport interface OssFileBootstrap {\n getConfigManager(): Promise<FileServiceConfigManager>;\n /** 无 Drizzle 持久化的 UniversalFileService(如 skill-manager 自行写 metadata) */\n createFileService(): Promise<UniversalFileService>;\n createPersistentFileService(): Promise<UniversalFileService>;\n createFileUrlResolver(): FileUrlResolver;\n getFileUrl(fileId: string, userId?: string): Promise<string | null>;\n}\n\n/**\n * 一站式 OSS / universal-file 服务端 bootstrap(R2-205)。\n */\nexport function createOssFileBootstrap(\n options: OssFileBootstrapOptions = {},\n): OssFileBootstrap {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n const getConfigManager = async (): Promise<FileServiceConfigManager> => {\n configManagerPromise ??=\n options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n };\n\n return {\n getConfigManager,\n createFileService: async () => {\n const configManager = await getConfigManager();\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createPersistentFileService: async () => {\n const configManager = await getConfigManager();\n if (options.persistence) {\n return createOssFileServiceWithDrizzlePersistence({\n configManager,\n persistence: options.persistence,\n });\n }\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createFileUrlResolver: () =>\n createFileUrlResolver({ loadConfigManager: getConfigManager }),\n getFileUrl: async (fileId, userId) => {\n const configManager = await getConfigManager();\n return getFileUrlByFileId(fileId, { configManager, userId });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ossFile/server/config.ts","../src/ossFile/server/service.ts","../src/ossFile/server/bootstrap.ts"],"names":["FileServiceConfigManager","loadOSSConfigFromEnv","isCompleteOssConfig","createFileServiceConfigWithConfigManager","createDrizzleFileRepository","UniversalFileService","service","createUniversalFileServiceWithConfigManager","createFileServiceWithFactory","loadConfigFromEnv"],"mappings":"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","file":"chunk-QSKLQX6H.js","sourcesContent":["import type { AliyunOSSConfig } from '../../universalFile/server/types';\nimport type { FileServiceConfig } from '../../universalFile/server/config-manager';\nimport {\n FileServiceConfigManager,\n createFileServiceConfigWithConfigManager,\n} from '../../universalFile/server/config-manager';\nimport { loadOSSConfigFromEnv } from '../../universalFile/server/config-helpers';\nimport {\n parseAliyunOssConfigFromMap,\n isCompleteOssConfig,\n STANDARD_ALIYUN_OSS_KEYS,\n type OssConfigKeyMap,\n} from '../shared/ossConfig';\n\nexport {\n STANDARD_ALIYUN_OSS_KEYS,\n parseAliyunOssConfigFromMap,\n type OssConfigKeyMap,\n};\n\nexport interface CreateOssFileConfigManagerOptions {\n ossConfig?: AliyunOSSConfig | null;\n fallbackToLocal?: boolean;\n customConfig?: Partial<FileServiceConfig>;\n}\n\nexport function createOssFileConfigManager(\n options: CreateOssFileConfigManagerOptions = {},\n): FileServiceConfigManager {\n const { ossConfig, fallbackToLocal = true, customConfig } = options;\n const manager = new FileServiceConfigManager(customConfig);\n\n const resolvedOss = ossConfig ?? loadOSSConfigFromEnv();\n if (isCompleteOssConfig(resolvedOss)) {\n manager.enableStorageProvider('aliyun-oss', resolvedOss);\n manager.updateConfig({ defaultStorage: 'aliyun-oss' });\n return manager;\n }\n\n if (fallbackToLocal) {\n manager.enableStorageProvider('local');\n manager.updateConfig({ defaultStorage: 'local' });\n }\n\n return manager;\n}\n\nexport async function createOssFileConfigManagerFromEnv(\n customConfig?: Partial<FileServiceConfig>,\n): Promise<FileServiceConfigManager> {\n return createFileServiceConfigWithConfigManager(customConfig);\n}\n\nexport function getOssStorageModeLabel(config: FileServiceConfig): string {\n const oss = config.storageProviders['aliyun-oss'] as AliyunOSSConfig | undefined;\n if (oss?.enabled) {\n return oss.customDomain\n ? '阿里云 OSS + 自定义域名'\n : '阿里云 OSS';\n }\n return '本地存储';\n}\n\nexport function isOssEnabledInConfig(config: FileServiceConfig): boolean {\n const oss = config.storageProviders['aliyun-oss'];\n return Boolean(oss?.enabled);\n}\n\n/** @deprecated 使用 createOssFileConfigManagerFromEnv */\nexport async function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager> {\n return createOssFileConfigManagerFromEnv();\n}\n","import {\n UniversalFileService,\n createFileServiceWithFactory,\n loadConfigFromEnv,\n createDrizzleFileRepository,\n} from '../../universalFile/server';\nimport type { FileServiceFactoryOptions } from '../../universalFile/server/config-helpers';\nimport type { UploadFileInfo } from '../../universalFile/types';\nimport {\n FileServiceConfigManager,\n type FileServiceConfig,\n} from '../../universalFile/server/config-manager';\nimport { createUniversalFileServiceWithConfigManager } from '../../universalFile/server/service-helpers';\nimport { createOssFileConfigManagerFromEnv } from './config';\n\nexport { UniversalFileService, createUniversalFileServiceWithConfigManager };\n\nexport interface DrizzlePersistenceOptions {\n db: unknown;\n fileMetadata: unknown;\n fileStorageProviders: unknown;\n}\n\nexport async function createOssFileServiceWithDrizzlePersistence(options: {\n configManager?: FileServiceConfigManager;\n persistence: DrizzlePersistenceOptions;\n}): Promise<UniversalFileService> {\n const configManager = options.configManager\n ?? await createOssFileConfigManagerFromEnv();\n const repository = createDrizzleFileRepository({\n db: options.persistence.db,\n fileMetadata: options.persistence.fileMetadata,\n fileStorageProviders: options.persistence.fileStorageProviders,\n });\n return createUniversalFileServiceFromConfigManager(configManager, repository);\n}\n\nexport async function resolveUploadAccessUrl(\n service: UniversalFileService,\n fileId: string,\n options?: { cdnUrl?: string | null; userId?: string; fallbackPath?: string },\n): Promise<string> {\n if (options?.cdnUrl) {\n return options.cdnUrl;\n }\n try {\n const url = await service.getFileUrl(fileId, options?.userId);\n if (url) return url;\n } catch {\n // fall through\n }\n return options?.fallbackPath ?? `/uploads/${fileId}`;\n}\n\nexport async function uploadFileAndResolveAccessUrl(\n service: UniversalFileService,\n uploadInfo: UploadFileInfo,\n userId?: string,\n): Promise<{ fileId: string; accessUrl: string; uploadResult: Awaited<ReturnType<UniversalFileService['uploadFile']>> }> {\n const uploadResult = await service.uploadFile(uploadInfo);\n const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {\n cdnUrl: uploadResult.cdnUrl,\n userId,\n fallbackPath: `/uploads/${uploadResult.storagePath}`,\n });\n return {\n fileId: uploadResult.id,\n accessUrl,\n uploadResult,\n };\n}\n\n/**\n * 基于配置管理器创建并初始化 UniversalFileService。\n */\nexport async function createUniversalFileServiceFromConfigManager(\n configManager: FileServiceConfigManager,\n repository?: unknown,\n): Promise<UniversalFileService> {\n const config = configManager.getConfig();\n const serviceConfig = {\n storage: config.storageProviders[config.defaultStorage],\n defaultStorage: config.defaultStorage,\n defaultCDN: config.defaultCDN,\n storageProviders: config.storageProviders,\n cdnProviders: config.cdnProviders,\n maxFileSize: config.maxFileSize,\n allowedMimeTypes: config.allowedMimeTypes,\n cache: {\n enabled: true,\n metadataTTL: config.cache.metadataTTL,\n urlTTL: config.cache.urlTTL,\n },\n ...(repository\n ? {\n persistence: {\n enabled: true,\n repository,\n autoPersist: true,\n },\n }\n : {}),\n };\n\n const service = new UniversalFileService(serviceConfig as any);\n await service.initialize();\n return service;\n}\n\n/**\n * 通过 fileId 解析访问 URL(需已初始化的 UniversalFileService 或全局 ConfigManager)。\n */\nexport async function getFileUrlByFileId(\n fileId: string,\n options?: {\n configManager?: FileServiceConfigManager;\n service?: UniversalFileService;\n userId?: string;\n },\n): Promise<string | null> {\n try {\n if (options?.service) {\n return await options.service.getFileUrl(fileId, options.userId);\n }\n if (options?.configManager) {\n const service = await createUniversalFileServiceFromConfigManager(\n options.configManager,\n );\n return await service.getFileUrl(fileId, options.userId);\n }\n const service = await createUniversalFileServiceWithConfigManager();\n return await service.getFileUrl(fileId, options?.userId);\n } catch {\n return null;\n }\n}\n\n/**\n * 批量解析 fileId → URL。\n */\nexport async function resolveFileUrlMap(\n fileIds: string[],\n options?: {\n resolver?: (fileId: string) => Promise<string | null | undefined>;\n configManager?: FileServiceConfigManager;\n userId?: string;\n },\n): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n const uniqueIds = [...new Set(fileIds.filter(Boolean))];\n\n await Promise.all(\n uniqueIds.map(async (fileId) => {\n let url: string | null | undefined;\n if (options?.resolver) {\n url = await options.resolver(fileId);\n } else {\n url = await getFileUrlByFileId(fileId, {\n configManager: options?.configManager,\n userId: options?.userId,\n });\n }\n if (url) {\n map.set(fileId, url);\n }\n }),\n );\n\n return map;\n}\n\nexport type FileUrlResolver = (\n fileId: string,\n userId?: string,\n) => Promise<string | null | undefined>;\n\nexport interface CreateFileUrlResolverOptions {\n configManager?: FileServiceConfigManager;\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n userId?: string;\n}\n\n/**\n * 显式创建 fileId → URL 解析器(替代 globalThis 单例,R2-203)。\n */\nexport function createFileUrlResolver(\n options: CreateFileUrlResolverOptions = {},\n): FileUrlResolver {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n async function getConfigManager(): Promise<FileServiceConfigManager> {\n if (options.configManager) {\n return options.configManager;\n }\n if (options.loadConfigManager) {\n configManagerPromise ??= options.loadConfigManager();\n return configManagerPromise;\n }\n configManagerPromise ??= createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n }\n\n return async (fileId: string, userId?: string) =>\n getFileUrlByFileId(fileId, {\n configManager: await getConfigManager(),\n userId: userId ?? options.userId,\n });\n}\n\nexport async function createOssFileService(\n options: FileServiceFactoryOptions = {},\n): Promise<UniversalFileService> {\n return createFileServiceWithFactory({\n configLoaders: [() => Promise.resolve(loadConfigFromEnv())],\n autoInitialize: true,\n ...options,\n });\n}\n\nexport type { FileServiceConfig, FileServiceConfigManager };\n","import type { FileServiceConfigManager } from '../../universalFile/server/config-manager';\nimport type { UniversalFileService } from '../../universalFile/server';\nimport { createOssFileConfigManagerFromEnv } from './config';\nimport {\n createOssFileServiceWithDrizzlePersistence,\n createUniversalFileServiceFromConfigManager,\n createFileUrlResolver,\n getFileUrlByFileId,\n type DrizzlePersistenceOptions,\n type FileUrlResolver,\n} from './service';\n\nexport interface OssFileBootstrapOptions {\n /** 自定义配置加载(如从 DB 注入 env 后再 createOssFileConfigManagerFromEnv) */\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n /** Drizzle 持久化;传入后 createPersistentFileService 会写入 file_metadata */\n persistence?: DrizzlePersistenceOptions;\n}\n\nexport interface OssFileBootstrap {\n getConfigManager(): Promise<FileServiceConfigManager>;\n /** 无 Drizzle 持久化的 UniversalFileService(如 skill-manager 自行写 metadata) */\n createFileService(): Promise<UniversalFileService>;\n createPersistentFileService(): Promise<UniversalFileService>;\n createFileUrlResolver(): FileUrlResolver;\n getFileUrl(fileId: string, userId?: string): Promise<string | null>;\n}\n\n/**\n * 一站式 OSS / universal-file 服务端 bootstrap(R2-205)。\n */\nexport function createOssFileBootstrap(\n options: OssFileBootstrapOptions = {},\n): OssFileBootstrap {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n const getConfigManager = async (): Promise<FileServiceConfigManager> => {\n configManagerPromise ??=\n options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n };\n\n return {\n getConfigManager,\n createFileService: async () => {\n const configManager = await getConfigManager();\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createPersistentFileService: async () => {\n const configManager = await getConfigManager();\n if (options.persistence) {\n return createOssFileServiceWithDrizzlePersistence({\n configManager,\n persistence: options.persistence,\n });\n }\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createFileUrlResolver: () =>\n createFileUrlResolver({ loadConfigManager: getConfigManager }),\n getFileUrl: async (fileId, userId) => {\n const configManager = await getConfigManager();\n return getFileUrlByFileId(fileId, { configManager, userId });\n },\n };\n}\n"]}
|
|
@@ -14,5 +14,5 @@ function createSa2kitAuthClient(options) {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export { createSa2kitAuthClient };
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
18
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-TNJ6LYX7.mjs.map
|
|
18
|
+
//# sourceMappingURL=chunk-TNJ6LYX7.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/auth/client/create-auth-client.ts"],"names":[],"mappings":";;;;AAYA,SAAS,sBAAsB,OAAA,EAAkC;AAC/D,EAAA,OAAO,gBAAA,CAAiB;AAAA,IACtB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IAC3C,QAAA,EAAU,QAAQ,QAAA,IAAY,WAAA;AAAA,IAC9B,OAAA,EAAS,CAAC,cAAA,EAAe,EAAG,mBAAmB;AAAA,GAChD,CAAA;AACH;AAIO,SAAS,uBAAuB,OAAA,EAAoD;AACzF,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/client/create-auth-client.ts"],"names":[],"mappings":";;;;AAYA,SAAS,sBAAsB,OAAA,EAAkC;AAC/D,EAAA,OAAO,gBAAA,CAAiB;AAAA,IACtB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IAC3C,QAAA,EAAU,QAAQ,QAAA,IAAY,WAAA;AAAA,IAC9B,OAAA,EAAS,CAAC,cAAA,EAAe,EAAG,mBAAmB;AAAA,GAChD,CAAA;AACH;AAIO,SAAS,uBAAuB,OAAA,EAAoD;AACzF,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC","file":"chunk-TNJ6LYX7.mjs","sourcesContent":["/**\n * Better Auth 客户端(vanilla — RN / 小程序 / Node fetch)\n */\nimport { createAuthClient } from 'better-auth/client';\nimport { emailOTPClient } from 'better-auth/client/plugins';\nimport { phoneNumberClient } from 'better-auth/client/plugins';\n\nexport type Sa2kitAuthClientOptions = {\n baseURL: string;\n basePath?: string;\n};\n\nfunction buildSa2kitAuthClient(options: Sa2kitAuthClientOptions) {\n return createAuthClient({\n baseURL: options.baseURL.replace(/\\/+$/, ''),\n basePath: options.basePath ?? '/api/auth',\n plugins: [emailOTPClient(), phoneNumberClient()],\n });\n}\n\nexport type Sa2kitAuthClient = ReturnType<typeof buildSa2kitAuthClient>;\n\nexport function createSa2kitAuthClient(options: Sa2kitAuthClientOptions): Sa2kitAuthClient {\n return buildSa2kitAuthClient(options);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FileServiceConfigManager, loadOSSConfigFromEnv, createFileServiceConfigWithConfigManager, createDrizzleFileRepository, UniversalFileService, createUniversalFileServiceWithConfigManager, createFileServiceWithFactory, loadConfigFromEnv } from './chunk-
|
|
1
|
+
import { FileServiceConfigManager, loadOSSConfigFromEnv, createFileServiceConfigWithConfigManager, createDrizzleFileRepository, UniversalFileService, createUniversalFileServiceWithConfigManager, createFileServiceWithFactory, loadConfigFromEnv } from './chunk-4OOANEJV.mjs';
|
|
2
2
|
import { isCompleteOssConfig } from './chunk-DIF5VRL3.mjs';
|
|
3
3
|
|
|
4
4
|
// src/ossFile/server/config.ts
|
|
@@ -189,5 +189,5 @@ function createOssFileBootstrap(options = {}) {
|
|
|
189
189
|
}
|
|
190
190
|
|
|
191
191
|
export { createFileUrlResolver, createOssFileBootstrap, createOssFileConfigManager, createOssFileConfigManagerFromEnv, createOssFileService, createOssFileServiceWithDrizzlePersistence, createUniversalFileServiceFromConfigManager, getFileUrlByFileId, getOssStorageModeLabel, isOssEnabledInConfig, resolveFileUrlMap, resolveUploadAccessUrl, uploadFileAndResolveAccessUrl };
|
|
192
|
-
//# sourceMappingURL=chunk-
|
|
193
|
-
//# sourceMappingURL=chunk-
|
|
192
|
+
//# sourceMappingURL=chunk-WJ7IMUEJ.mjs.map
|
|
193
|
+
//# sourceMappingURL=chunk-WJ7IMUEJ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ossFile/server/config.ts","../src/ossFile/server/service.ts","../src/ossFile/server/bootstrap.ts"],"names":["service"],"mappings":"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","file":"chunk-J77KR2EV.mjs","sourcesContent":["import type { AliyunOSSConfig } from '../../universalFile/server/types';\nimport type { FileServiceConfig } from '../../universalFile/server/config-manager';\nimport {\n FileServiceConfigManager,\n createFileServiceConfigWithConfigManager,\n} from '../../universalFile/server/config-manager';\nimport { loadOSSConfigFromEnv } from '../../universalFile/server/config-helpers';\nimport {\n parseAliyunOssConfigFromMap,\n isCompleteOssConfig,\n STANDARD_ALIYUN_OSS_KEYS,\n type OssConfigKeyMap,\n} from '../shared/ossConfig';\n\nexport {\n STANDARD_ALIYUN_OSS_KEYS,\n parseAliyunOssConfigFromMap,\n type OssConfigKeyMap,\n};\n\nexport interface CreateOssFileConfigManagerOptions {\n ossConfig?: AliyunOSSConfig | null;\n fallbackToLocal?: boolean;\n customConfig?: Partial<FileServiceConfig>;\n}\n\nexport function createOssFileConfigManager(\n options: CreateOssFileConfigManagerOptions = {},\n): FileServiceConfigManager {\n const { ossConfig, fallbackToLocal = true, customConfig } = options;\n const manager = new FileServiceConfigManager(customConfig);\n\n const resolvedOss = ossConfig ?? loadOSSConfigFromEnv();\n if (isCompleteOssConfig(resolvedOss)) {\n manager.enableStorageProvider('aliyun-oss', resolvedOss);\n manager.updateConfig({ defaultStorage: 'aliyun-oss' });\n return manager;\n }\n\n if (fallbackToLocal) {\n manager.enableStorageProvider('local');\n manager.updateConfig({ defaultStorage: 'local' });\n }\n\n return manager;\n}\n\nexport async function createOssFileConfigManagerFromEnv(\n customConfig?: Partial<FileServiceConfig>,\n): Promise<FileServiceConfigManager> {\n return createFileServiceConfigWithConfigManager(customConfig);\n}\n\nexport function getOssStorageModeLabel(config: FileServiceConfig): string {\n const oss = config.storageProviders['aliyun-oss'] as AliyunOSSConfig | undefined;\n if (oss?.enabled) {\n return oss.customDomain\n ? '阿里云 OSS + 自定义域名'\n : '阿里云 OSS';\n }\n return '本地存储';\n}\n\nexport function isOssEnabledInConfig(config: FileServiceConfig): boolean {\n const oss = config.storageProviders['aliyun-oss'];\n return Boolean(oss?.enabled);\n}\n\n/** @deprecated 使用 createOssFileConfigManagerFromEnv */\nexport async function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager> {\n return createOssFileConfigManagerFromEnv();\n}\n","import {\n UniversalFileService,\n createFileServiceWithFactory,\n loadConfigFromEnv,\n createDrizzleFileRepository,\n} from '../../universalFile/server';\nimport type { FileServiceFactoryOptions } from '../../universalFile/server/config-helpers';\nimport type { UploadFileInfo } from '../../universalFile/types';\nimport {\n FileServiceConfigManager,\n type FileServiceConfig,\n} from '../../universalFile/server/config-manager';\nimport { createUniversalFileServiceWithConfigManager } from '../../universalFile/server/service-helpers';\nimport { createOssFileConfigManagerFromEnv } from './config';\n\nexport { UniversalFileService, createUniversalFileServiceWithConfigManager };\n\nexport interface DrizzlePersistenceOptions {\n db: unknown;\n fileMetadata: unknown;\n fileStorageProviders: unknown;\n}\n\nexport async function createOssFileServiceWithDrizzlePersistence(options: {\n configManager?: FileServiceConfigManager;\n persistence: DrizzlePersistenceOptions;\n}): Promise<UniversalFileService> {\n const configManager = options.configManager\n ?? await createOssFileConfigManagerFromEnv();\n const repository = createDrizzleFileRepository({\n db: options.persistence.db,\n fileMetadata: options.persistence.fileMetadata,\n fileStorageProviders: options.persistence.fileStorageProviders,\n });\n return createUniversalFileServiceFromConfigManager(configManager, repository);\n}\n\nexport async function resolveUploadAccessUrl(\n service: UniversalFileService,\n fileId: string,\n options?: { cdnUrl?: string | null; userId?: string; fallbackPath?: string },\n): Promise<string> {\n if (options?.cdnUrl) {\n return options.cdnUrl;\n }\n try {\n const url = await service.getFileUrl(fileId, options?.userId);\n if (url) return url;\n } catch {\n // fall through\n }\n return options?.fallbackPath ?? `/uploads/${fileId}`;\n}\n\nexport async function uploadFileAndResolveAccessUrl(\n service: UniversalFileService,\n uploadInfo: UploadFileInfo,\n userId?: string,\n): Promise<{ fileId: string; accessUrl: string; uploadResult: Awaited<ReturnType<UniversalFileService['uploadFile']>> }> {\n const uploadResult = await service.uploadFile(uploadInfo);\n const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {\n cdnUrl: uploadResult.cdnUrl,\n userId,\n fallbackPath: `/uploads/${uploadResult.storagePath}`,\n });\n return {\n fileId: uploadResult.id,\n accessUrl,\n uploadResult,\n };\n}\n\n/**\n * 基于配置管理器创建并初始化 UniversalFileService。\n */\nexport async function createUniversalFileServiceFromConfigManager(\n configManager: FileServiceConfigManager,\n repository?: unknown,\n): Promise<UniversalFileService> {\n const config = configManager.getConfig();\n const serviceConfig = {\n storage: config.storageProviders[config.defaultStorage],\n defaultStorage: config.defaultStorage,\n defaultCDN: config.defaultCDN,\n storageProviders: config.storageProviders,\n cdnProviders: config.cdnProviders,\n maxFileSize: config.maxFileSize,\n allowedMimeTypes: config.allowedMimeTypes,\n cache: {\n enabled: true,\n metadataTTL: config.cache.metadataTTL,\n urlTTL: config.cache.urlTTL,\n },\n ...(repository\n ? {\n persistence: {\n enabled: true,\n repository,\n autoPersist: true,\n },\n }\n : {}),\n };\n\n const service = new UniversalFileService(serviceConfig as any);\n await service.initialize();\n return service;\n}\n\n/**\n * 通过 fileId 解析访问 URL(需已初始化的 UniversalFileService 或全局 ConfigManager)。\n */\nexport async function getFileUrlByFileId(\n fileId: string,\n options?: {\n configManager?: FileServiceConfigManager;\n service?: UniversalFileService;\n userId?: string;\n },\n): Promise<string | null> {\n try {\n if (options?.service) {\n return await options.service.getFileUrl(fileId, options.userId);\n }\n if (options?.configManager) {\n const service = await createUniversalFileServiceFromConfigManager(\n options.configManager,\n );\n return await service.getFileUrl(fileId, options.userId);\n }\n const service = await createUniversalFileServiceWithConfigManager();\n return await service.getFileUrl(fileId, options?.userId);\n } catch {\n return null;\n }\n}\n\n/**\n * 批量解析 fileId → URL。\n */\nexport async function resolveFileUrlMap(\n fileIds: string[],\n options?: {\n resolver?: (fileId: string) => Promise<string | null | undefined>;\n configManager?: FileServiceConfigManager;\n userId?: string;\n },\n): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n const uniqueIds = [...new Set(fileIds.filter(Boolean))];\n\n await Promise.all(\n uniqueIds.map(async (fileId) => {\n let url: string | null | undefined;\n if (options?.resolver) {\n url = await options.resolver(fileId);\n } else {\n url = await getFileUrlByFileId(fileId, {\n configManager: options?.configManager,\n userId: options?.userId,\n });\n }\n if (url) {\n map.set(fileId, url);\n }\n }),\n );\n\n return map;\n}\n\nexport type FileUrlResolver = (\n fileId: string,\n userId?: string,\n) => Promise<string | null | undefined>;\n\nexport interface CreateFileUrlResolverOptions {\n configManager?: FileServiceConfigManager;\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n userId?: string;\n}\n\n/**\n * 显式创建 fileId → URL 解析器(替代 globalThis 单例,R2-203)。\n */\nexport function createFileUrlResolver(\n options: CreateFileUrlResolverOptions = {},\n): FileUrlResolver {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n async function getConfigManager(): Promise<FileServiceConfigManager> {\n if (options.configManager) {\n return options.configManager;\n }\n if (options.loadConfigManager) {\n configManagerPromise ??= options.loadConfigManager();\n return configManagerPromise;\n }\n configManagerPromise ??= createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n }\n\n return async (fileId: string, userId?: string) =>\n getFileUrlByFileId(fileId, {\n configManager: await getConfigManager(),\n userId: userId ?? options.userId,\n });\n}\n\nexport async function createOssFileService(\n options: FileServiceFactoryOptions = {},\n): Promise<UniversalFileService> {\n return createFileServiceWithFactory({\n configLoaders: [() => Promise.resolve(loadConfigFromEnv())],\n autoInitialize: true,\n ...options,\n });\n}\n\nexport type { FileServiceConfig, FileServiceConfigManager };\n","import type { FileServiceConfigManager } from '../../universalFile/server/config-manager';\nimport type { UniversalFileService } from '../../universalFile/server';\nimport { createOssFileConfigManagerFromEnv } from './config';\nimport {\n createOssFileServiceWithDrizzlePersistence,\n createUniversalFileServiceFromConfigManager,\n createFileUrlResolver,\n getFileUrlByFileId,\n type DrizzlePersistenceOptions,\n type FileUrlResolver,\n} from './service';\n\nexport interface OssFileBootstrapOptions {\n /** 自定义配置加载(如从 DB 注入 env 后再 createOssFileConfigManagerFromEnv) */\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n /** Drizzle 持久化;传入后 createPersistentFileService 会写入 file_metadata */\n persistence?: DrizzlePersistenceOptions;\n}\n\nexport interface OssFileBootstrap {\n getConfigManager(): Promise<FileServiceConfigManager>;\n /** 无 Drizzle 持久化的 UniversalFileService(如 skill-manager 自行写 metadata) */\n createFileService(): Promise<UniversalFileService>;\n createPersistentFileService(): Promise<UniversalFileService>;\n createFileUrlResolver(): FileUrlResolver;\n getFileUrl(fileId: string, userId?: string): Promise<string | null>;\n}\n\n/**\n * 一站式 OSS / universal-file 服务端 bootstrap(R2-205)。\n */\nexport function createOssFileBootstrap(\n options: OssFileBootstrapOptions = {},\n): OssFileBootstrap {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n const getConfigManager = async (): Promise<FileServiceConfigManager> => {\n configManagerPromise ??=\n options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n };\n\n return {\n getConfigManager,\n createFileService: async () => {\n const configManager = await getConfigManager();\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createPersistentFileService: async () => {\n const configManager = await getConfigManager();\n if (options.persistence) {\n return createOssFileServiceWithDrizzlePersistence({\n configManager,\n persistence: options.persistence,\n });\n }\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createFileUrlResolver: () =>\n createFileUrlResolver({ loadConfigManager: getConfigManager }),\n getFileUrl: async (fileId, userId) => {\n const configManager = await getConfigManager();\n return getFileUrlByFileId(fileId, { configManager, userId });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ossFile/server/config.ts","../src/ossFile/server/service.ts","../src/ossFile/server/bootstrap.ts"],"names":["service"],"mappings":";;;;AA0BO,SAAS,0BAAA,CACd,OAAA,GAA6C,EAAC,EACpB;AAC1B,EAAA,MAAM,EAAE,SAAA,EAAW,eAAA,GAAkB,IAAA,EAAM,cAAa,GAAI,OAAA;AAC5D,EAAA,MAAM,OAAA,GAAU,IAAI,wBAAA,CAAyB,YAAY,CAAA;AAEzD,EAAA,MAAM,WAAA,GAAc,aAAa,oBAAA,EAAqB;AACtD,EAAA,IAAI,mBAAA,CAAoB,WAAW,CAAA,EAAG;AACpC,IAAA,OAAA,CAAQ,qBAAA,CAAsB,cAAc,WAAW,CAAA;AACvD,IAAA,OAAA,CAAQ,YAAA,CAAa,EAAE,cAAA,EAAgB,YAAA,EAAc,CAAA;AACrD,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAA,CAAQ,sBAAsB,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,EAAE,cAAA,EAAgB,OAAA,EAAS,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,kCACpB,YAAA,EACmC;AACnC,EAAA,OAAO,yCAAyC,YAAY,CAAA;AAC9D;AAEO,SAAS,uBAAuB,MAAA,EAAmC;AACxE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,gBAAA,CAAiB,YAAY,CAAA;AAChD,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,OAAO,GAAA,CAAI,eACP,yDAAA,GACA,wBAAA;AAAA,EACN;AACA,EAAA,OAAO,0BAAA;AACT;AAEO,SAAS,qBAAqB,MAAA,EAAoC;AACvE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,gBAAA,CAAiB,YAAY,CAAA;AAChD,EAAA,OAAO,OAAA,CAAQ,KAAK,OAAO,CAAA;AAC7B;;;AC3CA,eAAsB,2CAA2C,OAAA,EAG/B;AAChC,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,aAAA,IACzB,MAAM,iCAAA,EAAkC;AAC7C,EAAA,MAAM,aAAa,2BAAA,CAA4B;AAAA,IAC7C,EAAA,EAAI,QAAQ,WAAA,CAAY,EAAA;AAAA,IACxB,YAAA,EAAc,QAAQ,WAAA,CAAY,YAAA;AAAA,IAClC,oBAAA,EAAsB,QAAQ,WAAA,CAAY;AAAA,GAC3C,CAAA;AACD,EAAA,OAAO,2CAAA,CAA4C,eAAe,UAAU,CAAA;AAC9E;AAEA,eAAsB,sBAAA,CACpB,OAAA,EACA,MAAA,EACA,OAAA,EACiB;AACjB,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,MAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,SAAS,MAAM,CAAA;AAC5D,IAAA,IAAI,KAAK,OAAO,GAAA;AAAA,EAClB,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,OAAA,EAAS,YAAA,IAAgB,CAAA,SAAA,EAAY,MAAM,CAAA,CAAA;AACpD;AAEA,eAAsB,6BAAA,CACpB,OAAA,EACA,UAAA,EACA,MAAA,EACuH;AACvH,EAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA;AACxD,EAAA,MAAM,SAAA,GAAY,MAAM,sBAAA,CAAuB,OAAA,EAAS,aAAa,EAAA,EAAI;AAAA,IACvE,QAAQ,YAAA,CAAa,MAAA;AAAA,IACrB,MAAA;AAAA,IACA,YAAA,EAAc,CAAA,SAAA,EAAY,YAAA,CAAa,WAAW,CAAA;AAAA,GACnD,CAAA;AACD,EAAA,OAAO;AAAA,IACL,QAAQ,YAAA,CAAa,EAAA;AAAA,IACrB,SAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,eAAsB,2CAAA,CACpB,eACA,UAAA,EAC+B;AAC/B,EAAA,MAAM,MAAA,GAAS,cAAc,SAAA,EAAU;AACvC,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,MAAA,CAAO,gBAAA,CAAiB,MAAA,CAAO,cAAc,CAAA;AAAA,IACtD,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,OAAO,KAAA,CAAM,WAAA;AAAA,MAC1B,MAAA,EAAQ,OAAO,KAAA,CAAM;AAAA,KACvB;AAAA,IACA,GAAI,UAAA,GACA;AAAA,MACE,WAAA,EAAa;AAAA,QACX,OAAA,EAAS,IAAA;AAAA,QACT,UAAA;AAAA,QACA,WAAA,EAAa;AAAA;AACf,QAEF;AAAC,GACP;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,oBAAA,CAAqB,aAAoB,CAAA;AAC7D,EAAA,MAAM,QAAQ,UAAA,EAAW;AACzB,EAAA,OAAO,OAAA;AACT;AAKA,eAAsB,kBAAA,CACpB,QACA,OAAA,EAKwB;AACxB,EAAA,IAAI;AACF,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,OAAO,MAAM,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,MAAA,MAAMA,WAAU,MAAM,2CAAA;AAAA,QACpB,OAAA,CAAQ;AAAA,OACV;AACA,MAAA,OAAO,MAAMA,QAAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,IACxD;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,2CAAA,EAA4C;AAClE,IAAA,OAAO,MAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,SAAS,MAAM,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKA,eAAsB,iBAAA,CACpB,SACA,OAAA,EAK8B;AAC9B,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,IAAI,IAAI,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAEtD,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,SAAA,CAAU,GAAA,CAAI,OAAO,MAAA,KAAW;AAC9B,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,GAAA,GAAM,MAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,GAAA,GAAM,MAAM,mBAAmB,MAAA,EAAQ;AAAA,UACrC,eAAe,OAAA,EAAS,aAAA;AAAA,UACxB,QAAQ,OAAA,EAAS;AAAA,SAClB,CAAA;AAAA,MACH;AACA,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,GAAA,CAAI,GAAA,CAAI,QAAQ,GAAG,CAAA;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,GACH;AAEA,EAAA,OAAO,GAAA;AACT;AAgBO,SAAS,qBAAA,CACd,OAAA,GAAwC,EAAC,EACxB;AACjB,EAAA,IAAI,oBAAA,GAAiE,IAAA;AAErE,EAAA,eAAe,gBAAA,GAAsD;AACnE,IAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,MAAA,OAAO,OAAA,CAAQ,aAAA;AAAA,IACjB;AACA,IAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,MAAA,oBAAA,KAAA,oBAAA,GAAyB,QAAQ,iBAAA,EAAkB,CAAA;AACnD,MAAA,OAAO,oBAAA;AAAA,IACT;AACA,IAAA,oBAAA,KAAA,oBAAA,GAAyB,iCAAA,EAAkC,CAAA;AAC3D,IAAA,OAAO,oBAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAO,MAAA,EAAgB,MAAA,KAC5B,kBAAA,CAAmB,MAAA,EAAQ;AAAA,IACzB,aAAA,EAAe,MAAM,gBAAA,EAAiB;AAAA,IACtC,MAAA,EAAQ,UAAU,OAAA,CAAQ;AAAA,GAC3B,CAAA;AACL;AAEA,eAAsB,oBAAA,CACpB,OAAA,GAAqC,EAAC,EACP;AAC/B,EAAA,OAAO,4BAAA,CAA6B;AAAA,IAClC,eAAe,CAAC,MAAM,QAAQ,OAAA,CAAQ,iBAAA,EAAmB,CAAC,CAAA;AAAA,IAC1D,cAAA,EAAgB,IAAA;AAAA,IAChB,GAAG;AAAA,GACJ,CAAA;AACH;;;AC1LO,SAAS,sBAAA,CACd,OAAA,GAAmC,EAAC,EAClB;AAClB,EAAA,IAAI,oBAAA,GAAiE,IAAA;AAErE,EAAA,MAAM,mBAAmB,YAA+C;AACtE,IAAA,oBAAA,KAAA,oBAAA,GACE,OAAA,CAAQ,iBAAA,IAAoB,IAAK,iCAAA,EAAkC,CAAA;AACrE,IAAA,OAAO,oBAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,gBAAA;AAAA,IACA,mBAAmB,YAAY;AAC7B,MAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,EAAiB;AAC7C,MAAA,OAAO,4CAA4C,aAAa,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,6BAA6B,YAAY;AACvC,MAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,EAAiB;AAC7C,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,OAAO,0CAAA,CAA2C;AAAA,UAChD,aAAA;AAAA,UACA,aAAa,OAAA,CAAQ;AAAA,SACtB,CAAA;AAAA,MACH;AACA,MAAA,OAAO,4CAA4C,aAAa,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,uBAAuB,MACrB,qBAAA,CAAsB,EAAE,iBAAA,EAAmB,kBAAkB,CAAA;AAAA,IAC/D,UAAA,EAAY,OAAO,MAAA,EAAQ,MAAA,KAAW;AACpC,MAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,EAAiB;AAC7C,MAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,EAAE,aAAA,EAAe,QAAQ,CAAA;AAAA,IAC7D;AAAA,GACF;AACF","file":"chunk-WJ7IMUEJ.mjs","sourcesContent":["import type { AliyunOSSConfig } from '../../universalFile/server/types';\nimport type { FileServiceConfig } from '../../universalFile/server/config-manager';\nimport {\n FileServiceConfigManager,\n createFileServiceConfigWithConfigManager,\n} from '../../universalFile/server/config-manager';\nimport { loadOSSConfigFromEnv } from '../../universalFile/server/config-helpers';\nimport {\n parseAliyunOssConfigFromMap,\n isCompleteOssConfig,\n STANDARD_ALIYUN_OSS_KEYS,\n type OssConfigKeyMap,\n} from '../shared/ossConfig';\n\nexport {\n STANDARD_ALIYUN_OSS_KEYS,\n parseAliyunOssConfigFromMap,\n type OssConfigKeyMap,\n};\n\nexport interface CreateOssFileConfigManagerOptions {\n ossConfig?: AliyunOSSConfig | null;\n fallbackToLocal?: boolean;\n customConfig?: Partial<FileServiceConfig>;\n}\n\nexport function createOssFileConfigManager(\n options: CreateOssFileConfigManagerOptions = {},\n): FileServiceConfigManager {\n const { ossConfig, fallbackToLocal = true, customConfig } = options;\n const manager = new FileServiceConfigManager(customConfig);\n\n const resolvedOss = ossConfig ?? loadOSSConfigFromEnv();\n if (isCompleteOssConfig(resolvedOss)) {\n manager.enableStorageProvider('aliyun-oss', resolvedOss);\n manager.updateConfig({ defaultStorage: 'aliyun-oss' });\n return manager;\n }\n\n if (fallbackToLocal) {\n manager.enableStorageProvider('local');\n manager.updateConfig({ defaultStorage: 'local' });\n }\n\n return manager;\n}\n\nexport async function createOssFileConfigManagerFromEnv(\n customConfig?: Partial<FileServiceConfig>,\n): Promise<FileServiceConfigManager> {\n return createFileServiceConfigWithConfigManager(customConfig);\n}\n\nexport function getOssStorageModeLabel(config: FileServiceConfig): string {\n const oss = config.storageProviders['aliyun-oss'] as AliyunOSSConfig | undefined;\n if (oss?.enabled) {\n return oss.customDomain\n ? '阿里云 OSS + 自定义域名'\n : '阿里云 OSS';\n }\n return '本地存储';\n}\n\nexport function isOssEnabledInConfig(config: FileServiceConfig): boolean {\n const oss = config.storageProviders['aliyun-oss'];\n return Boolean(oss?.enabled);\n}\n\n/** @deprecated 使用 createOssFileConfigManagerFromEnv */\nexport async function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager> {\n return createOssFileConfigManagerFromEnv();\n}\n","import {\n UniversalFileService,\n createFileServiceWithFactory,\n loadConfigFromEnv,\n createDrizzleFileRepository,\n} from '../../universalFile/server';\nimport type { FileServiceFactoryOptions } from '../../universalFile/server/config-helpers';\nimport type { UploadFileInfo } from '../../universalFile/types';\nimport {\n FileServiceConfigManager,\n type FileServiceConfig,\n} from '../../universalFile/server/config-manager';\nimport { createUniversalFileServiceWithConfigManager } from '../../universalFile/server/service-helpers';\nimport { createOssFileConfigManagerFromEnv } from './config';\n\nexport { UniversalFileService, createUniversalFileServiceWithConfigManager };\n\nexport interface DrizzlePersistenceOptions {\n db: unknown;\n fileMetadata: unknown;\n fileStorageProviders: unknown;\n}\n\nexport async function createOssFileServiceWithDrizzlePersistence(options: {\n configManager?: FileServiceConfigManager;\n persistence: DrizzlePersistenceOptions;\n}): Promise<UniversalFileService> {\n const configManager = options.configManager\n ?? await createOssFileConfigManagerFromEnv();\n const repository = createDrizzleFileRepository({\n db: options.persistence.db,\n fileMetadata: options.persistence.fileMetadata,\n fileStorageProviders: options.persistence.fileStorageProviders,\n });\n return createUniversalFileServiceFromConfigManager(configManager, repository);\n}\n\nexport async function resolveUploadAccessUrl(\n service: UniversalFileService,\n fileId: string,\n options?: { cdnUrl?: string | null; userId?: string; fallbackPath?: string },\n): Promise<string> {\n if (options?.cdnUrl) {\n return options.cdnUrl;\n }\n try {\n const url = await service.getFileUrl(fileId, options?.userId);\n if (url) return url;\n } catch {\n // fall through\n }\n return options?.fallbackPath ?? `/uploads/${fileId}`;\n}\n\nexport async function uploadFileAndResolveAccessUrl(\n service: UniversalFileService,\n uploadInfo: UploadFileInfo,\n userId?: string,\n): Promise<{ fileId: string; accessUrl: string; uploadResult: Awaited<ReturnType<UniversalFileService['uploadFile']>> }> {\n const uploadResult = await service.uploadFile(uploadInfo);\n const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {\n cdnUrl: uploadResult.cdnUrl,\n userId,\n fallbackPath: `/uploads/${uploadResult.storagePath}`,\n });\n return {\n fileId: uploadResult.id,\n accessUrl,\n uploadResult,\n };\n}\n\n/**\n * 基于配置管理器创建并初始化 UniversalFileService。\n */\nexport async function createUniversalFileServiceFromConfigManager(\n configManager: FileServiceConfigManager,\n repository?: unknown,\n): Promise<UniversalFileService> {\n const config = configManager.getConfig();\n const serviceConfig = {\n storage: config.storageProviders[config.defaultStorage],\n defaultStorage: config.defaultStorage,\n defaultCDN: config.defaultCDN,\n storageProviders: config.storageProviders,\n cdnProviders: config.cdnProviders,\n maxFileSize: config.maxFileSize,\n allowedMimeTypes: config.allowedMimeTypes,\n cache: {\n enabled: true,\n metadataTTL: config.cache.metadataTTL,\n urlTTL: config.cache.urlTTL,\n },\n ...(repository\n ? {\n persistence: {\n enabled: true,\n repository,\n autoPersist: true,\n },\n }\n : {}),\n };\n\n const service = new UniversalFileService(serviceConfig as any);\n await service.initialize();\n return service;\n}\n\n/**\n * 通过 fileId 解析访问 URL(需已初始化的 UniversalFileService 或全局 ConfigManager)。\n */\nexport async function getFileUrlByFileId(\n fileId: string,\n options?: {\n configManager?: FileServiceConfigManager;\n service?: UniversalFileService;\n userId?: string;\n },\n): Promise<string | null> {\n try {\n if (options?.service) {\n return await options.service.getFileUrl(fileId, options.userId);\n }\n if (options?.configManager) {\n const service = await createUniversalFileServiceFromConfigManager(\n options.configManager,\n );\n return await service.getFileUrl(fileId, options.userId);\n }\n const service = await createUniversalFileServiceWithConfigManager();\n return await service.getFileUrl(fileId, options?.userId);\n } catch {\n return null;\n }\n}\n\n/**\n * 批量解析 fileId → URL。\n */\nexport async function resolveFileUrlMap(\n fileIds: string[],\n options?: {\n resolver?: (fileId: string) => Promise<string | null | undefined>;\n configManager?: FileServiceConfigManager;\n userId?: string;\n },\n): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n const uniqueIds = [...new Set(fileIds.filter(Boolean))];\n\n await Promise.all(\n uniqueIds.map(async (fileId) => {\n let url: string | null | undefined;\n if (options?.resolver) {\n url = await options.resolver(fileId);\n } else {\n url = await getFileUrlByFileId(fileId, {\n configManager: options?.configManager,\n userId: options?.userId,\n });\n }\n if (url) {\n map.set(fileId, url);\n }\n }),\n );\n\n return map;\n}\n\nexport type FileUrlResolver = (\n fileId: string,\n userId?: string,\n) => Promise<string | null | undefined>;\n\nexport interface CreateFileUrlResolverOptions {\n configManager?: FileServiceConfigManager;\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n userId?: string;\n}\n\n/**\n * 显式创建 fileId → URL 解析器(替代 globalThis 单例,R2-203)。\n */\nexport function createFileUrlResolver(\n options: CreateFileUrlResolverOptions = {},\n): FileUrlResolver {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n async function getConfigManager(): Promise<FileServiceConfigManager> {\n if (options.configManager) {\n return options.configManager;\n }\n if (options.loadConfigManager) {\n configManagerPromise ??= options.loadConfigManager();\n return configManagerPromise;\n }\n configManagerPromise ??= createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n }\n\n return async (fileId: string, userId?: string) =>\n getFileUrlByFileId(fileId, {\n configManager: await getConfigManager(),\n userId: userId ?? options.userId,\n });\n}\n\nexport async function createOssFileService(\n options: FileServiceFactoryOptions = {},\n): Promise<UniversalFileService> {\n return createFileServiceWithFactory({\n configLoaders: [() => Promise.resolve(loadConfigFromEnv())],\n autoInitialize: true,\n ...options,\n });\n}\n\nexport type { FileServiceConfig, FileServiceConfigManager };\n","import type { FileServiceConfigManager } from '../../universalFile/server/config-manager';\nimport type { UniversalFileService } from '../../universalFile/server';\nimport { createOssFileConfigManagerFromEnv } from './config';\nimport {\n createOssFileServiceWithDrizzlePersistence,\n createUniversalFileServiceFromConfigManager,\n createFileUrlResolver,\n getFileUrlByFileId,\n type DrizzlePersistenceOptions,\n type FileUrlResolver,\n} from './service';\n\nexport interface OssFileBootstrapOptions {\n /** 自定义配置加载(如从 DB 注入 env 后再 createOssFileConfigManagerFromEnv) */\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n /** Drizzle 持久化;传入后 createPersistentFileService 会写入 file_metadata */\n persistence?: DrizzlePersistenceOptions;\n}\n\nexport interface OssFileBootstrap {\n getConfigManager(): Promise<FileServiceConfigManager>;\n /** 无 Drizzle 持久化的 UniversalFileService(如 skill-manager 自行写 metadata) */\n createFileService(): Promise<UniversalFileService>;\n createPersistentFileService(): Promise<UniversalFileService>;\n createFileUrlResolver(): FileUrlResolver;\n getFileUrl(fileId: string, userId?: string): Promise<string | null>;\n}\n\n/**\n * 一站式 OSS / universal-file 服务端 bootstrap(R2-205)。\n */\nexport function createOssFileBootstrap(\n options: OssFileBootstrapOptions = {},\n): OssFileBootstrap {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n const getConfigManager = async (): Promise<FileServiceConfigManager> => {\n configManagerPromise ??=\n options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n };\n\n return {\n getConfigManager,\n createFileService: async () => {\n const configManager = await getConfigManager();\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createPersistentFileService: async () => {\n const configManager = await getConfigManager();\n if (options.persistence) {\n return createOssFileServiceWithDrizzlePersistence({\n configManager,\n persistence: options.persistence,\n });\n }\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createFileUrlResolver: () =>\n createFileUrlResolver({ loadConfigManager: getConfigManager }),\n getFileUrl: async (fileId, userId) => {\n const configManager = await getConfigManager();\n return getFileUrlByFileId(fileId, { configManager, userId });\n },\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/hooks/useSession.ts"],"names":[],"mappings":";;;AAOO,SAAS,WAAW,UAAA,EAA8B;AACvD,EAAA,OAAO,WAAW,UAAA,EAAW;AAC/B","file":"chunk-YTGUIRRH.js","sourcesContent":["'use client';\n\nimport type { Sa2kitAuthClient } from '../react';\n\n/**\n * 薄封装 Better Auth React `useSession`\n */\nexport function useSession(authClient: Sa2kitAuthClient) {\n return authClient.useSession();\n}\n\nexport type UseSessionReturn = ReturnType<typeof useSession>;\n"]}
|
|
@@ -4,12 +4,6 @@ import * as better_auth_plugins_email_otp from 'better-auth/plugins/email-otp';
|
|
|
4
4
|
import * as better_auth_plugins_phone_number from 'better-auth/plugins/phone-number';
|
|
5
5
|
import * as better_auth_client from 'better-auth/client';
|
|
6
6
|
import * as better_auth from 'better-auth';
|
|
7
|
-
export { B as BaseApiClient } from '../../../base-api-client-DXLsq2yz.mjs';
|
|
8
|
-
export { b as ApiResponse, c as AuthResponse, U as User } from '../../../types-DCRvasyH.mjs';
|
|
9
|
-
import '../../../types-BaZccpvk.mjs';
|
|
10
|
-
import '../../../types-CbTsi9CZ.mjs';
|
|
11
|
-
import '../../../enums-Dume-V5Y.mjs';
|
|
12
|
-
import 'drizzle-orm/pg-core';
|
|
13
7
|
|
|
14
8
|
type Sa2kitAuthClientOptions = {
|
|
15
9
|
baseURL: string;
|
|
@@ -3212,28 +3206,4 @@ declare function buildSa2kitAuthClient(options: Sa2kitAuthClientOptions): {
|
|
|
3212
3206
|
type Sa2kitAuthClient = ReturnType<typeof buildSa2kitAuthClient>;
|
|
3213
3207
|
declare function createSa2kitAuthClient(options: Sa2kitAuthClientOptions): Sa2kitAuthClient;
|
|
3214
3208
|
|
|
3215
|
-
|
|
3216
|
-
* Auth Client - Types
|
|
3217
|
-
* API 客户端类型定义
|
|
3218
|
-
*/
|
|
3219
|
-
|
|
3220
|
-
/**
|
|
3221
|
-
* 存储键名
|
|
3222
|
-
*/
|
|
3223
|
-
declare const STORAGE_KEYS: {
|
|
3224
|
-
readonly AUTH_TOKEN: "auth_token";
|
|
3225
|
-
readonly USER_DATA: "user_data";
|
|
3226
|
-
};
|
|
3227
|
-
/**
|
|
3228
|
-
* API 路由
|
|
3229
|
-
*/
|
|
3230
|
-
declare const API_ROUTES: {
|
|
3231
|
-
readonly AUTH: {
|
|
3232
|
-
readonly LOGIN: "/auth/login";
|
|
3233
|
-
readonly REGISTER: "/auth/register";
|
|
3234
|
-
readonly LOGOUT: "/auth/logout";
|
|
3235
|
-
readonly ME: "/auth/me";
|
|
3236
|
-
};
|
|
3237
|
-
};
|
|
3238
|
-
|
|
3239
|
-
export { API_ROUTES, STORAGE_KEYS, type Sa2kitAuthClient, type Sa2kitAuthClientOptions, createSa2kitAuthClient };
|
|
3209
|
+
export { type Sa2kitAuthClient, type Sa2kitAuthClientOptions, createSa2kitAuthClient };
|
|
@@ -4,12 +4,6 @@ import * as better_auth_plugins_email_otp from 'better-auth/plugins/email-otp';
|
|
|
4
4
|
import * as better_auth_plugins_phone_number from 'better-auth/plugins/phone-number';
|
|
5
5
|
import * as better_auth_client from 'better-auth/client';
|
|
6
6
|
import * as better_auth from 'better-auth';
|
|
7
|
-
export { B as BaseApiClient } from '../../../base-api-client-BpmcQt4Q.js';
|
|
8
|
-
export { b as ApiResponse, c as AuthResponse, U as User } from '../../../types-C_W_CoUD.js';
|
|
9
|
-
import '../../../types-BaZccpvk.js';
|
|
10
|
-
import '../../../types-CbTsi9CZ.js';
|
|
11
|
-
import '../../../enums-Dume-V5Y.js';
|
|
12
|
-
import 'drizzle-orm/pg-core';
|
|
13
7
|
|
|
14
8
|
type Sa2kitAuthClientOptions = {
|
|
15
9
|
baseURL: string;
|
|
@@ -3212,28 +3206,4 @@ declare function buildSa2kitAuthClient(options: Sa2kitAuthClientOptions): {
|
|
|
3212
3206
|
type Sa2kitAuthClient = ReturnType<typeof buildSa2kitAuthClient>;
|
|
3213
3207
|
declare function createSa2kitAuthClient(options: Sa2kitAuthClientOptions): Sa2kitAuthClient;
|
|
3214
3208
|
|
|
3215
|
-
|
|
3216
|
-
* Auth Client - Types
|
|
3217
|
-
* API 客户端类型定义
|
|
3218
|
-
*/
|
|
3219
|
-
|
|
3220
|
-
/**
|
|
3221
|
-
* 存储键名
|
|
3222
|
-
*/
|
|
3223
|
-
declare const STORAGE_KEYS: {
|
|
3224
|
-
readonly AUTH_TOKEN: "auth_token";
|
|
3225
|
-
readonly USER_DATA: "user_data";
|
|
3226
|
-
};
|
|
3227
|
-
/**
|
|
3228
|
-
* API 路由
|
|
3229
|
-
*/
|
|
3230
|
-
declare const API_ROUTES: {
|
|
3231
|
-
readonly AUTH: {
|
|
3232
|
-
readonly LOGIN: "/auth/login";
|
|
3233
|
-
readonly REGISTER: "/auth/register";
|
|
3234
|
-
readonly LOGOUT: "/auth/logout";
|
|
3235
|
-
readonly ME: "/auth/me";
|
|
3236
|
-
};
|
|
3237
|
-
};
|
|
3238
|
-
|
|
3239
|
-
export { API_ROUTES, STORAGE_KEYS, type Sa2kitAuthClient, type Sa2kitAuthClientOptions, createSa2kitAuthClient };
|
|
3209
|
+
export { type Sa2kitAuthClient, type Sa2kitAuthClientOptions, createSa2kitAuthClient };
|