strapi-provider-upload-ibm-cos-s3
Version:
A storage provider for the Strapi CMS that manages file uploads to IBM COS S3
1 lines • 3.62 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"names":["index_default","config","cos","getFileKey","key","ext","folder","getUrl","upload","file"],"mappings":"8BAiCA,IAAOA,CAAAA,CAAQ,CACb,KAAOC,CAAAA,EAAmB,CACxB,IAAMC,CAAAA,CAAM,IAAQ,CAAA,CAAA,EAAA,CAAG,CACrB,QAAA,CAAUD,CAAAA,CAAO,OACjB,iBAAA,CAAmBA,CAAAA,CAAO,iBAAA,CAC1B,QAAA,CAAUA,EAAO,QACnB,CAAC,CAAA,CAEKE,CAAAA,CAAa,CAACC,CAAAA,CAAaC,CAAAA,CAAYC,CAAAA,GAC3CA,CAAAA,CAAS,GAAGA,CAAM,CAAA,CAAA,EAAIF,CAAG,CAAA,EAAGC,CAAG,CAAA,CAAA,CAAK,CAAA,EAAGD,CAAG,CAAA,EAAGC,CAAG,CAAA,CAAA,CAE5CE,CAAAA,CAAUH,CAAAA,EACd,CAAA,QAAA,EAAWH,EAAO,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAO,QAAQ,IAAIG,CAAG,CAAA,CAAA,CAG9CI,CAAAA,CAAS,MAAMC,GAAc,CAC/B,IAAML,CAAAA,CAAMD,CAAAA,CAAWM,EAAK,IAAA,CAAMA,CAAAA,CAAK,GAAA,CAAKR,CAAAA,CAAO,MAAM,CAAA,CAEzD,MAAMC,CAAAA,CACH,SAAA,CAAU,CACT,GAAA,CAAKE,CAAAA,CACL,IAAA,CAAMK,CAAAA,CAAK,QAAU,MAAA,CAAO,IAAA,CAAKA,CAAAA,CAAK,MAAA,CAAe,QAAQ,CAAA,CAC7D,GAAA,CAAKR,CAAAA,CAAO,GAAA,CACZ,YAAaQ,CAAAA,CAAK,IAAA,CAClB,MAAA,CAAQR,CAAAA,CAAO,MACjB,CAAC,CAAA,CACA,OAAA,EAAQ,CAEXQ,EAAK,GAAA,CAAMF,CAAAA,CAAOH,CAAG,EACzB,EAEA,OAAO,CACL,MAAA,CAAOK,CAAAA,CAAW,CACjB,OAAOD,CAAAA,CAAOC,CAAI,CACnB,EAEA,YAAA,CAAaA,CAAAA,CAAY,CACvB,OAAOD,EAAOC,CAAI,CACpB,CAAA,CAEA,MAAM,OAAOA,CAAAA,CAAW,CACtB,IAAML,CAAAA,CAAMD,EAAWM,CAAAA,CAAK,IAAA,CAAMA,CAAAA,CAAK,GAAA,CAAKR,EAAO,MAAM,CAAA,CAEzD,OAAOC,CAAAA,CACJ,aAAa,CACZ,GAAA,CAAKE,CAAAA,CACL,MAAA,CAAQH,EAAO,MACjB,CAAC,CAAA,CACA,OAAA,EACL,CAAA,CAEA,MAAM,SAAA,EAAY,CAChB,OAAOA,CAAAA,CAAO,GAAA,GAAQ,SACxB,CACF,CACF,CACF","file":"index.mjs","sourcesContent":["import * as ibm from \"ibm-cos-sdk\";\nimport type { ReadStream } from 'node:fs';\n\ntype Config = {\n apiKey: string;\n serviceInstanceId: string;\n endpoint: string;\n bucket: string;\n acl: ibm.S3.Types.ObjectCannedACL;\n folder?: string;\n};\n\nexport type File = {\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: Record<string, unknown>;\n hash: string;\n ext: string;\n mime: string;\n size: number;\n sizeInBytes: number;\n url: string;\n previewUrl?: string;\n path?: string;\n provider?: string;\n provider_metadata?: Record<string, unknown>;\n stream?: ReadStream;\n buffer?: Buffer;\n}\n\nexport default {\n init: (config: Config) => {\n const cos = new ibm.S3({\n apiKeyId: config.apiKey,\n serviceInstanceId: config.serviceInstanceId,\n endpoint: config.endpoint,\n });\n\n const getFileKey = (key: string, ext:string, folder?: string) =>\n folder ? `${folder}/${key}${ext}` : `${key}${ext}`;\n\n const getUrl = (key: string) =>\n `https://${config.bucket}.${config.endpoint}/${key}`;\n\n\n const upload = async(file:File) => {\n const key = getFileKey(file.hash, file.ext, config.folder);\n\n await cos\n .putObject({\n Key: key,\n Body: file.stream || Buffer.from(file.buffer as any, 'binary'),\n ACL: config.acl,\n ContentType: file.mime,\n Bucket: config.bucket,\n })\n .promise();\n\n file.url = getUrl(key);\n }\n\n return {\n upload(file:File) {\n return upload(file);\n },\n\n uploadStream(file: File) {\n return upload(file);\n },\n\n async delete(file:File) {\n const key = getFileKey(file.hash, file.ext, config.folder);\n\n return cos\n .deleteObject({\n Key: key,\n Bucket: config.bucket,\n })\n .promise();\n },\n\n async isPrivate() {\n return config.acl === \"private\";\n },\n };\n },\n};"]}