@visulima/storage 1.0.0-alpha.1 → 1.0.0-alpha.3
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/CHANGELOG.md +30 -0
- package/README.md +33 -14
- package/dist/adapter/nuxt/module.d.ts +39 -0
- package/dist/adapter/nuxt/module.js +93 -0
- package/dist/adapter/nuxt/package.json +20 -0
- package/dist/handler/base/base-handler-core.d.ts +91 -0
- package/dist/handler/base/base-handler-fetch.d.ts +76 -0
- package/dist/handler/base/base-handler-node.d.ts +137 -0
- package/dist/handler/http/fetch/index.d.ts +4 -0
- package/dist/handler/http/fetch/index.js +4 -0
- package/dist/handler/http/hono/index.d.ts +67 -0
- package/dist/handler/http/hono/index.js +65 -0
- package/dist/handler/http/nextjs/index.d.ts +61 -0
- package/dist/handler/http/nextjs/index.js +37 -0
- package/dist/handler/http/node/index.d.ts +4 -0
- package/dist/handler/http/node/index.js +4 -0
- package/dist/handler/http/solid-start/index.d.ts +60 -0
- package/dist/handler/http/solid-start/index.js +44 -0
- package/dist/handler/multipart/multipart-base.d.ts +84 -0
- package/dist/handler/multipart/multipart-fetch.d.ts +64 -0
- package/dist/handler/multipart/multipart.d.ts +49 -0
- package/dist/handler/rest/rest-base.d.ts +106 -0
- package/dist/handler/rest/rest-fetch.d.ts +88 -0
- package/dist/handler/rest/rest.d.ts +93 -0
- package/dist/handler/tus/tus-base.d.ts +152 -0
- package/dist/handler/tus/tus-fetch.d.ts +72 -0
- package/dist/handler/tus/tus.d.ts +78 -0
- package/dist/handler/types.d.ts +53 -0
- package/dist/handler/utils/request-parser.d.ts +72 -0
- package/dist/handler/utils/response-builder.d.ts +83 -0
- package/dist/handler/utils/storage-utils.d.ts +10 -0
- package/dist/handler/utils/stream-utils.d.ts +29 -0
- package/dist/handler/utils/upload-handlers.d.ts +76 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +13 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/no-op-metrics.d.ts +15 -0
- package/dist/metrics/opentelemetry-metrics.d.ts +55 -0
- package/dist/openapi/index.d.ts +5 -0
- package/dist/openapi/index.js +5 -0
- package/dist/openapi/rest.d.ts +7 -0
- package/dist/openapi/shared.d.ts +13 -0
- package/dist/openapi/transform.d.ts +3 -0
- package/dist/openapi/tus.d.ts +7 -0
- package/dist/openapi/xhr.d.ts +7 -0
- package/dist/packem_shared/AwsLightFile-tTneXZgG.js +11 -0
- package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +4 -0
- package/dist/packem_shared/AwsLightStorage-Blv-GP4v.js +133 -0
- package/dist/packem_shared/AzureFile-CesgFzps.js +8 -0
- package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +88 -0
- package/dist/packem_shared/AzureStorage-B0v048hG.js +357 -0
- package/dist/packem_shared/BaseTransformer-C2gLib6v.js +82 -0
- package/dist/packem_shared/DiskStorage-BlltBst6.js +12 -0
- package/dist/packem_shared/DiskStorageWithChecksum-BJTmMklc.js +238 -0
- package/dist/packem_shared/ERRORS-D0apMqnc.js +97 -0
- package/dist/packem_shared/File-Bb3P23dr.js +69 -0
- package/dist/packem_shared/GCSConfig-vPP22kN6.js +11 -0
- package/dist/packem_shared/GCSFile-BIEunhAN.js +8 -0
- package/dist/packem_shared/GCSMetaStorage-BMFEdzJ7.js +7 -0
- package/dist/packem_shared/GCStorage-DnhiwaS9.js +406 -0
- package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +7 -0
- package/dist/packem_shared/MediaTransformer-D6658DL1.js +1197 -0
- package/dist/packem_shared/MetaStorage-pECeFOad.js +46 -0
- package/dist/packem_shared/Metadata-DRLXeJ0F.js +89 -0
- package/dist/packem_shared/Multipart-CNFK_Okz.js +163 -0
- package/dist/packem_shared/Multipart-CtUL7BQw.js +128 -0
- package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +14 -0
- package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +9 -0
- package/dist/packem_shared/NetlifyBlobStorage-CLPtjHqd.js +376 -0
- package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +10 -0
- package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +67 -0
- package/dist/packem_shared/Rest-CAOAEkOj.js +267 -0
- package/dist/packem_shared/Rest-DNuLwBrK.js +228 -0
- package/dist/packem_shared/S3File-DZiyk9Qt.js +11 -0
- package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +76 -0
- package/dist/packem_shared/S3Storage-DHmTk-hU.js +316 -0
- package/dist/packem_shared/TUS_RESUMABLE-GJzZ9R-f.js +434 -0
- package/dist/packem_shared/Tus-B8PmlMgR.js +200 -0
- package/dist/packem_shared/Tus-C4F1aYOl.js +195 -0
- package/dist/packem_shared/ValidationError-BfF1aE4h.js +26 -0
- package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +18 -0
- package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +9 -0
- package/dist/packem_shared/VercelBlobStorage-DD9LMOS6.js +261 -0
- package/dist/packem_shared/_commonjsHelpers-B85MJLTf.js +5 -0
- package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +446 -0
- package/dist/packem_shared/backblaze-BlMnIcBC.js +20 -0
- package/dist/packem_shared/base-handler-core-BKuf4YLT.js +303 -0
- package/dist/packem_shared/base-handler-fetch-Cr0hLiqg.js +291 -0
- package/dist/packem_shared/base-handler-node-gk5aN9Cx.js +730 -0
- package/dist/packem_shared/cache-B88MXQ_2.js +18 -0
- package/dist/packem_shared/cloudflare-Bi1q8wXE.js +21 -0
- package/dist/packem_shared/defaultCloudStorageFileNameValidation-DUuacjWv.js +11 -0
- package/dist/packem_shared/digitalOcean-CWQRJM3L.js +21 -0
- package/dist/packem_shared/disk-storage-Bh2wy3YW.js +810 -0
- package/dist/packem_shared/gcs-meta-storage-0tgMNnPO.js +158 -0
- package/dist/packem_shared/has-content-CY66ehMK.js +3 -0
- package/dist/packem_shared/headers-DoS5nwM-.js +3220 -0
- package/dist/packem_shared/is-expired-CTThU1q5.js +8 -0
- package/dist/packem_shared/isRetryableError-Dycp7127.js +82 -0
- package/dist/packem_shared/isValidMediaType-BeDgiObq.js +35 -0
- package/dist/packem_shared/local-meta-storage-By-3SNBI.js +649 -0
- package/dist/packem_shared/minio-C2YBZQOw.js +22 -0
- package/dist/packem_shared/multipart-base-B3i67SSX.js +102 -0
- package/dist/packem_shared/part-match-BMNqHDYD.js +96 -0
- package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +161 -0
- package/dist/packem_shared/response-builder-BtnRiBUI.js +45 -0
- package/dist/packem_shared/rest-base-GRCcnan7.js +457 -0
- package/dist/packem_shared/restOpenApiSpec-CwcHHY2C.js +800 -0
- package/dist/packem_shared/s3-base-storage-C1DIHTYY.js +510 -0
- package/dist/packem_shared/sharedGet-Cpo7QUyu.js +1019 -0
- package/dist/packem_shared/storage-C6NSXb8h.js +1175 -0
- package/dist/packem_shared/tigris-Hac8TKnX.js +21 -0
- package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +975 -0
- package/dist/packem_shared/tusOpenApiSpec-6ohiToBy.js +740 -0
- package/dist/packem_shared/update-size-CCGm6i1J.js +8 -0
- package/dist/packem_shared/validator-BeX_lJet.js +78 -0
- package/dist/packem_shared/waitForStorage-Cscw85sx.js +18 -0
- package/dist/packem_shared/wasabi-DIyflHSd.js +21 -0
- package/dist/packem_shared/xhrOpenApiSpec-DS17brnx.js +264 -0
- package/dist/storage/aws/clients/backblaze.d.ts +12 -0
- package/dist/storage/aws/clients/cloudflare.d.ts +13 -0
- package/dist/storage/aws/clients/digital-ocean.d.ts +12 -0
- package/dist/storage/aws/clients/index.d.ts +6 -0
- package/dist/storage/aws/clients/index.js +6 -0
- package/dist/storage/aws/clients/minio.d.ts +13 -0
- package/dist/storage/aws/clients/tigris.d.ts +12 -0
- package/dist/storage/aws/clients/types.d.ts +95 -0
- package/dist/storage/aws/clients/wasabi.d.ts +12 -0
- package/dist/storage/aws/index.d.ts +4 -0
- package/dist/storage/aws/index.js +3 -0
- package/dist/storage/aws/s3-base-storage.d.ts +248 -0
- package/dist/storage/aws/s3-client-adapter.d.ts +110 -0
- package/dist/storage/aws/s3-file.d.ts +10 -0
- package/dist/storage/aws/s3-meta-storage.d.ts +15 -0
- package/dist/storage/aws/s3-storage.d.ts +70 -0
- package/dist/storage/aws/types.d.ts +119 -0
- package/dist/storage/aws-light/aws-light-api-adapter.d.ts +130 -0
- package/dist/storage/aws-light/aws-light-file.d.ts +10 -0
- package/dist/storage/aws-light/aws-light-meta-storage.d.ts +19 -0
- package/dist/storage/aws-light/aws-light-storage.d.ts +65 -0
- package/dist/storage/aws-light/index.d.ts +4 -0
- package/dist/storage/aws-light/index.js +3 -0
- package/dist/storage/aws-light/types.d.ts +37 -0
- package/dist/storage/azure/azure-file.d.ts +6 -0
- package/dist/storage/azure/azure-meta-storage.d.ts +15 -0
- package/dist/storage/azure/azure-storage.d.ts +69 -0
- package/dist/storage/azure/index.d.ts +4 -0
- package/dist/storage/azure/index.js +3 -0
- package/dist/storage/azure/types.d.ts +62 -0
- package/dist/storage/gcs/fetch-error.d.ts +11 -0
- package/dist/storage/gcs/gcs-config.d.ts +2 -0
- package/dist/storage/gcs/gcs-file.d.ts +6 -0
- package/dist/storage/gcs/gcs-meta-storage.d.ts +27 -0
- package/dist/storage/gcs/gcs-storage.d.ts +91 -0
- package/dist/storage/gcs/index.d.ts +5 -0
- package/dist/storage/gcs/index.js +4 -0
- package/dist/storage/gcs/types.d.ts +55 -0
- package/dist/storage/gcs/utils.d.ts +7 -0
- package/dist/storage/local/disk-storage-with-checksum.d.ts +15 -0
- package/dist/storage/local/disk-storage.d.ts +135 -0
- package/dist/storage/local/index.d.ts +4 -0
- package/dist/storage/local/index.js +3 -0
- package/dist/storage/local/local-meta-storage.d.ts +32 -0
- package/dist/storage/meta-storage.d.ts +30 -0
- package/dist/storage/netlify-blob/index.d.ts +4 -0
- package/dist/storage/netlify-blob/index.js +3 -0
- package/dist/storage/netlify-blob/netlify-blob-file.d.ts +12 -0
- package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +7 -0
- package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +93 -0
- package/dist/storage/netlify-blob/types.d.ts +30 -0
- package/dist/storage/storage.d.ts +353 -0
- package/dist/storage/types.d.ts +221 -0
- package/dist/storage/utils/file/file.d.ts +25 -0
- package/dist/storage/utils/file/get-file-status.d.ts +9 -0
- package/dist/storage/utils/file/has-content.d.ts +9 -0
- package/dist/storage/utils/file/index.d.ts +10 -0
- package/dist/storage/utils/file/is-expired.d.ts +8 -0
- package/dist/storage/utils/file/metadata.d.ts +18 -0
- package/dist/storage/utils/file/part-match.d.ts +11 -0
- package/dist/storage/utils/file/types.d.ts +37 -0
- package/dist/storage/utils/file/update-metadata.d.ts +10 -0
- package/dist/storage/utils/file/update-size.d.ts +10 -0
- package/dist/storage/vercel-blob/index.d.ts +4 -0
- package/dist/storage/vercel-blob/index.js +3 -0
- package/dist/storage/vercel-blob/types.d.ts +32 -0
- package/dist/storage/vercel-blob/vercel-blob-file.d.ts +16 -0
- package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +7 -0
- package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +76 -0
- package/dist/transformer/audio-transformer.d.ts +128 -0
- package/dist/transformer/audio-transformer.js +278 -0
- package/dist/transformer/base-transformer.d.ts +63 -0
- package/dist/transformer/image-transformer.d.ts +571 -0
- package/dist/transformer/image-transformer.js +1100 -0
- package/dist/transformer/index.d.ts +5 -0
- package/dist/transformer/index.js +4 -0
- package/dist/transformer/media-transformer.d.ts +332 -0
- package/dist/transformer/types.d.ts +652 -0
- package/dist/transformer/utils.d.ts +33 -0
- package/dist/transformer/validation-error.d.ts +23 -0
- package/dist/transformer/video-transformer.d.ts +145 -0
- package/dist/transformer/video-transformer.js +310 -0
- package/dist/utils/cache.d.ts +32 -0
- package/dist/utils/chunked-upload.d.ts +65 -0
- package/dist/utils/detect-file-type.d.ts +28 -0
- package/dist/utils/errors.d.ts +74 -0
- package/dist/utils/file-path-url-matcher.d.ts +18 -0
- package/dist/utils/headers.d.ts +111 -0
- package/dist/utils/http.d.ts +92 -0
- package/dist/utils/locker.d.ts +26 -0
- package/dist/utils/pipes/stream-checksum.d.ts +47 -0
- package/dist/utils/pipes/stream-length.d.ts +22 -0
- package/dist/utils/primitives/get-last-one.d.ts +3 -0
- package/dist/utils/primitives/is-record.d.ts +2 -0
- package/dist/utils/primitives/map-values.d.ts +9 -0
- package/dist/utils/primitives/pick.d.ts +2 -0
- package/dist/utils/primitives/to-milliseconds.d.ts +12 -0
- package/dist/utils/primitives/to-seconds.d.ts +12 -0
- package/dist/utils/range-checksum.d.ts +33 -0
- package/dist/utils/range-hasher.d.ts +46 -0
- package/dist/utils/retry.d.ts +64 -0
- package/dist/utils/types.d.ts +108 -0
- package/dist/utils/validation-error.d.ts +22 -0
- package/dist/utils/validator.d.ts +36 -0
- package/package.json +5 -5
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { ErrorMap } from './ERRORS-D0apMqnc.js';
|
|
2
|
+
|
|
3
|
+
class ValidationError extends Error {
|
|
4
|
+
code;
|
|
5
|
+
statusCode;
|
|
6
|
+
body;
|
|
7
|
+
headers;
|
|
8
|
+
name = "ValidationError";
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new ValidationError instance.
|
|
11
|
+
* @param code Machine-readable error code
|
|
12
|
+
* @param statusCode HTTP status code for the error
|
|
13
|
+
* @param body Error response body (string or structured object)
|
|
14
|
+
* @param headers HTTP headers to include in error response
|
|
15
|
+
*/
|
|
16
|
+
constructor(code, statusCode, body, headers) {
|
|
17
|
+
const message = typeof body === "string" ? body : body?.message || "Validation error";
|
|
18
|
+
super(message);
|
|
19
|
+
this.code = code;
|
|
20
|
+
this.statusCode = statusCode;
|
|
21
|
+
this.body = body;
|
|
22
|
+
this.headers = headers;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const capitalize = (s) => s && s[0].toUpperCase() + s.slice(1);
|
|
27
|
+
const toResponse = (response) => {
|
|
28
|
+
if (!Array.isArray(response)) {
|
|
29
|
+
return response;
|
|
30
|
+
}
|
|
31
|
+
const [statusCode, body, headers] = response;
|
|
32
|
+
return { body, headers, statusCode };
|
|
33
|
+
};
|
|
34
|
+
class Validator {
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new Validator instance.
|
|
37
|
+
* @param prefix Prefix for generated error codes (default: "ValidationError")
|
|
38
|
+
*/
|
|
39
|
+
constructor(prefix = "ValidationError") {
|
|
40
|
+
this.prefix = prefix;
|
|
41
|
+
}
|
|
42
|
+
validators = {};
|
|
43
|
+
/**
|
|
44
|
+
* Adds validation rules to the validator.
|
|
45
|
+
* Each rule must include an `isValid` function.
|
|
46
|
+
* @param config Validation configuration object
|
|
47
|
+
* @throws TypeError if any validator is missing the isValid function
|
|
48
|
+
*/
|
|
49
|
+
add(config) {
|
|
50
|
+
Object.entries(config).forEach(([key, validator]) => {
|
|
51
|
+
const code = `${this.prefix}${capitalize(key)}`;
|
|
52
|
+
this.validators[code] = { ...this.validators[code], ...validator };
|
|
53
|
+
if (typeof this.validators[code].isValid !== "function") {
|
|
54
|
+
throw new TypeError('Validation config "isValid" is missing, or it is not a function!');
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Verifies an object against all configured validation rules.
|
|
60
|
+
* Throws ValidationError on first validation failure.
|
|
61
|
+
* @param t Object to validate
|
|
62
|
+
* @throws ValidationError if validation fails
|
|
63
|
+
*/
|
|
64
|
+
async verify(t) {
|
|
65
|
+
for (const [code, validator] of Object.entries(this.validators)) {
|
|
66
|
+
const isValid = await validator.isValid(t);
|
|
67
|
+
if (!isValid) {
|
|
68
|
+
const errorResponse = validator.response || (code in ErrorMap ? ErrorMap[code] : ErrorMap.UnknownError);
|
|
69
|
+
const response = toResponse(errorResponse);
|
|
70
|
+
const { body, headers, message, statusCode } = response;
|
|
71
|
+
throw new ValidationError(code, statusCode, body || message, headers);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const isValidationError = (error) => error.name === "ValidationError";
|
|
77
|
+
|
|
78
|
+
export { ValidationError as V, Validator as a, isValidationError as i };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const waitForStorage = async (storage, timeoutMs = 5e3) => {
|
|
2
|
+
if (storage.isReady) {
|
|
3
|
+
return;
|
|
4
|
+
}
|
|
5
|
+
const startTime = Date.now();
|
|
6
|
+
while (!storage.isReady && Date.now() - startTime < timeoutMs) {
|
|
7
|
+
await new Promise((resolve) => {
|
|
8
|
+
setTimeout(() => {
|
|
9
|
+
resolve();
|
|
10
|
+
}, 100);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
if (!storage.isReady) {
|
|
14
|
+
throw new Error("Storage initialization timeout");
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { waitForStorage };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const wasabi = (parameters) => {
|
|
2
|
+
const { accessKeyId, region, secretAccessKey } = parameters ?? {
|
|
3
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID || process.env.WASABI_ACCESS_KEY_ID || process.env.WASABI_ACCESS_KEY,
|
|
4
|
+
region: process.env.AWS_REGION || process.env.WASABI_REGION,
|
|
5
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || process.env.WASABI_SECRET_ACCESS_KEY || process.env.WASABI_SECRET_KEY
|
|
6
|
+
};
|
|
7
|
+
if (!region || !accessKeyId || !secretAccessKey) {
|
|
8
|
+
throw new Error("Missing required parameters for Wasabi client.");
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
apiVersion: "2006-03-01",
|
|
12
|
+
credentials: {
|
|
13
|
+
accessKeyId,
|
|
14
|
+
secretAccessKey
|
|
15
|
+
},
|
|
16
|
+
endpoint: `https://s3.${region}.wasabisys.com`,
|
|
17
|
+
region
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { wasabi as default };
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { createPaginationMetaSchemaObject, createPaginationSchemaObject } from '@visulima/pagination';
|
|
3
|
+
import { sharedGetList, sharedGet, sharedGetMeta, sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject } from './sharedGet-Cpo7QUyu.js';
|
|
4
|
+
|
|
5
|
+
const swaggerSpec = (origin, path, options) => {
|
|
6
|
+
const { supportedTransformerFormat, tags, transformer } = { tags: ["Multipart"], transformer: false, ...options };
|
|
7
|
+
const pathHash = createHash("sha256").update(path).digest("base64");
|
|
8
|
+
return {
|
|
9
|
+
components: {
|
|
10
|
+
examples: sharedFileMetaExampleObject,
|
|
11
|
+
parameters: {
|
|
12
|
+
UploadIDinPath: {
|
|
13
|
+
description: "Upload ID",
|
|
14
|
+
in: "path",
|
|
15
|
+
name: "id",
|
|
16
|
+
schema: {
|
|
17
|
+
type: "string"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
responses: {
|
|
22
|
+
404: {
|
|
23
|
+
content: {
|
|
24
|
+
"application/json": {
|
|
25
|
+
example: {
|
|
26
|
+
error: {
|
|
27
|
+
code: "FileNotFound",
|
|
28
|
+
message: "Not found"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
schema: {
|
|
32
|
+
$ref: "#/components/schemas/Error"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
description: "Not Found"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
schemas: {
|
|
40
|
+
...createPaginationSchemaObject(
|
|
41
|
+
"FileMetaPagination",
|
|
42
|
+
{
|
|
43
|
+
$ref: "#/components/schemas/PaginationMeta"
|
|
44
|
+
},
|
|
45
|
+
"#/components/schemas/PaginationMeta"
|
|
46
|
+
),
|
|
47
|
+
...createPaginationMetaSchemaObject("PaginationMeta"),
|
|
48
|
+
...sharedErrorSchemaObject,
|
|
49
|
+
...sharedFileMetaSchemaObject
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
paths: {
|
|
53
|
+
[`${path.replace(/\/$/, "")}/{id}/metadata`]: {
|
|
54
|
+
get: sharedGetMeta(`${pathHash}MultipartGetFileMeta`, tags)
|
|
55
|
+
},
|
|
56
|
+
[`${path.replace(/\/$/, "")}/{id}`]: {
|
|
57
|
+
delete: {
|
|
58
|
+
description: "Cancel upload",
|
|
59
|
+
operationId: `${pathHash}MultipartCancel`,
|
|
60
|
+
parameters: [
|
|
61
|
+
{
|
|
62
|
+
$ref: "#/components/parameters/UploadIDinPath"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
responses: {
|
|
66
|
+
204: {
|
|
67
|
+
description: "No Content"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
summary: "Cancel upload",
|
|
71
|
+
tags
|
|
72
|
+
},
|
|
73
|
+
get: sharedGet(`${pathHash}TusGetFile`, tags, transformer, supportedTransformerFormat)
|
|
74
|
+
},
|
|
75
|
+
[path.trimEnd()]: {
|
|
76
|
+
get: sharedGetList(`${pathHash}MultipartGetList`, tags),
|
|
77
|
+
post: {
|
|
78
|
+
description: "Create upload",
|
|
79
|
+
operationId: `${pathHash}MultipartCreate`,
|
|
80
|
+
requestBody: {
|
|
81
|
+
content: {
|
|
82
|
+
"multipart/form-data": {
|
|
83
|
+
schema: {
|
|
84
|
+
properties: {
|
|
85
|
+
file: {
|
|
86
|
+
description: "File to upload",
|
|
87
|
+
format: "binary",
|
|
88
|
+
type: "string"
|
|
89
|
+
},
|
|
90
|
+
metadata: {
|
|
91
|
+
description: "JSON stringifies metadata",
|
|
92
|
+
example: '{ "name": "video.mp4", "mimeType": "video/mp4", "size": 741, "lastModified": 1631750105530 }',
|
|
93
|
+
type: "string"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
type: "object"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
description: "Upload Metadata",
|
|
101
|
+
required: false
|
|
102
|
+
},
|
|
103
|
+
responses: {
|
|
104
|
+
200: {
|
|
105
|
+
description: "The file already exists, send a resume request",
|
|
106
|
+
headers: {
|
|
107
|
+
ETag: {
|
|
108
|
+
description: "Upload ETag",
|
|
109
|
+
schema: {
|
|
110
|
+
example: "d41d8cd98f00b204e9800998ecf8427e",
|
|
111
|
+
type: "string"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
Location: {
|
|
115
|
+
description: "Resumable URI",
|
|
116
|
+
schema: {
|
|
117
|
+
// eslint-disable-next-line no-secrets/no-secrets
|
|
118
|
+
example: `${origin}/files?uploadType=Upload&upload_id=2b62dbec20048158af963572fbdf89c6`,
|
|
119
|
+
format: "uri",
|
|
120
|
+
type: "string"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"X-Upload-Expires": {
|
|
124
|
+
description: "Upload expiration date",
|
|
125
|
+
schema: {
|
|
126
|
+
example: "2021-08-25T11:12:26.635Z",
|
|
127
|
+
format: "date-time",
|
|
128
|
+
type: "string"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
201: {
|
|
134
|
+
description: "Upload accepted, send the file contents",
|
|
135
|
+
headers: {
|
|
136
|
+
ETag: {
|
|
137
|
+
description: "Upload ETag",
|
|
138
|
+
schema: {
|
|
139
|
+
example: "d41d8cd98f00b204e9800998ecf8427e",
|
|
140
|
+
type: "string"
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
Location: {
|
|
144
|
+
description: "Resumable URI",
|
|
145
|
+
schema: {
|
|
146
|
+
// eslint-disable-next-line no-secrets/no-secrets
|
|
147
|
+
example: `${origin}/files?uploadType=Upload&upload_id=2b62dbec20048158af963572fbdf89c6`,
|
|
148
|
+
format: "uri",
|
|
149
|
+
type: "string"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"X-Upload-Expires": {
|
|
153
|
+
description: "Upload expiration date",
|
|
154
|
+
schema: {
|
|
155
|
+
example: "2021-08-25T11:12:26.635Z",
|
|
156
|
+
format: "date-time",
|
|
157
|
+
type: "string"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
400: {
|
|
163
|
+
content: {
|
|
164
|
+
"application/json": {
|
|
165
|
+
example: {
|
|
166
|
+
error: {
|
|
167
|
+
code: "InvalidFileName",
|
|
168
|
+
message: "Invalid file name",
|
|
169
|
+
name: "ValidationError"
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
schema: {
|
|
173
|
+
$ref: "#/components/schemas/Error"
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
description: "Bad Request"
|
|
178
|
+
},
|
|
179
|
+
413: {
|
|
180
|
+
content: {
|
|
181
|
+
"application/json": {
|
|
182
|
+
example: {
|
|
183
|
+
error: {
|
|
184
|
+
code: "RequestEntityTooLarge",
|
|
185
|
+
message: "Request entity too large",
|
|
186
|
+
name: "ValidationError"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
schema: {
|
|
190
|
+
$ref: "#/components/schemas/Error"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
description: "Request Entity Too Large"
|
|
195
|
+
},
|
|
196
|
+
415: {
|
|
197
|
+
content: {
|
|
198
|
+
"application/json": {
|
|
199
|
+
example: {
|
|
200
|
+
error: {
|
|
201
|
+
code: "UnsupportedMediaType",
|
|
202
|
+
message: "Unsupported media type",
|
|
203
|
+
name: "ValidationError"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
schema: {
|
|
207
|
+
$ref: "#/components/schemas/Error"
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
description: "Unsupported Media Type"
|
|
212
|
+
},
|
|
213
|
+
423: {
|
|
214
|
+
content: {
|
|
215
|
+
"application/json": {
|
|
216
|
+
example: {
|
|
217
|
+
error: {
|
|
218
|
+
code: "FileLocked",
|
|
219
|
+
message: "File locked"
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
schema: {
|
|
223
|
+
$ref: "#/components/schemas/Error"
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
description: "File locked"
|
|
228
|
+
},
|
|
229
|
+
500: {
|
|
230
|
+
content: {
|
|
231
|
+
"application/json": {
|
|
232
|
+
example: {
|
|
233
|
+
error: {
|
|
234
|
+
code: "GenericUploadError",
|
|
235
|
+
message: "Generic Upload Error"
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
schema: {
|
|
239
|
+
$ref: "#/components/schemas/Error"
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
description: "Internal Server Error"
|
|
244
|
+
},
|
|
245
|
+
default: {
|
|
246
|
+
content: {
|
|
247
|
+
"application/json": {
|
|
248
|
+
schema: {
|
|
249
|
+
$ref: "#/components/schemas/Error"
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
description: "Error"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
summary: "Create upload",
|
|
257
|
+
tags
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
export { swaggerSpec as default };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { S3ClientConfig } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { CreateBackblazeClientParameters } from "./types.d.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Backblaze B2 client, compatible with the S3 API.
|
|
5
|
+
*
|
|
6
|
+
* Optionally, you can omit the parameters and use the following environment variables:
|
|
7
|
+
* - `B2_REGION`
|
|
8
|
+
* - `B2_APP_KEY_ID`
|
|
9
|
+
* - `B2_APP_KEY`
|
|
10
|
+
*/
|
|
11
|
+
export declare const backblaze: (parameters?: CreateBackblazeClientParameters) => S3ClientConfig;
|
|
12
|
+
export default backblaze;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { S3ClientConfig } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { CreateCloudflareClientParameters } from "./types.d.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Cloudflare R2 client, compatible with the S3 API.
|
|
5
|
+
*
|
|
6
|
+
* Optionally, you can omit the parameters and use the following environment variables:
|
|
7
|
+
* - `CLOUDFLARE_ACCOUNT_ID`
|
|
8
|
+
* - `AWS_ACCESS_KEY_ID`
|
|
9
|
+
* - `AWS_SECRET_ACCESS_KEY`
|
|
10
|
+
* - `CLOUDFLARE_JURISDICTION`
|
|
11
|
+
*/
|
|
12
|
+
export declare const cloudflare: (parameters?: CreateCloudflareClientParameters) => S3ClientConfig;
|
|
13
|
+
export default cloudflare;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { S3ClientConfig } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { CreateDigitalOceanClientParameters } from "./types.d.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create a DigitalOcean Spaces client, compatible with the S3 API.
|
|
5
|
+
*
|
|
6
|
+
* Optionally, you can omit the parameters and use the following environment variables:
|
|
7
|
+
* - `SPACES_REGION`
|
|
8
|
+
* - `SPACES_KEY`
|
|
9
|
+
* - `SPACES_SECRET`
|
|
10
|
+
*/
|
|
11
|
+
declare const digitalOcean: (parameters?: CreateDigitalOceanClientParameters) => S3ClientConfig;
|
|
12
|
+
export default digitalOcean;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as backblaze } from "./backblaze.d.ts";
|
|
2
|
+
export { default as cloudflare } from "./cloudflare.d.ts";
|
|
3
|
+
export { default as digitalOcean } from "./digital-ocean.d.ts";
|
|
4
|
+
export { default as minio } from "./minio.d.ts";
|
|
5
|
+
export { default as tigris } from "./tigris.d.ts";
|
|
6
|
+
export { default as wasabi } from "./wasabi.d.ts";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { backblaze } from '../../../packem_shared/backblaze-BlMnIcBC.js';
|
|
2
|
+
export { cloudflare } from '../../../packem_shared/cloudflare-Bi1q8wXE.js';
|
|
3
|
+
export { default as digitalOcean } from '../../../packem_shared/digitalOcean-CWQRJM3L.js';
|
|
4
|
+
export { default as minio } from '../../../packem_shared/minio-C2YBZQOw.js';
|
|
5
|
+
export { default as tigris } from '../../../packem_shared/tigris-Hac8TKnX.js';
|
|
6
|
+
export { default as wasabi } from '../../../packem_shared/wasabi-DIyflHSd.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { S3ClientConfig } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { CreateMinioClientParameters } from "./types.d.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Minio client, compatible with the S3 API.
|
|
5
|
+
*
|
|
6
|
+
* Optionally, you can omit the parameters and use the following environment variables:
|
|
7
|
+
* - `AWS_REGION`
|
|
8
|
+
* - `AWS_ACCESS_KEY_ID`
|
|
9
|
+
* - `AWS_SECRET_ACCESS_KEY`
|
|
10
|
+
* - `MINIO_ENDPOINT`
|
|
11
|
+
*/
|
|
12
|
+
declare const minio: (parameters?: CreateMinioClientParameters) => S3ClientConfig;
|
|
13
|
+
export default minio;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { S3ClientConfig } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { CreateTigrisClientParameters } from "./types.d.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Tigris client, compatible with the S3 API.
|
|
5
|
+
*
|
|
6
|
+
* Optionally, you can omit the parameters and use the following environment variables:
|
|
7
|
+
* - `AWS_ACCESS_KEY_ID`
|
|
8
|
+
* - `AWS_SECRET_ACCESS_KEY`
|
|
9
|
+
* - `TIGRIS_ENDPOINT`
|
|
10
|
+
*/
|
|
11
|
+
declare const tigris: (parameters?: CreateTigrisClientParameters) => S3ClientConfig;
|
|
12
|
+
export default tigris;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export type CreateCloudflareClientParameters = {
|
|
2
|
+
/**
|
|
3
|
+
* Cloudflare R2 access key ID.
|
|
4
|
+
*/
|
|
5
|
+
accessKeyId: string;
|
|
6
|
+
/**
|
|
7
|
+
* Cloudflare account ID.
|
|
8
|
+
*/
|
|
9
|
+
accountId: string;
|
|
10
|
+
/**
|
|
11
|
+
* The jurisdiction where the data is stored.
|
|
12
|
+
*
|
|
13
|
+
* Only use this if you created your R2 bucket using a jurisdiction.
|
|
14
|
+
*/
|
|
15
|
+
jurisdiction?: "eu" | "fedramp";
|
|
16
|
+
/**
|
|
17
|
+
* Cloudflare R2 secret access key.
|
|
18
|
+
*/
|
|
19
|
+
secretAccessKey: string;
|
|
20
|
+
};
|
|
21
|
+
export type CreateMinioClientParameters = {
|
|
22
|
+
/**
|
|
23
|
+
* Minio access key ID.
|
|
24
|
+
*/
|
|
25
|
+
accessKeyId: string;
|
|
26
|
+
/**
|
|
27
|
+
* Minio endpoint.
|
|
28
|
+
*/
|
|
29
|
+
endpoint: string;
|
|
30
|
+
/**
|
|
31
|
+
* Minio region.
|
|
32
|
+
*/
|
|
33
|
+
region: string;
|
|
34
|
+
/**
|
|
35
|
+
* Minio secret access key.
|
|
36
|
+
*/
|
|
37
|
+
secretAccessKey: string;
|
|
38
|
+
};
|
|
39
|
+
export type CreateBackblazeClientParameters = {
|
|
40
|
+
/**
|
|
41
|
+
* Backblaze B2 application key.
|
|
42
|
+
*/
|
|
43
|
+
applicationKey: string;
|
|
44
|
+
/**
|
|
45
|
+
* Backblaze B2 application key ID.
|
|
46
|
+
*/
|
|
47
|
+
applicationKeyId: string;
|
|
48
|
+
/**
|
|
49
|
+
* Backblaze B2 region.
|
|
50
|
+
*/
|
|
51
|
+
region: string;
|
|
52
|
+
};
|
|
53
|
+
export type CreateWasabiClientParameters = {
|
|
54
|
+
/**
|
|
55
|
+
* Wasabi access key ID.
|
|
56
|
+
*/
|
|
57
|
+
accessKeyId: string;
|
|
58
|
+
/**
|
|
59
|
+
* Wasabi region.
|
|
60
|
+
*/
|
|
61
|
+
region: string;
|
|
62
|
+
/**
|
|
63
|
+
* Wasabi secret access key.
|
|
64
|
+
*/
|
|
65
|
+
secretAccessKey: string;
|
|
66
|
+
};
|
|
67
|
+
export type CreateDigitalOceanClientParameters = {
|
|
68
|
+
/**
|
|
69
|
+
* DigitalOcean Spaces key.
|
|
70
|
+
*/
|
|
71
|
+
key: string;
|
|
72
|
+
/**
|
|
73
|
+
* DigitalOcean Spaces region.
|
|
74
|
+
*/
|
|
75
|
+
region: string;
|
|
76
|
+
/**
|
|
77
|
+
* DigitalOcean Spaces secret.
|
|
78
|
+
*/
|
|
79
|
+
secret: string;
|
|
80
|
+
};
|
|
81
|
+
export type CreateTigrisClientParameters = {
|
|
82
|
+
/**
|
|
83
|
+
* Tigris access key ID.
|
|
84
|
+
*/
|
|
85
|
+
accessKeyId: string;
|
|
86
|
+
/**
|
|
87
|
+
* Tigris endpoint.
|
|
88
|
+
* @default `https://t3.storage.dev`
|
|
89
|
+
*/
|
|
90
|
+
endpoint?: string;
|
|
91
|
+
/**
|
|
92
|
+
* Tigris secret access key.
|
|
93
|
+
*/
|
|
94
|
+
secretAccessKey: string;
|
|
95
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { S3ClientConfig } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { CreateWasabiClientParameters } from "./types.d.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Wasabi client, compatible with the S3 API.
|
|
5
|
+
*
|
|
6
|
+
* Optionally, you can omit the parameters and use the following environment variables:
|
|
7
|
+
* - `WASABI_REGION`
|
|
8
|
+
* - `AWS_ACCESS_KEY_ID`
|
|
9
|
+
* - `AWS_SECRET_ACCESS_KEY`
|
|
10
|
+
*/
|
|
11
|
+
declare const wasabi: (parameters?: CreateWasabiClientParameters) => S3ClientConfig;
|
|
12
|
+
export default wasabi;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as S3File } from "./s3-file.d.ts";
|
|
2
|
+
export { default as S3MetaStorage } from "./s3-meta-storage.d.ts";
|
|
3
|
+
export { default as S3Storage } from "./s3-storage.d.ts";
|
|
4
|
+
export type { AwsError, AWSErrorV2, S3MetaStorageOptions, S3StorageOptions } from "./types.d.ts";
|