@wilnertech/halopsa-mcp-server 1.0.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.
Files changed (76) hide show
  1. package/.env.example +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +270 -0
  4. package/dist/api/client.d.ts +85 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +297 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/errors.d.ts +60 -0
  9. package/dist/api/errors.d.ts.map +1 -0
  10. package/dist/api/errors.js +188 -0
  11. package/dist/api/errors.js.map +1 -0
  12. package/dist/cache/memory-cache.d.ts +89 -0
  13. package/dist/cache/memory-cache.d.ts.map +1 -0
  14. package/dist/cache/memory-cache.js +175 -0
  15. package/dist/cache/memory-cache.js.map +1 -0
  16. package/dist/cache/prewarm.d.ts +12 -0
  17. package/dist/cache/prewarm.d.ts.map +1 -0
  18. package/dist/cache/prewarm.js +55 -0
  19. package/dist/cache/prewarm.js.map +1 -0
  20. package/dist/index.d.ts +12 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +141 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/schemas/common.d.ts +212 -0
  25. package/dist/schemas/common.d.ts.map +1 -0
  26. package/dist/schemas/common.js +127 -0
  27. package/dist/schemas/common.js.map +1 -0
  28. package/dist/tools/assets.d.ts +482 -0
  29. package/dist/tools/assets.d.ts.map +1 -0
  30. package/dist/tools/assets.js +732 -0
  31. package/dist/tools/assets.js.map +1 -0
  32. package/dist/tools/batch-operations.d.ts +125 -0
  33. package/dist/tools/batch-operations.d.ts.map +1 -0
  34. package/dist/tools/batch-operations.js +207 -0
  35. package/dist/tools/batch-operations.js.map +1 -0
  36. package/dist/tools/clients.d.ts +145 -0
  37. package/dist/tools/clients.d.ts.map +1 -0
  38. package/dist/tools/clients.js +148 -0
  39. package/dist/tools/clients.js.map +1 -0
  40. package/dist/tools/reference-data.d.ts +118 -0
  41. package/dist/tools/reference-data.d.ts.map +1 -0
  42. package/dist/tools/reference-data.js +103 -0
  43. package/dist/tools/reference-data.js.map +1 -0
  44. package/dist/tools/registrations.d.ts +7 -0
  45. package/dist/tools/registrations.d.ts.map +1 -0
  46. package/dist/tools/registrations.js +61 -0
  47. package/dist/tools/registrations.js.map +1 -0
  48. package/dist/tools/registry.d.ts +67 -0
  49. package/dist/tools/registry.d.ts.map +1 -0
  50. package/dist/tools/registry.js +71 -0
  51. package/dist/tools/registry.js.map +1 -0
  52. package/dist/tools/sites.d.ts +188 -0
  53. package/dist/tools/sites.d.ts.map +1 -0
  54. package/dist/tools/sites.js +258 -0
  55. package/dist/tools/sites.js.map +1 -0
  56. package/dist/tools/users.d.ts +317 -0
  57. package/dist/tools/users.d.ts.map +1 -0
  58. package/dist/tools/users.js +489 -0
  59. package/dist/tools/users.js.map +1 -0
  60. package/dist/types/halopsa.d.ts +212 -0
  61. package/dist/types/halopsa.d.ts.map +1 -0
  62. package/dist/types/halopsa.js +8 -0
  63. package/dist/types/halopsa.js.map +1 -0
  64. package/dist/utils/formatter.d.ts +18 -0
  65. package/dist/utils/formatter.d.ts.map +1 -0
  66. package/dist/utils/formatter.js +178 -0
  67. package/dist/utils/formatter.js.map +1 -0
  68. package/dist/utils/similarity.d.ts +25 -0
  69. package/dist/utils/similarity.d.ts.map +1 -0
  70. package/dist/utils/similarity.js +90 -0
  71. package/dist/utils/similarity.js.map +1 -0
  72. package/dist/utils/zod-to-schema.d.ts +29 -0
  73. package/dist/utils/zod-to-schema.d.ts.map +1 -0
  74. package/dist/utils/zod-to-schema.js +182 -0
  75. package/dist/utils/zod-to-schema.js.map +1 -0
  76. package/package.json +61 -0
@@ -0,0 +1,317 @@
1
+ /**
2
+ * HaloPSA User tools with token optimization
3
+ * Provides CRUD operations for users with caching and deduplication
4
+ *
5
+ * CRITICAL: Users are a secondary billing entity
6
+ * - Only ACTIVE users (inactive=false) count toward billing
7
+ * - Duplicates cause billing errors = revenue loss
8
+ */
9
+ import { z } from 'zod';
10
+ import type { HaloPSAAPIClient } from '../api/client.js';
11
+ import type { ZodToolDefinition } from './registry.js';
12
+ /**
13
+ * List users schema
14
+ */
15
+ export declare const ListUsersArgsSchema: z.ZodObject<{
16
+ client_id: z.ZodOptional<z.ZodNumber>;
17
+ site_id: z.ZodOptional<z.ZodNumber>;
18
+ search: z.ZodOptional<z.ZodString>;
19
+ count: z.ZodOptional<z.ZodNumber>;
20
+ page_no: z.ZodOptional<z.ZodNumber>;
21
+ includeactive: z.ZodOptional<z.ZodBoolean>;
22
+ includeinactive: z.ZodOptional<z.ZodBoolean>;
23
+ format_options: z.ZodOptional<z.ZodObject<{
24
+ format: z.ZodOptional<z.ZodEnum<["compact", "standard", "detailed"]>>;
25
+ fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
26
+ omit_empty: z.ZodOptional<z.ZodBoolean>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ format?: "compact" | "standard" | "detailed" | undefined;
29
+ fields?: string[] | undefined;
30
+ omit_empty?: boolean | undefined;
31
+ }, {
32
+ format?: "compact" | "standard" | "detailed" | undefined;
33
+ fields?: string[] | undefined;
34
+ omit_empty?: boolean | undefined;
35
+ }>>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ client_id?: number | undefined;
38
+ count?: number | undefined;
39
+ page_no?: number | undefined;
40
+ site_id?: number | undefined;
41
+ search?: string | undefined;
42
+ includeactive?: boolean | undefined;
43
+ includeinactive?: boolean | undefined;
44
+ format_options?: {
45
+ format?: "compact" | "standard" | "detailed" | undefined;
46
+ fields?: string[] | undefined;
47
+ omit_empty?: boolean | undefined;
48
+ } | undefined;
49
+ }, {
50
+ client_id?: number | undefined;
51
+ count?: number | undefined;
52
+ page_no?: number | undefined;
53
+ site_id?: number | undefined;
54
+ search?: string | undefined;
55
+ includeactive?: boolean | undefined;
56
+ includeinactive?: boolean | undefined;
57
+ format_options?: {
58
+ format?: "compact" | "standard" | "detailed" | undefined;
59
+ fields?: string[] | undefined;
60
+ omit_empty?: boolean | undefined;
61
+ } | undefined;
62
+ }>;
63
+ /**
64
+ * Get single user schema
65
+ */
66
+ export declare const GetUserArgsSchema: z.ZodObject<{
67
+ user_id: z.ZodNumber;
68
+ format_options: z.ZodOptional<z.ZodObject<{
69
+ format: z.ZodOptional<z.ZodEnum<["compact", "standard", "detailed"]>>;
70
+ fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
71
+ omit_empty: z.ZodOptional<z.ZodBoolean>;
72
+ }, "strip", z.ZodTypeAny, {
73
+ format?: "compact" | "standard" | "detailed" | undefined;
74
+ fields?: string[] | undefined;
75
+ omit_empty?: boolean | undefined;
76
+ }, {
77
+ format?: "compact" | "standard" | "detailed" | undefined;
78
+ fields?: string[] | undefined;
79
+ omit_empty?: boolean | undefined;
80
+ }>>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ user_id: number;
83
+ format_options?: {
84
+ format?: "compact" | "standard" | "detailed" | undefined;
85
+ fields?: string[] | undefined;
86
+ omit_empty?: boolean | undefined;
87
+ } | undefined;
88
+ }, {
89
+ user_id: number;
90
+ format_options?: {
91
+ format?: "compact" | "standard" | "detailed" | undefined;
92
+ fields?: string[] | undefined;
93
+ omit_empty?: boolean | undefined;
94
+ } | undefined;
95
+ }>;
96
+ /**
97
+ * Search users by email schema
98
+ */
99
+ export declare const SearchUsersByEmailArgsSchema: z.ZodObject<{
100
+ email: z.ZodString;
101
+ client_id: z.ZodOptional<z.ZodNumber>;
102
+ format_options: z.ZodOptional<z.ZodObject<{
103
+ format: z.ZodOptional<z.ZodEnum<["compact", "standard", "detailed"]>>;
104
+ fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
105
+ omit_empty: z.ZodOptional<z.ZodBoolean>;
106
+ }, "strip", z.ZodTypeAny, {
107
+ format?: "compact" | "standard" | "detailed" | undefined;
108
+ fields?: string[] | undefined;
109
+ omit_empty?: boolean | undefined;
110
+ }, {
111
+ format?: "compact" | "standard" | "detailed" | undefined;
112
+ fields?: string[] | undefined;
113
+ omit_empty?: boolean | undefined;
114
+ }>>;
115
+ }, "strip", z.ZodTypeAny, {
116
+ email: string;
117
+ client_id?: number | undefined;
118
+ format_options?: {
119
+ format?: "compact" | "standard" | "detailed" | undefined;
120
+ fields?: string[] | undefined;
121
+ omit_empty?: boolean | undefined;
122
+ } | undefined;
123
+ }, {
124
+ email: string;
125
+ client_id?: number | undefined;
126
+ format_options?: {
127
+ format?: "compact" | "standard" | "detailed" | undefined;
128
+ fields?: string[] | undefined;
129
+ omit_empty?: boolean | undefined;
130
+ } | undefined;
131
+ }>;
132
+ /**
133
+ * Create user schema
134
+ */
135
+ export declare const CreateUserArgsSchema: z.ZodObject<{
136
+ client_id: z.ZodNumber;
137
+ site_id: z.ZodOptional<z.ZodNumber>;
138
+ name: z.ZodString;
139
+ emailaddress: z.ZodOptional<z.ZodString>;
140
+ username: z.ZodOptional<z.ZodString>;
141
+ inactive: z.ZodOptional<z.ZodBoolean>;
142
+ user_customfields: z.ZodOptional<z.ZodArray<z.ZodObject<{
143
+ id: z.ZodNumber;
144
+ value: z.ZodString;
145
+ }, "strip", z.ZodTypeAny, {
146
+ value: string;
147
+ id: number;
148
+ }, {
149
+ value: string;
150
+ id: number;
151
+ }>, "many">>;
152
+ }, "strip", z.ZodTypeAny, {
153
+ client_id: number;
154
+ name: string;
155
+ inactive?: boolean | undefined;
156
+ emailaddress?: string | undefined;
157
+ site_id?: number | undefined;
158
+ username?: string | undefined;
159
+ user_customfields?: {
160
+ value: string;
161
+ id: number;
162
+ }[] | undefined;
163
+ }, {
164
+ client_id: number;
165
+ name: string;
166
+ inactive?: boolean | undefined;
167
+ emailaddress?: string | undefined;
168
+ site_id?: number | undefined;
169
+ username?: string | undefined;
170
+ user_customfields?: {
171
+ value: string;
172
+ id: number;
173
+ }[] | undefined;
174
+ }>;
175
+ /**
176
+ * Update user schema
177
+ */
178
+ export declare const UpdateUserArgsSchema: z.ZodObject<{
179
+ user_id: z.ZodNumber;
180
+ site_id: z.ZodOptional<z.ZodNumber>;
181
+ name: z.ZodOptional<z.ZodString>;
182
+ emailaddress: z.ZodOptional<z.ZodString>;
183
+ username: z.ZodOptional<z.ZodString>;
184
+ inactive: z.ZodOptional<z.ZodBoolean>;
185
+ user_customfields: z.ZodOptional<z.ZodArray<z.ZodObject<{
186
+ id: z.ZodNumber;
187
+ value: z.ZodString;
188
+ }, "strip", z.ZodTypeAny, {
189
+ value: string;
190
+ id: number;
191
+ }, {
192
+ value: string;
193
+ id: number;
194
+ }>, "many">>;
195
+ }, "strip", z.ZodTypeAny, {
196
+ user_id: number;
197
+ name?: string | undefined;
198
+ inactive?: boolean | undefined;
199
+ emailaddress?: string | undefined;
200
+ site_id?: number | undefined;
201
+ username?: string | undefined;
202
+ user_customfields?: {
203
+ value: string;
204
+ id: number;
205
+ }[] | undefined;
206
+ }, {
207
+ user_id: number;
208
+ name?: string | undefined;
209
+ inactive?: boolean | undefined;
210
+ emailaddress?: string | undefined;
211
+ site_id?: number | undefined;
212
+ username?: string | undefined;
213
+ user_customfields?: {
214
+ value: string;
215
+ id: number;
216
+ }[] | undefined;
217
+ }>;
218
+ /**
219
+ * Find user match schema (deduplication)
220
+ */
221
+ export declare const FindUserMatchArgsSchema: z.ZodObject<{
222
+ email: z.ZodOptional<z.ZodString>;
223
+ upn: z.ZodOptional<z.ZodString>;
224
+ username: z.ZodOptional<z.ZodString>;
225
+ client_id: z.ZodNumber;
226
+ }, "strip", z.ZodTypeAny, {
227
+ client_id: number;
228
+ email?: string | undefined;
229
+ username?: string | undefined;
230
+ upn?: string | undefined;
231
+ }, {
232
+ client_id: number;
233
+ email?: string | undefined;
234
+ username?: string | undefined;
235
+ upn?: string | undefined;
236
+ }>;
237
+ /**
238
+ * Scan user duplicates schema
239
+ */
240
+ export declare const ScanUserDuplicatesArgsSchema: z.ZodObject<{
241
+ client_id: z.ZodOptional<z.ZodNumber>;
242
+ format_options: z.ZodOptional<z.ZodObject<{
243
+ format: z.ZodOptional<z.ZodEnum<["compact", "standard", "detailed"]>>;
244
+ fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
245
+ omit_empty: z.ZodOptional<z.ZodBoolean>;
246
+ }, "strip", z.ZodTypeAny, {
247
+ format?: "compact" | "standard" | "detailed" | undefined;
248
+ fields?: string[] | undefined;
249
+ omit_empty?: boolean | undefined;
250
+ }, {
251
+ format?: "compact" | "standard" | "detailed" | undefined;
252
+ fields?: string[] | undefined;
253
+ omit_empty?: boolean | undefined;
254
+ }>>;
255
+ }, "strip", z.ZodTypeAny, {
256
+ client_id?: number | undefined;
257
+ format_options?: {
258
+ format?: "compact" | "standard" | "detailed" | undefined;
259
+ fields?: string[] | undefined;
260
+ omit_empty?: boolean | undefined;
261
+ } | undefined;
262
+ }, {
263
+ client_id?: number | undefined;
264
+ format_options?: {
265
+ format?: "compact" | "standard" | "detailed" | undefined;
266
+ fields?: string[] | undefined;
267
+ omit_empty?: boolean | undefined;
268
+ } | undefined;
269
+ }>;
270
+ /**
271
+ * List users with optional filtering and token optimization
272
+ * Uses 1-minute cache TTL (billing-critical data)
273
+ */
274
+ export declare function listUsers(client: HaloPSAAPIClient, args: z.infer<typeof ListUsersArgsSchema>): Promise<string>;
275
+ /**
276
+ * Get a single user by ID with full details
277
+ */
278
+ export declare function getUser(client: HaloPSAAPIClient, args: z.infer<typeof GetUserArgsSchema>): Promise<string>;
279
+ /**
280
+ * Search users by email address
281
+ * Returns warning if multiple found (potential duplicates)
282
+ */
283
+ export declare function searchUsersByEmail(client: HaloPSAAPIClient, args: z.infer<typeof SearchUsersByEmailArgsSchema>): Promise<string>;
284
+ /**
285
+ * Create a new user
286
+ * Invalidates user cache on success
287
+ */
288
+ export declare function createUser(client: HaloPSAAPIClient, args: z.infer<typeof CreateUserArgsSchema>): Promise<string>;
289
+ /**
290
+ * Update an existing user
291
+ * Invalidates user cache on success
292
+ */
293
+ export declare function updateUser(client: HaloPSAAPIClient, args: z.infer<typeof UpdateUserArgsSchema>): Promise<string>;
294
+ /**
295
+ * Find matching user using deduplication algorithm
296
+ * Returns confidence scoring and action recommendation
297
+ *
298
+ * Confidence Thresholds:
299
+ * - 100%: Exact email match -> Auto-update
300
+ * - 95%: UPN match (Entra source of truth) -> Auto-update
301
+ * - 70%: Username match only -> Manual review
302
+ * - 0%: No match -> Create new
303
+ */
304
+ export declare function findUserMatch(client: HaloPSAAPIClient, args: z.infer<typeof FindUserMatchArgsSchema>): Promise<string>;
305
+ /**
306
+ * Scan for duplicate users
307
+ * Returns groups of duplicate entities with confidence scores
308
+ */
309
+ export declare function scanUserDuplicates(client: HaloPSAAPIClient, args: z.infer<typeof ScanUserDuplicatesArgsSchema>): Promise<string>;
310
+ export declare const listUsersTool: ZodToolDefinition;
311
+ export declare const getUserTool: ZodToolDefinition;
312
+ export declare const searchUsersByEmailTool: ZodToolDefinition;
313
+ export declare const createUserTool: ZodToolDefinition;
314
+ export declare const updateUserTool: ZodToolDefinition;
315
+ export declare const findUserMatchTool: ZodToolDefinition;
316
+ export declare const scanUserDuplicatesTool: ZodToolDefinition;
317
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAavD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMvC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EASlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIvC,CAAC;AAMH;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,GACjD,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GACzC,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GACzC,OAAO,CAAC,MAAM,CAAC,CAwCjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAqFjB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,GACjD,OAAO,CAAC,MAAM,CAAC,CAiHjB;AAMD,eAAO,MAAM,aAAa,EAAE,iBAK3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,iBAKzB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,iBAKpC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,iBAK5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,iBAK5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,iBAKpC,CAAC"}