@syncular/server-storage-s3 0.0.0 → 0.0.5-41
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/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +219 -0
- package/dist/index.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3-compatible blob storage adapter.
|
|
3
|
+
*
|
|
4
|
+
* Works with AWS S3, Cloudflare R2, MinIO, and other S3-compatible services.
|
|
5
|
+
* Requires @aws-sdk/client-s3 and @aws-sdk/s3-request-presigner as peer dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import type { BlobStorageAdapter } from '@syncular/core';
|
|
8
|
+
/**
|
|
9
|
+
* S3 client interface (minimal subset of @aws-sdk/client-s3).
|
|
10
|
+
* This allows users to pass in their own configured S3 client.
|
|
11
|
+
*/
|
|
12
|
+
export interface S3ClientLike {
|
|
13
|
+
send(command: unknown): Promise<unknown>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Function to create presigned URLs.
|
|
17
|
+
* This should be getSignedUrl from @aws-sdk/s3-request-presigner.
|
|
18
|
+
*/
|
|
19
|
+
export type GetSignedUrlFn = (client: S3ClientLike, command: unknown, options: {
|
|
20
|
+
expiresIn: number;
|
|
21
|
+
}) => Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* S3 command constructors.
|
|
24
|
+
* These should be imported from @aws-sdk/client-s3.
|
|
25
|
+
*/
|
|
26
|
+
export interface S3Commands {
|
|
27
|
+
PutObjectCommand: new (input: {
|
|
28
|
+
Bucket: string;
|
|
29
|
+
Key: string;
|
|
30
|
+
ContentLength?: number;
|
|
31
|
+
ContentType?: string;
|
|
32
|
+
ChecksumSHA256?: string;
|
|
33
|
+
Body?: Uint8Array | ReadableStream<Uint8Array>;
|
|
34
|
+
}) => unknown;
|
|
35
|
+
GetObjectCommand: new (input: {
|
|
36
|
+
Bucket: string;
|
|
37
|
+
Key: string;
|
|
38
|
+
}) => unknown;
|
|
39
|
+
HeadObjectCommand: new (input: {
|
|
40
|
+
Bucket: string;
|
|
41
|
+
Key: string;
|
|
42
|
+
}) => unknown;
|
|
43
|
+
DeleteObjectCommand: new (input: {
|
|
44
|
+
Bucket: string;
|
|
45
|
+
Key: string;
|
|
46
|
+
}) => unknown;
|
|
47
|
+
}
|
|
48
|
+
export interface S3BlobStorageAdapterOptions {
|
|
49
|
+
/** S3 client instance */
|
|
50
|
+
client: S3ClientLike;
|
|
51
|
+
/** S3 bucket name */
|
|
52
|
+
bucket: string;
|
|
53
|
+
/** Optional key prefix for all blobs */
|
|
54
|
+
keyPrefix?: string;
|
|
55
|
+
/** S3 command constructors */
|
|
56
|
+
commands: S3Commands;
|
|
57
|
+
/** getSignedUrl function from @aws-sdk/s3-request-presigner */
|
|
58
|
+
getSignedUrl: GetSignedUrlFn;
|
|
59
|
+
/**
|
|
60
|
+
* Whether to require SHA-256 checksum validation on upload.
|
|
61
|
+
* Supported by S3 and R2. Default: true.
|
|
62
|
+
*/
|
|
63
|
+
requireChecksum?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create an S3-compatible blob storage adapter.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* import { S3Client, PutObjectCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';
|
|
71
|
+
* import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
72
|
+
*
|
|
73
|
+
* const adapter = createS3BlobStorageAdapter({
|
|
74
|
+
* client: new S3Client({ region: 'us-east-1' }),
|
|
75
|
+
* bucket: 'my-bucket',
|
|
76
|
+
* keyPrefix: 'blobs/',
|
|
77
|
+
* commands: { PutObjectCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand },
|
|
78
|
+
* getSignedUrl,
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function createS3BlobStorageAdapter(options: S3BlobStorageAdapterOptions): BlobStorageAdapter;
|
|
83
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,KAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,gBAAgB,EAAE,KAAK,KAAK,EAAE;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;KAChD,KAAK,OAAO,CAAC;IACd,gBAAgB,EAAE,KAAK,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IAC1E,iBAAiB,EAAE,KAAK,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IAC3E,mBAAmB,EAAE,KAAK,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;CAC9E;AAED,MAAM,WAAW,2BAA2B;IAC1C,yBAAyB;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,EAAE,UAAU,CAAC;IACrB,+DAA+D;IAC/D,YAAY,EAAE,cAAc,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,2BAA2B,GACnC,kBAAkB,CAqLpB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3-compatible blob storage adapter.
|
|
3
|
+
*
|
|
4
|
+
* Works with AWS S3, Cloudflare R2, MinIO, and other S3-compatible services.
|
|
5
|
+
* Requires @aws-sdk/client-s3 and @aws-sdk/s3-request-presigner as peer dependencies.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create an S3-compatible blob storage adapter.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { S3Client, PutObjectCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';
|
|
13
|
+
* import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
14
|
+
*
|
|
15
|
+
* const adapter = createS3BlobStorageAdapter({
|
|
16
|
+
* client: new S3Client({ region: 'us-east-1' }),
|
|
17
|
+
* bucket: 'my-bucket',
|
|
18
|
+
* keyPrefix: 'blobs/',
|
|
19
|
+
* commands: { PutObjectCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand },
|
|
20
|
+
* getSignedUrl,
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function createS3BlobStorageAdapter(options) {
|
|
25
|
+
const { client, bucket, keyPrefix = '', commands, getSignedUrl, requireChecksum = true, } = options;
|
|
26
|
+
function getKey(hash) {
|
|
27
|
+
// Remove "sha256:" prefix and use hex as key
|
|
28
|
+
const hex = hash.startsWith('sha256:') ? hash.slice(7) : hash;
|
|
29
|
+
return `${keyPrefix}${hex}`;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
name: 's3',
|
|
33
|
+
async signUpload(opts) {
|
|
34
|
+
const key = getKey(opts.hash);
|
|
35
|
+
// Extract hex hash for checksum (S3 expects base64-encoded SHA-256)
|
|
36
|
+
const hexHash = opts.hash.startsWith('sha256:')
|
|
37
|
+
? opts.hash.slice(7)
|
|
38
|
+
: opts.hash;
|
|
39
|
+
// Convert hex to base64 for S3 checksum header
|
|
40
|
+
const checksumBase64 = hexToBase64(hexHash);
|
|
41
|
+
const commandInput = {
|
|
42
|
+
Bucket: bucket,
|
|
43
|
+
Key: key,
|
|
44
|
+
ContentLength: opts.size,
|
|
45
|
+
ContentType: opts.mimeType,
|
|
46
|
+
};
|
|
47
|
+
if (requireChecksum) {
|
|
48
|
+
commandInput.ChecksumSHA256 = checksumBase64;
|
|
49
|
+
}
|
|
50
|
+
const command = new commands.PutObjectCommand(commandInput);
|
|
51
|
+
const url = await getSignedUrl(client, command, {
|
|
52
|
+
expiresIn: opts.expiresIn,
|
|
53
|
+
});
|
|
54
|
+
const headers = {
|
|
55
|
+
'Content-Type': opts.mimeType,
|
|
56
|
+
'Content-Length': String(opts.size),
|
|
57
|
+
};
|
|
58
|
+
if (requireChecksum) {
|
|
59
|
+
headers['x-amz-checksum-sha256'] = checksumBase64;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
url,
|
|
63
|
+
method: 'PUT',
|
|
64
|
+
headers,
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
async signDownload(opts) {
|
|
68
|
+
const key = getKey(opts.hash);
|
|
69
|
+
const command = new commands.GetObjectCommand({
|
|
70
|
+
Bucket: bucket,
|
|
71
|
+
Key: key,
|
|
72
|
+
});
|
|
73
|
+
return getSignedUrl(client, command, { expiresIn: opts.expiresIn });
|
|
74
|
+
},
|
|
75
|
+
async exists(hash) {
|
|
76
|
+
const key = getKey(hash);
|
|
77
|
+
try {
|
|
78
|
+
const command = new commands.HeadObjectCommand({
|
|
79
|
+
Bucket: bucket,
|
|
80
|
+
Key: key,
|
|
81
|
+
});
|
|
82
|
+
await client.send(command);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
// Check for NotFound error
|
|
87
|
+
if (isNotFoundError(err)) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
async delete(hash) {
|
|
94
|
+
const key = getKey(hash);
|
|
95
|
+
const command = new commands.DeleteObjectCommand({
|
|
96
|
+
Bucket: bucket,
|
|
97
|
+
Key: key,
|
|
98
|
+
});
|
|
99
|
+
await client.send(command);
|
|
100
|
+
},
|
|
101
|
+
async getMetadata(hash) {
|
|
102
|
+
const key = getKey(hash);
|
|
103
|
+
try {
|
|
104
|
+
const command = new commands.HeadObjectCommand({
|
|
105
|
+
Bucket: bucket,
|
|
106
|
+
Key: key,
|
|
107
|
+
});
|
|
108
|
+
const response = (await client.send(command));
|
|
109
|
+
return {
|
|
110
|
+
size: response.ContentLength ?? 0,
|
|
111
|
+
mimeType: response.ContentType,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
if (isNotFoundError(err)) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
throw err;
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
async put(hash, data) {
|
|
122
|
+
const key = getKey(hash);
|
|
123
|
+
const command = new commands.PutObjectCommand({
|
|
124
|
+
Bucket: bucket,
|
|
125
|
+
Key: key,
|
|
126
|
+
Body: data,
|
|
127
|
+
ContentLength: data.length,
|
|
128
|
+
ContentType: 'application/octet-stream',
|
|
129
|
+
});
|
|
130
|
+
await client.send(command);
|
|
131
|
+
},
|
|
132
|
+
async get(hash) {
|
|
133
|
+
const key = getKey(hash);
|
|
134
|
+
try {
|
|
135
|
+
const command = new commands.GetObjectCommand({
|
|
136
|
+
Bucket: bucket,
|
|
137
|
+
Key: key,
|
|
138
|
+
});
|
|
139
|
+
const response = (await client.send(command));
|
|
140
|
+
if (!response.Body)
|
|
141
|
+
return null;
|
|
142
|
+
return response.Body.transformToByteArray();
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
if (isNotFoundError(err)) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
throw err;
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
async getStream(hash) {
|
|
152
|
+
const key = getKey(hash);
|
|
153
|
+
try {
|
|
154
|
+
const command = new commands.GetObjectCommand({
|
|
155
|
+
Bucket: bucket,
|
|
156
|
+
Key: key,
|
|
157
|
+
});
|
|
158
|
+
const response = (await client.send(command));
|
|
159
|
+
if (!response.Body)
|
|
160
|
+
return null;
|
|
161
|
+
return response.Body.transformToWebStream();
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
if (isNotFoundError(err)) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
throw err;
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function isNotFoundError(err) {
|
|
173
|
+
if (typeof err !== 'object' || err === null)
|
|
174
|
+
return false;
|
|
175
|
+
const e = err;
|
|
176
|
+
return (e.name === 'NotFound' ||
|
|
177
|
+
e.name === 'NoSuchKey' ||
|
|
178
|
+
e.$metadata?.httpStatusCode === 404);
|
|
179
|
+
}
|
|
180
|
+
function hexToBase64(hex) {
|
|
181
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
182
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
183
|
+
bytes[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
184
|
+
}
|
|
185
|
+
// Use Buffer if available (Node/Bun), otherwise manual base64
|
|
186
|
+
if (typeof Buffer !== 'undefined') {
|
|
187
|
+
return Buffer.from(bytes).toString('base64');
|
|
188
|
+
}
|
|
189
|
+
// Manual base64 encoding
|
|
190
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
191
|
+
let result = '';
|
|
192
|
+
const len = bytes.length;
|
|
193
|
+
const remainder = len % 3;
|
|
194
|
+
for (let i = 0; i < len - remainder; i += 3) {
|
|
195
|
+
const a = bytes[i];
|
|
196
|
+
const b = bytes[i + 1];
|
|
197
|
+
const c = bytes[i + 2];
|
|
198
|
+
result +=
|
|
199
|
+
chars.charAt((a >> 2) & 0x3f) +
|
|
200
|
+
chars.charAt(((a << 4) | (b >> 4)) & 0x3f) +
|
|
201
|
+
chars.charAt(((b << 2) | (c >> 6)) & 0x3f) +
|
|
202
|
+
chars.charAt(c & 0x3f);
|
|
203
|
+
}
|
|
204
|
+
if (remainder === 1) {
|
|
205
|
+
const a = bytes[len - 1];
|
|
206
|
+
result += `${chars.charAt((a >> 2) & 0x3f) + chars.charAt((a << 4) & 0x3f)}==`;
|
|
207
|
+
}
|
|
208
|
+
else if (remainder === 2) {
|
|
209
|
+
const a = bytes[len - 2];
|
|
210
|
+
const b = bytes[len - 1];
|
|
211
|
+
result +=
|
|
212
|
+
chars.charAt((a >> 2) & 0x3f) +
|
|
213
|
+
chars.charAt(((a << 4) | (b >> 4)) & 0x3f) +
|
|
214
|
+
chars.charAt((b << 2) & 0x3f) +
|
|
215
|
+
'=';
|
|
216
|
+
}
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+DH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAoC,EAChB;IACpB,MAAM,EACJ,MAAM,EACN,MAAM,EACN,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,YAAY,EACZ,eAAe,GAAG,IAAI,GACvB,GAAG,OAAO,CAAC;IAEZ,SAAS,MAAM,CAAC,IAAY,EAAU;QACpC,6CAA6C;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,OAAO,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;IAAA,CAC7B;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QAEV,KAAK,CAAC,UAAU,CAAC,IAA2B,EAA6B;YACvE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9B,oEAAoE;YACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAEd,+CAA+C;YAC/C,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,YAAY,GAMd;gBACF,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;gBACR,aAAa,EAAE,IAAI,CAAC,IAAI;gBACxB,WAAW,EAAE,IAAI,CAAC,QAAQ;aAC3B,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBACpB,YAAY,CAAC,cAAc,GAAG,cAAc,CAAC;YAC/C,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC9C,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YAEH,MAAM,OAAO,GAA2B;gBACtC,cAAc,EAAE,IAAI,CAAC,QAAQ;gBAC7B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;aACpC,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,CAAC,uBAAuB,CAAC,GAAG,cAAc,CAAC;YACpD,CAAC;YAED,OAAO;gBACL,GAAG;gBACH,MAAM,EAAE,KAAK;gBACb,OAAO;aACR,CAAC;QAAA,CACH;QAED,KAAK,CAAC,YAAY,CAAC,IAA6B,EAAmB;YACjE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC;gBAC5C,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;aACT,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAAA,CACrE;QAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAoB;YAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,iBAAiB,CAAC;oBAC7C,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,GAAG;iBACT,CAAC,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,2BAA2B;gBAC3B,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QAAA,CACF;QAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAiB;YACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,mBAAmB,CAAC;gBAC/C,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;aACT,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAA,CAC5B;QAED,KAAK,CAAC,WAAW,CACf,IAAY,EACyC;YACrD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,iBAAiB,CAAC;oBAC7C,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,GAAG;iBACT,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAG3C,CAAC;gBACF,OAAO;oBACL,IAAI,EAAE,QAAQ,CAAC,aAAa,IAAI,CAAC;oBACjC,QAAQ,EAAE,QAAQ,CAAC,WAAW;iBAC/B,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QAAA,CACF;QAED,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,IAAgB,EAAiB;YACvD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC;gBAC5C,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,IAAI;gBACV,aAAa,EAAE,IAAI,CAAC,MAAM;gBAC1B,WAAW,EAAE,0BAA0B;aACxC,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAA,CAC5B;QAED,KAAK,CAAC,GAAG,CAAC,IAAY,EAA8B;YAClD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC;oBAC5C,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,GAAG;iBACT,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAE3C,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QAAA,CACF;QAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAA8C;YACxE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC;oBAC5C,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,GAAG;iBACT,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAE3C,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QAAA,CACF;KACF,CAAC;AAAA,CACH;AAED,SAAS,eAAe,CAAC,GAAY,EAAW;IAC9C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,CAAC,GAAG,GAAiE,CAAC;IAC5E,OAAO,CACL,CAAC,CAAC,IAAI,KAAK,UAAU;QACrB,CAAC,CAAC,IAAI,KAAK,WAAW;QACtB,CAAC,CAAC,SAAS,EAAE,cAAc,KAAK,GAAG,CACpC,CAAC;AAAA,CACH;AAED,SAAS,WAAW,CAAC,GAAW,EAAU;IACxC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,8DAA8D;IAC9D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,yBAAyB;IACzB,MAAM,KAAK,GACT,kEAAkE,CAAC;IACrE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACpB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACxB,MAAM;YACJ,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC7B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC1C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC1C,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACjF,CAAC;SAAM,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;QAC1B,MAAM;YACJ,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC7B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC1C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC7B,GAAG,CAAC;IACR,CAAC;IAED,OAAO,MAAM,CAAC;AAAA,CACf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncular/server-storage-s3",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5-41",
|
|
4
4
|
"description": "S3-compatible blob storage adapter for Syncular server",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Benjamin Kniffler",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"release": "bunx syncular-publish"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@syncular/core": "0.0.
|
|
44
|
+
"@syncular/core": "0.0.5-41"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@syncular/config": "0.0.0"
|