{"version":3,"file":"create-initial-admin.mjs","names":["formatter","constants"],"sources":["../../../src/services/users/create-initial-admin.ts"],"sourcesContent":["import { scrypt } from \"@noble/hashes/scrypt.js\";\nimport constants from \"../../constants/constants.js\";\nimport formatter from \"../../libs/formatters/index.js\";\nimport { copy } from \"../../libs/i18n/index.js\";\nimport {\n\tOptionsRepository,\n\tUsersRepository,\n} from \"../../libs/repositories/index.js\";\nimport generateSecret from \"../../utils/helpers/generate-secret.js\";\nimport { normalizeEmailInput } from \"../../utils/helpers/normalize-input.js\";\nimport type { ServiceFn } from \"../../utils/services/types.js\";\n\nconst createInitialAdmin: ServiceFn<\n\t[\n\t\t{\n\t\t\temail: string;\n\t\t\tusername: string;\n\t\t\tfirstName?: string;\n\t\t\tlastName?: string;\n\t\t\tpassword: string;\n\t\t},\n\t],\n\tnumber\n> = async (context, data) => {\n\tconst Users = new UsersRepository(context.db.client, context.config.db);\n\tconst Options = new OptionsRepository(context.db.client, context.config.db);\n\tconst email = normalizeEmailInput(data.email);\n\n\tconst userCountRes = await Users.count({ where: [] });\n\tif (userCountRes.error) return userCountRes;\n\n\tif (formatter.parseCount(userCountRes.data?.count) > 0) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tmessage: copy(\"server:core.setup.already.completed\"),\n\t\t\t\tstatus: 400,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst { secret, encryptSecret } = generateSecret(\n\t\tcontext.config.secrets.encryption,\n\t);\n\tconst hashedPassword = Buffer.from(\n\t\tscrypt(data.password, secret, constants.scrypt),\n\t).toString(\"base64\");\n\n\tconst [newUserRes, systemAlertEmailRes] = await Promise.all([\n\t\tUsers.createSingle({\n\t\t\tdata: {\n\t\t\t\temail: email,\n\t\t\t\tusername: data.username,\n\t\t\t\tfirst_name: data.firstName,\n\t\t\t\tlast_name: data.lastName,\n\t\t\t\tsuper_admin: true,\n\t\t\t\ttriggered_password_reset: false,\n\t\t\t\tis_locked: false,\n\t\t\t\tpassword: hashedPassword,\n\t\t\t\tsecret: encryptSecret,\n\t\t\t\tinvitation_accepted: true,\n\t\t\t},\n\t\t\treturning: [\"id\"],\n\t\t\tvalidation: { enabled: true },\n\t\t}),\n\t\tOptions.upsertSingle({\n\t\t\tdata: {\n\t\t\t\tname: \"system_alert_email\",\n\t\t\t\tvalue_text: email,\n\t\t\t},\n\t\t}),\n\t]);\n\tif (newUserRes.error) return newUserRes;\n\tif (systemAlertEmailRes.error) return systemAlertEmailRes;\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: newUserRes.data.id,\n\t};\n};\n\nexport default createInitialAdmin;\n"],"mappings":"saAYA,MAAM,EAWF,MAAO,EAAS,IAAS,CAC5B,IAAM,EAAQ,IAAI,EAAgB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EAChE,EAAU,IAAI,EAAkB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EACpE,EAAQ,EAAoB,EAAK,KAAK,EAEtC,EAAe,MAAM,EAAM,MAAM,CAAE,MAAO,CAAC,CAAE,CAAC,EACpD,GAAI,EAAa,MAAO,OAAO,EAE/B,GAAIA,EAAU,WAAW,EAAa,MAAM,KAAK,EAAI,EACpD,MAAO,CACN,MAAO,CACN,KAAM,QACN,QAAS,EAAK,qCAAqC,EACnD,OAAQ,GACT,EACA,KAAM,IAAA,EACP,EAGD,GAAM,CAAE,SAAQ,iBAAkB,EACjC,EAAQ,OAAO,QAAQ,UACxB,EACM,EAAiB,OAAO,KAC7B,EAAO,EAAK,SAAU,EAAQC,EAAU,MAAM,CAC/C,CAAC,CAAC,SAAS,QAAQ,EAEb,CAAC,EAAY,GAAuB,MAAM,QAAQ,IAAI,CAC3D,EAAM,aAAa,CAClB,KAAM,CACE,QACP,SAAU,EAAK,SACf,WAAY,EAAK,UACjB,UAAW,EAAK,SAChB,YAAa,GACb,yBAA0B,GAC1B,UAAW,GACX,SAAU,EACV,OAAQ,EACR,oBAAqB,EACtB,EACA,UAAW,CAAC,IAAI,EAChB,WAAY,CAAE,QAAS,EAAK,CAC7B,CAAC,EACD,EAAQ,aAAa,CACpB,KAAM,CACL,KAAM,qBACN,WAAY,CACb,CACD,CAAC,CACF,CAAC,EAID,OAHI,EAAW,MAAc,EACzB,EAAoB,MAAc,EAE/B,CACN,MAAO,IAAA,GACP,KAAM,EAAW,KAAK,EACvB,CACD"}