@izara_project/izara-shared-service-schemas 1.0.21 → 1.0.23

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@izara_project/izara-shared-service-schemas",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "Shared Libraries frontend/backend for Service Schemas",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/src/Consts.js CHANGED
@@ -300,5 +300,8 @@ module.exports = {
300
300
  HANDLER,
301
301
  HANDLER_LIST: Object.values(HANDLER),
302
302
  FIELDNAME_TYPES,
303
- ALLOW_FIELDNAME_TYPES
303
+ ALLOW_FIELDNAME_TYPES,
304
+
305
+ OBJECT_SCHEMA_BUCKET_NAME: 'object-schema',
306
+ SUPPLY_SCHEMA_BUCKET_NAME: "schema-supply",
304
307
  }
@@ -25,30 +25,32 @@ const NoRetryError = izaraCore.NoRetryError;
25
25
  const { validateObject } = izaraCore.validator;
26
26
 
27
27
  const { basicFieldNameSchema } = require("./libs/BasicValidatorSchema");
28
- const { validateRelType, validateObjType } = require('./libs/ValidateObjType');
28
+ const { validateRelType, validateObjType, validateFlowType } = require('./libs/ValidateObjType');
29
29
 
30
30
  const { findLinksByObjType, createLinkTypeId } = require("./Utils");
31
- const { SCHEMA_NAME, STORAGE_TYPES } = require('./Consts');
31
+ const { SCHEMA_NAME, STORAGE_TYPES, OBJECT_SCHEMA_BUCKET_NAME } = require('./Consts');
32
32
  const {
33
33
  generateObjectSchemaForCreate,
34
34
  generateObjectSchemaForUpdate,
35
35
  generateObjectSchemaForCombineFieldNames
36
36
  } = require('./libs/ReformatObjectSchema');
37
+
37
38
  /**
38
39
  * Retrieves a specific object schema from S3.
39
40
  *
40
41
  * @param {Function} getSchemaFn - Function to fetch the schema from S3.
41
42
  * @param {object} objType - The object type information.
42
43
  * @param {string} objType.objectType - The type of the object.
44
+ * @param {string} bucketName - bucketName to getSchema
43
45
  * @param {boolean} [getExtendObType=false] - Whether to include extended object type data.
44
46
  * @returns {Promise<object>} - The object schema, optionally merged with extended object type data.
45
47
  */
46
48
  async function getObjSchemaS3(
47
49
  getSchemaFn,
48
50
  objType,
51
+ bucketName = OBJECT_SCHEMA_BUCKET_NAME,
49
52
  getExtendObType = false,
50
53
  ) {
51
-
52
54
  try {
53
55
  validateObjType(objType);
54
56
  } catch (error) {
@@ -63,7 +65,7 @@ async function getObjSchemaS3(
63
65
  getParams: objType
64
66
  }
65
67
 
66
- let objSchema = await getSchemaFn(getDataParams);
68
+ let objSchema = await getSchemaFn(getDataParams, bucketName);
67
69
  if (!objSchema) {
68
70
  // return objSchema;
69
71
  return {
@@ -105,8 +107,8 @@ async function getObjSchemaS3(
105
107
  * @returns {Promise<object>} - The object schema, optionally merged with extended object type data.
106
108
  * @see {@link getObjSchemaS3}
107
109
  */
108
- async function getObjSchemaWithHierarchy(getSchemaFn, objType) {
109
- return await getObjSchemaS3(getSchemaFn, objType, true);
110
+ async function getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
111
+ return await getObjSchemaS3(getSchemaFn, objType, bucketName, true);
110
112
  }
111
113
 
112
114
  /**
@@ -117,8 +119,8 @@ async function getObjSchemaWithHierarchy(getSchemaFn, objType) {
117
119
  * @returns {Promise<object>} - The object schema without extended hierarchical data.
118
120
  * @see {@link getObjSchemaS3}
119
121
  */
120
- async function getObjSchemaWithoutHierarchy(getSchemaFn, objType) {
121
- return await getObjSchemaS3(getSchemaFn, objType, false);
122
+ async function getObjSchemaWithoutHierarchy(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
123
+ return await getObjSchemaS3(getSchemaFn, objType, bucketName, false);
122
124
  }
123
125
 
124
126
  /**
@@ -131,8 +133,8 @@ async function getObjSchemaWithoutHierarchy(getSchemaFn, objType) {
131
133
  * @returns {Promise<Object>} The merged and validated object schema.
132
134
  * @throws {NoRetryError} If there are validation errors in the merged schema, such as duplicate storage resources or invalid field names.
133
135
  */
134
- async function mergeExtendObjSchema(getSchemaFn, objectSchema) {
135
- let mergedObjectSchemaResult = await recursiveMergeExtendObjSchema(getSchemaFn, objectSchema);
136
+ async function mergeExtendObjSchema(getSchemaFn, objectSchema, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
137
+ let mergedObjectSchemaResult = await recursiveMergeExtendObjSchema(getSchemaFn, objectSchema, bucketName);
136
138
 
137
139
  if (mergedObjectSchemaResult.errorsFound.length > 0) {
138
140
  return mergedObjectSchemaResult;
@@ -201,7 +203,7 @@ async function mergeExtendObjSchema(getSchemaFn, objectSchema) {
201
203
  * @returns {Promise<object>} - The merged object schema.
202
204
  * @throws {NoRetryError} If the recursion depth exceeds 20 or if validation fails.
203
205
  */
204
- async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
206
+ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, bucketName = OBJECT_SCHEMA_BUCKET_NAME, iter = 1) {
205
207
  if (iter > 20) {
206
208
  // throw new NoRetryError(`mergeExtendObjSchema Error objectTYpe: ${objSchema.objectType} Have more than 20 hierarchy.`)
207
209
  return {
@@ -212,8 +214,6 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
212
214
 
213
215
  objSchema = lodash.cloneDeep(objSchema);
214
216
 
215
- console.log("iter in merge : ", iter);
216
-
217
217
  if (objSchema.hasOwnProperty("extendObjType")) {
218
218
  const extendedObjTypeValidation = validateObjType(objSchema.extendObjType);
219
219
  if (extendedObjTypeValidation.errorsFound.length > 0) {
@@ -222,7 +222,8 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
222
222
  result: null
223
223
  }
224
224
  }
225
- let parentObjSchema = await getObjSchemaS3(getSchemaFn, objSchema.extendObjType, false).then(res => {
225
+
226
+ let parentObjSchema = await getObjSchemaS3(getSchemaFn, objSchema.extendObjType, bucketName, false).then(res => {
226
227
  if (res.errorsFound.length && res.errorsFound.length > 0) {
227
228
  return {
228
229
  errorsFound: res.errorsFound,
@@ -457,7 +458,7 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
457
458
  },
458
459
  };
459
460
 
460
- let recursiveResult = await recursiveMergeExtendObjSchema(getSchemaFn, newObjSchema, iter);
461
+ let recursiveResult = await recursiveMergeExtendObjSchema(getSchemaFn, newObjSchema, bucketName, iter);
461
462
  return recursiveResult;
462
463
  }
463
464
  }
@@ -478,7 +479,7 @@ async function recursiveMergeExtendObjSchema(getSchemaFn, objSchema, iter = 1) {
478
479
  * @param {String} objType.serviceTag - The service tag associated with the object type.
479
480
  * @returns {Promise<Object>} - The reference relationship data of the specified object type, or an empty object if not found.
480
481
  */
481
- async function getRefObjectRelationship(getSchemaFn, objType) {
482
+ async function getRefObjectRelationship(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
482
483
  const objTypeValidation = validateObjType(objType);
483
484
  if (objTypeValidation.errorsFound.length > 0) {
484
485
  return {
@@ -492,7 +493,7 @@ async function getRefObjectRelationship(getSchemaFn, objType) {
492
493
  getParams: objType
493
494
  }
494
495
 
495
- let refRelationshipData = await getSchemaFn(getDataParams);
496
+ let refRelationshipData = await getSchemaFn(getDataParams, bucketName);
496
497
 
497
498
  // return refRelationshipData || {};
498
499
  return {
@@ -511,7 +512,7 @@ async function getRefObjectRelationship(getSchemaFn, objType) {
511
512
  * @param {String} relType.relationshipTag - The specific relationship tag to retrieve.
512
513
  * @returns {Promise<object>} - The relationship schema data.
513
514
  */
514
- async function getRelationshipSchema(getSchemaFn, relType) {
515
+ async function getRelationshipSchema(getSchemaFn, relType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
515
516
  const relTypeValidation = validateRelType(relType);
516
517
  if (relTypeValidation.errorsFound.length > 0) {
517
518
  return {
@@ -525,7 +526,7 @@ async function getRelationshipSchema(getSchemaFn, relType) {
525
526
  getParams: relType
526
527
  }
527
528
 
528
- let relationshipSchema = await getSchemaFn(getDataParams);
529
+ let relationshipSchema = await getSchemaFn(getDataParams, bucketName);
529
530
 
530
531
  // return relationshipSchema;
531
532
  return {
@@ -555,7 +556,8 @@ async function getObjectRelationship(
555
556
  objType,
556
557
  specificRelTags,
557
558
  overWriteBaseObjType,
558
- iter = 1
559
+ bucketName = OBJECT_SCHEMA_BUCKET_NAME,
560
+ iter = 1,
559
561
  ) {
560
562
  if (iter >= 20) {
561
563
  // throw new NoRetryError(`Error:Iteration > 20 while getObjectRelationship of objType ${JSON.stringify(objType)}`);
@@ -594,7 +596,7 @@ async function getObjectRelationship(
594
596
  getParams: objType
595
597
  }
596
598
 
597
- let objectRelationshipsData = await getSchemaFn(getDataParams);
599
+ let objectRelationshipsData = await getSchemaFn(getDataParams, bucketName);
598
600
 
599
601
  if (objectRelationshipsData && Array.isArray(objectRelationshipsData) && objectRelationshipsData.length) {
600
602
  for (const objectRel of objectRelationshipsData) {
@@ -617,7 +619,7 @@ async function getObjectRelationship(
617
619
  }
618
620
 
619
621
  // get reference relationships of objType
620
- let refRelationshipsResult = await getRefObjectRelationship(getSchemaFn, objType);
622
+ let refRelationshipsResult = await getRefObjectRelationship(getSchemaFn, objType, bucketName);
621
623
 
622
624
  // if (refRelationshipsResult.errorsFound.length > 0) {
623
625
  // errorsFound.push(...refRelationshipsResult.errorsFound);
@@ -644,7 +646,8 @@ async function getObjectRelationship(
644
646
  {
645
647
  serviceTag: refData.relationshipServiceTag,
646
648
  relationshipTag: relTag
647
- }
649
+ },
650
+ bucketName
648
651
  );
649
652
 
650
653
  if (refRelSchemaResult.errorsFound.length > 0) {
@@ -716,7 +719,7 @@ async function getObjectRelationship(
716
719
 
717
720
  overWriteBaseObjType = overWriteBaseObjType ? overWriteBaseObjType : objType;
718
721
 
719
- let extendObjectRelationshipResult = await getObjectRelationship(getSchemaFn, objSchema.extendObjType, [...specificRelTagsSet], overWriteBaseObjType, iter);
722
+ let extendObjectRelationshipResult = await getObjectRelationship(getSchemaFn, objSchema.extendObjType, [...specificRelTagsSet], overWriteBaseObjType, bucketName, iter);
720
723
 
721
724
  if (extendObjectRelationshipResult.errorsFound.length > 0) {
722
725
  errorsFound.push(...extendObjectRelationshipResult.errorsFound);
@@ -735,7 +738,7 @@ async function getObjectRelationship(
735
738
  // }
736
739
 
737
740
  // let linkTypeIdExtend = linkTypeIdExtendResult.result;
738
- if (!linkTypeIds.has(linkTypeIdExtendResult)) { // check duplicate link arcoss child and parent
741
+ if (!linkTypeIds.has(linkTypeIdExtendResult)) { // check duplicate link across child and parent
739
742
  linkTypeIds.add(linkTypeIdExtendResult)
740
743
  returnRelationships.push(newExtendObject);
741
744
  }
@@ -779,6 +782,7 @@ async function getRequiredOnCreateLinks(
779
782
  getSchemaFn,
780
783
  objType,
781
784
  specificRelTags,
785
+ bucketName = OBJECT_SCHEMA_BUCKET_NAME
782
786
  ) {
783
787
  try {
784
788
  validateObjType(objType)
@@ -789,7 +793,7 @@ async function getRequiredOnCreateLinks(
789
793
  }
790
794
  }
791
795
 
792
- let objectRelationships = await getObjectRelationship(getSchemaFn, objType, specificRelTags);
796
+ let objectRelationships = await getObjectRelationship(getSchemaFn, objType, specificRelTags, objType, bucketName);
793
797
 
794
798
  if (objectRelationships.errorsFound.length > 0) {
795
799
  return {
@@ -802,21 +806,16 @@ async function getRequiredOnCreateLinks(
802
806
 
803
807
  if (objectRelationships.result?.length) {
804
808
  for (const link of objectRelationships.result) {
805
- if (objectRelationships.result?.length) {
806
- for (const link of objectRelationships.result) {
807
- if (link.base?.requiredOnCreate) {
808
- returnRequiredOnCreateLinks.push(link);
809
- }
810
- }
811
- }
812
-
813
- // return returnRequiredOnCreateLinks;
814
- return {
815
- errorsFound: [],
816
- result: returnRequiredOnCreateLinks
809
+ if (link.base?.requiredOnCreate) {
810
+ returnRequiredOnCreateLinks.push(link);
817
811
  }
818
812
  }
819
813
  }
814
+
815
+ return {
816
+ errorsFound: [],
817
+ result: returnRequiredOnCreateLinks
818
+ }
820
819
  }
821
820
 
822
821
 
@@ -840,11 +839,7 @@ async function getRequiredOnCreateLinks(
840
839
  * @returns {Promise<Object>} - A promise that resolves to the link configuration for the specified link type ID.
841
840
  * @throws {NoRetryError} - Throws an error if the direction is invalid or if the required schema data is missing.
842
841
  */
843
- async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, settings = {
844
- getAllLinks: false,
845
- getRawLink: false,
846
- getOriginalLink: false
847
- }) {
842
+ async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, settings = { getAllLinks: false, getRawLink: false, getOriginalLink: false }, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
848
843
  let errorsFound = [];
849
844
 
850
845
  if (!direction || typeof direction !== "string" || (direction !== "from" && direction !== "to")) {
@@ -880,7 +875,7 @@ async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjTyp
880
875
  }
881
876
  }
882
877
 
883
- async function getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction) {
878
+ async function getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, bucketName) {
884
879
  const linkTypeIdResult = createLinkTypeId(firstObjType, secondObjType, relType, direction);
885
880
 
886
881
  if (linkTypeIdResult.errorsFound.length > 0) {
@@ -896,33 +891,37 @@ async function getLinkConfigByLinkTypeId(getSchemaFn, firstObjType, secondObjTyp
896
891
  }
897
892
  }
898
893
 
899
- const linkConfig = await getSchemaFn(getDataParams);
894
+ const linkConfig = await getSchemaFn(getDataParams, bucketName);
900
895
  return linkConfig
901
896
  }
902
897
 
903
898
  let linkConfigs = [];
904
899
  if (settings.getOriginalLink) {
905
- let linkConfig = await getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction)
900
+ let linkConfig = await getLinkTypeId(getSchemaFn, firstObjType, secondObjType, relType, direction, bucketName)
906
901
  linkConfig && linkConfigs.push(linkConfig)
907
902
  } else {
908
- let firstObjectTypeHie = await getObjTypeHierarchy(getSchemaFn, firstObjType);
909
- let secondObjectTypeHie = await getObjTypeHierarchy(getSchemaFn, secondObjType);
910
-
911
- if (firstObjectTypeHie.errorsFound.length > 0) {
912
- errorsFound.push(...firstObjectTypeHie.errorsFound);
913
- return {
914
- errorsFound,
915
- result: null
903
+ let firstObjectTypeHie = await getObjTypeHierarchy(getSchemaFn, firstObjType, [firstObjType], bucketName).then(res => {
904
+ if (res.errorsFound.length && res.errorsFound.length > 0) {
905
+ errorsFound.push(...res.errorsFound)
906
+ return {
907
+ errorsFound: res.errorsFound,
908
+ result: null
909
+ }
910
+ } else {
911
+ return res.result
916
912
  }
917
- }
918
-
919
- if (secondObjectTypeHie.errorsFound.length > 0) {
920
- errorsFound.push(...secondObjectTypeHie.errorsFound);
921
- return {
922
- errorsFound,
923
- result: null
913
+ });
914
+ let secondObjectTypeHie = await getObjTypeHierarchy(getSchemaFn, secondObjType, [secondObjType], bucketName).then(res => {
915
+ if (res.errorsFound.length && res.errorsFound.length > 0) {
916
+ errorsFound.push(...res.errorsFound)
917
+ return {
918
+ errorsFound: res.errorsFound,
919
+ result: null
920
+ }
921
+ } else {
922
+ return res.result
924
923
  }
925
- }
924
+ });
926
925
 
927
926
  for (const firstObject of firstObjectTypeHie) {
928
927
  for (const secondObject of secondObjectTypeHie) {
@@ -982,7 +981,7 @@ async function getLinkConfig(getSchemaFn, firstObjType, secondObjType, relType,
982
981
  * @param {object} objType
983
982
  * @return {object} objectSchema
984
983
  */
985
- async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, iter = 1) {
984
+ async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, bucketName = OBJECT_SCHEMA_BUCKET_NAME, iter = 1) {
986
985
  if (iter >= 20) {
987
986
  // throw NoRetryError("getObjTypeHierarchy reach limit iteration");
988
987
  return {
@@ -1008,13 +1007,23 @@ async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, i
1008
1007
  objTypeHierarchy = passObjTypeHierarchy;
1009
1008
  }
1010
1009
 
1011
- const objectSchema = await getObjSchemaWithoutHierarchy(getSchemaFn, objType);
1010
+ const objectSchema = await getObjSchemaWithoutHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
1011
+ if (objSchema.errorsFound.length) {
1012
+ return {
1013
+ errorsFound: objSchema.errorsFound,
1014
+ result: null
1015
+ }
1016
+ } else {
1017
+ return objSchema.result
1018
+ }
1019
+ });
1020
+
1012
1021
 
1013
1022
  if (objectSchema.extendObjType) {
1014
1023
  iter++;
1015
1024
  objTypeHierarchy.push(objectSchema.extendObjType);
1016
1025
 
1017
- let extendResult = await getObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, objTypeHierarchy, iter);
1026
+ let extendResult = await getObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, objTypeHierarchy, bucketName, iter);
1018
1027
 
1019
1028
  if (extendResult.errorsFound.length) {
1020
1029
  return {
@@ -1030,8 +1039,8 @@ async function getObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, i
1030
1039
  }
1031
1040
  }
1032
1041
 
1033
- async function getObjectSchemaForCreate(getSchemaFn, objType) {
1034
- let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType).then(objSchema => {
1042
+ async function getObjectSchemaForCreate(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
1043
+ let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
1035
1044
  if (objSchema.errorsFound.length) {
1036
1045
  return {
1037
1046
  errorsFound: objSchema.errorsFound,
@@ -1044,8 +1053,8 @@ async function getObjectSchemaForCreate(getSchemaFn, objType) {
1044
1053
  return generateObjectSchemaForCreate(objectSchema)
1045
1054
  }
1046
1055
 
1047
- async function getObjectSchemaForUpdate(getSchemaFn, objType) {
1048
- let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType).then(objSchema => {
1056
+ async function getObjectSchemaForUpdate(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
1057
+ let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
1049
1058
  if (objSchema.errorsFound.length) {
1050
1059
  return {
1051
1060
  errorsFound: objSchema.errorsFound,
@@ -1058,8 +1067,8 @@ async function getObjectSchemaForUpdate(getSchemaFn, objType) {
1058
1067
  return generateObjectSchemaForUpdate(objectSchema)
1059
1068
  }
1060
1069
 
1061
- async function getObjectSchemaCombineFieldNames(objType) {
1062
- let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType).then(objSchema => {
1070
+ async function getObjectSchemaCombineFieldNames(getSchemaFn, objType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
1071
+ let objectSchema = await getObjSchemaWithHierarchy(getSchemaFn, objType, bucketName).then(objSchema => {
1063
1072
  if (objSchema.errorsFound.length) {
1064
1073
  return {
1065
1074
  errorsFound: objSchema.errorsFound,
@@ -1071,6 +1080,39 @@ async function getObjectSchemaCombineFieldNames(objType) {
1071
1080
  })
1072
1081
  return generateObjectSchemaForCombineFieldNames(objectSchema)
1073
1082
  }
1083
+
1084
+ async function getFlowSchemaS3(getSchemaFn, flowType, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
1085
+ let errorsFound = [];
1086
+ try {
1087
+ validateFlowType(flowType);
1088
+ } catch (error) {
1089
+ errorsFound.push(error.message)
1090
+ return {
1091
+ errorsFound: [error.message],
1092
+ result: null
1093
+ }
1094
+ }
1095
+
1096
+ const getDataParams = {
1097
+ schemaName: SCHEMA_NAME.flowSchema,
1098
+ getParams: flowType
1099
+ }
1100
+
1101
+ let flowSchema = await getSchemaFn(getDataParams, bucketName);
1102
+ if (!flowSchema) {
1103
+ // return objSchema;
1104
+ return {
1105
+ errorsFound: errorsFound,
1106
+ result: null
1107
+ }
1108
+ } else {
1109
+ return {
1110
+ errorsFound: errorsFound,
1111
+ result: flowSchema
1112
+ }
1113
+ }
1114
+ }
1115
+
1074
1116
  module.exports = {
1075
1117
  // objectSchema
1076
1118
  getObjSchemaS3,
@@ -1093,5 +1135,7 @@ module.exports = {
1093
1135
 
1094
1136
  getObjectSchemaForCreate,
1095
1137
  getObjectSchemaForUpdate,
1096
- getObjectSchemaCombineFieldNames
1138
+ getObjectSchemaCombineFieldNames,
1139
+
1140
+ getFlowSchemaS3,
1097
1141
  }
@@ -689,7 +689,7 @@ const basicExtendObjectSchema = {
689
689
  }
690
690
  }
691
691
 
692
- // validator schema for basic realtionship schema
692
+ // validator schema for basic relationship schema
693
693
  const relationshipBasicSchema = {
694
694
  type: "object",
695
695
  maxProperties: 1,
@@ -873,7 +873,7 @@ const relationshipBasicSchema = {
873
873
  }
874
874
 
875
875
 
876
- // validator schema for basic reference realtionship schema
876
+ // validator schema for basic reference relationship schema
877
877
  const refRelationshipBasicSchema = {
878
878
  type: "object",
879
879
  required: ["objectType", "relationshipTag", "relationshipServiceTag"],
@@ -957,13 +957,101 @@ const basicFlowSchema = {
957
957
  minItems: 1,
958
958
  items: {
959
959
  type: "string",
960
- enum: ["ownTopic", "extTopic", "s3", "eventBridge"],
960
+ enum: ["ownTopic", "extTopic", "s3", "eventBridge", "lambdaSync"],
961
961
  }
962
962
  },
963
963
  triggerType: {
964
964
  type: "string",
965
965
  enum: ["storedCache", "switch"]
966
966
  },
967
+ stepProperties: {
968
+ type: "object",
969
+ minProperties: 1,
970
+ patternProperties: {
971
+ [strNotEmptyRegex]: {
972
+ type: "object",
973
+ required: ["propertyName", "type"],
974
+ properties: {
975
+ propertyName: {
976
+ type: "string"
977
+ },
978
+ type: {
979
+ type: "string"
980
+ },
981
+ objectField: {
982
+ type: "object",
983
+ required: ["objType", "fieldName"],
984
+ properties: {
985
+ objType: {
986
+ type: "object",
987
+ required: ["objectType", "serviceTag"],
988
+ properties: {
989
+ objectType: {
990
+ type: "string",
991
+ pattern: strNotEmptyRegex
992
+ },
993
+ serviceTag: {
994
+ type: "string",
995
+ pattern: strNotEmptyRegex
996
+ }
997
+ }
998
+ },
999
+ fieldName: {
1000
+ type: "string"
1001
+ }
1002
+ }
1003
+ },
1004
+ overwritePropertyName: {
1005
+ type: "string"
1006
+ }
1007
+ }
1008
+ }
1009
+ }
1010
+ },
1011
+ stepMessageAttributes: {
1012
+ type: "object",
1013
+ minProperties: 1,
1014
+ patternProperties: {
1015
+ [strNotEmptyRegex]: {
1016
+ type: "object",
1017
+ required: ["propertyName", "type"],
1018
+ properties: {
1019
+ propertyName: {
1020
+ type: "string"
1021
+ },
1022
+ type: {
1023
+ type: "string"
1024
+ },
1025
+ objectField: {
1026
+ type: "object",
1027
+ required: ["objType", "fieldName"],
1028
+ properties: {
1029
+ objType: {
1030
+ type: "object",
1031
+ required: ["objectType", "serviceTag"],
1032
+ properties: {
1033
+ objectType: {
1034
+ type: "string",
1035
+ pattern: strNotEmptyRegex
1036
+ },
1037
+ serviceTag: {
1038
+ type: "string",
1039
+ pattern: strNotEmptyRegex
1040
+ }
1041
+ }
1042
+ },
1043
+ fieldName: {
1044
+ type: "string"
1045
+ }
1046
+ }
1047
+ },
1048
+ overwritePropertyName: {
1049
+ type: "string"
1050
+ }
1051
+ }
1052
+ }
1053
+ }
1054
+ },
967
1055
  flowSteps: {
968
1056
  type: "object",
969
1057
  minProperties: 1, // incase outputTopic === false
@@ -973,12 +1061,18 @@ const basicFlowSchema = {
973
1061
  required: ["properties", "messageAttributes"],
974
1062
  properties: {
975
1063
  properties: {
976
- minProperties: 1,
977
- type: "object",
1064
+ type: "array",
1065
+ items: {
1066
+ type: "string"
1067
+ },
1068
+ // minItems: 1
978
1069
  },
979
1070
  messageAttributes: {
980
- minProperties: 1,
981
- type: "object"
1071
+ type: "array",
1072
+ items: {
1073
+ type: "string"
1074
+ },
1075
+ // minItems: 1
982
1076
  }
983
1077
  }
984
1078
  }
@@ -994,6 +1088,9 @@ const basicFlowSchema = {
994
1088
  },
995
1089
  outputTopic: {
996
1090
  type: "boolean"
1091
+ },
1092
+ externalEndpoint: {
1093
+ type: "boolean"
997
1094
  }
998
1095
  }
999
1096
  }
@@ -178,6 +178,7 @@ function generateObjectSchemaForUpdate(objSchema) {
178
178
  * @returns {Object} - objectSchema that has property for case update
179
179
  */
180
180
  function generateObjectSchemaForCombineFieldNames(objSchema) {
181
+ console.log("generateObjectSchemaForCombineFieldNames", objSchema)
181
182
  // generate data for case update
182
183
  let initReturnObj = {
183
184
  objectType: objSchema.objectType,
@@ -22,6 +22,7 @@ const lodash = require("lodash");
22
22
 
23
23
  const getObjectSchema = require("../GetObjectSchema");
24
24
  const { validateObjType } = require("./ValidateObjType");
25
+ const { OBJECT_SCHEMA_BUCKET_NAME } = require("../Consts");
25
26
 
26
27
  /**
27
28
  * Recursively creates an object type hierarchy by traversing through the schema
@@ -36,7 +37,7 @@ const { validateObjType } = require("./ValidateObjType");
36
37
  * @returns {Promise<string[]>} A promise that resolves to an array representing the object type hierarchy.
37
38
  * @throws {NoRetryError} Throws an error if the maximum iteration limit (20) is reached.
38
39
  */
39
- async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, iter = 1) {
40
+ async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy, bucketName = OBJECT_SCHEMA_BUCKET_NAME, iter = 1) {
40
41
  if (iter >= 20) {
41
42
  // throw NoRetryError("createObjTypeHierarchy reach limit iteration");
42
43
  return {
@@ -62,7 +63,7 @@ async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy
62
63
  objTypeHierarchy = passObjTypeHierarchy;
63
64
  }
64
65
 
65
- const objectSchemaResult = await getObjectSchema.getObjSchemaWithoutHierarchy(getSchemaFn, objType);
66
+ const objectSchemaResult = await getObjectSchema.getObjSchemaWithoutHierarchy(getSchemaFn, objType, bucketName);
66
67
 
67
68
 
68
69
  if (objectSchemaResult.errorFounds.length > 0) {
@@ -78,7 +79,7 @@ async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy
78
79
  iter++;
79
80
  objTypeHierarchy.push(objectSchema.extendObjType);
80
81
 
81
- let extendResult = await createObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, objTypeHierarchy, iter);
82
+ let extendResult = await createObjTypeHierarchy(getSchemaFn, objectSchema.extendObjType, [objTypeHierarchy], bucketName, iter);
82
83
 
83
84
  if (extendResult.errorFounds.length > 0) {
84
85
  return {
@@ -108,7 +109,7 @@ async function createObjTypeHierarchy(getSchemaFn, objType, passObjTypeHierarchy
108
109
  * @returns {Promise<object[]>} A promise that resolves to an array of refactored links matching the object types.
109
110
  * @throws {NoRetryError} Throws an error if the input parameters are invalid.
110
111
  */
111
- async function findLinksByObjTypes(getSchemaFn, objTypes, relationshipLinks) {
112
+ async function findLinksByObjTypes(getSchemaFn, objTypes, relationshipLinks, bucketName = OBJECT_SCHEMA_BUCKET_NAME) {
112
113
 
113
114
  if (!Array.isArray(relationshipLinks)) {
114
115
  return {
@@ -144,8 +145,8 @@ async function findLinksByObjTypes(getSchemaFn, objTypes, relationshipLinks) {
144
145
  const secondObjType = objTypes[1];
145
146
 
146
147
  // first create hierarchy of each objType
147
- const firstObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[0]);
148
- const secondObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[1]);
148
+ const firstObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[0], [objTypes[0]], bucketName);
149
+ const secondObjTypeTree = await createObjTypeHierarchy(getSchemaFn, objTypes[1], [objTypes[1]], bucketName);
149
150
 
150
151
  if (firstObjTypeTree.errorFounds.length > 0) {
151
152
  return {