orangeslice 1.6.0 → 1.7.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 CHANGED
@@ -56,6 +56,35 @@ All calls are rate-limited automatically.
56
56
  npm install orangeslice
57
57
  ```
58
58
 
59
+ ### TypeScript Setup
60
+
61
+ If running `.ts` files directly with `ts-node` or `tsx`, you may need:
62
+
63
+ ```bash
64
+ npm install -D typescript @types/node tsx
65
+ ```
66
+
67
+ Recommended `tsconfig.json`:
68
+
69
+ ```json
70
+ {
71
+ "compilerOptions": {
72
+ "target": "ES2020",
73
+ "module": "NodeNext",
74
+ "moduleResolution": "NodeNext",
75
+ "esModuleInterop": true,
76
+ "strict": false,
77
+ "skipLibCheck": true
78
+ }
79
+ }
80
+ ```
81
+
82
+ Then run with:
83
+
84
+ ```bash
85
+ npx tsx your-script.ts
86
+ ```
87
+
59
88
  ## Usage
60
89
 
61
90
  ```typescript
@@ -135,6 +164,42 @@ const result = await orangeslice.b2b.query("SELECT * FROM linkedin_company LIMIT
135
164
  // result.rows, result.rowCount, result.duration_ms
136
165
  ```
137
166
 
167
+ ### `orangeslice.serp.search(query: string, options?): Promise<SerpResponse>`
168
+
169
+ Search Google and return results.
170
+
171
+ ```typescript
172
+ const response = await orangeslice.serp.search("Stripe funding 2024");
173
+ // response.results = [{ title, link, snippet }, ...]
174
+
175
+ // With options
176
+ const filtered = await orangeslice.serp.search("site:linkedin.com CEO", {
177
+ tbs: "qdr:m", // Past month
178
+ page: 1
179
+ });
180
+ ```
181
+
182
+ ### `orangeslice.firecrawl.scrape(url: string, limit?): Promise<FirecrawlResponse>`
183
+
184
+ Scrape a website and get markdown + social URLs.
185
+
186
+ ```typescript
187
+ const page = await orangeslice.firecrawl.scrape("https://stripe.com/about");
188
+ // page.markdown, page.socialUrls
189
+ ```
190
+
191
+ ### `orangeslice.browser.execute(code: string, options?): Promise<BrowserResponse>`
192
+
193
+ Execute Playwright code with `page` in scope.
194
+
195
+ ```typescript
196
+ const response = await orangeslice.browser.execute(`
197
+ await page.goto("https://example.com", { waitUntil: 'domcontentloaded' });
198
+ return await page.evaluate(() => document.title);
199
+ `);
200
+ // response.success, response.result
201
+ ```
202
+
138
203
  ## Note on Concurrency
139
204
 
140
205
  The rate limit is **per-process**. If you run multiple scripts simultaneously, each has its own queue. For most AI agent use cases (single script), this is fine.
@@ -0,0 +1,57 @@
1
+ export interface DatasetListParams {
2
+ limit?: number;
3
+ offset?: number;
4
+ clean?: boolean;
5
+ fields?: string[];
6
+ unwind?: string;
7
+ }
8
+ export interface ActorSearchResult {
9
+ actorId: string;
10
+ name: string;
11
+ username: string;
12
+ title: string;
13
+ description: string;
14
+ stats: Record<string, unknown>;
15
+ pricing: Record<string, unknown>;
16
+ }
17
+ export interface ActorInputSchema {
18
+ actor: string;
19
+ actId: string;
20
+ buildId: string;
21
+ inputSchema: Record<string, unknown> | null;
22
+ inputProperties: Record<string, unknown>;
23
+ }
24
+ /**
25
+ * Run an Apify actor and get results
26
+ *
27
+ * @example
28
+ * // Scrape Google Maps reviews
29
+ * const reviews = await apify.run("compass/crawler-google-places", {
30
+ * searchStringsArray: ["restaurants in NYC"],
31
+ * maxReviews: 10
32
+ * });
33
+ */
34
+ export declare function run<T = unknown[]>(actor: string, input?: Record<string, unknown>, datasetListParams?: DatasetListParams): Promise<T>;
35
+ /**
36
+ * Search for Apify actors by keyword
37
+ *
38
+ * @example
39
+ * const actors = await apify.search("linkedin scraper");
40
+ */
41
+ export declare function search(query: string, limit?: number): Promise<{
42
+ actors: ActorSearchResult[];
43
+ total: number;
44
+ }>;
45
+ /**
46
+ * Get the input schema for an actor (to understand what params it accepts)
47
+ *
48
+ * @example
49
+ * const schema = await apify.getInputSchema("apify/web-scraper");
50
+ * console.log(schema.inputProperties);
51
+ */
52
+ export declare function getInputSchema(actor: string): Promise<ActorInputSchema>;
53
+ export declare const apify: {
54
+ run: typeof run;
55
+ search: typeof search;
56
+ getInputSchema: typeof getInputSchema;
57
+ };
package/dist/apify.js ADDED
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.apify = void 0;
4
+ exports.run = run;
5
+ exports.search = search;
6
+ exports.getInputSchema = getInputSchema;
7
+ const queue_1 = require("./queue");
8
+ const API_URL = process.env.ORANGESLICE_API_URL?.replace(/\?.*/, "") + "?functionId=apify" ||
9
+ "https://orangeslice.ai/api/function?functionId=apify";
10
+ // Rate limit: 2 concurrent, 500ms between requests (Apify runs can be expensive)
11
+ const queue = (0, queue_1.createQueue)(2);
12
+ const rateLimiter = (0, queue_1.createRateLimiter)(500);
13
+ /**
14
+ * Helper to make POST request, handling redirects manually
15
+ */
16
+ async function fetchWithRedirect(url, body) {
17
+ let response = await fetch(url, {
18
+ method: "POST",
19
+ headers: { "Content-Type": "application/json" },
20
+ body,
21
+ redirect: "manual",
22
+ });
23
+ if (response.status >= 300 && response.status < 400) {
24
+ const location = response.headers.get("location");
25
+ if (location) {
26
+ response = await fetch(location, {
27
+ method: "POST",
28
+ headers: { "Content-Type": "application/json" },
29
+ body,
30
+ });
31
+ }
32
+ }
33
+ return response;
34
+ }
35
+ /**
36
+ * Run an Apify actor and get results
37
+ *
38
+ * @example
39
+ * // Scrape Google Maps reviews
40
+ * const reviews = await apify.run("compass/crawler-google-places", {
41
+ * searchStringsArray: ["restaurants in NYC"],
42
+ * maxReviews: 10
43
+ * });
44
+ */
45
+ async function run(actor, input = {}, datasetListParams = {}) {
46
+ return queue(async () => {
47
+ return rateLimiter(async () => {
48
+ const body = JSON.stringify({
49
+ operation: "runActor",
50
+ actor,
51
+ input,
52
+ datasetListParams,
53
+ });
54
+ const response = await fetchWithRedirect(API_URL, body);
55
+ if (!response.ok) {
56
+ const text = await response.text();
57
+ throw new Error(`Apify run failed: ${response.status} ${text}`);
58
+ }
59
+ const data = (await response.json());
60
+ if (data.error) {
61
+ throw new Error(`Apify error: ${data.error}`);
62
+ }
63
+ return data;
64
+ });
65
+ });
66
+ }
67
+ /**
68
+ * Search for Apify actors by keyword
69
+ *
70
+ * @example
71
+ * const actors = await apify.search("linkedin scraper");
72
+ */
73
+ async function search(query, limit = 10) {
74
+ return queue(async () => {
75
+ return rateLimiter(async () => {
76
+ const body = JSON.stringify({
77
+ operation: "searchActors",
78
+ query,
79
+ limit,
80
+ });
81
+ const response = await fetchWithRedirect(API_URL, body);
82
+ if (!response.ok) {
83
+ const text = await response.text();
84
+ throw new Error(`Apify search failed: ${response.status} ${text}`);
85
+ }
86
+ const data = (await response.json());
87
+ if (data.error) {
88
+ throw new Error(`Apify error: ${data.error}`);
89
+ }
90
+ return data;
91
+ });
92
+ });
93
+ }
94
+ /**
95
+ * Get the input schema for an actor (to understand what params it accepts)
96
+ *
97
+ * @example
98
+ * const schema = await apify.getInputSchema("apify/web-scraper");
99
+ * console.log(schema.inputProperties);
100
+ */
101
+ async function getInputSchema(actor) {
102
+ return queue(async () => {
103
+ return rateLimiter(async () => {
104
+ const body = JSON.stringify({
105
+ operation: "getInputSchema",
106
+ actor,
107
+ });
108
+ const response = await fetchWithRedirect(API_URL, body);
109
+ if (!response.ok) {
110
+ const text = await response.text();
111
+ throw new Error(`Apify getInputSchema failed: ${response.status} ${text}`);
112
+ }
113
+ const data = (await response.json());
114
+ if (data.error) {
115
+ throw new Error(`Apify error: ${data.error}`);
116
+ }
117
+ return data;
118
+ });
119
+ });
120
+ }
121
+ // Export as namespace
122
+ exports.apify = {
123
+ run,
124
+ search,
125
+ getInputSchema,
126
+ };
package/dist/cli.js CHANGED
@@ -42,7 +42,7 @@ const TARGET_DIR = path.join(process.cwd(), "orangeslice-docs");
42
42
  const AGENTS_MD = path.join(DOCS_DIR, "AGENTS.md");
43
43
  const ROOT_AGENTS_MD = path.join(process.cwd(), "AGENTS.md");
44
44
  async function main() {
45
- console.log("\n🍊 orangeslice - setting up sales agent for AI...\n");
45
+ console.log("\n🍊 orangeslice - setting up AI sales agent toolkit\n");
46
46
  // 1. Copy AGENTS.md to project root (for auto-detection by Claude Code, etc.)
47
47
  console.log("1. Installing AGENTS.md at project root...");
48
48
  if (fs.existsSync(AGENTS_MD)) {
@@ -50,7 +50,7 @@ async function main() {
50
50
  console.log(" ✓ AGENTS.md → ./AGENTS.md (auto-detected by AI agents)\n");
51
51
  }
52
52
  // 2. Copy full docs to orangeslice-docs/
53
- console.log("2. Copying detailed documentation...");
53
+ console.log("2. Copying tool documentation...");
54
54
  if (!fs.existsSync(TARGET_DIR)) {
55
55
  fs.mkdirSync(TARGET_DIR, { recursive: true });
56
56
  }
@@ -61,6 +61,13 @@ async function main() {
61
61
  fs.copyFileSync(src, dest);
62
62
  }
63
63
  console.log(` ✓ ${files.length} docs → ./orangeslice-docs/\n`);
64
+ console.log(" Docs created:");
65
+ console.log(" • AGENTS.md - Main overview + quick APIs");
66
+ console.log(" • b2b.md - LinkedIn database (1B+ profiles)");
67
+ console.log(" • serp.md - Google dorking cheatsheet");
68
+ console.log(" • browser.md - Playwright automation");
69
+ console.log(" • apify.md - Pre-built web scrapers");
70
+ console.log(" • strategies.md - Prospecting & enrichment patterns\n");
64
71
  // 3. Install package
65
72
  console.log("3. Installing orangeslice package...");
66
73
  try {
@@ -71,10 +78,14 @@ async function main() {
71
78
  }
72
79
  // 4. Done
73
80
  console.log("\n✅ Done! Your AI agent is now a sales research assistant.\n");
74
- console.log(" AGENTS.md is at your project root - Claude Code will auto-detect it.\n");
75
- console.log(" Your agent can now:\n");
76
- console.log(" • Query 1B+ LinkedIn profiles (orangeslice.b2b.sql)");
77
- console.log(" • Search Google (orangeslice.serp.search)");
78
- console.log(" • Scrape websites (orangeslice.firecrawl.scrape)\n");
81
+ console.log(" AGENTS.md at project root - Claude Code will auto-detect it.\n");
82
+ console.log(" Available tools:\n");
83
+ console.log(" • orangeslice.b2b.sql() - 1B+ LinkedIn profiles");
84
+ console.log(" • orangeslice.serp.search() - Google Search");
85
+ console.log(" • orangeslice.firecrawl.scrape() - Static web scraping");
86
+ console.log(" • orangeslice.browser.execute() - Playwright automation");
87
+ console.log(" • orangeslice.generateObject() - AI structured output");
88
+ console.log(" • orangeslice.apify.run() - Pre-built scrapers");
89
+ console.log(" • orangeslice.geo.parseAddress() - Geocoding\n");
79
90
  }
80
91
  main().catch(console.error);
@@ -0,0 +1,34 @@
1
+ export interface GenerateObjectOptions {
2
+ /** The prompt describing what to generate */
3
+ prompt: string;
4
+ /** JSON schema defining the output structure */
5
+ schema: Record<string, unknown>;
6
+ /** Model to use (default: "gpt-4o-mini") */
7
+ model?: string;
8
+ }
9
+ /**
10
+ * Generate a structured object using AI
11
+ *
12
+ * @example
13
+ * const result = await generateObject.generate({
14
+ * prompt: "Extract the company name and founding year from: Apple Inc was founded in 1976",
15
+ * schema: {
16
+ * type: "object",
17
+ * properties: {
18
+ * company: { type: "string" },
19
+ * year: { type: "number" }
20
+ * },
21
+ * required: ["company", "year"]
22
+ * }
23
+ * });
24
+ * // { company: "Apple Inc", year: 1976 }
25
+ */
26
+ export declare function generate<T = Record<string, unknown>>(options: GenerateObjectOptions): Promise<T>;
27
+ /**
28
+ * Convenience method for extracting data from text
29
+ */
30
+ export declare function extract<T = Record<string, unknown>>(text: string, schema: Record<string, unknown>, instructions?: string): Promise<T>;
31
+ export declare const generateObject: {
32
+ generate: typeof generate;
33
+ extract: typeof extract;
34
+ };
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateObject = void 0;
4
+ exports.generate = generate;
5
+ exports.extract = extract;
6
+ const queue_1 = require("./queue");
7
+ const API_URL = process.env.ORANGESLICE_API_URL?.replace(/\?.*/, "") + "?functionId=generateObject"
8
+ || "https://orangeslice.ai/api/function?functionId=generateObject";
9
+ // Rate limit: 2 concurrent, 200ms between requests
10
+ const queue = (0, queue_1.createQueue)(2);
11
+ const rateLimiter = (0, queue_1.createRateLimiter)(200);
12
+ /**
13
+ * Helper to make POST request, handling redirects manually
14
+ */
15
+ async function fetchWithRedirect(url, body) {
16
+ let response = await fetch(url, {
17
+ method: "POST",
18
+ headers: { "Content-Type": "application/json" },
19
+ body,
20
+ redirect: "manual",
21
+ });
22
+ if (response.status >= 300 && response.status < 400) {
23
+ const location = response.headers.get("location");
24
+ if (location) {
25
+ response = await fetch(location, {
26
+ method: "POST",
27
+ headers: { "Content-Type": "application/json" },
28
+ body,
29
+ });
30
+ }
31
+ }
32
+ return response;
33
+ }
34
+ /**
35
+ * Generate a structured object using AI
36
+ *
37
+ * @example
38
+ * const result = await generateObject.generate({
39
+ * prompt: "Extract the company name and founding year from: Apple Inc was founded in 1976",
40
+ * schema: {
41
+ * type: "object",
42
+ * properties: {
43
+ * company: { type: "string" },
44
+ * year: { type: "number" }
45
+ * },
46
+ * required: ["company", "year"]
47
+ * }
48
+ * });
49
+ * // { company: "Apple Inc", year: 1976 }
50
+ */
51
+ async function generate(options) {
52
+ return queue(async () => {
53
+ return rateLimiter(async () => {
54
+ const body = JSON.stringify({
55
+ prompt: options.prompt,
56
+ schema: options.schema,
57
+ model: options.model,
58
+ });
59
+ const response = await fetchWithRedirect(API_URL, body);
60
+ if (!response.ok) {
61
+ const text = await response.text();
62
+ throw new Error(`generateObject request failed: ${response.status} ${text}`);
63
+ }
64
+ const data = (await response.json());
65
+ if (data.error) {
66
+ throw new Error(`generateObject error: ${data.error}`);
67
+ }
68
+ return data;
69
+ });
70
+ });
71
+ }
72
+ /**
73
+ * Convenience method for extracting data from text
74
+ */
75
+ async function extract(text, schema, instructions) {
76
+ const prompt = instructions
77
+ ? `${instructions}\n\nText:\n${text}`
78
+ : `Extract structured data from the following text:\n\n${text}`;
79
+ return generate({ prompt, schema });
80
+ }
81
+ // Export as namespace
82
+ exports.generateObject = {
83
+ generate,
84
+ extract,
85
+ };
package/dist/geo.d.ts ADDED
@@ -0,0 +1,50 @@
1
+ export interface ParsedAddress {
2
+ streetNumber: string;
3
+ route: string;
4
+ city: string;
5
+ state: string;
6
+ postalCode: string;
7
+ country: string;
8
+ lat: number;
9
+ lng: number;
10
+ }
11
+ /**
12
+ * Parse an address string into structured components using Google Maps Geocoding
13
+ *
14
+ * @example
15
+ * const parsed = await geo.parseAddress("1600 Amphitheatre Parkway, Mountain View, CA");
16
+ * // {
17
+ * // streetNumber: "1600",
18
+ * // route: "Amphitheatre Parkway",
19
+ * // city: "Mountain View",
20
+ * // state: "California",
21
+ * // postalCode: "94043",
22
+ * // country: "United States",
23
+ * // lat: 37.4224764,
24
+ * // lng: -122.0842499
25
+ * // }
26
+ */
27
+ export declare function parseAddress(address: string): Promise<ParsedAddress>;
28
+ /**
29
+ * Get coordinates (lat/lng) for an address
30
+ *
31
+ * @example
32
+ * const coords = await geo.geocode("Times Square, NYC");
33
+ * // { lat: 40.758896, lng: -73.985130 }
34
+ */
35
+ export declare function geocode(address: string): Promise<{
36
+ lat: number;
37
+ lng: number;
38
+ }>;
39
+ /**
40
+ * Get the city and state for an address
41
+ */
42
+ export declare function getCityState(address: string): Promise<{
43
+ city: string;
44
+ state: string;
45
+ }>;
46
+ export declare const geo: {
47
+ parseAddress: typeof parseAddress;
48
+ geocode: typeof geocode;
49
+ getCityState: typeof getCityState;
50
+ };
package/dist/geo.js ADDED
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.geo = void 0;
4
+ exports.parseAddress = parseAddress;
5
+ exports.geocode = geocode;
6
+ exports.getCityState = getCityState;
7
+ const queue_1 = require("./queue");
8
+ const API_URL = process.env.ORANGESLICE_API_URL?.replace(/\?.*/, "") + "?functionId=geo"
9
+ || "https://orangeslice.ai/api/function?functionId=geo";
10
+ // Rate limit: 2 concurrent, 100ms between requests
11
+ const queue = (0, queue_1.createQueue)(2);
12
+ const rateLimiter = (0, queue_1.createRateLimiter)(100);
13
+ /**
14
+ * Helper to make POST request, handling redirects manually
15
+ */
16
+ async function fetchWithRedirect(url, body) {
17
+ let response = await fetch(url, {
18
+ method: "POST",
19
+ headers: { "Content-Type": "application/json" },
20
+ body,
21
+ redirect: "manual",
22
+ });
23
+ if (response.status >= 300 && response.status < 400) {
24
+ const location = response.headers.get("location");
25
+ if (location) {
26
+ response = await fetch(location, {
27
+ method: "POST",
28
+ headers: { "Content-Type": "application/json" },
29
+ body,
30
+ });
31
+ }
32
+ }
33
+ return response;
34
+ }
35
+ /**
36
+ * Parse an address string into structured components using Google Maps Geocoding
37
+ *
38
+ * @example
39
+ * const parsed = await geo.parseAddress("1600 Amphitheatre Parkway, Mountain View, CA");
40
+ * // {
41
+ * // streetNumber: "1600",
42
+ * // route: "Amphitheatre Parkway",
43
+ * // city: "Mountain View",
44
+ * // state: "California",
45
+ * // postalCode: "94043",
46
+ * // country: "United States",
47
+ * // lat: 37.4224764,
48
+ * // lng: -122.0842499
49
+ * // }
50
+ */
51
+ async function parseAddress(address) {
52
+ return queue(async () => {
53
+ return rateLimiter(async () => {
54
+ const body = JSON.stringify({ address });
55
+ const response = await fetchWithRedirect(API_URL, body);
56
+ if (!response.ok) {
57
+ const text = await response.text();
58
+ throw new Error(`Geo parseAddress failed: ${response.status} ${text}`);
59
+ }
60
+ const data = (await response.json());
61
+ if (data.error) {
62
+ throw new Error(`Geo error: ${data.error}`);
63
+ }
64
+ return data;
65
+ });
66
+ });
67
+ }
68
+ /**
69
+ * Get coordinates (lat/lng) for an address
70
+ *
71
+ * @example
72
+ * const coords = await geo.geocode("Times Square, NYC");
73
+ * // { lat: 40.758896, lng: -73.985130 }
74
+ */
75
+ async function geocode(address) {
76
+ const parsed = await parseAddress(address);
77
+ return { lat: parsed.lat, lng: parsed.lng };
78
+ }
79
+ /**
80
+ * Get the city and state for an address
81
+ */
82
+ async function getCityState(address) {
83
+ const parsed = await parseAddress(address);
84
+ return { city: parsed.city, state: parsed.state };
85
+ }
86
+ // Export as namespace
87
+ exports.geo = {
88
+ parseAddress,
89
+ geocode,
90
+ getCityState,
91
+ };
package/dist/index.d.ts CHANGED
@@ -2,7 +2,10 @@ import { b2b } from "./b2b";
2
2
  import { serp } from "./serp";
3
3
  import { firecrawl } from "./firecrawl";
4
4
  import { browser } from "./browser";
5
- export { b2b, serp, firecrawl, browser };
5
+ import { generateObject } from "./generateObject";
6
+ import { apify } from "./apify";
7
+ import { geo } from "./geo";
8
+ export { b2b, serp, firecrawl, browser, generateObject, apify, geo };
6
9
  /**
7
10
  * Main orangeslice namespace - AI sales agent toolkit
8
11
  *
@@ -15,15 +18,27 @@ export { b2b, serp, firecrawl, browser };
15
18
  * // Google Search
16
19
  * const results = await orangeslice.serp.search("best CRM software 2024");
17
20
  *
18
- * // Website Scraping (simple)
21
+ * // Website Scraping (static pages)
19
22
  * const page = await orangeslice.firecrawl.scrape("https://stripe.com/about");
20
23
  *
21
- * // Browser Automation (Playwright)
24
+ * // Browser Automation (dynamic pages, Playwright)
22
25
  * const data = await orangeslice.browser.execute(`
23
26
  * await page.goto("https://example.com", { waitUntil: 'domcontentloaded' });
24
27
  * return await page.evaluate(() => document.title);
25
28
  * `);
26
29
  *
30
+ * // AI Structured Output
31
+ * const extracted = await orangeslice.generateObject.generate({
32
+ * prompt: "Extract company info from: Apple was founded in 1976",
33
+ * schema: { type: "object", properties: { name: { type: "string" }, year: { type: "number" } } }
34
+ * });
35
+ *
36
+ * // Apify Actors (web scrapers)
37
+ * const reviews = await orangeslice.apify.run("compass/crawler-google-places", { searchStringsArray: ["cafes NYC"] });
38
+ *
39
+ * // Geocoding
40
+ * const location = await orangeslice.geo.parseAddress("1600 Amphitheatre Parkway, Mountain View, CA");
41
+ *
27
42
  * // All calls are automatically rate-limited and queued
28
43
  */
29
44
  export declare const orangeslice: {
@@ -46,5 +61,19 @@ export declare const orangeslice: {
46
61
  snapshot: typeof import("./browser").snapshot;
47
62
  text: typeof import("./browser").text;
48
63
  };
64
+ generateObject: {
65
+ generate: typeof import("./generateObject").generate;
66
+ extract: typeof import("./generateObject").extract;
67
+ };
68
+ apify: {
69
+ run: typeof import("./apify").run;
70
+ search: typeof import("./apify").search;
71
+ getInputSchema: typeof import("./apify").getInputSchema;
72
+ };
73
+ geo: {
74
+ parseAddress: typeof import("./geo").parseAddress;
75
+ geocode: typeof import("./geo").geocode;
76
+ getCityState: typeof import("./geo").getCityState;
77
+ };
49
78
  };
50
79
  export default orangeslice;