@saltcorn/data 1.4.1 → 1.4.2
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/db/state.d.ts +1 -1
- package/dist/db/state.d.ts.map +1 -1
- package/dist/db/state.js +5 -1
- package/dist/db/state.js.map +1 -1
- package/dist/mobile-mocks/npm/dockerode.d.ts +1 -0
- package/dist/mobile-mocks/npm/dockerode.d.ts.map +1 -0
- package/dist/mobile-mocks/npm/dockerode.js +2 -0
- package/dist/mobile-mocks/npm/dockerode.js.map +1 -0
- package/dist/models/internal/s3_helpers.d.ts +54 -0
- package/dist/models/internal/s3_helpers.d.ts.map +1 -0
- package/dist/models/internal/s3_helpers.js +561 -0
- package/dist/models/internal/s3_helpers.js.map +1 -0
- package/dist/models/s3_helpers.d.ts +54 -0
- package/dist/models/s3_helpers.d.ts.map +1 -0
- package/dist/models/s3_helpers.js +505 -0
- package/dist/models/s3_helpers.js.map +1 -0
- package/dist/test-utils/mocks.d.ts +203 -0
- package/dist/test-utils/mocks.d.ts.map +1 -0
- package/dist/test-utils/mocks.js +329 -0
- package/dist/test-utils/mocks.js.map +1 -0
- package/dist/tests/calc.test.js +1 -1
- package/dist/tests/calc.test.js.map +1 -1
- package/dist/tests/table_sync_info.test.d.ts +2 -0
- package/dist/tests/table_sync_info.test.d.ts.map +1 -0
- package/dist/tests/table_sync_info.test.js +62 -0
- package/dist/tests/table_sync_info.test.js.map +1 -0
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/viewable_fields.d.ts +172 -0
- package/dist/viewable_fields.d.ts.map +1 -0
- package/dist/viewable_fields.js +1562 -0
- package/dist/viewable_fields.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.publicUrlToRelativePath = exports.getServeUrl = exports.getPublicFileUrl = exports.getSignedFileUrl = exports.downloadBuffer = exports.uploadBuffer = exports.deleteObject = exports.copyObject = exports.setObjectMetadata = exports.headObject = exports.listS3Folder = exports.getS3Client = exports.getResolvedBucket = exports.buildKeyFromRelative = exports.relativeKeyToPath = exports.isS3Enabled = void 0;
|
|
7
|
+
const db_1 = __importDefault(require("../../db"));
|
|
8
|
+
const getStateInstance = () => {
|
|
9
|
+
const { getState } = require("../../db/state");
|
|
10
|
+
return getState();
|
|
11
|
+
};
|
|
12
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
13
|
+
const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
|
|
14
|
+
const path = require("path");
|
|
15
|
+
const posixPath = path.posix;
|
|
16
|
+
const META_KEYS = {
|
|
17
|
+
min_role_read: "sc-min-role",
|
|
18
|
+
user_id: "sc-user-id",
|
|
19
|
+
mime_super: "sc-mime-super",
|
|
20
|
+
mime_sub: "sc-mime-sub",
|
|
21
|
+
filename: "sc-filename",
|
|
22
|
+
};
|
|
23
|
+
let cachedClient = null;
|
|
24
|
+
let cachedClientKey = null;
|
|
25
|
+
const normaliseEndpoint = (endpoint, secure = true) => {
|
|
26
|
+
if (!endpoint)
|
|
27
|
+
return undefined;
|
|
28
|
+
if (/^https?:\/\//i.test(endpoint))
|
|
29
|
+
return endpoint;
|
|
30
|
+
return `${secure ? "https" : "http"}://${endpoint}`;
|
|
31
|
+
};
|
|
32
|
+
// Check is the endpoint is of Google Cloud Storage
|
|
33
|
+
const isGcsEndpoint = (endpoint) => {
|
|
34
|
+
if (!endpoint)
|
|
35
|
+
return false;
|
|
36
|
+
try {
|
|
37
|
+
const host = new URL(normaliseEndpoint(endpoint)).hostname.toLowerCase();
|
|
38
|
+
return (host === "storage.googleapis.com" ||
|
|
39
|
+
host.endsWith(".storage.googleapis.com"));
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
return /storage\.googleapis\.com/i.test(endpoint);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const normaliseEndpointAndBucket = (rawSettings) => {
|
|
46
|
+
const secure = rawSettings.secure;
|
|
47
|
+
const endpoint = normaliseEndpoint(rawSettings.endpoint, secure);
|
|
48
|
+
let bucket = rawSettings.bucket?.trim();
|
|
49
|
+
let bucketInEndpointHost = false;
|
|
50
|
+
if (!endpoint)
|
|
51
|
+
return { ...rawSettings, endpoint, bucket };
|
|
52
|
+
try {
|
|
53
|
+
const url = new URL(endpoint);
|
|
54
|
+
const pathParts = url.pathname.split("/").filter((p) => p.length);
|
|
55
|
+
if (bucket &&
|
|
56
|
+
url.hostname.toLowerCase().startsWith(`${bucket.toLowerCase()}.`))
|
|
57
|
+
bucketInEndpointHost = true;
|
|
58
|
+
const bucketFromPath = !bucket && pathParts.length ? pathParts[0] : undefined;
|
|
59
|
+
bucket = bucket || bucketFromPath;
|
|
60
|
+
let endpointHost = url.hostname;
|
|
61
|
+
if (bucket &&
|
|
62
|
+
endpointHost.toLowerCase().startsWith(`${bucket.toLowerCase()}.`)) {
|
|
63
|
+
bucketInEndpointHost = true;
|
|
64
|
+
endpointHost = endpointHost.slice(bucket.length + 1);
|
|
65
|
+
}
|
|
66
|
+
let cleanedPath = "/";
|
|
67
|
+
if (bucket &&
|
|
68
|
+
pathParts[0] &&
|
|
69
|
+
pathParts[0].toLowerCase() === bucket.toLowerCase()) {
|
|
70
|
+
const remainder = pathParts.slice(1).join("/");
|
|
71
|
+
cleanedPath = remainder ? `/${remainder}` : "/";
|
|
72
|
+
}
|
|
73
|
+
else if (pathParts.length)
|
|
74
|
+
cleanedPath = `/${pathParts.join("/")}`;
|
|
75
|
+
const portSegment = url.port ? `:${url.port}` : "";
|
|
76
|
+
const normalizedEndpoint = `${url.protocol}//${endpointHost}${portSegment}${cleanedPath}`.replace(/\/+$/, "");
|
|
77
|
+
return {
|
|
78
|
+
...rawSettings,
|
|
79
|
+
endpoint: normalizedEndpoint,
|
|
80
|
+
bucket,
|
|
81
|
+
bucketInEndpointHost,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
return { ...rawSettings, endpoint, bucket };
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const stripUrlPrefix = (input) => {
|
|
89
|
+
if (!input)
|
|
90
|
+
return "";
|
|
91
|
+
const trimmed = input.trim();
|
|
92
|
+
const normalizedScheme = trimmed.replace(/^(https?):\/(?!\/)/i, "$1://");
|
|
93
|
+
try {
|
|
94
|
+
const parsed = new URL(normalizedScheme);
|
|
95
|
+
return parsed.pathname || "";
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
return trimmed.replace(/^https?:\/+[^/]+/i, "");
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const cleanSegment = (segment) => {
|
|
102
|
+
if (!segment)
|
|
103
|
+
return "";
|
|
104
|
+
const stripped = stripUrlPrefix(segment);
|
|
105
|
+
const replaced = stripped.replace(/\\/g, "/");
|
|
106
|
+
const parts = replaced.split("/").filter((part) => part.length);
|
|
107
|
+
const stack = [];
|
|
108
|
+
for (const part of parts) {
|
|
109
|
+
if (part === ".")
|
|
110
|
+
continue;
|
|
111
|
+
if (part === "..")
|
|
112
|
+
stack.pop();
|
|
113
|
+
else
|
|
114
|
+
stack.push(part);
|
|
115
|
+
}
|
|
116
|
+
return stack.join("/");
|
|
117
|
+
};
|
|
118
|
+
const ensureTrailingSlash = (input) => {
|
|
119
|
+
if (!input)
|
|
120
|
+
return "";
|
|
121
|
+
return input.endsWith("/") ? input : `${input}/`;
|
|
122
|
+
};
|
|
123
|
+
const getS3Settings = () => {
|
|
124
|
+
const state = getStateInstance();
|
|
125
|
+
const raw = {
|
|
126
|
+
bucket: state?.getConfig("storage_s3_bucket"),
|
|
127
|
+
endpoint: state?.getConfig("storage_s3_endpoint"),
|
|
128
|
+
region: isGcsEndpoint(state?.getConfig("storage_s3_endpoint"))
|
|
129
|
+
? "auto"
|
|
130
|
+
: state?.getConfig("storage_s3_region") || "us-east-1",
|
|
131
|
+
secure: !!state?.getConfig("storage_s3_secure", true),
|
|
132
|
+
accessKey: state?.getConfig("storage_s3_access_key"),
|
|
133
|
+
accessSecret: state?.getConfig("storage_s3_access_secret"),
|
|
134
|
+
};
|
|
135
|
+
return normaliseEndpointAndBucket(raw);
|
|
136
|
+
};
|
|
137
|
+
const isS3Enabled = () => !!getStateInstance()?.getConfig("storage_s3_enabled");
|
|
138
|
+
exports.isS3Enabled = isS3Enabled;
|
|
139
|
+
const getTenantRoot = () => cleanSegment(db_1.default.getTenantSchema());
|
|
140
|
+
const cleanRelativePath = (relPath) => {
|
|
141
|
+
if (!relPath)
|
|
142
|
+
return "";
|
|
143
|
+
const pathOnly = stripUrlPrefix(relPath);
|
|
144
|
+
if (!pathOnly || pathOnly === "/" || pathOnly === ".")
|
|
145
|
+
return "";
|
|
146
|
+
return cleanSegment(pathOnly);
|
|
147
|
+
};
|
|
148
|
+
const relativeKeyToPath = (key) => {
|
|
149
|
+
const root = getTenantRoot();
|
|
150
|
+
if (!root)
|
|
151
|
+
return key;
|
|
152
|
+
if (key === root)
|
|
153
|
+
return "";
|
|
154
|
+
if (key.startsWith(`${root}/`))
|
|
155
|
+
return key.slice(root.length + 1);
|
|
156
|
+
return key;
|
|
157
|
+
};
|
|
158
|
+
exports.relativeKeyToPath = relativeKeyToPath;
|
|
159
|
+
const buildKeyFromRelative = (relPath) => {
|
|
160
|
+
const root = getTenantRoot();
|
|
161
|
+
const cleanedRel = cleanRelativePath(relPath);
|
|
162
|
+
if (root && cleanedRel)
|
|
163
|
+
return `${root}/${cleanedRel}`;
|
|
164
|
+
if (root && !cleanedRel)
|
|
165
|
+
return root;
|
|
166
|
+
return cleanedRel;
|
|
167
|
+
};
|
|
168
|
+
exports.buildKeyFromRelative = buildKeyFromRelative;
|
|
169
|
+
const folderPrefix = (folder) => {
|
|
170
|
+
const key = (0, exports.buildKeyFromRelative)(cleanRelativePath(folder));
|
|
171
|
+
if (!key)
|
|
172
|
+
return "";
|
|
173
|
+
return ensureTrailingSlash(key);
|
|
174
|
+
};
|
|
175
|
+
const requireBucket = () => {
|
|
176
|
+
const { bucket } = getS3Settings();
|
|
177
|
+
if (!bucket)
|
|
178
|
+
throw new Error("S3 bucket is not configured");
|
|
179
|
+
return bucket;
|
|
180
|
+
};
|
|
181
|
+
const getResolvedBucket = () => {
|
|
182
|
+
const { bucket } = getS3Settings();
|
|
183
|
+
return bucket;
|
|
184
|
+
};
|
|
185
|
+
exports.getResolvedBucket = getResolvedBucket;
|
|
186
|
+
const clientCacheKey = (settings) => JSON.stringify({
|
|
187
|
+
endpoint: settings.endpoint,
|
|
188
|
+
region: settings.region,
|
|
189
|
+
accessKey: settings.accessKey,
|
|
190
|
+
accessSecret: settings.accessSecret,
|
|
191
|
+
});
|
|
192
|
+
const getS3Client = () => {
|
|
193
|
+
const settings = getS3Settings();
|
|
194
|
+
const cacheKey = clientCacheKey(settings);
|
|
195
|
+
if (!cachedClient || cachedClientKey !== cacheKey) {
|
|
196
|
+
const cfg = {
|
|
197
|
+
region: settings.region,
|
|
198
|
+
forcePathStyle: true,
|
|
199
|
+
};
|
|
200
|
+
if (settings.endpoint)
|
|
201
|
+
cfg.endpoint = settings.endpoint;
|
|
202
|
+
if (settings.accessKey && settings.accessSecret) {
|
|
203
|
+
cfg.credentials = {
|
|
204
|
+
accessKeyId: settings.accessKey,
|
|
205
|
+
secretAccessKey: settings.accessSecret,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
const client = new client_s3_1.S3(cfg);
|
|
209
|
+
const isGcs = isGcsEndpoint(settings.endpoint);
|
|
210
|
+
// Wrap send() to (optionally) sanitize requests for GCS and to log errors
|
|
211
|
+
const origSend = client.send.bind(client);
|
|
212
|
+
client.send = async (command) => {
|
|
213
|
+
const name = command?.constructor?.name;
|
|
214
|
+
if (isGcs && command?.input) {
|
|
215
|
+
const input = command.input;
|
|
216
|
+
if (name === "PutObjectCommand") {
|
|
217
|
+
// GCS does reject some AWS-only headers
|
|
218
|
+
delete input.ACL;
|
|
219
|
+
delete input.StorageClass;
|
|
220
|
+
if (input.CacheControl == null)
|
|
221
|
+
delete input.CacheControl;
|
|
222
|
+
if (input.ServerSideEncryption == null)
|
|
223
|
+
delete input.ServerSideEncryption;
|
|
224
|
+
if (input.SSEKMSKeyId == null)
|
|
225
|
+
delete input.SSEKMSKeyId;
|
|
226
|
+
}
|
|
227
|
+
else if (name === "CopyObjectCommand") {
|
|
228
|
+
// Ensure CopySource format is acceptable to GCS and remove AWS-only headers
|
|
229
|
+
if (typeof input.CopySource === "string") {
|
|
230
|
+
const src = input.CopySource.replace(/^\/+/, "");
|
|
231
|
+
input.CopySource = `/${src}`;
|
|
232
|
+
}
|
|
233
|
+
delete input.ACL;
|
|
234
|
+
delete input.StorageClass;
|
|
235
|
+
if (input.ServerSideEncryption == null)
|
|
236
|
+
delete input.ServerSideEncryption;
|
|
237
|
+
if (input.SSEKMSKeyId == null)
|
|
238
|
+
delete input.SSEKMSKeyId;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
try {
|
|
242
|
+
const out = await origSend(command);
|
|
243
|
+
return out;
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
throw e;
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
cachedClient = client;
|
|
250
|
+
cachedClientKey = cacheKey;
|
|
251
|
+
}
|
|
252
|
+
return cachedClient;
|
|
253
|
+
};
|
|
254
|
+
exports.getS3Client = getS3Client;
|
|
255
|
+
const encodeMetadata = (meta) => {
|
|
256
|
+
const result = {};
|
|
257
|
+
for (const [key, storageKey] of Object.entries(META_KEYS)) {
|
|
258
|
+
const value = meta[key];
|
|
259
|
+
if (typeof value === "undefined" || value === null)
|
|
260
|
+
continue;
|
|
261
|
+
result[storageKey] = `${value}`;
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
264
|
+
};
|
|
265
|
+
const decodeMetadata = (meta) => {
|
|
266
|
+
if (!meta)
|
|
267
|
+
return {};
|
|
268
|
+
const lowered = {};
|
|
269
|
+
for (const [key, value] of Object.entries(meta)) {
|
|
270
|
+
lowered[key.toLowerCase()] = value;
|
|
271
|
+
}
|
|
272
|
+
const out = {};
|
|
273
|
+
if (lowered[META_KEYS.min_role_read])
|
|
274
|
+
out.min_role_read = +lowered[META_KEYS.min_role_read];
|
|
275
|
+
if (lowered[META_KEYS.user_id])
|
|
276
|
+
out.user_id = +lowered[META_KEYS.user_id];
|
|
277
|
+
if (lowered[META_KEYS.mime_super])
|
|
278
|
+
out.mime_super = lowered[META_KEYS.mime_super];
|
|
279
|
+
if (lowered[META_KEYS.mime_sub])
|
|
280
|
+
out.mime_sub = lowered[META_KEYS.mime_sub];
|
|
281
|
+
if (lowered[META_KEYS.filename])
|
|
282
|
+
out.filename = lowered[META_KEYS.filename];
|
|
283
|
+
return out;
|
|
284
|
+
};
|
|
285
|
+
const streamToBuffer = async (body) => {
|
|
286
|
+
if (!body)
|
|
287
|
+
return Buffer.alloc(0);
|
|
288
|
+
if (typeof body.transformToByteArray === "function") {
|
|
289
|
+
const arr = await body.transformToByteArray();
|
|
290
|
+
return Buffer.from(arr);
|
|
291
|
+
}
|
|
292
|
+
const chunks = [];
|
|
293
|
+
for await (const chunk of body) {
|
|
294
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
295
|
+
}
|
|
296
|
+
return Buffer.concat(chunks);
|
|
297
|
+
};
|
|
298
|
+
const listS3Folder = async (folder, opts = {}) => {
|
|
299
|
+
const bucket = requireBucket();
|
|
300
|
+
const client = (0, exports.getS3Client)();
|
|
301
|
+
const recursive = !!opts.recursive;
|
|
302
|
+
const folderRel = cleanRelativePath(folder || "");
|
|
303
|
+
const prefix = folderPrefix(folder || "");
|
|
304
|
+
const folderRelWithSlash = folderRel ? `${folderRel}/` : "";
|
|
305
|
+
const files = [];
|
|
306
|
+
const directorySet = new Set();
|
|
307
|
+
let ContinuationToken;
|
|
308
|
+
const captureDirectory = (dirPath) => {
|
|
309
|
+
const cleaned = cleanRelativePath(dirPath || "");
|
|
310
|
+
if (!cleaned)
|
|
311
|
+
return;
|
|
312
|
+
directorySet.add(cleaned);
|
|
313
|
+
};
|
|
314
|
+
const relativeWithinFolder = (relPath) => {
|
|
315
|
+
if (!folderRel)
|
|
316
|
+
return relPath;
|
|
317
|
+
if (relPath === folderRel)
|
|
318
|
+
return "";
|
|
319
|
+
if (relPath.startsWith(folderRelWithSlash))
|
|
320
|
+
return relPath.slice(folderRelWithSlash.length);
|
|
321
|
+
return relPath;
|
|
322
|
+
};
|
|
323
|
+
do {
|
|
324
|
+
const resp = await client.send(new client_s3_1.ListObjectsV2Command({
|
|
325
|
+
Bucket: bucket,
|
|
326
|
+
Prefix: prefix || undefined,
|
|
327
|
+
Delimiter: recursive ? undefined : "/",
|
|
328
|
+
ContinuationToken,
|
|
329
|
+
}));
|
|
330
|
+
const contents = resp.Contents || [];
|
|
331
|
+
for (const obj of contents) {
|
|
332
|
+
if (!obj.Key)
|
|
333
|
+
continue;
|
|
334
|
+
const isDirPlaceholder = obj.Key.endsWith("/");
|
|
335
|
+
const keyWithoutSlash = isDirPlaceholder
|
|
336
|
+
? obj.Key.replace(/\/+$/, "")
|
|
337
|
+
: obj.Key;
|
|
338
|
+
if (!keyWithoutSlash)
|
|
339
|
+
continue;
|
|
340
|
+
const relativePath = (0, exports.relativeKeyToPath)(keyWithoutSlash);
|
|
341
|
+
if (isDirPlaceholder) {
|
|
342
|
+
const withinFolder = relativeWithinFolder(relativePath);
|
|
343
|
+
if (!withinFolder)
|
|
344
|
+
continue;
|
|
345
|
+
const immediateChild = withinFolder.split("/")[0];
|
|
346
|
+
const dirPath = folderRel
|
|
347
|
+
? `${folderRel}/${immediateChild}`
|
|
348
|
+
: immediateChild;
|
|
349
|
+
captureDirectory(dirPath);
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
files.push({
|
|
353
|
+
key: obj.Key,
|
|
354
|
+
relativePath,
|
|
355
|
+
size: obj.Size || 0,
|
|
356
|
+
lastModified: obj.LastModified,
|
|
357
|
+
});
|
|
358
|
+
const withinFolder = relativeWithinFolder(relativePath);
|
|
359
|
+
if (withinFolder.includes("/")) {
|
|
360
|
+
const immediateChild = withinFolder.split("/")[0];
|
|
361
|
+
const dirPath = folderRel
|
|
362
|
+
? `${folderRel}/${immediateChild}`
|
|
363
|
+
: immediateChild;
|
|
364
|
+
captureDirectory(dirPath);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (!recursive) {
|
|
368
|
+
for (const cp of resp.CommonPrefixes || []) {
|
|
369
|
+
if (!cp.Prefix)
|
|
370
|
+
continue;
|
|
371
|
+
const rel = (0, exports.relativeKeyToPath)(cp.Prefix.replace(/\/$/, ""));
|
|
372
|
+
captureDirectory(rel);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
ContinuationToken = resp.IsTruncated
|
|
376
|
+
? resp.NextContinuationToken
|
|
377
|
+
: undefined;
|
|
378
|
+
} while (ContinuationToken);
|
|
379
|
+
const directories = Array.from(directorySet).sort();
|
|
380
|
+
return { files, directories };
|
|
381
|
+
};
|
|
382
|
+
exports.listS3Folder = listS3Folder;
|
|
383
|
+
const headObject = async (relPath) => {
|
|
384
|
+
const bucket = requireBucket();
|
|
385
|
+
const client = (0, exports.getS3Client)();
|
|
386
|
+
const Key = (0, exports.buildKeyFromRelative)(relPath);
|
|
387
|
+
try {
|
|
388
|
+
const resp = await client.send(new client_s3_1.HeadObjectCommand({
|
|
389
|
+
Bucket: bucket,
|
|
390
|
+
Key,
|
|
391
|
+
}));
|
|
392
|
+
return {
|
|
393
|
+
key: Key,
|
|
394
|
+
relativePath: (0, exports.relativeKeyToPath)(Key),
|
|
395
|
+
size: resp.ContentLength || 0,
|
|
396
|
+
lastModified: resp.LastModified,
|
|
397
|
+
metadata: decodeMetadata(resp.Metadata),
|
|
398
|
+
contentType: resp.ContentType,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
catch (e) {
|
|
402
|
+
if (e?.$metadata?.httpStatusCode === 404)
|
|
403
|
+
return null;
|
|
404
|
+
throw e;
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
exports.headObject = headObject;
|
|
408
|
+
const copyWithinBucket = async (sourceKey, targetKey, metadata, contentType) => {
|
|
409
|
+
const bucket = requireBucket();
|
|
410
|
+
const client = (0, exports.getS3Client)();
|
|
411
|
+
const params = {
|
|
412
|
+
Bucket: bucket,
|
|
413
|
+
CopySource: encodeURI(`${bucket}/${sourceKey}`),
|
|
414
|
+
Key: targetKey,
|
|
415
|
+
};
|
|
416
|
+
if (metadata) {
|
|
417
|
+
params.MetadataDirective = "REPLACE";
|
|
418
|
+
params.Metadata = encodeMetadata(metadata);
|
|
419
|
+
if (contentType)
|
|
420
|
+
params.ContentType = contentType;
|
|
421
|
+
}
|
|
422
|
+
await client.send(new client_s3_1.CopyObjectCommand(params));
|
|
423
|
+
};
|
|
424
|
+
const setObjectMetadata = async (relPath, metadata) => {
|
|
425
|
+
const Key = (0, exports.buildKeyFromRelative)(relPath);
|
|
426
|
+
const existing = await (0, exports.headObject)(relPath);
|
|
427
|
+
await copyWithinBucket(Key, Key, metadata, existing?.contentType);
|
|
428
|
+
};
|
|
429
|
+
exports.setObjectMetadata = setObjectMetadata;
|
|
430
|
+
const copyObject = async (fromRelPath, toRelPath, opts = {}) => {
|
|
431
|
+
const sourceKey = (0, exports.buildKeyFromRelative)(fromRelPath);
|
|
432
|
+
const targetKey = (0, exports.buildKeyFromRelative)(toRelPath);
|
|
433
|
+
let metadata = opts.metadata;
|
|
434
|
+
let contentType;
|
|
435
|
+
if (opts.metadata) {
|
|
436
|
+
const head = await (0, exports.headObject)(fromRelPath);
|
|
437
|
+
contentType = head?.contentType;
|
|
438
|
+
}
|
|
439
|
+
await copyWithinBucket(sourceKey, targetKey, metadata, contentType);
|
|
440
|
+
};
|
|
441
|
+
exports.copyObject = copyObject;
|
|
442
|
+
const deleteObject = async (relPath) => {
|
|
443
|
+
const bucket = requireBucket();
|
|
444
|
+
const client = (0, exports.getS3Client)();
|
|
445
|
+
const Key = (0, exports.buildKeyFromRelative)(relPath);
|
|
446
|
+
await client.send(new client_s3_1.DeleteObjectCommand({ Bucket: bucket, Key }));
|
|
447
|
+
};
|
|
448
|
+
exports.deleteObject = deleteObject;
|
|
449
|
+
const uploadBuffer = async (relPath, buffer, mimetype, metadata) => {
|
|
450
|
+
const bucket = requireBucket();
|
|
451
|
+
const client = (0, exports.getS3Client)();
|
|
452
|
+
const Key = (0, exports.buildKeyFromRelative)(relPath);
|
|
453
|
+
await client.send(new client_s3_1.PutObjectCommand({
|
|
454
|
+
Bucket: bucket,
|
|
455
|
+
Key,
|
|
456
|
+
Body: buffer,
|
|
457
|
+
ContentType: mimetype,
|
|
458
|
+
Metadata: encodeMetadata(metadata),
|
|
459
|
+
}));
|
|
460
|
+
};
|
|
461
|
+
exports.uploadBuffer = uploadBuffer;
|
|
462
|
+
const downloadBuffer = async (relPath) => {
|
|
463
|
+
const bucket = requireBucket();
|
|
464
|
+
const client = (0, exports.getS3Client)();
|
|
465
|
+
const Key = (0, exports.buildKeyFromRelative)(relPath);
|
|
466
|
+
const resp = await client.send(new client_s3_1.GetObjectCommand({
|
|
467
|
+
Bucket: bucket,
|
|
468
|
+
Key,
|
|
469
|
+
}));
|
|
470
|
+
return await streamToBuffer(resp.Body);
|
|
471
|
+
};
|
|
472
|
+
exports.downloadBuffer = downloadBuffer;
|
|
473
|
+
const getSignedFileUrl = async (relPath, opts = {}) => {
|
|
474
|
+
const bucket = requireBucket();
|
|
475
|
+
const client = (0, exports.getS3Client)();
|
|
476
|
+
const Key = (0, exports.buildKeyFromRelative)(relPath);
|
|
477
|
+
const params = {
|
|
478
|
+
Bucket: bucket,
|
|
479
|
+
Key,
|
|
480
|
+
};
|
|
481
|
+
if (opts.download) {
|
|
482
|
+
const filename = opts.filename || posixPath.basename(relPath);
|
|
483
|
+
params.ResponseContentDisposition = `attachment; filename="${filename}"`;
|
|
484
|
+
}
|
|
485
|
+
const command = new client_s3_1.GetObjectCommand(params);
|
|
486
|
+
return await (0, s3_request_presigner_1.getSignedUrl)(client, command, {
|
|
487
|
+
expiresIn: opts.expiresIn || 300,
|
|
488
|
+
});
|
|
489
|
+
};
|
|
490
|
+
exports.getSignedFileUrl = getSignedFileUrl;
|
|
491
|
+
const getPublicFileUrl = (relPath, opts = {}) => {
|
|
492
|
+
const settings = getS3Settings();
|
|
493
|
+
const Key = (0, exports.buildKeyFromRelative)(relPath);
|
|
494
|
+
const endpoint = settings.endpoint || "";
|
|
495
|
+
const bucket = requireBucket();
|
|
496
|
+
const baseUrl = endpoint
|
|
497
|
+
? `${endpoint.replace(/\/$/, "")}/${bucket}`
|
|
498
|
+
: `https://${bucket}.s3.${settings.region}.amazonaws.com`;
|
|
499
|
+
const url = `${baseUrl}/${encodeURI(Key)}`;
|
|
500
|
+
if (!opts.download)
|
|
501
|
+
return url;
|
|
502
|
+
const filename = opts.filename || posixPath.basename(relPath);
|
|
503
|
+
const cd = `attachment; filename="${encodeURIComponent(filename)}"`;
|
|
504
|
+
const joiner = url.includes("?") ? "&" : "?";
|
|
505
|
+
return `${url}${joiner}response-content-disposition=${cd}`;
|
|
506
|
+
};
|
|
507
|
+
exports.getPublicFileUrl = getPublicFileUrl;
|
|
508
|
+
const getServeUrl = async (relPath, opts = {}) => {
|
|
509
|
+
try {
|
|
510
|
+
return await (0, exports.getSignedFileUrl)(relPath, opts);
|
|
511
|
+
}
|
|
512
|
+
catch (e) {
|
|
513
|
+
return (0, exports.getPublicFileUrl)(relPath, opts);
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
exports.getServeUrl = getServeUrl;
|
|
517
|
+
const publicUrlToRelativePath = (url) => {
|
|
518
|
+
if (!url)
|
|
519
|
+
return null;
|
|
520
|
+
const trimmed = url.trim();
|
|
521
|
+
if (!trimmed)
|
|
522
|
+
return null;
|
|
523
|
+
const settings = getS3Settings();
|
|
524
|
+
const bucket = settings.bucket;
|
|
525
|
+
if (!bucket)
|
|
526
|
+
return null;
|
|
527
|
+
const bases = [];
|
|
528
|
+
const endpointBase = settings.endpoint?.replace(/\/$/, "");
|
|
529
|
+
if (endpointBase) {
|
|
530
|
+
bases.push(`${endpointBase}/${bucket}/`);
|
|
531
|
+
try {
|
|
532
|
+
const parsed = new URL(endpointBase);
|
|
533
|
+
const pathPrefix = parsed.pathname.replace(/\/+$/, "");
|
|
534
|
+
const suffix = pathPrefix ? `${pathPrefix}/` : "/";
|
|
535
|
+
bases.push(`${parsed.protocol}//${bucket}.${parsed.host}${suffix}`);
|
|
536
|
+
}
|
|
537
|
+
catch (e) {
|
|
538
|
+
const host = endpointBase.replace(/^https?:\/\//i, "");
|
|
539
|
+
bases.push(`https://${bucket}.${host}/`);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
const region = settings.region || "us-east-1";
|
|
543
|
+
bases.push(`https://${bucket}.s3.${region}.amazonaws.com/`);
|
|
544
|
+
bases.push(`https://${bucket}.s3.amazonaws.com/`);
|
|
545
|
+
for (const base of bases) {
|
|
546
|
+
if (trimmed.startsWith(base)) {
|
|
547
|
+
const remainder = trimmed.slice(base.length);
|
|
548
|
+
const withoutQuery = remainder.split("?")[0];
|
|
549
|
+
try {
|
|
550
|
+
const decoded = decodeURI(withoutQuery);
|
|
551
|
+
return cleanRelativePath(decoded);
|
|
552
|
+
}
|
|
553
|
+
catch (e) {
|
|
554
|
+
return cleanRelativePath(withoutQuery);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return null;
|
|
559
|
+
};
|
|
560
|
+
exports.publicUrlToRelativePath = publicUrlToRelativePath;
|
|
561
|
+
//# sourceMappingURL=s3_helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3_helpers.js","sourceRoot":"","sources":["../../../models/internal/s3_helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { S3 } from "@aws-sdk/client-s3";
|
|
2
|
+
type MetadataInput = {
|
|
3
|
+
min_role_read?: number;
|
|
4
|
+
user_id?: number;
|
|
5
|
+
mime_super?: string;
|
|
6
|
+
mime_sub?: string;
|
|
7
|
+
filename?: string;
|
|
8
|
+
};
|
|
9
|
+
type MetadataOutput = MetadataInput;
|
|
10
|
+
export type S3ListResult = {
|
|
11
|
+
key: string;
|
|
12
|
+
relativePath: string;
|
|
13
|
+
size: number;
|
|
14
|
+
lastModified?: Date;
|
|
15
|
+
};
|
|
16
|
+
export type S3HeadResult = S3ListResult & {
|
|
17
|
+
metadata: MetadataOutput;
|
|
18
|
+
contentType?: string;
|
|
19
|
+
};
|
|
20
|
+
export declare const isS3Enabled: () => boolean;
|
|
21
|
+
export declare const relativeKeyToPath: (key: string) => string;
|
|
22
|
+
export declare const buildKeyFromRelative: (relPath?: string) => string;
|
|
23
|
+
export declare const getResolvedBucket: () => string | undefined;
|
|
24
|
+
export declare const getS3Client: () => S3;
|
|
25
|
+
export declare const listS3Folder: (folder?: string, opts?: {
|
|
26
|
+
recursive?: boolean;
|
|
27
|
+
}) => Promise<{
|
|
28
|
+
files: S3ListResult[];
|
|
29
|
+
directories: string[];
|
|
30
|
+
}>;
|
|
31
|
+
export declare const headObject: (relPath: string) => Promise<S3HeadResult | null>;
|
|
32
|
+
export declare const setObjectMetadata: (relPath: string, metadata: MetadataInput) => Promise<void>;
|
|
33
|
+
export declare const copyObject: (fromRelPath: string, toRelPath: string, opts?: {
|
|
34
|
+
metadata?: MetadataInput;
|
|
35
|
+
}) => Promise<void>;
|
|
36
|
+
export declare const deleteObject: (relPath: string) => Promise<void>;
|
|
37
|
+
export declare const uploadBuffer: (relPath: string, buffer: Buffer, mimetype: string, metadata: MetadataInput) => Promise<void>;
|
|
38
|
+
export declare const downloadBuffer: (relPath: string) => Promise<Buffer>;
|
|
39
|
+
export declare const getSignedFileUrl: (relPath: string, opts?: {
|
|
40
|
+
download?: boolean;
|
|
41
|
+
filename?: string;
|
|
42
|
+
expiresIn?: number;
|
|
43
|
+
}) => Promise<string>;
|
|
44
|
+
export declare const getPublicFileUrl: (relPath: string, opts?: {
|
|
45
|
+
download?: boolean;
|
|
46
|
+
filename?: string;
|
|
47
|
+
}) => string;
|
|
48
|
+
export declare const getServeUrl: (relPath: string, opts?: {
|
|
49
|
+
download?: boolean;
|
|
50
|
+
filename?: string;
|
|
51
|
+
}) => Promise<string>;
|
|
52
|
+
export declare const publicUrlToRelativePath: (url?: string) => string | null;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=s3_helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3_helpers.d.ts","sourceRoot":"","sources":["../../models/s3_helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAOL,EAAE,EACH,MAAM,oBAAoB,CAAC;AAmB5B,KAAK,aAAa,GAAG;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,cAAc,GAAG,aAAa,CAAC;AAEpC,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA2HF,eAAO,MAAM,WAAW,QAAO,OACwB,CAAC;AAWxD,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MAM/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,KAAG,MAMvD,CAAC;AAcF,eAAO,MAAM,iBAAiB,QAAO,MAAM,GAAG,SAG7C,CAAC;AAUF,eAAO,MAAM,WAAW,QAAO,EAmB9B,CAAC;AA0CF,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,EACf,OAAM;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,KACjC,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAkF1D,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,MAAM,KACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAuB7B,CAAC;AAuBF,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,UAAU,aAAa,kBAKxB,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,OAAM;IAAE,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAO,kBAWxC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,SAAS,MAAM,kBAKjD,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,UAAU,aAAa,kBAcxB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAWpE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,OAAM;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,KACvE,OAAO,CAAC,MAAM,CAgBhB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,OAAM;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,KACnD,MAcF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EACf,OAAM;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,KACnD,OAAO,CAAC,MAAM,CAMhB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAqC/D,CAAC"}
|