diff --git a/src/extractor/SaveFiles.test.ts b/src/extractor/SaveFiles.test.ts index 52da638..9078ecc 100644 --- a/src/extractor/SaveFiles.test.ts +++ b/src/extractor/SaveFiles.test.ts @@ -15,6 +15,14 @@ describe('SafeFiles', () => { expect(await extractorRegistry.handle(ctx, new URL('https://savefiles.com/ip0k0dj2g0i3'), CountryCode.en)).toMatchSnapshot(); }); + test('savefiles /e/', async () => { + expect(await extractorRegistry.handle(ctx, new URL('https://savefiles.com/e/edptfmhyjr39'), CountryCode.en)).toMatchSnapshot(); + }); + + test('savefiles /d/', async () => { + expect(await extractorRegistry.handle(ctx, new URL('https://savefiles.com/d/s9g6zb5kjbqd'), CountryCode.en)).toMatchSnapshot(); + }); + test('savefiles locked file', async () => { expect(await extractorRegistry.handle(ctx, new URL('https://savefiles.com/omqq55i59nvv'), CountryCode.en)).toMatchSnapshot(); }); diff --git a/src/extractor/SaveFiles.ts b/src/extractor/SaveFiles.ts index 3268fb7..32584f2 100644 --- a/src/extractor/SaveFiles.ts +++ b/src/extractor/SaveFiles.ts @@ -22,7 +22,7 @@ export class SaveFiles extends Extractor { } public override normalize(url: URL): URL { - return new URL(url.href.replace('/e/', '/')); + return new URL(url.href.replace('/e/', '/').replace('/d/', '/')); } protected async extractInternal(ctx: Context, url: URL, countryCode: CountryCode): Promise { diff --git a/src/extractor/__fixtures__/SaveFiles/https:savefiles.comedptfmhyjr39 b/src/extractor/__fixtures__/SaveFiles/https:savefiles.comedptfmhyjr39 new file mode 100644 index 0000000..44679f6 --- /dev/null +++ b/src/extractor/__fixtures__/SaveFiles/https:savefiles.comedptfmhyjr39 @@ -0,0 +1,1643 @@ + + + + + + + + + + + + + Watch dexter resurrection s01e01 1080p web h264 successfulcrab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+
+ + +
+
+
+

+ dexter resurrection s01e01 1080p web h264-successfulcrab + +

+
+
+ on Jul 11, 2025 +
+ + +
+
+
+
+ +
+
+
+
+ + + + + + + + + + + +
+ +
+ +
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+ + +
+
+ +
+
+ + + + + + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/extractor/__fixtures__/SaveFiles/https:savefiles.coms9g6zb5kjbqd b/src/extractor/__fixtures__/SaveFiles/https:savefiles.coms9g6zb5kjbqd new file mode 100644 index 0000000..eac7781 --- /dev/null +++ b/src/extractor/__fixtures__/SaveFiles/https:savefiles.coms9g6zb5kjbqd @@ -0,0 +1,1650 @@ + + + + + + + + + + + + + Watch dexter resurrection s01e01 1080p web h264 successfulcrab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + + +
+
+
+ + + + + + + +
+
+
+ + +
+
+
+

+ dexter resurrection s01e01 1080p web h264-successfulcrab + +

+
+
+ on Jul 11, 2025 +
+ + +
+
+
+ + +
+
+
+
+ + + + + + + + + + + +
+ +
+ +
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+ + +
+
+ +
+
+ + + + + + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/extractor/__snapshots__/SaveFiles.test.ts.snap b/src/extractor/__snapshots__/SaveFiles.test.ts.snap index 7ae6d9c..9921753 100644 --- a/src/extractor/__snapshots__/SaveFiles.test.ts.snap +++ b/src/extractor/__snapshots__/SaveFiles.test.ts.snap @@ -1,5 +1,43 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`SafeFiles savefiles /d/ 1`] = ` +[ + { + "format": "hls", + "label": "SaveFiles", + "meta": { + "countryCodes": [ + "en", + ], + "height": 532, + "title": "dexter resurrection s01e01 1080p web h264-successfulcrab", + }, + "sourceId": "savefiles_en", + "ttl": 900000, + "url": "https://s3.savefiles.com/hls2/01/00133/,c51qm3p0rhtm_n,.urlset/master.m3u8?t=ptFA7PhoGXdNqH2jfu3EVKT4Fn5laaqfHBW1MMOa74o&s=1755775635&e=43200&v=199331&srv=s1&i=0.0&sp=0", + }, +] +`; + +exports[`SafeFiles savefiles /e/ 1`] = ` +[ + { + "format": "hls", + "label": "SaveFiles", + "meta": { + "countryCodes": [ + "en", + ], + "height": 720, + "title": "dexter resurrection s01e01 1080p web h264-successfulcrab", + }, + "sourceId": "savefiles_en", + "ttl": 900000, + "url": "https://s3.savefiles.com/hls2/01/00133/,j4orffalv89e_n,.urlset/master.m3u8?t=uwZgBnJBJ-wfgWvDwmLamHkR-vuqzrBFuLH7QoAH-QE&s=1755775635&e=43200&v=199330&srv=s1&i=0.0&sp=0", + }, +] +`; + exports[`SafeFiles savefiles 1`] = ` [ {