@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 +7 -0
- package/package.json +30 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +23 -0
- package/src/index.js.map +1 -0
- package/src/lib/actions/basic-web-scraper.d.ts +4 -0
- package/src/lib/actions/basic-web-scraper.js +103 -0
- package/src/lib/actions/basic-web-scraper.js.map +1 -0
- package/src/lib/actions/media-processor.d.ts +5 -0
- package/src/lib/actions/media-processor.js +373 -0
- package/src/lib/actions/media-processor.js.map +1 -0
- package/src/lib/actions/web-search.d.ts +59 -0
- package/src/lib/actions/web-search.js +251 -0
- package/src/lib/actions/web-search.js.map +1 -0
- package/src/lib/actions/youtube-processor.d.ts +5 -0
- package/src/lib/actions/youtube-processor.js +174 -0
- package/src/lib/actions/youtube-processor.js.map +1 -0
- package/src/lib/actions/youtube-search.d.ts +5 -0
- package/src/lib/actions/youtube-search.js +142 -0
- package/src/lib/actions/youtube-search.js.map +1 -0
- package/src/lib/auth.d.ts +4 -0
- package/src/lib/auth.js +21 -0
- package/src/lib/auth.js.map +1 -0
- package/src/lib/common.d.ts +2 -0
- package/src/lib/common.js +48 -0
- package/src/lib/common.js.map +1 -0
package/README.md
ADDED
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
|
package/src/index.js.map
ADDED
|
@@ -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
|
+
}>;
|