88 lines
3.6 KiB
JavaScript
Executable File
88 lines
3.6 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Script to unregister ALL goose:// protocol handlers
|
|
* Usage: node scripts/unregister-deeplink-protocols.js
|
|
*/
|
|
|
|
const { execSync } = require('child_process');
|
|
|
|
const PROTOCOL = 'goose';
|
|
|
|
function unregisterAllProtocolHandlers() {
|
|
console.log('Unregistering ALL goose:// protocol handlers...');
|
|
|
|
try {
|
|
// Get all registered Goose apps
|
|
console.log('Finding all registered Goose applications...');
|
|
const lsregisterOutput = execSync(`/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -B 10 -A 10 "claimed schemes:.*${PROTOCOL}:"`, { encoding: 'utf8' });
|
|
|
|
// Extract app paths from the output
|
|
const pathMatches = lsregisterOutput.match(/path:\s+(.+\.app)/g);
|
|
const uniquePaths = new Set();
|
|
|
|
if (pathMatches) {
|
|
pathMatches.forEach(match => {
|
|
const path = match.replace(/path:\s+/, '').trim();
|
|
if (path.includes('Goose') || path.includes('goose')) {
|
|
uniquePaths.add(path);
|
|
}
|
|
});
|
|
}
|
|
|
|
console.log(`Found ${uniquePaths.size} Goose app(s) to unregister:`);
|
|
uniquePaths.forEach(path => console.log(` - ${path}`));
|
|
|
|
// Unregister each app
|
|
let unregisteredCount = 0;
|
|
uniquePaths.forEach(appPath => {
|
|
try {
|
|
console.log(`Unregistering: ${appPath}`);
|
|
execSync(`/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -u "${appPath}"`, { stdio: 'ignore' });
|
|
unregisteredCount++;
|
|
} catch (error) {
|
|
console.log(` Warning: Could not unregister ${appPath} (may already be unregistered)`);
|
|
}
|
|
});
|
|
|
|
// Also try to unregister by bundle identifier
|
|
console.log('\nUnregistering by bundle identifier...');
|
|
const bundleIds = [
|
|
'com.electron.goose',
|
|
'com.block.goose',
|
|
'com.block.goose.dev'
|
|
];
|
|
|
|
bundleIds.forEach(bundleId => {
|
|
try {
|
|
console.log(`Unregistering bundle: ${bundleId}`);
|
|
execSync(`/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -u "${bundleId}"`, { stdio: 'ignore' });
|
|
} catch (error) {
|
|
// Ignore errors for bundle IDs that don't exist
|
|
}
|
|
});
|
|
|
|
// Force Launch Services to rebuild its database
|
|
console.log('Rebuilding Launch Services database...');
|
|
try {
|
|
execSync('/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user', { stdio: 'ignore' });
|
|
} catch (error) {
|
|
console.log('Warning: Could not rebuild Launch Services database');
|
|
}
|
|
|
|
console.log(`\n✅ Successfully processed ${unregisteredCount} Goose applications`);
|
|
console.log('All goose:// protocol handlers have been unregistered.');
|
|
console.log('\nNote: You may need to restart your system for changes to take full effect.');
|
|
|
|
} catch (error) {
|
|
console.error('Error during unregistration:', error.message);
|
|
console.log('\nManual cleanup options:');
|
|
console.log('1. Use Activity Monitor to quit all Goose processes');
|
|
console.log('2. Delete Goose apps from Applications folder');
|
|
console.log('3. Run: sudo /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user');
|
|
}
|
|
}
|
|
|
|
// Run the unregistration immediately
|
|
unregisterAllProtocolHandlers();
|