@qwickapps/server 1.5.2 → 1.6.1

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 (723) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +177 -0
  3. package/dist/core/control-panel.d.ts.map +1 -1
  4. package/dist/core/control-panel.js +118 -261
  5. package/dist/core/control-panel.js.map +1 -1
  6. package/dist/core/plugin-registry.d.ts +20 -0
  7. package/dist/core/plugin-registry.d.ts.map +1 -1
  8. package/dist/core/plugin-registry.js +27 -2
  9. package/dist/core/plugin-registry.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -2
  13. package/dist/index.js.map +1 -1
  14. package/dist/plugins/api-keys/ApiKeysManagementPage.d.ts +9 -0
  15. package/dist/plugins/api-keys/ApiKeysManagementPage.d.ts.map +1 -0
  16. package/dist/plugins/api-keys/ApiKeysManagementPage.js +66 -0
  17. package/dist/plugins/api-keys/ApiKeysManagementPage.js.map +1 -0
  18. package/dist/plugins/api-keys/ApiKeysStatusWidget.d.ts +9 -0
  19. package/dist/plugins/api-keys/ApiKeysStatusWidget.d.ts.map +1 -0
  20. package/dist/plugins/api-keys/ApiKeysStatusWidget.js +30 -0
  21. package/dist/plugins/api-keys/ApiKeysStatusWidget.js.map +1 -0
  22. package/dist/plugins/api-keys/api-keys-plugin.d.ts +46 -0
  23. package/dist/plugins/api-keys/api-keys-plugin.d.ts.map +1 -0
  24. package/dist/plugins/api-keys/api-keys-plugin.js +452 -0
  25. package/dist/plugins/api-keys/api-keys-plugin.js.map +1 -0
  26. package/dist/plugins/api-keys/index.d.ts +18 -0
  27. package/dist/plugins/api-keys/index.d.ts.map +1 -0
  28. package/dist/plugins/api-keys/index.js +20 -0
  29. package/dist/plugins/api-keys/index.js.map +1 -0
  30. package/dist/plugins/api-keys/middleware/bearer-token-auth.d.ts +74 -0
  31. package/dist/plugins/api-keys/middleware/bearer-token-auth.d.ts.map +1 -0
  32. package/dist/plugins/api-keys/middleware/bearer-token-auth.js +201 -0
  33. package/dist/plugins/api-keys/middleware/bearer-token-auth.js.map +1 -0
  34. package/dist/plugins/api-keys/middleware/index.d.ts +8 -0
  35. package/dist/plugins/api-keys/middleware/index.d.ts.map +1 -0
  36. package/dist/plugins/api-keys/middleware/index.js +8 -0
  37. package/dist/plugins/api-keys/middleware/index.js.map +1 -0
  38. package/dist/plugins/api-keys/middleware/usage-logging.d.ts +21 -0
  39. package/dist/plugins/api-keys/middleware/usage-logging.d.ts.map +1 -0
  40. package/dist/plugins/api-keys/middleware/usage-logging.js +57 -0
  41. package/dist/plugins/api-keys/middleware/usage-logging.js.map +1 -0
  42. package/dist/plugins/api-keys/stores/index.d.ts +9 -0
  43. package/dist/plugins/api-keys/stores/index.d.ts.map +1 -0
  44. package/dist/plugins/api-keys/stores/index.js +9 -0
  45. package/dist/plugins/api-keys/stores/index.js.map +1 -0
  46. package/dist/plugins/api-keys/stores/plugin-scope-store.d.ts +81 -0
  47. package/dist/plugins/api-keys/stores/plugin-scope-store.d.ts.map +1 -0
  48. package/dist/plugins/api-keys/stores/plugin-scope-store.js +155 -0
  49. package/dist/plugins/api-keys/stores/plugin-scope-store.js.map +1 -0
  50. package/dist/plugins/api-keys/stores/postgres-store.d.ts +34 -0
  51. package/dist/plugins/api-keys/stores/postgres-store.d.ts.map +1 -0
  52. package/dist/plugins/api-keys/stores/postgres-store.js +360 -0
  53. package/dist/plugins/api-keys/stores/postgres-store.js.map +1 -0
  54. package/dist/plugins/api-keys/stores/usage-log-store.d.ts +119 -0
  55. package/dist/plugins/api-keys/stores/usage-log-store.d.ts.map +1 -0
  56. package/dist/plugins/api-keys/stores/usage-log-store.js +246 -0
  57. package/dist/plugins/api-keys/stores/usage-log-store.js.map +1 -0
  58. package/dist/plugins/api-keys/types.d.ts +309 -0
  59. package/dist/plugins/api-keys/types.d.ts.map +1 -0
  60. package/dist/plugins/api-keys/types.js +105 -0
  61. package/dist/plugins/api-keys/types.js.map +1 -0
  62. package/dist/plugins/auth/AuthManagementPage.d.ts +9 -0
  63. package/dist/plugins/auth/AuthManagementPage.d.ts.map +1 -0
  64. package/dist/plugins/auth/AuthManagementPage.js +73 -0
  65. package/dist/plugins/auth/AuthManagementPage.js.map +1 -0
  66. package/dist/plugins/auth/AuthStatusWidget.d.ts +9 -0
  67. package/dist/plugins/auth/AuthStatusWidget.d.ts.map +1 -0
  68. package/dist/plugins/auth/AuthStatusWidget.js +30 -0
  69. package/dist/plugins/auth/AuthStatusWidget.js.map +1 -0
  70. package/dist/plugins/auth/adapters/basic-adapter.d.ts +1 -0
  71. package/dist/plugins/auth/adapters/basic-adapter.d.ts.map +1 -1
  72. package/dist/plugins/auth/adapters/basic-adapter.js +54 -0
  73. package/dist/plugins/auth/adapters/basic-adapter.js.map +1 -1
  74. package/dist/plugins/auth/auth-plugin.js +1 -1
  75. package/dist/plugins/auth/auth-plugin.js.map +1 -1
  76. package/dist/plugins/auth/env-config.d.ts +15 -1
  77. package/dist/plugins/auth/env-config.d.ts.map +1 -1
  78. package/dist/plugins/auth/env-config.js +16 -6
  79. package/dist/plugins/auth/env-config.js.map +1 -1
  80. package/dist/plugins/auth/index.d.ts +5 -1
  81. package/dist/plugins/auth/index.d.ts.map +1 -1
  82. package/dist/plugins/auth/index.js +7 -1
  83. package/dist/plugins/auth/index.js.map +1 -1
  84. package/dist/plugins/bans/BansManagementPage.d.ts +9 -0
  85. package/dist/plugins/bans/BansManagementPage.d.ts.map +1 -0
  86. package/dist/plugins/bans/BansManagementPage.js +65 -0
  87. package/dist/plugins/bans/BansManagementPage.js.map +1 -0
  88. package/dist/plugins/bans/BansStatusWidget.d.ts +9 -0
  89. package/dist/plugins/bans/BansStatusWidget.d.ts.map +1 -0
  90. package/dist/plugins/bans/BansStatusWidget.js +30 -0
  91. package/dist/plugins/bans/BansStatusWidget.js.map +1 -0
  92. package/dist/plugins/bans/bans-plugin.js +1 -1
  93. package/dist/plugins/bans/bans-plugin.js.map +1 -1
  94. package/dist/plugins/bans/index.d.ts +4 -0
  95. package/dist/plugins/bans/index.d.ts.map +1 -1
  96. package/dist/plugins/bans/index.js +3 -0
  97. package/dist/plugins/bans/index.js.map +1 -1
  98. package/dist/plugins/cache/CacheManagementPage.d.ts +13 -0
  99. package/dist/plugins/cache/CacheManagementPage.d.ts.map +1 -0
  100. package/dist/plugins/cache/CacheManagementPage.js +175 -0
  101. package/dist/plugins/cache/CacheManagementPage.js.map +1 -0
  102. package/dist/plugins/cache/CacheStatusWidget.d.ts +13 -0
  103. package/dist/plugins/cache/CacheStatusWidget.d.ts.map +1 -0
  104. package/dist/plugins/cache/CacheStatusWidget.js +80 -0
  105. package/dist/plugins/cache/CacheStatusWidget.js.map +1 -0
  106. package/dist/plugins/cache/index.d.ts +10 -0
  107. package/dist/plugins/cache/index.d.ts.map +1 -0
  108. package/dist/plugins/cache/index.js +8 -0
  109. package/dist/plugins/cache/index.js.map +1 -0
  110. package/dist/plugins/cms/cms-plugin.d.ts +24 -0
  111. package/dist/plugins/cms/cms-plugin.d.ts.map +1 -0
  112. package/dist/plugins/cms/cms-plugin.js +220 -0
  113. package/dist/plugins/cms/cms-plugin.js.map +1 -0
  114. package/dist/plugins/cms/index.d.ts +8 -0
  115. package/dist/plugins/cms/index.d.ts.map +1 -0
  116. package/dist/plugins/cms/index.js +7 -0
  117. package/dist/plugins/cms/index.js.map +1 -0
  118. package/dist/plugins/config-plugin.js +4 -4
  119. package/dist/plugins/config-plugin.js.map +1 -1
  120. package/dist/plugins/core/index.d.ts +32 -0
  121. package/dist/plugins/core/index.d.ts.map +1 -0
  122. package/dist/plugins/core/index.js +129 -0
  123. package/dist/plugins/core/index.js.map +1 -0
  124. package/dist/plugins/devices/DevicesManagementPage.d.ts +9 -0
  125. package/dist/plugins/devices/DevicesManagementPage.d.ts.map +1 -0
  126. package/dist/plugins/devices/DevicesManagementPage.js +65 -0
  127. package/dist/plugins/devices/DevicesManagementPage.js.map +1 -0
  128. package/dist/plugins/devices/DevicesStatusWidget.d.ts +9 -0
  129. package/dist/plugins/devices/DevicesStatusWidget.d.ts.map +1 -0
  130. package/dist/plugins/devices/DevicesStatusWidget.js +30 -0
  131. package/dist/plugins/devices/DevicesStatusWidget.js.map +1 -0
  132. package/dist/plugins/devices/devices-plugin.js +1 -1
  133. package/dist/plugins/devices/devices-plugin.js.map +1 -1
  134. package/dist/plugins/devices/index.d.ts +4 -0
  135. package/dist/plugins/devices/index.d.ts.map +1 -1
  136. package/dist/plugins/devices/index.js +3 -0
  137. package/dist/plugins/devices/index.js.map +1 -1
  138. package/dist/plugins/diagnostics/DiagnosticsManagementPage.d.ts +13 -0
  139. package/dist/plugins/diagnostics/DiagnosticsManagementPage.d.ts.map +1 -0
  140. package/dist/plugins/diagnostics/DiagnosticsManagementPage.js +78 -0
  141. package/dist/plugins/diagnostics/DiagnosticsManagementPage.js.map +1 -0
  142. package/dist/plugins/diagnostics/DiagnosticsStatusWidget.d.ts +13 -0
  143. package/dist/plugins/diagnostics/DiagnosticsStatusWidget.d.ts.map +1 -0
  144. package/dist/plugins/diagnostics/DiagnosticsStatusWidget.js +87 -0
  145. package/dist/plugins/diagnostics/DiagnosticsStatusWidget.js.map +1 -0
  146. package/dist/plugins/diagnostics/index.d.ts +10 -0
  147. package/dist/plugins/diagnostics/index.d.ts.map +1 -0
  148. package/dist/plugins/diagnostics/index.js +8 -0
  149. package/dist/plugins/diagnostics/index.js.map +1 -0
  150. package/dist/plugins/diagnostics-plugin.js +4 -3
  151. package/dist/plugins/diagnostics-plugin.js.map +1 -1
  152. package/dist/plugins/entitlements/EntitlementsManagementPage.d.ts +9 -0
  153. package/dist/plugins/entitlements/EntitlementsManagementPage.d.ts.map +1 -0
  154. package/dist/plugins/entitlements/EntitlementsManagementPage.js +59 -0
  155. package/dist/plugins/entitlements/EntitlementsManagementPage.js.map +1 -0
  156. package/dist/plugins/entitlements/EntitlementsStatusWidget.d.ts +9 -0
  157. package/dist/plugins/entitlements/EntitlementsStatusWidget.d.ts.map +1 -0
  158. package/dist/plugins/entitlements/EntitlementsStatusWidget.js +30 -0
  159. package/dist/plugins/entitlements/EntitlementsStatusWidget.js.map +1 -0
  160. package/dist/plugins/entitlements/entitlements-plugin.js +1 -1
  161. package/dist/plugins/entitlements/entitlements-plugin.js.map +1 -1
  162. package/dist/plugins/entitlements/index.d.ts +4 -0
  163. package/dist/plugins/entitlements/index.d.ts.map +1 -1
  164. package/dist/plugins/entitlements/index.js +3 -0
  165. package/dist/plugins/entitlements/index.js.map +1 -1
  166. package/dist/plugins/frontend-app-plugin.d.ts.map +1 -1
  167. package/dist/plugins/frontend-app-plugin.js +5 -2
  168. package/dist/plugins/frontend-app-plugin.js.map +1 -1
  169. package/dist/plugins/health/HealthManagementPage.d.ts +13 -0
  170. package/dist/plugins/health/HealthManagementPage.d.ts.map +1 -0
  171. package/dist/plugins/health/HealthManagementPage.js +120 -0
  172. package/dist/plugins/health/HealthManagementPage.js.map +1 -0
  173. package/dist/plugins/health/HealthStatusWidget.d.ts +13 -0
  174. package/dist/plugins/health/HealthStatusWidget.d.ts.map +1 -0
  175. package/dist/plugins/health/HealthStatusWidget.js +80 -0
  176. package/dist/plugins/health/HealthStatusWidget.js.map +1 -0
  177. package/dist/plugins/health/index.d.ts +10 -0
  178. package/dist/plugins/health/index.d.ts.map +1 -0
  179. package/dist/plugins/health/index.js +8 -0
  180. package/dist/plugins/health/index.js.map +1 -0
  181. package/dist/plugins/index.d.ts +9 -1
  182. package/dist/plugins/index.d.ts.map +1 -1
  183. package/dist/plugins/index.js +6 -1
  184. package/dist/plugins/index.js.map +1 -1
  185. package/dist/plugins/logs/LogsManagementPage.d.ts +13 -0
  186. package/dist/plugins/logs/LogsManagementPage.d.ts.map +1 -0
  187. package/dist/plugins/logs/LogsManagementPage.js +151 -0
  188. package/dist/plugins/logs/LogsManagementPage.js.map +1 -0
  189. package/dist/plugins/logs/LogsStatusWidget.d.ts +13 -0
  190. package/dist/plugins/logs/LogsStatusWidget.d.ts.map +1 -0
  191. package/dist/plugins/logs/LogsStatusWidget.js +76 -0
  192. package/dist/plugins/logs/LogsStatusWidget.js.map +1 -0
  193. package/dist/plugins/logs/index.d.ts +10 -0
  194. package/dist/plugins/logs/index.d.ts.map +1 -0
  195. package/dist/plugins/logs/index.js +8 -0
  196. package/dist/plugins/logs/index.js.map +1 -0
  197. package/dist/plugins/logs-plugin.js +6 -6
  198. package/dist/plugins/logs-plugin.js.map +1 -1
  199. package/dist/plugins/maintenance/MaintenanceManagementPage.d.ts +13 -0
  200. package/dist/plugins/maintenance/MaintenanceManagementPage.d.ts.map +1 -0
  201. package/dist/plugins/maintenance/MaintenanceManagementPage.js +40 -0
  202. package/dist/plugins/maintenance/MaintenanceManagementPage.js.map +1 -0
  203. package/dist/plugins/maintenance/MaintenanceStatusWidget.d.ts +13 -0
  204. package/dist/plugins/maintenance/MaintenanceStatusWidget.d.ts.map +1 -0
  205. package/dist/plugins/maintenance/MaintenanceStatusWidget.js +76 -0
  206. package/dist/plugins/maintenance/MaintenanceStatusWidget.js.map +1 -0
  207. package/dist/plugins/maintenance/SeedExecutor.d.ts +17 -0
  208. package/dist/plugins/maintenance/SeedExecutor.d.ts.map +1 -0
  209. package/dist/plugins/maintenance/SeedExecutor.js +154 -0
  210. package/dist/plugins/maintenance/SeedExecutor.js.map +1 -0
  211. package/dist/plugins/maintenance/SeedHistory.d.ts +14 -0
  212. package/dist/plugins/maintenance/SeedHistory.d.ts.map +1 -0
  213. package/dist/plugins/maintenance/SeedHistory.js +183 -0
  214. package/dist/plugins/maintenance/SeedHistory.js.map +1 -0
  215. package/dist/plugins/maintenance/SeedList.d.ts +15 -0
  216. package/dist/plugins/maintenance/SeedList.d.ts.map +1 -0
  217. package/dist/plugins/maintenance/SeedList.js +68 -0
  218. package/dist/plugins/maintenance/SeedList.js.map +1 -0
  219. package/dist/plugins/maintenance/SeedManagementPage.d.ts +14 -0
  220. package/dist/plugins/maintenance/SeedManagementPage.d.ts.map +1 -0
  221. package/dist/plugins/maintenance/SeedManagementPage.js +42 -0
  222. package/dist/plugins/maintenance/SeedManagementPage.js.map +1 -0
  223. package/dist/plugins/maintenance/index.d.ts +20 -0
  224. package/dist/plugins/maintenance/index.d.ts.map +1 -0
  225. package/dist/plugins/maintenance/index.js +15 -0
  226. package/dist/plugins/maintenance/index.js.map +1 -0
  227. package/dist/plugins/maintenance/seed-executor.d.ts +55 -0
  228. package/dist/plugins/maintenance/seed-executor.d.ts.map +1 -0
  229. package/dist/plugins/maintenance/seed-executor.js +178 -0
  230. package/dist/plugins/maintenance/seed-executor.js.map +1 -0
  231. package/dist/plugins/maintenance-plugin.d.ts +35 -0
  232. package/dist/plugins/maintenance-plugin.d.ts.map +1 -0
  233. package/dist/plugins/maintenance-plugin.js +321 -0
  234. package/dist/plugins/maintenance-plugin.js.map +1 -0
  235. package/dist/plugins/notifications/NotificationsManagementPage.d.ts +13 -0
  236. package/dist/plugins/notifications/NotificationsManagementPage.d.ts.map +1 -0
  237. package/dist/plugins/notifications/NotificationsManagementPage.js +59 -0
  238. package/dist/plugins/notifications/NotificationsManagementPage.js.map +1 -0
  239. package/dist/plugins/notifications/NotificationsStatusWidget.d.ts +9 -0
  240. package/dist/plugins/notifications/NotificationsStatusWidget.d.ts.map +1 -0
  241. package/dist/plugins/notifications/NotificationsStatusWidget.js +30 -0
  242. package/dist/plugins/notifications/NotificationsStatusWidget.js.map +1 -0
  243. package/dist/plugins/notifications/index.d.ts +4 -0
  244. package/dist/plugins/notifications/index.d.ts.map +1 -1
  245. package/dist/plugins/notifications/index.js +3 -0
  246. package/dist/plugins/notifications/index.js.map +1 -1
  247. package/dist/plugins/notifications/notifications-plugin.js +1 -1
  248. package/dist/plugins/notifications/notifications-plugin.js.map +1 -1
  249. package/dist/plugins/parental/ParentalManagementPage.d.ts +9 -0
  250. package/dist/plugins/parental/ParentalManagementPage.d.ts.map +1 -0
  251. package/dist/plugins/parental/ParentalManagementPage.js +56 -0
  252. package/dist/plugins/parental/ParentalManagementPage.js.map +1 -0
  253. package/dist/plugins/parental/ParentalStatusWidget.d.ts +9 -0
  254. package/dist/plugins/parental/ParentalStatusWidget.d.ts.map +1 -0
  255. package/dist/plugins/parental/ParentalStatusWidget.js +30 -0
  256. package/dist/plugins/parental/ParentalStatusWidget.js.map +1 -0
  257. package/dist/plugins/parental/index.d.ts +4 -0
  258. package/dist/plugins/parental/index.d.ts.map +1 -1
  259. package/dist/plugins/parental/index.js +3 -0
  260. package/dist/plugins/parental/index.js.map +1 -1
  261. package/dist/plugins/parental/parental-plugin.js +1 -1
  262. package/dist/plugins/parental/parental-plugin.js.map +1 -1
  263. package/dist/plugins/postgres/PostgresManagementPage.d.ts +13 -0
  264. package/dist/plugins/postgres/PostgresManagementPage.d.ts.map +1 -0
  265. package/dist/plugins/postgres/PostgresManagementPage.js +139 -0
  266. package/dist/plugins/postgres/PostgresManagementPage.js.map +1 -0
  267. package/dist/plugins/postgres/PostgresStatusWidget.d.ts +13 -0
  268. package/dist/plugins/postgres/PostgresStatusWidget.d.ts.map +1 -0
  269. package/dist/plugins/postgres/PostgresStatusWidget.js +87 -0
  270. package/dist/plugins/postgres/PostgresStatusWidget.js.map +1 -0
  271. package/dist/plugins/postgres/index.d.ts +10 -0
  272. package/dist/plugins/postgres/index.d.ts.map +1 -0
  273. package/dist/plugins/postgres/index.js +8 -0
  274. package/dist/plugins/postgres/index.js.map +1 -0
  275. package/dist/plugins/preferences/PreferencesManagementPage.d.ts +9 -0
  276. package/dist/plugins/preferences/PreferencesManagementPage.d.ts.map +1 -0
  277. package/dist/plugins/preferences/PreferencesManagementPage.js +67 -0
  278. package/dist/plugins/preferences/PreferencesManagementPage.js.map +1 -0
  279. package/dist/plugins/preferences/PreferencesStatusWidget.d.ts +9 -0
  280. package/dist/plugins/preferences/PreferencesStatusWidget.d.ts.map +1 -0
  281. package/dist/plugins/preferences/PreferencesStatusWidget.js +30 -0
  282. package/dist/plugins/preferences/PreferencesStatusWidget.js.map +1 -0
  283. package/dist/plugins/preferences/index.d.ts +4 -0
  284. package/dist/plugins/preferences/index.d.ts.map +1 -1
  285. package/dist/plugins/preferences/index.js +3 -0
  286. package/dist/plugins/preferences/index.js.map +1 -1
  287. package/dist/plugins/preferences/preferences-plugin.d.ts.map +1 -1
  288. package/dist/plugins/preferences/preferences-plugin.js +9 -4
  289. package/dist/plugins/preferences/preferences-plugin.js.map +1 -1
  290. package/dist/plugins/preferences/types.d.ts +5 -0
  291. package/dist/plugins/preferences/types.d.ts.map +1 -1
  292. package/dist/plugins/preferences/types.js +5 -1
  293. package/dist/plugins/preferences/types.js.map +1 -1
  294. package/dist/plugins/profiles/ProfilesManagementPage.d.ts +9 -0
  295. package/dist/plugins/profiles/ProfilesManagementPage.d.ts.map +1 -0
  296. package/dist/plugins/profiles/ProfilesManagementPage.js +51 -0
  297. package/dist/plugins/profiles/ProfilesManagementPage.js.map +1 -0
  298. package/dist/plugins/profiles/ProfilesStatusWidget.d.ts +9 -0
  299. package/dist/plugins/profiles/ProfilesStatusWidget.d.ts.map +1 -0
  300. package/dist/plugins/profiles/ProfilesStatusWidget.js +30 -0
  301. package/dist/plugins/profiles/ProfilesStatusWidget.js.map +1 -0
  302. package/dist/plugins/profiles/index.d.ts +4 -0
  303. package/dist/plugins/profiles/index.d.ts.map +1 -1
  304. package/dist/plugins/profiles/index.js +3 -0
  305. package/dist/plugins/profiles/index.js.map +1 -1
  306. package/dist/plugins/profiles/profiles-plugin.js +1 -1
  307. package/dist/plugins/profiles/profiles-plugin.js.map +1 -1
  308. package/dist/plugins/qwickbrain/QwickbrainManagementPage.d.ts +13 -0
  309. package/dist/plugins/qwickbrain/QwickbrainManagementPage.d.ts.map +1 -0
  310. package/dist/plugins/qwickbrain/QwickbrainManagementPage.js +59 -0
  311. package/dist/plugins/qwickbrain/QwickbrainManagementPage.js.map +1 -0
  312. package/dist/plugins/qwickbrain/QwickbrainStatusWidget.d.ts +9 -0
  313. package/dist/plugins/qwickbrain/QwickbrainStatusWidget.d.ts.map +1 -0
  314. package/dist/plugins/qwickbrain/QwickbrainStatusWidget.js +30 -0
  315. package/dist/plugins/qwickbrain/QwickbrainStatusWidget.js.map +1 -0
  316. package/dist/plugins/qwickbrain/index.d.ts +4 -0
  317. package/dist/plugins/qwickbrain/index.d.ts.map +1 -1
  318. package/dist/plugins/qwickbrain/index.js +3 -0
  319. package/dist/plugins/qwickbrain/index.js.map +1 -1
  320. package/dist/plugins/qwickbrain/qwickbrain-plugin.d.ts.map +1 -1
  321. package/dist/plugins/qwickbrain/qwickbrain-plugin.js +12 -34
  322. package/dist/plugins/qwickbrain/qwickbrain-plugin.js.map +1 -1
  323. package/dist/plugins/qwickbrain/types.d.ts +0 -1
  324. package/dist/plugins/qwickbrain/types.d.ts.map +1 -1
  325. package/dist/plugins/rate-limit/RateLimitManagementPage.d.ts +13 -0
  326. package/dist/plugins/rate-limit/RateLimitManagementPage.d.ts.map +1 -0
  327. package/dist/plugins/rate-limit/RateLimitManagementPage.js +60 -0
  328. package/dist/plugins/rate-limit/RateLimitManagementPage.js.map +1 -0
  329. package/dist/plugins/rate-limit/RateLimitStatusWidget.d.ts +9 -0
  330. package/dist/plugins/rate-limit/RateLimitStatusWidget.d.ts.map +1 -0
  331. package/dist/plugins/rate-limit/RateLimitStatusWidget.js +30 -0
  332. package/dist/plugins/rate-limit/RateLimitStatusWidget.js.map +1 -0
  333. package/dist/plugins/rate-limit/index.d.ts +4 -0
  334. package/dist/plugins/rate-limit/index.d.ts.map +1 -1
  335. package/dist/plugins/rate-limit/index.js +3 -0
  336. package/dist/plugins/rate-limit/index.js.map +1 -1
  337. package/dist/plugins/rate-limit/rate-limit-plugin.js +5 -5
  338. package/dist/plugins/rate-limit/rate-limit-plugin.js.map +1 -1
  339. package/dist/plugins/subscriptions/SubscriptionsManagementPage.d.ts +9 -0
  340. package/dist/plugins/subscriptions/SubscriptionsManagementPage.d.ts.map +1 -0
  341. package/dist/plugins/subscriptions/SubscriptionsManagementPage.js +66 -0
  342. package/dist/plugins/subscriptions/SubscriptionsManagementPage.js.map +1 -0
  343. package/dist/plugins/subscriptions/SubscriptionsStatusWidget.d.ts +9 -0
  344. package/dist/plugins/subscriptions/SubscriptionsStatusWidget.d.ts.map +1 -0
  345. package/dist/plugins/subscriptions/SubscriptionsStatusWidget.js +30 -0
  346. package/dist/plugins/subscriptions/SubscriptionsStatusWidget.js.map +1 -0
  347. package/dist/plugins/subscriptions/index.d.ts +4 -0
  348. package/dist/plugins/subscriptions/index.d.ts.map +1 -1
  349. package/dist/plugins/subscriptions/index.js +3 -0
  350. package/dist/plugins/subscriptions/index.js.map +1 -1
  351. package/dist/plugins/subscriptions/subscriptions-plugin.js +1 -1
  352. package/dist/plugins/subscriptions/subscriptions-plugin.js.map +1 -1
  353. package/dist/plugins/usage/UsageManagementPage.d.ts +9 -0
  354. package/dist/plugins/usage/UsageManagementPage.d.ts.map +1 -0
  355. package/dist/plugins/usage/UsageManagementPage.js +42 -0
  356. package/dist/plugins/usage/UsageManagementPage.js.map +1 -0
  357. package/dist/plugins/usage/UsageStatusWidget.d.ts +9 -0
  358. package/dist/plugins/usage/UsageStatusWidget.d.ts.map +1 -0
  359. package/dist/plugins/usage/UsageStatusWidget.js +30 -0
  360. package/dist/plugins/usage/UsageStatusWidget.js.map +1 -0
  361. package/dist/plugins/usage/index.d.ts +4 -0
  362. package/dist/plugins/usage/index.d.ts.map +1 -1
  363. package/dist/plugins/usage/index.js +3 -0
  364. package/dist/plugins/usage/index.js.map +1 -1
  365. package/dist/plugins/usage/usage-plugin.js +1 -1
  366. package/dist/plugins/usage/usage-plugin.js.map +1 -1
  367. package/dist/plugins/users/UsersManagementPage.d.ts +13 -0
  368. package/dist/plugins/users/UsersManagementPage.d.ts.map +1 -0
  369. package/dist/plugins/users/UsersManagementPage.js +199 -0
  370. package/dist/plugins/users/UsersManagementPage.js.map +1 -0
  371. package/dist/plugins/users/UsersStatusWidget.d.ts +13 -0
  372. package/dist/plugins/users/UsersStatusWidget.d.ts.map +1 -0
  373. package/dist/plugins/users/UsersStatusWidget.js +79 -0
  374. package/dist/plugins/users/UsersStatusWidget.js.map +1 -0
  375. package/dist/plugins/users/stores/postgres-store.d.ts.map +1 -1
  376. package/dist/plugins/users/stores/postgres-store.js +74 -19
  377. package/dist/plugins/users/stores/postgres-store.js.map +1 -1
  378. package/dist/plugins/users/types.d.ts +30 -1
  379. package/dist/plugins/users/types.d.ts.map +1 -1
  380. package/dist/plugins/users/users-plugin.d.ts.map +1 -1
  381. package/dist/plugins/users/users-plugin.js +118 -3
  382. package/dist/plugins/users/users-plugin.js.map +1 -1
  383. package/dist-ui/assets/index-BiEHWqD3.js +528 -0
  384. package/dist-ui/assets/index-BiEHWqD3.js.map +1 -0
  385. package/dist-ui/index.html +1 -1
  386. package/dist-ui-lib/index.js +3682 -2765
  387. package/dist-ui-lib/index.js.map +1 -1
  388. package/dist-ui-lib/src/api/clientBuilder.d.ts +33 -0
  389. package/dist-ui-lib/{api → src/api}/controlPanelApi.d.ts +124 -0
  390. package/dist-ui-lib/src/api/index.d.ts +11 -0
  391. package/dist-ui-lib/src/api/types.d.ts +313 -0
  392. package/dist-ui-lib/{components → src/components}/ControlPanelApp.d.ts +2 -1
  393. package/dist-ui-lib/src/components/auth/AcceptInvitationPage.d.ts +21 -0
  394. package/dist-ui-lib/src/components/auth/LoginPage.d.ts +27 -0
  395. package/dist-ui-lib/src/components/auth/PasswordResetConfirmPage.d.ts +17 -0
  396. package/dist-ui-lib/src/components/auth/PasswordResetPage.d.ts +12 -0
  397. package/dist-ui-lib/src/components/auth/SignupPage.d.ts +27 -0
  398. package/dist-ui-lib/src/components/auth/VerifyEmailPage.d.ts +12 -0
  399. package/dist-ui-lib/src/components/auth/index.d.ts +19 -0
  400. package/dist-ui-lib/src/components/auth/shared/AuthError.d.ts +9 -0
  401. package/dist-ui-lib/src/components/auth/shared/AuthLayout.d.ts +11 -0
  402. package/dist-ui-lib/src/components/auth/shared/index.d.ts +7 -0
  403. package/dist-ui-lib/{components → src/components}/index.d.ts +5 -2
  404. package/dist-ui-lib/src/components/plugins/PluginConfigPanel.d.ts +65 -0
  405. package/dist-ui-lib/src/components/plugins/PluginManagementPage.d.ts +62 -0
  406. package/dist-ui-lib/src/components/plugins/PluginStatusWidget.d.ts +51 -0
  407. package/dist-ui-lib/src/components/plugins/index.d.ts +13 -0
  408. package/dist-ui-lib/src/config/preferences.d.ts +16 -0
  409. package/dist-ui-lib/src/dashboard/widgets/CMSMaintenanceWidget.d.ts +8 -0
  410. package/dist-ui-lib/src/dashboard/widgets/CMSStatusWidget.d.ts +8 -0
  411. package/dist-ui-lib/{dashboard → src/dashboard}/widgets/index.d.ts +2 -0
  412. package/dist-ui-lib/src/hooks/useJobStream.d.ts +38 -0
  413. package/dist-ui-lib/src/pages/AcceptInvitationPage.d.ts +28 -0
  414. package/dist-ui-lib/src/pages/PreferencesPage.d.ts +9 -0
  415. package/package.json +12 -5
  416. package/src/core/control-panel.ts +141 -286
  417. package/src/core/plugin-registry.ts +52 -3
  418. package/src/index.ts +27 -0
  419. package/src/plugins/api-keys/API_ROUTES.md +165 -0
  420. package/src/plugins/api-keys/ApiKeysManagementPage.test.tsx +58 -0
  421. package/src/plugins/api-keys/ApiKeysManagementPage.tsx +131 -0
  422. package/src/plugins/api-keys/ApiKeysStatusWidget.test.tsx +112 -0
  423. package/src/plugins/api-keys/ApiKeysStatusWidget.tsx +53 -0
  424. package/src/plugins/api-keys/api-keys-plugin.ts +533 -0
  425. package/src/plugins/api-keys/index.ts +55 -0
  426. package/src/plugins/api-keys/middleware/bearer-token-auth.ts +250 -0
  427. package/src/plugins/api-keys/middleware/index.ts +15 -0
  428. package/src/plugins/api-keys/middleware/usage-logging.ts +78 -0
  429. package/src/plugins/api-keys/stores/index.ts +21 -0
  430. package/src/plugins/api-keys/stores/plugin-scope-store.ts +280 -0
  431. package/src/plugins/api-keys/stores/postgres-store.ts +487 -0
  432. package/src/plugins/api-keys/stores/usage-log-store.ts +423 -0
  433. package/src/plugins/api-keys/types.ts +307 -0
  434. package/src/plugins/auth/API_ROUTES.md +110 -0
  435. package/src/plugins/auth/AuthManagementPage.test.tsx +58 -0
  436. package/src/plugins/auth/AuthManagementPage.tsx +170 -0
  437. package/src/plugins/auth/AuthStatusWidget.test.tsx +112 -0
  438. package/src/plugins/auth/AuthStatusWidget.tsx +53 -0
  439. package/src/plugins/auth/adapters/basic-adapter.ts +62 -0
  440. package/src/plugins/auth/auth-plugin.ts +1 -1
  441. package/src/plugins/auth/env-config.ts +16 -6
  442. package/src/plugins/auth/index.ts +9 -0
  443. package/src/plugins/bans/API_ROUTES.md +183 -0
  444. package/src/plugins/bans/BansManagementPage.test.tsx +58 -0
  445. package/src/plugins/bans/BansManagementPage.tsx +129 -0
  446. package/src/plugins/bans/BansStatusWidget.test.tsx +112 -0
  447. package/src/plugins/bans/BansStatusWidget.tsx +53 -0
  448. package/src/plugins/bans/bans-plugin.ts +1 -1
  449. package/src/plugins/bans/index.ts +6 -0
  450. package/src/plugins/cache/API_ROUTES.md +312 -0
  451. package/src/plugins/cache/CacheManagementPage.test.tsx +57 -0
  452. package/src/plugins/cache/CacheManagementPage.tsx +360 -0
  453. package/src/plugins/cache/CacheStatusWidget.test.tsx +113 -0
  454. package/src/plugins/cache/CacheStatusWidget.tsx +122 -0
  455. package/src/plugins/cache/index.ts +10 -0
  456. package/src/plugins/cms/cms-plugin.ts +259 -0
  457. package/src/plugins/cms/index.ts +8 -0
  458. package/src/plugins/config-plugin.ts +4 -4
  459. package/src/plugins/core/index.ts +164 -0
  460. package/src/plugins/devices/API_ROUTES.md +27 -0
  461. package/src/plugins/devices/DevicesManagementPage.test.tsx +58 -0
  462. package/src/plugins/devices/DevicesManagementPage.tsx +124 -0
  463. package/src/plugins/devices/DevicesStatusWidget.test.tsx +109 -0
  464. package/src/plugins/devices/DevicesStatusWidget.tsx +52 -0
  465. package/src/plugins/devices/devices-plugin.ts +1 -1
  466. package/src/plugins/devices/index.ts +6 -0
  467. package/src/plugins/diagnostics/API_ROUTES.md +316 -0
  468. package/src/plugins/diagnostics/DiagnosticsManagementPage.test.tsx +58 -0
  469. package/src/plugins/diagnostics/DiagnosticsManagementPage.tsx +306 -0
  470. package/src/plugins/diagnostics/DiagnosticsStatusWidget.test.tsx +112 -0
  471. package/src/plugins/diagnostics/DiagnosticsStatusWidget.tsx +129 -0
  472. package/src/plugins/diagnostics/index.ts +10 -0
  473. package/src/plugins/diagnostics-plugin.ts +3 -3
  474. package/src/plugins/entitlements/API_ROUTES.md +27 -0
  475. package/src/plugins/entitlements/EntitlementsManagementPage.test.tsx +58 -0
  476. package/src/plugins/entitlements/EntitlementsManagementPage.tsx +113 -0
  477. package/src/plugins/entitlements/EntitlementsStatusWidget.test.tsx +109 -0
  478. package/src/plugins/entitlements/EntitlementsStatusWidget.tsx +52 -0
  479. package/src/plugins/entitlements/entitlements-plugin.ts +1 -1
  480. package/src/plugins/entitlements/index.ts +6 -0
  481. package/src/plugins/frontend-app-plugin.ts +7 -2
  482. package/src/plugins/health/API_ROUTES.md +283 -0
  483. package/src/plugins/health/HealthManagementPage.test.tsx +57 -0
  484. package/src/plugins/health/HealthManagementPage.tsx +320 -0
  485. package/src/plugins/health/HealthStatusWidget.test.tsx +107 -0
  486. package/src/plugins/health/HealthStatusWidget.tsx +134 -0
  487. package/src/plugins/health/index.ts +10 -0
  488. package/src/plugins/index.ts +49 -0
  489. package/src/plugins/logs/API_ROUTES.md +297 -0
  490. package/src/plugins/logs/LogsManagementPage.test.tsx +58 -0
  491. package/src/plugins/logs/LogsManagementPage.tsx +283 -0
  492. package/src/plugins/logs/LogsStatusWidget.test.tsx +119 -0
  493. package/src/plugins/logs/LogsStatusWidget.tsx +123 -0
  494. package/src/plugins/logs/index.ts +10 -0
  495. package/src/plugins/logs-plugin.ts +6 -6
  496. package/src/plugins/maintenance/MaintenanceManagementPage.tsx +193 -0
  497. package/src/plugins/maintenance/MaintenanceStatusWidget.tsx +120 -0
  498. package/src/plugins/maintenance/SeedExecutor.tsx +236 -0
  499. package/src/plugins/maintenance/SeedHistory.tsx +360 -0
  500. package/src/plugins/maintenance/SeedList.tsx +130 -0
  501. package/src/plugins/maintenance/SeedManagementPage.tsx +91 -0
  502. package/src/plugins/maintenance/index.ts +24 -0
  503. package/src/plugins/maintenance/seed-executor.ts +224 -0
  504. package/src/plugins/maintenance-plugin.ts +409 -0
  505. package/src/plugins/notifications/NotificationsManagementPage.test.tsx +58 -0
  506. package/src/plugins/notifications/NotificationsManagementPage.tsx +128 -0
  507. package/src/plugins/notifications/NotificationsStatusWidget.test.tsx +109 -0
  508. package/src/plugins/notifications/NotificationsStatusWidget.tsx +52 -0
  509. package/src/plugins/notifications/index.ts +6 -0
  510. package/src/plugins/notifications/notifications-plugin.ts +1 -1
  511. package/src/plugins/parental/API_ROUTES.md +30 -0
  512. package/src/plugins/parental/ParentalManagementPage.test.tsx +58 -0
  513. package/src/plugins/parental/ParentalManagementPage.tsx +119 -0
  514. package/src/plugins/parental/ParentalStatusWidget.test.tsx +109 -0
  515. package/src/plugins/parental/ParentalStatusWidget.tsx +52 -0
  516. package/src/plugins/parental/index.ts +6 -0
  517. package/src/plugins/parental/parental-plugin.ts +1 -1
  518. package/src/plugins/postgres/API_ROUTES.md +243 -0
  519. package/src/plugins/postgres/PostgresManagementPage.test.tsx +62 -0
  520. package/src/plugins/postgres/PostgresManagementPage.tsx +362 -0
  521. package/src/plugins/postgres/PostgresStatusWidget.test.tsx +117 -0
  522. package/src/plugins/postgres/PostgresStatusWidget.tsx +131 -0
  523. package/src/plugins/postgres/index.ts +10 -0
  524. package/src/plugins/preferences/API_ROUTES.md +162 -0
  525. package/src/plugins/preferences/PreferencesManagementPage.test.tsx +58 -0
  526. package/src/plugins/preferences/PreferencesManagementPage.tsx +139 -0
  527. package/src/plugins/preferences/PreferencesStatusWidget.test.tsx +109 -0
  528. package/src/plugins/preferences/PreferencesStatusWidget.tsx +52 -0
  529. package/src/plugins/preferences/index.ts +6 -0
  530. package/src/plugins/preferences/preferences-plugin.ts +10 -5
  531. package/src/plugins/preferences/types.d.ts +95 -0
  532. package/src/plugins/preferences/types.ts +6 -0
  533. package/src/plugins/profiles/API_ROUTES.md +27 -0
  534. package/src/plugins/profiles/ProfilesManagementPage.test.tsx +58 -0
  535. package/src/plugins/profiles/ProfilesManagementPage.tsx +113 -0
  536. package/src/plugins/profiles/ProfilesStatusWidget.test.tsx +109 -0
  537. package/src/plugins/profiles/ProfilesStatusWidget.tsx +52 -0
  538. package/src/plugins/profiles/index.ts +6 -0
  539. package/src/plugins/profiles/profiles-plugin.ts +1 -1
  540. package/src/plugins/qwickbrain/QwickbrainManagementPage.test.tsx +58 -0
  541. package/src/plugins/qwickbrain/QwickbrainManagementPage.tsx +126 -0
  542. package/src/plugins/qwickbrain/QwickbrainStatusWidget.test.tsx +109 -0
  543. package/src/plugins/qwickbrain/QwickbrainStatusWidget.tsx +52 -0
  544. package/src/plugins/qwickbrain/index.ts +6 -0
  545. package/src/plugins/qwickbrain/qwickbrain-plugin.ts +12 -36
  546. package/src/plugins/qwickbrain/types.ts +0 -1
  547. package/src/plugins/rate-limit/RateLimitManagementPage.test.tsx +58 -0
  548. package/src/plugins/rate-limit/RateLimitManagementPage.tsx +127 -0
  549. package/src/plugins/rate-limit/RateLimitStatusWidget.test.tsx +109 -0
  550. package/src/plugins/rate-limit/RateLimitStatusWidget.tsx +52 -0
  551. package/src/plugins/rate-limit/index.ts +6 -0
  552. package/src/plugins/rate-limit/rate-limit-plugin.ts +5 -5
  553. package/src/plugins/subscriptions/API_ROUTES.md +27 -0
  554. package/src/plugins/subscriptions/SubscriptionsManagementPage.test.tsx +58 -0
  555. package/src/plugins/subscriptions/SubscriptionsManagementPage.tsx +125 -0
  556. package/src/plugins/subscriptions/SubscriptionsStatusWidget.test.tsx +109 -0
  557. package/src/plugins/subscriptions/SubscriptionsStatusWidget.tsx +52 -0
  558. package/src/plugins/subscriptions/index.ts +6 -0
  559. package/src/plugins/subscriptions/subscriptions-plugin.ts +1 -1
  560. package/src/plugins/usage/API_ROUTES.md +24 -0
  561. package/src/plugins/usage/UsageManagementPage.test.tsx +58 -0
  562. package/src/plugins/usage/UsageManagementPage.tsx +93 -0
  563. package/src/plugins/usage/UsageStatusWidget.test.tsx +109 -0
  564. package/src/plugins/usage/UsageStatusWidget.tsx +52 -0
  565. package/src/plugins/usage/index.ts +6 -0
  566. package/src/plugins/usage/usage-plugin.ts +1 -1
  567. package/src/plugins/users/API_ROUTES.md +311 -0
  568. package/src/plugins/users/UsersManagementPage.test.tsx +58 -0
  569. package/src/plugins/users/UsersManagementPage.tsx +384 -0
  570. package/src/plugins/users/UsersStatusWidget.test.tsx +114 -0
  571. package/src/plugins/users/UsersStatusWidget.tsx +120 -0
  572. package/src/plugins/users/__tests__/postgres-store.test.ts +1 -0
  573. package/src/plugins/users/__tests__/users-plugin.test.ts +22 -18
  574. package/src/plugins/users/stores/postgres-store.ts +95 -17
  575. package/src/plugins/users/types.ts +33 -1
  576. package/src/plugins/users/users-plugin.ts +137 -3
  577. package/ui/src/App.tsx +18 -4
  578. package/ui/src/api/clientBuilder.ts +206 -0
  579. package/ui/src/api/controlPanelApi.ts +309 -122
  580. package/ui/src/api/index.ts +12 -0
  581. package/ui/src/api/types.ts +276 -0
  582. package/ui/src/components/ControlPanelApp.tsx +4 -5
  583. package/ui/src/components/auth/AcceptInvitationPage.tsx +151 -0
  584. package/ui/src/components/auth/LoginPage.tsx +122 -0
  585. package/ui/src/components/auth/PasswordResetConfirmPage.tsx +109 -0
  586. package/ui/src/components/auth/PasswordResetPage.tsx +95 -0
  587. package/ui/src/components/auth/SignupPage.tsx +140 -0
  588. package/ui/src/components/auth/VerifyEmailPage.tsx +38 -0
  589. package/ui/src/components/auth/__tests__/AcceptInvitationPage.test.tsx +201 -0
  590. package/ui/src/components/auth/__tests__/LoginPage.test.tsx +207 -0
  591. package/ui/src/components/auth/__tests__/PasswordResetConfirmPage.test.tsx +183 -0
  592. package/ui/src/components/auth/__tests__/PasswordResetPage.test.tsx +174 -0
  593. package/ui/src/components/auth/__tests__/SignupPage.test.tsx +210 -0
  594. package/ui/src/components/auth/__tests__/VerifyEmailPage.test.tsx +53 -0
  595. package/ui/src/components/auth/index.ts +26 -0
  596. package/ui/src/components/auth/shared/AuthError.tsx +28 -0
  597. package/ui/src/components/auth/shared/AuthLayout.tsx +42 -0
  598. package/ui/src/components/auth/shared/index.ts +9 -0
  599. package/ui/src/components/index.ts +21 -2
  600. package/ui/src/components/plugins/PluginConfigPanel.tsx +315 -0
  601. package/ui/src/components/plugins/PluginManagementPage.tsx +218 -0
  602. package/ui/src/components/plugins/PluginStatusWidget.tsx +158 -0
  603. package/ui/src/components/plugins/index.ts +20 -0
  604. package/ui/src/config/preferences.ts +18 -0
  605. package/ui/src/dashboard/builtInWidgets.tsx +15 -1
  606. package/ui/src/dashboard/widgets/CMSMaintenanceWidget.tsx +229 -0
  607. package/ui/src/dashboard/widgets/CMSStatusWidget.tsx +115 -0
  608. package/ui/src/dashboard/widgets/NotificationsStatsWidget.tsx +1 -1
  609. package/ui/src/dashboard/widgets/index.ts +2 -0
  610. package/ui/src/hooks/useJobStream.ts +194 -0
  611. package/ui/src/pages/APIKeysPage.tsx +849 -0
  612. package/ui/src/pages/AcceptInvitationPage.tsx +169 -0
  613. package/ui/src/pages/ContentOpsJobsPage.tsx +422 -0
  614. package/ui/src/pages/MaintenancePage.tsx +27 -0
  615. package/ui/src/pages/NotificationsPage.tsx +1 -1
  616. package/ui/src/pages/PluginPage.tsx +3 -1
  617. package/ui/src/pages/PreferencesPage.tsx +240 -0
  618. package/ui/src/pages/UsersPage.tsx +225 -2
  619. package/ui/src/pages/__tests__/PreferencesPage.test.tsx +273 -0
  620. package/ui/src/pages/index.ts +15 -0
  621. package/ui/tsconfig.lib.json +4 -2
  622. package/dist/plugins/auth/adapter-wrapper.test.d.ts +0 -7
  623. package/dist/plugins/auth/adapter-wrapper.test.d.ts.map +0 -1
  624. package/dist/plugins/auth/adapter-wrapper.test.js +0 -303
  625. package/dist/plugins/auth/adapter-wrapper.test.js.map +0 -1
  626. package/dist/plugins/auth/auth-plugin.test.d.ts +0 -9
  627. package/dist/plugins/auth/auth-plugin.test.d.ts.map +0 -1
  628. package/dist/plugins/auth/auth-plugin.test.js +0 -280
  629. package/dist/plugins/auth/auth-plugin.test.js.map +0 -1
  630. package/dist/plugins/auth/config-store.test.d.ts +0 -7
  631. package/dist/plugins/auth/config-store.test.d.ts.map +0 -1
  632. package/dist/plugins/auth/config-store.test.js +0 -299
  633. package/dist/plugins/auth/config-store.test.js.map +0 -1
  634. package/dist/plugins/auth/supertokens-adapter.test.d.ts +0 -10
  635. package/dist/plugins/auth/supertokens-adapter.test.d.ts.map +0 -1
  636. package/dist/plugins/auth/supertokens-adapter.test.js +0 -486
  637. package/dist/plugins/auth/supertokens-adapter.test.js.map +0 -1
  638. package/dist/plugins/cache-plugin.test.d.ts +0 -8
  639. package/dist/plugins/cache-plugin.test.d.ts.map +0 -1
  640. package/dist/plugins/cache-plugin.test.js +0 -255
  641. package/dist/plugins/cache-plugin.test.js.map +0 -1
  642. package/dist/plugins/devices/__tests__/devices-plugin.test.d.ts +0 -11
  643. package/dist/plugins/devices/__tests__/devices-plugin.test.d.ts.map +0 -1
  644. package/dist/plugins/devices/__tests__/devices-plugin.test.js +0 -410
  645. package/dist/plugins/devices/__tests__/devices-plugin.test.js.map +0 -1
  646. package/dist/plugins/devices/__tests__/token-utils.test.d.ts +0 -7
  647. package/dist/plugins/devices/__tests__/token-utils.test.d.ts.map +0 -1
  648. package/dist/plugins/devices/__tests__/token-utils.test.js +0 -199
  649. package/dist/plugins/devices/__tests__/token-utils.test.js.map +0 -1
  650. package/dist/plugins/notifications/__tests__/notifications-manager.test.d.ts +0 -5
  651. package/dist/plugins/notifications/__tests__/notifications-manager.test.d.ts.map +0 -1
  652. package/dist/plugins/notifications/__tests__/notifications-manager.test.js +0 -470
  653. package/dist/plugins/notifications/__tests__/notifications-manager.test.js.map +0 -1
  654. package/dist/plugins/parental/__tests__/parental-plugin.test.d.ts +0 -12
  655. package/dist/plugins/parental/__tests__/parental-plugin.test.d.ts.map +0 -1
  656. package/dist/plugins/parental/__tests__/parental-plugin.test.js +0 -349
  657. package/dist/plugins/parental/__tests__/parental-plugin.test.js.map +0 -1
  658. package/dist/plugins/postgres-plugin.test.d.ts +0 -8
  659. package/dist/plugins/postgres-plugin.test.d.ts.map +0 -1
  660. package/dist/plugins/postgres-plugin.test.js +0 -186
  661. package/dist/plugins/postgres-plugin.test.js.map +0 -1
  662. package/dist/plugins/preferences/__tests__/deep-merge.test.d.ts +0 -7
  663. package/dist/plugins/preferences/__tests__/deep-merge.test.d.ts.map +0 -1
  664. package/dist/plugins/preferences/__tests__/deep-merge.test.js +0 -215
  665. package/dist/plugins/preferences/__tests__/deep-merge.test.js.map +0 -1
  666. package/dist/plugins/preferences/__tests__/preferences-plugin.test.d.ts +0 -7
  667. package/dist/plugins/preferences/__tests__/preferences-plugin.test.d.ts.map +0 -1
  668. package/dist/plugins/preferences/__tests__/preferences-plugin.test.js +0 -265
  669. package/dist/plugins/preferences/__tests__/preferences-plugin.test.js.map +0 -1
  670. package/dist/plugins/profiles/__tests__/profiles-plugin.test.d.ts +0 -11
  671. package/dist/plugins/profiles/__tests__/profiles-plugin.test.d.ts.map +0 -1
  672. package/dist/plugins/profiles/__tests__/profiles-plugin.test.js +0 -243
  673. package/dist/plugins/profiles/__tests__/profiles-plugin.test.js.map +0 -1
  674. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.d.ts +0 -7
  675. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.d.ts.map +0 -1
  676. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.js +0 -220
  677. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.js.map +0 -1
  678. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.d.ts +0 -11
  679. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.d.ts.map +0 -1
  680. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.js +0 -305
  681. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.js.map +0 -1
  682. package/dist/plugins/usage/__tests__/usage-plugin.test.d.ts +0 -11
  683. package/dist/plugins/usage/__tests__/usage-plugin.test.d.ts.map +0 -1
  684. package/dist/plugins/usage/__tests__/usage-plugin.test.js +0 -218
  685. package/dist/plugins/usage/__tests__/usage-plugin.test.js.map +0 -1
  686. package/dist/plugins/users/__tests__/postgres-store.test.d.ts +0 -10
  687. package/dist/plugins/users/__tests__/postgres-store.test.d.ts.map +0 -1
  688. package/dist/plugins/users/__tests__/postgres-store.test.js +0 -229
  689. package/dist/plugins/users/__tests__/postgres-store.test.js.map +0 -1
  690. package/dist/plugins/users/__tests__/users-plugin.test.d.ts +0 -9
  691. package/dist/plugins/users/__tests__/users-plugin.test.d.ts.map +0 -1
  692. package/dist/plugins/users/__tests__/users-plugin.test.js +0 -549
  693. package/dist/plugins/users/__tests__/users-plugin.test.js.map +0 -1
  694. package/dist-ui/assets/index-BfC7mG5L.js +0 -469
  695. package/dist-ui/assets/index-BfC7mG5L.js.map +0 -1
  696. package/dist-ui-lib/components/StatCard.d.ts +0 -16
  697. package/dist-ui-lib/pages/ConfigPage.d.ts +0 -1
  698. package/dist-ui-lib/pages/DiagnosticsPage.d.ts +0 -1
  699. package/dist-ui-lib/pages/IntegrationsPage.d.ts +0 -1
  700. package/dist-ui-lib/pages/NotificationsPage.d.ts +0 -9
  701. package/dist-ui-lib/pages/PluginPage.d.ts +0 -15
  702. package/dist-ui-lib/pages/PluginsPage.d.ts +0 -1
  703. package/dist-ui-lib/pages/RateLimitPage.d.ts +0 -1
  704. package/ui/src/components/StatCard.tsx +0 -58
  705. /package/dist-ui-lib/{config → src/config}/AppConfig.d.ts +0 -0
  706. /package/dist-ui-lib/{dashboard → src/dashboard}/DashboardWidgetRegistry.d.ts +0 -0
  707. /package/dist-ui-lib/{dashboard → src/dashboard}/DashboardWidgetRenderer.d.ts +0 -0
  708. /package/dist-ui-lib/{dashboard → src/dashboard}/PluginWidgetRenderer.d.ts +0 -0
  709. /package/dist-ui-lib/{dashboard → src/dashboard}/WidgetComponentRegistry.d.ts +0 -0
  710. /package/dist-ui-lib/{dashboard → src/dashboard}/builtInWidgets.d.ts +0 -0
  711. /package/dist-ui-lib/{dashboard → src/dashboard}/index.d.ts +0 -0
  712. /package/dist-ui-lib/{dashboard → src/dashboard}/widgets/AuthStatusWidget.d.ts +0 -0
  713. /package/dist-ui-lib/{dashboard → src/dashboard}/widgets/IntegrationStatusWidget.d.ts +0 -0
  714. /package/dist-ui-lib/{dashboard → src/dashboard}/widgets/NotificationsStatsWidget.d.ts +0 -0
  715. /package/dist-ui-lib/{dashboard → src/dashboard}/widgets/ServiceHealthWidget.d.ts +0 -0
  716. /package/dist-ui-lib/{pages → src/pages}/AuthPage.d.ts +0 -0
  717. /package/dist-ui-lib/{pages → src/pages}/DashboardPage.d.ts +0 -0
  718. /package/dist-ui-lib/{pages → src/pages}/EntitlementsPage.d.ts +0 -0
  719. /package/dist-ui-lib/{pages → src/pages}/LogsPage.d.ts +0 -0
  720. /package/dist-ui-lib/{pages → src/pages}/NotFoundPage.d.ts +0 -0
  721. /package/dist-ui-lib/{pages → src/pages}/SystemPage.d.ts +0 -0
  722. /package/dist-ui-lib/{pages → src/pages}/UsersPage.d.ts +0 -0
  723. /package/dist-ui-lib/{utils → src/utils}/formatters.d.ts +0 -0
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Bearer Token Authentication Middleware
3
+ *
4
+ * Middleware for authenticating API requests using Bearer tokens (API keys).
5
+ * Verifies the token, checks expiration and active status, and attaches
6
+ * the authenticated key info to the request.
7
+ *
8
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
9
+ */
10
+ import { getApiKeysStore } from '../api-keys-plugin.js';
11
+ import { incrementLimit, isLimited } from '../../rate-limit/rate-limit-service.js';
12
+ /**
13
+ * Extract Bearer token from Authorization header
14
+ *
15
+ * @param req Express request
16
+ * @returns Bearer token or null if not found
17
+ */
18
+ function extractBearerToken(req) {
19
+ const authHeader = req.headers.authorization;
20
+ if (!authHeader) {
21
+ return null;
22
+ }
23
+ // Check for "Bearer <token>" format
24
+ const parts = authHeader.split(' ');
25
+ if (parts.length !== 2 || parts[0] !== 'Bearer') {
26
+ return null;
27
+ }
28
+ return parts[1];
29
+ }
30
+ /**
31
+ * Check if API key has all required scopes
32
+ *
33
+ * @param keyScopes Scopes granted to the API key
34
+ * @param requiredScopes Scopes required for the endpoint
35
+ * @returns True if key has all required scopes
36
+ */
37
+ function hasRequiredScopes(keyScopes, requiredScopes) {
38
+ return requiredScopes.every(required => keyScopes.includes(required));
39
+ }
40
+ /**
41
+ * Default unauthorized handler
42
+ */
43
+ function defaultUnauthorizedHandler(req, res, reason) {
44
+ res.status(401).json({
45
+ error: 'Unauthorized',
46
+ message: reason,
47
+ });
48
+ }
49
+ /**
50
+ * Get rate limit identifier for API key authentication
51
+ * Uses IP address as the identifier
52
+ */
53
+ function getRateLimitIdentifier(req) {
54
+ const ip = req.ip ||
55
+ req.headers['x-forwarded-for']?.toString().split(',')[0].trim() ||
56
+ req.socket?.remoteAddress ||
57
+ 'unknown';
58
+ return `api-key-auth:${ip}`;
59
+ }
60
+ /**
61
+ * Check if rate limit has been exceeded
62
+ * Uses the existing rate-limit plugin with specific limits for API key auth
63
+ */
64
+ async function checkRateLimit(identifier) {
65
+ try {
66
+ // Check rate limit: 100 requests per 15 minutes
67
+ return await isLimited(identifier, {
68
+ maxRequests: 100,
69
+ windowMs: 15 * 60 * 1000, // 15 minutes
70
+ strategy: 'sliding-window',
71
+ });
72
+ }
73
+ catch (error) {
74
+ // If rate limit service not available, allow the request
75
+ // (fail open - let other security measures handle it)
76
+ console.warn('[bearerTokenAuth] Rate limit service unavailable:', error);
77
+ return false;
78
+ }
79
+ }
80
+ /**
81
+ * Record a failed authentication attempt
82
+ * Increments the rate limit counter
83
+ */
84
+ async function recordFailedAttempt(identifier) {
85
+ try {
86
+ await incrementLimit(identifier, {
87
+ maxRequests: 100,
88
+ windowMs: 15 * 60 * 1000, // 15 minutes
89
+ strategy: 'sliding-window',
90
+ });
91
+ }
92
+ catch (error) {
93
+ // Non-critical - log and continue
94
+ console.warn('[bearerTokenAuth] Failed to record attempt:', error);
95
+ }
96
+ }
97
+ /**
98
+ * Bearer Token Authentication Middleware
99
+ *
100
+ * Validates API keys sent as Bearer tokens in the Authorization header.
101
+ * Attaches authenticated key info to the request for downstream handlers.
102
+ *
103
+ * @param options Configuration options
104
+ * @returns Express middleware function
105
+ *
106
+ * @example
107
+ * ```ts
108
+ * import { bearerTokenAuth } from '@qwickapps/server';
109
+ *
110
+ * // Require authentication
111
+ * app.get('/api/data', bearerTokenAuth(), (req, res) => {
112
+ * const { apiKey } = req as ApiKeyAuthenticatedRequest;
113
+ * res.json({ user_id: apiKey?.user_id });
114
+ * });
115
+ *
116
+ * // Require specific scopes
117
+ * app.post('/api/data', bearerTokenAuth({
118
+ * requiredScopes: ['write'],
119
+ * }), (req, res) => {
120
+ * // Handler code
121
+ * });
122
+ *
123
+ * // Allow only M2M keys
124
+ * app.post('/api/admin', bearerTokenAuth({
125
+ * allowedKeyTypes: ['m2m'],
126
+ * requiredScopes: ['admin'],
127
+ * }), (req, res) => {
128
+ * // Handler code
129
+ * });
130
+ * ```
131
+ */
132
+ export function bearerTokenAuth(options = {}) {
133
+ const { requiredScopes = [], allowedKeyTypes, onUnauthorized = defaultUnauthorizedHandler, } = options;
134
+ return async (req, res, next) => {
135
+ try {
136
+ // Check rate limit first
137
+ const rateLimitId = getRateLimitIdentifier(req);
138
+ if (await checkRateLimit(rateLimitId)) {
139
+ res.status(429).json({
140
+ error: 'Too Many Requests',
141
+ message: 'Too many authentication attempts. Please try again later.',
142
+ });
143
+ return;
144
+ }
145
+ // Extract token from Authorization header
146
+ const token = extractBearerToken(req);
147
+ if (!token) {
148
+ recordFailedAttempt(rateLimitId);
149
+ onUnauthorized(req, res, 'Missing or invalid Authorization header');
150
+ return;
151
+ }
152
+ // Get store instance
153
+ const store = getApiKeysStore();
154
+ if (!store) {
155
+ console.error('[bearerTokenAuth] API Keys plugin not initialized');
156
+ res.status(500).json({ error: 'Authentication service unavailable' });
157
+ return;
158
+ }
159
+ // Verify the token
160
+ const apiKey = await store.verify(token);
161
+ if (!apiKey) {
162
+ recordFailedAttempt(rateLimitId);
163
+ onUnauthorized(req, res, 'Invalid, expired, or inactive API key');
164
+ return;
165
+ }
166
+ // Check key type if restrictions apply
167
+ if (allowedKeyTypes && !allowedKeyTypes.includes(apiKey.key_type)) {
168
+ onUnauthorized(req, res, `This endpoint requires ${allowedKeyTypes.join(' or ')} keys`);
169
+ return;
170
+ }
171
+ // Check scopes if required
172
+ if (requiredScopes.length > 0 && !hasRequiredScopes(apiKey.scopes, requiredScopes)) {
173
+ onUnauthorized(req, res, `Insufficient scopes. Required: ${requiredScopes.join(', ')}`);
174
+ return;
175
+ }
176
+ // Record usage (non-blocking)
177
+ store.recordUsage(apiKey.id).catch(err => {
178
+ console.error('[bearerTokenAuth] Failed to record key usage:', err);
179
+ });
180
+ // Attach authenticated key info to request
181
+ req.apiKey = {
182
+ id: apiKey.id,
183
+ user_id: apiKey.user_id,
184
+ scopes: apiKey.scopes,
185
+ key_type: apiKey.key_type,
186
+ };
187
+ next();
188
+ }
189
+ catch (error) {
190
+ console.error('[bearerTokenAuth] Authentication error:', error);
191
+ res.status(500).json({ error: 'Authentication failed' });
192
+ }
193
+ };
194
+ }
195
+ /**
196
+ * Helper type guard for API key authenticated requests
197
+ */
198
+ export function isApiKeyAuthenticated(req) {
199
+ return 'apiKey' in req && req.apiKey !== undefined;
200
+ }
201
+ //# sourceMappingURL=bearer-token-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bearer-token-auth.js","sourceRoot":"","sources":["../../../../src/plugins/api-keys/middleware/bearer-token-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * API Keys Middleware Index
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ export { bearerTokenAuth, isApiKeyAuthenticated, type ApiKeyAuthenticatedRequest, type BearerTokenAuthOptions, } from './bearer-token-auth.js';
7
+ export { createUsageLoggingMiddleware, } from './usage-logging.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/api-keys/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * API Keys Middleware Index
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ export { bearerTokenAuth, isApiKeyAuthenticated, } from './bearer-token-auth.js';
7
+ export { createUsageLoggingMiddleware, } from './usage-logging.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/api-keys/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,GAGtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Usage Logging Middleware
3
+ *
4
+ * Logs all API key requests for audit trails and usage analytics.
5
+ * Logging is asynchronous and non-blocking to avoid performance impact.
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+ import type { RequestHandler } from 'express';
10
+ import type { UsageLogStore } from '../stores/usage-log-store.js';
11
+ /**
12
+ * Create usage logging middleware
13
+ *
14
+ * Logs all requests made with API key authentication to the usage log store.
15
+ * Logging happens asynchronously after the response is sent to avoid latency.
16
+ *
17
+ * @param store Usage log storage backend
18
+ * @returns Express middleware
19
+ */
20
+ export declare function createUsageLoggingMiddleware(store: UsageLogStore): RequestHandler;
21
+ //# sourceMappingURL=usage-logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-logging.d.ts","sourceRoot":"","sources":["../../../../src/plugins/api-keys/middleware/usage-logging.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAmC,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAclE;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA4CjF"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Usage Logging Middleware
3
+ *
4
+ * Logs all API key requests for audit trails and usage analytics.
5
+ * Logging is asynchronous and non-blocking to avoid performance impact.
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+ /**
10
+ * Create usage logging middleware
11
+ *
12
+ * Logs all requests made with API key authentication to the usage log store.
13
+ * Logging happens asynchronously after the response is sent to avoid latency.
14
+ *
15
+ * @param store Usage log storage backend
16
+ * @returns Express middleware
17
+ */
18
+ export function createUsageLoggingMiddleware(store) {
19
+ return (req, res, next) => {
20
+ const apiKeyReq = req;
21
+ // Skip if not API key authentication
22
+ if (!apiKeyReq.apiKey) {
23
+ return next();
24
+ }
25
+ // Capture request details
26
+ const keyId = apiKeyReq.apiKey.id;
27
+ const endpoint = req.path;
28
+ const method = req.method;
29
+ const ipAddress = (req.ip ||
30
+ req.headers['x-forwarded-for']?.split(',')[0].trim() ||
31
+ req.socket?.remoteAddress);
32
+ const userAgent = req.get('user-agent');
33
+ // Intercept response to capture status code
34
+ const originalSend = res.send;
35
+ res.send = function (data) {
36
+ const statusCode = res.statusCode;
37
+ // Log asynchronously after response is sent (non-blocking)
38
+ setImmediate(() => {
39
+ store.log({
40
+ key_id: keyId,
41
+ endpoint,
42
+ method,
43
+ status_code: statusCode,
44
+ ip_address: ipAddress,
45
+ user_agent: userAgent,
46
+ }).catch((error) => {
47
+ // Log error but don't fail the request
48
+ console.error('[UsageLogging] Failed to log API key usage:', error);
49
+ });
50
+ });
51
+ // Call original send
52
+ return originalSend.call(this, data);
53
+ };
54
+ next();
55
+ };
56
+ }
57
+ //# sourceMappingURL=usage-logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-logging.js","sourceRoot":"","sources":["../../../../src/plugins/api-keys/middleware/usage-logging.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAoB;IAC/D,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,SAAS,GAAG,GAAoB,CAAC;QAEvC,qCAAqC;QACrC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,0BAA0B;QAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE;YACtB,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YAChE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAuB,CAAC;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAExC,4CAA4C;QAC5C,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;QAC9B,GAAG,CAAC,IAAI,GAAG,UAAU,IAAc;YACjC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;YAElC,2DAA2D;YAC3D,YAAY,CAAC,GAAG,EAAE;gBAChB,KAAK,CAAC,GAAG,CAAC;oBACR,MAAM,EAAE,KAAK;oBACb,QAAQ;oBACR,MAAM;oBACN,WAAW,EAAE,UAAU;oBACvB,UAAU,EAAE,SAAS;oBACrB,UAAU,EAAE,SAAS;iBACtB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;oBACxB,uCAAuC;oBACvC,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;gBACtE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,qBAAqB;YACrB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * API Keys Stores Index
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ export { postgresApiKeyStore } from './postgres-store.js';
7
+ export { createPostgresPluginScopeStore, type PluginScope, type PluginScopeStore, type PostgresPluginScopeStoreConfig, } from './plugin-scope-store.js';
8
+ export { createPostgresUsageLogStore, type UsageLogEntry, type UsageLogQueryOptions, type UsageLogStats, type UsageLogStore, type PostgresUsageLogStoreConfig, } from './usage-log-store.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/api-keys/stores/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACL,8BAA8B,EAC9B,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,8BAA8B,GACpC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,2BAA2B,EAC3B,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,2BAA2B,GACjC,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * API Keys Stores Index
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ export { postgresApiKeyStore } from './postgres-store.js';
7
+ export { createPostgresPluginScopeStore, } from './plugin-scope-store.js';
8
+ export { createPostgresUsageLogStore, } from './usage-log-store.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/api-keys/stores/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACL,8BAA8B,GAI/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,2BAA2B,GAM5B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Plugin Scope Store - PostgreSQL Implementation
3
+ *
4
+ * Manages plugin-declared scopes for fine-grained API key authorization.
5
+ * Plugins register their scopes during initialization, which are then available
6
+ * for selection during API key creation.
7
+ *
8
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
9
+ */
10
+ import type { Pool } from 'pg';
11
+ /**
12
+ * Plugin scope definition
13
+ */
14
+ export interface PluginScope {
15
+ /** Scope name in format 'plugin-id:action' (e.g., 'qwickbrain:execute') */
16
+ name: string;
17
+ /** Plugin ID that declares this scope */
18
+ plugin_id: string;
19
+ /** Human-readable description for UI */
20
+ description: string;
21
+ /** Optional category for grouping (read, write, admin) */
22
+ category?: 'read' | 'write' | 'admin';
23
+ /** When scope was registered */
24
+ created_at?: Date;
25
+ /** When scope was last updated */
26
+ updated_at?: Date;
27
+ }
28
+ /**
29
+ * Plugin scope store interface
30
+ */
31
+ export interface PluginScopeStore {
32
+ /** Store name */
33
+ name: string;
34
+ /**
35
+ * Initialize the store (create tables, indexes, etc.)
36
+ */
37
+ initialize(): Promise<void>;
38
+ /**
39
+ * Register scopes for a plugin (upsert operation)
40
+ * Existing scopes are updated, new scopes are inserted, removed scopes are deleted
41
+ */
42
+ registerScopes(pluginId: string, scopes: Omit<PluginScope, 'plugin_id' | 'created_at' | 'updated_at'>[]): Promise<void>;
43
+ /**
44
+ * Get all scopes for a specific plugin
45
+ */
46
+ getPluginScopes(pluginId: string): Promise<PluginScope[]>;
47
+ /**
48
+ * Get all available scopes across all plugins
49
+ */
50
+ getAllScopes(): Promise<PluginScope[]>;
51
+ /**
52
+ * Verify a scope exists
53
+ */
54
+ isValidScope(scopeName: string): Promise<boolean>;
55
+ /**
56
+ * Delete all scopes for a plugin
57
+ */
58
+ deletePluginScopes(pluginId: string): Promise<void>;
59
+ /**
60
+ * Shutdown the store
61
+ */
62
+ shutdown(): Promise<void>;
63
+ }
64
+ /**
65
+ * PostgreSQL plugin scope store configuration
66
+ */
67
+ export interface PostgresPluginScopeStoreConfig {
68
+ /** PostgreSQL pool instance or a function that returns one (for lazy initialization) */
69
+ pool: Pool | (() => Pool);
70
+ /** Table name (default: 'plugin_scopes') */
71
+ tableName?: string;
72
+ /** Schema name (default: 'public') */
73
+ schema?: string;
74
+ /** Auto-create tables on init (default: true) */
75
+ autoCreateTables?: boolean;
76
+ }
77
+ /**
78
+ * PostgreSQL implementation of PluginScopeStore
79
+ */
80
+ export declare function createPostgresPluginScopeStore(config: PostgresPluginScopeStoreConfig): PluginScopeStore;
81
+ //# sourceMappingURL=plugin-scope-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-scope-store.d.ts","sourceRoot":"","sources":["../../../../src/plugins/api-keys/stores/plugin-scope-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACtC,gCAAgC;IAChC,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,kCAAkC;IAClC,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExH;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1D;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEvC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,wFAAwF;IACxF,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,8BAA8B,GACrC,gBAAgB,CA0LlB"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Plugin Scope Store - PostgreSQL Implementation
3
+ *
4
+ * Manages plugin-declared scopes for fine-grained API key authorization.
5
+ * Plugins register their scopes during initialization, which are then available
6
+ * for selection during API key creation.
7
+ *
8
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
9
+ */
10
+ /**
11
+ * PostgreSQL implementation of PluginScopeStore
12
+ */
13
+ export function createPostgresPluginScopeStore(config) {
14
+ const tableName = config.tableName || 'plugin_scopes';
15
+ const schema = config.schema || 'public';
16
+ const tableFullName = `"${schema}"."${tableName}"`;
17
+ const autoCreateTables = config.autoCreateTables !== false;
18
+ // In-memory cache for fast validation
19
+ const scopeCache = new Set();
20
+ let cacheInitialized = false;
21
+ /**
22
+ * Get PostgreSQL pool (lazy initialization support)
23
+ */
24
+ function getPool() {
25
+ if (typeof config.pool === 'function') {
26
+ return config.pool();
27
+ }
28
+ return config.pool;
29
+ }
30
+ /**
31
+ * Initialize scope cache
32
+ */
33
+ async function initializeCache() {
34
+ if (cacheInitialized)
35
+ return;
36
+ const pool = getPool();
37
+ const result = await pool.query(`SELECT name FROM ${tableFullName}`);
38
+ scopeCache.clear();
39
+ result.rows.forEach(row => scopeCache.add(row.name));
40
+ cacheInitialized = true;
41
+ }
42
+ /**
43
+ * Refresh cache after modifications
44
+ */
45
+ async function refreshCache() {
46
+ cacheInitialized = false;
47
+ await initializeCache();
48
+ }
49
+ return {
50
+ name: 'postgres',
51
+ async initialize() {
52
+ if (!autoCreateTables)
53
+ return;
54
+ const pool = getPool();
55
+ // Create plugin_scopes table
56
+ await pool.query(`
57
+ CREATE TABLE IF NOT EXISTS ${tableFullName} (
58
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
59
+ plugin_id VARCHAR(255) NOT NULL,
60
+ name VARCHAR(255) NOT NULL UNIQUE,
61
+ description TEXT NOT NULL,
62
+ category VARCHAR(50),
63
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
64
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
65
+
66
+ -- Enforce naming convention: plugin-id:action
67
+ CONSTRAINT scope_name_format CHECK (name ~ '^[a-z0-9-]+:[a-z0-9-]+$')
68
+ );
69
+
70
+ -- Indexes for performance
71
+ CREATE INDEX IF NOT EXISTS idx_${tableName}_plugin_id ON ${tableFullName}(plugin_id);
72
+ CREATE INDEX IF NOT EXISTS idx_${tableName}_category ON ${tableFullName}(category);
73
+ CREATE INDEX IF NOT EXISTS idx_${tableName}_name ON ${tableFullName}(name);
74
+ `);
75
+ // Insert system scopes for backwards compatibility
76
+ await pool.query(`
77
+ INSERT INTO ${tableFullName} (plugin_id, name, description, category)
78
+ VALUES
79
+ ('system', 'system:read', 'Read access to system resources', 'read'),
80
+ ('system', 'system:write', 'Write access to system resources', 'write'),
81
+ ('system', 'system:admin', 'Administrative access to system resources', 'admin')
82
+ ON CONFLICT (name) DO NOTHING;
83
+ `);
84
+ // Initialize cache
85
+ await initializeCache();
86
+ },
87
+ async registerScopes(pluginId, scopes) {
88
+ const pool = getPool();
89
+ // Start transaction for atomic upsert
90
+ const client = await pool.connect();
91
+ try {
92
+ await client.query('BEGIN');
93
+ // Get existing scopes for this plugin
94
+ const existingResult = await client.query(`SELECT name FROM ${tableFullName} WHERE plugin_id = $1`, [pluginId]);
95
+ const existingScopes = new Set(existingResult.rows.map(r => r.name));
96
+ const newScopes = new Set(scopes.map(s => s.name));
97
+ // Delete scopes that are no longer declared
98
+ const scopesToDelete = [...existingScopes].filter(name => !newScopes.has(name));
99
+ if (scopesToDelete.length > 0) {
100
+ await client.query(`DELETE FROM ${tableFullName} WHERE plugin_id = $1 AND name = ANY($2)`, [pluginId, scopesToDelete]);
101
+ }
102
+ // Upsert scopes (insert new, update existing)
103
+ for (const scope of scopes) {
104
+ await client.query(`INSERT INTO ${tableFullName} (plugin_id, name, description, category)
105
+ VALUES ($1, $2, $3, $4)
106
+ ON CONFLICT (name) DO UPDATE SET
107
+ description = EXCLUDED.description,
108
+ category = EXCLUDED.category,
109
+ updated_at = NOW()`, [pluginId, scope.name, scope.description, scope.category || null]);
110
+ }
111
+ await client.query('COMMIT');
112
+ // Refresh cache
113
+ await refreshCache();
114
+ }
115
+ catch (error) {
116
+ await client.query('ROLLBACK');
117
+ throw error;
118
+ }
119
+ finally {
120
+ client.release();
121
+ }
122
+ },
123
+ async getPluginScopes(pluginId) {
124
+ const pool = getPool();
125
+ const result = await pool.query(`SELECT plugin_id, name, description, category, created_at, updated_at
126
+ FROM ${tableFullName}
127
+ WHERE plugin_id = $1
128
+ ORDER BY name`, [pluginId]);
129
+ return result.rows;
130
+ },
131
+ async getAllScopes() {
132
+ const pool = getPool();
133
+ const result = await pool.query(`SELECT plugin_id, name, description, category, created_at, updated_at
134
+ FROM ${tableFullName}
135
+ ORDER BY plugin_id, name`);
136
+ return result.rows;
137
+ },
138
+ async isValidScope(scopeName) {
139
+ // Use cache for fast validation
140
+ await initializeCache();
141
+ return scopeCache.has(scopeName);
142
+ },
143
+ async deletePluginScopes(pluginId) {
144
+ const pool = getPool();
145
+ await pool.query(`DELETE FROM ${tableFullName} WHERE plugin_id = $1`, [pluginId]);
146
+ // Refresh cache
147
+ await refreshCache();
148
+ },
149
+ async shutdown() {
150
+ scopeCache.clear();
151
+ cacheInitialized = false;
152
+ },
153
+ };
154
+ }
155
+ //# sourceMappingURL=plugin-scope-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-scope-store.js","sourceRoot":"","sources":["../../../../src/plugins/api-keys/stores/plugin-scope-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgFH;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAAsC;IAEtC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,MAAM,MAAM,SAAS,GAAG,CAAC;IACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,KAAK,KAAK,CAAC;IAE3D,sCAAsC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B;;OAEG;IACH,SAAS,OAAO;QACd,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,eAAe;QAC5B,IAAI,gBAAgB;YAAE,OAAO;QAE7B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B,oBAAoB,aAAa,EAAE,CACpC,CAAC;QAEF,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,YAAY;QACzB,gBAAgB,GAAG,KAAK,CAAC;QACzB,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAEhB,KAAK,CAAC,UAAU;YACd,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YAE9B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YAEvB,6BAA6B;YAC7B,MAAM,IAAI,CAAC,KAAK,CAAC;qCACc,aAAa;;;;;;;;;;;;;;yCAcT,SAAS,iBAAiB,aAAa;yCACvC,SAAS,gBAAgB,aAAa;yCACtC,SAAS,YAAY,aAAa;OACpE,CAAC,CAAC;YAEH,mDAAmD;YACnD,MAAM,IAAI,CAAC,KAAK,CAAC;sBACD,aAAa;;;;;;OAM5B,CAAC,CAAC;YAEH,mBAAmB;YACnB,MAAM,eAAe,EAAE,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,MAAsE;YAEtE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YAEvB,sCAAsC;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAE5B,sCAAsC;gBACtC,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,KAAK,CACvC,oBAAoB,aAAa,uBAAuB,EACxD,CAAC,QAAQ,CAAC,CACX,CAAC;gBACF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEnD,4CAA4C;gBAC5C,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,MAAM,MAAM,CAAC,KAAK,CAChB,eAAe,aAAa,0CAA0C,EACtE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAC3B,CAAC;gBACJ,CAAC;gBAED,8CAA8C;gBAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,MAAM,CAAC,KAAK,CAChB,eAAe,aAAa;;;;;kCAKN,EACtB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAClE,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAE7B,gBAAgB;gBAChB,MAAM,YAAY,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC/B,MAAM,KAAK,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,QAAgB;YACpC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;gBACQ,aAAa;;uBAEN,EACf,CAAC,QAAQ,CAAC,CACX,CAAC;YAEF,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,YAAY;YAChB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;gBACQ,aAAa;kCACK,CAC3B,CAAC;YAEF,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,SAAiB;YAClC,gCAAgC;YAChC,MAAM,eAAe,EAAE,CAAC;YACxB,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB;YACvC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,KAAK,CACd,eAAe,aAAa,uBAAuB,EACnD,CAAC,QAAQ,CAAC,CACX,CAAC;YAEF,gBAAgB;YAChB,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,gBAAgB,GAAG,KAAK,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * PostgreSQL API Keys Store
3
+ *
4
+ * API key storage implementation using PostgreSQL with Row-Level Security (RLS).
5
+ * Uses SHA-256 for token hashing (high-entropy keys don't need bcrypt's slowness).
6
+ *
7
+ * RLS Context Pattern:
8
+ * Each operation uses an explicit transaction and sets `app.current_user_id`
9
+ * as a transaction-local configuration variable. The RLS policy checks this
10
+ * variable to enforce that users can only access their own API keys.
11
+ *
12
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
13
+ */
14
+ import type { ApiKeyStore, PostgresApiKeyStoreConfig } from '../types.js';
15
+ /**
16
+ * Create a PostgreSQL API keys store with RLS
17
+ *
18
+ * @param config Configuration including a pg Pool instance
19
+ * @returns ApiKeyStore implementation
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { Pool } from 'pg';
24
+ * import { postgresApiKeyStore } from '@qwickapps/server';
25
+ *
26
+ * const pool = new Pool({ connectionString: process.env.DATABASE_URL });
27
+ * const store = postgresApiKeyStore({ pool });
28
+ *
29
+ * // Or with lazy initialization:
30
+ * const store = postgresApiKeyStore({ pool: () => getPostgres().getPool() });
31
+ * ```
32
+ */
33
+ export declare function postgresApiKeyStore(config: PostgresApiKeyStoreConfig): ApiKeyStore;
34
+ //# sourceMappingURL=postgres-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-store.d.ts","sourceRoot":"","sources":["../../../../src/plugins/api-keys/stores/postgres-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EAK1B,MAAM,aAAa,CAAC;AAuKrB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,WAAW,CAsRlF"}