@fintekkers/ledger-models 0.4.29 → 0.4.31
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/node/wrappers/models/position/position_matcher.d.ts +4 -2
- package/node/wrappers/models/position/position_matcher.js +5 -3
- package/node/wrappers/models/position/position_matcher.test.js +55 -5
- package/node/wrappers/models/position/position_matcher.test.ts +48 -1
- package/node/wrappers/models/position/position_matcher.ts +5 -3
- package/node/wrappers/models/utils/requestcontext.auth.test.js +21 -6
- package/node/wrappers/models/utils/requestcontext.auth.test.js.map +1 -1
- package/node/wrappers/models/utils/requestcontext.auth.test.ts +24 -6
- package/node/wrappers/models/utils/requestcontext.d.ts +18 -12
- package/node/wrappers/models/utils/requestcontext.js +28 -28
- package/node/wrappers/models/utils/requestcontext.js.map +1 -1
- package/node/wrappers/models/utils/requestcontext.test.js +15 -3
- package/node/wrappers/models/utils/requestcontext.test.js.map +1 -1
- package/node/wrappers/models/utils/requestcontext.test.ts +17 -3
- package/node/wrappers/models/utils/requestcontext.ts +31 -29
- package/node/wrappers/services/apikey.credentials.test.d.ts +1 -1
- package/node/wrappers/services/apikey.credentials.test.js +14 -12
- package/node/wrappers/services/apikey.credentials.test.js.map +1 -1
- package/node/wrappers/services/apikey.credentials.test.ts +15 -13
- package/node/wrappers/services/apikey.test.js +1 -1
- package/node/wrappers/services/apikey.test.js.map +1 -1
- package/node/wrappers/services/apikey.test.ts +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.d.ts +2 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.js +8 -4
- package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.ts +8 -4
- package/node/wrappers/services/position-service/PositionService.js +4 -3
- package/node/wrappers/services/position-service/PositionService.js.map +1 -1
- package/node/wrappers/services/position-service/PositionService.ts +4 -3
- package/node/wrappers/services/price-service/PriceService.js +4 -3
- package/node/wrappers/services/price-service/PriceService.js.map +1 -1
- package/node/wrappers/services/price-service/PriceService.ts +4 -3
- package/node/wrappers/services/security-service/SecurityService.js +4 -3
- package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
- package/node/wrappers/services/security-service/SecurityService.ts +4 -3
- package/node/wrappers/services/serviceaddress.clients.test.d.ts +9 -0
- package/node/wrappers/services/serviceaddress.clients.test.js +181 -0
- package/node/wrappers/services/serviceaddress.clients.test.js.map +1 -0
- package/node/wrappers/services/serviceaddress.clients.test.ts +176 -0
- package/node/wrappers/services/transaction-service/TransactionService.js +4 -3
- package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.ts +4 -3
- package/node/wrappers/util/link-resolver.d.ts +1 -1
- package/node/wrappers/util/link-resolver.js +10 -9
- package/node/wrappers/util/link-resolver.js.map +1 -1
- package/node/wrappers/util/link-resolver.ts +11 -10
- package/node/wrappers/util/serviceaddress.d.ts +47 -0
- package/node/wrappers/util/serviceaddress.js +132 -0
- package/node/wrappers/util/serviceaddress.js.map +1 -0
- package/node/wrappers/util/serviceaddress.test.d.ts +6 -0
- package/node/wrappers/util/serviceaddress.test.js +76 -0
- package/node/wrappers/util/serviceaddress.test.js.map +1 -0
- package/node/wrappers/util/serviceaddress.test.ts +83 -0
- package/node/wrappers/util/serviceaddress.ts +141 -0
- package/package.json +1 -1
|
@@ -16,6 +16,7 @@ import { CreatePriceResponseProto } from '../../../fintekkers/requests/price/cre
|
|
|
16
16
|
import { UUID } from '../../models/utils/uuid';
|
|
17
17
|
import * as dt from '../../models/utils/datetime';
|
|
18
18
|
import EnvConfig from '../../models/utils/requestcontext';
|
|
19
|
+
import { Service } from '../../util/serviceaddress';
|
|
19
20
|
import LinkResolver from '../../util/link-resolver';
|
|
20
21
|
import * as LinkCacheModule from '../../util/link-cache';
|
|
21
22
|
|
|
@@ -24,10 +25,10 @@ class PriceService {
|
|
|
24
25
|
|
|
25
26
|
constructor(apiKey?: string) {
|
|
26
27
|
if (apiKey) {
|
|
27
|
-
const { credentials, interceptors } = EnvConfig.getAuthenticatedClientOptions(apiKey);
|
|
28
|
-
this.client = new PriceClient(EnvConfig.
|
|
28
|
+
const { credentials, interceptors } = EnvConfig.getAuthenticatedClientOptions(apiKey, Service.PRICE);
|
|
29
|
+
this.client = new PriceClient(EnvConfig.urlFor(Service.PRICE), credentials, { interceptors });
|
|
29
30
|
} else {
|
|
30
|
-
this.client = new PriceClient(EnvConfig.
|
|
31
|
+
this.client = new PriceClient(EnvConfig.urlFor(Service.PRICE), EnvConfig.credentialsFor(Service.PRICE));
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -46,17 +46,18 @@ const security_service_grpc_pb_1 = require("../../../fintekkers/services/securit
|
|
|
46
46
|
const query_security_request_pb_1 = require("../../../fintekkers/requests/security/query_security_request_pb");
|
|
47
47
|
const create_security_request_pb_1 = require("../../../fintekkers/requests/security/create_security_request_pb");
|
|
48
48
|
const requestcontext_1 = __importDefault(require("../../models/utils/requestcontext"));
|
|
49
|
+
const serviceaddress_1 = require("../../util/serviceaddress");
|
|
49
50
|
const uuid_1 = require("../../models/utils/uuid");
|
|
50
51
|
const datetime_1 = require("../../models/utils/datetime");
|
|
51
52
|
const LinkCacheModule = __importStar(require("../../util/link-cache"));
|
|
52
53
|
class SecurityService {
|
|
53
54
|
constructor(apiKey) {
|
|
54
55
|
if (apiKey) {
|
|
55
|
-
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(apiKey);
|
|
56
|
-
this.client = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.
|
|
56
|
+
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(apiKey, serviceaddress_1.Service.SECURITY);
|
|
57
|
+
this.client = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.SECURITY), credentials, { interceptors });
|
|
57
58
|
}
|
|
58
59
|
else {
|
|
59
|
-
this.client = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.
|
|
60
|
+
this.client = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.SECURITY), requestcontext_1.default.credentialsFor(serviceaddress_1.Service.SECURITY));
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
validateCreateSecurity(security) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityService.js","sourceRoot":"","sources":["SecurityService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAiC;AAMjC,8EAAsD;AAItD,gEAAkD;AAClD,iEAAgF;AAChF,yEAAoE;AAEpE,sBAAsB;AACtB,qHAAwG;AACxG,+GAA4G;AAE5G,iHAA8G;AAG9G,uFAA0D;AAC1D,kDAA+C;AAC/C,0DAA4D;AAC5D,uEAAyD;AAEzD,MAAM,eAAe;IAGnB,YAAY,MAAe;QACzB,IAAI,MAAM,EAAE;YACV,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,wBAAS,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"SecurityService.js","sourceRoot":"","sources":["SecurityService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAiC;AAMjC,8EAAsD;AAItD,gEAAkD;AAClD,iEAAgF;AAChF,yEAAoE;AAEpE,sBAAsB;AACtB,qHAAwG;AACxG,+GAA4G;AAE5G,iHAA8G;AAG9G,uFAA0D;AAC1D,8DAAoD;AACpD,kDAA+C;AAC/C,0DAA4D;AAC5D,uEAAyD;AAEzD,MAAM,eAAe;IAGnB,YAAY,MAAe;QACzB,IAAI,MAAM,EAAE;YACV,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,wBAAS,CAAC,6BAA6B,CAAC,MAAM,EAAE,wBAAO,CAAC,QAAQ,CAAC,CAAC;YACxG,IAAI,CAAC,MAAM,GAAG,IAAI,yCAAc,CAAC,wBAAS,CAAC,MAAM,CAAC,wBAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;SACrG;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,yCAAc,CAAC,wBAAS,CAAC,MAAM,CAAC,wBAAO,CAAC,QAAQ,CAAC,EAAE,wBAAS,CAAC,cAAc,CAAC,wBAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;SAClH;IACH,CAAC;IAEK,sBAAsB,CAAC,QAAuB;;YAClD,qEAAqE;YACrE,qEAAqE;YACrE,uEAAuE;YACvE,mDAAmD;YACnD,IAAA,yCAA4B,EAAC,QAAQ,CAAC,CAAC;YACvC,+DAA+D;YAC/D,mDAAmD;YACnD,IAAA,6BAAY,EAAC,QAAQ,CAAC,CAAC;YAEvB,MAAM,aAAa,GAAG,IAAI,uDAA0B,EAAE,CAAC;YACvD,aAAa,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAEzC,MAAM,2BAA2B,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACpG,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,aAAa,CAAC,CAAC;YAClE,OAAO,QAAwB,CAAC;QAClC,CAAC;KAAA;IAEK,cAAc,CAAC,QAAuB;;YAC1C,8DAA8D;YAC9D,IAAA,yCAA4B,EAAC,QAAQ,CAAC,CAAC;YACvC,IAAA,6BAAY,EAAC,QAAQ,CAAC,CAAC;YAEvB,MAAM,aAAa,GAAG,IAAI,uDAA0B,EAAE,CAAC;YACvD,aAAa,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAEzC,MAAM,mBAAmB,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACpF,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,aAAa,CAAgC,CAAC;YACzF,qEAAqE;YACrE,yEAAyE;YACzE,0EAA0E;YAC1E,MAAM,SAAS,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YACjD,IAAI,SAAS,EAAE;gBACb,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtC,IAAI,SAAS,IAAI,SAAS,EAAE;oBAC1B,MAAM,OAAO,GAAG,WAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACzE,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,wBAAa,CAAC,SAAS,CAAC,CAAC,CAAC;iBAChF;aACF;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KAAA;IAEK,qBAAqB,CAAC,cAA8B;;YACxD,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;KAAA;IAEK,cAAc,CAAC,IAAyB,EAAE,cAA8B;;YAC5E,MAAM,aAAa,GAAG,IAAI,qDAAyB,EAAE,CAAC;YACtD,aAAa,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE5B,aAAa,CAAC,sBAAsB,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;YAE/D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;YAE9B,MAAM,cAAc,GAAe,EAAE,CAAC;YAEtC,SAAe,0BAA0B;;oBACvC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAEhD,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBACjD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAAoC,EAAE,EAAE;4BAC1D,QAAQ,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gCACtD,cAAc,CAAC,IAAI,CAAC,kBAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;4BACjD,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBAEH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;4BACrB,OAAO,CAAC,cAAc,CAAC,CAAC;wBAC1B,CAAC,CAAC,CAAC;wBAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;4BAC1B,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;4BAC3C,MAAM,CAAC,GAAG,CAAC,CAAC;wBACd,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;aAAA;YAED,OAAO,MAAM,0BAA0B,EAAE,CAAC;QAC5C,CAAC;KAAA;CACF;AAEQ,0CAAe"}
|
|
@@ -20,6 +20,7 @@ import { CreateSecurityRequestProto } from '../../../fintekkers/requests/securit
|
|
|
20
20
|
import { CreateSecurityResponseProto } from '../../../fintekkers/requests/security/create_security_response_pb';
|
|
21
21
|
|
|
22
22
|
import EnvConfig from '../../models/utils/requestcontext';
|
|
23
|
+
import { Service } from '../../util/serviceaddress';
|
|
23
24
|
import { UUID } from '../../models/utils/uuid';
|
|
24
25
|
import { ZonedDateTime } from '../../models/utils/datetime';
|
|
25
26
|
import * as LinkCacheModule from '../../util/link-cache';
|
|
@@ -29,10 +30,10 @@ class SecurityService {
|
|
|
29
30
|
|
|
30
31
|
constructor(apiKey?: string) {
|
|
31
32
|
if (apiKey) {
|
|
32
|
-
const { credentials, interceptors } = EnvConfig.getAuthenticatedClientOptions(apiKey);
|
|
33
|
-
this.client = new SecurityClient(EnvConfig.
|
|
33
|
+
const { credentials, interceptors } = EnvConfig.getAuthenticatedClientOptions(apiKey, Service.SECURITY);
|
|
34
|
+
this.client = new SecurityClient(EnvConfig.urlFor(Service.SECURITY), credentials, { interceptors });
|
|
34
35
|
} else {
|
|
35
|
-
this.client = new SecurityClient(EnvConfig.
|
|
36
|
+
this.client = new SecurityClient(EnvConfig.urlFor(Service.SECURITY), EnvConfig.credentialsFor(Service.SECURITY));
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LM-287: every JS service client gets its address from the per-service
|
|
3
|
+
* lookup, so with the UI's environment (BROKER_HOST=127.0.0.1:8085,
|
|
4
|
+
* API_URL=localhost) all of them, the price client included, call the broker
|
|
5
|
+
* rather than ledger-service on localhost:8082.
|
|
6
|
+
*
|
|
7
|
+
* The generated *_grpc_pb clients are mocked, so no channel is opened.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LM-287: every JS service client gets its address from the per-service
|
|
4
|
+
* lookup, so with the UI's environment (BROKER_HOST=127.0.0.1:8085,
|
|
5
|
+
* API_URL=localhost) all of them, the price client included, call the broker
|
|
6
|
+
* rather than ledger-service on localhost:8082.
|
|
7
|
+
*
|
|
8
|
+
* The generated *_grpc_pb clients are mocked, so no channel is opened.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
27
|
+
if (mod && mod.__esModule) return mod;
|
|
28
|
+
var result = {};
|
|
29
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
30
|
+
__setModuleDefault(result, mod);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
34
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
35
|
+
};
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
jest.mock('../../fintekkers/services/portfolio-service/portfolio_service_grpc_pb', () => ({
|
|
38
|
+
PortfolioClient: jest.fn(),
|
|
39
|
+
}));
|
|
40
|
+
jest.mock('../../fintekkers/services/position-service/position_service_grpc_pb', () => ({
|
|
41
|
+
PositionClient: jest.fn(),
|
|
42
|
+
}));
|
|
43
|
+
jest.mock('../../fintekkers/services/price-service/price_service_grpc_pb', () => ({
|
|
44
|
+
PriceClient: jest.fn(),
|
|
45
|
+
}));
|
|
46
|
+
jest.mock('../../fintekkers/services/security-service/security_service_grpc_pb', () => ({
|
|
47
|
+
SecurityClient: jest.fn(),
|
|
48
|
+
}));
|
|
49
|
+
jest.mock('../../fintekkers/services/transaction-service/transaction_service_grpc_pb', () => ({
|
|
50
|
+
TransactionClient: jest.fn(),
|
|
51
|
+
}));
|
|
52
|
+
const grpc = __importStar(require("@grpc/grpc-js"));
|
|
53
|
+
const portfolio_service_grpc_pb_1 = require("../../fintekkers/services/portfolio-service/portfolio_service_grpc_pb");
|
|
54
|
+
const position_service_grpc_pb_1 = require("../../fintekkers/services/position-service/position_service_grpc_pb");
|
|
55
|
+
const price_service_grpc_pb_1 = require("../../fintekkers/services/price-service/price_service_grpc_pb");
|
|
56
|
+
const security_service_grpc_pb_1 = require("../../fintekkers/services/security-service/security_service_grpc_pb");
|
|
57
|
+
const transaction_service_grpc_pb_1 = require("../../fintekkers/services/transaction-service/transaction_service_grpc_pb");
|
|
58
|
+
const PortfolioService_1 = require("./portfolio-service/PortfolioService");
|
|
59
|
+
const PositionService_1 = require("./position-service/PositionService");
|
|
60
|
+
const PriceService_1 = require("./price-service/PriceService");
|
|
61
|
+
const SecurityService_1 = require("./security-service/SecurityService");
|
|
62
|
+
const TransactionService_1 = require("./transaction-service/TransactionService");
|
|
63
|
+
const link_resolver_1 = __importDefault(require("../util/link-resolver"));
|
|
64
|
+
// Every variable the lookup reads; each test starts with none of them set.
|
|
65
|
+
const LOOKUP_VARS = [
|
|
66
|
+
'BROKER_HOST',
|
|
67
|
+
'API_URL',
|
|
68
|
+
...['BROKER', 'LEDGER', 'VALUATION', 'PRICE'].flatMap((p) => [`${p}_SERVICE_HOST`, `${p}_SERVICE_PORT`]),
|
|
69
|
+
];
|
|
70
|
+
const saved = LOOKUP_VARS.map((k) => process.env[k]);
|
|
71
|
+
function setEnv(key, value) {
|
|
72
|
+
if (value === undefined) {
|
|
73
|
+
delete process.env[key];
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
process.env[key] = value;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
beforeEach(() => {
|
|
80
|
+
jest.clearAllMocks();
|
|
81
|
+
LOOKUP_VARS.forEach((k) => setEnv(k, undefined));
|
|
82
|
+
});
|
|
83
|
+
afterEach(() => {
|
|
84
|
+
LOOKUP_VARS.forEach((k, i) => setEnv(k, saved[i]));
|
|
85
|
+
jest.restoreAllMocks();
|
|
86
|
+
});
|
|
87
|
+
// [name, wrapper, generated client, port with only API_URL=localhost]
|
|
88
|
+
const clients = [
|
|
89
|
+
['PriceService', PriceService_1.PriceService, price_service_grpc_pb_1.PriceClient, 8083],
|
|
90
|
+
['SecurityService', SecurityService_1.SecurityService, security_service_grpc_pb_1.SecurityClient, 8082],
|
|
91
|
+
['TransactionService', TransactionService_1.TransactionService, transaction_service_grpc_pb_1.TransactionClient, 8082],
|
|
92
|
+
['PortfolioService', PortfolioService_1.PortfolioService, portfolio_service_grpc_pb_1.PortfolioClient, 8082],
|
|
93
|
+
['PositionService', PositionService_1.PositionService, position_service_grpc_pb_1.PositionClient, 8082],
|
|
94
|
+
];
|
|
95
|
+
function onlyCall(Client) {
|
|
96
|
+
const mock = Client;
|
|
97
|
+
expect(mock).toHaveBeenCalledTimes(1);
|
|
98
|
+
return mock.mock.calls[0];
|
|
99
|
+
}
|
|
100
|
+
function sentMetadata(interceptor) {
|
|
101
|
+
const nextStart = jest.fn();
|
|
102
|
+
const fakeNextCall = {
|
|
103
|
+
start: nextStart,
|
|
104
|
+
cancelWithStatus: jest.fn(),
|
|
105
|
+
getPeer: jest.fn(),
|
|
106
|
+
sendMessageWithContext: jest.fn(),
|
|
107
|
+
sendMessage: jest.fn(),
|
|
108
|
+
startRead: jest.fn(),
|
|
109
|
+
halfClose: jest.fn(),
|
|
110
|
+
setCredentials: jest.fn(),
|
|
111
|
+
};
|
|
112
|
+
const call = interceptor({}, jest.fn(() => fakeNextCall));
|
|
113
|
+
call.start(new grpc.Metadata(), {});
|
|
114
|
+
expect(nextStart).toHaveBeenCalledTimes(1);
|
|
115
|
+
return nextStart.mock.calls[0][0];
|
|
116
|
+
}
|
|
117
|
+
describe.each(clients)('%s', (_name, Wrapper, Client, apiUrlPort) => {
|
|
118
|
+
describe('with BROKER_HOST=127.0.0.1:8085 and API_URL=localhost', () => {
|
|
119
|
+
beforeEach(() => {
|
|
120
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
121
|
+
setEnv('API_URL', 'localhost');
|
|
122
|
+
});
|
|
123
|
+
test('targets the broker over an insecure channel', () => {
|
|
124
|
+
const insecure = jest.spyOn(grpc.credentials, 'createInsecure');
|
|
125
|
+
const ssl = jest.spyOn(grpc.credentials, 'createSsl');
|
|
126
|
+
new Wrapper();
|
|
127
|
+
const [address, credentials] = onlyCall(Client);
|
|
128
|
+
expect(address).toBe('127.0.0.1:8085');
|
|
129
|
+
expect(address).not.toBe('localhost:8082');
|
|
130
|
+
expect(insecure).toHaveBeenCalledTimes(1);
|
|
131
|
+
expect(credentials).toBe(insecure.mock.results[0].value);
|
|
132
|
+
expect(ssl).not.toHaveBeenCalled();
|
|
133
|
+
});
|
|
134
|
+
test('with an API key, targets the broker and sends x-api-key', () => {
|
|
135
|
+
const ssl = jest.spyOn(grpc.credentials, 'createSsl');
|
|
136
|
+
new Wrapper('k');
|
|
137
|
+
const [address, , options] = onlyCall(Client);
|
|
138
|
+
expect(address).toBe('127.0.0.1:8085');
|
|
139
|
+
expect(ssl).not.toHaveBeenCalled();
|
|
140
|
+
const { interceptors } = options;
|
|
141
|
+
expect(interceptors).toHaveLength(1);
|
|
142
|
+
expect(sentMetadata(interceptors[0]).get('x-api-key')).toEqual(['k']);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
test(`with only API_URL=localhost, targets localhost:${apiUrlPort}`, () => {
|
|
146
|
+
setEnv('API_URL', 'localhost');
|
|
147
|
+
new Wrapper();
|
|
148
|
+
const [address] = onlyCall(Client);
|
|
149
|
+
expect(address).toBe(`localhost:${apiUrlPort}`);
|
|
150
|
+
});
|
|
151
|
+
test('a client built after the environment changes uses the new address', () => {
|
|
152
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
153
|
+
new Wrapper();
|
|
154
|
+
expect(onlyCall(Client)[0]).toBe('127.0.0.1:8085');
|
|
155
|
+
Client.mockClear();
|
|
156
|
+
setEnv('BROKER_HOST', 'broker.example:9000');
|
|
157
|
+
new Wrapper();
|
|
158
|
+
expect(onlyCall(Client)[0]).toBe('broker.example:9000');
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe('PortfolioService.url', () => {
|
|
162
|
+
test('is a getter, read on every access', () => {
|
|
163
|
+
var _a;
|
|
164
|
+
expect(typeof ((_a = Object.getOwnPropertyDescriptor(PortfolioService_1.PortfolioService, 'url')) === null || _a === void 0 ? void 0 : _a.get)).toBe('function');
|
|
165
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
166
|
+
expect(PortfolioService_1.PortfolioService.url).toBe('127.0.0.1:8085');
|
|
167
|
+
setEnv('BROKER_HOST', 'broker.example:9000');
|
|
168
|
+
expect(PortfolioService_1.PortfolioService.url).toBe('broker.example:9000');
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
describe('LinkResolver default clients', () => {
|
|
172
|
+
test('target the broker', () => {
|
|
173
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
174
|
+
setEnv('API_URL', 'localhost');
|
|
175
|
+
new link_resolver_1.default();
|
|
176
|
+
for (const Client of [security_service_grpc_pb_1.SecurityClient, portfolio_service_grpc_pb_1.PortfolioClient, transaction_service_grpc_pb_1.TransactionClient]) {
|
|
177
|
+
expect(onlyCall(Client)[0]).toBe('127.0.0.1:8085');
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=serviceaddress.clients.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceaddress.clients.test.js","sourceRoot":"","sources":["serviceaddress.clients.test.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,IAAI,CAAC,IAAI,CAAC,uEAAuE,EAAE,GAAG,EAAE,CAAC,CAAC;IACxF,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;CAC3B,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE,CAAC,CAAC;IACtF,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE,CAAC,CAAC;IAChF,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;CACvB,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE,CAAC,CAAC;IACtF,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5F,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC7B,CAAC,CAAC,CAAC;AAEJ,oDAAsC;AACtC,qHAAwG;AACxG,kHAAqG;AACrG,yGAA4F;AAC5F,kHAAqG;AACrG,2HAA8G;AAC9G,2EAAwE;AACxE,wEAAqE;AACrE,+DAA4D;AAC5D,wEAAqE;AACrE,iFAA8E;AAC9E,0EAAiD;AAEjD,2EAA2E;AAC3E,MAAM,WAAW,GAAG;IAClB,aAAa;IACb,SAAS;IACT,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CACzG,CAAC;AACF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAErD,SAAS,MAAM,CAAC,GAAW,EAAE,KAAyB;IACpD,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KAC1B;AACH,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACrB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,OAAO,GAAuE;IAClF,CAAC,cAAc,EAAE,2BAAY,EAAE,mCAAW,EAAE,IAAI,CAAC;IACjD,CAAC,iBAAiB,EAAE,iCAAe,EAAE,yCAAc,EAAE,IAAI,CAAC;IAC1D,CAAC,oBAAoB,EAAE,uCAAkB,EAAE,+CAAiB,EAAE,IAAI,CAAC;IACnE,CAAC,kBAAkB,EAAE,mCAAgB,EAAE,2CAAe,EAAE,IAAI,CAAC;IAC7D,CAAC,iBAAiB,EAAE,iCAAe,EAAE,yCAAc,EAAE,IAAI,CAAC;CAC3D,CAAC;AAEF,SAAS,QAAQ,CAAC,MAAe;IAC/B,MAAM,IAAI,GAAG,MAAmB,CAAC;IACjC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,WAA6B;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG;QACnB,KAAK,EAAE,SAAS;QAChB,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;QAC3B,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;QAClB,sBAAsB,EAAE,IAAI,CAAC,EAAE,EAAE;QACjC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;QACtB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;QACpB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;QACpB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;KACU,CAAC;IACtC,MAAM,IAAI,GAAG,WAAW,CAAC,EAA6B,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAkB,CAAC;AACrD,CAAC;AAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;IAClE,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACrE,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;YACxC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAEtD,IAAI,OAAO,EAAE,CAAC;YAEd,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACnE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAEtD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;YAEjB,MAAM,CAAC,OAAO,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACnC,MAAM,EAAE,YAAY,EAAE,GAAG,OAA+C,CAAC;YACzE,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,UAAU,EAAE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAE/B,IAAI,OAAO,EAAE,CAAC;QAEd,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;QACd,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAElD,MAAoB,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;QACd,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;;QAC7C,MAAM,CAAC,OAAO,CAAA,MAAA,MAAM,CAAC,wBAAwB,CAAC,mCAAgB,EAAE,KAAK,CAAC,0CAAE,GAAG,CAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9F,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACxC,MAAM,CAAC,mCAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpD,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAC7C,MAAM,CAAC,mCAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACxC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAE/B,IAAI,uBAAY,EAAE,CAAC;QAEnB,KAAK,MAAM,MAAM,IAAI,CAAC,yCAAc,EAAE,2CAAe,EAAE,+CAAiB,CAAC,EAAE;YACzE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACpD;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LM-287: every JS service client gets its address from the per-service
|
|
3
|
+
* lookup, so with the UI's environment (BROKER_HOST=127.0.0.1:8085,
|
|
4
|
+
* API_URL=localhost) all of them, the price client included, call the broker
|
|
5
|
+
* rather than ledger-service on localhost:8082.
|
|
6
|
+
*
|
|
7
|
+
* The generated *_grpc_pb clients are mocked, so no channel is opened.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
jest.mock('../../fintekkers/services/portfolio-service/portfolio_service_grpc_pb', () => ({
|
|
11
|
+
PortfolioClient: jest.fn(),
|
|
12
|
+
}));
|
|
13
|
+
jest.mock('../../fintekkers/services/position-service/position_service_grpc_pb', () => ({
|
|
14
|
+
PositionClient: jest.fn(),
|
|
15
|
+
}));
|
|
16
|
+
jest.mock('../../fintekkers/services/price-service/price_service_grpc_pb', () => ({
|
|
17
|
+
PriceClient: jest.fn(),
|
|
18
|
+
}));
|
|
19
|
+
jest.mock('../../fintekkers/services/security-service/security_service_grpc_pb', () => ({
|
|
20
|
+
SecurityClient: jest.fn(),
|
|
21
|
+
}));
|
|
22
|
+
jest.mock('../../fintekkers/services/transaction-service/transaction_service_grpc_pb', () => ({
|
|
23
|
+
TransactionClient: jest.fn(),
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
import * as grpc from '@grpc/grpc-js';
|
|
27
|
+
import { PortfolioClient } from '../../fintekkers/services/portfolio-service/portfolio_service_grpc_pb';
|
|
28
|
+
import { PositionClient } from '../../fintekkers/services/position-service/position_service_grpc_pb';
|
|
29
|
+
import { PriceClient } from '../../fintekkers/services/price-service/price_service_grpc_pb';
|
|
30
|
+
import { SecurityClient } from '../../fintekkers/services/security-service/security_service_grpc_pb';
|
|
31
|
+
import { TransactionClient } from '../../fintekkers/services/transaction-service/transaction_service_grpc_pb';
|
|
32
|
+
import { PortfolioService } from './portfolio-service/PortfolioService';
|
|
33
|
+
import { PositionService } from './position-service/PositionService';
|
|
34
|
+
import { PriceService } from './price-service/PriceService';
|
|
35
|
+
import { SecurityService } from './security-service/SecurityService';
|
|
36
|
+
import { TransactionService } from './transaction-service/TransactionService';
|
|
37
|
+
import LinkResolver from '../util/link-resolver';
|
|
38
|
+
|
|
39
|
+
// Every variable the lookup reads; each test starts with none of them set.
|
|
40
|
+
const LOOKUP_VARS = [
|
|
41
|
+
'BROKER_HOST',
|
|
42
|
+
'API_URL',
|
|
43
|
+
...['BROKER', 'LEDGER', 'VALUATION', 'PRICE'].flatMap((p) => [`${p}_SERVICE_HOST`, `${p}_SERVICE_PORT`]),
|
|
44
|
+
];
|
|
45
|
+
const saved = LOOKUP_VARS.map((k) => process.env[k]);
|
|
46
|
+
|
|
47
|
+
function setEnv(key: string, value: string | undefined): void {
|
|
48
|
+
if (value === undefined) {
|
|
49
|
+
delete process.env[key];
|
|
50
|
+
} else {
|
|
51
|
+
process.env[key] = value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
beforeEach(() => {
|
|
56
|
+
jest.clearAllMocks();
|
|
57
|
+
LOOKUP_VARS.forEach((k) => setEnv(k, undefined));
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
afterEach(() => {
|
|
61
|
+
LOOKUP_VARS.forEach((k, i) => setEnv(k, saved[i]));
|
|
62
|
+
jest.restoreAllMocks();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// [name, wrapper, generated client, port with only API_URL=localhost]
|
|
66
|
+
const clients: Array<[string, new (apiKey?: string) => unknown, unknown, number]> = [
|
|
67
|
+
['PriceService', PriceService, PriceClient, 8083],
|
|
68
|
+
['SecurityService', SecurityService, SecurityClient, 8082],
|
|
69
|
+
['TransactionService', TransactionService, TransactionClient, 8082],
|
|
70
|
+
['PortfolioService', PortfolioService, PortfolioClient, 8082],
|
|
71
|
+
['PositionService', PositionService, PositionClient, 8082],
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
function onlyCall(Client: unknown): unknown[] {
|
|
75
|
+
const mock = Client as jest.Mock;
|
|
76
|
+
expect(mock).toHaveBeenCalledTimes(1);
|
|
77
|
+
return mock.mock.calls[0];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function sentMetadata(interceptor: grpc.Interceptor): grpc.Metadata {
|
|
81
|
+
const nextStart = jest.fn();
|
|
82
|
+
const fakeNextCall = {
|
|
83
|
+
start: nextStart,
|
|
84
|
+
cancelWithStatus: jest.fn(),
|
|
85
|
+
getPeer: jest.fn(),
|
|
86
|
+
sendMessageWithContext: jest.fn(),
|
|
87
|
+
sendMessage: jest.fn(),
|
|
88
|
+
startRead: jest.fn(),
|
|
89
|
+
halfClose: jest.fn(),
|
|
90
|
+
setCredentials: jest.fn(),
|
|
91
|
+
} as unknown as grpc.InterceptingCall;
|
|
92
|
+
const call = interceptor({} as grpc.InterceptorOptions, jest.fn(() => fakeNextCall));
|
|
93
|
+
call.start(new grpc.Metadata(), {});
|
|
94
|
+
expect(nextStart).toHaveBeenCalledTimes(1);
|
|
95
|
+
return nextStart.mock.calls[0][0] as grpc.Metadata;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
describe.each(clients)('%s', (_name, Wrapper, Client, apiUrlPort) => {
|
|
99
|
+
describe('with BROKER_HOST=127.0.0.1:8085 and API_URL=localhost', () => {
|
|
100
|
+
beforeEach(() => {
|
|
101
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
102
|
+
setEnv('API_URL', 'localhost');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('targets the broker over an insecure channel', () => {
|
|
106
|
+
const insecure = jest.spyOn(grpc.credentials, 'createInsecure');
|
|
107
|
+
const ssl = jest.spyOn(grpc.credentials, 'createSsl');
|
|
108
|
+
|
|
109
|
+
new Wrapper();
|
|
110
|
+
|
|
111
|
+
const [address, credentials] = onlyCall(Client);
|
|
112
|
+
expect(address).toBe('127.0.0.1:8085');
|
|
113
|
+
expect(address).not.toBe('localhost:8082');
|
|
114
|
+
expect(insecure).toHaveBeenCalledTimes(1);
|
|
115
|
+
expect(credentials).toBe(insecure.mock.results[0].value);
|
|
116
|
+
expect(ssl).not.toHaveBeenCalled();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('with an API key, targets the broker and sends x-api-key', () => {
|
|
120
|
+
const ssl = jest.spyOn(grpc.credentials, 'createSsl');
|
|
121
|
+
|
|
122
|
+
new Wrapper('k');
|
|
123
|
+
|
|
124
|
+
const [address, , options] = onlyCall(Client);
|
|
125
|
+
expect(address).toBe('127.0.0.1:8085');
|
|
126
|
+
expect(ssl).not.toHaveBeenCalled();
|
|
127
|
+
const { interceptors } = options as { interceptors: grpc.Interceptor[] };
|
|
128
|
+
expect(interceptors).toHaveLength(1);
|
|
129
|
+
expect(sentMetadata(interceptors[0]).get('x-api-key')).toEqual(['k']);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test(`with only API_URL=localhost, targets localhost:${apiUrlPort}`, () => {
|
|
134
|
+
setEnv('API_URL', 'localhost');
|
|
135
|
+
|
|
136
|
+
new Wrapper();
|
|
137
|
+
|
|
138
|
+
const [address] = onlyCall(Client);
|
|
139
|
+
expect(address).toBe(`localhost:${apiUrlPort}`);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('a client built after the environment changes uses the new address', () => {
|
|
143
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
144
|
+
new Wrapper();
|
|
145
|
+
expect(onlyCall(Client)[0]).toBe('127.0.0.1:8085');
|
|
146
|
+
|
|
147
|
+
(Client as jest.Mock).mockClear();
|
|
148
|
+
setEnv('BROKER_HOST', 'broker.example:9000');
|
|
149
|
+
new Wrapper();
|
|
150
|
+
expect(onlyCall(Client)[0]).toBe('broker.example:9000');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
describe('PortfolioService.url', () => {
|
|
155
|
+
test('is a getter, read on every access', () => {
|
|
156
|
+
expect(typeof Object.getOwnPropertyDescriptor(PortfolioService, 'url')?.get).toBe('function');
|
|
157
|
+
|
|
158
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
159
|
+
expect(PortfolioService.url).toBe('127.0.0.1:8085');
|
|
160
|
+
setEnv('BROKER_HOST', 'broker.example:9000');
|
|
161
|
+
expect(PortfolioService.url).toBe('broker.example:9000');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
describe('LinkResolver default clients', () => {
|
|
166
|
+
test('target the broker', () => {
|
|
167
|
+
setEnv('BROKER_HOST', '127.0.0.1:8085');
|
|
168
|
+
setEnv('API_URL', 'localhost');
|
|
169
|
+
|
|
170
|
+
new LinkResolver();
|
|
171
|
+
|
|
172
|
+
for (const Client of [SecurityClient, PortfolioClient, TransactionClient]) {
|
|
173
|
+
expect(onlyCall(Client)[0]).toBe('127.0.0.1:8085');
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
});
|
|
@@ -45,6 +45,7 @@ const transaction_service_grpc_pb_1 = require("../../../fintekkers/services/tran
|
|
|
45
45
|
const create_transaction_request_pb_1 = require("../../../fintekkers/requests/transaction/create_transaction_request_pb");
|
|
46
46
|
const query_transaction_request_pb_1 = require("../../../fintekkers/requests/transaction/query_transaction_request_pb");
|
|
47
47
|
const requestcontext_1 = __importDefault(require("../../models/utils/requestcontext"));
|
|
48
|
+
const serviceaddress_1 = require("../../util/serviceaddress");
|
|
48
49
|
const link_resolver_1 = __importDefault(require("../../util/link-resolver"));
|
|
49
50
|
const LinkCacheModule = __importStar(require("../../util/link-cache"));
|
|
50
51
|
const uuid_1 = require("../../models/utils/uuid");
|
|
@@ -52,11 +53,11 @@ const datetime_1 = require("../../models/utils/datetime");
|
|
|
52
53
|
class TransactionService {
|
|
53
54
|
constructor(apiKey) {
|
|
54
55
|
if (apiKey) {
|
|
55
|
-
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(apiKey);
|
|
56
|
-
this.client = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.
|
|
56
|
+
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(apiKey, serviceaddress_1.Service.TRANSACTION);
|
|
57
|
+
this.client = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.TRANSACTION), credentials, { interceptors });
|
|
57
58
|
}
|
|
58
59
|
else {
|
|
59
|
-
this.client = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.
|
|
60
|
+
this.client = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.TRANSACTION), requestcontext_1.default.credentialsFor(serviceaddress_1.Service.TRANSACTION));
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
validateCreateTransaction(transaction) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionService.js","sourceRoot":"","sources":["TransactionService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAiC;AAEjC,SAAS;AACT,uFAA+D;AAK/D,cAAc;AAEd,sBAAsB;AACtB,8HAAiH;AACjH,0HAAuH;AAEvH,wHAAqH;AAErH,uFAA0D;AAC1D,6EAAoD;AACpD,uEAAyD;AACzD,kDAA+C;AAC/C,0DAA4D;AAG5D,MAAM,kBAAkB;IAGtB,YAAY,MAAe;QACzB,IAAI,MAAM,EAAE;YACV,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,wBAAS,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"TransactionService.js","sourceRoot":"","sources":["TransactionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import { CreateTransactionResponseProto } from '../../../fintekkers/requests/tra
|
|
|
15
15
|
import { QueryTransactionRequestProto } from '../../../fintekkers/requests/transaction/query_transaction_request_pb';
|
|
16
16
|
import { QueryTransactionResponseProto } from '../../../fintekkers/requests/transaction/query_transaction_response_pb';
|
|
17
17
|
import EnvConfig from '../../models/utils/requestcontext';
|
|
18
|
+
import { Service } from '../../util/serviceaddress';
|
|
18
19
|
import LinkResolver from '../../util/link-resolver';
|
|
19
20
|
import * as LinkCacheModule from '../../util/link-cache';
|
|
20
21
|
import { UUID } from '../../models/utils/uuid';
|
|
@@ -26,10 +27,10 @@ class TransactionService {
|
|
|
26
27
|
|
|
27
28
|
constructor(apiKey?: string) {
|
|
28
29
|
if (apiKey) {
|
|
29
|
-
const { credentials, interceptors } = EnvConfig.getAuthenticatedClientOptions(apiKey);
|
|
30
|
-
this.client = new TransactionClient(EnvConfig.
|
|
30
|
+
const { credentials, interceptors } = EnvConfig.getAuthenticatedClientOptions(apiKey, Service.TRANSACTION);
|
|
31
|
+
this.client = new TransactionClient(EnvConfig.urlFor(Service.TRANSACTION), credentials, { interceptors });
|
|
31
32
|
} else {
|
|
32
|
-
this.client = new TransactionClient(EnvConfig.
|
|
33
|
+
this.client = new TransactionClient(EnvConfig.urlFor(Service.TRANSACTION), EnvConfig.credentialsFor(Service.TRANSACTION));
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
|
|
@@ -40,7 +40,7 @@ import { UUID } from '../models/utils/uuid';
|
|
|
40
40
|
* timestamp bucket, since the request proto carries a single as_of).
|
|
41
41
|
*/
|
|
42
42
|
export interface LinkResolverOptions {
|
|
43
|
-
/** Optional API key. If omitted, EnvConfig.
|
|
43
|
+
/** Optional API key. If omitted, EnvConfig.credentialsFor(service) is used. */
|
|
44
44
|
apiKey?: string;
|
|
45
45
|
/**
|
|
46
46
|
* Test injection: clients to use instead of constructing real ones.
|
|
@@ -47,6 +47,7 @@ const portfolio_1 = __importDefault(require("../models/portfolio/portfolio"));
|
|
|
47
47
|
const transaction_1 = __importDefault(require("../models/transaction/transaction"));
|
|
48
48
|
const uuid_1 = require("../models/utils/uuid");
|
|
49
49
|
const requestcontext_1 = __importDefault(require("../models/utils/requestcontext"));
|
|
50
|
+
const serviceaddress_1 = require("./serviceaddress");
|
|
50
51
|
const datetime_1 = require("../models/utils/datetime");
|
|
51
52
|
const LinkCacheModule = __importStar(require("./link-cache"));
|
|
52
53
|
/**
|
|
@@ -103,31 +104,31 @@ class LinkResolver {
|
|
|
103
104
|
this.securityClient = opts.securityClient;
|
|
104
105
|
}
|
|
105
106
|
else if (opts.apiKey) {
|
|
106
|
-
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(opts.apiKey);
|
|
107
|
-
this.securityClient = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.
|
|
107
|
+
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(opts.apiKey, serviceaddress_1.Service.SECURITY);
|
|
108
|
+
this.securityClient = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.SECURITY), credentials, { interceptors });
|
|
108
109
|
}
|
|
109
110
|
else {
|
|
110
|
-
this.securityClient = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.
|
|
111
|
+
this.securityClient = new security_service_grpc_pb_1.SecurityClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.SECURITY), requestcontext_1.default.credentialsFor(serviceaddress_1.Service.SECURITY));
|
|
111
112
|
}
|
|
112
113
|
if (opts.portfolioClient) {
|
|
113
114
|
this.portfolioClient = opts.portfolioClient;
|
|
114
115
|
}
|
|
115
116
|
else if (opts.apiKey) {
|
|
116
|
-
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(opts.apiKey);
|
|
117
|
-
this.portfolioClient = new portfolio_service_grpc_pb_1.PortfolioClient(requestcontext_1.default.
|
|
117
|
+
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(opts.apiKey, serviceaddress_1.Service.PORTFOLIO);
|
|
118
|
+
this.portfolioClient = new portfolio_service_grpc_pb_1.PortfolioClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.PORTFOLIO), credentials, { interceptors });
|
|
118
119
|
}
|
|
119
120
|
else {
|
|
120
|
-
this.portfolioClient = new portfolio_service_grpc_pb_1.PortfolioClient(requestcontext_1.default.
|
|
121
|
+
this.portfolioClient = new portfolio_service_grpc_pb_1.PortfolioClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.PORTFOLIO), requestcontext_1.default.credentialsFor(serviceaddress_1.Service.PORTFOLIO));
|
|
121
122
|
}
|
|
122
123
|
if (opts.transactionClient) {
|
|
123
124
|
this.transactionClient = opts.transactionClient;
|
|
124
125
|
}
|
|
125
126
|
else if (opts.apiKey) {
|
|
126
|
-
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(opts.apiKey);
|
|
127
|
-
this.transactionClient = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.
|
|
127
|
+
const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(opts.apiKey, serviceaddress_1.Service.TRANSACTION);
|
|
128
|
+
this.transactionClient = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.TRANSACTION), credentials, { interceptors });
|
|
128
129
|
}
|
|
129
130
|
else {
|
|
130
|
-
this.transactionClient = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.
|
|
131
|
+
this.transactionClient = new transaction_service_grpc_pb_1.TransactionClient(requestcontext_1.default.urlFor(serviceaddress_1.Service.TRANSACTION), requestcontext_1.default.credentialsFor(serviceaddress_1.Service.TRANSACTION));
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
/**
|