Skip to content

Commit c8b8947

Browse files
committed
SOFIE-31 | add support for multiplatform S3 engines
1 parent f9a1791 commit c8b8947

4 files changed

Lines changed: 164 additions & 245 deletions

File tree

Lines changed: 83 additions & 229 deletions
Original file line numberDiff line numberDiff line change
@@ -1,231 +1,85 @@
11
{
2-
"description": "This file is intended for debugging use. By passing the argument --watchFiles=true, the application will monitor this file as a second source of packages, so we can fiddle without going through Core",
3-
"packageContainers": {
4-
"source0": {
5-
"label": "Source 0",
6-
"accessors": {
7-
"local": {
8-
"type": "local_folder",
9-
"label": "Local",
10-
"folderPath": "C:\\temp\\source0",
11-
"allowRead": true,
12-
"allowWrite": false
13-
}
14-
}
15-
},
16-
"target0": {
17-
"label": "Target 0",
18-
"accessors": {
19-
"local": {
20-
"type": "local_folder",
21-
"label": "Local",
22-
"folderPath": "C:\\temp\\target0",
23-
"allowRead": true,
24-
"allowWrite": true
25-
}
26-
}
27-
},
28-
"thumbnails0": {
29-
"label": "Thumbnails",
30-
"accessors": {
31-
"local": {
32-
"type": "http_proxy",
33-
"label": "http proxy",
34-
"baseUrl": "http://localhost:8080/package",
35-
"allowRead": true,
36-
"allowWrite": true
37-
}
38-
}
39-
},
40-
"thumbnails0_local": {
41-
"label": "Thumbnails",
42-
"accessors": {
43-
"local": {
44-
"type": "local_folder",
45-
"label": "Local",
46-
"folderPath": "C:\\temp\\thumbnails",
47-
"allowRead": true,
48-
"allowWrite": true
49-
}
50-
}
51-
},
52-
"http0": {
53-
"label": "Local HTTP",
54-
"accessors": {
55-
"http": {
56-
"type": "http",
57-
"label": "http",
58-
"baseUrl": "http://127.0.0.1:8080",
59-
"allowRead": true,
60-
"allowWrite": false
61-
}
62-
}
63-
},
64-
"core0": {
65-
"label": "Core",
66-
"accessors": {
67-
"packageInfo0": {
68-
"type": "core_package_info",
69-
"label": "Package Info",
70-
"allowRead": true,
71-
"allowWrite": true
72-
}
73-
}
74-
},
75-
"ftp": {
76-
"label": "FTP",
77-
"accessors": {
78-
"ftp": {
79-
"type": "ftp",
80-
"label": "FTP",
81-
"host": "127.0.0.1",
82-
"serverType": "sftp",
83-
"allowRead": true,
84-
"allowWrite": true,
85-
"username": "test",
86-
"password": "test"
87-
}
88-
}
89-
},
90-
"theinternet": {
91-
"label": "HTTP",
92-
"accessors": {
93-
"http": {
94-
"type": "http",
95-
"label": "http",
96-
"baseUrl": "",
97-
"allowRead": true,
98-
"allowWrite": false
99-
}
100-
}
101-
}
102-
},
103-
"expectedPackages": [
104-
{
105-
"type": "media_file",
106-
"_id": "test",
107-
"contentVersionHash": "abc1234",
108-
"content": {
109-
"filePath": "amb.mp4"
110-
},
111-
"version": {},
112-
"sources": [
113-
{
114-
"containerId": "source0",
115-
"accessors": {
116-
"local": {
117-
"type": "local_folder",
118-
"filePath": "amb.mp4"
119-
}
120-
}
121-
}
122-
],
123-
"layers": [
124-
"target0"
125-
],
126-
"sideEffect": {
127-
"previewContainerId": null,
128-
"previewPackageSettings": null,
129-
"thumbnailContainerId": "thumbnails0_local",
130-
"thumbnailPackageSettings": {
131-
"path": "thumbnail.png"
132-
},
133-
"loudnessPackageSettings": {
134-
"channelSpec": [
135-
"0",
136-
"0+1"
137-
],
138-
"inPhaseDifference": true,
139-
"balanceDifference": true
140-
},
141-
"iframes": true
142-
}
143-
},
144-
{
145-
"type": "json_data",
146-
"_id": "json0",
147-
"contentVersionHash": "abc1234",
148-
"content": {
149-
"path": "test.json"
150-
},
151-
"version": {},
152-
"sources": [
153-
{
154-
"containerId": "http0",
155-
"accessors": {
156-
"local": {
157-
"type": "http",
158-
"isImmutable": true
159-
}
160-
}
161-
}
162-
],
163-
"layers": [
164-
"core0"
165-
],
166-
"sideEffect": {}
167-
},
168-
{
169-
"type": "html_template",
170-
"_id": "test-html",
171-
"contentVersionHash": "abc1234",
172-
"content": {
173-
"path": "https://www.bouncingdvdlogo.com/"
174-
},
175-
"version": {
176-
"renderer": {
177-
"width": 1920,
178-
"height": 1080,
179-
"scale": 0.25,
180-
"background": "black"
181-
},
182-
"steps": [
183-
{
184-
"do": "waitForLoad"
185-
},
186-
{
187-
"do": "startRecording",
188-
"fileName": "bouncingdvdlogo_recording.webm"
189-
},
190-
{
191-
"do": "sleep",
192-
"duration": 1000
193-
},
194-
{
195-
"do": "takeScreenshot",
196-
"fileName": "bouncingdvdlogo_screenshot.png"
197-
},
198-
{
199-
"do": "sleep",
200-
"duration": 2000
201-
},
202-
{
203-
"do": "stopRecording"
204-
},
205-
{
206-
"do": "cropRecording",
207-
"fileName": "bouncingdvdlogo_recording-cropped.webm"
208-
}
209-
]
210-
},
211-
"sources": [
212-
{
213-
"containerId": "theinternet",
214-
"accessors": {
215-
"http": {
216-
"type": "http",
217-
"url": ""
218-
}
219-
}
220-
}
221-
],
222-
"layers": [
223-
"thumbnails0_local"
224-
],
225-
"sideEffect": {}
226-
}
227-
],
228-
"settings": {
229-
"delayRemoval": 5000
230-
}
2+
"description": "This file is intended for debugging use. By passing the argument --watchFiles=true, the application will monitor this file as a second source of packages, so we can fiddle without going through Core",
3+
"packageContainers": {
4+
"source0": {
5+
"label": "Source 0",
6+
"accessors": {
7+
"local": {
8+
"type": "local_folder",
9+
"label": "Local",
10+
"folderPath": "C:\\temp\\source0",
11+
"allowRead": true,
12+
"allowWrite": false
13+
}
14+
}
15+
},
16+
"target0": {
17+
"label": "Target 0",
18+
"accessors": {
19+
"local": {
20+
"type": "local_folder",
21+
"label": "Local",
22+
"folderPath": "C:\\temp\\target0",
23+
"allowRead": true,
24+
"allowWrite": true
25+
}
26+
}
27+
},
28+
"s3": {
29+
"label": "S3",
30+
"accessors": {
31+
"s3": {
32+
"type": "s3",
33+
"label": "S3",
34+
"region": "auto",
35+
"bucketId": "test",
36+
"accessKey": "minioadmin",
37+
"secretAccessKey": "minioadmin",
38+
"allowRead": true,
39+
"allowWrite": true,
40+
"s3PublicBaseUrl": "http://localhost:9000/test",
41+
"endpoint": "http://localhost:9000",
42+
"forcePathStyle": true
43+
}
44+
}
45+
},
46+
"thumbnails0_local": {
47+
"label": "Thumbnails",
48+
"accessors": {
49+
"local": {
50+
"type": "local_folder",
51+
"label": "Local",
52+
"folderPath": "C:\\temp\\thumbnails",
53+
"allowRead": true,
54+
"allowWrite": true
55+
}
56+
}
57+
}
58+
},
59+
"expectedPackages": [
60+
{
61+
"type": "media_file",
62+
"_id": "test",
63+
"contentVersionHash": "abc12234",
64+
"content": {
65+
"filePath": "amb.mp4"
66+
},
67+
"version": {},
68+
"sources": [
69+
{
70+
"containerId": "s3",
71+
"accessors": {
72+
"local": {
73+
"type": "s3",
74+
"filePath": "amb.mp4"
75+
}
76+
}
77+
}
78+
],
79+
"layers": ["target0"]
80+
}
81+
],
82+
"settings": {
83+
"delayRemoval": 5000
84+
}
23185
}

shared/packages/api/src/inputApi.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,15 @@ export namespace Accessor {
592592

593593
/** AWS region of the bucket */
594594
region: string
595+
596+
/** Base URL for the S3 bucket */
597+
s3PublicBaseUrl: string
598+
599+
/** S3 endpoint (obligatory for non-AWS S3 deployments) */
600+
endpoint?: string
601+
602+
/** If true, forces path-style URLs (required for some S3-compatible storage solutions) */
603+
forcePathStyle?: boolean
595604
}
596605
}
597606
/**

shared/packages/worker/src/worker/accessorHandlers/lib/S3BucketClient.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,14 @@ export class S3BucketClient {
3535
private readonly bucketId: string,
3636
private readonly region: string,
3737
private readonly accessKey: string,
38-
private readonly secretAccessKey: string
38+
private readonly secretAccessKey: string,
39+
private readonly endpoint?: string,
40+
private readonly forcePathStyle: boolean = false
3941
) {
4042
this.s3Client = new S3Client({
43+
forcePathStyle: this.forcePathStyle,
4144
region: this.region,
45+
endpoint: this.endpoint,
4246
credentials: {
4347
accessKeyId: this.accessKey,
4448
secretAccessKey: this.secretAccessKey,

0 commit comments

Comments
 (0)