vidspotai-shared 1.0.69-dev.0 → 1.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/globals/aiModels/enums.d.ts +6 -63
- package/lib/globals/aiModels/enums.d.ts.map +1 -1
- package/lib/globals/aiModels/enums.js +9 -78
- package/lib/globals/aiModels/index.d.ts +30 -2
- package/lib/globals/aiModels/index.d.ts.map +1 -1
- package/lib/globals/aiModels/index.js +35 -7
- package/lib/globals/aiModels/providers/bytedance.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/bytedance.js +0 -19
- package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/google.js +2 -150
- package/lib/globals/aiModels/providers/kling.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/kling.js +37 -280
- package/lib/globals/aiModels/providers/minimax.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/minimax.js +11 -76
- package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/openai.js +6 -90
- package/lib/globals/aiModels/providers/pixverse.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/pixverse.js +29 -111
- package/lib/globals/aiModels/providers/runway.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/runway.js +2 -64
- package/lib/globals/aiModels/types.d.ts +1 -20
- package/lib/globals/aiModels/types.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.d.ts +0 -2
- package/lib/globals/ttsModels/index.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.js +1 -9
- package/lib/globals/ttsModels/types.d.ts +1 -1
- package/lib/globals/ttsModels/types.d.ts.map +1 -1
- package/lib/globals/ttsModels/voices.d.ts +4 -39
- package/lib/globals/ttsModels/voices.d.ts.map +1 -1
- package/lib/globals/ttsModels/voices.js +26 -273
- package/lib/globals/types.d.ts +1 -59
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/globals/types.js +2 -81
- package/lib/index.d.ts +0 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +0 -1
- package/lib/models/index.d.ts +0 -6
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/index.js +0 -6
- package/lib/models/user.model.d.ts +1 -12
- package/lib/models/user.model.d.ts.map +1 -1
- package/lib/models/video.model.d.ts +8 -120
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/models/video.model.js +0 -10
- package/lib/services/aiGen/aiGenFactory.service.d.ts +1 -21
- package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
- package/lib/services/aiGen/aiGenFactory.service.js +21 -84
- package/lib/services/aiGen/helpers.d.ts.map +1 -1
- package/lib/services/aiGen/helpers.js +0 -10
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts +3 -14
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts.map +1 -1
- package/lib/services/aiGen/providers/alibaba/alibaba.js +22 -155
- package/lib/services/aiGen/providers/azure/azure.service.d.ts +14 -0
- package/lib/services/aiGen/providers/azure/azure.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/azure/azure.service.js +108 -0
- package/lib/services/aiGen/providers/azure/index.d.ts +2 -0
- package/lib/services/aiGen/providers/azure/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/{pexels → azure}/index.js +1 -1
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts +4 -22
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/baseAiGenProvider.service.js +0 -32
- package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/bytedance/bytedance.service.js +25 -13
- package/lib/services/aiGen/providers/google/google.service.d.ts +2 -11
- package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/google.service.js +28 -245
- package/lib/services/aiGen/providers/index.d.ts +0 -3
- package/lib/services/aiGen/providers/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/index.js +0 -3
- package/lib/services/aiGen/providers/kling/index.d.ts +0 -1
- package/lib/services/aiGen/providers/kling/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/index.js +0 -1
- package/lib/services/aiGen/providers/kling/kling.service.d.ts +1 -12
- package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/kling.service.js +26 -357
- package/lib/services/aiGen/providers/kling/types.d.ts +0 -105
- package/lib/services/aiGen/providers/kling/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts +2 -15
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.js +5 -128
- package/lib/services/aiGen/providers/minimax/types.d.ts +1 -10
- package/lib/services/aiGen/providers/minimax/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.d.ts +2 -8
- package/lib/services/aiGen/providers/openai/openai.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.js +7 -184
- package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/pixverse/pixverse.service.js +2 -125
- package/lib/services/aiGen/providers/runway/runway.service.d.ts +2 -12
- package/lib/services/aiGen/providers/runway/runway.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/runway/runway.service.js +21 -224
- package/lib/services/aiGen/providers/types.d.ts +6 -263
- package/lib/services/aiGen/providers/types.d.ts.map +1 -1
- package/lib/services/analytics.service.js +4 -2
- package/lib/services/bullmq.service.d.ts +1 -6
- package/lib/services/bullmq.service.d.ts.map +1 -1
- package/lib/services/bullmq.service.js +14 -62
- package/lib/services/credit.service.d.ts.map +1 -1
- package/lib/services/credit.service.js +7 -45
- package/lib/services/firestore.service.d.ts +0 -17
- package/lib/services/firestore.service.d.ts.map +1 -1
- package/lib/services/firestore.service.js +0 -30
- package/lib/services/gcp/index.d.ts +0 -1
- package/lib/services/gcp/index.d.ts.map +1 -1
- package/lib/services/gcp/index.js +0 -1
- package/lib/services/index.d.ts +0 -13
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +0 -13
- package/lib/services/redis.service.d.ts +0 -9
- package/lib/services/redis.service.d.ts.map +1 -1
- package/lib/services/redis.service.js +11 -20
- package/lib/services/tts/index.d.ts +0 -2
- package/lib/services/tts/index.d.ts.map +1 -1
- package/lib/services/tts/index.js +0 -2
- package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -1
- package/lib/services/tts/providers/elevenlabs.service.js +24 -91
- package/lib/services/tts/ttsFactory.service.d.ts.map +1 -1
- package/lib/services/tts/ttsFactory.service.js +0 -6
- package/lib/services/tts/types.d.ts +0 -33
- package/lib/services/tts/types.d.ts.map +1 -1
- package/lib/utils/errors.d.ts +0 -8
- package/lib/utils/errors.d.ts.map +1 -1
- package/lib/utils/errors.js +0 -8
- package/lib/utils/helpers.d.ts +0 -13
- package/lib/utils/helpers.d.ts.map +1 -1
- package/lib/utils/helpers.js +11 -48
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +1 -37
- package/package.json +1 -5
- package/lib/globals/aiModels/providers/alibaba.d.ts +0 -4
- package/lib/globals/aiModels/providers/alibaba.d.ts.map +0 -1
- package/lib/globals/aiModels/providers/alibaba.js +0 -194
- package/lib/globals/aiModels/providers/elevenlabs.d.ts +0 -14
- package/lib/globals/aiModels/providers/elevenlabs.d.ts.map +0 -1
- package/lib/globals/aiModels/providers/elevenlabs.js +0 -29
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts +0 -36
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts.map +0 -1
- package/lib/globals/aiModels/providers/pixverseTemplates.js +0 -42
- package/lib/globals/aiModels/tierHelpers.d.ts +0 -33
- package/lib/globals/aiModels/tierHelpers.d.ts.map +0 -1
- package/lib/globals/aiModels/tierHelpers.js +0 -109
- package/lib/globals/ttsModels/providers/minimax.d.ts +0 -8
- package/lib/globals/ttsModels/providers/minimax.d.ts.map +0 -1
- package/lib/globals/ttsModels/providers/minimax.js +0 -18
- package/lib/globals/ttsModels/providers/openai.d.ts +0 -12
- package/lib/globals/ttsModels/providers/openai.d.ts.map +0 -1
- package/lib/globals/ttsModels/providers/openai.js +0 -22
- package/lib/models/agent.model.d.ts +0 -357
- package/lib/models/agent.model.d.ts.map +0 -1
- package/lib/models/agent.model.js +0 -21
- package/lib/models/cachedAsset.model.d.ts +0 -18
- package/lib/models/cachedAsset.model.d.ts.map +0 -1
- package/lib/models/cachedAsset.model.js +0 -2
- package/lib/models/cachedRawAsset.model.d.ts +0 -20
- package/lib/models/cachedRawAsset.model.d.ts.map +0 -1
- package/lib/models/cachedRawAsset.model.js +0 -2
- package/lib/models/image.model.d.ts +0 -47
- package/lib/models/image.model.d.ts.map +0 -1
- package/lib/models/image.model.js +0 -2
- package/lib/models/notification.model.d.ts +0 -25
- package/lib/models/notification.model.d.ts.map +0 -1
- package/lib/models/notification.model.js +0 -2
- package/lib/models/ref.model.d.ts +0 -80
- package/lib/models/ref.model.d.ts.map +0 -1
- package/lib/models/ref.model.js +0 -13
- package/lib/models/share.model.d.ts +0 -29
- package/lib/models/share.model.d.ts.map +0 -1
- package/lib/models/share.model.js +0 -2
- package/lib/schemas/agentPersona.schema.d.ts +0 -10
- package/lib/schemas/agentPersona.schema.d.ts.map +0 -1
- package/lib/schemas/agentPersona.schema.js +0 -11
- package/lib/schemas/agentRunJob.schema.d.ts +0 -105
- package/lib/schemas/agentRunJob.schema.d.ts.map +0 -1
- package/lib/schemas/agentRunJob.schema.js +0 -88
- package/lib/schemas/brandKit.schema.d.ts +0 -113
- package/lib/schemas/brandKit.schema.d.ts.map +0 -1
- package/lib/schemas/brandKit.schema.js +0 -46
- package/lib/schemas/brief.schema.d.ts +0 -263
- package/lib/schemas/brief.schema.d.ts.map +0 -1
- package/lib/schemas/brief.schema.js +0 -157
- package/lib/schemas/index.d.ts +0 -7
- package/lib/schemas/index.d.ts.map +0 -1
- package/lib/schemas/index.js +0 -22
- package/lib/schemas/project.schema.d.ts +0 -1025
- package/lib/schemas/project.schema.d.ts.map +0 -1
- package/lib/schemas/project.schema.js +0 -256
- package/lib/schemas/videoPlan.schema.d.ts +0 -590
- package/lib/schemas/videoPlan.schema.d.ts.map +0 -1
- package/lib/schemas/videoPlan.schema.js +0 -412
- package/lib/services/agent/beatSnap.d.ts +0 -10
- package/lib/services/agent/beatSnap.d.ts.map +0 -1
- package/lib/services/agent/beatSnap.js +0 -128
- package/lib/services/agent/bibleBuilder.d.ts +0 -43
- package/lib/services/agent/bibleBuilder.d.ts.map +0 -1
- package/lib/services/agent/bibleBuilder.js +0 -102
- package/lib/services/agent/bibleImageVision.d.ts +0 -45
- package/lib/services/agent/bibleImageVision.d.ts.map +0 -1
- package/lib/services/agent/bibleImageVision.js +0 -169
- package/lib/services/agent/chatAgent.d.ts +0 -79
- package/lib/services/agent/chatAgent.d.ts.map +0 -1
- package/lib/services/agent/chatAgent.js +0 -136
- package/lib/services/agent/costPreflight.d.ts +0 -61
- package/lib/services/agent/costPreflight.d.ts.map +0 -1
- package/lib/services/agent/costPreflight.js +0 -143
- package/lib/services/agent/critic.d.ts +0 -103
- package/lib/services/agent/critic.d.ts.map +0 -1
- package/lib/services/agent/critic.js +0 -139
- package/lib/services/agent/editClassifier.d.ts +0 -262
- package/lib/services/agent/editClassifier.d.ts.map +0 -1
- package/lib/services/agent/editClassifier.js +0 -186
- package/lib/services/agent/eval/index.d.ts +0 -5
- package/lib/services/agent/eval/index.d.ts.map +0 -1
- package/lib/services/agent/eval/index.js +0 -20
- package/lib/services/agent/eval/judge.d.ts +0 -14
- package/lib/services/agent/eval/judge.d.ts.map +0 -1
- package/lib/services/agent/eval/judge.js +0 -96
- package/lib/services/agent/eval/recorder.d.ts +0 -28
- package/lib/services/agent/eval/recorder.d.ts.map +0 -1
- package/lib/services/agent/eval/recorder.js +0 -100
- package/lib/services/agent/eval/seedBriefs.d.ts +0 -16
- package/lib/services/agent/eval/seedBriefs.d.ts.map +0 -1
- package/lib/services/agent/eval/seedBriefs.js +0 -1188
- package/lib/services/agent/eval/types.d.ts +0 -230
- package/lib/services/agent/eval/types.d.ts.map +0 -1
- package/lib/services/agent/eval/types.js +0 -73
- package/lib/services/agent/executor.d.ts +0 -141
- package/lib/services/agent/executor.d.ts.map +0 -1
- package/lib/services/agent/executor.js +0 -561
- package/lib/services/agent/globalActions.d.ts +0 -49
- package/lib/services/agent/globalActions.d.ts.map +0 -1
- package/lib/services/agent/globalActions.js +0 -328
- package/lib/services/agent/index.d.ts +0 -38
- package/lib/services/agent/index.d.ts.map +0 -1
- package/lib/services/agent/index.js +0 -53
- package/lib/services/agent/llmCaller.d.ts +0 -144
- package/lib/services/agent/llmCaller.d.ts.map +0 -1
- package/lib/services/agent/llmCaller.js +0 -16
- package/lib/services/agent/llmCallerAnthropic.d.ts +0 -90
- package/lib/services/agent/llmCallerAnthropic.d.ts.map +0 -1
- package/lib/services/agent/llmCallerAnthropic.js +0 -255
- package/lib/services/agent/llmCallerGateway.d.ts +0 -61
- package/lib/services/agent/llmCallerGateway.d.ts.map +0 -1
- package/lib/services/agent/llmCallerGateway.js +0 -360
- package/lib/services/agent/llmCallerRegistry.d.ts +0 -6
- package/lib/services/agent/llmCallerRegistry.d.ts.map +0 -1
- package/lib/services/agent/llmCallerRegistry.js +0 -39
- package/lib/services/agent/modelQualityNotes.d.ts +0 -100
- package/lib/services/agent/modelQualityNotes.d.ts.map +0 -1
- package/lib/services/agent/modelQualityNotes.js +0 -248
- package/lib/services/agent/modelRouter.d.ts +0 -41
- package/lib/services/agent/modelRouter.d.ts.map +0 -1
- package/lib/services/agent/modelRouter.js +0 -65
- package/lib/services/agent/musicSelect.d.ts +0 -23
- package/lib/services/agent/musicSelect.d.ts.map +0 -1
- package/lib/services/agent/musicSelect.js +0 -109
- package/lib/services/agent/overlayRenderer.d.ts +0 -67
- package/lib/services/agent/overlayRenderer.d.ts.map +0 -1
- package/lib/services/agent/overlayRenderer.js +0 -253
- package/lib/services/agent/perSceneCritic.d.ts +0 -90
- package/lib/services/agent/perSceneCritic.d.ts.map +0 -1
- package/lib/services/agent/perSceneCritic.js +0 -125
- package/lib/services/agent/personas.d.ts +0 -78
- package/lib/services/agent/personas.d.ts.map +0 -1
- package/lib/services/agent/personas.js +0 -177
- package/lib/services/agent/planDiff.d.ts +0 -76
- package/lib/services/agent/planDiff.d.ts.map +0 -1
- package/lib/services/agent/planDiff.js +0 -182
- package/lib/services/agent/planMutations.d.ts +0 -46
- package/lib/services/agent/planMutations.d.ts.map +0 -1
- package/lib/services/agent/planMutations.js +0 -120
- package/lib/services/agent/planner/Planner.d.ts +0 -107
- package/lib/services/agent/planner/Planner.d.ts.map +0 -1
- package/lib/services/agent/planner/Planner.js +0 -591
- package/lib/services/agent/planner/overlaySanity.d.ts +0 -7
- package/lib/services/agent/planner/overlaySanity.d.ts.map +0 -1
- package/lib/services/agent/planner/overlaySanity.js +0 -86
- package/lib/services/agent/planner/promptSections.d.ts +0 -25
- package/lib/services/agent/planner/promptSections.d.ts.map +0 -1
- package/lib/services/agent/planner/promptSections.js +0 -174
- package/lib/services/agent/planner/repair.d.ts +0 -16
- package/lib/services/agent/planner/repair.d.ts.map +0 -1
- package/lib/services/agent/planner/repair.js +0 -51
- package/lib/services/agent/planner/structuralRules.d.ts +0 -10
- package/lib/services/agent/planner/structuralRules.d.ts.map +0 -1
- package/lib/services/agent/planner/structuralRules.js +0 -111
- package/lib/services/agent/planner/validators.d.ts +0 -65
- package/lib/services/agent/planner/validators.d.ts.map +0 -1
- package/lib/services/agent/planner/validators.js +0 -284
- package/lib/services/agent/planner.d.ts +0 -3
- package/lib/services/agent/planner.d.ts.map +0 -1
- package/lib/services/agent/planner.js +0 -14
- package/lib/services/agent/providerFallback/chains.d.ts +0 -100
- package/lib/services/agent/providerFallback/chains.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/chains.js +0 -198
- package/lib/services/agent/providerFallback/classifier.d.ts +0 -36
- package/lib/services/agent/providerFallback/classifier.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/classifier.js +0 -103
- package/lib/services/agent/providerFallback/index.d.ts +0 -4
- package/lib/services/agent/providerFallback/index.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/index.js +0 -19
- package/lib/services/agent/providerFallback/withFallback.d.ts +0 -60
- package/lib/services/agent/providerFallback/withFallback.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/withFallback.js +0 -93
- package/lib/services/agent/providerTaskCache.d.ts +0 -50
- package/lib/services/agent/providerTaskCache.d.ts.map +0 -1
- package/lib/services/agent/providerTaskCache.js +0 -98
- package/lib/services/agent/qualityGate.d.ts +0 -82
- package/lib/services/agent/qualityGate.d.ts.map +0 -1
- package/lib/services/agent/qualityGate.js +0 -232
- package/lib/services/agent/referenceImageRenderer.d.ts +0 -37
- package/lib/services/agent/referenceImageRenderer.d.ts.map +0 -1
- package/lib/services/agent/referenceImageRenderer.js +0 -92
- package/lib/services/agent/regenCore.d.ts +0 -60
- package/lib/services/agent/regenCore.d.ts.map +0 -1
- package/lib/services/agent/regenCore.js +0 -487
- package/lib/services/agent/runHelpers.d.ts +0 -44
- package/lib/services/agent/runHelpers.d.ts.map +0 -1
- package/lib/services/agent/runHelpers.js +0 -196
- package/lib/services/agent/sceneLayoutVision.d.ts +0 -90
- package/lib/services/agent/sceneLayoutVision.d.ts.map +0 -1
- package/lib/services/agent/sceneLayoutVision.js +0 -212
- package/lib/services/agent/stitchedVideoCritic.d.ts +0 -136
- package/lib/services/agent/stitchedVideoCritic.d.ts.map +0 -1
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts +0 -26
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts.map +0 -1
- package/lib/services/agent/stitchedVideoCritic.gemini.js +0 -198
- package/lib/services/agent/stitchedVideoCritic.js +0 -162
- package/lib/services/agent/taskPoller.d.ts +0 -65
- package/lib/services/agent/taskPoller.d.ts.map +0 -1
- package/lib/services/agent/taskPoller.js +0 -176
- package/lib/services/agent/textOverlayStyles.d.ts +0 -60
- package/lib/services/agent/textOverlayStyles.d.ts.map +0 -1
- package/lib/services/agent/textOverlayStyles.js +0 -174
- package/lib/services/agent/toolRegistry.d.ts +0 -73
- package/lib/services/agent/toolRegistry.d.ts.map +0 -1
- package/lib/services/agent/toolRegistry.js +0 -95
- package/lib/services/agent/tools/analyzeReference.tool.d.ts +0 -36
- package/lib/services/agent/tools/analyzeReference.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/analyzeReference.tool.js +0 -44
- package/lib/services/agent/tools/animateImage.tool.d.ts +0 -24
- package/lib/services/agent/tools/animateImage.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/animateImage.tool.js +0 -115
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts +0 -32
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.js +0 -135
- package/lib/services/agent/tools/composeScene.tool.d.ts +0 -978
- package/lib/services/agent/tools/composeScene.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/composeScene.tool.js +0 -90
- package/lib/services/agent/tools/estimateCost.tool.d.ts +0 -352
- package/lib/services/agent/tools/estimateCost.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/estimateCost.tool.js +0 -62
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +0 -32
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateAvatarVideo.tool.js +0 -143
- package/lib/services/agent/tools/generateCaptions.tool.d.ts +0 -42
- package/lib/services/agent/tools/generateCaptions.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateCaptions.tool.js +0 -196
- package/lib/services/agent/tools/generateImage.tool.d.ts +0 -74
- package/lib/services/agent/tools/generateImage.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateImage.tool.js +0 -206
- package/lib/services/agent/tools/generateVideo.tool.d.ts +0 -31
- package/lib/services/agent/tools/generateVideo.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateVideo.tool.js +0 -153
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts +0 -44
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateVoiceover.tool.js +0 -206
- package/lib/services/agent/tools/index.d.ts +0 -20
- package/lib/services/agent/tools/index.d.ts.map +0 -1
- package/lib/services/agent/tools/index.js +0 -35
- package/lib/services/agent/tools/planVideo.tool.d.ts +0 -343
- package/lib/services/agent/tools/planVideo.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/planVideo.tool.js +0 -46
- package/lib/services/agent/tools/render.tool.d.ts +0 -367
- package/lib/services/agent/tools/render.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/render.tool.js +0 -48
- package/lib/services/agent/tools/searchMusic.tool.d.ts +0 -49
- package/lib/services/agent/tools/searchMusic.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/searchMusic.tool.js +0 -74
- package/lib/services/agent/tools/searchStock.tool.d.ts +0 -41
- package/lib/services/agent/tools/searchStock.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/searchStock.tool.js +0 -314
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts +0 -59
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/searchUserLibrary.tool.js +0 -58
- package/lib/services/agent/ttsDuration.d.ts +0 -29
- package/lib/services/agent/ttsDuration.d.ts.map +0 -1
- package/lib/services/agent/ttsDuration.js +0 -60
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts +0 -31
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts.map +0 -1
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.js +0 -2
- package/lib/services/aiGen/canonicalAdapters/index.d.ts +0 -3
- package/lib/services/aiGen/canonicalAdapters/index.d.ts.map +0 -1
- package/lib/services/aiGen/canonicalAdapters/index.js +0 -18
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts +0 -23
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts.map +0 -1
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.js +0 -12
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts +0 -18
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.js +0 -102
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts +0 -15
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/fal/falImage.service.js +0 -141
- package/lib/services/aiGen/providers/fal/index.d.ts +0 -2
- package/lib/services/aiGen/providers/fal/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/fal/index.js +0 -17
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts +0 -4
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts.map +0 -1
- package/lib/services/aiGen/providers/kling/cameraAdapter.js +0 -53
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts +0 -21
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/kling/klingImage.service.js +0 -208
- package/lib/services/aiGen/providers/pexels/index.d.ts +0 -2
- package/lib/services/aiGen/providers/pexels/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts +0 -11
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pexels/pexels.service.js +0 -150
- package/lib/services/aiGen/providers/pixabay/index.d.ts +0 -2
- package/lib/services/aiGen/providers/pixabay/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pixabay/index.js +0 -17
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts +0 -12
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pixabay/pixabay.service.js +0 -156
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts +0 -3
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts.map +0 -1
- package/lib/services/aiGen/providers/runway/cameraAdapter.js +0 -46
- package/lib/services/aiGen/providers/unsplash/index.d.ts +0 -2
- package/lib/services/aiGen/providers/unsplash/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/unsplash/index.js +0 -17
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts +0 -16
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/unsplash/unsplash.service.js +0 -131
- package/lib/services/apiUsageCounter.service.d.ts +0 -20
- package/lib/services/apiUsageCounter.service.d.ts.map +0 -1
- package/lib/services/apiUsageCounter.service.js +0 -84
- package/lib/services/asr/assemblyai.service.d.ts +0 -72
- package/lib/services/asr/assemblyai.service.d.ts.map +0 -1
- package/lib/services/asr/assemblyai.service.js +0 -89
- package/lib/services/asr/index.d.ts +0 -3
- package/lib/services/asr/index.d.ts.map +0 -1
- package/lib/services/asr/index.js +0 -18
- package/lib/services/asr/whisper.service.d.ts +0 -18
- package/lib/services/asr/whisper.service.d.ts.map +0 -1
- package/lib/services/asr/whisper.service.js +0 -151
- package/lib/services/assetCache.service.d.ts +0 -54
- package/lib/services/assetCache.service.d.ts.map +0 -1
- package/lib/services/assetCache.service.js +0 -109
- package/lib/services/audioAnalysis/index.d.ts +0 -2
- package/lib/services/audioAnalysis/index.d.ts.map +0 -1
- package/lib/services/audioAnalysis/index.js +0 -17
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts +0 -50
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts.map +0 -1
- package/lib/services/audioAnalysis/onsetDetection.service.js +0 -140
- package/lib/services/credits/pricing.d.ts +0 -58
- package/lib/services/credits/pricing.d.ts.map +0 -1
- package/lib/services/credits/pricing.js +0 -111
- package/lib/services/editor/designToProject.d.ts +0 -75
- package/lib/services/editor/designToProject.d.ts.map +0 -1
- package/lib/services/editor/designToProject.js +0 -295
- package/lib/services/editor/planToProject.d.ts +0 -84
- package/lib/services/editor/planToProject.d.ts.map +0 -1
- package/lib/services/editor/planToProject.js +0 -395
- package/lib/services/editor/projectToDesign.d.ts +0 -4
- package/lib/services/editor/projectToDesign.d.ts.map +0 -1
- package/lib/services/editor/projectToDesign.js +0 -186
- package/lib/services/gcp/uploadAudioBuffer.d.ts +0 -13
- package/lib/services/gcp/uploadAudioBuffer.d.ts.map +0 -1
- package/lib/services/gcp/uploadAudioBuffer.js +0 -28
- package/lib/services/musicGen/index.d.ts +0 -6
- package/lib/services/musicGen/index.d.ts.map +0 -1
- package/lib/services/musicGen/index.js +0 -26
- package/lib/services/musicGen/musicSearchFactory.service.d.ts +0 -14
- package/lib/services/musicGen/musicSearchFactory.service.d.ts.map +0 -1
- package/lib/services/musicGen/musicSearchFactory.service.js +0 -59
- package/lib/services/musicGen/providers/curated.service.d.ts +0 -24
- package/lib/services/musicGen/providers/curated.service.d.ts.map +0 -1
- package/lib/services/musicGen/providers/curated.service.js +0 -173
- package/lib/services/musicGen/providers/jamendo.service.d.ts +0 -8
- package/lib/services/musicGen/providers/jamendo.service.d.ts.map +0 -1
- package/lib/services/musicGen/providers/jamendo.service.js +0 -113
- package/lib/services/musicGen/providers/mubert.service.d.ts +0 -10
- package/lib/services/musicGen/providers/mubert.service.d.ts.map +0 -1
- package/lib/services/musicGen/providers/mubert.service.js +0 -128
- package/lib/services/musicGen/types.d.ts +0 -46
- package/lib/services/musicGen/types.d.ts.map +0 -1
- package/lib/services/musicGen/types.js +0 -10
- package/lib/services/notification.service.d.ts +0 -22
- package/lib/services/notification.service.d.ts.map +0 -1
- package/lib/services/notification.service.js +0 -76
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts +0 -78
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts.map +0 -1
- package/lib/services/rateLimiter/distributedRateLimiter.service.js +0 -269
- package/lib/services/rateLimiter/index.d.ts +0 -2
- package/lib/services/rateLimiter/index.d.ts.map +0 -1
- package/lib/services/rateLimiter/index.js +0 -17
- package/lib/services/redisOptions.d.ts +0 -22
- package/lib/services/redisOptions.d.ts.map +0 -1
- package/lib/services/redisOptions.js +0 -51
- package/lib/services/tts/providers/minimax.service.d.ts +0 -14
- package/lib/services/tts/providers/minimax.service.d.ts.map +0 -1
- package/lib/services/tts/providers/minimax.service.js +0 -78
- package/lib/services/tts/providers/openai.service.d.ts +0 -14
- package/lib/services/tts/providers/openai.service.d.ts.map +0 -1
- package/lib/services/tts/providers/openai.service.js +0 -73
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ApiUsageCounterService = void 0;
|
|
4
|
-
const firebase_1 = require("../libs/firebase");
|
|
5
|
-
const logger_1 = require("../utils/logger");
|
|
6
|
-
/**
|
|
7
|
-
* Cheap monthly-call counter for free-tier external APIs (Pexels, Jamendo,
|
|
8
|
-
* Mubert, etc.). Lives at `apiUsage/{provider}-{YYYY-MM}` — one doc per
|
|
9
|
-
* provider per month — so a single transactional increment per call is the
|
|
10
|
-
* hottest write the system needs. Reset cost is zero (new month = new doc).
|
|
11
|
-
*
|
|
12
|
-
* `tryConsume()` is fail-open: any Firestore error returns `true` so a
|
|
13
|
-
* transient outage doesn't take down provider calls. Wrong direction on
|
|
14
|
-
* over-spend is preferable to false outages on these free tiers.
|
|
15
|
-
*
|
|
16
|
-
* Wired into providers right before their external HTTP call. The provider
|
|
17
|
-
* is responsible for throwing a `*_RATE_LIMITED` error so upstream can swap
|
|
18
|
-
* to a fallback provider.
|
|
19
|
-
*/
|
|
20
|
-
const COLLECTION = "apiUsage";
|
|
21
|
-
function currentMonthKey() {
|
|
22
|
-
const d = new Date();
|
|
23
|
-
const y = d.getUTCFullYear();
|
|
24
|
-
const m = String(d.getUTCMonth() + 1).padStart(2, "0");
|
|
25
|
-
return `${y}-${m}`;
|
|
26
|
-
}
|
|
27
|
-
function docId(provider) {
|
|
28
|
-
return `${provider}-${currentMonthKey()}`;
|
|
29
|
-
}
|
|
30
|
-
class ApiUsageCounterService {
|
|
31
|
-
/**
|
|
32
|
-
* Atomically increments the monthly counter for `provider` and returns
|
|
33
|
-
* whether the call is allowed (i.e. the *new* total is ≤ monthlyCap).
|
|
34
|
-
*
|
|
35
|
-
* Fails open on Firestore error — the call goes through and we log.
|
|
36
|
-
*/
|
|
37
|
-
static async tryConsume(opts) {
|
|
38
|
-
const ref = firebase_1.firestore.collection(COLLECTION).doc(docId(opts.provider));
|
|
39
|
-
const count = opts.count ?? 1;
|
|
40
|
-
try {
|
|
41
|
-
const allowed = await firebase_1.firestore.runTransaction(async (tx) => {
|
|
42
|
-
const snap = await tx.get(ref);
|
|
43
|
-
const used = (snap.data()?.used ?? 0) + count;
|
|
44
|
-
if (used > opts.monthlyCap) {
|
|
45
|
-
// Don't write — leave the counter as-is so the next reset is clean.
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
tx.set(ref, {
|
|
49
|
-
used: firebase_1.FieldValue.increment(count),
|
|
50
|
-
cap: opts.monthlyCap,
|
|
51
|
-
updatedAt: firebase_1.FieldValue.serverTimestamp(),
|
|
52
|
-
}, { merge: true });
|
|
53
|
-
return true;
|
|
54
|
-
});
|
|
55
|
-
return allowed;
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
// Fail open: prefer over-spend to false outages on free tiers.
|
|
59
|
-
logger_1.logger.error("apiUsageCounter: tryConsume fail-open", {
|
|
60
|
-
provider: opts.provider,
|
|
61
|
-
err: err instanceof Error ? err.stack ?? err.message : String(err),
|
|
62
|
-
});
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/** Read-only — used by ops dashboards / soft-cap warnings. */
|
|
67
|
-
static async getUsed(provider) {
|
|
68
|
-
try {
|
|
69
|
-
const snap = await firebase_1.firestore
|
|
70
|
-
.collection(COLLECTION)
|
|
71
|
-
.doc(docId(provider))
|
|
72
|
-
.get();
|
|
73
|
-
return snap.data()?.used ?? 0;
|
|
74
|
-
}
|
|
75
|
-
catch (err) {
|
|
76
|
-
logger_1.logger.error("apiUsageCounter: getUsed failed", {
|
|
77
|
-
provider,
|
|
78
|
-
err: err instanceof Error ? err.stack ?? err.message : String(err),
|
|
79
|
-
});
|
|
80
|
-
return 0;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
exports.ApiUsageCounterService = ApiUsageCounterService;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AssemblyAI ASR client. Supports submit + poll-to-completion (sync caller flow).
|
|
3
|
-
*
|
|
4
|
-
* Pricing: Universal-2 model is $0.15/hr (verified 2026-05-11 against
|
|
5
|
-
* https://www.assemblyai.com/pricing). Diarization (`speaker_labels`) adds
|
|
6
|
-
* ~$0.02/hr (≈ +13%). Long audio (>3 min) should go through the BullMQ async
|
|
7
|
-
* path; the inline poll here is bounded at 3 min to stay inside Firebase
|
|
8
|
-
* Functions HTTP timeout budgets.
|
|
9
|
-
*/
|
|
10
|
-
export interface TranscribeParams {
|
|
11
|
-
audioUrl: string;
|
|
12
|
-
/** Hint to AssemblyAI for language autodetect short-circuit (e.g. "en", "es"). */
|
|
13
|
-
languageCode?: string;
|
|
14
|
-
/** Diarization (speaker labels). Adds ~30% latency. */
|
|
15
|
-
speakerLabels?: boolean;
|
|
16
|
-
/** Auto-redact PII (SSN, credit cards, etc.). */
|
|
17
|
-
redactPii?: boolean;
|
|
18
|
-
/** Word-level timestamps in result. */
|
|
19
|
-
wordTimestamps?: boolean;
|
|
20
|
-
}
|
|
21
|
-
export interface TranscribeResult {
|
|
22
|
-
id: string;
|
|
23
|
-
status: "completed" | "queued" | "processing" | "error";
|
|
24
|
-
text?: string;
|
|
25
|
-
/** Audio duration in seconds; populated on completion. */
|
|
26
|
-
audioDuration?: number;
|
|
27
|
-
/** Per-word timestamps (start/end ms). */
|
|
28
|
-
words?: Array<{
|
|
29
|
-
text: string;
|
|
30
|
-
start: number;
|
|
31
|
-
end: number;
|
|
32
|
-
confidence: number;
|
|
33
|
-
speaker?: string;
|
|
34
|
-
}>;
|
|
35
|
-
/** Per-utterance segments when speakerLabels=true. */
|
|
36
|
-
utterances?: Array<{
|
|
37
|
-
text: string;
|
|
38
|
-
start: number;
|
|
39
|
-
end: number;
|
|
40
|
-
speaker: string;
|
|
41
|
-
confidence: number;
|
|
42
|
-
}>;
|
|
43
|
-
errorMessage?: string;
|
|
44
|
-
}
|
|
45
|
-
export declare class AssemblyAIService {
|
|
46
|
-
private readonly baseUrl;
|
|
47
|
-
private readonly apiKey;
|
|
48
|
-
constructor();
|
|
49
|
-
private request;
|
|
50
|
-
/** Submit a transcription job. Returns the transcript id immediately. */
|
|
51
|
-
submit(params: TranscribeParams): Promise<{
|
|
52
|
-
id: string;
|
|
53
|
-
}>;
|
|
54
|
-
checkStatus(id: string): Promise<TranscribeResult>;
|
|
55
|
-
/**
|
|
56
|
-
* Submit and poll inline until completion. Use for short-to-medium audio.
|
|
57
|
-
* Bounded at `timeoutMs` (default 3 min) — caller should fall back to async
|
|
58
|
-
* BullMQ flow for longer audio.
|
|
59
|
-
*/
|
|
60
|
-
transcribe(params: TranscribeParams, { timeoutMs, intervalMs }?: {
|
|
61
|
-
timeoutMs?: number;
|
|
62
|
-
intervalMs?: number;
|
|
63
|
-
}): Promise<TranscribeResult>;
|
|
64
|
-
/**
|
|
65
|
-
* Credit cost for transcription. Universal-2 = $0.15/hr; diarization
|
|
66
|
-
* (speakerLabels) adds $0.02/hr (≈ +13%). Routes through the same
|
|
67
|
-
* `getCreditsFromCost` helper as every other endpoint so the credit ↔ USD
|
|
68
|
-
* ratio (1 credit = $0.10) and the per-call floor stay consistent.
|
|
69
|
-
*/
|
|
70
|
-
getCreditUsed(audioDurationSec: number, speakerLabels?: boolean): number;
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=assemblyai.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assemblyai.service.d.ts","sourceRoot":"","sources":["../../../src/services/asr/assemblyai.service.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,sDAAsD;IACtD,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;YASlB,OAAO;IAyBrB,yEAAyE;IACnE,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAWzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAaxD;;;;OAIG;IACG,UAAU,CACd,MAAM,EAAE,gBAAgB,EACxB,EAAE,SAAmB,EAAE,UAAiB,EAAE,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAC3F,OAAO,CAAC,gBAAgB,CAAC;IAc5B;;;;;OAKG;IACH,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,MAAM;CAMvE"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AssemblyAIService = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const logger_1 = require("../../utils/logger");
|
|
9
|
-
const helpers_1 = require("../../utils/helpers");
|
|
10
|
-
class AssemblyAIService {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.baseUrl = "https://api.assemblyai.com/v2";
|
|
13
|
-
if (!process.env.ASSEMBLYAI_API_KEY) {
|
|
14
|
-
throw new Error("Missing ASSEMBLYAI_API_KEY in environment variables");
|
|
15
|
-
}
|
|
16
|
-
this.apiKey = process.env.ASSEMBLYAI_API_KEY;
|
|
17
|
-
}
|
|
18
|
-
async request(endpoint, method, body) {
|
|
19
|
-
const config = {
|
|
20
|
-
method,
|
|
21
|
-
url: `${this.baseUrl}${endpoint}`,
|
|
22
|
-
headers: {
|
|
23
|
-
Authorization: this.apiKey,
|
|
24
|
-
"Content-Type": "application/json",
|
|
25
|
-
},
|
|
26
|
-
data: body,
|
|
27
|
-
timeout: 60000,
|
|
28
|
-
validateStatus: () => true,
|
|
29
|
-
};
|
|
30
|
-
const resp = await axios_1.default.request(config);
|
|
31
|
-
if (resp.status < 200 || resp.status >= 300) {
|
|
32
|
-
throw new Error(`AssemblyAI API Error: ${resp.status} ${resp.statusText} — ${JSON.stringify(resp.data)}`);
|
|
33
|
-
}
|
|
34
|
-
return resp.data;
|
|
35
|
-
}
|
|
36
|
-
/** Submit a transcription job. Returns the transcript id immediately. */
|
|
37
|
-
async submit(params) {
|
|
38
|
-
const body = {
|
|
39
|
-
audio_url: params.audioUrl,
|
|
40
|
-
...(params.languageCode ? { language_code: params.languageCode } : { language_detection: true }),
|
|
41
|
-
...(params.speakerLabels ? { speaker_labels: true } : {}),
|
|
42
|
-
...(params.redactPii ? { redact_pii: true, redact_pii_policies: ["us_social_security_number", "credit_card_number", "email_address", "phone_number"] } : {}),
|
|
43
|
-
};
|
|
44
|
-
const resp = await this.request("/transcript", "POST", body);
|
|
45
|
-
return { id: resp.id };
|
|
46
|
-
}
|
|
47
|
-
async checkStatus(id) {
|
|
48
|
-
const resp = await this.request(`/transcript/${id}`, "GET");
|
|
49
|
-
return {
|
|
50
|
-
id: resp.id,
|
|
51
|
-
status: resp.status,
|
|
52
|
-
text: resp.text,
|
|
53
|
-
audioDuration: resp.audio_duration,
|
|
54
|
-
words: resp.words,
|
|
55
|
-
utterances: resp.utterances,
|
|
56
|
-
errorMessage: resp.error,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Submit and poll inline until completion. Use for short-to-medium audio.
|
|
61
|
-
* Bounded at `timeoutMs` (default 3 min) — caller should fall back to async
|
|
62
|
-
* BullMQ flow for longer audio.
|
|
63
|
-
*/
|
|
64
|
-
async transcribe(params, { timeoutMs = 180000, intervalMs = 3000 } = {}) {
|
|
65
|
-
const { id } = await this.submit(params);
|
|
66
|
-
const deadline = Date.now() + timeoutMs;
|
|
67
|
-
while (Date.now() < deadline) {
|
|
68
|
-
await new Promise((r) => setTimeout(r, intervalMs));
|
|
69
|
-
const status = await this.checkStatus(id);
|
|
70
|
-
if (status.status === "completed" || status.status === "error")
|
|
71
|
-
return status;
|
|
72
|
-
}
|
|
73
|
-
logger_1.logger.warn("AssemblyAI transcribe timed out — returning processing status", { id });
|
|
74
|
-
return { id, status: "processing", errorMessage: "Transcription exceeded inline poll budget; use checkStatus(id) to fetch later." };
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Credit cost for transcription. Universal-2 = $0.15/hr; diarization
|
|
78
|
-
* (speakerLabels) adds $0.02/hr (≈ +13%). Routes through the same
|
|
79
|
-
* `getCreditsFromCost` helper as every other endpoint so the credit ↔ USD
|
|
80
|
-
* ratio (1 credit = $0.10) and the per-call floor stay consistent.
|
|
81
|
-
*/
|
|
82
|
-
getCreditUsed(audioDurationSec, speakerLabels = false) {
|
|
83
|
-
const ratePerSecond = 0.15 / 3600;
|
|
84
|
-
const multiplier = speakerLabels ? 1.133 : 1.0;
|
|
85
|
-
const cost = ratePerSecond * audioDurationSec * multiplier;
|
|
86
|
-
return (0, helpers_1.getCreditsFromCost)(cost);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
exports.AssemblyAIService = AssemblyAIService;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/asr/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
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("./assemblyai.service"), exports);
|
|
18
|
-
__exportStar(require("./whisper.service"), exports);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { TranscribeParams, TranscribeResult } from "./assemblyai.service";
|
|
2
|
-
export declare class WhisperAsrService {
|
|
3
|
-
private readonly client;
|
|
4
|
-
constructor();
|
|
5
|
-
/**
|
|
6
|
-
* Transcribe a remote audio URL. Whisper has no URL-submission endpoint
|
|
7
|
-
* (unlike AssemblyAI), so we fetch the bytes into memory first. Subject
|
|
8
|
-
* to the 25 MB hard limit — long media should stay on the primary path.
|
|
9
|
-
*/
|
|
10
|
-
transcribe(params: TranscribeParams): Promise<TranscribeResult>;
|
|
11
|
-
/**
|
|
12
|
-
* Credit cost for Whisper. $0.006/min — routes through the shared
|
|
13
|
-
* credit helper to keep the credit↔USD ratio consistent with every
|
|
14
|
-
* other endpoint.
|
|
15
|
-
*/
|
|
16
|
-
getCreditUsed(audioDurationSec: number): number;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=whisper.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whisper.service.d.ts","sourceRoot":"","sources":["../../../src/services/asr/whisper.service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AA2B/E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;IAShC;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwDrE;;;;OAIG;IACH,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;CAIhD"}
|
|
@@ -1,151 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.WhisperAsrService = void 0;
|
|
40
|
-
const axios_1 = __importDefault(require("axios"));
|
|
41
|
-
const openai_1 = __importStar(require("openai"));
|
|
42
|
-
const logger_1 = require("../../utils/logger");
|
|
43
|
-
const helpers_1 = require("../../utils/helpers");
|
|
44
|
-
/**
|
|
45
|
-
* OpenAI Whisper (`whisper-1`) fallback ASR provider.
|
|
46
|
-
*
|
|
47
|
-
* Why this is the fallback rather than the primary:
|
|
48
|
-
* - More expensive per minute than AssemblyAI ($0.006/min vs $0.0025/min).
|
|
49
|
-
* - No native diarization (`speaker_labels`) — caller will get an empty
|
|
50
|
-
* `utterances` array when requested. We still log it so the agent can
|
|
51
|
-
* decide to drop diarized features rather than silently mis-render.
|
|
52
|
-
* - 25 MB file upload limit per request — long-form audio MUST go through
|
|
53
|
-
* AssemblyAI's URL submission path.
|
|
54
|
-
*
|
|
55
|
-
* Why it earns the fallback slot:
|
|
56
|
-
* - Zero new infra: reuses the OPENAI_API_KEY already wired for text-gen.
|
|
57
|
-
* - Single synchronous call (no polling) → easier failure semantics.
|
|
58
|
-
* - Word-level timestamps via `response_format: verbose_json` +
|
|
59
|
-
* `timestamp_granularities: ["word"]`.
|
|
60
|
-
* - Strong multilingual coverage out of the box.
|
|
61
|
-
*
|
|
62
|
-
* Pricing (verified 2026-05-16 against https://openai.com/api/pricing):
|
|
63
|
-
* whisper-1 = $0.006/min ≈ $0.36/hr (≈ 2.4× AssemblyAI Universal-2).
|
|
64
|
-
*/
|
|
65
|
-
const WHISPER_MAX_BYTES = 25 * 1024 * 1024;
|
|
66
|
-
const DOWNLOAD_TIMEOUT_MS = 60000;
|
|
67
|
-
class WhisperAsrService {
|
|
68
|
-
constructor() {
|
|
69
|
-
if (!process.env.OPENAI_API_KEY) {
|
|
70
|
-
throw new Error("Missing OPENAI_API_KEY in environment variables — Whisper ASR unavailable");
|
|
71
|
-
}
|
|
72
|
-
this.client = new openai_1.default({ apiKey: process.env.OPENAI_API_KEY });
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Transcribe a remote audio URL. Whisper has no URL-submission endpoint
|
|
76
|
-
* (unlike AssemblyAI), so we fetch the bytes into memory first. Subject
|
|
77
|
-
* to the 25 MB hard limit — long media should stay on the primary path.
|
|
78
|
-
*/
|
|
79
|
-
async transcribe(params) {
|
|
80
|
-
if (params.speakerLabels) {
|
|
81
|
-
logger_1.logger.warn("Whisper fallback requested with speakerLabels=true — diarization not supported, returning text only");
|
|
82
|
-
}
|
|
83
|
-
if (params.redactPii) {
|
|
84
|
-
logger_1.logger.warn("Whisper fallback requested with redactPii=true — Whisper has no native PII redaction, returning unredacted transcript");
|
|
85
|
-
}
|
|
86
|
-
const { data: audioBuf, headers } = await axios_1.default.get(params.audioUrl, {
|
|
87
|
-
responseType: "arraybuffer",
|
|
88
|
-
timeout: DOWNLOAD_TIMEOUT_MS,
|
|
89
|
-
maxContentLength: WHISPER_MAX_BYTES,
|
|
90
|
-
maxBodyLength: WHISPER_MAX_BYTES,
|
|
91
|
-
});
|
|
92
|
-
if (audioBuf.byteLength > WHISPER_MAX_BYTES) {
|
|
93
|
-
throw new Error(`WHISPER_PAYLOAD_TOO_LARGE: ${audioBuf.byteLength} bytes > 25 MB cap — re-route to primary ASR for long audio`);
|
|
94
|
-
}
|
|
95
|
-
const mime = headers["content-type"] ?? "audio/mpeg";
|
|
96
|
-
const ext = guessExtension(mime, params.audioUrl);
|
|
97
|
-
const file = await (0, openai_1.toFile)(Buffer.from(audioBuf), `audio.${ext}`, { type: mime });
|
|
98
|
-
const resp = await this.client.audio.transcriptions.create({
|
|
99
|
-
file,
|
|
100
|
-
model: "whisper-1",
|
|
101
|
-
response_format: "verbose_json",
|
|
102
|
-
timestamp_granularities: params.wordTimestamps !== false ? ["word"] : undefined,
|
|
103
|
-
language: params.languageCode,
|
|
104
|
-
});
|
|
105
|
-
const data = resp;
|
|
106
|
-
return {
|
|
107
|
-
id: `whisper-${Date.now().toString(36)}`,
|
|
108
|
-
status: "completed",
|
|
109
|
-
text: data.text,
|
|
110
|
-
audioDuration: data.duration,
|
|
111
|
-
words: (data.words ?? []).map((w) => ({
|
|
112
|
-
// AssemblyAI returns word offsets in ms; Whisper returns seconds.
|
|
113
|
-
// Normalise to ms so downstream caption renderers don't have to
|
|
114
|
-
// know which provider produced the transcript.
|
|
115
|
-
text: w.word,
|
|
116
|
-
start: Math.round(w.start * 1000),
|
|
117
|
-
end: Math.round(w.end * 1000),
|
|
118
|
-
confidence: 1,
|
|
119
|
-
})),
|
|
120
|
-
utterances: [],
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Credit cost for Whisper. $0.006/min — routes through the shared
|
|
125
|
-
* credit helper to keep the credit↔USD ratio consistent with every
|
|
126
|
-
* other endpoint.
|
|
127
|
-
*/
|
|
128
|
-
getCreditUsed(audioDurationSec) {
|
|
129
|
-
const ratePerSecond = 0.006 / 60;
|
|
130
|
-
return (0, helpers_1.getCreditsFromCost)(ratePerSecond * audioDurationSec);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
exports.WhisperAsrService = WhisperAsrService;
|
|
134
|
-
function guessExtension(mime, url) {
|
|
135
|
-
if (mime.includes("mpeg") || mime.includes("mp3"))
|
|
136
|
-
return "mp3";
|
|
137
|
-
if (mime.includes("wav"))
|
|
138
|
-
return "wav";
|
|
139
|
-
if (mime.includes("ogg"))
|
|
140
|
-
return "ogg";
|
|
141
|
-
if (mime.includes("webm"))
|
|
142
|
-
return "webm";
|
|
143
|
-
if (mime.includes("m4a") || mime.includes("mp4"))
|
|
144
|
-
return "m4a";
|
|
145
|
-
if (mime.includes("flac"))
|
|
146
|
-
return "flac";
|
|
147
|
-
const urlExt = url.split("?")[0]?.split(".").pop()?.toLowerCase();
|
|
148
|
-
if (urlExt && /^(mp3|wav|ogg|webm|m4a|mp4|flac)$/.test(urlExt))
|
|
149
|
-
return urlExt;
|
|
150
|
-
return "mp3";
|
|
151
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { ICachedAssetModel } from "../models/cachedAsset.model";
|
|
2
|
-
import { ICachedRawAssetModel } from "../models/cachedRawAsset.model";
|
|
3
|
-
/**
|
|
4
|
-
* Asset cache + dedupe.
|
|
5
|
-
*
|
|
6
|
-
* Many agent runs ask for similar things — same VO line, same stock query,
|
|
7
|
-
* similar image prompt. Caching by a content-hashed key turns the second
|
|
8
|
-
* request into an instant lookup, which is a massive cost lever for bulk runs
|
|
9
|
-
* (where the same template variant is generated 100×) and serial creators.
|
|
10
|
-
*
|
|
11
|
-
* The cache is content-addressed: hash(provider + normalized-input) → the
|
|
12
|
-
* resulting asset URL + metadata. Any input change produces a different hash,
|
|
13
|
-
* so stale results are impossible.
|
|
14
|
-
*
|
|
15
|
-
* Backed by Firestore for V1; can move to Redis / GCS metadata index later
|
|
16
|
-
* without changing the API.
|
|
17
|
-
*/
|
|
18
|
-
export type CachedAsset = ICachedAssetModel;
|
|
19
|
-
export interface AssetCacheKeyParts {
|
|
20
|
-
provider: string;
|
|
21
|
-
/** Stable input identity — must capture every parameter that affects output. */
|
|
22
|
-
input: Record<string, unknown>;
|
|
23
|
-
}
|
|
24
|
-
export declare class AssetCacheService {
|
|
25
|
-
/**
|
|
26
|
-
* Compute a stable cache key. Same input → same key, regardless of object
|
|
27
|
-
* key order. Use externally to derive the idempotency key for the upstream
|
|
28
|
-
* provider call so retries dedupe naturally.
|
|
29
|
-
*/
|
|
30
|
-
static hashKey(parts: AssetCacheKeyParts): string;
|
|
31
|
-
static lookup(parts: AssetCacheKeyParts): Promise<CachedAsset | null>;
|
|
32
|
-
static store(parts: AssetCacheKeyParts, asset: Omit<CachedAsset, "key" | "createdAt" | "lastAccessedAt" | "hitCount">): Promise<CachedAsset>;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Raw payload cache — sibling to the asset URL cache for things that aren't
|
|
36
|
-
* a single asset URL: stock-search responses (lists), VO bytes, etc.
|
|
37
|
-
*
|
|
38
|
-
* Same content-hash key strategy. TTL is optional — stock results expire
|
|
39
|
-
* after 30 min, VOs are immutable so they live until evicted.
|
|
40
|
-
*
|
|
41
|
-
* Firestore doc cap is 1MB. Callers that may exceed it (VO base64) are
|
|
42
|
-
* responsible for skipping the store call when payloads get big.
|
|
43
|
-
*/
|
|
44
|
-
export interface RawCacheKeyParts extends AssetCacheKeyParts {
|
|
45
|
-
kind: ICachedRawAssetModel["kind"];
|
|
46
|
-
}
|
|
47
|
-
export declare class RawAssetCacheService {
|
|
48
|
-
static hashKey(parts: RawCacheKeyParts): string;
|
|
49
|
-
static lookup<T = unknown>(parts: RawCacheKeyParts): Promise<T | null>;
|
|
50
|
-
static store(parts: RawCacheKeyParts, payload: unknown, options?: {
|
|
51
|
-
ttlMs?: number;
|
|
52
|
-
}): Promise<void>;
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=assetCache.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assetCache.service.d.ts","sourceRoot":"","sources":["../../src/services/assetCache.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAItE;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM;WAQpC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;WA0B9D,KAAK,CAChB,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,IAAI,CACT,WAAW,EACX,KAAK,GAAG,WAAW,GAAG,gBAAgB,GAAG,UAAU,CACpD,GACA,OAAO,CAAC,WAAW,CAAC;CAaxB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;WAIlC,MAAM,CAAC,CAAC,GAAG,OAAO,EAC7B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;WA2BP,KAAK,CAChB,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/B,OAAO,CAAC,IAAI,CAAC;CAoBjB"}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RawAssetCacheService = exports.AssetCacheService = void 0;
|
|
7
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
-
const logger_1 = require("../utils/logger");
|
|
9
|
-
const firestore_service_1 = require("./firestore.service");
|
|
10
|
-
class AssetCacheService {
|
|
11
|
-
/**
|
|
12
|
-
* Compute a stable cache key. Same input → same key, regardless of object
|
|
13
|
-
* key order. Use externally to derive the idempotency key for the upstream
|
|
14
|
-
* provider call so retries dedupe naturally.
|
|
15
|
-
*/
|
|
16
|
-
static hashKey(parts) {
|
|
17
|
-
const normalized = JSON.stringify({
|
|
18
|
-
p: parts.provider,
|
|
19
|
-
i: sortedClone(parts.input),
|
|
20
|
-
});
|
|
21
|
-
return crypto_1.default.createHash("sha256").update(normalized).digest("hex");
|
|
22
|
-
}
|
|
23
|
-
static async lookup(parts) {
|
|
24
|
-
const key = AssetCacheService.hashKey(parts);
|
|
25
|
-
const doc = await firestore_service_1.FirestoreService.getDataById(firestore_service_1.FirestoreService.assetCacheCol, key);
|
|
26
|
-
if (!doc)
|
|
27
|
-
return null;
|
|
28
|
-
// Best-effort hit-count update; don't block on it.
|
|
29
|
-
void firestore_service_1.FirestoreService.updateData(firestore_service_1.FirestoreService.assetCacheCol, key, {
|
|
30
|
-
lastAccessedAt: new Date().toISOString(),
|
|
31
|
-
hitCount: (doc.hitCount ?? 0) + 1,
|
|
32
|
-
}).catch((err) => {
|
|
33
|
-
logger_1.logger.warn("assetCache: hit-count update failed", {
|
|
34
|
-
cacheKey: key,
|
|
35
|
-
err: err instanceof Error ? err.stack ?? err.message : String(err),
|
|
36
|
-
});
|
|
37
|
-
return undefined;
|
|
38
|
-
});
|
|
39
|
-
const { id: _id, ...stripped } = doc;
|
|
40
|
-
return stripped;
|
|
41
|
-
}
|
|
42
|
-
static async store(parts, asset) {
|
|
43
|
-
const key = AssetCacheService.hashKey(parts);
|
|
44
|
-
const now = new Date().toISOString();
|
|
45
|
-
const entry = {
|
|
46
|
-
...asset,
|
|
47
|
-
key,
|
|
48
|
-
createdAt: now,
|
|
49
|
-
lastAccessedAt: now,
|
|
50
|
-
hitCount: 0,
|
|
51
|
-
};
|
|
52
|
-
await firestore_service_1.FirestoreService.addData(firestore_service_1.FirestoreService.assetCacheCol, key, entry);
|
|
53
|
-
return entry;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
exports.AssetCacheService = AssetCacheService;
|
|
57
|
-
class RawAssetCacheService {
|
|
58
|
-
static hashKey(parts) {
|
|
59
|
-
return AssetCacheService.hashKey(parts);
|
|
60
|
-
}
|
|
61
|
-
static async lookup(parts) {
|
|
62
|
-
const key = RawAssetCacheService.hashKey(parts);
|
|
63
|
-
const doc = await firestore_service_1.FirestoreService.getDataById(firestore_service_1.FirestoreService.assetCacheRawCol, key);
|
|
64
|
-
if (!doc)
|
|
65
|
-
return null;
|
|
66
|
-
if (doc.expiresAt && new Date(doc.expiresAt).getTime() < Date.now()) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
void firestore_service_1.FirestoreService.updateData(firestore_service_1.FirestoreService.assetCacheRawCol, key, {
|
|
70
|
-
lastAccessedAt: new Date().toISOString(),
|
|
71
|
-
hitCount: (doc.hitCount ?? 0) + 1,
|
|
72
|
-
}).catch((err) => {
|
|
73
|
-
logger_1.logger.warn("assetCache: hit-count update failed", {
|
|
74
|
-
cacheKey: key,
|
|
75
|
-
err: err instanceof Error ? err.stack ?? err.message : String(err),
|
|
76
|
-
});
|
|
77
|
-
return undefined;
|
|
78
|
-
});
|
|
79
|
-
return doc.payload;
|
|
80
|
-
}
|
|
81
|
-
static async store(parts, payload, options = {}) {
|
|
82
|
-
const key = RawAssetCacheService.hashKey(parts);
|
|
83
|
-
const now = new Date();
|
|
84
|
-
const entry = {
|
|
85
|
-
key,
|
|
86
|
-
kind: parts.kind,
|
|
87
|
-
payload,
|
|
88
|
-
createdAt: now.toISOString(),
|
|
89
|
-
lastAccessedAt: now.toISOString(),
|
|
90
|
-
hitCount: 0,
|
|
91
|
-
};
|
|
92
|
-
if (options.ttlMs) {
|
|
93
|
-
entry.expiresAt = new Date(now.getTime() + options.ttlMs).toISOString();
|
|
94
|
-
}
|
|
95
|
-
await firestore_service_1.FirestoreService.addData(firestore_service_1.FirestoreService.assetCacheRawCol, key, entry);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.RawAssetCacheService = RawAssetCacheService;
|
|
99
|
-
function sortedClone(value) {
|
|
100
|
-
if (value === null || typeof value !== "object")
|
|
101
|
-
return value;
|
|
102
|
-
if (Array.isArray(value))
|
|
103
|
-
return value.map(sortedClone);
|
|
104
|
-
const sorted = {};
|
|
105
|
-
for (const k of Object.keys(value).sort()) {
|
|
106
|
-
sorted[k] = sortedClone(value[k]);
|
|
107
|
-
}
|
|
108
|
-
return sorted;
|
|
109
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/audioAnalysis/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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("./onsetDetection.service"), exports);
|