storemw-core-api 1.0.146 → 1.0.147
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/features/auth_token/authTokenRegistry.js +1 -1
- package/dist/features/auth_token/authTokenRegistry.js.map +1 -1
- package/dist/features/auth_token/authTokenType.d.ts +2 -1
- package/dist/features/auth_token/authTokenType.js.map +1 -1
- package/dist/features/core_config/coreConfigType.js.map +1 -1
- package/dist/features/file_storage/fileStorageType.d.ts +4 -3
- package/dist/features/file_storage/fileStorageType.js.map +1 -1
- package/dist/features/reset_password/resetPasswordType.d.ts +7 -6
- package/dist/features/reset_password/resetPasswordType.js.map +1 -1
- package/dist/features/smtp_email/smtpEmailType.d.ts +7 -6
- package/dist/features/smtp_email/smtpEmailType.js.map +1 -1
- package/dist/features/user_me/userMeRegistry.js +0 -18
- package/dist/features/user_me/userMeRegistry.js.map +1 -1
- package/dist/features/user_me/userMeType.d.ts +4 -3
- package/dist/features/user_me/userMeType.js.map +1 -1
- package/dist/services/access_control/AccessControlService.js +2 -2
- package/dist/services/access_control/AccessControlService.js.map +1 -1
- package/dist/services/auth/AuthService.js +14 -2
- package/dist/services/auth/AuthService.js.map +1 -1
- package/dist/services/file/FileService.js +56 -50
- package/dist/services/file/FileService.js.map +1 -1
- package/dist/services/gateway/SmtpEmailService.js +12 -6
- package/dist/services/gateway/SmtpEmailService.js.map +1 -1
- package/dist/services/reset_password/ResetPasswordService.js +18 -12
- package/dist/services/reset_password/ResetPasswordService.js.map +1 -1
- package/dist/services/user/UserMeService.js +12 -3
- package/dist/services/user/UserMeService.js.map +1 -1
- package/dist/utils/featureUtils.d.ts +5 -0
- package/dist/utils/featureUtils.js +3 -0
- package/dist/utils/featureUtils.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/serviceUtils.d.ts +2 -18
- package/dist/utils/serviceUtils.js +0 -1
- package/dist/utils/serviceUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../src/services/file/FileService.ts"],"names":[],"mappings":"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","sourcesContent":["import { _, logError, throwError, generateFileThumbnailBuffer } from \"@/utils\";\n\nimport path from \"path\";\n\nimport {\n FileModel,\n ModelFileFields,\n} from \"@/models\";\n\nimport { FileLocalProviderOptions, FileLocalStorageProvider, FileLocalUploadFileProps } from \"./FileLocalStorageProvider\"\nimport { FileGoogleCloudProviderOptions, FileGoogleCloudStorageProvider, FileGoogleCloudUploadFileProps } from \"./FileGoogleCloudStorageProvider\"\nimport { FileAwsS3ProviderOptions, FileAwsS3StorageProvider, FileAwsS3UploadFileProps } from \"./FileAwsS3StorageProvider\"\nimport { getFileStorageProvider, FileStorageProviderType } from \"./FileStorageProviderRegistry\";\n\nimport { InjectionFieldModuleRef } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { getFileSqlRelationMaps, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount } from \"@/lib\";\n\nimport {\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect\n} from \"@/lib\";\n\nimport { FileImageCompressionOptions, compressImageBuffer } from \"./ImageCompression\";\nexport { FileImageCompressionOptions } from \"./ImageCompression\"\nimport { FileVideoCompressionOptions, compressVideoBuffer } from \"./VideoCompression\";\nimport { FeatureFileStorageOptions, FeatureFileStorageProps, FeatureFileStorageStartUploadProps, FileStorageHook } from \"@/features\";\nexport { FileVideoCompressionOptions } from \"./VideoCompression\"\n\nexport { FileStorageProviderType } from \"./FileStorageProviderRegistry\";\nexport { FileLocalProviderOptions } from \"./FileLocalStorageProvider\";\nexport { FileGoogleCloudProviderOptions } from \"./FileGoogleCloudStorageProvider\";\nexport { FileAwsS3ProviderOptions } from \"./FileAwsS3StorageProvider\";\n\nexport const fileDataTypes = {\n}\n\nexport type FileModuleRef = InjectionFieldModuleRef\n\nexport type FileDataType = keyof typeof fileDataTypes;\n\nexport type FileServiceProps = DefaultServiceProps & {\n};\n\nexport type FileCategoryName =\n | \"image\"\n | \"video\"\n | \"audio\"\n | \"document\"\n | \"archive\"\n | \"code\"\n | \"other\";\n\n\nexport type FileGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n // datatypes: FileDataType[]\n};\n\nexport type FileGetUsageSummaryProps = {\n accountId: number,\n};\n\nexport type FileListProps = Omit<QueryList, \"datatypes\"> & {\n // datatypes: FileDataType[]\n}\n\nexport type FileRemoveProps = {\n fileIds: BigInt[],\n // storageProviderOptions: any\n storageSetup?: FeatureFileStorageOptions\n};\n\nexport type File = {\n tagName: string;\n description: string;\n folderPath: string;\n assetUrl: string;\n thumbnailUrl: string;\n assetPath: string;\n fileLabel: string;\n fileName: string;\n contentType: string;\n fileCategoryName: string;\n inputType: string;\n inputFileSizeBytes: number;\n inputFileName: string;\n fileSizeBytes: number;\n fileDurationSeconds: number;\n fileCompressFormat: string;\n storageProviderName: string;\n foldernameDay: number;\n foldernameMonth: number;\n foldernameYear: number;\n batchCode: string;\n referId1: number;\n referId2: number;\n referLabel1: string;\n referLabel2: string;\n remark: string;\n}\n\nexport type FileUploadItem = {\n buffer: Buffer; // Raw file data\n originalName: string; // Client filename\n mimeType: string; // e.g. \"image/png\"\n sizeBytes: number; // File size in bytes\n // providerName?: FileStorageProviderType; // optional: override global provider\n};\n\n\nexport type FileCreateProps = {\n data: File & {\n fieldRef: FileModuleRef[\"field_ref\"],\n fieldModule: FileModuleRef[\"field_module\"]\n }\n}\n\nexport type FileUploadProps = FileModuleRef & {\n description?: string,\n tagName?: string,\n label?: string,\n refId: number\n refId2?: number\n refLabel?: string\n refLabel2?: string\n remark: string\n foldernameDate?: string,\n files: FileUploadItem[]\n storageSetup?: FeatureFileStorageOptions\n}\n\nlet mainSqlSelect = buildFileMainSqlSelect()\nlet defaultSqlSelect = buildFileDefaultSqlSelect()\n\nconst { relationKeys, sqlRelationMaps } = getFileSqlRelationMaps(``)\n\nconst getCreatePayload = (data: FileCreateProps[\"data\"]) => {\n\n return {\n // [`${ModelFileFields.file_id}`]: fileType,\n [`${ModelFileFields.asset_path}`]: data.assetPath,\n [`${ModelFileFields.asset_url}`]: data.assetUrl,\n [`${ModelFileFields.thumbnail_url}`]: data.thumbnailUrl,\n [`${ModelFileFields.batch_code}`]: data.batchCode,\n [`${ModelFileFields.content_type}`]: data.contentType,\n [`${ModelFileFields.file_category_name}`]: data.fileCategoryName,\n [`${ModelFileFields.field_module}`]: data.fieldModule,\n [`${ModelFileFields.field_ref}`]: data.fieldRef,\n [`${ModelFileFields.file_compress_format}`]: data.fileCompressFormat,\n [`${ModelFileFields.file_label}`]: data.fileLabel,\n [`${ModelFileFields.file_name}`]: data.fileName,\n [`${ModelFileFields.file_size_bytes}`]: data.fileSizeBytes,\n [`${ModelFileFields.file_duration_seconds}`]: data.fileDurationSeconds,\n [`${ModelFileFields.tag_name}`]: data.tagName,\n [`${ModelFileFields.description}`]: data.description,\n [`${ModelFileFields.foldername_day}`]: Number(data.foldernameDay),\n [`${ModelFileFields.foldername_month}`]: Number(data.foldernameMonth),\n [`${ModelFileFields.foldername_year}`]: Number(data.foldernameYear),\n [`${ModelFileFields.input_file_name}`]: data.inputFileName,\n [`${ModelFileFields.input_file_size_bytes}`]: data.inputFileSizeBytes,\n [`${ModelFileFields.input_type}`]: data.inputType,\n [`${ModelFileFields.refer_id_1}`]: data.referId1,\n [`${ModelFileFields.refer_id_2}`]: data.referId2,\n [`${ModelFileFields.refer_label_1}`]: data.referLabel1,\n [`${ModelFileFields.refer_label_2}`]: data.referLabel2,\n [`${ModelFileFields.remark}`]: data.remark,\n [`${ModelFileFields.storage_provider_name}`]: data.storageProviderName,\n }\n\n}\n\nexport const getFileCategoryNameByMimeType = (mimeType: string): FileCategoryName => {\n const lower = mimeType.toLowerCase();\n\n if (lower.startsWith(\"image/\")) return \"image\";\n if (lower.startsWith(\"video/\")) return \"video\";\n if (lower.startsWith(\"audio/\")) return \"audio\";\n\n // Edge-case audio MIME types\n if ([\"application/ogg\"].includes(lower)) return \"audio\";\n\n if (\n lower.startsWith(\"text/\") ||\n [\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/rtf\",\n ].includes(lower)\n ) {\n return \"document\";\n }\n\n if (\n [\n \"application/zip\",\n \"application/x-7z-compressed\",\n \"application/x-rar-compressed\",\n \"application/x-tar\",\n \"application/gzip\",\n ].includes(lower)\n ) {\n return \"archive\";\n }\n\n if (\n lower.startsWith(\"application/json\") ||\n lower.startsWith(\"application/javascript\") ||\n lower.startsWith(\"text/html\") ||\n lower.startsWith(\"text/css\") ||\n lower.startsWith(\"text/x-python\") ||\n lower.startsWith(\"text/x-c\") ||\n lower.startsWith(\"text/x-java\")\n ) {\n return \"code\";\n }\n\n return \"other\";\n};\n\nexport const FileService = (props: FileServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const fileModel = FileModel({ ...rest })\n\n const fileGoogleCloudStorageProvider = FileGoogleCloudStorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileAwsS3StorageProvider = FileAwsS3StorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileLocalStorageProvider = FileLocalStorageProvider({})\n\n const thumbnailOptions = {\n suffix: \"-thumb\",\n ext: \"jpg\",\n mimeType: \"image/jpeg\",\n }\n\n const initBatchCode = () => {\n return `${Date.now()}_${_.random(0, 999)}`;\n }\n\n const getStorageSetup = async (overrideStorageSetup?: FeatureFileStorageOptions) => {\n\n const hookSetup = overrideStorageSetup ?\n overrideStorageSetup\n :\n await FileStorageHook.onSetup()\n\n if (hookSetup.storageType === \"local\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,\n basePath: `${hookSetup.localStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,\n publicBaseUrl: `${hookSetup.localStorageOptions.baseUrl}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.localStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.localStorageOptions.skipFolderNameYearMonth)\n }\n }\n }\n\n if (hookSetup.storageType === \"gcloud\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,\n basePath: `${hookSetup.gcloudStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,\n publicBaseUrl: `${hookSetup.gcloudStorageOptions.baseUrl}`,\n // bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,\n bucketName: `${hookSetup.gcloudStorageOptions.bucketName}`,\n // credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,\n credentials: `${path.resolve(process.cwd(), `${hookSetup.gcloudStorageOptions.credentialPath}`)}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n if (hookSetup.storageType === \"aws\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n basePath: `${hookSetup.awsStorageOptions.basePath}`,\n publicBaseUrl: `${hookSetup.awsStorageOptions.baseUrl}`,\n bucketName: `${hookSetup.awsStorageOptions.bucketName}`,\n region: hookSetup.awsStorageOptions?.region ?? \"\",\n credentials: {\n accessKeyId: hookSetup.awsStorageOptions.credentials.accessKeyId,\n secretAccessKey: hookSetup.awsStorageOptions.credentials.secretAccessKey,\n },\n skipFoldernameByModuleRef: Boolean(hookSetup.awsStorageOptions.skipFolderNameModuleRef),\n skipFoldernameByDate: Boolean(hookSetup.awsStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n throw new Error(\"Unsupported storage type\")\n }\n\n const uploadFiles = async ({\n field_ref = \"item\",\n field_module = \"item\",\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n files = [],\n storageSetup\n }: FileUploadProps) => {\n\n const {\n storageProviderName,\n storageProviderOptions,\n storageConfiguration\n } = await getStorageSetup(storageSetup)\n\n // get the correct provider\n const provider = await getFileStorageProvider(storageProviderName, storageProviderOptions);\n\n // Image Compression\n const imageCompressionOptions: FileImageCompressionOptions | undefined\n = storageConfiguration?.imageMaxWidth && storageConfiguration?.imageMaxWidth\n ? {\n maxWidth: Number(storageConfiguration.imageMaxWidth),\n quality: Number(storageConfiguration.imageQuality),\n }\n : undefined;\n\n // Video Compression\n const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n storageConfiguration?.videoCRF &&\n storageConfiguration?.videoPreset &&\n storageConfiguration?.videoResolution\n ? {\n crf: Number(storageConfiguration.videoCRF),\n preset: storageConfiguration.videoPreset as FileVideoCompressionOptions[\"preset\"],\n resolution: Number(storageConfiguration.videoResolution),\n }\n : undefined;\n\n const allResponses = []\n\n const batchCode = initBatchCode();\n\n const fileLabel = label ?? \"\"\n const referId1 = refId ?? 0\n const referId2 = refId2 ?? 0\n const referLabel1 = refLabel ?? \"\"\n const referLabel2 = refLabel2 ?? \"\"\n const fileRemark = remark ?? \"\"\n\n for (const file of files) {\n\n let bufferToUpload = file.buffer;\n let mimeType = file.mimeType ?? \"\"\n let sizeBytes = file?.sizeBytes\n let fileOriginalName = file.originalName;\n\n let outputSizeBytes = sizeBytes // output file size\n let fileCompressFormat = `` // output image compress\n\n const fileCategoryName = getFileCategoryNameByMimeType(mimeType)\n\n // const ext = file.originalName?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n // Image :: Only compress if image and options provided\n if (fileCategoryName === \"image\" && imageCompressionOptions) {\n const compressed = await compressImageBuffer(\n bufferToUpload,\n mimeType,\n imageCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // Vide :: Only compress if video and options provided\n if (fileCategoryName === \"video\" && videoCompressionOptions) {\n const compressed = await compressVideoBuffer(\n bufferToUpload,\n mimeType,\n videoCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // generate thumbnail buffer\n const bufferThumbnail = await generateFileThumbnailBuffer(bufferToUpload, mimeType)\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onStartUpload) {\n\n await FileStorageHook.onStartUpload({\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail?.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n })\n }\n\n // upload using the provider - buffer\n const uploadResult = await provider.uploadFile({\n field_ref,\n field_module,\n buffer: bufferToUpload,\n bufferThumbnail: bufferThumbnail.buffer,\n thumbnailOptions,\n ...(foldernameDate ? { foldernameDate } : {}),\n mimeType,\n fileName: fileOriginalName\n } as FileModuleRef & (\n FileLocalUploadFileProps |\n FileGoogleCloudUploadFileProps |\n FileAwsS3UploadFileProps\n ));\n\n const fieldRef = field_ref\n const fieldModule = field_module\n\n const fileName = uploadResult?.filename ?? \"\"\n const contentType = mimeType ?? \"\"\n const folderPath = uploadResult.assetPath ?? \"\"\n const assetUrl = uploadResult.assetUrl ?? \"\"\n const thumbnailUrl = uploadResult?.thumbnailUrl ?? \"\"\n const assetPath = uploadResult.assetPath ?? \"\"\n\n const fileDurationSeconds = bufferThumbnail?.durationSeconds ?? 0\n\n const inputType = `buffer`\n const inputFileSizeBytes = sizeBytes ?? 0\n const inputFileName = fileOriginalName ?? \"\"\n\n const fileSizeBytes = outputSizeBytes ?? 0\n // const fileCompressFormat = ``\n\n const foldernameDay = uploadResult?.folderName?.day ?? \"\"\n const foldernameMonth = uploadResult?.folderName?.month ?? \"\"\n const foldernameYear = uploadResult?.folderName?.year ?? \"\"\n\n const payload: FileCreateProps = {\n data: {\n fieldRef,\n fieldModule,\n tagName,\n description,\n remark: fileRemark,\n folderPath,\n assetUrl,\n thumbnailUrl,\n assetPath,\n fileLabel,\n fileName,\n fileCategoryName,\n contentType,\n inputType,\n inputFileSizeBytes,\n inputFileName,\n fileSizeBytes,\n fileDurationSeconds,\n fileCompressFormat,\n storageProviderName,\n foldernameDay,\n foldernameMonth,\n foldernameYear,\n batchCode,\n referId1,\n referId2,\n referLabel1,\n referLabel2\n } as FileCreateProps[\"data\"],\n };\n\n let responseFile = await createFile(payload);\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onSuccessUpload) {\n await FileStorageHook.onSuccessUpload({\n fileId: Number(responseFile?.file_id),\n fileThumbnailUrl: thumbnailUrl,\n fileAssetUrl: assetUrl,\n fileDurationSeconds,\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n })\n }\n\n allResponses.push(responseFile)\n }\n\n return allResponses\n\n }\n\n // private\n const createFile = async ({ data }: FileCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create file payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await fileModel.create({ data: _data })\n\n const newFileId = response?.file_id ?? \"\"\n\n return newFileId ? await getFile({ id: Number(newFileId) }) : null\n\n }\n\n const getFile = async ({ id }: FileGetProps) => {\n\n let { data } = await listFiles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelFileFields.file_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelFileFields.file_id}`,\n sortorder: \"ASC\"\n })\n\n return data[0] ?? null;\n\n };\n\n const listFiles = async ({ limit, offset, filters = [], sortfield, sortorder }: FileListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = []\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `mainfile.isdelete = false`,\n `mainfile.istrash = false`,\n // `LOWER(mainfile.doc_type) = LOWER('${documentTypeKey}')`\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: fileModel,\n tableName: \"files\",\n mainAlias: \"mainfile\",\n countKey: `${ModelFileFields.file_id}`,\n accountId: rest.accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n const removeFiles = async ({ fileIds, storageSetup }: FileRemoveProps) => {\n\n const {\n // storageProviderName,\n storageProviderOptions\n } = await getStorageSetup(storageSetup)\n\n if (!fileIds.length) throwError('fileIds is required');\n\n const filesToDelete = await fileModel.list({\n where: {\n file_id: { in: fileIds }\n }\n });\n\n // console.log('filesToDelete', filesToDelete)\n\n let providerResponse: any[] = []\n\n // 2️⃣ Delete the physical files\n for (const file of filesToDelete) {\n\n // check the provider to choose delete method\n const storageProviderName = file.storage_provider_name as FileStorageProviderType\n const assetUrl = file.asset_url\n const thumbnailUrl = file.thumbnail_url ?? \"\"\n const assetPath = file.asset_path\n\n if (storageProviderName === \"local\" && assetPath) {\n\n try {\n providerResponse.push(\n await fileLocalStorageProvider.removeFile(assetPath, thumbnailOptions)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Local: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"gcloud\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileGoogleCloudStorageProvider.removeFile(assetUrl, thumbnailUrl, storageProviderOptions.credentials as any)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from GCloud: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"aws\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileAwsS3StorageProvider.removeFile(assetUrl, thumbnailUrl)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Aws S3: ${assetUrl}`\n )\n }\n\n }\n\n }\n\n // remove files\n const response = await fileModel.remove({ where: { [`${ModelFileFields.file_id}`]: { in: fileIds } } });\n\n return {\n files: response,\n providerResponse\n }\n };\n\n const getFileUsageSummary = async ({ accountId = 0 }: FileGetUsageSummaryProps) => {\n\n const summaryCount = await fileModel.aggregate({\n field: `file_id`,\n operation: `count`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const summarySize = await fileModel.aggregate({\n field: `file_size_bytes`,\n operation: `sum`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const totalFiles = summaryCount ?? 0;\n const totalBytes = summarySize ?? 0;\n // const totalFiles = summary._count.id;\n\n // Optional: convert bytes to MB or GB\n const totalMB = totalBytes / (1024 * 1024);\n const totalGB = totalBytes / (1024 * 1024 * 1024);\n\n return {\n totalFiles,\n totalBytes,\n totalMB: parseFloat(totalMB.toFixed(2)), // now decimal\n totalGB: parseFloat(totalGB.toFixed(2)), // now decimal\n };\n }\n\n // const getDataTypes = () => {\n // return Object.values(fileDataTypes);\n // }\n\n return {\n uploadFiles,\n // createFile,\n // updateFile,\n getFile,\n listFiles,\n removeFiles,\n // getDataTypes,\n getFileUsageSummary\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../src/services/file/FileService.ts"],"names":[],"mappings":"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","sourcesContent":["import { _, logError, throwError, generateFileThumbnailBuffer } from \"@/utils\";\n\nimport path from \"path\";\n\nimport {\n FileModel,\n ModelFileFields,\n} from \"@/models\";\n\nimport { FileLocalProviderOptions, FileLocalStorageProvider, FileLocalUploadFileProps } from \"./FileLocalStorageProvider\"\nimport { FileGoogleCloudProviderOptions, FileGoogleCloudStorageProvider, FileGoogleCloudUploadFileProps } from \"./FileGoogleCloudStorageProvider\"\nimport { FileAwsS3ProviderOptions, FileAwsS3StorageProvider, FileAwsS3UploadFileProps } from \"./FileAwsS3StorageProvider\"\nimport { getFileStorageProvider, FileStorageProviderType } from \"./FileStorageProviderRegistry\";\n\nimport { InjectionFieldModuleRef } from \"@/services\"\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { getFileSqlRelationMaps, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, getListWithCount } from \"@/lib\";\n\nimport {\n buildFileMainSqlSelect,\n buildFileDefaultSqlSelect\n} from \"@/lib\";\n\nimport { FileImageCompressionOptions, compressImageBuffer } from \"./ImageCompression\";\nexport { FileImageCompressionOptions } from \"./ImageCompression\"\nimport { FileVideoCompressionOptions, compressVideoBuffer } from \"./VideoCompression\";\nimport { FeatureFileStorageOptions, FeatureFileStorageProps, FeatureFileStorageStartUploadProps, FileStorageHook } from \"@/features\";\nexport { FileVideoCompressionOptions } from \"./VideoCompression\"\n\nexport { FileStorageProviderType } from \"./FileStorageProviderRegistry\";\nexport { FileLocalProviderOptions } from \"./FileLocalStorageProvider\";\nexport { FileGoogleCloudProviderOptions } from \"./FileGoogleCloudStorageProvider\";\nexport { FileAwsS3ProviderOptions } from \"./FileAwsS3StorageProvider\";\n\nexport const fileDataTypes = {\n}\n\nexport type FileModuleRef = InjectionFieldModuleRef\n\nexport type FileDataType = keyof typeof fileDataTypes;\n\nexport type FileServiceProps = DefaultServiceProps & {\n};\n\nexport type FileCategoryName =\n | \"image\"\n | \"video\"\n | \"audio\"\n | \"document\"\n | \"archive\"\n | \"code\"\n | \"other\";\n\n\nexport type FileGetProps = Omit<QueryGet, \"datatypes\"> & {\n id: number,\n // datatypes: FileDataType[]\n};\n\nexport type FileGetUsageSummaryProps = {\n accountId: number,\n};\n\nexport type FileListProps = Omit<QueryList, \"datatypes\"> & {\n // datatypes: FileDataType[]\n}\n\nexport type FileRemoveProps = {\n fileIds: BigInt[],\n // storageProviderOptions: any\n storageSetup?: FeatureFileStorageOptions\n};\n\nexport type File = {\n tagName: string;\n description: string;\n folderPath: string;\n assetUrl: string;\n thumbnailUrl: string;\n assetPath: string;\n fileLabel: string;\n fileName: string;\n contentType: string;\n fileCategoryName: string;\n inputType: string;\n inputFileSizeBytes: number;\n inputFileName: string;\n fileSizeBytes: number;\n fileDurationSeconds: number;\n fileCompressFormat: string;\n storageProviderName: string;\n foldernameDay: number;\n foldernameMonth: number;\n foldernameYear: number;\n batchCode: string;\n referId1: number;\n referId2: number;\n referLabel1: string;\n referLabel2: string;\n remark: string;\n}\n\nexport type FileUploadItem = {\n buffer: Buffer; // Raw file data\n originalName: string; // Client filename\n mimeType: string; // e.g. \"image/png\"\n sizeBytes: number; // File size in bytes\n // providerName?: FileStorageProviderType; // optional: override global provider\n};\n\n\nexport type FileCreateProps = {\n data: File & {\n fieldRef: FileModuleRef[\"field_ref\"],\n fieldModule: FileModuleRef[\"field_module\"]\n }\n}\n\nexport type FileUploadProps = FileModuleRef & {\n description?: string,\n tagName?: string,\n label?: string,\n refId: number\n refId2?: number\n refLabel?: string\n refLabel2?: string\n remark: string\n foldernameDate?: string,\n files: FileUploadItem[]\n storageSetup?: FeatureFileStorageOptions\n}\n\nlet mainSqlSelect = buildFileMainSqlSelect()\nlet defaultSqlSelect = buildFileDefaultSqlSelect()\n\nconst { relationKeys, sqlRelationMaps } = getFileSqlRelationMaps(``)\n\nconst getCreatePayload = (data: FileCreateProps[\"data\"]) => {\n\n return {\n // [`${ModelFileFields.file_id}`]: fileType,\n [`${ModelFileFields.asset_path}`]: data.assetPath,\n [`${ModelFileFields.asset_url}`]: data.assetUrl,\n [`${ModelFileFields.thumbnail_url}`]: data.thumbnailUrl,\n [`${ModelFileFields.batch_code}`]: data.batchCode,\n [`${ModelFileFields.content_type}`]: data.contentType,\n [`${ModelFileFields.file_category_name}`]: data.fileCategoryName,\n [`${ModelFileFields.field_module}`]: data.fieldModule,\n [`${ModelFileFields.field_ref}`]: data.fieldRef,\n [`${ModelFileFields.file_compress_format}`]: data.fileCompressFormat,\n [`${ModelFileFields.file_label}`]: data.fileLabel,\n [`${ModelFileFields.file_name}`]: data.fileName,\n [`${ModelFileFields.file_size_bytes}`]: data.fileSizeBytes,\n [`${ModelFileFields.file_duration_seconds}`]: data.fileDurationSeconds,\n [`${ModelFileFields.tag_name}`]: data.tagName,\n [`${ModelFileFields.description}`]: data.description,\n [`${ModelFileFields.foldername_day}`]: Number(data.foldernameDay),\n [`${ModelFileFields.foldername_month}`]: Number(data.foldernameMonth),\n [`${ModelFileFields.foldername_year}`]: Number(data.foldernameYear),\n [`${ModelFileFields.input_file_name}`]: data.inputFileName,\n [`${ModelFileFields.input_file_size_bytes}`]: data.inputFileSizeBytes,\n [`${ModelFileFields.input_type}`]: data.inputType,\n [`${ModelFileFields.refer_id_1}`]: data.referId1,\n [`${ModelFileFields.refer_id_2}`]: data.referId2,\n [`${ModelFileFields.refer_label_1}`]: data.referLabel1,\n [`${ModelFileFields.refer_label_2}`]: data.referLabel2,\n [`${ModelFileFields.remark}`]: data.remark,\n [`${ModelFileFields.storage_provider_name}`]: data.storageProviderName,\n }\n\n}\n\nexport const getFileCategoryNameByMimeType = (mimeType: string): FileCategoryName => {\n const lower = mimeType.toLowerCase();\n\n if (lower.startsWith(\"image/\")) return \"image\";\n if (lower.startsWith(\"video/\")) return \"video\";\n if (lower.startsWith(\"audio/\")) return \"audio\";\n\n // Edge-case audio MIME types\n if ([\"application/ogg\"].includes(lower)) return \"audio\";\n\n if (\n lower.startsWith(\"text/\") ||\n [\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/rtf\",\n ].includes(lower)\n ) {\n return \"document\";\n }\n\n if (\n [\n \"application/zip\",\n \"application/x-7z-compressed\",\n \"application/x-rar-compressed\",\n \"application/x-tar\",\n \"application/gzip\",\n ].includes(lower)\n ) {\n return \"archive\";\n }\n\n if (\n lower.startsWith(\"application/json\") ||\n lower.startsWith(\"application/javascript\") ||\n lower.startsWith(\"text/html\") ||\n lower.startsWith(\"text/css\") ||\n lower.startsWith(\"text/x-python\") ||\n lower.startsWith(\"text/x-c\") ||\n lower.startsWith(\"text/x-java\")\n ) {\n return \"code\";\n }\n\n return \"other\";\n};\n\nexport const FileService = (props: FileServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const fileModel = FileModel({ ...rest })\n\n const fileGoogleCloudStorageProvider = FileGoogleCloudStorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileAwsS3StorageProvider = FileAwsS3StorageProvider({\n basePath: ``,\n bucketName: ``\n })\n\n const fileLocalStorageProvider = FileLocalStorageProvider({})\n\n const thumbnailOptions = {\n suffix: \"-thumb\",\n ext: \"jpg\",\n mimeType: \"image/jpeg\",\n }\n\n const initBatchCode = () => {\n return `${Date.now()}_${_.random(0, 999)}`;\n }\n\n const getStorageSetup = async (overrideStorageSetup?: FeatureFileStorageOptions) => {\n\n const hookSetup = overrideStorageSetup ?\n overrideStorageSetup\n :\n await FileStorageHook.onSetup()\n\n if (hookSetup.storageType === \"local\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_LOCAL_BASE_PATH}`,\n basePath: `${hookSetup.localStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_LOCAL_BASE_URL}`,\n publicBaseUrl: `${hookSetup.localStorageOptions.baseUrl}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.localStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_LOCAL_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.localStorageOptions.skipFolderNameYearMonth)\n }\n }\n }\n\n if (hookSetup.storageType === \"gcloud\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n // basePath: `${config.FILE_STORAGE_GCLOUD_BASE_PATH}`,\n basePath: `${hookSetup.gcloudStorageOptions.basePath}`,\n // publicBaseUrl: `${config.FILE_STORAGE_GCLOUD_BASE_URL}`,\n publicBaseUrl: `${hookSetup.gcloudStorageOptions.baseUrl}`,\n // bucketName: `${config.FILE_STORAGE_GCLOUD_BUCKET_NAME}`,\n bucketName: `${hookSetup.gcloudStorageOptions.bucketName}`,\n // credentials: `${path.resolve(process.cwd(), `${config.FILE_STORAGE_GCLOUD_CREDENTIAL_PATH}`)}`,\n credentials: `${path.resolve(process.cwd(), `${hookSetup.gcloudStorageOptions.credentialPath}`)}`,\n // skipFoldernameByModuleRef: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_MODULE_REF),\n skipFoldernameByModuleRef: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameModuleRef),\n // skipFoldernameByDate: Boolean(config.FILE_STORAGE_GCLOUD_SKIP_FOLDERNAME_YEAR_MONTH)\n skipFoldernameByDate: Boolean(hookSetup.gcloudStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n if (hookSetup.storageType === \"aws\") {\n return {\n storageConfiguration: hookSetup.storageConfiguration,\n storageProviderName: hookSetup.storageType,\n storageProviderOptions: {\n basePath: `${hookSetup.awsStorageOptions.basePath}`,\n publicBaseUrl: `${hookSetup.awsStorageOptions.baseUrl}`,\n bucketName: `${hookSetup.awsStorageOptions.bucketName}`,\n region: hookSetup.awsStorageOptions?.region ?? \"\",\n credentials: {\n accessKeyId: hookSetup.awsStorageOptions.credentials.accessKeyId,\n secretAccessKey: hookSetup.awsStorageOptions.credentials.secretAccessKey,\n },\n skipFoldernameByModuleRef: Boolean(hookSetup.awsStorageOptions.skipFolderNameModuleRef),\n skipFoldernameByDate: Boolean(hookSetup.awsStorageOptions.skipFolderNameYearMonth)\n }\n\n }\n }\n\n throw new Error(\"Unsupported storage type\")\n }\n\n const uploadFiles = async ({\n field_ref = \"item\",\n field_module = \"item\",\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n files = [],\n storageSetup\n }: FileUploadProps) => {\n\n const {\n storageProviderName,\n storageProviderOptions,\n storageConfiguration\n } = await getStorageSetup(storageSetup)\n\n // get the correct provider\n const provider = await getFileStorageProvider(storageProviderName, storageProviderOptions);\n\n // Image Compression\n const imageCompressionOptions: FileImageCompressionOptions | undefined\n = storageConfiguration?.imageMaxWidth && storageConfiguration?.imageMaxWidth\n ? {\n maxWidth: Number(storageConfiguration.imageMaxWidth),\n quality: Number(storageConfiguration.imageQuality),\n }\n : undefined;\n\n // Video Compression\n const videoCompressionOptions: FileVideoCompressionOptions | undefined =\n storageConfiguration?.videoCRF &&\n storageConfiguration?.videoPreset &&\n storageConfiguration?.videoResolution\n ? {\n crf: Number(storageConfiguration.videoCRF),\n preset: storageConfiguration.videoPreset as FileVideoCompressionOptions[\"preset\"],\n resolution: Number(storageConfiguration.videoResolution),\n }\n : undefined;\n\n const allResponses = []\n\n const batchCode = initBatchCode();\n\n const fileLabel = label ?? \"\"\n const referId1 = refId ?? 0\n const referId2 = refId2 ?? 0\n const referLabel1 = refLabel ?? \"\"\n const referLabel2 = refLabel2 ?? \"\"\n const fileRemark = remark ?? \"\"\n\n for (const file of files) {\n\n let bufferToUpload = file.buffer;\n let mimeType = file.mimeType ?? \"\"\n let sizeBytes = file?.sizeBytes\n let fileOriginalName = file.originalName;\n\n let outputSizeBytes = sizeBytes // output file size\n let fileCompressFormat = `` // output image compress\n\n const fileCategoryName = getFileCategoryNameByMimeType(mimeType)\n\n // const ext = file.originalName?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n // Image :: Only compress if image and options provided\n if (fileCategoryName === \"image\" && imageCompressionOptions) {\n const compressed = await compressImageBuffer(\n bufferToUpload,\n mimeType,\n imageCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // Vide :: Only compress if video and options provided\n if (fileCategoryName === \"video\" && videoCompressionOptions) {\n const compressed = await compressVideoBuffer(\n bufferToUpload,\n mimeType,\n videoCompressionOptions\n );\n\n fileCompressFormat = compressed.compressFormat,\n bufferToUpload = compressed.buffer;\n outputSizeBytes = compressed.sizeBytes; // update the file size\n }\n\n // generate thumbnail buffer\n const bufferThumbnail = await generateFileThumbnailBuffer(bufferToUpload, mimeType)\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onStartUpload) {\n\n await FileStorageHook.onStartUpload({\n defaultServiceProps: rest,\n callbackParams: {\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail?.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n }\n })\n }\n\n // upload using the provider - buffer\n const uploadResult = await provider.uploadFile({\n field_ref,\n field_module,\n buffer: bufferToUpload,\n bufferThumbnail: bufferThumbnail.buffer,\n thumbnailOptions,\n ...(foldernameDate ? { foldernameDate } : {}),\n mimeType,\n fileName: fileOriginalName\n } as FileModuleRef & (\n FileLocalUploadFileProps |\n FileGoogleCloudUploadFileProps |\n FileAwsS3UploadFileProps\n ));\n\n const fieldRef = field_ref\n const fieldModule = field_module\n\n const fileName = uploadResult?.filename ?? \"\"\n const contentType = mimeType ?? \"\"\n const folderPath = uploadResult.assetPath ?? \"\"\n const assetUrl = uploadResult.assetUrl ?? \"\"\n const thumbnailUrl = uploadResult?.thumbnailUrl ?? \"\"\n const assetPath = uploadResult.assetPath ?? \"\"\n\n const fileDurationSeconds = bufferThumbnail?.durationSeconds ?? 0\n\n const inputType = `buffer`\n const inputFileSizeBytes = sizeBytes ?? 0\n const inputFileName = fileOriginalName ?? \"\"\n\n const fileSizeBytes = outputSizeBytes ?? 0\n // const fileCompressFormat = ``\n\n const foldernameDay = uploadResult?.folderName?.day ?? \"\"\n const foldernameMonth = uploadResult?.folderName?.month ?? \"\"\n const foldernameYear = uploadResult?.folderName?.year ?? \"\"\n\n const payload: FileCreateProps = {\n data: {\n fieldRef,\n fieldModule,\n tagName,\n description,\n remark: fileRemark,\n folderPath,\n assetUrl,\n thumbnailUrl,\n assetPath,\n fileLabel,\n fileName,\n fileCategoryName,\n contentType,\n inputType,\n inputFileSizeBytes,\n inputFileName,\n fileSizeBytes,\n fileDurationSeconds,\n fileCompressFormat,\n storageProviderName,\n foldernameDay,\n foldernameMonth,\n foldernameYear,\n batchCode,\n referId1,\n referId2,\n referLabel1,\n referLabel2\n } as FileCreateProps[\"data\"],\n };\n\n let responseFile = await createFile(payload);\n\n // Call the consumer hook, if registered\n if (FileStorageHook.onSuccessUpload) {\n await FileStorageHook.onSuccessUpload({\n defaultServiceProps: rest,\n callbackParams: {\n fileId: Number(responseFile?.file_id),\n fileThumbnailUrl: thumbnailUrl,\n fileAssetUrl: assetUrl,\n fileDurationSeconds,\n fieldRef: field_ref,\n fieldModule: field_module,\n tagName,\n label,\n refId,\n refId2,\n refLabel,\n refLabel2,\n remark,\n description,\n foldernameDate,\n file,\n storageProviderName,\n storageProviderOptions,\n fileCategoryName,\n batchCode,\n mimeType,\n bufferFilebuffer: bufferToUpload,\n bufferFileThumbnail: bufferThumbnail.buffer,\n outputSizeBytes,\n fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : \"\",\n imageCompressionOptions,\n videoCompressionOptions\n }\n })\n }\n\n allResponses.push(responseFile)\n }\n\n return allResponses\n\n }\n\n // private\n const createFile = async ({ data }: FileCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create file payload: ${JSON.stringify(_data)}`);\n }\n\n const response = await fileModel.create({ data: _data })\n\n const newFileId = response?.file_id ?? \"\"\n\n return newFileId ? await getFile({ id: Number(newFileId) }) : null\n\n }\n\n const getFile = async ({ id }: FileGetProps) => {\n\n let { data } = await listFiles({\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelFileFields.file_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelFileFields.file_id}`,\n sortorder: \"ASC\"\n })\n\n return data[0] ?? null;\n\n };\n\n const listFiles = async ({ limit, offset, filters = [], sortfield, sortorder }: FileListProps) => {\n\n let sqlSelect: string[] = []\n let sqlRelation: string[] = []\n let sqlGroupBy: string[] = []\n\n let sqlSelectAgg: string[] = []\n let sqlRelationAgg: string[] = []\n\n sqlSelect = [\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n sqlRelation = [\n sqlRelationMaps.creator,\n sqlRelationMaps.updater\n ]\n\n // sqlRelationAgg = []\n\n sqlGroupBy = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `mainfile.isdelete = false`,\n `mainfile.istrash = false`,\n // `LOWER(mainfile.doc_type) = LOWER('${documentTypeKey}')`\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n // get the listing data & count\n const { data, total } = await getListWithCount({\n model: fileModel,\n tableName: \"files\",\n mainAlias: \"mainfile\",\n countKey: `${ModelFileFields.file_id}`,\n accountId: rest.accountId,\n sqlRelationMaps,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n const response = {\n data,\n total\n }\n\n return response\n\n };\n\n const removeFiles = async ({ fileIds, storageSetup }: FileRemoveProps) => {\n\n const {\n // storageProviderName,\n storageProviderOptions\n } = await getStorageSetup(storageSetup)\n\n if (!fileIds.length) throwError('fileIds is required');\n\n const filesToDelete = await fileModel.list({\n where: {\n file_id: { in: fileIds }\n }\n });\n\n // console.log('filesToDelete', filesToDelete)\n\n let providerResponse: any[] = []\n\n // 2️⃣ Delete the physical files\n for (const file of filesToDelete) {\n\n // check the provider to choose delete method\n const storageProviderName = file.storage_provider_name as FileStorageProviderType\n const assetUrl = file.asset_url\n const thumbnailUrl = file.thumbnail_url ?? \"\"\n const assetPath = file.asset_path\n\n if (storageProviderName === \"local\" && assetPath) {\n\n try {\n providerResponse.push(\n await fileLocalStorageProvider.removeFile(assetPath, thumbnailOptions)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Local: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"gcloud\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileGoogleCloudStorageProvider.removeFile(assetUrl, thumbnailUrl, storageProviderOptions.credentials as any)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from GCloud: ${assetUrl}`\n )\n }\n\n }\n\n if (storageProviderName === \"aws\" && assetUrl) {\n\n try {\n providerResponse.push(\n await fileAwsS3StorageProvider.removeFile(assetUrl, thumbnailUrl)\n )\n } catch (err) {\n providerResponse.push(\n `Failed to delete from Aws S3: ${assetUrl}`\n )\n }\n\n }\n\n }\n\n // remove files\n const response = await fileModel.remove({ where: { [`${ModelFileFields.file_id}`]: { in: fileIds } } });\n\n return {\n files: response,\n providerResponse\n }\n };\n\n const getFileUsageSummary = async ({ accountId = 0 }: FileGetUsageSummaryProps) => {\n\n const summaryCount = await fileModel.aggregate({\n field: `file_id`,\n operation: `count`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const summarySize = await fileModel.aggregate({\n field: `file_size_bytes`,\n operation: `sum`,\n where: {\n [`${ModelFileFields.accountid}`]: accountId,\n [`${ModelFileFields.istrash}`]: false,\n [`${ModelFileFields.isdelete}`]: false,\n }\n });\n\n const totalFiles = summaryCount ?? 0;\n const totalBytes = summarySize ?? 0;\n // const totalFiles = summary._count.id;\n\n // Optional: convert bytes to MB or GB\n const totalMB = totalBytes / (1024 * 1024);\n const totalGB = totalBytes / (1024 * 1024 * 1024);\n\n return {\n totalFiles,\n totalBytes,\n totalMB: parseFloat(totalMB.toFixed(2)), // now decimal\n totalGB: parseFloat(totalGB.toFixed(2)), // now decimal\n };\n }\n\n // const getDataTypes = () => {\n // return Object.values(fileDataTypes);\n // }\n\n return {\n uploadFiles,\n // createFile,\n // updateFile,\n getFile,\n listFiles,\n removeFiles,\n // getDataTypes,\n getFileUsageSummary\n }\n\n}\n\n"]}
|
|
@@ -100,8 +100,11 @@ const SmtpEmailService = (props) => {
|
|
|
100
100
|
// Call the consumer hook, if registered
|
|
101
101
|
if (features_1.SmtpEmailHook.onStartSend) {
|
|
102
102
|
await features_1.SmtpEmailHook.onStartSend({
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
defaultServiceProps: rest,
|
|
104
|
+
callbackParams: {
|
|
105
|
+
transporterOptions,
|
|
106
|
+
smtpEmailOptions: hookSetup
|
|
107
|
+
}
|
|
105
108
|
});
|
|
106
109
|
}
|
|
107
110
|
const info = await transporter.sendMail({
|
|
@@ -122,10 +125,13 @@ const SmtpEmailService = (props) => {
|
|
|
122
125
|
// Call the consumer hook, if registered
|
|
123
126
|
if (features_1.SmtpEmailHook.onSuccessSend) {
|
|
124
127
|
const responseCustomHook = await features_1.SmtpEmailHook.onSuccessSend({
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
defaultServiceProps: rest,
|
|
129
|
+
callbackParams: {
|
|
130
|
+
transporterOptions,
|
|
131
|
+
smtpEmailOptions: hookSetup,
|
|
132
|
+
previewMessageUrl, // only if the test account smtp
|
|
133
|
+
gatewayDetails: info
|
|
134
|
+
}
|
|
129
135
|
});
|
|
130
136
|
response = { ...response, custom: responseCustomHook };
|
|
131
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmtpEmailService.js","sourceRoot":"","sources":["../../../src/services/gateway/SmtpEmailService.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps, throwError } from \"@/utils\";\n\n// import { QueryList, QueryGet } from \"@/schema/common\";\n\n// import { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { SmtpEmailHook, FeatureSmtpEmailOptions, FeatureSmtpEmailHbsOptions } from \"@/features\"\n\nimport nodemailer, { Transporter, SendMailOptions } from \"nodemailer\"\nimport hbs from \"nodemailer-express-handlebars\";\n\nexport type SmtpEmailServiceProps = DefaultServiceProps & {\n};\n\nexport type SmtpEmailTransporterOptions = SendMailOptions & {\n template?: string;\n context?: Record<string, any>;\n};\n\n// export type SmtpEmailTransporterOptions = {\n// to: string | string[];\n// from?: string;\n// subject: string;\n// text?: string;\n// html?: string;\n// cc?: string | string[];\n// bcc?: string | string[];\n// }\n\nexport type SmtpEmailSendProps = {\n transporterOptions: SmtpEmailTransporterOptions\n overrideTemplate?: string\n overrideContext?: Record<string, any>\n // hbsOptions: FeatureSmtpEmailHbsOptions\n // hbsTemplate?: string\n // hbsContext?: Record<string, any>\n}\n\nexport const SmtpEmailService = (props: SmtpEmailServiceProps) => {\n\n const {\n ...rest\n } = props\n\n // Lazy init storage\n let nodeMailerTransporter: Transporter | null = null\n let hookSetup: FeatureSmtpEmailOptions | null = null\n let hbsRegistered: boolean = false\n\n const validateHookSetup = (hookSetup: FeatureSmtpEmailOptions | null) => {\n\n if (!hookSetup) {\n throw new Error(\"SmtpEmailHook.onSetup() returned null or undefined\");\n }\n\n const { smtpHost, smtpPort, smtpSecure, smtpCredential, connectionTimeout, hbsOptions } = hookSetup;\n\n if (!smtpHost || typeof smtpHost !== \"string\") {\n throw new Error(\"smtpHost is required and must be a string\");\n }\n\n if (!smtpPort || typeof smtpPort !== \"number\") {\n throw new Error(\"smtpPort is required and must be a number\");\n }\n\n if (typeof smtpSecure !== \"boolean\") {\n throw new Error(\"smtpSecure is required and must be boolean\");\n }\n\n if (!smtpCredential || !smtpCredential.username || !smtpCredential.password) {\n throw new Error(\"smtpCredential with username and password is required\");\n }\n\n if (!connectionTimeout || typeof connectionTimeout !== \"number\") {\n throw new Error(\"connectionTimeout is required and must be a number\");\n }\n\n if (!hbsOptions || typeof hbsOptions !== \"object\") {\n throw new Error(\"hbsOptions is required and must be an object\");\n }\n\n return true;\n };\n\n function validateHbsOptions(hbsOptions: FeatureSmtpEmailHbsOptions) {\n\n if (!hbsOptions) throw new Error(\"HBS options are required\");\n\n const { viewEngine, viewPath, extName } = hbsOptions;\n\n if (!viewEngine || typeof viewEngine !== \"object\") {\n throw new Error(\"hbsOptions.viewEngine is required\");\n }\n\n if (!viewEngine.extname || typeof viewEngine.extname !== \"string\") {\n throw new Error(\"hbsOptions.viewEngine.extname is required and must be a string\");\n }\n\n if (!viewEngine.layoutsDir || typeof viewEngine.layoutsDir !== \"string\") {\n throw new Error(\"hbsOptions.viewEngine.layoutsDir is required and must be a string\");\n }\n\n if (viewEngine.defaultLayout !== undefined &&\n viewEngine.defaultLayout !== false &&\n typeof viewEngine.defaultLayout !== \"string\") {\n throw new Error(\"hbsOptions.viewEngine.defaultLayout must be string or false\");\n }\n\n if (!viewPath || typeof viewPath !== \"string\") {\n throw new Error(\"hbsOptions.viewPath is required and must be a string\");\n }\n\n if (!extName || typeof extName !== \"string\") {\n throw new Error(\"hbsOptions.extName is required and must be a string\");\n }\n }\n\n // Lazy getTransporter function\n const getTransporter = async () => {\n\n if (!nodeMailerTransporter) {\n\n hookSetup = await SmtpEmailHook.onSetup()\n\n // validate the setup configurations\n validateHookSetup(hookSetup); // validate smtp\n validateHbsOptions(hookSetup?.hbsOptions) // validate hbs options\n\n // if (!hookSetup) {\n // throw new Error(\"SmtpEmailHook.onSetup() must return FeatureSmtpEmailOptions\");\n // }\n\n nodeMailerTransporter = nodemailer.createTransport({\n host: hookSetup.smtpHost,\n port: Number(hookSetup.smtpPort),\n secure: Boolean(hookSetup.smtpSecure),\n auth: {\n user: hookSetup.smtpCredential.username,\n pass: hookSetup.smtpCredential.password\n },\n connectionTimeout: hookSetup.connectionTimeout,\n })\n\n if (hookSetup?.hbsOptions && !hbsRegistered) {\n nodeMailerTransporter.use(\"compile\", hbs(hookSetup.hbsOptions));\n hbsRegistered = true\n }\n\n }\n\n return nodeMailerTransporter\n\n }\n\n const sendEmail = async ({\n transporterOptions,\n overrideTemplate = '',\n overrideContext = {}\n }: SmtpEmailSendProps) => {\n\n // get the onSetup from hook\n const transporter = await getTransporter() // only initializes once\n\n let response = {}\n\n try {\n\n // Call the consumer hook, if registered\n if (SmtpEmailHook.onStartSend) {\n await SmtpEmailHook.onStartSend({\n transporterOptions,\n smtpEmailOptions: hookSetup!\n })\n }\n\n const info = await transporter.sendMail({\n ...transporterOptions,\n ...(overrideTemplate ? { template: overrideTemplate } : {}),\n ...(overrideContext ? { context: overrideContext } : {})\n });\n\n // If using a test account\n let previewMessageUrl = nodemailer.getTestMessageUrl(info);\n\n response = {\n ...response,\n success: true,\n messageId: info.messageId,\n accepted: info.accepted,\n previewMessageUrl,\n gatewayDetails: info\n }\n\n // Call the consumer hook, if registered\n if (SmtpEmailHook.onSuccessSend) {\n\n const responseCustomHook = await SmtpEmailHook.onSuccessSend({\n transporterOptions,\n smtpEmailOptions: hookSetup!,\n previewMessageUrl, // only if the test account smtp\n gatewayDetails: info\n })\n\n response = { ...response, custom: responseCustomHook }\n\n }\n\n } catch (error: any) {\n\n response = {\n ...response,\n success: false,\n error: error.code || \"UNKNOWN_ERROR\",\n message: error.message,\n gatewayDetails: error\n }\n }\n\n return response\n }\n\n const validateSmtpEmailOptions = async () => {\n\n const transporter = await getTransporter() // only initializes once\n\n let responseStatus: boolean = false\n let responseMessage: string = ``\n\n try {\n await transporter.verify();\n responseStatus = true\n responseMessage = `Valid smtp email options`\n\n } catch (error) {\n // console.error(\"SMTP Connection verify failed:\", error);\n responseStatus = true\n responseMessage = `Smtp connection verify failed: ${JSON.stringify(error)}`\n }\n\n return {\n status: responseStatus,\n message: responseMessage\n }\n\n };\n\n return {\n sendEmail,\n validateSmtpEmailOptions\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"SmtpEmailService.js","sourceRoot":"","sources":["../../../src/services/gateway/SmtpEmailService.ts"],"names":[],"mappings":";;;;;;AAEA,yDAAyD;AAEzD,oIAAoI;AAEpI,yCAA+F;AAE/F,4DAAqE;AACrE,kGAAgD;AA6BzC,MAAM,gBAAgB,GAAG,CAAC,KAA4B,EAAE,EAAE;IAE7D,MAAM,EACF,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,oBAAoB;IACpB,IAAI,qBAAqB,GAAuB,IAAI,CAAA;IACpD,IAAI,SAAS,GAAmC,IAAI,CAAA;IACpD,IAAI,aAAa,GAAY,KAAK,CAAA;IAElC,MAAM,iBAAiB,GAAG,CAAC,SAAyC,EAAE,EAAE;QAEpE,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;QAEpG,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,iBAAiB,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,SAAS,kBAAkB,CAAC,UAAsC;QAE9D,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAE7D,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAErD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS;YACtC,UAAU,CAAC,aAAa,KAAK,KAAK;YAClC,OAAO,UAAU,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAE9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAEzB,SAAS,GAAG,MAAM,wBAAa,CAAC,OAAO,EAAE,CAAA;YAEzC,oCAAoC;YACpC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAE,gBAAgB;YAC/C,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA,CAAC,uBAAuB;YAEjE,oBAAoB;YACpB,sFAAsF;YACtF,IAAI;YAEJ,qBAAqB,GAAG,oBAAU,CAAC,eAAe,CAAC;gBAC/C,IAAI,EAAE,SAAS,CAAC,QAAQ;gBACxB,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAChC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;gBACrC,IAAI,EAAE;oBACF,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,QAAQ;oBACvC,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,QAAQ;iBAC1C;gBACD,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;aACjD,CAAC,CAAA;YAEF,IAAI,SAAS,EAAE,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC1C,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAA,uCAAG,EAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;gBAChE,aAAa,GAAG,IAAI,CAAA;YACxB,CAAC;QAEL,CAAC;QAED,OAAO,qBAAqB,CAAA;IAEhC,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,KAAK,EAAE,EACrB,kBAAkB,EAClB,gBAAgB,GAAG,EAAE,EACrB,eAAe,GAAG,EAAE,EACH,EAAE,EAAE;QAErB,4BAA4B;QAC5B,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAA,CAAE,wBAAwB;QAEpE,IAAI,QAAQ,GAAG,EAAE,CAAA;QAEjB,IAAI,CAAC;YAED,wCAAwC;YACxC,IAAI,wBAAa,CAAC,WAAW,EAAE,CAAC;gBAC5B,MAAM,wBAAa,CAAC,WAAW,CAAC;oBAC5B,mBAAmB,EAAE,IAAI;oBACzB,cAAc,EAAE;wBACZ,kBAAkB;wBAClB,gBAAgB,EAAE,SAAU;qBAC/B;iBACJ,CAAC,CAAA;YACN,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;gBACpC,GAAG,kBAAkB;gBACrB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC,CAAC;YAEH,0BAA0B;YAC1B,IAAI,iBAAiB,GAAG,oBAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAE3D,QAAQ,GAAG;gBACP,GAAG,QAAQ;gBACX,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,iBAAiB;gBACjB,cAAc,EAAE,IAAI;aACvB,CAAA;YAED,wCAAwC;YACxC,IAAI,wBAAa,CAAC,aAAa,EAAE,CAAC;gBAE9B,MAAM,kBAAkB,GAAG,MAAM,wBAAa,CAAC,aAAa,CAAC;oBACzD,mBAAmB,EAAE,IAAI;oBACzB,cAAc,EAAE;wBACZ,kBAAkB;wBAClB,gBAAgB,EAAE,SAAU;wBAC5B,iBAAiB,EAAE,gCAAgC;wBACnD,cAAc,EAAE,IAAI;qBACvB;iBACJ,CAAC,CAAA;gBAEF,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;YAE1D,CAAC;QAEL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAElB,QAAQ,GAAG;gBACP,GAAG,QAAQ;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,eAAe;gBACpC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,cAAc,EAAE,KAAK;aACxB,CAAA;QACL,CAAC;QAED,OAAO,QAAQ,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,wBAAwB,GAAG,KAAK,IAAI,EAAE;QAExC,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAA,CAAE,wBAAwB;QAEpE,IAAI,cAAc,GAAY,KAAK,CAAA;QACnC,IAAI,eAAe,GAAW,EAAE,CAAA;QAEhC,IAAI,CAAC;YACD,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;YAC3B,cAAc,GAAG,IAAI,CAAA;YACrB,eAAe,GAAG,0BAA0B,CAAA;QAEhD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,0DAA0D;YAC1D,cAAc,GAAG,IAAI,CAAA;YACrB,eAAe,GAAG,kCAAkC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;QAC/E,CAAC;QAED,OAAO;YACH,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,eAAe;SAC3B,CAAA;IAEL,CAAC,CAAC;IAEF,OAAO;QACH,SAAS;QACT,wBAAwB;KAC3B,CAAA;AAEL,CAAC,CAAA;AA3NY,QAAA,gBAAgB,oBA2N5B","sourcesContent":["import { DefaultServiceProps, throwError } from \"@/utils\";\n\n// import { QueryList, QueryGet } from \"@/schema/common\";\n\n// import { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { SmtpEmailHook, FeatureSmtpEmailOptions, FeatureSmtpEmailHbsOptions } from \"@/features\"\n\nimport nodemailer, { Transporter, SendMailOptions } from \"nodemailer\"\nimport hbs from \"nodemailer-express-handlebars\";\n\nexport type SmtpEmailServiceProps = DefaultServiceProps & {\n};\n\nexport type SmtpEmailTransporterOptions = SendMailOptions & {\n template?: string;\n context?: Record<string, any>;\n};\n\n// export type SmtpEmailTransporterOptions = {\n// to: string | string[];\n// from?: string;\n// subject: string;\n// text?: string;\n// html?: string;\n// cc?: string | string[];\n// bcc?: string | string[];\n// }\n\nexport type SmtpEmailSendProps = {\n transporterOptions: SmtpEmailTransporterOptions\n overrideTemplate?: string\n overrideContext?: Record<string, any>\n // hbsOptions: FeatureSmtpEmailHbsOptions\n // hbsTemplate?: string\n // hbsContext?: Record<string, any>\n}\n\nexport const SmtpEmailService = (props: SmtpEmailServiceProps) => {\n\n const {\n ...rest\n } = props\n\n // Lazy init storage\n let nodeMailerTransporter: Transporter | null = null\n let hookSetup: FeatureSmtpEmailOptions | null = null\n let hbsRegistered: boolean = false\n\n const validateHookSetup = (hookSetup: FeatureSmtpEmailOptions | null) => {\n\n if (!hookSetup) {\n throw new Error(\"SmtpEmailHook.onSetup() returned null or undefined\");\n }\n\n const { smtpHost, smtpPort, smtpSecure, smtpCredential, connectionTimeout, hbsOptions } = hookSetup;\n\n if (!smtpHost || typeof smtpHost !== \"string\") {\n throw new Error(\"smtpHost is required and must be a string\");\n }\n\n if (!smtpPort || typeof smtpPort !== \"number\") {\n throw new Error(\"smtpPort is required and must be a number\");\n }\n\n if (typeof smtpSecure !== \"boolean\") {\n throw new Error(\"smtpSecure is required and must be boolean\");\n }\n\n if (!smtpCredential || !smtpCredential.username || !smtpCredential.password) {\n throw new Error(\"smtpCredential with username and password is required\");\n }\n\n if (!connectionTimeout || typeof connectionTimeout !== \"number\") {\n throw new Error(\"connectionTimeout is required and must be a number\");\n }\n\n if (!hbsOptions || typeof hbsOptions !== \"object\") {\n throw new Error(\"hbsOptions is required and must be an object\");\n }\n\n return true;\n };\n\n function validateHbsOptions(hbsOptions: FeatureSmtpEmailHbsOptions) {\n\n if (!hbsOptions) throw new Error(\"HBS options are required\");\n\n const { viewEngine, viewPath, extName } = hbsOptions;\n\n if (!viewEngine || typeof viewEngine !== \"object\") {\n throw new Error(\"hbsOptions.viewEngine is required\");\n }\n\n if (!viewEngine.extname || typeof viewEngine.extname !== \"string\") {\n throw new Error(\"hbsOptions.viewEngine.extname is required and must be a string\");\n }\n\n if (!viewEngine.layoutsDir || typeof viewEngine.layoutsDir !== \"string\") {\n throw new Error(\"hbsOptions.viewEngine.layoutsDir is required and must be a string\");\n }\n\n if (viewEngine.defaultLayout !== undefined &&\n viewEngine.defaultLayout !== false &&\n typeof viewEngine.defaultLayout !== \"string\") {\n throw new Error(\"hbsOptions.viewEngine.defaultLayout must be string or false\");\n }\n\n if (!viewPath || typeof viewPath !== \"string\") {\n throw new Error(\"hbsOptions.viewPath is required and must be a string\");\n }\n\n if (!extName || typeof extName !== \"string\") {\n throw new Error(\"hbsOptions.extName is required and must be a string\");\n }\n }\n\n // Lazy getTransporter function\n const getTransporter = async () => {\n\n if (!nodeMailerTransporter) {\n\n hookSetup = await SmtpEmailHook.onSetup()\n\n // validate the setup configurations\n validateHookSetup(hookSetup); // validate smtp\n validateHbsOptions(hookSetup?.hbsOptions) // validate hbs options\n\n // if (!hookSetup) {\n // throw new Error(\"SmtpEmailHook.onSetup() must return FeatureSmtpEmailOptions\");\n // }\n\n nodeMailerTransporter = nodemailer.createTransport({\n host: hookSetup.smtpHost,\n port: Number(hookSetup.smtpPort),\n secure: Boolean(hookSetup.smtpSecure),\n auth: {\n user: hookSetup.smtpCredential.username,\n pass: hookSetup.smtpCredential.password\n },\n connectionTimeout: hookSetup.connectionTimeout,\n })\n\n if (hookSetup?.hbsOptions && !hbsRegistered) {\n nodeMailerTransporter.use(\"compile\", hbs(hookSetup.hbsOptions));\n hbsRegistered = true\n }\n\n }\n\n return nodeMailerTransporter\n\n }\n\n const sendEmail = async ({\n transporterOptions,\n overrideTemplate = '',\n overrideContext = {}\n }: SmtpEmailSendProps) => {\n\n // get the onSetup from hook\n const transporter = await getTransporter() // only initializes once\n\n let response = {}\n\n try {\n\n // Call the consumer hook, if registered\n if (SmtpEmailHook.onStartSend) {\n await SmtpEmailHook.onStartSend({\n defaultServiceProps: rest,\n callbackParams: {\n transporterOptions,\n smtpEmailOptions: hookSetup!\n }\n })\n }\n\n const info = await transporter.sendMail({\n ...transporterOptions,\n ...(overrideTemplate ? { template: overrideTemplate } : {}),\n ...(overrideContext ? { context: overrideContext } : {})\n });\n\n // If using a test account\n let previewMessageUrl = nodemailer.getTestMessageUrl(info);\n\n response = {\n ...response,\n success: true,\n messageId: info.messageId,\n accepted: info.accepted,\n previewMessageUrl,\n gatewayDetails: info\n }\n\n // Call the consumer hook, if registered\n if (SmtpEmailHook.onSuccessSend) {\n\n const responseCustomHook = await SmtpEmailHook.onSuccessSend({\n defaultServiceProps: rest,\n callbackParams: {\n transporterOptions,\n smtpEmailOptions: hookSetup!,\n previewMessageUrl, // only if the test account smtp\n gatewayDetails: info\n }\n })\n\n response = { ...response, custom: responseCustomHook }\n\n }\n\n } catch (error: any) {\n\n response = {\n ...response,\n success: false,\n error: error.code || \"UNKNOWN_ERROR\",\n message: error.message,\n gatewayDetails: error\n }\n }\n\n return response\n }\n\n const validateSmtpEmailOptions = async () => {\n\n const transporter = await getTransporter() // only initializes once\n\n let responseStatus: boolean = false\n let responseMessage: string = ``\n\n try {\n await transporter.verify();\n responseStatus = true\n responseMessage = `Valid smtp email options`\n\n } catch (error) {\n // console.error(\"SMTP Connection verify failed:\", error);\n responseStatus = true\n responseMessage = `Smtp connection verify failed: ${JSON.stringify(error)}`\n }\n\n return {\n status: responseStatus,\n message: responseMessage\n }\n\n };\n\n return {\n sendEmail,\n validateSmtpEmailOptions\n }\n\n}\n\n"]}
|
|
@@ -249,13 +249,16 @@ const ResetPasswordService = (props) => {
|
|
|
249
249
|
// Call the consumer hook, if registered
|
|
250
250
|
if (features_1.ResetPasswordHook.onRequest) {
|
|
251
251
|
const responseCustomHook = await features_1.ResetPasswordHook.onRequest({
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
252
|
+
defaultServiceProps: rest,
|
|
253
|
+
callbackParams: {
|
|
254
|
+
userId,
|
|
255
|
+
userType,
|
|
256
|
+
resetPasswordMethod,
|
|
257
|
+
emailAddress,
|
|
258
|
+
mobileNumber,
|
|
259
|
+
oneTimeCode: oneTimeCode?.code ?? "",
|
|
260
|
+
user
|
|
261
|
+
}
|
|
259
262
|
});
|
|
260
263
|
responseOneTimeCode = { ...responseOneTimeCode, custom: responseCustomHook };
|
|
261
264
|
}
|
|
@@ -413,11 +416,14 @@ const ResetPasswordService = (props) => {
|
|
|
413
416
|
// Call the consumer hook, if registered
|
|
414
417
|
if (features_1.ResetPasswordHook.onSuccess) {
|
|
415
418
|
const responseCustomHook = await features_1.ResetPasswordHook.onSuccess({
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
419
|
+
defaultServiceProps: rest,
|
|
420
|
+
callbackParams: {
|
|
421
|
+
userId,
|
|
422
|
+
userType,
|
|
423
|
+
resetPasswordMethod,
|
|
424
|
+
oneTimeCode,
|
|
425
|
+
user
|
|
426
|
+
}
|
|
421
427
|
});
|
|
422
428
|
responseOnSuccess = { ...responseOnSuccess, custom: responseCustomHook };
|
|
423
429
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResetPasswordService.js","sourceRoot":"","sources":["../../../src/services/reset_password/ResetPasswordService.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps, validateFormatEmailAddress, validateFormatMobileNumber, throwError } from \"@/utils\";\n\n// import { QueryList, QueryGet } from \"@/schema/common\";\n\n// import { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { dayjs } from \"@/utils\";\n\nimport { ModelAccountFields, ModelOneTimeCodeFields, ModelUserFields } from \"@/models\";\nimport { UserService, AccountService, OneTimeCodeService, OneTimeCodeType, OneTimeCodeCreateProps, oneTimeCodeStatus, oneTimeCodePurposeTypes, AccountListProps } from \"@/services\"\n\nimport { ResetPasswordHook } from \"@/features\"\n\nexport const resetPasswordMethods = {\n email: \"email\",\n sms: \"sms\",\n whatapps: \"whatapps\",\n} as const\n\nexport type ResetPasswordMethod = typeof resetPasswordMethods[keyof typeof resetPasswordMethods]\n\nexport type ResetPasswordServiceProps = DefaultServiceProps & {\n};\n\ntype defaultResetPasswordProps = {\n isOperator: boolean\n accountId: string\n accountCode: string\n}\n\nexport type ResetPasswordRequestProps = {\n data: defaultResetPasswordProps & {\n emailAddress?: string\n mobileNumber?: string\n }\n}\n\nexport type ResetPasswordValidateCodeProps = {\n data: defaultResetPasswordProps & {\n oneTimeCode: string\n }\n}\n\nexport type ResetPasswordPerformProps = {\n data: defaultResetPasswordProps & {\n oneTimeCode: string\n newPassword: string\n }\n}\n\nexport const ResetPasswordService = (props: ResetPasswordServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n const validateAccount = async ({ accountId, accountCode }: {\n accountId: string,\n accountCode: string\n }) => {\n\n if (!accountId && !accountCode) {\n throwError(`AccountId or AccountCode is required`)\n }\n\n let filters: AccountListProps[\"filters\"] = []\n\n if (accountId !== \"\") {\n filters = [{\n field: `${ModelAccountFields.account_id}`,\n operator: \"=\",\n value: `${accountId}`\n }]\n }\n\n if (accountCode !== \"\") {\n filters = [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: `${accountCode}`\n }]\n }\n\n const { data: dataAccounts } = await globalAccountService.listAccounts({\n limit: 1,\n offset: 0,\n filters,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n datatypes: []\n })\n\n const dataAccount = dataAccounts.length > 0 ? dataAccounts[0] : {}\n\n if (!dataAccount?.account_id) {\n throwError(`Unable to retrieve account`)\n }\n\n return {\n accountId: dataAccount?.account_id ?? \"\",\n accountCode: dataAccount?.account_code ?? \"\"\n }\n\n }\n\n // get the user by email (non operator)\n const getUserByEmailNonOperator = async (\n accountId: ResetPasswordRequestProps[\"data\"][\"accountId\"],\n emailAddress: ResetPasswordRequestProps[\"data\"][\"emailAddress\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: Number(accountId), // need to override the account id,\n isOperator: false,\n userType: \"administrator\"\n })\n\n // get the user by email\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `${ModelUserFields.email}`,\n operator: \"=\",\n value: `${emailAddress}`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n }\n\n // get the user by email (operator)\n const getUserByEmailOperator = async (\n emailAddress: ResetPasswordRequestProps[\"data\"][\"emailAddress\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: 0, // not important\n isOperator: true,\n userType: \"operator\"\n })\n\n // get the user by email\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `${ModelUserFields.email}`,\n operator: \"=\",\n value: `${emailAddress}`\n },\n {\n field: `${ModelUserFields.user_type}`,\n operator: \"=\",\n value: `operator`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n // skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n }\n\n // get the user by mobile (non operator)\n const getUserByMobileNonOperator = async (\n accountId: ResetPasswordRequestProps[\"data\"][\"accountId\"],\n mobileNumber: ResetPasswordRequestProps[\"data\"][\"mobileNumber\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: Number(accountId), // need to override the account id,\n isOperator: false,\n userType: \"administrator\"\n })\n\n // get the user by contact\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `contact`,\n operator: \"=\",\n value: `${mobileNumber}`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n\n }\n\n // get the user by mobile (operator)\n const getUserByMobileOperator = async (\n mobileNumber: ResetPasswordRequestProps[\"data\"][\"mobileNumber\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: 0, // not important\n isOperator: true,\n userType: \"operator\"\n })\n\n // get the user by contact\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `contact`,\n operator: \"=\",\n value: `${mobileNumber}`\n },\n {\n field: `${ModelUserFields.user_type}`,\n operator: \"=\",\n value: `operator`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n\n }\n\n const requestResetPassword = async ({ data }: ResetPasswordRequestProps) => {\n\n const isOperator = Boolean(data.isOperator) // check if reset password for operator user or other users(account related)\n const accountId = data.accountId ?? \"\"\n const accountCode = data.accountCode ?? \"\"\n\n let validatedAccountId = ``\n\n // only non operator will check the account\n if (isOperator === false) {\n let acc = await validateAccount({ accountCode, accountId })\n validatedAccountId = acc.accountId\n }\n\n // get the onSetup from hook\n const hookSetup = ResetPasswordHook.onSetup()\n\n const codeType: OneTimeCodeType = hookSetup.oneTimeCodeType\n const resetPasswordMethod: ResetPasswordMethod = hookSetup.resetPasswordMethod\n const emailAddress = data?.emailAddress ?? \"\"\n const mobileNumber = data?.mobileNumber ?? \"\"\n\n let user: any = {}\n\n const oneTimeCodeService = OneTimeCodeService({\n ...rest,\n accountId: isOperator ? 0 : Number(validatedAccountId),\n isOperator,\n field_ref: \"user\",\n field_module: \"administrator\"\n })\n\n if (!resetPasswordMethod) {\n throw new Error(`Invalid reset password method: ${hookSetup?.resetPasswordMethod ?? \"\"}`);\n }\n\n if (resetPasswordMethod === \"email\") {\n if (validateFormatEmailAddress(emailAddress) === false) {\n throw new Error(`Invalid email address: ${emailAddress}`);\n }\n\n // get the user by email\n user = isOperator ?\n await getUserByEmailOperator(emailAddress)\n :\n await getUserByEmailNonOperator(validatedAccountId, emailAddress)\n\n }\n\n if (resetPasswordMethod === \"sms\" || resetPasswordMethod === \"whatapps\") {\n if (validateFormatMobileNumber(mobileNumber) === false) {\n throw new Error(`Invalid mobile number: ${mobileNumber}`);\n }\n\n // get the user by email\n user = isOperator ?\n await getUserByMobileOperator(mobileNumber)\n :\n await getUserByMobileNonOperator(validatedAccountId, mobileNumber)\n\n }\n\n if (emailAddress === \"\" && mobileNumber === \"\") {\n throw new Error(`Either email address or mobile number is required`);\n }\n\n // verify the user\n if (!user?.user_id) {\n throw new Error(`Cannot find the user by ${resetPasswordMethod}: ${emailAddress ? emailAddress : mobileNumber}`);\n }\n\n // verify the user active\n if (Boolean(user?.status) === false) {\n throw new Error(`User is invalid status: ${user?.user_id ?? 0}`);\n }\n\n const userId = Number(user?.user_id ?? 0)\n const userType = user?.user_type ?? \"\"\n\n const codePayload: OneTimeCodeCreateProps = {\n field_ref: \"user\",\n field_module: userType,\n data: {\n purposeType: \"reset_password\",\n codeType,\n emailAddress,\n mobileNumber,\n userId,\n userType\n }\n }\n\n // generate the code \n const oneTimeCode = await oneTimeCodeService.createOneTimeCode(codePayload)\n\n // console.log('oneTimeCode', oneTimeCode)\n\n let responseOneTimeCode = await oneTimeCodeService.getOneTimeCode({ id: Number(oneTimeCode?.one_time_code_id ?? 0), datatypes: [] })\n\n // Call the consumer hook, if registered\n if (ResetPasswordHook.onRequest) {\n\n const responseCustomHook = await ResetPasswordHook.onRequest({\n userId,\n userType,\n resetPasswordMethod,\n emailAddress,\n mobileNumber,\n oneTimeCode: oneTimeCode?.code ?? \"\",\n user\n })\n\n responseOneTimeCode = { ...responseOneTimeCode, custom: responseCustomHook }\n\n }\n\n return responseOneTimeCode\n }\n\n const validateResetPasscodeCode = async ({ data }: ResetPasswordValidateCodeProps) => {\n\n const isOperator = Boolean(data.isOperator) // check if reset password for operator user or other users(account related)\n const accountId = data.accountId ?? \"\"\n const accountCode = data.accountCode ?? \"\"\n\n let validatedAccountId = ``\n\n // only non operator will check the account\n if (isOperator === false) {\n let acc = await validateAccount({ accountCode, accountId })\n validatedAccountId = acc.accountId\n }\n\n const oneTimeCode = data.oneTimeCode ?? \"\"\n\n if (!oneTimeCode) {\n throw new Error(`Reset passcode code cannot be empty`);\n }\n\n const oneTimeCodeService = OneTimeCodeService({\n ...rest,\n accountId: isOperator ? 0 : Number(validatedAccountId),\n isOperator,\n field_ref: \"user\",\n field_module: \"administrator\"\n })\n\n // check code exist\n const { data: existOneTimeCodes } = await oneTimeCodeService.listOneTimeCodes({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `${ModelOneTimeCodeFields.code}`,\n operator: \"=\",\n value: `${oneTimeCode}`\n },\n {\n field: `${ModelOneTimeCodeFields.purpose_type}`,\n operator: \"=\",\n value: `${oneTimeCodePurposeTypes.reset_password}`\n },\n ],\n sortfield: `${ModelOneTimeCodeFields.one_time_code_id}`,\n sortorder: \"ASC\",\n datatypes: [],\n revealCode: true // return the code as well\n })\n\n if (existOneTimeCodes.length <= 0) {\n throw new Error(`Invalid reset password code: ${oneTimeCode}`);\n }\n\n const existOneTimeCode = existOneTimeCodes[0]\n\n // check is not used before\n if (existOneTimeCode?.code_status !== oneTimeCodeStatus.active) {\n throw new Error(`Reset password code is not active/used: ${oneTimeCode}`);\n }\n\n const expiresAt = dayjs(existOneTimeCode?.expires_at)\n const codeIsExpired = dayjs().isAfter(expiresAt)\n\n // check code is expired\n if (codeIsExpired) {\n throw new Error(`Reset password code is expired: ${oneTimeCode}`);\n }\n\n // console.log('existOneTimeCode', existOneTimeCode)\n\n return existOneTimeCode\n }\n\n const performResetPassword = async ({ data }: ResetPasswordPerformProps) => {\n\n const isOperator = Boolean(data.isOperator) // check if reset password for operator user or other users(account related)\n const accountId = data.accountId ?? \"\"\n const accountCode = data.accountCode ?? \"\"\n\n let validatedAccountId = ``\n let validatedAccountCode = ``\n\n // only non operator will check the account\n if (isOperator === false) {\n let acc = await validateAccount({ accountCode, accountId })\n validatedAccountId = acc.accountId\n validatedAccountCode = acc.accountCode\n }\n\n // get the onSetup from hook\n const hookSetup = ResetPasswordHook.onSetup()\n\n // const codeType: OneTimeCodeType = hookSetup.oneTimeCodeType\n const resetPasswordMethod: ResetPasswordMethod = hookSetup.resetPasswordMethod\n const oneTimeCode = data?.oneTimeCode ?? \"\"\n const newPassword = data?.newPassword ?? \"\"\n\n if (!oneTimeCode) {\n throw new Error(`One Time Code is required`);\n }\n\n if (!newPassword) {\n throw new Error(`New password is required`);\n }\n\n const oneTimeCodeService = OneTimeCodeService({\n ...rest,\n accountId: isOperator ? 0 : Number(validatedAccountId),\n isOperator,\n field_ref: \"user\",\n field_module: \"administrator\"\n })\n\n\n // validate the one time code\n const validateOneTimeCode = await validateResetPasscodeCode({\n data: {\n isOperator,\n accountCode: validatedAccountCode,\n accountId: `${validatedAccountId}`,\n oneTimeCode\n }\n })\n\n // retrieve the user by the one time code\n const oneTimeCodeUserId = validateOneTimeCode?.user_id ?? \"\"\n const oneTimeCodeUserType = validateOneTimeCode?.user_type ?? \"\"\n\n if (!oneTimeCodeUserId) {\n throw new Error(`Invalid one time code userId: ${oneTimeCode}`);\n }\n\n if (!oneTimeCodeUserType) {\n throw new Error(`Invalid one time code userId Type: ${oneTimeCode}`);\n }\n\n // retrive the user information\n const userService = UserService({\n ...rest,\n isOperator: true, // skip the account id\n accountId: Number(validatedAccountId),\n userType: oneTimeCodeUserType\n })\n\n const user = await userService.getUser({\n id: Number(oneTimeCodeUserId),\n datatypes: [],\n skipFilterUserType: true,\n })\n\n // verify the user\n if (!user?.user_id) {\n throw new Error(`Cannot find the userId: ${Number(oneTimeCodeUserId)}`);\n }\n\n // verify the user active\n if (Boolean(user?.status) === false) {\n throw new Error(`User is invalid status: ${user?.user_id ?? 0}`);\n }\n\n const userId = Number(user?.user_id ?? 0)\n const userType = user?.user_type ?? \"\"\n\n // consume the one time code\n let responseConsume = await oneTimeCodeService.consumeOneTimeCode({\n field_ref: \"user\",\n field_module: userType,\n data: {\n oneTimeCode,\n purposeType: \"reset_password\",\n userId,\n userType\n }\n })\n\n // change password for user\n let responseOnSuccess = await userService.replacePassword({\n id: userId,\n data: {\n unhashLoginPassword: newPassword\n },\n isOperator: Boolean(isOperator)\n })\n\n // Call the consumer hook, if registered\n if (ResetPasswordHook.onSuccess) {\n\n const responseCustomHook = await ResetPasswordHook.onSuccess({\n userId,\n userType,\n resetPasswordMethod,\n oneTimeCode,\n user\n })\n\n responseOnSuccess = { ...responseOnSuccess, custom: responseCustomHook }\n\n }\n\n return {\n ...responseOnSuccess,\n consumeOneTimeCode: responseConsume\n }\n }\n\n return {\n requestResetPassword,\n validateResetPasscodeCode,\n performResetPassword\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"ResetPasswordService.js","sourceRoot":"","sources":["../../../src/services/reset_password/ResetPasswordService.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps, validateFormatEmailAddress, validateFormatMobileNumber, throwError } from \"@/utils\";\n\n// import { QueryList, QueryGet } from \"@/schema/common\";\n\n// import { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport { dayjs } from \"@/utils\";\n\nimport { ModelAccountFields, ModelOneTimeCodeFields, ModelUserFields } from \"@/models\";\nimport { UserService, AccountService, OneTimeCodeService, OneTimeCodeType, OneTimeCodeCreateProps, oneTimeCodeStatus, oneTimeCodePurposeTypes, AccountListProps } from \"@/services\"\n\nimport { ResetPasswordHook } from \"@/features\"\n\nexport const resetPasswordMethods = {\n email: \"email\",\n sms: \"sms\",\n whatapps: \"whatapps\",\n} as const\n\nexport type ResetPasswordMethod = typeof resetPasswordMethods[keyof typeof resetPasswordMethods]\n\nexport type ResetPasswordServiceProps = DefaultServiceProps & {\n};\n\ntype defaultResetPasswordProps = {\n isOperator: boolean\n accountId: string\n accountCode: string\n}\n\nexport type ResetPasswordRequestProps = {\n data: defaultResetPasswordProps & {\n emailAddress?: string\n mobileNumber?: string\n }\n}\n\nexport type ResetPasswordValidateCodeProps = {\n data: defaultResetPasswordProps & {\n oneTimeCode: string\n }\n}\n\nexport type ResetPasswordPerformProps = {\n data: defaultResetPasswordProps & {\n oneTimeCode: string\n newPassword: string\n }\n}\n\nexport const ResetPasswordService = (props: ResetPasswordServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n const validateAccount = async ({ accountId, accountCode }: {\n accountId: string,\n accountCode: string\n }) => {\n\n if (!accountId && !accountCode) {\n throwError(`AccountId or AccountCode is required`)\n }\n\n let filters: AccountListProps[\"filters\"] = []\n\n if (accountId !== \"\") {\n filters = [{\n field: `${ModelAccountFields.account_id}`,\n operator: \"=\",\n value: `${accountId}`\n }]\n }\n\n if (accountCode !== \"\") {\n filters = [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: `${accountCode}`\n }]\n }\n\n const { data: dataAccounts } = await globalAccountService.listAccounts({\n limit: 1,\n offset: 0,\n filters,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n datatypes: []\n })\n\n const dataAccount = dataAccounts.length > 0 ? dataAccounts[0] : {}\n\n if (!dataAccount?.account_id) {\n throwError(`Unable to retrieve account`)\n }\n\n return {\n accountId: dataAccount?.account_id ?? \"\",\n accountCode: dataAccount?.account_code ?? \"\"\n }\n\n }\n\n // get the user by email (non operator)\n const getUserByEmailNonOperator = async (\n accountId: ResetPasswordRequestProps[\"data\"][\"accountId\"],\n emailAddress: ResetPasswordRequestProps[\"data\"][\"emailAddress\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: Number(accountId), // need to override the account id,\n isOperator: false,\n userType: \"administrator\"\n })\n\n // get the user by email\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `${ModelUserFields.email}`,\n operator: \"=\",\n value: `${emailAddress}`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n }\n\n // get the user by email (operator)\n const getUserByEmailOperator = async (\n emailAddress: ResetPasswordRequestProps[\"data\"][\"emailAddress\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: 0, // not important\n isOperator: true,\n userType: \"operator\"\n })\n\n // get the user by email\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `${ModelUserFields.email}`,\n operator: \"=\",\n value: `${emailAddress}`\n },\n {\n field: `${ModelUserFields.user_type}`,\n operator: \"=\",\n value: `operator`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n // skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n }\n\n // get the user by mobile (non operator)\n const getUserByMobileNonOperator = async (\n accountId: ResetPasswordRequestProps[\"data\"][\"accountId\"],\n mobileNumber: ResetPasswordRequestProps[\"data\"][\"mobileNumber\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: Number(accountId), // need to override the account id,\n isOperator: false,\n userType: \"administrator\"\n })\n\n // get the user by contact\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `contact`,\n operator: \"=\",\n value: `${mobileNumber}`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n\n }\n\n // get the user by mobile (operator)\n const getUserByMobileOperator = async (\n mobileNumber: ResetPasswordRequestProps[\"data\"][\"mobileNumber\"]\n ) => {\n\n const globalUserService = UserService({\n ...rest,\n accountId: 0, // not important\n isOperator: true,\n userType: \"operator\"\n })\n\n // get the user by contact\n let { data: dataUser } = await globalUserService.listUsers({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `contact`,\n operator: \"=\",\n value: `${mobileNumber}`\n },\n {\n field: `${ModelUserFields.user_type}`,\n operator: \"=\",\n value: `operator`\n }\n ],\n sortfield: `${ModelUserFields.user_id}`,\n sortorder: \"ASC\",\n includePassword: false,\n skipFilterUserType: true,\n datatypes: []\n })\n\n return dataUser.length > 0 ? dataUser[0] : {}\n\n }\n\n const requestResetPassword = async ({ data }: ResetPasswordRequestProps) => {\n\n const isOperator = Boolean(data.isOperator) // check if reset password for operator user or other users(account related)\n const accountId = data.accountId ?? \"\"\n const accountCode = data.accountCode ?? \"\"\n\n let validatedAccountId = ``\n\n // only non operator will check the account\n if (isOperator === false) {\n let acc = await validateAccount({ accountCode, accountId })\n validatedAccountId = acc.accountId\n }\n\n // get the onSetup from hook\n const hookSetup = ResetPasswordHook.onSetup()\n\n const codeType: OneTimeCodeType = hookSetup.oneTimeCodeType\n const resetPasswordMethod: ResetPasswordMethod = hookSetup.resetPasswordMethod\n const emailAddress = data?.emailAddress ?? \"\"\n const mobileNumber = data?.mobileNumber ?? \"\"\n\n let user: any = {}\n\n const oneTimeCodeService = OneTimeCodeService({\n ...rest,\n accountId: isOperator ? 0 : Number(validatedAccountId),\n isOperator,\n field_ref: \"user\",\n field_module: \"administrator\"\n })\n\n if (!resetPasswordMethod) {\n throw new Error(`Invalid reset password method: ${hookSetup?.resetPasswordMethod ?? \"\"}`);\n }\n\n if (resetPasswordMethod === \"email\") {\n if (validateFormatEmailAddress(emailAddress) === false) {\n throw new Error(`Invalid email address: ${emailAddress}`);\n }\n\n // get the user by email\n user = isOperator ?\n await getUserByEmailOperator(emailAddress)\n :\n await getUserByEmailNonOperator(validatedAccountId, emailAddress)\n\n }\n\n if (resetPasswordMethod === \"sms\" || resetPasswordMethod === \"whatapps\") {\n if (validateFormatMobileNumber(mobileNumber) === false) {\n throw new Error(`Invalid mobile number: ${mobileNumber}`);\n }\n\n // get the user by email\n user = isOperator ?\n await getUserByMobileOperator(mobileNumber)\n :\n await getUserByMobileNonOperator(validatedAccountId, mobileNumber)\n\n }\n\n if (emailAddress === \"\" && mobileNumber === \"\") {\n throw new Error(`Either email address or mobile number is required`);\n }\n\n // verify the user\n if (!user?.user_id) {\n throw new Error(`Cannot find the user by ${resetPasswordMethod}: ${emailAddress ? emailAddress : mobileNumber}`);\n }\n\n // verify the user active\n if (Boolean(user?.status) === false) {\n throw new Error(`User is invalid status: ${user?.user_id ?? 0}`);\n }\n\n const userId = Number(user?.user_id ?? 0)\n const userType = user?.user_type ?? \"\"\n\n const codePayload: OneTimeCodeCreateProps = {\n field_ref: \"user\",\n field_module: userType,\n data: {\n purposeType: \"reset_password\",\n codeType,\n emailAddress,\n mobileNumber,\n userId,\n userType\n }\n }\n\n // generate the code \n const oneTimeCode = await oneTimeCodeService.createOneTimeCode(codePayload)\n\n // console.log('oneTimeCode', oneTimeCode)\n\n let responseOneTimeCode = await oneTimeCodeService.getOneTimeCode({ id: Number(oneTimeCode?.one_time_code_id ?? 0), datatypes: [] })\n\n // Call the consumer hook, if registered\n if (ResetPasswordHook.onRequest) {\n\n const responseCustomHook = await ResetPasswordHook.onRequest({\n defaultServiceProps: rest,\n callbackParams: {\n userId,\n userType,\n resetPasswordMethod,\n emailAddress,\n mobileNumber,\n oneTimeCode: oneTimeCode?.code ?? \"\",\n user\n }\n })\n\n responseOneTimeCode = { ...responseOneTimeCode, custom: responseCustomHook }\n\n }\n\n return responseOneTimeCode\n }\n\n const validateResetPasscodeCode = async ({ data }: ResetPasswordValidateCodeProps) => {\n\n const isOperator = Boolean(data.isOperator) // check if reset password for operator user or other users(account related)\n const accountId = data.accountId ?? \"\"\n const accountCode = data.accountCode ?? \"\"\n\n let validatedAccountId = ``\n\n // only non operator will check the account\n if (isOperator === false) {\n let acc = await validateAccount({ accountCode, accountId })\n validatedAccountId = acc.accountId\n }\n\n const oneTimeCode = data.oneTimeCode ?? \"\"\n\n if (!oneTimeCode) {\n throw new Error(`Reset passcode code cannot be empty`);\n }\n\n const oneTimeCodeService = OneTimeCodeService({\n ...rest,\n accountId: isOperator ? 0 : Number(validatedAccountId),\n isOperator,\n field_ref: \"user\",\n field_module: \"administrator\"\n })\n\n // check code exist\n const { data: existOneTimeCodes } = await oneTimeCodeService.listOneTimeCodes({\n limit: 1,\n offset: 0,\n filters: [\n {\n field: `${ModelOneTimeCodeFields.code}`,\n operator: \"=\",\n value: `${oneTimeCode}`\n },\n {\n field: `${ModelOneTimeCodeFields.purpose_type}`,\n operator: \"=\",\n value: `${oneTimeCodePurposeTypes.reset_password}`\n },\n ],\n sortfield: `${ModelOneTimeCodeFields.one_time_code_id}`,\n sortorder: \"ASC\",\n datatypes: [],\n revealCode: true // return the code as well\n })\n\n if (existOneTimeCodes.length <= 0) {\n throw new Error(`Invalid reset password code: ${oneTimeCode}`);\n }\n\n const existOneTimeCode = existOneTimeCodes[0]\n\n // check is not used before\n if (existOneTimeCode?.code_status !== oneTimeCodeStatus.active) {\n throw new Error(`Reset password code is not active/used: ${oneTimeCode}`);\n }\n\n const expiresAt = dayjs(existOneTimeCode?.expires_at)\n const codeIsExpired = dayjs().isAfter(expiresAt)\n\n // check code is expired\n if (codeIsExpired) {\n throw new Error(`Reset password code is expired: ${oneTimeCode}`);\n }\n\n // console.log('existOneTimeCode', existOneTimeCode)\n\n return existOneTimeCode\n }\n\n const performResetPassword = async ({ data }: ResetPasswordPerformProps) => {\n\n const isOperator = Boolean(data.isOperator) // check if reset password for operator user or other users(account related)\n const accountId = data.accountId ?? \"\"\n const accountCode = data.accountCode ?? \"\"\n\n let validatedAccountId = ``\n let validatedAccountCode = ``\n\n // only non operator will check the account\n if (isOperator === false) {\n let acc = await validateAccount({ accountCode, accountId })\n validatedAccountId = acc.accountId\n validatedAccountCode = acc.accountCode\n }\n\n // get the onSetup from hook\n const hookSetup = ResetPasswordHook.onSetup()\n\n // const codeType: OneTimeCodeType = hookSetup.oneTimeCodeType\n const resetPasswordMethod: ResetPasswordMethod = hookSetup.resetPasswordMethod\n const oneTimeCode = data?.oneTimeCode ?? \"\"\n const newPassword = data?.newPassword ?? \"\"\n\n if (!oneTimeCode) {\n throw new Error(`One Time Code is required`);\n }\n\n if (!newPassword) {\n throw new Error(`New password is required`);\n }\n\n const oneTimeCodeService = OneTimeCodeService({\n ...rest,\n accountId: isOperator ? 0 : Number(validatedAccountId),\n isOperator,\n field_ref: \"user\",\n field_module: \"administrator\"\n })\n\n\n // validate the one time code\n const validateOneTimeCode = await validateResetPasscodeCode({\n data: {\n isOperator,\n accountCode: validatedAccountCode,\n accountId: `${validatedAccountId}`,\n oneTimeCode\n }\n })\n\n // retrieve the user by the one time code\n const oneTimeCodeUserId = validateOneTimeCode?.user_id ?? \"\"\n const oneTimeCodeUserType = validateOneTimeCode?.user_type ?? \"\"\n\n if (!oneTimeCodeUserId) {\n throw new Error(`Invalid one time code userId: ${oneTimeCode}`);\n }\n\n if (!oneTimeCodeUserType) {\n throw new Error(`Invalid one time code userId Type: ${oneTimeCode}`);\n }\n\n // retrive the user information\n const userService = UserService({\n ...rest,\n isOperator: true, // skip the account id\n accountId: Number(validatedAccountId),\n userType: oneTimeCodeUserType\n })\n\n const user = await userService.getUser({\n id: Number(oneTimeCodeUserId),\n datatypes: [],\n skipFilterUserType: true,\n })\n\n // verify the user\n if (!user?.user_id) {\n throw new Error(`Cannot find the userId: ${Number(oneTimeCodeUserId)}`);\n }\n\n // verify the user active\n if (Boolean(user?.status) === false) {\n throw new Error(`User is invalid status: ${user?.user_id ?? 0}`);\n }\n\n const userId = Number(user?.user_id ?? 0)\n const userType = user?.user_type ?? \"\"\n\n // consume the one time code\n let responseConsume = await oneTimeCodeService.consumeOneTimeCode({\n field_ref: \"user\",\n field_module: userType,\n data: {\n oneTimeCode,\n purposeType: \"reset_password\",\n userId,\n userType\n }\n })\n\n // change password for user\n let responseOnSuccess = await userService.replacePassword({\n id: userId,\n data: {\n unhashLoginPassword: newPassword\n },\n isOperator: Boolean(isOperator)\n })\n\n // Call the consumer hook, if registered\n if (ResetPasswordHook.onSuccess) {\n\n const responseCustomHook = await ResetPasswordHook.onSuccess({\n defaultServiceProps: rest,\n callbackParams: {\n userId,\n userType,\n resetPasswordMethod,\n oneTimeCode,\n user\n }\n })\n\n responseOnSuccess = { ...responseOnSuccess, custom: responseCustomHook }\n\n }\n\n return {\n ...responseOnSuccess,\n consumeOneTimeCode: responseConsume\n }\n }\n\n return {\n requestResetPassword,\n validateResetPasscodeCode,\n performResetPassword\n }\n\n}\n\n"]}
|
|
@@ -73,7 +73,10 @@ const UserMeService = (props) => {
|
|
|
73
73
|
// Call the consumer hook, if success
|
|
74
74
|
if (features_1.UserMeHook.onSuccessUpdateMe) {
|
|
75
75
|
await features_1.UserMeHook.onSuccessUpdateMe({
|
|
76
|
-
|
|
76
|
+
defaultServiceProps: rest,
|
|
77
|
+
callbackParams: {
|
|
78
|
+
userMe
|
|
79
|
+
}
|
|
77
80
|
});
|
|
78
81
|
}
|
|
79
82
|
return userMe;
|
|
@@ -84,7 +87,10 @@ const UserMeService = (props) => {
|
|
|
84
87
|
// Call the consumer hook, if remove
|
|
85
88
|
if (features_1.UserMeHook.onSuccessRemoveMe) {
|
|
86
89
|
await features_1.UserMeHook.onSuccessRemoveMe({
|
|
87
|
-
|
|
90
|
+
defaultServiceProps: rest,
|
|
91
|
+
callbackParams: {
|
|
92
|
+
userMe: currentMe
|
|
93
|
+
}
|
|
88
94
|
});
|
|
89
95
|
}
|
|
90
96
|
return response;
|
|
@@ -137,7 +143,10 @@ const UserMeService = (props) => {
|
|
|
137
143
|
// remove the password
|
|
138
144
|
delete user.password;
|
|
139
145
|
await features_1.UserMeHook.onSuccessChangePasswordMe({
|
|
140
|
-
|
|
146
|
+
defaultServiceProps: rest,
|
|
147
|
+
callbackParams: {
|
|
148
|
+
userMe: user
|
|
149
|
+
}
|
|
141
150
|
});
|
|
142
151
|
}
|
|
143
152
|
return responseUser;
|