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.
Files changed (36) hide show
  1. package/dist/features/auth_token/authTokenRegistry.js +1 -1
  2. package/dist/features/auth_token/authTokenRegistry.js.map +1 -1
  3. package/dist/features/auth_token/authTokenType.d.ts +2 -1
  4. package/dist/features/auth_token/authTokenType.js.map +1 -1
  5. package/dist/features/core_config/coreConfigType.js.map +1 -1
  6. package/dist/features/file_storage/fileStorageType.d.ts +4 -3
  7. package/dist/features/file_storage/fileStorageType.js.map +1 -1
  8. package/dist/features/reset_password/resetPasswordType.d.ts +7 -6
  9. package/dist/features/reset_password/resetPasswordType.js.map +1 -1
  10. package/dist/features/smtp_email/smtpEmailType.d.ts +7 -6
  11. package/dist/features/smtp_email/smtpEmailType.js.map +1 -1
  12. package/dist/features/user_me/userMeRegistry.js +0 -18
  13. package/dist/features/user_me/userMeRegistry.js.map +1 -1
  14. package/dist/features/user_me/userMeType.d.ts +4 -3
  15. package/dist/features/user_me/userMeType.js.map +1 -1
  16. package/dist/services/access_control/AccessControlService.js +2 -2
  17. package/dist/services/access_control/AccessControlService.js.map +1 -1
  18. package/dist/services/auth/AuthService.js +14 -2
  19. package/dist/services/auth/AuthService.js.map +1 -1
  20. package/dist/services/file/FileService.js +56 -50
  21. package/dist/services/file/FileService.js.map +1 -1
  22. package/dist/services/gateway/SmtpEmailService.js +12 -6
  23. package/dist/services/gateway/SmtpEmailService.js.map +1 -1
  24. package/dist/services/reset_password/ResetPasswordService.js +18 -12
  25. package/dist/services/reset_password/ResetPasswordService.js.map +1 -1
  26. package/dist/services/user/UserMeService.js +12 -3
  27. package/dist/services/user/UserMeService.js.map +1 -1
  28. package/dist/utils/featureUtils.d.ts +5 -0
  29. package/dist/utils/featureUtils.js +3 -0
  30. package/dist/utils/featureUtils.js.map +1 -0
  31. package/dist/utils/index.d.ts +1 -0
  32. package/dist/utils/index.js.map +1 -1
  33. package/dist/utils/serviceUtils.d.ts +2 -18
  34. package/dist/utils/serviceUtils.js +0 -1
  35. package/dist/utils/serviceUtils.js.map +1 -1
  36. package/package.json +1 -1
@@ -4,7 +4,7 @@ exports.AuthTokenHook = void 0;
4
4
  // import { throwError } from '../../utils'
5
5
  // Runtime for injected hook
6
6
  exports.AuthTokenHook = {
7
- onSuccessAuthenticate: async (authTokenResult) => {
7
+ onSuccessAuthenticate: async (props) => {
8
8
  // console.log('authTokenResult', authTokenResult)
9
9
  // example to add custom props into return auth token result
10
10
  // return {
@@ -1 +1 @@
1
- {"version":3,"file":"authTokenRegistry.js","sourceRoot":"","sources":["../../../src/features/auth_token/authTokenRegistry.ts"],"names":[],"mappings":";;;AAEA,uCAAuC;AAEvC,4BAA4B;AACf,QAAA,aAAa,GAA0B;IAChD,qBAAqB,EAAE,KAAK,EAAE,eAAyD,EAAE,EAAE;QAEvF,kDAAkD;QAElD,4DAA4D;QAE5D,WAAW;QACX,0BAA0B;QAC1B,qBAAqB;QACrB,IAAI;IAGR,CAAC;CACJ,CAAA","sourcesContent":["import { FeatureAuthTokenProps, FeatureAuthTokenSuccessAuthenticateProps } from './authTokenType'\n\n// import { throwError } from '@/utils'\n\n// Runtime for injected hook\nexport const AuthTokenHook: FeatureAuthTokenProps = {\n onSuccessAuthenticate: async (authTokenResult: FeatureAuthTokenSuccessAuthenticateProps) => {\n\n // console.log('authTokenResult', authTokenResult)\n\n // example to add custom props into return auth token result\n\n // return {\n // ...authTokenResult,\n // workerId: 1000\n // }\n\n\n }\n}"]}
1
+ {"version":3,"file":"authTokenRegistry.js","sourceRoot":"","sources":["../../../src/features/auth_token/authTokenRegistry.ts"],"names":[],"mappings":";;;AAEA,uCAAuC;AAEvC,4BAA4B;AACf,QAAA,aAAa,GAA0B;IAChD,qBAAqB,EAAE,KAAK,EAAE,KAA+C,EAAE,EAAE;QAE7E,kDAAkD;QAElD,4DAA4D;QAE5D,WAAW;QACX,0BAA0B;QAC1B,qBAAqB;QACrB,IAAI;IAGR,CAAC;CACJ,CAAA","sourcesContent":["import { FeatureAuthTokenProps, FeatureAuthTokenSuccessAuthenticateProps } from './authTokenType'\n\n// import { throwError } from '@/utils'\n\n// Runtime for injected hook\nexport const AuthTokenHook: FeatureAuthTokenProps = {\n onSuccessAuthenticate: async (props: FeatureAuthTokenSuccessAuthenticateProps) => {\n\n // console.log('authTokenResult', authTokenResult)\n\n // example to add custom props into return auth token result\n\n // return {\n // ...authTokenResult,\n // workerId: 1000\n // }\n\n\n }\n}"]}
@@ -1,5 +1,6 @@
1
1
  import { AuthTokenResult } from "../../services";
2
- export type FeatureAuthTokenSuccessAuthenticateProps = AuthTokenResult & {};
2
+ import { FeatureCallbackProps } from '../../utils';
3
+ export type FeatureAuthTokenSuccessAuthenticateProps = FeatureCallbackProps<AuthTokenResult>;
3
4
  export type FeatureAuthTokenProps = {
4
5
  onSuccessAuthenticate?: (payload: FeatureAuthTokenSuccessAuthenticateProps) => Promise<any>;
5
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"authTokenType.js","sourceRoot":"","sources":["../../../src/features/auth_token/authTokenType.ts"],"names":[],"mappings":"","sourcesContent":["import { AuthTokenResult } from \"../../services\"\n\nexport type FeatureAuthTokenSuccessAuthenticateProps = AuthTokenResult & {\n}\n\nexport type FeatureAuthTokenProps = {\n onSuccessAuthenticate?: (payload: FeatureAuthTokenSuccessAuthenticateProps) => Promise<any>\n}"]}
1
+ {"version":3,"file":"authTokenType.js","sourceRoot":"","sources":["../../../src/features/auth_token/authTokenType.ts"],"names":[],"mappings":"","sourcesContent":["import { AuthTokenResult } from \"../../services\"\nimport { FeatureCallbackProps } from '@/utils';\n\nexport type FeatureAuthTokenSuccessAuthenticateProps = FeatureCallbackProps<AuthTokenResult>\n\nexport type FeatureAuthTokenProps = {\n onSuccessAuthenticate?: (payload: FeatureAuthTokenSuccessAuthenticateProps) => Promise<any>\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"coreConfigType.js","sourceRoot":"","sources":["../../../src/features/core_config/coreConfigType.ts"],"names":[],"mappings":"","sourcesContent":["import { UserType } from \"@/services\"\nimport { AccessPolicyWithExtra } from \"@/access_control\"\n\nexport type FeatureCoreConfigOptions = {\n authSecretKey: string\n accessKeyEncryptionSecretKey: string\n prisma: any,\n\n // New optional hook for access control policies\n // extendAccessControl?: <ExtraScopes extends string>(\n // policies: Record<UserType, AccessPolicyWithExtra<ExtraScopes>>\n // ) => void\n\n /**\n * Hook to extend access control policies.\n * Must return the extra maps for consumer-defined scopes/modules/actions.\n */\n extendAccessControl?: <ExtraScopes extends string>(\n policies: Record<UserType, AccessPolicyWithExtra<ExtraScopes>>\n ) => {\n extraScopeModuleMap: Map<string, { value: string; label: string }[]>;\n extraActionMap: Map<string, string>;\n };\n}\n\nexport type FeatureCoreConfigProps = {\n onSetup: () => FeatureCoreConfigOptions\n}"]}
1
+ {"version":3,"file":"coreConfigType.js","sourceRoot":"","sources":["../../../src/features/core_config/coreConfigType.ts"],"names":[],"mappings":"","sourcesContent":["import { UserType } from \"@/services\"\nimport { AccessPolicyWithExtra } from \"@/access_control\"\n\nexport type FeatureCoreConfigOptions = {\n authSecretKey: string\n accessKeyEncryptionSecretKey: string\n prisma: any,\n\n // New optional hook for access control policies\n // extendAccessControl?: <ExtraScopes extends string>(\n // policies: Record<UserType, AccessPolicyWithExtra<ExtraScopes>>\n // ) => void\n\n /**\n * Hook to extend access control policies.\n * Must return the extra maps for consumer-defined scopes/modules/actions.\n */\n extendAccessControl?: <ExtraScopes extends string>(\n policies: Record<UserType, AccessPolicyWithExtra<ExtraScopes>>\n ) => {\n extraScopeModuleMap: Map<string, { value: string; label: string }[]>;\n extraActionMap: Map<string, string>;\n };\n}\n\n// export type FeatureCoreConfigOptions = {\n// authSecretKey: string\n// accessKeyEncryptionSecretKey: string\n// prisma: any,\n\n// // New optional hook for access control policies\n// // extendAccessControl?: <ExtraScopes extends string>(\n// // policies: Record<UserType, AccessPolicyWithExtra<ExtraScopes>>\n// // ) => void\n\n// /**\n// * Hook to extend access control policies.\n// * Must return the extra maps for consumer-defined scopes/modules/actions.\n// */\n// extendAccessControl?: <ExtraScopes extends string>(\n// policies: Record<UserType, AccessPolicyWithExtra<ExtraScopes>>\n// ) => {\n// extraScopeModuleMap: Map<string, { value: string; label: string }[]>;\n// extraActionMap: Map<string, string>;\n// };\n// }\n\nexport type FeatureCoreConfigProps = {\n onSetup: () => FeatureCoreConfigOptions\n}"]}
@@ -1,4 +1,5 @@
1
1
  import { FileStorageProviderType, FileLocalProviderOptions, FileGoogleCloudProviderOptions, FileAwsS3ProviderOptions, FileImageCompressionOptions, FileVideoCompressionOptions, FileUploadProps, FileCategoryName, FileUploadItem } from "../../services";
2
+ import { FeatureCallbackProps } from "../../utils";
2
3
  export type FeatureFileStorageType = FileStorageProviderType;
3
4
  export type FeatureFileStorageConfiguration = {
4
5
  uploadMaxSize: number;
@@ -74,13 +75,13 @@ type DefaultUpload = {
74
75
  imageCompressionOptions?: FileImageCompressionOptions;
75
76
  videoCompressionOptions?: FileVideoCompressionOptions;
76
77
  };
77
- export type FeatureFileStorageStartUploadProps = DefaultUpload & {};
78
- export type FeatureFileStorageSuccessUploadProps = DefaultUpload & {
78
+ export type FeatureFileStorageStartUploadProps = FeatureCallbackProps<DefaultUpload & {}>;
79
+ export type FeatureFileStorageSuccessUploadProps = FeatureCallbackProps<DefaultUpload & {
79
80
  fileId: number;
80
81
  fileThumbnailUrl: string;
81
82
  fileAssetUrl: string;
82
83
  fileDurationSeconds: number;
83
- };
84
+ }>;
84
85
  export type FeatureFileStorageProps = {
85
86
  onSetup: () => Promise<FeatureFileStorageOptions>;
86
87
  onStartUpload: (payload: FeatureFileStorageStartUploadProps) => Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"fileStorageType.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageType.ts"],"names":[],"mappings":"","sourcesContent":["import {\n FileStorageProviderType,\n FileLocalProviderOptions,\n FileGoogleCloudProviderOptions,\n FileAwsS3ProviderOptions,\n FileImageCompressionOptions,\n FileVideoCompressionOptions,\n FileUploadProps,\n FileCategoryName,\n FileUploadItem\n} from \"../../services\";\n\nexport type FeatureFileStorageType = FileStorageProviderType\n\nexport type FeatureFileStorageConfiguration = {\n uploadMaxSize: number // e.g., 52428800 (50 MB)\n allowedFileTypes: string[] // e.g., [\"image/jpeg\", \"image/png\", \"application/pdf\", \"video/mp4\"]\n imageMaxWidth?: number // max width for images (e.g., 800)\n imageQuality?: number // compression quality (1-100)\n videoCRF?: number // Compression rate factor, lower = higher quality (e.g., 28)\n videoPreset?: \"ultrafast\" | \"superfast\" | \"veryfast\" | \"faster\" | \"fast\" | \"medium\" | \"slow\" | \"slower\" | \"veryslow\";\n videoResolution?: number; // Max width for videos, preserves aspect ratio (e.g., 1280)\n}\n\nexport type FeatureFileStorageLocalOptions = {\n basePath: string\n baseUrl: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\nexport type FeatureFileStorageGoogleCloudOptions = {\n bucketName: string\n credentialPath: string\n baseUrl: string\n basePath: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\nexport type FeatureFileStorageAwsS3Options = {\n bucketName: string\n region: string\n baseUrl: string\n basePath: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n credentials: {\n accessKeyId: string\n secretAccessKey: string\n sessionToken?: string\n }\n}\n\n/* 🔑 Discriminated union */\nexport type FeatureFileStorageOptions =\n | {\n storageType: \"local\"\n storageConfiguration: FeatureFileStorageConfiguration\n localStorageOptions: FeatureFileStorageLocalOptions\n }\n | {\n storageType: \"gcloud\"\n storageConfiguration: FeatureFileStorageConfiguration\n gcloudStorageOptions: FeatureFileStorageGoogleCloudOptions\n }\n | {\n storageType: \"aws\"\n storageConfiguration: FeatureFileStorageConfiguration\n awsStorageOptions: FeatureFileStorageAwsS3Options\n }\n\ntype DefaultUpload = {\n fieldRef: FileUploadProps[\"field_ref\"],\n fieldModule: FileUploadProps[\"field_module\"],\n tagName: FileUploadProps[\"tagName\"],\n label: FileUploadProps[\"label\"],\n refId: FileUploadProps[\"refId\"],\n refId2: FileUploadProps[\"refId2\"],\n refLabel: FileUploadProps[\"refLabel\"],\n refLabel2: FileUploadProps[\"refLabel2\"],\n remark: FileUploadProps[\"remark\"],\n description: FileUploadProps[\"description\"],\n foldernameDate: FileUploadProps[\"foldernameDate\"],\n file: FileUploadItem,\n storageProviderName: FileStorageProviderType,\n storageProviderOptions: FileLocalProviderOptions | FileGoogleCloudProviderOptions | FileAwsS3ProviderOptions,\n fileCategoryName: FileCategoryName,\n batchCode: string,\n mimeType: string,\n bufferFilebuffer: Buffer,\n bufferFileThumbnail?: Buffer,\n outputSizeBytes: number,\n fileCompressFormat: any,\n imageCompressionOptions?: FileImageCompressionOptions,\n videoCompressionOptions?: FileVideoCompressionOptions\n}\n\nexport type FeatureFileStorageStartUploadProps = DefaultUpload & {\n\n}\n\nexport type FeatureFileStorageSuccessUploadProps = DefaultUpload & {\n fileId: number,\n fileThumbnailUrl: string,\n fileAssetUrl: string,\n fileDurationSeconds: number,\n}\n\nexport type FeatureFileStorageProps = {\n onSetup: () => Promise<FeatureFileStorageOptions>,\n onStartUpload: (payload: FeatureFileStorageStartUploadProps) => Promise<any>\n onSuccessUpload: (payload: FeatureFileStorageSuccessUploadProps) => Promise<any>\n}"]}
1
+ {"version":3,"file":"fileStorageType.js","sourceRoot":"","sources":["../../../src/features/file_storage/fileStorageType.ts"],"names":[],"mappings":"","sourcesContent":["import {\n FileStorageProviderType,\n FileLocalProviderOptions,\n FileGoogleCloudProviderOptions,\n FileAwsS3ProviderOptions,\n FileImageCompressionOptions,\n FileVideoCompressionOptions,\n FileUploadProps,\n FileCategoryName,\n FileUploadItem\n} from \"../../services\";\n\nimport { FeatureCallbackProps } from \"@/utils\";\n\nexport type FeatureFileStorageType = FileStorageProviderType\n\nexport type FeatureFileStorageConfiguration = {\n uploadMaxSize: number // e.g., 52428800 (50 MB)\n allowedFileTypes: string[] // e.g., [\"image/jpeg\", \"image/png\", \"application/pdf\", \"video/mp4\"]\n imageMaxWidth?: number // max width for images (e.g., 800)\n imageQuality?: number // compression quality (1-100)\n videoCRF?: number // Compression rate factor, lower = higher quality (e.g., 28)\n videoPreset?: \"ultrafast\" | \"superfast\" | \"veryfast\" | \"faster\" | \"fast\" | \"medium\" | \"slow\" | \"slower\" | \"veryslow\";\n videoResolution?: number; // Max width for videos, preserves aspect ratio (e.g., 1280)\n}\n\nexport type FeatureFileStorageLocalOptions = {\n basePath: string\n baseUrl: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\nexport type FeatureFileStorageGoogleCloudOptions = {\n bucketName: string\n credentialPath: string\n baseUrl: string\n basePath: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n}\n\nexport type FeatureFileStorageAwsS3Options = {\n bucketName: string\n region: string\n baseUrl: string\n basePath: string\n skipFolderNameModuleRef: boolean\n skipFolderNameYearMonth: boolean\n credentials: {\n accessKeyId: string\n secretAccessKey: string\n sessionToken?: string\n }\n}\n\n/* 🔑 Discriminated union */\nexport type FeatureFileStorageOptions =\n | {\n storageType: \"local\"\n storageConfiguration: FeatureFileStorageConfiguration\n localStorageOptions: FeatureFileStorageLocalOptions\n }\n | {\n storageType: \"gcloud\"\n storageConfiguration: FeatureFileStorageConfiguration\n gcloudStorageOptions: FeatureFileStorageGoogleCloudOptions\n }\n | {\n storageType: \"aws\"\n storageConfiguration: FeatureFileStorageConfiguration\n awsStorageOptions: FeatureFileStorageAwsS3Options\n }\n\ntype DefaultUpload = {\n fieldRef: FileUploadProps[\"field_ref\"],\n fieldModule: FileUploadProps[\"field_module\"],\n tagName: FileUploadProps[\"tagName\"],\n label: FileUploadProps[\"label\"],\n refId: FileUploadProps[\"refId\"],\n refId2: FileUploadProps[\"refId2\"],\n refLabel: FileUploadProps[\"refLabel\"],\n refLabel2: FileUploadProps[\"refLabel2\"],\n remark: FileUploadProps[\"remark\"],\n description: FileUploadProps[\"description\"],\n foldernameDate: FileUploadProps[\"foldernameDate\"],\n file: FileUploadItem,\n storageProviderName: FileStorageProviderType,\n storageProviderOptions: FileLocalProviderOptions | FileGoogleCloudProviderOptions | FileAwsS3ProviderOptions,\n fileCategoryName: FileCategoryName,\n batchCode: string,\n mimeType: string,\n bufferFilebuffer: Buffer,\n bufferFileThumbnail?: Buffer,\n outputSizeBytes: number,\n fileCompressFormat: any,\n imageCompressionOptions?: FileImageCompressionOptions,\n videoCompressionOptions?: FileVideoCompressionOptions\n}\n\nexport type FeatureFileStorageStartUploadProps = FeatureCallbackProps<DefaultUpload & {\n\n}>\n\nexport type FeatureFileStorageSuccessUploadProps = FeatureCallbackProps<DefaultUpload & {\n fileId: number,\n fileThumbnailUrl: string,\n fileAssetUrl: string,\n fileDurationSeconds: number,\n}>\n\nexport type FeatureFileStorageProps = {\n onSetup: () => Promise<FeatureFileStorageOptions>,\n onStartUpload: (payload: FeatureFileStorageStartUploadProps) => Promise<any>\n onSuccessUpload: (payload: FeatureFileStorageSuccessUploadProps) => Promise<any>\n}"]}
@@ -1,5 +1,6 @@
1
1
  import { OneTimeCodeType, ResetPasswordMethod } from "../../services";
2
- export type FeatureResetPasswordRequestProps = {
2
+ import { FeatureCallbackProps } from "../../utils";
3
+ export type FeatureResetPasswordRequestProps = FeatureCallbackProps<{
3
4
  userId: number;
4
5
  userType: string;
5
6
  resetPasswordMethod: ResetPasswordMethod;
@@ -7,19 +8,19 @@ export type FeatureResetPasswordRequestProps = {
7
8
  mobileNumber: string;
8
9
  oneTimeCode: string;
9
10
  user: any;
10
- };
11
- export type FeatureResetPasswordSuccessProps = {
11
+ }>;
12
+ export type FeatureResetPasswordSuccessProps = FeatureCallbackProps<{
12
13
  userId: number;
13
14
  userType: string;
14
15
  resetPasswordMethod: ResetPasswordMethod;
15
16
  oneTimeCode: string;
16
17
  user: any;
17
- };
18
+ }>;
18
19
  export type FeatureResetPasswordProps = {
19
20
  onSetup: () => {
20
21
  oneTimeCodeType: OneTimeCodeType;
21
22
  resetPasswordMethod: ResetPasswordMethod;
22
23
  };
23
- onRequest: (payload: FeatureResetPasswordRequestProps) => Promise<any>;
24
- onSuccess: (payload: FeatureResetPasswordSuccessProps) => Promise<any>;
24
+ onRequest: (props: FeatureResetPasswordRequestProps) => Promise<any>;
25
+ onSuccess: (props: FeatureResetPasswordSuccessProps) => Promise<any>;
25
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"resetPasswordType.js","sourceRoot":"","sources":["../../../src/features/reset_password/resetPasswordType.ts"],"names":[],"mappings":"","sourcesContent":["import { OneTimeCodeType, ResetPasswordMethod } from \"../../services\";\n\nexport type FeatureResetPasswordRequestProps = {\n userId: number\n userType: string\n resetPasswordMethod: ResetPasswordMethod,\n emailAddress: string\n mobileNumber: string\n oneTimeCode: string\n user: any\n}\n\nexport type FeatureResetPasswordSuccessProps = {\n userId: number\n userType: string\n resetPasswordMethod: ResetPasswordMethod\n oneTimeCode: string\n user: any\n}\n\nexport type FeatureResetPasswordProps = {\n onSetup: () => {\n oneTimeCodeType: OneTimeCodeType;\n resetPasswordMethod: ResetPasswordMethod;\n },\n onRequest: (payload: FeatureResetPasswordRequestProps) => Promise<any>\n onSuccess: (payload: FeatureResetPasswordSuccessProps) => Promise<any>\n}"]}
1
+ {"version":3,"file":"resetPasswordType.js","sourceRoot":"","sources":["../../../src/features/reset_password/resetPasswordType.ts"],"names":[],"mappings":"","sourcesContent":["import { OneTimeCodeType, ResetPasswordMethod } from \"../../services\";\n\nimport { FeatureCallbackProps } from \"@/utils\"\n\nexport type FeatureResetPasswordRequestProps = FeatureCallbackProps<{\n userId: number\n userType: string\n resetPasswordMethod: ResetPasswordMethod,\n emailAddress: string\n mobileNumber: string\n oneTimeCode: string\n user: any\n}>\n\nexport type FeatureResetPasswordSuccessProps = FeatureCallbackProps<{\n userId: number\n userType: string\n resetPasswordMethod: ResetPasswordMethod\n oneTimeCode: string\n user: any\n}>\n\nexport type FeatureResetPasswordProps = {\n onSetup: () => {\n oneTimeCodeType: OneTimeCodeType;\n resetPasswordMethod: ResetPasswordMethod;\n },\n onRequest: (props: FeatureResetPasswordRequestProps) => Promise<any>\n onSuccess: (props: FeatureResetPasswordSuccessProps) => Promise<any>\n}"]}
@@ -1,4 +1,5 @@
1
1
  import { SmtpEmailTransporterOptions } from "../../services";
2
+ import { FeatureCallbackProps } from "../../utils";
2
3
  export type FeatureSmtpEmailHbsOptions = {
3
4
  viewPath: string;
4
5
  extName: ".hbs";
@@ -20,18 +21,18 @@ export type FeatureSmtpEmailOptions = {
20
21
  connectionTimeout: number;
21
22
  hbsOptions: FeatureSmtpEmailHbsOptions;
22
23
  };
23
- export type FeatureSmtpEmailStartSendProps = {
24
+ export type FeatureSmtpEmailStartSendProps = FeatureCallbackProps<{
24
25
  smtpEmailOptions: FeatureSmtpEmailOptions;
25
26
  transporterOptions: SmtpEmailTransporterOptions;
26
- };
27
- export type FeatureSmtpEmailSuccessSendProps = {
27
+ }>;
28
+ export type FeatureSmtpEmailSuccessSendProps = FeatureCallbackProps<{
28
29
  smtpEmailOptions: FeatureSmtpEmailOptions;
29
30
  transporterOptions: SmtpEmailTransporterOptions;
30
31
  previewMessageUrl: string | false;
31
32
  gatewayDetails: any;
32
- };
33
+ }>;
33
34
  export type FeatureSmtpEmailProps = {
34
35
  onSetup: () => Promise<FeatureSmtpEmailOptions>;
35
- onStartSend: (payload: FeatureSmtpEmailStartSendProps) => Promise<any>;
36
- onSuccessSend: (payload: FeatureSmtpEmailSuccessSendProps) => Promise<any>;
36
+ onStartSend: (props: FeatureSmtpEmailStartSendProps) => Promise<any>;
37
+ onSuccessSend: (props: FeatureSmtpEmailSuccessSendProps) => Promise<any>;
37
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"smtpEmailType.js","sourceRoot":"","sources":["../../../src/features/smtp_email/smtpEmailType.ts"],"names":[],"mappings":"","sourcesContent":["import { SmtpEmailTransporterOptions } from \"../../services\"\n\nexport type FeatureSmtpEmailHbsOptions = {\n viewPath: string // path to templates folder\n extName: \".hbs\" // extension for templates, e.g., \".hbs\"\n viewEngine: {\n extname: \".hbs\", // file extension of templates\n layoutsDir: string // folder for layout files\n partialsDir: string // folder for partial templates\n defaultLayout: string | false // default layout name or false\n // helpers?: Record<string, (...args: any[]) => any>\n }\n}\n\nexport type FeatureSmtpEmailOptions = {\n smtpHost: string\n smtpPort: number\n smtpSecure: boolean\n smtpCredential: {\n username: string\n password: string\n },\n connectionTimeout: number\n hbsOptions: FeatureSmtpEmailHbsOptions\n}\n\nexport type FeatureSmtpEmailStartSendProps = {\n smtpEmailOptions: FeatureSmtpEmailOptions\n transporterOptions: SmtpEmailTransporterOptions\n}\n\nexport type FeatureSmtpEmailSuccessSendProps = {\n smtpEmailOptions: FeatureSmtpEmailOptions\n transporterOptions: SmtpEmailTransporterOptions\n previewMessageUrl: string | false\n gatewayDetails: any\n}\n\nexport type FeatureSmtpEmailProps = {\n onSetup: () => Promise<FeatureSmtpEmailOptions>,\n onStartSend: (payload: FeatureSmtpEmailStartSendProps) => Promise<any>\n onSuccessSend: (payload: FeatureSmtpEmailSuccessSendProps) => Promise<any>\n}"]}
1
+ {"version":3,"file":"smtpEmailType.js","sourceRoot":"","sources":["../../../src/features/smtp_email/smtpEmailType.ts"],"names":[],"mappings":"","sourcesContent":["import { SmtpEmailTransporterOptions } from \"../../services\"\n\nimport { FeatureCallbackProps } from \"@/utils\"\n\nexport type FeatureSmtpEmailHbsOptions = {\n viewPath: string // path to templates folder\n extName: \".hbs\" // extension for templates, e.g., \".hbs\"\n viewEngine: {\n extname: \".hbs\", // file extension of templates\n layoutsDir: string // folder for layout files\n partialsDir: string // folder for partial templates\n defaultLayout: string | false // default layout name or false\n // helpers?: Record<string, (...args: any[]) => any>\n }\n}\n\nexport type FeatureSmtpEmailOptions = {\n smtpHost: string\n smtpPort: number\n smtpSecure: boolean\n smtpCredential: {\n username: string\n password: string\n },\n connectionTimeout: number\n hbsOptions: FeatureSmtpEmailHbsOptions\n}\n\nexport type FeatureSmtpEmailStartSendProps = FeatureCallbackProps<{\n smtpEmailOptions: FeatureSmtpEmailOptions\n transporterOptions: SmtpEmailTransporterOptions\n}>\n\nexport type FeatureSmtpEmailSuccessSendProps = FeatureCallbackProps<{\n smtpEmailOptions: FeatureSmtpEmailOptions\n transporterOptions: SmtpEmailTransporterOptions\n previewMessageUrl: string | false\n gatewayDetails: any\n}>\n\nexport type FeatureSmtpEmailProps = {\n onSetup: () => Promise<FeatureSmtpEmailOptions>,\n onStartSend: (props: FeatureSmtpEmailStartSendProps) => Promise<any>\n onSuccessSend: (props: FeatureSmtpEmailSuccessSendProps) => Promise<any>\n}"]}
@@ -5,28 +5,10 @@ exports.UserMeHook = void 0;
5
5
  // Runtime for injected hook
6
6
  exports.UserMeHook = {
7
7
  onSuccessUpdateMe: async (props) => {
8
- // console.log('authTokenResult', authTokenResult)
9
- // example to add custom props into return auth token result
10
- // return {
11
- // ...authTokenResult,
12
- // workerId: 1000
13
- // }
14
8
  },
15
9
  onSuccessChangePasswordMe: async (props) => {
16
- // console.log('authTokenResult', authTokenResult)
17
- // example to add custom props into return auth token result
18
- // return {
19
- // ...authTokenResult,
20
- // workerId: 1000
21
- // }
22
10
  },
23
11
  onSuccessRemoveMe: async (props) => {
24
- // console.log('authTokenResult', authTokenResult)
25
- // example to add custom props into return auth token result
26
- // return {
27
- // ...authTokenResult,
28
- // workerId: 1000
29
- // }
30
12
  },
31
13
  };
32
14
  //# sourceMappingURL=userMeRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"userMeRegistry.js","sourceRoot":"","sources":["../../../src/features/user_me/userMeRegistry.ts"],"names":[],"mappings":";;;AAEA,uCAAuC;AAEvC,4BAA4B;AACf,QAAA,UAAU,GAAuB;IAC1C,iBAAiB,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;QAEhE,kDAAkD;QAElD,4DAA4D;QAE5D,WAAW;QACX,0BAA0B;QAC1B,qBAAqB;QACrB,IAAI;IAGR,CAAC;IACD,yBAAyB,EAAE,KAAK,EAAE,KAA8C,EAAE,EAAE;QAEhF,kDAAkD;QAElD,4DAA4D;QAE5D,WAAW;QACX,0BAA0B;QAC1B,qBAAqB;QACrB,IAAI;IAGR,CAAC;IACD,iBAAiB,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;QAEhE,kDAAkD;QAElD,4DAA4D;QAE5D,WAAW;QACX,0BAA0B;QAC1B,qBAAqB;QACrB,IAAI;IAGR,CAAC;CACJ,CAAA","sourcesContent":["import { FeatureUserMeProps, FeatureUserMeSuccessUpdateProps, FeatureUserMeSuccessChangePasswordProps, FeatureUserMeSuccessRemoveProps } from './userMeType'\n\n// import { throwError } from '@/utils'\n\n// Runtime for injected hook\nexport const UserMeHook: FeatureUserMeProps = {\n onSuccessUpdateMe: async (props: FeatureUserMeSuccessUpdateProps) => {\n\n // console.log('authTokenResult', authTokenResult)\n\n // example to add custom props into return auth token result\n\n // return {\n // ...authTokenResult,\n // workerId: 1000\n // }\n\n\n },\n onSuccessChangePasswordMe: async (props: FeatureUserMeSuccessChangePasswordProps) => {\n\n // console.log('authTokenResult', authTokenResult)\n\n // example to add custom props into return auth token result\n\n // return {\n // ...authTokenResult,\n // workerId: 1000\n // }\n\n\n },\n onSuccessRemoveMe: async (props: FeatureUserMeSuccessRemoveProps) => {\n\n // console.log('authTokenResult', authTokenResult)\n\n // example to add custom props into return auth token result\n\n // return {\n // ...authTokenResult,\n // workerId: 1000\n // }\n\n\n },\n}"]}
1
+ {"version":3,"file":"userMeRegistry.js","sourceRoot":"","sources":["../../../src/features/user_me/userMeRegistry.ts"],"names":[],"mappings":";;;AAEA,uCAAuC;AAEvC,4BAA4B;AACf,QAAA,UAAU,GAAuB;IAC1C,iBAAiB,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;IACpE,CAAC;IACD,yBAAyB,EAAE,KAAK,EAAE,KAA8C,EAAE,EAAE;IACpF,CAAC;IACD,iBAAiB,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;IACpE,CAAC;CACJ,CAAA","sourcesContent":["import { FeatureUserMeProps, FeatureUserMeSuccessUpdateProps, FeatureUserMeSuccessChangePasswordProps, FeatureUserMeSuccessRemoveProps } from './userMeType'\n\n// import { throwError } from '@/utils'\n\n// Runtime for injected hook\nexport const UserMeHook: FeatureUserMeProps = {\n onSuccessUpdateMe: async (props: FeatureUserMeSuccessUpdateProps) => {\n },\n onSuccessChangePasswordMe: async (props: FeatureUserMeSuccessChangePasswordProps) => {\n },\n onSuccessRemoveMe: async (props: FeatureUserMeSuccessRemoveProps) => {\n },\n}"]}
@@ -1,6 +1,7 @@
1
- export type FeatureUserMeSuccessUpdateProps = {};
2
- export type FeatureUserMeSuccessChangePasswordProps = {};
3
- export type FeatureUserMeSuccessRemoveProps = {};
1
+ import { FeatureCallbackProps } from "../../utils";
2
+ export type FeatureUserMeSuccessUpdateProps = FeatureCallbackProps<{}>;
3
+ export type FeatureUserMeSuccessChangePasswordProps = FeatureCallbackProps<{}>;
4
+ export type FeatureUserMeSuccessRemoveProps = FeatureCallbackProps<{}>;
4
5
  export type FeatureUserMeProps = {
5
6
  onSuccessUpdateMe?: (payload: FeatureUserMeSuccessUpdateProps) => Promise<any>;
6
7
  onSuccessChangePasswordMe?: (payload: FeatureUserMeSuccessChangePasswordProps) => Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"userMeType.js","sourceRoot":"","sources":["../../../src/features/user_me/userMeType.ts"],"names":[],"mappings":"","sourcesContent":["export type FeatureUserMeSuccessUpdateProps = {\n}\n\nexport type FeatureUserMeSuccessChangePasswordProps = {\n}\n\nexport type FeatureUserMeSuccessRemoveProps = {\n}\n\nexport type FeatureUserMeProps = {\n onSuccessUpdateMe?: (payload: FeatureUserMeSuccessUpdateProps) => Promise<any>\n onSuccessChangePasswordMe?: (payload: FeatureUserMeSuccessChangePasswordProps) => Promise<any>\n onSuccessRemoveMe?: (payload: FeatureUserMeSuccessRemoveProps) => Promise<any>\n}"]}
1
+ {"version":3,"file":"userMeType.js","sourceRoot":"","sources":["../../../src/features/user_me/userMeType.ts"],"names":[],"mappings":"","sourcesContent":["import { FeatureCallbackProps } from \"@/utils\"\n\nexport type FeatureUserMeSuccessUpdateProps = FeatureCallbackProps<{\n}>\n\nexport type FeatureUserMeSuccessChangePasswordProps = FeatureCallbackProps<{\n}>\n\nexport type FeatureUserMeSuccessRemoveProps = FeatureCallbackProps<{\n}>\n\nexport type FeatureUserMeProps = {\n onSuccessUpdateMe?: (payload: FeatureUserMeSuccessUpdateProps) => Promise<any>\n onSuccessChangePasswordMe?: (payload: FeatureUserMeSuccessChangePasswordProps) => Promise<any>\n onSuccessRemoveMe?: (payload: FeatureUserMeSuccessRemoveProps) => Promise<any>\n}"]}
@@ -15,8 +15,8 @@ const AccessControlService = (props) => {
15
15
  const coreConfig = features_1.CoreConfigHook.onSetup();
16
16
  // If extendAccessControl exists and now returns maps
17
17
  let maps = {};
18
- if (coreConfig.extendAccessControl) {
19
- maps = coreConfig.extendAccessControl(access_control_1.userTypePolicies); // merge policies + get maps
18
+ if (coreConfig?.extendAccessControl) {
19
+ maps = coreConfig?.extendAccessControl(access_control_1.userTypePolicies); // merge policies + get maps
20
20
  }
21
21
  // coreConfig.extendAccessControl?.(userTypePolicies);
22
22
  isExtended = true;
@@ -1 +1 @@
1
- {"version":3,"file":"AccessControlService.js","sourceRoot":"","sources":["../../../src/services/access_control/AccessControlService.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request } from \"express\";\nimport { UserType } from \"@/services\";\nimport { CoreConfigHook } from \"@/features\";\n\nimport {\n AccessPolicyWithExtra,\n AccessControlScope,\n AccessControlModuleOf,\n AccessControlAction,\n\n accessControlScopesMap,\n accessControlModulesMap,\n accessControlActionsMap,\n\n userTypePolicies\n} from \"@/access_control\";\n\nimport { DefaultServiceProps, getDefaultServiceProps } from \"@/utils\";\n\nimport { throwError } from \"@/utils\";\n\n// Intersection type for requests\ntype AuthRequest = Request & { actionUserType?: UserType };\n\n// Helper type: core scopes + extra scopes if provided\nexport type AccessControlScopeOrExtra<ExtraScopes extends string> =\n [ExtraScopes] extends [never] ? AccessControlScope : AccessControlScope | ExtraScopes;\n\nexport type AccessControlServiceProps = DefaultServiceProps & {\n // userType: UserType\n};\n\nexport type AccessControlListOptionsProps = {\n userType?: UserType\n};\n\nexport const AccessControlService = <\n ExtraScopes extends string = never,\n ExtraModules extends Record<ExtraScopes, string> = Record<ExtraScopes, string>,\n ExtraActions extends Record<ExtraScopes, Record<string, string>> = Record<ExtraScopes, Record<string, string>>\n>(props: AccessControlServiceProps) => {\n\n let isExtended = false;\n\n // 🟢 Service-level variables to store maps from consumer\n let extraScopeModuleMap: Map<string, { value: string; label: string }[]> | undefined;\n let extraActionMap: Map<string, string> | undefined;\n\n const getAccessPolicy = (userType: UserType) => {\n // Apply consumer extras only once\n if (!isExtended) {\n const coreConfig = CoreConfigHook.onSetup();\n\n // If extendAccessControl exists and now returns maps\n let maps: {\n extraScopeModuleMap?: Map<string, { value: string; label: string }[]>;\n extraActionMap?: Map<string, string>;\n } = {};\n\n if (coreConfig.extendAccessControl) {\n maps = coreConfig.extendAccessControl(userTypePolicies as any); // merge policies + get maps\n }\n\n // coreConfig.extendAccessControl?.(userTypePolicies);\n\n isExtended = true;\n\n // Store maps in service-level variables so we can reuse\n extraScopeModuleMap = maps.extraScopeModuleMap;\n extraActionMap = maps.extraActionMap;\n }\n\n // console.log('userTypePolicies', userTypePolicies)\n\n const policy = userTypePolicies[userType] as AccessPolicyWithExtra<ExtraScopes>;\n if (!policy || Object.keys(policy).length <= 0) throwError(`Empty access control policy for user type: ${userType}`);\n\n // Return policy + maps\n return {\n policy,\n extraScopeModuleMap,\n extraActionMap,\n };\n\n };\n\n const getUserType = (req: AuthRequest) => {\n const userType = req?.actionUserType ?? \"\";\n if (!userType) throwError(\"Invalid user type in request for access control\");\n return userType;\n };\n\n const isActionAllowed = <\n S extends AccessControlScope | ExtraScopes\n >(\n policy: AccessPolicyWithExtra<ExtraScopes>,\n scope: S,\n module: S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n action: S extends AccessControlScope ? AccessControlAction : string\n ): boolean => {\n const scopePolicy = policy[scope as keyof typeof policy] as\n | Record<string, Record<string, boolean>>\n | undefined;\n if (!scopePolicy) return false;\n\n const modulePolicy = scopePolicy[module];\n if (!modulePolicy) return false;\n\n return modulePolicy[action as string] ?? false;\n };\n\n const checkAccess = <\n S extends AccessControlScope | ExtraScopes,\n M extends S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n A extends S extends AccessControlScope ? AccessControlAction : string\n >(\n userType: UserType,\n policy: AccessPolicyWithExtra<ExtraScopes>,\n scope: S,\n module: M,\n action: A\n ): boolean => {\n // TS infers ExtraScopes, S, M, A automatically\n const allowed = isActionAllowed(policy, scope, module, action);\n\n if (!allowed) throwError(`Access denied: ${scope}.${module}.${action} (${userType})`);\n return allowed;\n };\n\n // ------------------\n // Programmatic validator\n // ------------------\n const validateAccessControl = <\n S extends AccessControlScopeOrExtra<ExtraScopes>,\n M extends S extends AccessControlScope\n ? AccessControlModuleOf<S>\n : ExtraModules[S & keyof ExtraModules],\n A extends S extends AccessControlScope\n ? AccessControlAction\n : ExtraActions[S & keyof ExtraActions][M & keyof ExtraActions[S & keyof ExtraActions]]\n >(\n req: Request,\n scope: S,\n module: M,\n action: A\n ): boolean => {\n\n const userType = getUserType(req);\n\n if (!userType) throwError(\"Invalid user type\");\n\n const { policy } = getAccessPolicy(userType)\n\n return checkAccess(userType, policy, scope, module, action);\n };\n\n /** for listAccessControlPolicyOptions */\n const buildScopeTree = <\n T extends AccessPolicyWithExtra<any, any, any>\n >(\n policy: T,\n extraScopeModuleMap?: Map<string, { value: string; label: string }[]>,\n extraActionMap?: Map<string, string>\n ) => {\n const scopes: {\n key: string;\n label: string;\n modules: {\n key: string;\n label: string;\n actions: { key: string; label: string }[];\n }[];\n }[] = [];\n\n // Loop through each scope in the policy\n Object.entries(policy).forEach(([scopeKey, modules]) => {\n // Build modules array for this scope\n const modulesArr: {\n key: string;\n label: string;\n actions: { key: string; label: string }[];\n }[] = [];\n\n Object.entries(modules as Record<string, Record<string, boolean>>).forEach(\n ([moduleKey, actions]) => {\n const actionArr = Object.entries(actions)\n .filter(([_, allowed]) => allowed) // Only include true actions\n .map(([actionKey]) => ({\n key: actionKey,\n permission_key: `${scopeKey}.${moduleKey}.${actionKey}`,\n label:\n accessControlActionsMap.get(actionKey as AccessControlAction) ||\n extraActionMap?.get(actionKey) ||\n actionKey,\n }));\n\n if (actionArr.length > 0) {\n modulesArr.push({\n key: moduleKey,\n label:\n accessControlModulesMap.get(scopeKey as AccessControlScope)?.find(\n (m) => m.value === moduleKey\n )?.label || extraScopeModuleMap?.get(scopeKey)?.find((m) => m.value === moduleKey)?.label || moduleKey,\n actions: actionArr,\n });\n }\n }\n );\n\n if (modulesArr.length > 0) {\n scopes.push({\n key: scopeKey,\n label:\n accessControlScopesMap.get(scopeKey as AccessControlScope) ||\n extraScopeModuleMap?.get(scopeKey)?.[0]?.label ||\n scopeKey,\n modules: modulesArr,\n });\n }\n });\n\n return { scopes };\n };\n\n const listAccessControlPolicyOptions = ({ userType }: AccessControlListOptionsProps) => {\n\n // Determine userType\n const uType = userType || (props.actionUserType as UserType);\n\n if (!uType) throwError(\"Invalid user type\");\n\n // Get full policy (core + extra) for this user type\n const { policy, extraScopeModuleMap, extraActionMap } = getAccessPolicy(uType);\n\n const policyTree = buildScopeTree(policy, extraScopeModuleMap, extraActionMap);\n\n return {\n options: policyTree\n };\n };\n\n\n\n // const validateAccessControl = <\n // S extends AccessControlScopeOrExtra<ExtraScopes>,\n // M extends S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n // A extends S extends AccessControlScope ? AccessControlAction : string\n // >(\n // scope: S,\n // module: M,\n // action: A\n // ): boolean => {\n // // const userType = getUserType(req);\n\n // const userType = props?.actionUserType as UserType\n\n // if (!userType) throwError(\"Invalid user type in request for access control middleware\");\n\n // const policy = getAccessPolicy(userType) as AccessPolicyWithExtra<ExtraScopes>;\n // return checkAccess(userType, policy, scope, module, action);\n // };\n\n // --- Middleware version (Express compatible) ---\n // const validateAccessControlMiddleware = <\n // S extends AccessControlScopeOrExtra<ExtraScopes>,\n // M extends S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n // A extends S extends AccessControlScope ? AccessControlAction : string\n // >(\n // scope: S,\n // module: M,\n // action: A\n // ) => {\n // return (req: AuthRequest, res: any, next: Function) => {\n // const userType = getUserType(req);\n // const policy = getAccessPolicy(userType) as AccessPolicyWithExtra<ExtraScopes>;\n // checkAccess(userType, policy, scope, module, action);\n // next();\n // };\n // };\n\n return {\n getAccessPolicy,\n // getUserType,\n checkAccess,\n validateAccessControl,\n listAccessControlPolicyOptions,\n // validateAccessControlMiddleware\n };\n};"]}
1
+ {"version":3,"file":"AccessControlService.js","sourceRoot":"","sources":["../../../src/services/access_control/AccessControlService.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request } from \"express\";\nimport { UserType } from \"@/services\";\nimport { CoreConfigHook } from \"@/features\";\n\nimport {\n AccessPolicyWithExtra,\n AccessControlScope,\n AccessControlModuleOf,\n AccessControlAction,\n\n accessControlScopesMap,\n accessControlModulesMap,\n accessControlActionsMap,\n\n userTypePolicies\n} from \"@/access_control\";\n\nimport { DefaultServiceProps, getDefaultServiceProps } from \"@/utils\";\n\nimport { throwError } from \"@/utils\";\n\n// Intersection type for requests\ntype AuthRequest = Request & { actionUserType?: UserType };\n\n// Helper type: core scopes + extra scopes if provided\nexport type AccessControlScopeOrExtra<ExtraScopes extends string> =\n [ExtraScopes] extends [never] ? AccessControlScope : AccessControlScope | ExtraScopes;\n\nexport type AccessControlServiceProps = DefaultServiceProps & {\n // userType: UserType\n};\n\nexport type AccessControlListOptionsProps = {\n userType?: UserType\n};\n\nexport const AccessControlService = <\n ExtraScopes extends string = never,\n ExtraModules extends Record<ExtraScopes, string> = Record<ExtraScopes, string>,\n ExtraActions extends Record<ExtraScopes, Record<string, string>> = Record<ExtraScopes, Record<string, string>>\n>(props: AccessControlServiceProps) => {\n\n let isExtended = false;\n\n // 🟢 Service-level variables to store maps from consumer\n let extraScopeModuleMap: Map<string, { value: string; label: string }[]> | undefined;\n let extraActionMap: Map<string, string> | undefined;\n\n const getAccessPolicy = (userType: UserType) => {\n // Apply consumer extras only once\n if (!isExtended) {\n const coreConfig = CoreConfigHook.onSetup();\n\n // If extendAccessControl exists and now returns maps\n let maps: {\n extraScopeModuleMap?: Map<string, { value: string; label: string }[]>;\n extraActionMap?: Map<string, string>;\n } = {};\n\n if (coreConfig?.extendAccessControl) {\n maps = coreConfig?.extendAccessControl(userTypePolicies as any); // merge policies + get maps\n }\n\n // coreConfig.extendAccessControl?.(userTypePolicies);\n\n isExtended = true;\n\n // Store maps in service-level variables so we can reuse\n extraScopeModuleMap = maps.extraScopeModuleMap;\n extraActionMap = maps.extraActionMap;\n }\n\n // console.log('userTypePolicies', userTypePolicies)\n\n const policy = userTypePolicies[userType] as AccessPolicyWithExtra<ExtraScopes>;\n if (!policy || Object.keys(policy).length <= 0) throwError(`Empty access control policy for user type: ${userType}`);\n\n // Return policy + maps\n return {\n policy,\n extraScopeModuleMap,\n extraActionMap,\n };\n\n };\n\n const getUserType = (req: AuthRequest) => {\n const userType = req?.actionUserType ?? \"\";\n if (!userType) throwError(\"Invalid user type in request for access control\");\n return userType;\n };\n\n const isActionAllowed = <\n S extends AccessControlScope | ExtraScopes\n >(\n policy: AccessPolicyWithExtra<ExtraScopes>,\n scope: S,\n module: S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n action: S extends AccessControlScope ? AccessControlAction : string\n ): boolean => {\n const scopePolicy = policy[scope as keyof typeof policy] as\n | Record<string, Record<string, boolean>>\n | undefined;\n if (!scopePolicy) return false;\n\n const modulePolicy = scopePolicy[module];\n if (!modulePolicy) return false;\n\n return modulePolicy[action as string] ?? false;\n };\n\n const checkAccess = <\n S extends AccessControlScope | ExtraScopes,\n M extends S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n A extends S extends AccessControlScope ? AccessControlAction : string\n >(\n userType: UserType,\n policy: AccessPolicyWithExtra<ExtraScopes>,\n scope: S,\n module: M,\n action: A\n ): boolean => {\n // TS infers ExtraScopes, S, M, A automatically\n const allowed = isActionAllowed(policy, scope, module, action);\n\n if (!allowed) throwError(`Access denied: ${scope}.${module}.${action} (${userType})`);\n return allowed;\n };\n\n // ------------------\n // Programmatic validator\n // ------------------\n const validateAccessControl = <\n S extends AccessControlScopeOrExtra<ExtraScopes>,\n M extends S extends AccessControlScope\n ? AccessControlModuleOf<S>\n : ExtraModules[S & keyof ExtraModules],\n A extends S extends AccessControlScope\n ? AccessControlAction\n : ExtraActions[S & keyof ExtraActions][M & keyof ExtraActions[S & keyof ExtraActions]]\n >(\n req: Request,\n scope: S,\n module: M,\n action: A\n ): boolean => {\n\n const userType = getUserType(req);\n\n if (!userType) throwError(\"Invalid user type\");\n\n const { policy } = getAccessPolicy(userType)\n\n return checkAccess(userType, policy, scope, module, action);\n };\n\n /** for listAccessControlPolicyOptions */\n const buildScopeTree = <\n T extends AccessPolicyWithExtra<any, any, any>\n >(\n policy: T,\n extraScopeModuleMap?: Map<string, { value: string; label: string }[]>,\n extraActionMap?: Map<string, string>\n ) => {\n const scopes: {\n key: string;\n label: string;\n modules: {\n key: string;\n label: string;\n actions: { key: string; label: string }[];\n }[];\n }[] = [];\n\n // Loop through each scope in the policy\n Object.entries(policy).forEach(([scopeKey, modules]) => {\n // Build modules array for this scope\n const modulesArr: {\n key: string;\n label: string;\n actions: { key: string; label: string }[];\n }[] = [];\n\n Object.entries(modules as Record<string, Record<string, boolean>>).forEach(\n ([moduleKey, actions]) => {\n const actionArr = Object.entries(actions)\n .filter(([_, allowed]) => allowed) // Only include true actions\n .map(([actionKey]) => ({\n key: actionKey,\n permission_key: `${scopeKey}.${moduleKey}.${actionKey}`,\n label:\n accessControlActionsMap.get(actionKey as AccessControlAction) ||\n extraActionMap?.get(actionKey) ||\n actionKey,\n }));\n\n if (actionArr.length > 0) {\n modulesArr.push({\n key: moduleKey,\n label:\n accessControlModulesMap.get(scopeKey as AccessControlScope)?.find(\n (m) => m.value === moduleKey\n )?.label || extraScopeModuleMap?.get(scopeKey)?.find((m) => m.value === moduleKey)?.label || moduleKey,\n actions: actionArr,\n });\n }\n }\n );\n\n if (modulesArr.length > 0) {\n scopes.push({\n key: scopeKey,\n label:\n accessControlScopesMap.get(scopeKey as AccessControlScope) ||\n extraScopeModuleMap?.get(scopeKey)?.[0]?.label ||\n scopeKey,\n modules: modulesArr,\n });\n }\n });\n\n return { scopes };\n };\n\n const listAccessControlPolicyOptions = ({ userType }: AccessControlListOptionsProps) => {\n\n // Determine userType\n const uType = userType || (props.actionUserType as UserType);\n\n if (!uType) throwError(\"Invalid user type\");\n\n // Get full policy (core + extra) for this user type\n const { policy, extraScopeModuleMap, extraActionMap } = getAccessPolicy(uType);\n\n const policyTree = buildScopeTree(policy, extraScopeModuleMap, extraActionMap);\n\n return {\n options: policyTree\n };\n };\n\n\n\n // const validateAccessControl = <\n // S extends AccessControlScopeOrExtra<ExtraScopes>,\n // M extends S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n // A extends S extends AccessControlScope ? AccessControlAction : string\n // >(\n // scope: S,\n // module: M,\n // action: A\n // ): boolean => {\n // // const userType = getUserType(req);\n\n // const userType = props?.actionUserType as UserType\n\n // if (!userType) throwError(\"Invalid user type in request for access control middleware\");\n\n // const policy = getAccessPolicy(userType) as AccessPolicyWithExtra<ExtraScopes>;\n // return checkAccess(userType, policy, scope, module, action);\n // };\n\n // --- Middleware version (Express compatible) ---\n // const validateAccessControlMiddleware = <\n // S extends AccessControlScopeOrExtra<ExtraScopes>,\n // M extends S extends AccessControlScope ? AccessControlModuleOf<S> : string,\n // A extends S extends AccessControlScope ? AccessControlAction : string\n // >(\n // scope: S,\n // module: M,\n // action: A\n // ) => {\n // return (req: AuthRequest, res: any, next: Function) => {\n // const userType = getUserType(req);\n // const policy = getAccessPolicy(userType) as AccessPolicyWithExtra<ExtraScopes>;\n // checkAccess(userType, policy, scope, module, action);\n // next();\n // };\n // };\n\n return {\n getAccessPolicy,\n // getUserType,\n checkAccess,\n validateAccessControl,\n listAccessControlPolicyOptions,\n // validateAccessControlMiddleware\n };\n};"]}
@@ -16,7 +16,7 @@ exports.authTypes = {
16
16
  };
17
17
  const AuthService = (props) => {
18
18
  const { secretKey, authType = "administrator", ...rest } = props;
19
- let hookSetup = null;
19
+ // let hookSetup: FeatureAuthTokenSuccessAuthenticateProps | null = null
20
20
  const getUserInjectionFieldName = (authType) => {
21
21
  if (authType === "administrator")
22
22
  return ["administrator_injection_fields"];
@@ -197,7 +197,19 @@ const AuthService = (props) => {
197
197
  let newResult;
198
198
  // Call the consumer hook, if registered
199
199
  if (features_1.AuthTokenHook?.onSuccessAuthenticate) {
200
- newResult = await features_1.AuthTokenHook.onSuccessAuthenticate(result);
200
+ const userType = user?.user_type ?? "administrator";
201
+ newResult = await features_1.AuthTokenHook.onSuccessAuthenticate({
202
+ defaultServiceProps: {
203
+ accountId: Number(account?.account_id),
204
+ actionUserId: Number(user?.user_id),
205
+ actionUserType: user?.user_type ?? "",
206
+ authToken: authToken,
207
+ isOperator: Boolean(userType === "operator"),
208
+ accessKey: "",
209
+ accessKeyId: ""
210
+ },
211
+ callbackParams: result
212
+ });
201
213
  }
202
214
  return newResult ? newResult : result;
203
215
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../src/services/auth/AuthService.ts"],"names":[],"mappings":"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","sourcesContent":["// import { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps, throwError } from \"@/utils\";\nimport {\n UserService,\n // UserGetProps,\n UserType,\n UserListProps,\n // userTypes,\n AccountService,\n LocationService,\n LocationListProps\n} from \"@/services\";\n\nimport jwt, { JwtPayload } from \"jsonwebtoken\";\n\nimport { generateAuthToken, verifyPassword, verifyAuthToken, hashPassword } from \"@/utils\"\nimport { ModelAccountFields, ModelUserFields, UserModel } from \"@/models\";\n\nimport { AuthTokenHook, FeatureAuthTokenSuccessAuthenticateProps } from \"@/features\"\n\nexport const authTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n customer: \"customer\",\n member: \"member\",\n} as const\n\nexport type AuthType = typeof authTypes[keyof typeof authTypes]\n\nexport type AuthTokenResult = {\n token: string\n account: any\n user: any\n user_locations: any[]\n is_owner: boolean\n}\n\nexport type AuthJwtToken = JwtPayload & {\n user?: { id: number, user_id: number, user_type: AuthType };\n account?: { id: number, account_id: number };\n};\n\nexport type AuthServiceProps = DefaultServiceProps & {\n secretKey: string,\n authType: AuthType\n};\n\nexport type AuthGetTokenProps = {\n authType: AuthType,\n // accountId?: number,\n accountCode?: string,\n data:\n // get token\n {\n username: string,\n password: string\n }\n};\n\nexport const AuthService = (props: AuthServiceProps) => {\n\n const {\n secretKey,\n authType = \"administrator\",\n ...rest\n } = props\n\n let hookSetup: FeatureAuthTokenSuccessAuthenticateProps | null = null\n\n const getUserInjectionFieldName = (authType: AuthType) => {\n\n if (authType === \"administrator\") return [\"administrator_injection_fields\"]\n if (authType === \"customer\") return [\"customer_injection_fields\"]\n if (authType === \"worker\") return [\"worker_injection_fields\"]\n\n return []\n }\n\n const validateAuthAccount = async (accountCode: string) => {\n\n if (accountCode === \"\") {\n return 0\n }\n\n // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n let selectAccountId = 0\n\n // check account id is choose \n // if (selectAccountId === 0) {\n\n const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // use account code to find the account id\n if (accountCode) {\n\n let { data: responseAcc } = await globalAccountService.listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: `ASC`,\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: `=`,\n value: `${accountCode}`,\n }],\n datatypes: []\n })\n\n selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n }\n\n if (!selectAccountId) {\n throwError(`Invalid account code: ${accountCode}`)\n }\n\n // }\n\n return Number(selectAccountId ?? 0)\n\n }\n\n const getAuthToken = async ({ authType, data, accountCode = \"\" }: AuthGetTokenProps) => {\n\n let _rest = rest\n let _accountId = 0\n\n if (authType !== \"operator\") {\n _accountId = await validateAuthAccount(accountCode)\n }\n\n // _rest.accountId = accountId\n _rest.accountId = _accountId\n\n // check the option pass in using account id or account code\n // if (authType !== \"operator\") {\n // _rest.accountId = accountId\n\n // // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n // let selectAccountId = `${accountId}`\n\n // // check account id is choose \n // if (selectAccountId === \"0\") {\n\n // const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // // use account code to find the account id\n // if (accountCode) {\n\n // let { data: responseAcc } = await globalAccountService.listAccounts({\n // limit: 1,\n // offset: 0,\n // sortfield: `${ModelAccountFields.account_id}`,\n // sortorder: `ASC`,\n // filters: [{\n // field: `${ModelAccountFields.account_code}`,\n // operator: `=`,\n // value: `${accountCode}`,\n // }],\n // datatypes: []\n // })\n\n // selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n // let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n // if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n // }\n\n // if (!selectAccountId) {\n // throwError(`Invalid account code: ${accountCode}`)\n // }\n\n // }\n\n // _rest.accountId = Number(selectAccountId)\n\n // } else {\n // _rest.accountId = accountId\n // }\n\n const userService = UserService({ userType: authType as UserType, ...rest })\n const accountService = AccountService({ ...rest, isOperator: true })\n const locationService = LocationService({ ...rest, locationType: \"location\" })\n\n let foundUser: any = {}\n\n // only for operator & administrator\n if (authType === \"operator\" || authType === \"administrator\") {\n\n // const operatorService = UserService({ ...rest })\n\n const _user = await userService.getUserByUsername({\n username: `${data[\"username\"]}`,\n includePassword: true,\n datatypes: getUserInjectionFieldName(authType) as any\n })\n\n foundUser = _user\n\n } else { // other user type\n\n let payload: UserListProps = {\n includePassword: true,\n limit: 1,\n offset: 0,\n sortfield: \"user_id\",\n sortorder: \"DESC\",\n filters: [\n { field: \"username\", operator: \"=\", value: `${data[\"username\"]}` },\n { field: \"user_type\", operator: \"=\", value: `${authType}` }\n ],\n datatypes: getUserInjectionFieldName(authType)\n }\n\n const { data: foundOtherUser } = await userService.listUsers(payload)\n\n foundUser = foundOtherUser.length > 0 ? foundOtherUser[0] : {}\n\n }\n\n if (!foundUser?.user_id) {\n throw Error(`Invalid username: ${data.username}`)\n }\n\n if (foundUser?.status !== true) {\n throw new Error(`User is inactive: ${data.username}`);\n }\n\n let user = foundUser\n // foundUser.length > 0 ? foundUser[0] : {}\n\n let decryptedPass: boolean\n\n try {\n decryptedPass = await verifyPassword(data.password, user.password)\n } catch (error) {\n throw error\n }\n\n if (decryptedPass === false) {\n throw Error(`Invalid credential: ${data[\"username\"]}`)\n }\n\n // dont show out to result\n delete user.password\n\n let account: any = {}\n\n // if (_rest.accountId && authType !== \"operator\") {\n account = await accountService.getAccount({ id: Number(_rest.accountId), datatypes: [] })\n // }\n\n const authToken = generateAuthToken(user, account, secretKey)\n\n // get the locations for user\n const locationIds = user?.location_id ? user.location_id.split(\", \") : []\n\n let locations: any[] = []\n\n if (locationIds.length > 0) {\n const listPayload: LocationListProps = {\n limit: 100,\n offset: 0,\n sortfield: \"location_id\",\n sortorder: \"ASC\",\n filters: [{\n field: \"location_id\",\n operator: \"where_in\",\n value: locationIds.map((i: any) => Number(i))\n }],\n datatypes: []\n }\n\n const { data } = await locationService.listLocations(listPayload)\n locations = data\n }\n\n const result: AuthTokenResult = {\n token: authToken,\n account,\n user,\n user_locations: locations,\n // parent_user_id: 0,\n // roles: [\n // {\n // id: 23,\n // role_name: \"123\"\n // }\n // ],\n // permissions: [],\n is_owner: Boolean(user?.is_owner),\n // owner_id: 0\n }\n\n let newResult: any\n\n // Call the consumer hook, if registered\n if (AuthTokenHook?.onSuccessAuthenticate) {\n newResult = await AuthTokenHook.onSuccessAuthenticate(result)\n }\n\n return newResult ? newResult : result\n };\n\n return {\n getAuthToken,\n verifyAuthToken,\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../src/services/auth/AuthService.ts"],"names":[],"mappings":"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","sourcesContent":["// import { QueryList, QueryGet } from \"@/schema/common\";\nimport { DefaultServiceProps, throwError } from \"@/utils\";\nimport {\n UserService,\n // UserGetProps,\n UserType,\n UserListProps,\n // userTypes,\n AccountService,\n LocationService,\n LocationListProps\n} from \"@/services\";\n\nimport jwt, { JwtPayload } from \"jsonwebtoken\";\n\nimport { generateAuthToken, verifyPassword, verifyAuthToken, hashPassword } from \"@/utils\"\nimport { ModelAccountFields, ModelUserFields, UserModel } from \"@/models\";\n\nimport { AuthTokenHook, FeatureAuthTokenSuccessAuthenticateProps } from \"@/features\"\n\nexport const authTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n customer: \"customer\",\n member: \"member\",\n} as const\n\nexport type AuthType = typeof authTypes[keyof typeof authTypes]\n\nexport type AuthTokenResult = {\n token: string\n account: any\n user: any\n user_locations: any[]\n is_owner: boolean\n}\n\nexport type AuthJwtToken = JwtPayload & {\n user?: { id: number, user_id: number, user_type: AuthType };\n account?: { id: number, account_id: number };\n};\n\nexport type AuthServiceProps = DefaultServiceProps & {\n secretKey: string,\n authType: AuthType\n};\n\nexport type AuthGetTokenProps = {\n authType: AuthType,\n // accountId?: number,\n accountCode?: string,\n data:\n // get token\n {\n username: string,\n password: string\n }\n};\n\nexport const AuthService = (props: AuthServiceProps) => {\n\n const {\n secretKey,\n authType = \"administrator\",\n ...rest\n } = props\n\n // let hookSetup: FeatureAuthTokenSuccessAuthenticateProps | null = null\n\n const getUserInjectionFieldName = (authType: AuthType) => {\n\n if (authType === \"administrator\") return [\"administrator_injection_fields\"]\n if (authType === \"customer\") return [\"customer_injection_fields\"]\n if (authType === \"worker\") return [\"worker_injection_fields\"]\n\n return []\n }\n\n const validateAuthAccount = async (accountCode: string) => {\n\n if (accountCode === \"\") {\n return 0\n }\n\n // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n let selectAccountId = 0\n\n // check account id is choose \n // if (selectAccountId === 0) {\n\n const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // use account code to find the account id\n if (accountCode) {\n\n let { data: responseAcc } = await globalAccountService.listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: `ASC`,\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: `=`,\n value: `${accountCode}`,\n }],\n datatypes: []\n })\n\n selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n }\n\n if (!selectAccountId) {\n throwError(`Invalid account code: ${accountCode}`)\n }\n\n // }\n\n return Number(selectAccountId ?? 0)\n\n }\n\n const getAuthToken = async ({ authType, data, accountCode = \"\" }: AuthGetTokenProps) => {\n\n let _rest = rest\n let _accountId = 0\n\n if (authType !== \"operator\") {\n _accountId = await validateAuthAccount(accountCode)\n }\n\n // _rest.accountId = accountId\n _rest.accountId = _accountId\n\n // check the option pass in using account id or account code\n // if (authType !== \"operator\") {\n // _rest.accountId = accountId\n\n // // check if the accountId & accountCode is not empty\n // if (!accountId && !accountCode) throwError(`accountId or accountCode is required`)\n\n // let selectAccountId = `${accountId}`\n\n // // check account id is choose \n // if (selectAccountId === \"0\") {\n\n // const globalAccountService = AccountService({ ...rest, isOperator: true })\n\n // // use account code to find the account id\n // if (accountCode) {\n\n // let { data: responseAcc } = await globalAccountService.listAccounts({\n // limit: 1,\n // offset: 0,\n // sortfield: `${ModelAccountFields.account_id}`,\n // sortorder: `ASC`,\n // filters: [{\n // field: `${ModelAccountFields.account_code}`,\n // operator: `=`,\n // value: `${accountCode}`,\n // }],\n // datatypes: []\n // })\n\n // selectAccountId = responseAcc.length > 0 ? responseAcc[0].account_id : \"\"\n // let selectAccountStatus = responseAcc.length > 0 ? responseAcc[0].account_status : \"\"\n\n // if (selectAccountStatus !== true) throwError(`Inactive account: ${accountCode}`)\n\n // }\n\n // if (!selectAccountId) {\n // throwError(`Invalid account code: ${accountCode}`)\n // }\n\n // }\n\n // _rest.accountId = Number(selectAccountId)\n\n // } else {\n // _rest.accountId = accountId\n // }\n\n const userService = UserService({ userType: authType as UserType, ...rest })\n const accountService = AccountService({ ...rest, isOperator: true })\n const locationService = LocationService({ ...rest, locationType: \"location\" })\n\n let foundUser: any = {}\n\n // only for operator & administrator\n if (authType === \"operator\" || authType === \"administrator\") {\n\n // const operatorService = UserService({ ...rest })\n\n const _user = await userService.getUserByUsername({\n username: `${data[\"username\"]}`,\n includePassword: true,\n datatypes: getUserInjectionFieldName(authType) as any\n })\n\n foundUser = _user\n\n } else { // other user type\n\n let payload: UserListProps = {\n includePassword: true,\n limit: 1,\n offset: 0,\n sortfield: \"user_id\",\n sortorder: \"DESC\",\n filters: [\n { field: \"username\", operator: \"=\", value: `${data[\"username\"]}` },\n { field: \"user_type\", operator: \"=\", value: `${authType}` }\n ],\n datatypes: getUserInjectionFieldName(authType)\n }\n\n const { data: foundOtherUser } = await userService.listUsers(payload)\n\n foundUser = foundOtherUser.length > 0 ? foundOtherUser[0] : {}\n\n }\n\n if (!foundUser?.user_id) {\n throw Error(`Invalid username: ${data.username}`)\n }\n\n if (foundUser?.status !== true) {\n throw new Error(`User is inactive: ${data.username}`);\n }\n\n let user = foundUser\n // foundUser.length > 0 ? foundUser[0] : {}\n\n let decryptedPass: boolean\n\n try {\n decryptedPass = await verifyPassword(data.password, user.password)\n } catch (error) {\n throw error\n }\n\n if (decryptedPass === false) {\n throw Error(`Invalid credential: ${data[\"username\"]}`)\n }\n\n // dont show out to result\n delete user.password\n\n let account: any = {}\n\n // if (_rest.accountId && authType !== \"operator\") {\n account = await accountService.getAccount({ id: Number(_rest.accountId), datatypes: [] })\n // }\n\n const authToken = generateAuthToken(user, account, secretKey)\n\n // get the locations for user\n const locationIds = user?.location_id ? user.location_id.split(\", \") : []\n\n let locations: any[] = []\n\n if (locationIds.length > 0) {\n const listPayload: LocationListProps = {\n limit: 100,\n offset: 0,\n sortfield: \"location_id\",\n sortorder: \"ASC\",\n filters: [{\n field: \"location_id\",\n operator: \"where_in\",\n value: locationIds.map((i: any) => Number(i))\n }],\n datatypes: []\n }\n\n const { data } = await locationService.listLocations(listPayload)\n locations = data\n }\n\n const result: AuthTokenResult = {\n token: authToken,\n account,\n user,\n user_locations: locations,\n // parent_user_id: 0,\n // roles: [\n // {\n // id: 23,\n // role_name: \"123\"\n // }\n // ],\n // permissions: [],\n is_owner: Boolean(user?.is_owner),\n // owner_id: 0\n }\n\n let newResult: any\n\n // Call the consumer hook, if registered\n if (AuthTokenHook?.onSuccessAuthenticate) {\n\n const userType: UserType = user?.user_type ?? \"administrator\"\n\n newResult = await AuthTokenHook.onSuccessAuthenticate({\n defaultServiceProps: {\n accountId: Number(account?.account_id),\n actionUserId: Number(user?.user_id),\n actionUserType: user?.user_type ?? \"\",\n authToken: authToken,\n isOperator: Boolean(userType === \"operator\"),\n accessKey: \"\",\n accessKeyId: \"\"\n },\n callbackParams: result\n })\n }\n\n return newResult ? newResult : result\n };\n\n return {\n getAuthToken,\n verifyAuthToken,\n }\n\n}\n\n"]}
@@ -235,29 +235,32 @@ const FileService = (props) => {
235
235
  // Call the consumer hook, if registered
236
236
  if (features_1.FileStorageHook.onStartUpload) {
237
237
  await features_1.FileStorageHook.onStartUpload({
238
- fieldRef: field_ref,
239
- fieldModule: field_module,
240
- tagName,
241
- label,
242
- refId,
243
- refId2,
244
- refLabel,
245
- refLabel2,
246
- remark,
247
- description,
248
- foldernameDate,
249
- file,
250
- storageProviderName,
251
- storageProviderOptions,
252
- fileCategoryName,
253
- batchCode,
254
- mimeType,
255
- bufferFilebuffer: bufferToUpload,
256
- bufferFileThumbnail: bufferThumbnail?.buffer,
257
- outputSizeBytes,
258
- fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : "",
259
- imageCompressionOptions,
260
- videoCompressionOptions
238
+ defaultServiceProps: rest,
239
+ callbackParams: {
240
+ fieldRef: field_ref,
241
+ fieldModule: field_module,
242
+ tagName,
243
+ label,
244
+ refId,
245
+ refId2,
246
+ refLabel,
247
+ refLabel2,
248
+ remark,
249
+ description,
250
+ foldernameDate,
251
+ file,
252
+ storageProviderName,
253
+ storageProviderOptions,
254
+ fileCategoryName,
255
+ batchCode,
256
+ mimeType,
257
+ bufferFilebuffer: bufferToUpload,
258
+ bufferFileThumbnail: bufferThumbnail?.buffer,
259
+ outputSizeBytes,
260
+ fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : "",
261
+ imageCompressionOptions,
262
+ videoCompressionOptions
263
+ }
261
264
  });
262
265
  }
263
266
  // upload using the provider - buffer
@@ -324,33 +327,36 @@ const FileService = (props) => {
324
327
  // Call the consumer hook, if registered
325
328
  if (features_1.FileStorageHook.onSuccessUpload) {
326
329
  await features_1.FileStorageHook.onSuccessUpload({
327
- fileId: Number(responseFile?.file_id),
328
- fileThumbnailUrl: thumbnailUrl,
329
- fileAssetUrl: assetUrl,
330
- fileDurationSeconds,
331
- fieldRef: field_ref,
332
- fieldModule: field_module,
333
- tagName,
334
- label,
335
- refId,
336
- refId2,
337
- refLabel,
338
- refLabel2,
339
- remark,
340
- description,
341
- foldernameDate,
342
- file,
343
- storageProviderName,
344
- storageProviderOptions,
345
- fileCategoryName,
346
- batchCode,
347
- mimeType,
348
- bufferFilebuffer: bufferToUpload,
349
- bufferFileThumbnail: bufferThumbnail.buffer,
350
- outputSizeBytes,
351
- fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : "",
352
- imageCompressionOptions,
353
- videoCompressionOptions
330
+ defaultServiceProps: rest,
331
+ callbackParams: {
332
+ fileId: Number(responseFile?.file_id),
333
+ fileThumbnailUrl: thumbnailUrl,
334
+ fileAssetUrl: assetUrl,
335
+ fileDurationSeconds,
336
+ fieldRef: field_ref,
337
+ fieldModule: field_module,
338
+ tagName,
339
+ label,
340
+ refId,
341
+ refId2,
342
+ refLabel,
343
+ refLabel2,
344
+ remark,
345
+ description,
346
+ foldernameDate,
347
+ file,
348
+ storageProviderName,
349
+ storageProviderOptions,
350
+ fileCategoryName,
351
+ batchCode,
352
+ mimeType,
353
+ bufferFilebuffer: bufferToUpload,
354
+ bufferFileThumbnail: bufferThumbnail.buffer,
355
+ outputSizeBytes,
356
+ fileCompressFormat: fileCompressFormat ? JSON.parse(fileCompressFormat) : "",
357
+ imageCompressionOptions,
358
+ videoCompressionOptions
359
+ }
354
360
  });
355
361
  }
356
362
  allResponses.push(responseFile);