@agenticmail/enterprise 0.5.197 → 0.5.199

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 (1090) hide show
  1. package/dist/dashboard/pages/domain-status.js +47 -0
  2. package/package.json +1 -1
  3. package/src/dashboard/pages/domain-status.js +47 -0
  4. package/dashboards/README.md +0 -131
  5. package/dashboards/django/app.py +0 -129
  6. package/dashboards/django/static/styles.css +0 -487
  7. package/dashboards/django/templates/activity.html +0 -130
  8. package/dashboards/django/templates/agent_detail.html +0 -501
  9. package/dashboards/django/templates/agents.html +0 -217
  10. package/dashboards/django/templates/api_keys.html +0 -41
  11. package/dashboards/django/templates/approvals.html +0 -115
  12. package/dashboards/django/templates/audit.html +0 -26
  13. package/dashboards/django/templates/community-skills.html +0 -89
  14. package/dashboards/django/templates/compliance.html +0 -33
  15. package/dashboards/django/templates/components/modal.html +0 -6
  16. package/dashboards/django/templates/components/pagination.html +0 -9
  17. package/dashboards/django/templates/components/stats.html +0 -8
  18. package/dashboards/django/templates/dashboard.html +0 -24
  19. package/dashboards/django/templates/dlp.html +0 -70
  20. package/dashboards/django/templates/domain-status.html +0 -59
  21. package/dashboards/django/templates/guardrails.html +0 -78
  22. package/dashboards/django/templates/journal.html +0 -39
  23. package/dashboards/django/templates/knowledge-contributions.html +0 -58
  24. package/dashboards/django/templates/knowledge.html +0 -104
  25. package/dashboards/django/templates/layout.html +0 -177
  26. package/dashboards/django/templates/login.html +0 -30
  27. package/dashboards/django/templates/messages.html +0 -38
  28. package/dashboards/django/templates/settings.html +0 -472
  29. package/dashboards/django/templates/skill-connections.html +0 -73
  30. package/dashboards/django/templates/skills.html +0 -66
  31. package/dashboards/django/templates/users.html +0 -34
  32. package/dashboards/django/templates/vault.html +0 -46
  33. package/dashboards/django/templates/workforce.html +0 -116
  34. package/dashboards/django/utils/__init__.py +0 -0
  35. package/dashboards/django/utils/api.py +0 -20
  36. package/dashboards/django/utils/helpers.py +0 -39
  37. package/dashboards/django/views/__init__.py +0 -52
  38. package/dashboards/django/views/agents.py +0 -343
  39. package/dashboards/django/views/api_keys.py +0 -47
  40. package/dashboards/django/views/audit.py +0 -35
  41. package/dashboards/django/views/auth.py +0 -34
  42. package/dashboards/django/views/compliance.py +0 -37
  43. package/dashboards/django/views/dashboard.py +0 -27
  44. package/dashboards/django/views/dlp.py +0 -53
  45. package/dashboards/django/views/guardrails.py +0 -61
  46. package/dashboards/django/views/journal.py +0 -41
  47. package/dashboards/django/views/messages.py +0 -65
  48. package/dashboards/django/views/new_pages.py +0 -38
  49. package/dashboards/django/views/settings_view.py +0 -335
  50. package/dashboards/django/views/skills.py +0 -50
  51. package/dashboards/django/views/users.py +0 -42
  52. package/dashboards/django/views/vault.py +0 -50
  53. package/dashboards/dotnet/AgenticMailDashboard.csproj +0 -10
  54. package/dashboards/dotnet/Program.cs +0 -89
  55. package/dashboards/dotnet/Routes/ActivityRoutes.cs +0 -35
  56. package/dashboards/dotnet/Routes/AgentRoutes.cs +0 -771
  57. package/dashboards/dotnet/Routes/ApiKeyRoutes.cs +0 -185
  58. package/dashboards/dotnet/Routes/ApprovalRoutes.cs +0 -36
  59. package/dashboards/dotnet/Routes/AuditRoutes.cs +0 -86
  60. package/dashboards/dotnet/Routes/AuthRoutes.cs +0 -50
  61. package/dashboards/dotnet/Routes/CommunitySkillRoutes.cs +0 -36
  62. package/dashboards/dotnet/Routes/ComplianceRoutes.cs +0 -143
  63. package/dashboards/dotnet/Routes/DashboardRoutes.cs +0 -81
  64. package/dashboards/dotnet/Routes/DlpRoutes.cs +0 -230
  65. package/dashboards/dotnet/Routes/DomainStatusRoutes.cs +0 -49
  66. package/dashboards/dotnet/Routes/GuardrailRoutes.cs +0 -285
  67. package/dashboards/dotnet/Routes/JournalRoutes.cs +0 -118
  68. package/dashboards/dotnet/Routes/KnowledgeContributionRoutes.cs +0 -42
  69. package/dashboards/dotnet/Routes/KnowledgeRoutes.cs +0 -40
  70. package/dashboards/dotnet/Routes/MessageRoutes.cs +0 -167
  71. package/dashboards/dotnet/Routes/SettingRoutes.cs +0 -907
  72. package/dashboards/dotnet/Routes/SkillConnectionRoutes.cs +0 -52
  73. package/dashboards/dotnet/Routes/SkillRoutes.cs +0 -198
  74. package/dashboards/dotnet/Routes/UserRoutes.cs +0 -111
  75. package/dashboards/dotnet/Routes/VaultRoutes.cs +0 -162
  76. package/dashboards/dotnet/Routes/WorkforceRoutes.cs +0 -55
  77. package/dashboards/dotnet/Services/ApiClient.cs +0 -103
  78. package/dashboards/dotnet/Services/HtmlBuilder.cs +0 -258
  79. package/dashboards/dotnet/wwwroot/styles.css +0 -546
  80. package/dashboards/express/app.js +0 -65
  81. package/dashboards/express/middleware/auth.js +0 -10
  82. package/dashboards/express/node_modules/.package-lock.json +0 -913
  83. package/dashboards/express/node_modules/accepts/HISTORY.md +0 -250
  84. package/dashboards/express/node_modules/accepts/LICENSE +0 -23
  85. package/dashboards/express/node_modules/accepts/README.md +0 -140
  86. package/dashboards/express/node_modules/accepts/index.js +0 -238
  87. package/dashboards/express/node_modules/accepts/package.json +0 -47
  88. package/dashboards/express/node_modules/body-parser/LICENSE +0 -23
  89. package/dashboards/express/node_modules/body-parser/README.md +0 -494
  90. package/dashboards/express/node_modules/body-parser/index.js +0 -71
  91. package/dashboards/express/node_modules/body-parser/lib/read.js +0 -247
  92. package/dashboards/express/node_modules/body-parser/lib/types/json.js +0 -158
  93. package/dashboards/express/node_modules/body-parser/lib/types/raw.js +0 -42
  94. package/dashboards/express/node_modules/body-parser/lib/types/text.js +0 -36
  95. package/dashboards/express/node_modules/body-parser/lib/types/urlencoded.js +0 -142
  96. package/dashboards/express/node_modules/body-parser/lib/utils.js +0 -98
  97. package/dashboards/express/node_modules/body-parser/package.json +0 -52
  98. package/dashboards/express/node_modules/bytes/History.md +0 -97
  99. package/dashboards/express/node_modules/bytes/LICENSE +0 -23
  100. package/dashboards/express/node_modules/bytes/Readme.md +0 -152
  101. package/dashboards/express/node_modules/bytes/index.js +0 -170
  102. package/dashboards/express/node_modules/bytes/package.json +0 -42
  103. package/dashboards/express/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
  104. package/dashboards/express/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
  105. package/dashboards/express/node_modules/call-bind-apply-helpers/.nycrc +0 -9
  106. package/dashboards/express/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
  107. package/dashboards/express/node_modules/call-bind-apply-helpers/LICENSE +0 -21
  108. package/dashboards/express/node_modules/call-bind-apply-helpers/README.md +0 -62
  109. package/dashboards/express/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
  110. package/dashboards/express/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
  111. package/dashboards/express/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
  112. package/dashboards/express/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
  113. package/dashboards/express/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
  114. package/dashboards/express/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
  115. package/dashboards/express/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
  116. package/dashboards/express/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
  117. package/dashboards/express/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
  118. package/dashboards/express/node_modules/call-bind-apply-helpers/index.js +0 -15
  119. package/dashboards/express/node_modules/call-bind-apply-helpers/package.json +0 -85
  120. package/dashboards/express/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
  121. package/dashboards/express/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
  122. package/dashboards/express/node_modules/call-bind-apply-helpers/test/index.js +0 -63
  123. package/dashboards/express/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
  124. package/dashboards/express/node_modules/call-bound/.eslintrc +0 -13
  125. package/dashboards/express/node_modules/call-bound/.github/FUNDING.yml +0 -12
  126. package/dashboards/express/node_modules/call-bound/.nycrc +0 -9
  127. package/dashboards/express/node_modules/call-bound/CHANGELOG.md +0 -42
  128. package/dashboards/express/node_modules/call-bound/LICENSE +0 -21
  129. package/dashboards/express/node_modules/call-bound/README.md +0 -53
  130. package/dashboards/express/node_modules/call-bound/index.d.ts +0 -94
  131. package/dashboards/express/node_modules/call-bound/index.js +0 -19
  132. package/dashboards/express/node_modules/call-bound/package.json +0 -99
  133. package/dashboards/express/node_modules/call-bound/test/index.js +0 -61
  134. package/dashboards/express/node_modules/call-bound/tsconfig.json +0 -10
  135. package/dashboards/express/node_modules/content-disposition/HISTORY.md +0 -72
  136. package/dashboards/express/node_modules/content-disposition/LICENSE +0 -22
  137. package/dashboards/express/node_modules/content-disposition/README.md +0 -142
  138. package/dashboards/express/node_modules/content-disposition/index.js +0 -458
  139. package/dashboards/express/node_modules/content-disposition/package.json +0 -43
  140. package/dashboards/express/node_modules/content-type/HISTORY.md +0 -29
  141. package/dashboards/express/node_modules/content-type/LICENSE +0 -22
  142. package/dashboards/express/node_modules/content-type/README.md +0 -94
  143. package/dashboards/express/node_modules/content-type/index.js +0 -225
  144. package/dashboards/express/node_modules/content-type/package.json +0 -42
  145. package/dashboards/express/node_modules/cookie/LICENSE +0 -24
  146. package/dashboards/express/node_modules/cookie/README.md +0 -317
  147. package/dashboards/express/node_modules/cookie/SECURITY.md +0 -25
  148. package/dashboards/express/node_modules/cookie/index.js +0 -335
  149. package/dashboards/express/node_modules/cookie/package.json +0 -44
  150. package/dashboards/express/node_modules/cookie-signature/History.md +0 -70
  151. package/dashboards/express/node_modules/cookie-signature/LICENSE +0 -22
  152. package/dashboards/express/node_modules/cookie-signature/Readme.md +0 -23
  153. package/dashboards/express/node_modules/cookie-signature/index.js +0 -47
  154. package/dashboards/express/node_modules/cookie-signature/package.json +0 -24
  155. package/dashboards/express/node_modules/debug/LICENSE +0 -20
  156. package/dashboards/express/node_modules/debug/README.md +0 -481
  157. package/dashboards/express/node_modules/debug/package.json +0 -64
  158. package/dashboards/express/node_modules/debug/src/browser.js +0 -272
  159. package/dashboards/express/node_modules/debug/src/common.js +0 -292
  160. package/dashboards/express/node_modules/debug/src/index.js +0 -10
  161. package/dashboards/express/node_modules/debug/src/node.js +0 -263
  162. package/dashboards/express/node_modules/depd/History.md +0 -103
  163. package/dashboards/express/node_modules/depd/LICENSE +0 -22
  164. package/dashboards/express/node_modules/depd/Readme.md +0 -280
  165. package/dashboards/express/node_modules/depd/index.js +0 -538
  166. package/dashboards/express/node_modules/depd/lib/browser/index.js +0 -77
  167. package/dashboards/express/node_modules/depd/package.json +0 -45
  168. package/dashboards/express/node_modules/dunder-proto/.eslintrc +0 -5
  169. package/dashboards/express/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
  170. package/dashboards/express/node_modules/dunder-proto/.nycrc +0 -13
  171. package/dashboards/express/node_modules/dunder-proto/CHANGELOG.md +0 -24
  172. package/dashboards/express/node_modules/dunder-proto/LICENSE +0 -21
  173. package/dashboards/express/node_modules/dunder-proto/README.md +0 -54
  174. package/dashboards/express/node_modules/dunder-proto/get.d.ts +0 -5
  175. package/dashboards/express/node_modules/dunder-proto/get.js +0 -30
  176. package/dashboards/express/node_modules/dunder-proto/package.json +0 -76
  177. package/dashboards/express/node_modules/dunder-proto/set.d.ts +0 -5
  178. package/dashboards/express/node_modules/dunder-proto/set.js +0 -35
  179. package/dashboards/express/node_modules/dunder-proto/test/get.js +0 -34
  180. package/dashboards/express/node_modules/dunder-proto/test/index.js +0 -4
  181. package/dashboards/express/node_modules/dunder-proto/test/set.js +0 -50
  182. package/dashboards/express/node_modules/dunder-proto/tsconfig.json +0 -9
  183. package/dashboards/express/node_modules/ee-first/LICENSE +0 -22
  184. package/dashboards/express/node_modules/ee-first/README.md +0 -80
  185. package/dashboards/express/node_modules/ee-first/index.js +0 -95
  186. package/dashboards/express/node_modules/ee-first/package.json +0 -29
  187. package/dashboards/express/node_modules/encodeurl/LICENSE +0 -22
  188. package/dashboards/express/node_modules/encodeurl/README.md +0 -109
  189. package/dashboards/express/node_modules/encodeurl/index.js +0 -60
  190. package/dashboards/express/node_modules/encodeurl/package.json +0 -40
  191. package/dashboards/express/node_modules/es-define-property/.eslintrc +0 -13
  192. package/dashboards/express/node_modules/es-define-property/.github/FUNDING.yml +0 -12
  193. package/dashboards/express/node_modules/es-define-property/.nycrc +0 -9
  194. package/dashboards/express/node_modules/es-define-property/CHANGELOG.md +0 -29
  195. package/dashboards/express/node_modules/es-define-property/LICENSE +0 -21
  196. package/dashboards/express/node_modules/es-define-property/README.md +0 -49
  197. package/dashboards/express/node_modules/es-define-property/index.d.ts +0 -3
  198. package/dashboards/express/node_modules/es-define-property/index.js +0 -14
  199. package/dashboards/express/node_modules/es-define-property/package.json +0 -81
  200. package/dashboards/express/node_modules/es-define-property/test/index.js +0 -56
  201. package/dashboards/express/node_modules/es-define-property/tsconfig.json +0 -10
  202. package/dashboards/express/node_modules/es-errors/.eslintrc +0 -5
  203. package/dashboards/express/node_modules/es-errors/.github/FUNDING.yml +0 -12
  204. package/dashboards/express/node_modules/es-errors/CHANGELOG.md +0 -40
  205. package/dashboards/express/node_modules/es-errors/LICENSE +0 -21
  206. package/dashboards/express/node_modules/es-errors/README.md +0 -55
  207. package/dashboards/express/node_modules/es-errors/eval.d.ts +0 -3
  208. package/dashboards/express/node_modules/es-errors/eval.js +0 -4
  209. package/dashboards/express/node_modules/es-errors/index.d.ts +0 -3
  210. package/dashboards/express/node_modules/es-errors/index.js +0 -4
  211. package/dashboards/express/node_modules/es-errors/package.json +0 -80
  212. package/dashboards/express/node_modules/es-errors/range.d.ts +0 -3
  213. package/dashboards/express/node_modules/es-errors/range.js +0 -4
  214. package/dashboards/express/node_modules/es-errors/ref.d.ts +0 -3
  215. package/dashboards/express/node_modules/es-errors/ref.js +0 -4
  216. package/dashboards/express/node_modules/es-errors/syntax.d.ts +0 -3
  217. package/dashboards/express/node_modules/es-errors/syntax.js +0 -4
  218. package/dashboards/express/node_modules/es-errors/test/index.js +0 -19
  219. package/dashboards/express/node_modules/es-errors/tsconfig.json +0 -49
  220. package/dashboards/express/node_modules/es-errors/type.d.ts +0 -3
  221. package/dashboards/express/node_modules/es-errors/type.js +0 -4
  222. package/dashboards/express/node_modules/es-errors/uri.d.ts +0 -3
  223. package/dashboards/express/node_modules/es-errors/uri.js +0 -4
  224. package/dashboards/express/node_modules/es-object-atoms/.eslintrc +0 -16
  225. package/dashboards/express/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
  226. package/dashboards/express/node_modules/es-object-atoms/CHANGELOG.md +0 -37
  227. package/dashboards/express/node_modules/es-object-atoms/LICENSE +0 -21
  228. package/dashboards/express/node_modules/es-object-atoms/README.md +0 -63
  229. package/dashboards/express/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
  230. package/dashboards/express/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
  231. package/dashboards/express/node_modules/es-object-atoms/ToObject.d.ts +0 -7
  232. package/dashboards/express/node_modules/es-object-atoms/ToObject.js +0 -10
  233. package/dashboards/express/node_modules/es-object-atoms/index.d.ts +0 -3
  234. package/dashboards/express/node_modules/es-object-atoms/index.js +0 -4
  235. package/dashboards/express/node_modules/es-object-atoms/isObject.d.ts +0 -3
  236. package/dashboards/express/node_modules/es-object-atoms/isObject.js +0 -6
  237. package/dashboards/express/node_modules/es-object-atoms/package.json +0 -80
  238. package/dashboards/express/node_modules/es-object-atoms/test/index.js +0 -38
  239. package/dashboards/express/node_modules/es-object-atoms/tsconfig.json +0 -6
  240. package/dashboards/express/node_modules/escape-html/LICENSE +0 -24
  241. package/dashboards/express/node_modules/escape-html/Readme.md +0 -43
  242. package/dashboards/express/node_modules/escape-html/index.js +0 -78
  243. package/dashboards/express/node_modules/escape-html/package.json +0 -24
  244. package/dashboards/express/node_modules/etag/HISTORY.md +0 -83
  245. package/dashboards/express/node_modules/etag/LICENSE +0 -22
  246. package/dashboards/express/node_modules/etag/README.md +0 -159
  247. package/dashboards/express/node_modules/etag/index.js +0 -131
  248. package/dashboards/express/node_modules/etag/package.json +0 -47
  249. package/dashboards/express/node_modules/express/LICENSE +0 -24
  250. package/dashboards/express/node_modules/express/Readme.md +0 -276
  251. package/dashboards/express/node_modules/express/index.js +0 -11
  252. package/dashboards/express/node_modules/express/lib/application.js +0 -631
  253. package/dashboards/express/node_modules/express/lib/express.js +0 -81
  254. package/dashboards/express/node_modules/express/lib/request.js +0 -514
  255. package/dashboards/express/node_modules/express/lib/response.js +0 -1053
  256. package/dashboards/express/node_modules/express/lib/utils.js +0 -271
  257. package/dashboards/express/node_modules/express/lib/view.js +0 -205
  258. package/dashboards/express/node_modules/express/package.json +0 -99
  259. package/dashboards/express/node_modules/express-session/LICENSE +0 -24
  260. package/dashboards/express/node_modules/express-session/README.md +0 -1061
  261. package/dashboards/express/node_modules/express-session/index.js +0 -700
  262. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/History.md +0 -42
  263. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/Readme.md +0 -42
  264. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/index.js +0 -51
  265. package/dashboards/express/node_modules/express-session/node_modules/cookie-signature/package.json +0 -18
  266. package/dashboards/express/node_modules/express-session/node_modules/debug/.coveralls.yml +0 -1
  267. package/dashboards/express/node_modules/express-session/node_modules/debug/.eslintrc +0 -11
  268. package/dashboards/express/node_modules/express-session/node_modules/debug/.travis.yml +0 -14
  269. package/dashboards/express/node_modules/express-session/node_modules/debug/CHANGELOG.md +0 -362
  270. package/dashboards/express/node_modules/express-session/node_modules/debug/LICENSE +0 -19
  271. package/dashboards/express/node_modules/express-session/node_modules/debug/Makefile +0 -50
  272. package/dashboards/express/node_modules/express-session/node_modules/debug/README.md +0 -312
  273. package/dashboards/express/node_modules/express-session/node_modules/debug/component.json +0 -19
  274. package/dashboards/express/node_modules/express-session/node_modules/debug/karma.conf.js +0 -70
  275. package/dashboards/express/node_modules/express-session/node_modules/debug/node.js +0 -1
  276. package/dashboards/express/node_modules/express-session/node_modules/debug/package.json +0 -49
  277. package/dashboards/express/node_modules/express-session/node_modules/debug/src/browser.js +0 -185
  278. package/dashboards/express/node_modules/express-session/node_modules/debug/src/debug.js +0 -202
  279. package/dashboards/express/node_modules/express-session/node_modules/debug/src/index.js +0 -10
  280. package/dashboards/express/node_modules/express-session/node_modules/debug/src/inspector-log.js +0 -15
  281. package/dashboards/express/node_modules/express-session/node_modules/debug/src/node.js +0 -248
  282. package/dashboards/express/node_modules/express-session/node_modules/ms/index.js +0 -152
  283. package/dashboards/express/node_modules/express-session/node_modules/ms/license.md +0 -21
  284. package/dashboards/express/node_modules/express-session/node_modules/ms/package.json +0 -37
  285. package/dashboards/express/node_modules/express-session/node_modules/ms/readme.md +0 -51
  286. package/dashboards/express/node_modules/express-session/package.json +0 -50
  287. package/dashboards/express/node_modules/express-session/session/cookie.js +0 -152
  288. package/dashboards/express/node_modules/express-session/session/memory.js +0 -187
  289. package/dashboards/express/node_modules/express-session/session/session.js +0 -143
  290. package/dashboards/express/node_modules/express-session/session/store.js +0 -102
  291. package/dashboards/express/node_modules/finalhandler/HISTORY.md +0 -239
  292. package/dashboards/express/node_modules/finalhandler/LICENSE +0 -22
  293. package/dashboards/express/node_modules/finalhandler/README.md +0 -150
  294. package/dashboards/express/node_modules/finalhandler/index.js +0 -293
  295. package/dashboards/express/node_modules/finalhandler/package.json +0 -47
  296. package/dashboards/express/node_modules/forwarded/HISTORY.md +0 -21
  297. package/dashboards/express/node_modules/forwarded/LICENSE +0 -22
  298. package/dashboards/express/node_modules/forwarded/README.md +0 -57
  299. package/dashboards/express/node_modules/forwarded/index.js +0 -90
  300. package/dashboards/express/node_modules/forwarded/package.json +0 -45
  301. package/dashboards/express/node_modules/fresh/HISTORY.md +0 -80
  302. package/dashboards/express/node_modules/fresh/LICENSE +0 -23
  303. package/dashboards/express/node_modules/fresh/README.md +0 -117
  304. package/dashboards/express/node_modules/fresh/index.js +0 -136
  305. package/dashboards/express/node_modules/fresh/package.json +0 -46
  306. package/dashboards/express/node_modules/function-bind/.eslintrc +0 -21
  307. package/dashboards/express/node_modules/function-bind/.github/FUNDING.yml +0 -12
  308. package/dashboards/express/node_modules/function-bind/.github/SECURITY.md +0 -3
  309. package/dashboards/express/node_modules/function-bind/.nycrc +0 -13
  310. package/dashboards/express/node_modules/function-bind/CHANGELOG.md +0 -136
  311. package/dashboards/express/node_modules/function-bind/LICENSE +0 -20
  312. package/dashboards/express/node_modules/function-bind/README.md +0 -46
  313. package/dashboards/express/node_modules/function-bind/implementation.js +0 -84
  314. package/dashboards/express/node_modules/function-bind/index.js +0 -5
  315. package/dashboards/express/node_modules/function-bind/package.json +0 -87
  316. package/dashboards/express/node_modules/function-bind/test/.eslintrc +0 -9
  317. package/dashboards/express/node_modules/function-bind/test/index.js +0 -252
  318. package/dashboards/express/node_modules/get-intrinsic/.eslintrc +0 -42
  319. package/dashboards/express/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  320. package/dashboards/express/node_modules/get-intrinsic/.nycrc +0 -9
  321. package/dashboards/express/node_modules/get-intrinsic/CHANGELOG.md +0 -186
  322. package/dashboards/express/node_modules/get-intrinsic/LICENSE +0 -21
  323. package/dashboards/express/node_modules/get-intrinsic/README.md +0 -71
  324. package/dashboards/express/node_modules/get-intrinsic/index.js +0 -378
  325. package/dashboards/express/node_modules/get-intrinsic/package.json +0 -97
  326. package/dashboards/express/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  327. package/dashboards/express/node_modules/get-proto/.eslintrc +0 -10
  328. package/dashboards/express/node_modules/get-proto/.github/FUNDING.yml +0 -12
  329. package/dashboards/express/node_modules/get-proto/.nycrc +0 -9
  330. package/dashboards/express/node_modules/get-proto/CHANGELOG.md +0 -21
  331. package/dashboards/express/node_modules/get-proto/LICENSE +0 -21
  332. package/dashboards/express/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
  333. package/dashboards/express/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
  334. package/dashboards/express/node_modules/get-proto/README.md +0 -50
  335. package/dashboards/express/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
  336. package/dashboards/express/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
  337. package/dashboards/express/node_modules/get-proto/index.d.ts +0 -5
  338. package/dashboards/express/node_modules/get-proto/index.js +0 -27
  339. package/dashboards/express/node_modules/get-proto/package.json +0 -81
  340. package/dashboards/express/node_modules/get-proto/test/index.js +0 -68
  341. package/dashboards/express/node_modules/get-proto/tsconfig.json +0 -9
  342. package/dashboards/express/node_modules/gopd/.eslintrc +0 -16
  343. package/dashboards/express/node_modules/gopd/.github/FUNDING.yml +0 -12
  344. package/dashboards/express/node_modules/gopd/CHANGELOG.md +0 -45
  345. package/dashboards/express/node_modules/gopd/LICENSE +0 -21
  346. package/dashboards/express/node_modules/gopd/README.md +0 -40
  347. package/dashboards/express/node_modules/gopd/gOPD.d.ts +0 -1
  348. package/dashboards/express/node_modules/gopd/gOPD.js +0 -4
  349. package/dashboards/express/node_modules/gopd/index.d.ts +0 -5
  350. package/dashboards/express/node_modules/gopd/index.js +0 -15
  351. package/dashboards/express/node_modules/gopd/package.json +0 -77
  352. package/dashboards/express/node_modules/gopd/test/index.js +0 -36
  353. package/dashboards/express/node_modules/gopd/tsconfig.json +0 -9
  354. package/dashboards/express/node_modules/has-symbols/.eslintrc +0 -11
  355. package/dashboards/express/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  356. package/dashboards/express/node_modules/has-symbols/.nycrc +0 -9
  357. package/dashboards/express/node_modules/has-symbols/CHANGELOG.md +0 -91
  358. package/dashboards/express/node_modules/has-symbols/LICENSE +0 -21
  359. package/dashboards/express/node_modules/has-symbols/README.md +0 -46
  360. package/dashboards/express/node_modules/has-symbols/index.d.ts +0 -3
  361. package/dashboards/express/node_modules/has-symbols/index.js +0 -14
  362. package/dashboards/express/node_modules/has-symbols/package.json +0 -111
  363. package/dashboards/express/node_modules/has-symbols/shams.d.ts +0 -3
  364. package/dashboards/express/node_modules/has-symbols/shams.js +0 -45
  365. package/dashboards/express/node_modules/has-symbols/test/index.js +0 -22
  366. package/dashboards/express/node_modules/has-symbols/test/shams/core-js.js +0 -29
  367. package/dashboards/express/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
  368. package/dashboards/express/node_modules/has-symbols/test/tests.js +0 -58
  369. package/dashboards/express/node_modules/has-symbols/tsconfig.json +0 -10
  370. package/dashboards/express/node_modules/hasown/.eslintrc +0 -5
  371. package/dashboards/express/node_modules/hasown/.github/FUNDING.yml +0 -12
  372. package/dashboards/express/node_modules/hasown/.nycrc +0 -13
  373. package/dashboards/express/node_modules/hasown/CHANGELOG.md +0 -40
  374. package/dashboards/express/node_modules/hasown/LICENSE +0 -21
  375. package/dashboards/express/node_modules/hasown/README.md +0 -40
  376. package/dashboards/express/node_modules/hasown/index.d.ts +0 -3
  377. package/dashboards/express/node_modules/hasown/index.js +0 -8
  378. package/dashboards/express/node_modules/hasown/package.json +0 -92
  379. package/dashboards/express/node_modules/hasown/tsconfig.json +0 -6
  380. package/dashboards/express/node_modules/http-errors/HISTORY.md +0 -186
  381. package/dashboards/express/node_modules/http-errors/LICENSE +0 -23
  382. package/dashboards/express/node_modules/http-errors/README.md +0 -169
  383. package/dashboards/express/node_modules/http-errors/index.js +0 -290
  384. package/dashboards/express/node_modules/http-errors/package.json +0 -54
  385. package/dashboards/express/node_modules/iconv-lite/LICENSE +0 -21
  386. package/dashboards/express/node_modules/iconv-lite/README.md +0 -138
  387. package/dashboards/express/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -532
  388. package/dashboards/express/node_modules/iconv-lite/encodings/dbcs-data.js +0 -185
  389. package/dashboards/express/node_modules/iconv-lite/encodings/index.js +0 -23
  390. package/dashboards/express/node_modules/iconv-lite/encodings/internal.js +0 -218
  391. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -75
  392. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
  393. package/dashboards/express/node_modules/iconv-lite/encodings/sbcs-data.js +0 -178
  394. package/dashboards/express/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
  395. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
  396. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
  397. package/dashboards/express/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
  398. package/dashboards/express/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
  399. package/dashboards/express/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
  400. package/dashboards/express/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -56
  401. package/dashboards/express/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
  402. package/dashboards/express/node_modules/iconv-lite/encodings/utf16.js +0 -187
  403. package/dashboards/express/node_modules/iconv-lite/encodings/utf32.js +0 -307
  404. package/dashboards/express/node_modules/iconv-lite/encodings/utf7.js +0 -283
  405. package/dashboards/express/node_modules/iconv-lite/lib/bom-handling.js +0 -48
  406. package/dashboards/express/node_modules/iconv-lite/lib/helpers/merge-exports.js +0 -13
  407. package/dashboards/express/node_modules/iconv-lite/lib/index.d.ts +0 -129
  408. package/dashboards/express/node_modules/iconv-lite/lib/index.js +0 -182
  409. package/dashboards/express/node_modules/iconv-lite/lib/streams.js +0 -105
  410. package/dashboards/express/node_modules/iconv-lite/package.json +0 -70
  411. package/dashboards/express/node_modules/iconv-lite/types/encodings.d.ts +0 -423
  412. package/dashboards/express/node_modules/inherits/LICENSE +0 -16
  413. package/dashboards/express/node_modules/inherits/README.md +0 -42
  414. package/dashboards/express/node_modules/inherits/inherits.js +0 -9
  415. package/dashboards/express/node_modules/inherits/inherits_browser.js +0 -27
  416. package/dashboards/express/node_modules/inherits/package.json +0 -29
  417. package/dashboards/express/node_modules/ipaddr.js/LICENSE +0 -19
  418. package/dashboards/express/node_modules/ipaddr.js/README.md +0 -233
  419. package/dashboards/express/node_modules/ipaddr.js/ipaddr.min.js +0 -1
  420. package/dashboards/express/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
  421. package/dashboards/express/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
  422. package/dashboards/express/node_modules/ipaddr.js/package.json +0 -35
  423. package/dashboards/express/node_modules/is-promise/LICENSE +0 -19
  424. package/dashboards/express/node_modules/is-promise/index.d.ts +0 -2
  425. package/dashboards/express/node_modules/is-promise/index.js +0 -6
  426. package/dashboards/express/node_modules/is-promise/index.mjs +0 -3
  427. package/dashboards/express/node_modules/is-promise/package.json +0 -30
  428. package/dashboards/express/node_modules/is-promise/readme.md +0 -33
  429. package/dashboards/express/node_modules/math-intrinsics/.eslintrc +0 -16
  430. package/dashboards/express/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
  431. package/dashboards/express/node_modules/math-intrinsics/CHANGELOG.md +0 -24
  432. package/dashboards/express/node_modules/math-intrinsics/LICENSE +0 -21
  433. package/dashboards/express/node_modules/math-intrinsics/README.md +0 -50
  434. package/dashboards/express/node_modules/math-intrinsics/abs.d.ts +0 -1
  435. package/dashboards/express/node_modules/math-intrinsics/abs.js +0 -4
  436. package/dashboards/express/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
  437. package/dashboards/express/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
  438. package/dashboards/express/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
  439. package/dashboards/express/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
  440. package/dashboards/express/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
  441. package/dashboards/express/node_modules/math-intrinsics/constants/maxValue.js +0 -5
  442. package/dashboards/express/node_modules/math-intrinsics/floor.d.ts +0 -1
  443. package/dashboards/express/node_modules/math-intrinsics/floor.js +0 -4
  444. package/dashboards/express/node_modules/math-intrinsics/isFinite.d.ts +0 -3
  445. package/dashboards/express/node_modules/math-intrinsics/isFinite.js +0 -12
  446. package/dashboards/express/node_modules/math-intrinsics/isInteger.d.ts +0 -3
  447. package/dashboards/express/node_modules/math-intrinsics/isInteger.js +0 -16
  448. package/dashboards/express/node_modules/math-intrinsics/isNaN.d.ts +0 -1
  449. package/dashboards/express/node_modules/math-intrinsics/isNaN.js +0 -6
  450. package/dashboards/express/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
  451. package/dashboards/express/node_modules/math-intrinsics/isNegativeZero.js +0 -6
  452. package/dashboards/express/node_modules/math-intrinsics/max.d.ts +0 -1
  453. package/dashboards/express/node_modules/math-intrinsics/max.js +0 -4
  454. package/dashboards/express/node_modules/math-intrinsics/min.d.ts +0 -1
  455. package/dashboards/express/node_modules/math-intrinsics/min.js +0 -4
  456. package/dashboards/express/node_modules/math-intrinsics/mod.d.ts +0 -3
  457. package/dashboards/express/node_modules/math-intrinsics/mod.js +0 -9
  458. package/dashboards/express/node_modules/math-intrinsics/package.json +0 -86
  459. package/dashboards/express/node_modules/math-intrinsics/pow.d.ts +0 -1
  460. package/dashboards/express/node_modules/math-intrinsics/pow.js +0 -4
  461. package/dashboards/express/node_modules/math-intrinsics/round.d.ts +0 -1
  462. package/dashboards/express/node_modules/math-intrinsics/round.js +0 -4
  463. package/dashboards/express/node_modules/math-intrinsics/sign.d.ts +0 -3
  464. package/dashboards/express/node_modules/math-intrinsics/sign.js +0 -11
  465. package/dashboards/express/node_modules/math-intrinsics/test/index.js +0 -192
  466. package/dashboards/express/node_modules/math-intrinsics/tsconfig.json +0 -3
  467. package/dashboards/express/node_modules/media-typer/HISTORY.md +0 -50
  468. package/dashboards/express/node_modules/media-typer/LICENSE +0 -22
  469. package/dashboards/express/node_modules/media-typer/README.md +0 -93
  470. package/dashboards/express/node_modules/media-typer/index.js +0 -143
  471. package/dashboards/express/node_modules/media-typer/package.json +0 -33
  472. package/dashboards/express/node_modules/merge-descriptors/index.d.ts +0 -11
  473. package/dashboards/express/node_modules/merge-descriptors/index.js +0 -26
  474. package/dashboards/express/node_modules/merge-descriptors/license +0 -11
  475. package/dashboards/express/node_modules/merge-descriptors/package.json +0 -50
  476. package/dashboards/express/node_modules/merge-descriptors/readme.md +0 -55
  477. package/dashboards/express/node_modules/mime-db/HISTORY.md +0 -541
  478. package/dashboards/express/node_modules/mime-db/LICENSE +0 -23
  479. package/dashboards/express/node_modules/mime-db/README.md +0 -109
  480. package/dashboards/express/node_modules/mime-db/db.json +0 -9342
  481. package/dashboards/express/node_modules/mime-db/index.js +0 -12
  482. package/dashboards/express/node_modules/mime-db/package.json +0 -56
  483. package/dashboards/express/node_modules/mime-types/HISTORY.md +0 -428
  484. package/dashboards/express/node_modules/mime-types/LICENSE +0 -23
  485. package/dashboards/express/node_modules/mime-types/README.md +0 -126
  486. package/dashboards/express/node_modules/mime-types/index.js +0 -211
  487. package/dashboards/express/node_modules/mime-types/mimeScore.js +0 -57
  488. package/dashboards/express/node_modules/mime-types/package.json +0 -49
  489. package/dashboards/express/node_modules/ms/index.js +0 -162
  490. package/dashboards/express/node_modules/ms/license.md +0 -21
  491. package/dashboards/express/node_modules/ms/package.json +0 -38
  492. package/dashboards/express/node_modules/ms/readme.md +0 -59
  493. package/dashboards/express/node_modules/negotiator/HISTORY.md +0 -114
  494. package/dashboards/express/node_modules/negotiator/LICENSE +0 -24
  495. package/dashboards/express/node_modules/negotiator/README.md +0 -212
  496. package/dashboards/express/node_modules/negotiator/index.js +0 -83
  497. package/dashboards/express/node_modules/negotiator/lib/charset.js +0 -169
  498. package/dashboards/express/node_modules/negotiator/lib/encoding.js +0 -205
  499. package/dashboards/express/node_modules/negotiator/lib/language.js +0 -179
  500. package/dashboards/express/node_modules/negotiator/lib/mediaType.js +0 -294
  501. package/dashboards/express/node_modules/negotiator/package.json +0 -43
  502. package/dashboards/express/node_modules/object-inspect/.eslintrc +0 -53
  503. package/dashboards/express/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  504. package/dashboards/express/node_modules/object-inspect/.nycrc +0 -13
  505. package/dashboards/express/node_modules/object-inspect/CHANGELOG.md +0 -424
  506. package/dashboards/express/node_modules/object-inspect/LICENSE +0 -21
  507. package/dashboards/express/node_modules/object-inspect/example/all.js +0 -23
  508. package/dashboards/express/node_modules/object-inspect/example/circular.js +0 -6
  509. package/dashboards/express/node_modules/object-inspect/example/fn.js +0 -5
  510. package/dashboards/express/node_modules/object-inspect/example/inspect.js +0 -10
  511. package/dashboards/express/node_modules/object-inspect/index.js +0 -544
  512. package/dashboards/express/node_modules/object-inspect/package-support.json +0 -20
  513. package/dashboards/express/node_modules/object-inspect/package.json +0 -105
  514. package/dashboards/express/node_modules/object-inspect/readme.markdown +0 -84
  515. package/dashboards/express/node_modules/object-inspect/test/bigint.js +0 -58
  516. package/dashboards/express/node_modules/object-inspect/test/browser/dom.js +0 -15
  517. package/dashboards/express/node_modules/object-inspect/test/circular.js +0 -16
  518. package/dashboards/express/node_modules/object-inspect/test/deep.js +0 -12
  519. package/dashboards/express/node_modules/object-inspect/test/element.js +0 -53
  520. package/dashboards/express/node_modules/object-inspect/test/err.js +0 -48
  521. package/dashboards/express/node_modules/object-inspect/test/fakes.js +0 -29
  522. package/dashboards/express/node_modules/object-inspect/test/fn.js +0 -76
  523. package/dashboards/express/node_modules/object-inspect/test/global.js +0 -17
  524. package/dashboards/express/node_modules/object-inspect/test/has.js +0 -15
  525. package/dashboards/express/node_modules/object-inspect/test/holes.js +0 -15
  526. package/dashboards/express/node_modules/object-inspect/test/indent-option.js +0 -271
  527. package/dashboards/express/node_modules/object-inspect/test/inspect.js +0 -139
  528. package/dashboards/express/node_modules/object-inspect/test/lowbyte.js +0 -12
  529. package/dashboards/express/node_modules/object-inspect/test/number.js +0 -58
  530. package/dashboards/express/node_modules/object-inspect/test/quoteStyle.js +0 -26
  531. package/dashboards/express/node_modules/object-inspect/test/toStringTag.js +0 -40
  532. package/dashboards/express/node_modules/object-inspect/test/undef.js +0 -12
  533. package/dashboards/express/node_modules/object-inspect/test/values.js +0 -261
  534. package/dashboards/express/node_modules/object-inspect/test-core-js.js +0 -26
  535. package/dashboards/express/node_modules/object-inspect/util.inspect.js +0 -1
  536. package/dashboards/express/node_modules/on-finished/HISTORY.md +0 -98
  537. package/dashboards/express/node_modules/on-finished/LICENSE +0 -23
  538. package/dashboards/express/node_modules/on-finished/README.md +0 -162
  539. package/dashboards/express/node_modules/on-finished/index.js +0 -234
  540. package/dashboards/express/node_modules/on-finished/package.json +0 -39
  541. package/dashboards/express/node_modules/on-headers/HISTORY.md +0 -26
  542. package/dashboards/express/node_modules/on-headers/LICENSE +0 -22
  543. package/dashboards/express/node_modules/on-headers/README.md +0 -81
  544. package/dashboards/express/node_modules/on-headers/index.js +0 -180
  545. package/dashboards/express/node_modules/on-headers/package.json +0 -44
  546. package/dashboards/express/node_modules/once/LICENSE +0 -15
  547. package/dashboards/express/node_modules/once/README.md +0 -79
  548. package/dashboards/express/node_modules/once/once.js +0 -42
  549. package/dashboards/express/node_modules/once/package.json +0 -33
  550. package/dashboards/express/node_modules/parseurl/HISTORY.md +0 -58
  551. package/dashboards/express/node_modules/parseurl/LICENSE +0 -24
  552. package/dashboards/express/node_modules/parseurl/README.md +0 -133
  553. package/dashboards/express/node_modules/parseurl/index.js +0 -158
  554. package/dashboards/express/node_modules/parseurl/package.json +0 -40
  555. package/dashboards/express/node_modules/path-to-regexp/LICENSE +0 -21
  556. package/dashboards/express/node_modules/path-to-regexp/Readme.md +0 -224
  557. package/dashboards/express/node_modules/path-to-regexp/dist/index.d.ts +0 -144
  558. package/dashboards/express/node_modules/path-to-regexp/dist/index.js +0 -409
  559. package/dashboards/express/node_modules/path-to-regexp/dist/index.js.map +0 -1
  560. package/dashboards/express/node_modules/path-to-regexp/package.json +0 -64
  561. package/dashboards/express/node_modules/proxy-addr/HISTORY.md +0 -161
  562. package/dashboards/express/node_modules/proxy-addr/LICENSE +0 -22
  563. package/dashboards/express/node_modules/proxy-addr/README.md +0 -139
  564. package/dashboards/express/node_modules/proxy-addr/index.js +0 -327
  565. package/dashboards/express/node_modules/proxy-addr/package.json +0 -47
  566. package/dashboards/express/node_modules/qs/.editorconfig +0 -46
  567. package/dashboards/express/node_modules/qs/.github/FUNDING.yml +0 -12
  568. package/dashboards/express/node_modules/qs/.github/SECURITY.md +0 -11
  569. package/dashboards/express/node_modules/qs/.github/THREAT_MODEL.md +0 -78
  570. package/dashboards/express/node_modules/qs/.nycrc +0 -13
  571. package/dashboards/express/node_modules/qs/CHANGELOG.md +0 -806
  572. package/dashboards/express/node_modules/qs/LICENSE.md +0 -29
  573. package/dashboards/express/node_modules/qs/README.md +0 -758
  574. package/dashboards/express/node_modules/qs/dist/qs.js +0 -141
  575. package/dashboards/express/node_modules/qs/eslint.config.mjs +0 -56
  576. package/dashboards/express/node_modules/qs/lib/formats.js +0 -23
  577. package/dashboards/express/node_modules/qs/lib/index.js +0 -11
  578. package/dashboards/express/node_modules/qs/lib/parse.js +0 -373
  579. package/dashboards/express/node_modules/qs/lib/stringify.js +0 -356
  580. package/dashboards/express/node_modules/qs/lib/utils.js +0 -342
  581. package/dashboards/express/node_modules/qs/package.json +0 -94
  582. package/dashboards/express/node_modules/qs/test/empty-keys-cases.js +0 -267
  583. package/dashboards/express/node_modules/qs/test/parse.js +0 -1568
  584. package/dashboards/express/node_modules/qs/test/stringify.js +0 -1310
  585. package/dashboards/express/node_modules/qs/test/utils.js +0 -404
  586. package/dashboards/express/node_modules/random-bytes/HISTORY.md +0 -4
  587. package/dashboards/express/node_modules/random-bytes/LICENSE +0 -21
  588. package/dashboards/express/node_modules/random-bytes/README.md +0 -77
  589. package/dashboards/express/node_modules/random-bytes/index.js +0 -101
  590. package/dashboards/express/node_modules/random-bytes/package.json +0 -36
  591. package/dashboards/express/node_modules/range-parser/HISTORY.md +0 -56
  592. package/dashboards/express/node_modules/range-parser/LICENSE +0 -23
  593. package/dashboards/express/node_modules/range-parser/README.md +0 -84
  594. package/dashboards/express/node_modules/range-parser/index.js +0 -162
  595. package/dashboards/express/node_modules/range-parser/package.json +0 -44
  596. package/dashboards/express/node_modules/raw-body/LICENSE +0 -22
  597. package/dashboards/express/node_modules/raw-body/README.md +0 -223
  598. package/dashboards/express/node_modules/raw-body/index.d.ts +0 -85
  599. package/dashboards/express/node_modules/raw-body/index.js +0 -336
  600. package/dashboards/express/node_modules/raw-body/package.json +0 -46
  601. package/dashboards/express/node_modules/router/HISTORY.md +0 -228
  602. package/dashboards/express/node_modules/router/LICENSE +0 -23
  603. package/dashboards/express/node_modules/router/README.md +0 -416
  604. package/dashboards/express/node_modules/router/index.js +0 -748
  605. package/dashboards/express/node_modules/router/lib/layer.js +0 -247
  606. package/dashboards/express/node_modules/router/lib/route.js +0 -242
  607. package/dashboards/express/node_modules/router/package.json +0 -44
  608. package/dashboards/express/node_modules/safe-buffer/LICENSE +0 -21
  609. package/dashboards/express/node_modules/safe-buffer/README.md +0 -584
  610. package/dashboards/express/node_modules/safe-buffer/index.d.ts +0 -187
  611. package/dashboards/express/node_modules/safe-buffer/index.js +0 -65
  612. package/dashboards/express/node_modules/safe-buffer/package.json +0 -51
  613. package/dashboards/express/node_modules/safer-buffer/LICENSE +0 -21
  614. package/dashboards/express/node_modules/safer-buffer/Porting-Buffer.md +0 -268
  615. package/dashboards/express/node_modules/safer-buffer/Readme.md +0 -156
  616. package/dashboards/express/node_modules/safer-buffer/dangerous.js +0 -58
  617. package/dashboards/express/node_modules/safer-buffer/package.json +0 -34
  618. package/dashboards/express/node_modules/safer-buffer/safer.js +0 -77
  619. package/dashboards/express/node_modules/safer-buffer/tests.js +0 -406
  620. package/dashboards/express/node_modules/send/LICENSE +0 -23
  621. package/dashboards/express/node_modules/send/README.md +0 -317
  622. package/dashboards/express/node_modules/send/index.js +0 -997
  623. package/dashboards/express/node_modules/send/package.json +0 -63
  624. package/dashboards/express/node_modules/serve-static/LICENSE +0 -25
  625. package/dashboards/express/node_modules/serve-static/README.md +0 -253
  626. package/dashboards/express/node_modules/serve-static/index.js +0 -208
  627. package/dashboards/express/node_modules/serve-static/package.json +0 -44
  628. package/dashboards/express/node_modules/setprototypeof/LICENSE +0 -13
  629. package/dashboards/express/node_modules/setprototypeof/README.md +0 -31
  630. package/dashboards/express/node_modules/setprototypeof/index.d.ts +0 -2
  631. package/dashboards/express/node_modules/setprototypeof/index.js +0 -17
  632. package/dashboards/express/node_modules/setprototypeof/package.json +0 -38
  633. package/dashboards/express/node_modules/setprototypeof/test/index.js +0 -24
  634. package/dashboards/express/node_modules/side-channel/.editorconfig +0 -9
  635. package/dashboards/express/node_modules/side-channel/.eslintrc +0 -12
  636. package/dashboards/express/node_modules/side-channel/.github/FUNDING.yml +0 -12
  637. package/dashboards/express/node_modules/side-channel/.nycrc +0 -13
  638. package/dashboards/express/node_modules/side-channel/CHANGELOG.md +0 -110
  639. package/dashboards/express/node_modules/side-channel/LICENSE +0 -21
  640. package/dashboards/express/node_modules/side-channel/README.md +0 -61
  641. package/dashboards/express/node_modules/side-channel/index.d.ts +0 -14
  642. package/dashboards/express/node_modules/side-channel/index.js +0 -43
  643. package/dashboards/express/node_modules/side-channel/package.json +0 -85
  644. package/dashboards/express/node_modules/side-channel/test/index.js +0 -104
  645. package/dashboards/express/node_modules/side-channel/tsconfig.json +0 -9
  646. package/dashboards/express/node_modules/side-channel-list/.editorconfig +0 -9
  647. package/dashboards/express/node_modules/side-channel-list/.eslintrc +0 -11
  648. package/dashboards/express/node_modules/side-channel-list/.github/FUNDING.yml +0 -12
  649. package/dashboards/express/node_modules/side-channel-list/.nycrc +0 -13
  650. package/dashboards/express/node_modules/side-channel-list/CHANGELOG.md +0 -15
  651. package/dashboards/express/node_modules/side-channel-list/LICENSE +0 -21
  652. package/dashboards/express/node_modules/side-channel-list/README.md +0 -62
  653. package/dashboards/express/node_modules/side-channel-list/index.d.ts +0 -13
  654. package/dashboards/express/node_modules/side-channel-list/index.js +0 -113
  655. package/dashboards/express/node_modules/side-channel-list/list.d.ts +0 -14
  656. package/dashboards/express/node_modules/side-channel-list/package.json +0 -77
  657. package/dashboards/express/node_modules/side-channel-list/test/index.js +0 -104
  658. package/dashboards/express/node_modules/side-channel-list/tsconfig.json +0 -9
  659. package/dashboards/express/node_modules/side-channel-map/.editorconfig +0 -9
  660. package/dashboards/express/node_modules/side-channel-map/.eslintrc +0 -11
  661. package/dashboards/express/node_modules/side-channel-map/.github/FUNDING.yml +0 -12
  662. package/dashboards/express/node_modules/side-channel-map/.nycrc +0 -13
  663. package/dashboards/express/node_modules/side-channel-map/CHANGELOG.md +0 -22
  664. package/dashboards/express/node_modules/side-channel-map/LICENSE +0 -21
  665. package/dashboards/express/node_modules/side-channel-map/README.md +0 -62
  666. package/dashboards/express/node_modules/side-channel-map/index.d.ts +0 -15
  667. package/dashboards/express/node_modules/side-channel-map/index.js +0 -68
  668. package/dashboards/express/node_modules/side-channel-map/package.json +0 -80
  669. package/dashboards/express/node_modules/side-channel-map/test/index.js +0 -114
  670. package/dashboards/express/node_modules/side-channel-map/tsconfig.json +0 -9
  671. package/dashboards/express/node_modules/side-channel-weakmap/.editorconfig +0 -9
  672. package/dashboards/express/node_modules/side-channel-weakmap/.eslintrc +0 -12
  673. package/dashboards/express/node_modules/side-channel-weakmap/.github/FUNDING.yml +0 -12
  674. package/dashboards/express/node_modules/side-channel-weakmap/.nycrc +0 -13
  675. package/dashboards/express/node_modules/side-channel-weakmap/CHANGELOG.md +0 -28
  676. package/dashboards/express/node_modules/side-channel-weakmap/LICENSE +0 -21
  677. package/dashboards/express/node_modules/side-channel-weakmap/README.md +0 -62
  678. package/dashboards/express/node_modules/side-channel-weakmap/index.d.ts +0 -15
  679. package/dashboards/express/node_modules/side-channel-weakmap/index.js +0 -84
  680. package/dashboards/express/node_modules/side-channel-weakmap/package.json +0 -87
  681. package/dashboards/express/node_modules/side-channel-weakmap/test/index.js +0 -114
  682. package/dashboards/express/node_modules/side-channel-weakmap/tsconfig.json +0 -9
  683. package/dashboards/express/node_modules/statuses/HISTORY.md +0 -87
  684. package/dashboards/express/node_modules/statuses/LICENSE +0 -23
  685. package/dashboards/express/node_modules/statuses/README.md +0 -139
  686. package/dashboards/express/node_modules/statuses/codes.json +0 -65
  687. package/dashboards/express/node_modules/statuses/index.js +0 -146
  688. package/dashboards/express/node_modules/statuses/package.json +0 -49
  689. package/dashboards/express/node_modules/toidentifier/HISTORY.md +0 -9
  690. package/dashboards/express/node_modules/toidentifier/LICENSE +0 -21
  691. package/dashboards/express/node_modules/toidentifier/README.md +0 -61
  692. package/dashboards/express/node_modules/toidentifier/index.js +0 -32
  693. package/dashboards/express/node_modules/toidentifier/package.json +0 -38
  694. package/dashboards/express/node_modules/type-is/HISTORY.md +0 -292
  695. package/dashboards/express/node_modules/type-is/LICENSE +0 -23
  696. package/dashboards/express/node_modules/type-is/README.md +0 -198
  697. package/dashboards/express/node_modules/type-is/index.js +0 -250
  698. package/dashboards/express/node_modules/type-is/package.json +0 -47
  699. package/dashboards/express/node_modules/uid-safe/HISTORY.md +0 -61
  700. package/dashboards/express/node_modules/uid-safe/LICENSE +0 -22
  701. package/dashboards/express/node_modules/uid-safe/README.md +0 -77
  702. package/dashboards/express/node_modules/uid-safe/index.js +0 -107
  703. package/dashboards/express/node_modules/uid-safe/package.json +0 -46
  704. package/dashboards/express/node_modules/unpipe/HISTORY.md +0 -4
  705. package/dashboards/express/node_modules/unpipe/LICENSE +0 -22
  706. package/dashboards/express/node_modules/unpipe/README.md +0 -43
  707. package/dashboards/express/node_modules/unpipe/index.js +0 -69
  708. package/dashboards/express/node_modules/unpipe/package.json +0 -27
  709. package/dashboards/express/node_modules/vary/HISTORY.md +0 -39
  710. package/dashboards/express/node_modules/vary/LICENSE +0 -22
  711. package/dashboards/express/node_modules/vary/README.md +0 -101
  712. package/dashboards/express/node_modules/vary/index.js +0 -149
  713. package/dashboards/express/node_modules/vary/package.json +0 -43
  714. package/dashboards/express/node_modules/wrappy/LICENSE +0 -15
  715. package/dashboards/express/node_modules/wrappy/README.md +0 -36
  716. package/dashboards/express/node_modules/wrappy/package.json +0 -29
  717. package/dashboards/express/node_modules/wrappy/wrappy.js +0 -33
  718. package/dashboards/express/package-lock.json +0 -922
  719. package/dashboards/express/package.json +0 -17
  720. package/dashboards/express/public/styles.css +0 -175
  721. package/dashboards/express/routes/activity.js +0 -101
  722. package/dashboards/express/routes/agents.js +0 -771
  723. package/dashboards/express/routes/apiKeys.js +0 -107
  724. package/dashboards/express/routes/approvals.js +0 -100
  725. package/dashboards/express/routes/audit.js +0 -75
  726. package/dashboards/express/routes/auth.js +0 -38
  727. package/dashboards/express/routes/community-skills.js +0 -83
  728. package/dashboards/express/routes/compliance.js +0 -93
  729. package/dashboards/express/routes/dashboard.js +0 -65
  730. package/dashboards/express/routes/dlp.js +0 -165
  731. package/dashboards/express/routes/domain-status.js +0 -78
  732. package/dashboards/express/routes/guardrails.js +0 -195
  733. package/dashboards/express/routes/journal.js +0 -95
  734. package/dashboards/express/routes/knowledge-contributions.js +0 -85
  735. package/dashboards/express/routes/knowledge.js +0 -83
  736. package/dashboards/express/routes/messages.js +0 -97
  737. package/dashboards/express/routes/settings.js +0 -830
  738. package/dashboards/express/routes/skill-connections.js +0 -86
  739. package/dashboards/express/routes/skills.js +0 -141
  740. package/dashboards/express/routes/users.js +0 -69
  741. package/dashboards/express/routes/vault.js +0 -141
  742. package/dashboards/express/routes/workforce.js +0 -126
  743. package/dashboards/express/utils/api.js +0 -44
  744. package/dashboards/express/utils/helpers.js +0 -46
  745. package/dashboards/express/views/components/modal.js +0 -255
  746. package/dashboards/express/views/components/stats.js +0 -22
  747. package/dashboards/express/views/components/table.js +0 -31
  748. package/dashboards/express/views/layout.js +0 -94
  749. package/dashboards/express/views/login.js +0 -45
  750. package/dashboards/go/go.mod +0 -3
  751. package/dashboards/go/handlers/activity.go +0 -30
  752. package/dashboards/go/handlers/agents.go +0 -790
  753. package/dashboards/go/handlers/apikeys.go +0 -38
  754. package/dashboards/go/handlers/approvals.go +0 -31
  755. package/dashboards/go/handlers/audit.go +0 -52
  756. package/dashboards/go/handlers/auth.go +0 -39
  757. package/dashboards/go/handlers/community_skills.go +0 -32
  758. package/dashboards/go/handlers/compliance.go +0 -58
  759. package/dashboards/go/handlers/dashboard.go +0 -43
  760. package/dashboards/go/handlers/dlp.go +0 -78
  761. package/dashboards/go/handlers/domain_status.go +0 -62
  762. package/dashboards/go/handlers/guardrails.go +0 -89
  763. package/dashboards/go/handlers/journal.go +0 -60
  764. package/dashboards/go/handlers/knowledge.go +0 -35
  765. package/dashboards/go/handlers/knowledge_contributions.go +0 -37
  766. package/dashboards/go/handlers/messages.go +0 -59
  767. package/dashboards/go/handlers/settings.go +0 -951
  768. package/dashboards/go/handlers/skill_connections.go +0 -59
  769. package/dashboards/go/handlers/skills.go +0 -129
  770. package/dashboards/go/handlers/users.go +0 -54
  771. package/dashboards/go/handlers/vault.go +0 -85
  772. package/dashboards/go/handlers/workforce.go +0 -60
  773. package/dashboards/go/main.go +0 -71
  774. package/dashboards/go/middleware/auth.go +0 -17
  775. package/dashboards/go/services/api.go +0 -38
  776. package/dashboards/go/services/session.go +0 -52
  777. package/dashboards/go/static/styles.css +0 -546
  778. package/dashboards/go/templates/components.go +0 -45
  779. package/dashboards/go/templates/helpers.go +0 -35
  780. package/dashboards/go/templates/layout.go +0 -64
  781. package/dashboards/html/index.html +0 -432
  782. package/dashboards/html/package.json +0 -11
  783. package/dashboards/html/public/styles.css +0 -546
  784. package/dashboards/html/src/api.js +0 -36
  785. package/dashboards/html/src/components/badge.js +0 -13
  786. package/dashboards/html/src/components/layout.js +0 -11
  787. package/dashboards/html/src/components/modal.js +0 -9
  788. package/dashboards/html/src/components/pagination.js +0 -12
  789. package/dashboards/html/src/components/stat-card.js +0 -14
  790. package/dashboards/html/src/components/table.js +0 -6
  791. package/dashboards/html/src/main.js +0 -83
  792. package/dashboards/html/src/pages/activity.js +0 -137
  793. package/dashboards/html/src/pages/agents.js +0 -831
  794. package/dashboards/html/src/pages/api-keys.js +0 -80
  795. package/dashboards/html/src/pages/approvals.js +0 -155
  796. package/dashboards/html/src/pages/audit.js +0 -50
  797. package/dashboards/html/src/pages/community-skills.js +0 -236
  798. package/dashboards/html/src/pages/compliance.js +0 -69
  799. package/dashboards/html/src/pages/dashboard.js +0 -25
  800. package/dashboards/html/src/pages/dlp.js +0 -112
  801. package/dashboards/html/src/pages/domain-status.js +0 -182
  802. package/dashboards/html/src/pages/guardrails.js +0 -127
  803. package/dashboards/html/src/pages/journal.js +0 -54
  804. package/dashboards/html/src/pages/knowledge-contributions.js +0 -319
  805. package/dashboards/html/src/pages/knowledge.js +0 -251
  806. package/dashboards/html/src/pages/login.js +0 -84
  807. package/dashboards/html/src/pages/messages.js +0 -90
  808. package/dashboards/html/src/pages/settings.js +0 -656
  809. package/dashboards/html/src/pages/skill-connections.js +0 -293
  810. package/dashboards/html/src/pages/skills.js +0 -114
  811. package/dashboards/html/src/pages/users.js +0 -62
  812. package/dashboards/html/src/pages/vault.js +0 -105
  813. package/dashboards/html/src/pages/workforce.js +0 -418
  814. package/dashboards/html/src/router.js +0 -91
  815. package/dashboards/html/src/utils/escape.js +0 -7
  816. package/dashboards/html/src/utils/time.js +0 -16
  817. package/dashboards/html/src/utils/toast.js +0 -10
  818. package/dashboards/java/AgenticMailDashboard.java +0 -161
  819. package/dashboards/java/handlers/ActivityHandler.java +0 -42
  820. package/dashboards/java/handlers/AgentsHandler.java +0 -807
  821. package/dashboards/java/handlers/ApiKeysHandler.java +0 -201
  822. package/dashboards/java/handlers/ApprovalsHandler.java +0 -43
  823. package/dashboards/java/handlers/AuditHandler.java +0 -95
  824. package/dashboards/java/handlers/AuthHandler.java +0 -71
  825. package/dashboards/java/handlers/CommunitySkillsHandler.java +0 -45
  826. package/dashboards/java/handlers/ComplianceHandler.java +0 -192
  827. package/dashboards/java/handlers/DashboardHandler.java +0 -98
  828. package/dashboards/java/handlers/DlpHandler.java +0 -230
  829. package/dashboards/java/handlers/DomainStatusHandler.java +0 -58
  830. package/dashboards/java/handlers/GuardrailsHandler.java +0 -272
  831. package/dashboards/java/handlers/JournalHandler.java +0 -130
  832. package/dashboards/java/handlers/KnowledgeContributionsHandler.java +0 -51
  833. package/dashboards/java/handlers/KnowledgeHandler.java +0 -49
  834. package/dashboards/java/handlers/MessagesHandler.java +0 -168
  835. package/dashboards/java/handlers/SettingsHandler.java +0 -1017
  836. package/dashboards/java/handlers/SkillConnectionsHandler.java +0 -61
  837. package/dashboards/java/handlers/SkillsHandler.java +0 -198
  838. package/dashboards/java/handlers/UsersHandler.java +0 -118
  839. package/dashboards/java/handlers/VaultHandler.java +0 -168
  840. package/dashboards/java/handlers/WorkforceHandler.java +0 -64
  841. package/dashboards/java/services/ApiClient.java +0 -233
  842. package/dashboards/java/services/SessionManager.java +0 -138
  843. package/dashboards/java/static/styles.css +0 -546
  844. package/dashboards/java/templates/Components.java +0 -142
  845. package/dashboards/java/templates/Helpers.java +0 -106
  846. package/dashboards/java/templates/Layout.java +0 -106
  847. package/dashboards/laravel/controllers/ActivityController.php +0 -18
  848. package/dashboards/laravel/controllers/AgentController.php +0 -250
  849. package/dashboards/laravel/controllers/ApiKeyController.php +0 -73
  850. package/dashboards/laravel/controllers/ApprovalsController.php +0 -18
  851. package/dashboards/laravel/controllers/AuditController.php +0 -31
  852. package/dashboards/laravel/controllers/AuthController.php +0 -44
  853. package/dashboards/laravel/controllers/CommunitySkillsController.php +0 -18
  854. package/dashboards/laravel/controllers/ComplianceController.php +0 -55
  855. package/dashboards/laravel/controllers/DashboardController.php +0 -28
  856. package/dashboards/laravel/controllers/DlpController.php +0 -88
  857. package/dashboards/laravel/controllers/DomainStatusController.php +0 -18
  858. package/dashboards/laravel/controllers/GuardrailController.php +0 -110
  859. package/dashboards/laravel/controllers/JournalController.php +0 -44
  860. package/dashboards/laravel/controllers/KnowledgeContributionsController.php +0 -18
  861. package/dashboards/laravel/controllers/KnowledgeController.php +0 -18
  862. package/dashboards/laravel/controllers/MessageController.php +0 -47
  863. package/dashboards/laravel/controllers/SettingController.php +0 -258
  864. package/dashboards/laravel/controllers/SkillConnectionsController.php +0 -18
  865. package/dashboards/laravel/controllers/SkillController.php +0 -74
  866. package/dashboards/laravel/controllers/UserController.php +0 -47
  867. package/dashboards/laravel/controllers/VaultController.php +0 -94
  868. package/dashboards/laravel/controllers/WorkforceController.php +0 -18
  869. package/dashboards/laravel/index.php +0 -375
  870. package/dashboards/laravel/lib/Api.php +0 -73
  871. package/dashboards/laravel/lib/Helpers.php +0 -123
  872. package/dashboards/laravel/public/styles.css +0 -175
  873. package/dashboards/laravel/views/activity.php +0 -127
  874. package/dashboards/laravel/views/agent-detail.php +0 -534
  875. package/dashboards/laravel/views/agents.php +0 -204
  876. package/dashboards/laravel/views/api-keys.php +0 -55
  877. package/dashboards/laravel/views/approvals.php +0 -152
  878. package/dashboards/laravel/views/audit.php +0 -30
  879. package/dashboards/laravel/views/community-skills.php +0 -131
  880. package/dashboards/laravel/views/compliance.php +0 -48
  881. package/dashboards/laravel/views/components/modal.php +0 -59
  882. package/dashboards/laravel/views/components/stats.php +0 -21
  883. package/dashboards/laravel/views/components/table.php +0 -35
  884. package/dashboards/laravel/views/dashboard.php +0 -31
  885. package/dashboards/laravel/views/dlp.php +0 -87
  886. package/dashboards/laravel/views/domain-status.php +0 -167
  887. package/dashboards/laravel/views/guardrails.php +0 -95
  888. package/dashboards/laravel/views/journal.php +0 -50
  889. package/dashboards/laravel/views/knowledge-contributions.php +0 -185
  890. package/dashboards/laravel/views/knowledge.php +0 -167
  891. package/dashboards/laravel/views/layout.php +0 -95
  892. package/dashboards/laravel/views/login.php +0 -45
  893. package/dashboards/laravel/views/messages.php +0 -60
  894. package/dashboards/laravel/views/settings.php +0 -622
  895. package/dashboards/laravel/views/skill-connections.php +0 -192
  896. package/dashboards/laravel/views/skills.php +0 -74
  897. package/dashboards/laravel/views/users.php +0 -42
  898. package/dashboards/laravel/views/vault.php +0 -80
  899. package/dashboards/laravel/views/workforce.php +0 -265
  900. package/dashboards/php/components/layout.php +0 -85
  901. package/dashboards/php/components/modal.php +0 -22
  902. package/dashboards/php/components/stats.php +0 -20
  903. package/dashboards/php/components/table.php +0 -33
  904. package/dashboards/php/index.php +0 -696
  905. package/dashboards/php/lib/api.php +0 -37
  906. package/dashboards/php/lib/auth.php +0 -47
  907. package/dashboards/php/lib/helpers.php +0 -69
  908. package/dashboards/php/pages/activity.php +0 -35
  909. package/dashboards/php/pages/agent-detail.php +0 -552
  910. package/dashboards/php/pages/agents.php +0 -185
  911. package/dashboards/php/pages/api-keys.php +0 -34
  912. package/dashboards/php/pages/approvals.php +0 -36
  913. package/dashboards/php/pages/audit.php +0 -31
  914. package/dashboards/php/pages/community-skills.php +0 -39
  915. package/dashboards/php/pages/compliance.php +0 -38
  916. package/dashboards/php/pages/dashboard.php +0 -29
  917. package/dashboards/php/pages/dlp.php +0 -65
  918. package/dashboards/php/pages/domain-status.php +0 -87
  919. package/dashboards/php/pages/guardrails.php +0 -70
  920. package/dashboards/php/pages/journal.php +0 -53
  921. package/dashboards/php/pages/knowledge-contributions.php +0 -47
  922. package/dashboards/php/pages/knowledge.php +0 -43
  923. package/dashboards/php/pages/login.php +0 -34
  924. package/dashboards/php/pages/messages.php +0 -53
  925. package/dashboards/php/pages/settings.php +0 -687
  926. package/dashboards/php/pages/skill-connections.php +0 -94
  927. package/dashboards/php/pages/skills.php +0 -70
  928. package/dashboards/php/pages/users.php +0 -37
  929. package/dashboards/php/pages/vault.php +0 -70
  930. package/dashboards/php/pages/workforce.php +0 -89
  931. package/dashboards/php/public/styles.css +0 -175
  932. package/dashboards/python/app.py +0 -91
  933. package/dashboards/python/routes/__init__.py +0 -0
  934. package/dashboards/python/routes/activity.py +0 -11
  935. package/dashboards/python/routes/agents.py +0 -296
  936. package/dashboards/python/routes/api_keys.py +0 -49
  937. package/dashboards/python/routes/approvals.py +0 -11
  938. package/dashboards/python/routes/audit.py +0 -33
  939. package/dashboards/python/routes/auth.py +0 -30
  940. package/dashboards/python/routes/community_skills.py +0 -11
  941. package/dashboards/python/routes/compliance.py +0 -50
  942. package/dashboards/python/routes/dashboard.py +0 -32
  943. package/dashboards/python/routes/dlp.py +0 -64
  944. package/dashboards/python/routes/domain_status.py +0 -11
  945. package/dashboards/python/routes/guardrails.py +0 -79
  946. package/dashboards/python/routes/journal.py +0 -40
  947. package/dashboards/python/routes/knowledge.py +0 -11
  948. package/dashboards/python/routes/knowledge_contributions.py +0 -11
  949. package/dashboards/python/routes/messages.py +0 -46
  950. package/dashboards/python/routes/settings.py +0 -260
  951. package/dashboards/python/routes/skill_connections.py +0 -11
  952. package/dashboards/python/routes/skills.py +0 -59
  953. package/dashboards/python/routes/users.py +0 -43
  954. package/dashboards/python/routes/vault.py +0 -59
  955. package/dashboards/python/routes/workforce.py +0 -11
  956. package/dashboards/python/static/styles.css +0 -175
  957. package/dashboards/python/templates/activity.html +0 -87
  958. package/dashboards/python/templates/agent_detail.html +0 -552
  959. package/dashboards/python/templates/agents.html +0 -246
  960. package/dashboards/python/templates/api_keys.html +0 -64
  961. package/dashboards/python/templates/approvals.html +0 -86
  962. package/dashboards/python/templates/audit.html +0 -50
  963. package/dashboards/python/templates/community-skills.html +0 -69
  964. package/dashboards/python/templates/compliance.html +0 -74
  965. package/dashboards/python/templates/components/modal.html +0 -43
  966. package/dashboards/python/templates/components/stats.html +0 -26
  967. package/dashboards/python/templates/components/table.html +0 -43
  968. package/dashboards/python/templates/dashboard.html +0 -34
  969. package/dashboards/python/templates/dlp.html +0 -159
  970. package/dashboards/python/templates/domain-status.html +0 -64
  971. package/dashboards/python/templates/guardrails.html +0 -131
  972. package/dashboards/python/templates/journal.html +0 -66
  973. package/dashboards/python/templates/knowledge-contributions.html +0 -71
  974. package/dashboards/python/templates/knowledge.html +0 -69
  975. package/dashboards/python/templates/layout.html +0 -121
  976. package/dashboards/python/templates/login.html +0 -36
  977. package/dashboards/python/templates/messages.html +0 -90
  978. package/dashboards/python/templates/settings.html +0 -624
  979. package/dashboards/python/templates/skill-connections.html +0 -72
  980. package/dashboards/python/templates/skills.html +0 -89
  981. package/dashboards/python/templates/users.html +0 -70
  982. package/dashboards/python/templates/vault.html +0 -73
  983. package/dashboards/python/templates/workforce.html +0 -112
  984. package/dashboards/python/utils/__init__.py +0 -0
  985. package/dashboards/python/utils/api.py +0 -35
  986. package/dashboards/python/utils/helpers.py +0 -90
  987. package/dashboards/rails/app.rb +0 -64
  988. package/dashboards/rails/helpers/api.rb +0 -39
  989. package/dashboards/rails/helpers/auth.rb +0 -11
  990. package/dashboards/rails/helpers/view.rb +0 -95
  991. package/dashboards/rails/public/styles.css +0 -546
  992. package/dashboards/rails/routes/activity.rb +0 -10
  993. package/dashboards/rails/routes/agents.rb +0 -173
  994. package/dashboards/rails/routes/api_keys.rb +0 -30
  995. package/dashboards/rails/routes/approvals.rb +0 -10
  996. package/dashboards/rails/routes/audit.rb +0 -15
  997. package/dashboards/rails/routes/auth.rb +0 -29
  998. package/dashboards/rails/routes/community_skills.rb +0 -11
  999. package/dashboards/rails/routes/compliance.rb +0 -25
  1000. package/dashboards/rails/routes/dashboard.rb +0 -13
  1001. package/dashboards/rails/routes/dlp.rb +0 -40
  1002. package/dashboards/rails/routes/domain_status.rb +0 -16
  1003. package/dashboards/rails/routes/guardrails.rb +0 -51
  1004. package/dashboards/rails/routes/journal.rb +0 -24
  1005. package/dashboards/rails/routes/knowledge.rb +0 -11
  1006. package/dashboards/rails/routes/knowledge_contributions.rb +0 -12
  1007. package/dashboards/rails/routes/messages.rb +0 -22
  1008. package/dashboards/rails/routes/settings.rb +0 -196
  1009. package/dashboards/rails/routes/skill_connections.rb +0 -15
  1010. package/dashboards/rails/routes/skills.rb +0 -38
  1011. package/dashboards/rails/routes/users.rb +0 -18
  1012. package/dashboards/rails/routes/vault.rb +0 -37
  1013. package/dashboards/rails/routes/workforce.rb +0 -16
  1014. package/dashboards/rails/views/activity.erb +0 -56
  1015. package/dashboards/rails/views/agent_detail.erb +0 -550
  1016. package/dashboards/rails/views/agents.erb +0 -214
  1017. package/dashboards/rails/views/api_keys.erb +0 -52
  1018. package/dashboards/rails/views/approvals.erb +0 -60
  1019. package/dashboards/rails/views/audit.erb +0 -38
  1020. package/dashboards/rails/views/community_skills.erb +0 -69
  1021. package/dashboards/rails/views/compliance.erb +0 -69
  1022. package/dashboards/rails/views/dashboard.erb +0 -46
  1023. package/dashboards/rails/views/dlp.erb +0 -104
  1024. package/dashboards/rails/views/domain_status.erb +0 -75
  1025. package/dashboards/rails/views/guardrails.erb +0 -107
  1026. package/dashboards/rails/views/journal.erb +0 -65
  1027. package/dashboards/rails/views/knowledge.erb +0 -67
  1028. package/dashboards/rails/views/knowledge_contributions.erb +0 -70
  1029. package/dashboards/rails/views/layout.erb +0 -61
  1030. package/dashboards/rails/views/login.erb +0 -47
  1031. package/dashboards/rails/views/messages.erb +0 -62
  1032. package/dashboards/rails/views/settings.erb +0 -578
  1033. package/dashboards/rails/views/skill_connections.erb +0 -109
  1034. package/dashboards/rails/views/skills.erb +0 -66
  1035. package/dashboards/rails/views/users.erb +0 -53
  1036. package/dashboards/rails/views/vault.erb +0 -66
  1037. package/dashboards/rails/views/workforce.erb +0 -124
  1038. package/dashboards/ruby/app.rb +0 -74
  1039. package/dashboards/ruby/helpers/api.rb +0 -63
  1040. package/dashboards/ruby/helpers/auth.rb +0 -20
  1041. package/dashboards/ruby/helpers/view.rb +0 -91
  1042. package/dashboards/ruby/public/styles.css +0 -546
  1043. package/dashboards/ruby/routes/activity.rb +0 -10
  1044. package/dashboards/ruby/routes/agents.rb +0 -197
  1045. package/dashboards/ruby/routes/api_keys.rb +0 -43
  1046. package/dashboards/ruby/routes/approvals.rb +0 -10
  1047. package/dashboards/ruby/routes/audit.rb +0 -15
  1048. package/dashboards/ruby/routes/auth.rb +0 -29
  1049. package/dashboards/ruby/routes/community_skills.rb +0 -11
  1050. package/dashboards/ruby/routes/compliance.rb +0 -28
  1051. package/dashboards/ruby/routes/dashboard.rb +0 -13
  1052. package/dashboards/ruby/routes/dlp.rb +0 -55
  1053. package/dashboards/ruby/routes/domain_status.rb +0 -16
  1054. package/dashboards/ruby/routes/guardrails.rb +0 -77
  1055. package/dashboards/ruby/routes/journal.rb +0 -24
  1056. package/dashboards/ruby/routes/knowledge.rb +0 -11
  1057. package/dashboards/ruby/routes/knowledge_contributions.rb +0 -12
  1058. package/dashboards/ruby/routes/messages.rb +0 -27
  1059. package/dashboards/ruby/routes/settings.rb +0 -214
  1060. package/dashboards/ruby/routes/skill_connections.rb +0 -15
  1061. package/dashboards/ruby/routes/skills.rb +0 -50
  1062. package/dashboards/ruby/routes/users.rb +0 -26
  1063. package/dashboards/ruby/routes/vault.rb +0 -49
  1064. package/dashboards/ruby/routes/workforce.rb +0 -16
  1065. package/dashboards/ruby/views/activity.erb +0 -56
  1066. package/dashboards/ruby/views/agent_detail.erb +0 -550
  1067. package/dashboards/ruby/views/agents.erb +0 -214
  1068. package/dashboards/ruby/views/api_keys.erb +0 -59
  1069. package/dashboards/ruby/views/approvals.erb +0 -60
  1070. package/dashboards/ruby/views/audit.erb +0 -38
  1071. package/dashboards/ruby/views/community_skills.erb +0 -69
  1072. package/dashboards/ruby/views/compliance.erb +0 -45
  1073. package/dashboards/ruby/views/dashboard.erb +0 -46
  1074. package/dashboards/ruby/views/dlp.erb +0 -88
  1075. package/dashboards/ruby/views/domain_status.erb +0 -75
  1076. package/dashboards/ruby/views/guardrails.erb +0 -103
  1077. package/dashboards/ruby/views/journal.erb +0 -53
  1078. package/dashboards/ruby/views/knowledge.erb +0 -67
  1079. package/dashboards/ruby/views/knowledge_contributions.erb +0 -70
  1080. package/dashboards/ruby/views/layout.erb +0 -61
  1081. package/dashboards/ruby/views/login.erb +0 -31
  1082. package/dashboards/ruby/views/messages.erb +0 -51
  1083. package/dashboards/ruby/views/settings.erb +0 -579
  1084. package/dashboards/ruby/views/skill_connections.erb +0 -109
  1085. package/dashboards/ruby/views/skills.erb +0 -66
  1086. package/dashboards/ruby/views/users.erb +0 -53
  1087. package/dashboards/ruby/views/vault.erb +0 -66
  1088. package/dashboards/ruby/views/workforce.erb +0 -124
  1089. package/dashboards/shared/styles.css +0 -546
  1090. package/dashboards/shared-styles.css +0 -546
@@ -1,1017 +0,0 @@
1
- /**
2
- * SettingsHandler — Read + update organization settings.
3
- * Routes: GET /settings, POST /settings
4
- */
5
-
6
- import com.sun.net.httpserver.*;
7
- import java.io.*;
8
- import java.util.*;
9
-
10
- public class SettingsHandler implements HttpHandler {
11
-
12
- @Override
13
- public void handle(HttpExchange ex) throws IOException {
14
- try {
15
- if (!SessionManager.isAuthenticated(ex)) {
16
- SessionManager.redirect(ex, "/login");
17
- return;
18
- }
19
-
20
- if ("POST".equals(ex.getRequestMethod())) {
21
- handleUpdate(ex);
22
- return;
23
- }
24
-
25
- handleRead(ex);
26
-
27
- } catch (Exception e) {
28
- SessionManager.respond(ex, 500, "Error: " + Helpers.esc(e.getMessage()));
29
- }
30
- }
31
-
32
- private void handleUpdate(HttpExchange ex) throws IOException {
33
- String token = SessionManager.getToken(ex);
34
- Map<String, String> form = SessionManager.parseForm(ex);
35
-
36
- // Check if this is a tool security save
37
- if ("tool-security".equals(form.get("_form"))) {
38
- handleToolSecurityUpdate(ex, token, form);
39
- return;
40
- }
41
-
42
- // Check if this is a firewall save
43
- if ("firewall".equals(form.get("_form"))) {
44
- handleFirewallUpdate(ex, token, form);
45
- return;
46
- }
47
-
48
- // Check if this is a model pricing save
49
- if ("model-pricing".equals(form.get("_form"))) {
50
- handleModelPricingUpdate(ex, token, form);
51
- return;
52
- }
53
-
54
- Map<String, Object> payload = new LinkedHashMap<>();
55
- String[] fields = {"org_name", "default_model", "max_agents", "rate_limit", "webhook_url"};
56
- for (String key : fields) {
57
- String val = form.get(key);
58
- if (val != null && !val.isEmpty()) {
59
- // Convert numeric fields
60
- if ("max_agents".equals(key) || "rate_limit".equals(key)) {
61
- try {
62
- payload.put(key, Integer.parseInt(val));
63
- } catch (NumberFormatException e) {
64
- payload.put(key, val);
65
- }
66
- } else {
67
- payload.put(key, val);
68
- }
69
- }
70
- }
71
-
72
- var result = ApiClient.patch("/api/settings", token, ApiClient.toJsonMixed(payload));
73
- int status = Helpers.intVal(result, "_status");
74
-
75
- if (status > 0 && status < 300) {
76
- SessionManager.setFlash(ex, "Settings updated successfully", "success");
77
- } else {
78
- String err = Helpers.strVal(result, "error");
79
- if (err.isEmpty()) err = "Failed to update settings";
80
- SessionManager.setFlash(ex, err, "danger");
81
- }
82
-
83
- SessionManager.redirect(ex, "/settings");
84
- }
85
-
86
- private void handleToolSecurityUpdate(HttpExchange ex, String token, Map<String, String> form) throws IOException {
87
- Map<String, Object> payload = new LinkedHashMap<>();
88
-
89
- Map<String, Object> security = new LinkedHashMap<>();
90
-
91
- Map<String, Object> pathSandbox = new LinkedHashMap<>();
92
- pathSandbox.put("enabled", "1".equals(form.get("ps_enabled")));
93
- pathSandbox.put("allowedDirs", splitTrim(form.getOrDefault("ps_allowedDirs", "")));
94
- pathSandbox.put("blockedPatterns", splitTrim(form.getOrDefault("ps_blockedPatterns", "")));
95
- security.put("pathSandbox", pathSandbox);
96
-
97
- Map<String, Object> ssrf = new LinkedHashMap<>();
98
- ssrf.put("enabled", "1".equals(form.get("ssrf_enabled")));
99
- ssrf.put("allowedHosts", splitTrim(form.getOrDefault("ssrf_allowedHosts", "")));
100
- ssrf.put("blockedCidrs", splitTrim(form.getOrDefault("ssrf_blockedCidrs", "")));
101
- security.put("ssrf", ssrf);
102
-
103
- Map<String, Object> cmdSanitizer = new LinkedHashMap<>();
104
- cmdSanitizer.put("enabled", "1".equals(form.get("cmd_enabled")));
105
- cmdSanitizer.put("mode", form.getOrDefault("cmd_mode", "blocklist"));
106
- cmdSanitizer.put("allowedCommands", splitTrim(form.getOrDefault("cmd_allowedCommands", "")));
107
- cmdSanitizer.put("blockedPatterns", splitTrim(form.getOrDefault("cmd_blockedPatterns", "")));
108
- security.put("commandSanitizer", cmdSanitizer);
109
-
110
- payload.put("security", security);
111
-
112
- Map<String, Object> middleware = new LinkedHashMap<>();
113
-
114
- Map<String, Object> audit = new LinkedHashMap<>();
115
- audit.put("enabled", "1".equals(form.get("audit_enabled")));
116
- audit.put("redactKeys", splitTrim(form.getOrDefault("audit_redactKeys", "")));
117
- middleware.put("audit", audit);
118
-
119
- Map<String, Object> rateLimit = new LinkedHashMap<>();
120
- rateLimit.put("enabled", "1".equals(form.get("rl_enabled")));
121
- rateLimit.put("overrides", new LinkedHashMap<>());
122
- middleware.put("rateLimit", rateLimit);
123
-
124
- Map<String, Object> circuitBreaker = new LinkedHashMap<>();
125
- circuitBreaker.put("enabled", "1".equals(form.get("cb_enabled")));
126
- middleware.put("circuitBreaker", circuitBreaker);
127
-
128
- Map<String, Object> telemetry = new LinkedHashMap<>();
129
- telemetry.put("enabled", "1".equals(form.get("tel_enabled")));
130
- middleware.put("telemetry", telemetry);
131
-
132
- payload.put("middleware", middleware);
133
-
134
- var result = ApiClient.put("/api/settings/tool-security", token, buildNestedJson(payload));
135
- int status = Helpers.intVal(result, "_status");
136
-
137
- if (status > 0 && status < 300) {
138
- SessionManager.setFlash(ex, "Tool security settings updated", "success");
139
- } else {
140
- String err = Helpers.strVal(result, "error");
141
- if (err.isEmpty()) err = "Failed to update tool security settings";
142
- SessionManager.setFlash(ex, err, "danger");
143
- }
144
-
145
- SessionManager.redirect(ex, "/settings");
146
- }
147
-
148
- private List<String> splitTrim(String val) {
149
- List<String> result = new ArrayList<>();
150
- if (val == null || val.isEmpty()) return result;
151
- for (String part : val.split(",")) {
152
- String trimmed = part.trim();
153
- if (!trimmed.isEmpty()) result.add(trimmed);
154
- }
155
- return result;
156
- }
157
-
158
- @SuppressWarnings("unchecked")
159
- private String buildNestedJson(Map<String, Object> map) {
160
- StringBuilder sb = new StringBuilder("{");
161
- boolean first = true;
162
- for (var entry : map.entrySet()) {
163
- if (!first) sb.append(",");
164
- first = false;
165
- sb.append("\"").append(escJson(entry.getKey())).append("\":");
166
- appendValue(sb, entry.getValue());
167
- }
168
- sb.append("}");
169
- return sb.toString();
170
- }
171
-
172
- @SuppressWarnings("unchecked")
173
- private void appendValue(StringBuilder sb, Object v) {
174
- if (v == null) {
175
- sb.append("null");
176
- } else if (v instanceof Boolean) {
177
- sb.append(v);
178
- } else if (v instanceof Number) {
179
- sb.append(v);
180
- } else if (v instanceof Map) {
181
- sb.append(buildNestedJson((Map<String, Object>) v));
182
- } else if (v instanceof List) {
183
- sb.append("[");
184
- boolean f = true;
185
- for (Object item : (List<?>) v) {
186
- if (!f) sb.append(",");
187
- f = false;
188
- if (item instanceof String) {
189
- sb.append("\"").append(escJson(item.toString())).append("\"");
190
- } else {
191
- appendValue(sb, item);
192
- }
193
- }
194
- sb.append("]");
195
- } else {
196
- sb.append("\"").append(escJson(v.toString())).append("\"");
197
- }
198
- }
199
-
200
- private String escJson(String s) {
201
- if (s == null) return "";
202
- return s.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t");
203
- }
204
-
205
- private void handleRead(HttpExchange ex) throws IOException {
206
- String token = SessionManager.getToken(ex);
207
- var settings = ApiClient.get("/api/settings", token);
208
-
209
- StringBuilder html = new StringBuilder();
210
- html.append(Components.pageHeader("Settings", "Configure your AgenticMail Enterprise instance"));
211
-
212
- // Tabs
213
- html.append("<div style='border-bottom:1px solid var(--border);margin-bottom:20px'>");
214
- html.append("<div class='tabs' style='padding:0'>");
215
- html.append("<div class='tab active' data-settings-tab='general' onclick=\"switchSettingsTab('general')\">General</div>");
216
- html.append("<div class='tab' data-settings-tab='tool-security' onclick=\"switchSettingsTab('tool-security')\">Tool Security</div>");
217
- html.append("<div class='tab' data-settings-tab='firewall' onclick=\"switchSettingsTab('firewall')\">Network &amp; Firewall</div>");
218
- html.append("<div class='tab' data-settings-tab='model-pricing' onclick=\"switchSettingsTab('model-pricing')\">Model Pricing</div>");
219
- html.append("</div></div>");
220
-
221
- // General panel start
222
- html.append("<div id='settings-panel-general'>");
223
-
224
- // Settings form
225
- html.append("<div class='card'>");
226
- html.append("<div style='display:flex;align-items:center;gap:0'>");
227
- html.append("<h3>Organization Settings</h3>");
228
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('general')\" title='Learn more'>?</button>");
229
- html.append("</div>");
230
- html.append("<div id='help-general' class='settings-help-panel'>");
231
- html.append("<p>The General section configures your organization&rsquo;s identity and email delivery.</p>");
232
- html.append("<h4>Organization</h4>");
233
- html.append("<ul>");
234
- html.append("<li><strong>Company Name</strong> &mdash; Appears throughout the dashboard and in emails sent by agents.</li>");
235
- html.append("<li><strong>Domain</strong> &mdash; Your company&rsquo;s primary domain, used for agent email addresses.</li>");
236
- html.append("<li><strong>Subdomain</strong> &mdash; Your unique ID on the AgenticMail cloud (subdomain.agenticmail.io).</li>");
237
- html.append("<li><strong>Logo URL</strong> &mdash; Link to your company logo, shown in dashboard and emails.</li>");
238
- html.append("<li><strong>Primary Color</strong> &mdash; Customizes the dashboard accent color to match your brand.</li>");
239
- html.append("</ul>");
240
- html.append("<h4>SMTP Configuration</h4>");
241
- html.append("<p>Controls outgoing email delivery. Leave blank to use the default AgenticMail relay. Configure custom SMTP to send from your own mail infrastructure.</p>");
242
- html.append("</div>");
243
- html.append("<form method='POST' action='/settings'>");
244
- html.append("<div class='form-row'>");
245
- html.append("<div class='form-group'><label>Organization Name</label>");
246
- html.append("<input type='text' name='org_name' value='").append(Helpers.esc(Helpers.strVal(settings, "org_name")));
247
- html.append("' placeholder='Your Org'></div>");
248
- html.append("<div class='form-group'><label>Default Model</label>");
249
- html.append("<input type='text' name='default_model' value='").append(Helpers.esc(Helpers.strVal(settings, "default_model")));
250
- html.append("' placeholder='gpt-4o'></div>");
251
- html.append("</div>");
252
-
253
- html.append("<div class='form-row'>");
254
- html.append("<div class='form-group'><label>Max Agents</label>");
255
- html.append("<input type='number' name='max_agents' value='").append(Helpers.esc(Helpers.strVal(settings, "max_agents")));
256
- html.append("' placeholder='50'></div>");
257
- html.append("<div class='form-group'><label>Rate Limit (req/min)</label>");
258
- html.append("<input type='number' name='rate_limit' value='").append(Helpers.esc(Helpers.strVal(settings, "rate_limit")));
259
- html.append("' placeholder='1000'></div>");
260
- html.append("</div>");
261
-
262
- html.append("<div class='form-group'><label>Webhook URL</label>");
263
- html.append("<input type='url' name='webhook_url' value='").append(Helpers.esc(Helpers.strVal(settings, "webhook_url")));
264
- html.append("' placeholder='https://hooks.example.com/events'></div>");
265
-
266
- html.append("<button class='btn btn-primary' type='submit'>Save Settings</button>");
267
- html.append("</form>");
268
- html.append("</div>");
269
-
270
- // Instance info
271
- html.append(Components.cardStart("Instance Information"));
272
- html.append("<div class='table-wrap'><table><tbody>");
273
-
274
- html.append("<tr><td style='font-weight:600;width:200px'>API Endpoint</td>");
275
- html.append("<td><code>").append(Helpers.esc(ApiClient.API_URL)).append("</code></td></tr>");
276
-
277
- String version = Helpers.strVal(settings, "version");
278
- if (version.isEmpty()) version = Helpers.strVal(settings, "app_version");
279
- if (version.isEmpty()) version = "-";
280
- html.append("<tr><td style='font-weight:600'>Version</td>");
281
- html.append("<td>").append(Helpers.esc(version)).append("</td></tr>");
282
-
283
- String plan = Helpers.strVal(settings, "plan");
284
- if (plan.isEmpty()) plan = Helpers.strVal(settings, "tier");
285
- if (plan.isEmpty()) plan = "Enterprise";
286
- html.append("<tr><td style='font-weight:600'>Plan</td>");
287
- html.append("<td>").append(Helpers.esc(plan)).append("</td></tr>");
288
-
289
- String region = Helpers.strVal(settings, "region");
290
- if (region.isEmpty()) region = "-";
291
- html.append("<tr><td style='font-weight:600'>Region</td>");
292
- html.append("<td>").append(Helpers.esc(region)).append("</td></tr>");
293
-
294
- // Additional fields that might exist
295
- String domain = Helpers.strVal(settings, "domain");
296
- if (!domain.isEmpty()) {
297
- html.append("<tr><td style='font-weight:600'>Domain</td>");
298
- html.append("<td>").append(Helpers.esc(domain)).append("</td></tr>");
299
- }
300
-
301
- String subdomain = Helpers.strVal(settings, "subdomain");
302
- if (!subdomain.isEmpty()) {
303
- html.append("<tr><td style='font-weight:600'>Subdomain</td>");
304
- html.append("<td>").append(Helpers.esc(subdomain)).append(".agenticmail.io</td></tr>");
305
- }
306
-
307
- String name = Helpers.strVal(settings, "name");
308
- if (!name.isEmpty()) {
309
- html.append("<tr><td style='font-weight:600'>Org Name</td>");
310
- html.append("<td>").append(Helpers.esc(name)).append("</td></tr>");
311
- }
312
-
313
- html.append("</tbody></table></div>");
314
- html.append(Components.cardEnd());
315
-
316
- // General panel end
317
- html.append("</div>");
318
-
319
- // Tool Security panel
320
- renderToolSecurityPanel(html, token);
321
-
322
- // Firewall panel
323
- renderFirewallPanel(html, token);
324
-
325
- // Model Pricing panel
326
- renderModelPricingPanel(html, token);
327
-
328
- // Help panel styles
329
- html.append("<style>");
330
- html.append(".settings-help-btn{background:none;border:1px solid var(--border,#ddd);border-radius:50%;width:22px;height:22px;font-size:13px;font-weight:700;color:var(--text-muted,#888);cursor:pointer;margin-left:8px;line-height:1;padding:0;display:inline-flex;align-items:center;justify-content:center}");
331
- html.append(".settings-help-btn:hover{background:var(--bg-secondary,#f0f0f0);color:var(--text,#333)}");
332
- html.append(".settings-help-panel{max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease;padding:0 16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;margin-bottom:0;border:1px solid transparent}");
333
- html.append(".settings-help-panel.open{max-height:600px;padding:16px;border-color:var(--border,#ddd);margin-bottom:16px}");
334
- html.append(".settings-help-panel h4{margin:12px 0 6px;font-size:14px}");
335
- html.append(".settings-help-panel ul{margin:4px 0 8px 18px;padding:0}");
336
- html.append(".settings-help-panel li{margin-bottom:4px;font-size:13px;line-height:1.5}");
337
- html.append(".settings-help-panel p{margin:4px 0 8px;font-size:13px;line-height:1.5}");
338
- html.append("</style>");
339
-
340
- // Tab switching script + help toggle
341
- html.append("<script>");
342
- html.append("function switchSettingsTab(tab){document.querySelectorAll('[id^=\"settings-panel-\"]').forEach(function(p){p.style.display='none'});document.querySelectorAll('[data-settings-tab]').forEach(function(t){t.classList.remove('active')});document.getElementById('settings-panel-'+tab).style.display='block';document.querySelector('[data-settings-tab=\"'+tab+'\"]').classList.add('active')}");
343
- html.append("function toggleSettingsHelp(id){var p=document.getElementById('help-'+id);if(p)p.classList.toggle('open')}");
344
- html.append("</script>");
345
-
346
- String flash = SessionManager.consumeFlash(ex);
347
- SessionManager.respond(ex, 200, Layout.layout("/settings", SessionManager.getUser(ex), flash, html.toString()));
348
- }
349
-
350
- @SuppressWarnings("unchecked")
351
- private void renderToolSecurityPanel(StringBuilder html, String token) {
352
- var tsData = ApiClient.get("/api/settings/tool-security", token);
353
- if (tsData == null) tsData = new HashMap<>();
354
-
355
- // Unwrap toolSecurityConfig if present
356
- Map<String, Object> cfg = tsData;
357
- Map<String, Object> tsc = Helpers.mapVal(tsData, "toolSecurityConfig");
358
- if (!tsc.isEmpty()) cfg = tsc;
359
-
360
- Map<String, Object> security = Helpers.mapVal(cfg, "security");
361
- Map<String, Object> middleware = Helpers.mapVal(cfg, "middleware");
362
-
363
- // Security sub-objects
364
- Map<String, Object> pathSandbox = Helpers.mapVal(security, "pathSandbox");
365
- Map<String, Object> ssrf = Helpers.mapVal(security, "ssrf");
366
- Map<String, Object> cmdSanitizer = Helpers.mapVal(security, "commandSanitizer");
367
-
368
- // Middleware sub-objects
369
- Map<String, Object> audit = Helpers.mapVal(middleware, "audit");
370
- Map<String, Object> rateLimit = Helpers.mapVal(middleware, "rateLimit");
371
- Map<String, Object> circuitBreaker = Helpers.mapVal(middleware, "circuitBreaker");
372
- Map<String, Object> telemetry = Helpers.mapVal(middleware, "telemetry");
373
-
374
- String cmdMode = Helpers.strVal(cmdSanitizer, "mode");
375
- if (cmdMode.isEmpty()) cmdMode = "blocklist";
376
-
377
- html.append("<div id='settings-panel-tool-security' style='display:none'>");
378
- html.append("<form method='POST' action='/settings'>");
379
- html.append("<input type='hidden' name='_form' value='tool-security'>");
380
-
381
- // Security Policies card
382
- html.append("<div class='card'>");
383
- html.append("<div style='display:flex;align-items:center;gap:0'>");
384
- html.append("<h3>Security Policies</h3>");
385
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('tool-security')\" title='Learn more'>?</button>");
386
- html.append("</div>");
387
- html.append("<div id='help-tool-security' class='settings-help-panel'>");
388
- html.append("<p>Tool Security controls what AI agents are allowed to do at the system level &mdash; safety guardrails that prevent agents from accessing sensitive resources.</p>");
389
- html.append("<h4>Security Sandboxes</h4>");
390
- html.append("<ul>");
391
- html.append("<li><strong>Path Sandbox</strong> &mdash; Restricts which folders agents can read/write. Prevents access to sensitive files.</li>");
392
- html.append("<li><strong>SSRF Protection</strong> &mdash; Blocks agents from reaching internal networks, cloud metadata, or private IPs.</li>");
393
- html.append("<li><strong>Command Sanitizer</strong> &mdash; Controls which shell commands agents can execute. Blocklist blocks dangerous patterns; Allowlist only permits specified commands.</li>");
394
- html.append("</ul>");
395
- html.append("</div>");
396
- html.append("<div style='display:grid;gap:20px'>");
397
-
398
- // Path Sandbox
399
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
400
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
401
- html.append("<div><strong style='font-size:14px'>Path Sandbox</strong><div style='font-size:12px;color:var(--text-muted)'>Restrict file system access to allowed directories</div></div>");
402
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='ps_enabled' value='1'").append(checkedAttr(pathSandbox, "enabled")).append("> Enabled</label>");
403
- html.append("</div>");
404
- html.append("<div class='form-group'><label>Allowed Directories (comma-separated)</label>");
405
- html.append("<input type='text' name='ps_allowedDirs' value='").append(Helpers.esc(joinList(pathSandbox, "allowedDirs"))).append("' placeholder='/tmp, /var/data'></div>");
406
- html.append("<div class='form-group'><label>Blocked Patterns (comma-separated)</label>");
407
- html.append("<input type='text' name='ps_blockedPatterns' value='").append(Helpers.esc(joinList(pathSandbox, "blockedPatterns"))).append("' placeholder='*.exe, /etc/shadow'></div>");
408
- html.append("</div>");
409
-
410
- // SSRF Protection
411
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
412
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
413
- html.append("<div><strong style='font-size:14px'>SSRF Protection</strong><div style='font-size:12px;color:var(--text-muted)'>Prevent server-side request forgery attacks</div></div>");
414
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='ssrf_enabled' value='1'").append(checkedAttr(ssrf, "enabled")).append("> Enabled</label>");
415
- html.append("</div>");
416
- html.append("<div class='form-group'><label>Allowed Hosts (comma-separated)</label>");
417
- html.append("<input type='text' name='ssrf_allowedHosts' value='").append(Helpers.esc(joinList(ssrf, "allowedHosts"))).append("' placeholder='api.example.com, cdn.example.com'></div>");
418
- html.append("<div class='form-group'><label>Blocked CIDRs (comma-separated)</label>");
419
- html.append("<input type='text' name='ssrf_blockedCidrs' value='").append(Helpers.esc(joinList(ssrf, "blockedCidrs"))).append("' placeholder='10.0.0.0/8, 172.16.0.0/12'></div>");
420
- html.append("</div>");
421
-
422
- // Command Sanitizer
423
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
424
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
425
- html.append("<div><strong style='font-size:14px'>Command Sanitizer</strong><div style='font-size:12px;color:var(--text-muted)'>Control which shell commands agents can execute</div></div>");
426
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='cmd_enabled' value='1'").append(checkedAttr(cmdSanitizer, "enabled")).append("> Enabled</label>");
427
- html.append("</div>");
428
- html.append("<div class='form-group'><label>Mode</label>");
429
- html.append("<select name='cmd_mode'><option value='blocklist'").append("blocklist".equals(cmdMode) ? " selected" : "").append(">Blocklist</option>");
430
- html.append("<option value='allowlist'").append("allowlist".equals(cmdMode) ? " selected" : "").append(">Allowlist</option></select></div>");
431
- html.append("<div class='form-group'><label>Allowed Commands (comma-separated)</label>");
432
- html.append("<input type='text' name='cmd_allowedCommands' value='").append(Helpers.esc(joinList(cmdSanitizer, "allowedCommands"))).append("' placeholder='ls, cat, grep'></div>");
433
- html.append("<div class='form-group'><label>Blocked Patterns (comma-separated)</label>");
434
- html.append("<input type='text' name='cmd_blockedPatterns' value='").append(Helpers.esc(joinList(cmdSanitizer, "blockedPatterns"))).append("' placeholder='rm -rf, sudo, chmod'></div>");
435
- html.append("</div>");
436
-
437
- html.append("</div>");
438
- html.append("</div>");
439
-
440
- // Middleware card
441
- html.append("<div class='card'>");
442
- html.append("<div style='display:flex;align-items:center;gap:0'>");
443
- html.append("<h3>Middleware</h3>");
444
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('middleware')\" title='Learn more'>?</button>");
445
- html.append("</div>");
446
- html.append("<div id='help-middleware' class='settings-help-panel'>");
447
- html.append("<h4>Middleware &amp; Observability</h4>");
448
- html.append("<ul>");
449
- html.append("<li><strong>Audit Logging</strong> &mdash; Records every tool action: what, when, success/failure, duration. Sensitive fields are auto-redacted.</li>");
450
- html.append("<li><strong>Rate Limiting</strong> &mdash; Limits tool calls per minute per agent. Prevents system overload.</li>");
451
- html.append("<li><strong>Circuit Breaker</strong> &mdash; Auto-pauses tools that keep failing (5 consecutive errors). Waits 30s before retry.</li>");
452
- html.append("<li><strong>Telemetry</strong> &mdash; Collects performance metrics: call duration, success rates, output sizes.</li>");
453
- html.append("</ul>");
454
- html.append("</div>");
455
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:16px'>");
456
-
457
- // Audit
458
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
459
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
460
- html.append("<div><strong style='font-size:14px'>Audit Logging</strong><div style='font-size:12px;color:var(--text-muted)'>Log all tool invocations</div></div>");
461
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='audit_enabled' value='1'").append(checkedAttr(audit, "enabled")).append("> Enabled</label>");
462
- html.append("</div>");
463
- html.append("<div class='form-group'><label>Redact Keys (comma-separated)</label>");
464
- html.append("<input type='text' name='audit_redactKeys' value='").append(Helpers.esc(joinList(audit, "redactKeys"))).append("' placeholder='password, secret, token'></div>");
465
- html.append("</div>");
466
-
467
- // Rate Limiting
468
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
469
- html.append("<div style='display:flex;justify-content:space-between;align-items:center'>");
470
- html.append("<div><strong style='font-size:14px'>Rate Limiting</strong><div style='font-size:12px;color:var(--text-muted)'>Throttle tool calls</div></div>");
471
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='rl_enabled' value='1'").append(checkedAttr(rateLimit, "enabled")).append("> Enabled</label>");
472
- html.append("</div></div>");
473
-
474
- // Circuit Breaker
475
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
476
- html.append("<div style='display:flex;justify-content:space-between;align-items:center'>");
477
- html.append("<div><strong style='font-size:14px'>Circuit Breaker</strong><div style='font-size:12px;color:var(--text-muted)'>Halt tools after repeated failures</div></div>");
478
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='cb_enabled' value='1'").append(checkedAttr(circuitBreaker, "enabled")).append("> Enabled</label>");
479
- html.append("</div></div>");
480
-
481
- // Telemetry
482
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
483
- html.append("<div style='display:flex;justify-content:space-between;align-items:center'>");
484
- html.append("<div><strong style='font-size:14px'>Telemetry</strong><div style='font-size:12px;color:var(--text-muted)'>Collect tool usage metrics</div></div>");
485
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='tel_enabled' value='1'").append(checkedAttr(telemetry, "enabled")).append("> Enabled</label>");
486
- html.append("</div></div>");
487
-
488
- html.append("</div>");
489
- html.append("</div>");
490
-
491
- html.append("<button class='btn btn-primary' type='submit'>Save Tool Security</button>");
492
- html.append("</form>");
493
- html.append("</div>");
494
- }
495
-
496
- @SuppressWarnings("unchecked")
497
- private void renderFirewallPanel(StringBuilder html, String token) {
498
- var fwData = ApiClient.get("/api/settings/firewall", token);
499
- if (fwData == null) fwData = new HashMap<>();
500
-
501
- // Unwrap firewallConfig if present
502
- Map<String, Object> cfg = fwData;
503
- Map<String, Object> fc = Helpers.mapVal(fwData, "firewallConfig");
504
- if (!fc.isEmpty()) cfg = fc;
505
-
506
- Map<String, Object> ipAccess = Helpers.mapVal(cfg, "ipAccess");
507
- Map<String, Object> egress = Helpers.mapVal(cfg, "egress");
508
- Map<String, Object> proxy = Helpers.mapVal(cfg, "proxy");
509
- Map<String, Object> trustedProxies = Helpers.mapVal(cfg, "trustedProxies");
510
- Map<String, Object> network = Helpers.mapVal(cfg, "network");
511
- Map<String, Object> netRateLimit = Helpers.mapVal(network, "rateLimit");
512
- Map<String, Object> httpsEnforcement = Helpers.mapVal(network, "httpsEnforcement");
513
- Map<String, Object> secHeaders = Helpers.mapVal(network, "securityHeaders");
514
-
515
- String ipMode = Helpers.strVal(ipAccess, "mode");
516
- if (ipMode.isEmpty()) ipMode = "allowlist";
517
-
518
- String egressMode = Helpers.strVal(egress, "mode");
519
- if (egressMode.isEmpty()) egressMode = "blocklist";
520
-
521
- int rpm = Helpers.intVal(netRateLimit, "requestsPerMinute");
522
- if (rpm == 0) rpm = 120;
523
-
524
- int hstsMaxAge = Helpers.intVal(secHeaders, "hstsMaxAge");
525
- if (hstsMaxAge == 0) hstsMaxAge = 31536000;
526
-
527
- String xFrameOptions = Helpers.strVal(secHeaders, "xFrameOptions");
528
- if (xFrameOptions.isEmpty()) xFrameOptions = "DENY";
529
-
530
- String referrerPolicy = Helpers.strVal(secHeaders, "referrerPolicy");
531
- if (referrerPolicy.isEmpty()) referrerPolicy = "strict-origin-when-cross-origin";
532
-
533
- String permissionsPolicy = Helpers.strVal(secHeaders, "permissionsPolicy");
534
- if (permissionsPolicy.isEmpty()) permissionsPolicy = "camera=(), microphone=(), geolocation=()";
535
-
536
- html.append("<div id='settings-panel-firewall' style='display:none'>");
537
- html.append("<form method='POST' action='/settings'>");
538
- html.append("<input type='hidden' name='_form' value='firewall'>");
539
-
540
- // IP Access Control card
541
- html.append("<div class='card'>");
542
- html.append("<div style='display:flex;align-items:center;gap:0'>");
543
- html.append("<h3>IP Access Control</h3>");
544
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('ip-access')\" title='Learn more'>?</button>");
545
- html.append("</div>");
546
- html.append("<div id='help-ip-access' class='settings-help-panel'>");
547
- html.append("<p>Restricts which IPs can reach the dashboard and APIs. Allowlist = only listed IPs connect. Blocklist = all except blocked IPs.</p>");
548
- html.append("</div>");
549
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
550
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
551
- html.append("<div><strong style='font-size:14px'>IP Access Control</strong><div style='font-size:12px;color:var(--text-muted)'>Restrict access by IP address</div></div>");
552
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='ip_enabled' value='1'").append(checkedAttr(ipAccess, "enabled")).append("> Enabled</label>");
553
- html.append("</div>");
554
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
555
- html.append("<div class='form-group'><label>Mode</label>");
556
- html.append("<select name='ip_mode'><option value='allowlist'").append("allowlist".equals(ipMode) ? " selected" : "").append(">Allowlist</option>");
557
- html.append("<option value='blocklist'").append("blocklist".equals(ipMode) ? " selected" : "").append(">Blocklist</option></select></div>");
558
- html.append("<div></div>");
559
- html.append("<div class='form-group'><label>Allowlist IPs (comma-separated)</label>");
560
- html.append("<input type='text' name='ip_allowlist' value='").append(Helpers.esc(joinList(ipAccess, "allowlist"))).append("' placeholder='192.168.1.0/24, 10.0.0.1'></div>");
561
- html.append("<div class='form-group'><label>Blocklist IPs (comma-separated)</label>");
562
- html.append("<input type='text' name='ip_blocklist' value='").append(Helpers.esc(joinList(ipAccess, "blocklist"))).append("' placeholder='203.0.113.0/24'></div>");
563
- html.append("<div class='form-group' style='grid-column:1/-1'><label>Bypass Paths (comma-separated)</label>");
564
- html.append("<input type='text' name='ip_bypassPaths' value='").append(Helpers.esc(joinList(ipAccess, "bypassPaths"))).append("' placeholder='/health, /ready'></div>");
565
- html.append("</div></div>");
566
- html.append("</div>");
567
-
568
- // Outbound Egress card
569
- html.append("<div class='card'>");
570
- html.append("<div style='display:flex;align-items:center;gap:0'>");
571
- html.append("<h3>Outbound Egress</h3>");
572
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('egress')\" title='Learn more'>?</button>");
573
- html.append("</div>");
574
- html.append("<div id='help-egress' class='settings-help-panel'>");
575
- html.append("<p>Controls which external hosts/ports agents can reach. Allowlist = only approved hosts. Blocklist = everything except blocked hosts.</p>");
576
- html.append("</div>");
577
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
578
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
579
- html.append("<div><strong style='font-size:14px'>Egress Filtering</strong><div style='font-size:12px;color:var(--text-muted)'>Control outbound network connections</div></div>");
580
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='eg_enabled' value='1'").append(checkedAttr(egress, "enabled")).append("> Enabled</label>");
581
- html.append("</div>");
582
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
583
- html.append("<div class='form-group'><label>Mode</label>");
584
- html.append("<select name='eg_mode'><option value='blocklist'").append("blocklist".equals(egressMode) ? " selected" : "").append(">Blocklist</option>");
585
- html.append("<option value='allowlist'").append("allowlist".equals(egressMode) ? " selected" : "").append(">Allowlist</option></select></div>");
586
- html.append("<div></div>");
587
- html.append("<div class='form-group'><label>Allowed Hosts (comma-separated)</label>");
588
- html.append("<input type='text' name='eg_allowedHosts' value='").append(Helpers.esc(joinList(egress, "allowedHosts"))).append("' placeholder='api.example.com'></div>");
589
- html.append("<div class='form-group'><label>Blocked Hosts (comma-separated)</label>");
590
- html.append("<input type='text' name='eg_blockedHosts' value='").append(Helpers.esc(joinList(egress, "blockedHosts"))).append("' placeholder='evil.com'></div>");
591
- html.append("<div class='form-group'><label>Allowed Ports (comma-separated)</label>");
592
- html.append("<input type='text' name='eg_allowedPorts' value='").append(Helpers.esc(joinList(egress, "allowedPorts"))).append("' placeholder='443, 80'></div>");
593
- html.append("<div class='form-group'><label>Blocked Ports (comma-separated)</label>");
594
- html.append("<input type='text' name='eg_blockedPorts' value='").append(Helpers.esc(joinList(egress, "blockedPorts"))).append("' placeholder='25, 445'></div>");
595
- html.append("</div></div>");
596
- html.append("</div>");
597
-
598
- // Proxy Configuration card
599
- html.append("<div class='card'>");
600
- html.append("<div style='display:flex;align-items:center;gap:0'>");
601
- html.append("<h3>Proxy Configuration</h3>");
602
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('proxy')\" title='Learn more'>?</button>");
603
- html.append("</div>");
604
- html.append("<div id='help-proxy' class='settings-help-panel'>");
605
- html.append("<ul>");
606
- html.append("<li><strong>Proxy Config</strong> &mdash; HTTP/HTTPS proxy URLs for outbound access. &ldquo;No-Proxy&rdquo; bypasses the proxy.</li>");
607
- html.append("<li><strong>Trusted Proxies</strong> &mdash; IPs of your load balancers/reverse proxies, so IP access control sees real client IPs.</li>");
608
- html.append("</ul>");
609
- html.append("</div>");
610
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
611
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
612
- html.append("<div class='form-group'><label>HTTP Proxy</label>");
613
- html.append("<input type='text' name='proxy_http' value='").append(Helpers.esc(Helpers.strVal(proxy, "httpProxy"))).append("' placeholder='http://proxy:8080'></div>");
614
- html.append("<div class='form-group'><label>HTTPS Proxy</label>");
615
- html.append("<input type='text' name='proxy_https' value='").append(Helpers.esc(Helpers.strVal(proxy, "httpsProxy"))).append("' placeholder='http://proxy:8443'></div>");
616
- html.append("<div class='form-group' style='grid-column:1/-1'><label>No-Proxy Hosts (comma-separated)</label>");
617
- html.append("<input type='text' name='proxy_noProxy' value='").append(Helpers.esc(joinList(proxy, "noProxy"))).append("' placeholder='localhost, 127.0.0.1'></div>");
618
- html.append("</div></div>");
619
- html.append("</div>");
620
-
621
- // Trusted Proxies card
622
- html.append("<div class='card'>");
623
- html.append("<div style='display:flex;align-items:center;gap:0'>");
624
- html.append("<h3>Trusted Proxies</h3>");
625
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('trusted-proxies')\" title='Learn more'>?</button>");
626
- html.append("</div>");
627
- html.append("<div id='help-trusted-proxies' class='settings-help-panel'>");
628
- html.append("<p>IPs of your load balancers/reverse proxies, so IP access control sees real client IPs instead of proxy IPs.</p>");
629
- html.append("</div>");
630
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
631
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
632
- html.append("<div><strong style='font-size:14px'>Trusted Proxies</strong><div style='font-size:12px;color:var(--text-muted)'>Configure trusted reverse proxy IPs/CIDRs</div></div>");
633
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='tp_enabled' value='1'").append(checkedAttr(trustedProxies, "enabled")).append("> Enabled</label>");
634
- html.append("</div>");
635
- html.append("<div class='form-group'><label>IPs/CIDRs (comma-separated)</label>");
636
- html.append("<input type='text' name='tp_ips' value='").append(Helpers.esc(joinList(trustedProxies, "ips"))).append("' placeholder='10.0.0.0/8, 172.16.0.0/12'></div>");
637
- html.append("</div>");
638
- html.append("</div>");
639
-
640
- // Network Settings card
641
- html.append("<div class='card'>");
642
- html.append("<div style='display:flex;align-items:center;gap:0'>");
643
- html.append("<h3>Network Settings</h3>");
644
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('network')\" title='Learn more'>?</button>");
645
- html.append("</div>");
646
- html.append("<div id='help-network' class='settings-help-panel'>");
647
- html.append("<ul>");
648
- html.append("<li><strong>CORS Origins</strong> &mdash; Which websites can make API calls to AgenticMail. Empty = allow all.</li>");
649
- html.append("<li><strong>Rate Limiting</strong> &mdash; Limits API requests per IP per minute. Protects against abuse.</li>");
650
- html.append("<li><strong>HTTPS Enforcement</strong> &mdash; Forces encrypted connections. Recommended for production.</li>");
651
- html.append("<li><strong>Security Headers</strong> &mdash; Browser security: HSTS, X-Frame-Options, Content-Type-Options.</li>");
652
- html.append("</ul>");
653
- html.append("</div>");
654
- html.append("<div style='display:grid;gap:20px'>");
655
-
656
- // CORS
657
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
658
- html.append("<strong style='font-size:14px'>CORS</strong><div style='font-size:12px;color:var(--text-muted);margin-bottom:12px'>Allowed origins for cross-origin requests</div>");
659
- html.append("<div class='form-group'><label>CORS Origins (comma-separated)</label>");
660
- html.append("<input type='text' name='net_corsOrigins' value='").append(Helpers.esc(joinList(network, "corsOrigins"))).append("' placeholder='https://app.example.com'></div>");
661
- html.append("</div>");
662
-
663
- // Rate Limiting
664
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
665
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
666
- html.append("<div><strong style='font-size:14px'>Rate Limiting</strong><div style='font-size:12px;color:var(--text-muted)'>Throttle incoming requests</div></div>");
667
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_rl_enabled' value='1'").append(checkedAttr(netRateLimit, "enabled")).append("> Enabled</label>");
668
- html.append("</div>");
669
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
670
- html.append("<div class='form-group'><label>Requests Per Minute</label>");
671
- html.append("<input type='number' name='net_rl_rpm' value='").append(rpm).append("' placeholder='120'></div>");
672
- html.append("<div class='form-group'><label>Skip Paths (comma-separated)</label>");
673
- html.append("<input type='text' name='net_rl_skipPaths' value='").append(Helpers.esc(joinList(netRateLimit, "skipPaths"))).append("' placeholder='/health, /ready'></div>");
674
- html.append("</div></div>");
675
-
676
- // HTTPS Enforcement
677
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
678
- html.append("<div style='display:flex;justify-content:space-between;align-items:center;margin-bottom:12px'>");
679
- html.append("<div><strong style='font-size:14px'>HTTPS Enforcement</strong><div style='font-size:12px;color:var(--text-muted)'>Redirect HTTP to HTTPS</div></div>");
680
- html.append("<label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_https_enabled' value='1'").append(checkedAttr(httpsEnforcement, "enabled")).append("> Enabled</label>");
681
- html.append("</div>");
682
- html.append("<div class='form-group'><label>Exclude Paths (comma-separated)</label>");
683
- html.append("<input type='text' name='net_https_excludePaths' value='").append(Helpers.esc(joinList(httpsEnforcement, "excludePaths"))).append("' placeholder='/health, /ready'></div>");
684
- html.append("</div>");
685
-
686
- // Security Headers
687
- html.append("<div style='padding:16px;background:var(--bg-secondary,#f8f9fa);border-radius:8px;border:1px solid var(--border)'>");
688
- html.append("<strong style='font-size:14px'>Security Headers</strong><div style='font-size:12px;color:var(--text-muted);margin-bottom:12px'>HTTP security response headers</div>");
689
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr;gap:14px'>");
690
- html.append("<div class='form-group'><label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_hsts' value='1'").append(checkedAttr(secHeaders, "hsts")).append("> HSTS</label></div>");
691
- html.append("<div class='form-group'><label>HSTS Max-Age (seconds)</label>");
692
- html.append("<input type='number' name='net_hstsMaxAge' value='").append(hstsMaxAge).append("'></div>");
693
- html.append("<div class='form-group'><label>X-Frame-Options</label>");
694
- html.append("<select name='net_xFrameOptions'><option value='DENY'").append("DENY".equals(xFrameOptions) ? " selected" : "").append(">DENY</option>");
695
- html.append("<option value='SAMEORIGIN'").append("SAMEORIGIN".equals(xFrameOptions) ? " selected" : "").append(">SAMEORIGIN</option></select></div>");
696
- html.append("<div class='form-group'><label style='display:flex;align-items:center;gap:6px;cursor:pointer'><input type='checkbox' name='net_xContentTypeOptions' value='1'").append(checkedAttr(secHeaders, "xContentTypeOptions")).append("> X-Content-Type-Options: nosniff</label></div>");
697
- html.append("<div class='form-group'><label>Referrer Policy</label>");
698
- html.append("<input type='text' name='net_referrerPolicy' value='").append(Helpers.esc(referrerPolicy)).append("'></div>");
699
- html.append("<div class='form-group'><label>Permissions Policy</label>");
700
- html.append("<input type='text' name='net_permissionsPolicy' value='").append(Helpers.esc(permissionsPolicy)).append("'></div>");
701
- html.append("</div></div>");
702
-
703
- html.append("</div>");
704
- html.append("</div>");
705
-
706
- html.append("<button class='btn btn-primary' type='submit'>Save Network &amp; Firewall</button>");
707
- html.append("</form>");
708
- html.append("</div>");
709
- }
710
-
711
- @SuppressWarnings("unchecked")
712
- private void renderModelPricingPanel(StringBuilder html, String token) {
713
- var mpData = ApiClient.get("/api/settings/model-pricing", token);
714
- if (mpData == null) mpData = new HashMap<>();
715
-
716
- // Unwrap modelPricingConfig if present
717
- Map<String, Object> cfg = mpData;
718
- Map<String, Object> mpc = Helpers.mapVal(mpData, "modelPricingConfig");
719
- if (!mpc.isEmpty()) cfg = mpc;
720
-
721
- String currency = Helpers.strVal(cfg, "currency");
722
- if (currency.isEmpty()) currency = "USD";
723
-
724
- List<?> models = new ArrayList<>();
725
- Object modelsObj = cfg.get("models");
726
- if (modelsObj instanceof List) {
727
- models = (List<?>) modelsObj;
728
- }
729
-
730
- // Provider display name mapping
731
- Map<String, String> providerLabelsMap = new LinkedHashMap<>();
732
- providerLabelsMap.put("anthropic", "Anthropic");
733
- providerLabelsMap.put("openai", "OpenAI");
734
- providerLabelsMap.put("google", "Google");
735
- providerLabelsMap.put("deepseek", "DeepSeek");
736
- providerLabelsMap.put("xai", "xAI (Grok)");
737
- providerLabelsMap.put("mistral", "Mistral");
738
- providerLabelsMap.put("groq", "Groq");
739
- providerLabelsMap.put("together", "Together");
740
- providerLabelsMap.put("fireworks", "Fireworks");
741
- providerLabelsMap.put("moonshot", "Moonshot (Kimi)");
742
- providerLabelsMap.put("cerebras", "Cerebras");
743
- providerLabelsMap.put("openrouter", "OpenRouter");
744
- providerLabelsMap.put("ollama", "Ollama (Local)");
745
- providerLabelsMap.put("vllm", "vLLM (Local)");
746
- providerLabelsMap.put("lmstudio", "LM Studio (Local)");
747
- providerLabelsMap.put("litellm", "LiteLLM (Local)");
748
-
749
- // Group models by provider
750
- List<String> providerOrder = new ArrayList<>();
751
- Map<String, List<Map<String, Object>>> providerModels = new LinkedHashMap<>();
752
- for (Object item : models) {
753
- if (!(item instanceof Map)) continue;
754
- Map<String, Object> m = (Map<String, Object>) item;
755
- String provider = Helpers.strVal(m, "provider");
756
- if (!providerModels.containsKey(provider)) {
757
- providerOrder.add(provider);
758
- providerModels.put(provider, new ArrayList<>());
759
- }
760
- providerModels.get(provider).add(m);
761
- }
762
-
763
- html.append("<div id='settings-panel-model-pricing' style='display:none'>");
764
- html.append("<form method='POST' action='/settings'>");
765
- html.append("<input type='hidden' name='_form' value='model-pricing'>");
766
-
767
- html.append("<div class='card'>");
768
- html.append("<div style='display:flex;align-items:center;gap:0'>");
769
- html.append("<h3>Model Pricing</h3>");
770
- html.append("<button class='settings-help-btn' onclick=\"toggleSettingsHelp('model-pricing')\" title='Learn more'>?</button>");
771
- html.append("</div>");
772
- html.append("<div id='help-model-pricing' class='settings-help-panel'>");
773
- html.append("<p>Configure per-model pricing for cost estimation and budget tracking. Costs are per million tokens.</p>");
774
- html.append("<h4>How It Works</h4>");
775
- html.append("<ul>");
776
- html.append("<li><strong>Input Cost</strong> &mdash; Cost per million input (prompt) tokens sent to the model.</li>");
777
- html.append("<li><strong>Output Cost</strong> &mdash; Cost per million output (completion) tokens generated by the model.</li>");
778
- html.append("<li><strong>Context Window</strong> &mdash; Maximum number of tokens the model supports in a single request.</li>");
779
- html.append("</ul>");
780
- html.append("</div>");
781
- html.append("<div style='font-size:13px;color:var(--text-muted);margin-bottom:12px'>Currency: ").append(Helpers.esc(currency)).append("</div>");
782
-
783
- if (models.isEmpty()) {
784
- html.append("<p style='color:var(--text-muted);font-size:13px'>No models configured yet. Add one below.</p>");
785
- } else {
786
- for (String provider : providerOrder) {
787
- List<Map<String, Object>> pModels = providerModels.get(provider);
788
- String providerLabel = providerLabelsMap.getOrDefault(provider, provider.isEmpty() ? "Unknown" : provider);
789
- html.append("<div style='margin-bottom:16px'><strong style='font-size:14px'>").append(Helpers.esc(providerLabel)).append("</strong>");
790
- html.append("<div class='table-wrap' style='margin-top:8px'><table><thead><tr><th>Model ID</th><th>Display Name</th><th>Input Cost/M</th><th>Output Cost/M</th><th>Context Window</th><th></th></tr></thead><tbody>");
791
- for (int i = 0; i < pModels.size(); i++) {
792
- Map<String, Object> m = pModels.get(i);
793
- String prefix = "model_" + provider + "_" + i + "_";
794
- String modelId = Helpers.strVal(m, "modelId");
795
- String displayName = Helpers.strVal(m, "displayName");
796
- String inputCost = numStr(m, "inputCostPerMillion");
797
- String outputCost = numStr(m, "outputCostPerMillion");
798
- String contextWindow = numStr(m, "contextWindow");
799
-
800
- html.append("<tr>");
801
- html.append("<td><input type='text' name='").append(prefix).append("modelId' value='").append(Helpers.esc(modelId)).append("' style='min-width:140px'></td>");
802
- html.append("<td><input type='text' name='").append(prefix).append("displayName' value='").append(Helpers.esc(displayName)).append("' style='min-width:120px'></td>");
803
- html.append("<td><input type='number' step='0.01' name='").append(prefix).append("inputCost' value='").append(Helpers.esc(inputCost)).append("' style='width:100px'></td>");
804
- html.append("<td><input type='number' step='0.01' name='").append(prefix).append("outputCost' value='").append(Helpers.esc(outputCost)).append("' style='width:100px'></td>");
805
- html.append("<td><input type='number' name='").append(prefix).append("contextWindow' value='").append(Helpers.esc(contextWindow)).append("' style='width:110px'></td>");
806
- html.append("<td><input type='hidden' name='").append(prefix).append("provider' value='").append(Helpers.esc(provider)).append("'>");
807
- html.append("<button type='button' class='btn' style='padding:4px 10px;font-size:12px;color:var(--danger,#e53e3e)' onclick='this.closest(\"tr\").remove()'>Remove</button></td>");
808
- html.append("</tr>");
809
- }
810
- html.append("</tbody></table></div></div>");
811
- }
812
- }
813
-
814
- html.append("</div>");
815
-
816
- html.append("<div class='card'>");
817
- html.append("<h3>Add Model</h3>");
818
- html.append("<div style='display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px'>");
819
- html.append("<div class='form-group'><label>Provider</label><select name='new_provider'><option value='anthropic'>Anthropic</option><option value='openai'>OpenAI</option><option value='google'>Google</option><option value='deepseek'>DeepSeek</option><option value='xai'>xAI (Grok)</option><option value='mistral'>Mistral</option><option value='groq'>Groq</option><option value='together'>Together</option><option value='fireworks'>Fireworks</option><option value='moonshot'>Moonshot (Kimi)</option><option value='cerebras'>Cerebras</option><option value='openrouter'>OpenRouter</option><option value='ollama'>Ollama (Local)</option><option value='vllm'>vLLM (Local)</option><option value='lmstudio'>LM Studio (Local)</option><option value='litellm'>LiteLLM (Local)</option></select></div>");
820
- html.append("<div class='form-group'><label>Model ID</label><input type='text' name='new_modelId' placeholder='gpt-4o'></div>");
821
- html.append("<div class='form-group'><label>Display Name</label><input type='text' name='new_displayName' placeholder='GPT-4o'></div>");
822
- html.append("<div class='form-group'><label>Input Cost / Million Tokens</label><input type='number' step='0.01' name='new_inputCost' placeholder='2.50'></div>");
823
- html.append("<div class='form-group'><label>Output Cost / Million Tokens</label><input type='number' step='0.01' name='new_outputCost' placeholder='10.00'></div>");
824
- html.append("<div class='form-group'><label>Context Window</label><input type='number' name='new_contextWindow' placeholder='128000'></div>");
825
- html.append("</div></div>");
826
-
827
- html.append("<button class='btn btn-primary' type='submit'>Save Model Pricing</button>");
828
- html.append("</form>");
829
- html.append("</div>");
830
- }
831
-
832
- private String numStr(Map<String, Object> m, String key) {
833
- Object v = m.get(key);
834
- if (v == null) return "0";
835
- return v.toString();
836
- }
837
-
838
- private void handleModelPricingUpdate(HttpExchange ex, String token, Map<String, String> form) throws IOException {
839
- // Collect existing models from form fields (model_{provider}_{index}_*)
840
- Map<String, Boolean> seenPrefixes = new LinkedHashMap<>();
841
- for (String key : form.keySet()) {
842
- if (key.startsWith("model_") && key.endsWith("provider")) {
843
- String prefix = key.substring(0, key.length() - "provider".length());
844
- seenPrefixes.put(prefix, true);
845
- }
846
- }
847
-
848
- List<Object> models = new ArrayList<>();
849
- for (String prefix : seenPrefixes.keySet()) {
850
- String modelId = form.getOrDefault(prefix + "modelId", "");
851
- if (modelId.isEmpty()) continue;
852
-
853
- double inputCost = 0;
854
- try { inputCost = Double.parseDouble(form.getOrDefault(prefix + "inputCost", "0")); } catch (NumberFormatException e) { }
855
- double outputCost = 0;
856
- try { outputCost = Double.parseDouble(form.getOrDefault(prefix + "outputCost", "0")); } catch (NumberFormatException e) { }
857
- int contextWindow = 0;
858
- try { contextWindow = Integer.parseInt(form.getOrDefault(prefix + "contextWindow", "0")); } catch (NumberFormatException e) { }
859
-
860
- Map<String, Object> model = new LinkedHashMap<>();
861
- model.put("provider", form.getOrDefault(prefix + "provider", ""));
862
- model.put("modelId", modelId);
863
- model.put("displayName", form.getOrDefault(prefix + "displayName", ""));
864
- model.put("inputCostPerMillion", inputCost);
865
- model.put("outputCostPerMillion", outputCost);
866
- model.put("contextWindow", contextWindow);
867
- models.add(model);
868
- }
869
-
870
- // Add new model if provided
871
- String newModelId = form.getOrDefault("new_modelId", "");
872
- if (!newModelId.isEmpty()) {
873
- double newInputCost = 0;
874
- try { newInputCost = Double.parseDouble(form.getOrDefault("new_inputCost", "0")); } catch (NumberFormatException e) { }
875
- double newOutputCost = 0;
876
- try { newOutputCost = Double.parseDouble(form.getOrDefault("new_outputCost", "0")); } catch (NumberFormatException e) { }
877
- int newContextWindow = 0;
878
- try { newContextWindow = Integer.parseInt(form.getOrDefault("new_contextWindow", "0")); } catch (NumberFormatException e) { }
879
-
880
- Map<String, Object> newModel = new LinkedHashMap<>();
881
- newModel.put("provider", form.getOrDefault("new_provider", ""));
882
- newModel.put("modelId", newModelId);
883
- newModel.put("displayName", form.getOrDefault("new_displayName", ""));
884
- newModel.put("inputCostPerMillion", newInputCost);
885
- newModel.put("outputCostPerMillion", newOutputCost);
886
- newModel.put("contextWindow", newContextWindow);
887
- models.add(newModel);
888
- }
889
-
890
- Map<String, Object> payload = new LinkedHashMap<>();
891
- payload.put("models", models);
892
- payload.put("currency", "USD");
893
-
894
- var result = ApiClient.put("/api/settings/model-pricing", token, buildNestedJson(payload));
895
- int status = Helpers.intVal(result, "_status");
896
-
897
- if (status > 0 && status < 300) {
898
- SessionManager.setFlash(ex, "Model pricing settings updated", "success");
899
- } else {
900
- String err = Helpers.strVal(result, "error");
901
- if (err.isEmpty()) err = "Failed to update model pricing settings";
902
- SessionManager.setFlash(ex, err, "danger");
903
- }
904
-
905
- SessionManager.redirect(ex, "/settings");
906
- }
907
-
908
- private void handleFirewallUpdate(HttpExchange ex, String token, Map<String, String> form) throws IOException {
909
- Map<String, Object> payload = new LinkedHashMap<>();
910
-
911
- Map<String, Object> ipAccess = new LinkedHashMap<>();
912
- ipAccess.put("enabled", "1".equals(form.get("ip_enabled")));
913
- ipAccess.put("mode", form.getOrDefault("ip_mode", "allowlist"));
914
- ipAccess.put("allowlist", splitTrim(form.getOrDefault("ip_allowlist", "")));
915
- ipAccess.put("blocklist", splitTrim(form.getOrDefault("ip_blocklist", "")));
916
- ipAccess.put("bypassPaths", splitTrim(form.getOrDefault("ip_bypassPaths", "")));
917
- payload.put("ipAccess", ipAccess);
918
-
919
- Map<String, Object> egress = new LinkedHashMap<>();
920
- egress.put("enabled", "1".equals(form.get("eg_enabled")));
921
- egress.put("mode", form.getOrDefault("eg_mode", "blocklist"));
922
- egress.put("allowedHosts", splitTrim(form.getOrDefault("eg_allowedHosts", "")));
923
- egress.put("blockedHosts", splitTrim(form.getOrDefault("eg_blockedHosts", "")));
924
- egress.put("allowedPorts", splitTrimInt(form.getOrDefault("eg_allowedPorts", "")));
925
- egress.put("blockedPorts", splitTrimInt(form.getOrDefault("eg_blockedPorts", "")));
926
- payload.put("egress", egress);
927
-
928
- Map<String, Object> proxy = new LinkedHashMap<>();
929
- proxy.put("httpProxy", form.getOrDefault("proxy_http", ""));
930
- proxy.put("httpsProxy", form.getOrDefault("proxy_https", ""));
931
- proxy.put("noProxy", splitTrim(form.getOrDefault("proxy_noProxy", "")));
932
- payload.put("proxy", proxy);
933
-
934
- Map<String, Object> trustedProxies = new LinkedHashMap<>();
935
- trustedProxies.put("enabled", "1".equals(form.get("tp_enabled")));
936
- trustedProxies.put("ips", splitTrim(form.getOrDefault("tp_ips", "")));
937
- payload.put("trustedProxies", trustedProxies);
938
-
939
- int rpm = 120;
940
- try { rpm = Integer.parseInt(form.getOrDefault("net_rl_rpm", "120")); } catch (NumberFormatException e) { }
941
- int hstsMaxAge = 31536000;
942
- try { hstsMaxAge = Integer.parseInt(form.getOrDefault("net_hstsMaxAge", "31536000")); } catch (NumberFormatException e) { }
943
-
944
- Map<String, Object> network = new LinkedHashMap<>();
945
- network.put("corsOrigins", splitTrim(form.getOrDefault("net_corsOrigins", "")));
946
-
947
- Map<String, Object> rateLimit = new LinkedHashMap<>();
948
- rateLimit.put("enabled", "1".equals(form.get("net_rl_enabled")));
949
- rateLimit.put("requestsPerMinute", rpm);
950
- rateLimit.put("skipPaths", splitTrim(form.getOrDefault("net_rl_skipPaths", "")));
951
- network.put("rateLimit", rateLimit);
952
-
953
- Map<String, Object> httpsEnforcement = new LinkedHashMap<>();
954
- httpsEnforcement.put("enabled", "1".equals(form.get("net_https_enabled")));
955
- httpsEnforcement.put("excludePaths", splitTrim(form.getOrDefault("net_https_excludePaths", "")));
956
- network.put("httpsEnforcement", httpsEnforcement);
957
-
958
- Map<String, Object> securityHeaders = new LinkedHashMap<>();
959
- securityHeaders.put("hsts", "1".equals(form.get("net_hsts")));
960
- securityHeaders.put("hstsMaxAge", hstsMaxAge);
961
- securityHeaders.put("xFrameOptions", form.getOrDefault("net_xFrameOptions", "DENY"));
962
- securityHeaders.put("xContentTypeOptions", "1".equals(form.get("net_xContentTypeOptions")));
963
- securityHeaders.put("referrerPolicy", form.getOrDefault("net_referrerPolicy", "strict-origin-when-cross-origin"));
964
- securityHeaders.put("permissionsPolicy", form.getOrDefault("net_permissionsPolicy", "camera=(), microphone=(), geolocation=()"));
965
- network.put("securityHeaders", securityHeaders);
966
-
967
- payload.put("network", network);
968
-
969
- var result = ApiClient.put("/api/settings/firewall", token, buildNestedJson(payload));
970
- int status = Helpers.intVal(result, "_status");
971
-
972
- if (status > 0 && status < 300) {
973
- SessionManager.setFlash(ex, "Network & firewall settings updated", "success");
974
- } else {
975
- String err = Helpers.strVal(result, "error");
976
- if (err.isEmpty()) err = "Failed to update network & firewall settings";
977
- SessionManager.setFlash(ex, err, "danger");
978
- }
979
-
980
- SessionManager.redirect(ex, "/settings");
981
- }
982
-
983
- private List<Integer> splitTrimInt(String val) {
984
- List<Integer> result = new ArrayList<>();
985
- if (val == null || val.isEmpty()) return result;
986
- for (String part : val.split(",")) {
987
- String trimmed = part.trim();
988
- if (!trimmed.isEmpty()) {
989
- try { result.add(Integer.parseInt(trimmed)); }
990
- catch (NumberFormatException e) { /* skip */ }
991
- }
992
- }
993
- return result;
994
- }
995
-
996
- private String checkedAttr(Map<String, Object> m, String key) {
997
- Object v = m.get(key);
998
- if (Boolean.TRUE.equals(v)) return " checked";
999
- return "";
1000
- }
1001
-
1002
- @SuppressWarnings("unchecked")
1003
- private String joinList(Map<String, Object> m, String key) {
1004
- Object v = m.get(key);
1005
- if (v instanceof List) {
1006
- StringBuilder sb = new StringBuilder();
1007
- boolean first = true;
1008
- for (Object item : (List<?>) v) {
1009
- if (!first) sb.append(", ");
1010
- first = false;
1011
- sb.append(item != null ? item.toString() : "");
1012
- }
1013
- return sb.toString();
1014
- }
1015
- return "";
1016
- }
1017
- }