vidspotai-shared 1.0.82 → 1.0.83

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 (442) hide show
  1. package/lib/globals/aiModels/enums.d.ts +11 -1
  2. package/lib/globals/aiModels/enums.d.ts.map +1 -1
  3. package/lib/globals/aiModels/enums.js +24 -1
  4. package/lib/globals/aiModels/index.d.ts.map +1 -1
  5. package/lib/globals/aiModels/index.js +2 -0
  6. package/lib/globals/aiModels/providers/anthropic.d.ts +12 -0
  7. package/lib/globals/aiModels/providers/anthropic.d.ts.map +1 -0
  8. package/lib/globals/aiModels/providers/anthropic.js +88 -0
  9. package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
  10. package/lib/globals/aiModels/providers/google.js +82 -0
  11. package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
  12. package/lib/globals/aiModels/providers/openai.js +63 -4
  13. package/lib/globals/aiModels/tierHelpers.d.ts +12 -0
  14. package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -1
  15. package/lib/globals/aiModels/tierHelpers.js +83 -0
  16. package/lib/globals/aiModels/types.d.ts +19 -0
  17. package/lib/globals/aiModels/types.d.ts.map +1 -1
  18. package/lib/globals/types.d.ts +120 -1
  19. package/lib/globals/types.d.ts.map +1 -1
  20. package/lib/globals/types.js +135 -1
  21. package/lib/models/agent.model.d.ts +41 -1
  22. package/lib/models/agent.model.d.ts.map +1 -1
  23. package/lib/models/index.d.ts +1 -0
  24. package/lib/models/index.d.ts.map +1 -1
  25. package/lib/models/index.js +1 -0
  26. package/lib/models/social.model.d.ts +180 -0
  27. package/lib/models/social.model.d.ts.map +1 -0
  28. package/lib/models/social.model.js +2 -0
  29. package/lib/models/user.model.d.ts +10 -0
  30. package/lib/models/user.model.d.ts.map +1 -1
  31. package/lib/models/video.model.d.ts +6 -0
  32. package/lib/models/video.model.d.ts.map +1 -1
  33. package/lib/schemas/brief.schema.d.ts +46 -0
  34. package/lib/schemas/brief.schema.d.ts.map +1 -1
  35. package/lib/schemas/brief.schema.js +72 -1
  36. package/lib/schemas/index.d.ts +1 -0
  37. package/lib/schemas/index.d.ts.map +1 -1
  38. package/lib/schemas/index.js +1 -0
  39. package/lib/schemas/project.schema.d.ts +67 -0
  40. package/lib/schemas/project.schema.d.ts.map +1 -1
  41. package/lib/schemas/project.schema.js +12 -0
  42. package/lib/schemas/social.schema.d.ts +91 -0
  43. package/lib/schemas/social.schema.d.ts.map +1 -0
  44. package/lib/schemas/social.schema.js +114 -0
  45. package/lib/schemas/videoPlan.schema.d.ts +114 -0
  46. package/lib/schemas/videoPlan.schema.d.ts.map +1 -1
  47. package/lib/schemas/videoPlan.schema.js +141 -1
  48. package/lib/services/agent/chatAgent.d.ts +25 -1
  49. package/lib/services/agent/chatAgent.d.ts.map +1 -1
  50. package/lib/services/agent/chatAgent.js +145 -9
  51. package/lib/services/agent/costPreflight.d.ts +11 -1
  52. package/lib/services/agent/costPreflight.d.ts.map +1 -1
  53. package/lib/services/agent/costPreflight.js +18 -1
  54. package/lib/services/agent/covers/coverPlanner.d.ts +41 -0
  55. package/lib/services/agent/covers/coverPlanner.d.ts.map +1 -0
  56. package/lib/services/agent/covers/coverPlanner.js +278 -0
  57. package/lib/services/agent/covers/covers.schema.d.ts +158 -0
  58. package/lib/services/agent/covers/covers.schema.d.ts.map +1 -0
  59. package/lib/services/agent/covers/covers.schema.js +166 -0
  60. package/lib/services/agent/covers/index.d.ts +3 -0
  61. package/lib/services/agent/covers/index.d.ts.map +1 -0
  62. package/lib/services/agent/covers/index.js +18 -0
  63. package/lib/services/agent/critic.d.ts +10 -0
  64. package/lib/services/agent/critic.d.ts.map +1 -1
  65. package/lib/services/agent/critic.js +37 -1
  66. package/lib/services/agent/editClassifier.d.ts +2 -2
  67. package/lib/services/agent/editClassifier.js +2 -2
  68. package/lib/services/agent/editExisting/editAssembler.d.ts +78 -0
  69. package/lib/services/agent/editExisting/editAssembler.d.ts.map +1 -0
  70. package/lib/services/agent/editExisting/editAssembler.js +172 -0
  71. package/lib/services/agent/editExisting/editExisting.schema.d.ts +119 -0
  72. package/lib/services/agent/editExisting/editExisting.schema.d.ts.map +1 -0
  73. package/lib/services/agent/editExisting/editExisting.schema.js +157 -0
  74. package/lib/services/agent/editExisting/highlightPicker.d.ts +48 -0
  75. package/lib/services/agent/editExisting/highlightPicker.d.ts.map +1 -0
  76. package/lib/services/agent/editExisting/highlightPicker.js +199 -0
  77. package/lib/services/agent/editExisting/index.d.ts +4 -0
  78. package/lib/services/agent/editExisting/index.d.ts.map +1 -0
  79. package/lib/services/agent/editExisting/index.js +19 -0
  80. package/lib/services/agent/eval/seedBriefs.d.ts +4 -3
  81. package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -1
  82. package/lib/services/agent/eval/seedBriefs.js +283 -3
  83. package/lib/services/agent/eval/types.d.ts +10 -0
  84. package/lib/services/agent/eval/types.d.ts.map +1 -1
  85. package/lib/services/agent/executor/core.d.ts +70 -0
  86. package/lib/services/agent/executor/core.d.ts.map +1 -0
  87. package/lib/services/agent/executor/core.js +250 -0
  88. package/lib/services/agent/executor/duration.d.ts +20 -0
  89. package/lib/services/agent/executor/duration.d.ts.map +1 -0
  90. package/lib/services/agent/executor/duration.js +46 -0
  91. package/lib/services/agent/executor/index.d.ts +15 -0
  92. package/lib/services/agent/executor/index.d.ts.map +1 -0
  93. package/lib/services/agent/executor/index.js +32 -0
  94. package/lib/services/agent/executor/types.d.ts +183 -0
  95. package/lib/services/agent/executor/types.d.ts.map +1 -0
  96. package/lib/services/agent/executor/types.js +29 -0
  97. package/lib/services/agent/executor/visual.d.ts +32 -0
  98. package/lib/services/agent/executor/visual.d.ts.map +1 -0
  99. package/lib/services/agent/executor/visual.js +400 -0
  100. package/lib/services/agent/executor/voice.d.ts +17 -0
  101. package/lib/services/agent/executor/voice.d.ts.map +1 -0
  102. package/lib/services/agent/executor/voice.js +119 -0
  103. package/lib/services/agent/extendChain.d.ts +101 -0
  104. package/lib/services/agent/extendChain.d.ts.map +1 -0
  105. package/lib/services/agent/extendChain.js +177 -0
  106. package/lib/services/agent/index.d.ts +11 -1
  107. package/lib/services/agent/index.d.ts.map +1 -1
  108. package/lib/services/agent/index.js +11 -1
  109. package/lib/services/agent/llmCaller.d.ts +7 -8
  110. package/lib/services/agent/llmCaller.d.ts.map +1 -1
  111. package/lib/services/agent/llmCallerAnthropic.d.ts +44 -31
  112. package/lib/services/agent/llmCallerAnthropic.d.ts.map +1 -1
  113. package/lib/services/agent/llmCallerAnthropic.js +135 -60
  114. package/lib/services/agent/llmCallerFactory.d.ts +34 -0
  115. package/lib/services/agent/llmCallerFactory.d.ts.map +1 -0
  116. package/lib/services/agent/llmCallerFactory.js +31 -0
  117. package/lib/services/agent/llmCallerGemini.d.ts +62 -0
  118. package/lib/services/agent/llmCallerGemini.d.ts.map +1 -0
  119. package/lib/services/agent/llmCallerGemini.js +235 -0
  120. package/lib/services/agent/llmCallerOpenai.d.ts +56 -0
  121. package/lib/services/agent/llmCallerOpenai.d.ts.map +1 -0
  122. package/lib/services/agent/llmCallerOpenai.js +230 -0
  123. package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -1
  124. package/lib/services/agent/llmCallerRegistry.js +7 -7
  125. package/lib/services/agent/llmCallerRouting.d.ts +63 -0
  126. package/lib/services/agent/llmCallerRouting.d.ts.map +1 -0
  127. package/lib/services/agent/llmCallerRouting.js +124 -0
  128. package/lib/services/agent/llmModelRegistry.d.ts +59 -0
  129. package/lib/services/agent/llmModelRegistry.d.ts.map +1 -0
  130. package/lib/services/agent/llmModelRegistry.js +168 -0
  131. package/lib/services/agent/llmRetry.d.ts +57 -0
  132. package/lib/services/agent/llmRetry.d.ts.map +1 -0
  133. package/lib/services/agent/llmRetry.js +102 -0
  134. package/lib/services/agent/modelRouter.d.ts +3 -3
  135. package/lib/services/agent/modelRouter.d.ts.map +1 -1
  136. package/lib/services/agent/modelRouter.js +27 -13
  137. package/lib/services/agent/planMutations.d.ts +54 -1
  138. package/lib/services/agent/planMutations.d.ts.map +1 -1
  139. package/lib/services/agent/planMutations.js +78 -0
  140. package/lib/services/agent/planner/Planner.d.ts +0 -17
  141. package/lib/services/agent/planner/Planner.d.ts.map +1 -1
  142. package/lib/services/agent/planner/Planner.js +67 -303
  143. package/lib/services/agent/planner/overlayRegen.d.ts +38 -0
  144. package/lib/services/agent/planner/overlayRegen.d.ts.map +1 -0
  145. package/lib/services/agent/planner/overlayRegen.js +145 -0
  146. package/lib/services/agent/planner/plannerMessages.d.ts +34 -0
  147. package/lib/services/agent/planner/plannerMessages.d.ts.map +1 -0
  148. package/lib/services/agent/planner/plannerMessages.js +185 -0
  149. package/lib/services/agent/planner/promptSections.d.ts +12 -0
  150. package/lib/services/agent/planner/promptSections.d.ts.map +1 -1
  151. package/lib/services/agent/planner/promptSections.js +57 -0
  152. package/lib/services/agent/planner/scriptFirstPlanner.d.ts +35 -0
  153. package/lib/services/agent/planner/scriptFirstPlanner.d.ts.map +1 -0
  154. package/lib/services/agent/planner/scriptFirstPlanner.js +140 -0
  155. package/lib/services/agent/planner/structuralRules.d.ts +10 -0
  156. package/lib/services/agent/planner/structuralRules.d.ts.map +1 -1
  157. package/lib/services/agent/planner/structuralRules.js +92 -9
  158. package/lib/services/agent/planner/validators.d.ts +18 -0
  159. package/lib/services/agent/planner/validators.d.ts.map +1 -1
  160. package/lib/services/agent/planner/validators.js +97 -0
  161. package/lib/services/agent/planner.d.ts +2 -1
  162. package/lib/services/agent/planner.d.ts.map +1 -1
  163. package/lib/services/agent/planner.js +5 -1
  164. package/lib/services/agent/priorProject.d.ts +26 -0
  165. package/lib/services/agent/priorProject.d.ts.map +1 -0
  166. package/lib/services/agent/priorProject.js +51 -0
  167. package/lib/services/agent/providerFallback/chains.d.ts.map +1 -1
  168. package/lib/services/agent/providerFallback/chains.js +27 -15
  169. package/lib/services/agent/repurpose/index.d.ts +3 -0
  170. package/lib/services/agent/repurpose/index.d.ts.map +1 -0
  171. package/lib/services/agent/repurpose/index.js +18 -0
  172. package/lib/services/agent/repurpose/repurpose.schema.d.ts +132 -0
  173. package/lib/services/agent/repurpose/repurpose.schema.d.ts.map +1 -0
  174. package/lib/services/agent/repurpose/repurpose.schema.js +144 -0
  175. package/lib/services/agent/repurpose/shortsPicker.d.ts +25 -0
  176. package/lib/services/agent/repurpose/shortsPicker.d.ts.map +1 -0
  177. package/lib/services/agent/repurpose/shortsPicker.js +218 -0
  178. package/lib/services/agent/runHelpers.d.ts +21 -2
  179. package/lib/services/agent/runHelpers.d.ts.map +1 -1
  180. package/lib/services/agent/runHelpers.js +71 -2
  181. package/lib/services/agent/tools/animateImage.tool.d.ts +1 -0
  182. package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -1
  183. package/lib/services/agent/tools/animateImage.tool.js +12 -0
  184. package/lib/services/agent/tools/chapterOutline.tool.d.ts +42 -0
  185. package/lib/services/agent/tools/chapterOutline.tool.d.ts.map +1 -0
  186. package/lib/services/agent/tools/chapterOutline.tool.js +115 -0
  187. package/lib/services/agent/tools/composeScene.tool.d.ts +63 -0
  188. package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -1
  189. package/lib/services/agent/tools/estimateCost.tool.d.ts +27 -0
  190. package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -1
  191. package/lib/services/agent/tools/estimateCost.tool.js +55 -7
  192. package/lib/services/agent/tools/extendVideo.tool.d.ts +26 -0
  193. package/lib/services/agent/tools/extendVideo.tool.d.ts.map +1 -0
  194. package/lib/services/agent/tools/extendVideo.tool.js +149 -0
  195. package/lib/services/agent/tools/generateScript.tool.d.ts +184 -0
  196. package/lib/services/agent/tools/generateScript.tool.d.ts.map +1 -0
  197. package/lib/services/agent/tools/generateScript.tool.js +123 -0
  198. package/lib/services/agent/tools/generateVideo.tool.d.ts +1 -0
  199. package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -1
  200. package/lib/services/agent/tools/generateVideo.tool.js +20 -1
  201. package/lib/services/agent/tools/index.d.ts +4 -0
  202. package/lib/services/agent/tools/index.d.ts.map +1 -1
  203. package/lib/services/agent/tools/index.js +4 -0
  204. package/lib/services/agent/tools/matchBrollToScript.tool.d.ts +50 -0
  205. package/lib/services/agent/tools/matchBrollToScript.tool.d.ts.map +1 -0
  206. package/lib/services/agent/tools/matchBrollToScript.tool.js +139 -0
  207. package/lib/services/agent/tools/planVideo.tool.d.ts +56 -0
  208. package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -1
  209. package/lib/services/agent/tools/planVideo.tool.js +3 -3
  210. package/lib/services/agent/tools/render.tool.d.ts +21 -0
  211. package/lib/services/agent/tools/render.tool.d.ts.map +1 -1
  212. package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
  213. package/lib/services/aiGen/aiGenFactory.service.js +18 -3
  214. package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts +26 -0
  215. package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts.map +1 -0
  216. package/lib/services/aiGen/providers/anthropic/anthropic.service.js +95 -0
  217. package/lib/services/aiGen/providers/google/google.service.d.ts +24 -1
  218. package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
  219. package/lib/services/aiGen/providers/google/google.service.js +87 -243
  220. package/lib/services/aiGen/providers/google/googleErrors.d.ts +13 -0
  221. package/lib/services/aiGen/providers/google/googleErrors.d.ts.map +1 -0
  222. package/lib/services/aiGen/providers/google/googleErrors.js +102 -0
  223. package/lib/services/aiGen/providers/google/googleFetch.d.ts +8 -0
  224. package/lib/services/aiGen/providers/google/googleFetch.d.ts.map +1 -0
  225. package/lib/services/aiGen/providers/google/googleFetch.js +96 -0
  226. package/lib/services/aiGen/providers/google/googleMusic.d.ts +15 -0
  227. package/lib/services/aiGen/providers/google/googleMusic.d.ts.map +1 -0
  228. package/lib/services/aiGen/providers/google/googleMusic.js +77 -0
  229. package/lib/services/aiGen/providers/kling/kling.service.d.ts +7 -3
  230. package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
  231. package/lib/services/aiGen/providers/kling/kling.service.js +23 -367
  232. package/lib/services/aiGen/providers/kling/klingCredits.d.ts +9 -0
  233. package/lib/services/aiGen/providers/kling/klingCredits.d.ts.map +1 -0
  234. package/lib/services/aiGen/providers/kling/klingCredits.js +63 -0
  235. package/lib/services/aiGen/providers/kling/klingRequests.d.ts +32 -0
  236. package/lib/services/aiGen/providers/kling/klingRequests.d.ts.map +1 -0
  237. package/lib/services/aiGen/providers/kling/klingRequests.js +194 -0
  238. package/lib/services/aiGen/providers/kling/klingStatus.d.ts +16 -0
  239. package/lib/services/aiGen/providers/kling/klingStatus.d.ts.map +1 -0
  240. package/lib/services/aiGen/providers/kling/klingStatus.js +173 -0
  241. package/lib/services/bullmq.service.d.ts +61 -0
  242. package/lib/services/bullmq.service.d.ts.map +1 -1
  243. package/lib/services/bullmq.service.js +101 -1
  244. package/lib/services/crypto/index.d.ts +2 -0
  245. package/lib/services/crypto/index.d.ts.map +1 -0
  246. package/lib/services/crypto/index.js +17 -0
  247. package/lib/services/crypto/tokenVault.d.ts +47 -0
  248. package/lib/services/crypto/tokenVault.d.ts.map +1 -0
  249. package/lib/services/crypto/tokenVault.js +179 -0
  250. package/lib/services/editor/captionStyleHint.d.ts +3 -0
  251. package/lib/services/editor/captionStyleHint.d.ts.map +1 -0
  252. package/lib/services/editor/captionStyleHint.js +112 -0
  253. package/lib/services/editor/planToProject.d.ts +7 -66
  254. package/lib/services/editor/planToProject.d.ts.map +1 -1
  255. package/lib/services/editor/planToProject.helpers.d.ts +40 -0
  256. package/lib/services/editor/planToProject.helpers.d.ts.map +1 -0
  257. package/lib/services/editor/planToProject.helpers.js +177 -0
  258. package/lib/services/editor/planToProject.js +197 -180
  259. package/lib/services/editor/planToProject.types.d.ts +94 -0
  260. package/lib/services/editor/planToProject.types.d.ts.map +1 -0
  261. package/lib/services/editor/planToProject.types.js +2 -0
  262. package/lib/services/firestore.service.d.ts +5 -0
  263. package/lib/services/firestore.service.d.ts.map +1 -1
  264. package/lib/services/firestore.service.js +13 -0
  265. package/lib/services/index.d.ts +12 -0
  266. package/lib/services/index.d.ts.map +1 -1
  267. package/lib/services/index.js +12 -0
  268. package/lib/services/promptEnhancer/index.d.ts +18 -0
  269. package/lib/services/promptEnhancer/index.d.ts.map +1 -0
  270. package/lib/services/promptEnhancer/index.js +33 -0
  271. package/lib/services/promptEnhancer/models.d.ts +54 -0
  272. package/lib/services/promptEnhancer/models.d.ts.map +1 -0
  273. package/lib/services/promptEnhancer/models.js +37 -0
  274. package/lib/services/promptEnhancer/profiles/agent.profile.d.ts +14 -0
  275. package/lib/services/promptEnhancer/profiles/agent.profile.d.ts.map +1 -0
  276. package/lib/services/promptEnhancer/profiles/agent.profile.js +40 -0
  277. package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts +13 -0
  278. package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts.map +1 -0
  279. package/lib/services/promptEnhancer/profiles/avatar.profile.js +40 -0
  280. package/lib/services/promptEnhancer/profiles/base.d.ts +28 -0
  281. package/lib/services/promptEnhancer/profiles/base.d.ts.map +1 -0
  282. package/lib/services/promptEnhancer/profiles/base.js +35 -0
  283. package/lib/services/promptEnhancer/profiles/image.profile.d.ts +11 -0
  284. package/lib/services/promptEnhancer/profiles/image.profile.d.ts.map +1 -0
  285. package/lib/services/promptEnhancer/profiles/image.profile.js +42 -0
  286. package/lib/services/promptEnhancer/profiles/index.d.ts +12 -0
  287. package/lib/services/promptEnhancer/profiles/index.d.ts.map +1 -0
  288. package/lib/services/promptEnhancer/profiles/index.js +33 -0
  289. package/lib/services/promptEnhancer/profiles/video.profile.d.ts +15 -0
  290. package/lib/services/promptEnhancer/profiles/video.profile.d.ts.map +1 -0
  291. package/lib/services/promptEnhancer/profiles/video.profile.js +81 -0
  292. package/lib/services/promptEnhancer/promptEnhancer.service.d.ts +45 -0
  293. package/lib/services/promptEnhancer/promptEnhancer.service.d.ts.map +1 -0
  294. package/lib/services/promptEnhancer/promptEnhancer.service.js +157 -0
  295. package/lib/services/promptEnhancer/schema.d.ts +19 -0
  296. package/lib/services/promptEnhancer/schema.d.ts.map +1 -0
  297. package/lib/services/promptEnhancer/schema.js +43 -0
  298. package/lib/services/promptEnhancer/types.d.ts +112 -0
  299. package/lib/services/promptEnhancer/types.d.ts.map +1 -0
  300. package/lib/services/promptEnhancer/types.js +2 -0
  301. package/lib/services/socialAI/captionGen.d.ts +81 -0
  302. package/lib/services/socialAI/captionGen.d.ts.map +1 -0
  303. package/lib/services/socialAI/captionGen.js +206 -0
  304. package/lib/services/socialAI/hookScore.d.ts +85 -0
  305. package/lib/services/socialAI/hookScore.d.ts.map +1 -0
  306. package/lib/services/socialAI/hookScore.js +170 -0
  307. package/lib/services/socialAI/index.d.ts +3 -0
  308. package/lib/services/socialAI/index.d.ts.map +1 -0
  309. package/lib/services/socialAI/index.js +18 -0
  310. package/lib/services/socialAccounts/index.d.ts +2 -0
  311. package/lib/services/socialAccounts/index.d.ts.map +1 -0
  312. package/lib/services/socialAccounts/index.js +17 -0
  313. package/lib/services/socialAccounts/socialAccountService.d.ts +25 -0
  314. package/lib/services/socialAccounts/socialAccountService.d.ts.map +1 -0
  315. package/lib/services/socialAccounts/socialAccountService.js +105 -0
  316. package/lib/services/socialEngage/factory.d.ts +7 -0
  317. package/lib/services/socialEngage/factory.d.ts.map +1 -0
  318. package/lib/services/socialEngage/factory.js +25 -0
  319. package/lib/services/socialEngage/index.d.ts +6 -0
  320. package/lib/services/socialEngage/index.d.ts.map +1 -0
  321. package/lib/services/socialEngage/index.js +21 -0
  322. package/lib/services/socialEngage/meta.engage.d.ts +17 -0
  323. package/lib/services/socialEngage/meta.engage.d.ts.map +1 -0
  324. package/lib/services/socialEngage/meta.engage.js +128 -0
  325. package/lib/services/socialEngage/metaWebhook.d.ts +50 -0
  326. package/lib/services/socialEngage/metaWebhook.d.ts.map +1 -0
  327. package/lib/services/socialEngage/metaWebhook.js +93 -0
  328. package/lib/services/socialEngage/types.d.ts +72 -0
  329. package/lib/services/socialEngage/types.d.ts.map +1 -0
  330. package/lib/services/socialEngage/types.js +10 -0
  331. package/lib/services/socialEngage/youtube.engage.d.ts +9 -0
  332. package/lib/services/socialEngage/youtube.engage.d.ts.map +1 -0
  333. package/lib/services/socialEngage/youtube.engage.js +87 -0
  334. package/lib/services/socialFormat/aspectGeometry.d.ts +74 -0
  335. package/lib/services/socialFormat/aspectGeometry.d.ts.map +1 -0
  336. package/lib/services/socialFormat/aspectGeometry.js +135 -0
  337. package/lib/services/socialFormat/index.d.ts +2 -0
  338. package/lib/services/socialFormat/index.d.ts.map +1 -0
  339. package/lib/services/socialFormat/index.js +19 -0
  340. package/lib/services/socialInsights/index.d.ts +3 -0
  341. package/lib/services/socialInsights/index.d.ts.map +1 -0
  342. package/lib/services/socialInsights/index.js +18 -0
  343. package/lib/services/socialInsights/recommendations.d.ts +131 -0
  344. package/lib/services/socialInsights/recommendations.d.ts.map +1 -0
  345. package/lib/services/socialInsights/recommendations.js +277 -0
  346. package/lib/services/socialInsights/timeBuckets.d.ts +35 -0
  347. package/lib/services/socialInsights/timeBuckets.d.ts.map +1 -0
  348. package/lib/services/socialInsights/timeBuckets.js +78 -0
  349. package/lib/services/socialMetrics/factory.d.ts +5 -0
  350. package/lib/services/socialMetrics/factory.d.ts.map +1 -0
  351. package/lib/services/socialMetrics/factory.js +24 -0
  352. package/lib/services/socialMetrics/index.d.ts +6 -0
  353. package/lib/services/socialMetrics/index.d.ts.map +1 -0
  354. package/lib/services/socialMetrics/index.js +21 -0
  355. package/lib/services/socialMetrics/meta.metrics.d.ts +22 -0
  356. package/lib/services/socialMetrics/meta.metrics.d.ts.map +1 -0
  357. package/lib/services/socialMetrics/meta.metrics.js +137 -0
  358. package/lib/services/socialMetrics/tiktok.metrics.d.ts +8 -0
  359. package/lib/services/socialMetrics/tiktok.metrics.d.ts.map +1 -0
  360. package/lib/services/socialMetrics/tiktok.metrics.js +43 -0
  361. package/lib/services/socialMetrics/types.d.ts +54 -0
  362. package/lib/services/socialMetrics/types.d.ts.map +1 -0
  363. package/lib/services/socialMetrics/types.js +2 -0
  364. package/lib/services/socialMetrics/youtube.metrics.d.ts +8 -0
  365. package/lib/services/socialMetrics/youtube.metrics.d.ts.map +1 -0
  366. package/lib/services/socialMetrics/youtube.metrics.js +43 -0
  367. package/lib/services/socialOAuth/factory.d.ts +7 -0
  368. package/lib/services/socialOAuth/factory.d.ts.map +1 -0
  369. package/lib/services/socialOAuth/factory.js +42 -0
  370. package/lib/services/socialOAuth/index.d.ts +11 -0
  371. package/lib/services/socialOAuth/index.d.ts.map +1 -0
  372. package/lib/services/socialOAuth/index.js +26 -0
  373. package/lib/services/socialOAuth/linkedin.oauth.d.ts +14 -0
  374. package/lib/services/socialOAuth/linkedin.oauth.d.ts.map +1 -0
  375. package/lib/services/socialOAuth/linkedin.oauth.js +127 -0
  376. package/lib/services/socialOAuth/meta.oauth.d.ts +31 -0
  377. package/lib/services/socialOAuth/meta.oauth.d.ts.map +1 -0
  378. package/lib/services/socialOAuth/meta.oauth.js +214 -0
  379. package/lib/services/socialOAuth/oauthState.d.ts +14 -0
  380. package/lib/services/socialOAuth/oauthState.d.ts.map +1 -0
  381. package/lib/services/socialOAuth/oauthState.js +66 -0
  382. package/lib/services/socialOAuth/pinterest.oauth.d.ts +15 -0
  383. package/lib/services/socialOAuth/pinterest.oauth.d.ts.map +1 -0
  384. package/lib/services/socialOAuth/pinterest.oauth.js +126 -0
  385. package/lib/services/socialOAuth/threads.oauth.d.ts +14 -0
  386. package/lib/services/socialOAuth/threads.oauth.d.ts.map +1 -0
  387. package/lib/services/socialOAuth/threads.oauth.js +129 -0
  388. package/lib/services/socialOAuth/tiktok.oauth.d.ts +15 -0
  389. package/lib/services/socialOAuth/tiktok.oauth.d.ts.map +1 -0
  390. package/lib/services/socialOAuth/tiktok.oauth.js +151 -0
  391. package/lib/services/socialOAuth/types.d.ts +67 -0
  392. package/lib/services/socialOAuth/types.d.ts.map +1 -0
  393. package/lib/services/socialOAuth/types.js +2 -0
  394. package/lib/services/socialOAuth/x.oauth.d.ts +17 -0
  395. package/lib/services/socialOAuth/x.oauth.d.ts.map +1 -0
  396. package/lib/services/socialOAuth/x.oauth.js +134 -0
  397. package/lib/services/socialOAuth/youtube.oauth.d.ts +15 -0
  398. package/lib/services/socialOAuth/youtube.oauth.d.ts.map +1 -0
  399. package/lib/services/socialOAuth/youtube.oauth.js +156 -0
  400. package/lib/services/socialPublish/factory.d.ts +5 -0
  401. package/lib/services/socialPublish/factory.d.ts.map +1 -0
  402. package/lib/services/socialPublish/factory.js +32 -0
  403. package/lib/services/socialPublish/index.d.ts +10 -0
  404. package/lib/services/socialPublish/index.d.ts.map +1 -0
  405. package/lib/services/socialPublish/index.js +25 -0
  406. package/lib/services/socialPublish/linkedin.publish.d.ts +9 -0
  407. package/lib/services/socialPublish/linkedin.publish.d.ts.map +1 -0
  408. package/lib/services/socialPublish/linkedin.publish.js +143 -0
  409. package/lib/services/socialPublish/meta.publish.d.ts +28 -0
  410. package/lib/services/socialPublish/meta.publish.d.ts.map +1 -0
  411. package/lib/services/socialPublish/meta.publish.js +149 -0
  412. package/lib/services/socialPublish/pinterest.publish.d.ts +13 -0
  413. package/lib/services/socialPublish/pinterest.publish.d.ts.map +1 -0
  414. package/lib/services/socialPublish/pinterest.publish.js +130 -0
  415. package/lib/services/socialPublish/threads.publish.d.ts +12 -0
  416. package/lib/services/socialPublish/threads.publish.d.ts.map +1 -0
  417. package/lib/services/socialPublish/threads.publish.js +96 -0
  418. package/lib/services/socialPublish/tiktok.publish.d.ts +13 -0
  419. package/lib/services/socialPublish/tiktok.publish.d.ts.map +1 -0
  420. package/lib/services/socialPublish/tiktok.publish.js +118 -0
  421. package/lib/services/socialPublish/types.d.ts +47 -0
  422. package/lib/services/socialPublish/types.d.ts.map +1 -0
  423. package/lib/services/socialPublish/types.js +2 -0
  424. package/lib/services/socialPublish/x.publish.d.ts +12 -0
  425. package/lib/services/socialPublish/x.publish.d.ts.map +1 -0
  426. package/lib/services/socialPublish/x.publish.js +147 -0
  427. package/lib/services/socialPublish/youtube.publish.d.ts +9 -0
  428. package/lib/services/socialPublish/youtube.publish.d.ts.map +1 -0
  429. package/lib/services/socialPublish/youtube.publish.js +107 -0
  430. package/lib/services/stock/index.d.ts +2 -0
  431. package/lib/services/stock/index.d.ts.map +1 -0
  432. package/lib/services/stock/index.js +17 -0
  433. package/lib/services/stock/realPersonSafety.d.ts +99 -0
  434. package/lib/services/stock/realPersonSafety.d.ts.map +1 -0
  435. package/lib/services/stock/realPersonSafety.js +248 -0
  436. package/lib/utils/index.d.ts +1 -0
  437. package/lib/utils/index.d.ts.map +1 -1
  438. package/lib/utils/index.js +1 -0
  439. package/lib/utils/renderTier.d.ts +26 -0
  440. package/lib/utils/renderTier.d.ts.map +1 -0
  441. package/lib/utils/renderTier.js +34 -0
  442. package/package.json +1 -1
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * X8 Social Suite — Phase 6 best-time-to-post: per-user timezone bucketing.
4
+ *
5
+ * The best-time grid (C4) buckets each published post by (weekday, hour) and
6
+ * averages its views. v1 bucketed in UTC, which is wrong for the human question
7
+ * the feature answers — "what hour of *my* day should I post?". A creator in
8
+ * America/Los_Angeles posting at 6pm local was being filed under hour 02 (next
9
+ * day UTC), so the heatmap pointed at the wrong row AND the wrong column.
10
+ *
11
+ * This module is the pure, dependency-free core: given an epoch-ms timestamp and
12
+ * an IANA time-zone name, return the local weekday (0=Sun … 6=Sat) and hour
13
+ * (0–23). It uses `Intl.DateTimeFormat` (built into the runtime — no tz library)
14
+ * so it's deterministic and unit-testable away from any I/O. Invalid / absent
15
+ * zones fall back to UTC, preserving the old behaviour rather than throwing.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.isValidTimeZone = isValidTimeZone;
19
+ exports.bucketLocal = bucketLocal;
20
+ exports.resolveTimeZone = resolveTimeZone;
21
+ /** Sun-first weekday index, matching `Date.prototype.getUTCDay()`. */
22
+ const WEEKDAY_INDEX = {
23
+ Sun: 0,
24
+ Mon: 1,
25
+ Tue: 2,
26
+ Wed: 3,
27
+ Thu: 4,
28
+ Fri: 5,
29
+ Sat: 6,
30
+ };
31
+ /**
32
+ * Is `tz` a time zone the runtime's Intl can resolve? Empty / non-string / made
33
+ * up names return false (so the caller can fall back to UTC). Cheap enough to
34
+ * call per request — Intl caches its internal data.
35
+ */
36
+ function isValidTimeZone(tz) {
37
+ if (typeof tz !== "string" || tz.trim() === "")
38
+ return false;
39
+ try {
40
+ // Throws RangeError for an unknown zone; succeeds (and is a no-op) for a
41
+ // valid one. "UTC" and offset-less IANA names both pass.
42
+ new Intl.DateTimeFormat("en-US", { timeZone: tz });
43
+ return true;
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
49
+ /**
50
+ * Bucket an epoch-ms timestamp into a LOCAL (weekday, hour) pair for the given
51
+ * IANA time zone. Falls back to UTC when `timeZone` is missing or invalid.
52
+ *
53
+ * @param epochMs unix milliseconds (the post's publish time)
54
+ * @param timeZone IANA name (e.g. "America/New_York"); undefined → UTC
55
+ */
56
+ function bucketLocal(epochMs, timeZone) {
57
+ const tz = isValidTimeZone(timeZone) ? timeZone : "UTC";
58
+ const parts = new Intl.DateTimeFormat("en-US", {
59
+ timeZone: tz,
60
+ weekday: "short",
61
+ hour: "2-digit",
62
+ hour12: false,
63
+ }).formatToParts(new Date(epochMs));
64
+ let weekday = 0;
65
+ let hour = 0;
66
+ for (const p of parts) {
67
+ if (p.type === "weekday")
68
+ weekday = WEEKDAY_INDEX[p.value] ?? 0;
69
+ // `hour12:false` can emit "24" for midnight in some ICU builds — fold to 0.
70
+ else if (p.type === "hour")
71
+ hour = parseInt(p.value, 10) % 24;
72
+ }
73
+ return { weekday, hour };
74
+ }
75
+ /** The zone actually used after validation (echoed back to the client). */
76
+ function resolveTimeZone(timeZone) {
77
+ return isValidTimeZone(timeZone) ? timeZone : "UTC";
78
+ }
@@ -0,0 +1,5 @@
1
+ import { ESocialProvider } from "../../globals/types";
2
+ import { ISocialMetricsClient } from "./types";
3
+ export declare function getSocialMetricsClient(provider: ESocialProvider): ISocialMetricsClient;
4
+ export declare function isSocialMetricsSupported(provider: ESocialProvider): boolean;
5
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/services/socialMetrics/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAU/C,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,GACxB,oBAAoB,CAMtB;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAE3E"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSocialMetricsClient = getSocialMetricsClient;
4
+ exports.isSocialMetricsSupported = isSocialMetricsSupported;
5
+ const types_1 = require("../../globals/types");
6
+ const meta_metrics_1 = require("./meta.metrics");
7
+ const tiktok_metrics_1 = require("./tiktok.metrics");
8
+ const youtube_metrics_1 = require("./youtube.metrics");
9
+ const registry = {
10
+ [types_1.ESocialProvider.YOUTUBE]: () => new youtube_metrics_1.YouTubeMetricsClient(),
11
+ [types_1.ESocialProvider.INSTAGRAM]: () => new meta_metrics_1.InstagramMetricsClient(),
12
+ [types_1.ESocialProvider.FACEBOOK]: () => new meta_metrics_1.FacebookMetricsClient(),
13
+ [types_1.ESocialProvider.TIKTOK]: () => new tiktok_metrics_1.TikTokMetricsClient(),
14
+ };
15
+ function getSocialMetricsClient(provider) {
16
+ const make = registry[provider];
17
+ if (!make) {
18
+ throw new Error(`Social metrics not implemented for '${provider}'`);
19
+ }
20
+ return make();
21
+ }
22
+ function isSocialMetricsSupported(provider) {
23
+ return Boolean(registry[provider]);
24
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./types";
2
+ export * from "./youtube.metrics";
3
+ export * from "./meta.metrics";
4
+ export * from "./tiktok.metrics";
5
+ export * from "./factory";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/socialMetrics/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./youtube.metrics"), exports);
19
+ __exportStar(require("./meta.metrics"), exports);
20
+ __exportStar(require("./tiktok.metrics"), exports);
21
+ __exportStar(require("./factory"), exports);
@@ -0,0 +1,22 @@
1
+ import { ESocialProvider } from "../../globals/types";
2
+ import { ISocialMetricSnapshot } from "../../models/social.model";
3
+ import { AudienceInput, ISocialAudience, ISocialMetricsClient, MetricsInput } from "./types";
4
+ /** Instagram media insights for a published Reel/media. */
5
+ export declare class InstagramMetricsClient implements ISocialMetricsClient {
6
+ readonly provider = ESocialProvider.INSTAGRAM;
7
+ fetchPostMetrics({ accessToken, providerPostId, }: MetricsInput): Promise<ISocialMetricSnapshot>;
8
+ /**
9
+ * IG audience demographics via the account-level insights edge. Needs a
10
+ * business/creator account with ≥100 followers; otherwise Graph errors and we
11
+ * let the caller degrade to "not supported". `follower_demographics` returns
12
+ * a breakdown keyed by the requested dimension; `follower_count` (lifetime
13
+ * total) comes from the user node.
14
+ */
15
+ fetchAudience({ accessToken, providerAccountId, }: AudienceInput): Promise<ISocialAudience>;
16
+ }
17
+ /** Facebook Page video metrics via the video object summaries. */
18
+ export declare class FacebookMetricsClient implements ISocialMetricsClient {
19
+ readonly provider = ESocialProvider.FACEBOOK;
20
+ fetchPostMetrics({ accessToken, providerPostId, }: MetricsInput): Promise<ISocialMetricSnapshot>;
21
+ }
22
+ //# sourceMappingURL=meta.metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.metrics.d.ts","sourceRoot":"","sources":["../../../src/services/socialMetrics/meta.metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EACL,aAAa,EAEb,eAAe,EACf,oBAAoB,EACpB,YAAY,EACb,MAAM,SAAS,CAAC;AAgCjB,2DAA2D;AAC3D,qBAAa,sBAAuB,YAAW,oBAAoB;IACjE,QAAQ,CAAC,QAAQ,6BAA6B;IAExC,gBAAgB,CAAC,EACrB,WAAW,EACX,cAAc,GACf,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiDhD;;;;;;OAMG;IACG,aAAa,CAAC,EAClB,WAAW,EACX,iBAAiB,GAClB,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAmD5C;AAoBD,kEAAkE;AAClE,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,QAAQ,CAAC,QAAQ,4BAA4B;IAEvC,gBAAgB,CAAC,EACrB,WAAW,EACX,cAAc,GACf,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAkBjD"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FacebookMetricsClient = exports.InstagramMetricsClient = void 0;
4
+ const types_1 = require("../../globals/types");
5
+ /**
6
+ * Meta metrics clients — Phase 3. Meta deprecated `impressions` in 2025, so we
7
+ * key analytics on `views`/`reach` (plan §3). Both clients normalize Graph
8
+ * responses into ISocialMetricSnapshot; missing metrics default to 0 (a fresh
9
+ * post may not have all insights populated for 24–72h).
10
+ *
11
+ * Config (env): META_GRAPH_VERSION (optional, default v21.0).
12
+ */
13
+ const DEFAULT_GRAPH_VERSION = "v21.0";
14
+ function graph(path) {
15
+ const v = process.env.META_GRAPH_VERSION || DEFAULT_GRAPH_VERSION;
16
+ return `https://graph.facebook.com/${v}${path}`;
17
+ }
18
+ function toNum(v) {
19
+ const n = typeof v === "number" ? v : Number(v);
20
+ return Number.isFinite(n) ? n : 0;
21
+ }
22
+ /** Instagram media insights for a published Reel/media. */
23
+ class InstagramMetricsClient {
24
+ constructor() {
25
+ this.provider = types_1.ESocialProvider.INSTAGRAM;
26
+ }
27
+ async fetchPostMetrics({ accessToken, providerPostId, }) {
28
+ const tokenQs = `access_token=${encodeURIComponent(accessToken)}`;
29
+ // like_count / comments_count come from the media object itself.
30
+ const fieldsResp = await fetch(graph(`/${providerPostId}?fields=like_count,comments_count&${tokenQs}`));
31
+ const fields = (await fieldsResp.json());
32
+ if (!fieldsResp.ok || fields.error) {
33
+ throw new Error(`InstagramMetrics: media fields ${fieldsResp.status} ${fields.error?.message ?? ""}`.trim());
34
+ }
35
+ // reach / saves / shares / plays(views) come from the insights edge.
36
+ const snapshot = {
37
+ likes: toNum(fields.like_count),
38
+ comments: toNum(fields.comments_count),
39
+ };
40
+ try {
41
+ const insightsResp = await fetch(graph(`/${providerPostId}/insights?metric=reach,saved,shares,plays&${tokenQs}`));
42
+ const insights = (await insightsResp.json());
43
+ for (const m of insights.data ?? []) {
44
+ const value = toNum(m.values?.[0]?.value);
45
+ switch (m.name) {
46
+ case "reach":
47
+ snapshot.reach = value;
48
+ break;
49
+ case "saved":
50
+ snapshot.saves = value;
51
+ break;
52
+ case "shares":
53
+ snapshot.shares = value;
54
+ break;
55
+ case "plays":
56
+ snapshot.views = value;
57
+ break;
58
+ }
59
+ }
60
+ }
61
+ catch {
62
+ // Insights can be unavailable for the first hours — counters still ship.
63
+ }
64
+ return snapshot;
65
+ }
66
+ /**
67
+ * IG audience demographics via the account-level insights edge. Needs a
68
+ * business/creator account with ≥100 followers; otherwise Graph errors and we
69
+ * let the caller degrade to "not supported". `follower_demographics` returns
70
+ * a breakdown keyed by the requested dimension; `follower_count` (lifetime
71
+ * total) comes from the user node.
72
+ */
73
+ async fetchAudience({ accessToken, providerAccountId, }) {
74
+ const tokenQs = `access_token=${encodeURIComponent(accessToken)}`;
75
+ const audience = {};
76
+ // Lifetime follower total (cheap, almost always available).
77
+ try {
78
+ const resp = await fetch(graph(`/${providerAccountId}?fields=followers_count&${tokenQs}`));
79
+ const json = (await resp.json());
80
+ if (resp.ok && typeof json.followers_count === "number") {
81
+ audience.followerCount = json.followers_count;
82
+ }
83
+ }
84
+ catch {
85
+ // Non-fatal — demographics below are the real payload.
86
+ }
87
+ // One demographic_breakdown call per dimension (Graph requires the
88
+ // breakdown param to match a single dimension at a time).
89
+ const dims = [
90
+ { key: "age", breakdown: "age" },
91
+ { key: "gender", breakdown: "gender" },
92
+ { key: "country", breakdown: "country" },
93
+ { key: "city", breakdown: "city" },
94
+ ];
95
+ for (const { key, breakdown } of dims) {
96
+ try {
97
+ const resp = await fetch(graph(`/${providerAccountId}/insights?metric=follower_demographics&period=lifetime&metric_type=total_value&breakdown=${breakdown}&${tokenQs}`));
98
+ const json = (await resp.json());
99
+ const results = json.data?.[0]?.total_value?.breakdowns?.[0]?.results ?? [];
100
+ const buckets = results
101
+ .map((r) => ({
102
+ label: r.dimension_values?.[0] ?? "",
103
+ value: toNum(r.value),
104
+ }))
105
+ .filter((b) => b.label !== "")
106
+ .sort((a, b) => b.value - a.value);
107
+ if (buckets.length > 0) {
108
+ audience[key] = buckets;
109
+ }
110
+ }
111
+ catch {
112
+ // Skip any single dimension that errors; others may still resolve.
113
+ }
114
+ }
115
+ return audience;
116
+ }
117
+ }
118
+ exports.InstagramMetricsClient = InstagramMetricsClient;
119
+ /** Facebook Page video metrics via the video object summaries. */
120
+ class FacebookMetricsClient {
121
+ constructor() {
122
+ this.provider = types_1.ESocialProvider.FACEBOOK;
123
+ }
124
+ async fetchPostMetrics({ accessToken, providerPostId, }) {
125
+ const resp = await fetch(graph(`/${providerPostId}?fields=views,likes.summary(true).limit(0),comments.summary(true).limit(0)&access_token=${encodeURIComponent(accessToken)}`));
126
+ const json = (await resp.json());
127
+ if (!resp.ok || json.error) {
128
+ throw new Error(`FacebookMetrics: video fields ${resp.status} ${json.error?.message ?? ""}`.trim());
129
+ }
130
+ return {
131
+ views: toNum(json.views),
132
+ likes: toNum(json.likes?.summary?.total_count),
133
+ comments: toNum(json.comments?.summary?.total_count),
134
+ };
135
+ }
136
+ }
137
+ exports.FacebookMetricsClient = FacebookMetricsClient;
@@ -0,0 +1,8 @@
1
+ import { ESocialProvider } from "../../globals/types";
2
+ import { ISocialMetricSnapshot } from "../../models/social.model";
3
+ import { ISocialMetricsClient, MetricsInput } from "./types";
4
+ export declare class TikTokMetricsClient implements ISocialMetricsClient {
5
+ readonly provider = ESocialProvider.TIKTOK;
6
+ fetchPostMetrics(input: MetricsInput): Promise<ISocialMetricSnapshot>;
7
+ }
8
+ //# sourceMappingURL=tiktok.metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiktok.metrics.d.ts","sourceRoot":"","sources":["../../../src/services/socialMetrics/tiktok.metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA8B7D,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,QAAQ,CAAC,QAAQ,0BAA0B;IAErC,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAuB5E"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TikTokMetricsClient = void 0;
4
+ const types_1 = require("../../globals/types");
5
+ /**
6
+ * TikTok metrics client — Phase 6. Queries the Display/Video API for a single
7
+ * video's lifetime counts and normalizes into ISocialMetricSnapshot.
8
+ *
9
+ * POST /v2/video/query/?fields=id,like_count,comment_count,share_count,view_count
10
+ * body: { filters: { video_ids: [providerPostId] } }
11
+ *
12
+ * Requires the `video.list` scope (granted only with business scopes). When the
13
+ * scope is absent the call 403s and the metrics worker logs + reschedules
14
+ * (non-fatal), so this stays best-effort like the other clients.
15
+ */
16
+ const QUERY_ENDPOINT = "https://open.tiktokapis.com/v2/video/query/?fields=id,like_count,comment_count,share_count,view_count";
17
+ class TikTokMetricsClient {
18
+ constructor() {
19
+ this.provider = types_1.ESocialProvider.TIKTOK;
20
+ }
21
+ async fetchPostMetrics(input) {
22
+ const resp = await fetch(QUERY_ENDPOINT, {
23
+ method: "POST",
24
+ headers: {
25
+ Authorization: `Bearer ${input.accessToken}`,
26
+ "Content-Type": "application/json; charset=UTF-8",
27
+ },
28
+ body: JSON.stringify({ filters: { video_ids: [input.providerPostId] } }),
29
+ });
30
+ const json = (await resp.json());
31
+ if (!resp.ok || json.error?.code) {
32
+ throw new Error(`TikTokMetrics: video query ${resp.status} ${json.error?.message ?? ""}`.trim());
33
+ }
34
+ const v = json.data?.videos?.[0];
35
+ return {
36
+ views: v?.view_count ?? 0,
37
+ likes: v?.like_count ?? 0,
38
+ comments: v?.comment_count ?? 0,
39
+ shares: v?.share_count ?? 0,
40
+ };
41
+ }
42
+ }
43
+ exports.TikTokMetricsClient = TikTokMetricsClient;
@@ -0,0 +1,54 @@
1
+ import { ESocialProvider } from "../../globals/types";
2
+ import { ISocialMetricSnapshot } from "../../models/social.model";
3
+ /**
4
+ * X8 Social Suite — analytics client abstraction. No platform pushes analytics
5
+ * and data lags 24–72h, so the metrics worker polls each published post on a
6
+ * schedule and snapshots into the `socialAnalytics` time-series. One
7
+ * implementation per platform normalizes provider metrics into
8
+ * `ISocialMetricSnapshot` (views-centric — impressions are deprecated on Meta).
9
+ * See notes/SOCIAL_SUITE_PLAN.md §3/§4.
10
+ */
11
+ export interface MetricsInput {
12
+ /** Cleartext access token for the owning account (already refreshed). */
13
+ accessToken: string;
14
+ /** Provider's post/video id to fetch metrics for. */
15
+ providerPostId: string;
16
+ }
17
+ export interface AudienceInput {
18
+ /** Cleartext access token for the owning account (already refreshed). */
19
+ accessToken: string;
20
+ /** Provider's account id (IG user id / channel id / Page id). */
21
+ providerAccountId: string;
22
+ }
23
+ /** One bucket of an audience breakdown, e.g. { label: "25-34", value: 0.32 }. */
24
+ export interface IAudienceBucket {
25
+ label: string;
26
+ /** Share 0..1 (preferred) or an absolute count where shares aren't given. */
27
+ value: number;
28
+ }
29
+ /**
30
+ * Normalized audience demographics (C7 / G3). Owner-account only and gated to
31
+ * business-tier accounts on Meta (≥100 followers). Any dimension the provider
32
+ * doesn't expose is simply omitted.
33
+ */
34
+ export interface ISocialAudience {
35
+ followerCount?: number;
36
+ age?: IAudienceBucket[];
37
+ gender?: IAudienceBucket[];
38
+ country?: IAudienceBucket[];
39
+ city?: IAudienceBucket[];
40
+ /** Active hours 0..23 (engaged-follower online time) where available. */
41
+ activeHours?: IAudienceBucket[];
42
+ }
43
+ export interface ISocialMetricsClient {
44
+ readonly provider: ESocialProvider;
45
+ /** Fetch the current lifetime metrics for one post. */
46
+ fetchPostMetrics(input: MetricsInput): Promise<ISocialMetricSnapshot>;
47
+ /**
48
+ * Fetch audience demographics for the account (owner-only, business-tier).
49
+ * Optional: providers/accounts without the capability omit it, and callers
50
+ * degrade gracefully to "not supported". See plan §C7/§2B-G3.
51
+ */
52
+ fetchAudience?(input: AudienceInput): Promise<ISocialAudience>;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/socialMetrics/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,uDAAuD;IACvD,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACtE;;;;OAIG;IACH,aAAa,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAChE"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { ESocialProvider } from "../../globals/types";
2
+ import { ISocialMetricSnapshot } from "../../models/social.model";
3
+ import { ISocialMetricsClient, MetricsInput } from "./types";
4
+ export declare class YouTubeMetricsClient implements ISocialMetricsClient {
5
+ readonly provider = ESocialProvider.YOUTUBE;
6
+ fetchPostMetrics({ accessToken, providerPostId, }: MetricsInput): Promise<ISocialMetricSnapshot>;
7
+ }
8
+ //# sourceMappingURL=youtube.metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube.metrics.d.ts","sourceRoot":"","sources":["../../../src/services/socialMetrics/youtube.metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuB7D,qBAAa,oBAAqB,YAAW,oBAAoB;IAC/D,QAAQ,CAAC,QAAQ,2BAA2B;IAEtC,gBAAgB,CAAC,EACrB,WAAW,EACX,cAAc,GACf,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAmBjD"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YouTubeMetricsClient = void 0;
4
+ const types_1 = require("../../globals/types");
5
+ /**
6
+ * YouTube metrics client. Uses the Data API `videos.list?part=statistics` for
7
+ * lifetime counters (views/likes/comments) — cheap (1 quota unit) and available
8
+ * to any channel. Watch-time / CTR / impressions live in the YouTube Analytics
9
+ * API and lag ~48–72h; we add those in Phase 4 (plan §3). Phase 1 ships the
10
+ * core counters so the analytics card has real data.
11
+ */
12
+ const STATS_ENDPOINT = "https://www.googleapis.com/youtube/v3/videos?part=statistics";
13
+ class YouTubeMetricsClient {
14
+ constructor() {
15
+ this.provider = types_1.ESocialProvider.YOUTUBE;
16
+ }
17
+ async fetchPostMetrics({ accessToken, providerPostId, }) {
18
+ const url = `${STATS_ENDPOINT}&id=${encodeURIComponent(providerPostId)}`;
19
+ const resp = await fetch(url, {
20
+ headers: { Authorization: `Bearer ${accessToken}` },
21
+ });
22
+ if (!resp.ok) {
23
+ throw new Error(`YouTubeMetrics: videos.list ${resp.status}`);
24
+ }
25
+ const json = (await resp.json());
26
+ const stats = json.items?.[0]?.statistics;
27
+ if (!stats) {
28
+ throw new Error(`YouTubeMetrics: no stats for video ${providerPostId}`);
29
+ }
30
+ return {
31
+ views: toNum(stats.viewCount),
32
+ likes: toNum(stats.likeCount),
33
+ comments: toNum(stats.commentCount),
34
+ };
35
+ }
36
+ }
37
+ exports.YouTubeMetricsClient = YouTubeMetricsClient;
38
+ function toNum(v) {
39
+ if (v === undefined)
40
+ return 0;
41
+ const n = Number(v);
42
+ return Number.isFinite(n) ? n : 0;
43
+ }
@@ -0,0 +1,7 @@
1
+ import { ESocialProvider } from "../../globals/types";
2
+ import { ISocialOAuthProvider } from "./types";
3
+ /** Returns the OAuth provider for a platform, or throws if not yet supported. */
4
+ export declare function getSocialOAuthProvider(provider: ESocialProvider): ISocialOAuthProvider;
5
+ /** True when a platform's OAuth is wired up (used to gate the connect UI). */
6
+ export declare function isSocialOAuthSupported(provider: ESocialProvider): boolean;
7
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/services/socialOAuth/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyB/C,iFAAiF;AACjF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,GACxB,oBAAoB,CAMtB;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAEzE"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSocialOAuthProvider = getSocialOAuthProvider;
4
+ exports.isSocialOAuthSupported = isSocialOAuthSupported;
5
+ const types_1 = require("../../globals/types");
6
+ const linkedin_oauth_1 = require("./linkedin.oauth");
7
+ const meta_oauth_1 = require("./meta.oauth");
8
+ const pinterest_oauth_1 = require("./pinterest.oauth");
9
+ const threads_oauth_1 = require("./threads.oauth");
10
+ const tiktok_oauth_1 = require("./tiktok.oauth");
11
+ const x_oauth_1 = require("./x.oauth");
12
+ const youtube_oauth_1 = require("./youtube.oauth");
13
+ /**
14
+ * OAuth provider factory. Mirrors the aiGenFactory pattern: map a provider enum
15
+ * to its implementation. Add TikTok/LinkedIn here as their phases land.
16
+ *
17
+ * Meta backs both FACEBOOK and INSTAGRAM: one Facebook Login grant resolves the
18
+ * user's Pages (FACEBOOK) or their linked IG Business accounts (INSTAGRAM); the
19
+ * `target` ctor arg selects which the callback persists.
20
+ */
21
+ const registry = {
22
+ [types_1.ESocialProvider.YOUTUBE]: () => new youtube_oauth_1.YouTubeOAuthProvider(),
23
+ [types_1.ESocialProvider.FACEBOOK]: () => new meta_oauth_1.MetaOAuthProvider(types_1.ESocialProvider.FACEBOOK),
24
+ [types_1.ESocialProvider.INSTAGRAM]: () => new meta_oauth_1.MetaOAuthProvider(types_1.ESocialProvider.INSTAGRAM),
25
+ [types_1.ESocialProvider.TIKTOK]: () => new tiktok_oauth_1.TikTokOAuthProvider(),
26
+ [types_1.ESocialProvider.THREADS]: () => new threads_oauth_1.ThreadsOAuthProvider(),
27
+ [types_1.ESocialProvider.LINKEDIN]: () => new linkedin_oauth_1.LinkedInOAuthProvider(),
28
+ [types_1.ESocialProvider.X]: () => new x_oauth_1.XOAuthProvider(),
29
+ [types_1.ESocialProvider.PINTEREST]: () => new pinterest_oauth_1.PinterestOAuthProvider(),
30
+ };
31
+ /** Returns the OAuth provider for a platform, or throws if not yet supported. */
32
+ function getSocialOAuthProvider(provider) {
33
+ const make = registry[provider];
34
+ if (!make) {
35
+ throw new Error(`Social OAuth not implemented for provider '${provider}'`);
36
+ }
37
+ return make();
38
+ }
39
+ /** True when a platform's OAuth is wired up (used to gate the connect UI). */
40
+ function isSocialOAuthSupported(provider) {
41
+ return Boolean(registry[provider]);
42
+ }
@@ -0,0 +1,11 @@
1
+ export * from "./types";
2
+ export * from "./youtube.oauth";
3
+ export * from "./meta.oauth";
4
+ export * from "./tiktok.oauth";
5
+ export * from "./threads.oauth";
6
+ export * from "./linkedin.oauth";
7
+ export * from "./x.oauth";
8
+ export * from "./pinterest.oauth";
9
+ export * from "./oauthState";
10
+ export * from "./factory";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/socialOAuth/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./youtube.oauth"), exports);
19
+ __exportStar(require("./meta.oauth"), exports);
20
+ __exportStar(require("./tiktok.oauth"), exports);
21
+ __exportStar(require("./threads.oauth"), exports);
22
+ __exportStar(require("./linkedin.oauth"), exports);
23
+ __exportStar(require("./x.oauth"), exports);
24
+ __exportStar(require("./pinterest.oauth"), exports);
25
+ __exportStar(require("./oauthState"), exports);
26
+ __exportStar(require("./factory"), exports);
@@ -0,0 +1,14 @@
1
+ import { ESocialProvider } from "../../globals/types";
2
+ import { AuthUrlParams, ConnectResult, ExchangeCodeParams, ISocialOAuthProvider, OAuthTokens } from "./types";
3
+ export declare class LinkedInOAuthProvider implements ISocialOAuthProvider {
4
+ readonly provider = ESocialProvider.LINKEDIN;
5
+ private clientId;
6
+ private clientSecret;
7
+ getAuthUrl({ state, redirectUri, requestBusinessScopes, }: AuthUrlParams): string;
8
+ exchangeCode({ code, redirectUri, }: ExchangeCodeParams): Promise<ConnectResult>;
9
+ refresh(refreshToken: string): Promise<OAuthTokens>;
10
+ private postToken;
11
+ private toTokens;
12
+ private resolveAccount;
13
+ }
14
+ //# sourceMappingURL=linkedin.oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkedin.oauth.d.ts","sourceRoot":"","sources":["../../../src/services/socialOAuth/linkedin.oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EACL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACZ,MAAM,SAAS,CAAC;AAyCjB,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,QAAQ,CAAC,QAAQ,4BAA4B;IAE7C,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,YAAY;IAMpB,UAAU,CAAC,EACT,KAAK,EACL,WAAW,EACX,qBAAqB,GACtB,EAAE,aAAa,GAAG,MAAM;IAcnB,YAAY,CAAC,EACjB,IAAI,EACJ,WAAW,GACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBxC,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;YAiB3C,SAAS;IAmBvB,OAAO,CAAC,QAAQ;YAaF,cAAc;CAiB7B"}