UNPKG

@lucidcms/core

Version:

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

1 lines 4.99 kB
{"version":3,"file":"delete-expired-unsynced-media.mjs","names":["constants"],"sources":["../../../src/services/crons/delete-expired-unsynced-media.ts"],"sourcesContent":["import { addMilliseconds } from \"date-fns\";\nimport constants from \"../../constants/constants.js\";\nimport {\n\tMediaAwaitingSyncRepository,\n\tMediaUploadSessionsRepository,\n} from \"../../libs/repositories/index.js\";\nimport { getMediaKeyTenantKey } from \"../../utils/media/index.js\";\nimport type { ServiceFn } from \"../../utils/services/types.js\";\nimport groupQueuePayloadsByTenant from \"./helpers/group-queue-payloads-by-tenant.js\";\n\n/**\n * Finds all expired media keys that are still awaiting sync and queues them for deletion\n */\nconst deleteExpiredUnsyncedMedia: ServiceFn<[], undefined> = async (\n\tcontext,\n) => {\n\tconst MediaAwaitingSync = new MediaAwaitingSyncRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\tconst MediaUploadSessions = new MediaUploadSessionsRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\n\tconst [allExpiredMediaRes, allExpiredSessionsRes] = await Promise.all([\n\t\tMediaAwaitingSync.selectMultiple({\n\t\t\tselect: [\"key\"],\n\t\t\twhere: [\n\t\t\t\t{\n\t\t\t\t\tkey: \"timestamp\",\n\t\t\t\t\toperator: \"<\",\n\t\t\t\t\tvalue: addMilliseconds(\n\t\t\t\t\t\tnew Date(),\n\t\t\t\t\t\tconstants.mediaAwaitingSyncInterval * -1,\n\t\t\t\t\t).toISOString(),\n\t\t\t\t},\n\t\t\t],\n\t\t\tvalidation: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t}),\n\t\tMediaUploadSessions.selectMultiple({\n\t\t\tselect: [\"session_id\", \"key\"],\n\t\t\twhere: [\n\t\t\t\t{\n\t\t\t\t\tkey: \"expires_at\",\n\t\t\t\t\toperator: \"<\",\n\t\t\t\t\tvalue: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"status\",\n\t\t\t\t\toperator: \"=\",\n\t\t\t\t\tvalue: \"active\",\n\t\t\t\t},\n\t\t\t],\n\t\t\tvalidation: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t}),\n\t]);\n\tif (allExpiredMediaRes.error) return allExpiredMediaRes;\n\tif (allExpiredSessionsRes.error) return allExpiredSessionsRes;\n\n\tif (\n\t\tallExpiredMediaRes.data.length === 0 &&\n\t\tallExpiredSessionsRes.data.length === 0\n\t) {\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst expiredMediaGroups = groupQueuePayloadsByTenant(\n\t\tallExpiredMediaRes.data.map((media) => ({\n\t\t\tpayload: {\n\t\t\t\tkey: media.key,\n\t\t\t},\n\t\t\ttenantKeys: [getMediaKeyTenantKey(media.key)],\n\t\t})),\n\t);\n\tconst expiredSessionGroups = groupQueuePayloadsByTenant(\n\t\tallExpiredSessionsRes.data.map((session) => ({\n\t\t\tpayload: {\n\t\t\t\tsessionId: session.session_id,\n\t\t\t},\n\t\t\ttenantKeys: [getMediaKeyTenantKey(session.key)],\n\t\t})),\n\t);\n\n\tfor (const group of expiredMediaGroups) {\n\t\tconst queueRes = await context.queue.addBatch(context, {\n\t\t\tevent: \"media:delete-unsynced\",\n\t\t\tpayloads: group.payloads,\n\t\t\toptions:\n\t\t\t\tgroup.tenantKeys.length > 0\n\t\t\t\t\t? { tenantKeys: group.tenantKeys }\n\t\t\t\t\t: undefined,\n\t\t});\n\t\tif (queueRes.error) return queueRes;\n\t}\n\n\tfor (const group of expiredSessionGroups) {\n\t\tconst queueRes = await context.queue.addBatch(context, {\n\t\t\tevent: \"media:abort-upload-session\",\n\t\t\tpayloads: group.payloads,\n\t\t\toptions:\n\t\t\t\tgroup.tenantKeys.length > 0\n\t\t\t\t\t? { tenantKeys: group.tenantKeys }\n\t\t\t\t\t: undefined,\n\t\t});\n\t\tif (queueRes.error) return queueRes;\n\t}\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: undefined,\n\t};\n};\n\nexport default deleteExpiredUnsyncedMedia;\n"],"mappings":"kWAaA,MAAM,EAAuD,KAC5D,IACI,CACJ,IAAM,EAAoB,IAAI,EAC7B,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EACM,EAAsB,IAAI,EAC/B,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EAEM,CAAC,EAAoB,GAAyB,MAAM,QAAQ,IAAI,CACrE,EAAkB,eAAe,CAChC,OAAQ,CAAC,KAAK,EACd,MAAO,CACN,CACC,IAAK,YACL,SAAU,IACV,MAAO,EACN,IAAI,KACJA,EAAU,0BAA4B,EACvC,CAAC,CAAC,YAAY,CACf,CACD,EACA,WAAY,CACX,QAAS,EACV,CACD,CAAC,EACD,EAAoB,eAAe,CAClC,OAAQ,CAAC,aAAc,KAAK,EAC5B,MAAO,CACN,CACC,IAAK,aACL,SAAU,IACV,MAAO,IAAI,KAAK,CAAA,CAAE,YAAY,CAC/B,EACA,CACC,IAAK,SACL,SAAU,IACV,MAAO,QACR,CACD,EACA,WAAY,CACX,QAAS,EACV,CACD,CAAC,CACF,CAAC,EACD,GAAI,EAAmB,MAAO,OAAO,EACrC,GAAI,EAAsB,MAAO,OAAO,EAExC,GACC,EAAmB,KAAK,SAAW,GACnC,EAAsB,KAAK,SAAW,EAEtC,MAAO,CACN,MAAO,IAAA,GACP,KAAM,IAAA,EACP,EAGD,IAAM,EAAqB,EAC1B,EAAmB,KAAK,IAAK,IAAW,CACvC,QAAS,CACR,IAAK,EAAM,GACZ,EACA,WAAY,CAAC,EAAqB,EAAM,GAAG,CAAC,CAC7C,EAAE,CACH,EACM,EAAuB,EAC5B,EAAsB,KAAK,IAAK,IAAa,CAC5C,QAAS,CACR,UAAW,EAAQ,UACpB,EACA,WAAY,CAAC,EAAqB,EAAQ,GAAG,CAAC,CAC/C,EAAE,CACH,EAEA,IAAK,IAAM,KAAS,EAAoB,CACvC,IAAM,EAAW,MAAM,EAAQ,MAAM,SAAS,EAAS,CACtD,MAAO,wBACP,SAAU,EAAM,SAChB,QACC,EAAM,WAAW,OAAS,EACvB,CAAE,WAAY,EAAM,UAAW,EAC/B,IAAA,EACL,CAAC,EACD,GAAI,EAAS,MAAO,OAAO,CAC5B,CAEA,IAAK,IAAM,KAAS,EAAsB,CACzC,IAAM,EAAW,MAAM,EAAQ,MAAM,SAAS,EAAS,CACtD,MAAO,6BACP,SAAU,EAAM,SAChB,QACC,EAAM,WAAW,OAAS,EACvB,CAAE,WAAY,EAAM,UAAW,EAC/B,IAAA,EACL,CAAC,EACD,GAAI,EAAS,MAAO,OAAO,CAC5B,CAEA,MAAO,CACN,MAAO,IAAA,GACP,KAAM,IAAA,EACP,CACD"}