@lark-apaas/dataloom 0.1.4-alpha.0 → 0.1.4-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/storage/StorageClient.d.ts +0 -1
- package/lib/storage/StorageClient.d.ts.map +1 -1
- package/lib/storage/StorageClient.js +2 -0
- package/lib/storage/libs/fetch.d.ts.map +1 -1
- package/lib/storage/libs/fetch.js +1 -1
- package/lib/storage/libs/helpers.d.ts.map +1 -1
- package/lib/storage/libs/helpers.js +25 -17
- package/lib/storage/packages/StorageFileApi.d.ts +4 -0
- package/lib/storage/packages/StorageFileApi.d.ts.map +1 -1
- package/lib/storage/packages/StorageFileApi.js +25 -36
- package/lib/storage/utils/csrf.d.ts +8 -12
- package/lib/storage/utils/csrf.d.ts.map +1 -1
- package/lib/storage/utils/csrf.js +3 -5
- package/package.json +1 -1
|
@@ -2,7 +2,6 @@ import type { Fetch } from './libs/fetch';
|
|
|
2
2
|
import type { OnRequestErrorType } from './libs/types';
|
|
3
3
|
import StorageFileApi from './packages/StorageFileApi';
|
|
4
4
|
export interface StorageClientOptions {
|
|
5
|
-
useNewHostname?: boolean;
|
|
6
5
|
enableLogger?: boolean;
|
|
7
6
|
appId?: string;
|
|
8
7
|
onRequestError: (error: OnRequestErrorType) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageClient.d.ts","sourceRoot":"","sources":["../../src/storage/StorageClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"StorageClient.d.ts","sourceRoot":"","sources":["../../src/storage/StorageClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AAEvD,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACrD;AAED,qBAAa,aAAa;IACxB,SAAS,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;gBAG7D,OAAO,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,EACvC,KAAK,CAAC,EAAE,KAAK,EACb,IAAI,CAAC,EAAE,oBAAoB;IAY7B;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;CAkBjC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_HEADERS } from "./libs/constants.js";
|
|
2
|
+
import { StorageError } from "./libs/errors.js";
|
|
2
3
|
import { getStorageBaseUrl, resolveFetch } from "./libs/helpers.js";
|
|
3
4
|
import StorageFileApi from "./packages/StorageFileApi.js";
|
|
4
5
|
class StorageClient {
|
|
@@ -13,6 +14,7 @@ class StorageClient {
|
|
|
13
14
|
if (opts?.enableLogger) this.loggerEnabled = true;
|
|
14
15
|
}
|
|
15
16
|
from(id) {
|
|
17
|
+
if (!this.appId) throw new StorageError('appId is required');
|
|
16
18
|
const url = getStorageBaseUrl(this.appId);
|
|
17
19
|
return new StorageFileApi(url, this.headers, id, this.appId, this.fetch, this.loggerEnabled, this.onRequestError);
|
|
18
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/storage/libs/fetch.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAExF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/storage/libs/fetch.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAExF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAuP3E,wBAAsB,GAAG,CACvB,OAAO,EAAE,KAAK,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,eAAe,EAC5B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAsB,IAAI,CACxB,OAAO,EAAE,KAAK,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,eAAe,EAC5B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAsB,GAAG,CACvB,OAAO,EAAE,KAAK,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,eAAe,EAC5B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,IAAI,CACxB,OAAO,EAAE,KAAK,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,eAAe,EAC5B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAsB,MAAM,CAC1B,OAAO,EAAE,KAAK,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,eAAe,EAC5B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,CAAC,CAUlB"}
|
|
@@ -57,7 +57,7 @@ const handleError = async (error, reject, options)=>{
|
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
const _getRequestParams = (method, options, parameters, body)=>{
|
|
60
|
-
const csrfToken = options?.noCredentials
|
|
60
|
+
const csrfToken = options?.noCredentials ? '' : getCsrfToken();
|
|
61
61
|
const csrfHeaders = csrfToken ? {
|
|
62
62
|
'X-Suda-Csrf-Token': csrfToken
|
|
63
63
|
} : {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/storage/libs/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIpD,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjF,eAAO,MAAM,YAAY,GAAI,cAAc,KAAK,KAAG,KAQlD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,QAAO,MAK5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAElD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,OAAO,QAAQ,CAE/D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAmBhE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAa7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,QAAQ,KAAG,MAqBlD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM,WAQjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KAC9C,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/storage/libs/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIpD,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjF,eAAO,MAAM,YAAY,GAAI,cAAc,KAAK,KAAG,KAQlD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,QAAO,MAK5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAElD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,OAAO,QAAQ,CAE/D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAmBhE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAa7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,QAAQ,KAAG,MAqBlD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM,WAQjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KAC9C,UAyDH,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,WAMhD,CAAC;AAKF,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,YAE/C,CAAC"}
|
|
@@ -41,28 +41,36 @@ const toValidExpiresIn = (expiresIn)=>{
|
|
|
41
41
|
};
|
|
42
42
|
const transformFilePayload = (file)=>{
|
|
43
43
|
const safeFile = file ?? {};
|
|
44
|
-
const
|
|
44
|
+
const createdBy = safeFile.createdBy;
|
|
45
|
+
const updatedBy = safeFile.updatedBy;
|
|
46
|
+
const bucket = safeFile.bucket;
|
|
47
|
+
const bucketCreatedBy = bucket?.createdBy;
|
|
48
|
+
const bucketUpdatedBy = bucket?.updatedBy;
|
|
49
|
+
const pickUserId = (u)=>{
|
|
50
|
+
if ('string' == typeof u) return u;
|
|
51
|
+
return u?.userID ?? u?.name ?? '';
|
|
52
|
+
};
|
|
45
53
|
return {
|
|
46
54
|
name: safeFile.name ?? '',
|
|
47
|
-
bucket_id: safeFile.
|
|
48
|
-
owner:
|
|
55
|
+
bucket_id: safeFile.bucketID ?? '',
|
|
56
|
+
owner: pickUserId(createdBy),
|
|
49
57
|
id: safeFile.id ?? '',
|
|
50
|
-
updated_at: safeFile.
|
|
51
|
-
created_at: safeFile.
|
|
52
|
-
created_by:
|
|
53
|
-
updated_by:
|
|
54
|
-
last_accessed_at: safeFile.
|
|
58
|
+
updated_at: safeFile.updatedAt ?? '',
|
|
59
|
+
created_at: safeFile.createdAt ?? '',
|
|
60
|
+
created_by: pickUserId(createdBy),
|
|
61
|
+
updated_by: pickUserId(updatedBy),
|
|
62
|
+
last_accessed_at: safeFile.lastAccessedAt,
|
|
55
63
|
metadata: safeFile.metadata ?? {},
|
|
56
64
|
buckets: {
|
|
57
|
-
allowed_mime_types:
|
|
58
|
-
created_at:
|
|
59
|
-
file_size_limit:
|
|
60
|
-
id:
|
|
61
|
-
name:
|
|
62
|
-
public:
|
|
63
|
-
updated_at:
|
|
64
|
-
updated_by:
|
|
65
|
-
owner:
|
|
65
|
+
allowed_mime_types: bucket?.allowedMimeTypes ?? [],
|
|
66
|
+
created_at: bucket?.createdAt ?? '',
|
|
67
|
+
file_size_limit: bucket?.fileSizeLimit ?? 0,
|
|
68
|
+
id: bucket?.bucketID ?? safeFile.bucketID ?? '',
|
|
69
|
+
name: bucket?.name ?? '',
|
|
70
|
+
public: bucket?.public ?? false,
|
|
71
|
+
updated_at: bucket?.updatedAt ?? '',
|
|
72
|
+
updated_by: pickUserId(bucketUpdatedBy),
|
|
73
|
+
owner: pickUserId(bucketCreatedBy)
|
|
66
74
|
}
|
|
67
75
|
};
|
|
68
76
|
};
|
|
@@ -122,6 +122,10 @@ export default class StorageFileApi {
|
|
|
122
122
|
/**
|
|
123
123
|
* Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead.
|
|
124
124
|
*
|
|
125
|
+
* 实现:先调 createSignedUrl 拿一个 10 分钟有效的签名链接,再用 fetch 直接拉
|
|
126
|
+
* 该链接的二进制返回。绕开「直连 storage GET → 302 跳 CDN,CDN 响应头
|
|
127
|
+
* `access-control-allow-origin: *` 与 `credentials: 'include'` 冲突」的跨域问题。
|
|
128
|
+
*
|
|
125
129
|
* @param path The full path and file name of the file to be downloaded. For example `folder/image.png`.
|
|
126
130
|
* @param options.transform Transform the asset before serving it to the client.
|
|
127
131
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageFileApi.d.ts","sourceRoot":"","sources":["../../../src/storage/packages/StorageFileApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,KAAK,EAA0B,MAAM,eAAe,CAAC;AASnE,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,aAAa,EACb,kBAAkB,EAElB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"StorageFileApi.d.ts","sourceRoot":"","sources":["../../../src/storage/packages/StorageFileApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,KAAK,EAA0B,MAAM,eAAe,CAAC;AASnE,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,aAAa,EACb,kBAAkB,EAElB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,eAAe,CAAC;AA0DvB,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;gBAG7D,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,EACvC,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK,EACb,aAAa,CAAC,EAAE,OAAO,EACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI;IAWtD;;;;;;OAMG;YACW,cAAc;IA+H5B;;;;;;OAMG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CACN;QACE,IAAI,EAAE,cAAc,CAAC;QACrB,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IACD;;;;;OAKG;IACG,MAAM,CACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,aAAa,GAC1B,OAAO,CACN;QACE,IAAI,EAAE,cAAc,CAAC;QACrB,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IA4CD;;;;;OAKG;IACG,UAAU,CACd,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,aAAa,GAC1B,OAAO,CACN;QACE,IAAI,EAAE,cAAc,CAAC;QACrB,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IAQD;;;;;OAKG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EACJ,WAAW,GACX,eAAe,GACf,IAAI,GACJ,IAAI,GACJ,QAAQ,GACR,cAAc,CAAC,UAAU,CAAC,GAC1B,eAAe,GACf,MAAM,EACV,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CACN;QACE,IAAI,EAAE,cAAc,CAAC;QACrB,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IAID;;;;;;;OAOG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,gBAAgB,CAAA;KAAE,GACvE,OAAO,CACN;QACE,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5B,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IA8BD;;;;;;;;;;OAUG;IACG,gBAAgB,CACpB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GACxC,OAAO,CACN;QACE,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;YACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;SACnB,EAAE,CAAC;QACJ,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IAmCD;;;;;;;;;OASG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,gBAAgB,CAAA;KAAE,GAC1C,OAAO,CACN;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IAuDD;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAClC;QACE,IAAI,EAAE,UAAU,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IAoCD;;;;OAIG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CACrC;QACE,IAAI,EAAE,cAAc,CAAC;QACrB,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IA6FD;;;;OAIG;IACG,IAAI,CACR,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,EACvB,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CACN;QACE,IAAI,EAAE,UAAU,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI,CAAC;KACb,GACD;QACE,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,YAAY,CAAC;KACrB,CACJ;IAwCD,+BAA+B,CAAC,QAAQ,EAAE,MAAM;IAMhD,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI1D,QAAQ,CAAC,IAAI,EAAE,MAAM;IAOrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;IAM3B;;;;OAIG;IACH,OAAO,CAAC,gCAAgC;IAsBxC;;OAEG;YACW,qBAAqB;CAuBpC"}
|
|
@@ -46,17 +46,17 @@ class StorageFileApi {
|
|
|
46
46
|
}, void 0, {
|
|
47
47
|
psmName: 'Storage.Upload.PreUpload'
|
|
48
48
|
});
|
|
49
|
-
const { uploadID,
|
|
50
|
-
if (!
|
|
49
|
+
const { uploadID, uploadUrl } = res?.data ?? {};
|
|
50
|
+
if (!uploadUrl || !uploadID) return {
|
|
51
51
|
data: null,
|
|
52
|
-
error: new StorageError('
|
|
52
|
+
error: new StorageError('uploadUrl or uploadID is empty')
|
|
53
53
|
};
|
|
54
54
|
{
|
|
55
55
|
const tosHeaders = {};
|
|
56
56
|
if (contentDisposition) tosHeaders['content-disposition'] = `attachment; filename="${sanitizeFileName(contentDisposition)}"`;
|
|
57
57
|
if (options.cacheControl || 0 === options.cacheControl) tosHeaders['cache-control'] = `max-age=${options.cacheControl}`;
|
|
58
58
|
if (options.contentType) tosHeaders['content-type'] = options.contentType;
|
|
59
|
-
const tosRes = await put(this.fetch,
|
|
59
|
+
const tosRes = await put(this.fetch, uploadUrl, fileBody, {
|
|
60
60
|
noResolveJson: true,
|
|
61
61
|
noCredentials: true,
|
|
62
62
|
headers: tosHeaders,
|
|
@@ -76,12 +76,13 @@ class StorageFileApi {
|
|
|
76
76
|
}, void 0, {
|
|
77
77
|
psmName: 'Storage.Upload.Callback'
|
|
78
78
|
});
|
|
79
|
+
const callbackData = callbackRes?.data;
|
|
79
80
|
return {
|
|
80
|
-
data:
|
|
81
|
-
id: '',
|
|
82
|
-
file_path: '',
|
|
83
|
-
bucket_id: '',
|
|
84
|
-
download_url: ''
|
|
81
|
+
data: {
|
|
82
|
+
id: callbackData?.id ?? '',
|
|
83
|
+
file_path: callbackData?.filePath ?? '',
|
|
84
|
+
bucket_id: callbackData?.bucketID ?? '',
|
|
85
|
+
download_url: callbackData?.downloadURL ?? ''
|
|
85
86
|
},
|
|
86
87
|
error: null
|
|
87
88
|
};
|
|
@@ -166,42 +167,30 @@ class StorageFileApi {
|
|
|
166
167
|
}
|
|
167
168
|
async download(path, _options) {
|
|
168
169
|
try {
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
|
|
170
|
+
const SIGNED_URL_EXPIRES_IN_SECONDS = 600;
|
|
171
|
+
const { data: signed, error: signedError } = await this.createSignedUrl(path, SIGNED_URL_EXPIRES_IN_SECONDS);
|
|
172
|
+
if (signedError || !signed?.signedUrl) return {
|
|
173
|
+
data: null,
|
|
174
|
+
error: signedError ?? new StorageError('failed to create signed url for download')
|
|
175
|
+
};
|
|
176
|
+
const res = await get(this.fetch, signed.signedUrl, {
|
|
172
177
|
noResolveJson: true,
|
|
178
|
+
noCredentials: true,
|
|
173
179
|
logFetch: this.loggerEnabled,
|
|
174
180
|
onRequestError: this.onRequestError
|
|
175
181
|
}, void 0, {
|
|
176
182
|
psmName: 'Storage.Download'
|
|
177
183
|
});
|
|
178
|
-
if (res.
|
|
179
|
-
const resBody = await res.blob();
|
|
180
|
-
return {
|
|
181
|
-
data: resBody,
|
|
182
|
-
error: null
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
const resBody = await res.json();
|
|
186
|
-
return {
|
|
184
|
+
if (!res.ok) return {
|
|
187
185
|
data: null,
|
|
188
|
-
error:
|
|
186
|
+
error: new StorageError(`download file error: ${res.status} ${res.statusText}`)
|
|
187
|
+
};
|
|
188
|
+
const blob = await res.blob();
|
|
189
|
+
return {
|
|
190
|
+
data: blob,
|
|
191
|
+
error: null
|
|
189
192
|
};
|
|
190
193
|
} catch (error) {
|
|
191
|
-
if (error && 'object' == typeof error && 'originalError' in error) {
|
|
192
|
-
const originalError = error.originalError;
|
|
193
|
-
if (originalError instanceof Response && originalError.redirected) try {
|
|
194
|
-
return {
|
|
195
|
-
data: null,
|
|
196
|
-
error: new StorageError(await originalError.text())
|
|
197
|
-
};
|
|
198
|
-
} catch (_e) {
|
|
199
|
-
return {
|
|
200
|
-
data: null,
|
|
201
|
-
error: new StorageUnknownError('download file error', error)
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
194
|
if (isCustomError(error) || isStorageError(error)) return {
|
|
206
195
|
data: null,
|
|
207
196
|
error: error
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* This intentionally re-implements the toolkit's `getCsrfToken` logic inside
|
|
6
|
-
* dataloom: dataloom is a low-level package and must not import toolkit
|
|
7
|
-
* (package boundary B1/B2). Keep the lookup order identical to toolkit:
|
|
8
|
-
* 1. read the `suda-csrf-token` cookie (URL-decoded)
|
|
9
|
-
* 2. fall back to `window.csrfToken` (set in fullstack mode)
|
|
10
|
-
* 3. return '' in non-browser environments (no document)
|
|
11
|
-
*
|
|
12
|
-
* @returns the csrf token, or an empty string when unavailable.
|
|
2
|
+
* 获取cookie中存放的suda-csrf-token值
|
|
3
|
+
* @returns {string | null} - suda-csrf-token的值,如果不存在则返回null
|
|
13
4
|
*/
|
|
14
|
-
export declare function getCsrfToken(): string;
|
|
5
|
+
export declare function getCsrfToken(): string | null;
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
csrfToken?: string;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
15
11
|
//# sourceMappingURL=csrf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../src/storage/utils/csrf.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../src/storage/utils/csrf.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,kBAiB3B;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;CACF"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
function getCsrfToken() {
|
|
2
|
-
if ('undefined' == typeof document) return '';
|
|
3
2
|
const cookieName = 'suda-csrf-token';
|
|
4
|
-
const cookies =
|
|
3
|
+
const cookies = document.cookie.split('; ');
|
|
5
4
|
for (const cookie of cookies){
|
|
6
5
|
const [name, value] = cookie.split('=');
|
|
7
|
-
if (name === cookieName
|
|
6
|
+
if (name === cookieName) return decodeURIComponent(value);
|
|
8
7
|
}
|
|
9
|
-
|
|
10
|
-
return '';
|
|
8
|
+
return window.csrfToken ?? null;
|
|
11
9
|
}
|
|
12
10
|
export { getCsrfToken };
|