UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 3.89 kB
{"version":3,"file":"resolve-session.mjs","names":[],"sources":["../../../../src/services/preview-sessions/helpers/resolve-session.ts"],"sourcesContent":["import { copy } from \"../../../libs/i18n/index.js\";\nimport { PreviewSessionsRepository } from \"../../../libs/repositories/index.js\";\nimport { hashPreviewToken } from \"../../../utils/helpers/index.js\";\nimport type { ServiceFn } from \"../../../utils/services/types.js\";\nimport type { ResolvedPreviewSession } from \"../types.js\";\nimport { requiresPinnedPreviewVersion } from \"./resolve-preview-mode.js\";\n\nconst previewTokenPattern = /^[A-Za-z0-9_-]{43}$/;\n\nconst resolveSession: ServiceFn<\n\t[{ token: string }],\n\tResolvedPreviewSession\n> = async (context, data) => {\n\tif (!previewTokenPattern.test(data.token)) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tcode: \"preview_invalid\",\n\t\t\t\tmessage: copy(\"server:core.documents.preview.invalid.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst PreviewSessions = new PreviewSessionsRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\tconst sessionRes = await PreviewSessions.selectSingle({\n\t\tselect: [\n\t\t\t\"id\",\n\t\t\t\"entry_collection_key\",\n\t\t\t\"entry_document_id\",\n\t\t\t\"entry_version_type\",\n\t\t\t\"mode\",\n\t\t\t\"entry_version_id\",\n\t\t\t\"expires_at\",\n\t\t],\n\t\twhere: [\n\t\t\t{\n\t\t\t\tkey: \"token_hash\",\n\t\t\t\toperator: \"=\",\n\t\t\t\tvalue: hashPreviewToken(data.token),\n\t\t\t},\n\t\t],\n\t\tvalidation: { enabled: false },\n\t});\n\tif (sessionRes.error) return sessionRes;\n\tif (!sessionRes.data) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tcode: \"preview_invalid\",\n\t\t\t\tmessage: copy(\"server:core.documents.preview.invalid.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst session = sessionRes.data;\n\tconst requiresPinnedVersion = requiresPinnedPreviewVersion(\n\t\tsession.entry_version_type,\n\t);\n\tif (\n\t\t(requiresPinnedVersion &&\n\t\t\t(session.mode !== \"scoped\" || session.entry_version_id === null)) ||\n\t\t(!requiresPinnedVersion && session.entry_version_id !== null)\n\t) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tcode: \"preview_invalid\",\n\t\t\t\tmessage: copy(\"server:core.documents.preview.invalid.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\tif (new Date(session.expires_at).getTime() <= Date.now()) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tcode: \"preview_expired\",\n\t\t\t\tmessage: copy(\"server:core.documents.preview.expired.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: session,\n\t};\n};\n\nexport default resolveSession;\n"],"mappings":"yPAOA,MAAM,EAAsB,sBAEtB,EAGF,MAAO,EAAS,IAAS,CAC5B,GAAI,CAAC,EAAoB,KAAK,EAAK,KAAK,EACvC,MAAO,CACN,MAAO,CACN,KAAM,gBACN,KAAM,kBACN,QAAS,EAAK,+CAA+C,EAC7D,OAAQ,GACT,EACA,KAAM,IAAA,EACP,EAOD,IAAM,EAAa,MAAM,IAJG,EAC3B,EAAQ,GAAG,OACX,EAAQ,OAAO,EAEuB,CAAC,CAAC,aAAa,CACrD,OAAQ,CACP,KACA,uBACA,oBACA,qBACA,OACA,mBACA,YACD,EACA,MAAO,CACN,CACC,IAAK,aACL,SAAU,IACV,MAAO,EAAiB,EAAK,KAAK,CACnC,CACD,EACA,WAAY,CAAE,QAAS,EAAM,CAC9B,CAAC,EACD,GAAI,EAAW,MAAO,OAAO,EAC7B,GAAI,CAAC,EAAW,KACf,MAAO,CACN,MAAO,CACN,KAAM,gBACN,KAAM,kBACN,QAAS,EAAK,+CAA+C,EAC7D,OAAQ,GACT,EACA,KAAM,IAAA,EACP,EAGD,IAAM,EAAU,EAAW,KACrB,EAAwB,EAC7B,EAAQ,kBACT,EA4BA,OA1BE,IACC,EAAQ,OAAS,UAAY,EAAQ,mBAAqB,OAC3D,CAAC,GAAyB,EAAQ,mBAAqB,KAEjD,CACN,MAAO,CACN,KAAM,gBACN,KAAM,kBACN,QAAS,EAAK,+CAA+C,EAC7D,OAAQ,GACT,EACA,KAAM,IAAA,EACP,EAEG,IAAI,KAAK,EAAQ,UAAU,CAAC,CAAC,QAAQ,GAAK,KAAK,IAAI,EAC/C,CACN,MAAO,CACN,KAAM,gBACN,KAAM,kBACN,QAAS,EAAK,+CAA+C,EAC7D,OAAQ,GACT,EACA,KAAM,IAAA,EACP,EAGM,CACN,MAAO,IAAA,GACP,KAAM,CACP,CACD"}