n8n-nodes-speechall 0.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.
Files changed (59) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +165 -0
  3. package/dist/credentials/SpeechallApi.credentials.d.ts +13 -0
  4. package/dist/credentials/SpeechallApi.credentials.js +43 -0
  5. package/dist/credentials/SpeechallApi.credentials.js.map +1 -0
  6. package/dist/nodes/Speechall/Speechall.node.d.ts +11 -0
  7. package/dist/nodes/Speechall/Speechall.node.js +79 -0
  8. package/dist/nodes/Speechall/Speechall.node.js.map +1 -0
  9. package/dist/nodes/Speechall/Speechall.node.json +18 -0
  10. package/dist/nodes/Speechall/descriptions/SpeechToText.description.d.ts +2 -0
  11. package/dist/nodes/Speechall/descriptions/SpeechToText.description.js +154 -0
  12. package/dist/nodes/Speechall/descriptions/SpeechToText.description.js.map +1 -0
  13. package/dist/nodes/Speechall/generated/speechall-openapi.d.ts +528 -0
  14. package/dist/nodes/Speechall/generated/speechall-openapi.js +3 -0
  15. package/dist/nodes/Speechall/generated/speechall-openapi.js.map +1 -0
  16. package/dist/nodes/Speechall/helpers/binary.d.ts +8 -0
  17. package/dist/nodes/Speechall/helpers/binary.js +29 -0
  18. package/dist/nodes/Speechall/helpers/binary.js.map +1 -0
  19. package/dist/nodes/Speechall/helpers/fields.d.ts +11 -0
  20. package/dist/nodes/Speechall/helpers/fields.js +344 -0
  21. package/dist/nodes/Speechall/helpers/fields.js.map +1 -0
  22. package/dist/nodes/Speechall/helpers/models.d.ts +13 -0
  23. package/dist/nodes/Speechall/helpers/models.js +148 -0
  24. package/dist/nodes/Speechall/helpers/models.js.map +1 -0
  25. package/dist/nodes/Speechall/helpers/normalize.d.ts +14 -0
  26. package/dist/nodes/Speechall/helpers/normalize.js +109 -0
  27. package/dist/nodes/Speechall/helpers/normalize.js.map +1 -0
  28. package/dist/nodes/Speechall/helpers/replacementRules.d.ts +4 -0
  29. package/dist/nodes/Speechall/helpers/replacementRules.js +130 -0
  30. package/dist/nodes/Speechall/helpers/replacementRules.js.map +1 -0
  31. package/dist/nodes/Speechall/helpers/types.d.ts +74 -0
  32. package/dist/nodes/Speechall/helpers/types.js +5 -0
  33. package/dist/nodes/Speechall/helpers/types.js.map +1 -0
  34. package/dist/nodes/Speechall/loadOptions/getSpeechToTextModels.d.ts +2 -0
  35. package/dist/nodes/Speechall/loadOptions/getSpeechToTextModels.js +13 -0
  36. package/dist/nodes/Speechall/loadOptions/getSpeechToTextModels.js.map +1 -0
  37. package/dist/nodes/Speechall/operations/listModels.operation.d.ts +2 -0
  38. package/dist/nodes/Speechall/operations/listModels.operation.js +30 -0
  39. package/dist/nodes/Speechall/operations/listModels.operation.js.map +1 -0
  40. package/dist/nodes/Speechall/operations/transcribeFile.operation.d.ts +2 -0
  41. package/dist/nodes/Speechall/operations/transcribeFile.operation.js +149 -0
  42. package/dist/nodes/Speechall/operations/transcribeFile.operation.js.map +1 -0
  43. package/dist/nodes/Speechall/operations/transcribeRemoteUrl.operation.d.ts +2 -0
  44. package/dist/nodes/Speechall/operations/transcribeRemoteUrl.operation.js +132 -0
  45. package/dist/nodes/Speechall/operations/transcribeRemoteUrl.operation.js.map +1 -0
  46. package/dist/nodes/Speechall/speechall.dark.svg +7 -0
  47. package/dist/nodes/Speechall/speechall.svg +7 -0
  48. package/dist/nodes/Speechall/transport/errors.d.ts +12 -0
  49. package/dist/nodes/Speechall/transport/errors.js +151 -0
  50. package/dist/nodes/Speechall/transport/errors.js.map +1 -0
  51. package/dist/nodes/Speechall/transport/speechallApiRequest.d.ts +15 -0
  52. package/dist/nodes/Speechall/transport/speechallApiRequest.js +81 -0
  53. package/dist/nodes/Speechall/transport/speechallApiRequest.js.map +1 -0
  54. package/dist/package.json +68 -0
  55. package/examples/google-drive-audio-to-transcript.json +71 -0
  56. package/examples/meeting-recording-to-diarized-transcript.json +59 -0
  57. package/examples/remote-podcast-url-to-srt.json +66 -0
  58. package/examples/webhook-audio-upload-to-json-transcript.json +64 -0
  59. package/package.json +68 -0
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeCustomVocabulary = serializeCustomVocabulary;
4
+ exports.serializeReplacementRules = serializeReplacementRules;
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const ALLOWED_FLAGS = ['i', 'm', 's', 'u', 'x'];
7
+ function serializeCustomVocabulary(parameters) {
8
+ const collection = parameters.customVocabulary;
9
+ if (!isObject(collection)) {
10
+ return [];
11
+ }
12
+ const entries = collection.values;
13
+ if (!Array.isArray(entries)) {
14
+ return [];
15
+ }
16
+ return entries
17
+ .map((entry) => (isObject(entry) && typeof entry.term === 'string' ? entry.term.trim() : ''))
18
+ .filter((term) => term.length > 0);
19
+ }
20
+ function serializeReplacementRules(node, parameters) {
21
+ const collection = parameters.replacementRules;
22
+ if (!isObject(collection)) {
23
+ return undefined;
24
+ }
25
+ const rules = [];
26
+ for (const rule of getRuleRows(collection.exactMatch)) {
27
+ const search = stringField(rule, 'search');
28
+ const replacement = stringField(rule, 'replacement');
29
+ if (!search || !replacement) {
30
+ throw new n8n_workflow_1.NodeOperationError(node, 'Exact replacement rules require search and replacement values');
31
+ }
32
+ rules.push({
33
+ kind: 'exact',
34
+ search,
35
+ replacement,
36
+ caseSensitive: rule.caseSensitive === true,
37
+ });
38
+ }
39
+ for (const rule of getRuleRows(collection.regex)) {
40
+ const pattern = stringField(rule, 'pattern');
41
+ const replacement = stringField(rule, 'replacement');
42
+ if (!pattern || !replacement) {
43
+ throw new n8n_workflow_1.NodeOperationError(node, 'Regex replacement rules require pattern and replacement values');
44
+ }
45
+ const flags = normalizeFlags(rule.flags);
46
+ validateRegex(node, pattern, flags);
47
+ rules.push({
48
+ kind: 'regex',
49
+ pattern,
50
+ replacement,
51
+ flags,
52
+ });
53
+ }
54
+ for (const rule of getRuleRows(collection.regexGroup)) {
55
+ const pattern = stringField(rule, 'pattern');
56
+ if (!pattern) {
57
+ throw new n8n_workflow_1.NodeOperationError(node, 'Regex group replacement rules require a pattern');
58
+ }
59
+ const flags = normalizeFlags(rule.flags);
60
+ validateRegex(node, pattern, flags);
61
+ const groupReplacements = serializeGroupReplacements(node, rule.groupReplacements);
62
+ rules.push({
63
+ kind: 'regex_group',
64
+ pattern,
65
+ groupReplacements,
66
+ flags,
67
+ });
68
+ }
69
+ return rules.length ? rules : undefined;
70
+ }
71
+ function serializeGroupReplacements(node, value) {
72
+ const rows = isObject(value) ? getRuleRows(value.values) : [];
73
+ const replacements = {};
74
+ for (const row of rows) {
75
+ const groupNumber = Number(row.groupNumber);
76
+ const replacement = stringField(row, 'replacement');
77
+ if (!Number.isInteger(groupNumber) || groupNumber <= 0) {
78
+ throw new n8n_workflow_1.NodeOperationError(node, 'Regex group numbers must be positive integers');
79
+ }
80
+ if (!replacement) {
81
+ throw new n8n_workflow_1.NodeOperationError(node, 'Regex group replacements require a replacement value');
82
+ }
83
+ if (replacements[String(groupNumber)] !== undefined) {
84
+ throw new n8n_workflow_1.NodeOperationError(node, `Duplicate regex group replacement for group ${groupNumber}`);
85
+ }
86
+ replacements[String(groupNumber)] = replacement;
87
+ }
88
+ if (Object.keys(replacements).length === 0) {
89
+ throw new n8n_workflow_1.NodeOperationError(node, 'Regex group replacement rules require at least one group replacement');
90
+ }
91
+ return replacements;
92
+ }
93
+ function normalizeFlags(value) {
94
+ const flags = Array.isArray(value) ? value : [];
95
+ const normalized = [];
96
+ for (const flag of flags) {
97
+ if (!isRegexRuleFlag(flag)) {
98
+ throw new Error(`Unknown regex flag: ${String(flag)}`);
99
+ }
100
+ if (!normalized.includes(flag)) {
101
+ normalized.push(flag);
102
+ }
103
+ }
104
+ return normalized;
105
+ }
106
+ function validateRegex(node, pattern, flags) {
107
+ if (flags.includes('x')) {
108
+ return;
109
+ }
110
+ try {
111
+ new RegExp(pattern, flags.join(''));
112
+ }
113
+ catch (error) {
114
+ throw new n8n_workflow_1.NodeOperationError(node, `Invalid regex pattern: ${error.message}`);
115
+ }
116
+ }
117
+ function getRuleRows(value) {
118
+ return Array.isArray(value) ? value.filter(isObject) : [];
119
+ }
120
+ function stringField(object, key) {
121
+ const value = object[key];
122
+ return typeof value === 'string' ? value.trim() : '';
123
+ }
124
+ function isRegexRuleFlag(value) {
125
+ return typeof value === 'string' && ALLOWED_FLAGS.includes(value);
126
+ }
127
+ function isObject(value) {
128
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
129
+ }
130
+ //# sourceMappingURL=replacementRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replacementRules.js","sourceRoot":"","sources":["../../../../nodes/Speechall/helpers/replacementRules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { IDataObject } from 'n8n-workflow';
2
+ export declare const SPEECHALL_API_BASE_URL = "https://api.speechall.com/v1";
3
+ export type TranscriptOutputFormat = 'text' | 'json_text' | 'json' | 'srt' | 'vtt';
4
+ export type SpeechallSource = 'binary' | 'remote_url';
5
+ export type RegexRuleFlag = 'i' | 'm' | 's' | 'u' | 'x';
6
+ export interface SpeechallModel extends IDataObject {
7
+ id?: string;
8
+ model?: string;
9
+ identifier?: string;
10
+ display_name?: string;
11
+ displayName?: string;
12
+ provider?: string;
13
+ description?: string | null;
14
+ cost_per_second_usd?: number | null;
15
+ is_available?: boolean;
16
+ supported_languages?: string[] | null;
17
+ supported_formats?: string[] | null;
18
+ punctuation?: boolean | null;
19
+ diarization?: boolean | null;
20
+ streamable?: boolean | null;
21
+ max_duration_seconds?: number | null;
22
+ max_file_size_bytes?: number | null;
23
+ speaker_labels?: boolean | null;
24
+ word_timestamps?: boolean | null;
25
+ language_detection?: boolean | null;
26
+ custom_vocabulary_support?: boolean | null;
27
+ supports_srt?: boolean;
28
+ supports_vtt?: boolean;
29
+ }
30
+ export interface NormalizedModel extends IDataObject {
31
+ id: string;
32
+ displayName: string;
33
+ provider?: string;
34
+ isAvailable?: boolean;
35
+ supportedLanguages?: string[];
36
+ supportedFormats: TranscriptOutputFormat[];
37
+ supportsSrt: boolean;
38
+ supportsVtt: boolean;
39
+ diarization?: boolean | null;
40
+ punctuation?: boolean | null;
41
+ wordTimestamps?: boolean | null;
42
+ costPerSecondUsd?: number | null;
43
+ maxFileSizeBytes?: number | null;
44
+ maxDurationSeconds?: number | null;
45
+ raw: SpeechallModel;
46
+ }
47
+ export type ReplacementRule = {
48
+ kind: 'exact';
49
+ search: string;
50
+ replacement: string;
51
+ caseSensitive?: boolean;
52
+ } | {
53
+ kind: 'regex';
54
+ pattern: string;
55
+ replacement: string;
56
+ flags?: RegexRuleFlag[];
57
+ } | {
58
+ kind: 'regex_group';
59
+ pattern: string;
60
+ groupReplacements: Record<string, string>;
61
+ flags?: RegexRuleFlag[];
62
+ };
63
+ export interface NormalizedTranscriptionItem extends IDataObject {
64
+ text?: string;
65
+ outputFormat: TranscriptOutputFormat;
66
+ model: string;
67
+ language?: string;
68
+ source: SpeechallSource;
69
+ fileUrl?: string;
70
+ sourceUrlSanitized?: string;
71
+ id?: string;
72
+ segments?: unknown[];
73
+ words?: unknown[];
74
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SPEECHALL_API_BASE_URL = void 0;
4
+ exports.SPEECHALL_API_BASE_URL = 'https://api.speechall.com/v1';
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../nodes/Speechall/helpers/types.ts"],"names":[],"mappings":";;;AAEa,QAAA,sBAAsB,GAAG,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ILoadOptionsFunctions, INodePropertyOptions } from 'n8n-workflow';
2
+ export declare function getSpeechToTextModels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSpeechToTextModels = getSpeechToTextModels;
4
+ const models_1 = require("../helpers/models");
5
+ const speechallApiRequest_1 = require("../transport/speechallApiRequest");
6
+ async function getSpeechToTextModels() {
7
+ const response = await speechallApiRequest_1.speechallApiRequest.call(this, 'GET', '/speech-to-text-models', {
8
+ timeoutMs: 30000,
9
+ json: true,
10
+ });
11
+ return (0, models_1.normalizeModelsResponse)(response.body).map(models_1.modelToOption);
12
+ }
13
+ //# sourceMappingURL=getSpeechToTextModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSpeechToTextModels.js","sourceRoot":"","sources":["../../../../nodes/Speechall/loadOptions/getSpeechToTextModels.ts"],"names":[],"mappings":";;AAKA,sDASC;AAZD,8CAA2E;AAC3E,0EAAuE;AAEhE,KAAK,UAAU,qBAAqB;IAG1C,MAAM,QAAQ,GAAG,MAAM,yCAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,wBAAwB,EAAE;QACtF,SAAS,EAAE,KAAM;QACjB,IAAI,EAAE,IAAI;KACV,CAAC,CAAC;IAEH,OAAO,IAAA,gCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,sBAAa,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';
2
+ export declare function listModelsOperation(this: IExecuteFunctions): Promise<INodeExecutionData[]>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listModelsOperation = listModelsOperation;
4
+ const models_1 = require("../helpers/models");
5
+ const speechallApiRequest_1 = require("../transport/speechallApiRequest");
6
+ async function listModelsOperation() {
7
+ const response = await speechallApiRequest_1.speechallApiRequest.call(this, 'GET', '/speech-to-text-models', {
8
+ timeoutMs: 30000,
9
+ json: true,
10
+ });
11
+ const filters = {
12
+ provider: this.getNodeParameter('provider', 0, ''),
13
+ availableOnly: this.getNodeParameter('availableOnly', 0, false),
14
+ supportsDiarization: this.getNodeParameter('supportsDiarization', 0, false),
15
+ supportsSrt: this.getNodeParameter('supportsSrt', 0, false),
16
+ supportsVtt: this.getNodeParameter('supportsVtt', 0, false),
17
+ supportsStreaming: this.getNodeParameter('supportsStreaming', 0, false),
18
+ };
19
+ const models = (0, models_1.filterModels)((0, models_1.normalizeModelsResponse)(response.body), filters);
20
+ const malformedModels = (0, models_1.malformedModelsFromResponse)(response.body);
21
+ return [
22
+ ...models.map((model) => ({
23
+ json: model,
24
+ })),
25
+ ...malformedModels.map((model) => ({
26
+ json: model,
27
+ })),
28
+ ];
29
+ }
30
+ //# sourceMappingURL=listModels.operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listModels.operation.js","sourceRoot":"","sources":["../../../../nodes/Speechall/operations/listModels.operation.ts"],"names":[],"mappings":";;AASA,kDA0BC;AAjCD,8CAI2B;AAC3B,0EAAuE;AAEhE,KAAK,UAAU,mBAAmB;IACxC,MAAM,QAAQ,GAAG,MAAM,yCAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,wBAAwB,EAAE;QACtF,SAAS,EAAE,KAAM;QACjB,IAAI,EAAE,IAAI;KACV,CAAC,CAAC;IAEH,MAAM,OAAO,GAAgB;QAC5B,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC;QAC/D,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,EAAE,KAAK,CAAC;QAC3E,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC;QAC3D,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC;QAC3D,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,EAAE,KAAK,CAAC;KACvE,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,IAAA,gCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,IAAA,oCAA2B,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnE,OAAO;QACN,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,KAAK;SACX,CAAC,CAAC;QACH,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,KAAK;SACX,CAAC,CAAC;KACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';
2
+ export declare function transcribeFileOperation(this: IExecuteFunctions, item: INodeExecutionData, itemIndex: number): Promise<INodeExecutionData>;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transcribeFileOperation = transcribeFileOperation;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const binary_1 = require("../helpers/binary");
6
+ const models_1 = require("../helpers/models");
7
+ const normalize_1 = require("../helpers/normalize");
8
+ const replacementRules_1 = require("../helpers/replacementRules");
9
+ const errors_1 = require("../transport/errors");
10
+ const speechallApiRequest_1 = require("../transport/speechallApiRequest");
11
+ async function transcribeFileOperation(item, itemIndex) {
12
+ var _a;
13
+ const parameters = getOperationParameters.call(this, itemIndex);
14
+ const model = (0, models_1.getSelectedModel)(parameters);
15
+ if (!model) {
16
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'A Speechall model ID is required', { itemIndex });
17
+ }
18
+ (0, errors_1.validateTimeout)(this, parameters.timeoutSeconds);
19
+ (0, errors_1.validateTemperature)(this, parameters.temperature);
20
+ (0, errors_1.validateSpeakersExpected)(this, parameters.speakersExpected);
21
+ const binaryData = (_a = item.binary) === null || _a === void 0 ? void 0 : _a[parameters.binaryPropertyName];
22
+ if (!binaryData) {
23
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `No binary data found in property "${parameters.binaryPropertyName}"`, { itemIndex });
24
+ }
25
+ if (parameters.modelSelectionMode === 'list') {
26
+ await validateBinarySizeIfKnown.call(this, model, binaryData.fileSize, itemIndex);
27
+ }
28
+ const buffer = await this.helpers.getBinaryDataBuffer(itemIndex, parameters.binaryPropertyName);
29
+ const qs = buildTranscriptionQuery(parameters, model);
30
+ const response = await speechallApiRequest_1.speechallApiRequest.call(this, 'POST', '/transcribe', {
31
+ qs,
32
+ body: buffer,
33
+ timeoutMs: parameters.timeoutSeconds * 1000,
34
+ headers: {
35
+ 'Content-Type': binaryData.mimeType || 'application/octet-stream',
36
+ },
37
+ encoding: parameters.outputFormat === 'json' || parameters.outputFormat === 'json_text'
38
+ ? 'json'
39
+ : 'text',
40
+ json: false,
41
+ });
42
+ const rawText = typeof response.rawBody === 'string' ? response.rawBody : undefined;
43
+ const json = (0, normalize_1.normalizeSpeechallTranscriptionResponse)({
44
+ response: response.body,
45
+ rawText,
46
+ outputFormat: parameters.outputFormat,
47
+ model,
48
+ language: parameters.language,
49
+ source: 'binary',
50
+ });
51
+ let binary = item.binary;
52
+ if (parameters.alsoReturnBinary &&
53
+ (0, binary_1.supportsTranscriptBinaryOutput)(parameters.outputFormat) &&
54
+ typeof json.text === 'string') {
55
+ binary = await binary_1.addTranscriptBinaryOutput.call(this, item, json.text, parameters.outputFormat, parameters.binaryOutputProperty);
56
+ }
57
+ return {
58
+ json,
59
+ binary,
60
+ pairedItem: { item: itemIndex },
61
+ };
62
+ }
63
+ function getOperationParameters(itemIndex) {
64
+ const temperature = optionalNumber(this.getNodeParameter('temperature', itemIndex, undefined));
65
+ const diarization = this.getNodeParameter('diarization', itemIndex, false);
66
+ const speakersExpected = diarization
67
+ ? optionalNumber(this.getNodeParameter('speakersExpected', itemIndex, undefined))
68
+ : undefined;
69
+ return {
70
+ binaryPropertyName: this.getNodeParameter('binaryPropertyName', itemIndex, 'data'),
71
+ modelSelectionMode: this.getNodeParameter('modelSelectionMode', itemIndex, 'list'),
72
+ model: this.getNodeParameter('model', itemIndex, ''),
73
+ modelId: this.getNodeParameter('modelId', itemIndex, ''),
74
+ language: this.getNodeParameter('language', itemIndex, 'en'),
75
+ outputFormat: this.getNodeParameter('outputFormat', itemIndex, 'text'),
76
+ punctuation: this.getNodeParameter('punctuation', itemIndex, true),
77
+ diarization,
78
+ initialPrompt: this.getNodeParameter('initialPrompt', itemIndex, ''),
79
+ temperature,
80
+ speakersExpected,
81
+ customVocabulary: this.getNodeParameter('customVocabulary', itemIndex, {}),
82
+ rulesetId: this.getNodeParameter('rulesetId', itemIndex, ''),
83
+ timeoutSeconds: this.getNodeParameter('timeoutSeconds', itemIndex, 300),
84
+ alsoReturnBinary: this.getNodeParameter('alsoReturnBinary', itemIndex, false),
85
+ binaryOutputProperty: this.getNodeParameter('binaryOutputProperty', itemIndex, 'transcript'),
86
+ };
87
+ }
88
+ function buildTranscriptionQuery(parameters, model) {
89
+ const qs = {
90
+ model,
91
+ language: parameters.language,
92
+ output_format: parameters.outputFormat,
93
+ punctuation: parameters.punctuation,
94
+ diarization: parameters.diarization,
95
+ };
96
+ addIfPresent(qs, 'initial_prompt', parameters.initialPrompt);
97
+ addIfPresent(qs, 'temperature', parameters.temperature);
98
+ if (parameters.diarization) {
99
+ addIfPresent(qs, 'speakers_expected', parameters.speakersExpected);
100
+ }
101
+ addIfPresent(qs, 'ruleset_id', parameters.rulesetId);
102
+ const customVocabulary = (0, replacementRules_1.serializeCustomVocabulary)(parameters);
103
+ if (customVocabulary.length > 0) {
104
+ qs.custom_vocabulary = customVocabulary;
105
+ }
106
+ return qs;
107
+ }
108
+ async function validateBinarySizeIfKnown(modelId, fileSize, itemIndex) {
109
+ const bytes = parseFileSize(fileSize);
110
+ if (bytes === undefined) {
111
+ return;
112
+ }
113
+ const response = await speechallApiRequest_1.speechallApiRequest.call(this, 'GET', '/speech-to-text-models', {
114
+ timeoutMs: 30000,
115
+ json: true,
116
+ });
117
+ const model = (0, models_1.normalizeModelsResponse)(response.body).find((candidate) => candidate.id === modelId);
118
+ const maxFileSizeBytes = model === null || model === void 0 ? void 0 : model.maxFileSizeBytes;
119
+ if (typeof maxFileSizeBytes === 'number' && bytes > maxFileSizeBytes) {
120
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Binary file is ${bytes} bytes, which exceeds the selected model limit of ${maxFileSizeBytes} bytes`, { itemIndex });
121
+ }
122
+ }
123
+ function parseFileSize(fileSize) {
124
+ var _a;
125
+ if (typeof fileSize === 'number') {
126
+ return fileSize;
127
+ }
128
+ if (typeof fileSize !== 'string') {
129
+ return undefined;
130
+ }
131
+ const normalized = fileSize.trim().toLowerCase();
132
+ const match = normalized.match(/^([0-9]+(?:\.[0-9]+)?)\s*(b|kb|mb|gb)?$/);
133
+ if (!match) {
134
+ return undefined;
135
+ }
136
+ const value = Number(match[1]);
137
+ const unit = (_a = match[2]) !== null && _a !== void 0 ? _a : 'b';
138
+ const multiplier = unit === 'gb' ? 1024 ** 3 : unit === 'mb' ? 1024 ** 2 : unit === 'kb' ? 1024 : 1;
139
+ return Math.round(value * multiplier);
140
+ }
141
+ function optionalNumber(value) {
142
+ return value === '' || value === undefined || value === null ? undefined : Number(value);
143
+ }
144
+ function addIfPresent(qs, key, value) {
145
+ if (value !== '' && value !== undefined && value !== null) {
146
+ qs[key] = value;
147
+ }
148
+ }
149
+ //# sourceMappingURL=transcribeFile.operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcribeFile.operation.js","sourceRoot":"","sources":["../../../../nodes/Speechall/operations/transcribeFile.operation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';
2
+ export declare function transcribeRemoteUrlOperation(this: IExecuteFunctions, item: INodeExecutionData, itemIndex: number): Promise<INodeExecutionData>;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transcribeRemoteUrlOperation = transcribeRemoteUrlOperation;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const binary_1 = require("../helpers/binary");
6
+ const models_1 = require("../helpers/models");
7
+ const normalize_1 = require("../helpers/normalize");
8
+ const replacementRules_1 = require("../helpers/replacementRules");
9
+ const errors_1 = require("../transport/errors");
10
+ const speechallApiRequest_1 = require("../transport/speechallApiRequest");
11
+ async function transcribeRemoteUrlOperation(item, itemIndex) {
12
+ const parameters = getOperationParameters.call(this, itemIndex);
13
+ const model = (0, models_1.getSelectedModel)(parameters);
14
+ if (!model) {
15
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'A Speechall model ID is required', { itemIndex });
16
+ }
17
+ (0, errors_1.validateTimeout)(this, parameters.timeoutSeconds);
18
+ (0, errors_1.validateTemperature)(this, parameters.temperature);
19
+ (0, errors_1.validateSpeakersExpected)(this, parameters.speakersExpected);
20
+ validateRemoteUrl(this, parameters.fileUrl, itemIndex);
21
+ const body = buildRemoteBody(this, parameters, model);
22
+ const response = await speechallApiRequest_1.speechallApiRequest.call(this, 'POST', '/transcribe-remote', {
23
+ body,
24
+ timeoutMs: parameters.timeoutSeconds * 1000,
25
+ headers: {
26
+ 'Content-Type': 'application/json',
27
+ },
28
+ encoding: parameters.outputFormat === 'json' || parameters.outputFormat === 'json_text'
29
+ ? 'json'
30
+ : 'text',
31
+ json: true,
32
+ });
33
+ const rawText = typeof response.rawBody === 'string' ? response.rawBody : undefined;
34
+ const json = (0, normalize_1.normalizeSpeechallTranscriptionResponse)({
35
+ response: response.body,
36
+ rawText,
37
+ outputFormat: parameters.outputFormat,
38
+ model,
39
+ language: parameters.language,
40
+ source: 'remote_url',
41
+ sourceUrlSanitized: (0, normalize_1.sanitizeSourceUrl)(parameters.fileUrl),
42
+ fileUrl: parameters.includeSourceUrl ? parameters.fileUrl : undefined,
43
+ });
44
+ let binary = item.binary;
45
+ if (parameters.alsoReturnBinary &&
46
+ (0, binary_1.supportsTranscriptBinaryOutput)(parameters.outputFormat) &&
47
+ typeof json.text === 'string') {
48
+ binary = await binary_1.addTranscriptBinaryOutput.call(this, item, json.text, parameters.outputFormat, parameters.binaryOutputProperty);
49
+ }
50
+ return {
51
+ json,
52
+ binary,
53
+ pairedItem: { item: itemIndex },
54
+ };
55
+ }
56
+ function getOperationParameters(itemIndex) {
57
+ const temperature = optionalNumber(this.getNodeParameter('temperature', itemIndex, undefined));
58
+ const diarization = this.getNodeParameter('diarization', itemIndex, false);
59
+ const speakersExpected = diarization
60
+ ? optionalNumber(this.getNodeParameter('speakersExpected', itemIndex, undefined))
61
+ : undefined;
62
+ return {
63
+ fileUrl: this.getNodeParameter('fileUrl', itemIndex, ''),
64
+ modelSelectionMode: this.getNodeParameter('modelSelectionMode', itemIndex, 'list'),
65
+ model: this.getNodeParameter('model', itemIndex, ''),
66
+ modelId: this.getNodeParameter('modelId', itemIndex, ''),
67
+ language: this.getNodeParameter('language', itemIndex, 'en'),
68
+ outputFormat: this.getNodeParameter('outputFormat', itemIndex, 'text'),
69
+ punctuation: this.getNodeParameter('punctuation', itemIndex, true),
70
+ diarization,
71
+ initialPrompt: this.getNodeParameter('initialPrompt', itemIndex, ''),
72
+ temperature,
73
+ speakersExpected,
74
+ customVocabulary: this.getNodeParameter('customVocabulary', itemIndex, {}),
75
+ rulesetId: this.getNodeParameter('rulesetId', itemIndex, ''),
76
+ replacementRules: this.getNodeParameter('replacementRules', itemIndex, {}),
77
+ includeSourceUrl: this.getNodeParameter('includeSourceUrl', itemIndex, false),
78
+ timeoutSeconds: this.getNodeParameter('timeoutSeconds', itemIndex, 300),
79
+ alsoReturnBinary: this.getNodeParameter('alsoReturnBinary', itemIndex, false),
80
+ binaryOutputProperty: this.getNodeParameter('binaryOutputProperty', itemIndex, 'transcript'),
81
+ };
82
+ }
83
+ function buildRemoteBody(context, parameters, model) {
84
+ const body = {
85
+ file_url: parameters.fileUrl,
86
+ model,
87
+ language: parameters.language,
88
+ output_format: parameters.outputFormat,
89
+ punctuation: parameters.punctuation,
90
+ diarization: parameters.diarization,
91
+ };
92
+ addIfPresent(body, 'initial_prompt', parameters.initialPrompt);
93
+ addIfPresent(body, 'temperature', parameters.temperature);
94
+ if (parameters.diarization) {
95
+ addIfPresent(body, 'speakers_expected', parameters.speakersExpected);
96
+ }
97
+ addIfPresent(body, 'ruleset_id', parameters.rulesetId);
98
+ const customVocabulary = (0, replacementRules_1.serializeCustomVocabulary)(parameters);
99
+ if (customVocabulary.length > 0) {
100
+ body.custom_vocabulary = customVocabulary;
101
+ }
102
+ const replacementRules = (0, replacementRules_1.serializeReplacementRules)(context.getNode(), parameters);
103
+ if (replacementRules) {
104
+ body.replacement_ruleset = replacementRules;
105
+ }
106
+ return body;
107
+ }
108
+ function validateRemoteUrl(context, fileUrl, itemIndex) {
109
+ if (!fileUrl.trim()) {
110
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'File URL is required', { itemIndex });
111
+ }
112
+ try {
113
+ const url = new URL(fileUrl);
114
+ if (url.protocol !== 'http:' && url.protocol !== 'https:') {
115
+ throw new Error('Unsupported protocol');
116
+ }
117
+ }
118
+ catch {
119
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'File URL must be a valid HTTP or HTTPS URL', {
120
+ itemIndex,
121
+ });
122
+ }
123
+ }
124
+ function optionalNumber(value) {
125
+ return value === '' || value === undefined || value === null ? undefined : Number(value);
126
+ }
127
+ function addIfPresent(body, key, value) {
128
+ if (value !== '' && value !== undefined && value !== null) {
129
+ body[key] = value;
130
+ }
131
+ }
132
+ //# sourceMappingURL=transcribeRemoteUrl.operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcribeRemoteUrl.operation.js","sourceRoot":"","sources":["../../../../nodes/Speechall/operations/transcribeRemoteUrl.operation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title">
2
+ <title>Speechall</title>
3
+ <rect width="64" height="64" rx="12" fill="#F7FAFC"/>
4
+ <path d="M17 36c4 7 10 11 17 11 9 0 16-7 16-16S43 15 34 15c-7 0-13 4-17 11" fill="none" stroke="#16866D" stroke-width="5" stroke-linecap="round"/>
5
+ <path d="M15 32h24" stroke="#101820" stroke-width="5" stroke-linecap="round"/>
6
+ <path d="M31 24l8 8-8 8" fill="none" stroke="#101820" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
7
+ </svg>
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title">
2
+ <title>Speechall</title>
3
+ <rect width="64" height="64" rx="12" fill="#101820"/>
4
+ <path d="M17 36c4 7 10 11 17 11 9 0 16-7 16-16S43 15 34 15c-7 0-13 4-17 11" fill="none" stroke="#4DD4AC" stroke-width="5" stroke-linecap="round"/>
5
+ <path d="M15 32h24" stroke="#FFFFFF" stroke-width="5" stroke-linecap="round"/>
6
+ <path d="M31 24l8 8-8 8" fill="none" stroke="#FFFFFF" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
7
+ </svg>
@@ -0,0 +1,12 @@
1
+ import type { IDataObject, IExecuteFunctions, ILoadOptionsFunctions } from 'n8n-workflow';
2
+ import { NodeApiError, NodeOperationError } from 'n8n-workflow';
3
+ export declare function buildNodeApiError(context: IExecuteFunctions | ILoadOptionsFunctions, response: {
4
+ statusCode?: number;
5
+ headers?: IDataObject;
6
+ body?: unknown;
7
+ }): NodeApiError;
8
+ export declare function toNodeOperationError(context: IExecuteFunctions, error: unknown, itemIndex: number): NodeOperationError | NodeApiError;
9
+ export declare function getErrorMessage(error: unknown): string;
10
+ export declare function validateTimeout(context: IExecuteFunctions, timeoutSeconds: number): void;
11
+ export declare function validateTemperature(context: IExecuteFunctions, temperature: number | undefined): void;
12
+ export declare function validateSpeakersExpected(context: IExecuteFunctions, speakersExpected: number | undefined): void;