composio-scavio 0.1.0
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 +58 -0
- package/dist/index.cjs +478 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +25 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +456 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# composio-scavio (TypeScript)
|
|
2
|
+
|
|
3
|
+
[Scavio](https://scavio.dev) real-time search tools for [Composio](https://composio.dev) (TypeScript).
|
|
4
|
+
|
|
5
|
+
Scavio is a single Search API over Google, YouTube, Amazon, Walmart, Reddit, TikTok, and Instagram. This package exposes those endpoints as a Composio custom toolkit so your agents can pull structured, up-to-date results across any Composio-supported framework.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install composio-scavio
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`@composio/core` and `zod` are dependencies. Get a Scavio API key from the [Scavio Dashboard](https://dashboard.scavio.dev) (50 free credits to start, no credit card).
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { Composio } from "@composio/core";
|
|
19
|
+
import { buildScavioToolkit } from "composio-scavio";
|
|
20
|
+
|
|
21
|
+
const composio = new Composio({ apiKey: process.env.COMPOSIO_API_KEY });
|
|
22
|
+
|
|
23
|
+
// Build the toolkit; expose only the providers you need.
|
|
24
|
+
const scavio = buildScavioToolkit({
|
|
25
|
+
apiKey: process.env.SCAVIO_API_KEY, // or rely on SCAVIO_API_KEY
|
|
26
|
+
enableGoogle: true,
|
|
27
|
+
enableAmazon: true,
|
|
28
|
+
enableTiktok: false,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const session = await composio.create("user_1", {
|
|
32
|
+
experimental: { customToolkits: [scavio] },
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Hand the agent-ready tools to your framework, or call directly:
|
|
36
|
+
const tools = await session.tools();
|
|
37
|
+
const out = await session.execute("LOCAL_SCAVIO_GOOGLE_SEARCH", {
|
|
38
|
+
query: "best search API for AI agents",
|
|
39
|
+
light_request: true,
|
|
40
|
+
});
|
|
41
|
+
console.log(out);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Pass `all: true` to register every tool regardless of the individual flags.
|
|
45
|
+
|
|
46
|
+
## Tools
|
|
47
|
+
|
|
48
|
+
All tools are grouped under the `SCAVIO` custom toolkit; agent-facing slugs are prefixed `LOCAL_SCAVIO_` (Composio convention for custom tools). Providers: Google, Amazon (search, product), Walmart (search, product), YouTube (search, metadata), Reddit (search, post), TikTok (11 tools), Instagram (12 tools). 32 tools total.
|
|
49
|
+
|
|
50
|
+
## Credits
|
|
51
|
+
|
|
52
|
+
Most endpoints cost 1 credit. Reddit and Instagram cost 2 credits each. Google costs 2 credits unless `light_request: true` (1 credit). See [scavio.dev/docs](https://scavio.dev/docs).
|
|
53
|
+
|
|
54
|
+
## Links
|
|
55
|
+
|
|
56
|
+
- Scavio: https://scavio.dev
|
|
57
|
+
- Docs: https://scavio.dev/docs
|
|
58
|
+
- Dashboard: https://dashboard.scavio.dev
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
buildScavioToolkit: () => buildScavioToolkit,
|
|
24
|
+
default: () => index_default
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(index_exports);
|
|
27
|
+
var import_core = require("@composio/core");
|
|
28
|
+
var import_scavio = require("scavio");
|
|
29
|
+
var import_zod = require("zod");
|
|
30
|
+
var str = (d) => import_zod.z.string().describe(d);
|
|
31
|
+
var ostr = (d) => import_zod.z.string().optional().describe(d);
|
|
32
|
+
var onum = (d) => import_zod.z.number().optional().describe(d);
|
|
33
|
+
var obool = (d) => import_zod.z.boolean().optional().describe(d);
|
|
34
|
+
function buildScavioToolkit(options = {}) {
|
|
35
|
+
const {
|
|
36
|
+
apiKey,
|
|
37
|
+
enableGoogle = true,
|
|
38
|
+
enableAmazon = true,
|
|
39
|
+
enableWalmart = true,
|
|
40
|
+
enableYoutube = true,
|
|
41
|
+
enableReddit = true,
|
|
42
|
+
enableTiktok = true,
|
|
43
|
+
enableInstagram = true,
|
|
44
|
+
all = false
|
|
45
|
+
} = options;
|
|
46
|
+
const client = new import_scavio.Scavio({ apiKey: apiKey ?? process.env.SCAVIO_API_KEY });
|
|
47
|
+
function tool(slug, name, description, inputParams, call) {
|
|
48
|
+
return (0, import_core.experimental_createTool)(slug, {
|
|
49
|
+
name,
|
|
50
|
+
description,
|
|
51
|
+
inputParams,
|
|
52
|
+
execute: async (input) => call(input)
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const tools = [];
|
|
56
|
+
if (all || enableGoogle) {
|
|
57
|
+
tools.push(
|
|
58
|
+
tool(
|
|
59
|
+
"GOOGLE_SEARCH",
|
|
60
|
+
"Scavio Google Search",
|
|
61
|
+
"Search Google for real-time web results (organic, knowledge graph, news, and more).",
|
|
62
|
+
import_zod.z.object({
|
|
63
|
+
query: str("The search query."),
|
|
64
|
+
country_code: ostr("Two-letter country code, e.g. 'us'."),
|
|
65
|
+
language: ostr("Two-letter language code, e.g. 'en'."),
|
|
66
|
+
page: onum("Result page number (1-based)."),
|
|
67
|
+
search_type: ostr("Search vertical, e.g. 'search', 'news', 'images'."),
|
|
68
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
69
|
+
nfpr: obool("Disable auto-correction of the query when true."),
|
|
70
|
+
light_request: obool("Cheaper, lighter response (1 credit instead of 2) when true.")
|
|
71
|
+
}),
|
|
72
|
+
(i) => client.google.search(i)
|
|
73
|
+
)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
if (all || enableAmazon) {
|
|
77
|
+
tools.push(
|
|
78
|
+
tool(
|
|
79
|
+
"AMAZON_SEARCH",
|
|
80
|
+
"Scavio Amazon Search",
|
|
81
|
+
"Search Amazon for products matching a query.",
|
|
82
|
+
import_zod.z.object({
|
|
83
|
+
query: str("The product search query."),
|
|
84
|
+
domain: ostr("Amazon domain, e.g. 'amazon.com'."),
|
|
85
|
+
country: ostr("Two-letter country code."),
|
|
86
|
+
language: ostr("Two-letter language code."),
|
|
87
|
+
currency: ostr("Currency code, e.g. 'USD'."),
|
|
88
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
89
|
+
sort_by: ostr("Sort order for results."),
|
|
90
|
+
start_page: onum("First page to return."),
|
|
91
|
+
pages: onum("Number of pages to return."),
|
|
92
|
+
category_id: ostr("Restrict to an Amazon category id."),
|
|
93
|
+
merchant_id: ostr("Restrict to a merchant id."),
|
|
94
|
+
zip_code: ostr("Delivery ZIP/postal code."),
|
|
95
|
+
autoselect_variant: obool("Auto-select the best product variant when true.")
|
|
96
|
+
}),
|
|
97
|
+
(i) => client.amazon.search(i)
|
|
98
|
+
),
|
|
99
|
+
tool(
|
|
100
|
+
"AMAZON_PRODUCT",
|
|
101
|
+
"Scavio Amazon Product",
|
|
102
|
+
"Fetch full Amazon product details by ASIN.",
|
|
103
|
+
import_zod.z.object({
|
|
104
|
+
asin: str("Amazon Standard Identification Number (ASIN) of the product."),
|
|
105
|
+
domain: ostr("Amazon domain, e.g. 'amazon.com'."),
|
|
106
|
+
country: ostr("Two-letter country code."),
|
|
107
|
+
language: ostr("Two-letter language code."),
|
|
108
|
+
currency: ostr("Currency code, e.g. 'USD'."),
|
|
109
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
110
|
+
zip_code: ostr("Delivery ZIP/postal code."),
|
|
111
|
+
autoselect_variant: obool("Auto-select the best product variant when true.")
|
|
112
|
+
}),
|
|
113
|
+
(i) => client.amazon.product(i)
|
|
114
|
+
)
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
if (all || enableWalmart) {
|
|
118
|
+
tools.push(
|
|
119
|
+
tool(
|
|
120
|
+
"WALMART_SEARCH",
|
|
121
|
+
"Scavio Walmart Search",
|
|
122
|
+
"Search Walmart for products matching a query.",
|
|
123
|
+
import_zod.z.object({
|
|
124
|
+
query: str("The product search query."),
|
|
125
|
+
domain: ostr("Walmart domain."),
|
|
126
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
127
|
+
sort_by: ostr("Sort order for results."),
|
|
128
|
+
start_page: onum("First page to return."),
|
|
129
|
+
min_price: onum("Minimum price filter."),
|
|
130
|
+
max_price: onum("Maximum price filter."),
|
|
131
|
+
fulfillment_speed: ostr("Fulfillment speed filter."),
|
|
132
|
+
fulfillment_type: ostr("Fulfillment type filter."),
|
|
133
|
+
delivery_zip: ostr("Delivery ZIP/postal code."),
|
|
134
|
+
store_id: ostr("Restrict to a store id.")
|
|
135
|
+
}),
|
|
136
|
+
(i) => client.walmart.search(i)
|
|
137
|
+
),
|
|
138
|
+
tool(
|
|
139
|
+
"WALMART_PRODUCT",
|
|
140
|
+
"Scavio Walmart Product",
|
|
141
|
+
"Fetch full Walmart product details by product id.",
|
|
142
|
+
import_zod.z.object({
|
|
143
|
+
product_id: str("Walmart product id."),
|
|
144
|
+
domain: ostr("Walmart domain."),
|
|
145
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
146
|
+
delivery_zip: ostr("Delivery ZIP/postal code."),
|
|
147
|
+
store_id: ostr("Restrict to a store id.")
|
|
148
|
+
}),
|
|
149
|
+
(i) => client.walmart.product(i)
|
|
150
|
+
)
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
if (all || enableYoutube) {
|
|
154
|
+
tools.push(
|
|
155
|
+
tool(
|
|
156
|
+
"YOUTUBE_SEARCH",
|
|
157
|
+
"Scavio YouTube Search",
|
|
158
|
+
"Search YouTube for videos, channels, or playlists.",
|
|
159
|
+
import_zod.z.object({
|
|
160
|
+
query: str("The video search query."),
|
|
161
|
+
upload_date: ostr("Upload date filter, e.g. 'today', 'week', 'month'."),
|
|
162
|
+
type: ostr("Result type, e.g. 'video', 'channel', 'playlist'."),
|
|
163
|
+
duration: ostr("Duration filter, e.g. 'short', 'long'."),
|
|
164
|
+
sort_by: ostr("Sort order for results."),
|
|
165
|
+
hd: obool("Restrict to HD videos when true."),
|
|
166
|
+
subtitles: obool("Restrict to videos with subtitles when true."),
|
|
167
|
+
creative_commons: obool("Restrict to Creative Commons videos when true."),
|
|
168
|
+
live: obool("Restrict to live videos when true.")
|
|
169
|
+
}),
|
|
170
|
+
(i) => client.youtube.search(i)
|
|
171
|
+
),
|
|
172
|
+
tool(
|
|
173
|
+
"YOUTUBE_METADATA",
|
|
174
|
+
"Scavio YouTube Metadata",
|
|
175
|
+
"Fetch metadata for a YouTube video by id.",
|
|
176
|
+
import_zod.z.object({ video_id: str("YouTube video id.") }),
|
|
177
|
+
(i) => client.youtube.metadata(i)
|
|
178
|
+
)
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
if (all || enableReddit) {
|
|
182
|
+
tools.push(
|
|
183
|
+
tool(
|
|
184
|
+
"REDDIT_SEARCH",
|
|
185
|
+
"Scavio Reddit Search",
|
|
186
|
+
"Search Reddit posts, subreddits, or users.",
|
|
187
|
+
import_zod.z.object({
|
|
188
|
+
query: str("The Reddit search query."),
|
|
189
|
+
type: ostr("Search type, e.g. 'posts', 'subreddits', 'users'."),
|
|
190
|
+
sort: ostr("Sort order, e.g. 'relevance', 'new', 'top'."),
|
|
191
|
+
cursor: ostr("Pagination cursor.")
|
|
192
|
+
}),
|
|
193
|
+
(i) => client.reddit.search(i)
|
|
194
|
+
),
|
|
195
|
+
tool(
|
|
196
|
+
"REDDIT_POST",
|
|
197
|
+
"Scavio Reddit Post",
|
|
198
|
+
"Fetch a Reddit post and its comment thread by URL.",
|
|
199
|
+
import_zod.z.object({ url: str("Full URL of the Reddit post to fetch with its comments.") }),
|
|
200
|
+
(i) => client.reddit.post(i)
|
|
201
|
+
)
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
if (all || enableTiktok) {
|
|
205
|
+
tools.push(
|
|
206
|
+
tool(
|
|
207
|
+
"TIKTOK_PROFILE",
|
|
208
|
+
"Scavio TikTok Profile",
|
|
209
|
+
"Fetch a TikTok user profile by username or secUid.",
|
|
210
|
+
import_zod.z.object({
|
|
211
|
+
username: ostr("TikTok username (without @). Provide this or sec_user_id."),
|
|
212
|
+
sec_user_id: ostr("TikTok secUid. Provide this or username.")
|
|
213
|
+
}),
|
|
214
|
+
(i) => client.tiktok.profile(i)
|
|
215
|
+
),
|
|
216
|
+
tool(
|
|
217
|
+
"TIKTOK_USER_POSTS",
|
|
218
|
+
"Scavio TikTok User Posts",
|
|
219
|
+
"List a TikTok user's posts by secUid.",
|
|
220
|
+
import_zod.z.object({
|
|
221
|
+
sec_user_id: str("TikTok secUid of the user."),
|
|
222
|
+
cursor: ostr("Pagination cursor."),
|
|
223
|
+
count: onum("Number of posts to return."),
|
|
224
|
+
sort_type: ostr("Sort order for posts.")
|
|
225
|
+
}),
|
|
226
|
+
(i) => client.tiktok.userPosts(i)
|
|
227
|
+
),
|
|
228
|
+
tool(
|
|
229
|
+
"TIKTOK_VIDEO",
|
|
230
|
+
"Scavio TikTok Video",
|
|
231
|
+
"Fetch a TikTok video by id.",
|
|
232
|
+
import_zod.z.object({ video_id: str("TikTok video id.") }),
|
|
233
|
+
(i) => client.tiktok.video(i)
|
|
234
|
+
),
|
|
235
|
+
tool(
|
|
236
|
+
"TIKTOK_VIDEO_COMMENTS",
|
|
237
|
+
"Scavio TikTok Video Comments",
|
|
238
|
+
"List comments on a TikTok video.",
|
|
239
|
+
import_zod.z.object({
|
|
240
|
+
video_id: str("TikTok video id."),
|
|
241
|
+
cursor: ostr("Pagination cursor."),
|
|
242
|
+
count: onum("Number of comments to return.")
|
|
243
|
+
}),
|
|
244
|
+
(i) => client.tiktok.videoComments(i)
|
|
245
|
+
),
|
|
246
|
+
tool(
|
|
247
|
+
"TIKTOK_COMMENT_REPLIES",
|
|
248
|
+
"Scavio TikTok Comment Replies",
|
|
249
|
+
"List replies to a TikTok video comment.",
|
|
250
|
+
import_zod.z.object({
|
|
251
|
+
video_id: str("TikTok video id."),
|
|
252
|
+
comment_id: str("Parent comment id."),
|
|
253
|
+
cursor: ostr("Pagination cursor."),
|
|
254
|
+
count: onum("Number of replies to return.")
|
|
255
|
+
}),
|
|
256
|
+
(i) => client.tiktok.commentReplies(i)
|
|
257
|
+
),
|
|
258
|
+
tool(
|
|
259
|
+
"TIKTOK_SEARCH_VIDEOS",
|
|
260
|
+
"Scavio TikTok Search Videos",
|
|
261
|
+
"Search TikTok videos by keyword.",
|
|
262
|
+
import_zod.z.object({
|
|
263
|
+
keyword: str("Search keyword."),
|
|
264
|
+
cursor: ostr("Pagination cursor."),
|
|
265
|
+
count: onum("Number of videos to return."),
|
|
266
|
+
sort_type: ostr("Sort order for results."),
|
|
267
|
+
publish_time: ostr("Publish-time filter.")
|
|
268
|
+
}),
|
|
269
|
+
(i) => client.tiktok.searchVideos(i)
|
|
270
|
+
),
|
|
271
|
+
tool(
|
|
272
|
+
"TIKTOK_SEARCH_USERS",
|
|
273
|
+
"Scavio TikTok Search Users",
|
|
274
|
+
"Search TikTok users by keyword.",
|
|
275
|
+
import_zod.z.object({
|
|
276
|
+
keyword: str("Search keyword."),
|
|
277
|
+
cursor: ostr("Pagination cursor."),
|
|
278
|
+
count: onum("Number of users to return.")
|
|
279
|
+
}),
|
|
280
|
+
(i) => client.tiktok.searchUsers(i)
|
|
281
|
+
),
|
|
282
|
+
tool(
|
|
283
|
+
"TIKTOK_HASHTAG",
|
|
284
|
+
"Scavio TikTok Hashtag",
|
|
285
|
+
"Fetch a TikTok hashtag by name or id.",
|
|
286
|
+
import_zod.z.object({
|
|
287
|
+
hashtag_name: ostr("Hashtag name (without #). Provide this or hashtag_id."),
|
|
288
|
+
hashtag_id: ostr("Hashtag id. Provide this or hashtag_name.")
|
|
289
|
+
}),
|
|
290
|
+
(i) => client.tiktok.hashtag(i)
|
|
291
|
+
),
|
|
292
|
+
tool(
|
|
293
|
+
"TIKTOK_HASHTAG_VIDEOS",
|
|
294
|
+
"Scavio TikTok Hashtag Videos",
|
|
295
|
+
"List videos for a TikTok hashtag by id.",
|
|
296
|
+
import_zod.z.object({
|
|
297
|
+
hashtag_id: str("Hashtag id."),
|
|
298
|
+
cursor: ostr("Pagination cursor."),
|
|
299
|
+
count: onum("Number of videos to return.")
|
|
300
|
+
}),
|
|
301
|
+
(i) => client.tiktok.hashtagVideos(i)
|
|
302
|
+
),
|
|
303
|
+
tool(
|
|
304
|
+
"TIKTOK_USER_FOLLOWERS",
|
|
305
|
+
"Scavio TikTok User Followers",
|
|
306
|
+
"List a TikTok user's followers by secUid.",
|
|
307
|
+
import_zod.z.object({
|
|
308
|
+
sec_user_id: str("TikTok secUid of the user."),
|
|
309
|
+
count: onum("Number of followers to return."),
|
|
310
|
+
page_token: ostr("Pagination token."),
|
|
311
|
+
min_time: onum("Minimum timestamp filter.")
|
|
312
|
+
}),
|
|
313
|
+
(i) => client.tiktok.userFollowers(i)
|
|
314
|
+
),
|
|
315
|
+
tool(
|
|
316
|
+
"TIKTOK_USER_FOLLOWINGS",
|
|
317
|
+
"Scavio TikTok User Followings",
|
|
318
|
+
"List the accounts a TikTok user follows, by secUid.",
|
|
319
|
+
import_zod.z.object({
|
|
320
|
+
sec_user_id: str("TikTok secUid of the user."),
|
|
321
|
+
count: onum("Number of followings to return."),
|
|
322
|
+
page_token: ostr("Pagination token."),
|
|
323
|
+
min_time: onum("Minimum timestamp filter.")
|
|
324
|
+
}),
|
|
325
|
+
(i) => client.tiktok.userFollowings(i)
|
|
326
|
+
)
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
if (all || enableInstagram) {
|
|
330
|
+
tools.push(
|
|
331
|
+
tool(
|
|
332
|
+
"INSTAGRAM_PROFILE",
|
|
333
|
+
"Scavio Instagram Profile",
|
|
334
|
+
"Fetch an Instagram profile by username or user id.",
|
|
335
|
+
import_zod.z.object({
|
|
336
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
337
|
+
user_id: ostr("Instagram user id. Provide this or username.")
|
|
338
|
+
}),
|
|
339
|
+
(i) => client.instagram.profile(i)
|
|
340
|
+
),
|
|
341
|
+
tool(
|
|
342
|
+
"INSTAGRAM_USER_POSTS",
|
|
343
|
+
"Scavio Instagram User Posts",
|
|
344
|
+
"List an Instagram user's posts.",
|
|
345
|
+
import_zod.z.object({
|
|
346
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
347
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
348
|
+
count: onum("Number of posts to return."),
|
|
349
|
+
cursor: ostr("Pagination cursor.")
|
|
350
|
+
}),
|
|
351
|
+
(i) => client.instagram.userPosts(i)
|
|
352
|
+
),
|
|
353
|
+
tool(
|
|
354
|
+
"INSTAGRAM_USER_REELS",
|
|
355
|
+
"Scavio Instagram User Reels",
|
|
356
|
+
"List an Instagram user's reels.",
|
|
357
|
+
import_zod.z.object({
|
|
358
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
359
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
360
|
+
count: onum("Number of reels to return."),
|
|
361
|
+
cursor: ostr("Pagination cursor.")
|
|
362
|
+
}),
|
|
363
|
+
(i) => client.instagram.userReels(i)
|
|
364
|
+
),
|
|
365
|
+
tool(
|
|
366
|
+
"INSTAGRAM_USER_TAGGED",
|
|
367
|
+
"Scavio Instagram User Tagged",
|
|
368
|
+
"List posts an Instagram user is tagged in.",
|
|
369
|
+
import_zod.z.object({
|
|
370
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
371
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
372
|
+
count: onum("Number of tagged posts to return."),
|
|
373
|
+
cursor: ostr("Pagination cursor.")
|
|
374
|
+
}),
|
|
375
|
+
(i) => client.instagram.userTagged(i)
|
|
376
|
+
),
|
|
377
|
+
tool(
|
|
378
|
+
"INSTAGRAM_USER_STORIES",
|
|
379
|
+
"Scavio Instagram User Stories",
|
|
380
|
+
"Fetch an Instagram user's current stories.",
|
|
381
|
+
import_zod.z.object({
|
|
382
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
383
|
+
user_id: ostr("Instagram user id. Provide this or username.")
|
|
384
|
+
}),
|
|
385
|
+
(i) => client.instagram.userStories(i)
|
|
386
|
+
),
|
|
387
|
+
tool(
|
|
388
|
+
"INSTAGRAM_POST",
|
|
389
|
+
"Scavio Instagram Post",
|
|
390
|
+
"Fetch an Instagram post by URL, media id, or shortcode.",
|
|
391
|
+
import_zod.z.object({
|
|
392
|
+
url: ostr("Post URL. Provide one of url, media_id, or shortcode."),
|
|
393
|
+
media_id: ostr("Post media id. Provide one of url, media_id, or shortcode."),
|
|
394
|
+
shortcode: ostr("Post shortcode. Provide one of url, media_id, or shortcode.")
|
|
395
|
+
}),
|
|
396
|
+
(i) => client.instagram.post(i)
|
|
397
|
+
),
|
|
398
|
+
tool(
|
|
399
|
+
"INSTAGRAM_POST_COMMENTS",
|
|
400
|
+
"Scavio Instagram Post Comments",
|
|
401
|
+
"List comments on an Instagram post by shortcode or URL.",
|
|
402
|
+
import_zod.z.object({
|
|
403
|
+
shortcode: ostr("Post shortcode. Provide this or url."),
|
|
404
|
+
url: ostr("Post URL. Provide this or shortcode."),
|
|
405
|
+
cursor: ostr("Pagination cursor."),
|
|
406
|
+
sort_order: ostr("Comment sort order.")
|
|
407
|
+
}),
|
|
408
|
+
(i) => client.instagram.postComments(i)
|
|
409
|
+
),
|
|
410
|
+
tool(
|
|
411
|
+
"INSTAGRAM_COMMENT_REPLIES",
|
|
412
|
+
"Scavio Instagram Comment Replies",
|
|
413
|
+
"List replies to an Instagram post comment.",
|
|
414
|
+
import_zod.z.object({
|
|
415
|
+
media_id: str("Post media id."),
|
|
416
|
+
comment_id: str("Parent comment id."),
|
|
417
|
+
cursor: ostr("Pagination cursor.")
|
|
418
|
+
}),
|
|
419
|
+
(i) => client.instagram.commentReplies(i)
|
|
420
|
+
),
|
|
421
|
+
tool(
|
|
422
|
+
"INSTAGRAM_SEARCH_USERS",
|
|
423
|
+
"Scavio Instagram Search Users",
|
|
424
|
+
"Search Instagram users by keyword.",
|
|
425
|
+
import_zod.z.object({
|
|
426
|
+
keyword: str("Search keyword."),
|
|
427
|
+
cursor: ostr("Pagination cursor.")
|
|
428
|
+
}),
|
|
429
|
+
(i) => client.instagram.searchUsers(i)
|
|
430
|
+
),
|
|
431
|
+
tool(
|
|
432
|
+
"INSTAGRAM_SEARCH_HASHTAGS",
|
|
433
|
+
"Scavio Instagram Search Hashtags",
|
|
434
|
+
"Search Instagram hashtags by keyword.",
|
|
435
|
+
import_zod.z.object({
|
|
436
|
+
keyword: str("Search keyword."),
|
|
437
|
+
cursor: ostr("Pagination cursor.")
|
|
438
|
+
}),
|
|
439
|
+
(i) => client.instagram.searchHashtags(i)
|
|
440
|
+
),
|
|
441
|
+
tool(
|
|
442
|
+
"INSTAGRAM_USER_FOLLOWERS",
|
|
443
|
+
"Scavio Instagram User Followers",
|
|
444
|
+
"List an Instagram user's followers.",
|
|
445
|
+
import_zod.z.object({
|
|
446
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
447
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
448
|
+
count: onum("Number of followers to return."),
|
|
449
|
+
cursor: ostr("Pagination cursor.")
|
|
450
|
+
}),
|
|
451
|
+
(i) => client.instagram.userFollowers(i)
|
|
452
|
+
),
|
|
453
|
+
tool(
|
|
454
|
+
"INSTAGRAM_USER_FOLLOWINGS",
|
|
455
|
+
"Scavio Instagram User Followings",
|
|
456
|
+
"List the accounts an Instagram user follows.",
|
|
457
|
+
import_zod.z.object({
|
|
458
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
459
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
460
|
+
count: onum("Number of followings to return."),
|
|
461
|
+
cursor: ostr("Pagination cursor.")
|
|
462
|
+
}),
|
|
463
|
+
(i) => client.instagram.userFollowings(i)
|
|
464
|
+
)
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
return (0, import_core.experimental_createToolkit)("SCAVIO", {
|
|
468
|
+
name: "Scavio",
|
|
469
|
+
description: "Real-time structured search over Google, YouTube, Amazon, Walmart, Reddit, TikTok, and Instagram.",
|
|
470
|
+
tools
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
var index_default = buildScavioToolkit;
|
|
474
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
475
|
+
0 && (module.exports = {
|
|
476
|
+
buildScavioToolkit
|
|
477
|
+
});
|
|
478
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Scavio tools for Composio.\n *\n * Exposes the Scavio search API (Google, YouTube, Amazon, Walmart, Reddit, TikTok,\n * Instagram) as a Composio custom toolkit. Build it with `buildScavioToolkit()` and\n * bind it to a session:\n *\n * import { Composio } from \"@composio/core\";\n * import { buildScavioToolkit } from \"@scavio/composio\";\n *\n * const composio = new Composio();\n * const scavio = buildScavioToolkit({ apiKey: process.env.SCAVIO_API_KEY });\n * const session = await composio.create(\"user_1\", {\n * experimental: { customToolkits: [scavio] },\n * });\n * const out = await session.execute(\"LOCAL_SCAVIO_GOOGLE_SEARCH\", { query: \"ai agents\" });\n *\n * Each provider is gated by an `enable*` flag so an agent only sees the tools it needs.\n */\nimport {\n experimental_createTool,\n experimental_createToolkit,\n} from \"@composio/core\";\nimport { Scavio } from \"scavio\";\nimport { z } from \"zod\";\n\nexport interface BuildScavioToolkitOptions {\n /** Scavio API key. Falls back to the SCAVIO_API_KEY env var. */\n apiKey?: string;\n enableGoogle?: boolean;\n enableAmazon?: boolean;\n enableWalmart?: boolean;\n enableYoutube?: boolean;\n enableReddit?: boolean;\n enableTiktok?: boolean;\n enableInstagram?: boolean;\n /** Register every tool, ignoring the individual flags. */\n all?: boolean;\n}\n\nconst str = (d: string) => z.string().describe(d);\nconst ostr = (d: string) => z.string().optional().describe(d);\nconst onum = (d: string) => z.number().optional().describe(d);\nconst obool = (d: string) => z.boolean().optional().describe(d);\n\n/**\n * Build a Composio custom toolkit exposing Scavio search tools.\n *\n * Scavio is a single Search API over Google, YouTube, Amazon, Walmart, Reddit,\n * TikTok, and Instagram. Pass to `composio.create(userId, { experimental:\n * { customToolkits: [toolkit] } })`. Agent-facing slugs are prefixed `LOCAL_SCAVIO_`.\n */\nexport function buildScavioToolkit(options: BuildScavioToolkitOptions = {}) {\n const {\n apiKey,\n enableGoogle = true,\n enableAmazon = true,\n enableWalmart = true,\n enableYoutube = true,\n enableReddit = true,\n enableTiktok = true,\n enableInstagram = true,\n all = false,\n } = options;\n\n const client = new Scavio({ apiKey: apiKey ?? process.env.SCAVIO_API_KEY });\n\n function tool<T extends z.ZodTypeAny>(\n slug: string,\n name: string,\n description: string,\n inputParams: T,\n call: (input: z.infer<T>) => Promise<Record<string, unknown>>\n ) {\n return experimental_createTool(slug, {\n name,\n description,\n inputParams,\n execute: async (input: z.infer<T>) => call(input),\n });\n }\n\n const tools = [];\n\n if (all || enableGoogle) {\n tools.push(\n tool(\n \"GOOGLE_SEARCH\",\n \"Scavio Google Search\",\n \"Search Google for real-time web results (organic, knowledge graph, news, and more).\",\n z.object({\n query: str(\"The search query.\"),\n country_code: ostr(\"Two-letter country code, e.g. 'us'.\"),\n language: ostr(\"Two-letter language code, e.g. 'en'.\"),\n page: onum(\"Result page number (1-based).\"),\n search_type: ostr(\"Search vertical, e.g. 'search', 'news', 'images'.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n nfpr: obool(\"Disable auto-correction of the query when true.\"),\n light_request: obool(\"Cheaper, lighter response (1 credit instead of 2) when true.\"),\n }),\n (i) => client.google.search(i)\n )\n );\n }\n\n if (all || enableAmazon) {\n tools.push(\n tool(\n \"AMAZON_SEARCH\",\n \"Scavio Amazon Search\",\n \"Search Amazon for products matching a query.\",\n z.object({\n query: str(\"The product search query.\"),\n domain: ostr(\"Amazon domain, e.g. 'amazon.com'.\"),\n country: ostr(\"Two-letter country code.\"),\n language: ostr(\"Two-letter language code.\"),\n currency: ostr(\"Currency code, e.g. 'USD'.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n sort_by: ostr(\"Sort order for results.\"),\n start_page: onum(\"First page to return.\"),\n pages: onum(\"Number of pages to return.\"),\n category_id: ostr(\"Restrict to an Amazon category id.\"),\n merchant_id: ostr(\"Restrict to a merchant id.\"),\n zip_code: ostr(\"Delivery ZIP/postal code.\"),\n autoselect_variant: obool(\"Auto-select the best product variant when true.\"),\n }),\n (i) => client.amazon.search(i)\n ),\n tool(\n \"AMAZON_PRODUCT\",\n \"Scavio Amazon Product\",\n \"Fetch full Amazon product details by ASIN.\",\n z.object({\n asin: str(\"Amazon Standard Identification Number (ASIN) of the product.\"),\n domain: ostr(\"Amazon domain, e.g. 'amazon.com'.\"),\n country: ostr(\"Two-letter country code.\"),\n language: ostr(\"Two-letter language code.\"),\n currency: ostr(\"Currency code, e.g. 'USD'.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n zip_code: ostr(\"Delivery ZIP/postal code.\"),\n autoselect_variant: obool(\"Auto-select the best product variant when true.\"),\n }),\n (i) => client.amazon.product(i)\n )\n );\n }\n\n if (all || enableWalmart) {\n tools.push(\n tool(\n \"WALMART_SEARCH\",\n \"Scavio Walmart Search\",\n \"Search Walmart for products matching a query.\",\n z.object({\n query: str(\"The product search query.\"),\n domain: ostr(\"Walmart domain.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n sort_by: ostr(\"Sort order for results.\"),\n start_page: onum(\"First page to return.\"),\n min_price: onum(\"Minimum price filter.\"),\n max_price: onum(\"Maximum price filter.\"),\n fulfillment_speed: ostr(\"Fulfillment speed filter.\"),\n fulfillment_type: ostr(\"Fulfillment type filter.\"),\n delivery_zip: ostr(\"Delivery ZIP/postal code.\"),\n store_id: ostr(\"Restrict to a store id.\"),\n }),\n (i) => client.walmart.search(i)\n ),\n tool(\n \"WALMART_PRODUCT\",\n \"Scavio Walmart Product\",\n \"Fetch full Walmart product details by product id.\",\n z.object({\n product_id: str(\"Walmart product id.\"),\n domain: ostr(\"Walmart domain.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n delivery_zip: ostr(\"Delivery ZIP/postal code.\"),\n store_id: ostr(\"Restrict to a store id.\"),\n }),\n (i) => client.walmart.product(i)\n )\n );\n }\n\n if (all || enableYoutube) {\n tools.push(\n tool(\n \"YOUTUBE_SEARCH\",\n \"Scavio YouTube Search\",\n \"Search YouTube for videos, channels, or playlists.\",\n z.object({\n query: str(\"The video search query.\"),\n upload_date: ostr(\"Upload date filter, e.g. 'today', 'week', 'month'.\"),\n type: ostr(\"Result type, e.g. 'video', 'channel', 'playlist'.\"),\n duration: ostr(\"Duration filter, e.g. 'short', 'long'.\"),\n sort_by: ostr(\"Sort order for results.\"),\n hd: obool(\"Restrict to HD videos when true.\"),\n subtitles: obool(\"Restrict to videos with subtitles when true.\"),\n creative_commons: obool(\"Restrict to Creative Commons videos when true.\"),\n live: obool(\"Restrict to live videos when true.\"),\n }),\n (i) => client.youtube.search(i)\n ),\n tool(\n \"YOUTUBE_METADATA\",\n \"Scavio YouTube Metadata\",\n \"Fetch metadata for a YouTube video by id.\",\n z.object({ video_id: str(\"YouTube video id.\") }),\n (i) => client.youtube.metadata(i)\n )\n );\n }\n\n if (all || enableReddit) {\n tools.push(\n tool(\n \"REDDIT_SEARCH\",\n \"Scavio Reddit Search\",\n \"Search Reddit posts, subreddits, or users.\",\n z.object({\n query: str(\"The Reddit search query.\"),\n type: ostr(\"Search type, e.g. 'posts', 'subreddits', 'users'.\"),\n sort: ostr(\"Sort order, e.g. 'relevance', 'new', 'top'.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.reddit.search(i)\n ),\n tool(\n \"REDDIT_POST\",\n \"Scavio Reddit Post\",\n \"Fetch a Reddit post and its comment thread by URL.\",\n z.object({ url: str(\"Full URL of the Reddit post to fetch with its comments.\") }),\n (i) => client.reddit.post(i)\n )\n );\n }\n\n if (all || enableTiktok) {\n tools.push(\n tool(\n \"TIKTOK_PROFILE\",\n \"Scavio TikTok Profile\",\n \"Fetch a TikTok user profile by username or secUid.\",\n z.object({\n username: ostr(\"TikTok username (without @). Provide this or sec_user_id.\"),\n sec_user_id: ostr(\"TikTok secUid. Provide this or username.\"),\n }),\n (i) => client.tiktok.profile(i)\n ),\n tool(\n \"TIKTOK_USER_POSTS\",\n \"Scavio TikTok User Posts\",\n \"List a TikTok user's posts by secUid.\",\n z.object({\n sec_user_id: str(\"TikTok secUid of the user.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of posts to return.\"),\n sort_type: ostr(\"Sort order for posts.\"),\n }),\n (i) => client.tiktok.userPosts(i)\n ),\n tool(\n \"TIKTOK_VIDEO\",\n \"Scavio TikTok Video\",\n \"Fetch a TikTok video by id.\",\n z.object({ video_id: str(\"TikTok video id.\") }),\n (i) => client.tiktok.video(i)\n ),\n tool(\n \"TIKTOK_VIDEO_COMMENTS\",\n \"Scavio TikTok Video Comments\",\n \"List comments on a TikTok video.\",\n z.object({\n video_id: str(\"TikTok video id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of comments to return.\"),\n }),\n (i) => client.tiktok.videoComments(i)\n ),\n tool(\n \"TIKTOK_COMMENT_REPLIES\",\n \"Scavio TikTok Comment Replies\",\n \"List replies to a TikTok video comment.\",\n z.object({\n video_id: str(\"TikTok video id.\"),\n comment_id: str(\"Parent comment id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of replies to return.\"),\n }),\n (i) => client.tiktok.commentReplies(i)\n ),\n tool(\n \"TIKTOK_SEARCH_VIDEOS\",\n \"Scavio TikTok Search Videos\",\n \"Search TikTok videos by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of videos to return.\"),\n sort_type: ostr(\"Sort order for results.\"),\n publish_time: ostr(\"Publish-time filter.\"),\n }),\n (i) => client.tiktok.searchVideos(i)\n ),\n tool(\n \"TIKTOK_SEARCH_USERS\",\n \"Scavio TikTok Search Users\",\n \"Search TikTok users by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of users to return.\"),\n }),\n (i) => client.tiktok.searchUsers(i)\n ),\n tool(\n \"TIKTOK_HASHTAG\",\n \"Scavio TikTok Hashtag\",\n \"Fetch a TikTok hashtag by name or id.\",\n z.object({\n hashtag_name: ostr(\"Hashtag name (without #). Provide this or hashtag_id.\"),\n hashtag_id: ostr(\"Hashtag id. Provide this or hashtag_name.\"),\n }),\n (i) => client.tiktok.hashtag(i)\n ),\n tool(\n \"TIKTOK_HASHTAG_VIDEOS\",\n \"Scavio TikTok Hashtag Videos\",\n \"List videos for a TikTok hashtag by id.\",\n z.object({\n hashtag_id: str(\"Hashtag id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of videos to return.\"),\n }),\n (i) => client.tiktok.hashtagVideos(i)\n ),\n tool(\n \"TIKTOK_USER_FOLLOWERS\",\n \"Scavio TikTok User Followers\",\n \"List a TikTok user's followers by secUid.\",\n z.object({\n sec_user_id: str(\"TikTok secUid of the user.\"),\n count: onum(\"Number of followers to return.\"),\n page_token: ostr(\"Pagination token.\"),\n min_time: onum(\"Minimum timestamp filter.\"),\n }),\n (i) => client.tiktok.userFollowers(i)\n ),\n tool(\n \"TIKTOK_USER_FOLLOWINGS\",\n \"Scavio TikTok User Followings\",\n \"List the accounts a TikTok user follows, by secUid.\",\n z.object({\n sec_user_id: str(\"TikTok secUid of the user.\"),\n count: onum(\"Number of followings to return.\"),\n page_token: ostr(\"Pagination token.\"),\n min_time: onum(\"Minimum timestamp filter.\"),\n }),\n (i) => client.tiktok.userFollowings(i)\n )\n );\n }\n\n if (all || enableInstagram) {\n tools.push(\n tool(\n \"INSTAGRAM_PROFILE\",\n \"Scavio Instagram Profile\",\n \"Fetch an Instagram profile by username or user id.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n }),\n (i) => client.instagram.profile(i)\n ),\n tool(\n \"INSTAGRAM_USER_POSTS\",\n \"Scavio Instagram User Posts\",\n \"List an Instagram user's posts.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of posts to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userPosts(i)\n ),\n tool(\n \"INSTAGRAM_USER_REELS\",\n \"Scavio Instagram User Reels\",\n \"List an Instagram user's reels.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of reels to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userReels(i)\n ),\n tool(\n \"INSTAGRAM_USER_TAGGED\",\n \"Scavio Instagram User Tagged\",\n \"List posts an Instagram user is tagged in.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of tagged posts to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userTagged(i)\n ),\n tool(\n \"INSTAGRAM_USER_STORIES\",\n \"Scavio Instagram User Stories\",\n \"Fetch an Instagram user's current stories.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n }),\n (i) => client.instagram.userStories(i)\n ),\n tool(\n \"INSTAGRAM_POST\",\n \"Scavio Instagram Post\",\n \"Fetch an Instagram post by URL, media id, or shortcode.\",\n z.object({\n url: ostr(\"Post URL. Provide one of url, media_id, or shortcode.\"),\n media_id: ostr(\"Post media id. Provide one of url, media_id, or shortcode.\"),\n shortcode: ostr(\"Post shortcode. Provide one of url, media_id, or shortcode.\"),\n }),\n (i) => client.instagram.post(i)\n ),\n tool(\n \"INSTAGRAM_POST_COMMENTS\",\n \"Scavio Instagram Post Comments\",\n \"List comments on an Instagram post by shortcode or URL.\",\n z.object({\n shortcode: ostr(\"Post shortcode. Provide this or url.\"),\n url: ostr(\"Post URL. Provide this or shortcode.\"),\n cursor: ostr(\"Pagination cursor.\"),\n sort_order: ostr(\"Comment sort order.\"),\n }),\n (i) => client.instagram.postComments(i)\n ),\n tool(\n \"INSTAGRAM_COMMENT_REPLIES\",\n \"Scavio Instagram Comment Replies\",\n \"List replies to an Instagram post comment.\",\n z.object({\n media_id: str(\"Post media id.\"),\n comment_id: str(\"Parent comment id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.commentReplies(i)\n ),\n tool(\n \"INSTAGRAM_SEARCH_USERS\",\n \"Scavio Instagram Search Users\",\n \"Search Instagram users by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.searchUsers(i)\n ),\n tool(\n \"INSTAGRAM_SEARCH_HASHTAGS\",\n \"Scavio Instagram Search Hashtags\",\n \"Search Instagram hashtags by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.searchHashtags(i)\n ),\n tool(\n \"INSTAGRAM_USER_FOLLOWERS\",\n \"Scavio Instagram User Followers\",\n \"List an Instagram user's followers.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of followers to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userFollowers(i)\n ),\n tool(\n \"INSTAGRAM_USER_FOLLOWINGS\",\n \"Scavio Instagram User Followings\",\n \"List the accounts an Instagram user follows.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of followings to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userFollowings(i)\n )\n );\n }\n\n return experimental_createToolkit(\"SCAVIO\", {\n name: \"Scavio\",\n description:\n \"Real-time structured search over Google, YouTube, Amazon, Walmart, Reddit, TikTok, and Instagram.\",\n tools,\n });\n}\n\nexport default buildScavioToolkit;\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as _composio_core from '@composio/core';
|
|
2
|
+
|
|
3
|
+
interface BuildScavioToolkitOptions {
|
|
4
|
+
/** Scavio API key. Falls back to the SCAVIO_API_KEY env var. */
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
enableGoogle?: boolean;
|
|
7
|
+
enableAmazon?: boolean;
|
|
8
|
+
enableWalmart?: boolean;
|
|
9
|
+
enableYoutube?: boolean;
|
|
10
|
+
enableReddit?: boolean;
|
|
11
|
+
enableTiktok?: boolean;
|
|
12
|
+
enableInstagram?: boolean;
|
|
13
|
+
/** Register every tool, ignoring the individual flags. */
|
|
14
|
+
all?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build a Composio custom toolkit exposing Scavio search tools.
|
|
18
|
+
*
|
|
19
|
+
* Scavio is a single Search API over Google, YouTube, Amazon, Walmart, Reddit,
|
|
20
|
+
* TikTok, and Instagram. Pass to `composio.create(userId, { experimental:
|
|
21
|
+
* { customToolkits: [toolkit] } })`. Agent-facing slugs are prefixed `LOCAL_SCAVIO_`.
|
|
22
|
+
*/
|
|
23
|
+
declare function buildScavioToolkit(options?: BuildScavioToolkitOptions): _composio_core.CustomToolkit;
|
|
24
|
+
|
|
25
|
+
export { type BuildScavioToolkitOptions, buildScavioToolkit, buildScavioToolkit as default };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as _composio_core from '@composio/core';
|
|
2
|
+
|
|
3
|
+
interface BuildScavioToolkitOptions {
|
|
4
|
+
/** Scavio API key. Falls back to the SCAVIO_API_KEY env var. */
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
enableGoogle?: boolean;
|
|
7
|
+
enableAmazon?: boolean;
|
|
8
|
+
enableWalmart?: boolean;
|
|
9
|
+
enableYoutube?: boolean;
|
|
10
|
+
enableReddit?: boolean;
|
|
11
|
+
enableTiktok?: boolean;
|
|
12
|
+
enableInstagram?: boolean;
|
|
13
|
+
/** Register every tool, ignoring the individual flags. */
|
|
14
|
+
all?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build a Composio custom toolkit exposing Scavio search tools.
|
|
18
|
+
*
|
|
19
|
+
* Scavio is a single Search API over Google, YouTube, Amazon, Walmart, Reddit,
|
|
20
|
+
* TikTok, and Instagram. Pass to `composio.create(userId, { experimental:
|
|
21
|
+
* { customToolkits: [toolkit] } })`. Agent-facing slugs are prefixed `LOCAL_SCAVIO_`.
|
|
22
|
+
*/
|
|
23
|
+
declare function buildScavioToolkit(options?: BuildScavioToolkitOptions): _composio_core.CustomToolkit;
|
|
24
|
+
|
|
25
|
+
export { type BuildScavioToolkitOptions, buildScavioToolkit, buildScavioToolkit as default };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import {
|
|
3
|
+
experimental_createTool,
|
|
4
|
+
experimental_createToolkit
|
|
5
|
+
} from "@composio/core";
|
|
6
|
+
import { Scavio } from "scavio";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
var str = (d) => z.string().describe(d);
|
|
9
|
+
var ostr = (d) => z.string().optional().describe(d);
|
|
10
|
+
var onum = (d) => z.number().optional().describe(d);
|
|
11
|
+
var obool = (d) => z.boolean().optional().describe(d);
|
|
12
|
+
function buildScavioToolkit(options = {}) {
|
|
13
|
+
const {
|
|
14
|
+
apiKey,
|
|
15
|
+
enableGoogle = true,
|
|
16
|
+
enableAmazon = true,
|
|
17
|
+
enableWalmart = true,
|
|
18
|
+
enableYoutube = true,
|
|
19
|
+
enableReddit = true,
|
|
20
|
+
enableTiktok = true,
|
|
21
|
+
enableInstagram = true,
|
|
22
|
+
all = false
|
|
23
|
+
} = options;
|
|
24
|
+
const client = new Scavio({ apiKey: apiKey ?? process.env.SCAVIO_API_KEY });
|
|
25
|
+
function tool(slug, name, description, inputParams, call) {
|
|
26
|
+
return experimental_createTool(slug, {
|
|
27
|
+
name,
|
|
28
|
+
description,
|
|
29
|
+
inputParams,
|
|
30
|
+
execute: async (input) => call(input)
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const tools = [];
|
|
34
|
+
if (all || enableGoogle) {
|
|
35
|
+
tools.push(
|
|
36
|
+
tool(
|
|
37
|
+
"GOOGLE_SEARCH",
|
|
38
|
+
"Scavio Google Search",
|
|
39
|
+
"Search Google for real-time web results (organic, knowledge graph, news, and more).",
|
|
40
|
+
z.object({
|
|
41
|
+
query: str("The search query."),
|
|
42
|
+
country_code: ostr("Two-letter country code, e.g. 'us'."),
|
|
43
|
+
language: ostr("Two-letter language code, e.g. 'en'."),
|
|
44
|
+
page: onum("Result page number (1-based)."),
|
|
45
|
+
search_type: ostr("Search vertical, e.g. 'search', 'news', 'images'."),
|
|
46
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
47
|
+
nfpr: obool("Disable auto-correction of the query when true."),
|
|
48
|
+
light_request: obool("Cheaper, lighter response (1 credit instead of 2) when true.")
|
|
49
|
+
}),
|
|
50
|
+
(i) => client.google.search(i)
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
if (all || enableAmazon) {
|
|
55
|
+
tools.push(
|
|
56
|
+
tool(
|
|
57
|
+
"AMAZON_SEARCH",
|
|
58
|
+
"Scavio Amazon Search",
|
|
59
|
+
"Search Amazon for products matching a query.",
|
|
60
|
+
z.object({
|
|
61
|
+
query: str("The product search query."),
|
|
62
|
+
domain: ostr("Amazon domain, e.g. 'amazon.com'."),
|
|
63
|
+
country: ostr("Two-letter country code."),
|
|
64
|
+
language: ostr("Two-letter language code."),
|
|
65
|
+
currency: ostr("Currency code, e.g. 'USD'."),
|
|
66
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
67
|
+
sort_by: ostr("Sort order for results."),
|
|
68
|
+
start_page: onum("First page to return."),
|
|
69
|
+
pages: onum("Number of pages to return."),
|
|
70
|
+
category_id: ostr("Restrict to an Amazon category id."),
|
|
71
|
+
merchant_id: ostr("Restrict to a merchant id."),
|
|
72
|
+
zip_code: ostr("Delivery ZIP/postal code."),
|
|
73
|
+
autoselect_variant: obool("Auto-select the best product variant when true.")
|
|
74
|
+
}),
|
|
75
|
+
(i) => client.amazon.search(i)
|
|
76
|
+
),
|
|
77
|
+
tool(
|
|
78
|
+
"AMAZON_PRODUCT",
|
|
79
|
+
"Scavio Amazon Product",
|
|
80
|
+
"Fetch full Amazon product details by ASIN.",
|
|
81
|
+
z.object({
|
|
82
|
+
asin: str("Amazon Standard Identification Number (ASIN) of the product."),
|
|
83
|
+
domain: ostr("Amazon domain, e.g. 'amazon.com'."),
|
|
84
|
+
country: ostr("Two-letter country code."),
|
|
85
|
+
language: ostr("Two-letter language code."),
|
|
86
|
+
currency: ostr("Currency code, e.g. 'USD'."),
|
|
87
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
88
|
+
zip_code: ostr("Delivery ZIP/postal code."),
|
|
89
|
+
autoselect_variant: obool("Auto-select the best product variant when true.")
|
|
90
|
+
}),
|
|
91
|
+
(i) => client.amazon.product(i)
|
|
92
|
+
)
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
if (all || enableWalmart) {
|
|
96
|
+
tools.push(
|
|
97
|
+
tool(
|
|
98
|
+
"WALMART_SEARCH",
|
|
99
|
+
"Scavio Walmart Search",
|
|
100
|
+
"Search Walmart for products matching a query.",
|
|
101
|
+
z.object({
|
|
102
|
+
query: str("The product search query."),
|
|
103
|
+
domain: ostr("Walmart domain."),
|
|
104
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
105
|
+
sort_by: ostr("Sort order for results."),
|
|
106
|
+
start_page: onum("First page to return."),
|
|
107
|
+
min_price: onum("Minimum price filter."),
|
|
108
|
+
max_price: onum("Maximum price filter."),
|
|
109
|
+
fulfillment_speed: ostr("Fulfillment speed filter."),
|
|
110
|
+
fulfillment_type: ostr("Fulfillment type filter."),
|
|
111
|
+
delivery_zip: ostr("Delivery ZIP/postal code."),
|
|
112
|
+
store_id: ostr("Restrict to a store id.")
|
|
113
|
+
}),
|
|
114
|
+
(i) => client.walmart.search(i)
|
|
115
|
+
),
|
|
116
|
+
tool(
|
|
117
|
+
"WALMART_PRODUCT",
|
|
118
|
+
"Scavio Walmart Product",
|
|
119
|
+
"Fetch full Walmart product details by product id.",
|
|
120
|
+
z.object({
|
|
121
|
+
product_id: str("Walmart product id."),
|
|
122
|
+
domain: ostr("Walmart domain."),
|
|
123
|
+
device: ostr("Device profile: 'desktop' or 'mobile'."),
|
|
124
|
+
delivery_zip: ostr("Delivery ZIP/postal code."),
|
|
125
|
+
store_id: ostr("Restrict to a store id.")
|
|
126
|
+
}),
|
|
127
|
+
(i) => client.walmart.product(i)
|
|
128
|
+
)
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
if (all || enableYoutube) {
|
|
132
|
+
tools.push(
|
|
133
|
+
tool(
|
|
134
|
+
"YOUTUBE_SEARCH",
|
|
135
|
+
"Scavio YouTube Search",
|
|
136
|
+
"Search YouTube for videos, channels, or playlists.",
|
|
137
|
+
z.object({
|
|
138
|
+
query: str("The video search query."),
|
|
139
|
+
upload_date: ostr("Upload date filter, e.g. 'today', 'week', 'month'."),
|
|
140
|
+
type: ostr("Result type, e.g. 'video', 'channel', 'playlist'."),
|
|
141
|
+
duration: ostr("Duration filter, e.g. 'short', 'long'."),
|
|
142
|
+
sort_by: ostr("Sort order for results."),
|
|
143
|
+
hd: obool("Restrict to HD videos when true."),
|
|
144
|
+
subtitles: obool("Restrict to videos with subtitles when true."),
|
|
145
|
+
creative_commons: obool("Restrict to Creative Commons videos when true."),
|
|
146
|
+
live: obool("Restrict to live videos when true.")
|
|
147
|
+
}),
|
|
148
|
+
(i) => client.youtube.search(i)
|
|
149
|
+
),
|
|
150
|
+
tool(
|
|
151
|
+
"YOUTUBE_METADATA",
|
|
152
|
+
"Scavio YouTube Metadata",
|
|
153
|
+
"Fetch metadata for a YouTube video by id.",
|
|
154
|
+
z.object({ video_id: str("YouTube video id.") }),
|
|
155
|
+
(i) => client.youtube.metadata(i)
|
|
156
|
+
)
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
if (all || enableReddit) {
|
|
160
|
+
tools.push(
|
|
161
|
+
tool(
|
|
162
|
+
"REDDIT_SEARCH",
|
|
163
|
+
"Scavio Reddit Search",
|
|
164
|
+
"Search Reddit posts, subreddits, or users.",
|
|
165
|
+
z.object({
|
|
166
|
+
query: str("The Reddit search query."),
|
|
167
|
+
type: ostr("Search type, e.g. 'posts', 'subreddits', 'users'."),
|
|
168
|
+
sort: ostr("Sort order, e.g. 'relevance', 'new', 'top'."),
|
|
169
|
+
cursor: ostr("Pagination cursor.")
|
|
170
|
+
}),
|
|
171
|
+
(i) => client.reddit.search(i)
|
|
172
|
+
),
|
|
173
|
+
tool(
|
|
174
|
+
"REDDIT_POST",
|
|
175
|
+
"Scavio Reddit Post",
|
|
176
|
+
"Fetch a Reddit post and its comment thread by URL.",
|
|
177
|
+
z.object({ url: str("Full URL of the Reddit post to fetch with its comments.") }),
|
|
178
|
+
(i) => client.reddit.post(i)
|
|
179
|
+
)
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
if (all || enableTiktok) {
|
|
183
|
+
tools.push(
|
|
184
|
+
tool(
|
|
185
|
+
"TIKTOK_PROFILE",
|
|
186
|
+
"Scavio TikTok Profile",
|
|
187
|
+
"Fetch a TikTok user profile by username or secUid.",
|
|
188
|
+
z.object({
|
|
189
|
+
username: ostr("TikTok username (without @). Provide this or sec_user_id."),
|
|
190
|
+
sec_user_id: ostr("TikTok secUid. Provide this or username.")
|
|
191
|
+
}),
|
|
192
|
+
(i) => client.tiktok.profile(i)
|
|
193
|
+
),
|
|
194
|
+
tool(
|
|
195
|
+
"TIKTOK_USER_POSTS",
|
|
196
|
+
"Scavio TikTok User Posts",
|
|
197
|
+
"List a TikTok user's posts by secUid.",
|
|
198
|
+
z.object({
|
|
199
|
+
sec_user_id: str("TikTok secUid of the user."),
|
|
200
|
+
cursor: ostr("Pagination cursor."),
|
|
201
|
+
count: onum("Number of posts to return."),
|
|
202
|
+
sort_type: ostr("Sort order for posts.")
|
|
203
|
+
}),
|
|
204
|
+
(i) => client.tiktok.userPosts(i)
|
|
205
|
+
),
|
|
206
|
+
tool(
|
|
207
|
+
"TIKTOK_VIDEO",
|
|
208
|
+
"Scavio TikTok Video",
|
|
209
|
+
"Fetch a TikTok video by id.",
|
|
210
|
+
z.object({ video_id: str("TikTok video id.") }),
|
|
211
|
+
(i) => client.tiktok.video(i)
|
|
212
|
+
),
|
|
213
|
+
tool(
|
|
214
|
+
"TIKTOK_VIDEO_COMMENTS",
|
|
215
|
+
"Scavio TikTok Video Comments",
|
|
216
|
+
"List comments on a TikTok video.",
|
|
217
|
+
z.object({
|
|
218
|
+
video_id: str("TikTok video id."),
|
|
219
|
+
cursor: ostr("Pagination cursor."),
|
|
220
|
+
count: onum("Number of comments to return.")
|
|
221
|
+
}),
|
|
222
|
+
(i) => client.tiktok.videoComments(i)
|
|
223
|
+
),
|
|
224
|
+
tool(
|
|
225
|
+
"TIKTOK_COMMENT_REPLIES",
|
|
226
|
+
"Scavio TikTok Comment Replies",
|
|
227
|
+
"List replies to a TikTok video comment.",
|
|
228
|
+
z.object({
|
|
229
|
+
video_id: str("TikTok video id."),
|
|
230
|
+
comment_id: str("Parent comment id."),
|
|
231
|
+
cursor: ostr("Pagination cursor."),
|
|
232
|
+
count: onum("Number of replies to return.")
|
|
233
|
+
}),
|
|
234
|
+
(i) => client.tiktok.commentReplies(i)
|
|
235
|
+
),
|
|
236
|
+
tool(
|
|
237
|
+
"TIKTOK_SEARCH_VIDEOS",
|
|
238
|
+
"Scavio TikTok Search Videos",
|
|
239
|
+
"Search TikTok videos by keyword.",
|
|
240
|
+
z.object({
|
|
241
|
+
keyword: str("Search keyword."),
|
|
242
|
+
cursor: ostr("Pagination cursor."),
|
|
243
|
+
count: onum("Number of videos to return."),
|
|
244
|
+
sort_type: ostr("Sort order for results."),
|
|
245
|
+
publish_time: ostr("Publish-time filter.")
|
|
246
|
+
}),
|
|
247
|
+
(i) => client.tiktok.searchVideos(i)
|
|
248
|
+
),
|
|
249
|
+
tool(
|
|
250
|
+
"TIKTOK_SEARCH_USERS",
|
|
251
|
+
"Scavio TikTok Search Users",
|
|
252
|
+
"Search TikTok users by keyword.",
|
|
253
|
+
z.object({
|
|
254
|
+
keyword: str("Search keyword."),
|
|
255
|
+
cursor: ostr("Pagination cursor."),
|
|
256
|
+
count: onum("Number of users to return.")
|
|
257
|
+
}),
|
|
258
|
+
(i) => client.tiktok.searchUsers(i)
|
|
259
|
+
),
|
|
260
|
+
tool(
|
|
261
|
+
"TIKTOK_HASHTAG",
|
|
262
|
+
"Scavio TikTok Hashtag",
|
|
263
|
+
"Fetch a TikTok hashtag by name or id.",
|
|
264
|
+
z.object({
|
|
265
|
+
hashtag_name: ostr("Hashtag name (without #). Provide this or hashtag_id."),
|
|
266
|
+
hashtag_id: ostr("Hashtag id. Provide this or hashtag_name.")
|
|
267
|
+
}),
|
|
268
|
+
(i) => client.tiktok.hashtag(i)
|
|
269
|
+
),
|
|
270
|
+
tool(
|
|
271
|
+
"TIKTOK_HASHTAG_VIDEOS",
|
|
272
|
+
"Scavio TikTok Hashtag Videos",
|
|
273
|
+
"List videos for a TikTok hashtag by id.",
|
|
274
|
+
z.object({
|
|
275
|
+
hashtag_id: str("Hashtag id."),
|
|
276
|
+
cursor: ostr("Pagination cursor."),
|
|
277
|
+
count: onum("Number of videos to return.")
|
|
278
|
+
}),
|
|
279
|
+
(i) => client.tiktok.hashtagVideos(i)
|
|
280
|
+
),
|
|
281
|
+
tool(
|
|
282
|
+
"TIKTOK_USER_FOLLOWERS",
|
|
283
|
+
"Scavio TikTok User Followers",
|
|
284
|
+
"List a TikTok user's followers by secUid.",
|
|
285
|
+
z.object({
|
|
286
|
+
sec_user_id: str("TikTok secUid of the user."),
|
|
287
|
+
count: onum("Number of followers to return."),
|
|
288
|
+
page_token: ostr("Pagination token."),
|
|
289
|
+
min_time: onum("Minimum timestamp filter.")
|
|
290
|
+
}),
|
|
291
|
+
(i) => client.tiktok.userFollowers(i)
|
|
292
|
+
),
|
|
293
|
+
tool(
|
|
294
|
+
"TIKTOK_USER_FOLLOWINGS",
|
|
295
|
+
"Scavio TikTok User Followings",
|
|
296
|
+
"List the accounts a TikTok user follows, by secUid.",
|
|
297
|
+
z.object({
|
|
298
|
+
sec_user_id: str("TikTok secUid of the user."),
|
|
299
|
+
count: onum("Number of followings to return."),
|
|
300
|
+
page_token: ostr("Pagination token."),
|
|
301
|
+
min_time: onum("Minimum timestamp filter.")
|
|
302
|
+
}),
|
|
303
|
+
(i) => client.tiktok.userFollowings(i)
|
|
304
|
+
)
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
if (all || enableInstagram) {
|
|
308
|
+
tools.push(
|
|
309
|
+
tool(
|
|
310
|
+
"INSTAGRAM_PROFILE",
|
|
311
|
+
"Scavio Instagram Profile",
|
|
312
|
+
"Fetch an Instagram profile by username or user id.",
|
|
313
|
+
z.object({
|
|
314
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
315
|
+
user_id: ostr("Instagram user id. Provide this or username.")
|
|
316
|
+
}),
|
|
317
|
+
(i) => client.instagram.profile(i)
|
|
318
|
+
),
|
|
319
|
+
tool(
|
|
320
|
+
"INSTAGRAM_USER_POSTS",
|
|
321
|
+
"Scavio Instagram User Posts",
|
|
322
|
+
"List an Instagram user's posts.",
|
|
323
|
+
z.object({
|
|
324
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
325
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
326
|
+
count: onum("Number of posts to return."),
|
|
327
|
+
cursor: ostr("Pagination cursor.")
|
|
328
|
+
}),
|
|
329
|
+
(i) => client.instagram.userPosts(i)
|
|
330
|
+
),
|
|
331
|
+
tool(
|
|
332
|
+
"INSTAGRAM_USER_REELS",
|
|
333
|
+
"Scavio Instagram User Reels",
|
|
334
|
+
"List an Instagram user's reels.",
|
|
335
|
+
z.object({
|
|
336
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
337
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
338
|
+
count: onum("Number of reels to return."),
|
|
339
|
+
cursor: ostr("Pagination cursor.")
|
|
340
|
+
}),
|
|
341
|
+
(i) => client.instagram.userReels(i)
|
|
342
|
+
),
|
|
343
|
+
tool(
|
|
344
|
+
"INSTAGRAM_USER_TAGGED",
|
|
345
|
+
"Scavio Instagram User Tagged",
|
|
346
|
+
"List posts an Instagram user is tagged in.",
|
|
347
|
+
z.object({
|
|
348
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
349
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
350
|
+
count: onum("Number of tagged posts to return."),
|
|
351
|
+
cursor: ostr("Pagination cursor.")
|
|
352
|
+
}),
|
|
353
|
+
(i) => client.instagram.userTagged(i)
|
|
354
|
+
),
|
|
355
|
+
tool(
|
|
356
|
+
"INSTAGRAM_USER_STORIES",
|
|
357
|
+
"Scavio Instagram User Stories",
|
|
358
|
+
"Fetch an Instagram user's current stories.",
|
|
359
|
+
z.object({
|
|
360
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
361
|
+
user_id: ostr("Instagram user id. Provide this or username.")
|
|
362
|
+
}),
|
|
363
|
+
(i) => client.instagram.userStories(i)
|
|
364
|
+
),
|
|
365
|
+
tool(
|
|
366
|
+
"INSTAGRAM_POST",
|
|
367
|
+
"Scavio Instagram Post",
|
|
368
|
+
"Fetch an Instagram post by URL, media id, or shortcode.",
|
|
369
|
+
z.object({
|
|
370
|
+
url: ostr("Post URL. Provide one of url, media_id, or shortcode."),
|
|
371
|
+
media_id: ostr("Post media id. Provide one of url, media_id, or shortcode."),
|
|
372
|
+
shortcode: ostr("Post shortcode. Provide one of url, media_id, or shortcode.")
|
|
373
|
+
}),
|
|
374
|
+
(i) => client.instagram.post(i)
|
|
375
|
+
),
|
|
376
|
+
tool(
|
|
377
|
+
"INSTAGRAM_POST_COMMENTS",
|
|
378
|
+
"Scavio Instagram Post Comments",
|
|
379
|
+
"List comments on an Instagram post by shortcode or URL.",
|
|
380
|
+
z.object({
|
|
381
|
+
shortcode: ostr("Post shortcode. Provide this or url."),
|
|
382
|
+
url: ostr("Post URL. Provide this or shortcode."),
|
|
383
|
+
cursor: ostr("Pagination cursor."),
|
|
384
|
+
sort_order: ostr("Comment sort order.")
|
|
385
|
+
}),
|
|
386
|
+
(i) => client.instagram.postComments(i)
|
|
387
|
+
),
|
|
388
|
+
tool(
|
|
389
|
+
"INSTAGRAM_COMMENT_REPLIES",
|
|
390
|
+
"Scavio Instagram Comment Replies",
|
|
391
|
+
"List replies to an Instagram post comment.",
|
|
392
|
+
z.object({
|
|
393
|
+
media_id: str("Post media id."),
|
|
394
|
+
comment_id: str("Parent comment id."),
|
|
395
|
+
cursor: ostr("Pagination cursor.")
|
|
396
|
+
}),
|
|
397
|
+
(i) => client.instagram.commentReplies(i)
|
|
398
|
+
),
|
|
399
|
+
tool(
|
|
400
|
+
"INSTAGRAM_SEARCH_USERS",
|
|
401
|
+
"Scavio Instagram Search Users",
|
|
402
|
+
"Search Instagram users by keyword.",
|
|
403
|
+
z.object({
|
|
404
|
+
keyword: str("Search keyword."),
|
|
405
|
+
cursor: ostr("Pagination cursor.")
|
|
406
|
+
}),
|
|
407
|
+
(i) => client.instagram.searchUsers(i)
|
|
408
|
+
),
|
|
409
|
+
tool(
|
|
410
|
+
"INSTAGRAM_SEARCH_HASHTAGS",
|
|
411
|
+
"Scavio Instagram Search Hashtags",
|
|
412
|
+
"Search Instagram hashtags by keyword.",
|
|
413
|
+
z.object({
|
|
414
|
+
keyword: str("Search keyword."),
|
|
415
|
+
cursor: ostr("Pagination cursor.")
|
|
416
|
+
}),
|
|
417
|
+
(i) => client.instagram.searchHashtags(i)
|
|
418
|
+
),
|
|
419
|
+
tool(
|
|
420
|
+
"INSTAGRAM_USER_FOLLOWERS",
|
|
421
|
+
"Scavio Instagram User Followers",
|
|
422
|
+
"List an Instagram user's followers.",
|
|
423
|
+
z.object({
|
|
424
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
425
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
426
|
+
count: onum("Number of followers to return."),
|
|
427
|
+
cursor: ostr("Pagination cursor.")
|
|
428
|
+
}),
|
|
429
|
+
(i) => client.instagram.userFollowers(i)
|
|
430
|
+
),
|
|
431
|
+
tool(
|
|
432
|
+
"INSTAGRAM_USER_FOLLOWINGS",
|
|
433
|
+
"Scavio Instagram User Followings",
|
|
434
|
+
"List the accounts an Instagram user follows.",
|
|
435
|
+
z.object({
|
|
436
|
+
username: ostr("Instagram username. Provide this or user_id."),
|
|
437
|
+
user_id: ostr("Instagram user id. Provide this or username."),
|
|
438
|
+
count: onum("Number of followings to return."),
|
|
439
|
+
cursor: ostr("Pagination cursor.")
|
|
440
|
+
}),
|
|
441
|
+
(i) => client.instagram.userFollowings(i)
|
|
442
|
+
)
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
return experimental_createToolkit("SCAVIO", {
|
|
446
|
+
name: "Scavio",
|
|
447
|
+
description: "Real-time structured search over Google, YouTube, Amazon, Walmart, Reddit, TikTok, and Instagram.",
|
|
448
|
+
tools
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
var index_default = buildScavioToolkit;
|
|
452
|
+
export {
|
|
453
|
+
buildScavioToolkit,
|
|
454
|
+
index_default as default
|
|
455
|
+
};
|
|
456
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Scavio tools for Composio.\n *\n * Exposes the Scavio search API (Google, YouTube, Amazon, Walmart, Reddit, TikTok,\n * Instagram) as a Composio custom toolkit. Build it with `buildScavioToolkit()` and\n * bind it to a session:\n *\n * import { Composio } from \"@composio/core\";\n * import { buildScavioToolkit } from \"@scavio/composio\";\n *\n * const composio = new Composio();\n * const scavio = buildScavioToolkit({ apiKey: process.env.SCAVIO_API_KEY });\n * const session = await composio.create(\"user_1\", {\n * experimental: { customToolkits: [scavio] },\n * });\n * const out = await session.execute(\"LOCAL_SCAVIO_GOOGLE_SEARCH\", { query: \"ai agents\" });\n *\n * Each provider is gated by an `enable*` flag so an agent only sees the tools it needs.\n */\nimport {\n experimental_createTool,\n experimental_createToolkit,\n} from \"@composio/core\";\nimport { Scavio } from \"scavio\";\nimport { z } from \"zod\";\n\nexport interface BuildScavioToolkitOptions {\n /** Scavio API key. Falls back to the SCAVIO_API_KEY env var. */\n apiKey?: string;\n enableGoogle?: boolean;\n enableAmazon?: boolean;\n enableWalmart?: boolean;\n enableYoutube?: boolean;\n enableReddit?: boolean;\n enableTiktok?: boolean;\n enableInstagram?: boolean;\n /** Register every tool, ignoring the individual flags. */\n all?: boolean;\n}\n\nconst str = (d: string) => z.string().describe(d);\nconst ostr = (d: string) => z.string().optional().describe(d);\nconst onum = (d: string) => z.number().optional().describe(d);\nconst obool = (d: string) => z.boolean().optional().describe(d);\n\n/**\n * Build a Composio custom toolkit exposing Scavio search tools.\n *\n * Scavio is a single Search API over Google, YouTube, Amazon, Walmart, Reddit,\n * TikTok, and Instagram. Pass to `composio.create(userId, { experimental:\n * { customToolkits: [toolkit] } })`. Agent-facing slugs are prefixed `LOCAL_SCAVIO_`.\n */\nexport function buildScavioToolkit(options: BuildScavioToolkitOptions = {}) {\n const {\n apiKey,\n enableGoogle = true,\n enableAmazon = true,\n enableWalmart = true,\n enableYoutube = true,\n enableReddit = true,\n enableTiktok = true,\n enableInstagram = true,\n all = false,\n } = options;\n\n const client = new Scavio({ apiKey: apiKey ?? process.env.SCAVIO_API_KEY });\n\n function tool<T extends z.ZodTypeAny>(\n slug: string,\n name: string,\n description: string,\n inputParams: T,\n call: (input: z.infer<T>) => Promise<Record<string, unknown>>\n ) {\n return experimental_createTool(slug, {\n name,\n description,\n inputParams,\n execute: async (input: z.infer<T>) => call(input),\n });\n }\n\n const tools = [];\n\n if (all || enableGoogle) {\n tools.push(\n tool(\n \"GOOGLE_SEARCH\",\n \"Scavio Google Search\",\n \"Search Google for real-time web results (organic, knowledge graph, news, and more).\",\n z.object({\n query: str(\"The search query.\"),\n country_code: ostr(\"Two-letter country code, e.g. 'us'.\"),\n language: ostr(\"Two-letter language code, e.g. 'en'.\"),\n page: onum(\"Result page number (1-based).\"),\n search_type: ostr(\"Search vertical, e.g. 'search', 'news', 'images'.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n nfpr: obool(\"Disable auto-correction of the query when true.\"),\n light_request: obool(\"Cheaper, lighter response (1 credit instead of 2) when true.\"),\n }),\n (i) => client.google.search(i)\n )\n );\n }\n\n if (all || enableAmazon) {\n tools.push(\n tool(\n \"AMAZON_SEARCH\",\n \"Scavio Amazon Search\",\n \"Search Amazon for products matching a query.\",\n z.object({\n query: str(\"The product search query.\"),\n domain: ostr(\"Amazon domain, e.g. 'amazon.com'.\"),\n country: ostr(\"Two-letter country code.\"),\n language: ostr(\"Two-letter language code.\"),\n currency: ostr(\"Currency code, e.g. 'USD'.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n sort_by: ostr(\"Sort order for results.\"),\n start_page: onum(\"First page to return.\"),\n pages: onum(\"Number of pages to return.\"),\n category_id: ostr(\"Restrict to an Amazon category id.\"),\n merchant_id: ostr(\"Restrict to a merchant id.\"),\n zip_code: ostr(\"Delivery ZIP/postal code.\"),\n autoselect_variant: obool(\"Auto-select the best product variant when true.\"),\n }),\n (i) => client.amazon.search(i)\n ),\n tool(\n \"AMAZON_PRODUCT\",\n \"Scavio Amazon Product\",\n \"Fetch full Amazon product details by ASIN.\",\n z.object({\n asin: str(\"Amazon Standard Identification Number (ASIN) of the product.\"),\n domain: ostr(\"Amazon domain, e.g. 'amazon.com'.\"),\n country: ostr(\"Two-letter country code.\"),\n language: ostr(\"Two-letter language code.\"),\n currency: ostr(\"Currency code, e.g. 'USD'.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n zip_code: ostr(\"Delivery ZIP/postal code.\"),\n autoselect_variant: obool(\"Auto-select the best product variant when true.\"),\n }),\n (i) => client.amazon.product(i)\n )\n );\n }\n\n if (all || enableWalmart) {\n tools.push(\n tool(\n \"WALMART_SEARCH\",\n \"Scavio Walmart Search\",\n \"Search Walmart for products matching a query.\",\n z.object({\n query: str(\"The product search query.\"),\n domain: ostr(\"Walmart domain.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n sort_by: ostr(\"Sort order for results.\"),\n start_page: onum(\"First page to return.\"),\n min_price: onum(\"Minimum price filter.\"),\n max_price: onum(\"Maximum price filter.\"),\n fulfillment_speed: ostr(\"Fulfillment speed filter.\"),\n fulfillment_type: ostr(\"Fulfillment type filter.\"),\n delivery_zip: ostr(\"Delivery ZIP/postal code.\"),\n store_id: ostr(\"Restrict to a store id.\"),\n }),\n (i) => client.walmart.search(i)\n ),\n tool(\n \"WALMART_PRODUCT\",\n \"Scavio Walmart Product\",\n \"Fetch full Walmart product details by product id.\",\n z.object({\n product_id: str(\"Walmart product id.\"),\n domain: ostr(\"Walmart domain.\"),\n device: ostr(\"Device profile: 'desktop' or 'mobile'.\"),\n delivery_zip: ostr(\"Delivery ZIP/postal code.\"),\n store_id: ostr(\"Restrict to a store id.\"),\n }),\n (i) => client.walmart.product(i)\n )\n );\n }\n\n if (all || enableYoutube) {\n tools.push(\n tool(\n \"YOUTUBE_SEARCH\",\n \"Scavio YouTube Search\",\n \"Search YouTube for videos, channels, or playlists.\",\n z.object({\n query: str(\"The video search query.\"),\n upload_date: ostr(\"Upload date filter, e.g. 'today', 'week', 'month'.\"),\n type: ostr(\"Result type, e.g. 'video', 'channel', 'playlist'.\"),\n duration: ostr(\"Duration filter, e.g. 'short', 'long'.\"),\n sort_by: ostr(\"Sort order for results.\"),\n hd: obool(\"Restrict to HD videos when true.\"),\n subtitles: obool(\"Restrict to videos with subtitles when true.\"),\n creative_commons: obool(\"Restrict to Creative Commons videos when true.\"),\n live: obool(\"Restrict to live videos when true.\"),\n }),\n (i) => client.youtube.search(i)\n ),\n tool(\n \"YOUTUBE_METADATA\",\n \"Scavio YouTube Metadata\",\n \"Fetch metadata for a YouTube video by id.\",\n z.object({ video_id: str(\"YouTube video id.\") }),\n (i) => client.youtube.metadata(i)\n )\n );\n }\n\n if (all || enableReddit) {\n tools.push(\n tool(\n \"REDDIT_SEARCH\",\n \"Scavio Reddit Search\",\n \"Search Reddit posts, subreddits, or users.\",\n z.object({\n query: str(\"The Reddit search query.\"),\n type: ostr(\"Search type, e.g. 'posts', 'subreddits', 'users'.\"),\n sort: ostr(\"Sort order, e.g. 'relevance', 'new', 'top'.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.reddit.search(i)\n ),\n tool(\n \"REDDIT_POST\",\n \"Scavio Reddit Post\",\n \"Fetch a Reddit post and its comment thread by URL.\",\n z.object({ url: str(\"Full URL of the Reddit post to fetch with its comments.\") }),\n (i) => client.reddit.post(i)\n )\n );\n }\n\n if (all || enableTiktok) {\n tools.push(\n tool(\n \"TIKTOK_PROFILE\",\n \"Scavio TikTok Profile\",\n \"Fetch a TikTok user profile by username or secUid.\",\n z.object({\n username: ostr(\"TikTok username (without @). Provide this or sec_user_id.\"),\n sec_user_id: ostr(\"TikTok secUid. Provide this or username.\"),\n }),\n (i) => client.tiktok.profile(i)\n ),\n tool(\n \"TIKTOK_USER_POSTS\",\n \"Scavio TikTok User Posts\",\n \"List a TikTok user's posts by secUid.\",\n z.object({\n sec_user_id: str(\"TikTok secUid of the user.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of posts to return.\"),\n sort_type: ostr(\"Sort order for posts.\"),\n }),\n (i) => client.tiktok.userPosts(i)\n ),\n tool(\n \"TIKTOK_VIDEO\",\n \"Scavio TikTok Video\",\n \"Fetch a TikTok video by id.\",\n z.object({ video_id: str(\"TikTok video id.\") }),\n (i) => client.tiktok.video(i)\n ),\n tool(\n \"TIKTOK_VIDEO_COMMENTS\",\n \"Scavio TikTok Video Comments\",\n \"List comments on a TikTok video.\",\n z.object({\n video_id: str(\"TikTok video id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of comments to return.\"),\n }),\n (i) => client.tiktok.videoComments(i)\n ),\n tool(\n \"TIKTOK_COMMENT_REPLIES\",\n \"Scavio TikTok Comment Replies\",\n \"List replies to a TikTok video comment.\",\n z.object({\n video_id: str(\"TikTok video id.\"),\n comment_id: str(\"Parent comment id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of replies to return.\"),\n }),\n (i) => client.tiktok.commentReplies(i)\n ),\n tool(\n \"TIKTOK_SEARCH_VIDEOS\",\n \"Scavio TikTok Search Videos\",\n \"Search TikTok videos by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of videos to return.\"),\n sort_type: ostr(\"Sort order for results.\"),\n publish_time: ostr(\"Publish-time filter.\"),\n }),\n (i) => client.tiktok.searchVideos(i)\n ),\n tool(\n \"TIKTOK_SEARCH_USERS\",\n \"Scavio TikTok Search Users\",\n \"Search TikTok users by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of users to return.\"),\n }),\n (i) => client.tiktok.searchUsers(i)\n ),\n tool(\n \"TIKTOK_HASHTAG\",\n \"Scavio TikTok Hashtag\",\n \"Fetch a TikTok hashtag by name or id.\",\n z.object({\n hashtag_name: ostr(\"Hashtag name (without #). Provide this or hashtag_id.\"),\n hashtag_id: ostr(\"Hashtag id. Provide this or hashtag_name.\"),\n }),\n (i) => client.tiktok.hashtag(i)\n ),\n tool(\n \"TIKTOK_HASHTAG_VIDEOS\",\n \"Scavio TikTok Hashtag Videos\",\n \"List videos for a TikTok hashtag by id.\",\n z.object({\n hashtag_id: str(\"Hashtag id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n count: onum(\"Number of videos to return.\"),\n }),\n (i) => client.tiktok.hashtagVideos(i)\n ),\n tool(\n \"TIKTOK_USER_FOLLOWERS\",\n \"Scavio TikTok User Followers\",\n \"List a TikTok user's followers by secUid.\",\n z.object({\n sec_user_id: str(\"TikTok secUid of the user.\"),\n count: onum(\"Number of followers to return.\"),\n page_token: ostr(\"Pagination token.\"),\n min_time: onum(\"Minimum timestamp filter.\"),\n }),\n (i) => client.tiktok.userFollowers(i)\n ),\n tool(\n \"TIKTOK_USER_FOLLOWINGS\",\n \"Scavio TikTok User Followings\",\n \"List the accounts a TikTok user follows, by secUid.\",\n z.object({\n sec_user_id: str(\"TikTok secUid of the user.\"),\n count: onum(\"Number of followings to return.\"),\n page_token: ostr(\"Pagination token.\"),\n min_time: onum(\"Minimum timestamp filter.\"),\n }),\n (i) => client.tiktok.userFollowings(i)\n )\n );\n }\n\n if (all || enableInstagram) {\n tools.push(\n tool(\n \"INSTAGRAM_PROFILE\",\n \"Scavio Instagram Profile\",\n \"Fetch an Instagram profile by username or user id.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n }),\n (i) => client.instagram.profile(i)\n ),\n tool(\n \"INSTAGRAM_USER_POSTS\",\n \"Scavio Instagram User Posts\",\n \"List an Instagram user's posts.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of posts to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userPosts(i)\n ),\n tool(\n \"INSTAGRAM_USER_REELS\",\n \"Scavio Instagram User Reels\",\n \"List an Instagram user's reels.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of reels to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userReels(i)\n ),\n tool(\n \"INSTAGRAM_USER_TAGGED\",\n \"Scavio Instagram User Tagged\",\n \"List posts an Instagram user is tagged in.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of tagged posts to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userTagged(i)\n ),\n tool(\n \"INSTAGRAM_USER_STORIES\",\n \"Scavio Instagram User Stories\",\n \"Fetch an Instagram user's current stories.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n }),\n (i) => client.instagram.userStories(i)\n ),\n tool(\n \"INSTAGRAM_POST\",\n \"Scavio Instagram Post\",\n \"Fetch an Instagram post by URL, media id, or shortcode.\",\n z.object({\n url: ostr(\"Post URL. Provide one of url, media_id, or shortcode.\"),\n media_id: ostr(\"Post media id. Provide one of url, media_id, or shortcode.\"),\n shortcode: ostr(\"Post shortcode. Provide one of url, media_id, or shortcode.\"),\n }),\n (i) => client.instagram.post(i)\n ),\n tool(\n \"INSTAGRAM_POST_COMMENTS\",\n \"Scavio Instagram Post Comments\",\n \"List comments on an Instagram post by shortcode or URL.\",\n z.object({\n shortcode: ostr(\"Post shortcode. Provide this or url.\"),\n url: ostr(\"Post URL. Provide this or shortcode.\"),\n cursor: ostr(\"Pagination cursor.\"),\n sort_order: ostr(\"Comment sort order.\"),\n }),\n (i) => client.instagram.postComments(i)\n ),\n tool(\n \"INSTAGRAM_COMMENT_REPLIES\",\n \"Scavio Instagram Comment Replies\",\n \"List replies to an Instagram post comment.\",\n z.object({\n media_id: str(\"Post media id.\"),\n comment_id: str(\"Parent comment id.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.commentReplies(i)\n ),\n tool(\n \"INSTAGRAM_SEARCH_USERS\",\n \"Scavio Instagram Search Users\",\n \"Search Instagram users by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.searchUsers(i)\n ),\n tool(\n \"INSTAGRAM_SEARCH_HASHTAGS\",\n \"Scavio Instagram Search Hashtags\",\n \"Search Instagram hashtags by keyword.\",\n z.object({\n keyword: str(\"Search keyword.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.searchHashtags(i)\n ),\n tool(\n \"INSTAGRAM_USER_FOLLOWERS\",\n \"Scavio Instagram User Followers\",\n \"List an Instagram user's followers.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of followers to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userFollowers(i)\n ),\n tool(\n \"INSTAGRAM_USER_FOLLOWINGS\",\n \"Scavio Instagram User Followings\",\n \"List the accounts an Instagram user follows.\",\n z.object({\n username: ostr(\"Instagram username. Provide this or user_id.\"),\n user_id: ostr(\"Instagram user id. Provide this or username.\"),\n count: onum(\"Number of followings to return.\"),\n cursor: ostr(\"Pagination cursor.\"),\n }),\n (i) => client.instagram.userFollowings(i)\n )\n );\n }\n\n return experimental_createToolkit(\"SCAVIO\", {\n name: \"Scavio\",\n description:\n \"Real-time structured search over Google, YouTube, Amazon, Walmart, Reddit, TikTok, and Instagram.\",\n tools,\n });\n}\n\nexport default buildScavioToolkit;\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "composio-scavio",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Scavio real-time search tools for Composio (Google, YouTube, Amazon, Walmart, Reddit, TikTok, Instagram)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": ["dist", "README.md"],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsup",
|
|
24
|
+
"dev": "tsup --watch",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"prepublishOnly": "npm run build"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"composio",
|
|
33
|
+
"scavio",
|
|
34
|
+
"search",
|
|
35
|
+
"agents",
|
|
36
|
+
"tools",
|
|
37
|
+
"serp",
|
|
38
|
+
"google-search",
|
|
39
|
+
"tavily-alternative",
|
|
40
|
+
"serpapi-alternative"
|
|
41
|
+
],
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"author": "Scavio <support@scavio.dev>",
|
|
44
|
+
"homepage": "https://scavio.dev",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/scavio-ai/composio-scavio-js"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@composio/core": "^0.13.1",
|
|
54
|
+
"scavio": "^0.2.1",
|
|
55
|
+
"zod": "^3.25.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/node": "^20.0.0",
|
|
59
|
+
"tsup": "^8.0.0",
|
|
60
|
+
"typescript": "^5.5.0"
|
|
61
|
+
}
|
|
62
|
+
}
|