@lossless.org/client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.smartconfig.json +37 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.losslessorgclient.d.ts +32 -0
- package/dist_ts/classes.losslessorgclient.js +103 -0
- package/dist_ts/core/classes.error.d.ts +16 -0
- package/dist_ts/core/classes.error.js +29 -0
- package/dist_ts/core/classes.operation.d.ts +17 -0
- package/dist_ts/core/classes.operation.js +70 -0
- package/dist_ts/core/interfaces.d.ts +18 -0
- package/dist_ts/core/interfaces.js +2 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +3 -0
- package/dist_ts/nosqldb/classes.atomicdelete.d.ts +26 -0
- package/dist_ts/nosqldb/classes.atomicdelete.js +44 -0
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.d.ts +27 -0
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.js +86 -0
- package/dist_ts/nosqldb/classes.atomicupdate.d.ts +26 -0
- package/dist_ts/nosqldb/classes.atomicupdate.js +55 -0
- package/dist_ts/nosqldb/classes.bootstraprecord.d.ts +14 -0
- package/dist_ts/nosqldb/classes.bootstraprecord.js +80 -0
- package/dist_ts/nosqldb/classes.bsonassertion.d.ts +2 -0
- package/dist_ts/nosqldb/classes.bsonassertion.js +29 -0
- package/dist_ts/nosqldb/classes.bsonobjectid.d.ts +2 -0
- package/dist_ts/nosqldb/classes.bsonobjectid.js +50 -0
- package/dist_ts/nosqldb/classes.bsonsnapshot.d.ts +3 -0
- package/dist_ts/nosqldb/classes.bsonsnapshot.js +126 -0
- package/dist_ts/nosqldb/classes.cached-document.d.ts +27 -0
- package/dist_ts/nosqldb/classes.cached-document.js +112 -0
- package/dist_ts/nosqldb/classes.collection.d.ts +302 -0
- package/dist_ts/nosqldb/classes.collection.js +1568 -0
- package/dist_ts/nosqldb/classes.collectionfactory.d.ts +30 -0
- package/dist_ts/nosqldb/classes.collectionfactory.js +65 -0
- package/dist_ts/nosqldb/classes.collectionlifecycle.d.ts +4 -0
- package/dist_ts/nosqldb/classes.collectionlifecycle.js +15 -0
- package/dist_ts/nosqldb/classes.collectionpreparation.d.ts +34 -0
- package/dist_ts/nosqldb/classes.collectionpreparation.js +134 -0
- package/dist_ts/nosqldb/classes.collectiontopology.d.ts +47 -0
- package/dist_ts/nosqldb/classes.collectiontopology.js +388 -0
- package/dist_ts/nosqldb/classes.connection.d.ts +18 -0
- package/dist_ts/nosqldb/classes.connection.js +23 -0
- package/dist_ts/nosqldb/classes.convenience.d.ts +1 -0
- package/dist_ts/nosqldb/classes.convenience.js +5 -0
- package/dist_ts/nosqldb/classes.cursor.d.ts +15 -0
- package/dist_ts/nosqldb/classes.cursor.js +82 -0
- package/dist_ts/nosqldb/classes.cursoroperation.d.ts +7 -0
- package/dist_ts/nosqldb/classes.cursoroperation.js +36 -0
- package/dist_ts/nosqldb/classes.db.d.ts +98 -0
- package/dist_ts/nosqldb/classes.db.js +434 -0
- package/dist_ts/nosqldb/classes.distributedcoordinator.d.ts +52 -0
- package/dist_ts/nosqldb/classes.distributedcoordinator.js +314 -0
- package/dist_ts/nosqldb/classes.doc.d.ts +722 -0
- package/dist_ts/nosqldb/classes.doc.js +2976 -0
- package/dist_ts/nosqldb/classes.easystore.d.ts +42 -0
- package/dist_ts/nosqldb/classes.easystore.js +199 -0
- package/dist_ts/nosqldb/classes.exactpersistence.d.ts +141 -0
- package/dist_ts/nosqldb/classes.exactpersistence.js +1110 -0
- package/dist_ts/nosqldb/classes.lucene.adapter.d.ts +173 -0
- package/dist_ts/nosqldb/classes.lucene.adapter.js +623 -0
- package/dist_ts/nosqldb/classes.mongoadministration.d.ts +73 -0
- package/dist_ts/nosqldb/classes.mongoadministration.js +497 -0
- package/dist_ts/nosqldb/classes.namespaceinspection.d.ts +42 -0
- package/dist_ts/nosqldb/classes.namespaceinspection.js +138 -0
- package/dist_ts/nosqldb/classes.operationbudget.d.ts +22 -0
- package/dist_ts/nosqldb/classes.operationbudget.js +65 -0
- package/dist_ts/nosqldb/classes.ordinarypersistence.d.ts +18 -0
- package/dist_ts/nosqldb/classes.ordinarypersistence.js +71 -0
- package/dist_ts/nosqldb/classes.persistence.d.ts +14 -0
- package/dist_ts/nosqldb/classes.persistence.js +34 -0
- package/dist_ts/nosqldb/classes.session.d.ts +28 -0
- package/dist_ts/nosqldb/classes.session.js +246 -0
- package/dist_ts/nosqldb/classes.storedinspection.d.ts +44 -0
- package/dist_ts/nosqldb/classes.storedinspection.js +100 -0
- package/dist_ts/nosqldb/classes.testdatabase.d.ts +56 -0
- package/dist_ts/nosqldb/classes.testdatabase.js +250 -0
- package/dist_ts/nosqldb/classes.watcher.d.ts +37 -0
- package/dist_ts/nosqldb/classes.watcher.js +98 -0
- package/dist_ts/nosqldb/index.d.ts +27 -0
- package/dist_ts/nosqldb/index.js +18 -0
- package/dist_ts/nosqldb/logging.d.ts +2 -0
- package/dist_ts/nosqldb/logging.js +3 -0
- package/dist_ts/nosqldb/plugins.d.ts +17 -0
- package/dist_ts/nosqldb/plugins.js +20 -0
- package/dist_ts/nosqldb/shim.d.ts +1 -0
- package/dist_ts/nosqldb/shim.js +8 -0
- package/dist_ts/nosqldb/testsupport.d.ts +3 -0
- package/dist_ts/nosqldb/testsupport.js +3 -0
- package/dist_ts/objectstorage/classes.bucket.d.ts +227 -0
- package/dist_ts/objectstorage/classes.bucket.js +939 -0
- package/dist_ts/objectstorage/classes.connection.d.ts +21 -0
- package/dist_ts/objectstorage/classes.connection.js +27 -0
- package/dist_ts/objectstorage/classes.directory.d.ts +124 -0
- package/dist_ts/objectstorage/classes.directory.js +335 -0
- package/dist_ts/objectstorage/classes.exactpathpurgeerror.d.ts +5 -0
- package/dist_ts/objectstorage/classes.exactpathpurgeerror.js +18 -0
- package/dist_ts/objectstorage/classes.exactuploaderror.d.ts +5 -0
- package/dist_ts/objectstorage/classes.exactuploaderror.js +19 -0
- package/dist_ts/objectstorage/classes.file.d.ts +91 -0
- package/dist_ts/objectstorage/classes.file.js +255 -0
- package/dist_ts/objectstorage/classes.listcursor.d.ts +41 -0
- package/dist_ts/objectstorage/classes.listcursor.js +67 -0
- package/dist_ts/objectstorage/classes.metadata.d.ts +57 -0
- package/dist_ts/objectstorage/classes.metadata.js +113 -0
- package/dist_ts/objectstorage/classes.smartbucket.d.ts +57 -0
- package/dist_ts/objectstorage/classes.smartbucket.js +357 -0
- package/dist_ts/objectstorage/classes.trash.d.ts +11 -0
- package/dist_ts/objectstorage/classes.trash.js +22 -0
- package/dist_ts/objectstorage/classes.watcher.d.ts +79 -0
- package/dist_ts/objectstorage/classes.watcher.js +249 -0
- package/dist_ts/objectstorage/helpers.d.ts +25 -0
- package/dist_ts/objectstorage/helpers.js +215 -0
- package/dist_ts/objectstorage/index.d.ts +13 -0
- package/dist_ts/objectstorage/index.js +13 -0
- package/dist_ts/objectstorage/interfaces.d.ts +276 -0
- package/dist_ts/objectstorage/interfaces.js +2 -0
- package/dist_ts/objectstorage/internal.exactpathpurge.operations.d.ts +11 -0
- package/dist_ts/objectstorage/internal.exactpathpurge.operations.js +1069 -0
- package/dist_ts/objectstorage/internal.exactupload.capability.d.ts +40 -0
- package/dist_ts/objectstorage/internal.exactupload.capability.js +382 -0
- package/dist_ts/objectstorage/internal.exactupload.operations.d.ts +11 -0
- package/dist_ts/objectstorage/internal.exactupload.operations.js +1104 -0
- package/dist_ts/objectstorage/internal.multipart.planner.d.ts +8 -0
- package/dist_ts/objectstorage/internal.multipart.planner.js +63 -0
- package/dist_ts/objectstorage/internal.multipart.stream.d.ts +17 -0
- package/dist_ts/objectstorage/internal.multipart.stream.js +440 -0
- package/dist_ts/objectstorage/internal.multipart.types.d.ts +82 -0
- package/dist_ts/objectstorage/internal.multipart.types.js +2 -0
- package/dist_ts/objectstorage/plugins.d.ts +17 -0
- package/dist_ts/objectstorage/plugins.js +23 -0
- package/dist_ts/plugins.d.ts +4 -0
- package/dist_ts/plugins.js +5 -0
- package/dist_ts/sqldb/classes.clickhouseconnection.d.ts +39 -0
- package/dist_ts/sqldb/classes.clickhouseconnection.js +225 -0
- package/dist_ts/sqldb/classes.sqlconnection.d.ts +50 -0
- package/dist_ts/sqldb/classes.sqlconnection.js +376 -0
- package/dist_ts/sqldb/classes.sqltable.d.ts +29 -0
- package/dist_ts/sqldb/classes.sqltable.js +70 -0
- package/dist_ts/sqldb/clickhouse/classes.metricwriter.d.ts +27 -0
- package/dist_ts/sqldb/clickhouse/classes.metricwriter.js +89 -0
- package/dist_ts/sqldb/clickhouse/index.d.ts +9 -0
- package/dist_ts/sqldb/clickhouse/index.js +13 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.d.ts +88 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.js +304 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.d.ts +28 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.js +46 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.d.ts +43 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.js +155 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.d.ts +13 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.js +36 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.d.ts +49 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.js +106 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.d.ts +51 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.js +96 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.d.ts +5 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.js +6 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.types.d.ts +53 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.types.js +41 -0
- package/dist_ts/sqldb/index.d.ts +6 -0
- package/dist_ts/sqldb/index.js +6 -0
- package/dist_ts/sqldb/interfaces.d.ts +53 -0
- package/dist_ts/sqldb/interfaces.js +19 -0
- package/dist_ts/sqldb/internal.sqlpool.d.ts +51 -0
- package/dist_ts/sqldb/internal.sqlpool.js +214 -0
- package/dist_ts/sqldb/plugins.clickhouse.d.ts +4 -0
- package/dist_ts/sqldb/plugins.clickhouse.js +5 -0
- package/dist_ts/sqldb/plugins.mariadb.d.ts +4 -0
- package/dist_ts/sqldb/plugins.mariadb.js +5 -0
- package/docs/source/smartbucket/license.md +19 -0
- package/docs/source/smartclickhouse/license.md +19 -0
- package/license.md +21 -0
- package/package.json +101 -0
- package/readme.md +157 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.losslessorgclient.ts +104 -0
- package/ts/core/classes.error.ts +31 -0
- package/ts/core/classes.operation.ts +60 -0
- package/ts/core/interfaces.ts +24 -0
- package/ts/index.ts +4 -0
- package/ts/nosqldb/classes.atomicdelete.ts +81 -0
- package/ts/nosqldb/classes.atomicfindoneandupdate.ts +152 -0
- package/ts/nosqldb/classes.atomicupdate.ts +99 -0
- package/ts/nosqldb/classes.bootstraprecord.ts +107 -0
- package/ts/nosqldb/classes.bsonassertion.ts +25 -0
- package/ts/nosqldb/classes.bsonobjectid.ts +45 -0
- package/ts/nosqldb/classes.bsonsnapshot.ts +105 -0
- package/ts/nosqldb/classes.cached-document.ts +67 -0
- package/ts/nosqldb/classes.collection.ts +2399 -0
- package/ts/nosqldb/classes.collectionfactory.ts +87 -0
- package/ts/nosqldb/classes.collectionlifecycle.ts +24 -0
- package/ts/nosqldb/classes.collectionpreparation.ts +164 -0
- package/ts/nosqldb/classes.collectiontopology.ts +645 -0
- package/ts/nosqldb/classes.connection.ts +31 -0
- package/ts/nosqldb/classes.convenience.ts +5 -0
- package/ts/nosqldb/classes.cursor.ts +88 -0
- package/ts/nosqldb/classes.cursoroperation.ts +38 -0
- package/ts/nosqldb/classes.db.ts +637 -0
- package/ts/nosqldb/classes.distributedcoordinator.ts +305 -0
- package/ts/nosqldb/classes.doc.ts +4928 -0
- package/ts/nosqldb/classes.easystore.ts +154 -0
- package/ts/nosqldb/classes.exactpersistence.ts +1974 -0
- package/ts/nosqldb/classes.lucene.adapter.ts +780 -0
- package/ts/nosqldb/classes.mongoadministration.ts +867 -0
- package/ts/nosqldb/classes.namespaceinspection.ts +199 -0
- package/ts/nosqldb/classes.operationbudget.ts +75 -0
- package/ts/nosqldb/classes.ordinarypersistence.ts +84 -0
- package/ts/nosqldb/classes.persistence.ts +62 -0
- package/ts/nosqldb/classes.session.ts +389 -0
- package/ts/nosqldb/classes.storedinspection.ts +151 -0
- package/ts/nosqldb/classes.testdatabase.ts +272 -0
- package/ts/nosqldb/classes.watcher.ts +96 -0
- package/ts/nosqldb/index.ts +51 -0
- package/ts/nosqldb/logging.ts +3 -0
- package/ts/nosqldb/plugins.ts +37 -0
- package/ts/nosqldb/shim.ts +6 -0
- package/ts/nosqldb/testsupport.ts +13 -0
- package/ts/objectstorage/classes.bucket.ts +1114 -0
- package/ts/objectstorage/classes.connection.ts +36 -0
- package/ts/objectstorage/classes.directory.ts +425 -0
- package/ts/objectstorage/classes.exactpathpurgeerror.ts +24 -0
- package/ts/objectstorage/classes.exactuploaderror.ts +25 -0
- package/ts/objectstorage/classes.file.ts +303 -0
- package/ts/objectstorage/classes.listcursor.ts +89 -0
- package/ts/objectstorage/classes.metadata.ts +134 -0
- package/ts/objectstorage/classes.smartbucket.ts +445 -0
- package/ts/objectstorage/classes.trash.ts +30 -0
- package/ts/objectstorage/classes.watcher.ts +289 -0
- package/ts/objectstorage/helpers.ts +254 -0
- package/ts/objectstorage/index.ts +13 -0
- package/ts/objectstorage/interfaces.ts +389 -0
- package/ts/objectstorage/internal.exactpathpurge.operations.ts +1936 -0
- package/ts/objectstorage/internal.exactupload.capability.ts +580 -0
- package/ts/objectstorage/internal.exactupload.operations.ts +1715 -0
- package/ts/objectstorage/internal.multipart.planner.ts +90 -0
- package/ts/objectstorage/internal.multipart.stream.ts +606 -0
- package/ts/objectstorage/internal.multipart.types.ts +106 -0
- package/ts/objectstorage/plugins.ts +35 -0
- package/ts/plugins.ts +4 -0
- package/ts/sqldb/classes.clickhouseconnection.ts +189 -0
- package/ts/sqldb/classes.sqlconnection.ts +350 -0
- package/ts/sqldb/classes.sqltable.ts +70 -0
- package/ts/sqldb/clickhouse/classes.metricwriter.ts +72 -0
- package/ts/sqldb/clickhouse/index.ts +16 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.ts +372 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.ts +52 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.ts +120 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.resultset.ts +44 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.ts +123 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.ts +114 -0
- package/ts/sqldb/clickhouse/smartclickhouse.plugins.ts +5 -0
- package/ts/sqldb/clickhouse/smartclickhouse.types.ts +134 -0
- package/ts/sqldb/index.ts +6 -0
- package/ts/sqldb/interfaces.ts +61 -0
- package/ts/sqldb/internal.sqlpool.ts +179 -0
- package/ts/sqldb/plugins.clickhouse.ts +4 -0
- package/ts/sqldb/plugins.mariadb.ts +4 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IExactPathPurgeCapability, IExactUploadCapability, TExactPathPurgeVersioningMode } from './interfaces.js';
|
|
3
|
+
interface ISmartBucketCapabilityRef {
|
|
4
|
+
readonly storageClient: plugins.s3.S3Client;
|
|
5
|
+
}
|
|
6
|
+
interface IBucketCapabilityRef {
|
|
7
|
+
name: string;
|
|
8
|
+
smartbucketRef: ISmartBucketCapabilityRef;
|
|
9
|
+
}
|
|
10
|
+
export interface IExactUploadOperation {
|
|
11
|
+
readonly bucketName: string;
|
|
12
|
+
readonly client: plugins.s3.S3Client;
|
|
13
|
+
readonly signal: AbortSignal;
|
|
14
|
+
registerOwnedIndependentAbort(abortControllerArg: AbortController, disposeArg: () => void): () => void;
|
|
15
|
+
assertLifecycleCurrent(): void;
|
|
16
|
+
assertCurrent(): void;
|
|
17
|
+
finish(): void;
|
|
18
|
+
}
|
|
19
|
+
export interface IBasicBucketOperation extends IExactUploadOperation {
|
|
20
|
+
runProvider<T>(sendArg: () => Promise<T>, optionsArg?: {
|
|
21
|
+
disposeLateResult?: (resultArg: T) => void | Promise<void>;
|
|
22
|
+
}): Promise<T>;
|
|
23
|
+
}
|
|
24
|
+
export interface IExactPathPurgeOperation extends IExactUploadOperation {
|
|
25
|
+
readonly versioningMode: TExactPathPurgeVersioningMode;
|
|
26
|
+
}
|
|
27
|
+
export declare const registerOperationLifecycle: (smartbucketRefArg: ISmartBucketCapabilityRef, storageClientArg: plugins.s3.S3Client) => void;
|
|
28
|
+
export declare const reserveOperationLifecycleClientMutation: (smartbucketRefArg: ISmartBucketCapabilityRef) => void;
|
|
29
|
+
export declare const commitOperationLifecycleClient: (smartbucketRefArg: ISmartBucketCapabilityRef, storageClientArg: plugins.s3.S3Client) => void;
|
|
30
|
+
export declare const rollbackOperationLifecycleClientMutation: (smartbucketRefArg: ISmartBucketCapabilityRef) => void;
|
|
31
|
+
export declare const beginOperationLifecycleClose: (smartbucketRefArg: ISmartBucketCapabilityRef) => Promise<void> | undefined;
|
|
32
|
+
export declare const completeOperationLifecycleClose: (smartbucketRefArg: ISmartBucketCapabilityRef) => void;
|
|
33
|
+
export declare const beginBasicBucketOperation: (bucketRefArg: IBucketCapabilityRef, callerSignalArg?: AbortSignal) => IBasicBucketOperation;
|
|
34
|
+
export declare const beginExactUploadProbeOperation: (bucketRefArg: IBucketCapabilityRef, callerSignalArg?: AbortSignal) => IExactUploadOperation;
|
|
35
|
+
export declare const beginExactPathPurgeProbeOperation: (bucketRefArg: IBucketCapabilityRef, callerSignalArg?: AbortSignal) => IExactUploadOperation;
|
|
36
|
+
export declare const mintExactUploadCapability: (bucketRefArg: IBucketCapabilityRef, operationArg: IExactUploadOperation) => IExactUploadCapability;
|
|
37
|
+
export declare const beginExactUploadCapabilityOperation: (bucketRefArg: IBucketCapabilityRef, capabilityArg: IExactUploadCapability, callerSignalArg?: AbortSignal) => IExactUploadOperation;
|
|
38
|
+
export declare const mintExactPathPurgeCapability: (bucketRefArg: IBucketCapabilityRef, operationArg: IExactUploadOperation, versioningModeArg: TExactPathPurgeVersioningMode) => IExactPathPurgeCapability;
|
|
39
|
+
export declare const beginExactPathPurgeCapabilityOperation: (bucketRefArg: IBucketCapabilityRef, capabilityArg: IExactPathPurgeCapability, callerSignalArg?: AbortSignal) => IExactPathPurgeOperation;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
const lifecycleRecords = new WeakMap();
|
|
3
|
+
const capabilityBindings = new WeakMap();
|
|
4
|
+
const purgeCapabilityBindings = new WeakMap();
|
|
5
|
+
const operationCloseSettlementTimeoutMs = 35_000;
|
|
6
|
+
const basicOperationLateDisposalTimeoutMs = 5_000;
|
|
7
|
+
const abortAndDisposeIndependentWork = (activeOperationArg, causeArg) => {
|
|
8
|
+
for (const ownedAbort of activeOperationArg.ownedIndependentAborts) {
|
|
9
|
+
ownedAbort.abortController.abort(causeArg);
|
|
10
|
+
ownedAbort.dispose();
|
|
11
|
+
}
|
|
12
|
+
activeOperationArg.ownedIndependentAborts.clear();
|
|
13
|
+
};
|
|
14
|
+
const getLifecycleRecord = (smartbucketRefArg) => {
|
|
15
|
+
const lifecycleRecord = lifecycleRecords.get(smartbucketRefArg);
|
|
16
|
+
if (!lifecycleRecord) {
|
|
17
|
+
throw new Error('The Bucket is not attached to a lifecycle-managed SmartBucket.');
|
|
18
|
+
}
|
|
19
|
+
return lifecycleRecord;
|
|
20
|
+
};
|
|
21
|
+
const assertOpenLifecycle = (lifecycleRecordArg) => {
|
|
22
|
+
if (lifecycleRecordArg.state !== 'open') {
|
|
23
|
+
throw new Error(`The SmartBucket operation lifecycle is ${lifecycleRecordArg.state}.`);
|
|
24
|
+
}
|
|
25
|
+
if (lifecycleRecordArg.clientMutationReserved) {
|
|
26
|
+
throw new Error('The SmartBucket storageClient is changing.');
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export const registerOperationLifecycle = (smartbucketRefArg, storageClientArg) => {
|
|
30
|
+
if (lifecycleRecords.has(smartbucketRefArg)) {
|
|
31
|
+
throw new Error('The SmartBucket operation lifecycle is already registered.');
|
|
32
|
+
}
|
|
33
|
+
lifecycleRecords.set(smartbucketRefArg, {
|
|
34
|
+
state: 'open',
|
|
35
|
+
generation: 0,
|
|
36
|
+
storageClient: storageClientArg,
|
|
37
|
+
activeOperations: new Set(),
|
|
38
|
+
clientMutationReserved: false,
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
export const reserveOperationLifecycleClientMutation = (smartbucketRefArg) => {
|
|
42
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRefArg);
|
|
43
|
+
assertOpenLifecycle(lifecycleRecord);
|
|
44
|
+
if (lifecycleRecord.activeOperations.size > 0) {
|
|
45
|
+
throw new Error('Cannot change storageClient while a lifecycle-managed operation is active.');
|
|
46
|
+
}
|
|
47
|
+
lifecycleRecord.clientMutationReserved = true;
|
|
48
|
+
};
|
|
49
|
+
export const commitOperationLifecycleClient = (smartbucketRefArg, storageClientArg) => {
|
|
50
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRefArg);
|
|
51
|
+
if (lifecycleRecord.state !== 'open' || !lifecycleRecord.clientMutationReserved) {
|
|
52
|
+
throw new Error('The SmartBucket storageClient mutation was not reserved.');
|
|
53
|
+
}
|
|
54
|
+
lifecycleRecord.generation++;
|
|
55
|
+
lifecycleRecord.storageClient = storageClientArg;
|
|
56
|
+
lifecycleRecord.clientMutationReserved = false;
|
|
57
|
+
};
|
|
58
|
+
export const rollbackOperationLifecycleClientMutation = (smartbucketRefArg) => {
|
|
59
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRefArg);
|
|
60
|
+
if (lifecycleRecord.state === 'open') {
|
|
61
|
+
lifecycleRecord.clientMutationReserved = false;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
export const beginOperationLifecycleClose = (smartbucketRefArg) => {
|
|
65
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRefArg);
|
|
66
|
+
if (lifecycleRecord.state === 'closed') {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
lifecycleRecord.state = 'closing';
|
|
70
|
+
lifecycleRecord.generation++;
|
|
71
|
+
const lifecycleAbortCause = new Error('The SmartBucket lifecycle closed during an object operation.');
|
|
72
|
+
const activeSettlements = [];
|
|
73
|
+
for (const activeOperation of lifecycleRecord.activeOperations) {
|
|
74
|
+
activeSettlements.push(activeOperation.settlement);
|
|
75
|
+
activeOperation.abortController.abort(lifecycleAbortCause);
|
|
76
|
+
}
|
|
77
|
+
if (activeSettlements.length === 0) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
const settleAllOperations = Promise.allSettled(activeSettlements).then(() => undefined);
|
|
81
|
+
return new Promise((resolveArg) => {
|
|
82
|
+
const settlementDeadline = setTimeout(() => {
|
|
83
|
+
for (const activeOperation of lifecycleRecord.activeOperations) {
|
|
84
|
+
activeOperation.forceFinish(lifecycleAbortCause);
|
|
85
|
+
}
|
|
86
|
+
resolveArg();
|
|
87
|
+
}, operationCloseSettlementTimeoutMs);
|
|
88
|
+
void settleAllOperations.then(() => {
|
|
89
|
+
clearTimeout(settlementDeadline);
|
|
90
|
+
resolveArg();
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
export const completeOperationLifecycleClose = (smartbucketRefArg) => {
|
|
95
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRefArg);
|
|
96
|
+
lifecycleRecord.state = 'closed';
|
|
97
|
+
for (const activeOperation of lifecycleRecord.activeOperations) {
|
|
98
|
+
activeOperation.forceFinish(new Error('The SmartBucket operation lifecycle is closed.'));
|
|
99
|
+
}
|
|
100
|
+
lifecycleRecords.delete(smartbucketRefArg);
|
|
101
|
+
};
|
|
102
|
+
const assertBindingCurrent = (bindingArg) => {
|
|
103
|
+
const lifecycleRecord = getLifecycleRecord(bindingArg.smartbucketRef);
|
|
104
|
+
assertOpenLifecycle(lifecycleRecord);
|
|
105
|
+
if (bindingArg.bucketRef.smartbucketRef !== bindingArg.smartbucketRef ||
|
|
106
|
+
bindingArg.bucketRef.name !== bindingArg.bucketName ||
|
|
107
|
+
lifecycleRecord.generation !== bindingArg.lifecycleGeneration ||
|
|
108
|
+
lifecycleRecord.storageClient !== bindingArg.storageClient ||
|
|
109
|
+
bindingArg.smartbucketRef.storageClient !== bindingArg.storageClient) {
|
|
110
|
+
throw new Error('The exact upload capability is invalid or stale.');
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const beginOperation = (bindingArg, callerSignalArg) => {
|
|
114
|
+
assertBindingCurrent(bindingArg);
|
|
115
|
+
const lifecycleRecord = getLifecycleRecord(bindingArg.smartbucketRef);
|
|
116
|
+
const operationAbortController = new AbortController();
|
|
117
|
+
let settleOperation;
|
|
118
|
+
const operationSettlement = new Promise((resolveArg) => {
|
|
119
|
+
settleOperation = resolveArg;
|
|
120
|
+
});
|
|
121
|
+
const abortForCaller = () => {
|
|
122
|
+
operationAbortController.abort(callerSignalArg?.reason ?? new Error('The object operation was aborted.'));
|
|
123
|
+
};
|
|
124
|
+
let callerAbortListenerReleased = false;
|
|
125
|
+
const releaseCallerAbortListener = () => {
|
|
126
|
+
if (callerAbortListenerReleased) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
callerAbortListenerReleased = true;
|
|
130
|
+
callerSignalArg?.removeEventListener('abort', abortForCaller);
|
|
131
|
+
};
|
|
132
|
+
let finishRequested = false;
|
|
133
|
+
let pendingProviderCount = 0;
|
|
134
|
+
let settled = false;
|
|
135
|
+
const settleIfFinished = () => {
|
|
136
|
+
if (!finishRequested || pendingProviderCount > 0 || settled) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
settled = true;
|
|
140
|
+
activeOperation.releaseCallerAbortListener();
|
|
141
|
+
lifecycleRecord.activeOperations.delete(activeOperation);
|
|
142
|
+
activeOperation.settle();
|
|
143
|
+
};
|
|
144
|
+
const activeOperation = {
|
|
145
|
+
abortController: operationAbortController,
|
|
146
|
+
ownedIndependentAborts: new Set(),
|
|
147
|
+
settlement: operationSettlement,
|
|
148
|
+
settle: settleOperation,
|
|
149
|
+
releaseCallerAbortListener,
|
|
150
|
+
forceFinish: (causeArg) => {
|
|
151
|
+
if (settled) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
finishRequested = true;
|
|
155
|
+
pendingProviderCount = 0;
|
|
156
|
+
abortAndDisposeIndependentWork(activeOperation, causeArg);
|
|
157
|
+
settleIfFinished();
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
lifecycleRecord.activeOperations.add(activeOperation);
|
|
161
|
+
callerSignalArg?.addEventListener('abort', abortForCaller, { once: true });
|
|
162
|
+
if (callerSignalArg?.aborted) {
|
|
163
|
+
abortForCaller();
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
bucketName: bindingArg.bucketName,
|
|
167
|
+
client: bindingArg.storageClient,
|
|
168
|
+
signal: operationAbortController.signal,
|
|
169
|
+
registerOwnedIndependentAbort(abortControllerArg, disposeArg) {
|
|
170
|
+
this.assertLifecycleCurrent();
|
|
171
|
+
const ownedAbort = {
|
|
172
|
+
abortController: abortControllerArg,
|
|
173
|
+
dispose: disposeArg,
|
|
174
|
+
};
|
|
175
|
+
activeOperation.ownedIndependentAborts.add(ownedAbort);
|
|
176
|
+
let released = false;
|
|
177
|
+
return () => {
|
|
178
|
+
if (released) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
released = true;
|
|
182
|
+
activeOperation.ownedIndependentAborts.delete(ownedAbort);
|
|
183
|
+
};
|
|
184
|
+
},
|
|
185
|
+
assertLifecycleCurrent() {
|
|
186
|
+
if (lifecycleRecord.state === 'closed' ||
|
|
187
|
+
!lifecycleRecord.activeOperations.has(activeOperation) ||
|
|
188
|
+
bindingArg.bucketRef.smartbucketRef !== bindingArg.smartbucketRef ||
|
|
189
|
+
bindingArg.bucketRef.name !== bindingArg.bucketName ||
|
|
190
|
+
lifecycleRecord.storageClient !== bindingArg.storageClient ||
|
|
191
|
+
bindingArg.smartbucketRef.storageClient !== bindingArg.storageClient) {
|
|
192
|
+
throw new Error('The object operation lifecycle or storage client is stale.');
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
assertCurrent() {
|
|
196
|
+
if (operationAbortController.signal.aborted) {
|
|
197
|
+
throw operationAbortController.signal.reason;
|
|
198
|
+
}
|
|
199
|
+
assertBindingCurrent(bindingArg);
|
|
200
|
+
},
|
|
201
|
+
runProvider(sendArg, optionsArg = {}) {
|
|
202
|
+
this.assertCurrent();
|
|
203
|
+
pendingProviderCount++;
|
|
204
|
+
return new Promise((resolveArg, rejectArg) => {
|
|
205
|
+
let publicSettled = false;
|
|
206
|
+
const settlePublic = (outcomeArg) => {
|
|
207
|
+
if (publicSettled) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
publicSettled = true;
|
|
211
|
+
operationAbortController.signal.removeEventListener('abort', abortPublicWait);
|
|
212
|
+
if ('result' in outcomeArg) {
|
|
213
|
+
resolveArg(outcomeArg.result);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
rejectArg(outcomeArg.error);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
const abortPublicWait = () => {
|
|
220
|
+
settlePublic({
|
|
221
|
+
error: operationAbortController.signal.reason
|
|
222
|
+
?? new Error('The bucket operation was aborted.'),
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
operationAbortController.signal.addEventListener('abort', abortPublicWait, {
|
|
226
|
+
once: true,
|
|
227
|
+
});
|
|
228
|
+
let providerPromise;
|
|
229
|
+
try {
|
|
230
|
+
providerPromise = sendArg();
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
pendingProviderCount--;
|
|
234
|
+
settleIfFinished();
|
|
235
|
+
settlePublic({ error });
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
void providerPromise.then(async (resultArg) => {
|
|
239
|
+
if (operationAbortController.signal.aborted
|
|
240
|
+
&& optionsArg.disposeLateResult) {
|
|
241
|
+
const disposal = Promise.resolve()
|
|
242
|
+
.then(() => optionsArg.disposeLateResult(resultArg));
|
|
243
|
+
void disposal.catch(() => undefined);
|
|
244
|
+
let disposalDeadline;
|
|
245
|
+
try {
|
|
246
|
+
await Promise.race([
|
|
247
|
+
disposal.catch(() => undefined),
|
|
248
|
+
new Promise((resolveDisposalArg) => {
|
|
249
|
+
disposalDeadline = setTimeout(resolveDisposalArg, basicOperationLateDisposalTimeoutMs);
|
|
250
|
+
}),
|
|
251
|
+
]);
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
if (disposalDeadline) {
|
|
255
|
+
clearTimeout(disposalDeadline);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
pendingProviderCount--;
|
|
260
|
+
settleIfFinished();
|
|
261
|
+
if (operationAbortController.signal.aborted) {
|
|
262
|
+
abortPublicWait();
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
settlePublic({ result: resultArg });
|
|
266
|
+
}
|
|
267
|
+
}, (errorArg) => {
|
|
268
|
+
pendingProviderCount--;
|
|
269
|
+
settleIfFinished();
|
|
270
|
+
if (operationAbortController.signal.aborted) {
|
|
271
|
+
abortPublicWait();
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
settlePublic({ error: errorArg });
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
if (operationAbortController.signal.aborted) {
|
|
278
|
+
abortPublicWait();
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
},
|
|
282
|
+
finish() {
|
|
283
|
+
if (finishRequested) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
finishRequested = true;
|
|
287
|
+
abortAndDisposeIndependentWork(activeOperation, new Error('The object operation finished.'));
|
|
288
|
+
settleIfFinished();
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
};
|
|
292
|
+
export const beginBasicBucketOperation = (bucketRefArg, callerSignalArg) => {
|
|
293
|
+
const smartbucketRef = bucketRefArg.smartbucketRef;
|
|
294
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRef);
|
|
295
|
+
const binding = {
|
|
296
|
+
bucketRef: bucketRefArg,
|
|
297
|
+
bucketName: bucketRefArg.name,
|
|
298
|
+
smartbucketRef,
|
|
299
|
+
storageClient: lifecycleRecord.storageClient,
|
|
300
|
+
lifecycleGeneration: lifecycleRecord.generation,
|
|
301
|
+
};
|
|
302
|
+
return beginOperation(binding, callerSignalArg);
|
|
303
|
+
};
|
|
304
|
+
export const beginExactUploadProbeOperation = (bucketRefArg, callerSignalArg) => {
|
|
305
|
+
const smartbucketRef = bucketRefArg.smartbucketRef;
|
|
306
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRef);
|
|
307
|
+
const binding = {
|
|
308
|
+
bucketRef: bucketRefArg,
|
|
309
|
+
bucketName: bucketRefArg.name,
|
|
310
|
+
smartbucketRef,
|
|
311
|
+
storageClient: lifecycleRecord.storageClient,
|
|
312
|
+
lifecycleGeneration: lifecycleRecord.generation,
|
|
313
|
+
};
|
|
314
|
+
return beginOperation(binding, callerSignalArg);
|
|
315
|
+
};
|
|
316
|
+
export const beginExactPathPurgeProbeOperation = (bucketRefArg, callerSignalArg) => {
|
|
317
|
+
const smartbucketRef = bucketRefArg.smartbucketRef;
|
|
318
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRef);
|
|
319
|
+
const binding = {
|
|
320
|
+
bucketRef: bucketRefArg,
|
|
321
|
+
bucketName: bucketRefArg.name,
|
|
322
|
+
smartbucketRef,
|
|
323
|
+
storageClient: lifecycleRecord.storageClient,
|
|
324
|
+
lifecycleGeneration: lifecycleRecord.generation,
|
|
325
|
+
};
|
|
326
|
+
return beginOperation(binding, callerSignalArg);
|
|
327
|
+
};
|
|
328
|
+
export const mintExactUploadCapability = (bucketRefArg, operationArg) => {
|
|
329
|
+
operationArg.assertCurrent();
|
|
330
|
+
const smartbucketRef = bucketRefArg.smartbucketRef;
|
|
331
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRef);
|
|
332
|
+
const capability = Object.freeze({});
|
|
333
|
+
capabilityBindings.set(capability, {
|
|
334
|
+
bucketRef: bucketRefArg,
|
|
335
|
+
bucketName: operationArg.bucketName,
|
|
336
|
+
smartbucketRef,
|
|
337
|
+
storageClient: operationArg.client,
|
|
338
|
+
lifecycleGeneration: lifecycleRecord.generation,
|
|
339
|
+
});
|
|
340
|
+
return capability;
|
|
341
|
+
};
|
|
342
|
+
export const beginExactUploadCapabilityOperation = (bucketRefArg, capabilityArg, callerSignalArg) => {
|
|
343
|
+
if (typeof capabilityArg !== 'object' ||
|
|
344
|
+
capabilityArg === null) {
|
|
345
|
+
throw new Error('The exact upload capability is invalid or stale.');
|
|
346
|
+
}
|
|
347
|
+
const binding = capabilityBindings.get(capabilityArg);
|
|
348
|
+
if (!binding || binding.bucketRef !== bucketRefArg) {
|
|
349
|
+
throw new Error('The exact upload capability is invalid or stale.');
|
|
350
|
+
}
|
|
351
|
+
return beginOperation(binding, callerSignalArg);
|
|
352
|
+
};
|
|
353
|
+
export const mintExactPathPurgeCapability = (bucketRefArg, operationArg, versioningModeArg) => {
|
|
354
|
+
operationArg.assertCurrent();
|
|
355
|
+
const smartbucketRef = bucketRefArg.smartbucketRef;
|
|
356
|
+
const lifecycleRecord = getLifecycleRecord(smartbucketRef);
|
|
357
|
+
const capability = Object.freeze({});
|
|
358
|
+
purgeCapabilityBindings.set(capability, {
|
|
359
|
+
bucketRef: bucketRefArg,
|
|
360
|
+
bucketName: operationArg.bucketName,
|
|
361
|
+
smartbucketRef,
|
|
362
|
+
storageClient: operationArg.client,
|
|
363
|
+
lifecycleGeneration: lifecycleRecord.generation,
|
|
364
|
+
versioningMode: versioningModeArg,
|
|
365
|
+
});
|
|
366
|
+
return capability;
|
|
367
|
+
};
|
|
368
|
+
export const beginExactPathPurgeCapabilityOperation = (bucketRefArg, capabilityArg, callerSignalArg) => {
|
|
369
|
+
if (typeof capabilityArg !== 'object' || capabilityArg === null) {
|
|
370
|
+
throw new Error('The exact-path purge capability is invalid or stale.');
|
|
371
|
+
}
|
|
372
|
+
const binding = purgeCapabilityBindings.get(capabilityArg);
|
|
373
|
+
if (!binding || binding.bucketRef !== bucketRefArg) {
|
|
374
|
+
throw new Error('The exact-path purge capability is invalid or stale.');
|
|
375
|
+
}
|
|
376
|
+
const operation = beginOperation(binding, callerSignalArg);
|
|
377
|
+
return {
|
|
378
|
+
...operation,
|
|
379
|
+
versioningMode: binding.versioningMode,
|
|
380
|
+
};
|
|
381
|
+
};
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvaW50ZXJuYWwuZXhhY3R1cGxvYWQuY2FwYWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQThFeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFHakMsQ0FBQztBQUNKLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBR25DLENBQUM7QUFDSixNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUd4QyxDQUFDO0FBQ0osTUFBTSxpQ0FBaUMsR0FBRyxNQUFNLENBQUM7QUFDakQsTUFBTSxtQ0FBbUMsR0FBRyxLQUFLLENBQUM7QUFFbEQsTUFBTSw4QkFBOEIsR0FBRyxDQUNyQyxrQkFBOEMsRUFDOUMsUUFBaUIsRUFDWCxFQUFFO0lBQ1IsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25FLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixpQkFBNEMsRUFDaEIsRUFBRTtJQUM5QixNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYixnRUFBZ0UsQ0FDakUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRixNQUFN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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IExactUploadCapabilityProbeOptions, IExactUploadResult, IFastPutStreamExactOptions, TExactUploadCapabilityProbeResult } from './interfaces.js';
|
|
3
|
+
interface IExactUploadBucketRef {
|
|
4
|
+
name: string;
|
|
5
|
+
smartbucketRef: {
|
|
6
|
+
readonly storageClient: plugins.s3.S3Client;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare const probeExactUploadCapability: (bucketRefArg: IExactUploadBucketRef, optionsArg: IExactUploadCapabilityProbeOptions) => Promise<TExactUploadCapabilityProbeResult>;
|
|
10
|
+
export declare const fastPutStreamExact: (bucketRefArg: IExactUploadBucketRef, optionsArg: IFastPutStreamExactOptions) => Promise<IExactUploadResult>;
|
|
11
|
+
export {};
|