@coherentglobal/spark-execute-sdk 0.3.15 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -6843,12 +6843,17 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
6843
6843
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6844
6844
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6845
6845
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
6846
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6847
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6848
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6846
6849
  /**
6847
6850
  *
6848
6851
  * @param {object} nodegen
6849
6852
  * @returns
6850
6853
  */
6851
6854
  var processModels = function processModels(nodegen) {
6855
+ var processedModels = _objectSpread({}, nodegen);
6856
+ // console.log('MODELS TO PROCESS: ', processedModels)
6852
6857
  switch (nodegen.type) {
6853
6858
  case "binary":
6854
6859
  case "uint8array":
@@ -6860,11 +6865,14 @@ var processModels = function processModels(nodegen) {
6860
6865
  js: Buffer.from(nodegen.binary.js, "base64"),
6861
6866
  data: Buffer.from(nodegen.binary.data, "base64")
6862
6867
  };
6863
- nodegen.binary = model;
6868
+ processedModels.binary = model;
6869
+ // nodegen.binary = model;
6864
6870
  } else {
6865
6871
  var _model = Buffer.from(nodegen.binary, "base64");
6866
- nodegen.binary = _model;
6872
+ processedModels.binary = _model;
6873
+ // nodegen.binary = model;
6867
6874
  }
6875
+
6868
6876
  break;
6869
6877
  case "function":
6870
6878
  var func = nodegen.binary;
@@ -6878,9 +6886,11 @@ var processModels = function processModels(nodegen) {
6878
6886
  _context.next = 2;
6879
6887
  return func();
6880
6888
  case 2:
6881
- nodegen.binary = _context.sent;
6889
+ processedModels.binary = _context.sent;
6890
+ // nodegen.binary = await func();
6882
6891
  model = Buffer.from(nodegen.binary, "base64");
6883
- nodegen.binary = model;
6892
+ processedModels.binary = model;
6893
+ // nodegen.binary = model;
6884
6894
  case 5:
6885
6895
  case "end":
6886
6896
  return _context.stop();
@@ -6889,19 +6899,21 @@ var processModels = function processModels(nodegen) {
6889
6899
  }, _callee);
6890
6900
  }))();
6891
6901
  } else {
6892
- nodegen.binary = func();
6902
+ // nodegen.binary = func();
6893
6903
  var _model2 = Buffer.from(nodegen.binary, "base64");
6894
- nodegen.binary = _model2;
6904
+ processedModels.binary = _model2;
6905
+ // nodegen.binary = model;
6895
6906
  }
6907
+
6896
6908
  default:
6897
6909
  break;
6898
6910
  }
6899
- return nodegen;
6911
+ return processedModels;
6900
6912
  };
6901
6913
  module.exports = processModels;
6902
6914
 
6903
6915
  }).call(this)}).call(this,require("buffer").Buffer)
6904
- },{"@babel/runtime/helpers/asyncToGenerator":2,"@babel/runtime/helpers/interopRequireDefault":9,"@babel/runtime/helpers/typeof":15,"@babel/runtime/regenerator":17,"buffer":24}],46:[function(require,module,exports){
6916
+ },{"@babel/runtime/helpers/asyncToGenerator":2,"@babel/runtime/helpers/defineProperty":6,"@babel/runtime/helpers/interopRequireDefault":9,"@babel/runtime/helpers/typeof":15,"@babel/runtime/regenerator":17,"buffer":24}],46:[function(require,module,exports){
6905
6917
  "use strict";
6906
6918
 
6907
6919
  var Joi = require("joi");
@@ -6926,7 +6938,8 @@ var rules = Joi.object({
6926
6938
  data: Joi.string()
6927
6939
  })],
6928
6940
  metaData: Joi.object()
6929
- })).required()
6941
+ })).required(),
6942
+ externalUuid: Joi.string().allow()
6930
6943
  // xParameters: Joi.array().items(),
6931
6944
  // xCallCallback: Joi.func()
6932
6945
  }).required();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coherentglobal/spark-execute-sdk",
3
- "version": "0.3.15",
3
+ "version": "0.4.0",
4
4
  "description": "",
5
5
  "main": "src/node.js",
6
6
  "browser": "dist/browser.js",
@@ -29,7 +29,10 @@
29
29
  "http-status-codes": "^2.2.0",
30
30
  "joi": "^17.6.0",
31
31
  "jstify": "^0.14.0",
32
- "pino": "^8.5.0"
32
+ "pino": "^8.5.0",
33
+ "prettier": "^2.7.1",
34
+ "serialize-anything": "^1.2.3",
35
+ "uuid": "^9.0.0"
33
36
  },
34
37
  "devDependencies": {
35
38
  "prettier": "^2.7.1",
package/src/models.js CHANGED
@@ -4,6 +4,8 @@
4
4
  * @returns
5
5
  */
6
6
  const processModels = (nodegen) => {
7
+ const processedModels = {...nodegen}
8
+ // console.log('MODELS TO PROCESS: ', processedModels)
7
9
  switch (nodegen.type) {
8
10
  case "binary":
9
11
  case "uint8array":
@@ -15,11 +17,12 @@ const processModels = (nodegen) => {
15
17
  js: Buffer.from(nodegen.binary.js, "base64"),
16
18
  data: Buffer.from(nodegen.binary.data, "base64"),
17
19
  };
18
-
19
- nodegen.binary = model;
20
+ processedModels.binary = model
21
+ // nodegen.binary = model;
20
22
  } else {
21
23
  const model = Buffer.from(nodegen.binary, "base64");
22
- nodegen.binary = model;
24
+ processedModels.binary = model
25
+ // nodegen.binary = model;
23
26
  }
24
27
  break;
25
28
  case "function":
@@ -27,20 +30,23 @@ const processModels = (nodegen) => {
27
30
 
28
31
  if (func.constructor.name === "AsyncFunction") {
29
32
  (async () => {
30
- nodegen.binary = await func();
33
+ processedModels.binary = await func();
34
+ // nodegen.binary = await func();
31
35
  const model = Buffer.from(nodegen.binary, "base64");
32
- nodegen.binary = model;
36
+ processedModels.binary = model;
37
+ // nodegen.binary = model;
33
38
  })();
34
39
  } else {
35
- nodegen.binary = func();
40
+ // nodegen.binary = func();
36
41
  const model = Buffer.from(nodegen.binary, "base64");
37
- nodegen.binary = model;
42
+ processedModels.binary = model;
43
+ // nodegen.binary = model;
38
44
  }
39
45
  default:
40
46
  break;
41
47
  }
42
48
 
43
- return nodegen;
49
+ return processedModels;
44
50
  };
45
51
 
46
52
  module.exports = processModels;
package/src/node.js CHANGED
@@ -1,10 +1,14 @@
1
1
  const utils = require("./helpers/utils.js");
2
2
  const WasmRunnerErrors = require("./error.js");
3
3
  const { WasmRunner } = require("@coherentglobal/wasm-runner");
4
- const logger = require("./logger");
4
+ const logger = require("./logger.js");
5
5
  const validate = require("./validate.js");
6
6
  const processModels = require("./models.js");
7
7
  const got = require("got");
8
+ const fs = require('fs');
9
+ const serializeObject = require('serialize-anything');
10
+ const path = require('path')
11
+ const { v4: uuidv4 } = require('uuid')
8
12
  const { object } = require("joi");
9
13
 
10
14
  let registry = [];
@@ -13,11 +17,21 @@ class Spark {
13
17
  /**
14
18
  * @param {object} config
15
19
  */
16
- constructor(config) {
20
+ constructor(config, option={}) {
21
+ this.externalUuid = config.externalUuid ? config.externalUuid : uuidv4()
17
22
  /**
18
23
  * @private
19
24
  */
20
- this.config = this.validateConfig(config);
25
+ if(option.serialize){
26
+ const toBase = Buffer.from(config, 'base64').toString('utf8')
27
+ const deserialize = serializeObject.deserialize(toBase)
28
+ const validate = this.validateConfig(deserialize)
29
+ this.config = validate
30
+ this.externalUuid = validate.externalUuid ? validate.externalUuid : uuidv4()
31
+ logger.info({message: "DESERIALIZE: ", value: this.externalUuid})
32
+ } else {
33
+ this.config = this.validateConfig(config)
34
+ }
21
35
  const {
22
36
  sparkEndpoint: { syntheticKey, bearerToken, authType, tenant, url },
23
37
  nodeGenModels,
@@ -50,6 +64,17 @@ class Spark {
50
64
  /**
51
65
  * @private
52
66
  */
67
+ this.fallbackEnabled = false;
68
+
69
+ /**
70
+ * @private
71
+ */
72
+ this.externalResolver = this._addExternalResolver()
73
+
74
+ /**
75
+ * @private
76
+ */
77
+ // this.storedConfig = this._storeConfig()
53
78
  this.priority = ["model", "onlineEndpoint"];
54
79
  }
55
80
 
@@ -241,7 +266,6 @@ class Spark {
241
266
  };
242
267
 
243
268
  let response;
244
-
245
269
  response = await lookup[this.priority[0]](input, versionID, this);
246
270
  if (response instanceof Error) {
247
271
  response = await lookup[this.priority[1]](input, versionID, this);
@@ -250,6 +274,45 @@ class Spark {
250
274
  return response;
251
275
  }
252
276
 
277
+ _addExternalResolver() {
278
+ const folder = path.join(__dirname, `resolver_temp`)
279
+ try {
280
+ fs.accessSync(folder)
281
+ } catch (err) {
282
+ fs.mkdirSync(folder)
283
+ }
284
+ const filePath = path.join(__dirname, `resolver_temp/resolver-${this.externalUuid}.js`)
285
+ if(fs.existsSync(filePath)) {
286
+ return require.resolve(filePath)
287
+ }
288
+ let template = fs.readFileSync(
289
+ require.resolve("./resolver/externalResolver.js"),
290
+ {
291
+ encoding: "utf8"
292
+ }
293
+ )
294
+ const data = serializeObject.serialize({...this.config, externalUuid: this.externalUuid})
295
+ template = template.replace("%%config_to_replace%%", new Buffer(data).toString('base64'))
296
+ fs.writeFileSync(filePath, template)
297
+ return require.resolve(filePath)
298
+ }
299
+
300
+ _getModelByMeta(folderName, serviceName) {
301
+ const model = this.model.find(
302
+ (m) =>
303
+ m?.metaData?.EngineInformation?.ProductName === folderName &&
304
+ m?.metaData?.EngineInformation?.ServiceName === serviceName
305
+ );
306
+ if (!model) throw new WasmRunnerErrors.MissingModelError(serviceName);
307
+ return model?.metaData?.VersionId || model?.versionId;
308
+ }
309
+
310
+ _storeConfig() {
311
+ fs.writeFileSync('config.json',JSON.stringify(this.config), () => console.err(err))
312
+ return require.resolve('config.json')
313
+ // return JSON.stringify(this.config)
314
+ }
315
+
253
316
  /**
254
317
  * Remove Model
255
318
  */
@@ -264,7 +327,7 @@ class Spark {
264
327
  TextMessage: `Execute uuid: ${model && model?.versionId}`,
265
328
  });
266
329
  if (!(registry instanceof WasmRunner)) {
267
- registry = new WasmRunner();
330
+ registry = new WasmRunner(undefined, ds.externalResolver, "");
268
331
  }
269
332
 
270
333
  if (!registry.isExist(versionID)) {
@@ -1,13 +1,8 @@
1
- const { StatusCodes } = require("http-status-codes");
2
- const { logger } = require("@coherentglobal/node-sdk");
3
- // const config = require("../config"); env vars
4
- const {
5
- handleDirectRequest,
6
- modelServiceValidation,
7
- getLatestVersionFromServiceMapTable,
8
- } = require("../logic/runnerLogic");
9
- const { getModelViaFolder } = require("../services/entityStore");
10
- const tenant = "%%tenant_to_replace%%";
1
+ // const tenant = "%%tenant_to_replace%%";
2
+ const Spark = require('../node')
3
+ const logger = require('../logger')
4
+
5
+ const instance = new Spark("%%config_to_replace%%", {serialize: true})
11
6
 
12
7
  const CALL_TYPE = {
13
8
  0: "SparkService",
@@ -47,72 +42,46 @@ const XcallResBuilder = {
47
42
  },
48
43
  };
49
44
 
45
+ const sparkServiceVersionOne = async (requestData, context) => {
46
+ // const modelLocation = config().modelLocation;
47
+ const headers = context.headers;
48
+ const folderName = requestData.folder_name;
49
+ const serviceName = requestData.service_name;
50
+ const upstreamVersionId = context.upstreamVersionId;
51
+ let requestBodyFromEngine
52
+ // logger.info({
53
+ // eventType: "SparkService",
54
+ // msg: `EXTERNALSDK:DISPATCH_TYPE.SPARK_SERVICE ${tenant}`,
55
+ // });
56
+ // logger.info({ eventType: "RequestData", msg: requestData });
57
+ try {
58
+ requestBodyFromEngine = JSON.parse(requestData.request_body);
59
+ } catch (err) {
60
+ // logger.error({
61
+ // eventType: "SparkService",
62
+ // msg: `WASMSERVER:DISPATCH_TYPE.SPARK_SERVICE ERROR: Request body is malform JSON ${requestData.request_body}`,
63
+ // });
64
+ // throw new error(`Downstream Request body is malform JSON ${requestData.request_body}`)
65
+ }
66
+ const options = {}
67
+ const modelId = instance._getModelByMeta(folderName, serviceName)
68
+ const results = await instance.execute(requestBodyFromEngine, modelId)
69
+ // console.log('RES: ', results)
70
+ const response = XcallResBuilder.Json(
71
+ CALL_TYPE[0],
72
+ serviceName,
73
+ // StatusCodes.ACCEPTED,
74
+ 202,
75
+ "",
76
+ 0,
77
+ results
78
+ );
79
+ return response;
80
+ }
81
+
50
82
  module.exports = {
51
83
  sparkService: async (requestData, context) => {
52
- const modelLocation = config().modelLocation;
53
- const headers = context.headers;
54
- const folderName = requestData.folder_name;
55
- const serviceName = requestData.service_name;
56
-
57
- logger.info({
58
- eventType: "SparkService",
59
- msg: `WASMSERVER:DISPATCH_TYPE.SPARK_SERVICE ${tenant}`,
60
- });
61
- logger.info({ eventType: "RequestData", msg: requestData });
62
- const requestBodyFromEngine = JSON.parse(requestData.request_body);
63
- const requestMetaFromEngine = requestBodyFromEngine.request_meta;
64
- const findAvailableLatestModelFromLocal =
65
- getLatestVersionFromServiceMapTable(
66
- context.servicemap,
67
- headers.tenant,
68
- decodeURI(folderName),
69
- decodeURI(serviceName)
70
- );
71
- requestMetaFromEngine.version_id = findAvailableLatestModelFromLocal;
72
- const serviceMap = modelServiceValidation(
73
- context.servicemap,
74
- headers.tenant,
75
- requestMetaFromEngine
76
- );
77
- // const modelVersion = modelLocation
78
- // ? // ? await resolveOffline(requestMetaFromEngine, headers.tenant, headers, serviceMap)
79
- // findAvailableLatestModelFromLocal
80
- // : await getModelViaFolder(folderName, serviceName, headers);
81
-
82
- const modelVersion = await getModelViaFolder(
83
- folderName,
84
- serviceName,
85
- headers
86
- );
87
- const params = {
88
- tenant: headers.tenant,
89
- };
90
- const body = {
91
- ...requestBodyFromEngine,
92
- request_meta: {
93
- ...requestBodyFromEngine.request_meta,
94
- version_id: modelVersion,
95
- call_purpose: "Spark - API Tester",
96
- source_system: "SPARK",
97
- correlation_id: "",
98
- requested_output: null,
99
- service_category: "",
100
- },
101
- };
102
- const payload = {
103
- body,
104
- headers,
105
- params,
106
- };
107
- const results = await handleDirectRequest(payload);
108
- const response = XcallResBuilder.Json(
109
- CALL_TYPE[0],
110
- serviceName,
111
- StatusCodes.ACCEPTED,
112
- "",
113
- 0,
114
- results
115
- );
116
- return response;
117
- },
118
- };
84
+ const results = await sparkServiceVersionOne(requestData, context)
85
+ return results
86
+ }
87
+ };
@@ -3,9 +3,9 @@ const cuid = require("cuid");
3
3
  const fs = require("fs");
4
4
  const got = require("got");
5
5
  const path = require("path");
6
- const { logger } = require("@coherentglobal/node-sdk");
6
+ const { logger } = require("../logger.js");
7
7
  const { EntityStoreError } = require("../error");
8
- const config = require("../config");
8
+ // const config = require("../config");
9
9
 
10
10
  const request = got.extend({
11
11
  throwHttpErrors: false, // allows us to throw our own error based off got response
package/src/validate.js CHANGED
@@ -39,6 +39,7 @@ const rules = Joi.object({
39
39
  })
40
40
  )
41
41
  .required(),
42
+ externalUuid: Joi.string().allow()
42
43
  // xParameters: Joi.array().items(),
43
44
  // xCallCallback: Joi.func()
44
45
  }).required();