@nightsquawktech/gohighlevel-mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMMERCIAL.md +35 -0
- package/LICENSE +661 -0
- package/README.md +172 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/calendars.d.ts +185 -0
- package/dist/schemas/calendars.d.ts.map +1 -0
- package/dist/schemas/calendars.js +74 -0
- package/dist/schemas/calendars.js.map +1 -0
- package/dist/schemas/common.d.ts +10 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +33 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/contacts.d.ts +401 -0
- package/dist/schemas/contacts.d.ts.map +1 -0
- package/dist/schemas/contacts.js +132 -0
- package/dist/schemas/contacts.js.map +1 -0
- package/dist/schemas/conversations.d.ts +89 -0
- package/dist/schemas/conversations.d.ts.map +1 -0
- package/dist/schemas/conversations.js +39 -0
- package/dist/schemas/conversations.js.map +1 -0
- package/dist/schemas/custom-fields.d.ts +360 -0
- package/dist/schemas/custom-fields.d.ts.map +1 -0
- package/dist/schemas/custom-fields.js +154 -0
- package/dist/schemas/custom-fields.js.map +1 -0
- package/dist/schemas/custom-values.d.ts +87 -0
- package/dist/schemas/custom-values.d.ts.map +1 -0
- package/dist/schemas/custom-values.js +43 -0
- package/dist/schemas/custom-values.js.map +1 -0
- package/dist/schemas/locations.d.ts +30 -0
- package/dist/schemas/locations.d.ts.map +1 -0
- package/dist/schemas/locations.js +17 -0
- package/dist/schemas/locations.js.map +1 -0
- package/dist/schemas/opportunities.d.ts +196 -0
- package/dist/schemas/opportunities.d.ts.map +1 -0
- package/dist/schemas/opportunities.js +83 -0
- package/dist/schemas/opportunities.js.map +1 -0
- package/dist/schemas/tags.d.ts +81 -0
- package/dist/schemas/tags.d.ts.map +1 -0
- package/dist/schemas/tags.js +41 -0
- package/dist/schemas/tags.js.map +1 -0
- package/dist/services/config.d.ts +3 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +26 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/errors.d.ts +2 -0
- package/dist/services/errors.d.ts.map +1 -0
- package/dist/services/errors.js +47 -0
- package/dist/services/errors.js.map +1 -0
- package/dist/services/gohighlevel-client.d.ts +13 -0
- package/dist/services/gohighlevel-client.d.ts.map +1 -0
- package/dist/services/gohighlevel-client.js +42 -0
- package/dist/services/gohighlevel-client.js.map +1 -0
- package/dist/tools/calendars.d.ts +4 -0
- package/dist/tools/calendars.d.ts.map +1 -0
- package/dist/tools/calendars.js +163 -0
- package/dist/tools/calendars.js.map +1 -0
- package/dist/tools/contacts.d.ts +4 -0
- package/dist/tools/contacts.d.ts.map +1 -0
- package/dist/tools/contacts.js +492 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/conversations.d.ts +4 -0
- package/dist/tools/conversations.d.ts.map +1 -0
- package/dist/tools/conversations.js +76 -0
- package/dist/tools/conversations.js.map +1 -0
- package/dist/tools/custom-fields.d.ts +4 -0
- package/dist/tools/custom-fields.d.ts.map +1 -0
- package/dist/tools/custom-fields.js +337 -0
- package/dist/tools/custom-fields.js.map +1 -0
- package/dist/tools/custom-values.d.ts +4 -0
- package/dist/tools/custom-values.d.ts.map +1 -0
- package/dist/tools/custom-values.js +121 -0
- package/dist/tools/custom-values.js.map +1 -0
- package/dist/tools/format.d.ts +9 -0
- package/dist/tools/format.d.ts.map +1 -0
- package/dist/tools/format.js +49 -0
- package/dist/tools/format.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +19 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/locations.d.ts +4 -0
- package/dist/tools/locations.d.ts.map +1 -0
- package/dist/tools/locations.js +43 -0
- package/dist/tools/locations.js.map +1 -0
- package/dist/tools/opportunities.d.ts +4 -0
- package/dist/tools/opportunities.d.ts.map +1 -0
- package/dist/tools/opportunities.js +182 -0
- package/dist/tools/opportunities.js.map +1 -0
- package/dist/tools/read-tools.d.ts +22 -0
- package/dist/tools/read-tools.d.ts.map +1 -0
- package/dist/tools/read-tools.js +68 -0
- package/dist/tools/read-tools.js.map +1 -0
- package/dist/tools/tags.d.ts +4 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +113 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { formatApiError } from "../services/errors.js";
|
|
2
|
+
import { CreateCustomFieldSchema, CreateCustomFieldFolderSchema, CreateCustomFieldV2Schema, DeleteCustomFieldSchema, DeleteCustomFieldFolderSchema, DeleteCustomFieldV2Schema, GetCustomFieldSchema, GetCustomFieldV2Schema, ListCustomFieldsSchema, ListCustomFieldsV2Schema, UpdateCustomFieldFolderSchema, UpdateCustomFieldSchema, UpdateCustomFieldV2Schema } from "../schemas/custom-fields.js";
|
|
3
|
+
import { formatResponse, makeToolResponse, mergeExtra, omitUndefined, requireConfirm, summarizeRecord } from "./format.js";
|
|
4
|
+
import { registerCollectionReadTool } from "./read-tools.js";
|
|
5
|
+
export function registerCustomFieldTools(server, client) {
|
|
6
|
+
registerCollectionReadTool(server, client, {
|
|
7
|
+
name: "ghl_list_custom_fields",
|
|
8
|
+
title: "List GoHighLevel Custom Fields",
|
|
9
|
+
description: "List custom fields for a GoHighLevel location from /locations/{locationId}/customFields.",
|
|
10
|
+
inputSchema: ListCustomFieldsSchema.shape,
|
|
11
|
+
path: (params) => `/locations/${encodeURIComponent(resolveLocationId(client, params.location_id))}/customFields`,
|
|
12
|
+
preferredFields: ["id", "name", "fieldKey", "dataType", "model", "placeholder"],
|
|
13
|
+
heading: "GoHighLevel Custom Fields",
|
|
14
|
+
collectionLabel: "custom fields"
|
|
15
|
+
});
|
|
16
|
+
server.registerTool("ghl_get_custom_field", {
|
|
17
|
+
title: "Get GoHighLevel Custom Field",
|
|
18
|
+
description: "Get one custom field for a GoHighLevel location from /locations/{locationId}/customFields/{id}.",
|
|
19
|
+
inputSchema: GetCustomFieldSchema.shape,
|
|
20
|
+
annotations: {
|
|
21
|
+
readOnlyHint: true,
|
|
22
|
+
destructiveHint: false,
|
|
23
|
+
idempotentHint: true,
|
|
24
|
+
openWorldHint: true
|
|
25
|
+
}
|
|
26
|
+
}, async ({ location_id, field_id, response_format }) => {
|
|
27
|
+
try {
|
|
28
|
+
const customField = await client.get(`/locations/${encodeURIComponent(resolveLocationId(client, location_id))}/customFields/${encodeURIComponent(field_id)}`);
|
|
29
|
+
const data = { customField };
|
|
30
|
+
const markdown = ["# GoHighLevel Custom Field", "", summarizeRecord(customField, ["id", "name", "fieldKey", "dataType", "model"])].join("\n");
|
|
31
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const data = { error: formatApiError(error) };
|
|
35
|
+
return makeToolResponse(data, data.error, true);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
server.registerTool("ghl_create_custom_field", {
|
|
39
|
+
title: "Create GoHighLevel Custom Field",
|
|
40
|
+
description: "Create a custom field for a GoHighLevel location. Write operation: do not run against live data without explicit approval.",
|
|
41
|
+
inputSchema: CreateCustomFieldSchema.shape,
|
|
42
|
+
annotations: {
|
|
43
|
+
readOnlyHint: false,
|
|
44
|
+
destructiveHint: false,
|
|
45
|
+
idempotentHint: false,
|
|
46
|
+
openWorldHint: true
|
|
47
|
+
}
|
|
48
|
+
}, async (params) => {
|
|
49
|
+
try {
|
|
50
|
+
const body = customFieldBody(params);
|
|
51
|
+
const customField = await client.post(`/locations/${encodeURIComponent(resolveLocationId(client, params.location_id))}/customFields`, body);
|
|
52
|
+
const data = { customField };
|
|
53
|
+
const markdown = ["# Created GoHighLevel Custom Field", "", summarizeRecord(customField, ["id", "name", "fieldKey", "dataType", "model"])].join("\n");
|
|
54
|
+
return makeToolResponse(data, formatResponse(params.response_format, data, markdown));
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
const data = { error: formatApiError(error) };
|
|
58
|
+
return makeToolResponse(data, data.error, true);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
server.registerTool("ghl_update_custom_field", {
|
|
62
|
+
title: "Update GoHighLevel Custom Field",
|
|
63
|
+
description: "Update a custom field through the current location-scoped API: PUT /locations/{locationId}/customFields/{id}. Write operation: do not run against live data without explicit approval.",
|
|
64
|
+
inputSchema: UpdateCustomFieldSchema.shape,
|
|
65
|
+
annotations: {
|
|
66
|
+
readOnlyHint: false,
|
|
67
|
+
destructiveHint: false,
|
|
68
|
+
idempotentHint: true,
|
|
69
|
+
openWorldHint: true
|
|
70
|
+
}
|
|
71
|
+
}, async (params) => {
|
|
72
|
+
try {
|
|
73
|
+
const body = customFieldBody(params);
|
|
74
|
+
if (Object.keys(body).length === 0) {
|
|
75
|
+
const data = { error: "At least one custom field property must be provided for update." };
|
|
76
|
+
return makeToolResponse(data, data.error, true);
|
|
77
|
+
}
|
|
78
|
+
const customField = await client.put(`/locations/${encodeURIComponent(resolveLocationId(client, params.location_id))}/customFields/${encodeURIComponent(params.field_id)}`, body);
|
|
79
|
+
const data = { customField };
|
|
80
|
+
const markdown = ["# Updated GoHighLevel Custom Field", "", summarizeRecord(customField, ["id", "name", "fieldKey", "dataType", "model"])].join("\n");
|
|
81
|
+
return makeToolResponse(data, formatResponse(params.response_format, data, markdown));
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const data = { error: formatApiError(error) };
|
|
85
|
+
return makeToolResponse(data, data.error, true);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
server.registerTool("ghl_delete_custom_field", {
|
|
89
|
+
title: "Delete GoHighLevel Custom Field",
|
|
90
|
+
description: "Delete a custom field from /locations/{locationId}/customFields/{id}. Requires confirm: true and owner approval before live execution.",
|
|
91
|
+
inputSchema: DeleteCustomFieldSchema.shape,
|
|
92
|
+
annotations: {
|
|
93
|
+
readOnlyHint: false,
|
|
94
|
+
destructiveHint: true,
|
|
95
|
+
idempotentHint: false,
|
|
96
|
+
openWorldHint: true
|
|
97
|
+
}
|
|
98
|
+
}, async ({ location_id, field_id, confirm, response_format }) => {
|
|
99
|
+
const guard = requireConfirm(confirm);
|
|
100
|
+
if (guard) {
|
|
101
|
+
const data = { error: guard };
|
|
102
|
+
return makeToolResponse(data, data.error, true);
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const result = await client.del(`/locations/${encodeURIComponent(resolveLocationId(client, location_id))}/customFields/${encodeURIComponent(field_id)}`);
|
|
106
|
+
const data = { field_id, result };
|
|
107
|
+
const markdown = ["# Deleted GoHighLevel Custom Field", "", `Deleted custom field ${field_id}.`].join("\n");
|
|
108
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const data = { error: formatApiError(error) };
|
|
112
|
+
return makeToolResponse(data, data.error, true);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
registerCollectionReadTool(server, client, {
|
|
116
|
+
name: "ghl_list_custom_fields_v2",
|
|
117
|
+
title: "List GoHighLevel Custom Fields V2 By Object Key",
|
|
118
|
+
description: "List Custom Fields V2 fields/folders by object key with GET /custom-fields/object-key/{objectKey}. Supports Custom Objects and Company/Business per HighLevel docs.",
|
|
119
|
+
inputSchema: ListCustomFieldsV2Schema.shape,
|
|
120
|
+
path: (params) => `/custom-fields/object-key/${encodeURIComponent(String(params.objectKey))}`,
|
|
121
|
+
query: (params) => ({ locationId: resolveLocationId(client, params.location_id) }),
|
|
122
|
+
preferredFields: ["id", "name", "fieldKey", "objectKey", "dataType", "parentId"],
|
|
123
|
+
heading: "GoHighLevel Custom Fields V2",
|
|
124
|
+
collectionLabel: "custom fields v2"
|
|
125
|
+
});
|
|
126
|
+
server.registerTool("ghl_get_custom_field_v2", {
|
|
127
|
+
title: "Get GoHighLevel Custom Field Or Folder V2",
|
|
128
|
+
description: "Get a Custom Fields V2 field or folder by ID with GET /custom-fields/{id}.",
|
|
129
|
+
inputSchema: GetCustomFieldV2Schema.shape,
|
|
130
|
+
annotations: {
|
|
131
|
+
readOnlyHint: true,
|
|
132
|
+
destructiveHint: false,
|
|
133
|
+
idempotentHint: true,
|
|
134
|
+
openWorldHint: true
|
|
135
|
+
}
|
|
136
|
+
}, async ({ id, response_format }) => {
|
|
137
|
+
try {
|
|
138
|
+
const customField = await client.get(`/custom-fields/${encodeURIComponent(id)}`);
|
|
139
|
+
const data = { customField };
|
|
140
|
+
const markdown = ["# GoHighLevel Custom Field V2", "", summarizeRecord(customField, ["id", "name", "fieldKey", "objectKey", "dataType", "parentId"])].join("\n");
|
|
141
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
const data = { error: formatApiError(error) };
|
|
145
|
+
return makeToolResponse(data, data.error, true);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
server.registerTool("ghl_create_custom_field_v2", {
|
|
149
|
+
title: "Create GoHighLevel Custom Field V2",
|
|
150
|
+
description: "Create a Custom Fields V2 field with POST /custom-fields/. Write operation: do not run against live data without explicit approval.",
|
|
151
|
+
inputSchema: CreateCustomFieldV2Schema.shape,
|
|
152
|
+
annotations: {
|
|
153
|
+
readOnlyHint: false,
|
|
154
|
+
destructiveHint: false,
|
|
155
|
+
idempotentHint: false,
|
|
156
|
+
openWorldHint: true
|
|
157
|
+
}
|
|
158
|
+
}, async (params) => {
|
|
159
|
+
try {
|
|
160
|
+
const customField = await client.post("/custom-fields/", customFieldV2Body(client, params));
|
|
161
|
+
const data = { customField };
|
|
162
|
+
const markdown = ["# Created GoHighLevel Custom Field V2", "", summarizeRecord(customField, ["id", "name", "fieldKey", "objectKey", "dataType", "parentId"])].join("\n");
|
|
163
|
+
return makeToolResponse(data, formatResponse(params.response_format, data, markdown));
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
const data = { error: formatApiError(error) };
|
|
167
|
+
return makeToolResponse(data, data.error, true);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
server.registerTool("ghl_update_custom_field_v2", {
|
|
171
|
+
title: "Update GoHighLevel Custom Field V2",
|
|
172
|
+
description: "Update a Custom Fields V2 field with PUT /custom-fields/{id}. Write operation: do not run against live data without explicit approval.",
|
|
173
|
+
inputSchema: UpdateCustomFieldV2Schema.shape,
|
|
174
|
+
annotations: {
|
|
175
|
+
readOnlyHint: false,
|
|
176
|
+
destructiveHint: false,
|
|
177
|
+
idempotentHint: true,
|
|
178
|
+
openWorldHint: true
|
|
179
|
+
}
|
|
180
|
+
}, async (params) => {
|
|
181
|
+
try {
|
|
182
|
+
const body = customFieldV2Body(client, params);
|
|
183
|
+
if (Object.keys(body).length === 0) {
|
|
184
|
+
const data = { error: "At least one Custom Fields V2 property must be provided for update." };
|
|
185
|
+
return makeToolResponse(data, data.error, true);
|
|
186
|
+
}
|
|
187
|
+
const customField = await client.put(`/custom-fields/${encodeURIComponent(params.id)}`, body);
|
|
188
|
+
const data = { customField };
|
|
189
|
+
const markdown = ["# Updated GoHighLevel Custom Field V2", "", summarizeRecord(customField, ["id", "name", "fieldKey", "objectKey", "dataType", "parentId"])].join("\n");
|
|
190
|
+
return makeToolResponse(data, formatResponse(params.response_format, data, markdown));
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
const data = { error: formatApiError(error) };
|
|
194
|
+
return makeToolResponse(data, data.error, true);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
server.registerTool("ghl_delete_custom_field_v2", {
|
|
198
|
+
title: "Delete GoHighLevel Custom Field V2",
|
|
199
|
+
description: "Delete a Custom Fields V2 field with DELETE /custom-fields/{id}. Requires confirm: true and owner approval before live execution.",
|
|
200
|
+
inputSchema: DeleteCustomFieldV2Schema.shape,
|
|
201
|
+
annotations: {
|
|
202
|
+
readOnlyHint: false,
|
|
203
|
+
destructiveHint: true,
|
|
204
|
+
idempotentHint: false,
|
|
205
|
+
openWorldHint: true
|
|
206
|
+
}
|
|
207
|
+
}, async ({ id, confirm, response_format }) => {
|
|
208
|
+
const guard = requireConfirm(confirm);
|
|
209
|
+
if (guard) {
|
|
210
|
+
const data = { error: guard };
|
|
211
|
+
return makeToolResponse(data, data.error, true);
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const result = await client.del(`/custom-fields/${encodeURIComponent(id)}`);
|
|
215
|
+
const data = { id, result };
|
|
216
|
+
const markdown = ["# Deleted GoHighLevel Custom Field V2", "", `Deleted Custom Fields V2 field ${id}.`].join("\n");
|
|
217
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
const data = { error: formatApiError(error) };
|
|
221
|
+
return makeToolResponse(data, data.error, true);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
server.registerTool("ghl_create_custom_field_folder", {
|
|
225
|
+
title: "Create GoHighLevel Custom Field Folder",
|
|
226
|
+
description: "Create a Custom Fields V2 folder with POST /custom-fields/folder. Write operation: do not run against live data without explicit approval.",
|
|
227
|
+
inputSchema: CreateCustomFieldFolderSchema.shape,
|
|
228
|
+
annotations: {
|
|
229
|
+
readOnlyHint: false,
|
|
230
|
+
destructiveHint: false,
|
|
231
|
+
idempotentHint: false,
|
|
232
|
+
openWorldHint: true
|
|
233
|
+
}
|
|
234
|
+
}, async ({ location_id, objectKey, name, parentId, extra, response_format }) => {
|
|
235
|
+
try {
|
|
236
|
+
const folder = await client.post("/custom-fields/folder", mergeExtra({
|
|
237
|
+
locationId: resolveLocationId(client, location_id),
|
|
238
|
+
objectKey,
|
|
239
|
+
name,
|
|
240
|
+
parentId
|
|
241
|
+
}, extra));
|
|
242
|
+
const data = { folder };
|
|
243
|
+
const markdown = ["# Created GoHighLevel Custom Field Folder", "", summarizeRecord(folder, ["id", "name", "objectKey", "locationId"])].join("\n");
|
|
244
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
const data = { error: formatApiError(error) };
|
|
248
|
+
return makeToolResponse(data, data.error, true);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
server.registerTool("ghl_update_custom_field_folder", {
|
|
252
|
+
title: "Update GoHighLevel Custom Field Folder",
|
|
253
|
+
description: "Update a Custom Fields V2 folder name with PUT /custom-fields/folder/{id}. Write operation: do not run against live data without explicit approval.",
|
|
254
|
+
inputSchema: UpdateCustomFieldFolderSchema.shape,
|
|
255
|
+
annotations: {
|
|
256
|
+
readOnlyHint: false,
|
|
257
|
+
destructiveHint: false,
|
|
258
|
+
idempotentHint: true,
|
|
259
|
+
openWorldHint: true
|
|
260
|
+
}
|
|
261
|
+
}, async ({ folder_id, name, response_format }) => {
|
|
262
|
+
try {
|
|
263
|
+
const folder = await client.put(`/custom-fields/folder/${encodeURIComponent(folder_id)}`, {
|
|
264
|
+
locationId: client.defaultLocationId,
|
|
265
|
+
name
|
|
266
|
+
});
|
|
267
|
+
const data = { folder };
|
|
268
|
+
const markdown = ["# Updated GoHighLevel Custom Field Folder", "", summarizeRecord(folder, ["id", "name", "objectKey", "locationId"])].join("\n");
|
|
269
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
const data = { error: formatApiError(error) };
|
|
273
|
+
return makeToolResponse(data, data.error, true);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
server.registerTool("ghl_delete_custom_field_folder", {
|
|
277
|
+
title: "Delete GoHighLevel Custom Field Folder",
|
|
278
|
+
description: "Delete a Custom Fields V2 folder with DELETE /custom-fields/folder/{id}. Requires confirm: true and owner approval before live execution.",
|
|
279
|
+
inputSchema: DeleteCustomFieldFolderSchema.shape,
|
|
280
|
+
annotations: {
|
|
281
|
+
readOnlyHint: false,
|
|
282
|
+
destructiveHint: true,
|
|
283
|
+
idempotentHint: false,
|
|
284
|
+
openWorldHint: true
|
|
285
|
+
}
|
|
286
|
+
}, async ({ folder_id, confirm, response_format }) => {
|
|
287
|
+
const guard = requireConfirm(confirm);
|
|
288
|
+
if (guard) {
|
|
289
|
+
const data = { error: guard };
|
|
290
|
+
return makeToolResponse(data, data.error, true);
|
|
291
|
+
}
|
|
292
|
+
try {
|
|
293
|
+
const result = await client.del(`/custom-fields/folder/${encodeURIComponent(folder_id)}`);
|
|
294
|
+
const data = { folder_id, result };
|
|
295
|
+
const markdown = ["# Deleted GoHighLevel Custom Field Folder", "", `Deleted Custom Fields V2 folder ${folder_id}.`].join("\n");
|
|
296
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
const data = { error: formatApiError(error) };
|
|
300
|
+
return makeToolResponse(data, data.error, true);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
function resolveLocationId(client, locationId) {
|
|
305
|
+
return typeof locationId === "string" && locationId.length > 0 ? locationId : client.defaultLocationId;
|
|
306
|
+
}
|
|
307
|
+
function customFieldBody(params) {
|
|
308
|
+
return omitUndefined({
|
|
309
|
+
name: params.name,
|
|
310
|
+
dataType: params.dataType,
|
|
311
|
+
placeholder: params.placeholder,
|
|
312
|
+
position: params.position,
|
|
313
|
+
model: params.model,
|
|
314
|
+
options: params.options,
|
|
315
|
+
acceptedFormat: params.acceptedFormat,
|
|
316
|
+
isMultipleFile: params.isMultipleFile,
|
|
317
|
+
maxNumberOfFiles: params.maxNumberOfFiles,
|
|
318
|
+
textBoxListOptions: params.textBoxListOptions
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
function customFieldV2Body(client, params) {
|
|
322
|
+
return mergeExtra({
|
|
323
|
+
locationId: params.locationId ?? client.defaultLocationId,
|
|
324
|
+
name: params.name,
|
|
325
|
+
objectKey: params.objectKey,
|
|
326
|
+
dataType: params.dataType,
|
|
327
|
+
description: params.description,
|
|
328
|
+
placeholder: params.placeholder,
|
|
329
|
+
parentId: params.parentId,
|
|
330
|
+
showInForms: params.showInForms,
|
|
331
|
+
options: params.options,
|
|
332
|
+
acceptedFormats: params.acceptedFormats,
|
|
333
|
+
allowCustomOption: params.allowCustomOption,
|
|
334
|
+
maxFileLimit: params.maxFileLimit
|
|
335
|
+
}, params.extra);
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=custom-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-fields.js","sourceRoot":"","sources":["../../src/tools/custom-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { GoHighLevelClient } from "../services/gohighlevel-client.js";
|
|
3
|
+
export declare function registerCustomValueTools(server: McpServer, client: GoHighLevelClient): void;
|
|
4
|
+
//# sourceMappingURL=custom-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-values.d.ts","sourceRoot":"","sources":["../../src/tools/custom-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAgB3E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAkI3F"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { formatApiError } from "../services/errors.js";
|
|
2
|
+
import { CreateCustomValueSchema, DeleteCustomValueSchema, GetCustomValueSchema, ListCustomValuesSchema, UpdateCustomValueSchema } from "../schemas/custom-values.js";
|
|
3
|
+
import { formatResponse, makeToolResponse, omitUndefined, requireConfirm, summarizeRecord } from "./format.js";
|
|
4
|
+
import { registerCollectionReadTool } from "./read-tools.js";
|
|
5
|
+
export function registerCustomValueTools(server, client) {
|
|
6
|
+
registerCollectionReadTool(server, client, {
|
|
7
|
+
name: "ghl_list_custom_values",
|
|
8
|
+
title: "List GoHighLevel Custom Values",
|
|
9
|
+
description: "List custom values for a GoHighLevel location from /locations/{locationId}/customValues.",
|
|
10
|
+
inputSchema: ListCustomValuesSchema.shape,
|
|
11
|
+
path: (params) => `/locations/${encodeURIComponent(resolveLocationId(client, params.location_id))}/customValues`,
|
|
12
|
+
preferredFields: ["id", "name", "value", "fieldKey"],
|
|
13
|
+
heading: "GoHighLevel Custom Values",
|
|
14
|
+
collectionLabel: "custom values"
|
|
15
|
+
});
|
|
16
|
+
server.registerTool("ghl_get_custom_value", {
|
|
17
|
+
title: "Get GoHighLevel Custom Value",
|
|
18
|
+
description: "Get one custom value from /locations/{locationId}/customValues/{id}.",
|
|
19
|
+
inputSchema: GetCustomValueSchema.shape,
|
|
20
|
+
annotations: {
|
|
21
|
+
readOnlyHint: true,
|
|
22
|
+
destructiveHint: false,
|
|
23
|
+
idempotentHint: true,
|
|
24
|
+
openWorldHint: true
|
|
25
|
+
}
|
|
26
|
+
}, async ({ location_id, custom_value_id, response_format }) => {
|
|
27
|
+
try {
|
|
28
|
+
const customValue = await client.get(`/locations/${encodeURIComponent(resolveLocationId(client, location_id))}/customValues/${encodeURIComponent(custom_value_id)}`);
|
|
29
|
+
const data = { customValue };
|
|
30
|
+
const markdown = ["# GoHighLevel Custom Value", "", summarizeRecord(customValue, ["id", "name", "value", "fieldKey"])].join("\n");
|
|
31
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const data = { error: formatApiError(error) };
|
|
35
|
+
return makeToolResponse(data, data.error, true);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
server.registerTool("ghl_create_custom_value", {
|
|
39
|
+
title: "Create GoHighLevel Custom Value",
|
|
40
|
+
description: "Create a custom value for a GoHighLevel location. Write operation: do not run against live data without explicit approval.",
|
|
41
|
+
inputSchema: CreateCustomValueSchema.shape,
|
|
42
|
+
annotations: {
|
|
43
|
+
readOnlyHint: false,
|
|
44
|
+
destructiveHint: false,
|
|
45
|
+
idempotentHint: false,
|
|
46
|
+
openWorldHint: true
|
|
47
|
+
}
|
|
48
|
+
}, async (params) => {
|
|
49
|
+
try {
|
|
50
|
+
const customValue = await client.post(`/locations/${encodeURIComponent(resolveLocationId(client, params.location_id))}/customValues`, {
|
|
51
|
+
name: params.name,
|
|
52
|
+
value: params.value
|
|
53
|
+
});
|
|
54
|
+
const data = { customValue };
|
|
55
|
+
const markdown = ["# Created GoHighLevel Custom Value", "", summarizeRecord(customValue, ["id", "name", "value", "fieldKey"])].join("\n");
|
|
56
|
+
return makeToolResponse(data, formatResponse(params.response_format, data, markdown));
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const data = { error: formatApiError(error) };
|
|
60
|
+
return makeToolResponse(data, data.error, true);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
server.registerTool("ghl_update_custom_value", {
|
|
64
|
+
title: "Update GoHighLevel Custom Value",
|
|
65
|
+
description: "Update a custom value from /locations/{locationId}/customValues/{id}. Write operation: do not run against live data without explicit approval.",
|
|
66
|
+
inputSchema: UpdateCustomValueSchema.shape,
|
|
67
|
+
annotations: {
|
|
68
|
+
readOnlyHint: false,
|
|
69
|
+
destructiveHint: false,
|
|
70
|
+
idempotentHint: true,
|
|
71
|
+
openWorldHint: true
|
|
72
|
+
}
|
|
73
|
+
}, async (params) => {
|
|
74
|
+
try {
|
|
75
|
+
const body = omitUndefined({ name: params.name, value: params.value });
|
|
76
|
+
if (Object.keys(body).length === 0) {
|
|
77
|
+
const data = { error: "At least one custom value property must be provided for update." };
|
|
78
|
+
return makeToolResponse(data, data.error, true);
|
|
79
|
+
}
|
|
80
|
+
const customValue = await client.put(`/locations/${encodeURIComponent(resolveLocationId(client, params.location_id))}/customValues/${encodeURIComponent(params.custom_value_id)}`, body);
|
|
81
|
+
const data = { customValue };
|
|
82
|
+
const markdown = ["# Updated GoHighLevel Custom Value", "", summarizeRecord(customValue, ["id", "name", "value", "fieldKey"])].join("\n");
|
|
83
|
+
return makeToolResponse(data, formatResponse(params.response_format, data, markdown));
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const data = { error: formatApiError(error) };
|
|
87
|
+
return makeToolResponse(data, data.error, true);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
server.registerTool("ghl_delete_custom_value", {
|
|
91
|
+
title: "Delete GoHighLevel Custom Value",
|
|
92
|
+
description: "Delete a custom value from /locations/{locationId}/customValues/{id}. Requires confirm: true and owner approval before live execution.",
|
|
93
|
+
inputSchema: DeleteCustomValueSchema.shape,
|
|
94
|
+
annotations: {
|
|
95
|
+
readOnlyHint: false,
|
|
96
|
+
destructiveHint: true,
|
|
97
|
+
idempotentHint: false,
|
|
98
|
+
openWorldHint: true
|
|
99
|
+
}
|
|
100
|
+
}, async ({ location_id, custom_value_id, confirm, response_format }) => {
|
|
101
|
+
const guard = requireConfirm(confirm);
|
|
102
|
+
if (guard) {
|
|
103
|
+
const data = { error: guard };
|
|
104
|
+
return makeToolResponse(data, data.error, true);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const result = await client.del(`/locations/${encodeURIComponent(resolveLocationId(client, location_id))}/customValues/${encodeURIComponent(custom_value_id)}`);
|
|
108
|
+
const data = { custom_value_id, result };
|
|
109
|
+
const markdown = ["# Deleted GoHighLevel Custom Value", "", `Deleted custom value ${custom_value_id}.`].join("\n");
|
|
110
|
+
return makeToolResponse(data, formatResponse(response_format, data, markdown));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const data = { error: formatApiError(error) };
|
|
114
|
+
return makeToolResponse(data, data.error, true);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function resolveLocationId(client, locationId) {
|
|
119
|
+
return typeof locationId === "string" && locationId.length > 0 ? locationId : client.defaultLocationId;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=custom-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-values.js","sourceRoot":"","sources":["../../src/tools/custom-values.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PaginatedItems, ResponseFormat, ToolResponse } from "../types.js";
|
|
2
|
+
export declare function paginate<T>(items: T[], limit: number, offset: number): PaginatedItems<T>;
|
|
3
|
+
export declare function makeToolResponse<T extends Record<string, unknown>>(data: T, text: string, isError?: boolean): ToolResponse<T>;
|
|
4
|
+
export declare function formatResponse<T>(format: ResponseFormat, data: T, markdown: string): string;
|
|
5
|
+
export declare function summarizeRecord(record: unknown, preferredFields: string[]): string;
|
|
6
|
+
export declare function omitUndefined(input: Record<string, unknown>): Record<string, unknown>;
|
|
7
|
+
export declare function mergeExtra(input: Record<string, unknown>, extra: Record<string, unknown> | undefined): Record<string, unknown>;
|
|
8
|
+
export declare function requireConfirm(confirm: boolean): string | null;
|
|
9
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/tools/format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAYxF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAU3H;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,CAWlF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAErF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK9H;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE9D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { RESPONSE_CHARACTER_LIMIT } from "../constants.js";
|
|
2
|
+
export function paginate(items, limit, offset) {
|
|
3
|
+
const pageItems = items.slice(offset, offset + limit);
|
|
4
|
+
const hasMore = offset + pageItems.length < items.length;
|
|
5
|
+
return {
|
|
6
|
+
total: items.length,
|
|
7
|
+
count: pageItems.length,
|
|
8
|
+
offset,
|
|
9
|
+
items: pageItems,
|
|
10
|
+
has_more: hasMore,
|
|
11
|
+
...(hasMore ? { next_offset: offset + pageItems.length } : {})
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function makeToolResponse(data, text, isError = false) {
|
|
15
|
+
const responseText = text.length > RESPONSE_CHARACTER_LIMIT
|
|
16
|
+
? `${text.slice(0, RESPONSE_CHARACTER_LIMIT)}\n\nResponse truncated at ${RESPONSE_CHARACTER_LIMIT} characters. Use filters or a smaller limit.`
|
|
17
|
+
: text;
|
|
18
|
+
return {
|
|
19
|
+
content: [{ type: "text", text: responseText }],
|
|
20
|
+
structuredContent: data,
|
|
21
|
+
...(isError ? { isError: true } : {})
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function formatResponse(format, data, markdown) {
|
|
25
|
+
return format === "json" ? JSON.stringify(data, null, 2) : markdown;
|
|
26
|
+
}
|
|
27
|
+
export function summarizeRecord(record, preferredFields) {
|
|
28
|
+
if (!record || typeof record !== "object") {
|
|
29
|
+
return String(record);
|
|
30
|
+
}
|
|
31
|
+
const source = record;
|
|
32
|
+
const fields = preferredFields
|
|
33
|
+
.filter((field) => source[field] !== undefined && source[field] !== null && source[field] !== "")
|
|
34
|
+
.map((field) => `${field}: ${String(source[field])}`);
|
|
35
|
+
return fields.length > 0 ? fields.join(", ") : JSON.stringify(record);
|
|
36
|
+
}
|
|
37
|
+
export function omitUndefined(input) {
|
|
38
|
+
return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined));
|
|
39
|
+
}
|
|
40
|
+
export function mergeExtra(input, extra) {
|
|
41
|
+
return {
|
|
42
|
+
...omitUndefined(input),
|
|
43
|
+
...(extra ?? {})
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function requireConfirm(confirm) {
|
|
47
|
+
return confirm === true ? null : "This is a destructive GoHighLevel operation. Re-run with confirm: true to call the API.";
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/tools/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { GoHighLevelClient } from "../services/gohighlevel-client.js";
|
|
3
|
+
export declare function registerTools(server: McpServer, client: GoHighLevelClient): void;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAU3E,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAShF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { registerCalendarTools } from "./calendars.js";
|
|
2
|
+
import { registerContactTools } from "./contacts.js";
|
|
3
|
+
import { registerConversationTools } from "./conversations.js";
|
|
4
|
+
import { registerCustomFieldTools } from "./custom-fields.js";
|
|
5
|
+
import { registerCustomValueTools } from "./custom-values.js";
|
|
6
|
+
import { registerLocationTools } from "./locations.js";
|
|
7
|
+
import { registerOpportunityTools } from "./opportunities.js";
|
|
8
|
+
import { registerTagTools } from "./tags.js";
|
|
9
|
+
export function registerTools(server, client) {
|
|
10
|
+
registerCustomFieldTools(server, client);
|
|
11
|
+
registerCustomValueTools(server, client);
|
|
12
|
+
registerContactTools(server, client);
|
|
13
|
+
registerTagTools(server, client);
|
|
14
|
+
registerOpportunityTools(server, client);
|
|
15
|
+
registerConversationTools(server, client);
|
|
16
|
+
registerCalendarTools(server, client);
|
|
17
|
+
registerLocationTools(server, client);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAyB;IACxE,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { GoHighLevelClient } from "../services/gohighlevel-client.js";
|
|
3
|
+
export declare function registerLocationTools(server: McpServer, client: GoHighLevelClient): void;
|
|
4
|
+
//# sourceMappingURL=locations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locations.d.ts","sourceRoot":"","sources":["../../src/tools/locations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAM3E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAsCxF"}
|