@gravity-platform/ingest 1.1.2
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/CHANGELOG.md +9 -0
- package/dist/Abyssale/node/executor.d.ts +12 -0
- package/dist/Abyssale/node/executor.d.ts.map +1 -0
- package/dist/Abyssale/node/executor.js +72 -0
- package/dist/Abyssale/node/executor.js.map +1 -0
- package/dist/Abyssale/node/index.d.ts +10 -0
- package/dist/Abyssale/node/index.d.ts.map +1 -0
- package/dist/Abyssale/node/index.js +90 -0
- package/dist/Abyssale/node/index.js.map +1 -0
- package/dist/Abyssale/service/abyssaleService.d.ts +45 -0
- package/dist/Abyssale/service/abyssaleService.d.ts.map +1 -0
- package/dist/Abyssale/service/abyssaleService.js +360 -0
- package/dist/Abyssale/service/abyssaleService.js.map +1 -0
- package/dist/Abyssale/util/types.d.ts +62 -0
- package/dist/Abyssale/util/types.d.ts.map +1 -0
- package/dist/Abyssale/util/types.js +6 -0
- package/dist/Abyssale/util/types.js.map +1 -0
- package/dist/AirtableInsert/node/executor.d.ts +7 -0
- package/dist/AirtableInsert/node/executor.d.ts.map +1 -0
- package/dist/AirtableInsert/node/executor.js +32 -0
- package/dist/AirtableInsert/node/executor.js.map +1 -0
- package/dist/AirtableInsert/node/index.d.ts +10 -0
- package/dist/AirtableInsert/node/index.d.ts.map +1 -0
- package/dist/AirtableInsert/node/index.js +98 -0
- package/dist/AirtableInsert/node/index.js.map +1 -0
- package/dist/AirtableInsert/service/airtableInsertService.d.ts +8 -0
- package/dist/AirtableInsert/service/airtableInsertService.d.ts.map +1 -0
- package/dist/AirtableInsert/service/airtableInsertService.js +99 -0
- package/dist/AirtableInsert/service/airtableInsertService.js.map +1 -0
- package/dist/AirtableInsert/util/types.d.ts +15 -0
- package/dist/AirtableInsert/util/types.d.ts.map +1 -0
- package/dist/AirtableInsert/util/types.js +3 -0
- package/dist/AirtableInsert/util/types.js.map +1 -0
- package/dist/ApifyResults/node/executor.d.ts +32 -0
- package/dist/ApifyResults/node/executor.d.ts.map +1 -0
- package/dist/ApifyResults/node/executor.js +204 -0
- package/dist/ApifyResults/node/executor.js.map +1 -0
- package/dist/ApifyResults/node/index.d.ts +10 -0
- package/dist/ApifyResults/node/index.d.ts.map +1 -0
- package/dist/ApifyResults/node/index.js +79 -0
- package/dist/ApifyResults/node/index.js.map +1 -0
- package/dist/ApifyResults/service/apifyService.d.ts +10 -0
- package/dist/ApifyResults/service/apifyService.d.ts.map +1 -0
- package/dist/ApifyResults/service/apifyService.js +85 -0
- package/dist/ApifyResults/service/apifyService.js.map +1 -0
- package/dist/ApifyResults/util/types.d.ts +93 -0
- package/dist/ApifyResults/util/types.d.ts.map +1 -0
- package/dist/ApifyResults/util/types.js +6 -0
- package/dist/ApifyResults/util/types.js.map +1 -0
- package/dist/ApifyStarter/node/executor.d.ts +12 -0
- package/dist/ApifyStarter/node/executor.d.ts.map +1 -0
- package/dist/ApifyStarter/node/executor.js +97 -0
- package/dist/ApifyStarter/node/executor.js.map +1 -0
- package/dist/ApifyStarter/node/index.d.ts +10 -0
- package/dist/ApifyStarter/node/index.d.ts.map +1 -0
- package/dist/ApifyStarter/node/index.js +87 -0
- package/dist/ApifyStarter/node/index.js.map +1 -0
- package/dist/ApifyStarter/service/apifyActorService.d.ts +11 -0
- package/dist/ApifyStarter/service/apifyActorService.d.ts.map +1 -0
- package/dist/ApifyStarter/service/apifyActorService.js +104 -0
- package/dist/ApifyStarter/service/apifyActorService.js.map +1 -0
- package/dist/ApifyStarter/util/types.d.ts +23 -0
- package/dist/ApifyStarter/util/types.d.ts.map +1 -0
- package/dist/ApifyStarter/util/types.js +6 -0
- package/dist/ApifyStarter/util/types.js.map +1 -0
- package/dist/ApifyStarter/util/validation.d.ts +9 -0
- package/dist/ApifyStarter/util/validation.d.ts.map +1 -0
- package/dist/ApifyStarter/util/validation.js +59 -0
- package/dist/ApifyStarter/util/validation.js.map +1 -0
- package/dist/ApolloCompany/node/executor.d.ts +8 -0
- package/dist/ApolloCompany/node/executor.d.ts.map +1 -0
- package/dist/ApolloCompany/node/executor.js +38 -0
- package/dist/ApolloCompany/node/executor.js.map +1 -0
- package/dist/ApolloCompany/node/index.d.ts +10 -0
- package/dist/ApolloCompany/node/index.d.ts.map +1 -0
- package/dist/ApolloCompany/node/index.js +120 -0
- package/dist/ApolloCompany/node/index.js.map +1 -0
- package/dist/ApolloCompany/service/apolloSearchCompanyService.d.ts +7 -0
- package/dist/ApolloCompany/service/apolloSearchCompanyService.d.ts.map +1 -0
- package/dist/ApolloCompany/service/apolloSearchCompanyService.js +124 -0
- package/dist/ApolloCompany/service/apolloSearchCompanyService.js.map +1 -0
- package/dist/ApolloCompany/util/types.d.ts +46 -0
- package/dist/ApolloCompany/util/types.d.ts.map +1 -0
- package/dist/ApolloCompany/util/types.js +6 -0
- package/dist/ApolloCompany/util/types.js.map +1 -0
- package/dist/ApolloCompanyEnrich/node/executor.d.ts +8 -0
- package/dist/ApolloCompanyEnrich/node/executor.d.ts.map +1 -0
- package/dist/ApolloCompanyEnrich/node/executor.js +25 -0
- package/dist/ApolloCompanyEnrich/node/executor.js.map +1 -0
- package/dist/ApolloCompanyEnrich/node/index.d.ts +10 -0
- package/dist/ApolloCompanyEnrich/node/index.d.ts.map +1 -0
- package/dist/ApolloCompanyEnrich/node/index.js +67 -0
- package/dist/ApolloCompanyEnrich/node/index.js.map +1 -0
- package/dist/ApolloCompanyEnrich/service/apolloCompanyEnrichService.d.ts +9 -0
- package/dist/ApolloCompanyEnrich/service/apolloCompanyEnrichService.d.ts.map +1 -0
- package/dist/ApolloCompanyEnrich/service/apolloCompanyEnrichService.js +40 -0
- package/dist/ApolloCompanyEnrich/service/apolloCompanyEnrichService.js.map +1 -0
- package/dist/ApolloCompanyEnrich/util/types.d.ts +13 -0
- package/dist/ApolloCompanyEnrich/util/types.d.ts.map +1 -0
- package/dist/ApolloCompanyEnrich/util/types.js +6 -0
- package/dist/ApolloCompanyEnrich/util/types.js.map +1 -0
- package/dist/ApolloPeople/node/executor.d.ts +8 -0
- package/dist/ApolloPeople/node/executor.d.ts.map +1 -0
- package/dist/ApolloPeople/node/executor.js +41 -0
- package/dist/ApolloPeople/node/executor.js.map +1 -0
- package/dist/ApolloPeople/node/index.d.ts +10 -0
- package/dist/ApolloPeople/node/index.d.ts.map +1 -0
- package/dist/ApolloPeople/node/index.js +128 -0
- package/dist/ApolloPeople/node/index.js.map +1 -0
- package/dist/ApolloPeople/service/apolloSearchService.d.ts +6 -0
- package/dist/ApolloPeople/service/apolloSearchService.d.ts.map +1 -0
- package/dist/ApolloPeople/service/apolloSearchService.js +127 -0
- package/dist/ApolloPeople/service/apolloSearchService.js.map +1 -0
- package/dist/ApolloPeople/util/types.d.ts +70 -0
- package/dist/ApolloPeople/util/types.d.ts.map +1 -0
- package/dist/ApolloPeople/util/types.js +6 -0
- package/dist/ApolloPeople/util/types.js.map +1 -0
- package/dist/ApolloPeopleEnrich/node/executor.d.ts +8 -0
- package/dist/ApolloPeopleEnrich/node/executor.d.ts.map +1 -0
- package/dist/ApolloPeopleEnrich/node/executor.js +25 -0
- package/dist/ApolloPeopleEnrich/node/executor.js.map +1 -0
- package/dist/ApolloPeopleEnrich/node/index.d.ts +10 -0
- package/dist/ApolloPeopleEnrich/node/index.d.ts.map +1 -0
- package/dist/ApolloPeopleEnrich/node/index.js +116 -0
- package/dist/ApolloPeopleEnrich/node/index.js.map +1 -0
- package/dist/ApolloPeopleEnrich/service/apolloPeopleEnrichService.d.ts +10 -0
- package/dist/ApolloPeopleEnrich/service/apolloPeopleEnrichService.d.ts.map +1 -0
- package/dist/ApolloPeopleEnrich/service/apolloPeopleEnrichService.js +54 -0
- package/dist/ApolloPeopleEnrich/service/apolloPeopleEnrichService.js.map +1 -0
- package/dist/ApolloPeopleEnrich/util/types.d.ts +20 -0
- package/dist/ApolloPeopleEnrich/util/types.d.ts.map +1 -0
- package/dist/ApolloPeopleEnrich/util/types.js +6 -0
- package/dist/ApolloPeopleEnrich/util/types.js.map +1 -0
- package/dist/ApolloSearch/node/executor.d.ts +9 -0
- package/dist/ApolloSearch/node/executor.d.ts.map +1 -0
- package/dist/ApolloSearch/node/executor.js +51 -0
- package/dist/ApolloSearch/node/executor.js.map +1 -0
- package/dist/ApolloSearch/node/index.d.ts +10 -0
- package/dist/ApolloSearch/node/index.d.ts.map +1 -0
- package/dist/ApolloSearch/node/index.js +128 -0
- package/dist/ApolloSearch/node/index.js.map +1 -0
- package/dist/ApolloSearch/service/apolloSearchService.d.ts +6 -0
- package/dist/ApolloSearch/service/apolloSearchService.d.ts.map +1 -0
- package/dist/ApolloSearch/service/apolloSearchService.js +127 -0
- package/dist/ApolloSearch/service/apolloSearchService.js.map +1 -0
- package/dist/ApolloSearch/util/types.d.ts +70 -0
- package/dist/ApolloSearch/util/types.d.ts.map +1 -0
- package/dist/ApolloSearch/util/types.js +6 -0
- package/dist/ApolloSearch/util/types.js.map +1 -0
- package/dist/ApolloSearchCompany/node/executor.d.ts +9 -0
- package/dist/ApolloSearchCompany/node/executor.d.ts.map +1 -0
- package/dist/ApolloSearchCompany/node/executor.js +49 -0
- package/dist/ApolloSearchCompany/node/executor.js.map +1 -0
- package/dist/ApolloSearchCompany/node/index.d.ts +10 -0
- package/dist/ApolloSearchCompany/node/index.d.ts.map +1 -0
- package/dist/ApolloSearchCompany/node/index.js +128 -0
- package/dist/ApolloSearchCompany/node/index.js.map +1 -0
- package/dist/ApolloSearchCompany/service/apolloSearchCompanyService.d.ts +7 -0
- package/dist/ApolloSearchCompany/service/apolloSearchCompanyService.d.ts.map +1 -0
- package/dist/ApolloSearchCompany/service/apolloSearchCompanyService.js +98 -0
- package/dist/ApolloSearchCompany/service/apolloSearchCompanyService.js.map +1 -0
- package/dist/ApolloSearchCompany/util/types.d.ts +48 -0
- package/dist/ApolloSearchCompany/util/types.d.ts.map +1 -0
- package/dist/ApolloSearchCompany/util/types.js +6 -0
- package/dist/ApolloSearchCompany/util/types.js.map +1 -0
- package/dist/Document/node/executor.d.ts +22 -0
- package/dist/Document/node/executor.d.ts.map +1 -0
- package/dist/Document/node/executor.js +85 -0
- package/dist/Document/node/executor.js.map +1 -0
- package/dist/Document/node/index.d.ts +10 -0
- package/dist/Document/node/index.d.ts.map +1 -0
- package/dist/Document/node/index.js +58 -0
- package/dist/Document/node/index.js.map +1 -0
- package/dist/Document/service/documentCache.d.ts +11 -0
- package/dist/Document/service/documentCache.d.ts.map +1 -0
- package/dist/Document/service/documentCache.js +166 -0
- package/dist/Document/service/documentCache.js.map +1 -0
- package/dist/Document/util/types.d.ts +70 -0
- package/dist/Document/util/types.d.ts.map +1 -0
- package/dist/Document/util/types.js +6 -0
- package/dist/Document/util/types.js.map +1 -0
- package/dist/DocumentParser/node/executor.d.ts +12 -0
- package/dist/DocumentParser/node/executor.d.ts.map +1 -0
- package/dist/DocumentParser/node/executor.js +200 -0
- package/dist/DocumentParser/node/executor.js.map +1 -0
- package/dist/DocumentParser/node/index.d.ts +10 -0
- package/dist/DocumentParser/node/index.d.ts.map +1 -0
- package/dist/DocumentParser/node/index.js +66 -0
- package/dist/DocumentParser/node/index.js.map +1 -0
- package/dist/DocumentParser/service/docxParser.d.ts +12 -0
- package/dist/DocumentParser/service/docxParser.d.ts.map +1 -0
- package/dist/DocumentParser/service/docxParser.js +27 -0
- package/dist/DocumentParser/service/docxParser.js.map +1 -0
- package/dist/DocumentParser/service/fileTypeDetector.d.ts +19 -0
- package/dist/DocumentParser/service/fileTypeDetector.d.ts.map +1 -0
- package/dist/DocumentParser/service/fileTypeDetector.js +75 -0
- package/dist/DocumentParser/service/fileTypeDetector.js.map +1 -0
- package/dist/DocumentParser/service/index.d.ts +5 -0
- package/dist/DocumentParser/service/index.d.ts.map +1 -0
- package/dist/DocumentParser/service/index.js +14 -0
- package/dist/DocumentParser/service/index.js.map +1 -0
- package/dist/DocumentParser/service/pdfParser.d.ts +16 -0
- package/dist/DocumentParser/service/pdfParser.d.ts.map +1 -0
- package/dist/DocumentParser/service/pdfParser.js +30 -0
- package/dist/DocumentParser/service/pdfParser.js.map +1 -0
- package/dist/DocumentParser/service/txtParser.d.ts +11 -0
- package/dist/DocumentParser/service/txtParser.d.ts.map +1 -0
- package/dist/DocumentParser/service/txtParser.js +35 -0
- package/dist/DocumentParser/service/txtParser.js.map +1 -0
- package/dist/DocumentParser/util/hashUtils.d.ts +17 -0
- package/dist/DocumentParser/util/hashUtils.d.ts.map +1 -0
- package/dist/DocumentParser/util/hashUtils.js +34 -0
- package/dist/DocumentParser/util/hashUtils.js.map +1 -0
- package/dist/DocumentParser/util/types.d.ts +43 -0
- package/dist/DocumentParser/util/types.d.ts.map +1 -0
- package/dist/DocumentParser/util/types.js +6 -0
- package/dist/DocumentParser/util/types.js.map +1 -0
- package/dist/ElevenLabs/node/executor.d.ts +12 -0
- package/dist/ElevenLabs/node/executor.d.ts.map +1 -0
- package/dist/ElevenLabs/node/executor.js +65 -0
- package/dist/ElevenLabs/node/executor.js.map +1 -0
- package/dist/ElevenLabs/node/index.d.ts +10 -0
- package/dist/ElevenLabs/node/index.d.ts.map +1 -0
- package/dist/ElevenLabs/node/index.js +92 -0
- package/dist/ElevenLabs/node/index.js.map +1 -0
- package/dist/ElevenLabs/service/elevenlabsService.d.ts +27 -0
- package/dist/ElevenLabs/service/elevenlabsService.d.ts.map +1 -0
- package/dist/ElevenLabs/service/elevenlabsService.js +278 -0
- package/dist/ElevenLabs/service/elevenlabsService.js.map +1 -0
- package/dist/ElevenLabs/util/types.d.ts +43 -0
- package/dist/ElevenLabs/util/types.d.ts.map +1 -0
- package/dist/ElevenLabs/util/types.js +7 -0
- package/dist/ElevenLabs/util/types.js.map +1 -0
- package/dist/GoogleSheet/node/executor.d.ts +21 -0
- package/dist/GoogleSheet/node/executor.d.ts.map +1 -0
- package/dist/GoogleSheet/node/executor.js +156 -0
- package/dist/GoogleSheet/node/executor.js.map +1 -0
- package/dist/GoogleSheet/node/index.d.ts +10 -0
- package/dist/GoogleSheet/node/index.d.ts.map +1 -0
- package/dist/GoogleSheet/node/index.js +90 -0
- package/dist/GoogleSheet/node/index.js.map +1 -0
- package/dist/GoogleSheet/service/googleSheetsService.d.ts +10 -0
- package/dist/GoogleSheet/service/googleSheetsService.d.ts.map +1 -0
- package/dist/GoogleSheet/service/googleSheetsService.js +44 -0
- package/dist/GoogleSheet/service/googleSheetsService.js.map +1 -0
- package/dist/GoogleSheet/util/types.d.ts +39 -0
- package/dist/GoogleSheet/util/types.d.ts.map +1 -0
- package/dist/GoogleSheet/util/types.js +6 -0
- package/dist/GoogleSheet/util/types.js.map +1 -0
- package/dist/Hyperbrowser/node/executor.d.ts +12 -0
- package/dist/Hyperbrowser/node/executor.d.ts.map +1 -0
- package/dist/Hyperbrowser/node/executor.js +67 -0
- package/dist/Hyperbrowser/node/executor.js.map +1 -0
- package/dist/Hyperbrowser/node/index.d.ts +10 -0
- package/dist/Hyperbrowser/node/index.d.ts.map +1 -0
- package/dist/Hyperbrowser/node/index.js +93 -0
- package/dist/Hyperbrowser/node/index.js.map +1 -0
- package/dist/Hyperbrowser/service/hyperbrowserService.d.ts +38 -0
- package/dist/Hyperbrowser/service/hyperbrowserService.d.ts.map +1 -0
- package/dist/Hyperbrowser/service/hyperbrowserService.js +108 -0
- package/dist/Hyperbrowser/service/hyperbrowserService.js.map +1 -0
- package/dist/Hyperbrowser/util/types.d.ts +44 -0
- package/dist/Hyperbrowser/util/types.d.ts.map +1 -0
- package/dist/Hyperbrowser/util/types.js +6 -0
- package/dist/Hyperbrowser/util/types.js.map +1 -0
- package/dist/PlaidTransactions/node/executor.d.ts +10 -0
- package/dist/PlaidTransactions/node/executor.d.ts.map +1 -0
- package/dist/PlaidTransactions/node/executor.js +142 -0
- package/dist/PlaidTransactions/node/executor.js.map +1 -0
- package/dist/PlaidTransactions/node/index.d.ts +10 -0
- package/dist/PlaidTransactions/node/index.d.ts.map +1 -0
- package/dist/PlaidTransactions/node/index.js +120 -0
- package/dist/PlaidTransactions/node/index.js.map +1 -0
- package/dist/PlaidTransactions/service/plaidService.d.ts +12 -0
- package/dist/PlaidTransactions/service/plaidService.d.ts.map +1 -0
- package/dist/PlaidTransactions/service/plaidService.js +179 -0
- package/dist/PlaidTransactions/service/plaidService.js.map +1 -0
- package/dist/PlaidTransactions/util/types.d.ts +90 -0
- package/dist/PlaidTransactions/util/types.d.ts.map +1 -0
- package/dist/PlaidTransactions/util/types.js +6 -0
- package/dist/PlaidTransactions/util/types.js.map +1 -0
- package/dist/SearchWeb/node/executor.d.ts +12 -0
- package/dist/SearchWeb/node/executor.d.ts.map +1 -0
- package/dist/SearchWeb/node/executor.js +56 -0
- package/dist/SearchWeb/node/executor.js.map +1 -0
- package/dist/SearchWeb/node/index.d.ts +10 -0
- package/dist/SearchWeb/node/index.d.ts.map +1 -0
- package/dist/SearchWeb/node/index.js +114 -0
- package/dist/SearchWeb/node/index.js.map +1 -0
- package/dist/SearchWeb/service/searchWebService.d.ts +23 -0
- package/dist/SearchWeb/service/searchWebService.d.ts.map +1 -0
- package/dist/SearchWeb/service/searchWebService.js +146 -0
- package/dist/SearchWeb/service/searchWebService.js.map +1 -0
- package/dist/SearchWeb/util/types.d.ts +50 -0
- package/dist/SearchWeb/util/types.d.ts.map +1 -0
- package/dist/SearchWeb/util/types.js +6 -0
- package/dist/SearchWeb/util/types.js.map +1 -0
- package/dist/SpatialIngest/node/executor.d.ts +8 -0
- package/dist/SpatialIngest/node/executor.d.ts.map +1 -0
- package/dist/SpatialIngest/node/executor.js +58 -0
- package/dist/SpatialIngest/node/executor.js.map +1 -0
- package/dist/SpatialIngest/node/index.d.ts +10 -0
- package/dist/SpatialIngest/node/index.d.ts.map +1 -0
- package/dist/SpatialIngest/node/index.js +99 -0
- package/dist/SpatialIngest/node/index.js.map +1 -0
- package/dist/SpatialIngest/service/spatialIngestService.d.ts +29 -0
- package/dist/SpatialIngest/service/spatialIngestService.d.ts.map +1 -0
- package/dist/SpatialIngest/service/spatialIngestService.js +306 -0
- package/dist/SpatialIngest/service/spatialIngestService.js.map +1 -0
- package/dist/SpatialIngest/util/types.d.ts +26 -0
- package/dist/SpatialIngest/util/types.d.ts.map +1 -0
- package/dist/SpatialIngest/util/types.js +3 -0
- package/dist/SpatialIngest/util/types.js.map +1 -0
- package/dist/credentials/index.d.ts +141 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +180 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +104 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/platform.d.ts +11 -0
- package/dist/shared/platform.d.ts.map +1 -0
- package/dist/shared/platform.js +21 -0
- package/dist/shared/platform.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createContentHash = createContentHash;
|
|
4
|
+
exports.createContentHashFromFields = createContentHashFromFields;
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
/**
|
|
7
|
+
* Creates a content hash for a parsed document result object
|
|
8
|
+
* Excludes fields that can change independently of content (universalId, downloadUrl)
|
|
9
|
+
* @param result - The parsed document result object
|
|
10
|
+
* @returns Short hash (12 characters) representing the content
|
|
11
|
+
*/
|
|
12
|
+
function createContentHash(result) {
|
|
13
|
+
// Exclude fields that can change independently of actual content
|
|
14
|
+
const { universalId, downloadUrl, ...contentFields } = result;
|
|
15
|
+
// Sort keys for consistent hashing
|
|
16
|
+
const resultString = JSON.stringify(contentFields, Object.keys(contentFields).sort());
|
|
17
|
+
// Create hash and return short version (similar to git short hash)
|
|
18
|
+
const fullHash = (0, crypto_1.createHash)('sha256').update(resultString).digest('hex');
|
|
19
|
+
return fullHash.substring(0, 12);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates a content hash from specific content fields
|
|
23
|
+
* More targeted approach if you want to hash only core content
|
|
24
|
+
* @param text - Document text content
|
|
25
|
+
* @param metadata - Document metadata
|
|
26
|
+
* @param pageCount - Number of pages (optional)
|
|
27
|
+
* @returns Short hash (12 characters) representing the content
|
|
28
|
+
*/
|
|
29
|
+
function createContentHashFromFields(text, metadata, pageCount) {
|
|
30
|
+
const contentIdentifier = `${text}|${pageCount || 0}|${JSON.stringify(metadata, Object.keys(metadata).sort())}`;
|
|
31
|
+
const fullHash = (0, crypto_1.createHash)('sha256').update(contentIdentifier).digest('hex');
|
|
32
|
+
return fullHash.substring(0, 12);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=hashUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashUtils.js","sourceRoot":"","sources":["../../../src/DocumentParser/util/hashUtils.ts"],"names":[],"mappings":";;AAQA,8CAUC;AAUD,kEAQC;AApCD,mCAAoC;AAEpC;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAW;IAC3C,iEAAiE;IACjE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC;IAE9D,mCAAmC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtF,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,2BAA2B,CACzC,IAAY,EACZ,QAAa,EACb,SAAkB;IAElB,MAAM,iBAAiB,GAAG,GAAG,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IAChH,MAAM,QAAQ,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for DocumentParser node
|
|
3
|
+
*/
|
|
4
|
+
export interface DocumentParserConfig {
|
|
5
|
+
parserType?: 'auto' | 'pdf' | 'docx' | 'txt';
|
|
6
|
+
maxFileSizeMB?: number;
|
|
7
|
+
file: {
|
|
8
|
+
key: string;
|
|
9
|
+
content: Buffer | string;
|
|
10
|
+
size?: number;
|
|
11
|
+
bucket?: string;
|
|
12
|
+
universalId?: string;
|
|
13
|
+
downloadUrl?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface DocumentParserInput {
|
|
17
|
+
}
|
|
18
|
+
export interface DocumentParserOutput {
|
|
19
|
+
fileKey: string;
|
|
20
|
+
text: string;
|
|
21
|
+
pageCount?: number;
|
|
22
|
+
metadata?: {
|
|
23
|
+
title?: string;
|
|
24
|
+
author?: string;
|
|
25
|
+
subject?: string;
|
|
26
|
+
keywords?: string;
|
|
27
|
+
creationDate?: string;
|
|
28
|
+
modificationDate?: string;
|
|
29
|
+
[key: string]: any;
|
|
30
|
+
};
|
|
31
|
+
fileType: 'pdf' | 'docx' | 'txt';
|
|
32
|
+
fileSize?: number;
|
|
33
|
+
bucket?: string;
|
|
34
|
+
universalId?: string;
|
|
35
|
+
downloadUrl?: string;
|
|
36
|
+
contentId?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface DocumentParserExecutorOutput {
|
|
39
|
+
__outputs: {
|
|
40
|
+
output: DocumentParserOutput;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/DocumentParser/util/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE;QACT,MAAM,EAAE,oBAAoB,CAAC;KAC9B,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/DocumentParser/util/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type NodeExecutionContext } from "@gravity-platform/plugin-base";
|
|
2
|
+
import { ElevenLabsConfig, ElevenLabsOutput } from "../util/types";
|
|
3
|
+
import { PromiseNode } from "../../shared/platform";
|
|
4
|
+
export default class ElevenLabsExecutor extends PromiseNode<ElevenLabsConfig> {
|
|
5
|
+
constructor();
|
|
6
|
+
protected executeNode(inputs: Record<string, any>, config: ElevenLabsConfig, context: NodeExecutionContext): Promise<ElevenLabsOutput>;
|
|
7
|
+
/**
|
|
8
|
+
* Build credential context from execution context
|
|
9
|
+
*/
|
|
10
|
+
private buildCredentialContext;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/ElevenLabs/node/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,WAAW,EAAgB,MAAM,uBAAuB,CAAC;AAKlE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW,CAAC,gBAAgB,CAAC;;cAK3D,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IA8C5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAS/B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const platform_1 = require("../../shared/platform");
|
|
4
|
+
const elevenlabsService_1 = require("../service/elevenlabsService");
|
|
5
|
+
const NODE_TYPE = "ElevenLabs";
|
|
6
|
+
class ElevenLabsExecutor extends platform_1.PromiseNode {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(NODE_TYPE);
|
|
9
|
+
}
|
|
10
|
+
async executeNode(inputs, config, context) {
|
|
11
|
+
const logger = (0, platform_1.createLogger)("ElevenLabs");
|
|
12
|
+
logger.info("Starting ElevenLabs TTS generation", {
|
|
13
|
+
nodeId: context.nodeId,
|
|
14
|
+
textLength: config.text?.length || 0,
|
|
15
|
+
});
|
|
16
|
+
// Build credential context for service
|
|
17
|
+
const credentialContext = this.buildCredentialContext(context);
|
|
18
|
+
try {
|
|
19
|
+
// Call ElevenLabs API via service
|
|
20
|
+
const result = await (0, elevenlabsService_1.generateTTS)(config, credentialContext);
|
|
21
|
+
logger.info("ElevenLabs TTS completed", {
|
|
22
|
+
format: result.format,
|
|
23
|
+
durationSeconds: result.durationSeconds,
|
|
24
|
+
characterCount: result.characterCount,
|
|
25
|
+
isDialogue: result.isDialogue,
|
|
26
|
+
});
|
|
27
|
+
// Return with __outputs wrapper
|
|
28
|
+
return {
|
|
29
|
+
__outputs: {
|
|
30
|
+
audio: {
|
|
31
|
+
data: result.audioBase64,
|
|
32
|
+
mimeType: result.contentType,
|
|
33
|
+
fileName: `audio_${Date.now()}.mp3`,
|
|
34
|
+
},
|
|
35
|
+
metadata: {
|
|
36
|
+
format: result.format,
|
|
37
|
+
durationSeconds: result.durationSeconds,
|
|
38
|
+
characterCount: result.characterCount,
|
|
39
|
+
isDialogue: result.isDialogue,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
logger.error("ElevenLabs TTS failed", {
|
|
46
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
47
|
+
});
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build credential context from execution context
|
|
53
|
+
*/
|
|
54
|
+
buildCredentialContext(context) {
|
|
55
|
+
return {
|
|
56
|
+
credentials: context.credentials || {},
|
|
57
|
+
nodeType: NODE_TYPE,
|
|
58
|
+
workflowId: context.workflow?.id || "",
|
|
59
|
+
executionId: context.executionId || "",
|
|
60
|
+
nodeId: context.nodeId || "",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.default = ElevenLabsExecutor;
|
|
65
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/ElevenLabs/node/executor.ts"],"names":[],"mappings":";;AAEA,oDAAkE;AAClE,oEAA2D;AAE3D,MAAM,SAAS,GAAG,YAAY,CAAC;AAE/B,MAAqB,kBAAmB,SAAQ,sBAA6B;IAC3E;QACE,KAAK,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IAES,KAAK,CAAC,WAAW,CACzB,MAA2B,EAC3B,MAAwB,EACxB,OAA6B;QAE7B,MAAM,MAAM,GAAG,IAAA,uBAAY,EAAC,YAAY,CAAC,CAAC;QAE1C,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;YAChD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;SACrC,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAE/D,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAW,EAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAE5D,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACtC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;YAEH,gCAAgC;YAChC,OAAO;gBACL,SAAS,EAAE;oBACT,KAAK,EAAE;wBACL,IAAI,EAAE,MAAM,CAAC,WAAW;wBACxB,QAAQ,EAAE,MAAM,CAAC,WAAW;wBAC5B,QAAQ,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,MAAM;qBACpC;oBACD,QAAQ,EAAE;wBACR,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;wBACvC,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC9B;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBACpC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAA6B;QAC1D,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YACtC,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;YACtC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;CACF;AAnED,qCAmEC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type EnhancedNodeDefinition } from "@gravity-platform/plugin-base";
|
|
2
|
+
import ElevenLabsExecutor from "./executor";
|
|
3
|
+
export declare const NODE_TYPE = "ElevenLabs";
|
|
4
|
+
declare function createNodeDefinition(): EnhancedNodeDefinition;
|
|
5
|
+
export declare const ElevenLabsNode: {
|
|
6
|
+
definition: any;
|
|
7
|
+
executor: typeof ElevenLabsExecutor;
|
|
8
|
+
};
|
|
9
|
+
export { createNodeDefinition };
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ElevenLabs/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,kBAAkB,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,SAAS,eAAe,CAAC;AAEtC,iBAAS,oBAAoB,IAAI,sBAAsB,CA6EtD;AAID,eAAO,MAAM,cAAc;;;CAG1B,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
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.ElevenLabsNode = exports.NODE_TYPE = void 0;
|
|
7
|
+
exports.createNodeDefinition = createNodeDefinition;
|
|
8
|
+
const plugin_base_1 = require("@gravity-platform/plugin-base");
|
|
9
|
+
const executor_1 = __importDefault(require("./executor"));
|
|
10
|
+
exports.NODE_TYPE = "ElevenLabs";
|
|
11
|
+
function createNodeDefinition() {
|
|
12
|
+
return {
|
|
13
|
+
type: exports.NODE_TYPE,
|
|
14
|
+
name: "ElevenLabs TTS",
|
|
15
|
+
description: "Convert text to speech using ElevenLabs v3.",
|
|
16
|
+
category: "Ingest",
|
|
17
|
+
logoUrl: "https://res.cloudinary.com/sonik/image/upload/v1768540562/gravity/icons/elevanlabs.jpg",
|
|
18
|
+
color: "#FF69B4",
|
|
19
|
+
inputs: [
|
|
20
|
+
{
|
|
21
|
+
name: "input",
|
|
22
|
+
type: plugin_base_1.NodeInputType.STRING,
|
|
23
|
+
required: true,
|
|
24
|
+
description: "Text or dialogue script with [DETECTIVE]: and [SUSPECT]: labels",
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
outputs: [
|
|
28
|
+
{
|
|
29
|
+
name: "audio",
|
|
30
|
+
type: plugin_base_1.NodeInputType.OBJECT,
|
|
31
|
+
description: "Generated audio with data (base64), mimeType, and fileName",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "metadata",
|
|
35
|
+
type: plugin_base_1.NodeInputType.OBJECT,
|
|
36
|
+
description: "Audio metadata including format, durationSeconds, characterCount, isDialogue",
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
configSchema: {
|
|
40
|
+
type: "object",
|
|
41
|
+
properties: {
|
|
42
|
+
text: {
|
|
43
|
+
type: "string",
|
|
44
|
+
title: "Text / Script",
|
|
45
|
+
description: "Text to convert. For dialogue use [DETECTIVE]: and [SUSPECT]: labels. Use [laughs], [sighs] for v3 audio tags.",
|
|
46
|
+
default: "{{{input}}}",
|
|
47
|
+
"ui:field": "template",
|
|
48
|
+
},
|
|
49
|
+
characterId: {
|
|
50
|
+
type: "string",
|
|
51
|
+
title: "Character ID",
|
|
52
|
+
description: "Unique ID for the suspect (e.g., 'sus_claire'). Combined with Character Gender to deterministically pick a voice.",
|
|
53
|
+
default: "",
|
|
54
|
+
"ui:field": "template",
|
|
55
|
+
},
|
|
56
|
+
characterGender: {
|
|
57
|
+
type: "string",
|
|
58
|
+
title: "Character Gender",
|
|
59
|
+
description: "Gender of the suspect/character. Routes to correct voice pool.",
|
|
60
|
+
enum: ["male", "female"],
|
|
61
|
+
enumNames: ["Male", "Female"],
|
|
62
|
+
default: "male",
|
|
63
|
+
"ui:field": "template",
|
|
64
|
+
},
|
|
65
|
+
stability: {
|
|
66
|
+
type: "number",
|
|
67
|
+
title: "Stability",
|
|
68
|
+
description: "0.0=Creative, 0.5=Natural, 1.0=Robust (only these 3 values allowed)",
|
|
69
|
+
default: 0.0,
|
|
70
|
+
enum: [0.0, 0.5, 1.0],
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
required: ["text"],
|
|
74
|
+
},
|
|
75
|
+
credentials: [
|
|
76
|
+
{
|
|
77
|
+
name: "elevenlabsCredential",
|
|
78
|
+
type: "elevenlabsCredential",
|
|
79
|
+
required: true,
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
capabilities: {
|
|
83
|
+
isTrigger: false,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const definition = createNodeDefinition();
|
|
88
|
+
exports.ElevenLabsNode = {
|
|
89
|
+
definition,
|
|
90
|
+
executor: executor_1.default,
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ElevenLabs/node/index.ts"],"names":[],"mappings":";;;;;;AA2FS,oDAAoB;AA3F7B,+DAA2F;AAC3F,0DAA4C;AAE/B,QAAA,SAAS,GAAG,YAAY,CAAC;AAEtC,SAAS,oBAAoB;IAC3B,OAAO;QACL,IAAI,EAAE,iBAAS;QACf,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,6CAA6C;QAC1D,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,wFAAwF;QACjG,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,2BAAa,CAAC,MAAM;gBAC1B,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,iEAAiE;aAC/E;SACF;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,2BAAa,CAAC,MAAM;gBAC1B,WAAW,EAAE,4DAA4D;aAC1E;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,2BAAa,CAAC,MAAM;gBAC1B,WAAW,EAAE,8EAA8E;aAC5F;SACF;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,eAAe;oBACtB,WAAW,EACT,gHAAgH;oBAClH,OAAO,EAAE,aAAa;oBACtB,UAAU,EAAE,UAAU;iBACvB;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,cAAc;oBACrB,WAAW,EACT,mHAAmH;oBACrH,OAAO,EAAE,EAAE;oBACX,UAAU,EAAE,UAAU;iBACvB;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,kBAAkB;oBACzB,WAAW,EAAE,gEAAgE;oBAC7E,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;oBACxB,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;oBAC7B,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,UAAU;iBACvB;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,WAAW;oBAClB,WAAW,EAAE,qEAAqE;oBAClF,OAAO,EAAE,GAAG;oBACZ,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;iBACtB;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,WAAW,EAAE;YACX;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE;YACZ,SAAS,EAAE,KAAK;SACjB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;AAE7B,QAAA,cAAc,GAAG;IAC5B,UAAU;IACV,QAAQ,EAAE,kBAAkB;CAC7B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ElevenLabs TTS Service
|
|
3
|
+
* Handles text-to-speech conversion with support for multi-speaker dialogue
|
|
4
|
+
* Uses Eleven v3 model with Text to Dialogue API for expressive audio
|
|
5
|
+
*/
|
|
6
|
+
import { ElevenLabsConfig, DialogueSegment } from "../util/types";
|
|
7
|
+
/**
|
|
8
|
+
* Parse dialogue script into segments by speaker
|
|
9
|
+
* Expects format: [DETECTIVE]: text or [SUSPECT]: text
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseDialogueScript(script: string): DialogueSegment[];
|
|
12
|
+
/**
|
|
13
|
+
* Check if text is a dialogue script (has speaker labels)
|
|
14
|
+
*/
|
|
15
|
+
export declare function isDialogueScript(text: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Generate TTS audio from text or dialogue script using Eleven v3
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateTTS(config: ElevenLabsConfig, context: any): Promise<{
|
|
20
|
+
audioBase64: string;
|
|
21
|
+
format: string;
|
|
22
|
+
durationSeconds: number;
|
|
23
|
+
contentType: string;
|
|
24
|
+
characterCount: number;
|
|
25
|
+
isDialogue: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
//# sourceMappingURL=elevenlabsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenlabsService.d.ts","sourceRoot":"","sources":["../../../src/ElevenLabs/service/elevenlabsService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA6ElE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CA+CrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AA0HD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC,CA0DD"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ElevenLabs TTS Service
|
|
4
|
+
* Handles text-to-speech conversion with support for multi-speaker dialogue
|
|
5
|
+
* Uses Eleven v3 model with Text to Dialogue API for expressive audio
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.parseDialogueScript = parseDialogueScript;
|
|
9
|
+
exports.isDialogueScript = isDialogueScript;
|
|
10
|
+
exports.generateTTS = generateTTS;
|
|
11
|
+
const platform_1 = require("../../shared/platform");
|
|
12
|
+
const ELEVENLABS_API_BASE = "https://api.elevenlabs.io/v1";
|
|
13
|
+
const logger = (0, platform_1.createLogger)("ElevenLabs");
|
|
14
|
+
/**
|
|
15
|
+
* Get ElevenLabs API key from credentials
|
|
16
|
+
*/
|
|
17
|
+
async function getApiKey(context) {
|
|
18
|
+
const credentials = await (0, platform_1.getNodeCredentials)(context, "elevenlabsCredential");
|
|
19
|
+
const apiKey = credentials?.apiKey;
|
|
20
|
+
if (!apiKey) {
|
|
21
|
+
throw new Error("ElevenLabs API key not found in credentials");
|
|
22
|
+
}
|
|
23
|
+
return apiKey;
|
|
24
|
+
}
|
|
25
|
+
// Premade voices - built into every ElevenLabs account, no creation needed, no limits
|
|
26
|
+
const DETECTIVE_VOICE_ID = "pFZP5JQG7iQjIQuC4Bku"; // Female detective - always the interviewer, never used for suspects
|
|
27
|
+
const PREMADE_MALE_VOICES = [
|
|
28
|
+
"onwK4e9ZLuTAKqWW03F9", // Daniel - deep, authoritative
|
|
29
|
+
"N2lVS1w4EtoT3dr4eOWO", // Liam
|
|
30
|
+
"IKne3meq5aSn9XLyUdCD", // Charlie
|
|
31
|
+
"TX3LPaxmHKxFdv7VOQHJ", // Liam (alt)
|
|
32
|
+
"JBFqnCBsd6RMkjVDRZzb", // George
|
|
33
|
+
"TxGEqnHWrfWFTfGW9XjX", // Josh
|
|
34
|
+
"29vD33N1CtxCmqQRPOHJ", // Drew
|
|
35
|
+
];
|
|
36
|
+
// Charlotte excluded — she is reserved exclusively for DETECTIVE
|
|
37
|
+
const PREMADE_FEMALE_VOICES = [
|
|
38
|
+
"pNInz6obpgDQGcFmaJgB", // Nicole
|
|
39
|
+
"Xb7hH8MSUJpSbSDYk0k2", // Alice
|
|
40
|
+
"jBpfuIE2acCO8z3wKNLl", // Freya
|
|
41
|
+
"jsCqWAovK2LkecY7zXl4", // Dorothy
|
|
42
|
+
"z9fAnlkpzviPz146aGWa", // Glinda
|
|
43
|
+
];
|
|
44
|
+
const DEFAULT_VOICES = {
|
|
45
|
+
DETECTIVE: DETECTIVE_VOICE_ID,
|
|
46
|
+
SUSPECT: PREMADE_FEMALE_VOICES[0],
|
|
47
|
+
NARRATOR: PREMADE_MALE_VOICES[0],
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Hash a string to a stable integer (djb2)
|
|
51
|
+
*/
|
|
52
|
+
function hashString(str) {
|
|
53
|
+
let hash = 5381;
|
|
54
|
+
for (let i = 0; i < str.length; i++) {
|
|
55
|
+
hash = (hash * 33) ^ str.charCodeAt(i);
|
|
56
|
+
}
|
|
57
|
+
return Math.abs(hash);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Pick a suspect voice deterministically based on characterId and gender.
|
|
61
|
+
* Female suspects draw from PREMADE_FEMALE_VOICES (5 voices, never Charlotte).
|
|
62
|
+
* Male suspects draw from PREMADE_MALE_VOICES (7 voices).
|
|
63
|
+
* Same characterId + gender always returns the same voice. No API calls, no limits.
|
|
64
|
+
*/
|
|
65
|
+
function pickVoice(characterId, gender) {
|
|
66
|
+
const g = gender.toLowerCase().trim();
|
|
67
|
+
const isFemale = g === "female" || g === "f" || g === "woman";
|
|
68
|
+
const pool = isFemale ? PREMADE_FEMALE_VOICES : PREMADE_MALE_VOICES;
|
|
69
|
+
const index = hashString(characterId) % pool.length;
|
|
70
|
+
const voiceId = pool[index];
|
|
71
|
+
console.log(`[ElevenLabs] Picked ${isFemale ? "female" : "male"} suspect voice for "${characterId}": ${voiceId} (index ${index}/${pool.length})`);
|
|
72
|
+
return voiceId;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse dialogue script into segments by speaker
|
|
76
|
+
* Expects format: [DETECTIVE]: text or [SUSPECT]: text
|
|
77
|
+
*/
|
|
78
|
+
function parseDialogueScript(script) {
|
|
79
|
+
const segments = [];
|
|
80
|
+
const lines = script.split("\n");
|
|
81
|
+
let currentSpeaker = "NARRATOR";
|
|
82
|
+
let currentText = "";
|
|
83
|
+
for (const line of lines) {
|
|
84
|
+
const trimmedLine = line.trim();
|
|
85
|
+
if (!trimmedLine)
|
|
86
|
+
continue;
|
|
87
|
+
// Check for speaker labels
|
|
88
|
+
const detectiveMatch = trimmedLine.match(/^\[DETECTIVE\]:\s*(.*)$/i);
|
|
89
|
+
const suspectMatch = trimmedLine.match(/^\[SUSPECT\]:\s*(.*)$/i);
|
|
90
|
+
const narratorMatch = trimmedLine.match(/^\[NARRATOR\]:\s*(.*)$/i);
|
|
91
|
+
if (detectiveMatch) {
|
|
92
|
+
// Save previous segment if exists
|
|
93
|
+
if (currentText.trim()) {
|
|
94
|
+
segments.push({ speaker: currentSpeaker, text: currentText.trim() });
|
|
95
|
+
}
|
|
96
|
+
currentSpeaker = "DETECTIVE";
|
|
97
|
+
currentText = detectiveMatch[1];
|
|
98
|
+
}
|
|
99
|
+
else if (suspectMatch) {
|
|
100
|
+
if (currentText.trim()) {
|
|
101
|
+
segments.push({ speaker: currentSpeaker, text: currentText.trim() });
|
|
102
|
+
}
|
|
103
|
+
currentSpeaker = "SUSPECT";
|
|
104
|
+
currentText = suspectMatch[1];
|
|
105
|
+
}
|
|
106
|
+
else if (narratorMatch) {
|
|
107
|
+
if (currentText.trim()) {
|
|
108
|
+
segments.push({ speaker: currentSpeaker, text: currentText.trim() });
|
|
109
|
+
}
|
|
110
|
+
currentSpeaker = "NARRATOR";
|
|
111
|
+
currentText = narratorMatch[1];
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Continue current speaker's text
|
|
115
|
+
currentText += " " + trimmedLine;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Don't forget the last segment
|
|
119
|
+
if (currentText.trim()) {
|
|
120
|
+
segments.push({ speaker: currentSpeaker, text: currentText.trim() });
|
|
121
|
+
}
|
|
122
|
+
return segments;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if text is a dialogue script (has speaker labels)
|
|
126
|
+
*/
|
|
127
|
+
function isDialogueScript(text) {
|
|
128
|
+
return /\[(DETECTIVE|SUSPECT|NARRATOR)\]:/i.test(text);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get voice ID - pick a premade voice deterministically from characterId.
|
|
132
|
+
* No API calls, no voice creation, no limits.
|
|
133
|
+
*/
|
|
134
|
+
function getVoiceId(speaker, config) {
|
|
135
|
+
if (speaker === "DETECTIVE") {
|
|
136
|
+
return DETECTIVE_VOICE_ID;
|
|
137
|
+
}
|
|
138
|
+
if (speaker === "SUSPECT") {
|
|
139
|
+
const id = config.characterId || "suspect_default";
|
|
140
|
+
const gender = config.characterGender || "male";
|
|
141
|
+
console.log(`[ElevenLabs] getVoiceId SUSPECT — characterId="${config.characterId}", characterGender="${config.characterGender}", resolved gender="${gender}"`);
|
|
142
|
+
return pickVoice(id, gender);
|
|
143
|
+
}
|
|
144
|
+
return DEFAULT_VOICES.NARRATOR;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Generate dialogue using Text to Dialogue API
|
|
148
|
+
* POST /v1/text-to-dialogue with inputs array
|
|
149
|
+
*/
|
|
150
|
+
async function generateDialogueV3(segments, apiKey, config) {
|
|
151
|
+
// Get voice IDs (may generate from prompts)
|
|
152
|
+
const detectiveVoiceId = getVoiceId("DETECTIVE", config);
|
|
153
|
+
const suspectVoiceId = getVoiceId("SUSPECT", config);
|
|
154
|
+
const narratorVoiceId = DEFAULT_VOICES.NARRATOR;
|
|
155
|
+
// Build inputs array for Text to Dialogue API
|
|
156
|
+
const inputs = segments.map((seg) => ({
|
|
157
|
+
text: seg.text,
|
|
158
|
+
voice_id: seg.speaker === "DETECTIVE" ? detectiveVoiceId : seg.speaker === "SUSPECT" ? suspectVoiceId : narratorVoiceId,
|
|
159
|
+
}));
|
|
160
|
+
console.log(`[ElevenLabs] Text to Dialogue API: ${inputs.length} segments`);
|
|
161
|
+
const response = await fetch(`${ELEVENLABS_API_BASE}/text-to-dialogue`, {
|
|
162
|
+
method: "POST",
|
|
163
|
+
headers: {
|
|
164
|
+
"Content-Type": "application/json",
|
|
165
|
+
"xi-api-key": apiKey,
|
|
166
|
+
},
|
|
167
|
+
body: JSON.stringify({
|
|
168
|
+
inputs,
|
|
169
|
+
model_id: "eleven_v3",
|
|
170
|
+
settings: {
|
|
171
|
+
stability: [0.0, 0.5, 1.0].includes(config.stability ?? 0) ? (config.stability ?? 0) : 0.0,
|
|
172
|
+
},
|
|
173
|
+
}),
|
|
174
|
+
});
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
const errorText = await response.text();
|
|
177
|
+
console.log(`[ElevenLabs] Dialogue API error: ${errorText}`);
|
|
178
|
+
throw new Error("FALLBACK_TO_SEQUENTIAL");
|
|
179
|
+
}
|
|
180
|
+
return response.arrayBuffer();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Generate speech for a single segment using standard TTS API
|
|
184
|
+
*/
|
|
185
|
+
async function generateSpeechV3(text, voiceId, apiKey, config) {
|
|
186
|
+
if (!text.trim()) {
|
|
187
|
+
return new ArrayBuffer(0);
|
|
188
|
+
}
|
|
189
|
+
const response = await fetch(`${ELEVENLABS_API_BASE}/text-to-speech/${voiceId}`, {
|
|
190
|
+
method: "POST",
|
|
191
|
+
headers: {
|
|
192
|
+
"Content-Type": "application/json",
|
|
193
|
+
"xi-api-key": apiKey,
|
|
194
|
+
},
|
|
195
|
+
body: JSON.stringify({
|
|
196
|
+
text: text.trim(),
|
|
197
|
+
model_id: "eleven_v3",
|
|
198
|
+
voice_settings: {
|
|
199
|
+
stability: [0.0, 0.5, 1.0].includes(config.stability ?? 0) ? (config.stability ?? 0) : 0.0,
|
|
200
|
+
},
|
|
201
|
+
}),
|
|
202
|
+
});
|
|
203
|
+
if (!response.ok) {
|
|
204
|
+
const errorText = await response.text();
|
|
205
|
+
throw new Error(`ElevenLabs API error (${response.status}): ${errorText}`);
|
|
206
|
+
}
|
|
207
|
+
return response.arrayBuffer();
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Concatenate multiple audio buffers (MP3)
|
|
211
|
+
*/
|
|
212
|
+
function concatenateAudioBuffers(buffers) {
|
|
213
|
+
const nonEmptyBuffers = buffers.filter((b) => b.byteLength > 0);
|
|
214
|
+
const totalLength = nonEmptyBuffers.reduce((sum, buf) => sum + buf.byteLength, 0);
|
|
215
|
+
const result = new Uint8Array(totalLength);
|
|
216
|
+
let offset = 0;
|
|
217
|
+
for (const buffer of nonEmptyBuffers) {
|
|
218
|
+
result.set(new Uint8Array(buffer), offset);
|
|
219
|
+
offset += buffer.byteLength;
|
|
220
|
+
}
|
|
221
|
+
return result.buffer;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Generate TTS audio from text or dialogue script using Eleven v3
|
|
225
|
+
*/
|
|
226
|
+
async function generateTTS(config, context) {
|
|
227
|
+
const apiKey = await getApiKey(context);
|
|
228
|
+
const { text } = config;
|
|
229
|
+
const isDialogue = isDialogueScript(text);
|
|
230
|
+
let audioBuffer;
|
|
231
|
+
let characterCount = text.length;
|
|
232
|
+
if (isDialogue) {
|
|
233
|
+
const segments = parseDialogueScript(text);
|
|
234
|
+
console.log(`[ElevenLabs] Generating v3 dialogue with ${segments.length} segments`);
|
|
235
|
+
// Try Text to Dialogue API first (best for multi-speaker)
|
|
236
|
+
try {
|
|
237
|
+
audioBuffer = await generateDialogueV3(segments, apiKey, config);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
// Fall back to sequential TTS if dialogue API fails
|
|
241
|
+
if (error.message === "FALLBACK_TO_SEQUENTIAL" || error.message.includes("FALLBACK")) {
|
|
242
|
+
console.log(`[ElevenLabs] Using sequential v3 TTS fallback`);
|
|
243
|
+
const audioBuffers = [];
|
|
244
|
+
for (const segment of segments) {
|
|
245
|
+
const voiceId = getVoiceId(segment.speaker, config);
|
|
246
|
+
console.log(`[ElevenLabs] Generating v3 segment: ${segment.speaker}`);
|
|
247
|
+
const segmentAudio = await generateSpeechV3(segment.text, voiceId, apiKey, config);
|
|
248
|
+
audioBuffers.push(segmentAudio);
|
|
249
|
+
// Small delay between API calls
|
|
250
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
251
|
+
}
|
|
252
|
+
audioBuffer = concatenateAudioBuffers(audioBuffers);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
throw error;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
// Single speaker mode with v3
|
|
261
|
+
const voiceId = DEFAULT_VOICES.NARRATOR;
|
|
262
|
+
console.log(`[ElevenLabs] Generating single-speaker v3 audio`);
|
|
263
|
+
audioBuffer = await generateSpeechV3(text, voiceId, apiKey, config);
|
|
264
|
+
}
|
|
265
|
+
// Convert to base64
|
|
266
|
+
const audioBase64 = Buffer.from(audioBuffer).toString("base64");
|
|
267
|
+
// Estimate duration (~150 words per minute, ~5 chars per word)
|
|
268
|
+
const estimatedDuration = (characterCount / 5 / 150) * 60;
|
|
269
|
+
return {
|
|
270
|
+
audioBase64,
|
|
271
|
+
format: "mp3",
|
|
272
|
+
durationSeconds: Math.round(estimatedDuration),
|
|
273
|
+
contentType: "audio/mpeg",
|
|
274
|
+
characterCount,
|
|
275
|
+
isDialogue,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=elevenlabsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenlabsService.js","sourceRoot":"","sources":["../../../src/ElevenLabs/service/elevenlabsService.ts"],"names":[],"mappings":"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"}
|