@keystrokehq/serpdog 0.1.0 → 0.1.3

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  Keystroke-managed integration.
4
4
 
5
5
  **App:** `serpdog`
6
- **Version:** `20260615_00`
6
+ **Version:** `20260707_00`
7
7
  **Actions:** 1
8
8
 
9
9
  ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"action.cjs","names":["serpdog","executeSerpdogTool"],"sources":["../src/action.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { serpdog } from \"./app\";\nimport { executeSerpdogTool } from \"./execute\";\n\n/** Bind one gateway tool to a typed app action; the call's output is parsed against `def.output`. */\nexport function action(\n tool: string,\n def: {\n slug: string;\n name: string;\n description: string;\n input: z.ZodTypeAny;\n output: z.ZodTypeAny;\n },\n) {\n return serpdog.action({\n slug: def.slug,\n name: def.name,\n description: def.description,\n input: def.input,\n output: def.output,\n async run(input) {\n return def.output.parse(await executeSerpdogTool(tool, input as Record<string, unknown>));\n },\n });\n}\n"],"mappings":";;;;;AAMA,SAAgB,OACd,MACA,KAOA;CACA,OAAOA,YAAAA,QAAQ,OAAO;EACpB,MAAM,IAAI;EACV,MAAM,IAAI;EACV,aAAa,IAAI;EACjB,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,MAAM,IAAI,OAAO;GACf,OAAO,IAAI,OAAO,MAAM,MAAMC,gBAAAA,mBAAmB,MAAM,KAAgC,CAAC;EAC1F;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"action.cjs","names":["serpdog","executeSerpdogTool"],"sources":["../src/action.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { serpdog } from \"./app\";\nimport { executeSerpdogTool } from \"./execute\";\n\n/** Bind one gateway tool to a typed app action; the call's output is parsed against `def.output`. */\nexport function action<TInput extends z.ZodType>(\n tool: string,\n def: {\n slug: string;\n name: string;\n description: string;\n input: TInput;\n output: z.ZodType;\n },\n) {\n return serpdog.action({\n slug: def.slug,\n name: def.name,\n description: def.description,\n input: def.input,\n output: def.output as z.ZodTypeAny,\n async run(input) {\n return def.output.parse(await executeSerpdogTool(tool, input as Record<string, unknown>));\n },\n });\n}\n"],"mappings":";;;;;AAMA,SAAgB,OACd,MACA,KAOA;CACA,OAAOA,YAAAA,QAAQ,OAAO;EACpB,MAAM,IAAI;EACV,MAAM,IAAI;EACV,aAAa,IAAI;EACjB,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,MAAM,IAAI,OAAO;GACf,OAAO,IAAI,OAAO,MAAM,MAAMC,gBAAAA,mBAAmB,MAAM,KAAgC,CAAC;EAC1F;CACF,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"action.mjs","names":[],"sources":["../src/action.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { serpdog } from \"./app\";\nimport { executeSerpdogTool } from \"./execute\";\n\n/** Bind one gateway tool to a typed app action; the call's output is parsed against `def.output`. */\nexport function action(\n tool: string,\n def: {\n slug: string;\n name: string;\n description: string;\n input: z.ZodTypeAny;\n output: z.ZodTypeAny;\n },\n) {\n return serpdog.action({\n slug: def.slug,\n name: def.name,\n description: def.description,\n input: def.input,\n output: def.output,\n async run(input) {\n return def.output.parse(await executeSerpdogTool(tool, input as Record<string, unknown>));\n },\n });\n}\n"],"mappings":";;;;;AAMA,SAAgB,OACd,MACA,KAOA;CACA,OAAO,QAAQ,OAAO;EACpB,MAAM,IAAI;EACV,MAAM,IAAI;EACV,aAAa,IAAI;EACjB,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,MAAM,IAAI,OAAO;GACf,OAAO,IAAI,OAAO,MAAM,MAAM,mBAAmB,MAAM,KAAgC,CAAC;EAC1F;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"action.mjs","names":[],"sources":["../src/action.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { serpdog } from \"./app\";\nimport { executeSerpdogTool } from \"./execute\";\n\n/** Bind one gateway tool to a typed app action; the call's output is parsed against `def.output`. */\nexport function action<TInput extends z.ZodType>(\n tool: string,\n def: {\n slug: string;\n name: string;\n description: string;\n input: TInput;\n output: z.ZodType;\n },\n) {\n return serpdog.action({\n slug: def.slug,\n name: def.name,\n description: def.description,\n input: def.input,\n output: def.output as z.ZodTypeAny,\n async run(input) {\n return def.output.parse(await executeSerpdogTool(tool, input as Record<string, unknown>));\n },\n });\n}\n"],"mappings":";;;;;AAMA,SAAgB,OACd,MACA,KAOA;CACA,OAAO,QAAQ,OAAO;EACpB,MAAM,IAAI;EACV,MAAM,IAAI;EACV,aAAa,IAAI;EACjB,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,MAAM,IAAI,OAAO;GACf,OAAO,IAAI,OAAO,MAAM,MAAM,mBAAmB,MAAM,KAAgC,CAAC;EAC1F;CACF,CAAC;AACH"}
@@ -19,7 +19,7 @@ const SerpdogScreenshotApiInput = zod.z.object({
19
19
  const SerpdogScreenshotApiOutput = zod.z.object({
20
20
  raw: zod.z.string().describe("Raw PNG image bytes when output='image'.").nullable().optional(),
21
21
  image: zod.z.string().describe("Base64-encoded PNG image when output='json'.").nullable().optional()
22
- }).describe("Response schema for SerpDog Screenshot API.");
22
+ }).passthrough().describe("Response schema for SerpDog Screenshot API.");
23
23
  const serpdogScreenshotApi = require_action.action("SERPDOG_SCREENSHOT_API", {
24
24
  slug: "serpdog-screenshot-api",
25
25
  name: "Screenshot API",
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot-api.cjs","names":["z","action"],"sources":["../../src/actions/screenshot-api.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { action } from \"../action\";\n\nexport const SerpdogScreenshotApiInput: z.ZodTypeAny = z.object({\n url: z.string().describe(\"Fully-qualified URL of the page to capture.\"),\n delay: z.number().int().describe(\"Seconds to wait before capturing the screenshot (optional).\").optional(),\n device: z.enum([\"desktop\", \"tablet\", \"mobile\"]).describe(\"Device emulation: 'desktop', 'tablet', or 'mobile'.\").optional(),\n output: z.enum([\"json\", \"image\"]).default(\"image\").describe(\"Response format: 'json' returns base64-encoded PNG in JSON; 'image' returns raw PNG bytes.\").optional(),\n dark_mode: z.boolean().default(false).describe(\"Capture in dark mode if supported (default: false).\").optional(),\n full_page: z.boolean().default(false).describe(\"Capture the entire scrollable page (default: false).\").optional(),\n window_width: z.number().int().describe(\"Viewport width in pixels (optional).\").optional(),\n window_height: z.number().int().describe(\"Viewport height in pixels (optional).\").optional(),\n no_cookie_banners: z.boolean().default(false).describe(\"Hide cookie banners if possible (default: false).\").optional(),\n}).describe(\"Parameters for taking a webpage screenshot via SerpDog.\");\nexport const SerpdogScreenshotApiOutput: z.ZodTypeAny = z.object({\n raw: z.string().describe(\"Raw PNG image bytes when output='image'.\").nullable().optional(),\n image: z.string().describe(\"Base64-encoded PNG image when output='json'.\").nullable().optional(),\n}).describe(\"Response schema for SerpDog Screenshot API.\");\n\nexport const serpdogScreenshotApi = action(\"SERPDOG_SCREENSHOT_API\", {\n slug: \"serpdog-screenshot-api\",\n name: \"Screenshot API\",\n description: \"Tool to capture a screenshot of a webpage. Use when you need a visual snapshot of a page; supports full-page, device emulation, delays, and dark mode.\",\n input: SerpdogScreenshotApiInput,\n output: SerpdogScreenshotApiOutput,\n});\n"],"mappings":";;;AAIA,MAAa,4BAA0CA,IAAAA,EAAE,OAAO;CAC9D,KAAKA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,6CAA6C;CACtE,OAAOA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,6DAA6D,CAAC,CAAC,SAAS;CACzG,QAAQA,IAAAA,EAAE,KAAK;EAAC;EAAW;EAAU;CAAQ,CAAC,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;CACzH,QAAQA,IAAAA,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,SAAS,4FAA4F,CAAC,CAAC,SAAS;CACnK,WAAWA,IAAAA,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;CAC/G,WAAWA,IAAAA,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,sDAAsD,CAAC,CAAC,SAAS;CAChH,cAAcA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,sCAAsC,CAAC,CAAC,SAAS;CACzF,eAAeA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,uCAAuC,CAAC,CAAC,SAAS;CAC3F,mBAAmBA,IAAAA,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,mDAAmD,CAAC,CAAC,SAAS;AACvH,CAAC,CAAC,CAAC,SAAS,yDAAyD;AACrE,MAAa,6BAA2CA,IAAAA,EAAE,OAAO;CAC/D,KAAKA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,0CAA0C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACzF,OAAOA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,8CAA8C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;AACjG,CAAC,CAAC,CAAC,SAAS,6CAA6C;AAEzD,MAAa,uBAAuBC,eAAAA,OAAO,0BAA0B;CACnE,MAAM;CACN,MAAM;CACN,aAAa;CACb,OAAO;CACP,QAAQ;AACV,CAAC"}
1
+ {"version":3,"file":"screenshot-api.cjs","names":["z","action"],"sources":["../../src/actions/screenshot-api.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { action } from \"../action\";\n\nexport const SerpdogScreenshotApiInput = z.object({\n url: z.string().describe(\"Fully-qualified URL of the page to capture.\"),\n delay: z.number().int().describe(\"Seconds to wait before capturing the screenshot (optional).\").optional(),\n device: z.enum([\"desktop\", \"tablet\", \"mobile\"]).describe(\"Device emulation: 'desktop', 'tablet', or 'mobile'.\").optional(),\n output: z.enum([\"json\", \"image\"]).default(\"image\").describe(\"Response format: 'json' returns base64-encoded PNG in JSON; 'image' returns raw PNG bytes.\").optional(),\n dark_mode: z.boolean().default(false).describe(\"Capture in dark mode if supported (default: false).\").optional(),\n full_page: z.boolean().default(false).describe(\"Capture the entire scrollable page (default: false).\").optional(),\n window_width: z.number().int().describe(\"Viewport width in pixels (optional).\").optional(),\n window_height: z.number().int().describe(\"Viewport height in pixels (optional).\").optional(),\n no_cookie_banners: z.boolean().default(false).describe(\"Hide cookie banners if possible (default: false).\").optional(),\n}).describe(\"Parameters for taking a webpage screenshot via SerpDog.\");\nexport const SerpdogScreenshotApiOutput = z.object({\n raw: z.string().describe(\"Raw PNG image bytes when output='image'.\").nullable().optional(),\n image: z.string().describe(\"Base64-encoded PNG image when output='json'.\").nullable().optional(),\n}).passthrough().describe(\"Response schema for SerpDog Screenshot API.\");\n\nexport const serpdogScreenshotApi = action(\"SERPDOG_SCREENSHOT_API\", {\n slug: \"serpdog-screenshot-api\",\n name: \"Screenshot API\",\n description: \"Tool to capture a screenshot of a webpage. Use when you need a visual snapshot of a page; supports full-page, device emulation, delays, and dark mode.\",\n input: SerpdogScreenshotApiInput,\n output: SerpdogScreenshotApiOutput,\n});\n"],"mappings":";;;AAIA,MAAa,4BAA4BA,IAAAA,EAAE,OAAO;CAChD,KAAKA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,6CAA6C;CACtE,OAAOA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,6DAA6D,CAAC,CAAC,SAAS;CACzG,QAAQA,IAAAA,EAAE,KAAK;EAAC;EAAW;EAAU;CAAQ,CAAC,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;CACzH,QAAQA,IAAAA,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,SAAS,4FAA4F,CAAC,CAAC,SAAS;CACnK,WAAWA,IAAAA,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;CAC/G,WAAWA,IAAAA,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,sDAAsD,CAAC,CAAC,SAAS;CAChH,cAAcA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,sCAAsC,CAAC,CAAC,SAAS;CACzF,eAAeA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,uCAAuC,CAAC,CAAC,SAAS;CAC3F,mBAAmBA,IAAAA,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,mDAAmD,CAAC,CAAC,SAAS;AACvH,CAAC,CAAC,CAAC,SAAS,yDAAyD;AACrE,MAAa,6BAA6BA,IAAAA,EAAE,OAAO;CACjD,KAAKA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,0CAA0C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACzF,OAAOA,IAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,8CAA8C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;AACjG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,6CAA6C;AAEvE,MAAa,uBAAuBC,eAAAA,OAAO,0BAA0B;CACnE,MAAM;CACN,MAAM;CACN,aAAa;CACb,OAAO;CACP,QAAQ;AACV,CAAC"}
@@ -1,9 +1,39 @@
1
1
  import { z } from "zod";
2
2
 
3
3
  //#region src/actions/screenshot-api.d.ts
4
- declare const SerpdogScreenshotApiInput: z.ZodTypeAny;
5
- declare const SerpdogScreenshotApiOutput: z.ZodTypeAny;
6
- declare const serpdogScreenshotApi: import("@keystrokehq/action").WorkflowActionDefinition<unknown, unknown, import("@keystrokehq/shared").ResolvedCredentials<readonly [import("@keystrokehq/shared").Credential]>, readonly [import("@keystrokehq/shared").Credential]>;
4
+ declare const SerpdogScreenshotApiInput: z.ZodObject<{
5
+ url: z.ZodString;
6
+ delay: z.ZodOptional<z.ZodNumber>;
7
+ device: z.ZodOptional<z.ZodEnum<{
8
+ desktop: "desktop";
9
+ tablet: "tablet";
10
+ mobile: "mobile";
11
+ }>>;
12
+ output: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
13
+ json: "json";
14
+ image: "image";
15
+ }>>>;
16
+ dark_mode: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
17
+ full_page: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
18
+ window_width: z.ZodOptional<z.ZodNumber>;
19
+ window_height: z.ZodOptional<z.ZodNumber>;
20
+ no_cookie_banners: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
21
+ }, z.core.$strip>;
22
+ declare const SerpdogScreenshotApiOutput: z.ZodObject<{
23
+ raw: z.ZodOptional<z.ZodNullable<z.ZodString>>;
24
+ image: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
+ }, z.core.$loose>;
26
+ declare const serpdogScreenshotApi: import("@keystrokehq/action").WorkflowActionDefinition<{
27
+ url: string;
28
+ delay?: number | undefined;
29
+ device?: "desktop" | "tablet" | "mobile" | undefined;
30
+ output?: "json" | "image" | undefined;
31
+ dark_mode?: boolean | undefined;
32
+ full_page?: boolean | undefined;
33
+ window_width?: number | undefined;
34
+ window_height?: number | undefined;
35
+ no_cookie_banners?: boolean | undefined;
36
+ }, unknown, import("@keystrokehq/shared").ResolvedCredentials<readonly [import("@keystrokehq/shared").Credential]>, readonly [import("@keystrokehq/shared").Credential]>;
7
37
  //#endregion
8
38
  export { serpdogScreenshotApi };
9
39
  //# sourceMappingURL=screenshot-api.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot-api.d.cts","names":[],"sources":["../../src/actions/screenshot-api.ts"],"mappings":";;;cAIa,yBAAA,EAA2B,CAAA,CAAE,UAU4B;AAAA,cACzD,0BAAA,EAA4B,CAAA,CAAE,UAGe;AAAA,cAE7C,oBAAA,gCAAoB,wBAAA,iDAAA,mBAAA,yCAAA,UAAA,4CAAA,UAAA"}
1
+ {"version":3,"file":"screenshot-api.d.cts","names":[],"sources":["../../src/actions/screenshot-api.ts"],"mappings":";;;cAIa,yBAAA,EAAyB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;cAWzB,0BAAA,EAA0B,CAAA,CAAA,SAAA;;;;cAK1B,oBAAA,gCAAoB,wBAAA"}
@@ -1,9 +1,39 @@
1
1
  import { z } from "zod";
2
2
 
3
3
  //#region src/actions/screenshot-api.d.ts
4
- declare const SerpdogScreenshotApiInput: z.ZodTypeAny;
5
- declare const SerpdogScreenshotApiOutput: z.ZodTypeAny;
6
- declare const serpdogScreenshotApi: import("@keystrokehq/action").WorkflowActionDefinition<unknown, unknown, import("@keystrokehq/shared").ResolvedCredentials<readonly [import("@keystrokehq/shared").Credential]>, readonly [import("@keystrokehq/shared").Credential]>;
4
+ declare const SerpdogScreenshotApiInput: z.ZodObject<{
5
+ url: z.ZodString;
6
+ delay: z.ZodOptional<z.ZodNumber>;
7
+ device: z.ZodOptional<z.ZodEnum<{
8
+ desktop: "desktop";
9
+ tablet: "tablet";
10
+ mobile: "mobile";
11
+ }>>;
12
+ output: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
13
+ json: "json";
14
+ image: "image";
15
+ }>>>;
16
+ dark_mode: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
17
+ full_page: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
18
+ window_width: z.ZodOptional<z.ZodNumber>;
19
+ window_height: z.ZodOptional<z.ZodNumber>;
20
+ no_cookie_banners: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
21
+ }, z.core.$strip>;
22
+ declare const SerpdogScreenshotApiOutput: z.ZodObject<{
23
+ raw: z.ZodOptional<z.ZodNullable<z.ZodString>>;
24
+ image: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
+ }, z.core.$loose>;
26
+ declare const serpdogScreenshotApi: import("@keystrokehq/action").WorkflowActionDefinition<{
27
+ url: string;
28
+ delay?: number | undefined;
29
+ device?: "desktop" | "tablet" | "mobile" | undefined;
30
+ output?: "json" | "image" | undefined;
31
+ dark_mode?: boolean | undefined;
32
+ full_page?: boolean | undefined;
33
+ window_width?: number | undefined;
34
+ window_height?: number | undefined;
35
+ no_cookie_banners?: boolean | undefined;
36
+ }, unknown, import("@keystrokehq/shared").ResolvedCredentials<readonly [import("@keystrokehq/shared").Credential]>, readonly [import("@keystrokehq/shared").Credential]>;
7
37
  //#endregion
8
38
  export { serpdogScreenshotApi };
9
39
  //# sourceMappingURL=screenshot-api.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot-api.d.mts","names":[],"sources":["../../src/actions/screenshot-api.ts"],"mappings":";;;cAIa,yBAAA,EAA2B,CAAA,CAAE,UAU4B;AAAA,cACzD,0BAAA,EAA4B,CAAA,CAAE,UAGe;AAAA,cAE7C,oBAAA,gCAAoB,wBAAA,iDAAA,mBAAA,yCAAA,UAAA,4CAAA,UAAA"}
1
+ {"version":3,"file":"screenshot-api.d.mts","names":[],"sources":["../../src/actions/screenshot-api.ts"],"mappings":";;;cAIa,yBAAA,EAAyB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;cAWzB,0BAAA,EAA0B,CAAA,CAAA,SAAA;;;;cAK1B,oBAAA,gCAAoB,wBAAA"}
@@ -22,7 +22,7 @@ const serpdogScreenshotApi = action("SERPDOG_SCREENSHOT_API", {
22
22
  output: z.object({
23
23
  raw: z.string().describe("Raw PNG image bytes when output='image'.").nullable().optional(),
24
24
  image: z.string().describe("Base64-encoded PNG image when output='json'.").nullable().optional()
25
- }).describe("Response schema for SerpDog Screenshot API.")
25
+ }).passthrough().describe("Response schema for SerpDog Screenshot API.")
26
26
  });
27
27
  //#endregion
28
28
  export { serpdogScreenshotApi };
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot-api.mjs","names":[],"sources":["../../src/actions/screenshot-api.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { action } from \"../action\";\n\nexport const SerpdogScreenshotApiInput: z.ZodTypeAny = z.object({\n url: z.string().describe(\"Fully-qualified URL of the page to capture.\"),\n delay: z.number().int().describe(\"Seconds to wait before capturing the screenshot (optional).\").optional(),\n device: z.enum([\"desktop\", \"tablet\", \"mobile\"]).describe(\"Device emulation: 'desktop', 'tablet', or 'mobile'.\").optional(),\n output: z.enum([\"json\", \"image\"]).default(\"image\").describe(\"Response format: 'json' returns base64-encoded PNG in JSON; 'image' returns raw PNG bytes.\").optional(),\n dark_mode: z.boolean().default(false).describe(\"Capture in dark mode if supported (default: false).\").optional(),\n full_page: z.boolean().default(false).describe(\"Capture the entire scrollable page (default: false).\").optional(),\n window_width: z.number().int().describe(\"Viewport width in pixels (optional).\").optional(),\n window_height: z.number().int().describe(\"Viewport height in pixels (optional).\").optional(),\n no_cookie_banners: z.boolean().default(false).describe(\"Hide cookie banners if possible (default: false).\").optional(),\n}).describe(\"Parameters for taking a webpage screenshot via SerpDog.\");\nexport const SerpdogScreenshotApiOutput: z.ZodTypeAny = z.object({\n raw: z.string().describe(\"Raw PNG image bytes when output='image'.\").nullable().optional(),\n image: z.string().describe(\"Base64-encoded PNG image when output='json'.\").nullable().optional(),\n}).describe(\"Response schema for SerpDog Screenshot API.\");\n\nexport const serpdogScreenshotApi = action(\"SERPDOG_SCREENSHOT_API\", {\n slug: \"serpdog-screenshot-api\",\n name: \"Screenshot API\",\n description: \"Tool to capture a screenshot of a webpage. Use when you need a visual snapshot of a page; supports full-page, device emulation, delays, and dark mode.\",\n input: SerpdogScreenshotApiInput,\n output: SerpdogScreenshotApiOutput,\n});\n"],"mappings":";;AAoBA,MAAa,uBAAuB,OAAO,0BAA0B;CACnE,MAAM;CACN,MAAM;CACN,aAAa;CACb,OApBqD,EAAE,OAAO;EAC9D,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,6CAA6C;EACtE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,6DAA6D,CAAC,CAAC,SAAS;EACzG,QAAQ,EAAE,KAAK;GAAC;GAAW;GAAU;EAAQ,CAAC,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;EACzH,QAAQ,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,SAAS,4FAA4F,CAAC,CAAC,SAAS;EACnK,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;EAC/G,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,sDAAsD,CAAC,CAAC,SAAS;EAChH,cAAc,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,sCAAsC,CAAC,CAAC,SAAS;EACzF,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,uCAAuC,CAAC,CAAC,SAAS;EAC3F,mBAAmB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,mDAAmD,CAAC,CAAC,SAAS;CACvH,CAAC,CAAC,CAAC,SAAS,yDAUH;CACP,QAVsD,EAAE,OAAO;EAC/D,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,0CAA0C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;EACzF,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,8CAA8C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACjG,CAAC,CAAC,CAAC,SAAS,6CAOF;AACV,CAAC"}
1
+ {"version":3,"file":"screenshot-api.mjs","names":[],"sources":["../../src/actions/screenshot-api.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { action } from \"../action\";\n\nexport const SerpdogScreenshotApiInput = z.object({\n url: z.string().describe(\"Fully-qualified URL of the page to capture.\"),\n delay: z.number().int().describe(\"Seconds to wait before capturing the screenshot (optional).\").optional(),\n device: z.enum([\"desktop\", \"tablet\", \"mobile\"]).describe(\"Device emulation: 'desktop', 'tablet', or 'mobile'.\").optional(),\n output: z.enum([\"json\", \"image\"]).default(\"image\").describe(\"Response format: 'json' returns base64-encoded PNG in JSON; 'image' returns raw PNG bytes.\").optional(),\n dark_mode: z.boolean().default(false).describe(\"Capture in dark mode if supported (default: false).\").optional(),\n full_page: z.boolean().default(false).describe(\"Capture the entire scrollable page (default: false).\").optional(),\n window_width: z.number().int().describe(\"Viewport width in pixels (optional).\").optional(),\n window_height: z.number().int().describe(\"Viewport height in pixels (optional).\").optional(),\n no_cookie_banners: z.boolean().default(false).describe(\"Hide cookie banners if possible (default: false).\").optional(),\n}).describe(\"Parameters for taking a webpage screenshot via SerpDog.\");\nexport const SerpdogScreenshotApiOutput = z.object({\n raw: z.string().describe(\"Raw PNG image bytes when output='image'.\").nullable().optional(),\n image: z.string().describe(\"Base64-encoded PNG image when output='json'.\").nullable().optional(),\n}).passthrough().describe(\"Response schema for SerpDog Screenshot API.\");\n\nexport const serpdogScreenshotApi = action(\"SERPDOG_SCREENSHOT_API\", {\n slug: \"serpdog-screenshot-api\",\n name: \"Screenshot API\",\n description: \"Tool to capture a screenshot of a webpage. Use when you need a visual snapshot of a page; supports full-page, device emulation, delays, and dark mode.\",\n input: SerpdogScreenshotApiInput,\n output: SerpdogScreenshotApiOutput,\n});\n"],"mappings":";;AAoBA,MAAa,uBAAuB,OAAO,0BAA0B;CACnE,MAAM;CACN,MAAM;CACN,aAAa;CACb,OApBuC,EAAE,OAAO;EAChD,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,6CAA6C;EACtE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,6DAA6D,CAAC,CAAC,SAAS;EACzG,QAAQ,EAAE,KAAK;GAAC;GAAW;GAAU;EAAQ,CAAC,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;EACzH,QAAQ,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,SAAS,4FAA4F,CAAC,CAAC,SAAS;EACnK,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,qDAAqD,CAAC,CAAC,SAAS;EAC/G,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,sDAAsD,CAAC,CAAC,SAAS;EAChH,cAAc,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,sCAAsC,CAAC,CAAC,SAAS;EACzF,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,uCAAuC,CAAC,CAAC,SAAS;EAC3F,mBAAmB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,mDAAmD,CAAC,CAAC,SAAS;CACvH,CAAC,CAAC,CAAC,SAAS,yDAUH;CACP,QAVwC,EAAE,OAAO;EACjD,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,0CAA0C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;EACzF,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,8CAA8C,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACjG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,6CAOhB;AACV,CAAC"}
package/dist/catalog.cjs CHANGED
@@ -7,7 +7,13 @@ const serpdogCatalog = {
7
7
  "category": "AI Web Scraping",
8
8
  "logo": "https://logos.composio.dev/api/serpdog",
9
9
  "authKind": "keystroke",
10
- "oauthScopes": []
10
+ "oauthScopes": [],
11
+ "credentialFields": { "api_key": {
12
+ "label": "Serpdog API Key",
13
+ "secret": true,
14
+ "description": "This is your API key for Serpdog. You can find it in your Serpdog dashboard."
15
+ } },
16
+ "credentialScheme": "API_KEY"
11
17
  };
12
18
  //#endregion
13
19
  exports.serpdogCatalog = serpdogCatalog;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.cjs","names":[],"sources":["../src/catalog.ts"],"sourcesContent":["/** Generated — kept in sync with src/app.ts. */\nexport const serpdogCatalog = {\n \"slug\": \"serpdog\",\n \"name\": \"Serpdog\",\n \"description\": \"Serpdog provides APIs for scraping Google search results and related services, enabling developers to access real-time data from Google Search, Maps, Scholar, and more. Note: Serpdog has merged with Scrapingdog but continues to operate independently at api.serpdog.io.\",\n \"category\": \"AI Web Scraping\",\n \"logo\": \"https://logos.composio.dev/api/serpdog\",\n \"authKind\": \"keystroke\",\n \"oauthScopes\": []\n} as const;\n"],"mappings":";;AACA,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,eAAe;CACf,YAAY;CACZ,QAAQ;CACR,YAAY;CACZ,eAAe,CAAC;AAClB"}
1
+ {"version":3,"file":"catalog.cjs","names":[],"sources":["../src/catalog.ts"],"sourcesContent":["/** Generated — kept in sync with src/app.ts. */\nexport const serpdogCatalog = {\n \"slug\": \"serpdog\",\n \"name\": \"Serpdog\",\n \"description\": \"Serpdog provides APIs for scraping Google search results and related services, enabling developers to access real-time data from Google Search, Maps, Scholar, and more. Note: Serpdog has merged with Scrapingdog but continues to operate independently at api.serpdog.io.\",\n \"category\": \"AI Web Scraping\",\n \"logo\": \"https://logos.composio.dev/api/serpdog\",\n \"authKind\": \"keystroke\",\n \"oauthScopes\": [],\n \"credentialFields\": {\n \"api_key\": {\n \"label\": \"Serpdog API Key\",\n \"secret\": true,\n \"description\": \"This is your API key for Serpdog. You can find it in your Serpdog dashboard.\"\n }\n },\n \"credentialScheme\": \"API_KEY\"\n} as const;\n"],"mappings":";;AACA,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,eAAe;CACf,YAAY;CACZ,QAAQ;CACR,YAAY;CACZ,eAAe,CAAC;CAChB,oBAAoB,EAClB,WAAW;EACT,SAAS;EACT,UAAU;EACV,eAAe;CACjB,EACF;CACA,oBAAoB;AACtB"}
@@ -8,6 +8,14 @@ declare const serpdogCatalog: {
8
8
  readonly logo: "https://logos.composio.dev/api/serpdog";
9
9
  readonly authKind: "keystroke";
10
10
  readonly oauthScopes: readonly [];
11
+ readonly credentialFields: {
12
+ readonly api_key: {
13
+ readonly label: "Serpdog API Key";
14
+ readonly secret: true;
15
+ readonly description: "This is your API key for Serpdog. You can find it in your Serpdog dashboard.";
16
+ };
17
+ };
18
+ readonly credentialScheme: "API_KEY";
11
19
  };
12
20
  //#endregion
13
21
  export { serpdogCatalog };
@@ -8,6 +8,14 @@ declare const serpdogCatalog: {
8
8
  readonly logo: "https://logos.composio.dev/api/serpdog";
9
9
  readonly authKind: "keystroke";
10
10
  readonly oauthScopes: readonly [];
11
+ readonly credentialFields: {
12
+ readonly api_key: {
13
+ readonly label: "Serpdog API Key";
14
+ readonly secret: true;
15
+ readonly description: "This is your API key for Serpdog. You can find it in your Serpdog dashboard.";
16
+ };
17
+ };
18
+ readonly credentialScheme: "API_KEY";
11
19
  };
12
20
  //#endregion
13
21
  export { serpdogCatalog };
package/dist/catalog.mjs CHANGED
@@ -7,7 +7,13 @@ const serpdogCatalog = {
7
7
  "category": "AI Web Scraping",
8
8
  "logo": "https://logos.composio.dev/api/serpdog",
9
9
  "authKind": "keystroke",
10
- "oauthScopes": []
10
+ "oauthScopes": [],
11
+ "credentialFields": { "api_key": {
12
+ "label": "Serpdog API Key",
13
+ "secret": true,
14
+ "description": "This is your API key for Serpdog. You can find it in your Serpdog dashboard."
15
+ } },
16
+ "credentialScheme": "API_KEY"
11
17
  };
12
18
  //#endregion
13
19
  export { serpdogCatalog };
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.mjs","names":[],"sources":["../src/catalog.ts"],"sourcesContent":["/** Generated — kept in sync with src/app.ts. */\nexport const serpdogCatalog = {\n \"slug\": \"serpdog\",\n \"name\": \"Serpdog\",\n \"description\": \"Serpdog provides APIs for scraping Google search results and related services, enabling developers to access real-time data from Google Search, Maps, Scholar, and more. Note: Serpdog has merged with Scrapingdog but continues to operate independently at api.serpdog.io.\",\n \"category\": \"AI Web Scraping\",\n \"logo\": \"https://logos.composio.dev/api/serpdog\",\n \"authKind\": \"keystroke\",\n \"oauthScopes\": []\n} as const;\n"],"mappings":";;AACA,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,eAAe;CACf,YAAY;CACZ,QAAQ;CACR,YAAY;CACZ,eAAe,CAAC;AAClB"}
1
+ {"version":3,"file":"catalog.mjs","names":[],"sources":["../src/catalog.ts"],"sourcesContent":["/** Generated — kept in sync with src/app.ts. */\nexport const serpdogCatalog = {\n \"slug\": \"serpdog\",\n \"name\": \"Serpdog\",\n \"description\": \"Serpdog provides APIs for scraping Google search results and related services, enabling developers to access real-time data from Google Search, Maps, Scholar, and more. Note: Serpdog has merged with Scrapingdog but continues to operate independently at api.serpdog.io.\",\n \"category\": \"AI Web Scraping\",\n \"logo\": \"https://logos.composio.dev/api/serpdog\",\n \"authKind\": \"keystroke\",\n \"oauthScopes\": [],\n \"credentialFields\": {\n \"api_key\": {\n \"label\": \"Serpdog API Key\",\n \"secret\": true,\n \"description\": \"This is your API key for Serpdog. You can find it in your Serpdog dashboard.\"\n }\n },\n \"credentialScheme\": \"API_KEY\"\n} as const;\n"],"mappings":";;AACA,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,eAAe;CACf,YAAY;CACZ,QAAQ;CACR,YAAY;CACZ,eAAe,CAAC;CAChB,oBAAoB,EAClB,WAAW;EACT,SAAS;EACT,UAAU;EACV,eAAe;CACjB,EACF;CACA,oBAAoB;AACtB"}
package/dist/execute.cjs CHANGED
@@ -2,7 +2,7 @@ let _keystrokehq_keystroke_client = require("@keystrokehq/keystroke/client");
2
2
  //#region src/execute.ts
3
3
  const APP_SLUG = "serpdog";
4
4
  /** Pinned app version — updated on regeneration. */
5
- const APP_VERSION = "20260615_00";
5
+ const APP_VERSION = "20260707_00";
6
6
  async function executeSerpdogTool(tool, args) {
7
7
  const { result } = await (0, _keystrokehq_keystroke_client.createKeystrokeClient)().tools.execute({
8
8
  app: APP_SLUG,
@@ -1 +1 @@
1
- {"version":3,"file":"execute.cjs","names":[],"sources":["../src/execute.ts"],"sourcesContent":["import { createKeystrokeClient } from \"@keystrokehq/keystroke/client\";\n\nconst APP_SLUG = \"serpdog\";\n/** Pinned app version — updated on regeneration. */\nconst APP_VERSION = \"20260615_00\";\n\nexport async function executeSerpdogTool(\n tool: string,\n args: Record<string, unknown>,\n): Promise<unknown> {\n const { result } = await createKeystrokeClient().tools.execute({\n app: APP_SLUG,\n tool,\n arguments: args,\n version: APP_VERSION,\n });\n return result;\n}\n"],"mappings":";;AAEA,MAAM,WAAW;;AAEjB,MAAM,cAAc;AAEpB,eAAsB,mBACpB,MACA,MACkB;CAClB,MAAM,EAAE,WAAW,OAAA,GAAA,8BAAA,sBAAA,CAA4B,CAAC,CAAC,MAAM,QAAQ;EAC7D,KAAK;EACL;EACA,WAAW;EACX,SAAS;CACX,CAAC;CACD,OAAO;AACT"}
1
+ {"version":3,"file":"execute.cjs","names":[],"sources":["../src/execute.ts"],"sourcesContent":["import { createKeystrokeClient } from \"@keystrokehq/keystroke/client\";\n\nconst APP_SLUG = \"serpdog\";\n/** Pinned app version — updated on regeneration. */\nconst APP_VERSION = \"20260707_00\";\n\nexport async function executeSerpdogTool(\n tool: string,\n args: Record<string, unknown>,\n): Promise<unknown> {\n const { result } = await createKeystrokeClient().tools.execute({\n app: APP_SLUG,\n tool,\n arguments: args,\n version: APP_VERSION,\n });\n return result;\n}\n"],"mappings":";;AAEA,MAAM,WAAW;;AAEjB,MAAM,cAAc;AAEpB,eAAsB,mBACpB,MACA,MACkB;CAClB,MAAM,EAAE,WAAW,OAAA,GAAA,8BAAA,sBAAA,CAA4B,CAAC,CAAC,MAAM,QAAQ;EAC7D,KAAK;EACL;EACA,WAAW;EACX,SAAS;CACX,CAAC;CACD,OAAO;AACT"}
package/dist/execute.mjs CHANGED
@@ -2,7 +2,7 @@ import { createKeystrokeClient } from "@keystrokehq/keystroke/client";
2
2
  //#region src/execute.ts
3
3
  const APP_SLUG = "serpdog";
4
4
  /** Pinned app version — updated on regeneration. */
5
- const APP_VERSION = "20260615_00";
5
+ const APP_VERSION = "20260707_00";
6
6
  async function executeSerpdogTool(tool, args) {
7
7
  const { result } = await createKeystrokeClient().tools.execute({
8
8
  app: APP_SLUG,
@@ -1 +1 @@
1
- {"version":3,"file":"execute.mjs","names":[],"sources":["../src/execute.ts"],"sourcesContent":["import { createKeystrokeClient } from \"@keystrokehq/keystroke/client\";\n\nconst APP_SLUG = \"serpdog\";\n/** Pinned app version — updated on regeneration. */\nconst APP_VERSION = \"20260615_00\";\n\nexport async function executeSerpdogTool(\n tool: string,\n args: Record<string, unknown>,\n): Promise<unknown> {\n const { result } = await createKeystrokeClient().tools.execute({\n app: APP_SLUG,\n tool,\n arguments: args,\n version: APP_VERSION,\n });\n return result;\n}\n"],"mappings":";;AAEA,MAAM,WAAW;;AAEjB,MAAM,cAAc;AAEpB,eAAsB,mBACpB,MACA,MACkB;CAClB,MAAM,EAAE,WAAW,MAAM,sBAAsB,CAAC,CAAC,MAAM,QAAQ;EAC7D,KAAK;EACL;EACA,WAAW;EACX,SAAS;CACX,CAAC;CACD,OAAO;AACT"}
1
+ {"version":3,"file":"execute.mjs","names":[],"sources":["../src/execute.ts"],"sourcesContent":["import { createKeystrokeClient } from \"@keystrokehq/keystroke/client\";\n\nconst APP_SLUG = \"serpdog\";\n/** Pinned app version — updated on regeneration. */\nconst APP_VERSION = \"20260707_00\";\n\nexport async function executeSerpdogTool(\n tool: string,\n args: Record<string, unknown>,\n): Promise<unknown> {\n const { result } = await createKeystrokeClient().tools.execute({\n app: APP_SLUG,\n tool,\n arguments: args,\n version: APP_VERSION,\n });\n return result;\n}\n"],"mappings":";;AAEA,MAAM,WAAW;;AAEjB,MAAM,cAAc;AAEpB,eAAsB,mBACpB,MACA,MACkB;CAClB,MAAM,EAAE,WAAW,MAAM,sBAAsB,CAAC,CAAC,MAAM,QAAQ;EAC7D,KAAK;EACL;EACA,WAAW;EACX,SAAS;CACX,CAAC;CACD,OAAO;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keystrokehq/serpdog",
3
- "version": "0.1.0",
3
+ "version": "0.1.3",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -31,7 +31,7 @@
31
31
  }
32
32
  },
33
33
  "peerDependencies": {
34
- "@keystrokehq/keystroke": "^0.1.4",
34
+ "@keystrokehq/keystroke": ">=0.1.4",
35
35
  "zod": "^4.4.3"
36
36
  },
37
37
  "devDependencies": {