21 lines
676 B
JavaScript
21 lines
676 B
JavaScript
import crypto from 'node:crypto';
|
|
|
|
const { publicKey, privateKey } = crypto.generateKeyPairSync('ec', {
|
|
namedCurve: 'prime256v1',
|
|
});
|
|
const publicJwk = publicKey.export({ format: 'jwk' });
|
|
const privateJwk = privateKey.export({ format: 'jwk' });
|
|
|
|
if (!publicJwk.x || !publicJwk.y || !privateJwk.d) {
|
|
throw new Error('Failed to generate VAPID P-256 key pair');
|
|
}
|
|
|
|
const rawPublicKey = Buffer.concat([
|
|
Buffer.from([0x04]),
|
|
Buffer.from(publicJwk.x, 'base64url'),
|
|
Buffer.from(publicJwk.y, 'base64url'),
|
|
]).toString('base64url');
|
|
|
|
process.stdout.write(
|
|
`VAPID_PUBLIC_KEY=${rawPublicKey}\nVAPID_PRIVATE_KEY=${privateJwk.d}\nVAPID_SUBJECT=mailto:admin@krona.local\n`,
|
|
);
|