95 lines
2.5 KiB
JavaScript
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
|
|
});
|
|
}
|
|
}
|