opacacms 0.1.21 → 0.2.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 (137) hide show
  1. package/README.md +792 -50
  2. package/dist/admin/auth-client.d.ts +39 -39
  3. package/dist/admin/index.js +2360 -1392
  4. package/dist/admin/react.d.ts +1 -1
  5. package/dist/admin/react.js +8 -0
  6. package/dist/admin/router.d.ts +1 -0
  7. package/dist/admin/stores/ui.d.ts +10 -0
  8. package/dist/admin/ui/admin-layout.d.ts +4 -4
  9. package/dist/admin/ui/components/DataDetailView.d.ts +1 -1
  10. package/dist/admin/ui/components/DetailSheet.d.ts +19 -0
  11. package/dist/admin/ui/components/PluginSettingsForm.d.ts +11 -0
  12. package/dist/admin/ui/components/fields/BooleanField.d.ts +2 -1
  13. package/dist/admin/ui/components/fields/DateField.d.ts +1 -1
  14. package/dist/admin/ui/components/fields/FieldLabel.d.ts +11 -0
  15. package/dist/admin/ui/components/fields/FileField.d.ts +1 -1
  16. package/dist/admin/ui/components/fields/NumberField.d.ts +1 -1
  17. package/dist/admin/ui/components/fields/RadioField.d.ts +1 -1
  18. package/dist/admin/ui/components/fields/RelationshipField.d.ts +3 -1
  19. package/dist/admin/ui/components/fields/SelectField.d.ts +1 -1
  20. package/dist/admin/ui/components/fields/TextAreaField.d.ts +1 -1
  21. package/dist/admin/ui/components/fields/TextField.d.ts +1 -1
  22. package/dist/admin/ui/components/fields/VirtualField.d.ts +1 -0
  23. package/dist/admin/ui/components/fields/index.d.ts +16 -16
  24. package/dist/admin/ui/components/fields/richtext-editor/index.d.ts +1 -1
  25. package/dist/admin/ui/components/media/AssetManagerModal.d.ts +1 -1
  26. package/dist/admin/ui/components/toast.d.ts +1 -1
  27. package/dist/admin/ui/components/ui/accordion.d.ts +1 -1
  28. package/dist/admin/ui/components/ui/button.d.ts +1 -1
  29. package/dist/admin/ui/components/ui/collapsible.d.ts +1 -1
  30. package/dist/admin/ui/components/ui/dialog.d.ts +1 -1
  31. package/dist/admin/ui/components/ui/group.d.ts +1 -1
  32. package/dist/admin/ui/components/ui/index.d.ts +17 -17
  33. package/dist/admin/ui/components/ui/input.d.ts +1 -1
  34. package/dist/admin/ui/components/ui/label.d.ts +1 -1
  35. package/dist/admin/ui/components/ui/radio-group.d.ts +1 -1
  36. package/dist/admin/ui/components/ui/relationship.d.ts +4 -4
  37. package/dist/admin/ui/components/ui/select.d.ts +1 -1
  38. package/dist/admin/ui/components/ui/sheet.d.ts +1 -1
  39. package/dist/admin/ui/components/ui/tabs.d.ts +1 -1
  40. package/dist/admin/ui/components/versions-sheet.d.ts +11 -0
  41. package/dist/admin/ui/views/media-registry-view.d.ts +1 -1
  42. package/dist/admin/ui/views/settings-view.d.ts +2 -2
  43. package/dist/admin/vue.js +8 -0
  44. package/dist/admin/webcomponent.js +2 -2
  45. package/dist/admin.css +1 -1
  46. package/dist/auth/index.d.ts +101 -41
  47. package/dist/{chunk-0sdceeys.js → chunk-0bq155dy.js} +86 -6
  48. package/dist/{chunk-59sg3pw9.js → chunk-0gtxnxmd.js} +90 -7
  49. package/dist/{chunk-v521d72w.js → chunk-3rdhbedb.js} +1 -1
  50. package/dist/chunk-51z3x7kq.js +20 -0
  51. package/dist/{chunk-7fyepksb.js → chunk-526a3gqx.js} +1 -1
  52. package/dist/{chunk-wmvjvn7b.js → chunk-6qq3ne6b.js} +39 -1
  53. package/dist/{chunk-0am1m47g.js → chunk-6v1fw7q7.js} +5 -5
  54. package/dist/{chunk-t9v845m2.js → chunk-7y1nbmw6.js} +34 -3
  55. package/dist/chunk-8scgdznr.js +44 -0
  56. package/dist/{chunk-mycmsjd9.js → chunk-b3kr8w41.js} +57 -6
  57. package/dist/chunk-bexcv7xe.js +36 -0
  58. package/dist/{chunk-16vgcf3k.js → chunk-byq8g0rd.js} +1 -1
  59. package/dist/{chunk-fqastxq9.js → chunk-d1asgtke.js} +86 -6
  60. package/dist/{chunk-cpw2y3pn.js → chunk-dykn5hr6.js} +7 -7
  61. package/dist/{chunk-61kwqve4.js → chunk-esrg9qj0.js} +90 -9
  62. package/dist/chunk-fj19qccp.js +78 -0
  63. package/dist/{chunk-ekxkvqjm.js → chunk-gmee4mdc.js} +90 -9
  64. package/dist/{chunk-xa7rjsn2.js → chunk-j53pz21t.js} +2 -2
  65. package/dist/{chunk-xrfhhz85.js → chunk-kc4jfnv7.js} +480 -85
  66. package/dist/chunk-mkn49zmy.js +102 -0
  67. package/dist/{chunk-n1xraw7j.js → chunk-qb6ztvw9.js} +1 -1
  68. package/dist/{chunk-2kyhqvhc.js → chunk-qxt9vge8.js} +1 -1
  69. package/dist/chunk-r39em4yj.js +29 -0
  70. package/dist/chunk-rqyjjqgy.js +91 -0
  71. package/dist/chunk-rsf0tpy1.js +8 -0
  72. package/dist/chunk-swtcpvhf.js +2442 -0
  73. package/dist/chunk-t0zg026p.js +71 -0
  74. package/dist/chunk-twpvxfce.js +64 -0
  75. package/dist/{chunk-ybbbqj63.js → chunk-v9z61v3g.js} +15 -0
  76. package/dist/{chunk-jwjk85ze.js → chunk-ywm4t2gm.js} +6 -2
  77. package/dist/cli/commands/plugin-build.d.ts +1 -0
  78. package/dist/cli/commands/plugin-init.d.ts +1 -0
  79. package/dist/cli/commands/plugin-sync.d.ts +1 -0
  80. package/dist/cli/index.js +24 -6
  81. package/dist/config-utils.d.ts +1 -1
  82. package/dist/config.d.ts +21 -4
  83. package/dist/db/better-sqlite.d.ts +1 -1
  84. package/dist/db/better-sqlite.js +5 -5
  85. package/dist/db/bun-sqlite.d.ts +1 -1
  86. package/dist/db/bun-sqlite.js +5 -5
  87. package/dist/db/d1.d.ts +1 -1
  88. package/dist/db/d1.js +5 -5
  89. package/dist/db/index.js +9 -9
  90. package/dist/db/postgres.d.ts +1 -1
  91. package/dist/db/postgres.js +5 -5
  92. package/dist/db/sqlite.d.ts +1 -1
  93. package/dist/db/sqlite.js +5 -5
  94. package/dist/index.js +4 -3
  95. package/dist/plugins/index.d.ts +1 -0
  96. package/dist/plugins/ui-bridge.d.ts +12 -0
  97. package/dist/plugins/utils.d.ts +5 -0
  98. package/dist/runtimes/bun.js +13 -7
  99. package/dist/runtimes/cloudflare-workers.js +5 -5
  100. package/dist/runtimes/next.js +5 -5
  101. package/dist/runtimes/node.js +13 -7
  102. package/dist/schema/collection.d.ts +9 -26
  103. package/dist/schema/fields/base.d.ts +3 -2
  104. package/dist/schema/fields/index.d.ts +12 -0
  105. package/dist/schema/fields/validation.test.d.ts +1 -0
  106. package/dist/schema/global.d.ts +10 -7
  107. package/dist/schema/index.js +22 -6
  108. package/dist/server/admin-router.d.ts +2 -2
  109. package/dist/server/admin.d.ts +2 -1
  110. package/dist/server/collection-router.d.ts +1 -1
  111. package/dist/server/handlers.d.ts +10 -0
  112. package/dist/server/middlewares/admin.d.ts +2 -2
  113. package/dist/server/middlewares/auth.d.ts +1 -1
  114. package/dist/server/middlewares/context.d.ts +2 -0
  115. package/dist/server/middlewares/rate-limit.d.ts +1 -1
  116. package/dist/server/openapi.d.ts +2 -0
  117. package/dist/server/plugins-loader.d.ts +6 -0
  118. package/dist/server/router.d.ts +3 -3
  119. package/dist/server/routers/admin.d.ts +2 -2
  120. package/dist/server/routers/auth.d.ts +1 -1
  121. package/dist/server/routers/collections.d.ts +1 -1
  122. package/dist/server/routers/plugins.d.ts +18 -0
  123. package/dist/server/setup-middlewares.d.ts +2 -2
  124. package/dist/server/system-router.d.ts +1 -1
  125. package/dist/server.js +11 -7
  126. package/dist/storage/adapters/local.d.ts +1 -1
  127. package/dist/storage/adapters/s3.d.ts +1 -1
  128. package/dist/types.d.ts +222 -15
  129. package/dist/utils/logger.d.ts +13 -35
  130. package/dist/validation.d.ts +40 -0
  131. package/dist/validator.d.ts +1 -1
  132. package/package.json +21 -7
  133. package/dist/admin/ui/components/DataDetailSheet.d.ts +0 -13
  134. package/dist/admin/ui/components/ui/relationship-detail-sheet.d.ts +0 -9
  135. package/dist/chunk-62ev8gnc.js +0 -41
  136. package/dist/chunk-j4d50hrx.js +0 -20
  137. package/dist/chunk-nb7ctdg8.js +0 -311
@@ -105,18 +105,18 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
105
105
  hooks: {
106
106
  after: {
107
107
  matcher(context: import("better-auth").HookEndpointContext): boolean;
108
- handler: (inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<import("better-auth/plugins").SessionWithImpersonatedBy[] | undefined>;
108
+ handler: (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<import("better-auth/plugins").SessionWithImpersonatedBy[] | undefined>;
109
109
  }[];
110
110
  };
111
111
  endpoints: {
112
- setRole: import("better-call").StrictEndpoint<"/admin/set-role", {
112
+ setRole: import("better-auth").StrictEndpoint<"/admin/set-role", {
113
113
  method: "POST";
114
114
  body: import("zod").ZodObject<{
115
115
  userId: import("zod").ZodCoercedString<unknown>;
116
116
  role: import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>]>;
117
117
  }, import("better-auth").$strip>;
118
118
  requireHeaders: true;
119
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
119
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
120
120
  session: {
121
121
  user: import("better-auth/plugins").UserWithRole;
122
122
  session: {
@@ -164,12 +164,12 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
164
164
  }, {
165
165
  user: import("better-auth/plugins").UserWithRole;
166
166
  }>;
167
- getUser: import("better-call").StrictEndpoint<"/admin/get-user", {
167
+ getUser: import("better-auth").StrictEndpoint<"/admin/get-user", {
168
168
  method: "GET";
169
169
  query: import("zod").ZodObject<{
170
170
  id: import("zod").ZodString;
171
171
  }, import("better-auth").$strip>;
172
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
172
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
173
173
  session: {
174
174
  user: import("better-auth/plugins").UserWithRole;
175
175
  session: {
@@ -209,7 +209,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
209
209
  };
210
210
  };
211
211
  }, import("better-auth/plugins").UserWithRole>;
212
- createUser: import("better-call").StrictEndpoint<"/admin/create-user", {
212
+ createUser: import("better-auth").StrictEndpoint<"/admin/create-user", {
213
213
  method: "POST";
214
214
  body: import("zod").ZodObject<{
215
215
  email: import("zod").ZodString;
@@ -254,13 +254,13 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
254
254
  }, {
255
255
  user: import("better-auth/plugins").UserWithRole;
256
256
  }>;
257
- adminUpdateUser: import("better-call").StrictEndpoint<"/admin/update-user", {
257
+ adminUpdateUser: import("better-auth").StrictEndpoint<"/admin/update-user", {
258
258
  method: "POST";
259
259
  body: import("zod").ZodObject<{
260
260
  userId: import("zod").ZodCoercedString<unknown>;
261
261
  data: import("zod").ZodRecord<import("zod").ZodAny, import("zod").ZodAny>;
262
262
  }, import("better-auth").$strip>;
263
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
263
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
264
264
  session: {
265
265
  user: import("better-auth/plugins").UserWithRole;
266
266
  session: {
@@ -300,9 +300,9 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
300
300
  };
301
301
  };
302
302
  }, import("better-auth/plugins").UserWithRole>;
303
- listUsers: import("better-call").StrictEndpoint<"/admin/list-users", {
303
+ listUsers: import("better-auth").StrictEndpoint<"/admin/list-users", {
304
304
  method: "GET";
305
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
305
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
306
306
  session: {
307
307
  user: import("better-auth/plugins").UserWithRole;
308
308
  session: {
@@ -392,9 +392,9 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
392
392
  users: import("better-auth/plugins").UserWithRole[];
393
393
  total: number;
394
394
  }>;
395
- listUserSessions: import("better-call").StrictEndpoint<"/admin/list-user-sessions", {
395
+ listUserSessions: import("better-auth").StrictEndpoint<"/admin/list-user-sessions", {
396
396
  method: "POST";
397
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
397
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
398
398
  session: {
399
399
  user: import("better-auth/plugins").UserWithRole;
400
400
  session: {
@@ -442,12 +442,12 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
442
442
  }, {
443
443
  sessions: import("better-auth/plugins").SessionWithImpersonatedBy[];
444
444
  }>;
445
- unbanUser: import("better-call").StrictEndpoint<"/admin/unban-user", {
445
+ unbanUser: import("better-auth").StrictEndpoint<"/admin/unban-user", {
446
446
  method: "POST";
447
447
  body: import("zod").ZodObject<{
448
448
  userId: import("zod").ZodCoercedString<unknown>;
449
449
  }, import("better-auth").$strip>;
450
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
450
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
451
451
  session: {
452
452
  user: import("better-auth/plugins").UserWithRole;
453
453
  session: {
@@ -489,14 +489,14 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
489
489
  }, {
490
490
  user: import("better-auth/plugins").UserWithRole;
491
491
  }>;
492
- banUser: import("better-call").StrictEndpoint<"/admin/ban-user", {
492
+ banUser: import("better-auth").StrictEndpoint<"/admin/ban-user", {
493
493
  method: "POST";
494
494
  body: import("zod").ZodObject<{
495
495
  userId: import("zod").ZodCoercedString<unknown>;
496
496
  banReason: import("zod").ZodOptional<import("zod").ZodString>;
497
497
  banExpiresIn: import("zod").ZodOptional<import("zod").ZodNumber>;
498
498
  }, import("better-auth").$strip>;
499
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
499
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
500
500
  session: {
501
501
  user: import("better-auth/plugins").UserWithRole;
502
502
  session: {
@@ -538,12 +538,12 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
538
538
  }, {
539
539
  user: import("better-auth/plugins").UserWithRole;
540
540
  }>;
541
- impersonateUser: import("better-call").StrictEndpoint<"/admin/impersonate-user", {
541
+ impersonateUser: import("better-auth").StrictEndpoint<"/admin/impersonate-user", {
542
542
  method: "POST";
543
543
  body: import("zod").ZodObject<{
544
544
  userId: import("zod").ZodCoercedString<unknown>;
545
545
  }, import("better-auth").$strip>;
546
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
546
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
547
547
  session: {
548
548
  user: import("better-auth/plugins").UserWithRole;
549
549
  session: {
@@ -598,7 +598,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
598
598
  };
599
599
  user: import("better-auth/plugins").UserWithRole;
600
600
  }>;
601
- stopImpersonating: import("better-call").StrictEndpoint<"/admin/stop-impersonating", {
601
+ stopImpersonating: import("better-auth").StrictEndpoint<"/admin/stop-impersonating", {
602
602
  method: "POST";
603
603
  requireHeaders: true;
604
604
  }, {
@@ -622,12 +622,12 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
622
622
  image?: string | null | undefined;
623
623
  } & Record<string, any>;
624
624
  }>;
625
- revokeUserSession: import("better-call").StrictEndpoint<"/admin/revoke-user-session", {
625
+ revokeUserSession: import("better-auth").StrictEndpoint<"/admin/revoke-user-session", {
626
626
  method: "POST";
627
627
  body: import("zod").ZodObject<{
628
628
  sessionToken: import("zod").ZodString;
629
629
  }, import("better-auth").$strip>;
630
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
630
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
631
631
  session: {
632
632
  user: import("better-auth/plugins").UserWithRole;
633
633
  session: {
@@ -669,12 +669,12 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
669
669
  }, {
670
670
  success: boolean;
671
671
  }>;
672
- revokeUserSessions: import("better-call").StrictEndpoint<"/admin/revoke-user-sessions", {
672
+ revokeUserSessions: import("better-auth").StrictEndpoint<"/admin/revoke-user-sessions", {
673
673
  method: "POST";
674
674
  body: import("zod").ZodObject<{
675
675
  userId: import("zod").ZodCoercedString<unknown>;
676
676
  }, import("better-auth").$strip>;
677
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
677
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
678
678
  session: {
679
679
  user: import("better-auth/plugins").UserWithRole;
680
680
  session: {
@@ -716,12 +716,12 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
716
716
  }, {
717
717
  success: boolean;
718
718
  }>;
719
- removeUser: import("better-call").StrictEndpoint<"/admin/remove-user", {
719
+ removeUser: import("better-auth").StrictEndpoint<"/admin/remove-user", {
720
720
  method: "POST";
721
721
  body: import("zod").ZodObject<{
722
722
  userId: import("zod").ZodCoercedString<unknown>;
723
723
  }, import("better-auth").$strip>;
724
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
724
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
725
725
  session: {
726
726
  user: import("better-auth/plugins").UserWithRole;
727
727
  session: {
@@ -763,13 +763,13 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
763
763
  }, {
764
764
  success: boolean;
765
765
  }>;
766
- setUserPassword: import("better-call").StrictEndpoint<"/admin/set-user-password", {
766
+ setUserPassword: import("better-auth").StrictEndpoint<"/admin/set-user-password", {
767
767
  method: "POST";
768
768
  body: import("zod").ZodObject<{
769
769
  newPassword: import("zod").ZodString;
770
770
  userId: import("zod").ZodCoercedString<unknown>;
771
771
  }, import("better-auth").$strip>;
772
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
772
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
773
773
  session: {
774
774
  user: import("better-auth/plugins").UserWithRole;
775
775
  session: {
@@ -811,7 +811,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
811
811
  }, {
812
812
  status: boolean;
813
813
  }>;
814
- userHasPermission: import("better-call").StrictEndpoint<"/admin/has-permission", {
814
+ userHasPermission: import("better-auth").StrictEndpoint<"/admin/has-permission", {
815
815
  method: "POST";
816
816
  body: import("zod").ZodIntersection<import("zod").ZodObject<{
817
817
  userId: import("zod").ZodOptional<import("zod").ZodCoercedString<unknown>>;
@@ -951,6 +951,60 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
951
951
  };
952
952
  roles: Record<string, any>;
953
953
  }>;
954
+ } | {
955
+ id: "open-api";
956
+ endpoints: {
957
+ generateOpenAPISchema: import("better-auth").StrictEndpoint<"/open-api/generate-schema", {
958
+ method: "GET";
959
+ }, {
960
+ openapi: string;
961
+ info: {
962
+ title: string;
963
+ description: string;
964
+ version: string;
965
+ };
966
+ components: {
967
+ securitySchemes: {
968
+ apiKeyCookie: {
969
+ type: string;
970
+ in: string;
971
+ name: string;
972
+ description: string;
973
+ };
974
+ bearerAuth: {
975
+ type: string;
976
+ scheme: string;
977
+ description: string;
978
+ };
979
+ };
980
+ schemas: {
981
+ [x: string]: import("better-auth/plugins").OpenAPIModelSchema;
982
+ };
983
+ };
984
+ security: {
985
+ apiKeyCookie: never[];
986
+ bearerAuth: never[];
987
+ }[];
988
+ servers: {
989
+ url: string;
990
+ }[];
991
+ tags: {
992
+ name: string;
993
+ description: string;
994
+ }[];
995
+ paths: Record<string, import("better-auth/plugins").Path>;
996
+ }>;
997
+ openAPIReference: import("better-auth").StrictEndpoint<import("better-auth").LiteralString | "/reference", {
998
+ method: "GET";
999
+ metadata: {
1000
+ readonly scope: "server";
1001
+ };
1002
+ }, Response>;
1003
+ };
1004
+ options: NoInfer<{
1005
+ disableDefaultReference: true;
1006
+ path: "/open-api";
1007
+ }>;
954
1008
  } | {
955
1009
  id: "api-key";
956
1010
  $ERROR_CODES: {
@@ -989,7 +1043,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
989
1043
  hooks: {
990
1044
  before: {
991
1045
  matcher: (ctx: import("better-auth").HookEndpointContext) => boolean;
992
- handler: (inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
1046
+ handler: (inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
993
1047
  user: {
994
1048
  id: string;
995
1049
  createdAt: Date;
@@ -1010,7 +1064,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1010
1064
  expiresAt: Date;
1011
1065
  };
1012
1066
  } | {
1013
- context: import("better-call").MiddlewareContext<import("better-call").MiddlewareOptions, {
1067
+ context: import("better-auth").MiddlewareContext<import("better-auth").MiddlewareOptions, {
1014
1068
  returned?: unknown | undefined;
1015
1069
  responseHeaders?: Headers | undefined;
1016
1070
  } & import("better-auth").PluginContext<import("better-auth").BetterAuthOptions> & import("better-auth").InfoContext & {
@@ -1098,7 +1152,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1098
1152
  } & Omit<import("better-auth").BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
1099
1153
  adapter: import("better-auth").DBAdapter<import("better-auth").BetterAuthOptions>;
1100
1154
  internalAdapter: import("better-auth").InternalAdapter<import("better-auth").BetterAuthOptions>;
1101
- createAuthCookie: (cookieName: string, overrideAttributes?: Partial<import("better-call").CookieOptions> | undefined) => import("better-auth").BetterAuthCookie;
1155
+ createAuthCookie: (cookieName: string, overrideAttributes?: Partial<import("better-auth").CookieOptions> | undefined) => import("better-auth").BetterAuthCookie;
1102
1156
  secret: string;
1103
1157
  secretConfig: string | import("better-auth").SecretConfig;
1104
1158
  sessionConfig: {
@@ -1143,7 +1197,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1143
1197
  }[];
1144
1198
  };
1145
1199
  endpoints: {
1146
- createApiKey: import("better-call").StrictEndpoint<"/api-key/create", {
1200
+ createApiKey: import("better-auth").StrictEndpoint<"/api-key/create", {
1147
1201
  method: "POST";
1148
1202
  body: import("zod").ZodObject<{
1149
1203
  configId: import("zod").ZodOptional<import("zod").ZodString>;
@@ -1314,7 +1368,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1314
1368
  createdAt: Date;
1315
1369
  updatedAt: Date;
1316
1370
  }>;
1317
- verifyApiKey: import("better-call").StrictEndpoint<string, {
1371
+ verifyApiKey: import("better-auth").StrictEndpoint<string, {
1318
1372
  method: "POST";
1319
1373
  body: import("zod").ZodObject<{
1320
1374
  configId: import("zod").ZodOptional<import("zod").ZodString>;
@@ -1348,13 +1402,13 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1348
1402
  error: null;
1349
1403
  key: Omit<import("@better-auth/api-key").ApiKey, "key"> | null;
1350
1404
  }>;
1351
- getApiKey: import("better-call").StrictEndpoint<"/api-key/get", {
1405
+ getApiKey: import("better-auth").StrictEndpoint<"/api-key/get", {
1352
1406
  method: "GET";
1353
1407
  query: import("zod").ZodObject<{
1354
1408
  configId: import("zod").ZodOptional<import("zod").ZodString>;
1355
1409
  id: import("zod").ZodString;
1356
1410
  }, import("better-auth").$strip>;
1357
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
1411
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
1358
1412
  session: {
1359
1413
  session: Record<string, any> & {
1360
1414
  id: string;
@@ -1522,7 +1576,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1522
1576
  createdAt: Date;
1523
1577
  updatedAt: Date;
1524
1578
  }>;
1525
- updateApiKey: import("better-call").StrictEndpoint<"/api-key/update", {
1579
+ updateApiKey: import("better-auth").StrictEndpoint<"/api-key/update", {
1526
1580
  method: "POST";
1527
1581
  body: import("zod").ZodObject<{
1528
1582
  configId: import("zod").ZodOptional<import("zod").ZodString>;
@@ -1685,13 +1739,13 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1685
1739
  createdAt: Date;
1686
1740
  updatedAt: Date;
1687
1741
  }>;
1688
- deleteApiKey: import("better-call").StrictEndpoint<"/api-key/delete", {
1742
+ deleteApiKey: import("better-auth").StrictEndpoint<"/api-key/delete", {
1689
1743
  method: "POST";
1690
1744
  body: import("zod").ZodObject<{
1691
1745
  configId: import("zod").ZodOptional<import("zod").ZodString>;
1692
1746
  keyId: import("zod").ZodString;
1693
1747
  }, import("better-auth").$strip>;
1694
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
1748
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
1695
1749
  session: {
1696
1750
  session: Record<string, any> & {
1697
1751
  id: string;
@@ -1757,9 +1811,9 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1757
1811
  }, {
1758
1812
  success: boolean;
1759
1813
  }>;
1760
- listApiKeys: import("better-call").StrictEndpoint<"/api-key/list", {
1814
+ listApiKeys: import("better-auth").StrictEndpoint<"/api-key/list", {
1761
1815
  method: "GET";
1762
- use: ((inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
1816
+ use: ((inputContext: import("better-auth").MiddlewareInputContext<import("better-auth").MiddlewareOptions>) => Promise<{
1763
1817
  session: {
1764
1818
  session: Record<string, any> & {
1765
1819
  id: string;
@@ -1966,7 +2020,7 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
1966
2020
  limit: number | undefined;
1967
2021
  offset: number | undefined;
1968
2022
  }>;
1969
- deleteAllExpiredApiKeys: import("better-call").StrictEndpoint<string, {
2023
+ deleteAllExpiredApiKeys: import("better-auth").StrictEndpoint<string, {
1970
2024
  method: "POST";
1971
2025
  }, {
1972
2026
  success: boolean;
@@ -2103,5 +2157,11 @@ export declare function createAuth(config: OpacaConfig): Promise<import("better-
2103
2157
  rateLimit: Required<NonNullable<import("@better-auth/api-key").ApiKeyConfigurationOptions["rateLimit"]>>;
2104
2158
  })[];
2105
2159
  })[];
2160
+ logger: {
2161
+ disabled: boolean | undefined;
2162
+ disableColors: boolean | undefined;
2163
+ level: "error" | "debug" | "info" | "warn" | undefined;
2164
+ log: (level: "error" | "debug" | "info" | "warn", message: string, ...args: any[]) => void;
2165
+ };
2106
2166
  }>>;
2107
2167
  export type Auth = Awaited<ReturnType<typeof createAuth>>;
@@ -3,18 +3,18 @@ import {
3
3
  flattenPayload,
4
4
  pushSchema,
5
5
  unflattenRow
6
- } from "./chunk-cpw2y3pn.js";
6
+ } from "./chunk-dykn5hr6.js";
7
7
  import {
8
8
  BaseDatabaseAdapter
9
9
  } from "./chunk-s8mqwnm1.js";
10
- import {
11
- logger
12
- } from "./chunk-62ev8gnc.js";
13
10
  import {
14
11
  flattenFields,
15
12
  getRelationalFields,
16
13
  toSnakeCase
17
- } from "./chunk-2kyhqvhc.js";
14
+ } from "./chunk-qxt9vge8.js";
15
+ import {
16
+ logger
17
+ } from "./chunk-t0zg026p.js";
18
18
 
19
19
  // src/db/sqlite.ts
20
20
  import fs from "node:fs/promises";
@@ -265,7 +265,87 @@ class SQLiteAdapter extends BaseDatabaseAdapter {
265
265
  qb = qb.orderBy("created_at", "desc");
266
266
  }
267
267
  const rows = await qb.execute();
268
- const docs = await Promise.all(rows.map((row) => this.findOne(collection, { id: row.id })));
268
+ if (rows.length === 0) {
269
+ const totalPages2 = Math.ceil(total / limit);
270
+ return {
271
+ docs: [],
272
+ totalDocs: total,
273
+ limit,
274
+ totalPages: totalPages2,
275
+ page,
276
+ pagingCounter: offset + 1,
277
+ hasNextPage: page * limit < total,
278
+ hasPrevPage: page > 1,
279
+ prevPage: page > 1 ? page - 1 : null,
280
+ nextPage: page < totalPages2 ? page + 1 : null
281
+ };
282
+ }
283
+ const rowIds = rows.map((r) => r.id);
284
+ const docs = rows.map((r) => unflattenRow(r));
285
+ const colDef = this._collections.find((c) => c.slug === collection);
286
+ if (colDef) {
287
+ const relationalFields = getRelationalFields(colDef.fields);
288
+ for (const field of relationalFields) {
289
+ if (!field.name)
290
+ continue;
291
+ const snakeName = toSnakeCase(field.name);
292
+ if (field.type === "relationship" && "hasMany" in field && field.hasMany) {
293
+ const joinTableName = `${toSnakeCase(collection)}_${snakeName}_relations`.toLowerCase();
294
+ try {
295
+ const allRelations = await this._db.selectFrom(joinTableName).selectAll().where("source_id", "in", rowIds).orderBy("order", "asc").execute();
296
+ const relationsBySource = allRelations.reduce((acc, r) => {
297
+ if (!acc[r.source_id])
298
+ acc[r.source_id] = [];
299
+ acc[r.source_id].push(r.target_id);
300
+ return acc;
301
+ }, {});
302
+ const parts = field.name.split("__");
303
+ for (let docIdx = 0;docIdx < docs.length; docIdx++) {
304
+ const rowId = rowIds[docIdx];
305
+ let current = docs[docIdx];
306
+ for (let i = 0;i < parts.length - 1; i++) {
307
+ if (!current[parts[i]])
308
+ current[parts[i]] = {};
309
+ current = current[parts[i]];
310
+ }
311
+ current[parts[parts.length - 1]] = relationsBySource[rowId] || [];
312
+ }
313
+ } catch (e) {}
314
+ } else if (field.type === "blocks" && field.blocks) {
315
+ const blocksBySource = {};
316
+ for (const b of field.blocks) {
317
+ const blockTableName = `${collection}_${snakeName}_${toSnakeCase(b.slug)}`.toLowerCase();
318
+ try {
319
+ const allBlocks = await this._db.selectFrom(blockTableName).selectAll().where("_parent_id", "in", rowIds).execute();
320
+ for (const blk of allBlocks) {
321
+ const uf = unflattenRow(blk);
322
+ uf.blockType = blk.block_type;
323
+ if (!blocksBySource[blk._parent_id])
324
+ blocksBySource[blk._parent_id] = [];
325
+ blocksBySource[blk._parent_id].push(uf);
326
+ }
327
+ } catch (e) {}
328
+ }
329
+ const parts = field.name.split("__");
330
+ for (let docIdx = 0;docIdx < docs.length; docIdx++) {
331
+ const rowId = rowIds[docIdx];
332
+ const blockData = blocksBySource[rowId] || [];
333
+ blockData.sort((a, b) => a._order - b._order);
334
+ blockData.forEach((b) => {
335
+ delete b._order;
336
+ delete b._parentId;
337
+ });
338
+ let current = docs[docIdx];
339
+ for (let i = 0;i < parts.length - 1; i++) {
340
+ if (!current[parts[i]])
341
+ current[parts[i]] = {};
342
+ current = current[parts[i]];
343
+ }
344
+ current[parts[parts.length - 1]] = blockData;
345
+ }
346
+ }
347
+ }
348
+ }
269
349
  const totalPages = Math.ceil(total / limit);
270
350
  return {
271
351
  docs: docs.filter(Boolean),
@@ -3,18 +3,18 @@ import {
3
3
  flattenPayload,
4
4
  pushSchema,
5
5
  unflattenRow
6
- } from "./chunk-cpw2y3pn.js";
6
+ } from "./chunk-dykn5hr6.js";
7
7
  import {
8
8
  BaseDatabaseAdapter
9
9
  } from "./chunk-s8mqwnm1.js";
10
- import {
11
- logger
12
- } from "./chunk-62ev8gnc.js";
13
10
  import {
14
11
  flattenFields,
15
12
  getRelationalFields,
16
13
  toSnakeCase
17
- } from "./chunk-2kyhqvhc.js";
14
+ } from "./chunk-qxt9vge8.js";
15
+ import {
16
+ logger
17
+ } from "./chunk-t0zg026p.js";
18
18
 
19
19
  // src/db/bun-sqlite.ts
20
20
  import { Database } from "bun:sqlite";
@@ -82,7 +82,10 @@ class BunSQLiteAdapter extends BaseDatabaseAdapter {
82
82
  if (value instanceof Date) {
83
83
  result[colName] = value.toISOString();
84
84
  } else if (typeof value === "string") {
85
- result[colName] = new Date(value).toISOString();
85
+ const d = new Date(value);
86
+ if (!isNaN(d.getTime())) {
87
+ result[colName] = d.toISOString();
88
+ }
86
89
  }
87
90
  break;
88
91
  case "richtext":
@@ -266,7 +269,87 @@ class BunSQLiteAdapter extends BaseDatabaseAdapter {
266
269
  qb = qb.orderBy("created_at", "desc");
267
270
  }
268
271
  const rows = await qb.execute();
269
- const docs = await Promise.all(rows.map((row) => this.findOne(collection, { id: row.id })));
272
+ if (rows.length === 0) {
273
+ const totalPages2 = Math.ceil(total / limit);
274
+ return {
275
+ docs: [],
276
+ totalDocs: total,
277
+ limit,
278
+ totalPages: totalPages2,
279
+ page,
280
+ pagingCounter: offset + 1,
281
+ hasNextPage: page * limit < total,
282
+ hasPrevPage: page > 1,
283
+ prevPage: page > 1 ? page - 1 : null,
284
+ nextPage: page < totalPages2 ? page + 1 : null
285
+ };
286
+ }
287
+ const rowIds = rows.map((r) => r.id);
288
+ const docs = rows.map((r) => unflattenRow(r));
289
+ const colDef = this._collections.find((c) => c.slug === collection);
290
+ if (colDef) {
291
+ const relationalFields = getRelationalFields(colDef.fields);
292
+ for (const field of relationalFields) {
293
+ if (!field.name)
294
+ continue;
295
+ const snakeName = toSnakeCase(field.name);
296
+ if (field.type === "relationship" && "hasMany" in field && field.hasMany) {
297
+ const joinTableName = `${toSnakeCase(collection)}_${snakeName}_relations`.toLowerCase();
298
+ try {
299
+ const allRelations = await this._db.selectFrom(joinTableName).selectAll().where("source_id", "in", rowIds).orderBy("order", "asc").execute();
300
+ const relationsBySource = allRelations.reduce((acc, r) => {
301
+ if (!acc[r.source_id])
302
+ acc[r.source_id] = [];
303
+ acc[r.source_id].push(r.target_id);
304
+ return acc;
305
+ }, {});
306
+ const parts = field.name.split("__");
307
+ for (let docIdx = 0;docIdx < docs.length; docIdx++) {
308
+ const rowId = rowIds[docIdx];
309
+ let current = docs[docIdx];
310
+ for (let i = 0;i < parts.length - 1; i++) {
311
+ if (!current[parts[i]])
312
+ current[parts[i]] = {};
313
+ current = current[parts[i]];
314
+ }
315
+ current[parts[parts.length - 1]] = relationsBySource[rowId] || [];
316
+ }
317
+ } catch (e) {}
318
+ } else if (field.type === "blocks" && field.blocks) {
319
+ const blocksBySource = {};
320
+ for (const b of field.blocks) {
321
+ const blockTableName = `${collection}_${snakeName}_${toSnakeCase(b.slug)}`.toLowerCase();
322
+ try {
323
+ const allBlocks = await this._db.selectFrom(blockTableName).selectAll().where("_parent_id", "in", rowIds).execute();
324
+ for (const blk of allBlocks) {
325
+ const uf = unflattenRow(blk);
326
+ uf.blockType = blk.block_type;
327
+ if (!blocksBySource[blk._parent_id])
328
+ blocksBySource[blk._parent_id] = [];
329
+ blocksBySource[blk._parent_id].push(uf);
330
+ }
331
+ } catch (e) {}
332
+ }
333
+ const parts = field.name.split("__");
334
+ for (let docIdx = 0;docIdx < docs.length; docIdx++) {
335
+ const rowId = rowIds[docIdx];
336
+ const blockData = blocksBySource[rowId] || [];
337
+ blockData.sort((a, b) => a._order - b._order);
338
+ blockData.forEach((b) => {
339
+ delete b._order;
340
+ delete b._parentId;
341
+ });
342
+ let current = docs[docIdx];
343
+ for (let i = 0;i < parts.length - 1; i++) {
344
+ if (!current[parts[i]])
345
+ current[parts[i]] = {};
346
+ current = current[parts[i]];
347
+ }
348
+ current[parts[parts.length - 1]] = blockData;
349
+ }
350
+ }
351
+ }
352
+ }
270
353
  const totalPages = Math.ceil(total / limit);
271
354
  return {
272
355
  docs: docs.filter(Boolean),
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getSystemCollections,
3
3
  init_system_schema
4
- } from "./chunk-ybbbqj63.js";
4
+ } from "./chunk-v9z61v3g.js";
5
5
  import"./chunk-8sqjbsgt.js";
6
6
  init_system_schema();
7
7
 
@@ -0,0 +1,20 @@
1
+ // src/server/plugins-loader.ts
2
+ async function loadPluginSettings(config) {
3
+ if (!config.db)
4
+ return {};
5
+ try {
6
+ const result = await config.db.find("_opaca_plugin_settings");
7
+ if (!result || !result.docs)
8
+ return {};
9
+ return result.docs.reduce((acc, curr) => {
10
+ if (curr.pluginName && curr.config) {
11
+ acc[curr.pluginName] = curr.config;
12
+ }
13
+ return acc;
14
+ }, {});
15
+ } catch (e) {
16
+ return {};
17
+ }
18
+ }
19
+
20
+ export { loadPluginSettings };