@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.
@@ -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
+ });