@soga/fetcher 0.2.41 → 0.2.49

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.
@@ -1 +1,83 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.fetchAliBuffer=fetchAliBuffer;const fetcher_1=require("./fetcher"),common_1=require("../common/common");async function fetchAliBuffer(e){const t=calculateRangeData(e);return await parallelFetchBuffer(t,e.dataSource)}async function parallelFetchBuffer(e,t){const{ranges:a,threads:r}=e,c=[...a],n=async()=>{if(!c.length)return;const e=c.shift();if(!e)return;const a=(0,common_1.getKey)(e);if(!common_1.bufferCache[a]?.data){const r=(0,fetcher_1.getAliFetcher)(t),{access_token:c,drive_id:n,file_id:o}=e,f=await r.getArrayBuffer({access_token:c,drive_id:n,file_id:o,start:e.start,end:e.end,ua:e.ua,abort_controller:e.abort_controller});common_1.bufferCache[a]={updated:Date.now(),data:Buffer.from(f)}}await n()},o=[];for(let e=0;e<r;e++)o.push(n());await Promise.all(o);let f=!0;const u=a.map((e=>{const t=(0,common_1.getKey)(e);return common_1.bufferCache[t]?.data?common_1.bufferCache[t].data:(f=!1,null)}));if(f){const e=Buffer.concat(u);return a.forEach((e=>{const t=(0,common_1.getKey)(e);delete common_1.bufferCache[t]})),e}return null}function calculateRangeData(e){const{start:t,end:a}=e,r=Math.max(a-t+1,0),c=Math.ceil(r/1572864),n=Math.ceil(r/c),o=[];for(let r=0;r<c;r++){const c=t+r*n,f=Math.min(a,c+n-1);o.push({...e,start:c,end:f})}return{ranges:o,threads:2}}
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchAliBuffer = fetchAliBuffer;
4
+ const fetcher_1 = require("./fetcher");
5
+ const common_1 = require("../common/common");
6
+ async function fetchAliBuffer(params) {
7
+ const rangeData = calculateRangeData(params);
8
+ const buffer = await parallelFetchBuffer(rangeData, params.dataSource);
9
+ return buffer;
10
+ }
11
+ async function parallelFetchBuffer(params, dataSource) {
12
+ const { ranges, threads } = params;
13
+ const queues = [...ranges];
14
+ const loop = async () => {
15
+ if (!queues.length)
16
+ return;
17
+ const item = queues.shift();
18
+ if (!item)
19
+ return;
20
+ const key = (0, common_1.getKey)(item);
21
+ if (!common_1.bufferCache[key]?.data) {
22
+ const fetcher = (0, fetcher_1.getAliFetcher)(dataSource);
23
+ const { access_token, drive_id, file_id } = item;
24
+ const ab = await fetcher.getArrayBuffer({
25
+ access_token,
26
+ drive_id,
27
+ file_id,
28
+ start: item.start,
29
+ end: item.end,
30
+ ua: item.ua,
31
+ abort_controller: item.abort_controller,
32
+ });
33
+ common_1.bufferCache[key] = {
34
+ updated: Date.now(),
35
+ data: Buffer.from(ab),
36
+ };
37
+ }
38
+ await loop();
39
+ };
40
+ const arr = [];
41
+ for (let i = 0; i < threads; i++) {
42
+ arr.push(loop());
43
+ }
44
+ await Promise.all(arr);
45
+ let completed = true;
46
+ const buffers = ranges.map((item) => {
47
+ const key = (0, common_1.getKey)(item);
48
+ if (common_1.bufferCache[key]?.data) {
49
+ return common_1.bufferCache[key].data;
50
+ }
51
+ completed = false;
52
+ return null;
53
+ });
54
+ if (completed) {
55
+ const buffer = Buffer.concat(buffers);
56
+ ranges.forEach((item) => {
57
+ const key = (0, common_1.getKey)(item);
58
+ delete common_1.bufferCache[key];
59
+ });
60
+ return buffer;
61
+ }
62
+ return null;
63
+ }
64
+ function calculateRangeData(params) {
65
+ const { start, end } = params;
66
+ const size = Math.max(end - start + 1, 0);
67
+ const segments = Math.ceil(size / 1572864);
68
+ const bytes = Math.ceil(size / segments);
69
+ const ranges = [];
70
+ for (let i = 0; i < segments; i++) {
71
+ const the_start = start + i * bytes;
72
+ const the_end = Math.min(end, the_start + bytes - 1);
73
+ ranges.push({
74
+ ...params,
75
+ start: the_start,
76
+ end: the_end,
77
+ });
78
+ }
79
+ return {
80
+ ranges,
81
+ threads: 2,
82
+ };
83
+ }
@@ -1 +1,147 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAliFetcher=exports.AliFetcher=void 0;const axios_1=__importDefault(require("axios")),typeorm_1=require("typeorm"),entities_1=require("@soga/entities"),processMap={};let instance=null;class AliFetcher{axios;domain="https://openapi.alipan.com";urlRepository;constructor(e){this.axios=axios_1.default.create({baseURL:this.domain}),this.axios.interceptors.response.use((e=>e.data),(e=>Promise.reject(e))),this.urlRepository=e.getRepository(entities_1.FetchUrl)}async getDownloadUrl({access_token:e,drive_id:t,file_id:i,ua:r}){const a=this.getKey({access_token:e,file_id:i,ua:r});try{for(;processMap[a];)await new Promise((e=>setTimeout(e,100)));processMap[a]=!0;const o=await this.urlRepository.findOne({where:{key:a,fail:(0,typeorm_1.LessThan)(2),expire:(0,typeorm_1.MoreThan)(Date.now())},order:{fail:"ASC"}});if(o)return o.fail>1?(await this.urlRepository.delete({key:a}),""):o.dlink;const{url:s,expiration:n}=await this.fetchDownloadInfo({access_token:e,drive_id:t,file_id:i,ua:r});if(s)return await this.urlRepository.save({dlink:s,key:a,speed:100,expire:new Date(n).getTime()}),s;throw new Error("ali fetch download url failed")}finally{delete processMap[a]}}async getArrayBuffer(e){return await this.multipleGetArrayBuffer({...e,times:0})}async multipleGetArrayBuffer({access_token:e,drive_id:t,file_id:i,start:r,end:a,abort_controller:o,times:s=0,ua:n}){const l=await this.getDownloadUrl({access_token:e,drive_id:t,file_id:i,ua:n});if(!l)throw new Error("获取下载链接失败");try{const e=a-r+1,t=Math.max(1e3*Math.ceil(e/1024/50),3e3);return(await axios_1.default.get(l,{headers:{Range:`bytes=${r}-${a}`,"User-Agent":n,Accept:"application/octet-stream"},responseType:"arraybuffer",timeout:t,signal:o?.signal})).data}catch(o){if(console.log("-------------------------------"),console.log(o.name,o.message),"AbortError"===o.name)return;const c=this.getKey({access_token:e,file_id:i,ua:n});if(await this.urlRepository.increment({key:c,dlink:l},"fail",1),await new Promise((e=>setTimeout(e,1e3))),(s||0)<3)return await this.multipleGetArrayBuffer({access_token:e,drive_id:t,file_id:i,start:r,end:a,times:(s||0)+1,ua:n});throw o}}async fetchDownloadInfo({access_token:e,drive_id:t,file_id:i,ua:r}){const a={Authorization:`Bearer ${e}`,"User-Agent":r},{url:o,expiration:s}=await this.axios.post("/adrive/v1.0/openFile/getDownloadUrl",{drive_id:t,file_id:i},{headers:a});return{url:o,expiration:s}}getKey({access_token:e,file_id:t,ua:i}){const r=i?encodeURIComponent(i):"ua";return`ali-${encodeURIComponent(e)}-${r}-${t}`}}exports.AliFetcher=AliFetcher;const getAliFetcher=e=>(instance||(instance=new AliFetcher(e)),instance);exports.getAliFetcher=getAliFetcher;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getAliFetcher = exports.AliFetcher = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const typeorm_1 = require("typeorm");
9
+ const entities_1 = require("@soga/entities");
10
+ const processMap = {};
11
+ let instance = null;
12
+ class AliFetcher {
13
+ axios;
14
+ domain = 'https://openapi.alipan.com';
15
+ urlRepository;
16
+ constructor(dataSource) {
17
+ this.axios = axios_1.default.create({
18
+ baseURL: this.domain,
19
+ });
20
+ this.axios.interceptors.response.use((response) => {
21
+ return response.data;
22
+ }, (error) => {
23
+ return Promise.reject(error);
24
+ });
25
+ this.urlRepository = dataSource.getRepository(entities_1.FetchUrl);
26
+ }
27
+ async getDownloadUrl({ access_token, drive_id, file_id, ua, }) {
28
+ const key = this.getKey({ access_token, file_id, ua });
29
+ try {
30
+ while (processMap[key]) {
31
+ await new Promise((resolve) => setTimeout(resolve, 100));
32
+ }
33
+ processMap[key] = true;
34
+ const row = await this.urlRepository.findOne({
35
+ where: { key, fail: (0, typeorm_1.LessThan)(2), expire: (0, typeorm_1.MoreThan)(Date.now()) },
36
+ order: {
37
+ fail: 'ASC',
38
+ },
39
+ });
40
+ if (row) {
41
+ if (row.fail > 1) {
42
+ await this.urlRepository.delete({ key });
43
+ return '';
44
+ }
45
+ return row.dlink;
46
+ }
47
+ const { url, expiration } = await this.fetchDownloadInfo({
48
+ access_token,
49
+ drive_id,
50
+ file_id,
51
+ ua,
52
+ });
53
+ if (url) {
54
+ await this.urlRepository.save({
55
+ dlink: url,
56
+ key,
57
+ speed: 100,
58
+ expire: new Date(expiration).getTime(),
59
+ });
60
+ return url;
61
+ }
62
+ throw new Error('ali fetch download url failed');
63
+ }
64
+ finally {
65
+ delete processMap[key];
66
+ }
67
+ }
68
+ async getArrayBuffer(params) {
69
+ return await this.multipleGetArrayBuffer({
70
+ ...params,
71
+ times: 0,
72
+ });
73
+ }
74
+ async multipleGetArrayBuffer({ access_token, drive_id, file_id, start, end, abort_controller, times = 0, ua, }) {
75
+ const dlink = await this.getDownloadUrl({
76
+ access_token,
77
+ drive_id,
78
+ file_id,
79
+ ua,
80
+ });
81
+ if (!dlink) {
82
+ throw new Error('获取下载链接失败');
83
+ }
84
+ try {
85
+ const length = end - start + 1;
86
+ const duration = Math.max(Math.ceil(length / 1024 / 50) * 1000, 3000);
87
+ const res = await axios_1.default.get(dlink, {
88
+ headers: {
89
+ Range: `bytes=${start}-${end}`,
90
+ 'User-Agent': ua,
91
+ Accept: 'application/octet-stream',
92
+ },
93
+ responseType: 'arraybuffer',
94
+ timeout: duration,
95
+ signal: abort_controller?.signal,
96
+ });
97
+ return res.data;
98
+ }
99
+ catch (err) {
100
+ console.log('-------------------------------');
101
+ console.log(err.name, err.message);
102
+ if (err.name === 'AbortError')
103
+ return;
104
+ const key = this.getKey({ access_token, file_id, ua });
105
+ await this.urlRepository.increment({ key, dlink }, 'fail', 1);
106
+ await new Promise((resolve) => setTimeout(resolve, 1000));
107
+ if ((times || 0) < 3) {
108
+ return await this.multipleGetArrayBuffer({
109
+ access_token,
110
+ drive_id,
111
+ file_id,
112
+ start,
113
+ end,
114
+ times: (times || 0) + 1,
115
+ ua,
116
+ });
117
+ }
118
+ throw err;
119
+ }
120
+ }
121
+ async fetchDownloadInfo({ access_token, drive_id, file_id, ua, }) {
122
+ const headers = {
123
+ Authorization: `Bearer ${access_token}`,
124
+ 'User-Agent': ua,
125
+ };
126
+ const { url, expiration } = await this.axios.post('/adrive/v1.0/openFile/getDownloadUrl', {
127
+ drive_id,
128
+ file_id,
129
+ }, {
130
+ headers,
131
+ });
132
+ return { url, expiration };
133
+ }
134
+ getKey({ access_token, file_id, ua, }) {
135
+ const userAgent = ua ? encodeURIComponent(ua) : 'ua';
136
+ const accessToken = encodeURIComponent(access_token);
137
+ return `ali-${accessToken}-${userAgent}-${file_id}`;
138
+ }
139
+ }
140
+ exports.AliFetcher = AliFetcher;
141
+ const getAliFetcher = (dataSource) => {
142
+ if (!instance) {
143
+ instance = new AliFetcher(dataSource);
144
+ }
145
+ return instance;
146
+ };
147
+ exports.getAliFetcher = getAliFetcher;
@@ -1,3 +1,3 @@
1
1
  import { AliPreviewBufferParams } from '../common/types';
2
- export declare const getAliPreviewBuffer: (params: AliPreviewBufferParams) => Promise<Buffer<ArrayBufferLike>>;
3
- export declare const getAliDownloadBuffer: (params: AliPreviewBufferParams) => Promise<Buffer<ArrayBufferLike>>;
2
+ export declare const getAliPreviewBuffer: (params: AliPreviewBufferParams) => Promise<Buffer<ArrayBuffer>>;
3
+ export declare const getAliDownloadBuffer: (params: AliPreviewBufferParams) => Promise<Buffer<ArrayBuffer>>;
@@ -1 +1,42 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAliDownloadBuffer=exports.getAliPreviewBuffer=void 0;const common_1=require("../common/common"),fetch_buffer_1=require("./fetch-buffer"),low_store_1=require("../common/low-store"),getAliBuffer=async({dataSource:e,record_id:t,start:r,end:o,total:i,part_md5:f,access_token:a,host_id:l,host_vip_type:_,drive_id:c,file_id:d,cache_folder:s,abort_controller:n},u)=>{const w=(0,common_1.getKey)({part_md5:f,start:r,end:o});let p=null;if(s){p=await(0,low_store_1.getLowStore)(s,u);const e=await p.readBuffer(w);if(e)return e}const B=await(0,fetch_buffer_1.fetchAliBuffer)({dataSource:e,record_id:t,start:r,end:o,total:i,access_token:a,host_id:l,host_vip_type:_,drive_id:c,file_id:d,part_md5:f,abort_controller:n});return B&&p&&await p.writeBuffer(w,B),B},getAliPreviewBuffer=async e=>await getAliBuffer(e,"preview");exports.getAliPreviewBuffer=getAliPreviewBuffer;const getAliDownloadBuffer=async e=>await getAliBuffer(e,"download");exports.getAliDownloadBuffer=getAliDownloadBuffer;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAliDownloadBuffer = exports.getAliPreviewBuffer = void 0;
4
+ const common_1 = require("../common/common");
5
+ const fetch_buffer_1 = require("./fetch-buffer");
6
+ const low_store_1 = require("../common/low-store");
7
+ const getAliBuffer = async ({ dataSource, record_id, start, end, total, part_md5, access_token, host_id, host_vip_type, drive_id, file_id, cache_folder, abort_controller, }, cache_type) => {
8
+ const key = (0, common_1.getKey)({ part_md5, start, end });
9
+ let store = null;
10
+ if (cache_folder) {
11
+ store = await (0, low_store_1.getLowStore)(cache_folder, cache_type);
12
+ const bufferCache = await store.readBuffer(key);
13
+ if (bufferCache) {
14
+ return bufferCache;
15
+ }
16
+ }
17
+ const buffer = await (0, fetch_buffer_1.fetchAliBuffer)({
18
+ dataSource,
19
+ record_id,
20
+ start,
21
+ end,
22
+ total,
23
+ access_token,
24
+ host_id,
25
+ host_vip_type,
26
+ drive_id,
27
+ file_id,
28
+ part_md5,
29
+ abort_controller,
30
+ });
31
+ if (buffer && store) {
32
+ await store.writeBuffer(key, buffer);
33
+ }
34
+ return buffer;
35
+ };
36
+ const getAliPreviewBuffer = async (params) => {
37
+ console.log('getAliPreviewBuffer params:', params);
38
+ return await getAliBuffer(params, 'preview');
39
+ };
40
+ exports.getAliPreviewBuffer = getAliPreviewBuffer;
41
+ const getAliDownloadBuffer = async (params) => await getAliBuffer(params, 'download');
42
+ exports.getAliDownloadBuffer = getAliDownloadBuffer;
@@ -1 +1,109 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.fetchBaiduBuffer=fetchBaiduBuffer;const baidu_ua_1=require("@soga/baidu-ua"),fetcher_1=require("./fetcher"),common_1=require("../common/common");async function fetchBaiduBuffer(t){const e=calculateRangeData(t);return await parallelFetchBuffer(e,t.dataSource)}async function parallelFetchBuffer(t,e){const{ranges:a,threads:r}=t,n=[...a],c=async()=>{if(!n.length)return;const t=n.shift();if(!t)return;const a=(0,common_1.getKey)(t);if(!common_1.bufferCache[a]?.data){const r=(0,fetcher_1.getBaiduFetcher)(e),{access_token:n,fs_id:c,host_id:o}=t,{ua:u,finishBaiduUA:f}=await(0,baidu_ua_1.getBaiduUA)(o,t.total),s=await r.getArrayBuffer({access_token:n,fs_id:c,start:t.start,end:t.end,ua:t.auto_ua?u:t.ua});if(f(),!s||0===s.byteLength)return;common_1.bufferCache[a]={updated:Date.now(),data:Buffer.from(s)}}await c()},o=[];for(let t=0;t<r;t++)o.push(c());await Promise.all(o);let u=!0;const f=a.map((t=>{const e=(0,common_1.getKey)(t);return common_1.bufferCache[e]?.data?common_1.bufferCache[e].data:(u=!1,null)}));if(u){const t=Buffer.concat(f);return a.forEach((t=>{const e=(0,common_1.getKey)(t);delete common_1.bufferCache[e]})),t}return null}function calculateRangeData(t){const{start:e,end:a,total:r}=t,n=Math.max(a-e+1,0);if(2==t.host_vip_type){const r=Math.ceil(n/1572864),c=Math.ceil(n/r),o=[];for(let n=0;n<r;n++){const r=e+n*c,u=Math.min(a,r+c-1);o.push({...t,start:r,end:u,auto_ua:!1})}return{ranges:o,threads:2}}{const c=Math.ceil(n/131072),o=Math.ceil(n/c),u=[];for(let r=0;r<c;r++){const n=e+r*o,c=Math.min(a,n+o-1);u.push({...t,start:n,end:c,auto_ua:!0})}return{ranges:u,threads:Math.min(r<52428800?8:6,c)}}}
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchBaiduBuffer = fetchBaiduBuffer;
4
+ const baidu_ua_1 = require("@soga/baidu-ua");
5
+ const fetcher_1 = require("./fetcher");
6
+ const common_1 = require("../common/common");
7
+ async function fetchBaiduBuffer(params) {
8
+ const rangeData = calculateRangeData(params);
9
+ const buffer = await parallelFetchBuffer(rangeData, params.dataSource);
10
+ return buffer;
11
+ }
12
+ async function parallelFetchBuffer(params, dataSource) {
13
+ const { ranges, threads } = params;
14
+ const queues = [...ranges];
15
+ const loop = async () => {
16
+ if (!queues.length)
17
+ return;
18
+ const item = queues.shift();
19
+ if (!item)
20
+ return;
21
+ const key = (0, common_1.getKey)(item);
22
+ if (!common_1.bufferCache[key]?.data) {
23
+ const fetcher = (0, fetcher_1.getBaiduFetcher)(dataSource);
24
+ const { access_token, fs_id, host_id } = item;
25
+ const { ua, finishBaiduUA } = await (0, baidu_ua_1.getBaiduUA)(host_id, item.total);
26
+ const ab = await fetcher.getArrayBuffer({
27
+ access_token,
28
+ fs_id,
29
+ start: item.start,
30
+ end: item.end,
31
+ ua: item.auto_ua ? ua : item.ua,
32
+ });
33
+ finishBaiduUA();
34
+ if (!ab || ab.byteLength === 0) {
35
+ return;
36
+ }
37
+ common_1.bufferCache[key] = {
38
+ updated: Date.now(),
39
+ data: Buffer.from(ab),
40
+ };
41
+ }
42
+ await loop();
43
+ };
44
+ const arr = [];
45
+ for (let i = 0; i < threads; i++) {
46
+ arr.push(loop());
47
+ }
48
+ await Promise.all(arr);
49
+ let completed = true;
50
+ const buffers = ranges.map((item) => {
51
+ const key = (0, common_1.getKey)(item);
52
+ if (common_1.bufferCache[key]?.data) {
53
+ return common_1.bufferCache[key].data;
54
+ }
55
+ completed = false;
56
+ return null;
57
+ });
58
+ if (completed) {
59
+ const buffer = Buffer.concat(buffers);
60
+ ranges.forEach((item) => {
61
+ const key = (0, common_1.getKey)(item);
62
+ delete common_1.bufferCache[key];
63
+ });
64
+ return buffer;
65
+ }
66
+ return null;
67
+ }
68
+ function calculateRangeData(params) {
69
+ const { start, end, total } = params;
70
+ const size = Math.max(end - start + 1, 0);
71
+ if (params.host_vip_type == 2) {
72
+ const segments = Math.ceil(size / 1572864);
73
+ const bytes = Math.ceil(size / segments);
74
+ const ranges = [];
75
+ for (let i = 0; i < segments; i++) {
76
+ const the_start = start + i * bytes;
77
+ const the_end = Math.min(end, the_start + bytes - 1);
78
+ ranges.push({
79
+ ...params,
80
+ start: the_start,
81
+ end: the_end,
82
+ auto_ua: false,
83
+ });
84
+ }
85
+ return {
86
+ ranges,
87
+ threads: 2,
88
+ };
89
+ }
90
+ else {
91
+ const segments = Math.ceil(size / 131072);
92
+ const bytes = Math.ceil(size / segments);
93
+ const ranges = [];
94
+ for (let i = 0; i < segments; i++) {
95
+ const the_start = start + i * bytes;
96
+ const the_end = Math.min(end, the_start + bytes - 1);
97
+ ranges.push({
98
+ ...params,
99
+ start: the_start,
100
+ end: the_end,
101
+ auto_ua: true,
102
+ });
103
+ }
104
+ return {
105
+ ranges,
106
+ threads: Math.min(total < 50 * 1024 * 1024 ? 8 : 6, segments),
107
+ };
108
+ }
109
+ }
@@ -1 +1,245 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getBaiduFetcher=exports.BaiduFetcher=void 0;const axios_1=__importDefault(require("axios")),typeorm_1=require("typeorm"),entities_1=require("@soga/entities"),processMap={};let instance=null,lastCleanTime=0;class BaiduFetcher{axios;domain="https://pan.baidu.com";urlRepository;constructor(e){this.axios=axios_1.default.create({baseURL:this.domain}),this.axios.interceptors.response.use((e=>e.data),(e=>Promise.reject(e))),this.urlRepository=e.getRepository(entities_1.FetchUrl)}async getDownloadUrl({access_token:e,fs_id:t,ua:a}){return await this.getDownloadUrlByRange({access_token:e,fs_id:t,start:0,end:0,ua:a})}async getArrayBuffer(e){return await this.cleanExpired(),await this.multipleGetArrayBuffer({...e,times:0})}async getDownloadUrlByRange({access_token:e,fs_id:t,start:a=0,end:s=0,ua:r}){const i=this.getKey({fs_id:t,access_token:e,ua:r});try{for(;processMap[i];)await new Promise((e=>setTimeout(e,100)));processMap[i]=!0;const n=await this.urlRepository.findOne({where:{key:i,speed:(0,typeorm_1.MoreThan)(30),expire:(0,typeorm_1.MoreThan)(Date.now())},order:{speed:"DESC",fail:"ASC"}});if(n)return n.fail>10?(await this.urlRepository.delete({key:i}),""):n.dlink;const{dlink:o,speed:c}=await this.fetchBestDlink({access_token:e,fs_id:t,start:a,end:s,ua:r});if(o)return await this.urlRepository.save({dlink:o,key:i,speed:c,expire:Date.now()+252e5}),o;throw new Error("baidu fetch download url failed")}finally{delete processMap[i]}}async cleanExpired(){Date.now()-lastCleanTime>18e5&&(await this.urlRepository.delete({expire:(0,typeorm_1.LessThan)(Date.now())}),lastCleanTime=Date.now())}async fetchBestDlink({fs_id:e,start:t=0,end:a=0,ua:s,access_token:r}){const i=[];let n="";const o=await this.fetchDownloadUrl({fs_id:e,access_token:r,ua:s});if(!o)return{dlink:"",speed:0};const c=Math.min(t+127,a),d={"User-Agent":s,Range:`bytes=${t}-${c}`},l=c-t+1,u={start:0,end:0};for(let e=0;e<50;e++){const e=(await axios_1.default.get(o,{headers:d,maxRedirects:0,validateStatus:e=>e>=200&&e<303})).headers.location;if(!e)return{dlink:"",speed:0};const t=new URL(e),{hostname:a}=t;if(!i.includes(a)){n=e;try{return u.start=Date.now(),await axios_1.default.get(e,{headers:d,timeout:2e3}),u.end=Date.now(),{dlink:e,speed:1e3*l/(u.end-u.start)}}catch(e){i.push(a),await new Promise((e=>setTimeout(e,200)));continue}}}return{dlink:n,speed:1e3*l/(u.end-u.start)}}async fetchDownloadUrl({fs_id:e,ua:t="pan.baidu.com",access_token:a}){const s=await this.axios.get("/rest/2.0/xpan/multimedia",{params:{access_token:a,dlink:"1",method:"filemetas",fsids:JSON.stringify([e])},headers:{"User-Agent":t}}),{errno:r,list:i}=s||{};if(0!=r)throw new Error(`获取下载链接失败: ${r}`);if(!i||!i.length)throw new Error("获取下载链接失败");return`${i[0].dlink}&access_token=${a}`}async multipleGetArrayBuffer({access_token:e,fs_id:t,start:a,end:s,abort_controller:r,times:i=0,ua:n}){const o=await this.getDownloadUrlByRange({access_token:e,fs_id:t,start:a,end:s,ua:n});if(!o)throw new Error("获取下载链接失败");try{const e=s-a+1,t=Math.max(1e3*Math.ceil(e/1024/10),3e3);return(await axios_1.default.get(o,{headers:{Range:`bytes=${a}-${s}`,"User-Agent":n,Accept:"application/octet-stream"},signal:r?.signal,responseType:"arraybuffer",timeout:t})).data}catch(c){if(console.log("-------------------------------"),console.log(c.name,c.message),"AbortError"===c.name)return;const d=this.getKey({fs_id:t,access_token:e,ua:n});if(await this.urlRepository.increment({key:d,dlink:o},"fail",1),await new Promise((e=>setTimeout(e,1e3))),(i||0)<3)return await this.multipleGetArrayBuffer({access_token:e,fs_id:t,start:a,end:s,times:(i||0)+1,abort_controller:r,ua:n});throw c}}getKey({access_token:e,fs_id:t,ua:a}){const s=a?encodeURIComponent(a):"ua";return`baidu-${encodeURIComponent(e)}-${s}-${t}`}}exports.BaiduFetcher=BaiduFetcher;const getBaiduFetcher=e=>(instance||(instance=new BaiduFetcher(e)),instance);exports.getBaiduFetcher=getBaiduFetcher;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getBaiduFetcher = exports.BaiduFetcher = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const typeorm_1 = require("typeorm");
9
+ const entities_1 = require("@soga/entities");
10
+ const processMap = {};
11
+ let instance = null;
12
+ let lastCleanTime = 0;
13
+ class BaiduFetcher {
14
+ axios;
15
+ domain = 'https://pan.baidu.com';
16
+ urlRepository;
17
+ constructor(dataSource) {
18
+ this.axios = axios_1.default.create({
19
+ baseURL: this.domain,
20
+ });
21
+ this.axios.interceptors.response.use((response) => {
22
+ return response.data;
23
+ }, (error) => {
24
+ return Promise.reject(error);
25
+ });
26
+ this.urlRepository = dataSource.getRepository(entities_1.FetchUrl);
27
+ }
28
+ async getDownloadUrl({ access_token, fs_id, ua, }) {
29
+ const url = await this.getDownloadUrlByRange({
30
+ access_token,
31
+ fs_id,
32
+ start: 0,
33
+ end: 0,
34
+ ua,
35
+ });
36
+ return url;
37
+ }
38
+ async getArrayBuffer(params) {
39
+ await this.cleanExpired();
40
+ return await this.multipleGetArrayBuffer({
41
+ ...params,
42
+ times: 0,
43
+ });
44
+ }
45
+ async getDownloadUrlByRange({ access_token, fs_id, start = 0, end = 0, ua, }) {
46
+ const key = this.getKey({ fs_id, access_token, ua });
47
+ try {
48
+ while (processMap[key]) {
49
+ await new Promise((resolve) => setTimeout(resolve, 100));
50
+ }
51
+ processMap[key] = true;
52
+ const row = await this.urlRepository.findOne({
53
+ where: {
54
+ key,
55
+ speed: (0, typeorm_1.MoreThan)(30),
56
+ expire: (0, typeorm_1.MoreThan)(Date.now()),
57
+ },
58
+ order: {
59
+ speed: 'DESC',
60
+ fail: 'ASC',
61
+ },
62
+ });
63
+ if (row) {
64
+ if (row.fail > 10) {
65
+ await this.urlRepository.delete({ key });
66
+ return '';
67
+ }
68
+ return row.dlink;
69
+ }
70
+ const { dlink, speed } = await this.fetchBestDlink({
71
+ access_token,
72
+ fs_id,
73
+ start,
74
+ end,
75
+ ua,
76
+ });
77
+ if (dlink) {
78
+ await this.urlRepository.save({
79
+ dlink,
80
+ key,
81
+ speed,
82
+ expire: Date.now() + 7 * 3600000,
83
+ });
84
+ return dlink;
85
+ }
86
+ throw new Error('baidu fetch download url failed');
87
+ }
88
+ finally {
89
+ delete processMap[key];
90
+ }
91
+ }
92
+ async cleanExpired() {
93
+ if (Date.now() - lastCleanTime > 1800000) {
94
+ await this.urlRepository.delete({
95
+ expire: (0, typeorm_1.LessThan)(Date.now()),
96
+ });
97
+ lastCleanTime = Date.now();
98
+ }
99
+ }
100
+ async fetchBestDlink({ fs_id, start = 0, end = 0, ua, access_token, }) {
101
+ const errorDomains = [];
102
+ let download_link = '';
103
+ const url = await this.fetchDownloadUrl({ fs_id, access_token, ua });
104
+ if (!url) {
105
+ return {
106
+ dlink: '',
107
+ speed: 0,
108
+ };
109
+ }
110
+ const to = Math.min(start + 127, end);
111
+ const headers = {
112
+ 'User-Agent': ua,
113
+ Range: `bytes=${start}-${to}`,
114
+ };
115
+ const bytes = to - start + 1;
116
+ const times = {
117
+ start: 0,
118
+ end: 0,
119
+ };
120
+ for (let i = 0; i < 50; i++) {
121
+ const res = await axios_1.default.get(url, {
122
+ headers,
123
+ maxRedirects: 0,
124
+ validateStatus: (status) => status >= 200 && status < 303,
125
+ });
126
+ const dlink = res.headers.location;
127
+ if (!dlink) {
128
+ return {
129
+ dlink: '',
130
+ speed: 0,
131
+ };
132
+ }
133
+ const $url = new URL(dlink);
134
+ const { hostname } = $url;
135
+ if (errorDomains.includes(hostname)) {
136
+ continue;
137
+ }
138
+ download_link = dlink;
139
+ try {
140
+ times.start = Date.now();
141
+ await axios_1.default.get(dlink, {
142
+ headers,
143
+ timeout: 2000,
144
+ });
145
+ times.end = Date.now();
146
+ return {
147
+ dlink,
148
+ speed: (1000 * bytes) / (times.end - times.start),
149
+ };
150
+ }
151
+ catch (err) {
152
+ errorDomains.push(hostname);
153
+ await new Promise((resolve) => setTimeout(resolve, 200));
154
+ continue;
155
+ }
156
+ }
157
+ return {
158
+ dlink: download_link,
159
+ speed: (1000 * bytes) / (times.end - times.start),
160
+ };
161
+ }
162
+ async fetchDownloadUrl({ fs_id, ua = 'pan.baidu.com', access_token, }) {
163
+ const res = await this.axios.get('/rest/2.0/xpan/multimedia', {
164
+ params: {
165
+ access_token,
166
+ dlink: '1',
167
+ method: 'filemetas',
168
+ fsids: JSON.stringify([fs_id]),
169
+ },
170
+ headers: {
171
+ 'User-Agent': ua,
172
+ },
173
+ });
174
+ const { errno, list } = res || {};
175
+ if (errno != 0) {
176
+ throw new Error(`获取下载链接失败: ${errno}`);
177
+ }
178
+ if (!list || !list.length) {
179
+ throw new Error('获取下载链接失败');
180
+ }
181
+ const url = `${list[0].dlink}&access_token=${access_token}`;
182
+ return url;
183
+ }
184
+ async multipleGetArrayBuffer({ access_token, fs_id, start, end, abort_controller, times = 0, ua, }) {
185
+ const dlink = await this.getDownloadUrlByRange({
186
+ access_token,
187
+ fs_id,
188
+ start,
189
+ end,
190
+ ua,
191
+ });
192
+ if (!dlink) {
193
+ throw new Error('获取下载链接失败');
194
+ }
195
+ try {
196
+ const length = end - start + 1;
197
+ const duration = Math.max(Math.ceil(length / 1024 / 10) * 1000, 3000);
198
+ const res = await axios_1.default.get(dlink, {
199
+ headers: {
200
+ Range: `bytes=${start}-${end}`,
201
+ 'User-Agent': ua,
202
+ Accept: 'application/octet-stream',
203
+ },
204
+ signal: abort_controller?.signal,
205
+ responseType: 'arraybuffer',
206
+ timeout: duration,
207
+ });
208
+ return res.data;
209
+ }
210
+ catch (err) {
211
+ console.log('-------------------------------');
212
+ console.log(err.name, err.message);
213
+ if (err.name === 'AbortError')
214
+ return;
215
+ const key = this.getKey({ fs_id, access_token, ua });
216
+ await this.urlRepository.increment({ key, dlink }, 'fail', 1);
217
+ await new Promise((resolve) => setTimeout(resolve, 1000));
218
+ if ((times || 0) < 3) {
219
+ return await this.multipleGetArrayBuffer({
220
+ access_token,
221
+ fs_id,
222
+ start,
223
+ end,
224
+ times: (times || 0) + 1,
225
+ abort_controller,
226
+ ua,
227
+ });
228
+ }
229
+ throw err;
230
+ }
231
+ }
232
+ getKey({ access_token, fs_id, ua, }) {
233
+ const userAgent = ua ? encodeURIComponent(ua) : 'ua';
234
+ const accessToken = encodeURIComponent(access_token);
235
+ return `baidu-${accessToken}-${userAgent}-${fs_id}`;
236
+ }
237
+ }
238
+ exports.BaiduFetcher = BaiduFetcher;
239
+ const getBaiduFetcher = (dataSource) => {
240
+ if (!instance) {
241
+ instance = new BaiduFetcher(dataSource);
242
+ }
243
+ return instance;
244
+ };
245
+ exports.getBaiduFetcher = getBaiduFetcher;
@@ -1,3 +1,3 @@
1
1
  import { BaiduPreviewBufferParams } from '../common/types';
2
- export declare const getBaiduPreviewBuffer: (params: BaiduPreviewBufferParams) => Promise<Buffer<ArrayBufferLike>>;
3
- export declare const getBaiduDownloadBuffer: (params: BaiduPreviewBufferParams) => Promise<Buffer<ArrayBufferLike>>;
2
+ export declare const getBaiduPreviewBuffer: (params: BaiduPreviewBufferParams) => Promise<Buffer<ArrayBuffer>>;
3
+ export declare const getBaiduDownloadBuffer: (params: BaiduPreviewBufferParams) => Promise<Buffer<ArrayBuffer>>;
@@ -1 +1,43 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getBaiduDownloadBuffer=exports.getBaiduPreviewBuffer=void 0;const common_1=require("../common/common"),fetch_buffer_1=require("./fetch-buffer"),low_store_1=require("../common/low-store"),getBaiduBuffer=async({dataSource:e,record_id:t,start:r,end:o,total:a,part_md5:f,access_token:i,host_id:u,host_vip_type:d,fs_id:s,cache_folder:c,abort_controller:_},n)=>{let B=null;const w=(0,common_1.getKey)({part_md5:f,start:r,end:o});if(c){B=await(0,low_store_1.getLowStore)(c,n);const e=await B.readBuffer(w);if(e)return e}const l=await(0,fetch_buffer_1.fetchBaiduBuffer)({dataSource:e,record_id:t,start:r,end:o,total:a,access_token:i,host_id:u,host_vip_type:d,fs_id:s,part_md5:f,abort_controller:_});return l&&B&&await B.writeBuffer(w,l),l},getBaiduPreviewBuffer=async e=>await getBaiduBuffer(e,"preview");exports.getBaiduPreviewBuffer=getBaiduPreviewBuffer;const getBaiduDownloadBuffer=async e=>await getBaiduBuffer(e,"download");exports.getBaiduDownloadBuffer=getBaiduDownloadBuffer;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBaiduDownloadBuffer = exports.getBaiduPreviewBuffer = void 0;
4
+ const common_1 = require("../common/common");
5
+ const fetch_buffer_1 = require("./fetch-buffer");
6
+ const low_store_1 = require("../common/low-store");
7
+ const entities_1 = require("@soga/entities");
8
+ const getBaiduBuffer = async ({ dataSource, record_id, start, end, total, part_md5, access_token, host_id, host_vip_type, fs_id, cache_folder, abort_controller, }, cache_type) => {
9
+ console.log('yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy');
10
+ const rep = dataSource.getRepository(entities_1.FetchUrl);
11
+ const data = await rep.find({});
12
+ console.log('data length xxxxxxxx:', data.length);
13
+ let store = null;
14
+ const key = (0, common_1.getKey)({ part_md5, start, end });
15
+ if (cache_folder) {
16
+ store = await (0, low_store_1.getLowStore)(cache_folder, cache_type);
17
+ const bufferCache = await store.readBuffer(key);
18
+ if (bufferCache) {
19
+ return bufferCache;
20
+ }
21
+ }
22
+ const buffer = await (0, fetch_buffer_1.fetchBaiduBuffer)({
23
+ dataSource,
24
+ record_id,
25
+ start,
26
+ end,
27
+ total,
28
+ access_token,
29
+ host_id,
30
+ host_vip_type,
31
+ fs_id,
32
+ part_md5,
33
+ abort_controller,
34
+ });
35
+ if (buffer && store) {
36
+ await store.writeBuffer(key, buffer);
37
+ }
38
+ return buffer;
39
+ };
40
+ const getBaiduPreviewBuffer = async (params) => await getBaiduBuffer(params, 'preview');
41
+ exports.getBaiduPreviewBuffer = getBaiduPreviewBuffer;
42
+ const getBaiduDownloadBuffer = async (params) => await getBaiduBuffer(params, 'download');
43
+ exports.getBaiduDownloadBuffer = getBaiduDownloadBuffer;
@@ -1 +1,8 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getKey=exports.bufferCache=void 0,exports.bufferCache={};const getKey=({part_md5:e,start:t,end:r})=>`${e}-${t}-${r}`;exports.getKey=getKey;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getKey = exports.bufferCache = void 0;
4
+ exports.bufferCache = {};
5
+ const getKey = ({ part_md5, start, end, }) => {
6
+ return `${part_md5}-${start}-${end}`;
7
+ };
8
+ exports.getKey = getKey;
@@ -11,7 +11,7 @@ export declare class LowStore {
11
11
  write(key: string, value: boolean): Promise<void>;
12
12
  delete(key: string): Promise<void>;
13
13
  writeBuffer(key: string, buffer: Buffer<ArrayBuffer | ArrayBufferLike>): Promise<void>;
14
- readBuffer(key: string): Promise<Buffer<ArrayBufferLike>>;
14
+ readBuffer(key: string): Promise<NonSharedBuffer>;
15
15
  deleteBuffer(key: string): Promise<void>;
16
16
  }
17
17
  export declare const getLowStore: (folder_path: string, cache_type: CacheType) => Promise<LowStore>;
@@ -1 +1,91 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getLowStore=exports.LowStore=void 0;const bridge_1=require("@soga/bridge"),fs_extra_1=require("fs-extra"),path_1=require("path");class LowStore{folder_path;cache_path;db;cache_type;constructor(t,e){this.folder_path=t,this.cache_type=e,this.cache_path=(0,path_1.resolve)(t,`${e}_cache`)}async init(){const t=(0,path_1.resolve)(this.cache_path,"cache.json");this.db=await(0,bridge_1.getDb)(t,{})}async read(t){return this.db.data[t]}async write(t,e){this.db.data[t]=e,await this.db.write()}async delete(t){delete this.db.data[t],await this.db.write()}async writeBuffer(t,e){const a=(0,path_1.resolve)(this.cache_path,t);await(0,fs_extra_1.writeFile)(a,e),this.db.data[t]=!0,await this.db.write()}async readBuffer(t){if(!this.db.data[t])return null;const e=(0,path_1.resolve)(this.cache_path,t);return await(0,fs_extra_1.readFile)(e)}async deleteBuffer(t){if(!this.db.data[t])return;delete this.db.data[t],await this.db.write();const e=(0,path_1.resolve)(this.cache_path,t);try{await(0,fs_extra_1.remove)(e)}catch(t){}}}exports.LowStore=LowStore;const storeMap={};let lastCleanTime=0;const getLowStore=async(t,e)=>{if(storeMap[t]){for(;!storeMap[t].inited;)await new Promise((t=>setTimeout(t,20)));storeMap[t].updated_at=Date.now();const e=Date.now();return e-lastCleanTime>18e5&&(lastCleanTime=e,Object.keys(storeMap).forEach((t=>{e-storeMap[t].updated_at>288e5&&delete storeMap[t]}))),storeMap[t].store}const a=new LowStore(t,e);return storeMap[t]={updated_at:Date.now(),store:a,inited:!1},await a.init(),storeMap[t].inited=!0,a};exports.getLowStore=getLowStore;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLowStore = exports.LowStore = void 0;
4
+ const bridge_1 = require("@soga/bridge");
5
+ const fs_extra_1 = require("fs-extra");
6
+ const path_1 = require("path");
7
+ class LowStore {
8
+ folder_path;
9
+ cache_path;
10
+ db;
11
+ cache_type;
12
+ constructor(folder_path, cache_type) {
13
+ this.folder_path = folder_path;
14
+ this.cache_type = cache_type;
15
+ this.cache_path = (0, path_1.resolve)(folder_path, `${cache_type}_cache`);
16
+ }
17
+ async init() {
18
+ const dbPath = (0, path_1.resolve)(this.cache_path, 'cache.json');
19
+ this.db = await (0, bridge_1.getDb)(dbPath, {});
20
+ }
21
+ async read(key) {
22
+ return this.db.data[key];
23
+ }
24
+ async write(key, value) {
25
+ this.db.data[key] = value;
26
+ await this.db.write();
27
+ }
28
+ async delete(key) {
29
+ delete this.db.data[key];
30
+ await this.db.write();
31
+ }
32
+ async writeBuffer(key, buffer) {
33
+ const chunkPath = (0, path_1.resolve)(this.cache_path, key);
34
+ await (0, fs_extra_1.writeFile)(chunkPath, buffer);
35
+ this.db.data[key] = true;
36
+ await this.db.write();
37
+ }
38
+ async readBuffer(key) {
39
+ const exist = this.db.data[key];
40
+ if (!exist) {
41
+ return null;
42
+ }
43
+ const chunkPath = (0, path_1.resolve)(this.cache_path, key);
44
+ const data = await (0, fs_extra_1.readFile)(chunkPath);
45
+ return data;
46
+ }
47
+ async deleteBuffer(key) {
48
+ const exist = this.db.data[key];
49
+ if (!exist)
50
+ return;
51
+ delete this.db.data[key];
52
+ await this.db.write();
53
+ const chunkPath = (0, path_1.resolve)(this.cache_path, key);
54
+ try {
55
+ await (0, fs_extra_1.remove)(chunkPath);
56
+ }
57
+ catch (e) {
58
+ }
59
+ }
60
+ }
61
+ exports.LowStore = LowStore;
62
+ const storeMap = {};
63
+ let lastCleanTime = 0;
64
+ const getLowStore = async (folder_path, cache_type) => {
65
+ if (storeMap[folder_path]) {
66
+ while (!storeMap[folder_path].inited) {
67
+ await new Promise((resolve) => setTimeout(resolve, 20));
68
+ }
69
+ storeMap[folder_path].updated_at = Date.now();
70
+ const now = Date.now();
71
+ if (now - lastCleanTime > 30 * 60000) {
72
+ lastCleanTime = now;
73
+ Object.keys(storeMap).forEach((key) => {
74
+ if (now - storeMap[key].updated_at > 8 * 60 * 60 * 1000) {
75
+ delete storeMap[key];
76
+ }
77
+ });
78
+ }
79
+ return storeMap[folder_path].store;
80
+ }
81
+ const store = new LowStore(folder_path, cache_type);
82
+ storeMap[folder_path] = {
83
+ updated_at: Date.now(),
84
+ store,
85
+ inited: false,
86
+ };
87
+ await store.init();
88
+ storeMap[folder_path].inited = true;
89
+ return store;
90
+ };
91
+ exports.getLowStore = getLowStore;
@@ -1 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/main.js CHANGED
@@ -1 +1,34 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,f){void 0===f&&(f=t);var u=Object.getOwnPropertyDescriptor(r,t);u&&!("get"in u?!r.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,f,u)}:function(e,r,t,f){void 0===f&&(f=t),e[f]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAliDownloadBuffer=exports.getAliPreviewBuffer=exports.getBaiduDownloadBuffer=exports.getBaiduPreviewBuffer=exports.fetchAliBuffer=exports.fetchBaiduBuffer=exports.getAliFetcher=exports.AliFetcher=exports.getBaiduFetcher=exports.BaiduFetcher=void 0;var fetcher_1=require("./baidu/fetcher");Object.defineProperty(exports,"BaiduFetcher",{enumerable:!0,get:function(){return fetcher_1.BaiduFetcher}}),Object.defineProperty(exports,"getBaiduFetcher",{enumerable:!0,get:function(){return fetcher_1.getBaiduFetcher}});var fetcher_2=require("./ali/fetcher");Object.defineProperty(exports,"AliFetcher",{enumerable:!0,get:function(){return fetcher_2.AliFetcher}}),Object.defineProperty(exports,"getAliFetcher",{enumerable:!0,get:function(){return fetcher_2.getAliFetcher}});var fetch_buffer_1=require("./baidu/fetch-buffer");Object.defineProperty(exports,"fetchBaiduBuffer",{enumerable:!0,get:function(){return fetch_buffer_1.fetchBaiduBuffer}});var fetch_buffer_2=require("./ali/fetch-buffer");Object.defineProperty(exports,"fetchAliBuffer",{enumerable:!0,get:function(){return fetch_buffer_2.fetchAliBuffer}});var get_buffer_1=require("./baidu/get-buffer");Object.defineProperty(exports,"getBaiduPreviewBuffer",{enumerable:!0,get:function(){return get_buffer_1.getBaiduPreviewBuffer}}),Object.defineProperty(exports,"getBaiduDownloadBuffer",{enumerable:!0,get:function(){return get_buffer_1.getBaiduDownloadBuffer}});var get_buffer_2=require("./ali/get-buffer");Object.defineProperty(exports,"getAliPreviewBuffer",{enumerable:!0,get:function(){return get_buffer_2.getAliPreviewBuffer}}),Object.defineProperty(exports,"getAliDownloadBuffer",{enumerable:!0,get:function(){return get_buffer_2.getAliDownloadBuffer}}),__exportStar(require("./common/types"),exports);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.getAliDownloadBuffer = exports.getAliPreviewBuffer = exports.getBaiduDownloadBuffer = exports.getBaiduPreviewBuffer = exports.fetchAliBuffer = exports.fetchBaiduBuffer = exports.getAliFetcher = exports.AliFetcher = exports.getBaiduFetcher = exports.BaiduFetcher = void 0;
18
+ var fetcher_1 = require("./baidu/fetcher");
19
+ Object.defineProperty(exports, "BaiduFetcher", { enumerable: true, get: function () { return fetcher_1.BaiduFetcher; } });
20
+ Object.defineProperty(exports, "getBaiduFetcher", { enumerable: true, get: function () { return fetcher_1.getBaiduFetcher; } });
21
+ var fetcher_2 = require("./ali/fetcher");
22
+ Object.defineProperty(exports, "AliFetcher", { enumerable: true, get: function () { return fetcher_2.AliFetcher; } });
23
+ Object.defineProperty(exports, "getAliFetcher", { enumerable: true, get: function () { return fetcher_2.getAliFetcher; } });
24
+ var fetch_buffer_1 = require("./baidu/fetch-buffer");
25
+ Object.defineProperty(exports, "fetchBaiduBuffer", { enumerable: true, get: function () { return fetch_buffer_1.fetchBaiduBuffer; } });
26
+ var fetch_buffer_2 = require("./ali/fetch-buffer");
27
+ Object.defineProperty(exports, "fetchAliBuffer", { enumerable: true, get: function () { return fetch_buffer_2.fetchAliBuffer; } });
28
+ var get_buffer_1 = require("./baidu/get-buffer");
29
+ Object.defineProperty(exports, "getBaiduPreviewBuffer", { enumerable: true, get: function () { return get_buffer_1.getBaiduPreviewBuffer; } });
30
+ Object.defineProperty(exports, "getBaiduDownloadBuffer", { enumerable: true, get: function () { return get_buffer_1.getBaiduDownloadBuffer; } });
31
+ var get_buffer_2 = require("./ali/get-buffer");
32
+ Object.defineProperty(exports, "getAliPreviewBuffer", { enumerable: true, get: function () { return get_buffer_2.getAliPreviewBuffer; } });
33
+ Object.defineProperty(exports, "getAliDownloadBuffer", { enumerable: true, get: function () { return get_buffer_2.getAliDownloadBuffer; } });
34
+ __exportStar(require("./common/types"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soga/fetcher",
3
- "version": "0.2.41",
3
+ "version": "0.2.49",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -25,14 +25,14 @@
25
25
  "@types/fs-extra": "^11.0.4",
26
26
  "@types/glob": "^8.1.0",
27
27
  "@types/jest": "^29.5.14",
28
- "@types/node": "^20.8.7",
29
- "@typescript-eslint/eslint-plugin": "^6.4.1",
30
- "@typescript-eslint/parser": "^6.4.1",
31
- "eslint": "^8.47.0",
32
- "eslint-config-prettier": "^9.1.0",
33
- "eslint-plugin-jest": "^27.9.0",
28
+ "@types/node": "^22.15.29",
29
+ "@typescript-eslint/eslint-plugin": "^8.33.0",
30
+ "@typescript-eslint/parser": "^8.33.0",
31
+ "eslint": "^9.28.0",
32
+ "eslint-config-prettier": "^10.1.5",
33
+ "eslint-plugin-jest": "^28.12.0",
34
34
  "eslint-plugin-prettier": "^5.2.3",
35
- "glob": "^10.4.5",
35
+ "glob": "^11.0.2",
36
36
  "jest": "^29.7.0",
37
37
  "prettier": "^3.0.2",
38
38
  "rimraf": "^6.0.1",
@@ -45,13 +45,13 @@
45
45
  "author": "",
46
46
  "license": "ISC",
47
47
  "dependencies": {
48
- "@soga/baidu-ua": "^0.2.33",
49
- "@soga/bridge": "^0.2.33",
50
- "@soga/entities": "^0.2.41"
48
+ "@soga/baidu-ua": "^0.2.48",
49
+ "@soga/bridge": "^0.2.48",
50
+ "@soga/entities": "^0.2.49"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "axios": "*",
54
54
  "typeorm": "*"
55
55
  },
56
- "gitHead": "b92fb54c5ef456202704dc8eec228e5c5c15b98f"
56
+ "gitHead": "ba95cc026933a5058cf1940398b910bb9ff81831"
57
57
  }