@fintekkers/ledger-models 0.4.30 → 0.4.32

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 (58) hide show
  1. package/node/wrappers/models/price/price_rules.d.ts +20 -0
  2. package/node/wrappers/models/price/price_rules.js +53 -0
  3. package/node/wrappers/models/price/price_rules.js.map +1 -0
  4. package/node/wrappers/models/price/price_rules.test.d.ts +1 -0
  5. package/node/wrappers/models/price/price_rules.test.js +112 -0
  6. package/node/wrappers/models/price/price_rules.test.js.map +1 -0
  7. package/node/wrappers/models/price/price_rules.test.ts +128 -0
  8. package/node/wrappers/models/price/price_rules.ts +50 -0
  9. package/node/wrappers/models/utils/requestcontext.auth.test.js +21 -6
  10. package/node/wrappers/models/utils/requestcontext.auth.test.js.map +1 -1
  11. package/node/wrappers/models/utils/requestcontext.auth.test.ts +24 -6
  12. package/node/wrappers/models/utils/requestcontext.d.ts +18 -12
  13. package/node/wrappers/models/utils/requestcontext.js +28 -28
  14. package/node/wrappers/models/utils/requestcontext.js.map +1 -1
  15. package/node/wrappers/models/utils/requestcontext.test.js +15 -3
  16. package/node/wrappers/models/utils/requestcontext.test.js.map +1 -1
  17. package/node/wrappers/models/utils/requestcontext.test.ts +17 -3
  18. package/node/wrappers/models/utils/requestcontext.ts +31 -29
  19. package/node/wrappers/services/apikey.credentials.test.d.ts +1 -1
  20. package/node/wrappers/services/apikey.credentials.test.js +14 -12
  21. package/node/wrappers/services/apikey.credentials.test.js.map +1 -1
  22. package/node/wrappers/services/apikey.credentials.test.ts +15 -13
  23. package/node/wrappers/services/apikey.test.js +1 -1
  24. package/node/wrappers/services/apikey.test.js.map +1 -1
  25. package/node/wrappers/services/apikey.test.ts +1 -1
  26. package/node/wrappers/services/portfolio-service/PortfolioService.d.ts +2 -1
  27. package/node/wrappers/services/portfolio-service/PortfolioService.js +8 -4
  28. package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
  29. package/node/wrappers/services/portfolio-service/PortfolioService.ts +8 -4
  30. package/node/wrappers/services/position-service/PositionService.js +4 -3
  31. package/node/wrappers/services/position-service/PositionService.js.map +1 -1
  32. package/node/wrappers/services/position-service/PositionService.ts +4 -3
  33. package/node/wrappers/services/price-service/PriceService.js +4 -3
  34. package/node/wrappers/services/price-service/PriceService.js.map +1 -1
  35. package/node/wrappers/services/price-service/PriceService.ts +4 -3
  36. package/node/wrappers/services/security-service/SecurityService.js +4 -3
  37. package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
  38. package/node/wrappers/services/security-service/SecurityService.ts +4 -3
  39. package/node/wrappers/services/serviceaddress.clients.test.d.ts +9 -0
  40. package/node/wrappers/services/serviceaddress.clients.test.js +181 -0
  41. package/node/wrappers/services/serviceaddress.clients.test.js.map +1 -0
  42. package/node/wrappers/services/serviceaddress.clients.test.ts +176 -0
  43. package/node/wrappers/services/transaction-service/TransactionService.js +4 -3
  44. package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
  45. package/node/wrappers/services/transaction-service/TransactionService.ts +4 -3
  46. package/node/wrappers/util/link-resolver.d.ts +1 -1
  47. package/node/wrappers/util/link-resolver.js +10 -9
  48. package/node/wrappers/util/link-resolver.js.map +1 -1
  49. package/node/wrappers/util/link-resolver.ts +11 -10
  50. package/node/wrappers/util/serviceaddress.d.ts +47 -0
  51. package/node/wrappers/util/serviceaddress.js +132 -0
  52. package/node/wrappers/util/serviceaddress.js.map +1 -0
  53. package/node/wrappers/util/serviceaddress.test.d.ts +6 -0
  54. package/node/wrappers/util/serviceaddress.test.js +76 -0
  55. package/node/wrappers/util/serviceaddress.test.js.map +1 -0
  56. package/node/wrappers/util/serviceaddress.test.ts +83 -0
  57. package/node/wrappers/util/serviceaddress.ts +141 -0
  58. package/package.json +1 -1
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Finds the address of a FinTekkers service from the environment, the same
3
+ * way as Java `ServiceAddress` and Rust `service_address.rs` (LM-278). Every
4
+ * default client resolves through here, in this order:
5
+ *
6
+ * 1. `BROKER_HOST` (`host[:port]`, port defaults to {@link BROKER_PORT}):
7
+ * all calls go through the broker.
8
+ * 2. Only if that is unset, `<SERVICE>_SERVICE_HOST` with
9
+ * `<SERVICE>_SERVICE_PORT` (or the service's standard port). `_PORT`
10
+ * without `_HOST` is ignored.
11
+ * 3. `API_URL`, with the service's standard port unless it carries one.
12
+ * 4. `localhost` on the service's standard port.
13
+ *
14
+ * An empty value counts as unset. A leading `http://` or `https://` is
15
+ * ignored. Loopback hosts (`localhost`, `127.0.0.1`) are plaintext; any other
16
+ * host uses TLS. A port that is not a number throws an Error naming the
17
+ * variable.
18
+ *
19
+ * The same cases are checked in every language against
20
+ * `test-fixtures/service-address-cases.json`.
21
+ */
22
+
23
+ export const BROKER_PORT = 8085;
24
+ export const LEDGER_PORT = 8082;
25
+ export const VALUATION_PORT = 8080;
26
+ export const PRICE_PORT = 8083;
27
+
28
+ export enum Service {
29
+ BROKER = 'BROKER',
30
+ SECURITY = 'SECURITY',
31
+ TRANSACTION = 'TRANSACTION',
32
+ PORTFOLIO = 'PORTFOLIO',
33
+ VALUATION = 'VALUATION',
34
+ PRICE = 'PRICE',
35
+ /** JS only: the position client talks to ledger-service. */
36
+ POSITION = 'POSITION',
37
+ }
38
+
39
+ /** Prefix of each service's `<SERVICE>_SERVICE_HOST/_PORT` variables, and its standard port. */
40
+ const SERVICE_ENV: Record<Service, { envPrefix: string; standardPort: number }> = {
41
+ [Service.BROKER]: { envPrefix: 'BROKER', standardPort: BROKER_PORT },
42
+ [Service.SECURITY]: { envPrefix: 'LEDGER', standardPort: LEDGER_PORT },
43
+ [Service.TRANSACTION]: { envPrefix: 'LEDGER', standardPort: LEDGER_PORT },
44
+ [Service.PORTFOLIO]: { envPrefix: 'LEDGER', standardPort: LEDGER_PORT },
45
+ [Service.VALUATION]: { envPrefix: 'VALUATION', standardPort: VALUATION_PORT },
46
+ [Service.PRICE]: { envPrefix: 'PRICE', standardPort: PRICE_PORT },
47
+ [Service.POSITION]: { envPrefix: 'LEDGER', standardPort: LEDGER_PORT },
48
+ };
49
+
50
+ export interface Endpoint {
51
+ host: string;
52
+ port: number;
53
+ plaintext: boolean;
54
+ }
55
+
56
+ export type Env = Record<string, string | undefined>;
57
+
58
+ export function envPrefix(service: Service): string {
59
+ return SERVICE_ENV[service].envPrefix;
60
+ }
61
+
62
+ export function standardPort(service: Service): number {
63
+ return SERVICE_ENV[service].standardPort;
64
+ }
65
+
66
+ /** Resolves `service` against `env` (defaults to `process.env`). */
67
+ export function resolve(service: Service, env: Env = process.env): Endpoint {
68
+ const broker = read(env, 'BROKER_HOST');
69
+ if (broker !== undefined) {
70
+ return parse(broker, 'BROKER_HOST', BROKER_PORT);
71
+ }
72
+
73
+ const { envPrefix, standardPort } = SERVICE_ENV[service];
74
+ const hostVar = envPrefix + '_SERVICE_HOST';
75
+ const host = read(env, hostVar);
76
+ if (host !== undefined) {
77
+ const portVar = envPrefix + '_SERVICE_PORT';
78
+ const port = read(env, portVar);
79
+ const endpoint = parse(host, hostVar, standardPort);
80
+ return port === undefined
81
+ ? endpoint
82
+ : makeEndpoint(endpoint.host, parsePort(port, portVar));
83
+ }
84
+
85
+ const apiUrl = read(env, 'API_URL');
86
+ if (apiUrl !== undefined) {
87
+ return parse(apiUrl, 'API_URL', standardPort);
88
+ }
89
+
90
+ return makeEndpoint('localhost', standardPort);
91
+ }
92
+
93
+ /** The `host:port` string a gRPC client connects to. */
94
+ export function target(endpoint: Endpoint): string {
95
+ return `${endpoint.host}:${endpoint.port}`;
96
+ }
97
+
98
+ function read(env: Env, name: string): string | undefined {
99
+ if (!Object.prototype.hasOwnProperty.call(env, name)) return undefined;
100
+ const value = env[name];
101
+ if (value === undefined || value === null) return undefined;
102
+ const trimmed = value.trim();
103
+ return trimmed === '' ? undefined : trimmed;
104
+ }
105
+
106
+ function parse(value: string, variable: string, defaultPort: number): Endpoint {
107
+ let address = value;
108
+ const scheme = address.indexOf('://');
109
+ if (scheme >= 0) address = address.substring(scheme + 3);
110
+ while (address.endsWith('/')) address = address.substring(0, address.length - 1);
111
+
112
+ let host = address;
113
+ let port = defaultPort;
114
+ const colon = address.lastIndexOf(':');
115
+ if (colon >= 0) {
116
+ host = address.substring(0, colon);
117
+ port = parsePort(address.substring(colon + 1), variable);
118
+ }
119
+ if (host === '') {
120
+ throw new Error(`${variable} has no host: '${value}'`);
121
+ }
122
+ return makeEndpoint(host, port);
123
+ }
124
+
125
+ function parsePort(value: string, variable: string): number {
126
+ const trimmed = value.trim();
127
+ // Java's Integer.parseInt accepts an optional sign; the range check below rejects negatives.
128
+ if (!/^[+-]?\d+$/.test(trimmed)) throw invalidPort(value, variable);
129
+ const port = Number(trimmed);
130
+ if (port < 1 || port > 65535) throw invalidPort(value, variable);
131
+ return port;
132
+ }
133
+
134
+ function invalidPort(value: string, variable: string): Error {
135
+ return new Error(`${variable} has an invalid port: '${value}'`);
136
+ }
137
+
138
+ function makeEndpoint(host: string, port: number): Endpoint {
139
+ const plaintext = host === 'localhost' || host === '127.0.0.1';
140
+ return { host, port, plaintext };
141
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fintekkers/ledger-models",
3
3
  "todo": "Replace the version with build script version number",
4
- "version": "0.4.30",
4
+ "version": "0.4.32",
5
5
  "description": "ledger model protos ",
6
6
  "authors": [
7
7
  "David Doherty",