@rubytech/create-maxy 1.0.498 → 1.0.500
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/package.json +1 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js +34 -4
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/stream-log-review/SKILL.md +3 -3
- package/payload/platform/scripts/logs-read.sh +40 -5
- package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/PLUGIN.md +36 -8
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.js +229 -153
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.d.ts +19 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.d.ts.map +1 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.js +99 -3
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.js.map +1 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.d.ts +10 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.js +24 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.d.ts +16 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.js +35 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.js +1 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.js.map +1 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.d.ts +13 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.js +41 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.d.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.js +16 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.d.ts +15 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.js +11 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.d.ts +10 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.js +39 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.d.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.js +33 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.d.ts +18 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.js +59 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.d.ts +10 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.js +39 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.d.ts +12 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.js +28 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.d.ts +15 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.js +11 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.d.ts +16 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.js +39 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.d.ts +13 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js +49 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.d.ts +7 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.js +15 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.d.ts +14 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.js +11 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.d.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.js +40 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.d.ts +13 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.js +34 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.d.ts +14 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.js +18 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/index.ts +335 -158
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/lib/loop-api.ts +140 -3
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/customer-preferences.ts +60 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/feedback.ts +80 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/key-register.ts +1 -1
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/marketing-enquiry.ts +105 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/marketing-match-batch.ts +48 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/marketing-match-request.ts +37 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/marketing-match.ts +78 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/people-detail.ts +63 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/people-search.ts +93 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/property-detail.ts +70 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/property-listed.ts +67 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/property-request.ts +37 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/property-search.ts +80 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/supplier.ts +120 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/team-availability.ts +42 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/viewing-create.ts +36 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/viewing-detail.ts +70 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/viewing-search.ts +74 -0
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/viewing-update.ts +48 -0
- package/payload/server/public/assets/{ChatInput-BbMvZgRR.js → ChatInput-Bo9T8v0E.js} +1 -1
- package/payload/server/public/assets/{admin-BSHc9LPS.js → admin-CkpknqK7.js} +60 -60
- package/payload/server/public/assets/{public-DvDzSq3r.js → public-wDhMuZDR.js} +1 -1
- package/payload/server/public/index.html +2 -2
- package/payload/server/public/public.html +2 -2
- package/payload/server/server.js +89 -2
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/feedback-list.ts +0 -54
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/people-list.ts +0 -52
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/properties-list.ts +0 -52
- package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/src/tools/viewings-list.ts +0 -62
package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { aggregateAcrossTeams, formatAggregationResult, loopGet, } from "../lib/loop-api.js";
|
|
2
|
+
export async function peopleSearch(params) {
|
|
3
|
+
const { accountId, role, searchTerm, maxPrice, minBeds, searchAreas, propertyTypes, startDate, endDate, minPrice, maxRent, teamName, limit, } = params;
|
|
4
|
+
const result = await aggregateAcrossTeams(accountId, "people", "loop-people-search", async (apiKey, team) => {
|
|
5
|
+
const qp = [];
|
|
6
|
+
if (searchTerm)
|
|
7
|
+
qp.push(`SearchTerm=${encodeURIComponent(searchTerm)}`);
|
|
8
|
+
if (role === "buyers") {
|
|
9
|
+
if (maxPrice != null)
|
|
10
|
+
qp.push(`MaxPrice=${maxPrice}`);
|
|
11
|
+
if (minBeds != null)
|
|
12
|
+
qp.push(`MinBeds=${minBeds}`);
|
|
13
|
+
if (searchAreas)
|
|
14
|
+
qp.push(`SearchAreas=${encodeURIComponent(searchAreas)}`);
|
|
15
|
+
if (propertyTypes)
|
|
16
|
+
qp.push(`PropertyTypes=${encodeURIComponent(propertyTypes)}`);
|
|
17
|
+
}
|
|
18
|
+
else if (role === "sellers" || role === "landlords") {
|
|
19
|
+
if (startDate)
|
|
20
|
+
qp.push(`StartDate=${encodeURIComponent(startDate)}`);
|
|
21
|
+
if (endDate)
|
|
22
|
+
qp.push(`EndDate=${encodeURIComponent(endDate)}`);
|
|
23
|
+
if (minPrice != null)
|
|
24
|
+
qp.push(`MinPrice=${minPrice}`);
|
|
25
|
+
if (maxPrice != null)
|
|
26
|
+
qp.push(`MaxPrice=${maxPrice}`);
|
|
27
|
+
}
|
|
28
|
+
else if (role === "renters") {
|
|
29
|
+
if (maxRent != null)
|
|
30
|
+
qp.push(`MaxRent=${maxRent}`);
|
|
31
|
+
if (minBeds != null)
|
|
32
|
+
qp.push(`MinBeds=${minBeds}`);
|
|
33
|
+
if (searchAreas)
|
|
34
|
+
qp.push(`SearchAreas=${encodeURIComponent(searchAreas)}`);
|
|
35
|
+
if (propertyTypes)
|
|
36
|
+
qp.push(`PropertyTypes=${encodeURIComponent(propertyTypes)}`);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Generic /people endpoint
|
|
40
|
+
if (startDate)
|
|
41
|
+
qp.push(`StartDate=${encodeURIComponent(startDate)}`);
|
|
42
|
+
if (endDate)
|
|
43
|
+
qp.push(`EndDate=${encodeURIComponent(endDate)}`);
|
|
44
|
+
}
|
|
45
|
+
const query = qp.length > 0 ? `?${qp.join("&")}` : "";
|
|
46
|
+
const basePath = role ? `/people/${role}` : "/people";
|
|
47
|
+
const path = `${basePath}${query}`;
|
|
48
|
+
const data = await loopGet(apiKey, path, "loop-people-search", team);
|
|
49
|
+
return Array.isArray(data) ? data : [];
|
|
50
|
+
}, { teamName, limitPerTeam: limit ?? 50, limitTotal: limit ?? 200 });
|
|
51
|
+
const entityName = role ?? "people";
|
|
52
|
+
return formatAggregationResult(result, (p) => {
|
|
53
|
+
const name = [p.firstName, p.lastName].filter(Boolean).join(" ") || "Unknown";
|
|
54
|
+
const contact = p.email ?? p.phone ?? "";
|
|
55
|
+
const type = p.type ? ` (${p.type})` : "";
|
|
56
|
+
return `- ${name}${contact ? ` <${contact}>` : ""}${type}`;
|
|
57
|
+
}, entityName);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=people-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people-search.js","sourceRoot":"","sources":["../../src/tools/people-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type Department = "sales" | "lettings";
|
|
2
|
+
export declare function propertyDetail(params: {
|
|
3
|
+
accountId: string;
|
|
4
|
+
propertyId: number;
|
|
5
|
+
department: Department;
|
|
6
|
+
previewHash?: number;
|
|
7
|
+
teamName?: string;
|
|
8
|
+
}): Promise<string>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=property-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-detail.d.ts","sourceRoot":"","sources":["../../src/tools/property-detail.ts"],"names":[],"mappings":"AAuBA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAEvC,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsClB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { aggregateAcrossTeams, formatAggregationResult, loopGet, } from "../lib/loop-api.js";
|
|
2
|
+
export async function propertyDetail(params) {
|
|
3
|
+
const { accountId, propertyId, department, previewHash, teamName } = params;
|
|
4
|
+
const result = await aggregateAcrossTeams(accountId, "properties", "loop-property-detail", async (apiKey, team) => {
|
|
5
|
+
const path = previewHash
|
|
6
|
+
? `/property/residential/${department}/${propertyId}/preview/${previewHash}`
|
|
7
|
+
: `/property/residential/${department}/${propertyId}`;
|
|
8
|
+
const data = await loopGet(apiKey, path, "loop-property-detail", team);
|
|
9
|
+
if (data && typeof data === "object" && !Array.isArray(data)) {
|
|
10
|
+
return [data];
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
}, { teamName });
|
|
14
|
+
return formatAggregationResult(result, (p) => {
|
|
15
|
+
const lines = [`**${p.address ?? "Unknown address"}**`];
|
|
16
|
+
if (p.price)
|
|
17
|
+
lines.push(`Price: £${p.price.toLocaleString("en-GB")}`);
|
|
18
|
+
if (p.status)
|
|
19
|
+
lines.push(`Status: ${p.status}`);
|
|
20
|
+
if (p.type)
|
|
21
|
+
lines.push(`Type: ${p.type}`);
|
|
22
|
+
if (p.bedrooms)
|
|
23
|
+
lines.push(`Bedrooms: ${p.bedrooms}`);
|
|
24
|
+
if (p.bathrooms)
|
|
25
|
+
lines.push(`Bathrooms: ${p.bathrooms}`);
|
|
26
|
+
if (p.receptions)
|
|
27
|
+
lines.push(`Receptions: ${p.receptions}`);
|
|
28
|
+
if (p.tenure)
|
|
29
|
+
lines.push(`Tenure: ${p.tenure}`);
|
|
30
|
+
if (p.councilTax)
|
|
31
|
+
lines.push(`Council Tax: ${p.councilTax}`);
|
|
32
|
+
if (p.epcRating)
|
|
33
|
+
lines.push(`EPC: ${p.epcRating}`);
|
|
34
|
+
if (p.description)
|
|
35
|
+
lines.push(`\n${p.description}`);
|
|
36
|
+
return lines.join("\n");
|
|
37
|
+
}, "property details");
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=property-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-detail.js","sourceRoot":"","sources":["../../src/tools/property-detail.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,OAAO,GACR,MAAM,oBAAoB,CAAC;AAqB5B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAMpC;IACC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5E,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,WAAW;YACtB,CAAC,CAAC,yBAAyB,UAAU,IAAI,UAAU,YAAY,WAAW,EAAE;YAC5E,CAAC,CAAC,yBAAyB,UAAU,IAAI,UAAU,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAqB,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,uBAAuB,CAC5B,MAAM,EACN,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,iBAAiB,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,EACD,kBAAkB,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type Department = "sales" | "lettings" | "both";
|
|
2
|
+
type Channel = "rightmove" | "onTheMarket" | "zoopla" | "website";
|
|
3
|
+
export declare function propertyListed(params: {
|
|
4
|
+
accountId: string;
|
|
5
|
+
channel: Channel;
|
|
6
|
+
department?: Department;
|
|
7
|
+
includeSold?: boolean;
|
|
8
|
+
teamName?: string;
|
|
9
|
+
limit?: number;
|
|
10
|
+
}): Promise<string>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=property-listed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-listed.d.ts","sourceRoot":"","sources":["../../src/tools/property-listed.ts"],"names":[],"mappings":"AAiBA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAChD,KAAK,OAAO,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElE,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuClB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { aggregateAcrossTeams, formatAggregationResult, loopGet, } from "../lib/loop-api.js";
|
|
2
|
+
export async function propertyListed(params) {
|
|
3
|
+
const { accountId, channel, department = "both", includeSold = false, teamName, limit } = params;
|
|
4
|
+
const result = await aggregateAcrossTeams(accountId, "properties", "loop-property-listed", async (apiKey, team) => {
|
|
5
|
+
const all = [];
|
|
6
|
+
const depts = department === "both" ? ["sales", "lettings"] : [department];
|
|
7
|
+
for (const dept of depts) {
|
|
8
|
+
const path = `/property/residential/${dept}/listed/${channel}`;
|
|
9
|
+
const data = await loopGet(apiKey, path, "loop-property-listed", team);
|
|
10
|
+
if (Array.isArray(data))
|
|
11
|
+
all.push(...data);
|
|
12
|
+
}
|
|
13
|
+
if (includeSold) {
|
|
14
|
+
const soldPath = `/property/residential/sold/${channel}`;
|
|
15
|
+
const soldData = await loopGet(apiKey, soldPath, "loop-property-listed", team);
|
|
16
|
+
if (Array.isArray(soldData))
|
|
17
|
+
all.push(...soldData);
|
|
18
|
+
}
|
|
19
|
+
return all;
|
|
20
|
+
}, { teamName, limitPerTeam: limit ?? 50, limitTotal: limit ?? 200 });
|
|
21
|
+
return formatAggregationResult(result, (p) => {
|
|
22
|
+
const price = p.price ? ` — £${p.price.toLocaleString("en-GB")}` : "";
|
|
23
|
+
const beds = p.bedrooms ? ` ${p.bedrooms}bed` : "";
|
|
24
|
+
const status = p.status ? ` [${p.status}]` : "";
|
|
25
|
+
return `- ${p.address ?? "Unknown address"}${price}${beds}${status}`;
|
|
26
|
+
}, `${channel} listings`);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=property-listed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-listed.js","sourceRoot":"","sources":["../../src/tools/property-listed.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,OAAO,GACR,MAAM,oBAAoB,CAAC;AAgB5B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAOpC;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAEjG,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAA0B,EAAE,CAAC;QACtC,MAAM,KAAK,GACT,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAE/D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,yBAAyB,IAAI,WAAW,OAAO,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAwB,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;YAC9F,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,8BAA8B,OAAO,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAwB,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;YACtG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG,EAAE,CAClE,CAAC;IAEF,OAAO,uBAAuB,CAC5B,MAAM,EACN,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,iBAAiB,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;IACvE,CAAC,EACD,GAAG,OAAO,WAAW,CACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type Department = "sales" | "lettings";
|
|
2
|
+
type RequestAction = "viewing" | "call-back" | "information";
|
|
3
|
+
export declare function propertyRequest(params: {
|
|
4
|
+
accountId: string;
|
|
5
|
+
teamName: string;
|
|
6
|
+
propertyId: number;
|
|
7
|
+
department: Department;
|
|
8
|
+
action: RequestAction;
|
|
9
|
+
name?: string;
|
|
10
|
+
email?: string;
|
|
11
|
+
phone?: string;
|
|
12
|
+
message?: string;
|
|
13
|
+
}): Promise<string>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=property-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-request.d.ts","sourceRoot":"","sources":["../../src/tools/property-request.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AACvC,KAAK,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAO7D,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { loopPost, withTeamKey } from "../lib/loop-api.js";
|
|
2
|
+
export async function propertyRequest(params) {
|
|
3
|
+
const { accountId, teamName, propertyId, department, action, ...body } = params;
|
|
4
|
+
const result = await withTeamKey(accountId, teamName, "properties", "loop-property-request", async (apiKey) => {
|
|
5
|
+
const path = `/property/residential/${department}/${propertyId}/${action}`;
|
|
6
|
+
return loopPost(apiKey, path, body, "loop-property-request", teamName);
|
|
7
|
+
});
|
|
8
|
+
const actionLabel = action === "call-back" ? "callback" : action;
|
|
9
|
+
return `${actionLabel} request submitted for property ${propertyId} (${department}) via team "${teamName}".`;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=property-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-request.js","sourceRoot":"","sources":["../../src/tools/property-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAU3D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAUrC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAEhF,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,uBAAuB,EACvB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,yBAAyB,UAAU,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAC3E,OAAO,QAAQ,CAAsB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IAC9F,CAAC,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,OAAO,GAAG,WAAW,mCAAmC,UAAU,KAAK,UAAU,eAAe,QAAQ,IAAI,CAAC;AAC/G,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type Department = "sales" | "lettings" | "both";
|
|
2
|
+
export declare function propertySearch(params: {
|
|
3
|
+
accountId: string;
|
|
4
|
+
department?: Department;
|
|
5
|
+
searchTerm?: string;
|
|
6
|
+
minPrice?: number;
|
|
7
|
+
maxPrice?: number;
|
|
8
|
+
minBedrooms?: number;
|
|
9
|
+
maxBedrooms?: number;
|
|
10
|
+
propertyStatuses?: string;
|
|
11
|
+
propertyTypes?: string;
|
|
12
|
+
teamName?: string;
|
|
13
|
+
limit?: number;
|
|
14
|
+
}): Promise<string>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=property-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-search.d.ts","sourceRoot":"","sources":["../../src/tools/property-search.ts"],"names":[],"mappings":"AAkBA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhD,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+ClB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { aggregateAcrossTeams, formatAggregationResult, loopGet, } from "../lib/loop-api.js";
|
|
2
|
+
export async function propertySearch(params) {
|
|
3
|
+
const { accountId, department = "both", searchTerm, minPrice, maxPrice, minBedrooms, maxBedrooms, propertyStatuses, propertyTypes, teamName, limit, } = params;
|
|
4
|
+
const result = await aggregateAcrossTeams(accountId, "properties", "loop-property-search", async (apiKey, team) => {
|
|
5
|
+
const depts = department === "both" ? ["sales", "lettings"] : [department];
|
|
6
|
+
const all = [];
|
|
7
|
+
for (const dept of depts) {
|
|
8
|
+
const qp = [];
|
|
9
|
+
if (searchTerm)
|
|
10
|
+
qp.push(`SearchTerm=${encodeURIComponent(searchTerm)}`);
|
|
11
|
+
if (minPrice != null)
|
|
12
|
+
qp.push(`MinPrice=${minPrice}`);
|
|
13
|
+
if (maxPrice != null)
|
|
14
|
+
qp.push(`MaxPrice=${maxPrice}`);
|
|
15
|
+
if (minBedrooms != null)
|
|
16
|
+
qp.push(`MinBedrooms=${minBedrooms}`);
|
|
17
|
+
if (maxBedrooms != null)
|
|
18
|
+
qp.push(`MaxBedrooms=${maxBedrooms}`);
|
|
19
|
+
if (propertyStatuses)
|
|
20
|
+
qp.push(`PropertyStatuses=${encodeURIComponent(propertyStatuses)}`);
|
|
21
|
+
if (propertyTypes)
|
|
22
|
+
qp.push(`PropertyTypes=${encodeURIComponent(propertyTypes)}`);
|
|
23
|
+
const query = qp.length > 0 ? `?${qp.join("&")}` : "";
|
|
24
|
+
const path = `/property/residential/${dept}${query}`;
|
|
25
|
+
const data = await loopGet(apiKey, path, "loop-property-search", team);
|
|
26
|
+
if (Array.isArray(data))
|
|
27
|
+
all.push(...data);
|
|
28
|
+
}
|
|
29
|
+
return all;
|
|
30
|
+
}, { teamName, limitPerTeam: limit ?? 50, limitTotal: limit ?? 200 });
|
|
31
|
+
return formatAggregationResult(result, (p) => {
|
|
32
|
+
const price = p.price ? ` — £${p.price.toLocaleString("en-GB")}` : "";
|
|
33
|
+
const beds = p.bedrooms ? ` ${p.bedrooms}bed` : "";
|
|
34
|
+
const status = p.status ? ` [${p.status}]` : "";
|
|
35
|
+
const propType = p.type ? ` (${p.type})` : "";
|
|
36
|
+
return `- ${p.address ?? "Unknown address"}${price}${beds}${propType}${status}`;
|
|
37
|
+
}, "properties");
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=property-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-search.js","sourceRoot":"","sources":["../../src/tools/property-search.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,OAAO,GACR,MAAM,oBAAoB,CAAC;AAgB5B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAYpC;IACC,MAAM,EACJ,SAAS,EAAE,UAAU,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAC9D,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EACzD,QAAQ,EAAE,KAAK,GAChB,GAAG,MAAM,CAAC;IAEX,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,KAAK,GACT,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,GAAG,GAA0B,EAAE,CAAC;QAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,EAAE,GAAa,EAAE,CAAC;YACxB,IAAI,UAAU;gBAAE,EAAE,CAAC,IAAI,CAAC,cAAc,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACxE,IAAI,QAAQ,IAAI,IAAI;gBAAE,EAAE,CAAC,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;YACtD,IAAI,QAAQ,IAAI,IAAI;gBAAE,EAAE,CAAC,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;YACtD,IAAI,WAAW,IAAI,IAAI;gBAAE,EAAE,CAAC,IAAI,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,WAAW,IAAI,IAAI;gBAAE,EAAE,CAAC,IAAI,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,gBAAgB;gBAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC1F,IAAI,aAAa;gBAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEjF,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,yBAAyB,IAAI,GAAG,KAAK,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAwB,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;YAC9F,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG,EAAE,CAClE,CAAC;IAEF,OAAO,uBAAuB,CAC5B,MAAM,EACN,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,iBAAiB,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;IAClF,CAAC,EACD,YAAY,CACb,CAAC;AACJ,CAAC"}
|
package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type SupplierAction = "maintenance-jobs" | "maintenance-complete" | "maintenance-quotes" | "maintenance-submit-quote" | "board-jobs" | "board-complete";
|
|
2
|
+
export declare function supplier(params: {
|
|
3
|
+
accountId: string;
|
|
4
|
+
teamName: string;
|
|
5
|
+
action: SupplierAction;
|
|
6
|
+
code: string;
|
|
7
|
+
jobId?: number;
|
|
8
|
+
quoteId?: number;
|
|
9
|
+
quoteData?: Record<string, unknown>;
|
|
10
|
+
completionData?: Record<string, unknown>;
|
|
11
|
+
}): Promise<string>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=supplier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supplier.d.ts","sourceRoot":"","sources":["../../src/tools/supplier.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GACf,kBAAkB,GAClB,sBAAsB,GACtB,oBAAoB,GACpB,0BAA0B,GAC1B,YAAY,GACZ,gBAAgB,CAAC;AAWrB,wBAAsB,QAAQ,CAAC,MAAM,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,GAAG,OAAO,CAAC,MAAM,CAAC,CAyFlB"}
|
package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { loopGet, loopPost, loopPut, withTeamKey } from "../lib/loop-api.js";
|
|
2
|
+
export async function supplier(params) {
|
|
3
|
+
const { accountId, teamName, action, code } = params;
|
|
4
|
+
// jobId is required for all actions except maintenance-submit-quote
|
|
5
|
+
const jobId = params.jobId;
|
|
6
|
+
if (action !== "maintenance-submit-quote" && jobId == null) {
|
|
7
|
+
throw new Error(`jobId is required for action "${action}".`);
|
|
8
|
+
}
|
|
9
|
+
if (action === "maintenance-jobs") {
|
|
10
|
+
const result = await withTeamKey(accountId, teamName, "supplier", "loop-supplier", async (apiKey) => {
|
|
11
|
+
return loopGet(apiKey, `/supplier/maintenance/${encodeURIComponent(code)}/${jobId}/job-list`, "loop-supplier", teamName);
|
|
12
|
+
});
|
|
13
|
+
return JSON.stringify(result, null, 2);
|
|
14
|
+
}
|
|
15
|
+
if (action === "maintenance-complete") {
|
|
16
|
+
await withTeamKey(accountId, teamName, "supplier", "loop-supplier", async (apiKey) => {
|
|
17
|
+
return loopPost(apiKey, `/supplier/maintenance/${encodeURIComponent(code)}/${jobId}/complete`, {}, "loop-supplier", teamName);
|
|
18
|
+
});
|
|
19
|
+
return `Maintenance job ${jobId} marked complete via team "${teamName}".`;
|
|
20
|
+
}
|
|
21
|
+
if (action === "maintenance-quotes") {
|
|
22
|
+
const result = await withTeamKey(accountId, teamName, "supplier", "loop-supplier", async (apiKey) => {
|
|
23
|
+
return loopGet(apiKey, `/supplier/maintenance/${encodeURIComponent(code)}/${jobId}/quote-list`, "loop-supplier", teamName);
|
|
24
|
+
});
|
|
25
|
+
return JSON.stringify(result, null, 2);
|
|
26
|
+
}
|
|
27
|
+
if (action === "maintenance-submit-quote") {
|
|
28
|
+
if (!params.quoteId)
|
|
29
|
+
throw new Error("quoteId is required for maintenance-submit-quote.");
|
|
30
|
+
await withTeamKey(accountId, teamName, "supplier", "loop-supplier", async (apiKey) => {
|
|
31
|
+
return loopPut(apiKey, `/supplier/maintenance/${encodeURIComponent(code)}/${params.quoteId}/quote-for-job`, params.quoteData ?? {}, "loop-supplier", teamName);
|
|
32
|
+
});
|
|
33
|
+
return `Quote ${params.quoteId} submitted via team "${teamName}".`;
|
|
34
|
+
}
|
|
35
|
+
if (action === "board-jobs") {
|
|
36
|
+
const result = await withTeamKey(accountId, teamName, "supplier", "loop-supplier", async (apiKey) => {
|
|
37
|
+
return loopGet(apiKey, `/supplier/board-contractor/${encodeURIComponent(code)}/${jobId}/job-list`, "loop-supplier", teamName);
|
|
38
|
+
});
|
|
39
|
+
return JSON.stringify(result, null, 2);
|
|
40
|
+
}
|
|
41
|
+
if (action === "board-complete") {
|
|
42
|
+
await withTeamKey(accountId, teamName, "supplier", "loop-supplier", async (apiKey) => {
|
|
43
|
+
return loopPost(apiKey, `/supplier/board-contractor/${encodeURIComponent(code)}/${jobId}/complete`, params.completionData ?? {}, "loop-supplier", teamName);
|
|
44
|
+
});
|
|
45
|
+
return `Board contractor job ${jobId} marked complete via team "${teamName}".`;
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`Unknown supplier action: ${action}`);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=supplier.js.map
|
package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supplier.js","sourceRoot":"","sources":["../../src/tools/supplier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-availability.d.ts","sourceRoot":"","sources":["../../src/tools/team-availability.ts"],"names":[],"mappings":"AAYA,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBlB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { aggregateAcrossTeams, formatAggregationResult, loopGet, } from "../lib/loop-api.js";
|
|
2
|
+
export async function teamAvailability(params) {
|
|
3
|
+
const { accountId, agentId, searchDate, teamName } = params;
|
|
4
|
+
const result = await aggregateAcrossTeams(accountId, "team", "loop-team-availability", async (apiKey, team) => {
|
|
5
|
+
const path = `/team/${encodeURIComponent(agentId)}/availability/${encodeURIComponent(searchDate)}`;
|
|
6
|
+
const data = await loopGet(apiKey, path, "loop-team-availability", team);
|
|
7
|
+
return Array.isArray(data) ? data : [];
|
|
8
|
+
}, { teamName });
|
|
9
|
+
return formatAggregationResult(result, (slot) => {
|
|
10
|
+
const start = slot.start ?? "?";
|
|
11
|
+
const end = slot.end ?? "?";
|
|
12
|
+
return `- ${start} — ${end}`;
|
|
13
|
+
}, `availability slots for ${searchDate}`);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=team-availability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-availability.js","sourceRoot":"","sources":["../../src/tools/team-availability.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,OAAO,GACR,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAKtC;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,SAAS,EACT,MAAM,EACN,wBAAwB,EACxB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,SAAS,kBAAkB,CAAC,OAAO,CAAC,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,GAAG,MAAM,OAAO,CAAkB,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;QAC1F,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,CAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,uBAAuB,CAC5B,MAAM,EACN,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;QAC5B,OAAO,KAAK,KAAK,MAAM,GAAG,EAAE,CAAC;IAC/B,CAAC,EACD,0BAA0B,UAAU,EAAE,CACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Department = "sales" | "lettings";
|
|
2
|
+
export declare function viewingCreate(params: {
|
|
3
|
+
accountId: string;
|
|
4
|
+
teamName: string;
|
|
5
|
+
department: Department;
|
|
6
|
+
propertyId: number;
|
|
7
|
+
date: string;
|
|
8
|
+
time: string;
|
|
9
|
+
attendeeName: string;
|
|
10
|
+
attendeeEmail?: string;
|
|
11
|
+
attendeePhone?: string;
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=viewing-create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-create.d.ts","sourceRoot":"","sources":["../../src/tools/viewing-create.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAOvC,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { loopPost, withTeamKey } from "../lib/loop-api.js";
|
|
2
|
+
export async function viewingCreate(params) {
|
|
3
|
+
const { accountId, teamName, department, ...body } = params;
|
|
4
|
+
const result = await withTeamKey(accountId, teamName, "viewings", "loop-viewing-create", async (apiKey) => {
|
|
5
|
+
const path = `/residential/${department}/viewings`;
|
|
6
|
+
return loopPost(apiKey, path, body, "loop-viewing-create", teamName);
|
|
7
|
+
});
|
|
8
|
+
const viewingId = result.result ?? "unknown";
|
|
9
|
+
return `Viewing created (ID: ${viewingId}) for property ${params.propertyId} on ${params.date} at ${params.time} via team "${teamName}".`;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=viewing-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-create.js","sourceRoot":"","sources":["../../src/tools/viewing-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAS3D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAUnC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAE5D,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,SAAS,EACT,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,gBAAgB,UAAU,WAAW,CAAC;QACnD,OAAO,QAAQ,CAAqB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IAC3F,CAAC,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC;IAC7C,OAAO,wBAAwB,SAAS,kBAAkB,MAAM,CAAC,UAAU,OAAO,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,IAAI,cAAc,QAAQ,IAAI,CAAC;AAC5I,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-detail.d.ts","sourceRoot":"","sources":["../../src/tools/viewing-detail.ts"],"names":[],"mappings":"AAwBA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAEvC,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsClB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { aggregateAcrossTeams, formatAggregationResult, loopGet, } from "../lib/loop-api.js";
|
|
2
|
+
export async function viewingDetail(params) {
|
|
3
|
+
const { accountId, viewingId, department, teamName } = params;
|
|
4
|
+
const result = await aggregateAcrossTeams(accountId, "viewings", "loop-viewing-detail", async (apiKey, team) => {
|
|
5
|
+
const path = `/residential/${department}/viewings/${viewingId}`;
|
|
6
|
+
const data = await loopGet(apiKey, path, "loop-viewing-detail", team);
|
|
7
|
+
if (data && typeof data === "object" && !Array.isArray(data)) {
|
|
8
|
+
return [data];
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
}, { teamName });
|
|
12
|
+
return formatAggregationResult(result, (v) => {
|
|
13
|
+
const lines = [`**${v.propertyAddress ?? "Unknown property"}**`];
|
|
14
|
+
const when = [v.date, v.time].filter(Boolean).join(" ");
|
|
15
|
+
if (when)
|
|
16
|
+
lines.push(`Date/Time: ${when}`);
|
|
17
|
+
if (v.status)
|
|
18
|
+
lines.push(`Status: ${v.status}`);
|
|
19
|
+
if (v.type)
|
|
20
|
+
lines.push(`Type: ${v.type}`);
|
|
21
|
+
if (v.attendeeName)
|
|
22
|
+
lines.push(`Attendee: ${v.attendeeName}`);
|
|
23
|
+
if (v.attendeeEmail)
|
|
24
|
+
lines.push(`Email: ${v.attendeeEmail}`);
|
|
25
|
+
if (v.attendeePhone)
|
|
26
|
+
lines.push(`Phone: ${v.attendeePhone}`);
|
|
27
|
+
if (v.notes)
|
|
28
|
+
lines.push(`Notes: ${v.notes}`);
|
|
29
|
+
if (v.buyerFeedback)
|
|
30
|
+
lines.push(`Buyer Feedback: ${v.buyerFeedback}`);
|
|
31
|
+
if (v.sellerFeedback)
|
|
32
|
+
lines.push(`Seller Feedback: ${v.sellerFeedback}`);
|
|
33
|
+
if (v.renterFeedback)
|
|
34
|
+
lines.push(`Renter Feedback: ${v.renterFeedback}`);
|
|
35
|
+
if (v.landlordFeedback)
|
|
36
|
+
lines.push(`Landlord Feedback: ${v.landlordFeedback}`);
|
|
37
|
+
return lines.join("\n");
|
|
38
|
+
}, "viewing details");
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=viewing-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-detail.js","sourceRoot":"","sources":["../../src/tools/viewing-detail.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,OAAO,GACR,MAAM,oBAAoB,CAAC;AAsB5B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAKnC;IACC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,gBAAgB,UAAU,aAAa,SAAS,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAoB,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACzF,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,uBAAuB,CAC5B,MAAM,EACN,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,eAAe,IAAI,kBAAkB,IAAI,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,aAAa;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,aAAa;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC,aAAa;YAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,cAAc;YAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,cAAc;YAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,gBAAgB;YAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,EACD,iBAAiB,CAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type Department = "sales" | "lettings" | "both";
|
|
2
|
+
export declare function viewingSearch(params: {
|
|
3
|
+
accountId: string;
|
|
4
|
+
department?: Department;
|
|
5
|
+
searchTerm?: string;
|
|
6
|
+
appointmentStartDate?: string;
|
|
7
|
+
appointmentEndDate?: string;
|
|
8
|
+
status?: string;
|
|
9
|
+
teamName?: string;
|
|
10
|
+
limit?: number;
|
|
11
|
+
}): Promise<string>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=viewing-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-search.d.ts","sourceRoot":"","sources":["../../src/tools/viewing-search.ts"],"names":[],"mappings":"AAiBA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhD,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { aggregateAcrossTeams, formatAggregationResult, loopGet, } from "../lib/loop-api.js";
|
|
2
|
+
export async function viewingSearch(params) {
|
|
3
|
+
const { accountId, department = "both", searchTerm, appointmentStartDate, appointmentEndDate, status, teamName, limit, } = params;
|
|
4
|
+
const result = await aggregateAcrossTeams(accountId, "viewings", "loop-viewing-search", async (apiKey, team) => {
|
|
5
|
+
const depts = department === "both" ? ["sales", "lettings"] : [department];
|
|
6
|
+
const all = [];
|
|
7
|
+
for (const dept of depts) {
|
|
8
|
+
const qp = [];
|
|
9
|
+
if (searchTerm)
|
|
10
|
+
qp.push(`SearchTerm=${encodeURIComponent(searchTerm)}`);
|
|
11
|
+
if (appointmentStartDate)
|
|
12
|
+
qp.push(`AppointmentStartDate=${encodeURIComponent(appointmentStartDate)}`);
|
|
13
|
+
if (appointmentEndDate)
|
|
14
|
+
qp.push(`AppointmentEndDate=${encodeURIComponent(appointmentEndDate)}`);
|
|
15
|
+
if (status)
|
|
16
|
+
qp.push(`Status=${encodeURIComponent(status)}`);
|
|
17
|
+
const query = qp.length > 0 ? `?${qp.join("&")}` : "";
|
|
18
|
+
const path = `/residential/${dept}/viewings${query}`;
|
|
19
|
+
const data = await loopGet(apiKey, path, "loop-viewing-search", team);
|
|
20
|
+
if (Array.isArray(data))
|
|
21
|
+
all.push(...data);
|
|
22
|
+
}
|
|
23
|
+
return all;
|
|
24
|
+
}, { teamName, limitPerTeam: limit ?? 50, limitTotal: limit ?? 200 });
|
|
25
|
+
return formatAggregationResult(result, (v) => {
|
|
26
|
+
const addr = v.propertyAddress ?? "Unknown property";
|
|
27
|
+
const when = [v.date, v.time].filter(Boolean).join(" ");
|
|
28
|
+
const viewStatus = v.status ? ` [${v.status}]` : "";
|
|
29
|
+
const attendee = v.attendeeName ? ` — ${v.attendeeName}` : "";
|
|
30
|
+
const viewType = v.type ? ` (${v.type})` : "";
|
|
31
|
+
return `- ${addr} — ${when || "No date"}${viewType}${attendee}${viewStatus}`;
|
|
32
|
+
}, "viewings");
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=viewing-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-search.js","sourceRoot":"","sources":["../../src/tools/viewing-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Department = "sales" | "lettings";
|
|
2
|
+
type FeedbackParty = "buyer" | "seller" | "renter" | "landlord";
|
|
3
|
+
type Action = "note" | "feedback";
|
|
4
|
+
export declare function viewingUpdate(params: {
|
|
5
|
+
accountId: string;
|
|
6
|
+
teamName: string;
|
|
7
|
+
viewingId: number;
|
|
8
|
+
department: Department;
|
|
9
|
+
action: Action;
|
|
10
|
+
text: string;
|
|
11
|
+
feedbackParty?: FeedbackParty;
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=viewing-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-update.d.ts","sourceRoot":"","sources":["../../src/tools/viewing-update.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAKvC,KAAK,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAChE,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAOlC,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBlB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { loopPost, withTeamKey } from "../lib/loop-api.js";
|
|
2
|
+
export async function viewingUpdate(params) {
|
|
3
|
+
const { accountId, teamName, viewingId, department, action, text, feedbackParty } = params;
|
|
4
|
+
if (action === "feedback" && !feedbackParty) {
|
|
5
|
+
throw new Error("feedbackParty is required when action is 'feedback'. Use: buyer, seller, renter, or landlord.");
|
|
6
|
+
}
|
|
7
|
+
await withTeamKey(accountId, teamName, "viewings", "loop-viewing-update", async (apiKey) => {
|
|
8
|
+
const suffix = action === "note"
|
|
9
|
+
? "note"
|
|
10
|
+
: `${feedbackParty}-feedback`;
|
|
11
|
+
const path = `/residential/${department}/viewings/${viewingId}/${suffix}`;
|
|
12
|
+
// Loop expects the text as a StringResponse body
|
|
13
|
+
return loopPost(apiKey, path, { result: text }, "loop-viewing-update", teamName);
|
|
14
|
+
});
|
|
15
|
+
const actionLabel = action === "note" ? "Note added" : `${feedbackParty} feedback recorded`;
|
|
16
|
+
return `${actionLabel} for viewing ${viewingId} (${department}) via team "${teamName}".`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=viewing-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewing-update.js","sourceRoot":"","sources":["../../src/tools/viewing-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAe3D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAQnC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAE3F,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,WAAW,CACf,SAAS,EACT,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,KAAK,MAAM;YAC9B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,GAAG,aAAa,WAAW,CAAC;QAChC,MAAM,IAAI,GAAG,gBAAgB,UAAU,aAAa,SAAS,IAAI,MAAM,EAAE,CAAC;QAC1E,iDAAiD;QACjD,OAAO,QAAQ,CAAsB,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IACxG,CAAC,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,oBAAoB,CAAC;IAC5F,OAAO,GAAG,WAAW,gBAAgB,SAAS,KAAK,UAAU,eAAe,QAAQ,IAAI,CAAC;AAC3F,CAAC"}
|