@bitblit/ratchet-aws 5.0.506-alpha → 5.0.508-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/s3/impl/s3-remote-file-tracking-provider-options.d.ts +4 -0
- package/lib/s3/impl/s3-remote-file-tracking-provider-options.js +2 -0
- package/lib/s3/impl/s3-remote-file-tracking-provider-options.js.map +1 -0
- package/lib/s3/impl/s3-remote-file-tracking-provider.d.ts +15 -0
- package/lib/s3/impl/s3-remote-file-tracking-provider.js +125 -0
- package/lib/s3/impl/s3-remote-file-tracking-provider.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-remote-file-tracking-provider-options.js","sourceRoot":"","sources":["../../../src/s3/impl/s3-remote-file-tracking-provider-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RemoteFileTrackingProvider } from "@bitblit/ratchet-common/network/remote-file-tracker/remote-file-tracking-provider";
|
|
2
|
+
import { RemoteStatusData } from "@bitblit/ratchet-common/network/remote-file-tracker/remote-status-data";
|
|
3
|
+
import { S3RemoteFileTrackingProviderOptions } from "./s3-remote-file-tracking-provider-options.js";
|
|
4
|
+
import { RemoteStatusDataAndContent } from "@bitblit/ratchet-common/network/remote-file-tracker/remote-status-data-and-content";
|
|
5
|
+
import { FileTransferResult } from "@bitblit/ratchet-common/network/remote-file-tracker/file-transfer-result";
|
|
6
|
+
import { BackupResult } from "@bitblit/ratchet-common/network/remote-file-tracker/backup-result";
|
|
7
|
+
import { RemoteFileTrackerPushOptions } from "@bitblit/ratchet-common/network/remote-file-tracker/remote-file-tracker-push-options";
|
|
8
|
+
export declare class S3RemoteFileTrackingProvider implements RemoteFileTrackingProvider<string> {
|
|
9
|
+
private opts;
|
|
10
|
+
constructor(opts: S3RemoteFileTrackingProviderOptions);
|
|
11
|
+
readRemoteStatus(key: string): Promise<RemoteStatusData<string>>;
|
|
12
|
+
pullRemoteData(key: string, ifNewerThan?: RemoteStatusData<string>): Promise<RemoteStatusDataAndContent<string>>;
|
|
13
|
+
sendDataToRemote(src: ReadableStream, key: string, opts: RemoteFileTrackerPushOptions, checkStatus: RemoteStatusData<string>): Promise<FileTransferResult>;
|
|
14
|
+
backupRemote(key: string): Promise<BackupResult>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { RequireRatchet } from "@bitblit/ratchet-common/lang/require-ratchet";
|
|
2
|
+
import { Logger } from "@bitblit/ratchet-common/logger/logger";
|
|
3
|
+
import { StopWatch } from "@bitblit/ratchet-common/lang/stop-watch";
|
|
4
|
+
import { DateTime } from "luxon";
|
|
5
|
+
import { StringRatchet } from "@bitblit/ratchet-common/lang/string-ratchet";
|
|
6
|
+
import { BackupResult } from "@bitblit/ratchet-common/network/remote-file-tracker/backup-result";
|
|
7
|
+
import { RemoteFileTracker } from "@bitblit/ratchet-common/network/remote-file-tracker/remote-file-tracker";
|
|
8
|
+
import { ErrorRatchet } from "@bitblit/ratchet-common/lang/error-ratchet";
|
|
9
|
+
import { FileTransferResultType } from "@bitblit/ratchet-common/network/remote-file-tracker/file-transfer-result-type";
|
|
10
|
+
export class S3RemoteFileTrackingProvider {
|
|
11
|
+
opts;
|
|
12
|
+
constructor(opts) {
|
|
13
|
+
this.opts = opts;
|
|
14
|
+
RequireRatchet.notNullOrUndefined(opts, 'opts');
|
|
15
|
+
RequireRatchet.notNullOrUndefined(opts.s3CacheRatchet, 'opts.s3CacheRatchet');
|
|
16
|
+
RequireRatchet.notNullOrUndefined(opts.s3CacheRatchet.getDefaultBucket(), 'opts.s3CacheRatchet must have default bucket set');
|
|
17
|
+
}
|
|
18
|
+
async readRemoteStatus(key) {
|
|
19
|
+
let rval = null;
|
|
20
|
+
if (StringRatchet.trimToNull(key)) {
|
|
21
|
+
const meta = await this.opts.s3CacheRatchet.fetchMetaForCacheFile(key);
|
|
22
|
+
if (meta) {
|
|
23
|
+
rval = {
|
|
24
|
+
key: key,
|
|
25
|
+
statusTakenEpochMs: Date.now(),
|
|
26
|
+
remoteSizeInBytes: meta.ContentLength,
|
|
27
|
+
remoteLastUpdatedEpochMs: meta.LastModified.getTime(),
|
|
28
|
+
remoteHash: meta.ETag,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return rval;
|
|
33
|
+
}
|
|
34
|
+
async pullRemoteData(key, ifNewerThan) {
|
|
35
|
+
let rval = null;
|
|
36
|
+
const sw = new StopWatch();
|
|
37
|
+
const req = {
|
|
38
|
+
Bucket: this.opts.s3CacheRatchet.getDefaultBucket(),
|
|
39
|
+
Key: key,
|
|
40
|
+
IfModifiedSince: ifNewerThan?.remoteLastUpdatedEpochMs ? new Date(ifNewerThan.remoteLastUpdatedEpochMs) : null,
|
|
41
|
+
};
|
|
42
|
+
const output = await this.opts.s3CacheRatchet.fetchCacheFilePassThru(req);
|
|
43
|
+
if (output) {
|
|
44
|
+
rval = {
|
|
45
|
+
status: {
|
|
46
|
+
key: key,
|
|
47
|
+
statusTakenEpochMs: Date.now(),
|
|
48
|
+
remoteSizeInBytes: output.ContentLength,
|
|
49
|
+
remoteLastUpdatedEpochMs: output.LastModified.getTime(),
|
|
50
|
+
remoteHash: output.ETag,
|
|
51
|
+
},
|
|
52
|
+
content: output.Body.transformToWebStream()
|
|
53
|
+
};
|
|
54
|
+
Logger.info('Fetched remote to local, %d bytes in %s : %s', output.ContentLength, sw.dump(), key);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
Logger.info('Did not pull %s - not modified', key);
|
|
58
|
+
}
|
|
59
|
+
return rval;
|
|
60
|
+
}
|
|
61
|
+
async sendDataToRemote(src, key, opts, checkStatus) {
|
|
62
|
+
RequireRatchet.notNullOrUndefined(src, 'src');
|
|
63
|
+
RequireRatchet.notNullOrUndefined(key, 'key');
|
|
64
|
+
RequireRatchet.notNullOrUndefined(opts, 'opts');
|
|
65
|
+
let rval = {
|
|
66
|
+
type: null,
|
|
67
|
+
error: null,
|
|
68
|
+
bytesTransferred: null,
|
|
69
|
+
backupResult: BackupResult.NotRequested
|
|
70
|
+
};
|
|
71
|
+
const sw = new StopWatch();
|
|
72
|
+
Logger.info('Sending local data to remote : %s : %j : %j', key, opts, checkStatus);
|
|
73
|
+
if (!opts.force && checkStatus?.remoteLastUpdatedEpochMs) {
|
|
74
|
+
sw.start('statusCheck');
|
|
75
|
+
const current = await this.readRemoteStatus(key);
|
|
76
|
+
if (!RemoteFileTracker.statusMatch(checkStatus, current)) {
|
|
77
|
+
rval.type = FileTransferResultType.Error;
|
|
78
|
+
rval.error = 'CheckStatus did not match, was ' + JSON.stringify(checkStatus) + ' but current is ' + JSON.stringify(current) + ' and force not specified';
|
|
79
|
+
rval.bytesTransferred = 0;
|
|
80
|
+
return rval;
|
|
81
|
+
}
|
|
82
|
+
sw.stop('statusCheck');
|
|
83
|
+
Logger.info('Performed status check in %s', sw.dump('statusCheck'));
|
|
84
|
+
}
|
|
85
|
+
if (opts.backup) {
|
|
86
|
+
sw.start('backup');
|
|
87
|
+
rval.backupResult = await this.backupRemote(key);
|
|
88
|
+
sw.stop('backup');
|
|
89
|
+
Logger.info('Performed backup in %s', sw.dump('backup'));
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
sw.start('send');
|
|
93
|
+
const out = await this.opts.s3CacheRatchet.writeStreamToCacheFile(key, src);
|
|
94
|
+
sw.stop('send');
|
|
95
|
+
Logger.info('Sent to remote in %s : %j', sw.dump('send'), out);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
Logger.error('Failed to write %s - %s', key, err, err);
|
|
99
|
+
rval.type = FileTransferResultType.Error;
|
|
100
|
+
rval.error = ErrorRatchet.safeStringifyErr(err);
|
|
101
|
+
rval.bytesTransferred = 0;
|
|
102
|
+
}
|
|
103
|
+
Logger.info('Overall timing : %s', sw.dump());
|
|
104
|
+
return rval;
|
|
105
|
+
}
|
|
106
|
+
async backupRemote(key) {
|
|
107
|
+
let rval = null;
|
|
108
|
+
try {
|
|
109
|
+
const lastSlash = key.lastIndexOf('/');
|
|
110
|
+
const datePart = '/backup/' + DateTime.now().toFormat('yyyy/MM/dd/HH/mm/ss') + '/';
|
|
111
|
+
const newPath = lastSlash > -1
|
|
112
|
+
? key.substring(0, lastSlash) + datePart + key.substring(lastSlash + 1)
|
|
113
|
+
: datePart + key;
|
|
114
|
+
Logger.info('Backing up path %s to %s', key, newPath);
|
|
115
|
+
await this.opts.s3CacheRatchet.copyFile(key, newPath);
|
|
116
|
+
rval = BackupResult.Success;
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
Logger.error('Failed to backup %s : %s', key, err, err);
|
|
120
|
+
rval = BackupResult.Error;
|
|
121
|
+
}
|
|
122
|
+
return rval;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=s3-remote-file-tracking-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-remote-file-tracking-provider.js","sourceRoot":"","sources":["../../../src/s3/impl/s3-remote-file-tracking-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitblit/ratchet-aws",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.508-alpha",
|
|
4
4
|
"description": "Common tools for use with AWS browser and node",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
"license": "Apache-2.0",
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@bitblit/ratchet-common": "5.0.
|
|
54
|
+
"@bitblit/ratchet-common": "5.0.508-alpha"
|
|
55
55
|
},
|
|
56
56
|
"optionalDependencies": {
|
|
57
57
|
"@aws-sdk/client-athena": "3.666.0",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"@aws-sdk/lib-storage": "^3.666.0",
|
|
100
100
|
"@aws-sdk/s3-request-presigner": "^3.666.0",
|
|
101
101
|
"@aws-sdk/types": "^3.664.0",
|
|
102
|
-
"@bitblit/ratchet-common": "5.0.
|
|
102
|
+
"@bitblit/ratchet-common": "5.0.508-alpha",
|
|
103
103
|
"@smithy/abort-controller": "^3.1.5",
|
|
104
104
|
"@smithy/smithy-client": "^3.4.0",
|
|
105
105
|
"@smithy/util-waiter": "^3.1.6"
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
}
|
|
177
177
|
},
|
|
178
178
|
"devDependencies": {
|
|
179
|
-
"@bitblit/ratchet-node-only": "5.0.
|
|
179
|
+
"@bitblit/ratchet-node-only": "5.0.508-alpha",
|
|
180
180
|
"@types/aws-lambda": "8.10.145",
|
|
181
181
|
"aws-sdk-client-mock": "4.0.2"
|
|
182
182
|
}
|