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