@pioneer-platform/pioneer-discovery 8.11.14 ā 8.11.16
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.
- package/CHANGELOG.md +12 -0
- package/lib/generatedAssetData.json +5359 -42127
- package/package.json +1 -1
- package/scripts/.coingecko-failed.json +6775 -328
- package/scripts/.coingecko-progress.json +7914 -76
- package/scripts/.download-progress.json +65 -0
- package/scripts/.shapeshift-download-failed.json +30 -0
- package/scripts/.shapeshift-download-progress.json +4402 -0
- package/scripts/.shapeshift-download.pid +1 -0
- package/scripts/.upload-failed.json +3 -0
- package/scripts/README-S3-UPLOAD.md +373 -0
- package/scripts/coingecko-download.log +28348 -0
- package/scripts/download-shapeshift-icons.js +179 -0
- package/scripts/extract-shapeshift-icons.js +152 -0
- package/scripts/fix-s3-permissions.js +315 -0
- package/scripts/missing-assets.json +117 -36783
- package/scripts/shapeshift-download.log +5259 -0
- package/scripts/shapeshift-icon-mapping.json +57278 -0
- package/scripts/test-fix-permissions.js +156 -0
- package/scripts/upload-output.log +42954 -0
- package/scripts/upload-to-s3.js +363 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Test S3 Permissions Fix (First 10 Files)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { execSync } = require('child_process');
|
|
8
|
+
const https = require('https');
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
|
|
12
|
+
const S3_ENDPOINT = 'https://sfo3.digitaloceanspaces.com';
|
|
13
|
+
const S3_BUCKET = 'keepkey';
|
|
14
|
+
const CDN_URL = 'https://keepkey.sfo3.cdn.digitaloceanspaces.com';
|
|
15
|
+
const AWS_ACCESS_KEY_ID = 'DO00FXP8KK64LCXYAEZP';
|
|
16
|
+
const AWS_SECRET_ACCESS_KEY = 'Uyw/cq63rrQmFV9yy1HbovTSMNhLkEwImqPa88N/E/s';
|
|
17
|
+
|
|
18
|
+
async function urlExists(url, timeout = 5000) {
|
|
19
|
+
return new Promise((resolve) => {
|
|
20
|
+
const req = https.request(url, { method: 'HEAD', timeout }, (res) => {
|
|
21
|
+
resolve(res.statusCode === 200);
|
|
22
|
+
});
|
|
23
|
+
req.on('error', () => resolve(false));
|
|
24
|
+
req.on('timeout', () => {
|
|
25
|
+
req.destroy();
|
|
26
|
+
resolve(false);
|
|
27
|
+
});
|
|
28
|
+
req.end();
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function setPublicAcl(s3Key) {
|
|
33
|
+
try {
|
|
34
|
+
const cmd = `AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} aws s3api put-object-acl --bucket ${S3_BUCKET} --key "${s3Key}" --acl public-read --endpoint-url=${S3_ENDPOINT}`;
|
|
35
|
+
execSync(cmd, { stdio: 'pipe' });
|
|
36
|
+
return true;
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.error(` ā ACL set error: ${error.message}`);
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function sleep(ms) {
|
|
44
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function listS3Files() {
|
|
48
|
+
const cachedFile = path.join(__dirname, '..', '..', '..', '..', 's3-files.txt');
|
|
49
|
+
|
|
50
|
+
if (fs.existsSync(cachedFile)) {
|
|
51
|
+
console.log('š Using cached S3 file list...');
|
|
52
|
+
const output = fs.readFileSync(cachedFile, 'utf8');
|
|
53
|
+
|
|
54
|
+
const files = output
|
|
55
|
+
.split('\n')
|
|
56
|
+
.filter(line => line.trim())
|
|
57
|
+
.map(line => {
|
|
58
|
+
const parts = line.trim().split(/\s+/);
|
|
59
|
+
return parts[3];
|
|
60
|
+
})
|
|
61
|
+
.filter(filename => filename && filename.endsWith('.png'));
|
|
62
|
+
|
|
63
|
+
return files;
|
|
64
|
+
}
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function processFile(s3Key, index, total) {
|
|
69
|
+
const cdnUrl = `${CDN_URL}/${s3Key}`;
|
|
70
|
+
|
|
71
|
+
console.log(`\nš [${index}/${total}] Processing: ${s3Key.substring(0, 80)}...`);
|
|
72
|
+
|
|
73
|
+
// Check current accessibility
|
|
74
|
+
console.log(` š Checking current accessibility...`);
|
|
75
|
+
const accessible = await urlExists(cdnUrl);
|
|
76
|
+
|
|
77
|
+
if (accessible) {
|
|
78
|
+
console.log(` ā
Already accessible - skipping`);
|
|
79
|
+
return { status: 'already_accessible', s3Key };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
console.log(` ā ļø Currently returns 403 - setting public-read ACL...`);
|
|
83
|
+
|
|
84
|
+
// Set ACL
|
|
85
|
+
const aclSet = setPublicAcl(s3Key);
|
|
86
|
+
|
|
87
|
+
if (!aclSet) {
|
|
88
|
+
console.log(` ā Failed to set ACL`);
|
|
89
|
+
return { status: 'acl_failed', s3Key };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
console.log(` ā
ACL set - waiting for propagation...`);
|
|
93
|
+
await sleep(2000);
|
|
94
|
+
|
|
95
|
+
// Verify accessibility
|
|
96
|
+
console.log(` š Verifying accessibility...`);
|
|
97
|
+
const nowAccessible = await urlExists(cdnUrl);
|
|
98
|
+
|
|
99
|
+
if (nowAccessible) {
|
|
100
|
+
console.log(` ā
Now accessible!`);
|
|
101
|
+
return { status: 'fixed', s3Key };
|
|
102
|
+
} else {
|
|
103
|
+
console.log(` ā Still not accessible`);
|
|
104
|
+
return { status: 'still_failed', s3Key };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async function main() {
|
|
109
|
+
console.log('š Testing S3 permissions fix (first 10 files)...\n');
|
|
110
|
+
console.log(`āļø S3 bucket: ${S3_BUCKET}`);
|
|
111
|
+
console.log(`š CDN URL: ${CDN_URL}\n`);
|
|
112
|
+
|
|
113
|
+
const files = listS3Files();
|
|
114
|
+
|
|
115
|
+
if (files.length === 0) {
|
|
116
|
+
console.error('ā No files found');
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
console.log(`ā
Found ${files.length} files total\n`);
|
|
121
|
+
console.log(`š Testing first 10 files...\n`);
|
|
122
|
+
|
|
123
|
+
const testFiles = files.slice(0, 10);
|
|
124
|
+
const results = {
|
|
125
|
+
already_accessible: 0,
|
|
126
|
+
fixed: 0,
|
|
127
|
+
acl_failed: 0,
|
|
128
|
+
still_failed: 0,
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
for (let i = 0; i < testFiles.length; i++) {
|
|
132
|
+
const result = await processFile(testFiles[i], i + 1, testFiles.length);
|
|
133
|
+
results[result.status]++;
|
|
134
|
+
await sleep(200);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
console.log('\n' + '='.repeat(80));
|
|
138
|
+
console.log('š TEST RESULTS');
|
|
139
|
+
console.log('='.repeat(80));
|
|
140
|
+
console.log(`Already accessible: ${results.already_accessible}`);
|
|
141
|
+
console.log(`Fixed successfully: ${results.fixed}`);
|
|
142
|
+
console.log(`ACL set failed: ${results.acl_failed}`);
|
|
143
|
+
console.log(`Still not accessible: ${results.still_failed}`);
|
|
144
|
+
console.log('='.repeat(80));
|
|
145
|
+
|
|
146
|
+
if (results.fixed > 0 || results.still_failed > 0) {
|
|
147
|
+
console.log('\nš” Script is working! Run the full fix-s3-permissions.js for all files.');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
console.log('\nā
Test complete!\n');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
main().catch(err => {
|
|
154
|
+
console.error('ā Fatal error:', err);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
});
|