@ignfab/geocontext 0.9.6 → 0.9.7

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 (126) hide show
  1. package/README.md +334 -257
  2. package/dist/gpf/adminexpress.d.ts +17 -8
  3. package/dist/gpf/adminexpress.js +40 -17
  4. package/dist/gpf/adminexpress.js.map +1 -1
  5. package/dist/gpf/altitude.d.ts +21 -9
  6. package/dist/gpf/altitude.js +5 -5
  7. package/dist/gpf/altitude.js.map +1 -1
  8. package/dist/gpf/geocode.d.ts +25 -4
  9. package/dist/gpf/geocode.js +5 -5
  10. package/dist/gpf/geocode.js.map +1 -1
  11. package/dist/gpf/parcellaire-express.d.ts +19 -9
  12. package/dist/gpf/parcellaire-express.js +59 -26
  13. package/dist/gpf/parcellaire-express.js.map +1 -1
  14. package/dist/gpf/urbanisme.d.ts +24 -16
  15. package/dist/gpf/urbanisme.js +81 -33
  16. package/dist/gpf/urbanisme.js.map +1 -1
  17. package/dist/gpf/{wfs.js → wfs-schema-catalog.js} +1 -1
  18. package/dist/gpf/wfs-schema-catalog.js.map +1 -0
  19. package/dist/helpers/RateLimiter.d.ts +44 -0
  20. package/dist/helpers/RateLimiter.js +52 -0
  21. package/dist/helpers/RateLimiter.js.map +1 -0
  22. package/dist/helpers/distance.d.ts +2 -1
  23. package/dist/helpers/distance.js +2 -1
  24. package/dist/helpers/distance.js.map +1 -1
  25. package/dist/helpers/errors/toolError.d.ts +30 -0
  26. package/dist/helpers/errors/toolError.js +193 -0
  27. package/dist/helpers/errors/toolError.js.map +1 -0
  28. package/dist/helpers/errors/zodErrorMapFr.d.ts +20 -0
  29. package/dist/helpers/errors/zodErrorMapFr.js +191 -0
  30. package/dist/helpers/errors/zodErrorMapFr.js.map +1 -0
  31. package/dist/helpers/http.d.ts +67 -7
  32. package/dist/helpers/http.js +458 -84
  33. package/dist/helpers/http.js.map +1 -1
  34. package/dist/helpers/jsonSchema.d.ts +16 -4
  35. package/dist/helpers/jsonSchema.js +7 -1
  36. package/dist/helpers/jsonSchema.js.map +1 -1
  37. package/dist/helpers/schemas.d.ts +4 -4
  38. package/dist/helpers/wfs_engine/attributeFilter.d.ts +51 -0
  39. package/dist/helpers/wfs_engine/attributeFilter.js +258 -0
  40. package/dist/helpers/wfs_engine/attributeFilter.js.map +1 -0
  41. package/dist/helpers/wfs_engine/byId.d.ts +76 -0
  42. package/dist/helpers/wfs_engine/byId.js +106 -0
  43. package/dist/helpers/wfs_engine/byId.js.map +1 -0
  44. package/dist/helpers/wfs_engine/execution.d.ts +72 -0
  45. package/dist/helpers/wfs_engine/execution.js +95 -0
  46. package/dist/helpers/wfs_engine/execution.js.map +1 -0
  47. package/dist/helpers/wfs_engine/features.d.ts +64 -0
  48. package/dist/helpers/wfs_engine/features.js +138 -0
  49. package/dist/helpers/wfs_engine/features.js.map +1 -0
  50. package/dist/helpers/wfs_engine/geometry.d.ts +16 -0
  51. package/dist/helpers/wfs_engine/geometry.js +44 -0
  52. package/dist/helpers/wfs_engine/geometry.js.map +1 -0
  53. package/dist/helpers/wfs_engine/properties.d.ts +51 -0
  54. package/dist/helpers/wfs_engine/properties.js +128 -0
  55. package/dist/helpers/wfs_engine/properties.js.map +1 -0
  56. package/dist/helpers/wfs_engine/queryPreparation.d.ts +32 -0
  57. package/dist/helpers/wfs_engine/queryPreparation.js +149 -0
  58. package/dist/helpers/wfs_engine/queryPreparation.js.map +1 -0
  59. package/dist/helpers/{wfs_internal → wfs_engine}/request.d.ts +49 -2
  60. package/dist/helpers/{wfs_internal → wfs_engine}/request.js +77 -1
  61. package/dist/helpers/wfs_engine/request.js.map +1 -0
  62. package/dist/helpers/wfs_engine/response.d.ts +80 -0
  63. package/dist/helpers/wfs_engine/response.js +135 -0
  64. package/dist/helpers/wfs_engine/response.js.map +1 -0
  65. package/dist/helpers/wfs_engine/schema.d.ts +209 -0
  66. package/dist/helpers/{wfs_internal → wfs_engine}/schema.js +50 -10
  67. package/dist/helpers/wfs_engine/schema.js.map +1 -0
  68. package/dist/helpers/wfs_engine/spatialCql.d.ts +46 -0
  69. package/dist/helpers/wfs_engine/spatialCql.js +54 -0
  70. package/dist/helpers/wfs_engine/spatialCql.js.map +1 -0
  71. package/dist/helpers/wfs_engine/spatialFilter.d.ts +14 -0
  72. package/dist/helpers/wfs_engine/spatialFilter.js +131 -0
  73. package/dist/helpers/wfs_engine/spatialFilter.js.map +1 -0
  74. package/dist/index.js +65 -23
  75. package/dist/index.js.map +1 -1
  76. package/dist/logger.d.ts +1 -1
  77. package/dist/logger.js +4 -1
  78. package/dist/logger.js.map +1 -1
  79. package/dist/tools/AdminexpressTool.d.ts +42 -33
  80. package/dist/tools/AdminexpressTool.js +17 -2
  81. package/dist/tools/AdminexpressTool.js.map +1 -1
  82. package/dist/tools/AltitudeTool.d.ts +35 -44
  83. package/dist/tools/AltitudeTool.js +19 -8
  84. package/dist/tools/AltitudeTool.js.map +1 -1
  85. package/dist/tools/AssietteSupTool.d.ts +51 -34
  86. package/dist/tools/AssietteSupTool.js +17 -2
  87. package/dist/tools/AssietteSupTool.js.map +1 -1
  88. package/dist/tools/BaseTool.d.ts +17 -0
  89. package/dist/tools/BaseTool.js +41 -0
  90. package/dist/tools/BaseTool.js.map +1 -0
  91. package/dist/tools/CadastreTool.d.ts +53 -33
  92. package/dist/tools/CadastreTool.js +17 -2
  93. package/dist/tools/CadastreTool.js.map +1 -1
  94. package/dist/tools/GeocodeTool.d.ts +53 -37
  95. package/dist/tools/GeocodeTool.js +17 -2
  96. package/dist/tools/GeocodeTool.js.map +1 -1
  97. package/dist/tools/GpfWfsDescribeTypeTool.d.ts +66 -94
  98. package/dist/tools/GpfWfsDescribeTypeTool.js +25 -14
  99. package/dist/tools/GpfWfsDescribeTypeTool.js.map +1 -1
  100. package/dist/tools/GpfWfsGetFeatureByIdTool.d.ts +52 -73
  101. package/dist/tools/GpfWfsGetFeatureByIdTool.js +50 -107
  102. package/dist/tools/GpfWfsGetFeatureByIdTool.js.map +1 -1
  103. package/dist/tools/GpfWfsGetFeaturesTool.d.ts +89 -114
  104. package/dist/tools/GpfWfsGetFeaturesTool.js +29 -120
  105. package/dist/tools/GpfWfsGetFeaturesTool.js.map +1 -1
  106. package/dist/tools/GpfWfsSearchTypesTool.d.ts +41 -32
  107. package/dist/tools/GpfWfsSearchTypesTool.js +18 -3
  108. package/dist/tools/GpfWfsSearchTypesTool.js.map +1 -1
  109. package/dist/tools/UrbanismeTool.d.ts +42 -33
  110. package/dist/tools/UrbanismeTool.js +17 -2
  111. package/dist/tools/UrbanismeTool.js.map +1 -1
  112. package/package.json +51 -24
  113. package/dist/gpf/wfs.js.map +0 -1
  114. package/dist/helpers/wfs.d.ts +0 -27
  115. package/dist/helpers/wfs.js +0 -55
  116. package/dist/helpers/wfs.js.map +0 -1
  117. package/dist/helpers/wfs_internal/compile.d.ts +0 -55
  118. package/dist/helpers/wfs_internal/compile.js +0 -596
  119. package/dist/helpers/wfs_internal/compile.js.map +0 -1
  120. package/dist/helpers/wfs_internal/request.js.map +0 -1
  121. package/dist/helpers/wfs_internal/response.d.ts +0 -29
  122. package/dist/helpers/wfs_internal/response.js +0 -59
  123. package/dist/helpers/wfs_internal/response.js.map +0 -1
  124. package/dist/helpers/wfs_internal/schema.d.ts +0 -167
  125. package/dist/helpers/wfs_internal/schema.js.map +0 -1
  126. /package/dist/gpf/{wfs.d.ts → wfs-schema-catalog.d.ts} +0 -0
package/dist/index.js CHANGED
@@ -3,24 +3,15 @@ import { MCPServer } from "mcp-framework";
3
3
  import { dirname, join } from "path";
4
4
  import { fileURLToPath } from "url";
5
5
  import { readFileSync } from "fs";
6
+ import logger from "./logger.js";
6
7
  const __dirname = dirname(fileURLToPath(import.meta.url));
7
- const TRANSPORTS = {
8
- stdio: {
9
- type: "stdio",
10
- },
11
- http: {
12
- type: "http-stream",
13
- options: {
14
- port: 3000,
15
- cors: {
16
- allowOrigin: "*",
17
- },
18
- },
19
- },
20
- };
21
8
  function isTransportType(value) {
22
- return Object.prototype.hasOwnProperty.call(TRANSPORTS, value);
9
+ return value === "stdio" || value === "http";
23
10
  }
11
+ /**
12
+ * Get the transport type from the environment variable TRANSPORT_TYPE.
13
+ * Valid values are "stdio" and "http". If not set, defaults to "stdio".
14
+ */
24
15
  function getTransportType() {
25
16
  const transportType = process.env.TRANSPORT_TYPE ?? "stdio";
26
17
  if (!isTransportType(transportType)) {
@@ -28,22 +19,73 @@ function getTransportType() {
28
19
  }
29
20
  return transportType;
30
21
  }
31
- function buildTransport(transportType) {
32
- if (transportType !== "http") {
33
- return TRANSPORTS[transportType];
22
+ /**
23
+ * Get the HTTP port from the environment variable HTTP_PORT.
24
+ * The variable should be a decimal integer between 1 and 65535. If not set, defaults to 3000.
25
+ */
26
+ function getHttpPort() {
27
+ const rawPort = process.env.HTTP_PORT?.trim();
28
+ const invalidHttpPortMessage = `Invalid HTTP_PORT: ${rawPort}. Expected a decimal integer between 1 and 65535.`;
29
+ if (!rawPort) {
30
+ return 3000;
31
+ }
32
+ if (!/^\d+$/.test(rawPort)) {
33
+ throw new Error(invalidHttpPortMessage);
34
+ }
35
+ const port = Number(rawPort);
36
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
37
+ throw new Error(invalidHttpPortMessage);
34
38
  }
35
- const host = process.env.HTTP_HOST?.trim();
36
- if (!host) {
37
- return TRANSPORTS.http;
39
+ return port;
40
+ }
41
+ /**
42
+ * Get CORS allowed origins from the environment variable HTTP_CORS_ALLOWED_ORIGINS.
43
+ * The variable should be a comma-separated list of origins .
44
+ */
45
+ function getCorsAllowedOrigins() {
46
+ if (process.env.HTTP_CORS_ALLOWED_ORIGINS === undefined) {
47
+ logger.warn('Security : HTTP_CORS_ALLOWED_ORIGINS is not set. It is recommended to set this variable to prevent DNS rebinding attacks (e.g., HTTP_CORS_ALLOWED_ORIGINS="http://localhost:3000,https://geollm.beta.ign.fr".');
48
+ return undefined;
49
+ }
50
+ const rawOrigins = process.env.HTTP_CORS_ALLOWED_ORIGINS?.trim();
51
+ const allowedOrigins = rawOrigins
52
+ ?.split(",")
53
+ .map((origin) => origin.trim())
54
+ .filter(Boolean);
55
+ if (!allowedOrigins || allowedOrigins.length === 0) {
56
+ logger.warn('Security : HTTP_CORS_ALLOWED_ORIGINS is empty. It is recommended to set this variable to prevent DNS rebinding attacks (e.g., HTTP_CORS_ALLOWED_ORIGINS="http://localhost:3000,https://geollm.beta.ign.fr".');
57
+ return undefined;
58
+ }
59
+ return allowedOrigins;
60
+ }
61
+ function buildTransport(transportType) {
62
+ // Handle stdio transport configuration
63
+ if (transportType === "stdio") {
64
+ return {
65
+ type: "stdio",
66
+ };
38
67
  }
68
+ // Handle HTTP transport configuration
69
+ const host = process.env.HTTP_HOST?.trim() || '127.0.0.1';
70
+ const endpoint = process.env.HTTP_MCP_ENDPOINT?.trim() || '/mcp';
71
+ const port = getHttpPort();
39
72
  return {
40
- ...TRANSPORTS.http,
73
+ type: "http-stream",
41
74
  options: {
42
- ...TRANSPORTS.http.options,
75
+ port: port,
76
+ endpoint,
77
+ responseMode: "stream",
78
+ cors: {
79
+ allowOrigin: "*",
80
+ allowedOrigins: getCorsAllowedOrigins(),
81
+ },
43
82
  host,
44
83
  },
45
84
  };
46
85
  }
86
+ /**
87
+ * Get the version from package.json for the MCP server metadata.
88
+ */
47
89
  function getVersion() {
48
90
  const pkgMetadata = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
49
91
  if (!pkgMetadata?.version || typeof pkgMetadata.version !== "string") {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;KACd;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE;YACP,IAAI,EAAE,IAAI;YACV,IAAI,EAAE;gBACJ,WAAW,EAAE,GAAG;aACjB;SACF;KACF;CACO,CAAC;AAIX,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC;IAE5D,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,aAA4B;IAClD,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,OAAO;QACL,GAAG,UAAU,CAAC,IAAI;QAClB,OAAO,EAAE;YACP,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO;YAC1B,IAAI;SACL;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;IAEF,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;QAC9B,IAAI,EAAE,YAAY;QAClB,OAAO;QACP,QAAQ,EAAE,SAAS;QACnB,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CACX,wBAAwB,EACxB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACrD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/logger.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export default logger;
2
1
  declare const logger: import("winston").Logger;
2
+ export default logger;
package/dist/logger.js CHANGED
@@ -4,8 +4,11 @@ const formats = {
4
4
  json: format.json(),
5
5
  simple: format.simple()
6
6
  };
7
+ function isLogFormat(value) {
8
+ return Object.keys(formats).includes(value);
9
+ }
7
10
  const LOG_FORMAT = process.env.LOG_FORMAT ? process.env.LOG_FORMAT : 'simple';
8
- if (!Object.keys(formats).includes(LOG_FORMAT)) {
11
+ if (!isLogFormat(LOG_FORMAT)) {
9
12
  throw new Error(`LOG_FORMAT=${LOG_FORMAT} not found!`);
10
13
  }
11
14
  const logger = createLogger({
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAE1E,MAAM,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;CAC1B,CAAC;AAEF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9E,IAAK,CAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;IAC/C,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC;IACxB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC;QACzC;;;WAGG;QACH,IAAI,UAAU,CAAC,OAAO,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;SAC/C,CAAC;KACL,CAAC,CAAC,CAAC;QACA,IAAI,UAAU,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,OAAO;SACjB,CAAC;KACL;CACJ,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAE1E,MAAM,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;CAC1B,CAAC;AAIF,SAAS,WAAW,CAAC,KAAa;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AAE9E,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;IAC3B,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC;IACxB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC;QACzC;;;WAGG;QACH,IAAI,UAAU,CAAC,OAAO,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;SAC/C,CAAC;KACL,CAAC,CAAC,CAAC;QACA,IAAI,UAAU,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,OAAO;SACjB,CAAC;KACL;CACJ,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -1,17 +1,20 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing administrative units that cover a given point.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  declare const adminexpressInputSchema: z.ZodObject<{
4
7
  lon: z.ZodNumber;
5
8
  lat: z.ZodNumber;
6
9
  }, "strict", z.ZodTypeAny, {
7
- lon?: number;
8
- lat?: number;
10
+ lon: number;
11
+ lat: number;
9
12
  }, {
10
- lon?: number;
11
- lat?: number;
13
+ lon: number;
14
+ lat: number;
12
15
  }>;
13
16
  type AdminexpressInput = z.infer<typeof adminexpressInputSchema>;
14
- declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
17
+ declare class AdminexpressTool extends BaseTool<AdminexpressInput> {
15
18
  name: string;
16
19
  title: string;
17
20
  annotations: {
@@ -30,11 +33,11 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
30
33
  typename: z.ZodString;
31
34
  feature_id: z.ZodString;
32
35
  }, "strip", z.ZodTypeAny, {
33
- typename?: string;
34
- feature_id?: string;
36
+ typename: string;
37
+ feature_id: string;
35
38
  }, {
36
- typename?: string;
37
- feature_id?: string;
39
+ typename: string;
40
+ feature_id: string;
38
41
  }>;
39
42
  }, "strip", z.ZodUnknown, z.objectOutputType<{
40
43
  type: z.ZodString;
@@ -44,11 +47,11 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
44
47
  typename: z.ZodString;
45
48
  feature_id: z.ZodString;
46
49
  }, "strip", z.ZodTypeAny, {
47
- typename?: string;
48
- feature_id?: string;
50
+ typename: string;
51
+ feature_id: string;
49
52
  }, {
50
- typename?: string;
51
- feature_id?: string;
53
+ typename: string;
54
+ feature_id: string;
52
55
  }>;
53
56
  }, z.ZodUnknown, "strip">, z.objectInputType<{
54
57
  type: z.ZodString;
@@ -58,15 +61,15 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
58
61
  typename: z.ZodString;
59
62
  feature_id: z.ZodString;
60
63
  }, "strip", z.ZodTypeAny, {
61
- typename?: string;
62
- feature_id?: string;
64
+ typename: string;
65
+ feature_id: string;
63
66
  }, {
64
- typename?: string;
65
- feature_id?: string;
67
+ typename: string;
68
+ feature_id: string;
66
69
  }>;
67
70
  }, z.ZodUnknown, "strip">>, "many">;
68
71
  }, "strip", z.ZodTypeAny, {
69
- results?: z.objectOutputType<{
72
+ results: z.objectOutputType<{
70
73
  type: z.ZodString;
71
74
  id: z.ZodString;
72
75
  bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -74,15 +77,15 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
74
77
  typename: z.ZodString;
75
78
  feature_id: z.ZodString;
76
79
  }, "strip", z.ZodTypeAny, {
77
- typename?: string;
78
- feature_id?: string;
80
+ typename: string;
81
+ feature_id: string;
79
82
  }, {
80
- typename?: string;
81
- feature_id?: string;
83
+ typename: string;
84
+ feature_id: string;
82
85
  }>;
83
86
  }, z.ZodUnknown, "strip">[];
84
87
  }, {
85
- results?: z.objectInputType<{
88
+ results: z.objectInputType<{
86
89
  type: z.ZodString;
87
90
  id: z.ZodString;
88
91
  bbox: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
@@ -90,11 +93,11 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
90
93
  typename: z.ZodString;
91
94
  feature_id: z.ZodString;
92
95
  }, "strip", z.ZodTypeAny, {
93
- typename?: string;
94
- feature_id?: string;
96
+ typename: string;
97
+ feature_id: string;
95
98
  }, {
96
- typename?: string;
97
- feature_id?: string;
99
+ typename: string;
100
+ feature_id: string;
98
101
  }>;
99
102
  }, z.ZodUnknown, "strip">[];
100
103
  }>;
@@ -102,14 +105,20 @@ declare class AdminexpressTool extends MCPTool<AdminexpressInput> {
102
105
  lon: z.ZodNumber;
103
106
  lat: z.ZodNumber;
104
107
  }, "strict", z.ZodTypeAny, {
105
- lon?: number;
106
- lat?: number;
108
+ lon: number;
109
+ lat: number;
107
110
  }, {
108
- lon?: number;
109
- lat?: number;
111
+ lon: number;
112
+ lat: number;
110
113
  }>;
114
+ /**
115
+ * Looks up the administrative units covering the requested point.
116
+ *
117
+ * @param input Normalized tool input.
118
+ * @returns The matching administrative units enriched with reusable `feature_ref` metadata.
119
+ */
111
120
  execute(input: AdminexpressInput): Promise<{
112
- results: object[];
121
+ results: import("../helpers/wfs_engine/response.js").FlatItem[];
113
122
  }>;
114
123
  }
115
124
  export default AdminexpressTool;
@@ -1,8 +1,13 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing administrative units that cover a given point.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  import { getAdminUnits, ADMINEXPRESS_TYPES, ADMINEXPRESS_SOURCE } from "../gpf/adminexpress.js";
4
7
  import { READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS } from "../helpers/toolAnnotations.js";
5
8
  import { featureRefSchema, lonSchema, latSchema } from "../helpers/schemas.js";
9
+ import logger from "../logger.js";
10
+ // --- Schema ---
6
11
  const adminexpressInputSchema = z.object({
7
12
  lon: lonSchema,
8
13
  lat: latSchema,
@@ -18,7 +23,8 @@ const adminexpressResultSchema = z
18
23
  const adminexpressOutputSchema = z.object({
19
24
  results: z.array(adminexpressResultSchema).describe("La liste des unités administratives couvrant le point demandé."),
20
25
  });
21
- class AdminexpressTool extends MCPTool {
26
+ // --- Tool ---
27
+ class AdminexpressTool extends BaseTool {
22
28
  name = "adminexpress";
23
29
  title = "Unités administratives";
24
30
  annotations = READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS;
@@ -31,7 +37,16 @@ class AdminexpressTool extends MCPTool {
31
37
  ].join("\n");
32
38
  outputSchemaShape = adminexpressOutputSchema;
33
39
  schema = adminexpressInputSchema;
40
+ /**
41
+ * Looks up the administrative units covering the requested point.
42
+ *
43
+ * @param input Normalized tool input.
44
+ * @returns The matching administrative units enriched with reusable `feature_ref` metadata.
45
+ */
34
46
  async execute(input) {
47
+ logger.info(`[tool] execute ${this.name} ...`, {
48
+ input: input
49
+ });
35
50
  return {
36
51
  results: await getAdminUnits(input.lon, input.lat),
37
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AdminexpressTool.js","sourceRoot":"","sources":["../../src/tools/AdminexpressTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,MAAM,wBAAwB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/F,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACnE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC,QAAQ,EAAE;IAC/F,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mHAAmH,CAAC;CAC5J,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,gEAAgE,CAAC;CACtH,CAAC,CAAC;AAEH,MAAM,gBAAiB,SAAQ,OAA0B;IACvD,IAAI,GAAG,cAAc,CAAC;IACtB,KAAK,GAAG,wBAAwB,CAAC;IACjC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG;QACZ,8GAA8G,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,0FAA0F;QACrO,4GAA4G;QAC5G,6MAA6M;QAC7M,yGAAyG;QACzG,aAAa,mBAAmB,IAAI;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACH,iBAAiB,GAAG,wBAAwB,CAAC;IAEvD,MAAM,GAAG,uBAAuB,CAAC;IAEjC,KAAK,CAAC,OAAO,CAAC,KAAwB;QACpC,OAAO;YACL,OAAO,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SACnD,CAAC;IACJ,CAAC;CACF;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"AdminexpressTool.js","sourceRoot":"","sources":["../../src/tools/AdminexpressTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,iBAAiB;AAEjB,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAMZ,MAAM,wBAAwB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/F,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACnE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC,QAAQ,EAAE;IAC/F,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mHAAmH,CAAC;CAC5J,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,gEAAgE,CAAC;CACtH,CAAC,CAAC;AAEH,eAAe;AAEf,MAAM,gBAAiB,SAAQ,QAA2B;IACxD,IAAI,GAAG,cAAc,CAAC;IACtB,KAAK,GAAG,wBAAwB,CAAC;IACjC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG;QACZ,8GAA8G,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,0FAA0F;QACrO,4GAA4G;QAC5G,6MAA6M;QAC7M,yGAAyG;QACzG,aAAa,mBAAmB,IAAI;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACH,iBAAiB,GAAG,wBAAwB,CAAC;IAEvD,MAAM,GAAG,uBAAuB,CAAC;IAEjC;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAwB;QACpC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,MAAM,EAAE;YAC7C,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SACnD,CAAC;IACJ,CAAC;CACF;AAED,eAAe,gBAAgB,CAAC"}
@@ -1,17 +1,20 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing altitude lookup for a single geographic position.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  declare const altitudeInputSchema: z.ZodObject<{
4
7
  lon: z.ZodNumber;
5
8
  lat: z.ZodNumber;
6
9
  }, "strict", z.ZodTypeAny, {
7
- lon?: number;
8
- lat?: number;
10
+ lon: number;
11
+ lat: number;
9
12
  }, {
10
- lon?: number;
11
- lat?: number;
13
+ lon: number;
14
+ lat: number;
12
15
  }>;
13
16
  type AltitudeInput = z.infer<typeof altitudeInputSchema>;
14
- declare class AltitudeTool extends MCPTool<AltitudeInput> {
17
+ declare class AltitudeTool extends BaseTool<AltitudeInput> {
15
18
  name: string;
16
19
  title: string;
17
20
  annotations: {
@@ -22,54 +25,42 @@ declare class AltitudeTool extends MCPTool<AltitudeInput> {
22
25
  };
23
26
  description: string;
24
27
  protected outputSchemaShape: z.ZodObject<{
25
- result: z.ZodObject<{
26
- lon: z.ZodNumber;
27
- lat: z.ZodNumber;
28
- altitude: z.ZodNumber;
29
- accuracy: z.ZodString;
30
- }, "strip", z.ZodTypeAny, {
31
- lon?: number;
32
- lat?: number;
33
- altitude?: number;
34
- accuracy?: string;
35
- }, {
36
- lon?: number;
37
- lat?: number;
38
- altitude?: number;
39
- accuracy?: string;
40
- }>;
28
+ lon: z.ZodNumber;
29
+ lat: z.ZodNumber;
30
+ altitude: z.ZodNumber;
31
+ accuracy: z.ZodString;
41
32
  }, "strip", z.ZodTypeAny, {
42
- result?: {
43
- lon?: number;
44
- lat?: number;
45
- altitude?: number;
46
- accuracy?: string;
47
- };
33
+ lon: number;
34
+ lat: number;
35
+ altitude: number;
36
+ accuracy: string;
48
37
  }, {
49
- result?: {
50
- lon?: number;
51
- lat?: number;
52
- altitude?: number;
53
- accuracy?: string;
54
- };
38
+ lon: number;
39
+ lat: number;
40
+ altitude: number;
41
+ accuracy: string;
55
42
  }>;
56
43
  schema: z.ZodObject<{
57
44
  lon: z.ZodNumber;
58
45
  lat: z.ZodNumber;
59
46
  }, "strict", z.ZodTypeAny, {
60
- lon?: number;
61
- lat?: number;
47
+ lon: number;
48
+ lat: number;
62
49
  }, {
63
- lon?: number;
64
- lat?: number;
50
+ lon: number;
51
+ lat: number;
65
52
  }>;
53
+ /**
54
+ * Resolves the altitude information for the requested position.
55
+ *
56
+ * @param input Normalized tool input.
57
+ * @returns The altitude payload returned by the upstream service.
58
+ */
66
59
  execute(input: AltitudeInput): Promise<{
67
- result: {
68
- lon: number;
69
- lat: number;
70
- altitude: any;
71
- accuracy: any;
72
- };
60
+ lon: number;
61
+ lat: number;
62
+ altitude: number;
63
+ accuracy: string;
73
64
  }>;
74
65
  }
75
66
  export default AltitudeTool;
@@ -1,8 +1,13 @@
1
- import { MCPTool } from "mcp-framework";
1
+ /**
2
+ * MCP tool exposing altitude lookup for a single geographic position.
3
+ */
4
+ import BaseTool from "./BaseTool.js";
2
5
  import { z } from "zod";
3
6
  import { ALTITUDE_SOURCE, getAltitudeByLocation } from "../gpf/altitude.js";
4
7
  import { READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS } from "../helpers/toolAnnotations.js";
5
8
  import { lonSchema, latSchema } from "../helpers/schemas.js";
9
+ import logger from "../logger.js";
10
+ // --- Schema ---
6
11
  const altitudeInputSchema = z.object({
7
12
  lon: lonSchema,
8
13
  lat: latSchema,
@@ -13,20 +18,26 @@ const altitudeResultSchema = z.object({
13
18
  altitude: z.number().describe("L'altitude du point."),
14
19
  accuracy: z.string().describe("L'information de précision associée à l'altitude."),
15
20
  });
16
- const altitudeOutputSchema = z.object({
17
- result: altitudeResultSchema.describe("Le résultat altimétrique pour la position demandée."),
18
- });
19
- class AltitudeTool extends MCPTool {
21
+ const altitudeOutputSchema = altitudeResultSchema;
22
+ // --- Tool ---
23
+ class AltitudeTool extends BaseTool {
20
24
  name = "altitude";
21
25
  title = "Altitude d’une position";
22
26
  annotations = READ_ONLY_OPEN_WORLD_TOOL_ANNOTATIONS;
23
27
  description = `Renvoie l'altitude (en mètres) et la précision de la mesure (accuracy) d'un point géographique à partir de sa longitude et de sa latitude. (source : ${ALTITUDE_SOURCE}).`;
24
28
  outputSchemaShape = altitudeOutputSchema;
25
29
  schema = altitudeInputSchema;
30
+ /**
31
+ * Resolves the altitude information for the requested position.
32
+ *
33
+ * @param input Normalized tool input.
34
+ * @returns The altitude payload returned by the upstream service.
35
+ */
26
36
  async execute(input) {
27
- return {
28
- result: await getAltitudeByLocation(input.lon, input.lat),
29
- };
37
+ logger.info(`[tool] execute ${this.name} ...`, {
38
+ input: input
39
+ });
40
+ return await getAltitudeByLocation(input.lon, input.lat);
30
41
  }
31
42
  }
32
43
  export default AltitudeTool;
@@ -1 +1 @@
1
- {"version":3,"file":"AltitudeTool.js","sourceRoot":"","sources":["../../src/tools/AltitudeTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CAC7F,CAAC,CAAC;AAEH,MAAM,YAAa,SAAQ,OAAsB;IAC/C,IAAI,GAAG,UAAU,CAAC;IAClB,KAAK,GAAG,yBAAyB,CAAC;IAClC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG,wJAAwJ,eAAe,IAAI,CAAC;IAChL,iBAAiB,GAAG,oBAAoB,CAAC;IAEnD,MAAM,GAAG,mBAAmB,CAAC;IAE7B,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,OAAO;YACL,MAAM,EAAE,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;SAC1D,CAAC;IACJ,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"AltitudeTool.js","sourceRoot":"","sources":["../../src/tools/AltitudeTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,iBAAiB;AAEjB,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;CACf,CAAC,CAAC,MAAM,EAAE,CAAC;AAMZ,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD,eAAe;AAEf,MAAM,YAAa,SAAQ,QAAuB;IAChD,IAAI,GAAG,UAAU,CAAC;IAClB,KAAK,GAAG,yBAAyB,CAAC;IAClC,WAAW,GAAG,qCAAqC,CAAC;IACpD,WAAW,GAAG,wJAAwJ,eAAe,IAAI,CAAC;IAChL,iBAAiB,GAAG,oBAAoB,CAAC;IAEnD,MAAM,GAAG,mBAAmB,CAAC;IAE7B;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,MAAM,EAAE;YAC7C,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,OAAO,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}