@bitblit/ratchet-aws 5.0.505-alpha → 5.0.507-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.
@@ -0,0 +1,4 @@
1
+ import { S3CacheRatchetLike } from "../s3-cache-ratchet-like.js";
2
+ export interface S3RemoteFileTrackingProviderOptions {
3
+ s3CacheRatchet: S3CacheRatchetLike;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=s3-remote-file-tracking-provider-options.js.map
@@ -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";
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.505-alpha",
3
+ "version": "5.0.507-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.505-alpha"
54
+ "@bitblit/ratchet-common": "5.0.507-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.505-alpha",
102
+ "@bitblit/ratchet-common": "5.0.507-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.505-alpha",
179
+ "@bitblit/ratchet-node-only": "5.0.507-alpha",
180
180
  "@types/aws-lambda": "8.10.145",
181
181
  "aws-sdk-client-mock": "4.0.2"
182
182
  }