@payloadcms/payload-cloud 4.0.0-internal.77191e5 → 4.0.0-internal.7d5c665

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.
@@ -6,7 +6,7 @@ export const getAfterDeleteHook = ({ collection })=>{
6
6
  const { identityID, storageClient } = await getStorageClient();
7
7
  const filesToDelete = [
8
8
  doc.filename || '',
9
- ...Object.values(doc?.sizes || []).map((resizedFileData)=>resizedFileData.filename).filter((filename)=>filename !== null)
9
+ ...Object.values(doc?.variants || []).map((resizedFileData)=>resizedFileData.filename).filter((filename)=>filename !== null)
10
10
  ];
11
11
  const promises = filesToDelete.map(async (filename)=>{
12
12
  await storageClient.deleteObject({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/afterDelete.ts"],"sourcesContent":["import type { CollectionAfterDeleteHook, CollectionConfig, FileData, TypeWithID } from 'payload'\n\nimport type { TypeWithPrefix } from '../types.js'\n\nimport { createKey } from '../utilities/createKey.js'\nimport { getStorageClient } from '../utilities/getStorageClient.js'\n\ninterface Args {\n collection: CollectionConfig\n}\n\nexport const getAfterDeleteHook = ({\n collection,\n}: Args): CollectionAfterDeleteHook<FileData & TypeWithID & TypeWithPrefix> => {\n return async ({ doc, req }) => {\n try {\n const { identityID, storageClient } = await getStorageClient()\n\n const filesToDelete: string[] = [\n doc.filename || '',\n ...Object.values(doc?.sizes || [])\n .map((resizedFileData) => resizedFileData.filename)\n .filter((filename): filename is string => filename !== null),\n ]\n\n const promises = filesToDelete.map(async (filename) => {\n await storageClient.deleteObject({\n Bucket: process.env.PAYLOAD_CLOUD_BUCKET,\n Key: createKey({ collection: collection.slug, filename, identityID }),\n })\n })\n\n await Promise.all(promises)\n } catch (err: unknown) {\n req.payload.logger.error(\n `There was an error while deleting files corresponding to the ${collection.labels?.singular} with ID ${doc.id}:`,\n )\n req.payload.logger.error(err)\n }\n return doc\n }\n}\n"],"names":["createKey","getStorageClient","getAfterDeleteHook","collection","doc","req","identityID","storageClient","filesToDelete","filename","Object","values","sizes","map","resizedFileData","filter","promises","deleteObject","Bucket","process","env","PAYLOAD_CLOUD_BUCKET","Key","slug","Promise","all","err","payload","logger","error","labels","singular","id"],"mappings":"AAIA,SAASA,SAAS,QAAQ,4BAA2B;AACrD,SAASC,gBAAgB,QAAQ,mCAAkC;AAMnE,OAAO,MAAMC,qBAAqB,CAAC,EACjCC,UAAU,EACL;IACL,OAAO,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;QACxB,IAAI;YACF,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAG,MAAMN;YAE5C,MAAMO,gBAA0B;gBAC9BJ,IAAIK,QAAQ,IAAI;mBACbC,OAAOC,MAAM,CAACP,KAAKQ,SAAS,EAAE,EAC9BC,GAAG,CAAC,CAACC,kBAAoBA,gBAAgBL,QAAQ,EACjDM,MAAM,CAAC,CAACN,WAAiCA,aAAa;aAC1D;YAED,MAAMO,WAAWR,cAAcK,GAAG,CAAC,OAAOJ;gBACxC,MAAMF,cAAcU,YAAY,CAAC;oBAC/BC,QAAQC,QAAQC,GAAG,CAACC,oBAAoB;oBACxCC,KAAKtB,UAAU;wBAAEG,YAAYA,WAAWoB,IAAI;wBAAEd;wBAAUH;oBAAW;gBACrE;YACF;YAEA,MAAMkB,QAAQC,GAAG,CAACT;QACpB,EAAE,OAAOU,KAAc;YACrBrB,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CACtB,CAAC,6DAA6D,EAAE1B,WAAW2B,MAAM,EAAEC,SAAS,SAAS,EAAE3B,IAAI4B,EAAE,CAAC,CAAC,CAAC;YAElH3B,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CAACH;QAC3B;QACA,OAAOtB;IACT;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/hooks/afterDelete.ts"],"sourcesContent":["import type { CollectionAfterDeleteHook, CollectionConfig, FileData, TypeWithID } from 'payload'\n\nimport type { TypeWithPrefix } from '../types.js'\n\nimport { createKey } from '../utilities/createKey.js'\nimport { getStorageClient } from '../utilities/getStorageClient.js'\n\ninterface Args {\n collection: CollectionConfig\n}\n\nexport const getAfterDeleteHook = ({\n collection,\n}: Args): CollectionAfterDeleteHook<FileData & TypeWithID & TypeWithPrefix> => {\n return async ({ doc, req }) => {\n try {\n const { identityID, storageClient } = await getStorageClient()\n\n const filesToDelete: string[] = [\n doc.filename || '',\n ...Object.values(doc?.variants || [])\n .map((resizedFileData) => resizedFileData.filename)\n .filter((filename): filename is string => filename !== null),\n ]\n\n const promises = filesToDelete.map(async (filename) => {\n await storageClient.deleteObject({\n Bucket: process.env.PAYLOAD_CLOUD_BUCKET,\n Key: createKey({ collection: collection.slug, filename, identityID }),\n })\n })\n\n await Promise.all(promises)\n } catch (err: unknown) {\n req.payload.logger.error(\n `There was an error while deleting files corresponding to the ${collection.labels?.singular} with ID ${doc.id}:`,\n )\n req.payload.logger.error(err)\n }\n return doc\n }\n}\n"],"names":["createKey","getStorageClient","getAfterDeleteHook","collection","doc","req","identityID","storageClient","filesToDelete","filename","Object","values","variants","map","resizedFileData","filter","promises","deleteObject","Bucket","process","env","PAYLOAD_CLOUD_BUCKET","Key","slug","Promise","all","err","payload","logger","error","labels","singular","id"],"mappings":"AAIA,SAASA,SAAS,QAAQ,4BAA2B;AACrD,SAASC,gBAAgB,QAAQ,mCAAkC;AAMnE,OAAO,MAAMC,qBAAqB,CAAC,EACjCC,UAAU,EACL;IACL,OAAO,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;QACxB,IAAI;YACF,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAG,MAAMN;YAE5C,MAAMO,gBAA0B;gBAC9BJ,IAAIK,QAAQ,IAAI;mBACbC,OAAOC,MAAM,CAACP,KAAKQ,YAAY,EAAE,EACjCC,GAAG,CAAC,CAACC,kBAAoBA,gBAAgBL,QAAQ,EACjDM,MAAM,CAAC,CAACN,WAAiCA,aAAa;aAC1D;YAED,MAAMO,WAAWR,cAAcK,GAAG,CAAC,OAAOJ;gBACxC,MAAMF,cAAcU,YAAY,CAAC;oBAC/BC,QAAQC,QAAQC,GAAG,CAACC,oBAAoB;oBACxCC,KAAKtB,UAAU;wBAAEG,YAAYA,WAAWoB,IAAI;wBAAEd;wBAAUH;oBAAW;gBACrE;YACF;YAEA,MAAMkB,QAAQC,GAAG,CAACT;QACpB,EAAE,OAAOU,KAAc;YACrBrB,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CACtB,CAAC,6DAA6D,EAAE1B,WAAW2B,MAAM,EAAEC,SAAS,SAAS,EAAE3B,IAAI4B,EAAE,CAAC,CAAC,CAAC;YAElH3B,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CAACH;QAC3B;QACA,OAAOtB;IACT;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,SAAS,CAAA;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAW/C,eAAO,MAAM,oBAAoB,QAAO,MAGvC,CAAA;AAUD,eAAO,MAAM,kBAAkB,mBACZ,aAAa,sBACP,MAAM,KAAG,OAAO,CAAC,MAAM,CAwJ7C,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,SAAS,CAAA;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAW/C,eAAO,MAAM,oBAAoB,QAAO,MAGvC,CAAA;AAUD,eAAO,MAAM,kBAAkB,mBACZ,aAAa,sBACP,MAAM,KAAG,OAAO,CAAC,MAAM,CAyJ7C,CAAA"}
package/dist/plugin.js CHANGED
@@ -109,6 +109,7 @@ export const payloadCloudPlugin = (pluginOptions)=>async (incomingConfig)=>{
109
109
  admin: {
110
110
  hidden: true
111
111
  },
112
+ authorship: false,
112
113
  fields: [
113
114
  {
114
115
  name: 'instance',
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config, Payload } from 'payload'\n\nimport type { PluginOptions } from './types.js'\n\nimport { payloadCloudEmail } from './email.js'\nimport { getAfterDeleteHook } from './hooks/afterDelete.js'\nimport { getBeforeChangeHook } from './hooks/beforeChange.js'\nimport {\n getCacheUploadsAfterChangeHook,\n getCacheUploadsAfterDeleteHook,\n} from './hooks/uploadCache.js'\nimport { getStaticHandler } from './staticHandler.js'\n\nexport const generateRandomString = (): string => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n return Array.from({ length: 24 }, () => chars[Math.floor(Math.random() * chars.length)]).join('')\n}\n\nconst DEFAULT_CRON = '* * * * *'\nconst DEFAULT_LIMIT = 10\nconst DEFAULT_CRON_JOB = {\n cron: DEFAULT_CRON,\n limit: DEFAULT_LIMIT,\n queue: 'default',\n}\n\nexport const payloadCloudPlugin =\n (pluginOptions?: PluginOptions) =>\n async (incomingConfig: Config): Promise<Config> => {\n let config = { ...incomingConfig }\n\n if (process.env.PAYLOAD_CLOUD !== 'true') {\n return config\n }\n\n const cachingEnabled =\n pluginOptions?.uploadCaching !== false && !!process.env.PAYLOAD_CLOUD_CACHE_KEY\n\n const apiEndpoint = pluginOptions?.endpoint || 'https://cloud-api.payloadcms.com'\n\n // Configure cloud storage\n if (pluginOptions?.storage !== false) {\n config = {\n ...config,\n collections: (config.collections || []).map((collection) => {\n if (collection.upload) {\n return {\n ...collection,\n hooks: {\n ...(collection.hooks || {}),\n afterChange: [\n ...(collection.hooks?.afterChange || []),\n ...(cachingEnabled\n ? [getCacheUploadsAfterChangeHook({ endpoint: apiEndpoint })]\n : []),\n ],\n afterDelete: [\n ...(collection.hooks?.afterDelete || []),\n getAfterDeleteHook({ collection }),\n ...(cachingEnabled\n ? [getCacheUploadsAfterDeleteHook({ endpoint: apiEndpoint })]\n : []),\n ],\n beforeChange: [\n ...(collection.hooks?.beforeChange || []),\n getBeforeChangeHook({ collection }),\n ],\n },\n upload: {\n ...(typeof collection.upload === 'object' ? collection.upload : {}),\n disableLocalStorage: true,\n handlers: [\n ...(typeof collection.upload === 'object' &&\n Array.isArray(collection.upload.handlers)\n ? collection.upload.handlers\n : []),\n getStaticHandler({\n cachingOptions: pluginOptions?.uploadCaching,\n collection,\n debug: pluginOptions?.debug,\n }),\n ],\n },\n }\n }\n\n return collection\n }),\n upload: {\n ...(config.upload || {}),\n useTempFiles: true,\n },\n }\n }\n\n // Configure cloud email\n const apiKey = process.env.PAYLOAD_CLOUD_EMAIL_API_KEY\n const defaultDomain = process.env.PAYLOAD_CLOUD_DEFAULT_DOMAIN\n if (pluginOptions?.email !== false && apiKey && defaultDomain) {\n config.email = await payloadCloudEmail({\n apiKey,\n config,\n defaultDomain,\n defaultFromAddress: pluginOptions?.email?.defaultFromAddress,\n defaultFromName: pluginOptions?.email?.defaultFromName,\n skipVerify: pluginOptions?.email?.skipVerify,\n })\n }\n\n // We make sure to only run cronjobs on one instance using a instance identifier stored in a global.\n config.globals = [\n ...(config.globals || []),\n {\n slug: 'payload-cloud-instance',\n access: {\n read: () => false,\n readVersions: () => false,\n update: () => false,\n },\n admin: {\n hidden: true,\n },\n fields: [\n {\n name: 'instance',\n type: 'text',\n required: true,\n },\n ],\n },\n ]\n\n if (pluginOptions?.enableAutoRun === false) {\n return config\n }\n\n const oldAutoRunCopy = config.jobs?.autoRun ?? []\n\n const hasExistingAutorun = Boolean(config.jobs?.autoRun)\n\n const newShouldAutoRun = async (payload: Payload) => {\n if (process.env.PAYLOAD_CLOUD_JOBS_INSTANCE) {\n const retrievedGlobal = await payload.findGlobal({\n slug: 'payload-cloud-instance',\n overrideAccess: true,\n })\n\n return retrievedGlobal.instance === process.env.PAYLOAD_CLOUD_JOBS_INSTANCE\n }\n\n return false\n }\n\n if (!config.jobs?.shouldAutoRun) {\n ;(config.jobs ??= {}).shouldAutoRun = newShouldAutoRun\n }\n\n const newAutoRun = async (payload: Payload) => {\n const instance = generateRandomString()\n\n process.env.PAYLOAD_CLOUD_JOBS_INSTANCE = instance\n\n await payload.updateGlobal({\n slug: 'payload-cloud-instance',\n data: {\n instance,\n },\n overrideAccess: true,\n })\n\n if (!hasExistingAutorun) {\n return [DEFAULT_CRON_JOB]\n }\n\n return typeof oldAutoRunCopy === 'function' ? await oldAutoRunCopy(payload) : oldAutoRunCopy\n }\n\n config.jobs.autoRun = newAutoRun\n\n return config\n }\n"],"names":["payloadCloudEmail","getAfterDeleteHook","getBeforeChangeHook","getCacheUploadsAfterChangeHook","getCacheUploadsAfterDeleteHook","getStaticHandler","generateRandomString","chars","Array","from","length","Math","floor","random","join","DEFAULT_CRON","DEFAULT_LIMIT","DEFAULT_CRON_JOB","cron","limit","queue","payloadCloudPlugin","pluginOptions","incomingConfig","config","process","env","PAYLOAD_CLOUD","cachingEnabled","uploadCaching","PAYLOAD_CLOUD_CACHE_KEY","apiEndpoint","endpoint","storage","collections","map","collection","upload","hooks","afterChange","afterDelete","beforeChange","disableLocalStorage","handlers","isArray","cachingOptions","debug","useTempFiles","apiKey","PAYLOAD_CLOUD_EMAIL_API_KEY","defaultDomain","PAYLOAD_CLOUD_DEFAULT_DOMAIN","email","defaultFromAddress","defaultFromName","skipVerify","globals","slug","access","read","readVersions","update","admin","hidden","fields","name","type","required","enableAutoRun","oldAutoRunCopy","jobs","autoRun","hasExistingAutorun","Boolean","newShouldAutoRun","payload","PAYLOAD_CLOUD_JOBS_INSTANCE","retrievedGlobal","findGlobal","overrideAccess","instance","shouldAutoRun","newAutoRun","updateGlobal","data"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config, Payload } from 'payload'\n\nimport type { PluginOptions } from './types.js'\n\nimport { payloadCloudEmail } from './email.js'\nimport { getAfterDeleteHook } from './hooks/afterDelete.js'\nimport { getBeforeChangeHook } from './hooks/beforeChange.js'\nimport {\n getCacheUploadsAfterChangeHook,\n getCacheUploadsAfterDeleteHook,\n} from './hooks/uploadCache.js'\nimport { getStaticHandler } from './staticHandler.js'\n\nexport const generateRandomString = (): string => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n return Array.from({ length: 24 }, () => chars[Math.floor(Math.random() * chars.length)]).join('')\n}\n\nconst DEFAULT_CRON = '* * * * *'\nconst DEFAULT_LIMIT = 10\nconst DEFAULT_CRON_JOB = {\n cron: DEFAULT_CRON,\n limit: DEFAULT_LIMIT,\n queue: 'default',\n}\n\nexport const payloadCloudPlugin =\n (pluginOptions?: PluginOptions) =>\n async (incomingConfig: Config): Promise<Config> => {\n let config = { ...incomingConfig }\n\n if (process.env.PAYLOAD_CLOUD !== 'true') {\n return config\n }\n\n const cachingEnabled =\n pluginOptions?.uploadCaching !== false && !!process.env.PAYLOAD_CLOUD_CACHE_KEY\n\n const apiEndpoint = pluginOptions?.endpoint || 'https://cloud-api.payloadcms.com'\n\n // Configure cloud storage\n if (pluginOptions?.storage !== false) {\n config = {\n ...config,\n collections: (config.collections || []).map((collection) => {\n if (collection.upload) {\n return {\n ...collection,\n hooks: {\n ...(collection.hooks || {}),\n afterChange: [\n ...(collection.hooks?.afterChange || []),\n ...(cachingEnabled\n ? [getCacheUploadsAfterChangeHook({ endpoint: apiEndpoint })]\n : []),\n ],\n afterDelete: [\n ...(collection.hooks?.afterDelete || []),\n getAfterDeleteHook({ collection }),\n ...(cachingEnabled\n ? [getCacheUploadsAfterDeleteHook({ endpoint: apiEndpoint })]\n : []),\n ],\n beforeChange: [\n ...(collection.hooks?.beforeChange || []),\n getBeforeChangeHook({ collection }),\n ],\n },\n upload: {\n ...(typeof collection.upload === 'object' ? collection.upload : {}),\n disableLocalStorage: true,\n handlers: [\n ...(typeof collection.upload === 'object' &&\n Array.isArray(collection.upload.handlers)\n ? collection.upload.handlers\n : []),\n getStaticHandler({\n cachingOptions: pluginOptions?.uploadCaching,\n collection,\n debug: pluginOptions?.debug,\n }),\n ],\n },\n }\n }\n\n return collection\n }),\n upload: {\n ...(config.upload || {}),\n useTempFiles: true,\n },\n }\n }\n\n // Configure cloud email\n const apiKey = process.env.PAYLOAD_CLOUD_EMAIL_API_KEY\n const defaultDomain = process.env.PAYLOAD_CLOUD_DEFAULT_DOMAIN\n if (pluginOptions?.email !== false && apiKey && defaultDomain) {\n config.email = await payloadCloudEmail({\n apiKey,\n config,\n defaultDomain,\n defaultFromAddress: pluginOptions?.email?.defaultFromAddress,\n defaultFromName: pluginOptions?.email?.defaultFromName,\n skipVerify: pluginOptions?.email?.skipVerify,\n })\n }\n\n // We make sure to only run cronjobs on one instance using a instance identifier stored in a global.\n config.globals = [\n ...(config.globals || []),\n {\n slug: 'payload-cloud-instance',\n access: {\n read: () => false,\n readVersions: () => false,\n update: () => false,\n },\n admin: {\n hidden: true,\n },\n authorship: false,\n fields: [\n {\n name: 'instance',\n type: 'text',\n required: true,\n },\n ],\n },\n ]\n\n if (pluginOptions?.enableAutoRun === false) {\n return config\n }\n\n const oldAutoRunCopy = config.jobs?.autoRun ?? []\n\n const hasExistingAutorun = Boolean(config.jobs?.autoRun)\n\n const newShouldAutoRun = async (payload: Payload) => {\n if (process.env.PAYLOAD_CLOUD_JOBS_INSTANCE) {\n const retrievedGlobal = await payload.findGlobal({\n slug: 'payload-cloud-instance',\n overrideAccess: true,\n })\n\n return retrievedGlobal.instance === process.env.PAYLOAD_CLOUD_JOBS_INSTANCE\n }\n\n return false\n }\n\n if (!config.jobs?.shouldAutoRun) {\n ;(config.jobs ??= {}).shouldAutoRun = newShouldAutoRun\n }\n\n const newAutoRun = async (payload: Payload) => {\n const instance = generateRandomString()\n\n process.env.PAYLOAD_CLOUD_JOBS_INSTANCE = instance\n\n await payload.updateGlobal({\n slug: 'payload-cloud-instance',\n data: {\n instance,\n },\n overrideAccess: true,\n })\n\n if (!hasExistingAutorun) {\n return [DEFAULT_CRON_JOB]\n }\n\n return typeof oldAutoRunCopy === 'function' ? await oldAutoRunCopy(payload) : oldAutoRunCopy\n }\n\n config.jobs.autoRun = newAutoRun\n\n return config\n }\n"],"names":["payloadCloudEmail","getAfterDeleteHook","getBeforeChangeHook","getCacheUploadsAfterChangeHook","getCacheUploadsAfterDeleteHook","getStaticHandler","generateRandomString","chars","Array","from","length","Math","floor","random","join","DEFAULT_CRON","DEFAULT_LIMIT","DEFAULT_CRON_JOB","cron","limit","queue","payloadCloudPlugin","pluginOptions","incomingConfig","config","process","env","PAYLOAD_CLOUD","cachingEnabled","uploadCaching","PAYLOAD_CLOUD_CACHE_KEY","apiEndpoint","endpoint","storage","collections","map","collection","upload","hooks","afterChange","afterDelete","beforeChange","disableLocalStorage","handlers","isArray","cachingOptions","debug","useTempFiles","apiKey","PAYLOAD_CLOUD_EMAIL_API_KEY","defaultDomain","PAYLOAD_CLOUD_DEFAULT_DOMAIN","email","defaultFromAddress","defaultFromName","skipVerify","globals","slug","access","read","readVersions","update","admin","hidden","authorship","fields","name","type","required","enableAutoRun","oldAutoRunCopy","jobs","autoRun","hasExistingAutorun","Boolean","newShouldAutoRun","payload","PAYLOAD_CLOUD_JOBS_INSTANCE","retrievedGlobal","findGlobal","overrideAccess","instance","shouldAutoRun","newAutoRun","updateGlobal","data"],"mappings":"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"}
@@ -12,8 +12,8 @@ export function getIncomingFiles({ data, req }) {
12
12
  files = [
13
13
  mainFile
14
14
  ];
15
- if (data?.sizes) {
16
- Object.entries(data.sizes).forEach(([key, resizedFileData])=>{
15
+ if (data?.variants) {
16
+ Object.entries(data.variants).forEach(([key, resizedFileData])=>{
17
17
  if (req.payloadUploadSizes?.[key] && resizedFileData.mimeType) {
18
18
  files = files.concat([
19
19
  {
@@ -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] && resizedFileData.mimeType) {\n files = files.concat([\n {\n buffer: req.payloadUploadSizes[key],\n filename: `${resizedFileData.filename}`,\n filesize: req.payloadUploadSizes[key].length,\n mimeType: resizedFileData.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,IAAIC,gBAAgBX,QAAQ,EAAE;oBAC7DF,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,UAAUW,gBAAgBX,QAAQ;wBACpC;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?.variants) {\n Object.entries(data.variants).forEach(([key, resizedFileData]) => {\n if (req.payloadUploadSizes?.[key] && resizedFileData.mimeType) {\n files = files.concat([\n {\n buffer: req.payloadUploadSizes[key],\n filename: `${resizedFileData.filename}`,\n filesize: req.payloadUploadSizes[key].length,\n mimeType: resizedFileData.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","variants","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,UAAU;YAClBC,OAAOC,OAAO,CAACb,KAAKW,QAAQ,EAAEG,OAAO,CAAC,CAAC,CAACC,KAAKC,gBAAgB;gBAC3D,IAAIf,IAAIgB,kBAAkB,EAAE,CAACF,IAAI,IAAIC,gBAAgBX,QAAQ,EAAE;oBAC7DF,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,UAAUW,gBAAgBX,QAAQ;wBACpC;qBACD;gBACH;YACF;QACF;IACF;IAEA,OAAOF;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/payload-cloud",
3
- "version": "4.0.0-internal.77191e5",
3
+ "version": "4.0.0-internal.7d5c665",
4
4
  "description": "The official Payload Cloud plugin",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -37,15 +37,14 @@
37
37
  "@aws-sdk/credential-providers": "^3.614.0",
38
38
  "@aws-sdk/lib-storage": "^3.614.0",
39
39
  "amazon-cognito-identity-js": "^6.1.2",
40
- "nodemailer": "^9.1.1",
41
- "@payloadcms/email-nodemailer": "4.0.0-internal.77191e5"
40
+ "nodemailer": "^10.1.1",
41
+ "@payloadcms/email-nodemailer": "4.0.0-internal.7d5c665"
42
42
  },
43
43
  "devDependencies": {
44
- "@types/nodemailer": "^8.0.0",
45
- "payload": "4.0.0-internal.77191e5"
44
+ "payload": "4.0.0-internal.7d5c665"
46
45
  },
47
46
  "peerDependencies": {
48
- "payload": "4.0.0-internal.77191e5"
47
+ "payload": "4.0.0-internal.7d5c665"
49
48
  },
50
49
  "scripts": {
51
50
  "build": "pnpm build:types && pnpm build:swc",