@qwickapps/server 1.3.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/README.md +157 -0
  2. package/dist/core/control-panel.d.ts.map +1 -1
  3. package/dist/core/control-panel.js +114 -0
  4. package/dist/core/control-panel.js.map +1 -1
  5. package/dist/core/types.d.ts +19 -0
  6. package/dist/core/types.d.ts.map +1 -1
  7. package/dist/index.d.ts +2 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +15 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/plugins/auth/adapter-wrapper.d.ts +47 -0
  12. package/dist/plugins/auth/adapter-wrapper.d.ts.map +1 -0
  13. package/dist/plugins/auth/adapter-wrapper.js +166 -0
  14. package/dist/plugins/auth/adapter-wrapper.js.map +1 -0
  15. package/dist/plugins/auth/adapter-wrapper.test.d.ts +7 -0
  16. package/dist/plugins/auth/adapter-wrapper.test.d.ts.map +1 -0
  17. package/dist/plugins/auth/adapter-wrapper.test.js +303 -0
  18. package/dist/plugins/auth/adapter-wrapper.test.js.map +1 -0
  19. package/dist/plugins/auth/config-store.d.ts +11 -0
  20. package/dist/plugins/auth/config-store.d.ts.map +1 -0
  21. package/dist/plugins/auth/config-store.js +232 -0
  22. package/dist/plugins/auth/config-store.js.map +1 -0
  23. package/dist/plugins/auth/config-store.test.d.ts +7 -0
  24. package/dist/plugins/auth/config-store.test.d.ts.map +1 -0
  25. package/dist/plugins/auth/config-store.test.js +299 -0
  26. package/dist/plugins/auth/config-store.test.js.map +1 -0
  27. package/dist/plugins/auth/env-config.d.ts +51 -1
  28. package/dist/plugins/auth/env-config.d.ts.map +1 -1
  29. package/dist/plugins/auth/env-config.js +640 -7
  30. package/dist/plugins/auth/env-config.js.map +1 -1
  31. package/dist/plugins/auth/index.d.ts +6 -2
  32. package/dist/plugins/auth/index.d.ts.map +1 -1
  33. package/dist/plugins/auth/index.js +5 -1
  34. package/dist/plugins/auth/index.js.map +1 -1
  35. package/dist/plugins/auth/types.d.ts +106 -0
  36. package/dist/plugins/auth/types.d.ts.map +1 -1
  37. package/dist/plugins/bans/bans-plugin.d.ts.map +1 -1
  38. package/dist/plugins/bans/bans-plugin.js +12 -3
  39. package/dist/plugins/bans/bans-plugin.js.map +1 -1
  40. package/dist/plugins/devices/__tests__/devices-plugin.test.d.ts +11 -0
  41. package/dist/plugins/devices/__tests__/devices-plugin.test.d.ts.map +1 -0
  42. package/dist/plugins/devices/__tests__/devices-plugin.test.js +410 -0
  43. package/dist/plugins/devices/__tests__/devices-plugin.test.js.map +1 -0
  44. package/dist/plugins/devices/__tests__/token-utils.test.d.ts +7 -0
  45. package/dist/plugins/devices/__tests__/token-utils.test.d.ts.map +1 -0
  46. package/dist/plugins/devices/__tests__/token-utils.test.js +197 -0
  47. package/dist/plugins/devices/__tests__/token-utils.test.js.map +1 -0
  48. package/dist/plugins/devices/adapters/compute-adapter.d.ts +36 -0
  49. package/dist/plugins/devices/adapters/compute-adapter.d.ts.map +1 -0
  50. package/dist/plugins/devices/adapters/compute-adapter.js +100 -0
  51. package/dist/plugins/devices/adapters/compute-adapter.js.map +1 -0
  52. package/dist/plugins/devices/adapters/index.d.ts +12 -0
  53. package/dist/plugins/devices/adapters/index.d.ts.map +1 -0
  54. package/dist/plugins/devices/adapters/index.js +10 -0
  55. package/dist/plugins/devices/adapters/index.js.map +1 -0
  56. package/dist/plugins/devices/adapters/mobile-adapter.d.ts +41 -0
  57. package/dist/plugins/devices/adapters/mobile-adapter.d.ts.map +1 -0
  58. package/dist/plugins/devices/adapters/mobile-adapter.js +131 -0
  59. package/dist/plugins/devices/adapters/mobile-adapter.js.map +1 -0
  60. package/dist/plugins/devices/devices-plugin.d.ts +70 -0
  61. package/dist/plugins/devices/devices-plugin.d.ts.map +1 -0
  62. package/dist/plugins/devices/devices-plugin.js +453 -0
  63. package/dist/plugins/devices/devices-plugin.js.map +1 -0
  64. package/dist/plugins/devices/index.d.ts +18 -0
  65. package/dist/plugins/devices/index.d.ts.map +1 -0
  66. package/dist/plugins/devices/index.js +18 -0
  67. package/dist/plugins/devices/index.js.map +1 -0
  68. package/dist/plugins/devices/stores/index.d.ts +9 -0
  69. package/dist/plugins/devices/stores/index.d.ts.map +1 -0
  70. package/dist/plugins/devices/stores/index.js +9 -0
  71. package/dist/plugins/devices/stores/index.js.map +1 -0
  72. package/dist/plugins/devices/stores/postgres-store.d.ts +26 -0
  73. package/dist/plugins/devices/stores/postgres-store.d.ts.map +1 -0
  74. package/dist/plugins/devices/stores/postgres-store.js +199 -0
  75. package/dist/plugins/devices/stores/postgres-store.js.map +1 -0
  76. package/dist/plugins/devices/token-utils.d.ts +100 -0
  77. package/dist/plugins/devices/token-utils.d.ts.map +1 -0
  78. package/dist/plugins/devices/token-utils.js +162 -0
  79. package/dist/plugins/devices/token-utils.js.map +1 -0
  80. package/dist/plugins/devices/types.d.ts +307 -0
  81. package/dist/plugins/devices/types.d.ts.map +1 -0
  82. package/dist/plugins/devices/types.js +10 -0
  83. package/dist/plugins/devices/types.js.map +1 -0
  84. package/dist/plugins/index.d.ts +18 -4
  85. package/dist/plugins/index.d.ts.map +1 -1
  86. package/dist/plugins/index.js +16 -2
  87. package/dist/plugins/index.js.map +1 -1
  88. package/dist/plugins/notifications/__tests__/notifications-manager.test.d.ts +5 -0
  89. package/dist/plugins/notifications/__tests__/notifications-manager.test.d.ts.map +1 -0
  90. package/dist/plugins/notifications/__tests__/notifications-manager.test.js +470 -0
  91. package/dist/plugins/notifications/__tests__/notifications-manager.test.js.map +1 -0
  92. package/dist/plugins/notifications/index.d.ts +71 -0
  93. package/dist/plugins/notifications/index.d.ts.map +1 -0
  94. package/dist/plugins/notifications/index.js +72 -0
  95. package/dist/plugins/notifications/index.js.map +1 -0
  96. package/dist/plugins/notifications/notifications-manager.d.ts +182 -0
  97. package/dist/plugins/notifications/notifications-manager.d.ts.map +1 -0
  98. package/dist/plugins/notifications/notifications-manager.js +610 -0
  99. package/dist/plugins/notifications/notifications-manager.js.map +1 -0
  100. package/dist/plugins/notifications/notifications-plugin.d.ts +83 -0
  101. package/dist/plugins/notifications/notifications-plugin.d.ts.map +1 -0
  102. package/dist/plugins/notifications/notifications-plugin.js +337 -0
  103. package/dist/plugins/notifications/notifications-plugin.js.map +1 -0
  104. package/dist/plugins/notifications/types.d.ts +164 -0
  105. package/dist/plugins/notifications/types.d.ts.map +1 -0
  106. package/dist/plugins/notifications/types.js +9 -0
  107. package/dist/plugins/notifications/types.js.map +1 -0
  108. package/dist/plugins/parental/__tests__/parental-plugin.test.d.ts +12 -0
  109. package/dist/plugins/parental/__tests__/parental-plugin.test.d.ts.map +1 -0
  110. package/dist/plugins/parental/__tests__/parental-plugin.test.js +349 -0
  111. package/dist/plugins/parental/__tests__/parental-plugin.test.js.map +1 -0
  112. package/dist/plugins/parental/adapters/index.d.ts +8 -0
  113. package/dist/plugins/parental/adapters/index.d.ts.map +1 -0
  114. package/dist/plugins/parental/adapters/index.js +7 -0
  115. package/dist/plugins/parental/adapters/index.js.map +1 -0
  116. package/dist/plugins/parental/adapters/kids-adapter.d.ts +24 -0
  117. package/dist/plugins/parental/adapters/kids-adapter.d.ts.map +1 -0
  118. package/dist/plugins/parental/adapters/kids-adapter.js +174 -0
  119. package/dist/plugins/parental/adapters/kids-adapter.js.map +1 -0
  120. package/dist/plugins/parental/index.d.ts +14 -0
  121. package/dist/plugins/parental/index.d.ts.map +1 -0
  122. package/dist/plugins/parental/index.js +15 -0
  123. package/dist/plugins/parental/index.js.map +1 -0
  124. package/dist/plugins/parental/parental-plugin.d.ts +88 -0
  125. package/dist/plugins/parental/parental-plugin.d.ts.map +1 -0
  126. package/dist/plugins/parental/parental-plugin.js +666 -0
  127. package/dist/plugins/parental/parental-plugin.js.map +1 -0
  128. package/dist/plugins/parental/stores/index.d.ts +7 -0
  129. package/dist/plugins/parental/stores/index.d.ts.map +1 -0
  130. package/dist/plugins/parental/stores/index.js +7 -0
  131. package/dist/plugins/parental/stores/index.js.map +1 -0
  132. package/dist/plugins/parental/stores/postgres-store.d.ts +10 -0
  133. package/dist/plugins/parental/stores/postgres-store.d.ts.map +1 -0
  134. package/dist/plugins/parental/stores/postgres-store.js +209 -0
  135. package/dist/plugins/parental/stores/postgres-store.js.map +1 -0
  136. package/dist/plugins/parental/types.d.ts +154 -0
  137. package/dist/plugins/parental/types.d.ts.map +1 -0
  138. package/dist/plugins/parental/types.js +10 -0
  139. package/dist/plugins/parental/types.js.map +1 -0
  140. package/dist/plugins/profiles/__tests__/profiles-plugin.test.d.ts +11 -0
  141. package/dist/plugins/profiles/__tests__/profiles-plugin.test.d.ts.map +1 -0
  142. package/dist/plugins/profiles/__tests__/profiles-plugin.test.js +243 -0
  143. package/dist/plugins/profiles/__tests__/profiles-plugin.test.js.map +1 -0
  144. package/dist/plugins/profiles/index.d.ts +12 -0
  145. package/dist/plugins/profiles/index.d.ts.map +1 -0
  146. package/dist/plugins/profiles/index.js +13 -0
  147. package/dist/plugins/profiles/index.js.map +1 -0
  148. package/dist/plugins/profiles/profiles-plugin.d.ts +71 -0
  149. package/dist/plugins/profiles/profiles-plugin.d.ts.map +1 -0
  150. package/dist/plugins/profiles/profiles-plugin.js +481 -0
  151. package/dist/plugins/profiles/profiles-plugin.js.map +1 -0
  152. package/dist/plugins/profiles/stores/index.d.ts +9 -0
  153. package/dist/plugins/profiles/stores/index.d.ts.map +1 -0
  154. package/dist/plugins/profiles/stores/index.js +9 -0
  155. package/dist/plugins/profiles/stores/index.js.map +1 -0
  156. package/dist/plugins/profiles/stores/postgres-store.d.ts +18 -0
  157. package/dist/plugins/profiles/stores/postgres-store.d.ts.map +1 -0
  158. package/dist/plugins/profiles/stores/postgres-store.js +310 -0
  159. package/dist/plugins/profiles/stores/postgres-store.js.map +1 -0
  160. package/dist/plugins/profiles/types.d.ts +289 -0
  161. package/dist/plugins/profiles/types.d.ts.map +1 -0
  162. package/dist/plugins/profiles/types.js +10 -0
  163. package/dist/plugins/profiles/types.js.map +1 -0
  164. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.d.ts +7 -0
  165. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.d.ts.map +1 -0
  166. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.js +220 -0
  167. package/dist/plugins/rate-limit/__tests__/rate-limit-plugin.test.js.map +1 -0
  168. package/dist/plugins/rate-limit/cleanup.d.ts +40 -0
  169. package/dist/plugins/rate-limit/cleanup.d.ts.map +1 -0
  170. package/dist/plugins/rate-limit/cleanup.js +72 -0
  171. package/dist/plugins/rate-limit/cleanup.js.map +1 -0
  172. package/dist/plugins/rate-limit/env-config.d.ts +91 -0
  173. package/dist/plugins/rate-limit/env-config.d.ts.map +1 -0
  174. package/dist/plugins/rate-limit/env-config.js +318 -0
  175. package/dist/plugins/rate-limit/env-config.js.map +1 -0
  176. package/dist/plugins/rate-limit/index.d.ts +76 -0
  177. package/dist/plugins/rate-limit/index.d.ts.map +1 -0
  178. package/dist/plugins/rate-limit/index.js +79 -0
  179. package/dist/plugins/rate-limit/index.js.map +1 -0
  180. package/dist/plugins/rate-limit/middleware.d.ts +40 -0
  181. package/dist/plugins/rate-limit/middleware.d.ts.map +1 -0
  182. package/dist/plugins/rate-limit/middleware.js +169 -0
  183. package/dist/plugins/rate-limit/middleware.js.map +1 -0
  184. package/dist/plugins/rate-limit/rate-limit-plugin.d.ts +44 -0
  185. package/dist/plugins/rate-limit/rate-limit-plugin.d.ts.map +1 -0
  186. package/dist/plugins/rate-limit/rate-limit-plugin.js +354 -0
  187. package/dist/plugins/rate-limit/rate-limit-plugin.js.map +1 -0
  188. package/dist/plugins/rate-limit/rate-limit-service.d.ts +110 -0
  189. package/dist/plugins/rate-limit/rate-limit-service.d.ts.map +1 -0
  190. package/dist/plugins/rate-limit/rate-limit-service.js +172 -0
  191. package/dist/plugins/rate-limit/rate-limit-service.js.map +1 -0
  192. package/dist/plugins/rate-limit/stores/cache-store.d.ts +33 -0
  193. package/dist/plugins/rate-limit/stores/cache-store.d.ts.map +1 -0
  194. package/dist/plugins/rate-limit/stores/cache-store.js +225 -0
  195. package/dist/plugins/rate-limit/stores/cache-store.js.map +1 -0
  196. package/dist/plugins/rate-limit/stores/index.d.ts +8 -0
  197. package/dist/plugins/rate-limit/stores/index.d.ts.map +1 -0
  198. package/dist/plugins/rate-limit/stores/index.js +8 -0
  199. package/dist/plugins/rate-limit/stores/index.js.map +1 -0
  200. package/dist/plugins/rate-limit/stores/postgres-store.d.ts +34 -0
  201. package/dist/plugins/rate-limit/stores/postgres-store.d.ts.map +1 -0
  202. package/dist/plugins/rate-limit/stores/postgres-store.js +320 -0
  203. package/dist/plugins/rate-limit/stores/postgres-store.js.map +1 -0
  204. package/dist/plugins/rate-limit/strategies/fixed-window.d.ts +21 -0
  205. package/dist/plugins/rate-limit/strategies/fixed-window.d.ts.map +1 -0
  206. package/dist/plugins/rate-limit/strategies/fixed-window.js +97 -0
  207. package/dist/plugins/rate-limit/strategies/fixed-window.js.map +1 -0
  208. package/dist/plugins/rate-limit/strategies/index.d.ts +14 -0
  209. package/dist/plugins/rate-limit/strategies/index.d.ts.map +1 -0
  210. package/dist/plugins/rate-limit/strategies/index.js +27 -0
  211. package/dist/plugins/rate-limit/strategies/index.js.map +1 -0
  212. package/dist/plugins/rate-limit/strategies/sliding-window.d.ts +22 -0
  213. package/dist/plugins/rate-limit/strategies/sliding-window.d.ts.map +1 -0
  214. package/dist/plugins/rate-limit/strategies/sliding-window.js +122 -0
  215. package/dist/plugins/rate-limit/strategies/sliding-window.js.map +1 -0
  216. package/dist/plugins/rate-limit/strategies/token-bucket.d.ts +28 -0
  217. package/dist/plugins/rate-limit/strategies/token-bucket.d.ts.map +1 -0
  218. package/dist/plugins/rate-limit/strategies/token-bucket.js +121 -0
  219. package/dist/plugins/rate-limit/strategies/token-bucket.js.map +1 -0
  220. package/dist/plugins/rate-limit/types.d.ts +265 -0
  221. package/dist/plugins/rate-limit/types.d.ts.map +1 -0
  222. package/dist/plugins/rate-limit/types.js +9 -0
  223. package/dist/plugins/rate-limit/types.js.map +1 -0
  224. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.d.ts +11 -0
  225. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.d.ts.map +1 -0
  226. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.js +305 -0
  227. package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.js.map +1 -0
  228. package/dist/plugins/subscriptions/index.d.ts +12 -0
  229. package/dist/plugins/subscriptions/index.d.ts.map +1 -0
  230. package/dist/plugins/subscriptions/index.js +13 -0
  231. package/dist/plugins/subscriptions/index.js.map +1 -0
  232. package/dist/plugins/subscriptions/stores/index.d.ts +9 -0
  233. package/dist/plugins/subscriptions/stores/index.d.ts.map +1 -0
  234. package/dist/plugins/subscriptions/stores/index.js +9 -0
  235. package/dist/plugins/subscriptions/stores/index.js.map +1 -0
  236. package/dist/plugins/subscriptions/stores/postgres-store.d.ts +14 -0
  237. package/dist/plugins/subscriptions/stores/postgres-store.d.ts.map +1 -0
  238. package/dist/plugins/subscriptions/stores/postgres-store.js +359 -0
  239. package/dist/plugins/subscriptions/stores/postgres-store.js.map +1 -0
  240. package/dist/plugins/subscriptions/subscriptions-plugin.d.ts +82 -0
  241. package/dist/plugins/subscriptions/subscriptions-plugin.d.ts.map +1 -0
  242. package/dist/plugins/subscriptions/subscriptions-plugin.js +449 -0
  243. package/dist/plugins/subscriptions/subscriptions-plugin.js.map +1 -0
  244. package/dist/plugins/subscriptions/types.d.ts +308 -0
  245. package/dist/plugins/subscriptions/types.d.ts.map +1 -0
  246. package/dist/plugins/subscriptions/types.js +10 -0
  247. package/dist/plugins/subscriptions/types.js.map +1 -0
  248. package/dist/plugins/usage/__tests__/usage-plugin.test.d.ts +11 -0
  249. package/dist/plugins/usage/__tests__/usage-plugin.test.d.ts.map +1 -0
  250. package/dist/plugins/usage/__tests__/usage-plugin.test.js +218 -0
  251. package/dist/plugins/usage/__tests__/usage-plugin.test.js.map +1 -0
  252. package/dist/plugins/usage/index.d.ts +12 -0
  253. package/dist/plugins/usage/index.d.ts.map +1 -0
  254. package/dist/plugins/usage/index.js +13 -0
  255. package/dist/plugins/usage/index.js.map +1 -0
  256. package/dist/plugins/usage/stores/index.d.ts +9 -0
  257. package/dist/plugins/usage/stores/index.d.ts.map +1 -0
  258. package/dist/plugins/usage/stores/index.js +9 -0
  259. package/dist/plugins/usage/stores/index.js.map +1 -0
  260. package/dist/plugins/usage/stores/postgres-store.d.ts +14 -0
  261. package/dist/plugins/usage/stores/postgres-store.d.ts.map +1 -0
  262. package/dist/plugins/usage/stores/postgres-store.js +146 -0
  263. package/dist/plugins/usage/stores/postgres-store.js.map +1 -0
  264. package/dist/plugins/usage/types.d.ts +195 -0
  265. package/dist/plugins/usage/types.d.ts.map +1 -0
  266. package/dist/plugins/usage/types.js +10 -0
  267. package/dist/plugins/usage/types.js.map +1 -0
  268. package/dist/plugins/usage/usage-plugin.d.ts +51 -0
  269. package/dist/plugins/usage/usage-plugin.d.ts.map +1 -0
  270. package/dist/plugins/usage/usage-plugin.js +412 -0
  271. package/dist/plugins/usage/usage-plugin.js.map +1 -0
  272. package/dist/plugins/users/__tests__/postgres-store.test.d.ts +10 -0
  273. package/dist/plugins/users/__tests__/postgres-store.test.d.ts.map +1 -0
  274. package/dist/plugins/users/__tests__/postgres-store.test.js +229 -0
  275. package/dist/plugins/users/__tests__/postgres-store.test.js.map +1 -0
  276. package/dist/plugins/users/__tests__/users-plugin.test.js +3 -0
  277. package/dist/plugins/users/__tests__/users-plugin.test.js.map +1 -1
  278. package/dist/plugins/users/index.d.ts +2 -2
  279. package/dist/plugins/users/index.d.ts.map +1 -1
  280. package/dist/plugins/users/index.js +1 -1
  281. package/dist/plugins/users/index.js.map +1 -1
  282. package/dist/plugins/users/stores/postgres-store.d.ts.map +1 -1
  283. package/dist/plugins/users/stores/postgres-store.js +76 -0
  284. package/dist/plugins/users/stores/postgres-store.js.map +1 -1
  285. package/dist/plugins/users/types.d.ts +74 -6
  286. package/dist/plugins/users/types.d.ts.map +1 -1
  287. package/dist/plugins/users/users-plugin.d.ts +15 -1
  288. package/dist/plugins/users/users-plugin.d.ts.map +1 -1
  289. package/dist/plugins/users/users-plugin.js +29 -0
  290. package/dist/plugins/users/users-plugin.js.map +1 -1
  291. package/dist-ui/assets/index-CynOqPkb.js +469 -0
  292. package/dist-ui/assets/{index-BY8OxNgO.js.map → index-CynOqPkb.js.map} +1 -1
  293. package/dist-ui/index.html +1 -1
  294. package/dist-ui-lib/api/controlPanelApi.d.ts +187 -0
  295. package/dist-ui-lib/components/StatCard.d.ts +16 -0
  296. package/dist-ui-lib/dashboard/widgets/AuthStatusWidget.d.ts +9 -0
  297. package/dist-ui-lib/dashboard/widgets/IntegrationStatusWidget.d.ts +9 -0
  298. package/dist-ui-lib/dashboard/widgets/NotificationsStatsWidget.d.ts +12 -0
  299. package/dist-ui-lib/dashboard/widgets/index.d.ts +3 -0
  300. package/dist-ui-lib/index.js +3579 -2379
  301. package/dist-ui-lib/index.js.map +1 -1
  302. package/dist-ui-lib/pages/IntegrationsPage.d.ts +1 -0
  303. package/dist-ui-lib/pages/NotificationsPage.d.ts +9 -0
  304. package/dist-ui-lib/pages/RateLimitPage.d.ts +1 -0
  305. package/dist-ui-lib/utils/formatters.d.ts +19 -0
  306. package/package.json +1 -1
  307. package/src/core/control-panel.ts +128 -0
  308. package/src/core/types.ts +17 -0
  309. package/src/index.ts +216 -0
  310. package/src/plugins/auth/adapter-wrapper.test.ts +395 -0
  311. package/src/plugins/auth/adapter-wrapper.ts +205 -0
  312. package/src/plugins/auth/config-store.test.ts +417 -0
  313. package/src/plugins/auth/config-store.ts +305 -0
  314. package/src/plugins/auth/env-config.ts +714 -7
  315. package/src/plugins/auth/index.ts +22 -1
  316. package/src/plugins/auth/types.ts +138 -0
  317. package/src/plugins/bans/bans-plugin.ts +15 -3
  318. package/src/plugins/devices/__tests__/devices-plugin.test.ts +551 -0
  319. package/src/plugins/devices/__tests__/token-utils.test.ts +264 -0
  320. package/src/plugins/devices/adapters/compute-adapter.ts +139 -0
  321. package/src/plugins/devices/adapters/index.ts +13 -0
  322. package/src/plugins/devices/adapters/mobile-adapter.ts +179 -0
  323. package/src/plugins/devices/devices-plugin.ts +538 -0
  324. package/src/plugins/devices/index.ts +69 -0
  325. package/src/plugins/devices/stores/index.ts +9 -0
  326. package/src/plugins/devices/stores/postgres-store.ts +304 -0
  327. package/src/plugins/devices/token-utils.ts +213 -0
  328. package/src/plugins/devices/types.ts +351 -0
  329. package/src/plugins/index.ts +267 -0
  330. package/src/plugins/notifications/__tests__/notifications-manager.test.ts +637 -0
  331. package/src/plugins/notifications/index.ts +91 -0
  332. package/src/plugins/notifications/notifications-manager.ts +773 -0
  333. package/src/plugins/notifications/notifications-plugin.ts +398 -0
  334. package/src/plugins/notifications/types.ts +207 -0
  335. package/src/plugins/parental/__tests__/parental-plugin.test.ts +465 -0
  336. package/src/plugins/parental/adapters/index.ts +8 -0
  337. package/src/plugins/parental/adapters/kids-adapter.ts +206 -0
  338. package/src/plugins/parental/index.ts +55 -0
  339. package/src/plugins/parental/parental-plugin.ts +759 -0
  340. package/src/plugins/parental/stores/index.ts +7 -0
  341. package/src/plugins/parental/stores/postgres-store.ts +304 -0
  342. package/src/plugins/parental/types.ts +180 -0
  343. package/src/plugins/profiles/__tests__/profiles-plugin.test.ts +321 -0
  344. package/src/plugins/profiles/index.ts +49 -0
  345. package/src/plugins/profiles/profiles-plugin.ts +546 -0
  346. package/src/plugins/profiles/stores/index.ts +9 -0
  347. package/src/plugins/profiles/stores/postgres-store.ts +439 -0
  348. package/src/plugins/profiles/types.ts +338 -0
  349. package/src/plugins/rate-limit/__tests__/rate-limit-plugin.test.ts +259 -0
  350. package/src/plugins/rate-limit/cleanup.ts +117 -0
  351. package/src/plugins/rate-limit/env-config.ts +400 -0
  352. package/src/plugins/rate-limit/index.ts +128 -0
  353. package/src/plugins/rate-limit/middleware.ts +212 -0
  354. package/src/plugins/rate-limit/rate-limit-plugin.ts +400 -0
  355. package/src/plugins/rate-limit/rate-limit-service.ts +228 -0
  356. package/src/plugins/rate-limit/stores/cache-store.ts +261 -0
  357. package/src/plugins/rate-limit/stores/index.ts +8 -0
  358. package/src/plugins/rate-limit/stores/postgres-store.ts +402 -0
  359. package/src/plugins/rate-limit/strategies/fixed-window.ts +116 -0
  360. package/src/plugins/rate-limit/strategies/index.ts +30 -0
  361. package/src/plugins/rate-limit/strategies/sliding-window.ts +157 -0
  362. package/src/plugins/rate-limit/strategies/token-bucket.ts +154 -0
  363. package/src/plugins/rate-limit/types.ts +338 -0
  364. package/src/plugins/subscriptions/__tests__/subscriptions-plugin.test.ts +404 -0
  365. package/src/plugins/subscriptions/index.ts +51 -0
  366. package/src/plugins/subscriptions/stores/index.ts +9 -0
  367. package/src/plugins/subscriptions/stores/postgres-store.ts +482 -0
  368. package/src/plugins/subscriptions/subscriptions-plugin.ts +530 -0
  369. package/src/plugins/subscriptions/types.ts +355 -0
  370. package/src/plugins/usage/__tests__/usage-plugin.test.ts +288 -0
  371. package/src/plugins/usage/index.ts +39 -0
  372. package/src/plugins/usage/stores/index.ts +9 -0
  373. package/src/plugins/usage/stores/postgres-store.ts +213 -0
  374. package/src/plugins/usage/types.ts +222 -0
  375. package/src/plugins/usage/usage-plugin.ts +484 -0
  376. package/src/plugins/users/__tests__/postgres-store.test.ts +326 -0
  377. package/src/plugins/users/__tests__/users-plugin.test.ts +3 -0
  378. package/src/plugins/users/index.ts +6 -0
  379. package/src/plugins/users/stores/postgres-store.ts +104 -0
  380. package/src/plugins/users/types.ts +82 -6
  381. package/src/plugins/users/users-plugin.ts +37 -0
  382. package/ui/src/App.tsx +36 -14
  383. package/ui/src/api/controlPanelApi.ts +329 -6
  384. package/ui/src/components/StatCard.tsx +58 -0
  385. package/ui/src/dashboard/builtInWidgets.tsx +7 -1
  386. package/ui/src/dashboard/widgets/AuthStatusWidget.tsx +143 -0
  387. package/ui/src/dashboard/widgets/IntegrationStatusWidget.tsx +135 -0
  388. package/ui/src/dashboard/widgets/NotificationsStatsWidget.tsx +167 -0
  389. package/ui/src/dashboard/widgets/index.ts +3 -0
  390. package/ui/src/pages/AuthPage.tsx +986 -142
  391. package/ui/src/pages/IntegrationsPage.tsx +288 -0
  392. package/ui/src/pages/NotificationsPage.tsx +417 -0
  393. package/ui/src/pages/RateLimitPage.tsx +292 -0
  394. package/ui/src/utils/formatters.ts +33 -0
  395. package/dist-ui/assets/index-BY8OxNgO.js +0 -465
@@ -0,0 +1 @@
1
+ export declare function IntegrationsPage(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Notifications Page
3
+ *
4
+ * Full management page for the Notifications Plugin.
5
+ * Shows connection stats, connected clients table, and management actions.
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+ export declare function NotificationsPage(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function RateLimitPage(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Formatting Utilities
3
+ *
4
+ * Common formatting functions for numbers, durations, and strings.
5
+ *
6
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
7
+ */
8
+ /**
9
+ * Format a number with K/M suffix for large values
10
+ */
11
+ export declare function formatNumber(num: number): string;
12
+ /**
13
+ * Format milliseconds to human-readable duration
14
+ */
15
+ export declare function formatDuration(ms: number): string;
16
+ /**
17
+ * Truncate a string ID for display
18
+ */
19
+ export declare function truncateId(id: string, maxLength?: number): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwickapps/server",
3
- "version": "1.3.1",
3
+ "version": "1.5.0",
4
4
  "description": "Plugin-based application server framework for building websites, APIs, admin dashboards, and full-stack products",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -320,6 +320,22 @@ export function createControlPanel(options: CreateControlPanelOptions): ControlP
320
320
  }
321
321
  }
322
322
 
323
+ // Serve landing page at root (/) when control panel is mounted elsewhere
324
+ if (mountPath !== '/' && config.landingPage !== false) {
325
+ const landingConfig = config.landingPage || {};
326
+ app.get('/', (_req: Request, res: Response) => {
327
+ const html = generateLandingPageHtml({
328
+ productName: config.productName,
329
+ title: landingConfig.title || config.productName,
330
+ heading: landingConfig.heading || `Welcome to ${config.productName}`,
331
+ description: landingConfig.description || `${config.productName} is running.`,
332
+ controlPanelPath: mountPath,
333
+ links: landingConfig.links,
334
+ });
335
+ res.type('html').send(html);
336
+ });
337
+ }
338
+
323
339
  // Start a plugin with the registry
324
340
  const startPlugin = async (plugin: Plugin, pluginConfig: PluginConfig = {}): Promise<boolean> => {
325
341
  return pluginRegistry.startPlugin(plugin, pluginConfig);
@@ -564,3 +580,115 @@ function generateDashboardHtml(
564
580
  </body>
565
581
  </html>`;
566
582
  }
583
+
584
+ /**
585
+ * Generate landing page HTML for root path
586
+ */
587
+ function generateLandingPageHtml(options: {
588
+ productName: string;
589
+ title: string;
590
+ heading: string;
591
+ description: string;
592
+ controlPanelPath: string;
593
+ links?: Array<{ label: string; url: string }>;
594
+ }): string {
595
+ const { productName, title, heading, description, controlPanelPath, links = [] } = options;
596
+
597
+ const linksHtml = [
598
+ { label: 'Control Panel', url: controlPanelPath },
599
+ ...links,
600
+ ]
601
+ .map(
602
+ (link) =>
603
+ `<a href="${link.url}" class="link">${link.label}</a>`
604
+ )
605
+ .join('');
606
+
607
+ return `<!DOCTYPE html>
608
+ <html lang="en">
609
+ <head>
610
+ <meta charset="UTF-8">
611
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
612
+ <title>${title}</title>
613
+ <style>
614
+ * { margin: 0; padding: 0; box-sizing: border-box; }
615
+ body {
616
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
617
+ background: linear-gradient(135deg, #0f172a 0%, #1e1b4b 100%);
618
+ color: #e2e8f0;
619
+ min-height: 100vh;
620
+ display: flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ }
624
+ .container {
625
+ text-align: center;
626
+ max-width: 600px;
627
+ padding: 2rem;
628
+ }
629
+ .logo {
630
+ width: 80px;
631
+ height: 80px;
632
+ background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
633
+ border-radius: 20px;
634
+ margin: 0 auto 2rem;
635
+ display: flex;
636
+ align-items: center;
637
+ justify-content: center;
638
+ font-size: 2rem;
639
+ font-weight: bold;
640
+ }
641
+ h1 {
642
+ font-size: 2.5rem;
643
+ margin-bottom: 1rem;
644
+ background: linear-gradient(135deg, #6366f1 0%, #a78bfa 100%);
645
+ -webkit-background-clip: text;
646
+ -webkit-text-fill-color: transparent;
647
+ background-clip: text;
648
+ }
649
+ p {
650
+ color: #94a3b8;
651
+ font-size: 1.125rem;
652
+ margin-bottom: 2rem;
653
+ line-height: 1.6;
654
+ }
655
+ .links {
656
+ display: flex;
657
+ flex-wrap: wrap;
658
+ gap: 1rem;
659
+ justify-content: center;
660
+ }
661
+ .link {
662
+ display: inline-block;
663
+ padding: 0.875rem 2rem;
664
+ background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
665
+ color: white;
666
+ text-decoration: none;
667
+ border-radius: 0.75rem;
668
+ font-weight: 600;
669
+ transition: transform 0.2s, box-shadow 0.2s;
670
+ }
671
+ .link:hover {
672
+ transform: translateY(-2px);
673
+ box-shadow: 0 10px 25px -5px rgba(99, 102, 241, 0.4);
674
+ }
675
+ .footer {
676
+ margin-top: 3rem;
677
+ color: #475569;
678
+ font-size: 0.875rem;
679
+ }
680
+ </style>
681
+ </head>
682
+ <body>
683
+ <div class="container">
684
+ <div class="logo">${productName.charAt(0)}</div>
685
+ <h1>${heading}</h1>
686
+ <p>${description}</p>
687
+ <div class="links">${linksHtml}</div>
688
+ <div class="footer">
689
+ Powered by QwickApps Server
690
+ </div>
691
+ </div>
692
+ </body>
693
+ </html>`;
694
+ }
package/src/core/types.ts CHANGED
@@ -175,6 +175,23 @@ export interface ControlPanelConfig {
175
175
 
176
176
  /** Optional: Custom path to a dist-ui folder for serving a custom React UI */
177
177
  customUiPath?: string;
178
+
179
+ /**
180
+ * Optional: Landing page configuration for root path (/).
181
+ * Only used when mountPath is not '/'.
182
+ * If not provided, a default landing page is generated.
183
+ * Set to false to disable the landing page.
184
+ */
185
+ landingPage?: {
186
+ /** Page title */
187
+ title?: string;
188
+ /** Main heading */
189
+ heading?: string;
190
+ /** Description text */
191
+ description?: string;
192
+ /** Additional links */
193
+ links?: Array<{ label: string; url: string }>;
194
+ } | false;
178
195
  }
179
196
 
180
197
  // Plugin types are now in plugin-registry.ts
package/src/index.ts CHANGED
@@ -91,6 +91,8 @@ export {
91
91
  createAuthPlugin,
92
92
  createAuthPluginFromEnv,
93
93
  getAuthStatus,
94
+ setAuthConfigStore,
95
+ postgresAuthConfigStore,
94
96
  isAuthenticated,
95
97
  getAuthenticatedUser,
96
98
  getAccessToken,
@@ -107,6 +109,8 @@ export {
107
109
  getUserStore,
108
110
  getUserById,
109
111
  getUserByEmail,
112
+ getUserByIdentifier,
113
+ linkUserIdentifiers,
110
114
  findOrCreateUser,
111
115
  postgresUserStore,
112
116
  // Bans plugin (separate from Users, depends on Users)
@@ -140,6 +144,124 @@ export {
140
144
  requireAnyEntitlement,
141
145
  requireAllEntitlements,
142
146
  postgresEntitlementSource,
147
+ // Rate Limit plugin
148
+ createRateLimitPlugin,
149
+ createRateLimitPluginFromEnv,
150
+ getRateLimitConfigStatus,
151
+ postgresRateLimitStore,
152
+ createRateLimitCache,
153
+ createNoOpCache,
154
+ createSlidingWindowStrategy,
155
+ createFixedWindowStrategy,
156
+ createTokenBucketStrategy,
157
+ getStrategy,
158
+ rateLimitMiddleware,
159
+ rateLimitStatusMiddleware,
160
+ RateLimitService,
161
+ getRateLimitService,
162
+ isLimited,
163
+ checkLimit,
164
+ incrementLimit,
165
+ getRemainingRequests,
166
+ getLimitStatus,
167
+ clearLimit,
168
+ createCleanupJob,
169
+ // Devices plugin
170
+ createDevicesPlugin,
171
+ getDeviceStore,
172
+ getDeviceAdapter,
173
+ registerDevice,
174
+ verifyDeviceToken,
175
+ getDeviceById,
176
+ updateDevice,
177
+ deleteDevice,
178
+ regenerateToken,
179
+ listUserDevices,
180
+ listOrgDevices,
181
+ deactivateDevice,
182
+ activateDevice,
183
+ cleanupExpiredTokens,
184
+ postgresDeviceStore,
185
+ computeDeviceAdapter,
186
+ mobileDeviceAdapter,
187
+ generateDeviceToken,
188
+ generatePairingCode,
189
+ hashToken,
190
+ verifyToken,
191
+ isValidTokenFormat,
192
+ isTokenExpired,
193
+ getTokenExpiration,
194
+ DeviceTokens,
195
+ // Profiles plugin
196
+ createProfilesPlugin,
197
+ getProfileStore,
198
+ createProfile,
199
+ getProfileById,
200
+ updateProfile,
201
+ deleteProfile,
202
+ listUserProfiles,
203
+ getDefaultProfile,
204
+ setDefaultProfile,
205
+ getProfilesByAgeGroup,
206
+ getChildProfiles,
207
+ getProfileAge,
208
+ checkTimeRestrictions,
209
+ getContentFilterLevel,
210
+ canAccessContent,
211
+ postgresProfileStore,
212
+ // Subscriptions plugin
213
+ createSubscriptionsPlugin,
214
+ getSubscriptionsStore,
215
+ createTier,
216
+ getTierBySlug,
217
+ getTierById,
218
+ listTiers,
219
+ getTierEntitlements,
220
+ setTierEntitlements,
221
+ getUserSubscription,
222
+ createUserSubscription,
223
+ updateUserSubscription,
224
+ cancelSubscription,
225
+ getUserTierSlug,
226
+ getFeatureLimit,
227
+ hasFeature,
228
+ checkFeatureLimit,
229
+ ensureUserSubscription,
230
+ postgresSubscriptionsStore,
231
+ // Usage plugin
232
+ createUsagePlugin,
233
+ getUsageStore,
234
+ getDailyUsage,
235
+ incrementUsage,
236
+ checkUsageLimit,
237
+ getFeatureUsageStatus,
238
+ getDailyUsageSummary,
239
+ resetUsage,
240
+ getRemainingQuota,
241
+ canUseFeature,
242
+ postgresUsageStore,
243
+ // Parental plugin
244
+ createParentalPlugin,
245
+ getParentalStore,
246
+ getParentalAdapter,
247
+ getGuardianSettings,
248
+ createGuardianSettings,
249
+ updateGuardianSettings,
250
+ setPin,
251
+ verifyPin,
252
+ incrementFailedPinAttempts,
253
+ resetFailedPinAttempts,
254
+ getRestrictions,
255
+ createRestriction,
256
+ updateRestriction,
257
+ deleteRestriction,
258
+ pauseProfile,
259
+ resumeProfile,
260
+ checkProfileAccess,
261
+ logActivity,
262
+ getActivityLog,
263
+ postgresParentalStore,
264
+ kidsAdapter,
143
265
  } from './plugins/index.js';
144
266
  export type {
145
267
  HealthPluginConfig,
@@ -166,6 +288,8 @@ export type {
166
288
  AuthPluginState,
167
289
  AuthEnvPluginOptions,
168
290
  AuthConfigStatus,
291
+ AuthConfigStore,
292
+ PostgresAuthConfigStoreConfig,
169
293
  // Users plugin types
170
294
  UsersPluginConfig,
171
295
  UserStore,
@@ -178,6 +302,8 @@ export type {
178
302
  UserSyncConfig,
179
303
  UsersApiConfig,
180
304
  UsersUiConfig,
305
+ UserIdentifiers,
306
+ StoredIdentifiers,
181
307
  // Bans plugin types
182
308
  BansPluginConfig,
183
309
  BanStore,
@@ -198,4 +324,94 @@ export type {
198
324
  UserEntitlement,
199
325
  CachedEntitlements,
200
326
  EntitlementStats,
327
+ // Rate Limit plugin types
328
+ RateLimitPluginConfig,
329
+ RateLimitEnvPluginOptions,
330
+ RateLimitStrategy,
331
+ LimitStatus,
332
+ StoredLimit,
333
+ IncrementOptions,
334
+ RateLimitStore,
335
+ PostgresRateLimitStoreConfig,
336
+ RateLimitCache,
337
+ RateLimitCacheConfig,
338
+ RateLimitMiddlewareOptions,
339
+ // Devices plugin types
340
+ Device,
341
+ DeviceWithToken,
342
+ CreateDeviceInput,
343
+ UpdateDeviceInput,
344
+ DeviceSearchParams,
345
+ DeviceListResponse,
346
+ TokenVerificationResult,
347
+ DeviceAdapter,
348
+ DeviceValidationResult,
349
+ DeviceStore,
350
+ DevicesPluginConfig,
351
+ DevicesApiConfig,
352
+ PostgresDeviceStoreConfig,
353
+ ComputeDeviceMetadata,
354
+ MobileDeviceMetadata,
355
+ IoTDeviceMetadata,
356
+ ComputeAdapterConfig,
357
+ MobileAdapterConfig,
358
+ DeviceTokenPair,
359
+ // Profiles plugin types
360
+ Profile,
361
+ CreateProfileInput,
362
+ UpdateProfileInput,
363
+ ProfileSearchParams,
364
+ ProfileListResponse,
365
+ TimeRestrictionResult,
366
+ ContentFilterLevel,
367
+ AgeGroup,
368
+ ProfileStore,
369
+ ProfilesPluginConfig,
370
+ ProfilesApiConfig,
371
+ PostgresProfileStoreConfig,
372
+ AgeThresholds,
373
+ QwickBotProfileMetadata,
374
+ GamingProfileMetadata,
375
+ // Subscriptions plugin types
376
+ SubscriptionTier,
377
+ SubscriptionEntitlement,
378
+ UserSubscription,
379
+ UserSubscriptionWithTier,
380
+ SubscriptionStatus,
381
+ FeatureLimitResult,
382
+ CreateTierInput,
383
+ UpdateTierInput,
384
+ CreateEntitlementInput,
385
+ CreateUserSubscriptionInput,
386
+ UpdateUserSubscriptionInput,
387
+ SubscriptionsStore,
388
+ SubscriptionsPluginConfig,
389
+ SubscriptionsApiConfig,
390
+ PostgresSubscriptionsStoreConfig,
391
+ // Usage plugin types
392
+ DailyUsage,
393
+ MonthlyUsage,
394
+ UsageIncrementResult,
395
+ UsageStatus,
396
+ UsageSummary,
397
+ UsageStore,
398
+ UsagePluginConfig,
399
+ UsageApiConfig,
400
+ UsageCleanupConfig,
401
+ PostgresUsageStoreConfig,
402
+ // Parental plugin types
403
+ GuardianSettings,
404
+ ProfileRestriction,
405
+ ActivityLog,
406
+ AccessCheckResult,
407
+ CreateGuardianSettingsInput,
408
+ UpdateGuardianSettingsInput,
409
+ CreateRestrictionInput,
410
+ LogActivityInput,
411
+ ParentalAdapter,
412
+ ParentalStore,
413
+ ParentalPluginConfig,
414
+ ParentalApiConfig,
415
+ PostgresParentalStoreConfig,
416
+ KidsAdapterConfig,
201
417
  } from './plugins/index.js';