@ibm/ibmi-mcp-server 0.1.2 → 0.3.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 (207) hide show
  1. package/README.md +2178 -46
  2. package/dist/config/index.d.ts +2 -0
  3. package/dist/config/index.d.ts.map +1 -1
  4. package/dist/config/index.js +57 -24
  5. package/dist/config/index.js.map +1 -1
  6. package/dist/config/resolver.d.ts.map +1 -1
  7. package/dist/config/resolver.js.map +1 -1
  8. package/dist/ibmi-mcp-server/auth/httpAuthEndpoint.js +1 -1
  9. package/dist/ibmi-mcp-server/services/connectionPool.js +2 -2
  10. package/dist/ibmi-mcp-server/tools/executeSql.tool.d.ts +80 -0
  11. package/dist/ibmi-mcp-server/tools/executeSql.tool.d.ts.map +1 -0
  12. package/dist/ibmi-mcp-server/tools/executeSql.tool.js +356 -0
  13. package/dist/ibmi-mcp-server/tools/executeSql.tool.js.map +1 -0
  14. package/dist/ibmi-mcp-server/tools/generateSql.tool.d.ts +36 -0
  15. package/dist/ibmi-mcp-server/tools/generateSql.tool.d.ts.map +1 -0
  16. package/dist/ibmi-mcp-server/tools/generateSql.tool.js +281 -0
  17. package/dist/ibmi-mcp-server/tools/generateSql.tool.js.map +1 -0
  18. package/dist/ibmi-mcp-server/tools/index.d.ts +85 -0
  19. package/dist/ibmi-mcp-server/tools/index.d.ts.map +1 -0
  20. package/dist/ibmi-mcp-server/tools/index.js +21 -0
  21. package/dist/ibmi-mcp-server/tools/index.js.map +1 -0
  22. package/dist/ibmi-mcp-server/utils/config/configParser.d.ts +9 -0
  23. package/dist/ibmi-mcp-server/utils/config/configParser.d.ts.map +1 -1
  24. package/dist/ibmi-mcp-server/utils/config/configParser.js +58 -0
  25. package/dist/ibmi-mcp-server/utils/config/configParser.js.map +1 -1
  26. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +1 -1
  27. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -1
  28. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts +4 -4
  29. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.d.ts.map +1 -1
  30. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js +7 -8
  31. package/dist/ibmi-mcp-server/utils/config/toolDefinitions.js.map +1 -1
  32. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +0 -8
  33. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -1
  34. package/dist/ibmi-mcp-server/utils/config/toolFactory.js +0 -31
  35. package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -1
  36. package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts +1 -1
  37. package/dist/ibmi-mcp-server/utils/config/toolsetManager.d.ts.map +1 -1
  38. package/dist/ibmi-mcp-server/utils/config/toolsetManager.js +2 -2
  39. package/dist/ibmi-mcp-server/utils/config/toolsetManager.js.map +1 -1
  40. package/dist/ibmi-mcp-server/utils/language/document.d.ts +26 -0
  41. package/dist/ibmi-mcp-server/utils/language/document.d.ts.map +1 -0
  42. package/dist/ibmi-mcp-server/utils/language/document.js +318 -0
  43. package/dist/ibmi-mcp-server/utils/language/document.js.map +1 -0
  44. package/dist/ibmi-mcp-server/utils/language/statement.d.ts +43 -0
  45. package/dist/ibmi-mcp-server/utils/language/statement.d.ts.map +1 -0
  46. package/dist/ibmi-mcp-server/utils/language/statement.js +796 -0
  47. package/dist/ibmi-mcp-server/utils/language/statement.js.map +1 -0
  48. package/dist/ibmi-mcp-server/utils/language/tokens.d.ts +32 -0
  49. package/dist/ibmi-mcp-server/utils/language/tokens.d.ts.map +1 -0
  50. package/dist/ibmi-mcp-server/utils/language/tokens.js +532 -0
  51. package/dist/ibmi-mcp-server/utils/language/tokens.js.map +1 -0
  52. package/dist/ibmi-mcp-server/utils/language/types.d.ts +138 -0
  53. package/dist/ibmi-mcp-server/utils/language/types.d.ts.map +1 -0
  54. package/dist/ibmi-mcp-server/utils/language/types.js +93 -0
  55. package/dist/ibmi-mcp-server/utils/language/types.js.map +1 -0
  56. package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.d.ts +48 -0
  57. package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.d.ts.map +1 -0
  58. package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.js +93 -0
  59. package/dist/ibmi-mcp-server/utils/security/ibmiSqlParser.js.map +1 -0
  60. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts +35 -59
  61. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.d.ts.map +1 -1
  62. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +108 -288
  63. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -1
  64. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.d.ts +54 -0
  65. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.d.ts.map +1 -0
  66. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.js +91 -0
  67. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidatorFallback.js.map +1 -0
  68. package/dist/index.js +4 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/mcp-server/tools/index.d.ts +13 -2
  71. package/dist/mcp-server/tools/index.d.ts.map +1 -1
  72. package/dist/mcp-server/tools/index.js +29 -9
  73. package/dist/mcp-server/tools/index.js.map +1 -1
  74. package/dist/mcp-server/tools/utils/index.d.ts +7 -0
  75. package/dist/mcp-server/tools/utils/index.d.ts.map +1 -0
  76. package/dist/mcp-server/tools/utils/index.js +7 -0
  77. package/dist/mcp-server/tools/utils/index.js.map +1 -0
  78. package/dist/mcp-server/tools/utils/tool-factory.d.ts +129 -0
  79. package/dist/mcp-server/tools/utils/tool-factory.d.ts.map +1 -0
  80. package/dist/mcp-server/tools/utils/tool-factory.js +179 -0
  81. package/dist/mcp-server/tools/utils/tool-factory.js.map +1 -0
  82. package/dist/mcp-server/tools/utils/types.d.ts +117 -0
  83. package/dist/mcp-server/tools/utils/types.d.ts.map +1 -0
  84. package/dist/mcp-server/tools/utils/types.js +11 -0
  85. package/dist/mcp-server/tools/utils/types.js.map +1 -0
  86. package/dist/mcp-server/transports/core/cleanupTransformStream.d.ts +26 -0
  87. package/dist/mcp-server/transports/core/cleanupTransformStream.d.ts.map +1 -0
  88. package/dist/mcp-server/transports/core/cleanupTransformStream.js +60 -0
  89. package/dist/mcp-server/transports/core/cleanupTransformStream.js.map +1 -0
  90. package/dist/mcp-server/transports/core/statefulTransportManager.d.ts +1 -1
  91. package/dist/mcp-server/transports/core/statefulTransportManager.d.ts.map +1 -1
  92. package/dist/mcp-server/transports/core/statefulTransportManager.js +50 -40
  93. package/dist/mcp-server/transports/core/statefulTransportManager.js.map +1 -1
  94. package/dist/mcp-server/transports/core/statelessTransportManager.d.ts +2 -13
  95. package/dist/mcp-server/transports/core/statelessTransportManager.d.ts.map +1 -1
  96. package/dist/mcp-server/transports/core/statelessTransportManager.js +35 -62
  97. package/dist/mcp-server/transports/core/statelessTransportManager.js.map +1 -1
  98. package/dist/mcp-server/transports/core/transportRequest.d.ts +1 -2
  99. package/dist/mcp-server/transports/core/transportRequest.d.ts.map +1 -1
  100. package/dist/mcp-server/transports/http/mcpTransportMiddleware.d.ts.map +1 -1
  101. package/dist/mcp-server/transports/http/mcpTransportMiddleware.js +1 -3
  102. package/dist/mcp-server/transports/http/mcpTransportMiddleware.js.map +1 -1
  103. package/dist/utils/internal/logger.d.ts +5 -0
  104. package/dist/utils/internal/logger.d.ts.map +1 -1
  105. package/dist/utils/internal/logger.js +65 -36
  106. package/dist/utils/internal/logger.js.map +1 -1
  107. package/package.json +29 -23
  108. package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts +0 -9
  109. package/dist/ibmi-mcp-server/tools/executeSql/index.d.ts.map +0 -1
  110. package/dist/ibmi-mcp-server/tools/executeSql/index.js +0 -9
  111. package/dist/ibmi-mcp-server/tools/executeSql/index.js.map +0 -1
  112. package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts +0 -51
  113. package/dist/ibmi-mcp-server/tools/executeSql/logic.d.ts.map +0 -1
  114. package/dist/ibmi-mcp-server/tools/executeSql/logic.js +0 -179
  115. package/dist/ibmi-mcp-server/tools/executeSql/logic.js.map +0 -1
  116. package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts +0 -52
  117. package/dist/ibmi-mcp-server/tools/executeSql/registration.d.ts.map +0 -1
  118. package/dist/ibmi-mcp-server/tools/executeSql/registration.js +0 -161
  119. package/dist/ibmi-mcp-server/tools/executeSql/registration.js.map +0 -1
  120. package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts +0 -13
  121. package/dist/ibmi-mcp-server/tools/generateSql/index.d.ts.map +0 -1
  122. package/dist/ibmi-mcp-server/tools/generateSql/index.js +0 -13
  123. package/dist/ibmi-mcp-server/tools/generateSql/index.js.map +0 -1
  124. package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts +0 -64
  125. package/dist/ibmi-mcp-server/tools/generateSql/logic.d.ts.map +0 -1
  126. package/dist/ibmi-mcp-server/tools/generateSql/logic.js +0 -190
  127. package/dist/ibmi-mcp-server/tools/generateSql/logic.js.map +0 -1
  128. package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts +0 -18
  129. package/dist/ibmi-mcp-server/tools/generateSql/registration.d.ts.map +0 -1
  130. package/dist/ibmi-mcp-server/tools/generateSql/registration.js +0 -64
  131. package/dist/ibmi-mcp-server/tools/generateSql/registration.js.map +0 -1
  132. package/dist/mcp-server/tools/catFactFetcher/index.d.ts +0 -8
  133. package/dist/mcp-server/tools/catFactFetcher/index.d.ts.map +0 -1
  134. package/dist/mcp-server/tools/catFactFetcher/index.js +0 -8
  135. package/dist/mcp-server/tools/catFactFetcher/index.js.map +0 -1
  136. package/dist/mcp-server/tools/catFactFetcher/logic.d.ts +0 -52
  137. package/dist/mcp-server/tools/catFactFetcher/logic.d.ts.map +0 -1
  138. package/dist/mcp-server/tools/catFactFetcher/logic.js +0 -95
  139. package/dist/mcp-server/tools/catFactFetcher/logic.js.map +0 -1
  140. package/dist/mcp-server/tools/catFactFetcher/registration.d.ts +0 -9
  141. package/dist/mcp-server/tools/catFactFetcher/registration.d.ts.map +0 -1
  142. package/dist/mcp-server/tools/catFactFetcher/registration.js +0 -43
  143. package/dist/mcp-server/tools/catFactFetcher/registration.js.map +0 -1
  144. package/dist/mcp-server/tools/echoTool/index.d.ts +0 -13
  145. package/dist/mcp-server/tools/echoTool/index.d.ts.map +0 -1
  146. package/dist/mcp-server/tools/echoTool/index.js +0 -13
  147. package/dist/mcp-server/tools/echoTool/index.js.map +0 -1
  148. package/dist/mcp-server/tools/echoTool/logic.d.ts +0 -69
  149. package/dist/mcp-server/tools/echoTool/logic.d.ts.map +0 -1
  150. package/dist/mcp-server/tools/echoTool/logic.js +0 -119
  151. package/dist/mcp-server/tools/echoTool/logic.js.map +0 -1
  152. package/dist/mcp-server/tools/echoTool/registration.d.ts +0 -9
  153. package/dist/mcp-server/tools/echoTool/registration.d.ts.map +0 -1
  154. package/dist/mcp-server/tools/echoTool/registration.js +0 -45
  155. package/dist/mcp-server/tools/echoTool/registration.js.map +0 -1
  156. package/dist/mcp-server/tools/imageTest/index.d.ts +0 -7
  157. package/dist/mcp-server/tools/imageTest/index.d.ts.map +0 -1
  158. package/dist/mcp-server/tools/imageTest/index.js +0 -7
  159. package/dist/mcp-server/tools/imageTest/index.js.map +0 -1
  160. package/dist/mcp-server/tools/imageTest/logic.d.ts +0 -27
  161. package/dist/mcp-server/tools/imageTest/logic.d.ts.map +0 -1
  162. package/dist/mcp-server/tools/imageTest/logic.js +0 -44
  163. package/dist/mcp-server/tools/imageTest/logic.js.map +0 -1
  164. package/dist/mcp-server/tools/imageTest/registration.d.ts +0 -9
  165. package/dist/mcp-server/tools/imageTest/registration.d.ts.map +0 -1
  166. package/dist/mcp-server/tools/imageTest/registration.js +0 -49
  167. package/dist/mcp-server/tools/imageTest/registration.js.map +0 -1
  168. package/dist/mcp-server/tools/utils/tool-utils.d.ts +0 -43
  169. package/dist/mcp-server/tools/utils/tool-utils.d.ts.map +0 -1
  170. package/dist/mcp-server/tools/utils/tool-utils.js +0 -44
  171. package/dist/mcp-server/tools/utils/tool-utils.js.map +0 -1
  172. package/dist/mcp-server/transports/core/headerUtils.d.ts +0 -27
  173. package/dist/mcp-server/transports/core/headerUtils.d.ts.map +0 -1
  174. package/dist/mcp-server/transports/core/headerUtils.js +0 -53
  175. package/dist/mcp-server/transports/core/headerUtils.js.map +0 -1
  176. package/dist/mcp-server/transports/core/honoNodeBridge.d.ts +0 -77
  177. package/dist/mcp-server/transports/core/honoNodeBridge.d.ts.map +0 -1
  178. package/dist/mcp-server/transports/core/honoNodeBridge.js +0 -150
  179. package/dist/mcp-server/transports/core/honoNodeBridge.js.map +0 -1
  180. package/dist/services/duck-db/duckDBConnectionManager.d.ts +0 -55
  181. package/dist/services/duck-db/duckDBConnectionManager.d.ts.map +0 -1
  182. package/dist/services/duck-db/duckDBConnectionManager.js +0 -184
  183. package/dist/services/duck-db/duckDBConnectionManager.js.map +0 -1
  184. package/dist/services/duck-db/duckDBQueryExecutor.d.ts +0 -18
  185. package/dist/services/duck-db/duckDBQueryExecutor.d.ts.map +0 -1
  186. package/dist/services/duck-db/duckDBQueryExecutor.js +0 -115
  187. package/dist/services/duck-db/duckDBQueryExecutor.js.map +0 -1
  188. package/dist/services/duck-db/duckDBService.d.ts +0 -27
  189. package/dist/services/duck-db/duckDBService.d.ts.map +0 -1
  190. package/dist/services/duck-db/duckDBService.js +0 -151
  191. package/dist/services/duck-db/duckDBService.js.map +0 -1
  192. package/dist/services/duck-db/types.d.ts +0 -135
  193. package/dist/services/duck-db/types.d.ts.map +0 -1
  194. package/dist/services/duck-db/types.js +0 -6
  195. package/dist/services/duck-db/types.js.map +0 -1
  196. package/dist/services/llm-providers/openRouterProvider.d.ts +0 -36
  197. package/dist/services/llm-providers/openRouterProvider.d.ts.map +0 -1
  198. package/dist/services/llm-providers/openRouterProvider.js +0 -235
  199. package/dist/services/llm-providers/openRouterProvider.js.map +0 -1
  200. package/dist/services/supabase/supabaseClient.d.ts +0 -25
  201. package/dist/services/supabase/supabaseClient.d.ts.map +0 -1
  202. package/dist/services/supabase/supabaseClient.js +0 -68
  203. package/dist/services/supabase/supabaseClient.js.map +0 -1
  204. package/dist/storage/duckdbExample.d.ts +0 -8
  205. package/dist/storage/duckdbExample.d.ts.map +0 -1
  206. package/dist/storage/duckdbExample.js +0 -197
  207. package/dist/storage/duckdbExample.js.map +0 -1
@@ -0,0 +1,138 @@
1
+ import Statement from "./statement.js";
2
+ export declare enum StatementType {
3
+ Unknown = "Unknown",
4
+ Create = "Create",
5
+ Close = "Close",
6
+ Insert = "Insert",
7
+ Select = "Select",
8
+ With = "With",
9
+ Update = "Update",
10
+ Delete = "Delete",
11
+ Declare = "Declare",
12
+ Begin = "Begin",
13
+ Drop = "Drop",
14
+ End = "End",
15
+ Else = "Else",
16
+ Elseif = "Elseif",
17
+ Call = "Call",
18
+ Alter = "Alter",
19
+ Fetch = "Fetch",
20
+ For = "For",
21
+ Get = "Get",
22
+ Goto = "Goto",
23
+ If = "If",
24
+ Include = "Include",
25
+ Iterate = "Iterate",
26
+ Leave = "Leave",
27
+ Loop = "Loop",
28
+ Merge = "Merge",
29
+ Open = "Open",
30
+ Pipe = "Pipe",
31
+ Repeat = "Repeat",
32
+ Resignal = "Resignal",
33
+ Return = "Return",
34
+ Signal = "Signal",
35
+ Set = "Set",
36
+ While = "While"
37
+ }
38
+ export declare const StatementTypeWord: {
39
+ CREATE: StatementType;
40
+ SELECT: StatementType;
41
+ WITH: StatementType;
42
+ INSERT: StatementType;
43
+ UPDATE: StatementType;
44
+ DELETE: StatementType;
45
+ DECLARE: StatementType;
46
+ DROP: StatementType;
47
+ END: StatementType;
48
+ ELSE: StatementType;
49
+ ELSEIF: StatementType;
50
+ CALL: StatementType;
51
+ BEGIN: StatementType;
52
+ ALTER: StatementType;
53
+ FOR: StatementType;
54
+ FETCH: StatementType;
55
+ GET: StatementType;
56
+ GOTO: StatementType;
57
+ IF: StatementType;
58
+ INCLUDE: StatementType;
59
+ ITERATE: StatementType;
60
+ LEAVE: StatementType;
61
+ LOOP: StatementType;
62
+ MERGE: StatementType;
63
+ PIPE: StatementType;
64
+ REPEAT: StatementType;
65
+ RESIGNAL: StatementType;
66
+ RETURN: StatementType;
67
+ SIGNAL: StatementType;
68
+ SET: StatementType;
69
+ WHILE: StatementType;
70
+ };
71
+ export declare enum ClauseType {
72
+ Unknown = "Unknown",
73
+ From = "From",
74
+ Into = "Into",
75
+ Where = "Where",
76
+ Having = "Having",
77
+ Group = "Group",
78
+ Limit = "Limit",
79
+ Offset = "Offset",
80
+ Order = "Order"
81
+ }
82
+ export declare const ClauseTypeWord: {
83
+ FROM: ClauseType;
84
+ INTO: ClauseType;
85
+ WHERE: ClauseType;
86
+ HAVING: ClauseType;
87
+ GROUP: ClauseType;
88
+ LIMIT: ClauseType;
89
+ OFFSET: ClauseType;
90
+ ORDER: ClauseType;
91
+ };
92
+ export interface CTEReference {
93
+ name: string;
94
+ columns: string[];
95
+ statement: Statement;
96
+ }
97
+ export interface IRange {
98
+ start: number;
99
+ end: number;
100
+ }
101
+ export interface Token {
102
+ value?: string;
103
+ block?: Token[];
104
+ type: string;
105
+ range: IRange;
106
+ }
107
+ export interface QualifiedObject {
108
+ schema?: string;
109
+ name?: string;
110
+ system?: string;
111
+ }
112
+ export interface ObjectRef {
113
+ tokens: Token[];
114
+ object: QualifiedObject;
115
+ alias?: string;
116
+ isUDTF?: boolean;
117
+ fromLateral?: boolean;
118
+ /** only used within create statements */
119
+ createType?: string;
120
+ }
121
+ export interface StatementGroup {
122
+ range: IRange;
123
+ statements: Statement[];
124
+ }
125
+ export interface Definition extends ObjectRef {
126
+ range: IRange;
127
+ children: Definition[];
128
+ }
129
+ export interface ParsedEmbeddedStatement {
130
+ changed: boolean;
131
+ content: string;
132
+ parameterCount: number;
133
+ }
134
+ export interface CallableReference {
135
+ tokens: Token[];
136
+ parentRef: ObjectRef;
137
+ }
138
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/language/types.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,EAAE,OAAO;IACT,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC7B,CAAC;AAEF,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,cAAc;;;;;;;;;CAS1B,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;CACtB"}
@@ -0,0 +1,93 @@
1
+ export var StatementType;
2
+ (function (StatementType) {
3
+ StatementType["Unknown"] = "Unknown";
4
+ StatementType["Create"] = "Create";
5
+ StatementType["Close"] = "Close";
6
+ StatementType["Insert"] = "Insert";
7
+ StatementType["Select"] = "Select";
8
+ StatementType["With"] = "With";
9
+ StatementType["Update"] = "Update";
10
+ StatementType["Delete"] = "Delete";
11
+ StatementType["Declare"] = "Declare";
12
+ StatementType["Begin"] = "Begin";
13
+ StatementType["Drop"] = "Drop";
14
+ StatementType["End"] = "End";
15
+ StatementType["Else"] = "Else";
16
+ StatementType["Elseif"] = "Elseif";
17
+ StatementType["Call"] = "Call";
18
+ StatementType["Alter"] = "Alter";
19
+ StatementType["Fetch"] = "Fetch";
20
+ StatementType["For"] = "For";
21
+ StatementType["Get"] = "Get";
22
+ StatementType["Goto"] = "Goto";
23
+ StatementType["If"] = "If";
24
+ StatementType["Include"] = "Include";
25
+ StatementType["Iterate"] = "Iterate";
26
+ StatementType["Leave"] = "Leave";
27
+ StatementType["Loop"] = "Loop";
28
+ StatementType["Merge"] = "Merge";
29
+ StatementType["Open"] = "Open";
30
+ StatementType["Pipe"] = "Pipe";
31
+ StatementType["Repeat"] = "Repeat";
32
+ StatementType["Resignal"] = "Resignal";
33
+ StatementType["Return"] = "Return";
34
+ StatementType["Signal"] = "Signal";
35
+ StatementType["Set"] = "Set";
36
+ StatementType["While"] = "While";
37
+ })(StatementType || (StatementType = {}));
38
+ export const StatementTypeWord = {
39
+ CREATE: StatementType.Create,
40
+ SELECT: StatementType.Select,
41
+ WITH: StatementType.With,
42
+ INSERT: StatementType.Insert,
43
+ UPDATE: StatementType.Update,
44
+ DELETE: StatementType.Delete,
45
+ DECLARE: StatementType.Declare,
46
+ DROP: StatementType.Drop,
47
+ END: StatementType.End,
48
+ ELSE: StatementType.Else,
49
+ ELSEIF: StatementType.Elseif,
50
+ CALL: StatementType.Call,
51
+ BEGIN: StatementType.Begin,
52
+ ALTER: StatementType.Alter,
53
+ FOR: StatementType.For,
54
+ FETCH: StatementType.Fetch,
55
+ GET: StatementType.Get,
56
+ GOTO: StatementType.Goto,
57
+ IF: StatementType.If,
58
+ INCLUDE: StatementType.Include,
59
+ ITERATE: StatementType.Iterate,
60
+ LEAVE: StatementType.Leave,
61
+ LOOP: StatementType.Loop,
62
+ MERGE: StatementType.Merge,
63
+ PIPE: StatementType.Pipe,
64
+ REPEAT: StatementType.Repeat,
65
+ RESIGNAL: StatementType.Resignal,
66
+ RETURN: StatementType.Return,
67
+ SIGNAL: StatementType.Signal,
68
+ SET: StatementType.Set,
69
+ WHILE: StatementType.While,
70
+ };
71
+ export var ClauseType;
72
+ (function (ClauseType) {
73
+ ClauseType["Unknown"] = "Unknown";
74
+ ClauseType["From"] = "From";
75
+ ClauseType["Into"] = "Into";
76
+ ClauseType["Where"] = "Where";
77
+ ClauseType["Having"] = "Having";
78
+ ClauseType["Group"] = "Group";
79
+ ClauseType["Limit"] = "Limit";
80
+ ClauseType["Offset"] = "Offset";
81
+ ClauseType["Order"] = "Order";
82
+ })(ClauseType || (ClauseType = {}));
83
+ export const ClauseTypeWord = {
84
+ FROM: ClauseType.From,
85
+ INTO: ClauseType.Into,
86
+ WHERE: ClauseType.Where,
87
+ HAVING: ClauseType.Having,
88
+ GROUP: ClauseType.Group,
89
+ LIMIT: ClauseType.Limit,
90
+ OFFSET: ClauseType.Offset,
91
+ ORDER: ClauseType.Order,
92
+ };
93
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/language/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @fileoverview IBM i-aware SQL Parser using vscode-db2i's SQL language module
3
+ * Handles IBM i-specific SQL syntax that standard parsers don't support
4
+ *
5
+ * @module src/ibmi-mcp-server/utils/security/ibmiSqlParser
6
+ */
7
+ import { RequestContext } from "../../../utils/internal/requestContext.js";
8
+ import { StatementType } from "../../utils/language/types.js";
9
+ /**
10
+ * Parse result from IBM i SQL parser
11
+ */
12
+ export interface IbmiParseResult {
13
+ success: boolean;
14
+ isReadOnly: boolean;
15
+ statementTypes: string[];
16
+ violations: string[];
17
+ error?: string;
18
+ }
19
+ export declare const readOnlyTypes: StatementType[];
20
+ /**
21
+ * IBM i-aware SQL parser using vscode-db2i's Document class
22
+ */
23
+ export declare class IbmiSqlParser {
24
+ /**
25
+ * Parse and validate SQL query for IBM i
26
+ *
27
+ * @param query - SQL query to parse
28
+ * @param context - Request context for logging
29
+ * @returns Parse result with read-only validation
30
+ */
31
+ static parseQuery(query: string, context: RequestContext): IbmiParseResult;
32
+ /**
33
+ * Detect write operations by analyzing statement types
34
+ *
35
+ * @param document - Parsed SQL document
36
+ * @returns Array of violation messages
37
+ */
38
+ private static detectWriteOperations;
39
+ /**
40
+ * Determine if a statement type is a write operation
41
+ *
42
+ * @param type - Statement type enum value
43
+ * @returns True if the statement modifies data
44
+ */
45
+ private static isWriteOperation;
46
+ }
47
+ export { StatementType } from "../../utils/language/types.js";
48
+ //# sourceMappingURL=ibmiSqlParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ibmiSqlParser.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/security/ibmiSqlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,iBAA6C,CAAC;AAExE;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,eAAe;IAuD1E;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAiBpC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAMhC;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @fileoverview IBM i-aware SQL Parser using vscode-db2i's SQL language module
3
+ * Handles IBM i-specific SQL syntax that standard parsers don't support
4
+ *
5
+ * @module src/ibmi-mcp-server/utils/security/ibmiSqlParser
6
+ */
7
+ import { logger } from "../../../utils/internal/logger.js";
8
+ import Document from "../../utils/language/document.js";
9
+ import { StatementType } from "../../utils/language/types.js";
10
+ export const readOnlyTypes = [StatementType.Select, StatementType.With];
11
+ /**
12
+ * IBM i-aware SQL parser using vscode-db2i's Document class
13
+ */
14
+ export class IbmiSqlParser {
15
+ /**
16
+ * Parse and validate SQL query for IBM i
17
+ *
18
+ * @param query - SQL query to parse
19
+ * @param context - Request context for logging
20
+ * @returns Parse result with read-only validation
21
+ */
22
+ static parseQuery(query, context) {
23
+ try {
24
+ // Parse query using vscode-db2i's Document class
25
+ const document = new Document(query);
26
+ // Extract statement types from parsed statements
27
+ const statementTypes = document.statements.map((stmt) => StatementType[stmt.type] || "Unknown");
28
+ // Check for write operations by analyzing statement types
29
+ const violations = this.detectWriteOperations(document);
30
+ // Determine if query is read-only
31
+ const isReadOnly = violations.length === 0;
32
+ logger.debug({
33
+ ...context,
34
+ statementTypes,
35
+ isReadOnly,
36
+ violationCount: violations.length,
37
+ statementCount: document.statements.length,
38
+ }, "IBM i SQL parsed successfully with vscode-db2i parser");
39
+ return {
40
+ success: true,
41
+ isReadOnly,
42
+ statementTypes,
43
+ violations,
44
+ };
45
+ }
46
+ catch (error) {
47
+ const errorMessage = error instanceof Error ? error.message : String(error);
48
+ logger.debug({
49
+ ...context,
50
+ error: errorMessage,
51
+ }, "vscode-db2i parsing failed - will fall back to other validators");
52
+ return {
53
+ success: false,
54
+ isReadOnly: false,
55
+ statementTypes: [],
56
+ violations: ["Parse error"],
57
+ error: errorMessage,
58
+ };
59
+ }
60
+ }
61
+ /**
62
+ * Detect write operations by analyzing statement types
63
+ *
64
+ * @param document - Parsed SQL document
65
+ * @returns Array of violation messages
66
+ */
67
+ static detectWriteOperations(document) {
68
+ const violations = [];
69
+ for (const statement of document.statements) {
70
+ const stmtType = statement.type;
71
+ // Check if statement type is a write operation
72
+ if (this.isWriteOperation(stmtType)) {
73
+ violations.push(`Write operation detected: ${StatementType[stmtType] || "Unknown"}`);
74
+ }
75
+ }
76
+ return violations;
77
+ }
78
+ /**
79
+ * Determine if a statement type is a write operation
80
+ *
81
+ * @param type - Statement type enum value
82
+ * @returns True if the statement modifies data
83
+ */
84
+ static isWriteOperation(type) {
85
+ // Only SELECT and WITH (CTE) are read-only
86
+ // All other statement types (including CALL) are write operations
87
+ // TODO: Consider refining this logic if certain CALL statements are allowed
88
+ return !readOnlyTypes.includes(type);
89
+ }
90
+ }
91
+ // Re-export StatementType for convenience
92
+ export { StatementType } from "../../utils/language/types.js";
93
+ //# sourceMappingURL=ibmiSqlParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ibmiSqlParser.js","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/security/ibmiSqlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,OAAO,QAAQ,MAAM,8CAA8C,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAa1E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,OAAO,aAAa;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,OAAuB;QACtD,IAAI,CAAC;YACH,iDAAiD;YACjD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;YAErC,iDAAiD;YACjD,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAChD,CAAC;YAEF,0DAA0D;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAExD,kCAAkC;YAClC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;YAE3C,MAAM,CAAC,KAAK,CACV;gBACE,GAAG,OAAO;gBACV,cAAc;gBACd,UAAU;gBACV,cAAc,EAAE,UAAU,CAAC,MAAM;gBACjC,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;aAC3C,EACD,uDAAuD,CACxD,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,UAAU;gBACV,cAAc;gBACd,UAAU;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEzD,MAAM,CAAC,KAAK,CACV;gBACE,GAAG,OAAO;gBACV,KAAK,EAAE,YAAY;aACpB,EACD,iEAAiE,CAClE,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,KAAK;gBACjB,cAAc,EAAE,EAAE;gBAClB,UAAU,EAAE,CAAC,aAAa,CAAC;gBAC3B,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,qBAAqB,CAAC,QAAkB;QACrD,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;YAEhC,+CAA+C;YAC/C,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,UAAU,CAAC,IAAI,CACb,6BAA6B,aAAa,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CACpE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,gBAAgB,CAAC,IAAmB;QACjD,2CAA2C;QAC3C,kEAAkE;QAClE,4EAA4E;QAC5E,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF;AAED,0CAA0C;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @fileoverview SQL Security Validator for validating SQL queries against security policies
3
- * Provides both AST-based and regex-based validation with comprehensive security checks
3
+ * Uses vscode-db2i tokenizer for precise validation and regex patterns as fallback
4
4
  *
5
5
  * @module src/utils/security/sqlSecurityValidator
6
6
  */
@@ -15,25 +15,49 @@ export interface SecurityValidationResult {
15
15
  /** List of security violations found */
16
16
  violations: string[];
17
17
  /** Validation method used */
18
- validationMethod: "ast" | "regex" | "combined";
18
+ validationMethod: "regex" | "combined";
19
19
  }
20
20
  /**
21
21
  * Dangerous SQL operations that should be blocked in read-only mode
22
22
  */
23
- export declare const DANGEROUS_OPERATIONS: readonly ["INSERT", "UPDATE", "DELETE", "REPLACE", "MERGE", "TRUNCATE", "DROP", "CREATE", "ALTER", "RENAME", "CALL", "EXEC", "EXECUTE", "SET", "DECLARE", "GRANT", "REVOKE", "DENY", "LOAD", "IMPORT", "EXPORT", "BULK", "SHUTDOWN", "RESTART", "KILL", "STOP", "START", "BACKUP", "RESTORE", "DUMP", "LOCK", "UNLOCK", "COMMIT", "ROLLBACK", "SAVEPOINT", "QCMDEXC", "SQL_EXECUTE_IMMEDIATE"];
24
- /**
25
- * Dangerous SQL functions that should be monitored/blocked
26
- */
27
- export declare const DANGEROUS_FUNCTIONS: readonly ["SYSTEM", "QCMDEXC", "SQL_EXECUTE_IMMEDIATE", "SQLCMD", "LOAD_EXTENSION", "EXEC", "EXECUTE_IMMEDIATE", "EVAL", "CONCAT", "CHAR", "VARCHAR"];
23
+ export declare const DANGEROUS_OPERATIONS: readonly ["INSERT", "UPDATE", "DELETE", "MERGE", "TRUNCATE", "DROP", "CREATE", "ALTER", "RENAME", "CALL", "EXEC", "EXECUTE", "SET", "DECLARE", "GRANT", "REVOKE", "DENY", "LOAD", "IMPORT", "EXPORT", "BULK", "SHUTDOWN", "RESTART", "KILL", "STOP", "START", "BACKUP", "RESTORE", "DUMP", "LOCK", "UNLOCK", "COMMIT", "ROLLBACK", "SAVEPOINT", "QCMDEXC", "SQL_EXECUTE_IMMEDIATE"];
28
24
  /**
29
25
  * Dangerous SQL patterns that should be detected
30
26
  */
31
- export declare const DANGEROUS_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
27
+ export declare const DANGEROUS_PATTERNS: readonly [RegExp, RegExp, RegExp];
32
28
  /**
33
29
  * SQL Security Validator class for comprehensive SQL security validation
30
+ * Uses token-based validation with vscode-db2i tokenizer as primary method
34
31
  */
35
32
  export declare class SqlSecurityValidator {
36
- private static parser;
33
+ private static tokeniser;
34
+ /**
35
+ * Truncate query string for error messages and logging
36
+ * @param query - SQL query to truncate
37
+ * @param maxLength - Maximum length before truncation (default: 100)
38
+ * @returns Truncated query with ellipsis if needed
39
+ * @private
40
+ */
41
+ private static truncateQuery;
42
+ /**
43
+ * Throw validation error with standardized format
44
+ * @param message - Error message
45
+ * @param violations - List of violations
46
+ * @param context - Additional context for error
47
+ * @param query - SQL query being validated
48
+ * @throws McpError with ValidationError code
49
+ * @private
50
+ */
51
+ private static throwValidationError;
52
+ /**
53
+ * Validate forbidden keywords using token-based approach
54
+ * This method uses the vscode-db2i tokenizer to precisely identify SQL keywords
55
+ * @param query - SQL query to validate
56
+ * @param forbiddenKeywords - List of forbidden keywords
57
+ * @returns Security validation result
58
+ * @private
59
+ */
60
+ private static validateForbiddenKeywordsToken;
37
61
  /**
38
62
  * Validate SQL query against security configuration
39
63
  * @param query - SQL query to validate
@@ -50,7 +74,7 @@ export declare class SqlSecurityValidator {
50
74
  */
51
75
  private static validateQueryLength;
52
76
  /**
53
- * Validate forbidden keywords using both AST and regex approaches
77
+ * Validate forbidden keywords using token-based approach with regex fallback
54
78
  * @param query - SQL query to validate
55
79
  * @param securityConfig - Security configuration
56
80
  * @param context - Request context for logging
@@ -58,59 +82,11 @@ export declare class SqlSecurityValidator {
58
82
  */
59
83
  private static validateForbiddenKeywords;
60
84
  /**
61
- * Validate read-only restrictions using comprehensive validation
85
+ * Validate read-only restrictions using IBM i parser with regex fallback
62
86
  * @param query - SQL query to validate
63
87
  * @param context - Request context for logging
64
88
  * @private
65
89
  */
66
90
  private static validateReadOnlyRestrictions;
67
- /**
68
- * Validate SQL query using AST parsing
69
- * @param query - SQL query to validate
70
- * @param context - Request context for logging
71
- * @private
72
- */
73
- private static validateQueryAST;
74
- /**
75
- * Validate SQL query using regex patterns
76
- * @param query - SQL query to validate
77
- * @param _context - Request context for logging (unused but kept for consistency)
78
- * @private
79
- */
80
- private static validateQueryRegex;
81
- /**
82
- * Validate forbidden keywords using AST parsing
83
- * @param query - SQL query to validate
84
- * @param forbiddenKeywords - List of forbidden keywords
85
- * @param context - Request context for logging
86
- * @private
87
- */
88
- private static validateForbiddenKeywordsAST;
89
- /**
90
- * Validate forbidden keywords using regex patterns
91
- * @param query - SQL query to validate
92
- * @param forbiddenKeywords - List of forbidden keywords
93
- * @private
94
- */
95
- private static validateForbiddenKeywordsRegex;
96
- /**
97
- * Find dangerous functions anywhere in the AST
98
- * @param node - AST node to analyze
99
- * @private
100
- */
101
- private static findDangerousFunctionsInAST;
102
- /**
103
- * Find forbidden keywords anywhere in the AST
104
- * @param node - AST node to analyze
105
- * @param forbiddenKeywords - List of forbidden keywords
106
- * @private
107
- */
108
- private static findForbiddenKeywordsInAST;
109
- /**
110
- * Check for UNION with dangerous statements
111
- * @param statement - AST statement to check
112
- * @private
113
- */
114
- private static hasUnionWithDangerousStatements;
115
91
  }
116
92
  //# sourceMappingURL=sqlSecurityValidator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlSecurityValidator.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6BAA6B;IAC7B,gBAAgB,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;CAChD;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,gYAgDvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB,uJAYtB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,2EAcrB,CAAC;AAEX;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAgB;IAErC;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,qBAAqB,EACrC,OAAO,EAAE,cAAc,GACtB,IAAI;IA8BP;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkBlC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAgDxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAiC3C;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA4E/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAoCjC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAsC3C;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAuB7C;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IA+B1C;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAuCzC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,+BAA+B;CAmB/C"}
1
+ {"version":3,"file":"sqlSecurityValidator.d.ts","sourceRoot":"","sources":["../../../../src/ibmi-mcp-server/utils/security/sqlSecurityValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAK/D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6BAA6B;IAC7B,gBAAgB,EAAE,OAAO,GAAG,UAAU,CAAC;CACxC;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,qXA+CvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,mCAOrB,CAAC;AAEX;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAsB;IAE9C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAM5B;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAanC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,8BAA8B;IA6B7C;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,qBAAqB,EACrC,OAAO,EAAE,cAAc,GACtB,IAAI;IA8BP;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkBlC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA+DxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,4BAA4B;CA0D5C"}