@primuslabs/por-client-sdk 0.1.23 → 0.1.24

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 (40) hide show
  1. package/README.md +1 -1
  2. package/dist/client/data_service_client.d.ts +5 -0
  3. package/dist/client/data_service_client.js +1 -0
  4. package/dist/client/data_service_client.js.map +1 -1
  5. package/dist/client/por_client.d.ts +3 -2
  6. package/dist/client/por_client.js +27 -5
  7. package/dist/client/por_client.js.map +1 -1
  8. package/dist/client/zktls_client.js +9 -0
  9. package/dist/client/zktls_client.js.map +1 -1
  10. package/dist/config_schema.d.ts +133 -3
  11. package/dist/config_schema.js +9 -3
  12. package/dist/config_schema.js.map +1 -1
  13. package/dist/datasource/aster.d.ts +2 -0
  14. package/dist/datasource/binance.d.ts +6 -0
  15. package/dist/datasource/bybit.d.ts +1 -0
  16. package/dist/datasource/datasource_manager.d.ts +2 -0
  17. package/dist/datasource/datasource_manager.js +4 -0
  18. package/dist/datasource/datasource_manager.js.map +1 -1
  19. package/dist/datasource/extended.d.ts +1 -0
  20. package/dist/datasource/grvt.d.ts +1 -0
  21. package/dist/datasource/helper.d.ts +3 -2
  22. package/dist/datasource/helper.js +48 -0
  23. package/dist/datasource/helper.js.map +1 -1
  24. package/dist/datasource/hyperliquid.d.ts +1 -0
  25. package/dist/datasource/lighter.d.ts +1 -0
  26. package/dist/datasource/moomoo.d.ts +22 -0
  27. package/dist/datasource/moomoo.js +28 -0
  28. package/dist/datasource/moomoo.js.map +1 -0
  29. package/dist/datasource/okx.d.ts +1 -0
  30. package/dist/datasource/pacifica.d.ts +1 -0
  31. package/dist/index.d.ts +1 -0
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/paths.d.ts +22 -0
  35. package/dist/paths.js +63 -0
  36. package/dist/paths.js.map +1 -0
  37. package/dist/scheduler.d.ts +5 -3
  38. package/dist/scheduler.js +18 -9
  39. package/dist/scheduler.js.map +1 -1
  40. package/package.json +4 -3
@@ -3,6 +3,7 @@ import { Binance } from "./binance.js";
3
3
  import { Aster } from "./aster.js";
4
4
  import { Grvt } from "./grvt.js";
5
5
  import { Bybit } from "./bybit.js";
6
+ import { Moomoo } from "./moomoo.js";
6
7
  import { Okx } from "./okx.js";
7
8
  import { Hyperliquid } from "./hyperliquid.js";
8
9
  import { Pacifica } from "./pacifica.js";
@@ -20,6 +21,7 @@ export declare class DatasourceManager {
20
21
  readonly aster?: Aster;
21
22
  readonly grvt?: Grvt;
22
23
  readonly bybit?: Bybit;
24
+ readonly moomoo?: Moomoo;
23
25
  readonly okx?: Okx;
24
26
  readonly hyperliquid?: Hyperliquid;
25
27
  readonly pacifica?: Pacifica;
@@ -2,6 +2,7 @@ import { Binance } from "./binance.js";
2
2
  import { Aster } from "./aster.js";
3
3
  import { Grvt } from "./grvt.js";
4
4
  import { Bybit } from "./bybit.js";
5
+ import { Moomoo } from "./moomoo.js";
5
6
  import { Okx } from "./okx.js";
6
7
  import { Hyperliquid } from "./hyperliquid.js";
7
8
  import { Pacifica } from "./pacifica.js";
@@ -19,6 +20,7 @@ export class DatasourceManager {
19
20
  aster;
20
21
  grvt;
21
22
  bybit;
23
+ moomoo;
22
24
  okx;
23
25
  hyperliquid;
24
26
  pacifica;
@@ -33,6 +35,8 @@ export class DatasourceManager {
33
35
  this.grvt = new Grvt(config.grvt);
34
36
  if (config.bybit)
35
37
  this.bybit = new Bybit(config.bybit);
38
+ if (config.moomoo)
39
+ this.moomoo = new Moomoo(config.moomoo);
36
40
  if (config.okx)
37
41
  this.okx = new Okx(config.okx);
38
42
  if (config.hyperliquid)
@@ -1 +1 @@
1
- {"version":3,"file":"datasource_manager.js","sourceRoot":"","sources":["../../src/datasource/datasource_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IACZ,OAAO,CAAW;IAClB,KAAK,CAAS;IACd,IAAI,CAAQ;IACZ,KAAK,CAAS;IACd,GAAG,CAAO;IACV,WAAW,CAAe;IAC1B,QAAQ,CAAY;IACpB,QAAQ,CAAY;IACpB,OAAO,CAAW;IAElC,YAAY,MAAwB;QAClC,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;CACF"}
1
+ {"version":3,"file":"datasource_manager.js","sourceRoot":"","sources":["../../src/datasource/datasource_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IACZ,OAAO,CAAW;IAClB,KAAK,CAAS;IACd,IAAI,CAAQ;IACZ,KAAK,CAAS;IACd,MAAM,CAAU;IAChB,GAAG,CAAO;IACV,WAAW,CAAe;IAC1B,QAAQ,CAAY;IACpB,QAAQ,CAAY;IACpB,OAAO,CAAW;IAElC,YAAY,MAAwB;QAClC,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;CACF"}
@@ -15,6 +15,7 @@ export declare class Extended extends BaseExchange<ExtendedAccount, ExtendedKind
15
15
  accountIndex: string;
16
16
  poolIndex: string;
17
17
  passphrase: string;
18
+ requestFile: string;
18
19
  kind: "main"[];
19
20
  }[];
20
21
  getV1UserBalance(verifyType?: VERIFY_TYPE): RequestParamsOutput;
@@ -20,6 +20,7 @@ export declare class Grvt extends BaseExchange<GrvtAccount, GrvtKind> {
20
20
  accountIndex: string;
21
21
  poolIndex: string;
22
22
  passphrase: string;
23
+ requestFile: string;
23
24
  kind: "main"[];
24
25
  }[];
25
26
  private authCache;
@@ -2,9 +2,10 @@ import { VERIFY_TYPE, RequestParams, RequestParamsOutput } from "../types.js";
2
2
  export declare function signQuery(secretKey: string, params: any): string;
3
3
  export declare function mergeManyRequestParams(list: RequestParamsOutput[]): RequestParamsOutput;
4
4
  export interface OrigRequest {
5
- url: any;
5
+ url: string;
6
6
  method?: string;
7
7
  body?: any;
8
- headers?: any;
8
+ headers?: Record<string, string>;
9
9
  }
10
10
  export declare function makeZkTlsRequestParams(origRequests: OrigRequest[], verifyType?: VERIFY_TYPE, options?: any): RequestParams;
11
+ export declare function readRequestFile(filepath: string): OrigRequest[];
@@ -1,3 +1,4 @@
1
+ import fs from 'fs';
1
2
  import { createHmac } from "node:crypto";
2
3
  export function signQuery(secretKey, params) {
3
4
  const query = new URLSearchParams(params).toString();
@@ -58,4 +59,51 @@ export function makeZkTlsRequestParams(origRequests, verifyType = 'HASH_COMPARIS
58
59
  }
59
60
  throw Error("not supported verify type");
60
61
  }
62
+ export function readRequestFile(filepath) {
63
+ try {
64
+ if (!fs.existsSync(filepath)) {
65
+ throw new Error(`File not found: ${filepath}`);
66
+ }
67
+ const content = fs.readFileSync(filepath, "utf-8");
68
+ if (!content || content.trim() === '') {
69
+ throw new Error(`${filepath} is empty`);
70
+ }
71
+ let data;
72
+ try {
73
+ data = JSON.parse(content);
74
+ }
75
+ catch (parseError) {
76
+ throw new Error(`Invalid JSON in ${filepath}: ${parseError instanceof Error ? parseError.message : String(parseError)}`);
77
+ }
78
+ if (!Array.isArray(data)) {
79
+ throw new Error(`Parsed data is not an array in ${filepath}`);
80
+ }
81
+ if (data.length === 0) {
82
+ throw new Error(`${filepath} contains empty array`);
83
+ }
84
+ const errors = [];
85
+ const validRequests = [];
86
+ data.forEach((item, index) => {
87
+ if (!item || typeof item !== 'object' || Array.isArray(item)) {
88
+ errors.push(`Item ${index} is not an object`);
89
+ return;
90
+ }
91
+ // to-do: more check
92
+ const validRequest = {
93
+ url: item.url,
94
+ method: item.method,
95
+ body: item.body,
96
+ headers: item.headers,
97
+ };
98
+ validRequests.push(validRequest);
99
+ });
100
+ if (errors.length > 0) {
101
+ throw new Error(`Validation errors in ${filepath}:\n${errors.join('\n')}`);
102
+ }
103
+ return validRequests;
104
+ }
105
+ catch (error) {
106
+ throw error;
107
+ }
108
+ }
61
109
  //# sourceMappingURL=helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/datasource/helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/datasource/helper.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export declare class Hyperliquid extends BaseExchange<HyperliquidAccount, Hyperl
15
15
  accountIndex: string;
16
16
  poolIndex: string;
17
17
  passphrase: string;
18
+ requestFile: string;
18
19
  kind: "main"[];
19
20
  }[];
20
21
  getInfo(verifyType?: VERIFY_TYPE): RequestParamsOutput;
@@ -15,6 +15,7 @@ export declare class Lighter extends BaseExchange<LighterAccount, LighterKind> {
15
15
  accountIndex: string;
16
16
  poolIndex: string;
17
17
  passphrase: string;
18
+ requestFile: string;
18
19
  kind: "main"[];
19
20
  }[];
20
21
  getV1Account(verifyType?: VERIFY_TYPE): RequestParamsOutput;
@@ -0,0 +1,22 @@
1
+ import { VERIFY_TYPE, RequestParamsOutput } from "../types.js";
2
+ import { MoomooKind, MoomooAccount, DatasourceConfig } from "../config_schema.js";
3
+ import { BaseExchange } from "./base_exchange.js";
4
+ export declare class Moomoo extends BaseExchange<MoomooAccount, MoomooKind> {
5
+ constructor(accounts?: DatasourceConfig["moomoo"]);
6
+ get hasMain(): boolean;
7
+ get mainAccounts(): {
8
+ apiKey: string;
9
+ apiSecret: string;
10
+ enabled: boolean;
11
+ description: string;
12
+ subAccountId: string;
13
+ vaultId: string;
14
+ address: string;
15
+ accountIndex: string;
16
+ poolIndex: string;
17
+ passphrase: string;
18
+ requestFile: string;
19
+ kind: "main"[];
20
+ }[];
21
+ getByRequestFile(verifyType?: VERIFY_TYPE): RequestParamsOutput;
22
+ }
@@ -0,0 +1,28 @@
1
+ import { makeZkTlsRequestParams, readRequestFile } from "./helper.js";
2
+ import { BaseExchange } from "./base_exchange.js";
3
+ import paths from "../paths.js";
4
+ export class Moomoo extends BaseExchange {
5
+ constructor(accounts) {
6
+ super(accounts);
7
+ }
8
+ get hasMain() { return this.mainAccounts.length > 0; }
9
+ get mainAccounts() { return this.getAccounts("main"); }
10
+ ///
11
+ /// =======================================================================
12
+ ///
13
+ /// User request file
14
+ getByRequestFile(verifyType = 'HASH_COMPARISON') {
15
+ if (!this.hasMain)
16
+ return undefined;
17
+ const origRequests = [];
18
+ for (const acc of this.mainAccounts) {
19
+ if (!acc.requestFile || acc.requestFile == "") {
20
+ throw new Error("Moomoo requestFile is empty!");
21
+ }
22
+ const requests = readRequestFile(`${paths.requestDataDir}/${acc.requestFile}`);
23
+ origRequests.push(...requests);
24
+ }
25
+ return makeZkTlsRequestParams(origRequests, verifyType);
26
+ }
27
+ }
28
+ //# sourceMappingURL=moomoo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moomoo.js","sourceRoot":"","sources":["../../src/datasource/moomoo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,MAAM,OAAO,MAAO,SAAQ,YAAuC;IACjE,YAAY,QAAqC;QAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAGvD,GAAG;IACH,2EAA2E;IAC3E,GAAG;IAGH,qBAAqB;IACd,gBAAgB,CAAC,aAA0B,iBAAiB;QACjE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAEpC,MAAM,YAAY,GAAU,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;YACD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,KAAK,CAAC,cAAc,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/E,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -15,6 +15,7 @@ export declare class Okx extends BaseExchange<OkxAccount, OkxKind> {
15
15
  accountIndex: string;
16
16
  poolIndex: string;
17
17
  passphrase: string;
18
+ requestFile: string;
18
19
  kind: "main"[];
19
20
  }[];
20
21
  getV5AccountBalance(verifyType?: VERIFY_TYPE): RequestParamsOutput;
@@ -15,6 +15,7 @@ export declare class Pacifica extends BaseExchange<PacificaAccount, PacificaKind
15
15
  accountIndex: string;
16
16
  poolIndex: string;
17
17
  passphrase: string;
18
+ requestFile: string;
18
19
  kind: "main"[];
19
20
  }[];
20
21
  getV1Account(verifyType?: VERIFY_TYPE): RequestParamsOutput;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./types";
2
2
  export * from "./utils";
3
+ export * from "./paths";
3
4
  export * from "./client";
4
5
  export * from "./datasource";
5
6
  export { loadConfigFromFile } from "./config_schema";
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./types";
2
2
  export * from "./utils";
3
+ export * from "./paths";
3
4
  export * from "./client";
4
5
  export * from "./datasource";
5
6
  export { loadConfigFromFile } from "./config_schema";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare const getRootDir: () => "/app" | ".";
2
+ export declare const getConfigFilePath: () => string;
3
+ export declare const getCacheDir: () => string;
4
+ export declare const getStateFilePath: () => string;
5
+ export declare const getRequestDataDir: () => string;
6
+ export declare const ensureDirectory: (dirPath: string) => string;
7
+ export declare const ensureFile: (filePath: string) => string;
8
+ export declare const initializePaths: () => {
9
+ configFilePath: string;
10
+ cacheDir: string;
11
+ stateFilePath: string;
12
+ requestDataDir: string;
13
+ isDocker: boolean;
14
+ };
15
+ export declare const paths: {
16
+ configFilePath: string;
17
+ cacheDir: string;
18
+ stateFilePath: string;
19
+ requestDataDir: string;
20
+ isDocker: boolean;
21
+ };
22
+ export default paths;
package/dist/paths.js ADDED
@@ -0,0 +1,63 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import isDocker from 'is-docker';
4
+ export const getRootDir = () => {
5
+ return isDocker() ? '/app' : ".";
6
+ };
7
+ export const getConfigFilePath = () => {
8
+ if (process.env.CONFIG_FILE_PATH) {
9
+ return process.env.CONFIG_FILE_PATH;
10
+ }
11
+ return path.join(getRootDir(), '.config.yml');
12
+ };
13
+ export const getCacheDir = () => {
14
+ if (process.env.CACHE_DIR) {
15
+ return process.env.CACHE_DIR;
16
+ }
17
+ return isDocker() ? '/app/.cache' : './.cache';
18
+ };
19
+ export const getStateFilePath = () => {
20
+ if (process.env.STATE_FILE_PATH) {
21
+ return process.env.STATE_FILE_PATH;
22
+ }
23
+ return path.join(getCacheDir(), 'state.json');
24
+ };
25
+ export const getRequestDataDir = () => {
26
+ if (process.env.REQUEST_DATA_DIR) {
27
+ return process.env.REQUEST_DATA_DIR;
28
+ }
29
+ return isDocker() ? '/app/request_data' : './request_data';
30
+ };
31
+ export const ensureDirectory = (dirPath) => {
32
+ if (!fs.existsSync(dirPath)) {
33
+ fs.mkdirSync(dirPath, { recursive: true });
34
+ }
35
+ return dirPath;
36
+ };
37
+ export const ensureFile = (filePath) => {
38
+ const dir = path.dirname(filePath);
39
+ ensureDirectory(dir);
40
+ if (!fs.existsSync(filePath)) {
41
+ fs.writeFileSync(filePath, '');
42
+ }
43
+ return filePath;
44
+ };
45
+ export const initializePaths = () => {
46
+ const paths = {
47
+ configFilePath: getConfigFilePath(),
48
+ cacheDir: getCacheDir(),
49
+ stateFilePath: getStateFilePath(),
50
+ requestDataDir: getRequestDataDir(),
51
+ isDocker: isDocker()
52
+ };
53
+ ensureDirectory(paths.cacheDir);
54
+ ensureFile(paths.stateFilePath);
55
+ console.log(` Is Docker: ${paths.isDocker}`);
56
+ console.log(` Config File: ${paths.configFilePath}`);
57
+ console.log(` State File: ${paths.stateFilePath}`);
58
+ console.log(` Request Data Dir: ${paths.requestDataDir}`);
59
+ return paths;
60
+ };
61
+ export const paths = initializePaths();
62
+ export default paths;
63
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- type JobFn = () => Promise<void>;
1
+ type JobFn = (scheduler: Scheduler) => Promise<void>;
2
2
  interface SchedulerOptions {
3
3
  intervalMs: number;
4
4
  shouldStop?: (err: any) => boolean;
@@ -6,13 +6,15 @@ interface SchedulerOptions {
6
6
  stateFile?: string;
7
7
  }
8
8
  export declare class Scheduler {
9
- private job;
9
+ private jobFn;
10
10
  private opts;
11
11
  private stopped;
12
12
  private lastSigintTime;
13
13
  private sigintCount;
14
+ private intervalMs;
14
15
  private stateFile?;
15
- constructor(job: JobFn, opts: SchedulerOptions);
16
+ constructor(jobFn: JobFn, opts: SchedulerOptions);
17
+ updateInterval(newInterval: number): void;
16
18
  stop(signal?: string): void;
17
19
  start(): Promise<void>;
18
20
  }
package/dist/scheduler.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { sleepMs } from "./utils.js";
2
2
  import fs from "fs";
3
3
  import path from "path";
4
+ import paths from "./paths.js";
4
5
  function readState(file) {
5
6
  try {
6
7
  if (!fs.existsSync(file))
@@ -23,21 +24,29 @@ function writeState(file, state) {
23
24
  }
24
25
  }
25
26
  export class Scheduler {
26
- job;
27
+ jobFn;
27
28
  opts;
28
29
  stopped = false;
29
30
  lastSigintTime = 0;
30
31
  sigintCount = 0;
32
+ intervalMs; // ms
31
33
  stateFile;
32
- constructor(job, opts) {
33
- this.job = job;
34
+ constructor(jobFn, opts) {
35
+ this.jobFn = jobFn;
34
36
  this.opts = opts;
35
37
  if (!this.opts.stopMode)
36
38
  this.opts.stopMode = "delayed";
37
- this.stateFile = opts.stateFile;
39
+ this.stateFile = opts.stateFile ?? paths.stateFilePath;
40
+ this.intervalMs = opts.intervalMs;
38
41
  process.on("SIGTERM", () => this.stop("SIGTERM"));
39
42
  process.on("SIGINT", () => this.stop("SIGINT"));
40
43
  }
44
+ updateInterval(newInterval) {
45
+ if (newInterval !== this.intervalMs) {
46
+ this.intervalMs = newInterval;
47
+ console.log(`Interval updated to ${this.intervalMs} ms`);
48
+ }
49
+ }
41
50
  stop(signal) {
42
51
  if (signal && signal !== "SIGINT") {
43
52
  console.log(`🛑 Received ${signal}.`);
@@ -56,13 +65,12 @@ export class Scheduler {
56
65
  this.stopped = true;
57
66
  }
58
67
  async start() {
59
- const { intervalMs } = this.opts;
60
- console.log(`Start Scheduler at ${new Date().toISOString()} with job interval: ${intervalMs} (ms)`);
68
+ console.log(`Start Scheduler at ${new Date().toISOString()} with job interval: ${this.intervalMs} ms`);
61
69
  if (this.stateFile) {
62
70
  const state = readState(this.stateFile);
63
71
  if (state?.lastStartedAt) {
64
72
  const elapsed = Date.now() - state.lastStartedAt;
65
- const delay = intervalMs - elapsed;
73
+ const delay = this.intervalMs - elapsed;
66
74
  if (delay > 0) {
67
75
  console.log(`⏳ Recovering schedule, wait the next in ${delay / 1000.0} s`);
68
76
  await sleepMs(delay);
@@ -77,14 +85,15 @@ export class Scheduler {
77
85
  console.log("🚀 job start", new Date(startedAt).toISOString());
78
86
  let shouldStop = false;
79
87
  try {
80
- await this.job();
88
+ await this.jobFn(this);
81
89
  }
82
90
  catch (err) {
91
+ console.log("job error:", err);
83
92
  shouldStop = this.opts.shouldStop?.(err) ?? false;
84
93
  }
85
94
  console.log("✅ job done", new Date().toISOString());
86
95
  const elapsedMs = Date.now() - startedAt;
87
- const delayMs = Math.max(0, intervalMs - elapsedMs);
96
+ const delayMs = Math.max(0, this.intervalMs - elapsedMs);
88
97
  if (shouldStop && this.opts.stopMode === "immediate") {
89
98
  console.log("🔁 stop immediately due to error");
90
99
  this.stopped = true;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primuslabs/por-client-sdk",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "author": "Primus Labs <dev@primuslabs.org>",
5
5
  "description": "Primus PoR client sdk",
6
6
  "license": "ISC",
@@ -33,6 +33,7 @@
33
33
  "dotenv": "^16.3.1",
34
34
  "ethers": "^5.7.2",
35
35
  "form-data": "^4.0.4",
36
+ "is-docker": "^4.0.0",
36
37
  "js-yaml": "^4.1.1",
37
38
  "undici": "^7.16.0",
38
39
  "uuid": "^13.0.0",
@@ -42,9 +43,9 @@
42
43
  "@types/jest": "^30.0.0",
43
44
  "@types/js-yaml": "^4.0.9",
44
45
  "@types/node": "^24.10.2",
45
- "tsx": "^4.21.0",
46
46
  "ts-jest": "^29.4.6",
47
47
  "ts-node": "^10.9.2",
48
+ "tsx": "^4.21.0",
48
49
  "typescript": "^5.9.3"
49
50
  }
50
- }
51
+ }