includio-cms 0.1.0 → 0.1.2

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 (59) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/ROADMAP.md +17 -15
  3. package/dist/admin/auth-client.d.ts +1165 -5
  4. package/dist/admin/auth-client.js +4 -1
  5. package/dist/admin/client/account/sessions-section.svelte +1 -21
  6. package/dist/admin/client/index.d.ts +1 -0
  7. package/dist/admin/client/index.js +1 -0
  8. package/dist/admin/client/users/accept-invite-page.svelte +118 -0
  9. package/dist/admin/client/users/accept-invite-page.svelte.d.ts +4 -0
  10. package/dist/admin/client/users/create-user-dialog.svelte +157 -0
  11. package/dist/admin/client/users/create-user-dialog.svelte.d.ts +8 -0
  12. package/dist/admin/client/users/delete-user-dialog.svelte +53 -0
  13. package/dist/admin/client/users/delete-user-dialog.svelte.d.ts +10 -0
  14. package/dist/admin/client/users/edit-user-dialog.svelte +127 -0
  15. package/dist/admin/client/users/edit-user-dialog.svelte.d.ts +16 -0
  16. package/dist/admin/client/users/invite-user-dialog.svelte +107 -0
  17. package/dist/admin/client/users/invite-user-dialog.svelte.d.ts +8 -0
  18. package/dist/admin/client/users/lang.d.ts +57 -0
  19. package/dist/admin/client/users/lang.js +114 -0
  20. package/dist/admin/client/users/pending-invitations.svelte +145 -0
  21. package/dist/admin/client/users/pending-invitations.svelte.d.ts +6 -0
  22. package/dist/admin/client/users/user-sessions-sheet.svelte +141 -0
  23. package/dist/admin/client/users/user-sessions-sheet.svelte.d.ts +8 -0
  24. package/dist/admin/client/users/users-page.svelte +262 -0
  25. package/dist/admin/client/users/users-page.svelte.d.ts +6 -0
  26. package/dist/admin/components/fields/array-field.svelte +68 -22
  27. package/dist/admin/components/fields/field-renderer.svelte +25 -2
  28. package/dist/admin/components/fields/number-field.svelte +1 -1
  29. package/dist/admin/components/fields/text-field-wrapper.svelte +56 -1
  30. package/dist/admin/components/fields/text-field.svelte +2 -2
  31. package/dist/admin/components/layout/lang.d.ts +1 -0
  32. package/dist/admin/components/layout/lang.js +4 -2
  33. package/dist/admin/components/layout/nav-main.svelte +15 -1
  34. package/dist/admin/remote/invite.d.ts +44 -0
  35. package/dist/admin/remote/invite.js +44 -0
  36. package/dist/admin/remote/middleware/auth.d.ts +5 -0
  37. package/dist/admin/remote/middleware/auth.js +7 -0
  38. package/dist/admin/utils/parseUserAgent.d.ts +5 -0
  39. package/dist/admin/utils/parseUserAgent.js +26 -0
  40. package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
  41. package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
  42. package/dist/core/cms.d.ts +1 -1
  43. package/dist/core/cms.js +1 -1
  44. package/dist/core/fields/fieldSchemaToTs.js +18 -4
  45. package/dist/core/server/forms/submissions/operations/create.js +1 -1
  46. package/dist/email-nodemailer/index.d.ts +1 -0
  47. package/dist/server/auth.d.ts +8 -8
  48. package/dist/server/db/schema/auth-schema.d.ts +143 -0
  49. package/dist/server/db/schema/auth-schema.js +12 -0
  50. package/dist/sveltekit/server/handle.js +13 -0
  51. package/dist/types/cms.d.ts +2 -2
  52. package/dist/types/roles.d.ts +1 -0
  53. package/dist/types/roles.js +1 -0
  54. package/dist/updates/0.1.1/index.d.ts +2 -0
  55. package/dist/updates/0.1.1/index.js +17 -0
  56. package/dist/updates/0.1.2/index.d.ts +2 -0
  57. package/dist/updates/0.1.2/index.js +36 -0
  58. package/dist/updates/index.js +3 -1
  59. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,58 @@
3
3
  All notable changes to includio-cms are documented here.
4
4
  Generated from `src/lib/updates/` — do not edit manually.
5
5
 
6
+ ## 0.1.2 — 2026-02-18
7
+
8
+ User management & RBAC
9
+
10
+ ### Added
11
+ - Role type system (admin/user) with UserRole type
12
+ - RBAC middleware: requireRole() for server-side role checks
13
+ - Admin users page: list, search, pagination via authClient.admin.listUsers
14
+ - Create user dialog: email, password, name, role via authClient.admin.createUser
15
+ - Edit user dialog: name, email, role with self-demotion protection
16
+ - Delete user dialog with self-deletion protection
17
+ - Route gating: /admin/users restricted to admin role
18
+ - Sidebar gating: Users nav item visible only for admins
19
+ - Auth client: adminClient() plugin added
20
+ - CLI: addUser rewritten to use better-auth API with role prompt
21
+ - Admin session management: view/revoke other users' sessions
22
+ - Email invitation system: invite users by email with role assignment
23
+ - Accept invite page: public registration via invite token
24
+ - Pending invitations list with cancel and resend support
25
+ - Email adapter now optional in CMS config
26
+
27
+ ### Migration
28
+
29
+ ```sql
30
+ CREATE TABLE IF NOT EXISTS invitation (
31
+ id TEXT PRIMARY KEY,
32
+ email TEXT NOT NULL,
33
+ role TEXT NOT NULL DEFAULT 'user',
34
+ token TEXT NOT NULL UNIQUE,
35
+ expires_at TIMESTAMP NOT NULL,
36
+ created_at TIMESTAMP NOT NULL DEFAULT NOW(),
37
+ created_by TEXT NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
38
+ used_at TIMESTAMP
39
+ );
40
+
41
+ CREATE INDEX IF NOT EXISTS invitation_token_idx ON invitation (token);
42
+ ```
43
+
44
+ ## 0.1.1 — 2026-02-18
45
+
46
+ Field constraint UI — visible limits, counters, and hints
47
+
48
+ ### Added
49
+ - Text fields: character counter (X / Y) with aria-live, destructive color at limit
50
+ - Text fields: constraint hints (min/max chars, pattern format) in description
51
+ - Text fields: native minlength/maxlength HTML attributes on input/textarea
52
+ - Number fields: native min/max/step HTML attributes on input
53
+ - Number fields: range and step hints in description
54
+ - Array fields: items counter (X / Y) next to label when maxItems defined
55
+ - Array fields: Add/Duplicate buttons disabled at maxItems limit
56
+ - Array fields: fixed-length mode (minItems === maxItems) — pre-populated, reorder only
57
+
6
58
  ## 0.1.0 — 2026-02-17
7
59
 
8
60
  Stabilization — pagination, language switcher, and more
package/ROADMAP.md CHANGED
@@ -22,29 +22,27 @@
22
22
 
23
23
  ## 0.1.1 — Input integrity
24
24
 
25
- - [ ] `[fix]` `[P1]` Input constraints UI — HTML maxlength, character counter, pattern feedback <!-- files: src/lib/admin/components/fields/text-field.svelte -->
26
- - [ ] `[fix]` `[P1]` Array field maxItems — disable Add button when max reached <!-- files: src/lib/admin/components/fields/array-field.svelte -->
27
- - [ ] `[feature]` `[P1]` Array field fixed length — fixed item count, no add/remove, reorder only
28
- - [ ] `[feature]` `[P1]` Field constraint info display — show constraints before validation error (WCAG/ATAG)
25
+ - [x] `[fix]` `[P1]` Input constraints UI — HTML maxlength, character counter, pattern feedback <!-- files: src/lib/admin/components/fields/text-field.svelte, src/lib/admin/components/fields/text-field-wrapper.svelte -->
26
+ - [x] `[fix]` `[P1]` Array field maxItems — disable Add button when max reached <!-- files: src/lib/admin/components/fields/array-field.svelte -->
27
+ - [x] `[feature]` `[P1]` Array field fixed length — fixed item count, no add/remove, reorder only
28
+ - [x] `[feature]` `[P1]` Field constraint info display — show constraints before validation error (WCAG/ATAG) <!-- files: src/lib/admin/components/fields/text-field-wrapper.svelte, src/lib/admin/components/fields/field-renderer.svelte -->
29
29
 
30
30
  ## 0.1.2 — User management & RBAC
31
31
 
32
32
  ### Phase 1 — Core
33
33
 
34
- - [ ] `[feature]` `[P0]` RBAC middleware — `requireRole()`, role check w `requireAuth()` <!-- files: src/lib/admin/remote/middleware/auth.ts -->
35
- - [ ] `[feature]` `[P0]` Admin users page — list, search, pagination via `authClient.admin.listUsers` <!-- files: src/lib/admin/client/users/ -->
36
- - [ ] `[feature]` `[P0]` Create user — dialog z email/password/name/role via `authClient.admin.createUser` <!-- files: src/lib/admin/client/users/create-user-dialog.svelte -->
37
- - [ ] `[feature]` `[P0]` Edit user — name, email, role via `adminUpdateUser` + `setRole` <!-- files: src/lib/admin/client/users/edit-user-dialog.svelte -->
38
- - [ ] `[feature]` `[P0]` Delete user — confirmation dialog via `removeUser` <!-- files: src/lib/admin/client/users/ -->
39
- - [ ] `[feature]` `[P0]` Route/sidebar gating — ukryj Users nav + chroń `/admin/users` dla non-admin <!-- files: src/lib/admin/components/layout/nav-main.svelte, src/lib/sveltekit/server/handle.ts -->
40
- - [ ] `[feature]` `[P0]` First user bootstrap — pierwszy utworzony user auto-gets role `admin` <!-- files: src/lib/server/auth.ts -->
34
+ - [x] `[feature]` `[P0]` RBAC middleware — `requireRole()`, role check w `requireAuth()` <!-- files: src/lib/admin/remote/middleware/auth.ts -->
35
+ - [x] `[feature]` `[P0]` Admin users page — list, search, pagination via `authClient.admin.listUsers` <!-- files: src/lib/admin/client/users/ -->
36
+ - [x] `[feature]` `[P0]` Create user — dialog z email/password/name/role via `authClient.admin.createUser` <!-- files: src/lib/admin/client/users/create-user-dialog.svelte -->
37
+ - [x] `[feature]` `[P0]` Edit user — name, email, role via `adminUpdateUser` + `setRole` <!-- files: src/lib/admin/client/users/edit-user-dialog.svelte -->
38
+ - [x] `[feature]` `[P0]` Delete user — confirmation dialog via `removeUser` <!-- files: src/lib/admin/client/users/ -->
39
+ - [x] `[feature]` `[P0]` Route/sidebar gating — ukryj Users nav + chroń `/admin/users` dla non-admin <!-- files: src/lib/admin/components/layout/nav-main.svelte, src/lib/sveltekit/server/handle.ts -->
40
+ - [x] `[feature]` `[P0]` First user bootstrap — pierwszy utworzony user auto-gets role `admin` <!-- files: src/lib/server/auth.ts -->
41
41
 
42
42
  ### Phase 2 — Extended
43
43
 
44
- - [ ] `[feature]` `[P1]` Ban/unban UIreason + expiry, `banUser`/`unbanUser` <!-- files: src/lib/admin/client/users/ban-user-dialog.svelte -->
45
- - [ ] `[feature]` `[P1]` Admin session mgmtlist/revoke sesji innych userów <!-- files: src/lib/admin/client/users/user-sessions-sheet.svelte -->
46
- - [ ] `[feature]` `[P1]` Impersonation UI — impersonate/stop bar <!-- files: src/lib/admin/client/users/impersonation-bar.svelte -->
47
- - [ ] `[feature]` `[P2]` Email invitation system — invite link generation (custom, nie w better-auth) <!-- files: src/lib/core/server/auth/invite.ts -->
44
+ - [x] `[feature]` `[P1]` Admin session mgmt list/revoke sesji innych userów <!-- files: src/lib/admin/client/users/user-sessions-sheet.svelte -->
45
+ - [x] `[feature]` `[P2]` Email invitation systeminvite link generation (custom, nie w better-auth) <!-- files: src/lib/admin/remote/invite.ts -->
48
46
 
49
47
  ## 0.2.0 — Plugin system
50
48
 
@@ -57,6 +55,8 @@
57
55
  - [ ] `[feature]` `[P1]` Server-side pagination API (formalize 0.1.0 fix)
58
56
  - [ ] `[feature]` `[P1]` Improved type generation <!-- files: src/lib/core/server/generator/ -->
59
57
  - [ ] `[feature]` `[P1]` Proper filtering API (SQL-level, not JS post-query)
58
+ - [ ] `[feature]` `[breaking]` `[P1]` Simple array field — `type: 'array'` with `of: 'text' | 'number' | ...` for flat lists (tags, categories) <!-- files: src/lib/types/fields.ts, src/lib/admin/components/fields/array-field.svelte, src/lib/core/fields/fieldSchemaToTs.ts -->
59
+ - [ ] `[feature]` `[breaking]` `[P1]` Rename array → blocks — current array becomes `type: 'blocks'`, keeps `of: ObjectField[]` and accordion/DnD UI <!-- files: src/lib/types/fields.ts, src/lib/admin/components/fields/array-field.svelte, src/lib/admin/components/fields/field-renderer.svelte, src/lib/core/server/fields/resolve*.ts -->
60
60
 
61
61
  ## 0.3.0 — Admin experience
62
62
 
@@ -87,6 +87,8 @@
87
87
 
88
88
  ## Backlog
89
89
 
90
+ - [ ] `[feature]` `[P1]` Ban/unban UI — reason + expiry, `banUser`/`unbanUser` <!-- files: src/lib/admin/client/users/ban-user-dialog.svelte -->
91
+ - [ ] `[feature]` `[P1]` Impersonation UI — impersonate/stop bar <!-- files: src/lib/admin/client/users/impersonation-bar.svelte -->
90
92
  - [ ] `[feature]` `[P2]` Alternative richtext editor — Word-like mode, single richtext field instead of blocks
91
93
  - [ ] `[chore]` `[P2]` Caching/performance layer (scope TBD)
92
94
  - [ ] `[feature]` `[P2]` API/CLI for configuration (setup DX for less technical users)