@@ -121,6 +121,7 @@ public static function getLatestGithubRelease(string $name, array $source, bool
121121 retries: self ::getRetryAttempts ()
122122 ), true );
123123 $ url = null ;
124+ $ filename = null ;
124125 foreach ($ data as $ release ) {
125126 if (($ source ['prefer-stable ' ] ?? false ) === true && $ release ['prerelease ' ] === true ) {
126127 continue ;
@@ -131,16 +132,16 @@ public static function getLatestGithubRelease(string $name, array $source, bool
131132 }
132133 foreach ($ release ['assets ' ] as $ asset ) {
133134 if (preg_match ('| ' . $ source ['match ' ] . '| ' , $ asset ['name ' ])) {
134- $ url = $ asset ['browser_download_url ' ];
135+ $ url = "https://api.github.com/repos/ {$ source ['repo ' ]}/releases/assets/ {$ asset ['id ' ]}" ;
136+ $ filename = $ asset ['name ' ];
135137 break 2 ;
136138 }
137139 }
138140 }
139141
140- if (!$ url ) {
142+ if (!$ url || ! $ filename ) {
141143 throw new DownloaderException ("failed to find {$ name } release metadata " );
142144 }
143- $ filename = basename ($ url );
144145
145146 return [$ url , $ filename ];
146147 }
@@ -191,7 +192,7 @@ public static function getFromFileList(string $name, array $source): array
191192 * @throws RuntimeException
192193 * @throws WrongUsageException
193194 */
194- public static function downloadFile (string $ name , string $ url , string $ filename , ?string $ move_path = null , int $ download_as = SPC_DOWNLOAD_SOURCE ): void
195+ public static function downloadFile (string $ name , string $ url , string $ filename , ?string $ move_path = null , int $ download_as = SPC_DOWNLOAD_SOURCE , array $ headers = [], array $ hooks = [] ): void
195196 {
196197 logger ()->debug ("Downloading {$ url }" );
197198 $ cancel_func = function () use ($ filename ) {
@@ -201,7 +202,7 @@ public static function downloadFile(string $name, string $url, string $filename,
201202 }
202203 };
203204 self ::registerCancelEvent ($ cancel_func );
204- self ::curlDown (url: $ url , path: FileSystem::convertPath (DOWNLOAD_PATH . "/ {$ filename }" ), retries: self ::getRetryAttempts ());
205+ self ::curlDown (url: $ url , path: FileSystem::convertPath (DOWNLOAD_PATH . "/ {$ filename }" ), headers: $ headers , hooks: $ hooks , retries: self ::getRetryAttempts ());
205206 self ::unregisterCancelEvent ();
206207 logger ()->debug ("Locking {$ filename }" );
207208 if ($ download_as === SPC_DOWNLOAD_PRE_BUILT ) {
@@ -341,15 +342,15 @@ public static function downloadPackage(string $name, ?array $pkg = null, bool $f
341342 break ;
342343 case 'ghtar ' : // GitHub Release (tar)
343344 [$ url , $ filename ] = self ::getLatestGithubTarball ($ name , $ pkg );
344- self ::downloadFile ($ name , $ url , $ filename , $ pkg ['extract ' ] ?? null , SPC_DOWNLOAD_PACKAGE );
345+ self ::downloadFile ($ name , $ url , $ filename , $ pkg ['extract ' ] ?? null , SPC_DOWNLOAD_PACKAGE , hooks: [[CurlHook::class, ' setupGithubToken ' ]] );
345346 break ;
346347 case 'ghtagtar ' : // GitHub Tag (tar)
347348 [$ url , $ filename ] = self ::getLatestGithubTarball ($ name , $ pkg , 'tags ' );
348- self ::downloadFile ($ name , $ url , $ filename , $ pkg ['extract ' ] ?? null , SPC_DOWNLOAD_PACKAGE );
349+ self ::downloadFile ($ name , $ url , $ filename , $ pkg ['extract ' ] ?? null , SPC_DOWNLOAD_PACKAGE , hooks: [[CurlHook::class, ' setupGithubToken ' ]] );
349350 break ;
350351 case 'ghrel ' : // GitHub Release (uploaded)
351352 [$ url , $ filename ] = self ::getLatestGithubRelease ($ name , $ pkg );
352- self ::downloadFile ($ name , $ url , $ filename , $ pkg ['extract ' ] ?? null , SPC_DOWNLOAD_PACKAGE );
353+ self ::downloadFile ($ name , $ url , $ filename , $ pkg ['extract ' ] ?? null , SPC_DOWNLOAD_PACKAGE , [ ' Accept: application/octet-stream ' ], [[CurlHook::class, ' setupGithubToken ' ]] );
353354 break ;
354355 case 'filelist ' : // Basic File List (regex based crawler)
355356 [$ url , $ filename ] = self ::getFromFileList ($ name , $ pkg );
@@ -447,15 +448,15 @@ public static function downloadSource(string $name, ?array $source = null, bool
447448 break ;
448449 case 'ghtar ' : // GitHub Release (tar)
449450 [$ url , $ filename ] = self ::getLatestGithubTarball ($ name , $ source );
450- self ::downloadFile ($ name , $ url , $ filename , $ source ['path ' ] ?? null , $ download_as );
451+ self ::downloadFile ($ name , $ url , $ filename , $ source ['path ' ] ?? null , $ download_as, hooks: [[CurlHook::class, ' setupGithubToken ' ]] );
451452 break ;
452453 case 'ghtagtar ' : // GitHub Tag (tar)
453454 [$ url , $ filename ] = self ::getLatestGithubTarball ($ name , $ source , 'tags ' );
454- self ::downloadFile ($ name , $ url , $ filename , $ source ['path ' ] ?? null , $ download_as );
455+ self ::downloadFile ($ name , $ url , $ filename , $ source ['path ' ] ?? null , $ download_as, hooks: [[CurlHook::class, ' setupGithubToken ' ]] );
455456 break ;
456457 case 'ghrel ' : // GitHub Release (uploaded)
457458 [$ url , $ filename ] = self ::getLatestGithubRelease ($ name , $ source );
458- self ::downloadFile ($ name , $ url , $ filename , $ source ['path ' ] ?? null , $ download_as );
459+ self ::downloadFile ($ name , $ url , $ filename , $ source ['path ' ] ?? null , $ download_as, [ ' Accept: application/octet-stream ' ], [[CurlHook::class, ' setupGithubToken ' ]] );
459460 break ;
460461 case 'filelist ' : // Basic File List (regex based crawler)
461462 [$ url , $ filename ] = self ::getFromFileList ($ name , $ source );
0 commit comments