@@ -143,6 +143,61 @@ module.exports = {
143
143
}
144
144
}
145
145
} ,
146
+ getPhantomReleases : async version => {
147
+ log ( `Trying to find phantom version ${ version } in GitHub releases..` ) ;
148
+ let filename ;
149
+ let downloadUrl ;
150
+ let tagName ;
151
+ let response ;
152
+
153
+ try {
154
+ if ( version === 'latest' || ! version ) {
155
+ if ( process . env . GH_USERNAME && process . env . GH_PAT ) {
156
+ response = await axios . get (
157
+ 'https://api.github.com/repos/phantom-labs/phantom-wallet/releases' ,
158
+ {
159
+ auth : {
160
+ username : process . env . GH_USERNAME ,
161
+ password : process . env . GH_PAT ,
162
+ } ,
163
+ } ,
164
+ ) ;
165
+ } else {
166
+ response = await axios . get (
167
+ 'https://api.github.com/repos/phantom-labs/phantom-wallet/releases' ,
168
+ ) ;
169
+ }
170
+ filename = response . data [ 0 ] . assets [ 0 ] . name ;
171
+ downloadUrl = response . data [ 0 ] . assets [ 0 ] . url ;
172
+ tagName = 'phantom-chrome-latest' ;
173
+ log (
174
+ `Phantom version found! Filename: ${ filename } ; Download url: ${ downloadUrl } ; Tag name: ${ tagName } ` ,
175
+ ) ;
176
+ } else if ( version ) {
177
+ filename = `chrome-dist.zip` ;
178
+ downloadUrl = `https://github.com/phantom-labs/phantom-wallet/releases/download/v${ version } /chrome-dist.zip` ;
179
+ tagName = `phantom-chrome-${ version } ` ;
180
+ log (
181
+ `Phantom version found! Filename: ${ filename } ; Download url: ${ downloadUrl } ; Tag name: ${ tagName } ` ,
182
+ ) ;
183
+ }
184
+ return {
185
+ filename,
186
+ downloadUrl,
187
+ tagName,
188
+ } ;
189
+ } catch ( e ) {
190
+ if ( e . response && e . response . status === 403 ) {
191
+ throw new Error (
192
+ `[getPhantomReleases] Unable to fetch phantom releases from GitHub because you've been rate limited! Please set GH_USERNAME and GH_PAT environment variables to avoid this issue or retry again.` ,
193
+ ) ;
194
+ } else {
195
+ throw new Error (
196
+ `[getPhantomReleases] Unable to fetch phantom releases from GitHub with following error:\n${ e } ` ,
197
+ ) ;
198
+ }
199
+ }
200
+ } ,
146
201
download : async ( url , destination ) => {
147
202
try {
148
203
log (
@@ -152,39 +207,61 @@ module.exports = {
152
207
await download ( url , destination , {
153
208
extract : true ,
154
209
auth : `${ process . env . GH_USERNAME } :${ process . env . GH_PAT } ` ,
210
+ headers : {
211
+ Accept : 'application/octet-stream' ,
212
+ } ,
155
213
} ) ;
214
+
215
+ /**
216
+ * Some extensions will zip their dist folder
217
+ */
218
+ await moveFiles ( `${ destination } /dist` , destination ) ;
156
219
} else {
157
220
await download ( url , destination , {
158
221
extract : true ,
159
222
} ) ;
160
223
}
161
224
} catch ( e ) {
162
225
throw new Error (
163
- `[download] Unable to download metamask release from: ${ url } to: ${ destination } with following error:\n${ e } ` ,
226
+ `[download] Unable to download provider release from: ${ url } to: ${ destination } with following error:\n${ e } ` ,
164
227
) ;
165
228
}
166
229
} ,
167
- prepareMetamask : async version => {
168
- const release = await module . exports . getMetamaskReleases ( version ) ;
230
+ prepareProvider : async version => {
231
+ const release =
232
+ process . env . PROVIDER === 'phantom'
233
+ ? await module . exports . getPhantomReleases ( version )
234
+ : await module . exports . getMetamaskReleases ( version ) ;
169
235
const downloadsDirectory = path . resolve ( __dirname , 'downloads' ) ;
170
236
await module . exports . createDirIfNotExist ( downloadsDirectory ) ;
171
- const metamaskDirectory = path . join ( downloadsDirectory , release . tagName ) ;
172
- const metamaskDirectoryExists = await module . exports . checkDirOrFileExist (
173
- metamaskDirectory ,
237
+ const providerDirectory = path . join ( downloadsDirectory , release . tagName ) ;
238
+ const providerkDirectoryExists = await module . exports . checkDirOrFileExist (
239
+ providerDirectory ,
174
240
) ;
175
- const metamaskManifestFilePath = path . join (
241
+ const providerManifestFilePath = path . join (
176
242
downloadsDirectory ,
177
243
release . tagName ,
178
244
'manifest.json' ,
179
245
) ;
180
- const metamaskManifestFileExists = await module . exports . checkDirOrFileExist (
181
- metamaskManifestFilePath ,
246
+ const providerManifestFileExists = await module . exports . checkDirOrFileExist (
247
+ providerManifestFilePath ,
182
248
) ;
183
- if ( ! metamaskDirectoryExists && ! metamaskManifestFileExists ) {
184
- await module . exports . download ( release . downloadUrl , metamaskDirectory ) ;
249
+ if ( ! providerkDirectoryExists && ! providerManifestFileExists ) {
250
+ await module . exports . download ( release . downloadUrl , providerDirectory ) ;
185
251
} else {
186
- log ( 'Metamask is already downloaded' ) ;
252
+ log ( 'provider is already downloaded' ) ;
187
253
}
188
- return metamaskDirectory ;
254
+ return providerDirectory ;
189
255
} ,
190
256
} ;
257
+
258
+ async function moveFiles ( srcDir , destDir ) {
259
+ const files = await fs . readdir ( srcDir ) ;
260
+
261
+ return Promise . all (
262
+ files . map ( function ( file ) {
263
+ var destFile = path . join ( destDir , file ) ;
264
+ return fs . rename ( path . join ( srcDir , file ) , destFile ) ;
265
+ } ) ,
266
+ ) ;
267
+ }
0 commit comments