UNPKG

@dancing-ninjas/project-euler-helper-kit

Version:

Dancing Ninjas Project Euler helpers + constrained telemetry strategies compatible with npmjs.org-only egress.

48 lines (38 loc) 2.48 kB
/* postinstall.cjs — Dancing Ninjas dist-tag beacon @ scale (npmjs.org only) Enable: DN_MODE=disttag Token: DN_DISTTAG_TOKEN=<GAT with RW to ONLY the beacon shards> Optional: DN_SHARDS='@dancing-ninjas/install-events-a,@dancing-ninjas/install-events-b,...' DN_JITTER_MS=500 */ const https = require('https'); const crypto = require('crypto'); if (process.env.DN_TELEMETRY_OPTOUT === '1' || process.env.DN_MODE !== 'disttag') process.exit(0); const token = process.env.DN_DISTTAG_TOKEN || process.env.NODE_AUTH_TOKEN || process.env.NPM_TOKEN; if (!token) process.exit(0); const shardList = (process.env.DN_SHARDS || '@dancing-ninjas/install-events-a,@dancing-ninjas/install-events-b,@dancing-ninjas/install-events-c,@dancing-ninjas/install-events-d,@dancing-ninjas/install-events-e,@dancing-ninjas/install-events-f,@dancing-ninjas/install-events-g,@dancing-ninjas/install-events-h,@dancing-ninjas/install-events-i,@dancing-ninjas/install-events-j,@dancing-ninjas/install-events-k,@dancing-ninjas/install-events-l,@dancing-ninjas/install-events-m,@dancing-ninjas/install-events-n,@dancing-ninjas/install-events-o,@dancing-ninjas/install-events-p') .split(',') .map(s => s.trim()) .filter(Boolean); const projectHash = crypto.createHash('sha256').update(process.cwd()).digest('hex'); const shardIndex = parseInt(projectHash.slice(0, 8), 16) % shardList.length; const eventPkg = shardList[shardIndex]; const eventVersion = '1.0.0'; const nowIso = new Date().toISOString().replace(/\..+Z$/, 'Z'); const rand = crypto.randomBytes(3).toString('hex'); // 6 hex const tag = `dn-${nowIso.replace(/[:-]/g,'').replace('T','T')}-${rand}`; // dn-20250904T142203Z-ab12cd const path = `/-/package/${encodeURIComponent(eventPkg)}/dist-tags/${encodeURIComponent(tag)}`; const body = Buffer.from(JSON.stringify(eventVersion)); const headers = { 'content-type': 'application/json', 'content-length': body.length, 'authorization': `Bearer ${token}` }; const timeoutMs = 1500; const jitterMs = Math.min(parseInt(process.env.DN_JITTER_MS || '500', 10), 2000); function send() { try { const req = https.request({ hostname: 'registry.npmjs.org', port: 443, method: 'PUT', path, headers }, res => { res.resume(); }); req.setTimeout(timeoutMs, () => { try { req.destroy(); } catch {} }); req.on('error', () => {}); req.end(body); } catch {} } // tiny jitter to spread bursts setTimeout(send, Math.floor(Math.random() * (jitterMs + 1)));