@fintekkers/ledger-models 0.1.61 → 0.1.63

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 (102) hide show
  1. package/.env +3 -0
  2. package/node/fintekkers/models/position/field_pb.d.ts +1 -0
  3. package/node/fintekkers/models/position/field_pb.js +1 -0
  4. package/node/fintekkers/models/security/bond/auction_type_grpc_pb.js +1 -0
  5. package/node/fintekkers/models/security/bond/auction_type_pb.d.ts +12 -0
  6. package/node/fintekkers/models/security/bond/auction_type_pb.js +33 -0
  7. package/node/fintekkers/models/security/bond/issuance_grpc_pb.js +1 -0
  8. package/node/fintekkers/models/security/bond/issuance_pb.d.ts +85 -0
  9. package/node/fintekkers/models/security/bond/issuance_pb.js +652 -0
  10. package/node/fintekkers/models/security/security_pb.d.ts +6 -0
  11. package/node/fintekkers/models/security/security_pb.js +64 -2
  12. package/node/fintekkers/requests/transaction/query_transaction_request_pb.d.ts +3 -0
  13. package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +31 -1
  14. package/node/fintekkers/requests/transaction/query_transaction_response_pb.d.ts +7 -0
  15. package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +54 -1
  16. package/node/wrappers/models/portfolio/portfolio.js +41 -0
  17. package/node/wrappers/models/portfolio/portfolio.js.map +1 -0
  18. package/node/wrappers/models/portfolio/portfolio.ts +49 -0
  19. package/node/wrappers/models/position/position.js +14 -9
  20. package/node/wrappers/models/position/position.js.map +1 -1
  21. package/node/wrappers/models/position/position.test.js +43 -0
  22. package/node/wrappers/models/position/position.test.js.map +1 -0
  23. package/node/wrappers/models/position/position.test.ts +70 -0
  24. package/node/wrappers/models/position/position.ts +17 -10
  25. package/node/wrappers/models/position/positionfilter.js +35 -0
  26. package/node/wrappers/models/position/positionfilter.js.map +1 -0
  27. package/node/wrappers/models/position/positionfilter.ts +38 -0
  28. package/node/wrappers/models/security/security.test.js +33 -0
  29. package/node/wrappers/models/security/security.test.js.map +1 -0
  30. package/node/wrappers/models/security/security.test.ts +41 -0
  31. package/node/wrappers/models/transaction/transaction.js +6 -5
  32. package/node/wrappers/models/transaction/transaction.js.map +1 -1
  33. package/node/wrappers/models/transaction/transaction.test.js.map +1 -1
  34. package/node/wrappers/models/transaction/transaction.test.ts +1 -6
  35. package/node/wrappers/models/transaction/transaction.ts +31 -31
  36. package/node/wrappers/models/transaction/transaction_type.js +0 -1
  37. package/node/wrappers/models/transaction/transaction_type.js.map +1 -1
  38. package/node/wrappers/models/transaction/transaction_type.ts +1 -1
  39. package/node/wrappers/models/utils/datetime.js +9 -0
  40. package/node/wrappers/models/utils/datetime.js.map +1 -1
  41. package/node/wrappers/models/utils/datetime.ts +16 -4
  42. package/node/wrappers/models/utils/requestcontext.js +55 -0
  43. package/node/wrappers/models/utils/requestcontext.js.map +1 -0
  44. package/node/wrappers/models/utils/requestcontext.ts +44 -0
  45. package/node/wrappers/models/utils/requestcontext_d.js +1 -0
  46. package/node/wrappers/models/utils/requestcontext_d.js.map +1 -0
  47. package/node/wrappers/models/utils/requestcontext_d.ts +7 -0
  48. package/node/wrappers/models/utils/serialization.js +14 -4
  49. package/node/wrappers/models/utils/serialization.js.map +1 -1
  50. package/node/wrappers/models/utils/serialization.test.js +8 -9
  51. package/node/wrappers/models/utils/serialization.test.js.map +1 -1
  52. package/node/wrappers/models/utils/serialization.test.ts +8 -10
  53. package/node/wrappers/models/utils/serialization.ts +46 -38
  54. package/node/wrappers/models/utils/serialization.util.js +108 -0
  55. package/node/wrappers/models/utils/serialization.util.js.map +1 -0
  56. package/node/wrappers/models/utils/serialization.util.test.js +36 -0
  57. package/node/wrappers/models/utils/serialization.util.test.js.map +1 -0
  58. package/node/wrappers/models/utils/serialization.util.test.ts +47 -0
  59. package/node/wrappers/models/utils/serialization.util.ts +121 -0
  60. package/node/wrappers/services/portfolio-service/PortfolioService.js +8 -16
  61. package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
  62. package/node/wrappers/services/portfolio-service/PortfolioService.ts +14 -24
  63. package/node/wrappers/services/portfolio-service/portfolio.test.js +30 -34
  64. package/node/wrappers/services/portfolio-service/portfolio.test.js.map +1 -1
  65. package/node/wrappers/services/portfolio-service/portfolio.test.ts +9 -13
  66. package/node/wrappers/services/position-service/PositionService.js +4 -3
  67. package/node/wrappers/services/position-service/PositionService.js.map +1 -1
  68. package/node/wrappers/services/position-service/PositionService.ts +4 -19
  69. package/node/wrappers/services/position-service/position.test.js +24 -9
  70. package/node/wrappers/services/position-service/position.test.js.map +1 -1
  71. package/node/wrappers/services/position-service/position.test.ts +57 -51
  72. package/node/wrappers/services/security-service/SecurityService.js +16 -15
  73. package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
  74. package/node/wrappers/services/security-service/SecurityService.ts +15 -18
  75. package/node/wrappers/services/security-service/security.maturityLadder.test.js +59 -0
  76. package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -0
  77. package/node/wrappers/services/security-service/security.maturityLadder.test.ts +39 -0
  78. package/node/wrappers/services/security-service/security.test.js +19 -7
  79. package/node/wrappers/services/security-service/security.test.js.map +1 -1
  80. package/node/wrappers/services/security-service/security.test.ts +11 -7
  81. package/node/wrappers/services/transaction-service/TransactionService.js +34 -47
  82. package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
  83. package/node/wrappers/services/transaction-service/TransactionService.ts +16 -23
  84. package/node/wrappers/services/transaction-service/transaction.test.js +45 -12
  85. package/node/wrappers/services/transaction-service/transaction.test.js.map +1 -1
  86. package/node/wrappers/services/transaction-service/transaction.test.ts +48 -21
  87. package/package.json +2 -1
  88. package/web/fintekkers/models/position/field_pb.d.ts +1 -0
  89. package/web/fintekkers/models/position/field_pb.js +1 -0
  90. package/web/fintekkers/models/security/bond/auction_type_pb.d.ts +8 -0
  91. package/web/fintekkers/models/security/bond/auction_type_pb.js +27 -0
  92. package/web/fintekkers/models/security/bond/issuance_pb.d.ts +82 -0
  93. package/web/fintekkers/models/security/bond/issuance_pb.js +646 -0
  94. package/web/fintekkers/models/security/security_pb.d.ts +7 -0
  95. package/web/fintekkers/models/security/security_pb.js +64 -2
  96. package/web/fintekkers/requests/transaction/query_transaction_request_pb.d.ts +4 -0
  97. package/web/fintekkers/requests/transaction/query_transaction_request_pb.js +31 -1
  98. package/web/fintekkers/requests/transaction/query_transaction_response_pb.d.ts +7 -0
  99. package/web/fintekkers/requests/transaction/query_transaction_response_pb.js +54 -1
  100. package/node/wrappers/models/utils/util.js +0 -28
  101. package/node/wrappers/models/utils/util.js.map +0 -1
  102. package/node/wrappers/models/utils/util.ts +0 -28
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ // Model Utils
40
+ var field_pb_1 = require("../../../fintekkers/models/position/field_pb");
41
+ var SecurityService_1 = require("./SecurityService");
42
+ var positionfilter_1 = require("../../models/position/positionfilter");
43
+ test('test the api.fintekkers.org security service by creating a maturity ladder for the US government', function () { return __awaiter(void 0, void 0, void 0, function () {
44
+ var securityService, positionFilter, securities;
45
+ return __generator(this, function (_a) {
46
+ switch (_a.label) {
47
+ case 0:
48
+ securityService = new SecurityService_1.SecurityService();
49
+ positionFilter = new positionfilter_1.PositionFilter();
50
+ positionFilter.addFilter(field_pb_1.FieldProto.SECURITY_ISSUER_NAME, "US Government");
51
+ return [4 /*yield*/, securityService.searchSecurityAsOfNow(positionFilter)];
52
+ case 1:
53
+ securities = _a.sent();
54
+ console.log(securities.length);
55
+ return [2 /*return*/];
56
+ }
57
+ });
58
+ }); }, 30000);
59
+ //# sourceMappingURL=security.maturityLadder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.maturityLadder.test.js","sourceRoot":"","sources":["security.maturityLadder.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,cAAc;AACd,yEAA0E;AAM1E,qDAAoD;AACpD,uEAAsE;AAEtE,IAAI,CAAC,kGAAkG,EAAE;;;;;gBAG/F,eAAe,GAAG,IAAI,iCAAe,EAAE,CAAC;gBAExC,cAAc,GAAG,IAAI,+BAAc,EAAE,CAAC;gBAC5C,cAAc,CAAC,SAAS,CAAC,qBAAU,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;gBACxD,qBAAM,eAAe,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAA;;gBAAxE,UAAU,GAAG,SAA2D;gBAG9E,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;;;;KASlC,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ // Models
2
+ import { SecurityProto } from '../../../fintekkers/models/security/security_pb';
3
+ import { CouponFrequencyProto } from '../../../fintekkers/models/security/coupon_frequency_pb';
4
+ import { DecimalValueProto } from '../../../fintekkers/models/util/decimal_value_pb';
5
+ import { CouponTypeProto } from '../../../fintekkers/models/security/coupon_type_pb';
6
+ import { SecurityTypeProto } from '../../../fintekkers/models/security/security_type_pb';
7
+ import { LocalDateProto } from '../../../fintekkers/models/util/local_date_pb';
8
+
9
+ // Model Utils
10
+ import { FieldProto } from '../../../fintekkers/models/position/field_pb';
11
+
12
+ import * as uuid from '../../models/utils/uuid';
13
+ import * as dt from '../../models/utils/datetime';
14
+
15
+ import { CreateSecurityResponseProto } from '../../../fintekkers/requests/security/create_security_response_pb';
16
+ import { SecurityService } from './SecurityService';
17
+ import { PositionFilter } from '../../models/position/positionfilter';
18
+
19
+ test('test the api.fintekkers.org security service by creating a maturity ladder for the US government', async () => {
20
+ //TODO: Get list of all securities from the US government, with a maturity data beyond today's date
21
+
22
+ const securityService = new SecurityService();
23
+
24
+ const positionFilter = new PositionFilter();
25
+ positionFilter.addFilter(FieldProto.SECURITY_ISSUER_NAME, "US Government");
26
+ const securities = await securityService.searchSecurityAsOfNow(positionFilter);
27
+
28
+
29
+ console.log(securities.length);
30
+ //TODO: Get oustanding amount of bond
31
+
32
+
33
+ //TODO: Map results into Map -> Date, Amount
34
+
35
+
36
+ //TODO: Loose end. Asset Class is a string. Maybe should be an 'extendible' enum
37
+ //TODO: Loose end. Security coupon rate, need to add validation logic so that coupon rate is a sensible number
38
+ }, 30000);
39
+
@@ -48,10 +48,19 @@ var field_pb_1 = require("../../../fintekkers/models/position/field_pb");
48
48
  var uuid = require("../../models/utils/uuid");
49
49
  var dt = require("../../models/utils/datetime");
50
50
  var SecurityService_1 = require("./SecurityService");
51
- test('test creating a security against the api.fintekkers.org portfolio service', function () {
52
- var isTrue = testSecurity();
53
- expect(isTrue).resolves.toBe(true);
54
- }, 30000);
51
+ var positionfilter_1 = require("../../models/position/positionfilter");
52
+ test('test creating a security against the api.fintekkers.org security service', function () { return __awaiter(void 0, void 0, void 0, function () {
53
+ var isTrue;
54
+ return __generator(this, function (_a) {
55
+ switch (_a.label) {
56
+ case 0: return [4 /*yield*/, testSecurity()];
57
+ case 1:
58
+ isTrue = _a.sent();
59
+ expect(isTrue).toBe(true);
60
+ return [2 /*return*/];
61
+ }
62
+ });
63
+ }); }, 30000);
55
64
  function testSecurity() {
56
65
  return __awaiter(this, void 0, void 0, function () {
57
66
  var id_proto, now, securityService, usd_security, security, faceValue, couponRate, issueDate, maturityDate, validationSummary, createSecurityResponse, searchResults;
@@ -62,7 +71,7 @@ function testSecurity() {
62
71
  now = dt.ZonedDateTime.now();
63
72
  securityService = new SecurityService_1.SecurityService();
64
73
  return [4 /*yield*/, securityService
65
- .searchSecurity(now.to_date_proto(), field_pb_1.FieldProto.ASSET_CLASS, 'Cash')
74
+ .searchSecurity(now.toProto(), new positionfilter_1.PositionFilter().addFilter(field_pb_1.FieldProto.ASSET_CLASS, 'Cash'))
66
75
  .then(function (securities) {
67
76
  return securities[0];
68
77
  })];
@@ -73,7 +82,7 @@ function testSecurity() {
73
82
  security.setVersion('0.0.1');
74
83
  security.setUuid(id_proto);
75
84
  security.setSettlementCurrency(usd_security.proto);
76
- security.setAsOf(now.to_date_proto());
85
+ security.setAsOf(now.toProto());
77
86
  security.setAssetClass('FixedIncome');
78
87
  security.setCouponFrequency(coupon_frequency_pb_1.CouponFrequencyProto.SEMIANNUALLY);
79
88
  security.setCouponType(coupon_type_pb_1.CouponTypeProto.FIXED);
@@ -100,12 +109,15 @@ function testSecurity() {
100
109
  return [4 /*yield*/, securityService.validateCreateSecurity(security)];
101
110
  case 2:
102
111
  validationSummary = _a.sent();
112
+ expect(validationSummary.getErrorsList().length).toBe(0);
103
113
  return [4 /*yield*/, securityService.createSecurity(security)];
104
114
  case 3:
105
115
  createSecurityResponse = _a.sent();
106
- return [4 /*yield*/, securityService.searchSecurity(now.to_date_proto(), field_pb_1.FieldProto.ASSET_CLASS, 'Fixed Income')];
116
+ expect(createSecurityResponse.getSecurityResponse()).toBeTruthy();
117
+ return [4 /*yield*/, securityService.searchSecurity(now.toProto(), new positionfilter_1.PositionFilter().addFilter(field_pb_1.FieldProto.ASSET_CLASS, 'Fixed Income'))];
107
118
  case 4:
108
119
  searchResults = _a.sent();
120
+ expect(searchResults.length).toBeGreaterThan(0);
109
121
  return [2 /*return*/, true];
110
122
  }
111
123
  });
@@ -1 +1 @@
1
- {"version":3,"file":"security.test.js","sourceRoot":"","sources":["security.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.test.js","sourceRoot":"","sources":["security.test.ts"],"names":[],"mappings":"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"}
@@ -14,10 +14,11 @@ import * as dt from '../../models/utils/datetime';
14
14
 
15
15
  import { CreateSecurityResponseProto } from '../../../fintekkers/requests/security/create_security_response_pb';
16
16
  import { SecurityService } from './SecurityService';
17
+ import { PositionFilter } from '../../models/position/positionfilter';
17
18
 
18
- test('test creating a security against the api.fintekkers.org portfolio service', () => {
19
- const isTrue = testSecurity();
20
- expect(isTrue).resolves.toBe(true);
19
+ test('test creating a security against the api.fintekkers.org security service', async () => {
20
+ const isTrue = await testSecurity();
21
+ expect(isTrue).toBe(true);
21
22
  }, 30000);
22
23
 
23
24
  async function testSecurity(): Promise<boolean> {
@@ -27,7 +28,7 @@ async function testSecurity(): Promise<boolean> {
27
28
  const securityService = new SecurityService();
28
29
 
29
30
  let usd_security = await securityService
30
- .searchSecurity(now.to_date_proto(), FieldProto.ASSET_CLASS, 'Cash')
31
+ .searchSecurity(now.toProto(), new PositionFilter().addFilter(FieldProto.ASSET_CLASS, 'Cash'))
31
32
  .then((securities) => {
32
33
  return securities[0];
33
34
  });
@@ -37,7 +38,7 @@ async function testSecurity(): Promise<boolean> {
37
38
  security.setVersion('0.0.1');
38
39
  security.setUuid(id_proto);
39
40
  security.setSettlementCurrency(usd_security.proto);
40
- security.setAsOf(now.to_date_proto());
41
+ security.setAsOf(now.toProto());
41
42
  security.setAssetClass('FixedIncome');
42
43
  security.setCouponFrequency(CouponFrequencyProto.SEMIANNUALLY);
43
44
  security.setCouponType(CouponTypeProto.FIXED);
@@ -68,10 +69,13 @@ async function testSecurity(): Promise<boolean> {
68
69
  security.setDescription('Dummy US Treasury 10Y Bond');
69
70
 
70
71
  var validationSummary = await securityService.validateCreateSecurity(security);
72
+ expect(validationSummary.getErrorsList().length).toBe(0);
71
73
 
72
- var createSecurityResponse:CreateSecurityResponseProto = await securityService.createSecurity(security);
74
+ var createSecurityResponse: CreateSecurityResponseProto = await securityService.createSecurity(security);
75
+ expect(createSecurityResponse.getSecurityResponse()).toBeTruthy();
73
76
 
74
- var searchResults = await securityService.searchSecurity(now.to_date_proto(), FieldProto.ASSET_CLASS, 'Fixed Income');
77
+ var searchResults = await securityService.searchSecurity(now.toProto(), new PositionFilter().addFilter(FieldProto.ASSET_CLASS, 'Fixed Income'));
78
+ expect(searchResults.length).toBeGreaterThan(0);
75
79
 
76
80
  return true;
77
81
  }
@@ -37,21 +37,18 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.TransactionService = void 0;
40
- var grpc = require("@grpc/grpc-js");
41
40
  var util_1 = require("util");
42
41
  // Models
43
42
  var transaction_1 = require("../../models/transaction/transaction");
44
- var util_2 = require("../../models/utils/util");
45
43
  // Model Utils
46
- var position_filter_pb_1 = require("../../../fintekkers/models/position/position_filter_pb");
47
44
  // Requests & Services
48
45
  var transaction_service_grpc_pb_1 = require("../../../fintekkers/services/transaction-service/transaction_service_grpc_pb");
49
46
  var create_transaction_request_pb_1 = require("../../../fintekkers/requests/transaction/create_transaction_request_pb");
50
47
  var query_transaction_request_pb_1 = require("../../../fintekkers/requests/transaction/query_transaction_request_pb");
48
+ var requestcontext_1 = require("../../models/utils/requestcontext");
51
49
  var TransactionService = /** @class */ (function () {
52
50
  function TransactionService() {
53
- this.client = new transaction_service_grpc_pb_1.TransactionClient('api.fintekkers.org:8082', grpc.credentials.createSsl());
54
- // this.client = new TransactionClient('localhost:8082', grpc.credentials.createInsecure());
51
+ this.client = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.apiURL, requestcontext_1.default.apiCredentials);
55
52
  }
56
53
  TransactionService.prototype.validateCreateTransaction = function (transaction) {
57
54
  return __awaiter(this, void 0, void 0, function () {
@@ -91,51 +88,41 @@ var TransactionService = /** @class */ (function () {
91
88
  });
92
89
  });
93
90
  };
94
- TransactionService.prototype.searchTransaction = function (asOf, fieldProto, fieldValue) {
95
- return __awaiter(this, void 0, void 0, function () {
96
- function processStreamSynchronously() {
97
- return __awaiter(this, void 0, void 0, function () {
98
- var stream2;
99
- return __generator(this, function (_a) {
100
- stream2 = tmpClient.search(searchRequest);
101
- return [2 /*return*/, new Promise(function (resolve, reject) {
102
- stream2.on('data', function (response) {
103
- response.getTransactionResponseList().forEach(function (transaction) {
104
- listTransactions.push(new transaction_1.default(transaction));
105
- });
106
- });
107
- stream2.on('end', function () {
108
- resolve(listTransactions);
109
- });
110
- stream2.on('error', function (err) {
111
- console.error('Error in the stream:', err);
112
- reject(err);
91
+ TransactionService.prototype.searchTransaction = function (asOf, positionFilter, maxResults) {
92
+ if (maxResults === void 0) { maxResults = 100; }
93
+ var searchRequest = new query_transaction_request_pb_1.QueryTransactionRequestProto();
94
+ searchRequest.setObjectClass('SecurityRequest');
95
+ searchRequest.setVersion('0.0.1');
96
+ searchRequest.setAsOf(asOf);
97
+ searchRequest.setSearchTransactionInput(positionFilter.toProto());
98
+ searchRequest.setLimit(maxResults);
99
+ var tmpClient = this.client;
100
+ function processStreamSynchronously() {
101
+ return __awaiter(this, void 0, void 0, function () {
102
+ var stream2, results;
103
+ return __generator(this, function (_a) {
104
+ stream2 = tmpClient.search(searchRequest);
105
+ results = [];
106
+ return [2 /*return*/, new Promise(function (resolve, reject) {
107
+ stream2.on('data', function (response) {
108
+ response.getTransactionResponseList().forEach(function (transaction) {
109
+ var txn = new transaction_1.default(transaction);
110
+ results.push(txn);
113
111
  });
114
- })];
115
- });
112
+ });
113
+ stream2.on('end', function () {
114
+ console.log("Stream ended with ", results.length);
115
+ resolve(results);
116
+ });
117
+ stream2.on('error', function (err) {
118
+ console.error('Error in the stream:', err);
119
+ reject(err);
120
+ });
121
+ })];
116
122
  });
117
- }
118
- var searchRequest, positionFilter, fieldMapEntry, tmpClient, listTransactions;
119
- return __generator(this, function (_a) {
120
- switch (_a.label) {
121
- case 0:
122
- searchRequest = new query_transaction_request_pb_1.QueryTransactionRequestProto();
123
- searchRequest.setObjectClass('SecurityRequest');
124
- searchRequest.setVersion('0.0.1');
125
- searchRequest.setAsOf(asOf);
126
- positionFilter = new position_filter_pb_1.PositionFilterProto();
127
- positionFilter.setObjectClass('PositionFilter');
128
- positionFilter.setVersion('0.0.1');
129
- fieldMapEntry = (0, util_2.createFieldMapEntry)(fieldProto, fieldValue);
130
- positionFilter.setFiltersList([fieldMapEntry]);
131
- searchRequest.setSearchTransactionInput(positionFilter);
132
- tmpClient = this.client;
133
- listTransactions = [];
134
- return [4 /*yield*/, processStreamSynchronously()];
135
- case 1: return [2 /*return*/, _a.sent()];
136
- }
137
123
  });
138
- });
124
+ }
125
+ return processStreamSynchronously();
139
126
  };
140
127
  return TransactionService;
141
128
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionService.js","sourceRoot":"","sources":["TransactionService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TransactionService.js","sourceRoot":"","sources":["TransactionService.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,12 @@
1
- import * as grpc from '@grpc/grpc-js';
2
1
  import { promisify } from 'util';
3
2
 
4
3
  // Models
5
4
  import Transaction from '../../models/transaction/transaction';
6
- import { createFieldMapEntry } from '../../models/utils/util';
5
+ import { PositionFilter } from '../../models/position/positionfilter';
7
6
  import { LocalTimestampProto } from '../../../fintekkers/models/util/local_timestamp_pb';
8
7
  import { SummaryProto } from '../../../fintekkers/requests/util/errors/summary_pb';
9
8
 
10
9
  // Model Utils
11
- import { PositionFilterProto } from '../../../fintekkers/models/position/position_filter_pb';
12
- import { FieldProto } from '../../../fintekkers/models/position/field_pb';
13
10
 
14
11
  // Requests & Services
15
12
  import { TransactionClient } from '../../../fintekkers/services/transaction-service/transaction_service_grpc_pb';
@@ -17,14 +14,14 @@ import { CreateTransactionRequestProto } from '../../../fintekkers/requests/tran
17
14
  import { CreateTransactionResponseProto } from '../../../fintekkers/requests/transaction/create_transaction_response_pb';
18
15
  import { QueryTransactionRequestProto } from '../../../fintekkers/requests/transaction/query_transaction_request_pb';
19
16
  import { QueryTransactionResponseProto } from '../../../fintekkers/requests/transaction/query_transaction_response_pb';
17
+ import EnvConfig from '../../models/utils/requestcontext';
20
18
 
21
19
 
22
20
  class TransactionService {
23
21
  private client: TransactionClient;
24
22
 
25
23
  constructor() {
26
- this.client = new TransactionClient('api.fintekkers.org:8082', grpc.credentials.createSsl());
27
- // this.client = new TransactionClient('localhost:8082', grpc.credentials.createInsecure());
24
+ this.client = new TransactionClient(EnvConfig.apiURL, EnvConfig.apiCredentials);
28
25
  }
29
26
 
30
27
  async validateCreateTransaction(transaction: Transaction): Promise<SummaryProto> {
@@ -49,47 +46,43 @@ class TransactionService {
49
46
  return response;
50
47
  }
51
48
 
52
- async searchTransaction(asOf: LocalTimestampProto, fieldProto: FieldProto, fieldValue: string): Promise<Transaction[]> {
49
+ searchTransaction(asOf: LocalTimestampProto, positionFilter: PositionFilter, maxResults: number = 100):
50
+ Promise<Transaction[]> {
53
51
  const searchRequest = new QueryTransactionRequestProto();
54
52
  searchRequest.setObjectClass('SecurityRequest');
55
53
  searchRequest.setVersion('0.0.1');
56
54
  searchRequest.setAsOf(asOf);
57
55
 
58
- const positionFilter = new PositionFilterProto();
59
- positionFilter.setObjectClass('PositionFilter');
60
- positionFilter.setVersion('0.0.1');
61
-
62
- const fieldMapEntry = createFieldMapEntry(fieldProto, fieldValue);
63
- positionFilter.setFiltersList([fieldMapEntry]);
64
-
65
- searchRequest.setSearchTransactionInput(positionFilter);
56
+ searchRequest.setSearchTransactionInput(positionFilter.toProto());
57
+ searchRequest.setLimit(maxResults);
66
58
 
67
59
  const tmpClient = this.client;
68
60
 
69
- const listTransactions: Transaction[] = [];
70
-
71
61
  async function processStreamSynchronously(): Promise<Transaction[]> {
72
62
  const stream2 = tmpClient.search(searchRequest);
63
+ var results: Transaction[] = [];
73
64
 
74
65
  return new Promise<Transaction[]>((resolve, reject) => {
75
- stream2.on('data', (response:QueryTransactionResponseProto) => {
66
+ stream2.on('data', (response: QueryTransactionResponseProto) => {
76
67
  response.getTransactionResponseList().forEach((transaction) => {
77
- listTransactions.push(new Transaction(transaction));
78
- });
68
+ const txn: Transaction = new Transaction(transaction);
69
+ results.push(txn);
70
+ })
79
71
  });
80
72
 
81
73
  stream2.on('end', () => {
82
- resolve(listTransactions);
74
+ console.log("Stream ended with ", results.length);
75
+ resolve(results);
83
76
  });
84
77
 
85
78
  stream2.on('error', (err) => {
86
79
  console.error('Error in the stream:', err);
87
- reject(err);
80
+ reject(err);
88
81
  });
89
82
  });
90
83
  }
91
84
 
92
- return await processStreamSynchronously();
85
+ return processStreamSynchronously();
93
86
  }
94
87
  }
95
88
 
@@ -50,13 +50,23 @@ var price_pb_1 = require("../../../fintekkers/models/price/price_pb");
50
50
  var PortfolioService_1 = require("../portfolio-service/PortfolioService");
51
51
  var TransactionService_1 = require("./TransactionService");
52
52
  var transaction_1 = require("../../models/transaction/transaction");
53
- test('test creating a transaction against the api.fintekkers.org portfolio service', function () {
54
- var isTrue = testTransaction();
55
- expect(isTrue).resolves.toBe(true);
56
- }, 30000);
53
+ var assert = require("assert");
54
+ var positionfilter_1 = require("../../models/position/positionfilter");
55
+ test('test creating a transaction against the portfolio service', function () { return __awaiter(void 0, void 0, void 0, function () {
56
+ var isTrue;
57
+ return __generator(this, function (_a) {
58
+ switch (_a.label) {
59
+ case 0: return [4 /*yield*/, testTransaction()];
60
+ case 1:
61
+ isTrue = _a.sent();
62
+ expect(isTrue).toBe(true);
63
+ return [2 /*return*/];
64
+ }
65
+ });
66
+ }); }, 30000);
57
67
  function testTransaction() {
58
68
  return __awaiter(this, void 0, void 0, function () {
59
- var id_proto, now, today, securityService, portfolioService, transactionService, fixedIncomeSecurities, security, portfolios, portfolio, transaction, createTransactionResponse, searchResults;
69
+ var id_proto, now, today, securityService, portfolioService, transactionService, positionFilter, fixedIncomeSecurities, security, portfolios, portfolio, transaction, createTransactionResponse, transactionResponse, transactionID, transactions;
60
70
  return __generator(this, function (_a) {
61
71
  switch (_a.label) {
62
72
  case 0:
@@ -66,17 +76,23 @@ function testTransaction() {
66
76
  securityService = new SecurityService_1.SecurityService();
67
77
  portfolioService = new PortfolioService_1.PortfolioService();
68
78
  transactionService = new TransactionService_1.TransactionService();
79
+ positionFilter = new positionfilter_1.PositionFilter();
80
+ positionFilter.addFilter(field_pb_1.FieldProto.ASSET_CLASS, 'Fixed Income');
81
+ console.time("searchSecurity");
69
82
  return [4 /*yield*/, securityService
70
- .searchSecurity(now.to_date_proto(), field_pb_1.FieldProto.ASSET_CLASS, 'Fixed Income')
83
+ .searchSecurity(now.toProto(), positionFilter)
71
84
  .then(function (fixedIncomeSecurities) {
72
85
  return fixedIncomeSecurities;
73
86
  })];
74
87
  case 1:
75
88
  fixedIncomeSecurities = _a.sent();
89
+ console.timeEnd("searchSecurity");
76
90
  security = fixedIncomeSecurities[0];
77
- return [4 /*yield*/, portfolioService.searchPortfolio(now.to_date_proto(), field_pb_1.FieldProto.PORTFOLIO_NAME, 'TEST PORTFOLIO')];
91
+ console.time("searchPortfolio");
92
+ return [4 /*yield*/, portfolioService.searchPortfolio(now.toProto(), new positionfilter_1.PositionFilter().addFilter(field_pb_1.FieldProto.PORTFOLIO_NAME, 'TEST PORTFOLIO'))];
78
93
  case 2:
79
94
  portfolios = _a.sent();
95
+ console.timeEnd("searchPortfolio");
80
96
  if (portfolios === undefined) {
81
97
  throw new Error('No portfolios found');
82
98
  }
@@ -88,26 +104,43 @@ function testTransaction() {
88
104
  transaction.setObjectClass('Transaction');
89
105
  transaction.setVersion('0.0.1');
90
106
  transaction.setUuid(uuid.UUID.random().toUUIDProto());
91
- transaction.setAsOf(now.to_date_proto());
107
+ transaction.setAsOf(now.toProto());
92
108
  transaction.setTradeDate(today);
93
109
  transaction.setSettlementDate(today); //Same day settlement
94
110
  transaction.setTransactionType(transaction_type_pb_1.TransactionTypeProto.BUY);
95
111
  transaction.setPrice(new price_pb_1.PriceProto()
96
112
  .setObjectClass('Price')
97
- .setAsOf(now.to_date_proto())
113
+ .setAsOf(now.toProto())
98
114
  .setVersion('0.0.1')
99
115
  .setSecurity(security.proto)
100
116
  .setUuid(uuid.UUID.random().toUUIDProto())
101
117
  .setPrice(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('100.00')));
102
118
  transaction.setQuantity(new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue('10000.00'));
103
- transaction.setPortfolio(portfolio);
119
+ transaction.setPortfolio(portfolio.proto);
104
120
  transaction.setSecurity(security.proto);
121
+ // var validationSummary = await transactionService.validateCreateTransaction(new Transaction(transaction));
122
+ // assert(validationSummary.getErrorsList().length == 0, "Validation errors found");
123
+ console.time("createTransaction");
105
124
  return [4 /*yield*/, transactionService.createTransaction(new transaction_1.default(transaction))];
106
125
  case 3:
107
126
  createTransactionResponse = _a.sent();
108
- return [4 /*yield*/, transactionService.searchTransaction(now.to_date_proto(), field_pb_1.FieldProto.ASSET_CLASS, 'Fixed Income')];
127
+ transactionResponse = createTransactionResponse.getTransactionResponse();
128
+ assert(transactionResponse, "No transaction response found");
129
+ console.timeEnd("createTransaction");
130
+ console.log("Searching transaction");
131
+ console.time("searchTransaction");
132
+ transactionID = uuid.UUID.fromU8Array(transactionResponse.getUuid().getRawUuid_asU8());
133
+ positionFilter.addFilter(field_pb_1.FieldProto.ID, transactionID);
134
+ return [4 /*yield*/, transactionService.searchTransaction(now.toProto(), positionFilter)];
109
135
  case 4:
110
- searchResults = _a.sent();
136
+ transactions = _a.sent();
137
+ console.timeEnd("searchTransaction");
138
+ if (transactions === undefined) {
139
+ console.log('No transactions found');
140
+ }
141
+ else {
142
+ console.log(transactions.length);
143
+ }
111
144
  return [2 /*return*/, true];
112
145
  }
113
146
  });
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.test.js","sourceRoot":"","sources":["transaction.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.test.js","sourceRoot":"","sources":["transaction.test.ts"],"names":[],"mappings":"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"}