@opentabs-dev/opentabs-plugin-zillow 0.0.74
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 +159 -0
- package/dist/adapter.iife.js +15211 -0
- package/dist/adapter.iife.js.map +7 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/get-current-user.d.ts +14 -0
- package/dist/tools/get-current-user.d.ts.map +1 -0
- package/dist/tools/get-current-user.js +19 -0
- package/dist/tools/get-current-user.js.map +1 -0
- package/dist/tools/get-market-overview.d.ts +10 -0
- package/dist/tools/get-market-overview.d.ts.map +1 -0
- package/dist/tools/get-market-overview.js +70 -0
- package/dist/tools/get-market-overview.js.map +1 -0
- package/dist/tools/get-saved-homes.d.ts +6 -0
- package/dist/tools/get-saved-homes.d.ts.map +1 -0
- package/dist/tools/get-saved-homes.js +30 -0
- package/dist/tools/get-saved-homes.js.map +1 -0
- package/dist/tools/schemas.d.ts +99 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +101 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/search-by-address.d.ts +32 -0
- package/dist/tools/search-by-address.d.ts.map +1 -0
- package/dist/tools/search-by-address.js +49 -0
- package/dist/tools/search-by-address.js.map +1 -0
- package/dist/tools/search-by-owner.d.ts +51 -0
- package/dist/tools/search-by-owner.d.ts.map +1 -0
- package/dist/tools/search-by-owner.js +78 -0
- package/dist/tools/search-by-owner.js.map +1 -0
- package/dist/tools/search-for-rent.d.ts +56 -0
- package/dist/tools/search-for-rent.d.ts.map +1 -0
- package/dist/tools/search-for-rent.js +86 -0
- package/dist/tools/search-for-rent.js.map +1 -0
- package/dist/tools/search-for-sale.d.ts +68 -0
- package/dist/tools/search-for-sale.d.ts.map +1 -0
- package/dist/tools/search-for-sale.js +98 -0
- package/dist/tools/search-for-sale.js.map +1 -0
- package/dist/tools/search-foreclosures.d.ts +49 -0
- package/dist/tools/search-foreclosures.d.ts.map +1 -0
- package/dist/tools/search-foreclosures.js +75 -0
- package/dist/tools/search-foreclosures.js.map +1 -0
- package/dist/tools/search-locations.d.ts +18 -0
- package/dist/tools/search-locations.d.ts.map +1 -0
- package/dist/tools/search-locations.js +23 -0
- package/dist/tools/search-locations.js.map +1 -0
- package/dist/tools/search-new-construction.d.ts +51 -0
- package/dist/tools/search-new-construction.d.ts.map +1 -0
- package/dist/tools/search-new-construction.js +78 -0
- package/dist/tools/search-new-construction.js.map +1 -0
- package/dist/tools/search-open-houses.d.ts +41 -0
- package/dist/tools/search-open-houses.d.ts.map +1 -0
- package/dist/tools/search-open-houses.js +59 -0
- package/dist/tools/search-open-houses.js.map +1 -0
- package/dist/tools/search-recently-sold.d.ts +52 -0
- package/dist/tools/search-recently-sold.d.ts.map +1 -0
- package/dist/tools/search-recently-sold.js +82 -0
- package/dist/tools/search-recently-sold.js.map +1 -0
- package/dist/tools.json +2056 -0
- package/dist/zillow-api.d.ts +143 -0
- package/dist/zillow-api.d.ts.map +1 -0
- package/dist/zillow-api.js +82 -0
- package/dist/zillow-api.js.map +1 -0
- package/package.json +55 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import type { ToolDefinition } from '@opentabs-dev/plugin-sdk';
|
|
3
|
+
declare class ZillowPlugin extends OpenTabsPlugin {
|
|
4
|
+
readonly name = "zillow";
|
|
5
|
+
readonly description = "OpenTabs plugin for Zillow real estate search";
|
|
6
|
+
readonly displayName = "Zillow";
|
|
7
|
+
readonly urlPatterns: string[];
|
|
8
|
+
readonly homepage = "https://www.zillow.com";
|
|
9
|
+
readonly tools: ToolDefinition[];
|
|
10
|
+
isReady(): Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: ZillowPlugin;
|
|
13
|
+
export default _default;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAe/D,cAAM,YAAa,SAAQ,cAAc;IACvC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,mDAAmD;IACvE,SAAkB,WAAW,YAAY;IACzC,QAAQ,CAAC,WAAW,WAA0B;IAC9C,SAAkB,QAAQ,4BAA4B;IACtD,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,CAkB9B;IAEI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAIlC;;AAED,wBAAkC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { isAuthenticated, waitForAuth } from './zillow-api.js';
|
|
3
|
+
import { getCurrentUser } from './tools/get-current-user.js';
|
|
4
|
+
import { getMarketOverview } from './tools/get-market-overview.js';
|
|
5
|
+
import { getSavedHomes } from './tools/get-saved-homes.js';
|
|
6
|
+
import { searchByAddress } from './tools/search-by-address.js';
|
|
7
|
+
import { searchByOwner } from './tools/search-by-owner.js';
|
|
8
|
+
import { searchForRent } from './tools/search-for-rent.js';
|
|
9
|
+
import { searchForSale } from './tools/search-for-sale.js';
|
|
10
|
+
import { searchForeclosures } from './tools/search-foreclosures.js';
|
|
11
|
+
import { searchLocations } from './tools/search-locations.js';
|
|
12
|
+
import { searchNewConstruction } from './tools/search-new-construction.js';
|
|
13
|
+
import { searchOpenHouses } from './tools/search-open-houses.js';
|
|
14
|
+
import { searchRecentlySold } from './tools/search-recently-sold.js';
|
|
15
|
+
class ZillowPlugin extends OpenTabsPlugin {
|
|
16
|
+
name = 'zillow';
|
|
17
|
+
description = 'OpenTabs plugin for Zillow real estate search';
|
|
18
|
+
displayName = 'Zillow';
|
|
19
|
+
urlPatterns = ['*://*.zillow.com/*'];
|
|
20
|
+
homepage = 'https://www.zillow.com';
|
|
21
|
+
tools = [
|
|
22
|
+
// Account
|
|
23
|
+
getCurrentUser,
|
|
24
|
+
// Search
|
|
25
|
+
searchLocations,
|
|
26
|
+
searchForSale,
|
|
27
|
+
searchForRent,
|
|
28
|
+
searchRecentlySold,
|
|
29
|
+
searchOpenHouses,
|
|
30
|
+
searchNewConstruction,
|
|
31
|
+
searchForeclosures,
|
|
32
|
+
searchByOwner,
|
|
33
|
+
// Properties
|
|
34
|
+
searchByAddress,
|
|
35
|
+
// Saved Homes
|
|
36
|
+
getSavedHomes,
|
|
37
|
+
// Market
|
|
38
|
+
getMarketOverview,
|
|
39
|
+
];
|
|
40
|
+
async isReady() {
|
|
41
|
+
if (isAuthenticated())
|
|
42
|
+
return true;
|
|
43
|
+
return waitForAuth();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export default new ZillowPlugin();
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,MAAM,YAAa,SAAQ,cAAc;IAC9B,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,+CAA+C,CAAC;IACrD,WAAW,GAAG,QAAQ,CAAC;IAChC,WAAW,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC5B,QAAQ,GAAG,wBAAwB,CAAC;IAC7C,KAAK,GAAqB;QACjC,UAAU;QACV,cAAc;QACd,SAAS;QACT,eAAe;QACf,aAAa;QACb,aAAa;QACb,kBAAkB;QAClB,gBAAgB;QAChB,qBAAqB;QACrB,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,eAAe;QACf,cAAc;QACd,aAAa;QACb,SAAS;QACT,iBAAiB;KAClB,CAAC;IAEF,KAAK,CAAC,OAAO;QACX,IAAI,eAAe,EAAE;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;CACF;AAED,eAAe,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getCurrentUser: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
|
|
3
|
+
user: z.ZodObject<{
|
|
4
|
+
is_logged_in: z.ZodBoolean;
|
|
5
|
+
email: z.ZodString;
|
|
6
|
+
display_name: z.ZodString;
|
|
7
|
+
full_name: z.ZodString;
|
|
8
|
+
guid: z.ZodString;
|
|
9
|
+
zuid: z.ZodString;
|
|
10
|
+
saved_homes_count: z.ZodNumber;
|
|
11
|
+
is_agent: z.ZodBoolean;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
//# sourceMappingURL=get-current-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-current-user.d.ts","sourceRoot":"","sources":["../../src/tools/get-current-user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;;;kBAczB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getUserFromSearchResponse } from '../zillow-api.js';
|
|
4
|
+
import { mapUser, userSchema } from './schemas.js';
|
|
5
|
+
export const getCurrentUser = defineTool({
|
|
6
|
+
name: 'get_current_user',
|
|
7
|
+
displayName: 'Get Current User',
|
|
8
|
+
description: 'Get the currently authenticated Zillow user profile including email, name, saved homes count, and agent status.',
|
|
9
|
+
summary: 'Get the current Zillow user profile',
|
|
10
|
+
icon: 'user',
|
|
11
|
+
group: 'Account',
|
|
12
|
+
input: z.object({}),
|
|
13
|
+
output: z.object({ user: userSchema }),
|
|
14
|
+
handle: async () => {
|
|
15
|
+
const raw = await getUserFromSearchResponse();
|
|
16
|
+
return { user: mapUser(raw) };
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=get-current-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-current-user.js","sourceRoot":"","sources":["../../src/tools/get-current-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,iHAAiH;IACnH,OAAO,EAAE,qCAAqC;IAC9C,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACtC,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getMarketOverview: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
region_id: z.ZodNumber;
|
|
4
|
+
region_type: z.ZodOptional<z.ZodString>;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
for_sale_total: z.ZodNumber;
|
|
7
|
+
for_rent_total: z.ZodNumber;
|
|
8
|
+
recently_sold_total: z.ZodNumber;
|
|
9
|
+
}, z.core.$strip>>;
|
|
10
|
+
//# sourceMappingURL=get-market-overview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-market-overview.d.ts","sourceRoot":"","sources":["../../src/tools/get-market-overview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;kBA+E5B,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { search, REGION_TYPE_MAP } from '../zillow-api.js';
|
|
4
|
+
export const getMarketOverview = defineTool({
|
|
5
|
+
name: 'get_market_overview',
|
|
6
|
+
displayName: 'Get Market Overview',
|
|
7
|
+
description: 'Get a market overview for a location showing total listings counts across categories: for sale, for rent, and recently sold. Useful for understanding market activity in a specific area.',
|
|
8
|
+
summary: 'Get market listing counts for an area',
|
|
9
|
+
icon: 'bar-chart-3',
|
|
10
|
+
group: 'Market',
|
|
11
|
+
input: z.object({
|
|
12
|
+
region_id: z.number().int().describe('Zillow region ID (from search_locations)'),
|
|
13
|
+
region_type: z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('Region type: "city", "county", "zipcode", "neighborhood" (default "city")'),
|
|
17
|
+
}),
|
|
18
|
+
output: z.object({
|
|
19
|
+
for_sale_total: z.number().describe('Total properties for sale'),
|
|
20
|
+
for_rent_total: z.number().describe('Total rental listings'),
|
|
21
|
+
recently_sold_total: z.number().describe('Total recently sold properties'),
|
|
22
|
+
}),
|
|
23
|
+
handle: async (params) => {
|
|
24
|
+
const regionType = REGION_TYPE_MAP[params.region_type ?? 'city'] ?? 6;
|
|
25
|
+
const defaultBounds = { west: -180, east: 180, south: -90, north: 90 };
|
|
26
|
+
// Fetch for-sale count
|
|
27
|
+
const forSaleData = await search({
|
|
28
|
+
mapBounds: defaultBounds,
|
|
29
|
+
regionSelection: [{ regionId: params.region_id, regionType }],
|
|
30
|
+
filterState: {},
|
|
31
|
+
isMapVisible: false,
|
|
32
|
+
}, { cat1: ['total'] });
|
|
33
|
+
// Fetch rental count
|
|
34
|
+
const rentalData = await search({
|
|
35
|
+
mapBounds: defaultBounds,
|
|
36
|
+
regionSelection: [{ regionId: params.region_id, regionType }],
|
|
37
|
+
filterState: {
|
|
38
|
+
isForRent: { value: true },
|
|
39
|
+
isForSaleByAgent: { value: false },
|
|
40
|
+
isForSaleByOwner: { value: false },
|
|
41
|
+
isNewConstruction: { value: false },
|
|
42
|
+
isComingSoon: { value: false },
|
|
43
|
+
isAuction: { value: false },
|
|
44
|
+
isForSaleForeclosure: { value: false },
|
|
45
|
+
},
|
|
46
|
+
isMapVisible: false,
|
|
47
|
+
}, { cat1: ['total'] });
|
|
48
|
+
// Fetch recently sold count
|
|
49
|
+
const soldData = await search({
|
|
50
|
+
mapBounds: defaultBounds,
|
|
51
|
+
regionSelection: [{ regionId: params.region_id, regionType }],
|
|
52
|
+
filterState: {
|
|
53
|
+
isRecentlySold: { value: true },
|
|
54
|
+
isForSaleByAgent: { value: false },
|
|
55
|
+
isForSaleByOwner: { value: false },
|
|
56
|
+
isNewConstruction: { value: false },
|
|
57
|
+
isComingSoon: { value: false },
|
|
58
|
+
isAuction: { value: false },
|
|
59
|
+
isForSaleForeclosure: { value: false },
|
|
60
|
+
},
|
|
61
|
+
isMapVisible: false,
|
|
62
|
+
}, { cat1: ['total'] });
|
|
63
|
+
return {
|
|
64
|
+
for_sale_total: forSaleData.categoryTotals?.cat1?.totalResultCount ?? 0,
|
|
65
|
+
for_rent_total: rentalData.categoryTotals?.cat1?.totalResultCount ?? 0,
|
|
66
|
+
recently_sold_total: soldData.categoryTotals?.cat1?.totalResultCount ?? 0,
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=get-market-overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-market-overview.js","sourceRoot":"","sources":["../../src/tools/get-market-overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getSavedHomes: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
|
|
3
|
+
saved_home_zpids: z.ZodArray<z.ZodString>;
|
|
4
|
+
total: z.ZodNumber;
|
|
5
|
+
}, z.core.$strip>>;
|
|
6
|
+
//# sourceMappingURL=get-saved-homes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-saved-homes.d.ts","sourceRoot":"","sources":["../../src/tools/get-saved-homes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,aAAa;;;kBA+BxB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineTool, ToolError, getPageGlobal } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getUserFromSearchResponse } from '../zillow-api.js';
|
|
4
|
+
export const getSavedHomes = defineTool({
|
|
5
|
+
name: 'get_saved_homes',
|
|
6
|
+
displayName: 'Get Saved Homes',
|
|
7
|
+
description: 'Get the list of Zillow property IDs (zpids) that the current user has saved to their favorites. Returns the zpid list and total count. Use search_by_address or search_for_sale with specific zpids to get full property details for saved homes.',
|
|
8
|
+
summary: 'Get saved/favorited home zpids',
|
|
9
|
+
icon: 'heart',
|
|
10
|
+
group: 'Saved Homes',
|
|
11
|
+
input: z.object({}),
|
|
12
|
+
output: z.object({
|
|
13
|
+
saved_home_zpids: z.array(z.string()).describe('Zillow property IDs of saved homes'),
|
|
14
|
+
total: z.number().describe('Total number of saved homes'),
|
|
15
|
+
}),
|
|
16
|
+
handle: async () => {
|
|
17
|
+
const user = await getUserFromSearchResponse();
|
|
18
|
+
if (!user.isLoggedIn) {
|
|
19
|
+
throw ToolError.auth('Not logged in — please log in to Zillow to view saved homes.');
|
|
20
|
+
}
|
|
21
|
+
// savedHomeIds is only available from the full page __NEXT_DATA__, not from the search API response
|
|
22
|
+
const pageUser = getPageGlobal('__NEXT_DATA__.props.pageProps.searchPageState.user');
|
|
23
|
+
const zpids = pageUser?.savedHomeIds ?? [];
|
|
24
|
+
return {
|
|
25
|
+
saved_home_zpids: zpids,
|
|
26
|
+
total: user.savedHomesCount ?? zpids.length,
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=get-saved-homes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-saved-homes.js","sourceRoot":"","sources":["../../src/tools/get-saved-homes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EACT,mPAAmP;IACrP,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC1D,CAAC;IACF,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,SAAS,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACvF,CAAC;QAED,oGAAoG;QACpG,MAAM,QAAQ,GAAG,aAAa,CAAC,oDAAoD,CAEtE,CAAC;QACd,MAAM,KAAK,GAAG,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC;QAE3C,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM;SAC5C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { RawListing, RawSearchUser, AutocompleteResult } from '../zillow-api.js';
|
|
3
|
+
export declare const listingSchema: z.ZodObject<{
|
|
4
|
+
zpid: z.ZodString;
|
|
5
|
+
address: z.ZodString;
|
|
6
|
+
street: z.ZodString;
|
|
7
|
+
city: z.ZodString;
|
|
8
|
+
state: z.ZodString;
|
|
9
|
+
zipcode: z.ZodString;
|
|
10
|
+
price: z.ZodString;
|
|
11
|
+
price_raw: z.ZodNumber;
|
|
12
|
+
beds: z.ZodNumber;
|
|
13
|
+
baths: z.ZodNumber;
|
|
14
|
+
sqft: z.ZodNumber;
|
|
15
|
+
status: z.ZodString;
|
|
16
|
+
status_text: z.ZodString;
|
|
17
|
+
home_type: z.ZodString;
|
|
18
|
+
days_on_zillow: z.ZodNumber;
|
|
19
|
+
zestimate: z.ZodNumber;
|
|
20
|
+
rent_zestimate: z.ZodNumber;
|
|
21
|
+
tax_assessed_value: z.ZodNumber;
|
|
22
|
+
latitude: z.ZodNumber;
|
|
23
|
+
longitude: z.ZodNumber;
|
|
24
|
+
image_url: z.ZodString;
|
|
25
|
+
detail_url: z.ZodString;
|
|
26
|
+
is_saved: z.ZodBoolean;
|
|
27
|
+
has_3d_model: z.ZodBoolean;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export declare const mapListing: (l: RawListing) => {
|
|
30
|
+
zpid: string;
|
|
31
|
+
address: string;
|
|
32
|
+
street: string;
|
|
33
|
+
city: string;
|
|
34
|
+
state: string;
|
|
35
|
+
zipcode: string;
|
|
36
|
+
price: string;
|
|
37
|
+
price_raw: number;
|
|
38
|
+
beds: number;
|
|
39
|
+
baths: number;
|
|
40
|
+
sqft: number;
|
|
41
|
+
status: string;
|
|
42
|
+
status_text: string;
|
|
43
|
+
home_type: string;
|
|
44
|
+
days_on_zillow: number;
|
|
45
|
+
zestimate: number;
|
|
46
|
+
rent_zestimate: number;
|
|
47
|
+
tax_assessed_value: number;
|
|
48
|
+
latitude: number;
|
|
49
|
+
longitude: number;
|
|
50
|
+
image_url: string;
|
|
51
|
+
detail_url: string;
|
|
52
|
+
is_saved: boolean;
|
|
53
|
+
has_3d_model: boolean;
|
|
54
|
+
};
|
|
55
|
+
export declare const userSchema: z.ZodObject<{
|
|
56
|
+
is_logged_in: z.ZodBoolean;
|
|
57
|
+
email: z.ZodString;
|
|
58
|
+
display_name: z.ZodString;
|
|
59
|
+
full_name: z.ZodString;
|
|
60
|
+
guid: z.ZodString;
|
|
61
|
+
zuid: z.ZodString;
|
|
62
|
+
saved_homes_count: z.ZodNumber;
|
|
63
|
+
is_agent: z.ZodBoolean;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
export declare const mapUser: (u: RawSearchUser) => {
|
|
66
|
+
is_logged_in: boolean;
|
|
67
|
+
email: string;
|
|
68
|
+
display_name: string;
|
|
69
|
+
full_name: string;
|
|
70
|
+
guid: string;
|
|
71
|
+
zuid: string;
|
|
72
|
+
saved_homes_count: number;
|
|
73
|
+
is_agent: boolean;
|
|
74
|
+
};
|
|
75
|
+
export declare const locationSchema: z.ZodObject<{
|
|
76
|
+
display: z.ZodString;
|
|
77
|
+
type: z.ZodString;
|
|
78
|
+
city: z.ZodString;
|
|
79
|
+
state: z.ZodString;
|
|
80
|
+
county: z.ZodString;
|
|
81
|
+
region_id: z.ZodNumber;
|
|
82
|
+
region_type: z.ZodString;
|
|
83
|
+
latitude: z.ZodNumber;
|
|
84
|
+
longitude: z.ZodNumber;
|
|
85
|
+
zpid: z.ZodNumber;
|
|
86
|
+
}, z.core.$strip>;
|
|
87
|
+
export declare const mapLocation: (r: AutocompleteResult) => {
|
|
88
|
+
display: string;
|
|
89
|
+
type: string;
|
|
90
|
+
city: string;
|
|
91
|
+
state: string;
|
|
92
|
+
county: string;
|
|
93
|
+
region_id: number;
|
|
94
|
+
region_type: string;
|
|
95
|
+
latitude: number;
|
|
96
|
+
longitude: number;
|
|
97
|
+
zpid: number;
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBxB,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,GAAG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtC,CAAC;AAIH,eAAO,MAAM,UAAU;;;;;;;;;iBASrB,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,GAAG,aAAa;;;;;;;;;CAStC,CAAC;AAIH,eAAO,MAAM,cAAc;;;;;;;;;;;iBAWzB,CAAC;AAEH,eAAO,MAAM,WAAW,GAAI,GAAG,kBAAkB;;;;;;;;;;;CAW/C,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// --- Listing schema ---
|
|
3
|
+
export const listingSchema = z.object({
|
|
4
|
+
zpid: z.string().describe('Zillow property ID'),
|
|
5
|
+
address: z.string().describe('Full address'),
|
|
6
|
+
street: z.string().describe('Street address'),
|
|
7
|
+
city: z.string().describe('City'),
|
|
8
|
+
state: z.string().describe('State abbreviation'),
|
|
9
|
+
zipcode: z.string().describe('ZIP code'),
|
|
10
|
+
price: z.string().describe('Formatted price (e.g., "$500,000" or "$4,085/mo")'),
|
|
11
|
+
price_raw: z.number().describe('Numeric price in dollars'),
|
|
12
|
+
beds: z.number().describe('Number of bedrooms'),
|
|
13
|
+
baths: z.number().describe('Number of bathrooms'),
|
|
14
|
+
sqft: z.number().describe('Living area in square feet'),
|
|
15
|
+
status: z.string().describe('Listing status (FOR_SALE, FOR_RENT, RECENTLY_SOLD)'),
|
|
16
|
+
status_text: z.string().describe('Human-readable status (e.g., "Condo for sale")'),
|
|
17
|
+
home_type: z.string().describe('Property type (SINGLE_FAMILY, CONDO, TOWNHOUSE, etc.)'),
|
|
18
|
+
days_on_zillow: z.number().describe('Days listed on Zillow'),
|
|
19
|
+
zestimate: z.number().describe('Zillow Zestimate value in dollars (0 if unavailable)'),
|
|
20
|
+
rent_zestimate: z.number().describe('Estimated monthly rent in dollars (0 if unavailable)'),
|
|
21
|
+
tax_assessed_value: z.number().describe('Tax assessed value in dollars (0 if unavailable)'),
|
|
22
|
+
latitude: z.number().describe('Latitude coordinate'),
|
|
23
|
+
longitude: z.number().describe('Longitude coordinate'),
|
|
24
|
+
image_url: z.string().describe('Primary listing photo URL'),
|
|
25
|
+
detail_url: z.string().describe('URL to the property detail page on Zillow'),
|
|
26
|
+
is_saved: z.boolean().describe("Whether the property is saved to the user's favorites"),
|
|
27
|
+
has_3d_model: z.boolean().describe('Whether a 3D virtual tour is available'),
|
|
28
|
+
});
|
|
29
|
+
export const mapListing = (l) => ({
|
|
30
|
+
zpid: l.zpid ?? '',
|
|
31
|
+
address: l.address ?? '',
|
|
32
|
+
street: l.addressStreet ?? '',
|
|
33
|
+
city: l.addressCity ?? l.hdpData?.homeInfo?.city ?? '',
|
|
34
|
+
state: l.addressState ?? l.hdpData?.homeInfo?.state ?? '',
|
|
35
|
+
zipcode: l.addressZipcode ?? l.hdpData?.homeInfo?.zipcode ?? '',
|
|
36
|
+
price: l.price ?? '',
|
|
37
|
+
price_raw: l.unformattedPrice ?? l.hdpData?.homeInfo?.price ?? 0,
|
|
38
|
+
beds: l.beds ?? l.hdpData?.homeInfo?.bedrooms ?? 0,
|
|
39
|
+
baths: l.baths ?? l.hdpData?.homeInfo?.bathrooms ?? 0,
|
|
40
|
+
sqft: l.area ?? l.hdpData?.homeInfo?.livingArea ?? 0,
|
|
41
|
+
status: l.statusType ?? l.hdpData?.homeInfo?.homeStatus ?? '',
|
|
42
|
+
status_text: l.statusText ?? '',
|
|
43
|
+
home_type: l.hdpData?.homeInfo?.homeType ?? '',
|
|
44
|
+
days_on_zillow: l.hdpData?.homeInfo?.daysOnZillow ?? 0,
|
|
45
|
+
zestimate: l.zestimate ?? l.hdpData?.homeInfo?.zestimate ?? 0,
|
|
46
|
+
rent_zestimate: l.hdpData?.homeInfo?.rentZestimate ?? 0,
|
|
47
|
+
tax_assessed_value: l.hdpData?.homeInfo?.taxAssessedValue ?? 0,
|
|
48
|
+
latitude: l.latLong?.latitude ?? l.hdpData?.homeInfo?.latitude ?? 0,
|
|
49
|
+
longitude: l.latLong?.longitude ?? l.hdpData?.homeInfo?.longitude ?? 0,
|
|
50
|
+
image_url: l.imgSrc ?? '',
|
|
51
|
+
detail_url: l.detailUrl ?? '',
|
|
52
|
+
is_saved: l.isSaved ?? false,
|
|
53
|
+
has_3d_model: l.has3DModel ?? false,
|
|
54
|
+
});
|
|
55
|
+
// --- User schema ---
|
|
56
|
+
export const userSchema = z.object({
|
|
57
|
+
is_logged_in: z.boolean().describe('Whether the user is logged in'),
|
|
58
|
+
email: z.string().describe('User email address'),
|
|
59
|
+
display_name: z.string().describe('User display name'),
|
|
60
|
+
full_name: z.string().describe('User full name'),
|
|
61
|
+
guid: z.string().describe('Global user ID'),
|
|
62
|
+
zuid: z.string().describe('Zillow user ID'),
|
|
63
|
+
saved_homes_count: z.number().describe('Number of saved homes'),
|
|
64
|
+
is_agent: z.boolean().describe('Whether the user is a real estate agent'),
|
|
65
|
+
});
|
|
66
|
+
export const mapUser = (u) => ({
|
|
67
|
+
is_logged_in: u.isLoggedIn ?? false,
|
|
68
|
+
email: u.email ?? '',
|
|
69
|
+
display_name: u.displayName ?? '',
|
|
70
|
+
full_name: u.fullName ?? '',
|
|
71
|
+
guid: u.guid ?? '',
|
|
72
|
+
zuid: u.zuid ?? '',
|
|
73
|
+
saved_homes_count: u.savedHomesCount ?? 0,
|
|
74
|
+
is_agent: u.isAgent ?? false,
|
|
75
|
+
});
|
|
76
|
+
// --- Location schema ---
|
|
77
|
+
export const locationSchema = z.object({
|
|
78
|
+
display: z.string().describe('Display text for the location'),
|
|
79
|
+
type: z.string().describe('Result type (Region, Address)'),
|
|
80
|
+
city: z.string().describe('City name'),
|
|
81
|
+
state: z.string().describe('State abbreviation'),
|
|
82
|
+
county: z.string().describe('County name'),
|
|
83
|
+
region_id: z.number().describe('Zillow region ID (use with search tools)'),
|
|
84
|
+
region_type: z.string().describe('Region type (city, zipcode, neighborhood, county)'),
|
|
85
|
+
latitude: z.number().describe('Latitude coordinate'),
|
|
86
|
+
longitude: z.number().describe('Longitude coordinate'),
|
|
87
|
+
zpid: z.number().describe('Zillow property ID (for address results, 0 otherwise)'),
|
|
88
|
+
});
|
|
89
|
+
export const mapLocation = (r) => ({
|
|
90
|
+
display: r.display ?? '',
|
|
91
|
+
type: r.resultType ?? '',
|
|
92
|
+
city: r.metaData?.city ?? '',
|
|
93
|
+
state: r.metaData?.state ?? '',
|
|
94
|
+
county: r.metaData?.county ?? '',
|
|
95
|
+
region_id: r.metaData?.regionId ?? 0,
|
|
96
|
+
region_type: r.metaData?.regionType ?? '',
|
|
97
|
+
latitude: r.metaData?.lat ?? 0,
|
|
98
|
+
longitude: r.metaData?.lng ?? 0,
|
|
99
|
+
zpid: r.metaData?.zpid ?? 0,
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const searchByAddress: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
address: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
listings: z.ZodArray<z.ZodObject<{
|
|
6
|
+
zpid: z.ZodString;
|
|
7
|
+
address: z.ZodString;
|
|
8
|
+
street: z.ZodString;
|
|
9
|
+
city: z.ZodString;
|
|
10
|
+
state: z.ZodString;
|
|
11
|
+
zipcode: z.ZodString;
|
|
12
|
+
price: z.ZodString;
|
|
13
|
+
price_raw: z.ZodNumber;
|
|
14
|
+
beds: z.ZodNumber;
|
|
15
|
+
baths: z.ZodNumber;
|
|
16
|
+
sqft: z.ZodNumber;
|
|
17
|
+
status: z.ZodString;
|
|
18
|
+
status_text: z.ZodString;
|
|
19
|
+
home_type: z.ZodString;
|
|
20
|
+
days_on_zillow: z.ZodNumber;
|
|
21
|
+
zestimate: z.ZodNumber;
|
|
22
|
+
rent_zestimate: z.ZodNumber;
|
|
23
|
+
tax_assessed_value: z.ZodNumber;
|
|
24
|
+
latitude: z.ZodNumber;
|
|
25
|
+
longitude: z.ZodNumber;
|
|
26
|
+
image_url: z.ZodString;
|
|
27
|
+
detail_url: z.ZodString;
|
|
28
|
+
is_saved: z.ZodBoolean;
|
|
29
|
+
has_3d_model: z.ZodBoolean;
|
|
30
|
+
}, z.core.$strip>>;
|
|
31
|
+
}, z.core.$strip>>;
|
|
32
|
+
//# sourceMappingURL=search-by-address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-by-address.d.ts","sourceRoot":"","sources":["../../src/tools/search-by-address.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqD1B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { defineTool, ToolError } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { autocomplete, search } from '../zillow-api.js';
|
|
4
|
+
import { listingSchema, mapListing } from './schemas.js';
|
|
5
|
+
export const searchByAddress = defineTool({
|
|
6
|
+
name: 'search_by_address',
|
|
7
|
+
displayName: 'Search by Address',
|
|
8
|
+
description: 'Look up a specific property by its street address. First resolves the address to coordinates via autocomplete, then searches for matching properties nearby. Returns the closest matching listing with full details including Zestimate, tax assessment, and rental estimate.',
|
|
9
|
+
summary: 'Look up a property by street address',
|
|
10
|
+
icon: 'map-pin',
|
|
11
|
+
group: 'Properties',
|
|
12
|
+
input: z.object({
|
|
13
|
+
address: z.string().min(1).describe('Street address to look up (e.g., "123 Main St, San Francisco, CA")'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({
|
|
16
|
+
listings: z.array(listingSchema).describe('Matching properties (usually 1 for exact address match)'),
|
|
17
|
+
}),
|
|
18
|
+
handle: async (params) => {
|
|
19
|
+
const results = await autocomplete(params.address);
|
|
20
|
+
const addressResult = results.find(r => r.resultType === 'Address');
|
|
21
|
+
if (!addressResult?.metaData?.lat || !addressResult?.metaData?.lng) {
|
|
22
|
+
throw ToolError.notFound(`No property found for address: ${params.address}`);
|
|
23
|
+
}
|
|
24
|
+
const lat = addressResult.metaData.lat;
|
|
25
|
+
const lng = addressResult.metaData.lng;
|
|
26
|
+
const delta = 0.005;
|
|
27
|
+
const data = await search({
|
|
28
|
+
mapBounds: {
|
|
29
|
+
west: lng - delta,
|
|
30
|
+
east: lng + delta,
|
|
31
|
+
south: lat - delta,
|
|
32
|
+
north: lat + delta,
|
|
33
|
+
},
|
|
34
|
+
filterState: {},
|
|
35
|
+
isMapVisible: true,
|
|
36
|
+
}, { cat1: ['listResults'] });
|
|
37
|
+
const listings = data.cat1?.searchResults?.listResults ?? [];
|
|
38
|
+
// If autocomplete returned a zpid, filter to that specific property
|
|
39
|
+
if (addressResult.metaData.zpid) {
|
|
40
|
+
const zpidStr = String(addressResult.metaData.zpid);
|
|
41
|
+
const match = listings.filter(l => l.zpid === zpidStr);
|
|
42
|
+
if (match.length > 0) {
|
|
43
|
+
return { listings: match.map(mapListing) };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { listings: listings.slice(0, 5).map(mapListing) };
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=search-by-address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-by-address.js","sourceRoot":"","sources":["../../src/tools/search-by-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EACT,+QAA+Q;IACjR,OAAO,EAAE,sCAAsC;IAC/C,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oEAAoE,CAAC;KAC1G,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;KACrG,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;QAEpE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACnE,MAAM,SAAS,CAAC,QAAQ,CAAC,kCAAkC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;QACvC,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC;QAEpB,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB;YACE,SAAS,EAAE;gBACT,IAAI,EAAE,GAAG,GAAG,KAAK;gBACjB,IAAI,EAAE,GAAG,GAAG,KAAK;gBACjB,KAAK,EAAE,GAAG,GAAG,KAAK;gBAClB,KAAK,EAAE,GAAG,GAAG,KAAK;aACnB;YACD,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,IAAI;SACnB,EACD,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAC1B,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,IAAI,EAAE,CAAC;QAE7D,oEAAoE;QACpE,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const searchByOwner: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
region_id: z.ZodOptional<z.ZodNumber>;
|
|
4
|
+
region_type: z.ZodOptional<z.ZodString>;
|
|
5
|
+
map_bounds: z.ZodOptional<z.ZodObject<{
|
|
6
|
+
west: z.ZodNumber;
|
|
7
|
+
east: z.ZodNumber;
|
|
8
|
+
south: z.ZodNumber;
|
|
9
|
+
north: z.ZodNumber;
|
|
10
|
+
}, z.core.$strip>>;
|
|
11
|
+
min_price: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
max_price: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
min_beds: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
sort: z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
globalrelevanceex: "globalrelevanceex";
|
|
16
|
+
days: "days";
|
|
17
|
+
pricea: "pricea";
|
|
18
|
+
priced: "priced";
|
|
19
|
+
size: "size";
|
|
20
|
+
}>>;
|
|
21
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
23
|
+
total: z.ZodNumber;
|
|
24
|
+
listings: z.ZodArray<z.ZodObject<{
|
|
25
|
+
zpid: z.ZodString;
|
|
26
|
+
address: z.ZodString;
|
|
27
|
+
street: z.ZodString;
|
|
28
|
+
city: z.ZodString;
|
|
29
|
+
state: z.ZodString;
|
|
30
|
+
zipcode: z.ZodString;
|
|
31
|
+
price: z.ZodString;
|
|
32
|
+
price_raw: z.ZodNumber;
|
|
33
|
+
beds: z.ZodNumber;
|
|
34
|
+
baths: z.ZodNumber;
|
|
35
|
+
sqft: z.ZodNumber;
|
|
36
|
+
status: z.ZodString;
|
|
37
|
+
status_text: z.ZodString;
|
|
38
|
+
home_type: z.ZodString;
|
|
39
|
+
days_on_zillow: z.ZodNumber;
|
|
40
|
+
zestimate: z.ZodNumber;
|
|
41
|
+
rent_zestimate: z.ZodNumber;
|
|
42
|
+
tax_assessed_value: z.ZodNumber;
|
|
43
|
+
latitude: z.ZodNumber;
|
|
44
|
+
longitude: z.ZodNumber;
|
|
45
|
+
image_url: z.ZodString;
|
|
46
|
+
detail_url: z.ZodString;
|
|
47
|
+
is_saved: z.ZodBoolean;
|
|
48
|
+
has_3d_model: z.ZodBoolean;
|
|
49
|
+
}, z.core.$strip>>;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
//# sourceMappingURL=search-by-owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-by-owner.d.ts","sourceRoot":"","sources":["../../src/tools/search-by-owner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA8ExB,CAAC"}
|