@skillful-ai/piece-web 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # pieces-web
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build pieces-web` to build the library.
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@skillful-ai/piece-web",
3
+ "version": "0.0.1",
4
+ "type": "commonjs",
5
+ "main": "./src/index.js",
6
+ "types": "./src/index.d.ts",
7
+ "dependencies": {
8
+ "@activepieces/pieces-framework": "^0.20.1",
9
+ "@sinclair/typebox": "0.34.11",
10
+ "cheerio": "1.0.0-rc.12",
11
+ "deepmerge-ts": "7.1.0",
12
+ "nanoid": "3.3.8",
13
+ "semver": "7.6.0",
14
+ "tslib": "^2.3.0",
15
+ "@activepieces/shared": "0.22.0"
16
+ },
17
+ "overrides": {
18
+ "@tryfabric/martian": {
19
+ "@notionhq/client": "$@notionhq/client"
20
+ },
21
+ "vite": {
22
+ "rollup": "npm:@rollup/wasm-node"
23
+ },
24
+ "undici": "6.19.8"
25
+ },
26
+ "resolutions": {
27
+ "rollup": "npm:@rollup/wasm-node",
28
+ "undici": "6.19.8"
29
+ }
30
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare const web: import("@activepieces/pieces-framework").Piece<import("@activepieces/pieces-framework").PieceAuthProperty>;
package/src/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.web = void 0;
4
+ const shared_1 = require("@activepieces/shared");
5
+ const pieces_framework_1 = require("@activepieces/pieces-framework");
6
+ const basic_web_scraper_1 = require("./lib/actions/basic-web-scraper");
7
+ const media_processor_1 = require("./lib/actions/media-processor");
8
+ const web_search_1 = require("./lib/actions/web-search");
9
+ const youtube_search_1 = require("./lib/actions/youtube-search");
10
+ const youtube_processor_1 = require("./lib/actions/youtube-processor");
11
+ const auth_1 = require("./lib/auth");
12
+ exports.web = (0, pieces_framework_1.createPiece)({
13
+ displayName: "Web",
14
+ description: "Web is a piece that allows you to interact with the web.",
15
+ auth: auth_1.webAuth,
16
+ minimumSupportedRelease: '0.36.1',
17
+ logoUrl: "https://cdn.activepieces.com/pieces/web.png",
18
+ categories: [shared_1.PieceCategory.CORE],
19
+ authors: ['Haider Shabbir Hamid'],
20
+ actions: [basic_web_scraper_1.basicWebScraper, media_processor_1.mediaProcessor, web_search_1.webSearch, youtube_search_1.youtubeSearch, youtube_processor_1.youtubeProcessor],
21
+ triggers: [],
22
+ });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/custom/web/src/index.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AACrD,qEAA6D;AAC7D,uEAAkE;AAClE,mEAA+D;AAC/D,yDAAqD;AACrD,iEAA6D;AAC7D,uEAAmE;AACnE,qCAAqC;AAExB,QAAA,GAAG,GAAG,IAAA,8BAAW,EAAC;IAC7B,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,0DAA0D;IACvE,IAAI,EAAE,cAAO;IACb,uBAAuB,EAAE,QAAQ;IACjC,OAAO,EAAE,6CAA6C;IACtD,UAAU,EAAE,CAAC,sBAAa,CAAC,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,sBAAsB,CAAC;IACjC,OAAO,EAAE,CAAC,mCAAe,EAAE,gCAAc,EAAE,sBAAS,EAAE,8BAAa,EAAE,oCAAgB,CAAC;IACtF,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const basicWebScraper: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").PieceAuthProperty, {
2
+ urls: import("@activepieces/pieces-framework").ArrayProperty<true>;
3
+ extractMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, false>;
4
+ }>;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.basicWebScraper = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@activepieces/pieces-framework");
6
+ const cheerio = tslib_1.__importStar(require("cheerio"));
7
+ exports.basicWebScraper = (0, pieces_framework_1.createAction)({
8
+ name: 'basic_web_scraper',
9
+ displayName: 'Basic Web Scraping',
10
+ description: 'Extract text content from given URLs using LlamaIndex.',
11
+ props: {
12
+ urls: pieces_framework_1.Property.Array({
13
+ displayName: 'URLs',
14
+ description: 'List of URLs to scrape',
15
+ required: true,
16
+ properties: {
17
+ url: pieces_framework_1.Property.ShortText({
18
+ displayName: 'URL',
19
+ description: 'The URL to scrape',
20
+ required: true,
21
+ }),
22
+ },
23
+ }),
24
+ extractMethod: pieces_framework_1.Property.StaticDropdown({
25
+ displayName: 'Extract Method',
26
+ description: 'Method of extraction',
27
+ required: false,
28
+ defaultValue: 'text',
29
+ options: {
30
+ options: [
31
+ { label: 'Text', value: 'text' },
32
+ { label: 'HTML', value: 'html' },
33
+ ],
34
+ },
35
+ }),
36
+ },
37
+ run(context) {
38
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
39
+ const { urls, extractMethod } = context.propsValue;
40
+ if (!urls || urls.length === 0) {
41
+ throw new Error('At least one URL is required');
42
+ }
43
+ const urlList = urls.map(u => u.url);
44
+ // Initialize the web reader
45
+ const reader = new SimpleWebPageReader(extractMethod === 'text');
46
+ // Load documents
47
+ const documents = yield reader.loadData(urlList);
48
+ // Convert to a simple map of URL → content
49
+ const scrapedData = {};
50
+ for (const doc of documents) {
51
+ scrapedData[doc.id] = doc.text;
52
+ }
53
+ return {
54
+ success: true,
55
+ scrapedData,
56
+ totalUrls: urlList.length,
57
+ successfulUrls: Object.keys(scrapedData).length,
58
+ };
59
+ });
60
+ },
61
+ });
62
+ class SimpleWebPageReader {
63
+ constructor(htmlToText = false) {
64
+ this.htmlToText = htmlToText;
65
+ }
66
+ loadData(urls) {
67
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
68
+ if (!Array.isArray(urls)) {
69
+ throw new Error("urls must be an array of strings.");
70
+ }
71
+ const documents = [];
72
+ for (const url of urls) {
73
+ const response = yield fetch(url);
74
+ const html = yield response.text();
75
+ let text;
76
+ if (this.htmlToText) {
77
+ const $ = cheerio.load(html);
78
+ // Remove script and style elements completely
79
+ $('script').remove();
80
+ $('style').remove();
81
+ $('noscript').remove();
82
+ $('iframe').remove();
83
+ // Remove comments
84
+ $('*').contents().filter(function () {
85
+ return this.type === 'comment';
86
+ }).remove();
87
+ // Extract only text content
88
+ text = $("body").text().trim();
89
+ }
90
+ else {
91
+ // Keep full raw HTML
92
+ text = html;
93
+ }
94
+ documents.push({
95
+ text,
96
+ id: url,
97
+ });
98
+ }
99
+ return documents;
100
+ });
101
+ }
102
+ }
103
+ //# sourceMappingURL=basic-web-scraper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-web-scraper.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/custom/web/src/lib/actions/basic-web-scraper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const mediaProcessor: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").PieceAuthProperty, {
2
+ mediaUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
3
+ prompt: import("@activepieces/pieces-framework").LongTextProperty<true>;
4
+ geminiModel: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
5
+ }>;
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mediaProcessor = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@activepieces/pieces-framework");
6
+ const promises_1 = tslib_1.__importDefault(require("fs/promises"));
7
+ const path_1 = tslib_1.__importDefault(require("path"));
8
+ const os_1 = tslib_1.__importDefault(require("os"));
9
+ const common_1 = require("../common");
10
+ // Configuration constants
11
+ const MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
12
+ const SUPPORTED_MIME_TYPES = [
13
+ 'image/jpeg', 'image/png', 'image/gif', 'image/webp',
14
+ 'video/mp4', 'video/avi', 'video/quicktime', 'video/x-ms-wmv',
15
+ 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/mp4'
16
+ ];
17
+ const PROCESSING_TIMEOUT = 60000; // 60 seconds
18
+ const POLLING_INTERVAL = 2000; // 2 seconds
19
+ exports.mediaProcessor = (0, pieces_framework_1.createAction)({
20
+ name: 'media_processor',
21
+ displayName: 'Media Processor',
22
+ description: 'Process media files (images, videos, audio) using Google Gemini AI model.',
23
+ props: {
24
+ mediaUrl: pieces_framework_1.Property.ShortText({
25
+ displayName: 'Media URL',
26
+ description: 'URL pointing to the media file to be processed (image, video, or audio)',
27
+ required: true,
28
+ }),
29
+ prompt: pieces_framework_1.Property.LongText({
30
+ displayName: 'Prompt',
31
+ description: 'The prompt, question, or instruction to be applied to the media',
32
+ required: true,
33
+ }),
34
+ geminiModel: pieces_framework_1.Property.StaticDropdown({
35
+ displayName: 'Gemini Model',
36
+ description: 'The Gemini model to use for processing',
37
+ required: true,
38
+ defaultValue: 'gemini-2.0-flash',
39
+ options: {
40
+ options: [
41
+ { label: 'Gemini 2.0 Flash', value: 'gemini-2.0-flash' },
42
+ { label: 'Gemini 2.0 Flash Lite', value: 'gemini-2.0-flash-lite' },
43
+ { label: 'Gemini 1.5 Flash', value: 'gemini-1.5-flash' },
44
+ { label: 'Gemini 1.5 Pro', value: 'gemini-1.5-pro' },
45
+ ],
46
+ },
47
+ }),
48
+ },
49
+ run(context) {
50
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
51
+ const { mediaUrl, prompt, geminiModel } = context.propsValue;
52
+ if (!isValidUrl(mediaUrl)) {
53
+ return { success: false, errorType: 'InvalidUrl', error: `Invalid media URL: ${mediaUrl}` };
54
+ }
55
+ if (!(prompt === null || prompt === void 0 ? void 0 : prompt.trim())) {
56
+ return { success: false, errorType: 'InvalidPrompt', error: 'Prompt cannot be empty' };
57
+ }
58
+ // Get API key with automatic fallback to Skillful defaults
59
+ const apiKey = yield (0, common_1.getGoogleApiKey)(context);
60
+ if (!apiKey) {
61
+ return {
62
+ success: false,
63
+ errorType: 'MissingApiKey',
64
+ error: 'No Google AI API key available. Please configure a connection or contact support.'
65
+ };
66
+ }
67
+ let tempFilePath = null;
68
+ try {
69
+ // Download and validate file
70
+ const { filePath: tempFilePath, contentType } = yield downloadMediaFileToDisk(mediaUrl);
71
+ // Upload file to Google AI
72
+ const fileRef = yield uploadFileToGoogleAI(tempFilePath, apiKey, mediaUrl, contentType);
73
+ // Generate content using Gemini
74
+ const result = yield generateContentWithGemini(apiKey, geminiModel, prompt, fileRef);
75
+ return {
76
+ success: true,
77
+ result: result.text,
78
+ mediaUrl,
79
+ fileUri: fileRef.uri,
80
+ mimeType: fileRef.mimeType,
81
+ raw: result.raw
82
+ };
83
+ }
84
+ catch (err) {
85
+ const error = err;
86
+ return {
87
+ success: false,
88
+ errorType: error.name || 'UnknownError',
89
+ error: error.message || 'An unknown error occurred',
90
+ mediaUrl,
91
+ prompt,
92
+ };
93
+ }
94
+ finally {
95
+ // Always cleanup temp file
96
+ if (tempFilePath) {
97
+ yield cleanupTempFile(tempFilePath);
98
+ }
99
+ }
100
+ });
101
+ },
102
+ });
103
+ // --- Helper Functions ---
104
+ function isValidUrl(url) {
105
+ try {
106
+ const urlObj = new URL(url);
107
+ if (!['http:', 'https:'].includes(urlObj.protocol)) {
108
+ return false;
109
+ }
110
+ // Basic domain validation
111
+ if (!urlObj.hostname || urlObj.hostname.length === 0) {
112
+ return false;
113
+ }
114
+ return true;
115
+ }
116
+ catch (_a) {
117
+ return false;
118
+ }
119
+ }
120
+ function downloadMediaFileToDisk(url) {
121
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
122
+ const controller = new AbortController();
123
+ const timeoutId = setTimeout(() => controller.abort(), 30000); // 30 second timeout
124
+ try {
125
+ const response = yield fetch(url, {
126
+ signal: controller.signal,
127
+ headers: {
128
+ 'User-Agent': 'ActivePieces-MediaProcessor/1.0'
129
+ }
130
+ });
131
+ if (!response.ok) {
132
+ throw new Error(`Failed to download media: ${response.status} ${response.statusText}`);
133
+ }
134
+ // Check content length
135
+ const contentLength = response.headers.get('content-length');
136
+ if (contentLength && parseInt(contentLength) > MAX_FILE_SIZE) {
137
+ throw new Error(`File too large: ${contentLength} bytes (max: ${MAX_FILE_SIZE} bytes)`);
138
+ }
139
+ // Validate content type if provided
140
+ const contentType = response.headers.get('content-type');
141
+ if (contentType && !SUPPORTED_MIME_TYPES.some(type => contentType.startsWith(type))) {
142
+ console.warn(`Unsupported content type: ${contentType}`);
143
+ }
144
+ const buffer = Buffer.from(yield response.arrayBuffer());
145
+ // Double-check file size after download
146
+ if (buffer.length > MAX_FILE_SIZE) {
147
+ throw new Error(`Downloaded file too large: ${buffer.length} bytes (max: ${MAX_FILE_SIZE} bytes)`);
148
+ }
149
+ const ext = getFileExtension(url, contentType);
150
+ const filePath = path_1.default.join(os_1.default.tmpdir(), `media_${Date.now()}_${Math.random().toString(36).substr(2, 9)}${ext}`);
151
+ yield promises_1.default.writeFile(filePath, buffer);
152
+ return { filePath, contentType };
153
+ }
154
+ finally {
155
+ clearTimeout(timeoutId);
156
+ }
157
+ });
158
+ }
159
+ function uploadFileToGoogleAI(localPath, googleApiKey, originalUrl, contentType) {
160
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
161
+ var _a;
162
+ try {
163
+ const fileStats = yield promises_1.default.stat(localPath);
164
+ if (fileStats.size === 0) {
165
+ throw new Error('Downloaded file is empty');
166
+ }
167
+ const mimeType = getMimeType(originalUrl, contentType);
168
+ const fileName = path_1.default.basename(originalUrl) || `media_${Date.now()}`;
169
+ const formData = new FormData();
170
+ const fileBuffer = yield promises_1.default.readFile(localPath);
171
+ const fileBlob = new Blob([new Uint8Array(fileBuffer)], { type: mimeType });
172
+ formData.append('file', fileBlob, fileName);
173
+ const response = yield fetch('https://generativelanguage.googleapis.com/upload/v1beta/files', {
174
+ method: 'POST',
175
+ headers: {
176
+ 'X-Goog-Api-Key': googleApiKey,
177
+ },
178
+ body: formData,
179
+ });
180
+ if (!response.ok) {
181
+ let errorText = `${response.status} ${response.statusText}`;
182
+ try {
183
+ const errorBody = yield response.text();
184
+ if (errorBody) {
185
+ errorText += ` - ${errorBody}`;
186
+ }
187
+ }
188
+ catch (_b) {
189
+ // Ignore error reading response body
190
+ }
191
+ throw new Error(`Failed to upload file: ${errorText}`);
192
+ }
193
+ const uploadResult = yield response.json();
194
+ if (!((_a = uploadResult.file) === null || _a === void 0 ? void 0 : _a.name)) {
195
+ throw new Error('Upload response missing file name');
196
+ }
197
+ // Wait for file to be processed
198
+ return yield waitForFileProcessing(uploadResult.file.name, googleApiKey);
199
+ }
200
+ catch (err) {
201
+ if (err instanceof Error) {
202
+ throw err;
203
+ }
204
+ throw new Error(`File upload failed: ${String(err)}`);
205
+ }
206
+ });
207
+ }
208
+ function waitForFileProcessing(fileName_1, googleApiKey_1) {
209
+ return tslib_1.__awaiter(this, arguments, void 0, function* (fileName, googleApiKey, maxWait = PROCESSING_TIMEOUT) {
210
+ var _a;
211
+ const start = Date.now();
212
+ let lastError = null;
213
+ while (Date.now() - start < maxWait) {
214
+ try {
215
+ const response = yield fetch(`https://generativelanguage.googleapis.com/v1beta/${fileName}?key=${googleApiKey}`);
216
+ if (response.ok) {
217
+ const fileStatus = yield response.json();
218
+ if (fileStatus.state === 'ACTIVE') {
219
+ return fileStatus;
220
+ }
221
+ else if (fileStatus.state === 'FAILED') {
222
+ throw new Error(`File processing failed: ${((_a = fileStatus.error) === null || _a === void 0 ? void 0 : _a.message) || 'Unknown processing error'}`);
223
+ }
224
+ // Continue polling for PROCESSING state
225
+ }
226
+ else {
227
+ lastError = `${response.status} ${response.statusText}`;
228
+ // Continue polling for transient errors
229
+ }
230
+ }
231
+ catch (err) {
232
+ lastError = err instanceof Error ? err.message : String(err);
233
+ // Continue polling for network errors
234
+ }
235
+ yield new Promise(resolve => setTimeout(resolve, POLLING_INTERVAL));
236
+ }
237
+ const timeoutMsg = `File processing timeout after ${maxWait / 1000} seconds`;
238
+ const fullError = lastError ? `${timeoutMsg}. Last error: ${lastError}` : timeoutMsg;
239
+ throw new Error(fullError);
240
+ });
241
+ }
242
+ function generateContentWithGemini(apiKey, model, prompt, fileRef) {
243
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
244
+ var _a, _b, _c, _d;
245
+ const requestBody = {
246
+ contents: [{
247
+ parts: [
248
+ { text: prompt },
249
+ {
250
+ fileData: {
251
+ fileUri: fileRef.uri,
252
+ mimeType: fileRef.mimeType,
253
+ }
254
+ }
255
+ ]
256
+ }],
257
+ generationConfig: {
258
+ temperature: 0.7,
259
+ topK: 32,
260
+ topP: 1,
261
+ maxOutputTokens: 4096,
262
+ }
263
+ };
264
+ const response = yield fetch(`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`, {
265
+ method: 'POST',
266
+ headers: {
267
+ 'Content-Type': 'application/json',
268
+ },
269
+ body: JSON.stringify(requestBody),
270
+ });
271
+ if (!response.ok) {
272
+ let errorText = `${response.status} ${response.statusText}`;
273
+ try {
274
+ const errorBody = yield response.text();
275
+ if (errorBody) {
276
+ errorText += ` - ${errorBody}`;
277
+ }
278
+ }
279
+ catch (_e) {
280
+ // Ignore error reading response body
281
+ }
282
+ throw new Error(`Failed to generate content: ${errorText}`);
283
+ }
284
+ const result = yield response.json();
285
+ // Handle safety ratings or blocked content
286
+ if ((_a = result.promptFeedback) === null || _a === void 0 ? void 0 : _a.blockReason) {
287
+ throw new Error(`Content blocked: ${result.promptFeedback.blockReason}`);
288
+ }
289
+ if (!result.candidates || result.candidates.length === 0) {
290
+ throw new Error('No content generated by the model');
291
+ }
292
+ const candidate = result.candidates[0];
293
+ // Check if content was blocked
294
+ if (candidate.finishReason === 'SAFETY') {
295
+ throw new Error('Content generation blocked due to safety concerns');
296
+ }
297
+ if (!((_d = (_c = (_b = candidate.content) === null || _b === void 0 ? void 0 : _b.parts) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text)) {
298
+ throw new Error('Empty or invalid response from the model');
299
+ }
300
+ return {
301
+ text: candidate.content.parts[0].text,
302
+ raw: result
303
+ };
304
+ });
305
+ }
306
+ function getFileExtension(url, contentType) {
307
+ // 1. Try URL extension
308
+ const urlExt = path_1.default.extname(new URL(url).pathname);
309
+ if (urlExt && urlExt.length <= 5) { // simple sanity check
310
+ return urlExt;
311
+ }
312
+ // 2. Fallback to content type mapping
313
+ if (contentType) {
314
+ const typeMap = {
315
+ 'image/jpeg': '.jpg',
316
+ 'image/png': '.png',
317
+ 'image/gif': '.gif',
318
+ 'image/webp': '.webp',
319
+ 'video/mp4': '.mp4',
320
+ 'video/avi': '.avi',
321
+ 'video/quicktime': '.mov',
322
+ 'video/x-ms-wmv': '.wmv',
323
+ 'video/webm': '.webm',
324
+ 'audio/mpeg': '.mp3',
325
+ 'audio/wav': '.wav',
326
+ 'audio/ogg': '.ogg',
327
+ 'audio/mp4': '.m4a',
328
+ 'audio/flac': '.flac',
329
+ };
330
+ return typeMap[contentType] || '.bin';
331
+ }
332
+ // 3. Default fallback
333
+ return '.bin';
334
+ }
335
+ function getMimeType(url, contentType) {
336
+ // 1. Prefer contentType header if passed
337
+ if (contentType) {
338
+ return contentType.split(';')[0].trim(); // remove charset if present
339
+ }
340
+ // 2. Infer from URL extension
341
+ const extension = (url.split('.').pop() || '').toLowerCase();
342
+ const mimeTypes = {
343
+ 'jpg': 'image/jpeg',
344
+ 'jpeg': 'image/jpeg',
345
+ 'png': 'image/png',
346
+ 'gif': 'image/gif',
347
+ 'webp': 'image/webp',
348
+ 'mp4': 'video/mp4',
349
+ 'avi': 'video/avi',
350
+ 'mov': 'video/quicktime',
351
+ 'wmv': 'video/x-ms-wmv',
352
+ 'webm': 'video/webm',
353
+ 'mp3': 'audio/mpeg',
354
+ 'wav': 'audio/wav',
355
+ 'ogg': 'audio/ogg',
356
+ 'm4a': 'audio/mp4',
357
+ 'flac': 'audio/flac',
358
+ };
359
+ // 3. Default fallback
360
+ return mimeTypes[extension] || 'application/octet-stream';
361
+ }
362
+ function cleanupTempFile(filePath) {
363
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
364
+ try {
365
+ yield promises_1.default.unlink(filePath);
366
+ }
367
+ catch (error) {
368
+ // Log but don't throw - cleanup is best effort
369
+ console.warn(`Failed to cleanup temp file ${filePath}:`, error);
370
+ }
371
+ });
372
+ }
373
+ //# sourceMappingURL=media-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-processor.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/custom/web/src/lib/actions/media-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export declare enum WebSearchCategories {
2
+ AI_OVERVIEW = "ai_overview",
3
+ ADS = "ads",
4
+ ANSWER_BOX = "answer_box",
5
+ AVAILABLE_ON = "available_on",
6
+ BROADEN_SEARCHES = "broaden_searches",
7
+ BUYING_GUIDE = "buying_guide",
8
+ COMPLEMENTARY_RESULTS = "complementary_results",
9
+ DMCA_MESSAGES = "dmca_messages",
10
+ DISCOVER_MORE_PLACES = "discover_more_places",
11
+ DISCUSSIONS_AND_FORUMS = "discussions_and_forums",
12
+ EPISODE_GUIDE = "episode_guide",
13
+ EVENTS_RESULTS = "events_results",
14
+ FIND_RESULTS_ON = "find_results_on",
15
+ GRAMMAR_CHECK = "grammar_check",
16
+ IMMERSIVE_PRODUCTS = "immersive_products",
17
+ INLINE_IMAGES = "inline_images",
18
+ SHOPPING_RESULTS = "shopping_results",
19
+ INLINE_VIDEOS = "inline_videos",
20
+ JOBS_RESULTS = "jobs_results",
21
+ KNOWLEDGE_GRAPH = "knowledge_graph",
22
+ LATEST_POSTS = "latest_posts",
23
+ LOCAL_ADS = "local_ads",
24
+ LOCAL_NEWS = "local_news",
25
+ LOCAL_MAP = "local_map",
26
+ MENU_HIGHLIGHTS = "menu_highlights",
27
+ NEWS_RESULTS = "news_results",
28
+ NUTRITION_INFORMATION = "nutrition_information",
29
+ ORGANIC_RESULTS = "organic_results",
30
+ PERSPECTIVES = "perspectives",
31
+ PLACES_SITES = "places_sites",
32
+ POPULAR_DESTINATIONS = "popular_destinations",
33
+ PRODUCT_RESULT = "product_result",
34
+ PRODUCT_SITES = "product_sites",
35
+ QUESTIONS_AND_ANSWERS = "questions_and_answers",
36
+ RECIPES_RESULTS = "recipes_results",
37
+ RELATED_BRANDS = "related_brands",
38
+ RELATED_CATEGORIES = "related_categories",
39
+ RELATED_QUESTIONS = "related_questions",
40
+ RELATED_SEARCHES = "related_searches",
41
+ SCHOLARLY_ARTICLES = "scholarly_articles",
42
+ SHORT_VIDEOS = "short_videos",
43
+ SHOWTIMES = "showtimes",
44
+ SEARCH_INFORMATION = "search_information",
45
+ SPORTS_RESULTS = "sports_results",
46
+ THINGS_TO_KNOW = "things_to_know",
47
+ TOP_INSIGHTS = "top_insights",
48
+ TOP_SIGHTS = "top_sights",
49
+ TOP_STORIES = "top_stories",
50
+ TWITTER_RESULTS = "twitter_results",
51
+ VISUAL_STORIES = "visual_stories"
52
+ }
53
+ export declare const webSearch: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").PieceAuthProperty, {
54
+ query: import("@activepieces/pieces-framework").ShortTextProperty<true>;
55
+ category: import("@activepieces/pieces-framework").StaticDropdownProperty<WebSearchCategories, true>;
56
+ location: import("@activepieces/pieces-framework").ShortTextProperty<false>;
57
+ start: import("@activepieces/pieces-framework").NumberProperty<false>;
58
+ num: import("@activepieces/pieces-framework").NumberProperty<false>;
59
+ }>;