@toa.io/extensions.storages 1.0.0-alpha.34 → 1.0.0-alpha.340
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 +43 -18
- package/readme.md +127 -47
- package/transpiled/Aspect.d.ts +8 -4
- package/transpiled/Aspect.js +12 -14
- package/transpiled/Aspect.js.map +1 -1
- package/transpiled/Entry.d.ts +14 -11
- package/transpiled/Entry.js +1 -2
- package/transpiled/Factory.d.ts +10 -2
- package/transpiled/Factory.js +52 -32
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Provider.d.ts +23 -19
- package/transpiled/Provider.js +18 -32
- package/transpiled/Provider.js.map +1 -1
- package/transpiled/Scanner.d.ts +10 -4
- package/transpiled/Scanner.js +38 -26
- package/transpiled/Scanner.js.map +1 -1
- package/transpiled/Secrets.d.ts +5 -0
- package/transpiled/Secrets.js +2 -0
- package/transpiled/Secrets.js.map +1 -0
- package/transpiled/Storage.d.ts +35 -22
- package/transpiled/Storage.js +95 -141
- package/transpiled/Storage.js.map +1 -1
- package/transpiled/errors.d.ts +15 -0
- package/transpiled/errors.js +12 -0
- package/transpiled/errors.js.map +1 -0
- package/transpiled/index.d.ts +4 -4
- package/transpiled/index.js +1 -9
- package/transpiled/index.js.map +1 -1
- package/transpiled/measurements.d.ts +3 -0
- package/transpiled/measurements.js +23 -0
- package/transpiled/measurements.js.map +1 -0
- package/transpiled/providers/Cloudinary.d.ts +55 -0
- package/transpiled/providers/Cloudinary.js +232 -0
- package/transpiled/providers/Cloudinary.js.map +1 -0
- package/transpiled/providers/Declaration.d.ts +9 -5
- package/transpiled/providers/Declaration.js +1 -2
- package/transpiled/providers/FileSystem.d.ts +16 -11
- package/transpiled/providers/FileSystem.js +64 -43
- package/transpiled/providers/FileSystem.js.map +1 -1
- package/transpiled/providers/S3.d.ts +18 -18
- package/transpiled/providers/S3.js +87 -122
- package/transpiled/providers/S3.js.map +1 -1
- package/transpiled/providers/Spaces.d.ts +12 -0
- package/transpiled/providers/Spaces.js +13 -0
- package/transpiled/providers/Spaces.js.map +1 -0
- package/transpiled/providers/Temporary.d.ts +2 -3
- package/transpiled/providers/Temporary.js +7 -11
- package/transpiled/providers/Temporary.js.map +1 -1
- package/transpiled/providers/Test.d.ts +4 -4
- package/transpiled/providers/Test.js +6 -12
- package/transpiled/providers/Test.js.map +1 -1
- package/transpiled/providers/index.d.ts +23 -11
- package/transpiled/providers/index.js +30 -14
- package/transpiled/providers/index.js.map +1 -1
- package/transpiled/providers/index.types.d.ts +5 -0
- package/transpiled/providers/index.types.js +2 -0
- package/transpiled/providers/index.types.js.map +1 -0
- package/transpiled/test/util.d.ts +113 -6
- package/transpiled/test/util.js +68 -15
- package/transpiled/test/util.js.map +1 -1
- package/schemas/annotation.cos.yaml +0 -10
- package/schemas/fs.cos.yaml +0 -9
- package/schemas/mem.cos.yaml +0 -6
- package/schemas/s3.cos.yaml +0 -16
- package/schemas/test.cos.yaml +0 -8
- package/schemas/tmp.cos.yaml +0 -9
- package/source/Annotation.ts +0 -39
- package/source/Aspect.ts +0 -25
- package/source/Entry.ts +0 -14
- package/source/Factory.ts +0 -68
- package/source/Provider.ts +0 -37
- package/source/Scanner.ts +0 -153
- package/source/Storage.test.ts +0 -472
- package/source/Storage.ts +0 -235
- package/source/deployment.ts +0 -57
- package/source/index.ts +0 -5
- package/source/manifest.ts +0 -8
- package/source/providers/Declaration.ts +0 -10
- package/source/providers/FileSystem.test.ts +0 -5
- package/source/providers/FileSystem.ts +0 -63
- package/source/providers/Memory.ts +0 -55
- package/source/providers/S3.test.ts +0 -134
- package/source/providers/S3.ts +0 -196
- package/source/providers/Temporary.ts +0 -16
- package/source/providers/Test.ts +0 -13
- package/source/providers/index.test.ts +0 -136
- package/source/providers/index.ts +0 -16
- package/source/providers/readme.md +0 -25
- package/source/schemas.test.ts +0 -58
- package/source/schemas.ts +0 -15
- package/source/test/.env.example +0 -1
- package/source/test/albert.jpg +0 -0
- package/source/test/empty.txt +0 -0
- package/source/test/lenna.ascii +0 -64
- package/source/test/lenna.png +0 -0
- package/source/test/sample.avi +0 -0
- package/source/test/sample.avif +0 -0
- package/source/test/sample.gif +0 -0
- package/source/test/sample.heic +0 -0
- package/source/test/sample.jpeg +0 -0
- package/source/test/sample.jxl +0 -0
- package/source/test/sample.svg +0 -4
- package/source/test/sample.wav +0 -0
- package/source/test/sample.webp +0 -0
- package/source/test/util.ts +0 -45
- package/transpiled/Annotation.d.ts +0 -3
- package/transpiled/Annotation.js +0 -57
- package/transpiled/Annotation.js.map +0 -1
- package/transpiled/deployment.d.ts +0 -5
- package/transpiled/deployment.js +0 -68
- package/transpiled/deployment.js.map +0 -1
- package/transpiled/manifest.d.ts +0 -1
- package/transpiled/manifest.js +0 -9
- package/transpiled/manifest.js.map +0 -1
- package/transpiled/providers/Memory.d.ts +0 -15
- package/transpiled/providers/Memory.js +0 -72
- package/transpiled/providers/Memory.js.map +0 -1
- package/transpiled/schemas.d.ts +0 -9
- package/transpiled/schemas.js +0 -14
- package/transpiled/schemas.js.map +0 -1
- package/transpiled/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.json +0 -12
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { Readable } from 'node:stream';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
2
|
+
import { Provider } from '../Provider.ts';
|
|
3
|
+
import type { Maybe } from '@toa.io/core/types';
|
|
4
|
+
import type { Metadata, Stream } from '../Entry.ts';
|
|
5
|
+
import type { Secret, Secrets } from '../Secrets.ts';
|
|
5
6
|
export interface S3Options {
|
|
6
7
|
bucket: string;
|
|
7
8
|
region?: string;
|
|
8
|
-
prefix?: string;
|
|
9
9
|
endpoint?: string;
|
|
10
10
|
}
|
|
11
|
-
type S3Secrets =
|
|
11
|
+
type S3Secrets = Secrets<'ACCESS_KEY_ID' | 'SECRET_ACCESS_KEY'>;
|
|
12
12
|
export declare class S3 extends Provider<S3Options> {
|
|
13
|
-
static readonly SECRETS: readonly
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
static readonly SECRETS: readonly Secret[];
|
|
14
|
+
private readonly bucket;
|
|
15
|
+
private readonly client;
|
|
16
16
|
constructor(options: S3Options, secrets?: S3Secrets);
|
|
17
|
-
get(Key: string): Promise<
|
|
18
|
-
|
|
19
|
-
put(
|
|
17
|
+
get(Key: string): Promise<Maybe<Stream>>;
|
|
18
|
+
head(Key: string): Promise<Maybe<Metadata>>;
|
|
19
|
+
put(Key: string, stream: Readable): Promise<void>;
|
|
20
|
+
commit(Key: string, metadata: object): Promise<void>;
|
|
21
|
+
delete(Key: string): Promise<void>;
|
|
22
|
+
move(from: string, keyTo: string): Promise<Maybe<void>>;
|
|
20
23
|
/**
|
|
21
|
-
*
|
|
22
|
-
* with
|
|
23
|
-
* @param Key - key name or path prefix
|
|
24
|
+
* An address of the object signed for `expires` seconds, which serves it as the type it was
|
|
25
|
+
* stored as: an object is stored with none of its own (`put`), and would be served as bytes.
|
|
24
26
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
moveDir(from: string, to: string): Promise<void>;
|
|
28
|
-
private listObjects;
|
|
27
|
+
url(Key: string, expires: number): Promise<Maybe<string>>;
|
|
28
|
+
private try;
|
|
29
29
|
}
|
|
30
30
|
export {};
|
|
@@ -1,54 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.S3 = void 0;
|
|
30
|
-
const node_stream_1 = require("node:stream");
|
|
31
|
-
const node_buffer_1 = require("node:buffer");
|
|
32
|
-
const posix_1 = require("node:path/posix");
|
|
33
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
34
|
-
const node_path_1 = require("node:path");
|
|
35
|
-
const lib_storage_1 = require("@aws-sdk/lib-storage");
|
|
36
|
-
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
37
|
-
const nodeNativeFetch = __importStar(require("smithy-node-native-fetch"));
|
|
38
|
-
const Provider_1 = require("../Provider");
|
|
39
|
-
class S3 extends Provider_1.Provider {
|
|
40
|
-
static SECRETS = [
|
|
41
|
-
{ name: 'ACCESS_KEY_ID', optional: true },
|
|
42
|
-
{ name: 'SECRET_ACCESS_KEY', optional: true }
|
|
43
|
-
];
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import { Blob } from 'node:buffer';
|
|
3
|
+
import { join } from 'node:path/posix';
|
|
4
|
+
import { Upload } from '@aws-sdk/lib-storage';
|
|
5
|
+
import * as s3 from '@aws-sdk/client-s3';
|
|
6
|
+
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
7
|
+
import { console } from 'openspan';
|
|
8
|
+
import { Provider } from '../Provider.js';
|
|
9
|
+
import { secrets } from '@toa.io/definitions/extensions.storages';
|
|
10
|
+
import { ERR_NOT_FOUND } from '../errors.js';
|
|
11
|
+
export class S3 extends Provider {
|
|
12
|
+
static SECRETS = secrets.s3;
|
|
44
13
|
bucket;
|
|
45
14
|
client;
|
|
46
15
|
constructor(options, secrets) {
|
|
47
|
-
super(options);
|
|
16
|
+
super(options, secrets);
|
|
48
17
|
this.bucket = options.bucket;
|
|
49
18
|
const s3Config = {
|
|
50
|
-
retryMode: 'adaptive'
|
|
51
|
-
...nodeNativeFetch
|
|
19
|
+
retryMode: 'adaptive'
|
|
52
20
|
};
|
|
53
21
|
if (options.endpoint !== undefined) {
|
|
54
22
|
s3Config.forcePathStyle = options.endpoint.startsWith('http://');
|
|
@@ -57,19 +25,20 @@ class S3 extends Provider_1.Provider {
|
|
|
57
25
|
if (options.region !== undefined)
|
|
58
26
|
s3Config.region = options.region;
|
|
59
27
|
if (typeof secrets?.ACCESS_KEY_ID === 'string') {
|
|
60
|
-
|
|
28
|
+
if (secrets.SECRET_ACCESS_KEY === undefined)
|
|
29
|
+
throw new Error('SECRET_ACCESS_KEY is required if ACCESS_KEY_ID is provided');
|
|
61
30
|
s3Config.credentials = {
|
|
62
31
|
accessKeyId: secrets.ACCESS_KEY_ID,
|
|
63
32
|
secretAccessKey: secrets.SECRET_ACCESS_KEY
|
|
64
33
|
};
|
|
65
34
|
}
|
|
66
|
-
this.client = new
|
|
35
|
+
this.client = new s3.S3Client(s3Config);
|
|
67
36
|
this.client.middlewareStack.add((next, _context) => async (args) => {
|
|
37
|
+
// removes leading slash
|
|
68
38
|
if ('Key' in args.input && typeof args.input.Key === 'string')
|
|
69
|
-
// removes leading slash
|
|
70
39
|
args.input.Key = args.input.Key.replace(/^\//, '');
|
|
40
|
+
// removes leading slash and ensures finishing slash
|
|
71
41
|
if ('Prefix' in args.input && typeof args.input.Prefix === 'string')
|
|
72
|
-
// removes leading slash and ensures finishing slash
|
|
73
42
|
args.input.Prefix = args.input.Prefix.replace(/^\/|\/$/g, '') + '/';
|
|
74
43
|
return next(args);
|
|
75
44
|
}, {
|
|
@@ -79,95 +48,91 @@ class S3 extends Provider_1.Provider {
|
|
|
79
48
|
});
|
|
80
49
|
}
|
|
81
50
|
async get(Key) {
|
|
82
|
-
try {
|
|
83
|
-
const
|
|
51
|
+
return await this.try(async () => {
|
|
52
|
+
const entry = await this.client.send(new s3.GetObjectCommand({
|
|
84
53
|
Bucket: this.bucket,
|
|
85
54
|
Key
|
|
86
55
|
}));
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return null;
|
|
98
|
-
else
|
|
99
|
-
throw err;
|
|
100
|
-
}
|
|
56
|
+
const stream = entry.Body instanceof Readable
|
|
57
|
+
? entry.Body
|
|
58
|
+
: Readable.fromWeb((entry.Body instanceof Blob
|
|
59
|
+
? entry.Body.stream()
|
|
60
|
+
: entry.Body));
|
|
61
|
+
if (entry.Metadata?.value === undefined)
|
|
62
|
+
return ERR_NOT_FOUND;
|
|
63
|
+
const metadata = JSON.parse(entry.Metadata.value);
|
|
64
|
+
return { stream, ...metadata };
|
|
65
|
+
});
|
|
101
66
|
}
|
|
102
|
-
async
|
|
103
|
-
return
|
|
104
|
-
|
|
67
|
+
async head(Key) {
|
|
68
|
+
return await this.try(async () => {
|
|
69
|
+
const entry = await this.client.send(new s3.HeadObjectCommand({
|
|
70
|
+
Bucket: this.bucket,
|
|
71
|
+
Key
|
|
72
|
+
}));
|
|
73
|
+
if (entry.Metadata?.value === undefined)
|
|
74
|
+
return ERR_NOT_FOUND;
|
|
75
|
+
return JSON.parse(entry.Metadata.value);
|
|
76
|
+
});
|
|
105
77
|
}
|
|
106
|
-
async put(
|
|
107
|
-
await new
|
|
78
|
+
async put(Key, stream) {
|
|
79
|
+
await new Upload({
|
|
108
80
|
client: this.client,
|
|
109
81
|
params: {
|
|
110
82
|
Bucket: this.bucket,
|
|
111
|
-
Key
|
|
83
|
+
Key,
|
|
112
84
|
Body: stream
|
|
113
85
|
}
|
|
114
86
|
}).done();
|
|
115
87
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
88
|
+
async commit(Key, metadata) {
|
|
89
|
+
await this.client.send(new s3.CopyObjectCommand({
|
|
90
|
+
Bucket: this.bucket,
|
|
91
|
+
Key,
|
|
92
|
+
CopySource: join(this.bucket, Key),
|
|
93
|
+
Metadata: { value: JSON.stringify(metadata) },
|
|
94
|
+
MetadataDirective: 'REPLACE'
|
|
95
|
+
}));
|
|
96
|
+
console.debug('Uploaded to S3', { bucket: this.bucket, path: Key, metadata });
|
|
97
|
+
}
|
|
121
98
|
async delete(Key) {
|
|
122
|
-
|
|
123
|
-
// checking if given key is a single file
|
|
124
|
-
if (!Key.endsWith('/'))
|
|
125
|
-
try {
|
|
126
|
-
// DeleteObject on S3 returns no error if object does not exist
|
|
127
|
-
await client.send(new client_s3_1.HeadObjectCommand({ Bucket, Key }));
|
|
128
|
-
await client.send(new client_s3_1.DeleteObjectCommand({ Bucket, Key }));
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
node_assert_1.default.ok(err instanceof client_s3_1.NotFound || err instanceof client_s3_1.NoSuchKey, err);
|
|
133
|
-
}
|
|
134
|
-
const objectsToRemove = await this.listObjects(Key);
|
|
135
|
-
// Removing all objects in parallel in batches
|
|
136
|
-
await Promise.all((function* () {
|
|
137
|
-
while (objectsToRemove.length > 0)
|
|
138
|
-
yield client.send(new client_s3_1.DeleteObjectsCommand({
|
|
139
|
-
Bucket,
|
|
140
|
-
Delete: {
|
|
141
|
-
Objects: objectsToRemove.splice(0, 1000 /* max batch size for DeleteObjects */)
|
|
142
|
-
}
|
|
143
|
-
}));
|
|
144
|
-
})());
|
|
99
|
+
await this.client.send(new s3.DeleteObjectCommand({ Bucket: this.bucket, Key }));
|
|
145
100
|
}
|
|
146
101
|
async move(from, keyTo) {
|
|
147
|
-
await this.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
102
|
+
return await this.try(async () => {
|
|
103
|
+
await this.client.send(new s3.CopyObjectCommand({
|
|
104
|
+
Bucket: this.bucket,
|
|
105
|
+
Key: keyTo,
|
|
106
|
+
CopySource: join(this.bucket, from)
|
|
107
|
+
}));
|
|
108
|
+
await this.client.send(new s3.DeleteObjectCommand({ Bucket: this.bucket, Key: from }));
|
|
109
|
+
});
|
|
153
110
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
111
|
+
/**
|
|
112
|
+
* An address of the object signed for `expires` seconds, which serves it as the type it was
|
|
113
|
+
* stored as: an object is stored with none of its own (`put`), and would be served as bytes.
|
|
114
|
+
*/
|
|
115
|
+
async url(Key, expires) {
|
|
116
|
+
const metadata = await this.head(Key);
|
|
117
|
+
if (metadata instanceof Error)
|
|
118
|
+
return metadata;
|
|
119
|
+
const command = new s3.GetObjectCommand({
|
|
120
|
+
Bucket: this.bucket,
|
|
121
|
+
Key,
|
|
122
|
+
ResponseContentType: metadata.type
|
|
123
|
+
});
|
|
124
|
+
return await getSignedUrl(this.client, command, { expiresIn: expires });
|
|
162
125
|
}
|
|
163
|
-
async
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
126
|
+
async try(action) {
|
|
127
|
+
try {
|
|
128
|
+
return await action();
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (err?.name === 'NotFound' || err?.name === 'NoSuchKey')
|
|
132
|
+
return ERR_NOT_FOUND;
|
|
133
|
+
else
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
170
136
|
}
|
|
171
137
|
}
|
|
172
|
-
exports.S3 = S3;
|
|
173
138
|
//# sourceMappingURL=S3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"S3.js","sourceRoot":"","sources":["../../source/providers/S3.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"S3.js","sourceRoot":"","sources":["../../source/providers/S3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S3 } from './S3.ts';
|
|
2
|
+
import type { Secret, Secrets } from '../Secrets.ts';
|
|
3
|
+
export interface SpacesOptions {
|
|
4
|
+
space: string;
|
|
5
|
+
region: string;
|
|
6
|
+
}
|
|
7
|
+
type SpacesSecrets = Secrets<'ACCESS_KEY_ID' | 'SECRET_ACCESS_KEY'>;
|
|
8
|
+
export declare class Spaces extends S3 {
|
|
9
|
+
static readonly SECRETS: readonly Secret[];
|
|
10
|
+
constructor(options: SpacesOptions, secrets?: SpacesSecrets);
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { S3 } from './S3.js';
|
|
2
|
+
import { secrets } from '@toa.io/definitions/extensions.storages';
|
|
3
|
+
export class Spaces extends S3 {
|
|
4
|
+
static SECRETS = secrets.spaces;
|
|
5
|
+
constructor(options, secrets) {
|
|
6
|
+
super({
|
|
7
|
+
bucket: options.space,
|
|
8
|
+
region: options.region,
|
|
9
|
+
endpoint: `https://${options.region}.digitaloceanspaces.com`
|
|
10
|
+
}, secrets);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Spaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spaces.js","sourceRoot":"","sources":["../../source/providers/Spaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAA;AAUjE,MAAM,OAAO,MAAO,SAAQ,EAAE;IACrB,MAAM,CAAmB,OAAO,GAAsB,OAAO,CAAC,MAAM,CAAA;IAE3E,YAAmB,OAAsB,EAAE,OAAuB;QAChE,KAAK,CACH;YACE,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,WAAW,OAAO,CAAC,MAAM,yBAAyB;SAC7D,EACD,OAAO,CACR,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { FileSystem } from './FileSystem';
|
|
2
|
-
import type { ProviderSecrets } from '../Provider';
|
|
1
|
+
import { FileSystem } from './FileSystem.ts';
|
|
3
2
|
export interface TemporaryOptions {
|
|
4
3
|
directory: string;
|
|
5
4
|
}
|
|
6
5
|
export declare class Temporary extends FileSystem {
|
|
7
|
-
constructor(options: TemporaryOptions
|
|
6
|
+
constructor(options: TemporaryOptions);
|
|
8
7
|
}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
constructor(options, secrets) {
|
|
9
|
-
const path = (0, node_path_1.join)((0, node_os_1.tmpdir)(), options.directory);
|
|
10
|
-
super({ path }, secrets);
|
|
1
|
+
import { tmpdir } from 'node:os';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { FileSystem } from './FileSystem.js';
|
|
4
|
+
export class Temporary extends FileSystem {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
const path = join(tmpdir(), options.directory);
|
|
7
|
+
super({ path });
|
|
11
8
|
}
|
|
12
9
|
}
|
|
13
|
-
exports.Temporary = Temporary;
|
|
14
10
|
//# sourceMappingURL=Temporary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Temporary.js","sourceRoot":"","sources":["../../source/providers/Temporary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Temporary.js","sourceRoot":"","sources":["../../source/providers/Temporary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,MAAM,OAAO,SAAU,SAAQ,UAAU;IACvC,YAAmB,OAAyB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;QAE9C,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACjB,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Temporary, type TemporaryOptions } from './Temporary';
|
|
2
|
-
import type {
|
|
1
|
+
import { Temporary, type TemporaryOptions } from './Temporary.ts';
|
|
2
|
+
import type { Secret } from '../Secrets.ts';
|
|
3
3
|
export declare class Test extends Temporary {
|
|
4
|
-
static readonly SECRETS: readonly
|
|
5
|
-
constructor(options: TemporaryOptions
|
|
4
|
+
static readonly SECRETS: readonly Secret[];
|
|
5
|
+
constructor(options: TemporaryOptions);
|
|
6
6
|
}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
{ name: 'USERNAME' },
|
|
8
|
-
{ name: 'PASSWORD' }
|
|
9
|
-
];
|
|
10
|
-
constructor(options, secrets) {
|
|
11
|
-
super(options, secrets);
|
|
1
|
+
import { Temporary } from './Temporary.js';
|
|
2
|
+
import { secrets } from '@toa.io/definitions/extensions.storages';
|
|
3
|
+
export class Test extends Temporary {
|
|
4
|
+
static SECRETS = secrets.test;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options);
|
|
12
7
|
}
|
|
13
8
|
}
|
|
14
|
-
exports.Test = Test;
|
|
15
9
|
//# sourceMappingURL=Test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.js","sourceRoot":"","sources":["../../source/providers/Test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Test.js","sourceRoot":"","sources":["../../source/providers/Test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAA;AAGjE,MAAM,OAAO,IAAK,SAAQ,SAAS;IAC1B,MAAM,CAAmB,OAAO,GAAsB,OAAO,CAAC,IAAI,CAAA;IAEzE,YAAmB,OAAyB;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;CACF"}
|
|
@@ -1,13 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { Constructor } from '../Provider.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A provider is loaded when a storage names it: the SDK one is written against is not paid
|
|
4
|
+
* for by a process that declares another, and is not installed by one either — it is an
|
|
5
|
+
* optional peer of this package, which a deploy installs for the storages a component
|
|
6
|
+
* declares. See `provider` below for what a workspace that has not gets told.
|
|
7
|
+
*/
|
|
6
8
|
export declare const providers: {
|
|
7
|
-
readonly s3: typeof S3
|
|
8
|
-
readonly
|
|
9
|
-
readonly
|
|
10
|
-
readonly
|
|
11
|
-
readonly
|
|
9
|
+
readonly s3: () => Promise<typeof import("./S3.ts").S3>;
|
|
10
|
+
readonly spaces: () => Promise<typeof import("./Spaces.ts").Spaces>;
|
|
11
|
+
readonly cloudinary: () => Promise<typeof import("./Cloudinary.ts").Cloudinary>;
|
|
12
|
+
readonly fs: () => Promise<typeof import("./FileSystem.ts").FileSystem>;
|
|
13
|
+
readonly tmp: () => Promise<typeof import("./Temporary.ts").Temporary>;
|
|
14
|
+
readonly test: () => Promise<typeof import("./Test.ts").Test>;
|
|
12
15
|
};
|
|
13
|
-
export type
|
|
16
|
+
export type Id = keyof typeof providers;
|
|
17
|
+
/** The provider a declaration names, or what to install to have it. */
|
|
18
|
+
export declare function provider(id: Id): Promise<Constructor>;
|
|
19
|
+
export type { Declaration } from './Declaration.ts';
|
|
20
|
+
export type { S3Options } from './S3.ts';
|
|
21
|
+
export type { SpacesOptions } from './Spaces.ts';
|
|
22
|
+
export type { CloudinaryOptions } from './Cloudinary.ts';
|
|
23
|
+
export type { FileSystemOptions } from './FileSystem.ts';
|
|
24
|
+
export type { TemporaryOptions } from './Temporary.ts';
|
|
25
|
+
export type { FileSystem, S3, Spaces, Cloudinary, Temporary } from './index.types.ts';
|
|
@@ -1,16 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
test:
|
|
1
|
+
import { packages } from '@toa.io/definitions/extensions.storages';
|
|
2
|
+
/**
|
|
3
|
+
* A provider is loaded when a storage names it: the SDK one is written against is not paid
|
|
4
|
+
* for by a process that declares another, and is not installed by one either — it is an
|
|
5
|
+
* optional peer of this package, which a deploy installs for the storages a component
|
|
6
|
+
* declares. See `provider` below for what a workspace that has not gets told.
|
|
7
|
+
*/
|
|
8
|
+
export const providers = {
|
|
9
|
+
s3: async () => (await import('./S3.js')).S3,
|
|
10
|
+
spaces: async () => (await import('./Spaces.js')).Spaces,
|
|
11
|
+
cloudinary: async () => (await import('./Cloudinary.js')).Cloudinary,
|
|
12
|
+
fs: async () => (await import('./FileSystem.js')).FileSystem,
|
|
13
|
+
tmp: async () => (await import('./Temporary.js')).Temporary,
|
|
14
|
+
test: async () => (await import('./Test.js')).Test
|
|
15
15
|
};
|
|
16
|
+
/** The provider a declaration names, or what to install to have it. */
|
|
17
|
+
export async function provider(id) {
|
|
18
|
+
try {
|
|
19
|
+
return await providers[id]();
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
const missing = Object.entries(packages[id]).map(([name, version]) => `${name}@${version}`);
|
|
23
|
+
if (missing.length === 0 || !isMissingModule(error))
|
|
24
|
+
throw error;
|
|
25
|
+
throw new Error(`Storage provider '${id}' needs ${missing.join(' ')}, which is not installed. ` +
|
|
26
|
+
`\`toa npm\` installs what this context's components declare.`, { cause: error });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function isMissingModule(error) {
|
|
30
|
+
return error?.code === 'ERR_MODULE_NOT_FOUND';
|
|
31
|
+
}
|
|
16
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/providers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAA;AAGlE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;IAC5C,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;IACxD,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU;IACpE,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU;IAC5D,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;IAC3D,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;CACW,CAAA;AAI/D,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAM;IACnC,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAC9C,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAC1C,CAAA;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;QAEhE,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,WAAW,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B;YAC7E,8DAA8D,EAChE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAQ,KAA2B,EAAE,IAAI,KAAK,sBAAsB,CAAA;AACtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.types.js","sourceRoot":"","sources":["../../source/providers/index.types.ts"],"names":[],"mappings":""}
|