41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const jwt = require('jsonwebtoken');
|
|
const dotenv = require('dotenv');
|
|
|
|
// Load environment variables from .env file
|
|
dotenv.config();
|
|
|
|
const generateAppleSecret = (config) => {
|
|
const { teamId, clientId, keyId, privateKeyPath } = config;
|
|
const privateKey = fs.readFileSync(privateKeyPath).toString();
|
|
const now = Math.floor(Date.now() / 1000);
|
|
const payload = {
|
|
iss: teamId,
|
|
iat: now,
|
|
exp: now + 86400 * 180, // 180 days
|
|
aud: 'https://appleid.apple.com',
|
|
sub: clientId,
|
|
};
|
|
const headers = {
|
|
alg: 'ES256',
|
|
kid: keyId,
|
|
};
|
|
return jwt.sign(payload, privateKey, { algorithm: 'ES256', header: headers });
|
|
};
|
|
|
|
const config = {
|
|
teamId: process.env.APPLE_TEAM_ID || '',
|
|
clientId: process.env.AUTH_APPLE_ID || '',
|
|
keyId: process.env.APPLE_KEY_ID || '',
|
|
privateKeyPath: path.resolve(__dirname, process.env.APPLE_PRIVATE_KEY_PATH || ''),
|
|
};
|
|
|
|
if (!config.teamId || !config.clientId || !config.keyId || !config.privateKeyPath) {
|
|
console.error('Missing necessary Apple configuration');
|
|
process.exit(1);
|
|
}
|
|
|
|
const appleSecret = generateAppleSecret(config);
|
|
console.log(`Your Apple Secret:\n\n${appleSecret}\n`);
|