@yuants/vendor-okx 0.23.19 → 0.23.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-okx",
3
- "version": "0.23.19",
3
+ "version": "0.23.20",
4
4
  "bin": "lib/cli.js",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -9,19 +9,18 @@
9
9
  "temp"
10
10
  ],
11
11
  "dependencies": {
12
- "@yuants/protocol": "0.49.0",
13
- "@yuants/transfer": "0.2.27",
14
- "@yuants/data-account": "0.6.8",
15
- "@yuants/data-order": "0.3.6",
16
- "@yuants/utils": "0.9.0",
17
- "@yuants/sql": "0.9.18",
18
- "@yuants/data-series": "0.3.39",
19
- "@yuants/data-product": "0.4.9",
20
- "@yuants/data-ohlc": "0.4.10",
21
- "@yuants/data-interest-rate": "0.1.36",
22
- "@yuants/data-quote": "0.2.31",
23
- "@yuants/data-trade": "0.1.9",
24
- "@yuants/secret": "0.2.22",
12
+ "@yuants/protocol": "0.49.1",
13
+ "@yuants/transfer": "0.2.28",
14
+ "@yuants/data-account": "0.6.9",
15
+ "@yuants/data-order": "0.3.7",
16
+ "@yuants/utils": "0.10.0",
17
+ "@yuants/sql": "0.9.19",
18
+ "@yuants/data-series": "0.3.40",
19
+ "@yuants/data-product": "0.4.10",
20
+ "@yuants/data-ohlc": "0.4.11",
21
+ "@yuants/data-interest-rate": "0.1.37",
22
+ "@yuants/data-quote": "0.2.32",
23
+ "@yuants/data-trade": "0.1.10",
25
24
  "rxjs": "~7.5.6",
26
25
  "crypto-js": "^4.2.0",
27
26
  "ws": "~8.8.1"
@@ -33,7 +32,7 @@
33
32
  "@rushstack/heft-node-rig": "~1.10.7",
34
33
  "@types/heft-jest": "1.0.3",
35
34
  "@types/node": "22",
36
- "@yuants/extension": "0.2.25",
35
+ "@yuants/extension": "0.2.26",
37
36
  "@yuants/tool-kit": "0.2.0",
38
37
  "typescript": "~4.7.4",
39
38
  "ts-node": "~10.9.2",
@@ -1,17 +1,16 @@
1
1
  {
2
- "apps/vendor-okx/CHANGELOG.json": "857181c1b13602d622363390b0c9c450543f7cb3",
3
- "apps/vendor-okx/CHANGELOG.md": "942963e6c05bc916981d72f5236d838cf95b897c",
2
+ "apps/vendor-okx/CHANGELOG.json": "8d85c89adfc3edf9d42fa543c58b8ef2a4ce9149",
3
+ "apps/vendor-okx/CHANGELOG.md": "baa03221efa58c6b09441bde5ed2377009234538",
4
4
  "apps/vendor-okx/README.md": "ac3d1f6c4c8d73066664699b0bb1b01db02e67a2",
5
5
  "apps/vendor-okx/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
6
6
  "apps/vendor-okx/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
7
7
  "apps/vendor-okx/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
8
8
  "apps/vendor-okx/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
9
9
  "apps/vendor-okx/etc/vendor-okx.api.md": "92c54ccd547d2ad81ca6088158ca193e85c208df",
10
- "apps/vendor-okx/package.json": "a2fff22997887cde629247f61162147ff3059390",
10
+ "apps/vendor-okx/package.json": "0404705b48ecc71f9eb9b4e7c4b5d2e8a80c421a",
11
11
  "apps/vendor-okx/src/account.ts": "dc7dcb268cda38869c8ba4af5dbdb608aa1cbe77",
12
12
  "apps/vendor-okx/src/api.ts": "1ed5d9e4a758523e5f97183a1e6377bed0d75493",
13
13
  "apps/vendor-okx/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
14
- "apps/vendor-okx/src/cluster.ts": "9971d8d5e6af16e09d2d1fe5e9f05ccee87281e8",
15
14
  "apps/vendor-okx/src/index.ts": "21c3f194a9572692a949bb307005baf87141fbfb",
16
15
  "apps/vendor-okx/src/interest_rate.ts": "cf3a12813e8703add74de929d5ddda0bf3e7b45f",
17
16
  "apps/vendor-okx/src/legacy_index.ts": "e46abcfaa52f957ce5e8c42ca26cd0fc2c576965",
@@ -30,20 +29,19 @@
30
29
  "apps/vendor-okx/src/websocket.ts": "6c0199bbb9db714ec96b59d90b35b3c801975194",
31
30
  "apps/vendor-okx/src/ws.ts": "7aa1561c8c524dee838817eaeda5031d389ec877",
32
31
  "apps/vendor-okx/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
33
- "apps/vendor-okx/.rush/temp/shrinkwrap-deps.json": "209b5ec565f7d197b23abd005bb3a481726197fa",
34
- "libraries/protocol/temp/package-deps.json": "11b1ec6e83d466da55c316e4e2ab53cc48c3bc64",
35
- "libraries/transfer/temp/package-deps.json": "b5d75d2dca39bc64460a1376fe39addd236d7385",
36
- "libraries/data-account/temp/package-deps.json": "89f0acde8bee43a9c2125559935730dadbf64ce9",
37
- "libraries/data-order/temp/package-deps.json": "9f7b7bb91ce6b9d2bd039912dd1cece19a72c68a",
38
- "libraries/utils/temp/package-deps.json": "43e2f82267afa2b74314163b5c31d42ac615785b",
39
- "libraries/sql/temp/package-deps.json": "5e3867c0ea14708b0cddcba1d02628882f39b533",
40
- "libraries/data-series/temp/package-deps.json": "31a1137caa1541f8f3b2486cc2f071d7cc8d2c7e",
41
- "libraries/data-product/temp/package-deps.json": "2247a0e0cf3df79ecfc93c2e9d402d5f331a94b7",
42
- "libraries/data-ohlc/temp/package-deps.json": "ab70e376f759ea49470edaad7eb56d65afa5f4eb",
43
- "libraries/data-interest-rate/temp/package-deps.json": "e1affc2c24b409a5f6de81b4c515a21facfea59b",
44
- "libraries/data-quote/temp/package-deps.json": "c5e47fcf2e8f98773e4df19a07eab210b627c498",
45
- "libraries/data-trade/temp/package-deps.json": "e2f7e13e30289413d933f6d8fc912db250f97251",
46
- "libraries/secret/temp/package-deps.json": "44f23aaaa96260dcdb77343f792e2b945231356e",
47
- "libraries/extension/temp/package-deps.json": "89316671ad698642d396774cf743dbe240cdbddc",
32
+ "apps/vendor-okx/.rush/temp/shrinkwrap-deps.json": "eec75f84f913f6d956cbd3436df448790c76a85d",
33
+ "libraries/protocol/temp/package-deps.json": "0a3f80906e99efffe686a474d0f15c9410ee8874",
34
+ "libraries/transfer/temp/package-deps.json": "d73a9ba8f08848ccf0aa1ae8f1debc0d6862325b",
35
+ "libraries/data-account/temp/package-deps.json": "bfa01200dc996e34f59d2768caf5077467df5573",
36
+ "libraries/data-order/temp/package-deps.json": "3a98bb6bed777858bc9b6a6ab4067fd86cddd6cf",
37
+ "libraries/utils/temp/package-deps.json": "00132af02f003a95edfc2b9e1e9ec298a59fb89c",
38
+ "libraries/sql/temp/package-deps.json": "1d1d91dcd9a6cc28f3309fe7fd45de952aacb4fb",
39
+ "libraries/data-series/temp/package-deps.json": "678eae040552d81b455284857d187123decd832d",
40
+ "libraries/data-product/temp/package-deps.json": "722dbd45b5a7433c9fa26e450c39a2b5f9d7045f",
41
+ "libraries/data-ohlc/temp/package-deps.json": "3403664dcd950637b25c293f2699453bcff384d0",
42
+ "libraries/data-interest-rate/temp/package-deps.json": "2ecad524c89f84f7b8528305ac396080d2ab1b07",
43
+ "libraries/data-quote/temp/package-deps.json": "54b24d1649fab8db58f9b19c1b43a7c63c62533c",
44
+ "libraries/data-trade/temp/package-deps.json": "030f3a49a374665203bbbd08885eaf148c6fca4f",
45
+ "libraries/extension/temp/package-deps.json": "baf08ab93278543b640b68f31261ffd3705bd9e7",
48
46
  "tools/toolkit/temp/package-deps.json": "3bef053db16659f0cdaceea64c8a8580c0131633"
49
47
  }
package/dist/cluster.js DELETED
@@ -1,80 +0,0 @@
1
- import { Terminal } from '@yuants/protocol';
2
- import { loadSecrets } from '@yuants/secret';
3
- import { formatTime, listWatch } from '@yuants/utils';
4
- import cluster from 'cluster';
5
- import { bufferTime, defer, filter, map, Observable, repeat, retry, Subject, tap } from 'rxjs';
6
- import { overrideConsole } from './logger';
7
- overrideConsole();
8
- if (cluster.isPrimary) {
9
- console.info(`[Primary] ${formatTime(Date.now())} This is the primary process`);
10
- const logBuffer = new Subject();
11
- logBuffer
12
- .pipe(
13
- //
14
- bufferTime(100), map((v) => v.join('\n')), filter((v) => v.trim() !== ''))
15
- .subscribe((message) => {
16
- console.info(message);
17
- });
18
- defer(() => loadSecrets({
19
- terminal: Terminal.fromNodeEnv(),
20
- encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58,
21
- }))
22
- .pipe(
23
- //
24
- tap({
25
- error: (e) => {
26
- console.error(`[Primary] ${formatTime(Date.now())} Failed to load secrets`, e);
27
- },
28
- }), retry({ delay: 5000 }), repeat({ delay: 5000 }))
29
- .pipe(listWatch((x) => x.secret.id, (account) => defer(() => new Observable((subscriber) => {
30
- console.info(formatTime(Date.now()), `[Primary] ${formatTime(Date.now())} Starting worker for account ${account.secret.public_data.name} (${account.secret.id})`);
31
- if (account.secret.public_data.type !== 'api_key_okx')
32
- return;
33
- if (!account.secret.public_data.name)
34
- return;
35
- if (!account.decrypted_data)
36
- return;
37
- if (!account.decrypted_data.access_key)
38
- return;
39
- if (!account.decrypted_data.secret_key)
40
- return;
41
- if (!account.decrypted_data.passphrase)
42
- return;
43
- const worker = cluster.fork({
44
- ENCRYPTION_KEY_BASE58: '',
45
- ACCESS_KEY: account.decrypted_data.access_key,
46
- SECRET_KEY: account.decrypted_data.secret_key,
47
- PASSPHRASE: account.decrypted_data.passphrase,
48
- WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',
49
- TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,
50
- WORKER_LABEL: account.secret.public_data.name,
51
- });
52
- worker.on('message', (message) => {
53
- if (message.type === 'log') {
54
- logBuffer.next(`[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`);
55
- }
56
- });
57
- worker.on('exit', (code, signal) => {
58
- if (code === 0) {
59
- console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited gracefully`);
60
- subscriber.complete();
61
- }
62
- else {
63
- console.error(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`);
64
- subscriber.error(new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`));
65
- }
66
- });
67
- return () => {
68
- worker.kill();
69
- console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} killed`);
70
- };
71
- })).pipe(
72
- //
73
- retry({ delay: 1000 }), repeat({ delay: 1000 })), (a, b) => a.secret.updated_at === b.secret.updated_at))
74
- .subscribe();
75
- }
76
- else {
77
- console.info(`${formatTime(Date.now())} This is the worker process`, process.pid, process.env);
78
- import('./index');
79
- }
80
- //# sourceMappingURL=cluster.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../src/cluster.ts"],"names":[],"mappings":"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","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { loadSecrets } from '@yuants/secret';\nimport { formatTime, listWatch } from '@yuants/utils';\nimport cluster from 'cluster';\nimport { bufferTime, defer, filter, map, Observable, repeat, retry, Subject, tap } from 'rxjs';\nimport { overrideConsole } from './logger';\n\noverrideConsole();\n\nif (cluster.isPrimary) {\n console.info(`[Primary] ${formatTime(Date.now())} This is the primary process`);\n\n const logBuffer = new Subject<string>();\n\n logBuffer\n .pipe(\n //\n bufferTime(100),\n map((v) => v.join('\\n')),\n filter((v) => v.trim() !== ''),\n )\n .subscribe((message) => {\n console.info(message);\n });\n\n defer(() =>\n loadSecrets<{ access_key: string; secret_key: string; passphrase: string }>({\n terminal: Terminal.fromNodeEnv(),\n encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58!,\n }),\n )\n .pipe(\n //\n tap({\n error: (e) => {\n console.error(`[Primary] ${formatTime(Date.now())} Failed to load secrets`, e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 5000 }),\n )\n .pipe(\n listWatch(\n (x) => x.secret.id,\n (account) =>\n defer(\n () =>\n new Observable((subscriber) => {\n console.info(\n formatTime(Date.now()),\n `[Primary] ${formatTime(Date.now())} Starting worker for account ${\n account.secret.public_data.name\n } (${account.secret.id})`,\n );\n if (account.secret.public_data.type !== 'api_key_okx') return;\n if (!account.secret.public_data.name) return;\n if (!account.decrypted_data) return;\n if (!account.decrypted_data.access_key) return;\n if (!account.decrypted_data.secret_key) return;\n if (!account.decrypted_data.passphrase) return;\n\n const worker = cluster.fork({\n ENCRYPTION_KEY_BASE58: '',\n ACCESS_KEY: account.decrypted_data.access_key,\n SECRET_KEY: account.decrypted_data.secret_key,\n PASSPHRASE: account.decrypted_data.passphrase,\n WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',\n TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,\n WORKER_LABEL: account.secret.public_data.name,\n });\n\n worker.on('message', (message: any) => {\n if (message.type === 'log') {\n logBuffer.next(\n `[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`,\n );\n }\n });\n\n worker.on('exit', (code, signal) => {\n if (code === 0) {\n console.info(\n `[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited gracefully`,\n );\n subscriber.complete();\n } else {\n console.error(\n `[Primary] ${formatTime(Date.now())} Worker ${\n worker.process.pid\n } exited with code ${code} and signal ${signal}`,\n );\n subscriber.error(\n new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`),\n );\n }\n });\n return () => {\n worker.kill();\n console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} killed`);\n };\n }),\n ).pipe(\n //\n retry({ delay: 1000 }),\n repeat({ delay: 1000 }), // 重试间隔为 1 秒\n ),\n (a, b) => a.secret.updated_at === b.secret.updated_at,\n ),\n )\n .subscribe();\n} else {\n console.info(`${formatTime(Date.now())} This is the worker process`, process.pid, process.env);\n import('./index');\n}\n"]}
package/lib/cluster.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cluster.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../src/cluster.ts"],"names":[],"mappings":""}
package/lib/cluster.js DELETED
@@ -1,108 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const protocol_1 = require("@yuants/protocol");
30
- const secret_1 = require("@yuants/secret");
31
- const utils_1 = require("@yuants/utils");
32
- const cluster_1 = __importDefault(require("cluster"));
33
- const rxjs_1 = require("rxjs");
34
- const logger_1 = require("./logger");
35
- (0, logger_1.overrideConsole)();
36
- if (cluster_1.default.isPrimary) {
37
- console.info(`[Primary] ${(0, utils_1.formatTime)(Date.now())} This is the primary process`);
38
- const logBuffer = new rxjs_1.Subject();
39
- logBuffer
40
- .pipe(
41
- //
42
- (0, rxjs_1.bufferTime)(100), (0, rxjs_1.map)((v) => v.join('\n')), (0, rxjs_1.filter)((v) => v.trim() !== ''))
43
- .subscribe((message) => {
44
- console.info(message);
45
- });
46
- (0, rxjs_1.defer)(() => (0, secret_1.loadSecrets)({
47
- terminal: protocol_1.Terminal.fromNodeEnv(),
48
- encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58,
49
- }))
50
- .pipe(
51
- //
52
- (0, rxjs_1.tap)({
53
- error: (e) => {
54
- console.error(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Failed to load secrets`, e);
55
- },
56
- }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.repeat)({ delay: 5000 }))
57
- .pipe((0, utils_1.listWatch)((x) => x.secret.id, (account) => (0, rxjs_1.defer)(() => new rxjs_1.Observable((subscriber) => {
58
- console.info((0, utils_1.formatTime)(Date.now()), `[Primary] ${(0, utils_1.formatTime)(Date.now())} Starting worker for account ${account.secret.public_data.name} (${account.secret.id})`);
59
- if (account.secret.public_data.type !== 'api_key_okx')
60
- return;
61
- if (!account.secret.public_data.name)
62
- return;
63
- if (!account.decrypted_data)
64
- return;
65
- if (!account.decrypted_data.access_key)
66
- return;
67
- if (!account.decrypted_data.secret_key)
68
- return;
69
- if (!account.decrypted_data.passphrase)
70
- return;
71
- const worker = cluster_1.default.fork({
72
- ENCRYPTION_KEY_BASE58: '',
73
- ACCESS_KEY: account.decrypted_data.access_key,
74
- SECRET_KEY: account.decrypted_data.secret_key,
75
- PASSPHRASE: account.decrypted_data.passphrase,
76
- WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',
77
- TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,
78
- WORKER_LABEL: account.secret.public_data.name,
79
- });
80
- worker.on('message', (message) => {
81
- if (message.type === 'log') {
82
- logBuffer.next(`[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`);
83
- }
84
- });
85
- worker.on('exit', (code, signal) => {
86
- if (code === 0) {
87
- console.info(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Worker ${worker.process.pid} exited gracefully`);
88
- subscriber.complete();
89
- }
90
- else {
91
- console.error(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`);
92
- subscriber.error(new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`));
93
- }
94
- });
95
- return () => {
96
- worker.kill();
97
- console.info(`[Primary] ${(0, utils_1.formatTime)(Date.now())} Worker ${worker.process.pid} killed`);
98
- };
99
- })).pipe(
100
- //
101
- (0, rxjs_1.retry)({ delay: 1000 }), (0, rxjs_1.repeat)({ delay: 1000 })), (a, b) => a.secret.updated_at === b.secret.updated_at))
102
- .subscribe();
103
- }
104
- else {
105
- console.info(`${(0, utils_1.formatTime)(Date.now())} This is the worker process`, process.pid, process.env);
106
- Promise.resolve().then(() => __importStar(require('./index')));
107
- }
108
- //# sourceMappingURL=cluster.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../src/cluster.ts"],"names":[],"mappings":"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","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { loadSecrets } from '@yuants/secret';\nimport { formatTime, listWatch } from '@yuants/utils';\nimport cluster from 'cluster';\nimport { bufferTime, defer, filter, map, Observable, repeat, retry, Subject, tap } from 'rxjs';\nimport { overrideConsole } from './logger';\n\noverrideConsole();\n\nif (cluster.isPrimary) {\n console.info(`[Primary] ${formatTime(Date.now())} This is the primary process`);\n\n const logBuffer = new Subject<string>();\n\n logBuffer\n .pipe(\n //\n bufferTime(100),\n map((v) => v.join('\\n')),\n filter((v) => v.trim() !== ''),\n )\n .subscribe((message) => {\n console.info(message);\n });\n\n defer(() =>\n loadSecrets<{ access_key: string; secret_key: string; passphrase: string }>({\n terminal: Terminal.fromNodeEnv(),\n encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58!,\n }),\n )\n .pipe(\n //\n tap({\n error: (e) => {\n console.error(`[Primary] ${formatTime(Date.now())} Failed to load secrets`, e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 5000 }),\n )\n .pipe(\n listWatch(\n (x) => x.secret.id,\n (account) =>\n defer(\n () =>\n new Observable((subscriber) => {\n console.info(\n formatTime(Date.now()),\n `[Primary] ${formatTime(Date.now())} Starting worker for account ${\n account.secret.public_data.name\n } (${account.secret.id})`,\n );\n if (account.secret.public_data.type !== 'api_key_okx') return;\n if (!account.secret.public_data.name) return;\n if (!account.decrypted_data) return;\n if (!account.decrypted_data.access_key) return;\n if (!account.decrypted_data.secret_key) return;\n if (!account.decrypted_data.passphrase) return;\n\n const worker = cluster.fork({\n ENCRYPTION_KEY_BASE58: '',\n ACCESS_KEY: account.decrypted_data.access_key,\n SECRET_KEY: account.decrypted_data.secret_key,\n PASSPHRASE: account.decrypted_data.passphrase,\n WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',\n TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,\n WORKER_LABEL: account.secret.public_data.name,\n });\n\n worker.on('message', (message: any) => {\n if (message.type === 'log') {\n logBuffer.next(\n `[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`,\n );\n }\n });\n\n worker.on('exit', (code, signal) => {\n if (code === 0) {\n console.info(\n `[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited gracefully`,\n );\n subscriber.complete();\n } else {\n console.error(\n `[Primary] ${formatTime(Date.now())} Worker ${\n worker.process.pid\n } exited with code ${code} and signal ${signal}`,\n );\n subscriber.error(\n new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`),\n );\n }\n });\n return () => {\n worker.kill();\n console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} killed`);\n };\n }),\n ).pipe(\n //\n retry({ delay: 1000 }),\n repeat({ delay: 1000 }), // 重试间隔为 1 秒\n ),\n (a, b) => a.secret.updated_at === b.secret.updated_at,\n ),\n )\n .subscribe();\n} else {\n console.info(`${formatTime(Date.now())} This is the worker process`, process.pid, process.env);\n import('./index');\n}\n"]}