@bitblit/ratchet-aws 4.0.429-alpha → 4.0.432-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/package.json +4 -4
- package/lib/daemon/daemon-like.d.ts +0 -16
- package/lib/daemon/daemon-like.js +0 -2
- package/lib/daemon/daemon-like.js.map +0 -1
- package/lib/daemon/daemon-process-create-options.d.ts +0 -7
- package/lib/daemon/daemon-process-create-options.js +0 -2
- package/lib/daemon/daemon-process-create-options.js.map +0 -1
- package/lib/daemon/daemon-process-state-public-token.d.ts +0 -4
- package/lib/daemon/daemon-process-state-public-token.js +0 -2
- package/lib/daemon/daemon-process-state-public-token.js.map +0 -1
- package/lib/daemon/daemon-process-state.d.ts +0 -13
- package/lib/daemon/daemon-process-state.js +0 -2
- package/lib/daemon/daemon-process-state.js.map +0 -1
- package/lib/daemon/daemon-stream-data-options.d.ts +0 -5
- package/lib/daemon/daemon-stream-data-options.js +0 -2
- package/lib/daemon/daemon-stream-data-options.js.map +0 -1
- package/lib/daemon/daemon-util.d.ts +0 -17
- package/lib/daemon/daemon-util.js +0 -154
- package/lib/daemon/daemon-util.js.map +0 -1
- package/lib/daemon/daemon.d.ts +0 -32
- package/lib/daemon/daemon.js +0 -129
- package/lib/daemon/daemon.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitblit/ratchet-aws",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.432-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": "4.0.
|
|
54
|
+
"@bitblit/ratchet-common": "4.0.432-alpha"
|
|
55
55
|
},
|
|
56
56
|
"optionalDependencies": {
|
|
57
57
|
"@aws-sdk/client-athena": "3.624.0",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"@aws-sdk/lib-storage": "^3.624.0",
|
|
100
100
|
"@aws-sdk/s3-request-presigner": "^3.624.0",
|
|
101
101
|
"@aws-sdk/types": "^3.609.0",
|
|
102
|
-
"@bitblit/ratchet-common": "4.0.
|
|
102
|
+
"@bitblit/ratchet-common": "4.0.432-alpha",
|
|
103
103
|
"@smithy/abort-controller": "^3.1.1",
|
|
104
104
|
"@smithy/smithy-client": "^3.1.12",
|
|
105
105
|
"@smithy/util-waiter": "^3.1.2"
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
}
|
|
177
177
|
},
|
|
178
178
|
"devDependencies": {
|
|
179
|
-
"@bitblit/ratchet-node-only": "4.0.
|
|
179
|
+
"@bitblit/ratchet-node-only": "4.0.432-alpha",
|
|
180
180
|
"@types/aws-lambda": "8.10.143",
|
|
181
181
|
"aws-sdk-client-mock": "4.0.1"
|
|
182
182
|
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { DaemonProcessState } from './daemon-process-state.js';
|
|
2
|
-
import { DaemonProcessCreateOptions } from './daemon-process-create-options.js';
|
|
3
|
-
export interface DaemonLike {
|
|
4
|
-
get defaultGroup(): string;
|
|
5
|
-
keyToPublicToken(key: string, expirationSeconds: number): Promise<string>;
|
|
6
|
-
start(options: DaemonProcessCreateOptions): Promise<DaemonProcessState>;
|
|
7
|
-
clean(group?: string, olderThanSeconds?: number): Promise<DaemonProcessState[]>;
|
|
8
|
-
listKeys(group?: string): Promise<string[]>;
|
|
9
|
-
list(group?: string): Promise<DaemonProcessState[]>;
|
|
10
|
-
updateMessage(id: string, newMessage: string): Promise<DaemonProcessState>;
|
|
11
|
-
statFromPublicToken(publicToken: string): Promise<DaemonProcessState>;
|
|
12
|
-
stat(key: string): Promise<DaemonProcessState>;
|
|
13
|
-
abort(id: string): Promise<DaemonProcessState>;
|
|
14
|
-
error(id: string, error: string): Promise<DaemonProcessState>;
|
|
15
|
-
finalize(id: string, contents: Buffer): Promise<DaemonProcessState>;
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-like.js","sourceRoot":"","sources":["../../src/daemon/daemon-like.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-process-create-options.js","sourceRoot":"","sources":["../../src/daemon/daemon-process-create-options.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-process-state-public-token.js","sourceRoot":"","sources":["../../src/daemon/daemon-process-state-public-token.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface DaemonProcessState {
|
|
2
|
-
id: string;
|
|
3
|
-
title: string;
|
|
4
|
-
targetFileName: string;
|
|
5
|
-
lastUpdatedEpochMS: number;
|
|
6
|
-
lastUpdatedMessage: string;
|
|
7
|
-
startedEpochMS: number;
|
|
8
|
-
completedEpochMS: number;
|
|
9
|
-
meta: any;
|
|
10
|
-
error: string;
|
|
11
|
-
link: string;
|
|
12
|
-
contentType: string;
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-process-state.js","sourceRoot":"","sources":["../../src/daemon/daemon-process-state.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-stream-data-options.js","sourceRoot":"","sources":["../../src/daemon/daemon-stream-data-options.ts"],"names":[],"mappings":""}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { DaemonProcessState } from './daemon-process-state.js';
|
|
2
|
-
import { DaemonProcessCreateOptions } from './daemon-process-create-options.js';
|
|
3
|
-
import { Readable } from 'stream';
|
|
4
|
-
import { S3CacheRatchetLike } from '../s3/s3-cache-ratchet-like.js';
|
|
5
|
-
import { DaemonStreamDataOptions } from './daemon-stream-data-options.js';
|
|
6
|
-
export declare class DaemonUtil {
|
|
7
|
-
static DEFAULT_CONTENT: Buffer;
|
|
8
|
-
static DAEMON_METADATA_KEY: string;
|
|
9
|
-
static start(cache: S3CacheRatchetLike, id: string, s3Key: string, options: DaemonProcessCreateOptions): Promise<DaemonProcessState>;
|
|
10
|
-
static writeState(cache: S3CacheRatchetLike, s3Key: string, newState: DaemonProcessState, contents: Uint8Array): Promise<DaemonProcessState>;
|
|
11
|
-
static streamDataAndFinish(cache: S3CacheRatchetLike, s3Key: string, data: Readable, options?: DaemonStreamDataOptions): Promise<DaemonProcessState>;
|
|
12
|
-
static updateMessage(cache: S3CacheRatchetLike, s3Key: string, newMessage: string): Promise<DaemonProcessState>;
|
|
13
|
-
static stat(s3Cache: S3CacheRatchetLike, path: string): Promise<DaemonProcessState>;
|
|
14
|
-
static abort(s3Cache: S3CacheRatchetLike, path: string): Promise<DaemonProcessState>;
|
|
15
|
-
static error(s3Cache: S3CacheRatchetLike, path: string, error: string): Promise<DaemonProcessState>;
|
|
16
|
-
static finalize(s3Cache: S3CacheRatchetLike, path: string, contents: Buffer): Promise<DaemonProcessState>;
|
|
17
|
-
}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { PutObjectCommand, } from '@aws-sdk/client-s3';
|
|
2
|
-
import { Upload } from '@aws-sdk/lib-storage';
|
|
3
|
-
import { Logger } from '@bitblit/ratchet-common/logger/logger';
|
|
4
|
-
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
|
|
5
|
-
export class DaemonUtil {
|
|
6
|
-
static DEFAULT_CONTENT = Buffer.from('DAEMON_PLACEHOLDER');
|
|
7
|
-
static DAEMON_METADATA_KEY = 'daemon_meta';
|
|
8
|
-
static async start(cache, id, s3Key, options) {
|
|
9
|
-
try {
|
|
10
|
-
options.meta = options.meta || {};
|
|
11
|
-
Logger.info('Starting daemon, key: %s, options: %j', s3Key, options);
|
|
12
|
-
const now = new Date().getTime();
|
|
13
|
-
const newState = {
|
|
14
|
-
id: id,
|
|
15
|
-
title: options.title,
|
|
16
|
-
lastUpdatedEpochMS: now,
|
|
17
|
-
lastUpdatedMessage: 'Created',
|
|
18
|
-
targetFileName: options.targetFileName,
|
|
19
|
-
startedEpochMS: now,
|
|
20
|
-
completedEpochMS: null,
|
|
21
|
-
meta: options.meta,
|
|
22
|
-
error: null,
|
|
23
|
-
link: null,
|
|
24
|
-
contentType: options.contentType,
|
|
25
|
-
};
|
|
26
|
-
const rval = await DaemonUtil.writeState(cache, s3Key, newState, DaemonUtil.DEFAULT_CONTENT);
|
|
27
|
-
return rval;
|
|
28
|
-
}
|
|
29
|
-
catch (err) {
|
|
30
|
-
Logger.error('Error while trying to start a daemon: %j %s', options, err);
|
|
31
|
-
throw err;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
static async writeState(cache, s3Key, newState, contents) {
|
|
35
|
-
try {
|
|
36
|
-
const s3meta = {};
|
|
37
|
-
newState.lastUpdatedEpochMS = new Date().getTime();
|
|
38
|
-
s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(newState);
|
|
39
|
-
const params = {
|
|
40
|
-
Bucket: cache.getDefaultBucket(),
|
|
41
|
-
Key: s3Key,
|
|
42
|
-
ContentType: newState.contentType,
|
|
43
|
-
Metadata: s3meta,
|
|
44
|
-
Body: contents,
|
|
45
|
-
};
|
|
46
|
-
if (newState.targetFileName) {
|
|
47
|
-
params.ContentDisposition = 'attachment;filename="' + newState.targetFileName + '"';
|
|
48
|
-
}
|
|
49
|
-
const written = await cache.getS3Client().send(new PutObjectCommand(params));
|
|
50
|
-
Logger.silly('Daemon wrote : %s', written);
|
|
51
|
-
return DaemonUtil.stat(cache, s3Key);
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
Logger.error('Error while trying to write a daemon stat: %j %s', newState, err);
|
|
55
|
-
throw err;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
static async streamDataAndFinish(cache, s3Key, data, options) {
|
|
59
|
-
Logger.debug('Streaming data to %s', s3Key);
|
|
60
|
-
const inStat = await DaemonUtil.updateMessage(cache, s3Key, 'Streaming data');
|
|
61
|
-
inStat.completedEpochMS = new Date().getTime();
|
|
62
|
-
inStat.lastUpdatedMessage = 'Complete';
|
|
63
|
-
const s3meta = {};
|
|
64
|
-
s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(inStat);
|
|
65
|
-
const params = {
|
|
66
|
-
Bucket: cache.getDefaultBucket(),
|
|
67
|
-
Key: s3Key,
|
|
68
|
-
ContentType: inStat.contentType,
|
|
69
|
-
Metadata: s3meta,
|
|
70
|
-
Body: data,
|
|
71
|
-
};
|
|
72
|
-
const targetFileName = StringRatchet.trimToNull(options?.overrideTargetFileName) || StringRatchet.trimToNull(inStat?.targetFileName);
|
|
73
|
-
if (targetFileName) {
|
|
74
|
-
params.ContentDisposition = 'attachment;filename="' + targetFileName + '"';
|
|
75
|
-
}
|
|
76
|
-
const upload = new Upload({
|
|
77
|
-
client: cache.getS3Client(),
|
|
78
|
-
params: params,
|
|
79
|
-
tags: [],
|
|
80
|
-
queueSize: 4,
|
|
81
|
-
partSize: 1024 * 1024 * 5,
|
|
82
|
-
leavePartsOnError: false,
|
|
83
|
-
});
|
|
84
|
-
if (options?.progressFn) {
|
|
85
|
-
upload.on('httpUploadProgress', options.progressFn);
|
|
86
|
-
}
|
|
87
|
-
const written = await upload.done();
|
|
88
|
-
Logger.silly('Daemon wrote : %s', written);
|
|
89
|
-
return DaemonUtil.stat(cache, s3Key);
|
|
90
|
-
}
|
|
91
|
-
static async updateMessage(cache, s3Key, newMessage) {
|
|
92
|
-
try {
|
|
93
|
-
const inStat = await DaemonUtil.stat(cache, s3Key);
|
|
94
|
-
inStat.lastUpdatedMessage = newMessage;
|
|
95
|
-
return DaemonUtil.writeState(cache, s3Key, inStat, DaemonUtil.DEFAULT_CONTENT);
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
Logger.error('Error while trying to update a daemon message: %j %s', s3Key, err);
|
|
99
|
-
throw err;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
static async stat(s3Cache, path) {
|
|
103
|
-
try {
|
|
104
|
-
Logger.debug('Daemon stat for path %s / %s', s3Cache.getDefaultBucket(), path);
|
|
105
|
-
let stat = null;
|
|
106
|
-
const meta = await s3Cache.fetchMetaForCacheFile(path);
|
|
107
|
-
Logger.debug('Daemon: Meta is %j', meta);
|
|
108
|
-
const metaString = meta && meta.Metadata ? meta.Metadata[DaemonUtil.DAEMON_METADATA_KEY] : null;
|
|
109
|
-
if (metaString) {
|
|
110
|
-
stat = JSON.parse(metaString);
|
|
111
|
-
if (stat.completedEpochMS && !stat.error) {
|
|
112
|
-
stat.link = await s3Cache.preSignedDownloadUrlForCacheFile(path);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
Logger.warn('No metadata found! (Head was %j)', meta);
|
|
117
|
-
}
|
|
118
|
-
return stat;
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
Logger.error('Error while trying to fetch a daemon state: %j %s', path, err);
|
|
122
|
-
throw err;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
static async abort(s3Cache, path) {
|
|
126
|
-
return DaemonUtil.error(s3Cache, path, 'Aborted');
|
|
127
|
-
}
|
|
128
|
-
static async error(s3Cache, path, error) {
|
|
129
|
-
try {
|
|
130
|
-
const inStat = await DaemonUtil.stat(s3Cache, path);
|
|
131
|
-
inStat.error = error;
|
|
132
|
-
inStat.completedEpochMS = new Date().getTime();
|
|
133
|
-
return DaemonUtil.writeState(s3Cache, path, inStat, DaemonUtil.DEFAULT_CONTENT);
|
|
134
|
-
}
|
|
135
|
-
catch (err) {
|
|
136
|
-
Logger.error('Error while trying to write a daemon error: %j %s', path, err);
|
|
137
|
-
throw err;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
static async finalize(s3Cache, path, contents) {
|
|
141
|
-
try {
|
|
142
|
-
Logger.info('Finalizing daemon %s with %d bytes', path, contents.length);
|
|
143
|
-
const inStat = await DaemonUtil.stat(s3Cache, path);
|
|
144
|
-
inStat.completedEpochMS = new Date().getTime();
|
|
145
|
-
inStat.lastUpdatedMessage = 'Complete';
|
|
146
|
-
return DaemonUtil.writeState(s3Cache, path, inStat, contents);
|
|
147
|
-
}
|
|
148
|
-
catch (err) {
|
|
149
|
-
Logger.error('Error while trying to finalize a daemon: %j %s', path, err);
|
|
150
|
-
throw err;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=daemon-util.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-util.js","sourceRoot":"","sources":["../../src/daemon/daemon-util.ts"],"names":[],"mappings":"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"}
|
package/lib/daemon/daemon.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { DaemonProcessState } from './daemon-process-state.js';
|
|
2
|
-
import { DaemonProcessCreateOptions } from './daemon-process-create-options.js';
|
|
3
|
-
import { DaemonLike } from './daemon-like.js';
|
|
4
|
-
import { S3Client } from '@aws-sdk/client-s3';
|
|
5
|
-
import { JwtRatchetLike } from '@bitblit/ratchet-common/jwt/jwt-ratchet-like';
|
|
6
|
-
export declare class Daemon implements DaemonLike {
|
|
7
|
-
private s3;
|
|
8
|
-
private bucket;
|
|
9
|
-
private prefix;
|
|
10
|
-
private _defaultGroup;
|
|
11
|
-
private jwtRatchet?;
|
|
12
|
-
static DEFAULT_DEFAULT_GROUP: string;
|
|
13
|
-
private cache;
|
|
14
|
-
constructor(s3: S3Client, bucket: string, prefix?: string, _defaultGroup?: string, jwtRatchet?: JwtRatchetLike);
|
|
15
|
-
get defaultGroup(): string;
|
|
16
|
-
keyToPublicToken(key: string, expirationSeconds: number): Promise<string>;
|
|
17
|
-
private keyToPath;
|
|
18
|
-
private pathToKey;
|
|
19
|
-
private generatePath;
|
|
20
|
-
private generatePrefix;
|
|
21
|
-
start(options: DaemonProcessCreateOptions): Promise<DaemonProcessState>;
|
|
22
|
-
private writeState;
|
|
23
|
-
clean(group?: string, olderThanSeconds?: number): Promise<DaemonProcessState[]>;
|
|
24
|
-
listKeys(group?: string): Promise<string[]>;
|
|
25
|
-
list(group?: string): Promise<DaemonProcessState[]>;
|
|
26
|
-
updateMessage(id: string, newMessage: string): Promise<DaemonProcessState>;
|
|
27
|
-
stat(key: string): Promise<DaemonProcessState>;
|
|
28
|
-
statFromPublicToken(publicToken: string): Promise<DaemonProcessState>;
|
|
29
|
-
abort(id: string): Promise<DaemonProcessState>;
|
|
30
|
-
error(id: string, error: string): Promise<DaemonProcessState>;
|
|
31
|
-
finalize(id: string, contents: Buffer): Promise<DaemonProcessState>;
|
|
32
|
-
}
|
package/lib/daemon/daemon.js
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { S3CacheRatchet } from '../s3/s3-cache-ratchet.js';
|
|
2
|
-
import { DaemonUtil } from './daemon-util.js';
|
|
3
|
-
import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
|
|
4
|
-
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
|
|
5
|
-
import { Logger } from '@bitblit/ratchet-common/logger/logger';
|
|
6
|
-
export class Daemon {
|
|
7
|
-
s3;
|
|
8
|
-
bucket;
|
|
9
|
-
prefix;
|
|
10
|
-
_defaultGroup;
|
|
11
|
-
jwtRatchet;
|
|
12
|
-
static DEFAULT_DEFAULT_GROUP = 'DEFAULT';
|
|
13
|
-
cache;
|
|
14
|
-
constructor(s3, bucket, prefix = '', _defaultGroup = Daemon.DEFAULT_DEFAULT_GROUP, jwtRatchet) {
|
|
15
|
-
this.s3 = s3;
|
|
16
|
-
this.bucket = bucket;
|
|
17
|
-
this.prefix = prefix;
|
|
18
|
-
this._defaultGroup = _defaultGroup;
|
|
19
|
-
this.jwtRatchet = jwtRatchet;
|
|
20
|
-
this.cache = new S3CacheRatchet(this.s3, this.bucket);
|
|
21
|
-
}
|
|
22
|
-
get defaultGroup() {
|
|
23
|
-
return this._defaultGroup;
|
|
24
|
-
}
|
|
25
|
-
async keyToPublicToken(key, expirationSeconds) {
|
|
26
|
-
RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');
|
|
27
|
-
RequireRatchet.notNullOrUndefined(key, 'key');
|
|
28
|
-
RequireRatchet.true(expirationSeconds > 0, 'Expiration seconds must be larger than 0');
|
|
29
|
-
const token = { daemonKey: key };
|
|
30
|
-
const publicToken = await this.jwtRatchet.createTokenString(token, expirationSeconds);
|
|
31
|
-
return publicToken;
|
|
32
|
-
}
|
|
33
|
-
keyToPath(key) {
|
|
34
|
-
return Buffer.from(key, 'base64').toString();
|
|
35
|
-
}
|
|
36
|
-
pathToKey(path) {
|
|
37
|
-
return Buffer.from(path).toString('base64');
|
|
38
|
-
}
|
|
39
|
-
generatePath(group = this._defaultGroup) {
|
|
40
|
-
return this.generatePrefix(group) + StringRatchet.createType4Guid();
|
|
41
|
-
}
|
|
42
|
-
generatePrefix(group = this._defaultGroup) {
|
|
43
|
-
return this.prefix + group + '/';
|
|
44
|
-
}
|
|
45
|
-
async start(options) {
|
|
46
|
-
options.group = options.group || this._defaultGroup;
|
|
47
|
-
const path = this.generatePath(options.group);
|
|
48
|
-
const key = this.pathToKey(path);
|
|
49
|
-
return DaemonUtil.start(this.cache, key, path, options);
|
|
50
|
-
}
|
|
51
|
-
async writeState(newState, contents) {
|
|
52
|
-
const key = this.keyToPath(newState.id);
|
|
53
|
-
return DaemonUtil.writeState(this.cache, key, newState, contents);
|
|
54
|
-
}
|
|
55
|
-
async clean(group = this._defaultGroup, olderThanSeconds = 60 * 60 * 24 * 7) {
|
|
56
|
-
try {
|
|
57
|
-
Logger.info('Daemon removing items older than %d seconds from group %s', olderThanSeconds, group);
|
|
58
|
-
const original = await this.list(group);
|
|
59
|
-
const now = new Date().getTime();
|
|
60
|
-
const removed = [];
|
|
61
|
-
for (let i = 0; i < original.length; i++) {
|
|
62
|
-
const test = original[i];
|
|
63
|
-
const ageSeconds = (now - test.startedEpochMS) / 1000;
|
|
64
|
-
if (ageSeconds > olderThanSeconds) {
|
|
65
|
-
const remove = await this.cache.removeCacheFile(this.keyToPath(test.id));
|
|
66
|
-
removed.push(test);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
Logger.debug('Removed %d of %d items', removed.length, original.length);
|
|
70
|
-
return removed;
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
Logger.error('Error while trying to clean a daemon: %j %s', group, err);
|
|
74
|
-
throw err;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
async listKeys(group = this._defaultGroup) {
|
|
78
|
-
try {
|
|
79
|
-
const prefix = this.generatePrefix(group);
|
|
80
|
-
Logger.info('Fetching children of %s', prefix);
|
|
81
|
-
const rval = await this.cache.directChildrenOfPrefix(prefix);
|
|
82
|
-
Logger.debug('Found : %j', rval);
|
|
83
|
-
return rval;
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
Logger.error('Error while trying to list daemon keys: %j %s', group, err);
|
|
87
|
-
throw err;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async list(group = this._defaultGroup) {
|
|
91
|
-
try {
|
|
92
|
-
const prefix = this.generatePrefix(group);
|
|
93
|
-
Logger.info('Fetching children of %s', prefix);
|
|
94
|
-
const keys = await this.listKeys(group);
|
|
95
|
-
const proms = keys.map((k) => this.stat(this.pathToKey(this.generatePrefix(group) + k)));
|
|
96
|
-
const rval = await Promise.all(proms);
|
|
97
|
-
return rval;
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
Logger.error('Error while trying to list daemon states: %j %s', group, err);
|
|
101
|
-
throw err;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
async updateMessage(id, newMessage) {
|
|
105
|
-
const itemPath = this.keyToPath(id);
|
|
106
|
-
return DaemonUtil.updateMessage(this.cache, itemPath, newMessage);
|
|
107
|
-
}
|
|
108
|
-
async stat(key) {
|
|
109
|
-
const itemPath = this.keyToPath(key);
|
|
110
|
-
return DaemonUtil.stat(this.cache, itemPath);
|
|
111
|
-
}
|
|
112
|
-
async statFromPublicToken(publicToken) {
|
|
113
|
-
RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');
|
|
114
|
-
RequireRatchet.notNullOrUndefined(publicToken, 'publicToken');
|
|
115
|
-
const parsed = await this.jwtRatchet.decodeToken(publicToken);
|
|
116
|
-
const key = parsed?.daemonKey;
|
|
117
|
-
return key ? this.stat(key) : null;
|
|
118
|
-
}
|
|
119
|
-
async abort(id) {
|
|
120
|
-
return DaemonUtil.abort(this.cache, this.keyToPath(id));
|
|
121
|
-
}
|
|
122
|
-
async error(id, error) {
|
|
123
|
-
return DaemonUtil.error(this.cache, this.keyToPath(id), error);
|
|
124
|
-
}
|
|
125
|
-
async finalize(id, contents) {
|
|
126
|
-
return DaemonUtil.finalize(this.cache, this.keyToPath(id), contents);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=daemon.js.map
|
package/lib/daemon/daemon.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"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"}
|