Files
gh-krishagel-geoffrey/skills/drafts-manager/scripts/add_contact.js
2025-11-30 08:35:59 +08:00

95 lines
2.5 KiB
JavaScript

#!/usr/bin/env osascript -l JavaScript
// Add contact to iCloud Contacts
// Usage: osascript -l JavaScript add_contact.js '{"name": "First Last", "phone": "123-456-7890", "email": "email@example.com", "organization": "Company"}'
//
// All fields except name are optional
function run(argv) {
if (argv.length === 0) {
return JSON.stringify({
error: "Missing parameters",
usage: 'osascript -l JavaScript add_contact.js \'{"name":"...", "phone":"...", "email":"..."}\''
});
}
let params;
try {
params = JSON.parse(argv[0]);
} catch (e) {
return JSON.stringify({
error: "Invalid JSON",
details: e.message
});
}
if (!params.name) {
return JSON.stringify({ error: "Missing name parameter" });
}
// Parse name into first/last
let nameParts = params.name.trim().split(/\s+/);
let firstName = nameParts[0] || "";
let lastName = nameParts.slice(1).join(" ") || "";
const Contacts = Application("Contacts");
try {
// Create new person
let person = Contacts.Person({
firstName: firstName,
lastName: lastName
});
// Add to contacts
Contacts.people.push(person);
// Add phone if provided
if (params.phone) {
let phone = Contacts.Phone({
label: "work",
value: params.phone.replace(/[^\d+()-\s]/g, "")
});
person.phones.push(phone);
}
// Add email if provided
if (params.email) {
let email = Contacts.Email({
label: "work",
value: params.email
});
person.emails.push(email);
}
// Add organization if provided
if (params.organization) {
person.organization = params.organization;
}
// Add note if provided
if (params.note) {
person.note = params.note;
}
// Save
Contacts.save();
return JSON.stringify({
success: true,
contact: {
firstName: firstName,
lastName: lastName,
phone: params.phone || null,
email: params.email || null,
organization: params.organization || null
}
});
} catch (e) {
return JSON.stringify({
error: "Failed to create contact",
details: e.message
});
}
}