@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 3.43 kB
Source Map (JSON)
{"version":3,"file":"create-single.mjs","names":["constants","formatter","mediaShareLinksFormatter"],"sources":["../../../src/services/media-share-links/create-single.ts"],"sourcesContent":["import { scrypt } from \"@noble/hashes/scrypt.js\";\nimport constants from \"../../constants/constants.js\";\nimport formatter, {\n\tmediaShareLinksFormatter,\n} from \"../../libs/formatters/index.js\";\nimport { MediaShareLinksRepository } from \"../../libs/repositories/index.js\";\nimport type { MediaShareLink } from \"../../types/response.js\";\nimport { getBaseUrl } from \"../../utils/helpers/index.js\";\nimport type { ServiceFn } from \"../../utils/services/types.js\";\nimport generateShareToken from \"../../utils/share-link/generate-token.js\";\nimport assertMediaAccess from \"./helpers/assert-media-access.js\";\n\nconst createSingle: ServiceFn<\n\t[\n\t\t{\n\t\t\tmediaId: number;\n\t\t\tname?: string;\n\t\t\tdescription?: string;\n\t\t\tpassword?: string;\n\t\t\texpiresAt?: string;\n\t\t\tuserId: number;\n\t\t},\n\t],\n\tMediaShareLink\n> = async (context, data) => {\n\tconst mediaAccessRes = await assertMediaAccess(context, {\n\t\tmediaId: data.mediaId,\n\t});\n\tif (mediaAccessRes.error) return mediaAccessRes;\n\n\tconst MediaShareLinks = new MediaShareLinksRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\n\tconst token = generateShareToken();\n\n\tconst hashedPassword = data.password\n\t\t? Buffer.from(\n\t\t\t\tscrypt(\n\t\t\t\t\tdata.password,\n\t\t\t\t\tcontext.config.secrets.encryption,\n\t\t\t\t\tconstants.scrypt,\n\t\t\t\t),\n\t\t\t).toString(\"base64\")\n\t\t: null;\n\n\tconst linkRes = await MediaShareLinks.createSingle({\n\t\tdata: {\n\t\t\tmedia_id: data.mediaId,\n\t\t\ttoken: token,\n\t\t\tpassword: hashedPassword,\n\t\t\texpires_at: formatter.normalizeDate(data.expiresAt) ?? undefined,\n\t\t\tname: data.name ?? null,\n\t\t\tdescription: data.description ?? null,\n\t\t\tcreated_at: new Date().toISOString(),\n\t\t\tupdated_at: new Date().toISOString(),\n\t\t\tcreated_by: data.userId,\n\t\t\tupdated_by: data.userId,\n\t\t},\n\t\treturning: [\n\t\t\t\"id\",\n\t\t\t\"media_id\",\n\t\t\t\"token\",\n\t\t\t\"password\",\n\t\t\t\"expires_at\",\n\t\t\t\"name\",\n\t\t\t\"description\",\n\t\t\t\"created_at\",\n\t\t\t\"updated_at\",\n\t\t\t\"created_by\",\n\t\t\t\"updated_by\",\n\t\t],\n\t\tvalidation: { enabled: true },\n\t});\n\tif (linkRes.error) return linkRes;\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: mediaShareLinksFormatter.formatSingle({\n\t\t\tlink: linkRes.data,\n\t\t\thost: getBaseUrl(context),\n\t\t}),\n\t};\n};\n\nexport default createSingle;\n"],"mappings":"maAYA,MAAM,EAYF,MAAO,EAAS,IAAS,CAC5B,IAAM,EAAiB,MAAM,EAAkB,EAAS,CACvD,QAAS,EAAK,OACf,CAAC,EACD,GAAI,EAAe,MAAO,OAAO,EAEjC,IAAM,EAAkB,IAAI,EAC3B,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EAEM,EAAQ,EAAmB,EAE3B,EAAiB,EAAK,SACzB,OAAO,KACP,EACC,EAAK,SACL,EAAQ,OAAO,QAAQ,WACvBA,EAAU,MACX,CACD,CAAC,CAAC,SAAS,QAAQ,EAClB,KAEG,EAAU,MAAM,EAAgB,aAAa,CAClD,KAAM,CACL,SAAU,EAAK,QACR,QACP,SAAU,EACV,WAAYC,EAAU,cAAc,EAAK,SAAS,GAAK,IAAA,GACvD,KAAM,EAAK,MAAQ,KACnB,YAAa,EAAK,aAAe,KACjC,WAAY,IAAI,KAAK,CAAA,CAAE,YAAY,EACnC,WAAY,IAAI,KAAK,CAAA,CAAE,YAAY,EACnC,WAAY,EAAK,OACjB,WAAY,EAAK,MAClB,EACA,UAAW,CACV,KACA,WACA,QACA,WACA,aACA,OACA,cACA,aACA,aACA,aACA,YACD,EACA,WAAY,CAAE,QAAS,EAAK,CAC7B,CAAC,EAGD,OAFI,EAAQ,MAAc,EAEnB,CACN,MAAO,IAAA,GACP,KAAMC,EAAyB,aAAa,CAC3C,KAAM,EAAQ,KACd,KAAM,EAAW,CAAO,CACzB,CAAC,CACF,CACD"}