studiocms 0.3.0 → 0.4.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 (263) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/dist/cli/add/index.d.ts +2 -2
  3. package/dist/cli/add/npm-utils.d.ts +6 -6
  4. package/dist/cli/add/tryToInstallPlugins.d.ts +1 -1
  5. package/dist/cli/add/updateStudioCMSConfig.d.ts +1 -1
  6. package/dist/cli/add/validatePlugins.d.ts +1 -1
  7. package/dist/cli/crypto/genJWT/index.d.ts +1 -1
  8. package/dist/cli/crypto/index.d.ts +1 -1
  9. package/dist/cli/init/steps/env.js +12 -2
  10. package/dist/cli/init/steps/next.d.ts +1 -1
  11. package/dist/cli/migrator/index.d.ts +1 -1
  12. package/dist/cli/users/index.d.ts +1 -1
  13. package/dist/cli/users/steps/createUsers.js +3 -3
  14. package/dist/cli/users/steps/next.d.ts +1 -1
  15. package/dist/cli/utils/context.d.ts +1 -1
  16. package/dist/cli/utils/getCliDbClient.d.ts +1 -1
  17. package/dist/cli/utils/intro.d.ts +1 -1
  18. package/dist/cli/utils/loadConfig.d.ts +54 -49
  19. package/dist/cli/utils/loadConfig.js +5 -8
  20. package/dist/cli/utils/user-utils.d.ts +1 -1
  21. package/dist/client/apiClient.d.ts +4923 -0
  22. package/dist/client/apiClient.js +72 -0
  23. package/dist/config.d.ts +1734 -1
  24. package/dist/consts.d.ts +5 -5
  25. package/dist/consts.js +3 -2
  26. package/dist/db/plugins.d.ts +1 -1
  27. package/dist/db/plugins.js +5 -8
  28. package/dist/handlers/frontend/routes.d.ts +4 -18
  29. package/dist/handlers/frontend/routes.js +13 -152
  30. package/dist/handlers/frontend/types.d.ts +1 -1
  31. package/dist/handlers/frontend/utils.js +0 -18
  32. package/dist/handlers/pluginHandler.d.ts +34 -257
  33. package/dist/handlers/pluginHandler.js +92 -46
  34. package/dist/handlers/routeHandler.js +32 -11
  35. package/dist/handlers/setupDbStudio.d.ts +1 -1
  36. package/dist/handlers/storage-manager/core/effectify-astro-context.d.ts +25 -0
  37. package/dist/handlers/storage-manager/core/effectify-astro-context.js +78 -0
  38. package/dist/handlers/storage-manager/no-op.d.ts +2 -2
  39. package/dist/handlers/storage-manager/no-op.js +2 -3
  40. package/dist/index.d.ts +0 -1
  41. package/dist/index.js +9 -5
  42. package/dist/integrations/robots/index.d.ts +2 -2
  43. package/dist/integrations/robots/index.js +1 -3
  44. package/dist/integrations/robots/schema.d.ts +102 -273
  45. package/dist/integrations/robots/schema.js +220 -209
  46. package/dist/plugins/analytics/assets/schemas.d.ts +14 -9
  47. package/dist/plugins/analytics/assets/schemas.js +25 -17
  48. package/dist/plugins/analytics/db-client.d.ts +1 -1
  49. package/dist/plugins/analytics/index.d.ts +823 -3
  50. package/dist/plugins/analytics/index.js +4 -5
  51. package/dist/plugins/analytics/schemas.d.ts +54 -62
  52. package/dist/plugins/analytics/schemas.js +64 -13
  53. package/dist/plugins/analytics/table.d.ts +1 -1
  54. package/dist/plugins.d.ts +0 -1
  55. package/dist/schemas/config/api.d.ts +17 -0
  56. package/dist/schemas/config/api.js +14 -0
  57. package/dist/schemas/config/auth.d.ts +55 -59
  58. package/dist/schemas/config/auth.js +34 -11
  59. package/dist/schemas/config/dashboard.d.ts +43 -79
  60. package/dist/schemas/config/dashboard.js +43 -12
  61. package/dist/schemas/config/db.d.ts +15 -17
  62. package/dist/schemas/config/db.js +13 -5
  63. package/dist/schemas/config/developer.d.ts +33 -45
  64. package/dist/schemas/config/developer.js +22 -5
  65. package/dist/schemas/config/index.d.ts +398 -521
  66. package/dist/schemas/config/index.js +115 -57
  67. package/dist/schemas/config/sdk.d.ts +50 -196
  68. package/dist/schemas/config/sdk.js +61 -73
  69. package/dist/schemas/custom.d.ts +40 -0
  70. package/dist/schemas/custom.js +41 -0
  71. package/dist/schemas/external-schemas.d.ts +171 -0
  72. package/dist/schemas/external-schemas.js +179 -0
  73. package/dist/schemas/index.d.ts +2 -0
  74. package/dist/schemas/index.js +2 -0
  75. package/dist/schemas/plugins/i18n.d.ts +59 -39
  76. package/dist/schemas/plugins/i18n.js +42 -5
  77. package/dist/schemas/plugins/index.d.ts +7126 -10296
  78. package/dist/schemas/plugins/index.js +260 -276
  79. package/dist/schemas/plugins/shared.d.ts +1293 -3718
  80. package/dist/schemas/plugins/shared.js +320 -329
  81. package/dist/test-utils.d.ts +15 -4
  82. package/dist/test-utils.js +27 -11
  83. package/dist/toolbar/db-viewer/db-shared-types.d.ts +6 -6
  84. package/dist/toolbar/db-viewer/viewer.js +20 -21
  85. package/dist/types.d.ts +30 -0
  86. package/dist/utils/effects/smtp.d.ts +1 -1
  87. package/dist/utils/lang-helper.d.ts +10 -2
  88. package/dist/virtual.d.ts +23 -0
  89. package/dist/virtuals/auth/core.d.ts +5 -5
  90. package/dist/virtuals/auth/verify-email.d.ts +6 -6
  91. package/dist/virtuals/components/Generator.astro +2 -2
  92. package/dist/virtuals/components/Renderer.astro +9 -1
  93. package/dist/virtuals/components/renderFn.d.ts +3 -1
  94. package/dist/virtuals/components/renderFn.js +18 -0
  95. package/dist/virtuals/lib/headDefaults.d.ts +4 -2
  96. package/dist/virtuals/lib/headDefaults.js +0 -2
  97. package/dist/virtuals/lib/routeMap.d.ts +0 -12
  98. package/dist/virtuals/lib/routeMap.js +2 -14
  99. package/dist/virtuals/mailer/index.d.ts +3 -3
  100. package/dist/virtuals/notifier/index.d.ts +5 -5
  101. package/dist/virtuals/plugins/dashboard-pages.d.ts +2 -64
  102. package/dist/virtuals/scripts/StorageFileBrowser.d.ts +1 -172
  103. package/dist/virtuals/scripts/StorageFileBrowser.js +216 -119
  104. package/dist/virtuals/template-engine/index.d.ts +4 -4
  105. package/frontend/components/dashboard/configuration/ConfigForm.astro +218 -110
  106. package/frontend/components/dashboard/content-mgmt/ContentSearch.astro +21 -22
  107. package/frontend/components/dashboard/content-mgmt/CreateFolder.astro +66 -54
  108. package/frontend/components/dashboard/content-mgmt/CreatePage.astro +58 -104
  109. package/frontend/components/dashboard/content-mgmt/EditFolder.astro +65 -67
  110. package/frontend/components/dashboard/content-mgmt/EditPage.astro +86 -134
  111. package/frontend/components/dashboard/content-mgmt/InnerSidebarElement.astro +0 -1
  112. package/frontend/components/dashboard/content-mgmt/PageHeader.astro +33 -52
  113. package/frontend/components/dashboard/content-mgmt/PageTypeHandler.astro +2 -2
  114. package/frontend/components/dashboard/profile/APITokens.astro +219 -158
  115. package/frontend/components/dashboard/profile/BasicInfo.astro +165 -106
  116. package/frontend/components/dashboard/profile/Notifications.astro +27 -18
  117. package/frontend/components/dashboard/profile/UpdatePassword.astro +134 -94
  118. package/frontend/components/dashboard/sidebar/VersionCheck.astro +31 -16
  119. package/frontend/components/dashboard/sidebar/VersionCheckChangelog.astro +18 -11
  120. package/frontend/components/dashboard/sidebar-modals/VersionModal.astro +2 -2
  121. package/frontend/components/dashboard/smtp-config/TemplateEditor.astro +14 -14
  122. package/frontend/components/dashboard/taxonomy/InnerSidebarElement.astro +0 -1
  123. package/frontend/components/dashboard/taxonomy/MetaContainer.astro +0 -2
  124. package/frontend/components/dashboard/taxonomy/PageHeader.astro +16 -24
  125. package/frontend/components/dashboard/taxonomy/TaxonomySearch.astro +23 -27
  126. package/frontend/components/dashboard/user-mgmt/InnerSidebarElement.astro +111 -104
  127. package/frontend/components/dashboard/user-mgmt/UserListItem.astro +9 -22
  128. package/frontend/components/dashboard/user-mgmt/UserListItems.astro +18 -0
  129. package/frontend/components/first-time-setup/snippets/{opt2-studiocms.config.diff → studiocms.config.diff} +1 -0
  130. package/frontend/components/shared/Code.astro +1 -4
  131. package/frontend/components/shared/DynamicSettingsRenderer.astro +1 -1
  132. package/frontend/components/shared/SSRUser.astro +2 -4
  133. package/frontend/components/shared/foldertree/FolderTreeNode.astro +0 -6
  134. package/frontend/components/shared/storage-manager/StorageCopyOutput.astro +0 -1
  135. package/frontend/components/shared/taxonomy/TaxonomyTreeNode.astro +0 -6
  136. package/frontend/layouts/DashboardLayout.astro +0 -9
  137. package/frontend/layouts/TaxonomyLayout.astro +0 -1
  138. package/frontend/middleware/index.ts +102 -61
  139. package/frontend/pages/404.astro +0 -1
  140. package/frontend/pages/[dashboard]/[...pluginPage].astro +10 -1
  141. package/frontend/pages/[dashboard]/configuration.astro +10 -1
  142. package/frontend/pages/[dashboard]/content-management/createfolder.astro +10 -1
  143. package/frontend/pages/[dashboard]/content-management/createpage.astro +10 -1
  144. package/frontend/pages/[dashboard]/content-management/diff.astro +39 -14
  145. package/frontend/pages/[dashboard]/content-management/editfolder.astro +10 -1
  146. package/frontend/pages/[dashboard]/content-management/editpage.astro +10 -1
  147. package/frontend/pages/[dashboard]/content-management/index.astro +10 -1
  148. package/frontend/pages/[dashboard]/index.astro +10 -1
  149. package/frontend/pages/[dashboard]/login.astro +86 -25
  150. package/frontend/pages/[dashboard]/password-reset.astro +22 -16
  151. package/frontend/pages/[dashboard]/plugins/[plugin].astro +10 -1
  152. package/frontend/pages/[dashboard]/profile.astro +10 -1
  153. package/frontend/pages/[dashboard]/signup.astro +153 -52
  154. package/frontend/pages/[dashboard]/smtp-configuration.astro +77 -75
  155. package/frontend/pages/[dashboard]/system-management.astro +10 -1
  156. package/frontend/pages/[dashboard]/taxonomy/categories.astro +30 -41
  157. package/frontend/pages/[dashboard]/taxonomy/index.astro +10 -0
  158. package/frontend/pages/[dashboard]/taxonomy/tags.astro +33 -43
  159. package/frontend/pages/[dashboard]/unverified-email.astro +29 -21
  160. package/frontend/pages/[dashboard]/user-management/edit.astro +170 -90
  161. package/frontend/pages/[dashboard]/user-management/index.astro +10 -1
  162. package/frontend/pages/studiocms_api/[...all].ts +106 -0
  163. package/frontend/pages/studiocms_api/_handlers/_utils/auth.ts +26 -0
  164. package/frontend/pages/studiocms_api/_handlers/_utils/changelog.ts +147 -0
  165. package/frontend/pages/studiocms_api/_handlers/_utils/db-studio-driver.ts +46 -0
  166. package/frontend/pages/studiocms_api/_handlers/_utils/parseLogLevel.ts +27 -0
  167. package/frontend/pages/studiocms_api/_handlers/auth/auth.ts +459 -0
  168. package/frontend/pages/studiocms_api/_handlers/auth/index.ts +17 -0
  169. package/frontend/pages/studiocms_api/_handlers/auth/oauth.ts +91 -0
  170. package/frontend/pages/studiocms_api/_handlers/dashboard/_shared.ts +57 -0
  171. package/frontend/pages/studiocms_api/_handlers/dashboard/apiTokens.ts +134 -0
  172. package/frontend/pages/studiocms_api/_handlers/dashboard/config.ts +64 -0
  173. package/frontend/pages/studiocms_api/_handlers/dashboard/content.ts +741 -0
  174. package/frontend/pages/studiocms_api/_handlers/dashboard/create.ts +480 -0
  175. package/frontend/pages/studiocms_api/_handlers/dashboard/emailNotifications.ts +49 -0
  176. package/frontend/pages/studiocms_api/_handlers/dashboard/index.ts +45 -0
  177. package/frontend/pages/studiocms_api/_handlers/dashboard/mailer.ts +136 -0
  178. package/frontend/pages/studiocms_api/_handlers/dashboard/plugins.ts +80 -0
  179. package/frontend/pages/studiocms_api/_handlers/dashboard/profile.ts +275 -0
  180. package/frontend/pages/studiocms_api/_handlers/dashboard/resetPassword.ts +140 -0
  181. package/frontend/pages/studiocms_api/_handlers/dashboard/search.ts +63 -0
  182. package/frontend/pages/studiocms_api/_handlers/dashboard/taxonomy.ts +285 -0
  183. package/frontend/pages/studiocms_api/_handlers/dashboard/templates.ts +75 -0
  184. package/frontend/pages/studiocms_api/_handlers/dashboard/users.ts +312 -0
  185. package/frontend/pages/studiocms_api/_handlers/dashboard/verifyEndpoints.ts +307 -0
  186. package/frontend/pages/studiocms_api/_handlers/integration/dbStudio.ts +98 -0
  187. package/frontend/pages/studiocms_api/_handlers/integration/index.ts +17 -0
  188. package/frontend/pages/studiocms_api/_handlers/integration/storageManager.ts +107 -0
  189. package/frontend/pages/studiocms_api/_handlers/rest-api/index.ts +8 -0
  190. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/_shared.ts +41 -0
  191. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/index.ts +17 -0
  192. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/public.ts +195 -0
  193. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/secure.ts +1726 -0
  194. package/frontend/pages/studiocms_api/_handlers/sdk.ts +129 -0
  195. package/frontend/pages/studiocms_api/_middleware/astroLocals.ts +36 -0
  196. package/frontend/pages/studiocms_api/_middleware/restApi.ts +56 -0
  197. package/frontend/pages/studiocms_api/integrations/[...all].ts +8 -0
  198. package/frontend/scripts/formdata.ts +219 -0
  199. package/frontend/setup-pages/3-done.astro +4 -20
  200. package/frontend/setup-pages/studiocms_api/dashboard/step-2.ts +3 -6
  201. package/frontend/styles/dashboard-base.css +0 -1
  202. package/frontend/web-vitals/endpoint.ts +2 -1
  203. package/package.json +34 -29
  204. package/dist/global.d.ts +0 -9
  205. package/frontend/components/dashboard/LoginChecker.astro +0 -68
  206. package/frontend/components/dashboard/user-mgmt/RankCheck.astro +0 -57
  207. package/frontend/components/first-time-setup/snippets/opt1-astro.config.diff +0 -14
  208. package/frontend/components/first-time-setup/snippets/opt2-astro.config.diff +0 -9
  209. package/frontend/middleware/_authmap.ts +0 -63
  210. package/frontend/pages/studiocms_api/auth/[path].ts +0 -384
  211. package/frontend/pages/studiocms_api/auth/[provider]/[...id].ts +0 -64
  212. package/frontend/pages/studiocms_api/auth/[provider]/_effects/index.ts +0 -101
  213. package/frontend/pages/studiocms_api/auth/_shared.ts +0 -52
  214. package/frontend/pages/studiocms_api/dashboard/api-tokens.ts +0 -115
  215. package/frontend/pages/studiocms_api/dashboard/config.ts +0 -74
  216. package/frontend/pages/studiocms_api/dashboard/content/diff.ts +0 -73
  217. package/frontend/pages/studiocms_api/dashboard/content/folder.ts +0 -220
  218. package/frontend/pages/studiocms_api/dashboard/content/page.ts +0 -359
  219. package/frontend/pages/studiocms_api/dashboard/create-reset-link.ts +0 -77
  220. package/frontend/pages/studiocms_api/dashboard/create-user-invite.ts +0 -231
  221. package/frontend/pages/studiocms_api/dashboard/create-user.ts +0 -186
  222. package/frontend/pages/studiocms_api/dashboard/email-notification-settings-site.ts +0 -74
  223. package/frontend/pages/studiocms_api/dashboard/mailer/check-email.ts +0 -75
  224. package/frontend/pages/studiocms_api/dashboard/mailer/config.ts +0 -136
  225. package/frontend/pages/studiocms_api/dashboard/plugins/[plugin].ts +0 -80
  226. package/frontend/pages/studiocms_api/dashboard/profile.ts +0 -245
  227. package/frontend/pages/studiocms_api/dashboard/resend-verify-email.ts +0 -77
  228. package/frontend/pages/studiocms_api/dashboard/reset-password.ts +0 -124
  229. package/frontend/pages/studiocms_api/dashboard/search-list.ts +0 -59
  230. package/frontend/pages/studiocms_api/dashboard/taxonomy-search.ts +0 -47
  231. package/frontend/pages/studiocms_api/dashboard/taxonomy.ts +0 -230
  232. package/frontend/pages/studiocms_api/dashboard/templates.ts +0 -74
  233. package/frontend/pages/studiocms_api/dashboard/update-user-notifications.ts +0 -86
  234. package/frontend/pages/studiocms_api/dashboard/users.ts +0 -236
  235. package/frontend/pages/studiocms_api/dashboard/verify-email.ts +0 -83
  236. package/frontend/pages/studiocms_api/dashboard/verify-session.ts +0 -187
  237. package/frontend/pages/studiocms_api/integrations/[type]/[...id].ts +0 -15
  238. package/frontend/pages/studiocms_api/integrations/[type]/_routes/db-studio.ts +0 -173
  239. package/frontend/pages/studiocms_api/integrations/[type]/_routes/storage.ts +0 -88
  240. package/frontend/pages/studiocms_api/partials/editor.astro +0 -74
  241. package/frontend/pages/studiocms_api/partials/render.astro +0 -39
  242. package/frontend/pages/studiocms_api/partials/user-list-items.astro +0 -43
  243. package/frontend/pages/studiocms_api/rest/utils/auth-token.ts +0 -59
  244. package/frontend/pages/studiocms_api/rest/v1/[type]/[...id].ts +0 -23
  245. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/categories.ts +0 -267
  246. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/folders.ts +0 -283
  247. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/pages.ts +0 -505
  248. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/settings.ts +0 -100
  249. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/tags.ts +0 -229
  250. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/users.ts +0 -553
  251. package/frontend/pages/studiocms_api/rest/v1/public/[type]/[...id].ts +0 -19
  252. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/categories.ts +0 -74
  253. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/folders.ts +0 -85
  254. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/pages.ts +0 -103
  255. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/tags.ts +0 -67
  256. package/frontend/pages/studiocms_api/sdk/[...path].ts +0 -97
  257. package/frontend/pages/studiocms_api/sdk/utils/changelog.ts +0 -119
  258. package/frontend/scripts/auth/formListener.ts +0 -81
  259. package/frontend/scripts/formdata-utils.ts +0 -116
  260. package/frontend/utils/build-partial-schema.ts +0 -46
  261. package/frontend/utils/errors.ts +0 -6
  262. package/frontend/utils/param-extractor.ts +0 -83
  263. package/frontend/utils/rest-router.ts +0 -444
@@ -1,17 +1,38 @@
1
- import { Effect, runEffect } from "@withstudiocms/effect";
2
- import { defineUtility } from "astro-integration-kit";
3
- import { getAstroProject, StudioCMSRouteConfig } from "./frontend/routes.js";
1
+ import { Effect } from "@withstudiocms/effect";
2
+ import { addVirtualImports, defineUtility } from "astro-integration-kit";
3
+ import {
4
+ getAstroProject,
5
+ getRouteConfig,
6
+ StudioCMSRouteConfig
7
+ } from "./frontend/routes.js";
4
8
  const routeHandler = defineUtility("astro:config:setup")(
5
9
  async (params, options) => {
6
10
  const { injectRoute, addMiddleware } = params;
7
- const projectEffect = getAstroProject.pipe(Effect.provide(StudioCMSRouteConfig.Live(options)));
8
- const { routes, middleware } = await runEffect(projectEffect);
9
- for (const route of routes) {
10
- injectRoute(route);
11
- }
12
- for (const mw of middleware) {
13
- addMiddleware(mw);
14
- }
11
+ const _injectRoutes = (route) => Effect.sync(() => injectRoute(route));
12
+ const _addMiddleware = (mw) => Effect.sync(() => addMiddleware(mw));
13
+ const sharedConfig = StudioCMSRouteConfig.Live(options);
14
+ await Effect.all([
15
+ // Retrieve the processed route configuration and add it as a virtual import for use in other parts of the application
16
+ getRouteConfig.pipe(
17
+ Effect.map((config) => {
18
+ addVirtualImports(params, {
19
+ name: "studiocms:routeHandler",
20
+ imports: {
21
+ "virtual:studiocms/route-config": `export const routeConfig = ${JSON.stringify(config)}; export default routeConfig;`
22
+ }
23
+ });
24
+ })
25
+ ),
26
+ // Retrieve the Astro project configuration, which includes the routes and middleware to be injected, and process them by injecting routes and adding middleware
27
+ getAstroProject.pipe(
28
+ Effect.flatMap(
29
+ ({ middleware, routes }) => Effect.all([
30
+ Effect.forEach(routes, _injectRoutes),
31
+ Effect.forEach(middleware, _addMiddleware)
32
+ ])
33
+ )
34
+ )
35
+ ]).pipe(Effect.provide(sharedConfig), Effect.runPromise);
15
36
  }
16
37
  );
17
38
  export {
@@ -1,3 +1,3 @@
1
1
  export declare const setupDbStudio: import("astro-integration-kit").HookUtility<"astro:config:setup", [opts: {
2
- dialect: "libsql" | "postgres" | "mysql";
2
+ readonly dialect: "libsql" | "postgres" | "mysql";
3
3
  }], Promise<void>>;
@@ -0,0 +1,25 @@
1
+ import { HttpServerResponse } from '@effect/platform';
2
+ import type { HttpBodyError } from '@effect/platform/HttpBody';
3
+ import type { APIContext } from 'astro';
4
+ import type { Effect } from 'effect';
5
+ import type { ContextDriverDefinition, ContextHandler, ContextHandlerFn, ParsedContext } from '../definitions';
6
+ /**
7
+ * Astro Context Driver implementation.
8
+ *
9
+ * This class implements the ContextDriverDefinition interface for Astro,
10
+ * providing methods to parse the context, build responses, and handle endpoints.
11
+ */
12
+ export default class EffectifyAstroContextDriver implements ContextDriverDefinition<APIContext, Effect.Effect<HttpServerResponse.HttpServerResponse, HttpBodyError>> {
13
+ parseContext({ request, locals }: APIContext): ParsedContext;
14
+ buildResponse<Data>(opts: {
15
+ data: Data;
16
+ status: number;
17
+ }): Effect.Effect<HttpServerResponse.HttpServerResponse, HttpBodyError>;
18
+ buildErrorResponse(error: unknown): {
19
+ data: {
20
+ error: string;
21
+ };
22
+ status: number;
23
+ };
24
+ handleEndpoint(contextHandler: ContextHandler): ContextHandlerFn<APIContext, Effect.Effect<HttpServerResponse.HttpServerResponse, HttpBodyError>>;
25
+ }
@@ -0,0 +1,78 @@
1
+ import { runSDK, SDKCoreJs } from "studiocms:sdk";
2
+ import { HttpServerResponse } from "@effect/platform";
3
+ import { UserPermissionLevel } from "@withstudiocms/auth-kit/types";
4
+ class EffectifyAstroContextDriver {
5
+ parseContext({ request, locals }) {
6
+ return {
7
+ getJson: () => request.json(),
8
+ getArrayBuffer: () => request.arrayBuffer(),
9
+ getHeader: (name) => request.headers.get(name),
10
+ isAuthorized: async (type) => {
11
+ switch (type) {
12
+ case "headers": {
13
+ const authTokenData = request.headers.get("Authorization");
14
+ if (!authTokenData) {
15
+ return false;
16
+ }
17
+ const parts = authTokenData.split(" ");
18
+ if (parts.length !== 2 || parts[0].toLowerCase() !== "bearer") {
19
+ return false;
20
+ }
21
+ const token = parts[1];
22
+ const user = await runSDK(SDKCoreJs.REST_API.tokens.verify(token));
23
+ if (!user) {
24
+ return false;
25
+ }
26
+ let level;
27
+ switch (user.rank) {
28
+ case "owner":
29
+ level = UserPermissionLevel.owner;
30
+ break;
31
+ case "admin":
32
+ level = UserPermissionLevel.admin;
33
+ break;
34
+ case "editor":
35
+ level = UserPermissionLevel.editor;
36
+ break;
37
+ case "visitor":
38
+ level = UserPermissionLevel.visitor;
39
+ break;
40
+ default:
41
+ level = UserPermissionLevel.unknown;
42
+ }
43
+ const isEditor = level >= UserPermissionLevel.editor;
44
+ if (!isEditor) {
45
+ return false;
46
+ }
47
+ return true;
48
+ }
49
+ default: {
50
+ const isEditor = locals.StudioCMS.security?.userPermissionLevel.isEditor || false;
51
+ return isEditor;
52
+ }
53
+ }
54
+ }
55
+ };
56
+ }
57
+ buildResponse(opts) {
58
+ return HttpServerResponse.json(opts.data, { status: opts.status });
59
+ }
60
+ buildErrorResponse(error) {
61
+ return { data: { error: error.message }, status: 500 };
62
+ }
63
+ handleEndpoint(contextHandler) {
64
+ return async (rawContext) => {
65
+ try {
66
+ const context = this.parseContext(rawContext);
67
+ const opts = await contextHandler(context);
68
+ return this.buildResponse(opts);
69
+ } catch (error) {
70
+ const errorResponse = this.buildErrorResponse(error);
71
+ return this.buildResponse(errorResponse);
72
+ }
73
+ };
74
+ }
75
+ }
76
+ export {
77
+ EffectifyAstroContextDriver as default
78
+ };
@@ -1,4 +1,4 @@
1
- import { type StudioCMSStorageManager } from '../../schemas/index.js';
1
+ import { type StudioCMSStorageManagerDef } from '../../schemas/index.js';
2
2
  /**
3
3
  * Defines a No-Op Storage Manager plugin for StudioCMS.
4
4
  *
@@ -7,4 +7,4 @@ import { type StudioCMSStorageManager } from '../../schemas/index.js';
7
7
  * @param version - The minimum StudioCMS version required for this storage manager.
8
8
  * @returns A StudioCMSStorageManager plugin definition.
9
9
  */
10
- export declare const NoOpStorageManager: (version: string) => StudioCMSStorageManager;
10
+ export declare const NoOpStorageManager: () => StudioCMSStorageManagerDef;
@@ -1,12 +1,11 @@
1
1
  import createPathResolver from "@withstudiocms/internal_helpers/pathResolver";
2
2
  import { defineStorageManager } from "../../schemas/index.js";
3
3
  const { resolve } = createPathResolver(import.meta.url);
4
- const NoOpStorageManager = (version) => defineStorageManager({
4
+ const NoOpStorageManager = () => defineStorageManager({
5
5
  identifier: "studiocms",
6
6
  name: "Core No-Op Storage (built-in)",
7
- studiocmsMinimumVersion: version,
8
7
  hooks: {
9
- "studiocms:storage-manager": ({ setStorageManager, logger }) => {
8
+ "studiocms:storage-manager": async ({ setStorageManager, logger }) => {
10
9
  logger.info("No-Op Storage initialized.");
11
10
  setStorageManager({
12
11
  managerPath: resolve("./core/no-op-storage-manager.js")
package/dist/index.d.ts CHANGED
@@ -4,7 +4,6 @@
4
4
  * directives must be first at the top of the file and can only be preceded by this comment.
5
5
  */
6
6
  /// <reference types="@studiocms/ui/v/types" preserve="true" />
7
- /// <reference types="./global.d.ts" preserve="true" />
8
7
  /// <reference types="./virtual.d.ts" preserve="true" />
9
8
  /// <reference types="./theme.d.ts" preserve="true" />
10
9
  import type { AstroIntegration } from 'astro';
package/dist/index.js CHANGED
@@ -2,7 +2,11 @@ import { promises as fsP, writeFileSync } from "node:fs";
2
2
  import { runtimeLogger } from "@inox-tools/runtime-logger";
3
3
  import studiocmsUi from "@studiocms/ui";
4
4
  import { componentRegistryHandler } from "@withstudiocms/component-registry";
5
- import { configResolverBuilder, exists, watchConfigFileBuilder } from "@withstudiocms/config-utils";
5
+ import {
6
+ configResolverBuilderEffect,
7
+ exists,
8
+ watchConfigFileBuilder
9
+ } from "@withstudiocms/config-utils";
6
10
  import { Effect, runEffect } from "@withstudiocms/effect";
7
11
  import {
8
12
  addIntegrationArray,
@@ -58,10 +62,10 @@ const studiocms = () => {
58
62
  const watchConfigFile = watchConfigFileBuilder({
59
63
  configPaths
60
64
  });
61
- const configResolver = configResolverBuilder({
65
+ const configResolver = configResolverBuilderEffect({
62
66
  configPaths,
63
67
  label: name,
64
- zodSchema: StudioCMSOptionsSchema
68
+ effectSchema: StudioCMSOptionsSchema
65
69
  });
66
70
  const messages = [];
67
71
  let cacheJsonFile;
@@ -133,7 +137,6 @@ const studiocms = () => {
133
137
  dashboardRoute,
134
138
  dbStartPage,
135
139
  name,
136
- pkgVersion,
137
140
  plugins,
138
141
  robotsTXTConfig,
139
142
  verbose,
@@ -242,7 +245,8 @@ const studiocms = () => {
242
245
  "studiocms:debug-info": `export const debugInfo = ${JSON.stringify(debugOutput)};export default debugInfo;`,
243
246
  "studiocms:client-scripts/StorageFileBrowser": ambientScripts([
244
247
  "./virtuals/scripts/StorageFileBrowser.js"
245
- ])
248
+ ]),
249
+ "studiocms:client/apiClients": dynamicVirtual(["./client/apiClient.js"])
246
250
  }
247
251
  });
248
252
  await setupDbStudio(params, options.db);
@@ -1,5 +1,5 @@
1
1
  import type { AstroIntegration } from 'astro';
2
- import { type RobotsConfig } from './schema.js';
2
+ import type { RobotsConfig } from './schema.js';
3
3
  /**
4
4
  * **Robots.txt Integration**
5
5
  *
@@ -8,4 +8,4 @@ import { type RobotsConfig } from './schema.js';
8
8
  * @param astroConfig Robots Configuration
9
9
  * @returns AstroIntegration
10
10
  */
11
- export default function createRobotsIntegration(options: RobotsConfig): AstroIntegration;
11
+ export default function createRobotsIntegration(config: RobotsConfig): AstroIntegration;
@@ -1,13 +1,11 @@
1
1
  import fs from "node:fs";
2
2
  import { fileURLToPath } from "node:url";
3
3
  import { generateContent, printInfo } from "./core.js";
4
- import { RobotsTXTConfigSchema } from "./schema.js";
5
4
  import { getFileSizeInKilobytes, measureExecutionTime } from "./utils.js";
6
- function createRobotsIntegration(options) {
5
+ function createRobotsIntegration(config) {
7
6
  let astroConfig;
8
7
  let finalSiteMapHref;
9
8
  let executionTime;
10
- const config = RobotsTXTConfigSchema.parse(options);
11
9
  return {
12
10
  name: "studiocms/robotstxt",
13
11
  hooks: {