@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 3.42 kB
Source Map (JSON)
{"version":3,"file":"setup.mjs","names":["constants","userServices.createInitialAdmin"],"sources":["../../../../../src/libs/http/controllers/auth/setup.ts"],"sourcesContent":["import { minutesToMilliseconds } from \"date-fns\";\nimport { createFactory } from \"hono/factory\";\nimport { describeRoute } from \"hono-openapi\";\nimport constants from \"../../../../constants/constants.js\";\nimport { controllerSchemas } from \"../../../../schemas/auth.js\";\nimport { userServices } from \"../../../../services/index.js\";\nimport { LucidAPIError } from \"../../../../utils/errors/index.js\";\nimport serviceWrapper from \"../../../../utils/services/service-wrapper.js\";\nimport { copy } from \"../../../i18n/index.js\";\nimport rateLimiter from \"../../middleware/rate-limiter.js\";\nimport validate from \"../../middleware/validate.js\";\nimport validateCSRF from \"../../middleware/validate-csrf.js\";\nimport openAPI from \"../../openapi/index.js\";\nimport createServiceContext from \"../../utils/create-service-context.js\";\n\nconst factory = createFactory();\n\nconst setupController = factory.createHandlers(\n\tdescribeRoute({\n\t\tdescription:\n\t\t\t\"Creates the initial admin user. This endpoint can only be used when no users exist in the system. Even if password auth is disabled, you will still be required to set one here.\",\n\t\ttags: [\"auth\"],\n\t\tsummary: \"Initial Admin Setup\",\n\t\tresponses: openAPI.responses(),\n\t\tparameters: openAPI.parameters({\n\t\t\theaders: {\n\t\t\t\tcsrf: true,\n\t\t\t},\n\t\t}),\n\t\trequestBody: openAPI.requestBody(controllerSchemas.setup.body),\n\t}),\n\tvalidateCSRF,\n\trateLimiter({\n\t\tmode: \"ip\",\n\t\tlimit: constants.rateLimit.scopes.sensitive.limit,\n\t\tscope: constants.rateLimit.scopes.sensitive.scopeKey,\n\t\twindowMs: minutesToMilliseconds(1),\n\t}),\n\tvalidate(\"json\", controllerSchemas.setup.body),\n\tasync (c) => {\n\t\tconst { email, username, firstName, lastName, password } =\n\t\t\tc.req.valid(\"json\");\n\t\tconst context = createServiceContext(c);\n\n\t\tconst createAdminRes = await serviceWrapper(\n\t\t\tuserServices.createInitialAdmin,\n\t\t\t{\n\t\t\t\ttransaction: true,\n\t\t\t\tdefaultError: {\n\t\t\t\t\ttype: \"basic\",\n\t\t\t\t\tname: copy(\"server:core.routes.user.create.error.name\"),\n\t\t\t\t\tmessage: copy(\"server:core.routes.user.create.error.message\"),\n\t\t\t\t},\n\t\t\t},\n\t\t)(context, {\n\t\t\temail,\n\t\t\tusername,\n\t\t\tfirstName,\n\t\t\tlastName,\n\t\t\tpassword,\n\t\t});\n\t\tif (createAdminRes.error) throw new LucidAPIError(createAdminRes.error);\n\n\t\tc.status(204);\n\t\treturn c.body(null);\n\t},\n);\n\nexport default setupController;\n"],"mappings":"utBAiBA,MAAM,EAFU,EAEc,CAAC,CAAC,eAC/B,EAAc,CACb,YACC,mLACD,KAAM,CAAC,MAAM,EACb,QAAS,sBACT,UAAW,EAAQ,UAAU,EAC7B,WAAY,EAAQ,WAAW,CAC9B,QAAS,CACR,KAAM,EACP,CACD,CAAC,EACD,YAAa,EAAQ,YAAY,EAAkB,MAAM,IAAI,CAC9D,CAAC,EACD,EACA,EAAY,CACX,KAAM,KACN,MAAOA,EAAU,UAAU,OAAO,UAAU,MAC5C,MAAOA,EAAU,UAAU,OAAO,UAAU,SAC5C,SAAU,EAAsB,CAAC,CAClC,CAAC,EACD,EAAS,OAAQ,EAAkB,MAAM,IAAI,EAC7C,KAAO,IAAM,CACZ,GAAM,CAAE,QAAO,WAAU,YAAW,WAAU,YAC7C,EAAE,IAAI,MAAM,MAAM,EACb,EAAU,EAAqB,CAAC,EAEhC,EAAiB,MAAM,EAC5BC,EACA,CACC,YAAa,GACb,aAAc,CACb,KAAM,QACN,KAAM,EAAK,2CAA2C,EACtD,QAAS,EAAK,8CAA8C,CAC7D,CACD,CACD,CAAC,CAAC,EAAS,CACV,QACA,WACA,YACA,WACA,UACD,CAAC,EACD,GAAI,EAAe,MAAO,MAAM,IAAI,EAAc,EAAe,KAAK,EAGtE,OADA,EAAE,OAAO,GAAG,EACL,EAAE,KAAK,IAAI,CACnB,CACD"}