{"_id":"@djeventplannerhub/djep-sdk","_rev":"3-63ef64eb1032f6b1d8ebac6b67fa878d","name":"@djeventplannerhub/djep-sdk","dist-tags":{"latest":"1.3.0"},"versions":{"1.1.1":{"name":"@djeventplannerhub/djep-sdk","version":"1.1.1","keywords":["djep","dj","event","planner","api","sdk"],"author":{"url":"https://www.djeventplanner.com","name":"DJ Event Planner"},"license":"MIT","_id":"@djeventplannerhub/djep-sdk@1.1.1","maintainers":[{"name":"djeventplanner","email":"support@djeventplanner.com"}],"homepage":"https://github.com/djeventplannerhub/djep-node-sdk","bugs":{"url":"https://github.com/djeventplannerhub/djep-node-sdk/issues"},"dist":{"shasum":"c0b7f191d7646da9e3a903eb7b70abf90243cc81","tarball":"https://registry.npmjs.org/@djeventplannerhub/djep-sdk/-/djep-sdk-1.1.1.tgz","fileCount":24,"integrity":"sha512-0yX/cfVIoRyWlw3Lcoc5EAKjjSOUMN1ZuqoRT4aUDwDtECWojhGSePdg+Cva/N9fLFSyO5EfGiUHy3lnHQlGlA==","signatures":[{"sig":"MEUCIF0uvLm+k3ISG9A8AZr5EMz+AzRupJgNHOaQ/cOVSE3KAiEAu5dqxeVVKTgwb0YA6imQ8k2S9OxLwwTlMwrpSPYT3lw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27891},"main":"src/index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"node examples/basic_usage.js"},"_npmUser":{"name":"djeventplanner","email":"support@djeventplanner.com"},"repository":{"url":"git+https://github.com/djeventplannerhub/djep-node-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"Official Node.js SDK for the DJ Event Planner (DJEP) REST API","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/djep-sdk_1.1.1_1785776726746_0.1911151752610054","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@djeventplannerhub/djep-sdk","version":"1.2.0","keywords":["djep","dj","event","planner","api","sdk"],"author":{"url":"https://www.djeventplanner.com","name":"DJ Event Planner"},"license":"MIT","_id":"@djeventplannerhub/djep-sdk@1.2.0","maintainers":[{"name":"djeventplanner","email":"support@djeventplanner.com"}],"homepage":"https://github.com/djeventplannerhub/djep-node-sdk","bugs":{"url":"https://github.com/djeventplannerhub/djep-node-sdk/issues"},"dist":{"shasum":"45c6d4322ee051cf75fd34a63c0e07106e7cf9fc","tarball":"https://registry.npmjs.org/@djeventplannerhub/djep-sdk/-/djep-sdk-1.2.0.tgz","fileCount":26,"integrity":"sha512-E3jcO8+jj6RLMsYF9wxvYE/WBNm4Ig4D86DZuSriAPKvAaOjODptfvo+n4AnTeP4GSoZFiPUcDAOfmwG9QCxNw==","signatures":[{"sig":"MEYCIQCeNYNUqe5hu7EByGOYJHlRW20zwVLWGUL1S/xo5PF/WAIhAM24BMCSFLLV/Zc4HvhKaDnX4j3nwVYwgRJCYgERAIo3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31817},"main":"src/index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"node examples/basic_usage.js"},"_npmUser":{"name":"djeventplanner","email":"support@djeventplanner.com"},"repository":{"url":"git+https://github.com/djeventplannerhub/djep-node-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"Official Node.js SDK for the DJ Event Planner (DJEP) REST API","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/djep-sdk_1.2.0_1787066481301_0.6327101988521504","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"_id":"@djeventplannerhub/djep-sdk@1.3.0","bugs":{"url":"https://github.com/djeventplannerhub/djep-node-sdk/issues"},"dist":{"shasum":"aaf1f062cc6be23fd2a56ee3be7c4c88b39e6507","tarball":"https://registry.npmjs.org/@djeventplannerhub/djep-sdk/-/djep-sdk-1.3.0.tgz","fileCount":26,"integrity":"sha512-LhbMf2AkC4nsXSw1q5V8EbMBkX0x+osgzTKN5H+1kkHHCNtc8cSzQOF8Y1V711oW0oLQyPDTCj1CbGSRpz/XZw==","signatures":[{"sig":"MEYCIQDTD5EBb/UqM2nICU5hPp4Dgr5OYtWjbU/zsMd3Gn5VigIhAOLSiJCmpQZsBsIDxkXMKFfEzYbv75bJtTS7uVV67BB/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDNiuz6FwkrtVmfQyli4z+hVtUe2svLV6OEetMsA/0bBAIhAJyYfCLWhidcbD2p8pp3IEhJyb2v7quFFYQRUgb3St96"}],"unpackedSize":39203},"main":"src/index.js","name":"@djeventplannerhub/djep-sdk","author":{"url":"https://www.djeventplanner.com","name":"DJ Event Planner"},"engines":{"node":">=14.0.0"},"gitHead":"22dbe4a33db7679c4ab43856dcf291a00887b154","license":"MIT","scripts":{"test":"node examples/basic_usage.js"},"version":"1.3.0","_npmUser":{"name":"djeventplanner","email":"support@djeventplanner.com"},"homepage":"https://github.com/djeventplannerhub/djep-node-sdk","keywords":["djep","dj","event","planner","api","sdk"],"repository":{"url":"git+https://github.com/djeventplannerhub/djep-node-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"Official Node.js SDK for the DJ Event Planner (DJEP) REST API","directories":{},"maintainers":[{"name":"djeventplanner","email":"support@djeventplanner.com"}],"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/djep-sdk_1.3.0_1789589692883_0.49489004269823367"}}},"time":{"created":"2026-08-03T17:05:26.606Z","modified":"2026-09-16T20:14:53.292Z","1.1.1":"2026-08-03T17:05:26.884Z","1.2.0":"2026-08-18T15:21:21.442Z","1.3.0":"2026-09-16T20:14:53.049Z"},"bugs":{"url":"https://github.com/djeventplannerhub/djep-node-sdk/issues"},"author":{"url":"https://www.djeventplanner.com","name":"DJ Event Planner"},"license":"MIT","homepage":"https://github.com/djeventplannerhub/djep-node-sdk","keywords":["djep","dj","event","planner","api","sdk"],"repository":{"url":"git+https://github.com/djeventplannerhub/djep-node-sdk.git","type":"git"},"description":"Official Node.js SDK for the DJ Event Planner (DJEP) REST API","maintainers":[{"name":"djeventplanner","email":"support@djeventplanner.com"}],"readme":"# DJEP Node.js SDK\n\nOfficial Node.js SDK for the [DJ Event Planner (DJEP)](https://www.djeventplanner.com) REST API.\n\n## Requirements\n\n- Node.js 14 or later\n- No external dependencies\n\n## Installation\n\n### Via npm\n\n```bash\nnpm install @djeventplannerhub/djep-sdk\n```\n\n### Manual Installation\n\nDownload the SDK and require it directly:\n\n```javascript\nconst DJEP = require('./djep-node-sdk');\n```\n\n## Quick Start\n\n```javascript\nconst DJEP = require('@djeventplannerhub/djep-sdk');\n\n// Load your API key from environment variables (never hardcode keys)\nconst djep = new DJEP(process.env.DJEP_API_KEY, process.env.DJEP_DOMAIN);\n\n// Check API status\nconst status = await djep.status();\nconsole.log(status.data.api_version);\n\n// List upcoming events\nconst events = await djep.events.list({ status: 'Booked', per_page: 10 });\nevents.data.forEach(event => {\n  console.log(`${event.event_type} on ${event.event_date}`);\n});\n```\n\n## Authentication\n\nYour API key is generated in DJEP under **Setup > Integrations > API Key**.\n\n**Important:** Never hardcode your API key in source files. Use environment variables.\n\n```javascript\n// Environment variable (recommended)\nconst djep = new DJEP(process.env.DJEP_API_KEY, process.env.DJEP_DOMAIN);\n\n// Or from a .env file (using dotenv)\nrequire('dotenv').config();\nconst djep = new DJEP(process.env.DJEP_API_KEY, process.env.DJEP_DOMAIN);\n```\n\n## Usage\n\n### Events\n\n```javascript\n// List events\nconst events = await djep.events.list({ status: 'Booked', sort_by: 'event_date' });\n\n// Get a single event\nconst event = await djep.events.get(56789);\n\n// Create an event (financials auto-calculated from package)\nconst newEvent = await djep.events.create({\n  clientid: 12345,\n  event_date: '2026-09-15',\n  event_type: 'Wedding',\n  start_time: '3:00 PM',\n  end_time: '11:00 PM',\n  addons: '501:2,502:1',\n});\nconsole.log(`Total fee: ${newEvent.data.financials.total_fee}`);\n\n// Update specific fields\nawait djep.events.update(56789, { status: 'Confirmed', guest_count: 200 });\n\n// Update and recalculate financials\nawait djep.events.update(56789, { pkg_idnumber: 14200 }, true);\n\n// Delete an event (cascading)\nawait djep.events.delete(56789);\n\n// Event sub-data\nconst payments = await djep.events.payments(56789);\nconst songs = await djep.events.musicRequests(56789);\nconst planning = await djep.events.planning(56789);\n```\n\n### Clients\n\n```javascript\nconst clients = await djep.clients.list({ per_page: 25 });\nconst client = await djep.clients.get(12345);\n\nconst newClient = await djep.clients.create({\n  first_name: 'John',\n  last_name: 'Smith',\n  email: 'john@example.com',\n});\n\nawait djep.clients.update(12345, { email: 'new@example.com' });\nawait djep.clients.delete(12345);\n```\n\n### Venues, Employees, Packages, Addons, Contacts\n\n```javascript\n// All follow the same pattern\nconst venues = await djep.venues.list();\nconst venue = await djep.venues.get(789);\n\nconst employees = await djep.employees.list();\nconst packages = await djep.packages.list();\nconst addons = await djep.addons.list();\nconst contacts = await djep.contacts.list();\n```\n\n### Vendors\n\n```javascript\nconst vendors = await djep.vendors.list();\nconst vendor = await djep.vendors.get(3456);\n\n// Link a vendor to an event\nawait djep.vendors.linkToEvent(56789, 3456);\n```\n\n### Payments\n\n```javascript\n// List all payments company-wide\nconst payments = await djep.payments.list({ per_page: 50 });\n\n// Add a payment to an event\nconst result = await djep.payments.addToEvent(56789, 500, 'Credit Card', {\n  processing_fee: 15,\n  comments: 'Final payment',\n});\nconsole.log(`Balance due: ${result.data.balance_due}`);\n```\n\n### Music Requests\n\n```javascript\n// Get requests for an event\nconst songs = await djep.musicRequests.forEvent(56789);\n\n// Add a music request\nawait djep.musicRequests.add(56789, 'Queen', 'Bohemian Rhapsody', 'MPL');\nawait djep.musicRequests.add(56789, 'ABBA', 'Dancing Queen', 'DED', 'For the bride');\n```\n\n### Booking Helpers\n\n```javascript\n// List available helpers\nconst helpers = await djep.bookingHelpers.list();\n\n// Run by unique_id (recommended)\nconst result = await djep.bookingHelpers.run(56789, 'book_event_1');\nconsole.log(result.data.log);\n\n// Or by position index\nconst result2 = await djep.bookingHelpers.run(56789, null, 0);\n```\n\n### Availability\n\n```javascript\n// Check a single date\nconst avail = await djep.availability.check('09/15/2026');\nif (avail.data.available) {\n  console.log(`${avail.data.employees.available} employees available`);\n}\n\n// Check a date range (max 90 days)\nconst range = await djep.availability.range('09/01/2026', '09/30/2026');\nrange.data.dates.forEach(date => {\n  console.log(`${date.date}: ${date.available ? 'Available' : 'Unavailable'}`);\n});\n```\n\n### Settings\n\n```javascript\nconst rfiSettings = await djep.settings.websiteTools('request_info');\nconst company = await djep.settings.company();\nconst fields = await djep.settings.customFields();\n```\n\n### Expenses\n\n```javascript\nconst expenses = await djep.expenses.list({ per_page: 25 });\nconst categories = await djep.expenses.categories();\nconst payees = await djep.expenses.payees();\nconst methods = await djep.expenses.paymentMethods();\n```\n\n### Other Resources\n\n```javascript\nconst rfi = await djep.submissions.rfi();\nconst quotes = await djep.submissions.quotes();\nconst contactUs = await djep.submissions.contactUs();\n\nconst closedDates = await djep.closedDates.list();\nconst equipment = await djep.equipment.list();\nconst systems = await djep.systems.list();\n```\n\n### Create Submission (RFI)\n\nPush leads from external sources into the DJ's submissions queue:\n\n```javascript\n// Wedding Wire lead\nconst submission = await djep.submissions.create({\n  first_name: 'Sarah', last_name: 'Johnson',\n  email: 'sarah@example.com', telephone: '555-0123',\n  event_date: '2026-09-15', event_type: 'Wedding',\n  guest_count: 200, source: 'Wedding Wire',\n  send_notification: 'true',\n});\nconsole.log(`Submission ${submission.data.req_idnumber} created`);\n\n// With custom questions and privacy consent\nconst submission2 = await djep.submissions.create({\n  first_name: 'Emma', last_name: 'Wilson',\n  email: 'emma@example.com',\n  event_date: '2027-06-20', event_type: 'Wedding',\n  question_1: 'Yes, we need lighting', q1_mapto: 'custom_field1',\n  privacy_policy_signed: 'true', source: 'Custom Website',\n  send_notification: 'true',\n});\n```\n\n### Convenience Endpoints\n\nQuick actions without the `fields` parameter:\n\n```javascript\n// Quick status change — returns old and new status\nconst result = await djep.events.updateStatus(56789, 'Booked');\nconsole.log(`${result.data.old_status} → ${result.data.new_status}`);\n\n// Assign employee to position (1-15), with optional fee and role\nawait djep.events.assignEmployee(56789, 1, 48113, { fee: 500, role: 'Lead DJ' });\nawait djep.events.assignEmployee(56789, 2, 48361, { fee: 350, role: 'MC' });\n\n// Unassign position 3\nawait djep.events.assignEmployee(56789, 3, 0);\n\n// Update notes — pass any combination of note fields\nawait djep.events.updateNotes(56789, {\n  comments: 'AI Summary: Client wants 80s and 90s hits',\n  next_action: 'Send playlist proposal',\n  next_action_date: '08/15/2026',\n});\n```\n\n## Auto-Pagination\n\nFor resources with pagination, use `all()` to automatically iterate through every page:\n\n```javascript\n// Fetches all events across all pages\nfor await (const event of djep.events.all({ status: 'Booked' })) {\n  console.log(event.event_date);\n}\n\n// Works with any paginated resource\nfor await (const client of djep.clients.all()) {\n  console.log(`${client.first_name} ${client.last_name}`);\n}\n```\n\n## Error Handling\n\nThe SDK throws specific errors for different error types:\n\n```javascript\nconst { DJEPError, AuthenticationError, NotFoundError, ValidationError, ForbiddenError, RateLimitError } = require('@djeventplannerhub/djep-sdk');\n\ntry {\n  const event = await djep.events.get(99999);\n} catch (err) {\n  if (err instanceof AuthenticationError) {\n    console.log('Invalid API key');\n  } else if (err instanceof NotFoundError) {\n    console.log('Event not found');\n  } else if (err instanceof ForbiddenError) {\n    console.log('Insufficient permissions');\n  } else if (err instanceof ValidationError) {\n    console.log('Invalid parameters');\n  } else if (err instanceof RateLimitError) {\n    console.log('Too many requests');\n  } else if (err instanceof DJEPError) {\n    console.log(`API error: ${err.message}`);\n  }\n}\n```\n\n## Configuration Options\n\n```javascript\nconst djep = new DJEP(process.env.DJEP_API_KEY, process.env.DJEP_DOMAIN, {\n  timeout: 60000, // Request timeout in milliseconds (default: 30000)\n});\n```\n\n## Security\n\n- **Never** commit API keys to version control\n- Store keys in environment variables or `.env` files (excluded from Git)\n- Use the most restrictive API key for your use case\n- API keys provide full access to the associated account — treat them like passwords\n\n## API Documentation\n\nFull API documentation is available at your DJEP instance:\n\n```\nhttps://yourdomain.com/api/api.asp?action=docs\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}