Skip to content

Commit 6183d34

Browse files
committed
chore: Phantom download
1 parent a838344 commit 6183d34

File tree

2 files changed

+94
-22
lines changed

2 files changed

+94
-22
lines changed

helpers.js

+90-13
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,61 @@ module.exports = {
143143
}
144144
}
145145
},
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+
},
146201
download: async (url, destination) => {
147202
try {
148203
log(
@@ -152,39 +207,61 @@ module.exports = {
152207
await download(url, destination, {
153208
extract: true,
154209
auth: `${process.env.GH_USERNAME}:${process.env.GH_PAT}`,
210+
headers: {
211+
Accept: 'application/octet-stream',
212+
},
155213
});
214+
215+
/**
216+
* Some extensions will zip their dist folder
217+
*/
218+
await moveFiles(`${destination}/dist`, destination);
156219
} else {
157220
await download(url, destination, {
158221
extract: true,
159222
});
160223
}
161224
} catch (e) {
162225
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}`,
164227
);
165228
}
166229
},
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);
169235
const downloadsDirectory = path.resolve(__dirname, 'downloads');
170236
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,
174240
);
175-
const metamaskManifestFilePath = path.join(
241+
const providerManifestFilePath = path.join(
176242
downloadsDirectory,
177243
release.tagName,
178244
'manifest.json',
179245
);
180-
const metamaskManifestFileExists = await module.exports.checkDirOrFileExist(
181-
metamaskManifestFilePath,
246+
const providerManifestFileExists = await module.exports.checkDirOrFileExist(
247+
providerManifestFilePath,
182248
);
183-
if (!metamaskDirectoryExists && !metamaskManifestFileExists) {
184-
await module.exports.download(release.downloadUrl, metamaskDirectory);
249+
if (!providerkDirectoryExists && !providerManifestFileExists) {
250+
await module.exports.download(release.downloadUrl, providerDirectory);
185251
} else {
186-
log('Metamask is already downloaded');
252+
log('provider is already downloaded');
187253
}
188-
return metamaskDirectory;
254+
return providerDirectory;
189255
},
190256
};
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+
}

plugins/index.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,11 @@ module.exports = (on, config) => {
5353
}
5454
if (!process.env.SKIP_METAMASK_INSTALL) {
5555
// NOTE: extensions cannot be loaded in headless Chrome
56-
const metamaskPath = await helpers.prepareMetamask(
57-
process.env.METAMASK_VERSION || '10.21.0',
56+
const providerPath = await helpers.prepareProvider(
57+
process.env.PROVIDER_VERSION || '10.21.0',
5858
);
59-
if (process.env.PROVIDER === 'phantom') {
60-
arguments_.extensions.push(
61-
metamaskPath.replace('metamask-chrome-10.21.0', 'phantom'),
62-
);
63-
} else {
64-
arguments_.extensions.push(metamaskPath);
65-
}
59+
60+
arguments_.extensions.push(providerPath);
6661
}
6762

6863
return arguments_;

0 commit comments

Comments
 (0)