digital-tools 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +9 -0
- package/README.md +1144 -0
- package/dist/define.d.ts +109 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +268 -0
- package/dist/define.js.map +1 -0
- package/dist/entities/advertising.d.ts +79 -0
- package/dist/entities/advertising.d.ts.map +1 -0
- package/dist/entities/advertising.js +1000 -0
- package/dist/entities/advertising.js.map +1 -0
- package/dist/entities/ai.d.ts +69 -0
- package/dist/entities/ai.d.ts.map +1 -0
- package/dist/entities/ai.js +757 -0
- package/dist/entities/ai.js.map +1 -0
- package/dist/entities/analytics.d.ts +83 -0
- package/dist/entities/analytics.d.ts.map +1 -0
- package/dist/entities/analytics.js +1589 -0
- package/dist/entities/analytics.js.map +1 -0
- package/dist/entities/automation.d.ts +61 -0
- package/dist/entities/automation.d.ts.map +1 -0
- package/dist/entities/automation.js +602 -0
- package/dist/entities/automation.js.map +1 -0
- package/dist/entities/communication.d.ts +96 -0
- package/dist/entities/communication.d.ts.map +1 -0
- package/dist/entities/communication.js +1151 -0
- package/dist/entities/communication.js.map +1 -0
- package/dist/entities/crm.d.ts +91 -0
- package/dist/entities/crm.d.ts.map +1 -0
- package/dist/entities/crm.js +1387 -0
- package/dist/entities/crm.js.map +1 -0
- package/dist/entities/design.d.ts +61 -0
- package/dist/entities/design.d.ts.map +1 -0
- package/dist/entities/design.js +547 -0
- package/dist/entities/design.js.map +1 -0
- package/dist/entities/development.d.ts +145 -0
- package/dist/entities/development.d.ts.map +1 -0
- package/dist/entities/development.js +2213 -0
- package/dist/entities/development.js.map +1 -0
- package/dist/entities/document.d.ts +54 -0
- package/dist/entities/document.d.ts.map +1 -0
- package/dist/entities/document.js +875 -0
- package/dist/entities/document.js.map +1 -0
- package/dist/entities/ecommerce.d.ts +93 -0
- package/dist/entities/ecommerce.d.ts.map +1 -0
- package/dist/entities/ecommerce.js +1430 -0
- package/dist/entities/ecommerce.js.map +1 -0
- package/dist/entities/experiment.d.ts +89 -0
- package/dist/entities/experiment.d.ts.map +1 -0
- package/dist/entities/experiment.js +1040 -0
- package/dist/entities/experiment.js.map +1 -0
- package/dist/entities/finance.d.ts +272 -0
- package/dist/entities/finance.d.ts.map +1 -0
- package/dist/entities/finance.js +3479 -0
- package/dist/entities/finance.js.map +1 -0
- package/dist/entities/forms.d.ts +91 -0
- package/dist/entities/forms.d.ts.map +1 -0
- package/dist/entities/forms.js +1893 -0
- package/dist/entities/forms.js.map +1 -0
- package/dist/entities/hr.d.ts +62 -0
- package/dist/entities/hr.d.ts.map +1 -0
- package/dist/entities/hr.js +662 -0
- package/dist/entities/hr.js.map +1 -0
- package/dist/entities/identity.d.ts +90 -0
- package/dist/entities/identity.d.ts.map +1 -0
- package/dist/entities/identity.js +998 -0
- package/dist/entities/identity.js.map +1 -0
- package/dist/entities/index.d.ts +410 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +283 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/infrastructure.d.ts +98 -0
- package/dist/entities/infrastructure.d.ts.map +1 -0
- package/dist/entities/infrastructure.js +1154 -0
- package/dist/entities/infrastructure.js.map +1 -0
- package/dist/entities/knowledge.d.ts +98 -0
- package/dist/entities/knowledge.d.ts.map +1 -0
- package/dist/entities/knowledge.js +1439 -0
- package/dist/entities/knowledge.js.map +1 -0
- package/dist/entities/marketing.d.ts +82 -0
- package/dist/entities/marketing.d.ts.map +1 -0
- package/dist/entities/marketing.js +1611 -0
- package/dist/entities/marketing.js.map +1 -0
- package/dist/entities/media.d.ts +83 -0
- package/dist/entities/media.d.ts.map +1 -0
- package/dist/entities/media.js +1635 -0
- package/dist/entities/media.js.map +1 -0
- package/dist/entities/notification.d.ts +76 -0
- package/dist/entities/notification.d.ts.map +1 -0
- package/dist/entities/notification.js +1200 -0
- package/dist/entities/notification.js.map +1 -0
- package/dist/entities/presentation.d.ts +61 -0
- package/dist/entities/presentation.d.ts.map +1 -0
- package/dist/entities/presentation.js +1275 -0
- package/dist/entities/presentation.js.map +1 -0
- package/dist/entities/productivity.d.ts +92 -0
- package/dist/entities/productivity.d.ts.map +1 -0
- package/dist/entities/productivity.js +1318 -0
- package/dist/entities/productivity.js.map +1 -0
- package/dist/entities/project-management.d.ts +89 -0
- package/dist/entities/project-management.d.ts.map +1 -0
- package/dist/entities/project-management.js +1137 -0
- package/dist/entities/project-management.js.map +1 -0
- package/dist/entities/recruiting.d.ts +54 -0
- package/dist/entities/recruiting.d.ts.map +1 -0
- package/dist/entities/recruiting.js +737 -0
- package/dist/entities/recruiting.js.map +1 -0
- package/dist/entities/shipping.d.ts +52 -0
- package/dist/entities/shipping.d.ts.map +1 -0
- package/dist/entities/shipping.js +510 -0
- package/dist/entities/shipping.js.map +1 -0
- package/dist/entities/signature.d.ts +83 -0
- package/dist/entities/signature.d.ts.map +1 -0
- package/dist/entities/signature.js +1103 -0
- package/dist/entities/signature.js.map +1 -0
- package/dist/entities/site.d.ts +33 -0
- package/dist/entities/site.d.ts.map +1 -0
- package/dist/entities/site.js +223 -0
- package/dist/entities/site.js.map +1 -0
- package/dist/entities/spreadsheet.d.ts +68 -0
- package/dist/entities/spreadsheet.d.ts.map +1 -0
- package/dist/entities/spreadsheet.js +1342 -0
- package/dist/entities/spreadsheet.js.map +1 -0
- package/dist/entities/storage.d.ts +74 -0
- package/dist/entities/storage.d.ts.map +1 -0
- package/dist/entities/storage.js +1199 -0
- package/dist/entities/storage.js.map +1 -0
- package/dist/entities/support.d.ts +83 -0
- package/dist/entities/support.d.ts.map +1 -0
- package/dist/entities/support.js +1167 -0
- package/dist/entities/support.js.map +1 -0
- package/dist/entities/video-conferencing.d.ts +129 -0
- package/dist/entities/video-conferencing.d.ts.map +1 -0
- package/dist/entities/video-conferencing.js +1751 -0
- package/dist/entities/video-conferencing.js.map +1 -0
- package/dist/entities/video.d.ts +76 -0
- package/dist/entities/video.d.ts.map +1 -0
- package/dist/entities/video.js +951 -0
- package/dist/entities/video.js.map +1 -0
- package/dist/entities.d.ts +147 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +1664 -0
- package/dist/entities.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/analytics/index.d.ts +19 -0
- package/dist/providers/analytics/index.d.ts.map +1 -0
- package/dist/providers/analytics/index.js +18 -0
- package/dist/providers/analytics/index.js.map +1 -0
- package/dist/providers/analytics/mixpanel.d.ts +25 -0
- package/dist/providers/analytics/mixpanel.d.ts.map +1 -0
- package/dist/providers/analytics/mixpanel.js +256 -0
- package/dist/providers/analytics/mixpanel.js.map +1 -0
- package/dist/providers/calendar/cal-com.d.ts +26 -0
- package/dist/providers/calendar/cal-com.d.ts.map +1 -0
- package/dist/providers/calendar/cal-com.js +304 -0
- package/dist/providers/calendar/cal-com.js.map +1 -0
- package/dist/providers/calendar/google-calendar.d.ts +25 -0
- package/dist/providers/calendar/google-calendar.d.ts.map +1 -0
- package/dist/providers/calendar/google-calendar.js +336 -0
- package/dist/providers/calendar/google-calendar.js.map +1 -0
- package/dist/providers/calendar/index.d.ts +20 -0
- package/dist/providers/calendar/index.d.ts.map +1 -0
- package/dist/providers/calendar/index.js +21 -0
- package/dist/providers/calendar/index.js.map +1 -0
- package/dist/providers/crm/hubspot.d.ts +25 -0
- package/dist/providers/crm/hubspot.d.ts.map +1 -0
- package/dist/providers/crm/hubspot.js +567 -0
- package/dist/providers/crm/hubspot.js.map +1 -0
- package/dist/providers/crm/index.d.ts +19 -0
- package/dist/providers/crm/index.d.ts.map +1 -0
- package/dist/providers/crm/index.js +18 -0
- package/dist/providers/crm/index.js.map +1 -0
- package/dist/providers/development/github.d.ts +25 -0
- package/dist/providers/development/github.d.ts.map +1 -0
- package/dist/providers/development/github.js +473 -0
- package/dist/providers/development/github.js.map +1 -0
- package/dist/providers/development/index.d.ts +19 -0
- package/dist/providers/development/index.d.ts.map +1 -0
- package/dist/providers/development/index.js +18 -0
- package/dist/providers/development/index.js.map +1 -0
- package/dist/providers/ecommerce/index.d.ts +19 -0
- package/dist/providers/ecommerce/index.d.ts.map +1 -0
- package/dist/providers/ecommerce/index.js +18 -0
- package/dist/providers/ecommerce/index.js.map +1 -0
- package/dist/providers/ecommerce/shopify.d.ts +25 -0
- package/dist/providers/ecommerce/shopify.d.ts.map +1 -0
- package/dist/providers/ecommerce/shopify.js +379 -0
- package/dist/providers/ecommerce/shopify.js.map +1 -0
- package/dist/providers/email/index.d.ts +20 -0
- package/dist/providers/email/index.d.ts.map +1 -0
- package/dist/providers/email/index.js +21 -0
- package/dist/providers/email/index.js.map +1 -0
- package/dist/providers/email/resend.d.ts +25 -0
- package/dist/providers/email/resend.d.ts.map +1 -0
- package/dist/providers/email/resend.js +259 -0
- package/dist/providers/email/resend.js.map +1 -0
- package/dist/providers/email/sendgrid.d.ts +25 -0
- package/dist/providers/email/sendgrid.d.ts.map +1 -0
- package/dist/providers/email/sendgrid.js +162 -0
- package/dist/providers/email/sendgrid.js.map +1 -0
- package/dist/providers/finance/index.d.ts +19 -0
- package/dist/providers/finance/index.d.ts.map +1 -0
- package/dist/providers/finance/index.js +18 -0
- package/dist/providers/finance/index.js.map +1 -0
- package/dist/providers/finance/stripe.d.ts +25 -0
- package/dist/providers/finance/stripe.d.ts.map +1 -0
- package/dist/providers/finance/stripe.js +550 -0
- package/dist/providers/finance/stripe.js.map +1 -0
- package/dist/providers/forms/index.d.ts +19 -0
- package/dist/providers/forms/index.d.ts.map +1 -0
- package/dist/providers/forms/index.js +18 -0
- package/dist/providers/forms/index.js.map +1 -0
- package/dist/providers/forms/typeform.d.ts +25 -0
- package/dist/providers/forms/typeform.d.ts.map +1 -0
- package/dist/providers/forms/typeform.js +501 -0
- package/dist/providers/forms/typeform.js.map +1 -0
- package/dist/providers/index.d.ts +56 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +124 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/knowledge/index.d.ts +19 -0
- package/dist/providers/knowledge/index.d.ts.map +1 -0
- package/dist/providers/knowledge/index.js +18 -0
- package/dist/providers/knowledge/index.js.map +1 -0
- package/dist/providers/knowledge/notion.d.ts +25 -0
- package/dist/providers/knowledge/notion.d.ts.map +1 -0
- package/dist/providers/knowledge/notion.js +390 -0
- package/dist/providers/knowledge/notion.js.map +1 -0
- package/dist/providers/marketing/index.d.ts +19 -0
- package/dist/providers/marketing/index.d.ts.map +1 -0
- package/dist/providers/marketing/index.js +18 -0
- package/dist/providers/marketing/index.js.map +1 -0
- package/dist/providers/marketing/mailchimp.d.ts +25 -0
- package/dist/providers/marketing/mailchimp.d.ts.map +1 -0
- package/dist/providers/marketing/mailchimp.js +444 -0
- package/dist/providers/marketing/mailchimp.js.map +1 -0
- package/dist/providers/media/cloudinary.d.ts +25 -0
- package/dist/providers/media/cloudinary.d.ts.map +1 -0
- package/dist/providers/media/cloudinary.js +319 -0
- package/dist/providers/media/cloudinary.js.map +1 -0
- package/dist/providers/media/index.d.ts +19 -0
- package/dist/providers/media/index.d.ts.map +1 -0
- package/dist/providers/media/index.js +18 -0
- package/dist/providers/media/index.js.map +1 -0
- package/dist/providers/messaging/index.d.ts +24 -0
- package/dist/providers/messaging/index.d.ts.map +1 -0
- package/dist/providers/messaging/index.js +21 -0
- package/dist/providers/messaging/index.js.map +1 -0
- package/dist/providers/messaging/slack.d.ts +25 -0
- package/dist/providers/messaging/slack.d.ts.map +1 -0
- package/dist/providers/messaging/slack.js +394 -0
- package/dist/providers/messaging/slack.js.map +1 -0
- package/dist/providers/messaging/twilio-sms.d.ts +25 -0
- package/dist/providers/messaging/twilio-sms.d.ts.map +1 -0
- package/dist/providers/messaging/twilio-sms.js +250 -0
- package/dist/providers/messaging/twilio-sms.js.map +1 -0
- package/dist/providers/project-management/index.d.ts +19 -0
- package/dist/providers/project-management/index.d.ts.map +1 -0
- package/dist/providers/project-management/index.js +18 -0
- package/dist/providers/project-management/index.js.map +1 -0
- package/dist/providers/project-management/linear.d.ts +25 -0
- package/dist/providers/project-management/linear.d.ts.map +1 -0
- package/dist/providers/project-management/linear.js +576 -0
- package/dist/providers/project-management/linear.js.map +1 -0
- package/dist/providers/registry.d.ts +41 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +87 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/spreadsheet/google-sheets.d.ts +25 -0
- package/dist/providers/spreadsheet/google-sheets.d.ts.map +1 -0
- package/dist/providers/spreadsheet/google-sheets.js +376 -0
- package/dist/providers/spreadsheet/google-sheets.js.map +1 -0
- package/dist/providers/spreadsheet/index.d.ts +20 -0
- package/dist/providers/spreadsheet/index.d.ts.map +1 -0
- package/dist/providers/spreadsheet/index.js +21 -0
- package/dist/providers/spreadsheet/index.js.map +1 -0
- package/dist/providers/spreadsheet/xlsx.d.ts +26 -0
- package/dist/providers/spreadsheet/xlsx.d.ts.map +1 -0
- package/dist/providers/spreadsheet/xlsx.js +424 -0
- package/dist/providers/spreadsheet/xlsx.js.map +1 -0
- package/dist/providers/storage/index.d.ts +30 -0
- package/dist/providers/storage/index.d.ts.map +1 -0
- package/dist/providers/storage/index.js +25 -0
- package/dist/providers/storage/index.js.map +1 -0
- package/dist/providers/storage/s3.d.ts +25 -0
- package/dist/providers/storage/s3.d.ts.map +1 -0
- package/dist/providers/storage/s3.js +420 -0
- package/dist/providers/storage/s3.js.map +1 -0
- package/dist/providers/support/index.d.ts +19 -0
- package/dist/providers/support/index.d.ts.map +1 -0
- package/dist/providers/support/index.js +18 -0
- package/dist/providers/support/index.js.map +1 -0
- package/dist/providers/support/zendesk.d.ts +25 -0
- package/dist/providers/support/zendesk.d.ts.map +1 -0
- package/dist/providers/support/zendesk.js +374 -0
- package/dist/providers/support/zendesk.js.map +1 -0
- package/dist/providers/tasks/index.d.ts +19 -0
- package/dist/providers/tasks/index.d.ts.map +1 -0
- package/dist/providers/tasks/index.js +18 -0
- package/dist/providers/tasks/index.js.map +1 -0
- package/dist/providers/tasks/todoist.d.ts +25 -0
- package/dist/providers/tasks/todoist.d.ts.map +1 -0
- package/dist/providers/tasks/todoist.js +287 -0
- package/dist/providers/tasks/todoist.js.map +1 -0
- package/dist/providers/types.d.ts +1753 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +10 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/video-conferencing/google-meet.d.ts +26 -0
- package/dist/providers/video-conferencing/google-meet.d.ts.map +1 -0
- package/dist/providers/video-conferencing/google-meet.js +287 -0
- package/dist/providers/video-conferencing/google-meet.js.map +1 -0
- package/dist/providers/video-conferencing/index.d.ts +22 -0
- package/dist/providers/video-conferencing/index.d.ts.map +1 -0
- package/dist/providers/video-conferencing/index.js +32 -0
- package/dist/providers/video-conferencing/index.js.map +1 -0
- package/dist/providers/video-conferencing/jitsi.d.ts +26 -0
- package/dist/providers/video-conferencing/jitsi.d.ts.map +1 -0
- package/dist/providers/video-conferencing/jitsi.js +255 -0
- package/dist/providers/video-conferencing/jitsi.js.map +1 -0
- package/dist/providers/video-conferencing/teams.d.ts +26 -0
- package/dist/providers/video-conferencing/teams.d.ts.map +1 -0
- package/dist/providers/video-conferencing/teams.js +271 -0
- package/dist/providers/video-conferencing/teams.js.map +1 -0
- package/dist/providers/video-conferencing/zoom.d.ts +25 -0
- package/dist/providers/video-conferencing/zoom.d.ts.map +1 -0
- package/dist/providers/video-conferencing/zoom.js +333 -0
- package/dist/providers/video-conferencing/zoom.js.map +1 -0
- package/dist/providers/voice/vapi.d.ts +27 -0
- package/dist/providers/voice/vapi.d.ts.map +1 -0
- package/dist/providers/voice/vapi.js +440 -0
- package/dist/providers/voice/vapi.js.map +1 -0
- package/dist/registry.d.ts +38 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +129 -0
- package/dist/registry.js.map +1 -0
- package/dist/tools/communication.d.ts +94 -0
- package/dist/tools/communication.d.ts.map +1 -0
- package/dist/tools/communication.js +185 -0
- package/dist/tools/communication.js.map +1 -0
- package/dist/tools/data.d.ts +61 -0
- package/dist/tools/data.d.ts.map +1 -0
- package/dist/tools/data.js +206 -0
- package/dist/tools/data.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +12 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/web.d.ts +45 -0
- package/dist/tools/web.d.ts.map +1 -0
- package/dist/tools/web.js +138 -0
- package/dist/tools/web.js.map +1 -0
- package/dist/types.d.ts +330 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
- package/src/define.ts +321 -0
- package/src/entities/advertising.ts +1086 -0
- package/src/entities/ai.ts +835 -0
- package/src/entities/analytics.ts +1690 -0
- package/src/entities/automation.ts +669 -0
- package/src/entities/communication.ts +1255 -0
- package/src/entities/crm.ts +1481 -0
- package/src/entities/design.ts +606 -0
- package/src/entities/development.ts +2392 -0
- package/src/entities/document.ts +930 -0
- package/src/entities/ecommerce.ts +1539 -0
- package/src/entities/experiment.ts +1139 -0
- package/src/entities/finance.ts +3907 -0
- package/src/entities/forms.ts +2021 -0
- package/src/entities/hr.ts +725 -0
- package/src/entities/identity.ts +1093 -0
- package/src/entities/index.ts +731 -0
- package/src/entities/infrastructure.ts +1254 -0
- package/src/entities/knowledge.ts +1547 -0
- package/src/entities/marketing.ts +1718 -0
- package/src/entities/media.ts +1747 -0
- package/src/entities/notification.ts +1260 -0
- package/src/entities/presentation.ts +1360 -0
- package/src/entities/productivity.ts +1411 -0
- package/src/entities/project-management.ts +1222 -0
- package/src/entities/recruiting.ts +797 -0
- package/src/entities/shipping.ts +566 -0
- package/src/entities/signature.ts +1204 -0
- package/src/entities/site.ts +244 -0
- package/src/entities/spreadsheet.ts +1434 -0
- package/src/entities/storage.ts +1290 -0
- package/src/entities/support.ts +1267 -0
- package/src/entities/video-conferencing.ts +1874 -0
- package/src/entities/video.ts +1035 -0
- package/src/entities.ts +1795 -0
- package/src/index.ts +176 -0
- package/src/providers/analytics/index.ts +21 -0
- package/src/providers/analytics/mixpanel.ts +311 -0
- package/src/providers/calendar/cal-com.ts +435 -0
- package/src/providers/calendar/google-calendar.ts +412 -0
- package/src/providers/calendar/index.ts +24 -0
- package/src/providers/crm/hubspot.ts +667 -0
- package/src/providers/crm/index.ts +21 -0
- package/src/providers/development/github.ts +608 -0
- package/src/providers/development/index.ts +21 -0
- package/src/providers/ecommerce/index.ts +21 -0
- package/src/providers/ecommerce/shopify.ts +451 -0
- package/src/providers/email/index.ts +24 -0
- package/src/providers/email/resend.ts +301 -0
- package/src/providers/email/sendgrid.ts +196 -0
- package/src/providers/finance/index.ts +21 -0
- package/src/providers/finance/stripe.ts +665 -0
- package/src/providers/forms/index.ts +21 -0
- package/src/providers/forms/typeform.ts +598 -0
- package/src/providers/index.ts +281 -0
- package/src/providers/knowledge/index.ts +21 -0
- package/src/providers/knowledge/notion.ts +497 -0
- package/src/providers/marketing/index.ts +21 -0
- package/src/providers/marketing/mailchimp.ts +656 -0
- package/src/providers/media/cloudinary.ts +373 -0
- package/src/providers/media/index.ts +21 -0
- package/src/providers/messaging/index.ts +24 -0
- package/src/providers/messaging/slack.ts +487 -0
- package/src/providers/messaging/twilio-sms.ts +301 -0
- package/src/providers/project-management/index.ts +21 -0
- package/src/providers/project-management/linear.ts +693 -0
- package/src/providers/registry.ts +119 -0
- package/src/providers/spreadsheet/google-sheets.ts +464 -0
- package/src/providers/spreadsheet/index.ts +24 -0
- package/src/providers/spreadsheet/xlsx.ts +542 -0
- package/src/providers/storage/index.ts +35 -0
- package/src/providers/storage/s3.ts +513 -0
- package/src/providers/support/index.ts +21 -0
- package/src/providers/support/zendesk.ts +417 -0
- package/src/providers/tasks/index.ts +21 -0
- package/src/providers/tasks/todoist.ts +407 -0
- package/src/providers/types.ts +2113 -0
- package/src/providers/video-conferencing/google-meet.ts +412 -0
- package/src/providers/video-conferencing/index.ts +35 -0
- package/src/providers/video-conferencing/jitsi.ts +324 -0
- package/src/providers/video-conferencing/teams.ts +408 -0
- package/src/providers/video-conferencing/zoom.ts +451 -0
- package/src/registry.ts +172 -0
- package/src/tools/communication.ts +256 -0
- package/src/tools/data.ts +236 -0
- package/src/tools/index.ts +12 -0
- package/src/tools/web.ts +161 -0
- package/src/types.ts +539 -0
- package/test/define.test.ts +367 -0
- package/test/registry.test.ts +444 -0
- package/test/tools.test.ts +453 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,1611 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marketing Entity Types (Nouns)
|
|
3
|
+
*
|
|
4
|
+
* Semantic type definitions for marketing digital tools that can be used by
|
|
5
|
+
* both remote human workers AND AI agents. Each entity defines:
|
|
6
|
+
* - Properties: The data fields
|
|
7
|
+
* - Actions: Operations that can be performed (Verbs)
|
|
8
|
+
* - Events: State changes that occur
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Campaign
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Marketing campaign entity
|
|
17
|
+
*
|
|
18
|
+
* Represents a marketing campaign with goals, budget, and tracking
|
|
19
|
+
*/
|
|
20
|
+
export const Campaign = {
|
|
21
|
+
singular: 'campaign',
|
|
22
|
+
plural: 'campaigns',
|
|
23
|
+
description: 'A marketing campaign with goals, budget, and performance tracking',
|
|
24
|
+
properties: {
|
|
25
|
+
// Identity
|
|
26
|
+
name: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
description: 'Campaign name',
|
|
29
|
+
},
|
|
30
|
+
description: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
optional: true,
|
|
33
|
+
description: 'Campaign description and goals',
|
|
34
|
+
},
|
|
35
|
+
// Type & Classification
|
|
36
|
+
type: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'Campaign type: email, social, paid-ads, content, event, webinar, seo',
|
|
39
|
+
examples: ['email', 'social', 'paid-ads', 'content', 'event', 'webinar', 'seo'],
|
|
40
|
+
},
|
|
41
|
+
category: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
optional: true,
|
|
44
|
+
description: 'Campaign category for organization',
|
|
45
|
+
},
|
|
46
|
+
tags: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
array: true,
|
|
49
|
+
optional: true,
|
|
50
|
+
description: 'Tags for categorization and filtering',
|
|
51
|
+
},
|
|
52
|
+
// Status & Timing
|
|
53
|
+
status: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: 'Campaign status: draft, scheduled, active, paused, completed, archived',
|
|
56
|
+
examples: ['draft', 'scheduled', 'active', 'paused', 'completed', 'archived'],
|
|
57
|
+
},
|
|
58
|
+
startDate: {
|
|
59
|
+
type: 'datetime',
|
|
60
|
+
optional: true,
|
|
61
|
+
description: 'Campaign start date',
|
|
62
|
+
},
|
|
63
|
+
endDate: {
|
|
64
|
+
type: 'datetime',
|
|
65
|
+
optional: true,
|
|
66
|
+
description: 'Campaign end date',
|
|
67
|
+
},
|
|
68
|
+
// Budget & Finance
|
|
69
|
+
budget: {
|
|
70
|
+
type: 'number',
|
|
71
|
+
optional: true,
|
|
72
|
+
description: 'Total campaign budget',
|
|
73
|
+
},
|
|
74
|
+
spent: {
|
|
75
|
+
type: 'number',
|
|
76
|
+
optional: true,
|
|
77
|
+
description: 'Amount spent so far',
|
|
78
|
+
},
|
|
79
|
+
currency: {
|
|
80
|
+
type: 'string',
|
|
81
|
+
optional: true,
|
|
82
|
+
description: 'Currency code (USD, EUR, etc.)',
|
|
83
|
+
examples: ['USD', 'EUR', 'GBP'],
|
|
84
|
+
},
|
|
85
|
+
// Goals & KPIs
|
|
86
|
+
goal: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
optional: true,
|
|
89
|
+
description: 'Campaign goal: awareness, leads, sales, engagement, traffic',
|
|
90
|
+
examples: ['awareness', 'leads', 'sales', 'engagement', 'traffic'],
|
|
91
|
+
},
|
|
92
|
+
targetImpressions: {
|
|
93
|
+
type: 'number',
|
|
94
|
+
optional: true,
|
|
95
|
+
description: 'Target number of impressions',
|
|
96
|
+
},
|
|
97
|
+
targetClicks: {
|
|
98
|
+
type: 'number',
|
|
99
|
+
optional: true,
|
|
100
|
+
description: 'Target number of clicks',
|
|
101
|
+
},
|
|
102
|
+
targetConversions: {
|
|
103
|
+
type: 'number',
|
|
104
|
+
optional: true,
|
|
105
|
+
description: 'Target number of conversions',
|
|
106
|
+
},
|
|
107
|
+
targetRevenue: {
|
|
108
|
+
type: 'number',
|
|
109
|
+
optional: true,
|
|
110
|
+
description: 'Target revenue amount',
|
|
111
|
+
},
|
|
112
|
+
// Performance Metrics
|
|
113
|
+
impressions: {
|
|
114
|
+
type: 'number',
|
|
115
|
+
optional: true,
|
|
116
|
+
description: 'Total impressions delivered',
|
|
117
|
+
},
|
|
118
|
+
clicks: {
|
|
119
|
+
type: 'number',
|
|
120
|
+
optional: true,
|
|
121
|
+
description: 'Total clicks received',
|
|
122
|
+
},
|
|
123
|
+
conversions: {
|
|
124
|
+
type: 'number',
|
|
125
|
+
optional: true,
|
|
126
|
+
description: 'Total conversions',
|
|
127
|
+
},
|
|
128
|
+
revenue: {
|
|
129
|
+
type: 'number',
|
|
130
|
+
optional: true,
|
|
131
|
+
description: 'Total revenue generated',
|
|
132
|
+
},
|
|
133
|
+
ctr: {
|
|
134
|
+
type: 'number',
|
|
135
|
+
optional: true,
|
|
136
|
+
description: 'Click-through rate (percentage)',
|
|
137
|
+
},
|
|
138
|
+
conversionRate: {
|
|
139
|
+
type: 'number',
|
|
140
|
+
optional: true,
|
|
141
|
+
description: 'Conversion rate (percentage)',
|
|
142
|
+
},
|
|
143
|
+
roi: {
|
|
144
|
+
type: 'number',
|
|
145
|
+
optional: true,
|
|
146
|
+
description: 'Return on investment (percentage)',
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
relationships: {
|
|
150
|
+
audience: {
|
|
151
|
+
type: 'Audience',
|
|
152
|
+
required: false,
|
|
153
|
+
description: 'Target audience for this campaign',
|
|
154
|
+
},
|
|
155
|
+
emailTemplates: {
|
|
156
|
+
type: 'EmailTemplate[]',
|
|
157
|
+
description: 'Email templates used in this campaign',
|
|
158
|
+
},
|
|
159
|
+
landingPages: {
|
|
160
|
+
type: 'LandingPage[]',
|
|
161
|
+
description: 'Landing pages associated with this campaign',
|
|
162
|
+
},
|
|
163
|
+
socialPosts: {
|
|
164
|
+
type: 'SocialPost[]',
|
|
165
|
+
description: 'Social media posts in this campaign',
|
|
166
|
+
},
|
|
167
|
+
adCreatives: {
|
|
168
|
+
type: 'AdCreative[]',
|
|
169
|
+
description: 'Ad creatives used in this campaign',
|
|
170
|
+
},
|
|
171
|
+
utmLinks: {
|
|
172
|
+
type: 'UTMLink[]',
|
|
173
|
+
description: 'Tracked URLs for this campaign',
|
|
174
|
+
},
|
|
175
|
+
formSubmissions: {
|
|
176
|
+
type: 'FormSubmission[]',
|
|
177
|
+
description: 'Form submissions generated by this campaign',
|
|
178
|
+
},
|
|
179
|
+
owner: {
|
|
180
|
+
type: 'Contact',
|
|
181
|
+
description: 'Campaign owner/manager',
|
|
182
|
+
},
|
|
183
|
+
team: {
|
|
184
|
+
type: 'Contact[]',
|
|
185
|
+
description: 'Team members working on this campaign',
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
actions: [
|
|
189
|
+
'create',
|
|
190
|
+
'update',
|
|
191
|
+
'delete',
|
|
192
|
+
'schedule',
|
|
193
|
+
'launch',
|
|
194
|
+
'pause',
|
|
195
|
+
'resume',
|
|
196
|
+
'complete',
|
|
197
|
+
'archive',
|
|
198
|
+
'duplicate',
|
|
199
|
+
'export',
|
|
200
|
+
'analyze',
|
|
201
|
+
'optimize',
|
|
202
|
+
],
|
|
203
|
+
events: [
|
|
204
|
+
'created',
|
|
205
|
+
'updated',
|
|
206
|
+
'deleted',
|
|
207
|
+
'scheduled',
|
|
208
|
+
'launched',
|
|
209
|
+
'paused',
|
|
210
|
+
'resumed',
|
|
211
|
+
'completed',
|
|
212
|
+
'archived',
|
|
213
|
+
'duplicated',
|
|
214
|
+
'goalReached',
|
|
215
|
+
'budgetExceeded',
|
|
216
|
+
],
|
|
217
|
+
};
|
|
218
|
+
// =============================================================================
|
|
219
|
+
// Audience
|
|
220
|
+
// =============================================================================
|
|
221
|
+
/**
|
|
222
|
+
* Target audience or segment entity
|
|
223
|
+
*
|
|
224
|
+
* Represents a group of people targeted by marketing efforts
|
|
225
|
+
*/
|
|
226
|
+
export const Audience = {
|
|
227
|
+
singular: 'audience',
|
|
228
|
+
plural: 'audiences',
|
|
229
|
+
description: 'A target audience or customer segment for marketing',
|
|
230
|
+
properties: {
|
|
231
|
+
// Identity
|
|
232
|
+
name: {
|
|
233
|
+
type: 'string',
|
|
234
|
+
description: 'Audience name',
|
|
235
|
+
},
|
|
236
|
+
description: {
|
|
237
|
+
type: 'string',
|
|
238
|
+
optional: true,
|
|
239
|
+
description: 'Audience description',
|
|
240
|
+
},
|
|
241
|
+
// Size & Stats
|
|
242
|
+
size: {
|
|
243
|
+
type: 'number',
|
|
244
|
+
optional: true,
|
|
245
|
+
description: 'Estimated or actual audience size',
|
|
246
|
+
},
|
|
247
|
+
activeCount: {
|
|
248
|
+
type: 'number',
|
|
249
|
+
optional: true,
|
|
250
|
+
description: 'Number of active/engaged members',
|
|
251
|
+
},
|
|
252
|
+
// Segmentation Criteria
|
|
253
|
+
criteria: {
|
|
254
|
+
type: 'json',
|
|
255
|
+
optional: true,
|
|
256
|
+
description: 'Segmentation criteria (demographics, behavior, etc.)',
|
|
257
|
+
},
|
|
258
|
+
demographics: {
|
|
259
|
+
type: 'json',
|
|
260
|
+
optional: true,
|
|
261
|
+
description: 'Demographic filters (age, gender, location, etc.)',
|
|
262
|
+
},
|
|
263
|
+
interests: {
|
|
264
|
+
type: 'string',
|
|
265
|
+
array: true,
|
|
266
|
+
optional: true,
|
|
267
|
+
description: 'Interest categories',
|
|
268
|
+
},
|
|
269
|
+
behaviors: {
|
|
270
|
+
type: 'json',
|
|
271
|
+
optional: true,
|
|
272
|
+
description: 'Behavioral targeting criteria',
|
|
273
|
+
},
|
|
274
|
+
// Geographic
|
|
275
|
+
countries: {
|
|
276
|
+
type: 'string',
|
|
277
|
+
array: true,
|
|
278
|
+
optional: true,
|
|
279
|
+
description: 'Target countries',
|
|
280
|
+
},
|
|
281
|
+
regions: {
|
|
282
|
+
type: 'string',
|
|
283
|
+
array: true,
|
|
284
|
+
optional: true,
|
|
285
|
+
description: 'Target regions/states',
|
|
286
|
+
},
|
|
287
|
+
cities: {
|
|
288
|
+
type: 'string',
|
|
289
|
+
array: true,
|
|
290
|
+
optional: true,
|
|
291
|
+
description: 'Target cities',
|
|
292
|
+
},
|
|
293
|
+
languages: {
|
|
294
|
+
type: 'string',
|
|
295
|
+
array: true,
|
|
296
|
+
optional: true,
|
|
297
|
+
description: 'Target languages',
|
|
298
|
+
},
|
|
299
|
+
// Status
|
|
300
|
+
status: {
|
|
301
|
+
type: 'string',
|
|
302
|
+
description: 'Audience status: active, archived, building',
|
|
303
|
+
examples: ['active', 'archived', 'building'],
|
|
304
|
+
},
|
|
305
|
+
// Source & Type
|
|
306
|
+
source: {
|
|
307
|
+
type: 'string',
|
|
308
|
+
optional: true,
|
|
309
|
+
description: 'How the audience was created: manual, imported, dynamic, lookalike',
|
|
310
|
+
examples: ['manual', 'imported', 'dynamic', 'lookalike'],
|
|
311
|
+
},
|
|
312
|
+
type: {
|
|
313
|
+
type: 'string',
|
|
314
|
+
optional: true,
|
|
315
|
+
description: 'Audience type: email-list, custom, retargeting, lookalike',
|
|
316
|
+
examples: ['email-list', 'custom', 'retargeting', 'lookalike'],
|
|
317
|
+
},
|
|
318
|
+
// Metadata
|
|
319
|
+
tags: {
|
|
320
|
+
type: 'string',
|
|
321
|
+
array: true,
|
|
322
|
+
optional: true,
|
|
323
|
+
description: 'Tags for organization',
|
|
324
|
+
},
|
|
325
|
+
lastUpdated: {
|
|
326
|
+
type: 'datetime',
|
|
327
|
+
optional: true,
|
|
328
|
+
description: 'When the audience was last updated',
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
relationships: {
|
|
332
|
+
campaigns: {
|
|
333
|
+
type: 'Campaign[]',
|
|
334
|
+
description: 'Campaigns targeting this audience',
|
|
335
|
+
},
|
|
336
|
+
contacts: {
|
|
337
|
+
type: 'Contact[]',
|
|
338
|
+
description: 'Contacts in this audience',
|
|
339
|
+
},
|
|
340
|
+
parentAudience: {
|
|
341
|
+
type: 'Audience',
|
|
342
|
+
required: false,
|
|
343
|
+
description: 'Parent audience if this is a sub-segment',
|
|
344
|
+
},
|
|
345
|
+
subAudiences: {
|
|
346
|
+
type: 'Audience[]',
|
|
347
|
+
description: 'Sub-segments of this audience',
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
actions: [
|
|
351
|
+
'create',
|
|
352
|
+
'update',
|
|
353
|
+
'delete',
|
|
354
|
+
'segment',
|
|
355
|
+
'export',
|
|
356
|
+
'import',
|
|
357
|
+
'refresh',
|
|
358
|
+
'merge',
|
|
359
|
+
'duplicate',
|
|
360
|
+
'archive',
|
|
361
|
+
'analyze',
|
|
362
|
+
],
|
|
363
|
+
events: [
|
|
364
|
+
'created',
|
|
365
|
+
'updated',
|
|
366
|
+
'deleted',
|
|
367
|
+
'segmented',
|
|
368
|
+
'exported',
|
|
369
|
+
'imported',
|
|
370
|
+
'refreshed',
|
|
371
|
+
'merged',
|
|
372
|
+
'archived',
|
|
373
|
+
'sizeChanged',
|
|
374
|
+
],
|
|
375
|
+
};
|
|
376
|
+
// =============================================================================
|
|
377
|
+
// EmailTemplate
|
|
378
|
+
// =============================================================================
|
|
379
|
+
/**
|
|
380
|
+
* Email template entity
|
|
381
|
+
*
|
|
382
|
+
* Represents an email template with subject, body, and variables
|
|
383
|
+
*/
|
|
384
|
+
export const EmailTemplate = {
|
|
385
|
+
singular: 'email template',
|
|
386
|
+
plural: 'email templates',
|
|
387
|
+
description: 'A reusable email template for marketing campaigns',
|
|
388
|
+
properties: {
|
|
389
|
+
// Identity
|
|
390
|
+
name: {
|
|
391
|
+
type: 'string',
|
|
392
|
+
description: 'Template name',
|
|
393
|
+
},
|
|
394
|
+
description: {
|
|
395
|
+
type: 'string',
|
|
396
|
+
optional: true,
|
|
397
|
+
description: 'Template description',
|
|
398
|
+
},
|
|
399
|
+
// Email Content
|
|
400
|
+
subject: {
|
|
401
|
+
type: 'string',
|
|
402
|
+
description: 'Email subject line (may contain variables)',
|
|
403
|
+
},
|
|
404
|
+
preheader: {
|
|
405
|
+
type: 'string',
|
|
406
|
+
optional: true,
|
|
407
|
+
description: 'Email preheader/preview text',
|
|
408
|
+
},
|
|
409
|
+
body: {
|
|
410
|
+
type: 'string',
|
|
411
|
+
description: 'Plain text email body',
|
|
412
|
+
},
|
|
413
|
+
html: {
|
|
414
|
+
type: 'string',
|
|
415
|
+
optional: true,
|
|
416
|
+
description: 'HTML email body',
|
|
417
|
+
},
|
|
418
|
+
// Sender Info
|
|
419
|
+
fromName: {
|
|
420
|
+
type: 'string',
|
|
421
|
+
optional: true,
|
|
422
|
+
description: 'Sender name',
|
|
423
|
+
},
|
|
424
|
+
fromEmail: {
|
|
425
|
+
type: 'string',
|
|
426
|
+
optional: true,
|
|
427
|
+
description: 'Sender email address',
|
|
428
|
+
},
|
|
429
|
+
replyTo: {
|
|
430
|
+
type: 'string',
|
|
431
|
+
optional: true,
|
|
432
|
+
description: 'Reply-to email address',
|
|
433
|
+
},
|
|
434
|
+
// Variables & Personalization
|
|
435
|
+
variables: {
|
|
436
|
+
type: 'string',
|
|
437
|
+
array: true,
|
|
438
|
+
optional: true,
|
|
439
|
+
description: 'Variable placeholders (e.g., {{firstName}}, {{company}})',
|
|
440
|
+
},
|
|
441
|
+
personalizationTags: {
|
|
442
|
+
type: 'json',
|
|
443
|
+
optional: true,
|
|
444
|
+
description: 'Available personalization tags and their descriptions',
|
|
445
|
+
},
|
|
446
|
+
// Design & Layout
|
|
447
|
+
category: {
|
|
448
|
+
type: 'string',
|
|
449
|
+
optional: true,
|
|
450
|
+
description: 'Template category: newsletter, promotional, transactional, welcome, abandoned-cart',
|
|
451
|
+
examples: ['newsletter', 'promotional', 'transactional', 'welcome', 'abandoned-cart'],
|
|
452
|
+
},
|
|
453
|
+
designFormat: {
|
|
454
|
+
type: 'string',
|
|
455
|
+
optional: true,
|
|
456
|
+
description: 'Design format: html, drag-drop, rich-text, plain-text',
|
|
457
|
+
examples: ['html', 'drag-drop', 'rich-text', 'plain-text'],
|
|
458
|
+
},
|
|
459
|
+
thumbnailUrl: {
|
|
460
|
+
type: 'url',
|
|
461
|
+
optional: true,
|
|
462
|
+
description: 'Preview thumbnail URL',
|
|
463
|
+
},
|
|
464
|
+
// Status & Version
|
|
465
|
+
status: {
|
|
466
|
+
type: 'string',
|
|
467
|
+
description: 'Template status: draft, active, archived',
|
|
468
|
+
examples: ['draft', 'active', 'archived'],
|
|
469
|
+
},
|
|
470
|
+
version: {
|
|
471
|
+
type: 'number',
|
|
472
|
+
optional: true,
|
|
473
|
+
description: 'Template version number',
|
|
474
|
+
},
|
|
475
|
+
// Performance
|
|
476
|
+
timesSent: {
|
|
477
|
+
type: 'number',
|
|
478
|
+
optional: true,
|
|
479
|
+
description: 'Number of times this template has been sent',
|
|
480
|
+
},
|
|
481
|
+
avgOpenRate: {
|
|
482
|
+
type: 'number',
|
|
483
|
+
optional: true,
|
|
484
|
+
description: 'Average open rate (percentage)',
|
|
485
|
+
},
|
|
486
|
+
avgClickRate: {
|
|
487
|
+
type: 'number',
|
|
488
|
+
optional: true,
|
|
489
|
+
description: 'Average click rate (percentage)',
|
|
490
|
+
},
|
|
491
|
+
// Metadata
|
|
492
|
+
tags: {
|
|
493
|
+
type: 'string',
|
|
494
|
+
array: true,
|
|
495
|
+
optional: true,
|
|
496
|
+
description: 'Tags for organization',
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
|
+
relationships: {
|
|
500
|
+
campaign: {
|
|
501
|
+
type: 'Campaign',
|
|
502
|
+
required: false,
|
|
503
|
+
description: 'Campaign this template belongs to',
|
|
504
|
+
},
|
|
505
|
+
author: {
|
|
506
|
+
type: 'Contact',
|
|
507
|
+
description: 'Template creator',
|
|
508
|
+
},
|
|
509
|
+
utmLinks: {
|
|
510
|
+
type: 'UTMLink[]',
|
|
511
|
+
description: 'Tracked links in this template',
|
|
512
|
+
},
|
|
513
|
+
},
|
|
514
|
+
actions: [
|
|
515
|
+
'create',
|
|
516
|
+
'update',
|
|
517
|
+
'delete',
|
|
518
|
+
'duplicate',
|
|
519
|
+
'preview',
|
|
520
|
+
'test',
|
|
521
|
+
'send',
|
|
522
|
+
'schedule',
|
|
523
|
+
'archive',
|
|
524
|
+
'restore',
|
|
525
|
+
'export',
|
|
526
|
+
'import',
|
|
527
|
+
],
|
|
528
|
+
events: [
|
|
529
|
+
'created',
|
|
530
|
+
'updated',
|
|
531
|
+
'deleted',
|
|
532
|
+
'duplicated',
|
|
533
|
+
'previewed',
|
|
534
|
+
'tested',
|
|
535
|
+
'sent',
|
|
536
|
+
'scheduled',
|
|
537
|
+
'archived',
|
|
538
|
+
'restored',
|
|
539
|
+
],
|
|
540
|
+
};
|
|
541
|
+
// =============================================================================
|
|
542
|
+
// LandingPage
|
|
543
|
+
// =============================================================================
|
|
544
|
+
/**
|
|
545
|
+
* Landing page entity
|
|
546
|
+
*
|
|
547
|
+
* Represents a marketing landing page with form and conversion tracking
|
|
548
|
+
*/
|
|
549
|
+
export const LandingPage = {
|
|
550
|
+
singular: 'landing page',
|
|
551
|
+
plural: 'landing pages',
|
|
552
|
+
description: 'A marketing landing page designed for conversion',
|
|
553
|
+
properties: {
|
|
554
|
+
// Identity
|
|
555
|
+
name: {
|
|
556
|
+
type: 'string',
|
|
557
|
+
description: 'Landing page name',
|
|
558
|
+
},
|
|
559
|
+
title: {
|
|
560
|
+
type: 'string',
|
|
561
|
+
description: 'Page title (HTML title tag)',
|
|
562
|
+
},
|
|
563
|
+
description: {
|
|
564
|
+
type: 'string',
|
|
565
|
+
optional: true,
|
|
566
|
+
description: 'Page description (meta description)',
|
|
567
|
+
},
|
|
568
|
+
// URL & Slug
|
|
569
|
+
url: {
|
|
570
|
+
type: 'url',
|
|
571
|
+
description: 'Full landing page URL',
|
|
572
|
+
},
|
|
573
|
+
slug: {
|
|
574
|
+
type: 'string',
|
|
575
|
+
optional: true,
|
|
576
|
+
description: 'URL slug',
|
|
577
|
+
},
|
|
578
|
+
domain: {
|
|
579
|
+
type: 'string',
|
|
580
|
+
optional: true,
|
|
581
|
+
description: 'Custom domain if applicable',
|
|
582
|
+
},
|
|
583
|
+
// Content
|
|
584
|
+
headline: {
|
|
585
|
+
type: 'string',
|
|
586
|
+
optional: true,
|
|
587
|
+
description: 'Main headline',
|
|
588
|
+
},
|
|
589
|
+
subheadline: {
|
|
590
|
+
type: 'string',
|
|
591
|
+
optional: true,
|
|
592
|
+
description: 'Subheadline',
|
|
593
|
+
},
|
|
594
|
+
body: {
|
|
595
|
+
type: 'markdown',
|
|
596
|
+
optional: true,
|
|
597
|
+
description: 'Page body content',
|
|
598
|
+
},
|
|
599
|
+
// Design
|
|
600
|
+
template: {
|
|
601
|
+
type: 'string',
|
|
602
|
+
optional: true,
|
|
603
|
+
description: 'Template used for this page',
|
|
604
|
+
},
|
|
605
|
+
theme: {
|
|
606
|
+
type: 'string',
|
|
607
|
+
optional: true,
|
|
608
|
+
description: 'Color theme or style',
|
|
609
|
+
},
|
|
610
|
+
thumbnailUrl: {
|
|
611
|
+
type: 'url',
|
|
612
|
+
optional: true,
|
|
613
|
+
description: 'Page screenshot/thumbnail URL',
|
|
614
|
+
},
|
|
615
|
+
// Form & CTA
|
|
616
|
+
hasForm: {
|
|
617
|
+
type: 'boolean',
|
|
618
|
+
optional: true,
|
|
619
|
+
description: 'Whether page includes a form',
|
|
620
|
+
},
|
|
621
|
+
formFields: {
|
|
622
|
+
type: 'json',
|
|
623
|
+
optional: true,
|
|
624
|
+
description: 'Form field definitions',
|
|
625
|
+
},
|
|
626
|
+
ctaText: {
|
|
627
|
+
type: 'string',
|
|
628
|
+
optional: true,
|
|
629
|
+
description: 'Call-to-action button text',
|
|
630
|
+
},
|
|
631
|
+
ctaUrl: {
|
|
632
|
+
type: 'url',
|
|
633
|
+
optional: true,
|
|
634
|
+
description: 'Call-to-action destination URL',
|
|
635
|
+
},
|
|
636
|
+
// Conversion Tracking
|
|
637
|
+
conversionGoal: {
|
|
638
|
+
type: 'string',
|
|
639
|
+
optional: true,
|
|
640
|
+
description: 'Conversion goal: form-submission, click, purchase, signup',
|
|
641
|
+
examples: ['form-submission', 'click', 'purchase', 'signup'],
|
|
642
|
+
},
|
|
643
|
+
trackingPixels: {
|
|
644
|
+
type: 'json',
|
|
645
|
+
optional: true,
|
|
646
|
+
description: 'Tracking pixels/scripts (GA, Facebook Pixel, etc.)',
|
|
647
|
+
},
|
|
648
|
+
// Status
|
|
649
|
+
status: {
|
|
650
|
+
type: 'string',
|
|
651
|
+
description: 'Page status: draft, published, archived, testing',
|
|
652
|
+
examples: ['draft', 'published', 'archived', 'testing'],
|
|
653
|
+
},
|
|
654
|
+
publishedAt: {
|
|
655
|
+
type: 'datetime',
|
|
656
|
+
optional: true,
|
|
657
|
+
description: 'When the page was published',
|
|
658
|
+
},
|
|
659
|
+
// SEO
|
|
660
|
+
metaTitle: {
|
|
661
|
+
type: 'string',
|
|
662
|
+
optional: true,
|
|
663
|
+
description: 'SEO meta title',
|
|
664
|
+
},
|
|
665
|
+
metaDescription: {
|
|
666
|
+
type: 'string',
|
|
667
|
+
optional: true,
|
|
668
|
+
description: 'SEO meta description',
|
|
669
|
+
},
|
|
670
|
+
keywords: {
|
|
671
|
+
type: 'string',
|
|
672
|
+
array: true,
|
|
673
|
+
optional: true,
|
|
674
|
+
description: 'SEO keywords',
|
|
675
|
+
},
|
|
676
|
+
// Performance Metrics
|
|
677
|
+
visits: {
|
|
678
|
+
type: 'number',
|
|
679
|
+
optional: true,
|
|
680
|
+
description: 'Total page visits',
|
|
681
|
+
},
|
|
682
|
+
uniqueVisits: {
|
|
683
|
+
type: 'number',
|
|
684
|
+
optional: true,
|
|
685
|
+
description: 'Unique visitors',
|
|
686
|
+
},
|
|
687
|
+
conversions: {
|
|
688
|
+
type: 'number',
|
|
689
|
+
optional: true,
|
|
690
|
+
description: 'Total conversions',
|
|
691
|
+
},
|
|
692
|
+
conversionRate: {
|
|
693
|
+
type: 'number',
|
|
694
|
+
optional: true,
|
|
695
|
+
description: 'Conversion rate (percentage)',
|
|
696
|
+
},
|
|
697
|
+
bounceRate: {
|
|
698
|
+
type: 'number',
|
|
699
|
+
optional: true,
|
|
700
|
+
description: 'Bounce rate (percentage)',
|
|
701
|
+
},
|
|
702
|
+
avgTimeOnPage: {
|
|
703
|
+
type: 'number',
|
|
704
|
+
optional: true,
|
|
705
|
+
description: 'Average time on page in seconds',
|
|
706
|
+
},
|
|
707
|
+
// Metadata
|
|
708
|
+
tags: {
|
|
709
|
+
type: 'string',
|
|
710
|
+
array: true,
|
|
711
|
+
optional: true,
|
|
712
|
+
description: 'Tags for organization',
|
|
713
|
+
},
|
|
714
|
+
},
|
|
715
|
+
relationships: {
|
|
716
|
+
campaign: {
|
|
717
|
+
type: 'Campaign',
|
|
718
|
+
required: false,
|
|
719
|
+
description: 'Campaign this landing page belongs to',
|
|
720
|
+
},
|
|
721
|
+
formSubmissions: {
|
|
722
|
+
type: 'FormSubmission[]',
|
|
723
|
+
backref: 'landingPage',
|
|
724
|
+
description: 'Form submissions from this page',
|
|
725
|
+
},
|
|
726
|
+
utmLinks: {
|
|
727
|
+
type: 'UTMLink[]',
|
|
728
|
+
description: 'Tracked links on this page',
|
|
729
|
+
},
|
|
730
|
+
owner: {
|
|
731
|
+
type: 'Contact',
|
|
732
|
+
description: 'Page owner/creator',
|
|
733
|
+
},
|
|
734
|
+
variants: {
|
|
735
|
+
type: 'LandingPage[]',
|
|
736
|
+
description: 'A/B test variants of this page',
|
|
737
|
+
},
|
|
738
|
+
},
|
|
739
|
+
actions: [
|
|
740
|
+
'create',
|
|
741
|
+
'update',
|
|
742
|
+
'delete',
|
|
743
|
+
'publish',
|
|
744
|
+
'unpublish',
|
|
745
|
+
'duplicate',
|
|
746
|
+
'preview',
|
|
747
|
+
'test',
|
|
748
|
+
'archive',
|
|
749
|
+
'restore',
|
|
750
|
+
'optimize',
|
|
751
|
+
'export',
|
|
752
|
+
],
|
|
753
|
+
events: [
|
|
754
|
+
'created',
|
|
755
|
+
'updated',
|
|
756
|
+
'deleted',
|
|
757
|
+
'published',
|
|
758
|
+
'unpublished',
|
|
759
|
+
'duplicated',
|
|
760
|
+
'previewed',
|
|
761
|
+
'visited',
|
|
762
|
+
'converted',
|
|
763
|
+
'archived',
|
|
764
|
+
],
|
|
765
|
+
};
|
|
766
|
+
// =============================================================================
|
|
767
|
+
// FormSubmission
|
|
768
|
+
// =============================================================================
|
|
769
|
+
/**
|
|
770
|
+
* Form submission entity
|
|
771
|
+
*
|
|
772
|
+
* Represents a lead capture or form submission from a landing page
|
|
773
|
+
*/
|
|
774
|
+
export const FormSubmission = {
|
|
775
|
+
singular: 'form submission',
|
|
776
|
+
plural: 'form submissions',
|
|
777
|
+
description: 'A form submission or lead capture from a marketing form',
|
|
778
|
+
properties: {
|
|
779
|
+
// Form Data
|
|
780
|
+
formData: {
|
|
781
|
+
type: 'json',
|
|
782
|
+
description: 'Submitted form field data (key-value pairs)',
|
|
783
|
+
},
|
|
784
|
+
// Common Fields (duplicated for easier access)
|
|
785
|
+
email: {
|
|
786
|
+
type: 'string',
|
|
787
|
+
optional: true,
|
|
788
|
+
description: 'Submitted email address',
|
|
789
|
+
},
|
|
790
|
+
name: {
|
|
791
|
+
type: 'string',
|
|
792
|
+
optional: true,
|
|
793
|
+
description: 'Submitted name',
|
|
794
|
+
},
|
|
795
|
+
phone: {
|
|
796
|
+
type: 'string',
|
|
797
|
+
optional: true,
|
|
798
|
+
description: 'Submitted phone number',
|
|
799
|
+
},
|
|
800
|
+
company: {
|
|
801
|
+
type: 'string',
|
|
802
|
+
optional: true,
|
|
803
|
+
description: 'Submitted company name',
|
|
804
|
+
},
|
|
805
|
+
message: {
|
|
806
|
+
type: 'string',
|
|
807
|
+
optional: true,
|
|
808
|
+
description: 'Submitted message or comments',
|
|
809
|
+
},
|
|
810
|
+
// Source & Attribution
|
|
811
|
+
source: {
|
|
812
|
+
type: 'string',
|
|
813
|
+
optional: true,
|
|
814
|
+
description: 'Traffic source',
|
|
815
|
+
},
|
|
816
|
+
medium: {
|
|
817
|
+
type: 'string',
|
|
818
|
+
optional: true,
|
|
819
|
+
description: 'Traffic medium',
|
|
820
|
+
},
|
|
821
|
+
referrer: {
|
|
822
|
+
type: 'url',
|
|
823
|
+
optional: true,
|
|
824
|
+
description: 'Referring URL',
|
|
825
|
+
},
|
|
826
|
+
// User Agent & Device
|
|
827
|
+
userAgent: {
|
|
828
|
+
type: 'string',
|
|
829
|
+
optional: true,
|
|
830
|
+
description: 'Browser user agent string',
|
|
831
|
+
},
|
|
832
|
+
device: {
|
|
833
|
+
type: 'string',
|
|
834
|
+
optional: true,
|
|
835
|
+
description: 'Device type: desktop, mobile, tablet',
|
|
836
|
+
examples: ['desktop', 'mobile', 'tablet'],
|
|
837
|
+
},
|
|
838
|
+
browser: {
|
|
839
|
+
type: 'string',
|
|
840
|
+
optional: true,
|
|
841
|
+
description: 'Browser name',
|
|
842
|
+
},
|
|
843
|
+
os: {
|
|
844
|
+
type: 'string',
|
|
845
|
+
optional: true,
|
|
846
|
+
description: 'Operating system',
|
|
847
|
+
},
|
|
848
|
+
// Location
|
|
849
|
+
ipAddress: {
|
|
850
|
+
type: 'string',
|
|
851
|
+
optional: true,
|
|
852
|
+
description: 'Submitter IP address',
|
|
853
|
+
},
|
|
854
|
+
country: {
|
|
855
|
+
type: 'string',
|
|
856
|
+
optional: true,
|
|
857
|
+
description: 'Country from IP geolocation',
|
|
858
|
+
},
|
|
859
|
+
region: {
|
|
860
|
+
type: 'string',
|
|
861
|
+
optional: true,
|
|
862
|
+
description: 'Region/state from IP geolocation',
|
|
863
|
+
},
|
|
864
|
+
city: {
|
|
865
|
+
type: 'string',
|
|
866
|
+
optional: true,
|
|
867
|
+
description: 'City from IP geolocation',
|
|
868
|
+
},
|
|
869
|
+
// Status & Processing
|
|
870
|
+
status: {
|
|
871
|
+
type: 'string',
|
|
872
|
+
description: 'Submission status: new, contacted, qualified, converted, spam, deleted',
|
|
873
|
+
examples: ['new', 'contacted', 'qualified', 'converted', 'spam', 'deleted'],
|
|
874
|
+
},
|
|
875
|
+
qualityScore: {
|
|
876
|
+
type: 'number',
|
|
877
|
+
optional: true,
|
|
878
|
+
description: 'Lead quality score (0-100)',
|
|
879
|
+
},
|
|
880
|
+
spam: {
|
|
881
|
+
type: 'boolean',
|
|
882
|
+
optional: true,
|
|
883
|
+
description: 'Whether flagged as spam',
|
|
884
|
+
},
|
|
885
|
+
// Notes & Follow-up
|
|
886
|
+
notes: {
|
|
887
|
+
type: 'string',
|
|
888
|
+
optional: true,
|
|
889
|
+
description: 'Internal notes about this submission',
|
|
890
|
+
},
|
|
891
|
+
assignedTo: {
|
|
892
|
+
type: 'string',
|
|
893
|
+
optional: true,
|
|
894
|
+
description: 'User ID this submission is assigned to',
|
|
895
|
+
},
|
|
896
|
+
// Metadata
|
|
897
|
+
submittedAt: {
|
|
898
|
+
type: 'datetime',
|
|
899
|
+
description: 'Submission timestamp',
|
|
900
|
+
},
|
|
901
|
+
tags: {
|
|
902
|
+
type: 'string',
|
|
903
|
+
array: true,
|
|
904
|
+
optional: true,
|
|
905
|
+
description: 'Tags for organization',
|
|
906
|
+
},
|
|
907
|
+
},
|
|
908
|
+
relationships: {
|
|
909
|
+
landingPage: {
|
|
910
|
+
type: 'LandingPage',
|
|
911
|
+
backref: 'formSubmissions',
|
|
912
|
+
required: false,
|
|
913
|
+
description: 'Landing page where form was submitted',
|
|
914
|
+
},
|
|
915
|
+
campaign: {
|
|
916
|
+
type: 'Campaign',
|
|
917
|
+
required: false,
|
|
918
|
+
description: 'Campaign this submission is attributed to',
|
|
919
|
+
},
|
|
920
|
+
contact: {
|
|
921
|
+
type: 'Contact',
|
|
922
|
+
required: false,
|
|
923
|
+
description: 'Created or matched contact record',
|
|
924
|
+
},
|
|
925
|
+
utmLink: {
|
|
926
|
+
type: 'UTMLink',
|
|
927
|
+
required: false,
|
|
928
|
+
description: 'UTM link that drove this submission',
|
|
929
|
+
},
|
|
930
|
+
assignee: {
|
|
931
|
+
type: 'Contact',
|
|
932
|
+
required: false,
|
|
933
|
+
description: 'Person assigned to follow up',
|
|
934
|
+
},
|
|
935
|
+
},
|
|
936
|
+
actions: [
|
|
937
|
+
'create',
|
|
938
|
+
'update',
|
|
939
|
+
'delete',
|
|
940
|
+
'qualify',
|
|
941
|
+
'contact',
|
|
942
|
+
'convert',
|
|
943
|
+
'assign',
|
|
944
|
+
'markSpam',
|
|
945
|
+
'markNotSpam',
|
|
946
|
+
'export',
|
|
947
|
+
'merge',
|
|
948
|
+
],
|
|
949
|
+
events: [
|
|
950
|
+
'submitted',
|
|
951
|
+
'updated',
|
|
952
|
+
'deleted',
|
|
953
|
+
'qualified',
|
|
954
|
+
'contacted',
|
|
955
|
+
'converted',
|
|
956
|
+
'assigned',
|
|
957
|
+
'markedSpam',
|
|
958
|
+
'exported',
|
|
959
|
+
],
|
|
960
|
+
};
|
|
961
|
+
// =============================================================================
|
|
962
|
+
// SocialPost
|
|
963
|
+
// =============================================================================
|
|
964
|
+
/**
|
|
965
|
+
* Social media post entity
|
|
966
|
+
*
|
|
967
|
+
* Represents a social media post scheduled or published across platforms
|
|
968
|
+
*/
|
|
969
|
+
export const SocialPost = {
|
|
970
|
+
singular: 'social post',
|
|
971
|
+
plural: 'social posts',
|
|
972
|
+
description: 'A social media post for one or more platforms',
|
|
973
|
+
properties: {
|
|
974
|
+
// Content
|
|
975
|
+
message: {
|
|
976
|
+
type: 'string',
|
|
977
|
+
description: 'Post text content',
|
|
978
|
+
},
|
|
979
|
+
mediaUrls: {
|
|
980
|
+
type: 'url',
|
|
981
|
+
array: true,
|
|
982
|
+
optional: true,
|
|
983
|
+
description: 'Attached media URLs (images, videos)',
|
|
984
|
+
},
|
|
985
|
+
mediaType: {
|
|
986
|
+
type: 'string',
|
|
987
|
+
optional: true,
|
|
988
|
+
description: 'Media type: image, video, gif, carousel',
|
|
989
|
+
examples: ['image', 'video', 'gif', 'carousel'],
|
|
990
|
+
},
|
|
991
|
+
link: {
|
|
992
|
+
type: 'url',
|
|
993
|
+
optional: true,
|
|
994
|
+
description: 'Shared link URL',
|
|
995
|
+
},
|
|
996
|
+
linkPreview: {
|
|
997
|
+
type: 'json',
|
|
998
|
+
optional: true,
|
|
999
|
+
description: 'Link preview card data',
|
|
1000
|
+
},
|
|
1001
|
+
// Platform & Targeting
|
|
1002
|
+
platform: {
|
|
1003
|
+
type: 'string',
|
|
1004
|
+
description: 'Social platform: facebook, instagram, twitter, linkedin, tiktok, youtube',
|
|
1005
|
+
examples: ['facebook', 'instagram', 'twitter', 'linkedin', 'tiktok', 'youtube'],
|
|
1006
|
+
},
|
|
1007
|
+
accountId: {
|
|
1008
|
+
type: 'string',
|
|
1009
|
+
optional: true,
|
|
1010
|
+
description: 'Platform account/page identifier',
|
|
1011
|
+
},
|
|
1012
|
+
accountName: {
|
|
1013
|
+
type: 'string',
|
|
1014
|
+
optional: true,
|
|
1015
|
+
description: 'Platform account/page name',
|
|
1016
|
+
},
|
|
1017
|
+
// Scheduling
|
|
1018
|
+
status: {
|
|
1019
|
+
type: 'string',
|
|
1020
|
+
description: 'Post status: draft, scheduled, published, failed, deleted',
|
|
1021
|
+
examples: ['draft', 'scheduled', 'published', 'failed', 'deleted'],
|
|
1022
|
+
},
|
|
1023
|
+
scheduledAt: {
|
|
1024
|
+
type: 'datetime',
|
|
1025
|
+
optional: true,
|
|
1026
|
+
description: 'Scheduled publish time',
|
|
1027
|
+
},
|
|
1028
|
+
publishedAt: {
|
|
1029
|
+
type: 'datetime',
|
|
1030
|
+
optional: true,
|
|
1031
|
+
description: 'Actual publish time',
|
|
1032
|
+
},
|
|
1033
|
+
// Platform-specific
|
|
1034
|
+
platformPostId: {
|
|
1035
|
+
type: 'string',
|
|
1036
|
+
optional: true,
|
|
1037
|
+
description: 'Post ID on the platform',
|
|
1038
|
+
},
|
|
1039
|
+
platformUrl: {
|
|
1040
|
+
type: 'url',
|
|
1041
|
+
optional: true,
|
|
1042
|
+
description: 'Direct URL to the post on the platform',
|
|
1043
|
+
},
|
|
1044
|
+
// Hashtags & Mentions
|
|
1045
|
+
hashtags: {
|
|
1046
|
+
type: 'string',
|
|
1047
|
+
array: true,
|
|
1048
|
+
optional: true,
|
|
1049
|
+
description: 'Hashtags used in the post',
|
|
1050
|
+
},
|
|
1051
|
+
mentions: {
|
|
1052
|
+
type: 'string',
|
|
1053
|
+
array: true,
|
|
1054
|
+
optional: true,
|
|
1055
|
+
description: 'User handles mentioned',
|
|
1056
|
+
},
|
|
1057
|
+
// Engagement Metrics
|
|
1058
|
+
likes: {
|
|
1059
|
+
type: 'number',
|
|
1060
|
+
optional: true,
|
|
1061
|
+
description: 'Number of likes/reactions',
|
|
1062
|
+
},
|
|
1063
|
+
comments: {
|
|
1064
|
+
type: 'number',
|
|
1065
|
+
optional: true,
|
|
1066
|
+
description: 'Number of comments',
|
|
1067
|
+
},
|
|
1068
|
+
shares: {
|
|
1069
|
+
type: 'number',
|
|
1070
|
+
optional: true,
|
|
1071
|
+
description: 'Number of shares/retweets',
|
|
1072
|
+
},
|
|
1073
|
+
clicks: {
|
|
1074
|
+
type: 'number',
|
|
1075
|
+
optional: true,
|
|
1076
|
+
description: 'Number of link clicks',
|
|
1077
|
+
},
|
|
1078
|
+
impressions: {
|
|
1079
|
+
type: 'number',
|
|
1080
|
+
optional: true,
|
|
1081
|
+
description: 'Total impressions',
|
|
1082
|
+
},
|
|
1083
|
+
reach: {
|
|
1084
|
+
type: 'number',
|
|
1085
|
+
optional: true,
|
|
1086
|
+
description: 'Unique reach',
|
|
1087
|
+
},
|
|
1088
|
+
engagementRate: {
|
|
1089
|
+
type: 'number',
|
|
1090
|
+
optional: true,
|
|
1091
|
+
description: 'Engagement rate (percentage)',
|
|
1092
|
+
},
|
|
1093
|
+
// Metadata
|
|
1094
|
+
tags: {
|
|
1095
|
+
type: 'string',
|
|
1096
|
+
array: true,
|
|
1097
|
+
optional: true,
|
|
1098
|
+
description: 'Internal tags for organization',
|
|
1099
|
+
},
|
|
1100
|
+
notes: {
|
|
1101
|
+
type: 'string',
|
|
1102
|
+
optional: true,
|
|
1103
|
+
description: 'Internal notes',
|
|
1104
|
+
},
|
|
1105
|
+
},
|
|
1106
|
+
relationships: {
|
|
1107
|
+
campaign: {
|
|
1108
|
+
type: 'Campaign',
|
|
1109
|
+
required: false,
|
|
1110
|
+
description: 'Campaign this post belongs to',
|
|
1111
|
+
},
|
|
1112
|
+
utmLink: {
|
|
1113
|
+
type: 'UTMLink',
|
|
1114
|
+
required: false,
|
|
1115
|
+
description: 'Tracked URL included in post',
|
|
1116
|
+
},
|
|
1117
|
+
author: {
|
|
1118
|
+
type: 'Contact',
|
|
1119
|
+
description: 'Post creator',
|
|
1120
|
+
},
|
|
1121
|
+
},
|
|
1122
|
+
actions: [
|
|
1123
|
+
'create',
|
|
1124
|
+
'update',
|
|
1125
|
+
'delete',
|
|
1126
|
+
'schedule',
|
|
1127
|
+
'publish',
|
|
1128
|
+
'cancel',
|
|
1129
|
+
'reschedule',
|
|
1130
|
+
'boost',
|
|
1131
|
+
'preview',
|
|
1132
|
+
'analyze',
|
|
1133
|
+
'export',
|
|
1134
|
+
],
|
|
1135
|
+
events: [
|
|
1136
|
+
'created',
|
|
1137
|
+
'updated',
|
|
1138
|
+
'deleted',
|
|
1139
|
+
'scheduled',
|
|
1140
|
+
'published',
|
|
1141
|
+
'failed',
|
|
1142
|
+
'canceled',
|
|
1143
|
+
'rescheduled',
|
|
1144
|
+
'boosted',
|
|
1145
|
+
'liked',
|
|
1146
|
+
'commented',
|
|
1147
|
+
'shared',
|
|
1148
|
+
],
|
|
1149
|
+
};
|
|
1150
|
+
// =============================================================================
|
|
1151
|
+
// AdCreative
|
|
1152
|
+
// =============================================================================
|
|
1153
|
+
/**
|
|
1154
|
+
* Ad creative entity
|
|
1155
|
+
*
|
|
1156
|
+
* Represents an advertisement creative with copy, images, and CTA
|
|
1157
|
+
*/
|
|
1158
|
+
export const AdCreative = {
|
|
1159
|
+
singular: 'ad creative',
|
|
1160
|
+
plural: 'ad creatives',
|
|
1161
|
+
description: 'An advertisement creative for paid campaigns',
|
|
1162
|
+
properties: {
|
|
1163
|
+
// Identity
|
|
1164
|
+
name: {
|
|
1165
|
+
type: 'string',
|
|
1166
|
+
description: 'Creative name (internal)',
|
|
1167
|
+
},
|
|
1168
|
+
description: {
|
|
1169
|
+
type: 'string',
|
|
1170
|
+
optional: true,
|
|
1171
|
+
description: 'Internal description',
|
|
1172
|
+
},
|
|
1173
|
+
// Format & Type
|
|
1174
|
+
format: {
|
|
1175
|
+
type: 'string',
|
|
1176
|
+
description: 'Ad format: image, video, carousel, collection, story, banner',
|
|
1177
|
+
examples: ['image', 'video', 'carousel', 'collection', 'story', 'banner'],
|
|
1178
|
+
},
|
|
1179
|
+
adType: {
|
|
1180
|
+
type: 'string',
|
|
1181
|
+
optional: true,
|
|
1182
|
+
description: 'Ad type: display, search, social, video, native',
|
|
1183
|
+
examples: ['display', 'search', 'social', 'video', 'native'],
|
|
1184
|
+
},
|
|
1185
|
+
// Creative Assets
|
|
1186
|
+
headline: {
|
|
1187
|
+
type: 'string',
|
|
1188
|
+
optional: true,
|
|
1189
|
+
description: 'Primary headline',
|
|
1190
|
+
},
|
|
1191
|
+
body: {
|
|
1192
|
+
type: 'string',
|
|
1193
|
+
optional: true,
|
|
1194
|
+
description: 'Ad body copy',
|
|
1195
|
+
},
|
|
1196
|
+
adDescription: {
|
|
1197
|
+
type: 'string',
|
|
1198
|
+
optional: true,
|
|
1199
|
+
description: 'Ad description text',
|
|
1200
|
+
},
|
|
1201
|
+
imageUrl: {
|
|
1202
|
+
type: 'url',
|
|
1203
|
+
optional: true,
|
|
1204
|
+
description: 'Primary image URL',
|
|
1205
|
+
},
|
|
1206
|
+
videoUrl: {
|
|
1207
|
+
type: 'url',
|
|
1208
|
+
optional: true,
|
|
1209
|
+
description: 'Video URL',
|
|
1210
|
+
},
|
|
1211
|
+
thumbnailUrl: {
|
|
1212
|
+
type: 'url',
|
|
1213
|
+
optional: true,
|
|
1214
|
+
description: 'Video thumbnail or creative preview',
|
|
1215
|
+
},
|
|
1216
|
+
mediaUrls: {
|
|
1217
|
+
type: 'url',
|
|
1218
|
+
array: true,
|
|
1219
|
+
optional: true,
|
|
1220
|
+
description: 'Multiple media assets (for carousel, etc.)',
|
|
1221
|
+
},
|
|
1222
|
+
// Call to Action
|
|
1223
|
+
ctaText: {
|
|
1224
|
+
type: 'string',
|
|
1225
|
+
optional: true,
|
|
1226
|
+
description: 'Call-to-action button text',
|
|
1227
|
+
},
|
|
1228
|
+
ctaType: {
|
|
1229
|
+
type: 'string',
|
|
1230
|
+
optional: true,
|
|
1231
|
+
description: 'CTA type: learn-more, shop-now, sign-up, download, contact',
|
|
1232
|
+
examples: ['learn-more', 'shop-now', 'sign-up', 'download', 'contact'],
|
|
1233
|
+
},
|
|
1234
|
+
destinationUrl: {
|
|
1235
|
+
type: 'url',
|
|
1236
|
+
optional: true,
|
|
1237
|
+
description: 'Landing page URL',
|
|
1238
|
+
},
|
|
1239
|
+
// Dimensions & Specs
|
|
1240
|
+
dimensions: {
|
|
1241
|
+
type: 'json',
|
|
1242
|
+
optional: true,
|
|
1243
|
+
description: 'Creative dimensions (width x height)',
|
|
1244
|
+
},
|
|
1245
|
+
aspectRatio: {
|
|
1246
|
+
type: 'string',
|
|
1247
|
+
optional: true,
|
|
1248
|
+
description: 'Aspect ratio (16:9, 1:1, 9:16, etc.)',
|
|
1249
|
+
examples: ['16:9', '1:1', '9:16', '4:5'],
|
|
1250
|
+
},
|
|
1251
|
+
fileSize: {
|
|
1252
|
+
type: 'number',
|
|
1253
|
+
optional: true,
|
|
1254
|
+
description: 'File size in bytes',
|
|
1255
|
+
},
|
|
1256
|
+
duration: {
|
|
1257
|
+
type: 'number',
|
|
1258
|
+
optional: true,
|
|
1259
|
+
description: 'Video duration in seconds',
|
|
1260
|
+
},
|
|
1261
|
+
// Platform & Placement
|
|
1262
|
+
platform: {
|
|
1263
|
+
type: 'string',
|
|
1264
|
+
optional: true,
|
|
1265
|
+
description: 'Target platform: facebook, instagram, google, linkedin, twitter',
|
|
1266
|
+
examples: ['facebook', 'instagram', 'google', 'linkedin', 'twitter'],
|
|
1267
|
+
},
|
|
1268
|
+
placement: {
|
|
1269
|
+
type: 'string',
|
|
1270
|
+
optional: true,
|
|
1271
|
+
description: 'Ad placement: feed, story, search, display, video',
|
|
1272
|
+
examples: ['feed', 'story', 'search', 'display', 'video'],
|
|
1273
|
+
},
|
|
1274
|
+
// Status
|
|
1275
|
+
status: {
|
|
1276
|
+
type: 'string',
|
|
1277
|
+
description: 'Creative status: draft, active, paused, archived, rejected',
|
|
1278
|
+
examples: ['draft', 'active', 'paused', 'archived', 'rejected'],
|
|
1279
|
+
},
|
|
1280
|
+
approvalStatus: {
|
|
1281
|
+
type: 'string',
|
|
1282
|
+
optional: true,
|
|
1283
|
+
description: 'Platform approval status: pending, approved, rejected',
|
|
1284
|
+
examples: ['pending', 'approved', 'rejected'],
|
|
1285
|
+
},
|
|
1286
|
+
rejectionReason: {
|
|
1287
|
+
type: 'string',
|
|
1288
|
+
optional: true,
|
|
1289
|
+
description: 'Reason for rejection if applicable',
|
|
1290
|
+
},
|
|
1291
|
+
// Performance Metrics
|
|
1292
|
+
impressions: {
|
|
1293
|
+
type: 'number',
|
|
1294
|
+
optional: true,
|
|
1295
|
+
description: 'Total impressions',
|
|
1296
|
+
},
|
|
1297
|
+
clicks: {
|
|
1298
|
+
type: 'number',
|
|
1299
|
+
optional: true,
|
|
1300
|
+
description: 'Total clicks',
|
|
1301
|
+
},
|
|
1302
|
+
conversions: {
|
|
1303
|
+
type: 'number',
|
|
1304
|
+
optional: true,
|
|
1305
|
+
description: 'Total conversions',
|
|
1306
|
+
},
|
|
1307
|
+
ctr: {
|
|
1308
|
+
type: 'number',
|
|
1309
|
+
optional: true,
|
|
1310
|
+
description: 'Click-through rate (percentage)',
|
|
1311
|
+
},
|
|
1312
|
+
conversionRate: {
|
|
1313
|
+
type: 'number',
|
|
1314
|
+
optional: true,
|
|
1315
|
+
description: 'Conversion rate (percentage)',
|
|
1316
|
+
},
|
|
1317
|
+
spend: {
|
|
1318
|
+
type: 'number',
|
|
1319
|
+
optional: true,
|
|
1320
|
+
description: 'Total spend on this creative',
|
|
1321
|
+
},
|
|
1322
|
+
cpc: {
|
|
1323
|
+
type: 'number',
|
|
1324
|
+
optional: true,
|
|
1325
|
+
description: 'Cost per click',
|
|
1326
|
+
},
|
|
1327
|
+
cpm: {
|
|
1328
|
+
type: 'number',
|
|
1329
|
+
optional: true,
|
|
1330
|
+
description: 'Cost per thousand impressions',
|
|
1331
|
+
},
|
|
1332
|
+
cpa: {
|
|
1333
|
+
type: 'number',
|
|
1334
|
+
optional: true,
|
|
1335
|
+
description: 'Cost per acquisition',
|
|
1336
|
+
},
|
|
1337
|
+
// Metadata
|
|
1338
|
+
tags: {
|
|
1339
|
+
type: 'string',
|
|
1340
|
+
array: true,
|
|
1341
|
+
optional: true,
|
|
1342
|
+
description: 'Tags for organization',
|
|
1343
|
+
},
|
|
1344
|
+
},
|
|
1345
|
+
relationships: {
|
|
1346
|
+
campaign: {
|
|
1347
|
+
type: 'Campaign',
|
|
1348
|
+
required: false,
|
|
1349
|
+
description: 'Campaign this creative belongs to',
|
|
1350
|
+
},
|
|
1351
|
+
utmLink: {
|
|
1352
|
+
type: 'UTMLink',
|
|
1353
|
+
required: false,
|
|
1354
|
+
description: 'Tracked URL for this creative',
|
|
1355
|
+
},
|
|
1356
|
+
audience: {
|
|
1357
|
+
type: 'Audience',
|
|
1358
|
+
required: false,
|
|
1359
|
+
description: 'Target audience',
|
|
1360
|
+
},
|
|
1361
|
+
creator: {
|
|
1362
|
+
type: 'Contact',
|
|
1363
|
+
description: 'Creative designer/creator',
|
|
1364
|
+
},
|
|
1365
|
+
variants: {
|
|
1366
|
+
type: 'AdCreative[]',
|
|
1367
|
+
description: 'A/B test variants',
|
|
1368
|
+
},
|
|
1369
|
+
},
|
|
1370
|
+
actions: [
|
|
1371
|
+
'create',
|
|
1372
|
+
'update',
|
|
1373
|
+
'delete',
|
|
1374
|
+
'preview',
|
|
1375
|
+
'submit',
|
|
1376
|
+
'approve',
|
|
1377
|
+
'reject',
|
|
1378
|
+
'activate',
|
|
1379
|
+
'pause',
|
|
1380
|
+
'duplicate',
|
|
1381
|
+
'archive',
|
|
1382
|
+
'test',
|
|
1383
|
+
'export',
|
|
1384
|
+
],
|
|
1385
|
+
events: [
|
|
1386
|
+
'created',
|
|
1387
|
+
'updated',
|
|
1388
|
+
'deleted',
|
|
1389
|
+
'submitted',
|
|
1390
|
+
'approved',
|
|
1391
|
+
'rejected',
|
|
1392
|
+
'activated',
|
|
1393
|
+
'paused',
|
|
1394
|
+
'duplicated',
|
|
1395
|
+
'archived',
|
|
1396
|
+
],
|
|
1397
|
+
};
|
|
1398
|
+
// =============================================================================
|
|
1399
|
+
// UTMLink
|
|
1400
|
+
// =============================================================================
|
|
1401
|
+
/**
|
|
1402
|
+
* UTM tracked link entity
|
|
1403
|
+
*
|
|
1404
|
+
* Represents a URL with UTM parameters for tracking campaign performance
|
|
1405
|
+
*/
|
|
1406
|
+
export const UTMLink = {
|
|
1407
|
+
singular: 'utm link',
|
|
1408
|
+
plural: 'utm links',
|
|
1409
|
+
description: 'A tracked URL with UTM parameters for campaign attribution',
|
|
1410
|
+
properties: {
|
|
1411
|
+
// Identity
|
|
1412
|
+
name: {
|
|
1413
|
+
type: 'string',
|
|
1414
|
+
optional: true,
|
|
1415
|
+
description: 'Link name (internal)',
|
|
1416
|
+
},
|
|
1417
|
+
description: {
|
|
1418
|
+
type: 'string',
|
|
1419
|
+
optional: true,
|
|
1420
|
+
description: 'Link description',
|
|
1421
|
+
},
|
|
1422
|
+
// URLs
|
|
1423
|
+
destinationUrl: {
|
|
1424
|
+
type: 'url',
|
|
1425
|
+
description: 'Original destination URL (without UTM parameters)',
|
|
1426
|
+
},
|
|
1427
|
+
fullUrl: {
|
|
1428
|
+
type: 'url',
|
|
1429
|
+
description: 'Complete URL with UTM parameters',
|
|
1430
|
+
},
|
|
1431
|
+
shortUrl: {
|
|
1432
|
+
type: 'url',
|
|
1433
|
+
optional: true,
|
|
1434
|
+
description: 'Shortened URL (bit.ly, etc.)',
|
|
1435
|
+
},
|
|
1436
|
+
// UTM Parameters
|
|
1437
|
+
utmSource: {
|
|
1438
|
+
type: 'string',
|
|
1439
|
+
description: 'Traffic source (utm_source): google, facebook, newsletter',
|
|
1440
|
+
},
|
|
1441
|
+
utmMedium: {
|
|
1442
|
+
type: 'string',
|
|
1443
|
+
description: 'Marketing medium (utm_medium): email, cpc, social, organic',
|
|
1444
|
+
},
|
|
1445
|
+
utmCampaign: {
|
|
1446
|
+
type: 'string',
|
|
1447
|
+
description: 'Campaign name (utm_campaign)',
|
|
1448
|
+
},
|
|
1449
|
+
utmTerm: {
|
|
1450
|
+
type: 'string',
|
|
1451
|
+
optional: true,
|
|
1452
|
+
description: 'Paid keyword (utm_term)',
|
|
1453
|
+
},
|
|
1454
|
+
utmContent: {
|
|
1455
|
+
type: 'string',
|
|
1456
|
+
optional: true,
|
|
1457
|
+
description: 'Content variant (utm_content) for A/B testing',
|
|
1458
|
+
},
|
|
1459
|
+
// Additional Tracking
|
|
1460
|
+
customParameters: {
|
|
1461
|
+
type: 'json',
|
|
1462
|
+
optional: true,
|
|
1463
|
+
description: 'Additional custom tracking parameters',
|
|
1464
|
+
},
|
|
1465
|
+
trackingId: {
|
|
1466
|
+
type: 'string',
|
|
1467
|
+
optional: true,
|
|
1468
|
+
description: 'Internal tracking identifier',
|
|
1469
|
+
},
|
|
1470
|
+
// Context
|
|
1471
|
+
platform: {
|
|
1472
|
+
type: 'string',
|
|
1473
|
+
optional: true,
|
|
1474
|
+
description: 'Platform where link is used: email, social, ad, website',
|
|
1475
|
+
examples: ['email', 'social', 'ad', 'website'],
|
|
1476
|
+
},
|
|
1477
|
+
placement: {
|
|
1478
|
+
type: 'string',
|
|
1479
|
+
optional: true,
|
|
1480
|
+
description: 'Specific placement location',
|
|
1481
|
+
},
|
|
1482
|
+
// Performance Metrics
|
|
1483
|
+
clicks: {
|
|
1484
|
+
type: 'number',
|
|
1485
|
+
optional: true,
|
|
1486
|
+
description: 'Total clicks',
|
|
1487
|
+
},
|
|
1488
|
+
uniqueClicks: {
|
|
1489
|
+
type: 'number',
|
|
1490
|
+
optional: true,
|
|
1491
|
+
description: 'Unique clicks',
|
|
1492
|
+
},
|
|
1493
|
+
conversions: {
|
|
1494
|
+
type: 'number',
|
|
1495
|
+
optional: true,
|
|
1496
|
+
description: 'Total conversions attributed',
|
|
1497
|
+
},
|
|
1498
|
+
revenue: {
|
|
1499
|
+
type: 'number',
|
|
1500
|
+
optional: true,
|
|
1501
|
+
description: 'Revenue attributed to this link',
|
|
1502
|
+
},
|
|
1503
|
+
// Status
|
|
1504
|
+
status: {
|
|
1505
|
+
type: 'string',
|
|
1506
|
+
description: 'Link status: active, expired, archived',
|
|
1507
|
+
examples: ['active', 'expired', 'archived'],
|
|
1508
|
+
},
|
|
1509
|
+
expiresAt: {
|
|
1510
|
+
type: 'datetime',
|
|
1511
|
+
optional: true,
|
|
1512
|
+
description: 'Link expiration date',
|
|
1513
|
+
},
|
|
1514
|
+
// Metadata
|
|
1515
|
+
tags: {
|
|
1516
|
+
type: 'string',
|
|
1517
|
+
array: true,
|
|
1518
|
+
optional: true,
|
|
1519
|
+
description: 'Tags for organization',
|
|
1520
|
+
},
|
|
1521
|
+
notes: {
|
|
1522
|
+
type: 'string',
|
|
1523
|
+
optional: true,
|
|
1524
|
+
description: 'Internal notes',
|
|
1525
|
+
},
|
|
1526
|
+
},
|
|
1527
|
+
relationships: {
|
|
1528
|
+
campaign: {
|
|
1529
|
+
type: 'Campaign',
|
|
1530
|
+
required: false,
|
|
1531
|
+
description: 'Campaign this link belongs to',
|
|
1532
|
+
},
|
|
1533
|
+
emailTemplate: {
|
|
1534
|
+
type: 'EmailTemplate',
|
|
1535
|
+
required: false,
|
|
1536
|
+
description: 'Email template using this link',
|
|
1537
|
+
},
|
|
1538
|
+
landingPage: {
|
|
1539
|
+
type: 'LandingPage',
|
|
1540
|
+
required: false,
|
|
1541
|
+
description: 'Landing page where this link appears',
|
|
1542
|
+
},
|
|
1543
|
+
socialPost: {
|
|
1544
|
+
type: 'SocialPost',
|
|
1545
|
+
required: false,
|
|
1546
|
+
description: 'Social post using this link',
|
|
1547
|
+
},
|
|
1548
|
+
adCreative: {
|
|
1549
|
+
type: 'AdCreative',
|
|
1550
|
+
required: false,
|
|
1551
|
+
description: 'Ad creative using this link',
|
|
1552
|
+
},
|
|
1553
|
+
formSubmissions: {
|
|
1554
|
+
type: 'FormSubmission[]',
|
|
1555
|
+
description: 'Form submissions attributed to this link',
|
|
1556
|
+
},
|
|
1557
|
+
creator: {
|
|
1558
|
+
type: 'Contact',
|
|
1559
|
+
description: 'Link creator',
|
|
1560
|
+
},
|
|
1561
|
+
},
|
|
1562
|
+
actions: [
|
|
1563
|
+
'create',
|
|
1564
|
+
'update',
|
|
1565
|
+
'delete',
|
|
1566
|
+
'shorten',
|
|
1567
|
+
'copy',
|
|
1568
|
+
'share',
|
|
1569
|
+
'test',
|
|
1570
|
+
'archive',
|
|
1571
|
+
'expire',
|
|
1572
|
+
'renew',
|
|
1573
|
+
'export',
|
|
1574
|
+
],
|
|
1575
|
+
events: [
|
|
1576
|
+
'created',
|
|
1577
|
+
'updated',
|
|
1578
|
+
'deleted',
|
|
1579
|
+
'shortened',
|
|
1580
|
+
'clicked',
|
|
1581
|
+
'converted',
|
|
1582
|
+
'archived',
|
|
1583
|
+
'expired',
|
|
1584
|
+
'renewed',
|
|
1585
|
+
],
|
|
1586
|
+
};
|
|
1587
|
+
// =============================================================================
|
|
1588
|
+
// Export all entities as a schema
|
|
1589
|
+
// =============================================================================
|
|
1590
|
+
/**
|
|
1591
|
+
* All marketing entity types
|
|
1592
|
+
*/
|
|
1593
|
+
export const MarketingEntities = {
|
|
1594
|
+
Campaign,
|
|
1595
|
+
Audience,
|
|
1596
|
+
EmailTemplate,
|
|
1597
|
+
LandingPage,
|
|
1598
|
+
FormSubmission,
|
|
1599
|
+
SocialPost,
|
|
1600
|
+
AdCreative,
|
|
1601
|
+
UTMLink,
|
|
1602
|
+
};
|
|
1603
|
+
/**
|
|
1604
|
+
* Entity categories for organization
|
|
1605
|
+
*/
|
|
1606
|
+
export const MarketingCategories = {
|
|
1607
|
+
core: ['Campaign', 'Audience'],
|
|
1608
|
+
content: ['EmailTemplate', 'LandingPage', 'SocialPost', 'AdCreative'],
|
|
1609
|
+
tracking: ['UTMLink', 'FormSubmission'],
|
|
1610
|
+
};
|
|
1611
|
+
//# sourceMappingURL=marketing.js.map
|