mcp-grampsweb 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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/dist/auth.d.ts +37 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +119 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +44 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +153 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +11 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +32 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/constants.d.ts +24 -0
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/constants.js +50 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/index.d.ts +9 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +132 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/schemas/common.d.ts +308 -0
  24. package/dist/schemas/common.d.ts.map +1 -0
  25. package/dist/schemas/common.js +120 -0
  26. package/dist/schemas/common.js.map +1 -0
  27. package/dist/schemas/entities.d.ts +1165 -0
  28. package/dist/schemas/entities.d.ts.map +1 -0
  29. package/dist/schemas/entities.js +125 -0
  30. package/dist/schemas/entities.js.map +1 -0
  31. package/dist/schemas/index.d.ts +7 -0
  32. package/dist/schemas/index.d.ts.map +1 -0
  33. package/dist/schemas/index.js +7 -0
  34. package/dist/schemas/index.js.map +1 -0
  35. package/dist/schemas/search.d.ts +47 -0
  36. package/dist/schemas/search.d.ts.map +1 -0
  37. package/dist/schemas/search.js +24 -0
  38. package/dist/schemas/search.js.map +1 -0
  39. package/dist/tools/analysis.d.ts +115 -0
  40. package/dist/tools/analysis.d.ts.map +1 -0
  41. package/dist/tools/analysis.js +387 -0
  42. package/dist/tools/analysis.js.map +1 -0
  43. package/dist/tools/create.d.ts +355 -0
  44. package/dist/tools/create.d.ts.map +1 -0
  45. package/dist/tools/create.js +547 -0
  46. package/dist/tools/create.js.map +1 -0
  47. package/dist/tools/index.d.ts +468 -0
  48. package/dist/tools/index.d.ts.map +1 -0
  49. package/dist/tools/index.js +17 -0
  50. package/dist/tools/index.js.map +1 -0
  51. package/dist/tools/search.d.ts +95 -0
  52. package/dist/tools/search.d.ts.map +1 -0
  53. package/dist/tools/search.js +161 -0
  54. package/dist/tools/search.js.map +1 -0
  55. package/dist/types.d.ts +210 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +5 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/utils/errors.d.ts +19 -0
  60. package/dist/utils/errors.d.ts.map +1 -0
  61. package/dist/utils/errors.js +48 -0
  62. package/dist/utils/errors.js.map +1 -0
  63. package/dist/utils/formatting.d.ts +60 -0
  64. package/dist/utils/formatting.d.ts.map +1 -0
  65. package/dist/utils/formatting.js +256 -0
  66. package/dist/utils/formatting.js.map +1 -0
  67. package/package.json +48 -0
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Gramps Web MCP Server
4
+ *
5
+ * An MCP server that provides tools for interacting with the Gramps Web API
6
+ * for genealogy research.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
package/dist/index.js ADDED
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Gramps Web MCP Server
4
+ *
5
+ * An MCP server that provides tools for interacting with the Gramps Web API
6
+ * for genealogy research.
7
+ */
8
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
11
+ import { loadConfig } from "./config.js";
12
+ import { authManager } from "./auth.js";
13
+ import { grampsClient } from "./client.js";
14
+ import { allTools } from "./tools/index.js";
15
+ import { formatErrorForMCP } from "./utils/errors.js";
16
+ // Logger that writes to stderr (stdout is for MCP JSON-RPC)
17
+ const log = {
18
+ info: (msg) => console.error(`[INFO] ${msg}`),
19
+ error: (msg) => console.error(`[ERROR] ${msg}`),
20
+ debug: (msg) => {
21
+ if (process.env.DEBUG) {
22
+ console.error(`[DEBUG] ${msg}`);
23
+ }
24
+ },
25
+ };
26
+ async function main() {
27
+ log.info("Starting Gramps Web MCP Server...");
28
+ // Load and validate configuration
29
+ let config;
30
+ try {
31
+ config = loadConfig();
32
+ log.info(`Connecting to Gramps Web at: ${config.apiUrl}`);
33
+ }
34
+ catch (error) {
35
+ log.error(formatErrorForMCP(error));
36
+ process.exit(1);
37
+ }
38
+ // Initialize auth manager and API client
39
+ authManager.initialize(config);
40
+ grampsClient.initialize(config);
41
+ // Test authentication
42
+ try {
43
+ await authManager.getToken();
44
+ log.info("Authentication successful");
45
+ }
46
+ catch (error) {
47
+ log.error(`Authentication failed: ${formatErrorForMCP(error)}`);
48
+ process.exit(1);
49
+ }
50
+ // Create MCP server
51
+ const server = new Server({
52
+ name: "gramps-web",
53
+ version: "1.0.0",
54
+ }, {
55
+ capabilities: {
56
+ tools: {},
57
+ },
58
+ });
59
+ // Register tool list handler
60
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
61
+ const tools = Object.values(allTools).map((tool) => ({
62
+ name: tool.name,
63
+ description: tool.description,
64
+ inputSchema: tool.inputSchema,
65
+ }));
66
+ return { tools };
67
+ });
68
+ // Register tool call handler
69
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
70
+ const { name, arguments: args } = request.params;
71
+ log.debug(`Tool called: ${name}`);
72
+ const tool = allTools[name];
73
+ if (!tool) {
74
+ return {
75
+ content: [
76
+ {
77
+ type: "text",
78
+ text: `Unknown tool: ${name}`,
79
+ },
80
+ ],
81
+ isError: true,
82
+ };
83
+ }
84
+ try {
85
+ const result = await tool.handler(args);
86
+ return {
87
+ content: [
88
+ {
89
+ type: "text",
90
+ text: result,
91
+ },
92
+ ],
93
+ };
94
+ }
95
+ catch (error) {
96
+ const errorMessage = formatErrorForMCP(error);
97
+ log.error(`Tool ${name} failed: ${errorMessage}`);
98
+ return {
99
+ content: [
100
+ {
101
+ type: "text",
102
+ text: `Error: ${errorMessage}`,
103
+ },
104
+ ],
105
+ isError: true,
106
+ };
107
+ }
108
+ });
109
+ // Set up error handlers
110
+ server.onerror = (error) => {
111
+ log.error(`Server error: ${error.message}`);
112
+ };
113
+ process.on("SIGINT", async () => {
114
+ log.info("Shutting down...");
115
+ await server.close();
116
+ process.exit(0);
117
+ });
118
+ process.on("SIGTERM", async () => {
119
+ log.info("Shutting down...");
120
+ await server.close();
121
+ process.exit(0);
122
+ });
123
+ // Start the server
124
+ const transport = new StdioServerTransport();
125
+ await server.connect(transport);
126
+ log.info("Gramps Web MCP Server running on stdio");
127
+ }
128
+ main().catch((error) => {
129
+ console.error("Fatal error:", error);
130
+ process.exit(1);
131
+ });
132
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Shared Zod schemas for common types
3
+ */
4
+ import { z } from "zod";
5
+ export declare const entityTypeSchema: z.ZodEnum<["people", "families", "events", "places", "sources", "citations", "repositories", "media", "notes"]>;
6
+ export declare const handleOrIdSchema: z.ZodString;
7
+ export declare const dateSchema: z.ZodOptional<z.ZodObject<{
8
+ _class: z.ZodOptional<z.ZodLiteral<"Date">>;
9
+ calendar: z.ZodOptional<z.ZodNumber>;
10
+ modifier: z.ZodOptional<z.ZodNumber>;
11
+ quality: z.ZodOptional<z.ZodNumber>;
12
+ dateval: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
13
+ text: z.ZodOptional<z.ZodString>;
14
+ sortval: z.ZodOptional<z.ZodNumber>;
15
+ newyear: z.ZodOptional<z.ZodNumber>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ _class?: "Date" | undefined;
18
+ calendar?: number | undefined;
19
+ modifier?: number | undefined;
20
+ quality?: number | undefined;
21
+ dateval?: number[] | undefined;
22
+ text?: string | undefined;
23
+ sortval?: number | undefined;
24
+ newyear?: number | undefined;
25
+ }, {
26
+ _class?: "Date" | undefined;
27
+ calendar?: number | undefined;
28
+ modifier?: number | undefined;
29
+ quality?: number | undefined;
30
+ dateval?: number[] | undefined;
31
+ text?: string | undefined;
32
+ sortval?: number | undefined;
33
+ newyear?: number | undefined;
34
+ }>>;
35
+ export declare const personNameSchema: z.ZodObject<{
36
+ _class: z.ZodOptional<z.ZodLiteral<"Name">>;
37
+ first_name: z.ZodOptional<z.ZodString>;
38
+ surname: z.ZodOptional<z.ZodString>;
39
+ suffix: z.ZodOptional<z.ZodString>;
40
+ title: z.ZodOptional<z.ZodString>;
41
+ type: z.ZodOptional<z.ZodString>;
42
+ primary: z.ZodOptional<z.ZodBoolean>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ _class?: "Name" | undefined;
45
+ type?: string | undefined;
46
+ first_name?: string | undefined;
47
+ surname?: string | undefined;
48
+ suffix?: string | undefined;
49
+ title?: string | undefined;
50
+ primary?: boolean | undefined;
51
+ }, {
52
+ _class?: "Name" | undefined;
53
+ type?: string | undefined;
54
+ first_name?: string | undefined;
55
+ surname?: string | undefined;
56
+ suffix?: string | undefined;
57
+ title?: string | undefined;
58
+ primary?: boolean | undefined;
59
+ }>;
60
+ export declare const eventRefSchema: z.ZodObject<{
61
+ _class: z.ZodOptional<z.ZodLiteral<"EventRef">>;
62
+ ref: z.ZodString;
63
+ role: z.ZodOptional<z.ZodString>;
64
+ }, "strip", z.ZodTypeAny, {
65
+ ref: string;
66
+ _class?: "EventRef" | undefined;
67
+ role?: string | undefined;
68
+ }, {
69
+ ref: string;
70
+ _class?: "EventRef" | undefined;
71
+ role?: string | undefined;
72
+ }>;
73
+ export declare const childRefSchema: z.ZodObject<{
74
+ _class: z.ZodOptional<z.ZodLiteral<"ChildRef">>;
75
+ ref: z.ZodString;
76
+ frel: z.ZodOptional<z.ZodString>;
77
+ mrel: z.ZodOptional<z.ZodString>;
78
+ }, "strip", z.ZodTypeAny, {
79
+ ref: string;
80
+ _class?: "ChildRef" | undefined;
81
+ frel?: string | undefined;
82
+ mrel?: string | undefined;
83
+ }, {
84
+ ref: string;
85
+ _class?: "ChildRef" | undefined;
86
+ frel?: string | undefined;
87
+ mrel?: string | undefined;
88
+ }>;
89
+ export declare const mediaRefSchema: z.ZodObject<{
90
+ _class: z.ZodOptional<z.ZodLiteral<"MediaRef">>;
91
+ ref: z.ZodString;
92
+ rect: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
93
+ }, "strip", z.ZodTypeAny, {
94
+ ref: string;
95
+ _class?: "MediaRef" | undefined;
96
+ rect?: number[] | undefined;
97
+ }, {
98
+ ref: string;
99
+ _class?: "MediaRef" | undefined;
100
+ rect?: number[] | undefined;
101
+ }>;
102
+ export declare const placeRefSchema: z.ZodObject<{
103
+ _class: z.ZodOptional<z.ZodLiteral<"PlaceRef">>;
104
+ ref: z.ZodString;
105
+ date: z.ZodOptional<z.ZodObject<{
106
+ _class: z.ZodOptional<z.ZodLiteral<"Date">>;
107
+ calendar: z.ZodOptional<z.ZodNumber>;
108
+ modifier: z.ZodOptional<z.ZodNumber>;
109
+ quality: z.ZodOptional<z.ZodNumber>;
110
+ dateval: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
111
+ text: z.ZodOptional<z.ZodString>;
112
+ sortval: z.ZodOptional<z.ZodNumber>;
113
+ newyear: z.ZodOptional<z.ZodNumber>;
114
+ }, "strip", z.ZodTypeAny, {
115
+ _class?: "Date" | undefined;
116
+ calendar?: number | undefined;
117
+ modifier?: number | undefined;
118
+ quality?: number | undefined;
119
+ dateval?: number[] | undefined;
120
+ text?: string | undefined;
121
+ sortval?: number | undefined;
122
+ newyear?: number | undefined;
123
+ }, {
124
+ _class?: "Date" | undefined;
125
+ calendar?: number | undefined;
126
+ modifier?: number | undefined;
127
+ quality?: number | undefined;
128
+ dateval?: number[] | undefined;
129
+ text?: string | undefined;
130
+ sortval?: number | undefined;
131
+ newyear?: number | undefined;
132
+ }>>;
133
+ }, "strip", z.ZodTypeAny, {
134
+ ref: string;
135
+ _class?: "PlaceRef" | undefined;
136
+ date?: {
137
+ _class?: "Date" | undefined;
138
+ calendar?: number | undefined;
139
+ modifier?: number | undefined;
140
+ quality?: number | undefined;
141
+ dateval?: number[] | undefined;
142
+ text?: string | undefined;
143
+ sortval?: number | undefined;
144
+ newyear?: number | undefined;
145
+ } | undefined;
146
+ }, {
147
+ ref: string;
148
+ _class?: "PlaceRef" | undefined;
149
+ date?: {
150
+ _class?: "Date" | undefined;
151
+ calendar?: number | undefined;
152
+ modifier?: number | undefined;
153
+ quality?: number | undefined;
154
+ dateval?: number[] | undefined;
155
+ text?: string | undefined;
156
+ sortval?: number | undefined;
157
+ newyear?: number | undefined;
158
+ } | undefined;
159
+ }>;
160
+ export declare const repoRefSchema: z.ZodObject<{
161
+ _class: z.ZodOptional<z.ZodLiteral<"RepoRef">>;
162
+ ref: z.ZodString;
163
+ call_number: z.ZodOptional<z.ZodString>;
164
+ media_type: z.ZodOptional<z.ZodString>;
165
+ }, "strip", z.ZodTypeAny, {
166
+ ref: string;
167
+ _class?: "RepoRef" | undefined;
168
+ call_number?: string | undefined;
169
+ media_type?: string | undefined;
170
+ }, {
171
+ ref: string;
172
+ _class?: "RepoRef" | undefined;
173
+ call_number?: string | undefined;
174
+ media_type?: string | undefined;
175
+ }>;
176
+ export declare const attributeSchema: z.ZodObject<{
177
+ _class: z.ZodOptional<z.ZodLiteral<"Attribute">>;
178
+ type: z.ZodOptional<z.ZodString>;
179
+ value: z.ZodOptional<z.ZodString>;
180
+ }, "strip", z.ZodTypeAny, {
181
+ value?: string | undefined;
182
+ _class?: "Attribute" | undefined;
183
+ type?: string | undefined;
184
+ }, {
185
+ value?: string | undefined;
186
+ _class?: "Attribute" | undefined;
187
+ type?: string | undefined;
188
+ }>;
189
+ export declare const urlSchema: z.ZodObject<{
190
+ _class: z.ZodOptional<z.ZodLiteral<"Url">>;
191
+ path: z.ZodOptional<z.ZodString>;
192
+ type: z.ZodOptional<z.ZodString>;
193
+ desc: z.ZodOptional<z.ZodString>;
194
+ }, "strip", z.ZodTypeAny, {
195
+ _class?: "Url" | undefined;
196
+ path?: string | undefined;
197
+ type?: string | undefined;
198
+ desc?: string | undefined;
199
+ }, {
200
+ _class?: "Url" | undefined;
201
+ path?: string | undefined;
202
+ type?: string | undefined;
203
+ desc?: string | undefined;
204
+ }>;
205
+ export declare const addressSchema: z.ZodObject<{
206
+ _class: z.ZodOptional<z.ZodLiteral<"Address">>;
207
+ street: z.ZodOptional<z.ZodString>;
208
+ locality: z.ZodOptional<z.ZodString>;
209
+ city: z.ZodOptional<z.ZodString>;
210
+ county: z.ZodOptional<z.ZodString>;
211
+ state: z.ZodOptional<z.ZodString>;
212
+ country: z.ZodOptional<z.ZodString>;
213
+ postal: z.ZodOptional<z.ZodString>;
214
+ phone: z.ZodOptional<z.ZodString>;
215
+ }, "strip", z.ZodTypeAny, {
216
+ _class?: "Address" | undefined;
217
+ street?: string | undefined;
218
+ locality?: string | undefined;
219
+ city?: string | undefined;
220
+ county?: string | undefined;
221
+ state?: string | undefined;
222
+ country?: string | undefined;
223
+ postal?: string | undefined;
224
+ phone?: string | undefined;
225
+ }, {
226
+ _class?: "Address" | undefined;
227
+ street?: string | undefined;
228
+ locality?: string | undefined;
229
+ city?: string | undefined;
230
+ county?: string | undefined;
231
+ state?: string | undefined;
232
+ country?: string | undefined;
233
+ postal?: string | undefined;
234
+ phone?: string | undefined;
235
+ }>;
236
+ export declare const placeNameSchema: z.ZodObject<{
237
+ _class: z.ZodOptional<z.ZodLiteral<"PlaceName">>;
238
+ value: z.ZodOptional<z.ZodString>;
239
+ date: z.ZodOptional<z.ZodObject<{
240
+ _class: z.ZodOptional<z.ZodLiteral<"Date">>;
241
+ calendar: z.ZodOptional<z.ZodNumber>;
242
+ modifier: z.ZodOptional<z.ZodNumber>;
243
+ quality: z.ZodOptional<z.ZodNumber>;
244
+ dateval: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
245
+ text: z.ZodOptional<z.ZodString>;
246
+ sortval: z.ZodOptional<z.ZodNumber>;
247
+ newyear: z.ZodOptional<z.ZodNumber>;
248
+ }, "strip", z.ZodTypeAny, {
249
+ _class?: "Date" | undefined;
250
+ calendar?: number | undefined;
251
+ modifier?: number | undefined;
252
+ quality?: number | undefined;
253
+ dateval?: number[] | undefined;
254
+ text?: string | undefined;
255
+ sortval?: number | undefined;
256
+ newyear?: number | undefined;
257
+ }, {
258
+ _class?: "Date" | undefined;
259
+ calendar?: number | undefined;
260
+ modifier?: number | undefined;
261
+ quality?: number | undefined;
262
+ dateval?: number[] | undefined;
263
+ text?: string | undefined;
264
+ sortval?: number | undefined;
265
+ newyear?: number | undefined;
266
+ }>>;
267
+ lang: z.ZodOptional<z.ZodString>;
268
+ }, "strip", z.ZodTypeAny, {
269
+ value?: string | undefined;
270
+ _class?: "PlaceName" | undefined;
271
+ date?: {
272
+ _class?: "Date" | undefined;
273
+ calendar?: number | undefined;
274
+ modifier?: number | undefined;
275
+ quality?: number | undefined;
276
+ dateval?: number[] | undefined;
277
+ text?: string | undefined;
278
+ sortval?: number | undefined;
279
+ newyear?: number | undefined;
280
+ } | undefined;
281
+ lang?: string | undefined;
282
+ }, {
283
+ value?: string | undefined;
284
+ _class?: "PlaceName" | undefined;
285
+ date?: {
286
+ _class?: "Date" | undefined;
287
+ calendar?: number | undefined;
288
+ modifier?: number | undefined;
289
+ quality?: number | undefined;
290
+ dateval?: number[] | undefined;
291
+ text?: string | undefined;
292
+ sortval?: number | undefined;
293
+ newyear?: number | undefined;
294
+ } | undefined;
295
+ lang?: string | undefined;
296
+ }>;
297
+ export declare const genderSchema: z.ZodEffects<z.ZodEnum<["male", "female", "unknown"]>, 0 | 1 | 2, "male" | "female" | "unknown">;
298
+ export declare const paginationSchema: z.ZodObject<{
299
+ page: z.ZodDefault<z.ZodNumber>;
300
+ pagesize: z.ZodDefault<z.ZodNumber>;
301
+ }, "strip", z.ZodTypeAny, {
302
+ page: number;
303
+ pagesize: number;
304
+ }, {
305
+ page?: number | undefined;
306
+ pagesize?: number | undefined;
307
+ }>;
308
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB,iHAU3B,CAAC;AAGH,eAAO,MAAM,gBAAgB,aAA2D,CAAC;AAGzF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;GASV,CAAC;AAGd,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;EAQ3B,CAAC;AAGH,eAAO,MAAM,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAGH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AAGH,eAAO,MAAM,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAGH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzB,CAAC;AAGH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;EAKxB,CAAC;AAGH,eAAO,MAAM,eAAe;;;;;;;;;;;;EAI1B,CAAC;AAGH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;EAKpB,CAAC;AAGH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUxB,CAAC;AAGH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK1B,CAAC;AAGH,eAAO,MAAM,YAAY,kGASvB,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Shared Zod schemas for common types
3
+ */
4
+ import { z } from "zod";
5
+ // Entity type schema
6
+ export const entityTypeSchema = z.enum([
7
+ "people",
8
+ "families",
9
+ "events",
10
+ "places",
11
+ "sources",
12
+ "citations",
13
+ "repositories",
14
+ "media",
15
+ "notes",
16
+ ]);
17
+ // Handle or Gramps ID schema
18
+ export const handleOrIdSchema = z.string().min(1).describe("Entity handle or Gramps ID");
19
+ // Date schema for Gramps
20
+ export const dateSchema = z.object({
21
+ _class: z.literal("Date").optional(),
22
+ calendar: z.number().optional(),
23
+ modifier: z.number().optional(),
24
+ quality: z.number().optional(),
25
+ dateval: z.array(z.number()).optional(),
26
+ text: z.string().optional(),
27
+ sortval: z.number().optional(),
28
+ newyear: z.number().optional(),
29
+ }).optional();
30
+ // Person name schema
31
+ export const personNameSchema = z.object({
32
+ _class: z.literal("Name").optional(),
33
+ first_name: z.string().optional(),
34
+ surname: z.string().optional(),
35
+ suffix: z.string().optional(),
36
+ title: z.string().optional(),
37
+ type: z.string().optional(),
38
+ primary: z.boolean().optional(),
39
+ });
40
+ // Event reference schema
41
+ export const eventRefSchema = z.object({
42
+ _class: z.literal("EventRef").optional(),
43
+ ref: z.string(),
44
+ role: z.string().optional(),
45
+ });
46
+ // Child reference schema
47
+ export const childRefSchema = z.object({
48
+ _class: z.literal("ChildRef").optional(),
49
+ ref: z.string(),
50
+ frel: z.string().optional(),
51
+ mrel: z.string().optional(),
52
+ });
53
+ // Media reference schema
54
+ export const mediaRefSchema = z.object({
55
+ _class: z.literal("MediaRef").optional(),
56
+ ref: z.string(),
57
+ rect: z.array(z.number()).optional(),
58
+ });
59
+ // Place reference schema
60
+ export const placeRefSchema = z.object({
61
+ _class: z.literal("PlaceRef").optional(),
62
+ ref: z.string(),
63
+ date: dateSchema,
64
+ });
65
+ // Repository reference schema
66
+ export const repoRefSchema = z.object({
67
+ _class: z.literal("RepoRef").optional(),
68
+ ref: z.string(),
69
+ call_number: z.string().optional(),
70
+ media_type: z.string().optional(),
71
+ });
72
+ // Attribute schema
73
+ export const attributeSchema = z.object({
74
+ _class: z.literal("Attribute").optional(),
75
+ type: z.string().optional(),
76
+ value: z.string().optional(),
77
+ });
78
+ // URL schema
79
+ export const urlSchema = z.object({
80
+ _class: z.literal("Url").optional(),
81
+ path: z.string().optional(),
82
+ type: z.string().optional(),
83
+ desc: z.string().optional(),
84
+ });
85
+ // Address schema
86
+ export const addressSchema = z.object({
87
+ _class: z.literal("Address").optional(),
88
+ street: z.string().optional(),
89
+ locality: z.string().optional(),
90
+ city: z.string().optional(),
91
+ county: z.string().optional(),
92
+ state: z.string().optional(),
93
+ country: z.string().optional(),
94
+ postal: z.string().optional(),
95
+ phone: z.string().optional(),
96
+ });
97
+ // Place name schema
98
+ export const placeNameSchema = z.object({
99
+ _class: z.literal("PlaceName").optional(),
100
+ value: z.string().optional(),
101
+ date: dateSchema,
102
+ lang: z.string().optional(),
103
+ });
104
+ // Gender schema
105
+ export const genderSchema = z.enum(["male", "female", "unknown"]).transform((val) => {
106
+ switch (val) {
107
+ case "male":
108
+ return 1;
109
+ case "female":
110
+ return 0;
111
+ default:
112
+ return 2;
113
+ }
114
+ });
115
+ // Pagination schema
116
+ export const paginationSchema = z.object({
117
+ page: z.number().int().positive().default(1).describe("Page number (1-indexed)"),
118
+ pagesize: z.number().int().positive().max(100).default(20).describe("Results per page (max 100)"),
119
+ });
120
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schemas/common.ts"],"names":[],"mappings":"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"}