@payloadcms/payload-cloud 3.2.3-canary.673b4b5 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/email.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/email.ts"],"sourcesContent":["import { nodemailerAdapter } from '@payloadcms/email-nodemailer'\nimport nodemailer from 'nodemailer'\n\nimport type { PayloadCloudEmailOptions } from './types.js'\n\ntype NodemailerAdapter = ReturnType<typeof nodemailerAdapter>\n\nexport const payloadCloudEmail = async (\n args: PayloadCloudEmailOptions,\n): Promise<NodemailerAdapter> | undefined => {\n if (process.env.PAYLOAD_CLOUD !== 'true' || !args) {\n return undefined\n }\n\n if (!args.apiKey) {\n throw new Error('apiKey must be provided to use Payload Cloud Email')\n }\n if (!args.defaultDomain) {\n throw new Error('defaultDomain must be provided to use Payload Cloud Email')\n }\n\n // Check if already has email configuration\n\n if (args.config.email) {\n // eslint-disable-next-line no-console\n console.log(\n 'Payload Cloud Email is enabled but email configuration is already provided in Payload config. If this is intentional, set `email: false` in the Payload Cloud plugin options.',\n )\n return args.config.email\n }\n\n const { apiKey, defaultDomain, skipVerify } = args\n\n const customDomainEnvs = Object.keys(process.env).filter(\n (e) => e.startsWith('PAYLOAD_CLOUD_EMAIL_DOMAIN_') && !e.endsWith('API_KEY'),\n )\n\n const customDomains = customDomainEnvs.map((e) => process.env[e]).filter(Boolean)\n\n if (customDomains.length) {\n // eslint-disable-next-line no-console\n console.log(\n `Configuring Payload Cloud Email for ${[defaultDomain, ...(customDomains || [])].join(', ')}`,\n )\n }\n\n const defaultFromName = args.defaultFromName || 'Payload CMS'\n const defaultFromAddress =\n args.defaultFromAddress || `cms@${customDomains.length ? customDomains[0] : defaultDomain}`\n\n const emailAdapter = await nodemailerAdapter({\n defaultFromAddress,\n defaultFromName,\n skipVerify,\n transport: nodemailer.createTransport({\n auth: {\n pass: apiKey,\n user: 'resend',\n },\n host: 'smtp.resend.com',\n port: 465,\n secure: true,\n }),\n })\n\n return emailAdapter\n}\n"],"names":["nodemailerAdapter","nodemailer","payloadCloudEmail","args","process","env","PAYLOAD_CLOUD","undefined","apiKey","Error","defaultDomain","config","email","console","log","skipVerify","customDomainEnvs","Object","keys","filter","e","startsWith","endsWith","customDomains","map","Boolean","length","join","defaultFromName","defaultFromAddress","emailAdapter","transport","createTransport","auth","pass","user","host","port","secure"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,+BAA8B;AAChE,OAAOC,gBAAgB,aAAY;AAMnC,OAAO,MAAMC,oBAAoB,OAC/BC;IAEA,IAAIC,QAAQC,GAAG,CAACC,aAAa,KAAK,UAAU,CAACH,MAAM;QACjD,OAAOI;IACT;IAEA,IAAI,CAACJ,KAAKK,MAAM,EAAE;QAChB,MAAM,IAAIC,MAAM;IAClB;IACA,IAAI,CAACN,KAAKO,aAAa,EAAE;QACvB,MAAM,IAAID,MAAM;IAClB;IAEA,2CAA2C;IAE3C,IAAIN,KAAKQ,MAAM,CAACC,KAAK,EAAE;QACrB,sCAAsC;QACtCC,QAAQC,GAAG,CACT;QAEF,OAAOX,KAAKQ,MAAM,CAACC,KAAK;IAC1B;IAEA,MAAM,EAAEJ,MAAM,EAAEE,aAAa,EAAEK,UAAU,EAAE,GAAGZ;IAE9C,MAAMa,mBAAmBC,OAAOC,IAAI,CAACd,QAAQC,GAAG,EAAEc,MAAM,CACtD,CAACC,IAAMA,EAAEC,UAAU,CAAC,kCAAkC,CAACD,EAAEE,QAAQ,CAAC;IAGpE,MAAMC,gBAAgBP,iBAAiBQ,GAAG,CAAC,CAACJ,IAAMhB,QAAQC,GAAG,CAACe,EAAE,EAAED,MAAM,CAACM;IAEzE,IAAIF,cAAcG,MAAM,EAAE;QACxB,sCAAsC;QACtCb,QAAQC,GAAG,CACT,CAAC,oCAAoC,EAAE;YAACJ;eAAmBa,iBAAiB,EAAE;SAAE,CAACI,IAAI,CAAC,MAAM,CAAC;IAEjG;IAEA,MAAMC,kBAAkBzB,KAAKyB,eAAe,IAAI;IAChD,MAAMC,qBACJ1B,KAAK0B,kBAAkB,IAAI,CAAC,IAAI,EAAEN,cAAcG,MAAM,GAAGH,aAAa,CAAC,EAAE,GAAGb,cAAc,CAAC;IAE7F,MAAMoB,eAAe,MAAM9B,kBAAkB;QAC3C6B;QACAD;QACAb;QACAgB,WAAW9B,WAAW+B,eAAe,CAAC;YACpCC,MAAM;gBACJC,MAAM1B;gBACN2B,MAAM;YACR;YACAC,MAAM;YACNC,MAAM;YACNC,QAAQ;QACV;IACF;IAEA,OAAOR;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/email.ts"],"sourcesContent":["import { nodemailerAdapter } from '@payloadcms/email-nodemailer'\nimport nodemailer from 'nodemailer'\n\nimport type { PayloadCloudEmailOptions } from './types.js'\n\ntype NodemailerAdapter = ReturnType<typeof nodemailerAdapter>\n\nexport const payloadCloudEmail = async (\n args: PayloadCloudEmailOptions,\n): Promise<NodemailerAdapter> | undefined => {\n if (process.env.PAYLOAD_CLOUD !== 'true' || !args) {\n return undefined\n }\n\n if (!args.apiKey) {\n throw new Error('apiKey must be provided to use Payload Cloud Email')\n }\n if (!args.defaultDomain) {\n throw new Error('defaultDomain must be provided to use Payload Cloud Email')\n }\n\n // Check if already has email configuration\n\n if (args.config.email) {\n // eslint-disable-next-line no-console\n console.log(\n 'Payload Cloud Email is enabled but email configuration is already provided in Payload config. If this is intentional, set `email: false` in the Payload Cloud plugin options.',\n )\n return args.config.email\n }\n\n const { apiKey, defaultDomain, skipVerify } = args\n\n const customDomainEnvs = Object.keys(process.env).filter(\n (e) => e.startsWith('PAYLOAD_CLOUD_EMAIL_DOMAIN_') && !e.endsWith('API_KEY'),\n )\n\n const customDomains = customDomainEnvs.map((e) => process.env[e]).filter(Boolean)\n\n if (customDomains.length) {\n // eslint-disable-next-line no-console\n console.log(\n `Configuring Payload Cloud Email for ${[defaultDomain, ...(customDomains || [])].join(', ')}`,\n )\n }\n\n const defaultFromName = args.defaultFromName || 'Payload CMS'\n const defaultFromAddress =\n args.defaultFromAddress || `cms@${customDomains.length ? customDomains[0] : defaultDomain}`\n\n const emailAdapter = await nodemailerAdapter({\n defaultFromAddress,\n defaultFromName,\n skipVerify,\n transport: nodemailer.createTransport({\n auth: {\n pass: apiKey,\n user: 'resend',\n },\n host: 'smtp.resend.com',\n port: 465,\n secure: true,\n }),\n })\n\n return emailAdapter\n}\n"],"names":["nodemailerAdapter","nodemailer","payloadCloudEmail","args","process","env","PAYLOAD_CLOUD","undefined","apiKey","Error","defaultDomain","config","email","console","log","skipVerify","customDomainEnvs","Object","keys","filter","e","startsWith","endsWith","customDomains","map","Boolean","length","join","defaultFromName","defaultFromAddress","emailAdapter","transport","createTransport","auth","pass","user","host","port","secure"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,+BAA8B;AAChE,OAAOC,gBAAgB,aAAY;AAMnC,OAAO,MAAMC,oBAAoB,OAC/BC;IAEA,IAAIC,QAAQC,GAAG,CAACC,aAAa,KAAK,UAAU,CAACH,MAAM;QACjD,OAAOI;IACT;IAEA,IAAI,CAACJ,KAAKK,MAAM,EAAE;QAChB,MAAM,IAAIC,MAAM;IAClB;IACA,IAAI,CAACN,KAAKO,aAAa,EAAE;QACvB,MAAM,IAAID,MAAM;IAClB;IAEA,2CAA2C;IAE3C,IAAIN,KAAKQ,MAAM,CAACC,KAAK,EAAE;QACrB,sCAAsC;QACtCC,QAAQC,GAAG,CACT;QAEF,OAAOX,KAAKQ,MAAM,CAACC,KAAK;IAC1B;IAEA,MAAM,EAAEJ,MAAM,EAAEE,aAAa,EAAEK,UAAU,EAAE,GAAGZ;IAE9C,MAAMa,mBAAmBC,OAAOC,IAAI,CAACd,QAAQC,GAAG,EAAEc,MAAM,CACtD,CAACC,IAAMA,EAAEC,UAAU,CAAC,kCAAkC,CAACD,EAAEE,QAAQ,CAAC;IAGpE,MAAMC,gBAAgBP,iBAAiBQ,GAAG,CAAC,CAACJ,IAAMhB,QAAQC,GAAG,CAACe,EAAE,EAAED,MAAM,CAACM;IAEzE,IAAIF,cAAcG,MAAM,EAAE;QACxB,sCAAsC;QACtCb,QAAQC,GAAG,CACT,CAAC,oCAAoC,EAAE;YAACJ;eAAmBa,iBAAiB,EAAE;SAAE,CAACI,IAAI,CAAC,OAAO;IAEjG;IAEA,MAAMC,kBAAkBzB,KAAKyB,eAAe,IAAI;IAChD,MAAMC,qBACJ1B,KAAK0B,kBAAkB,IAAI,CAAC,IAAI,EAAEN,cAAcG,MAAM,GAAGH,aAAa,CAAC,EAAE,GAAGb,eAAe;IAE7F,MAAMoB,eAAe,MAAM9B,kBAAkB;QAC3C6B;QACAD;QACAb;QACAgB,WAAW9B,WAAW+B,eAAe,CAAC;YACpCC,MAAM;gBACJC,MAAM1B;gBACN2B,MAAM;YACR;YACAC,MAAM;YACNC,MAAM;YACNC,QAAQ;QACV;IACF;IAEA,OAAOR;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/uploadCache.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, PayloadRequest } from 'payload'\n\ninterface Args {\n endpoint: string\n}\n\nexport const getCacheUploadsAfterChangeHook =\n ({ endpoint }: Args): CollectionAfterChangeHook =>\n ({ doc, operation, req }) => {\n if (!req || !process.env.PAYLOAD_CLOUD_CACHE_KEY) {\n return doc\n }\n\n // WARNING:\n // TODO: Test this for 3.0\n const { payloadAPI } = req\n if (payloadAPI !== 'local') {\n if (operation === 'update') {\n // Unawaited promise\n void purge({ doc, endpoint, operation, req })\n }\n }\n return doc\n }\n\nexport const getCacheUploadsAfterDeleteHook =\n ({ endpoint }: Args): CollectionAfterDeleteHook =>\n ({ doc, req }) => {\n if (!req || !process.env.PAYLOAD_CLOUD_CACHE_KEY) {\n return doc\n }\n\n const { payloadAPI } = req\n\n // WARNING:\n // TODO: Test this for 3.0\n if (payloadAPI !== 'local') {\n // Unawaited promise\n void purge({ doc, endpoint, operation: 'delete', req })\n }\n return doc\n }\n\ntype PurgeRequest = {\n doc: any\n endpoint: string\n operation: string\n req: PayloadRequest\n}\n\nasync function purge({ doc, endpoint, operation, req }: PurgeRequest) {\n const filePath = doc.url\n\n if (!filePath) {\n req.payload.logger.error({\n msg: 'No url found on doc',\n project: {\n id: process.env.PAYLOAD_CLOUD_PROJECT_ID,\n },\n })\n return\n }\n\n const body = {\n cacheKey: process.env.PAYLOAD_CLOUD_CACHE_KEY,\n filepath: doc.url,\n projectID: process.env.PAYLOAD_CLOUD_PROJECT_ID,\n }\n req.payload.logger.debug({\n filepath: doc.url,\n msg: 'Attempting to purge cache',\n operation,\n project: {\n id: process.env.PAYLOAD_CLOUD_PROJECT_ID,\n },\n })\n\n try {\n const purgeRes = await fetch(`${endpoint}/api/purge-cache`, {\n body: JSON.stringify({\n ...body,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n req.payload.logger.debug({\n msg: 'Purge cache result',\n operation,\n statusCode: purgeRes.status,\n })\n } catch (err: unknown) {\n req.payload.logger.error({ body, err, msg: '/purge-cache call failed' })\n }\n}\n"],"names":["getCacheUploadsAfterChangeHook","endpoint","doc","operation","req","process","env","PAYLOAD_CLOUD_CACHE_KEY","payloadAPI","purge","getCacheUploadsAfterDeleteHook","filePath","url","payload","logger","error","msg","project","id","PAYLOAD_CLOUD_PROJECT_ID","body","cacheKey","filepath","projectID","debug","purgeRes","fetch","JSON","stringify","headers","method","statusCode","status","err"],"mappings":"AAMA,OAAO,MAAMA,iCACX,CAAC,EAAEC,QAAQ,EAAQ,GACnB,CAAC,EAAEC,GAAG,EAAEC,SAAS,EAAEC,GAAG,EAAE;QACtB,IAAI,CAACA,OAAO,CAACC,QAAQC,GAAG,CAACC,uBAAuB,EAAE;YAChD,OAAOL;QACT;QAEA,WAAW;QACX,0BAA0B;QAC1B,MAAM,EAAEM,UAAU,EAAE,GAAGJ;QACvB,IAAII,eAAe,SAAS;YAC1B,IAAIL,cAAc,UAAU;gBAC1B,oBAAoB;gBACpB,KAAKM,MAAM;oBAAEP;oBAAKD;oBAAUE;oBAAWC;gBAAI;YAC7C;QACF;QACA,OAAOF;IACT,EAAC;AAEH,OAAO,MAAMQ,iCACX,CAAC,EAAET,QAAQ,EAAQ,GACnB,CAAC,EAAEC,GAAG,EAAEE,GAAG,EAAE;QACX,IAAI,CAACA,OAAO,CAACC,QAAQC,GAAG,CAACC,uBAAuB,EAAE;YAChD,OAAOL;QACT;QAEA,MAAM,EAAEM,UAAU,EAAE,GAAGJ;QAEvB,WAAW;QACX,0BAA0B;QAC1B,IAAII,eAAe,SAAS;YAC1B,oBAAoB;YACpB,KAAKC,MAAM;gBAAEP;gBAAKD;gBAAUE,WAAW;gBAAUC;YAAI;QACvD;QACA,OAAOF;IACT,EAAC;AASH,eAAeO,MAAM,EAAEP,GAAG,EAAED,QAAQ,EAAEE,SAAS,EAAEC,GAAG,EAAgB;IAClE,MAAMO,WAAWT,IAAIU,GAAG;IAExB,IAAI,CAACD,UAAU;QACbP,IAAIS,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;YACvBC,KAAK;YACLC,SAAS;gBACPC,IAAIb,QAAQC,GAAG,CAACa,wBAAwB;YAC1C;QACF;QACA;IACF;IAEA,MAAMC,OAAO;QACXC,UAAUhB,QAAQC,GAAG,CAACC,uBAAuB;QAC7Ce,UAAUpB,IAAIU,GAAG;QACjBW,WAAWlB,QAAQC,GAAG,CAACa,wBAAwB;IACjD;IACAf,IAAIS,OAAO,CAACC,MAAM,CAACU,KAAK,CAAC;QACvBF,UAAUpB,IAAIU,GAAG;QACjBI,KAAK;QACLb;QACAc,SAAS;YACPC,IAAIb,QAAQC,GAAG,CAACa,wBAAwB;QAC1C;IACF;IAEA,IAAI;QACF,MAAMM,WAAW,MAAMC,MAAM,CAAC,EAAEzB,SAAS,gBAAgB,CAAC,EAAE;YAC1DmB,MAAMO,KAAKC,SAAS,CAAC;gBACnB,GAAGR,IAAI;YACT;YACAS,SAAS;gBACP,gBAAgB;YAClB;YACAC,QAAQ;QACV;QAEA1B,IAAIS,OAAO,CAACC,MAAM,CAACU,KAAK,CAAC;YACvBR,KAAK;YACLb;YACA4B,YAAYN,SAASO,MAAM;QAC7B;IACF,EAAE,OAAOC,KAAc;QACrB7B,IAAIS,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;YAAEK;YAAMa;YAAKjB,KAAK;QAA2B;IACxE;AACF"}
1
+ {"version":3,"sources":["../../src/hooks/uploadCache.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, PayloadRequest } from 'payload'\n\ninterface Args {\n endpoint: string\n}\n\nexport const getCacheUploadsAfterChangeHook =\n ({ endpoint }: Args): CollectionAfterChangeHook =>\n ({ doc, operation, req }) => {\n if (!req || !process.env.PAYLOAD_CLOUD_CACHE_KEY) {\n return doc\n }\n\n // WARNING:\n // TODO: Test this for 3.0\n const { payloadAPI } = req\n if (payloadAPI !== 'local') {\n if (operation === 'update') {\n // Unawaited promise\n void purge({ doc, endpoint, operation, req })\n }\n }\n return doc\n }\n\nexport const getCacheUploadsAfterDeleteHook =\n ({ endpoint }: Args): CollectionAfterDeleteHook =>\n ({ doc, req }) => {\n if (!req || !process.env.PAYLOAD_CLOUD_CACHE_KEY) {\n return doc\n }\n\n const { payloadAPI } = req\n\n // WARNING:\n // TODO: Test this for 3.0\n if (payloadAPI !== 'local') {\n // Unawaited promise\n void purge({ doc, endpoint, operation: 'delete', req })\n }\n return doc\n }\n\ntype PurgeRequest = {\n doc: any\n endpoint: string\n operation: string\n req: PayloadRequest\n}\n\nasync function purge({ doc, endpoint, operation, req }: PurgeRequest) {\n const filePath = doc.url\n\n if (!filePath) {\n req.payload.logger.error({\n msg: 'No url found on doc',\n project: {\n id: process.env.PAYLOAD_CLOUD_PROJECT_ID,\n },\n })\n return\n }\n\n const body = {\n cacheKey: process.env.PAYLOAD_CLOUD_CACHE_KEY,\n filepath: doc.url,\n projectID: process.env.PAYLOAD_CLOUD_PROJECT_ID,\n }\n req.payload.logger.debug({\n filepath: doc.url,\n msg: 'Attempting to purge cache',\n operation,\n project: {\n id: process.env.PAYLOAD_CLOUD_PROJECT_ID,\n },\n })\n\n try {\n const purgeRes = await fetch(`${endpoint}/api/purge-cache`, {\n body: JSON.stringify({\n ...body,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n req.payload.logger.debug({\n msg: 'Purge cache result',\n operation,\n statusCode: purgeRes.status,\n })\n } catch (err: unknown) {\n req.payload.logger.error({ body, err, msg: '/purge-cache call failed' })\n }\n}\n"],"names":["getCacheUploadsAfterChangeHook","endpoint","doc","operation","req","process","env","PAYLOAD_CLOUD_CACHE_KEY","payloadAPI","purge","getCacheUploadsAfterDeleteHook","filePath","url","payload","logger","error","msg","project","id","PAYLOAD_CLOUD_PROJECT_ID","body","cacheKey","filepath","projectID","debug","purgeRes","fetch","JSON","stringify","headers","method","statusCode","status","err"],"mappings":"AAMA,OAAO,MAAMA,iCACX,CAAC,EAAEC,QAAQ,EAAQ,GACnB,CAAC,EAAEC,GAAG,EAAEC,SAAS,EAAEC,GAAG,EAAE;QACtB,IAAI,CAACA,OAAO,CAACC,QAAQC,GAAG,CAACC,uBAAuB,EAAE;YAChD,OAAOL;QACT;QAEA,WAAW;QACX,0BAA0B;QAC1B,MAAM,EAAEM,UAAU,EAAE,GAAGJ;QACvB,IAAII,eAAe,SAAS;YAC1B,IAAIL,cAAc,UAAU;gBAC1B,oBAAoB;gBACpB,KAAKM,MAAM;oBAAEP;oBAAKD;oBAAUE;oBAAWC;gBAAI;YAC7C;QACF;QACA,OAAOF;IACT,EAAC;AAEH,OAAO,MAAMQ,iCACX,CAAC,EAAET,QAAQ,EAAQ,GACnB,CAAC,EAAEC,GAAG,EAAEE,GAAG,EAAE;QACX,IAAI,CAACA,OAAO,CAACC,QAAQC,GAAG,CAACC,uBAAuB,EAAE;YAChD,OAAOL;QACT;QAEA,MAAM,EAAEM,UAAU,EAAE,GAAGJ;QAEvB,WAAW;QACX,0BAA0B;QAC1B,IAAII,eAAe,SAAS;YAC1B,oBAAoB;YACpB,KAAKC,MAAM;gBAAEP;gBAAKD;gBAAUE,WAAW;gBAAUC;YAAI;QACvD;QACA,OAAOF;IACT,EAAC;AASH,eAAeO,MAAM,EAAEP,GAAG,EAAED,QAAQ,EAAEE,SAAS,EAAEC,GAAG,EAAgB;IAClE,MAAMO,WAAWT,IAAIU,GAAG;IAExB,IAAI,CAACD,UAAU;QACbP,IAAIS,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;YACvBC,KAAK;YACLC,SAAS;gBACPC,IAAIb,QAAQC,GAAG,CAACa,wBAAwB;YAC1C;QACF;QACA;IACF;IAEA,MAAMC,OAAO;QACXC,UAAUhB,QAAQC,GAAG,CAACC,uBAAuB;QAC7Ce,UAAUpB,IAAIU,GAAG;QACjBW,WAAWlB,QAAQC,GAAG,CAACa,wBAAwB;IACjD;IACAf,IAAIS,OAAO,CAACC,MAAM,CAACU,KAAK,CAAC;QACvBF,UAAUpB,IAAIU,GAAG;QACjBI,KAAK;QACLb;QACAc,SAAS;YACPC,IAAIb,QAAQC,GAAG,CAACa,wBAAwB;QAC1C;IACF;IAEA,IAAI;QACF,MAAMM,WAAW,MAAMC,MAAM,GAAGzB,SAAS,gBAAgB,CAAC,EAAE;YAC1DmB,MAAMO,KAAKC,SAAS,CAAC;gBACnB,GAAGR,IAAI;YACT;YACAS,SAAS;gBACP,gBAAgB;YAClB;YACAC,QAAQ;QACV;QAEA1B,IAAIS,OAAO,CAACC,MAAM,CAACU,KAAK,CAAC;YACvBR,KAAK;YACLb;YACA4B,YAAYN,SAASO,MAAM;QAC7B;IACF,EAAE,OAAOC,KAAc;QACrB7B,IAAIS,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;YAAEK;YAAMa;YAAKjB,KAAK;QAA2B;IACxE;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/staticHandler.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport type { CollectionCachingConfig, PluginOptions, StaticHandler } from './types.js'\n\nimport { createKey } from './utilities/createKey.js'\nimport { getStorageClient } from './utilities/getStorageClient.js'\n\ninterface Args {\n cachingOptions?: PluginOptions['uploadCaching']\n collection: CollectionConfig\n}\n\n// Convert a stream into a promise that resolves with a Buffer\nconst streamToBuffer = async (readableStream) => {\n const chunks = []\n for await (const chunk of readableStream) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk)\n }\n return Buffer.concat(chunks)\n}\n\nexport const getStaticHandler = ({ cachingOptions, collection }: Args): StaticHandler => {\n let maxAge = 86400 // 24 hours default\n let collCacheConfig: CollectionCachingConfig | undefined\n if (cachingOptions !== false) {\n // Set custom maxAge for all collections\n maxAge = cachingOptions?.maxAge || maxAge\n collCacheConfig = cachingOptions?.collections?.[collection.slug] || {}\n }\n\n // Set maxAge using collection-specific override\n maxAge = collCacheConfig?.maxAge || maxAge\n\n const cachingEnabled =\n cachingOptions !== false &&\n !!process.env.PAYLOAD_CLOUD_CACHE_KEY &&\n collCacheConfig?.enabled !== false\n\n return async (req, { params }) => {\n try {\n const { identityID, storageClient } = await getStorageClient()\n\n const Key = createKey({\n collection: collection.slug,\n filename: params.filename,\n identityID,\n })\n\n const object = await storageClient.getObject({\n Bucket: process.env.PAYLOAD_CLOUD_BUCKET,\n Key,\n })\n\n if (!object.Body) {\n return new Response(null, { status: 404, statusText: 'Not Found' })\n }\n\n const bodyBuffer = await streamToBuffer(object.Body)\n\n return new Response(bodyBuffer, {\n headers: new Headers({\n 'Content-Length': String(object.ContentLength),\n 'Content-Type': object.ContentType,\n ...(cachingEnabled && { 'Cache-Control': `public, max-age=${maxAge}` }),\n ETag: object.ETag,\n }),\n status: 200,\n })\n } catch (err: unknown) {\n req.payload.logger.error({ err, msg: 'Error getting file from cloud storage' })\n return new Response('Internal Server Error', { status: 500 })\n }\n }\n}\n"],"names":["createKey","getStorageClient","streamToBuffer","readableStream","chunks","chunk","push","Buffer","from","concat","getStaticHandler","cachingOptions","collection","maxAge","collCacheConfig","collections","slug","cachingEnabled","process","env","PAYLOAD_CLOUD_CACHE_KEY","enabled","req","params","identityID","storageClient","Key","filename","object","getObject","Bucket","PAYLOAD_CLOUD_BUCKET","Body","Response","status","statusText","bodyBuffer","headers","Headers","String","ContentLength","ContentType","ETag","err","payload","logger","error","msg"],"mappings":"AAIA,SAASA,SAAS,QAAQ,2BAA0B;AACpD,SAASC,gBAAgB,QAAQ,kCAAiC;AAOlE,8DAA8D;AAC9D,MAAMC,iBAAiB,OAAOC;IAC5B,MAAMC,SAAS,EAAE;IACjB,WAAW,MAAMC,SAASF,eAAgB;QACxCC,OAAOE,IAAI,CAAC,OAAOD,UAAU,WAAWE,OAAOC,IAAI,CAACH,SAASA;IAC/D;IACA,OAAOE,OAAOE,MAAM,CAACL;AACvB;AAEA,OAAO,MAAMM,mBAAmB,CAAC,EAAEC,cAAc,EAAEC,UAAU,EAAQ;IACnE,IAAIC,SAAS,MAAM,mBAAmB;;IACtC,IAAIC;IACJ,IAAIH,mBAAmB,OAAO;QAC5B,wCAAwC;QACxCE,SAASF,gBAAgBE,UAAUA;QACnCC,kBAAkBH,gBAAgBI,aAAa,CAACH,WAAWI,IAAI,CAAC,IAAI,CAAC;IACvE;IAEA,gDAAgD;IAChDH,SAASC,iBAAiBD,UAAUA;IAEpC,MAAMI,iBACJN,mBAAmB,SACnB,CAAC,CAACO,QAAQC,GAAG,CAACC,uBAAuB,IACrCN,iBAAiBO,YAAY;IAE/B,OAAO,OAAOC,KAAK,EAAEC,MAAM,EAAE;QAC3B,IAAI;YACF,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAG,MAAMxB;YAE5C,MAAMyB,MAAM1B,UAAU;gBACpBY,YAAYA,WAAWI,IAAI;gBAC3BW,UAAUJ,OAAOI,QAAQ;gBACzBH;YACF;YAEA,MAAMI,SAAS,MAAMH,cAAcI,SAAS,CAAC;gBAC3CC,QAAQZ,QAAQC,GAAG,CAACY,oBAAoB;gBACxCL;YACF;YAEA,IAAI,CAACE,OAAOI,IAAI,EAAE;gBAChB,OAAO,IAAIC,SAAS,MAAM;oBAAEC,QAAQ;oBAAKC,YAAY;gBAAY;YACnE;YAEA,MAAMC,aAAa,MAAMlC,eAAe0B,OAAOI,IAAI;YAEnD,OAAO,IAAIC,SAASG,YAAY;gBAC9BC,SAAS,IAAIC,QAAQ;oBACnB,kBAAkBC,OAAOX,OAAOY,aAAa;oBAC7C,gBAAgBZ,OAAOa,WAAW;oBAClC,GAAIxB,kBAAkB;wBAAE,iBAAiB,CAAC,gBAAgB,EAAEJ,OAAO,CAAC;oBAAC,CAAC;oBACtE6B,MAAMd,OAAOc,IAAI;gBACnB;gBACAR,QAAQ;YACV;QACF,EAAE,OAAOS,KAAc;YACrBrB,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;gBAAEH;gBAAKI,KAAK;YAAwC;YAC7E,OAAO,IAAId,SAAS,yBAAyB;gBAAEC,QAAQ;YAAI;QAC7D;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../src/staticHandler.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport type { CollectionCachingConfig, PluginOptions, StaticHandler } from './types.js'\n\nimport { createKey } from './utilities/createKey.js'\nimport { getStorageClient } from './utilities/getStorageClient.js'\n\ninterface Args {\n cachingOptions?: PluginOptions['uploadCaching']\n collection: CollectionConfig\n}\n\n// Convert a stream into a promise that resolves with a Buffer\nconst streamToBuffer = async (readableStream) => {\n const chunks = []\n for await (const chunk of readableStream) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk)\n }\n return Buffer.concat(chunks)\n}\n\nexport const getStaticHandler = ({ cachingOptions, collection }: Args): StaticHandler => {\n let maxAge = 86400 // 24 hours default\n let collCacheConfig: CollectionCachingConfig | undefined\n if (cachingOptions !== false) {\n // Set custom maxAge for all collections\n maxAge = cachingOptions?.maxAge || maxAge\n collCacheConfig = cachingOptions?.collections?.[collection.slug] || {}\n }\n\n // Set maxAge using collection-specific override\n maxAge = collCacheConfig?.maxAge || maxAge\n\n const cachingEnabled =\n cachingOptions !== false &&\n !!process.env.PAYLOAD_CLOUD_CACHE_KEY &&\n collCacheConfig?.enabled !== false\n\n return async (req, { params }) => {\n try {\n const { identityID, storageClient } = await getStorageClient()\n\n const Key = createKey({\n collection: collection.slug,\n filename: params.filename,\n identityID,\n })\n\n const object = await storageClient.getObject({\n Bucket: process.env.PAYLOAD_CLOUD_BUCKET,\n Key,\n })\n\n if (!object.Body) {\n return new Response(null, { status: 404, statusText: 'Not Found' })\n }\n\n const bodyBuffer = await streamToBuffer(object.Body)\n\n return new Response(bodyBuffer, {\n headers: new Headers({\n 'Content-Length': String(object.ContentLength),\n 'Content-Type': object.ContentType,\n ...(cachingEnabled && { 'Cache-Control': `public, max-age=${maxAge}` }),\n ETag: object.ETag,\n }),\n status: 200,\n })\n } catch (err: unknown) {\n req.payload.logger.error({ err, msg: 'Error getting file from cloud storage' })\n return new Response('Internal Server Error', { status: 500 })\n }\n }\n}\n"],"names":["createKey","getStorageClient","streamToBuffer","readableStream","chunks","chunk","push","Buffer","from","concat","getStaticHandler","cachingOptions","collection","maxAge","collCacheConfig","collections","slug","cachingEnabled","process","env","PAYLOAD_CLOUD_CACHE_KEY","enabled","req","params","identityID","storageClient","Key","filename","object","getObject","Bucket","PAYLOAD_CLOUD_BUCKET","Body","Response","status","statusText","bodyBuffer","headers","Headers","String","ContentLength","ContentType","ETag","err","payload","logger","error","msg"],"mappings":"AAIA,SAASA,SAAS,QAAQ,2BAA0B;AACpD,SAASC,gBAAgB,QAAQ,kCAAiC;AAOlE,8DAA8D;AAC9D,MAAMC,iBAAiB,OAAOC;IAC5B,MAAMC,SAAS,EAAE;IACjB,WAAW,MAAMC,SAASF,eAAgB;QACxCC,OAAOE,IAAI,CAAC,OAAOD,UAAU,WAAWE,OAAOC,IAAI,CAACH,SAASA;IAC/D;IACA,OAAOE,OAAOE,MAAM,CAACL;AACvB;AAEA,OAAO,MAAMM,mBAAmB,CAAC,EAAEC,cAAc,EAAEC,UAAU,EAAQ;IACnE,IAAIC,SAAS,MAAM,mBAAmB;;IACtC,IAAIC;IACJ,IAAIH,mBAAmB,OAAO;QAC5B,wCAAwC;QACxCE,SAASF,gBAAgBE,UAAUA;QACnCC,kBAAkBH,gBAAgBI,aAAa,CAACH,WAAWI,IAAI,CAAC,IAAI,CAAC;IACvE;IAEA,gDAAgD;IAChDH,SAASC,iBAAiBD,UAAUA;IAEpC,MAAMI,iBACJN,mBAAmB,SACnB,CAAC,CAACO,QAAQC,GAAG,CAACC,uBAAuB,IACrCN,iBAAiBO,YAAY;IAE/B,OAAO,OAAOC,KAAK,EAAEC,MAAM,EAAE;QAC3B,IAAI;YACF,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAG,MAAMxB;YAE5C,MAAMyB,MAAM1B,UAAU;gBACpBY,YAAYA,WAAWI,IAAI;gBAC3BW,UAAUJ,OAAOI,QAAQ;gBACzBH;YACF;YAEA,MAAMI,SAAS,MAAMH,cAAcI,SAAS,CAAC;gBAC3CC,QAAQZ,QAAQC,GAAG,CAACY,oBAAoB;gBACxCL;YACF;YAEA,IAAI,CAACE,OAAOI,IAAI,EAAE;gBAChB,OAAO,IAAIC,SAAS,MAAM;oBAAEC,QAAQ;oBAAKC,YAAY;gBAAY;YACnE;YAEA,MAAMC,aAAa,MAAMlC,eAAe0B,OAAOI,IAAI;YAEnD,OAAO,IAAIC,SAASG,YAAY;gBAC9BC,SAAS,IAAIC,QAAQ;oBACnB,kBAAkBC,OAAOX,OAAOY,aAAa;oBAC7C,gBAAgBZ,OAAOa,WAAW;oBAClC,GAAIxB,kBAAkB;wBAAE,iBAAiB,CAAC,gBAAgB,EAAEJ,QAAQ;oBAAC,CAAC;oBACtE6B,MAAMd,OAAOc,IAAI;gBACnB;gBACAR,QAAQ;YACV;QACF,EAAE,OAAOS,KAAc;YACrBrB,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;gBAAEH;gBAAKI,KAAK;YAAwC;YAC7E,OAAO,IAAId,SAAS,yBAAyB;gBAAEC,QAAQ;YAAI;QAC7D;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/createKey.ts"],"sourcesContent":["interface Args {\n collection: string\n filename: string\n identityID: string\n}\n\nexport const createKey = ({ collection, filename, identityID }: Args): string =>\n `${identityID}/${process.env.PAYLOAD_CLOUD_ENVIRONMENT}/${collection}/${filename}`\n"],"names":["createKey","collection","filename","identityID","process","env","PAYLOAD_CLOUD_ENVIRONMENT"],"mappings":"AAMA,OAAO,MAAMA,YAAY,CAAC,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,UAAU,EAAQ,GAClE,CAAC,EAAEA,WAAW,CAAC,EAAEC,QAAQC,GAAG,CAACC,yBAAyB,CAAC,CAAC,EAAEL,WAAW,CAAC,EAAEC,SAAS,CAAC,CAAA"}
1
+ {"version":3,"sources":["../../src/utilities/createKey.ts"],"sourcesContent":["interface Args {\n collection: string\n filename: string\n identityID: string\n}\n\nexport const createKey = ({ collection, filename, identityID }: Args): string =>\n `${identityID}/${process.env.PAYLOAD_CLOUD_ENVIRONMENT}/${collection}/${filename}`\n"],"names":["createKey","collection","filename","identityID","process","env","PAYLOAD_CLOUD_ENVIRONMENT"],"mappings":"AAMA,OAAO,MAAMA,YAAY,CAAC,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,UAAU,EAAQ,GAClE,GAAGA,WAAW,CAAC,EAAEC,QAAQC,GAAG,CAACC,yBAAyB,CAAC,CAAC,EAAEL,WAAW,CAAC,EAAEC,UAAU,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/getIncomingFiles.ts"],"sourcesContent":["import type { FileData, PayloadRequest } from 'payload'\n\nimport type { File } from '../types.js'\n\nexport function getIncomingFiles({\n data,\n req,\n}: {\n data: Partial<FileData>\n req: PayloadRequest\n}): File[] {\n const file = req.file\n\n let files: File[] = []\n\n if (file && data.filename && data.mimeType) {\n const mainFile: File = {\n buffer: file.data,\n filename: data.filename,\n filesize: file.size,\n mimeType: data.mimeType,\n tempFilePath: file.tempFilePath,\n }\n\n files = [mainFile]\n\n if (data?.sizes) {\n Object.entries(data.sizes).forEach(([key, resizedFileData]) => {\n if (req.payloadUploadSizes?.[key] && data.mimeType) {\n files = files.concat([\n {\n buffer: req.payloadUploadSizes[key],\n filename: `${resizedFileData.filename}`,\n filesize: req.payloadUploadSizes[key].length,\n mimeType: data.mimeType,\n },\n ])\n }\n })\n }\n }\n\n return files\n}\n"],"names":["getIncomingFiles","data","req","file","files","filename","mimeType","mainFile","buffer","filesize","size","tempFilePath","sizes","Object","entries","forEach","key","resizedFileData","payloadUploadSizes","concat","length"],"mappings":"AAIA,OAAO,SAASA,iBAAiB,EAC/BC,IAAI,EACJC,GAAG,EAIJ;IACC,MAAMC,OAAOD,IAAIC,IAAI;IAErB,IAAIC,QAAgB,EAAE;IAEtB,IAAID,QAAQF,KAAKI,QAAQ,IAAIJ,KAAKK,QAAQ,EAAE;QAC1C,MAAMC,WAAiB;YACrBC,QAAQL,KAAKF,IAAI;YACjBI,UAAUJ,KAAKI,QAAQ;YACvBI,UAAUN,KAAKO,IAAI;YACnBJ,UAAUL,KAAKK,QAAQ;YACvBK,cAAcR,KAAKQ,YAAY;QACjC;QAEAP,QAAQ;YAACG;SAAS;QAElB,IAAIN,MAAMW,OAAO;YACfC,OAAOC,OAAO,CAACb,KAAKW,KAAK,EAAEG,OAAO,CAAC,CAAC,CAACC,KAAKC,gBAAgB;gBACxD,IAAIf,IAAIgB,kBAAkB,EAAE,CAACF,IAAI,IAAIf,KAAKK,QAAQ,EAAE;oBAClDF,QAAQA,MAAMe,MAAM,CAAC;wBACnB;4BACEX,QAAQN,IAAIgB,kBAAkB,CAACF,IAAI;4BACnCX,UAAU,CAAC,EAAEY,gBAAgBZ,QAAQ,CAAC,CAAC;4BACvCI,UAAUP,IAAIgB,kBAAkB,CAACF,IAAI,CAACI,MAAM;4BAC5Cd,UAAUL,KAAKK,QAAQ;wBACzB;qBACD;gBACH;YACF;QACF;IACF;IAEA,OAAOF;AACT"}
1
+ {"version":3,"sources":["../../src/utilities/getIncomingFiles.ts"],"sourcesContent":["import type { FileData, PayloadRequest } from 'payload'\n\nimport type { File } from '../types.js'\n\nexport function getIncomingFiles({\n data,\n req,\n}: {\n data: Partial<FileData>\n req: PayloadRequest\n}): File[] {\n const file = req.file\n\n let files: File[] = []\n\n if (file && data.filename && data.mimeType) {\n const mainFile: File = {\n buffer: file.data,\n filename: data.filename,\n filesize: file.size,\n mimeType: data.mimeType,\n tempFilePath: file.tempFilePath,\n }\n\n files = [mainFile]\n\n if (data?.sizes) {\n Object.entries(data.sizes).forEach(([key, resizedFileData]) => {\n if (req.payloadUploadSizes?.[key] && data.mimeType) {\n files = files.concat([\n {\n buffer: req.payloadUploadSizes[key],\n filename: `${resizedFileData.filename}`,\n filesize: req.payloadUploadSizes[key].length,\n mimeType: data.mimeType,\n },\n ])\n }\n })\n }\n }\n\n return files\n}\n"],"names":["getIncomingFiles","data","req","file","files","filename","mimeType","mainFile","buffer","filesize","size","tempFilePath","sizes","Object","entries","forEach","key","resizedFileData","payloadUploadSizes","concat","length"],"mappings":"AAIA,OAAO,SAASA,iBAAiB,EAC/BC,IAAI,EACJC,GAAG,EAIJ;IACC,MAAMC,OAAOD,IAAIC,IAAI;IAErB,IAAIC,QAAgB,EAAE;IAEtB,IAAID,QAAQF,KAAKI,QAAQ,IAAIJ,KAAKK,QAAQ,EAAE;QAC1C,MAAMC,WAAiB;YACrBC,QAAQL,KAAKF,IAAI;YACjBI,UAAUJ,KAAKI,QAAQ;YACvBI,UAAUN,KAAKO,IAAI;YACnBJ,UAAUL,KAAKK,QAAQ;YACvBK,cAAcR,KAAKQ,YAAY;QACjC;QAEAP,QAAQ;YAACG;SAAS;QAElB,IAAIN,MAAMW,OAAO;YACfC,OAAOC,OAAO,CAACb,KAAKW,KAAK,EAAEG,OAAO,CAAC,CAAC,CAACC,KAAKC,gBAAgB;gBACxD,IAAIf,IAAIgB,kBAAkB,EAAE,CAACF,IAAI,IAAIf,KAAKK,QAAQ,EAAE;oBAClDF,QAAQA,MAAMe,MAAM,CAAC;wBACnB;4BACEX,QAAQN,IAAIgB,kBAAkB,CAACF,IAAI;4BACnCX,UAAU,GAAGY,gBAAgBZ,QAAQ,EAAE;4BACvCI,UAAUP,IAAIgB,kBAAkB,CAACF,IAAI,CAACI,MAAM;4BAC5Cd,UAAUL,KAAKK,QAAQ;wBACzB;qBACD;gBACH;YACF;QACF;IACF;IAEA,OAAOF;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/getStorageClient.ts"],"sourcesContent":["import type { CognitoUserSession } from 'amazon-cognito-identity-js'\n\nimport { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'\nimport * as AWS from '@aws-sdk/client-s3'\nimport { fromCognitoIdentityPool } from '@aws-sdk/credential-providers'\n\nimport { authAsCognitoUser } from './authAsCognitoUser.js'\n\nexport type GetStorageClient = () => Promise<{\n identityID: string\n storageClient: AWS.S3\n}>\n\nlet storageClient: AWS.S3 | null = null\nlet session: CognitoUserSession | null = null\nlet identityID: string\n\nexport const getStorageClient: GetStorageClient = async () => {\n if (storageClient && session?.isValid()) {\n return {\n identityID,\n storageClient,\n }\n }\n\n session = await authAsCognitoUser(\n process.env.PAYLOAD_CLOUD_PROJECT_ID,\n process.env.PAYLOAD_CLOUD_COGNITO_PASSWORD,\n )\n\n const cognitoIdentity = new CognitoIdentityClient({\n credentials: fromCognitoIdentityPool({\n clientConfig: {\n region: 'us-east-1',\n },\n identityPoolId: process.env.PAYLOAD_CLOUD_COGNITO_IDENTITY_POOL_ID,\n logins: {\n [`cognito-idp.us-east-1.amazonaws.com/${process.env.PAYLOAD_CLOUD_COGNITO_USER_POOL_ID}`]:\n session.getIdToken().getJwtToken(),\n },\n }),\n })\n\n const credentials = await cognitoIdentity.config.credentials()\n\n // @ts-expect-error - Incorrect AWS types\n identityID = credentials.identityId\n\n storageClient = new AWS.S3({\n credentials,\n region: process.env.PAYLOAD_CLOUD_BUCKET_REGION,\n })\n\n return {\n identityID,\n storageClient,\n }\n}\n"],"names":["CognitoIdentityClient","AWS","fromCognitoIdentityPool","authAsCognitoUser","storageClient","session","identityID","getStorageClient","isValid","process","env","PAYLOAD_CLOUD_PROJECT_ID","PAYLOAD_CLOUD_COGNITO_PASSWORD","cognitoIdentity","credentials","clientConfig","region","identityPoolId","PAYLOAD_CLOUD_COGNITO_IDENTITY_POOL_ID","logins","PAYLOAD_CLOUD_COGNITO_USER_POOL_ID","getIdToken","getJwtToken","config","identityId","S3","PAYLOAD_CLOUD_BUCKET_REGION"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,mCAAkC;AACxE,YAAYC,SAAS,qBAAoB;AACzC,SAASC,uBAAuB,QAAQ,gCAA+B;AAEvE,SAASC,iBAAiB,QAAQ,yBAAwB;AAO1D,IAAIC,gBAA+B;AACnC,IAAIC,UAAqC;AACzC,IAAIC;AAEJ,OAAO,MAAMC,mBAAqC;IAChD,IAAIH,iBAAiBC,SAASG,WAAW;QACvC,OAAO;YACLF;YACAF;QACF;IACF;IAEAC,UAAU,MAAMF,kBACdM,QAAQC,GAAG,CAACC,wBAAwB,EACpCF,QAAQC,GAAG,CAACE,8BAA8B;IAG5C,MAAMC,kBAAkB,IAAIb,sBAAsB;QAChDc,aAAaZ,wBAAwB;YACnCa,cAAc;gBACZC,QAAQ;YACV;YACAC,gBAAgBR,QAAQC,GAAG,CAACQ,sCAAsC;YAClEC,QAAQ;gBACN,CAAC,CAAC,oCAAoC,EAAEV,QAAQC,GAAG,CAACU,kCAAkC,CAAC,CAAC,CAAC,EACvFf,QAAQgB,UAAU,GAAGC,WAAW;YACpC;QACF;IACF;IAEA,MAAMR,cAAc,MAAMD,gBAAgBU,MAAM,CAACT,WAAW;IAE5D,yCAAyC;IACzCR,aAAaQ,YAAYU,UAAU;IAEnCpB,gBAAgB,IAAIH,IAAIwB,EAAE,CAAC;QACzBX;QACAE,QAAQP,QAAQC,GAAG,CAACgB,2BAA2B;IACjD;IAEA,OAAO;QACLpB;QACAF;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/getStorageClient.ts"],"sourcesContent":["import type { CognitoUserSession } from 'amazon-cognito-identity-js'\n\nimport { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'\nimport * as AWS from '@aws-sdk/client-s3'\nimport { fromCognitoIdentityPool } from '@aws-sdk/credential-providers'\n\nimport { authAsCognitoUser } from './authAsCognitoUser.js'\n\nexport type GetStorageClient = () => Promise<{\n identityID: string\n storageClient: AWS.S3\n}>\n\nlet storageClient: AWS.S3 | null = null\nlet session: CognitoUserSession | null = null\nlet identityID: string\n\nexport const getStorageClient: GetStorageClient = async () => {\n if (storageClient && session?.isValid()) {\n return {\n identityID,\n storageClient,\n }\n }\n\n session = await authAsCognitoUser(\n process.env.PAYLOAD_CLOUD_PROJECT_ID,\n process.env.PAYLOAD_CLOUD_COGNITO_PASSWORD,\n )\n\n const cognitoIdentity = new CognitoIdentityClient({\n credentials: fromCognitoIdentityPool({\n clientConfig: {\n region: 'us-east-1',\n },\n identityPoolId: process.env.PAYLOAD_CLOUD_COGNITO_IDENTITY_POOL_ID,\n logins: {\n [`cognito-idp.us-east-1.amazonaws.com/${process.env.PAYLOAD_CLOUD_COGNITO_USER_POOL_ID}`]:\n session.getIdToken().getJwtToken(),\n },\n }),\n })\n\n const credentials = await cognitoIdentity.config.credentials()\n\n // @ts-expect-error - Incorrect AWS types\n identityID = credentials.identityId\n\n storageClient = new AWS.S3({\n credentials,\n region: process.env.PAYLOAD_CLOUD_BUCKET_REGION,\n })\n\n return {\n identityID,\n storageClient,\n }\n}\n"],"names":["CognitoIdentityClient","AWS","fromCognitoIdentityPool","authAsCognitoUser","storageClient","session","identityID","getStorageClient","isValid","process","env","PAYLOAD_CLOUD_PROJECT_ID","PAYLOAD_CLOUD_COGNITO_PASSWORD","cognitoIdentity","credentials","clientConfig","region","identityPoolId","PAYLOAD_CLOUD_COGNITO_IDENTITY_POOL_ID","logins","PAYLOAD_CLOUD_COGNITO_USER_POOL_ID","getIdToken","getJwtToken","config","identityId","S3","PAYLOAD_CLOUD_BUCKET_REGION"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,mCAAkC;AACxE,YAAYC,SAAS,qBAAoB;AACzC,SAASC,uBAAuB,QAAQ,gCAA+B;AAEvE,SAASC,iBAAiB,QAAQ,yBAAwB;AAO1D,IAAIC,gBAA+B;AACnC,IAAIC,UAAqC;AACzC,IAAIC;AAEJ,OAAO,MAAMC,mBAAqC;IAChD,IAAIH,iBAAiBC,SAASG,WAAW;QACvC,OAAO;YACLF;YACAF;QACF;IACF;IAEAC,UAAU,MAAMF,kBACdM,QAAQC,GAAG,CAACC,wBAAwB,EACpCF,QAAQC,GAAG,CAACE,8BAA8B;IAG5C,MAAMC,kBAAkB,IAAIb,sBAAsB;QAChDc,aAAaZ,wBAAwB;YACnCa,cAAc;gBACZC,QAAQ;YACV;YACAC,gBAAgBR,QAAQC,GAAG,CAACQ,sCAAsC;YAClEC,QAAQ;gBACN,CAAC,CAAC,oCAAoC,EAAEV,QAAQC,GAAG,CAACU,kCAAkC,EAAE,CAAC,EACvFf,QAAQgB,UAAU,GAAGC,WAAW;YACpC;QACF;IACF;IAEA,MAAMR,cAAc,MAAMD,gBAAgBU,MAAM,CAACT,WAAW;IAE5D,yCAAyC;IACzCR,aAAaQ,YAAYU,UAAU;IAEnCpB,gBAAgB,IAAIH,IAAIwB,EAAE,CAAC;QACzBX;QACAE,QAAQP,QAAQC,GAAG,CAACgB,2BAA2B;IACjD;IAEA,OAAO;QACLpB;QACAF;IACF;AACF,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/payload-cloud",
3
- "version": "3.2.3-canary.673b4b5",
3
+ "version": "3.4.0",
4
4
  "description": "The official Payload Cloud plugin",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -38,16 +38,16 @@
38
38
  "amazon-cognito-identity-js": "^6.1.2",
39
39
  "nodemailer": "6.9.10",
40
40
  "resend": "^0.17.2",
41
- "@payloadcms/email-nodemailer": "3.2.3-canary.673b4b5"
41
+ "@payloadcms/email-nodemailer": "3.4.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/jest": "29.5.12",
45
45
  "@types/nodemailer": "6.4.14",
46
46
  "ts-jest": "^29.1.0",
47
- "payload": "3.2.3-canary.673b4b5"
47
+ "payload": "3.4.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "payload": "3.2.3-canary.673b4b5"
50
+ "payload": "3.4.0"
51
51
  },
52
52
  "scripts": {
53
53
  "build": "pnpm build:types && pnpm build:swc",