@bytehide/react-native-shield
Version:
React Native plugin for ByteHide Shield obfuscation.
78 lines (70 loc) • 2.98 kB
JavaScript
const {bytehideShieldPlugin} = require('@bytehide/gulp-shield');
const path = require('path');
const fs = require('fs');
const gulp = require('gulp');
const {src, dest} = gulp;
module.exports = {
/**
* Obfuscates JavaScript files in the specified directory.
* @param {string} distDir - The source directory containing files to obfuscate.
* @param {string} projectToken - The ByteHide project token (default: from environment variable or placeholder).
* @param {boolean} replace - Whether to replace the original files or save as new files.
* @param {string[]} exclude - Patterns to exclude from obfuscation.
* @param {string} obfuscatedExtension - The extension for obfuscated files.
* @param {Object} config - ByteHide obfuscation configuration.
*/
obfuscate: async (
distDir = './dist',
projectToken = process.env.BYTEHIDE_PROJECT_TOKEN || 'your_project_token',
replace = false,
exclude = [],
obfuscatedExtension = '.obf',
config = {
controlFlowFlattening: true,
debugProtection: true,
devtoolsBlocking: true,
}
) => {
if (!projectToken || projectToken === 'your_project_token') {
throw new Error(
'Project token is required. Please provide it as an argument or set BYTEHIDE_PROJECT_TOKEN environment variable.'
);
}
if (!fs.existsSync(distDir)) {
throw new Error(`Source directory "${distDir}" does not exist.`);
}
const srcFiles = path.resolve(distDir, '**', '*.js');
const destDir = distDir;
// const destDir = replace ? distDir : `${distDir}_obfuscated`;
// if (!replace && !fs.existsSync(destDir)) {
// fs.mkdirSync(destDir, { recursive: true });
// }
console.log('Starting obfuscation...');
try {
await new Promise((resolve, reject) => {
src([
srcFiles,
`!${path.resolve(distDir, '**', '__tests__', '**')}`,
`!${path.resolve(distDir, '**', '*.test.js')}`,
`!${path.resolve(distDir, '**', '*.spec.js')}`,
...exclude.map((pattern) => `!${path.resolve(distDir, '**', pattern)}`),
])
.pipe(
bytehideShieldPlugin({
projectToken,
replace,
obfuscatedExtension,
config,
})
)
.pipe(dest(destDir))
.on('end', resolve)
.on('error', reject);
});
console.log(`Obfuscation complete. Files saved to "${destDir}".`);
} catch (error) {
console.error('Error during obfuscation:', error.message);
throw error;
}
},
};