@primuslabs/por-client-sdk 0.1.0

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 (47) hide show
  1. package/README.md +91 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +52 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/client/data_service_client.d.ts +18 -0
  6. package/dist/client/data_service_client.js +40 -0
  7. package/dist/client/data_service_client.js.map +1 -0
  8. package/dist/client/index.d.ts +3 -0
  9. package/dist/client/index.js +4 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/client/por_client.d.ts +12 -0
  12. package/dist/client/por_client.js +36 -0
  13. package/dist/client/por_client.js.map +1 -0
  14. package/dist/client/prover_client.d.ts +14 -0
  15. package/dist/client/prover_client.js +121 -0
  16. package/dist/client/prover_client.js.map +1 -0
  17. package/dist/client/zktls_client.d.ts +32 -0
  18. package/dist/client/zktls_client.js +213 -0
  19. package/dist/client/zktls_client.js.map +1 -0
  20. package/dist/config.d.ts +16 -0
  21. package/dist/config.js +53 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/datasource/binance.d.ts +14 -0
  24. package/dist/datasource/binance.js +55 -0
  25. package/dist/datasource/binance.js.map +1 -0
  26. package/dist/datasource/helper.d.ts +2 -0
  27. package/dist/datasource/helper.js +34 -0
  28. package/dist/datasource/helper.js.map +1 -0
  29. package/dist/datasource/index.d.ts +2 -0
  30. package/dist/datasource/index.js +3 -0
  31. package/dist/datasource/index.js.map +1 -0
  32. package/dist/datasource/okx.d.ts +5 -0
  33. package/dist/datasource/okx.js +17 -0
  34. package/dist/datasource/okx.js.map +1 -0
  35. package/dist/error.d.ts +8 -0
  36. package/dist/error.js +14 -0
  37. package/dist/error.js.map +1 -0
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.js +5 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/types.d.ts +17 -0
  42. package/dist/types.js +12 -0
  43. package/dist/types.js.map +1 -0
  44. package/dist/utils.d.ts +12 -0
  45. package/dist/utils.js +38 -0
  46. package/dist/utils.js.map +1 -0
  47. package/package.json +46 -0
package/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # PoR Client SDK
2
+
3
+ ## Overview
4
+
5
+ The **PoR Client SDK** provides a client for interacting with **zkTLS** and **zkVM**, supporting authentication, program execution, and optional blockchain integration.
6
+
7
+
8
+ ## Build
9
+
10
+ Install dependencies and build the project:
11
+
12
+ ```bash
13
+ npm install
14
+ npm run build
15
+ ```
16
+
17
+
18
+ ## Getting Started
19
+
20
+ 1. Copy `.env.example` to `.env` and configure your environment variables (see [Configuration](#configuration)).
21
+
22
+ 2. Ensure required fields are set:
23
+
24
+ * `TOKEN` and `PROJECT_ID` for authentication
25
+ * `PROGRAM_ID` for program execution
26
+
27
+ 3. Run an example:
28
+
29
+ ```bash
30
+ npx tsx example/okx.ts
31
+ ```
32
+
33
+
34
+ ## Configuration
35
+
36
+ The SDK allows flexible configuration from **three sources**, applied in **priority order (highest to lowest)**:
37
+
38
+ 1. **Environment variables** (`.env` or `process.env`)
39
+ 2. **User-provided options** (passed to the `PoRClient` constructor)
40
+ 3. **Default values** defined in the SDK
41
+
42
+ > Higher-priority values overwrite lower-priority values.
43
+
44
+ ### Configuration Fields and Defaults
45
+
46
+ | Env Variable | SDK Field | Type | Required / Conditions | Default | Description |
47
+ | ------------------ | ---------------- | ------ | --------------------- | -------------------------------------- | ---------------------------------------------------------- |
48
+ | `TOKEN` | `token` | string | Required | `""` | Authentication token assigned by Primus Labs. |
49
+ | `PROJECT_ID` | `projectId` | string | Required | `""` | Project identifier associated with your account. |
50
+ | `PROGRAM_ID` | `programId` | string | Required | `""` | Program identifier for zkVM execution. |
51
+ | `LOG_VERBOSE` | `logVerbose` | number | Optional | `0` | Logging verbosity level (`0` = off; higher = more detail). |
52
+ | `RPC_URL` | `rpcUrl` | string | Optional | `https://mainnet.base.org` | RPC endpoint for blockchain interactions. |
53
+
54
+
55
+ ### User-provided Configuration Example
56
+
57
+ ```ts
58
+ import { PoRClient } from "@primuslabs/por-client-sdk";
59
+
60
+ const client = new PoRClient({
61
+ token: "my-token",
62
+ projectId: "my-project",
63
+ programId: "my-program",
64
+ logVerbose: 2,
65
+ });
66
+ ```
67
+
68
+
69
+ ## Using the SDK
70
+
71
+ ```ts
72
+ import { DataSource, PoRClient } from "@primuslabs/por-client-sdk";
73
+
74
+ async function main() {
75
+ const ds = new DataSource.Okx();
76
+ const requestParams = ds.getSampleRequests();
77
+
78
+ const client = new PoRClient();
79
+ const result = await client.run(requestParams);
80
+
81
+ console.log("Result:", JSON.stringify(result));
82
+ }
83
+
84
+ main();
85
+ ```
86
+
87
+
88
+ ## Data Sources
89
+
90
+ > TODO: Document supported data sources and sample requests.
91
+
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { ProverClient } from "./client/prover_client.js";
4
+ import fs from "fs";
5
+ async function main() {
6
+ const api = new ProverClient();
7
+ const program = new Command();
8
+ program
9
+ .command("uploadProgram")
10
+ .description("uploadProgram.")
11
+ .requiredOption("--filepath <FILEPATH>", "Program file path")
12
+ .option("--name <NAME>", "Program Name", "Default Name")
13
+ .option("--version <VERSION>", "Version number", "1.0")
14
+ .option("--description <DESCRIPTION>", "Description", "Default description.")
15
+ .action(async (opts) => {
16
+ console.log("uploadProgram");
17
+ const result = await api.uploadProgram(opts.filepath, 'My Program', '1.0', 'Program description');
18
+ console.log('Program uploaded, ID:', result.program_id);
19
+ });
20
+ program
21
+ .command("submitTask")
22
+ .description("submitTask.")
23
+ .requiredOption("--filepath <FILEPATH>", "Attestation data file path")
24
+ .action(async (opts) => {
25
+ console.log("submitTask");
26
+ const attestation_data = fs.readFileSync(opts.filepath, { encoding: "utf-8" });
27
+ const result = await api.submitTask(attestation_data);
28
+ console.log('Task submitted:', result);
29
+ });
30
+ program
31
+ .command("getResult")
32
+ .description("getResult.")
33
+ .requiredOption("--taskId <TASK_ID>", "Task id")
34
+ .action(async (opts) => {
35
+ console.log("getResult");
36
+ const result = await api.getResult(opts.taskId);
37
+ console.log('getResult:', result);
38
+ });
39
+ program
40
+ .command("submitTaskAndGetResult")
41
+ .description("submitTask and getResult.")
42
+ .requiredOption("--filepath <FILEPATH>", "Attestation data file path")
43
+ .action(async (opts) => {
44
+ console.log("submitTask and getResult.");
45
+ const attestation_data = fs.readFileSync(opts.filepath, { encoding: "utf-8" });
46
+ const result = await api.doZkVM(attestation_data);
47
+ console.log('result:', result);
48
+ });
49
+ program.parseAsync();
50
+ }
51
+ main();
52
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,cAAc,CAAC,uBAAuB,EAAE,mBAAmB,CAAC;SAC5D,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC;SACvD,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACtD,MAAM,CAAC,6BAA6B,EAAE,aAAa,EAAE,sBAAsB,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,aAAa,CAAC;SAC1B,cAAc,CAAC,uBAAuB,EAAE,4BAA4B,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,YAAY,CAAC;SACzB,cAAc,CAAC,oBAAoB,EAAE,SAAS,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAGL,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,2BAA2B,CAAC;SACxC,cAAc,CAAC,uBAAuB,EAAE,4BAA4B,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface ApiResponse<T> {
2
+ rc: 0 | 1;
3
+ mc: string;
4
+ msg: string;
5
+ result: T;
6
+ }
7
+ export interface SubmitTaskResult {
8
+ taskId: string;
9
+ taskTxHash: string;
10
+ taskAttestors: string[];
11
+ }
12
+ export declare class DataServiceClient {
13
+ private readonly client;
14
+ constructor(baseURL: string, timeout?: number);
15
+ submitTask(bizId: string, projectId: string, token: string): Promise<SubmitTaskResult>;
16
+ checkPayment(bizId: string, projectId: string, token: string): Promise<void>;
17
+ private unwrap;
18
+ }
@@ -0,0 +1,40 @@
1
+ import axios from "axios";
2
+ import { ClientError } from "../error.js";
3
+ export class DataServiceClient {
4
+ client;
5
+ constructor(baseURL, timeout = 30_000) {
6
+ this.client = axios.create({ baseURL, timeout });
7
+ }
8
+ async submitTask(bizId, projectId, token) {
9
+ const res = await this.client.get("/public/program/submitTask", {
10
+ params: { bizId, projectId },
11
+ headers: {
12
+ "POR-TOKEN": token,
13
+ },
14
+ });
15
+ const raw = this.unwrap('submitTask', res.data);
16
+ return {
17
+ taskId: raw.taskId,
18
+ taskTxHash: raw.taskTxHash,
19
+ taskAttestors: raw.taskAttestors,
20
+ };
21
+ }
22
+ async checkPayment(bizId, projectId, token) {
23
+ const res = await this.client.get("/public/program/payment/check", {
24
+ params: { bizId, projectId },
25
+ headers: {
26
+ "POR-TOKEN": token,
27
+ },
28
+ });
29
+ this.unwrap('checkPayment', res.data);
30
+ }
31
+ unwrap(op, data) {
32
+ if (data.rc === 0) {
33
+ return data.result;
34
+ }
35
+ // data.rc === 1
36
+ const { mc, msg } = data;
37
+ throw new ClientError("72001", `${op} failed`, { op, mc, msg });
38
+ }
39
+ }
40
+ //# sourceMappingURL=data_service_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data_service_client.js","sourceRoot":"","sources":["../../src/client/data_service_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe1C,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAgB;IACvC,YAAY,OAAe,EAAE,UAAkB,MAAM;QACnD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,UAAU,CACd,KAAa,EACb,SAAiB,EACjB,KAAa;QAEb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAC/B,4BAA4B,EAC5B;YACE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC5B,OAAO,EAAE;gBACP,WAAW,EAAE,KAAK;aACnB;SACF,CACF,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;SACjC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,KAAa,EACb,SAAiB,EACjB,KAAa;QAEb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAC/B,+BAA+B,EAC/B;YACE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC5B,OAAO,EAAE;gBACP,WAAW,EAAE,KAAK;aACnB;SACF,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAGO,MAAM,CAAI,EAAU,EAAE,IAAoB;QAChD,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,gBAAgB;QAChB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export * from "./zktls_client";
2
+ export * from "./prover_client";
3
+ export * from "./por_client";
@@ -0,0 +1,4 @@
1
+ export * from "./zktls_client";
2
+ export * from "./prover_client";
3
+ export * from "./por_client";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Options, RequestParamsInput } from "../types.js";
2
+ import { SdkConfig } from "../config.js";
3
+ export declare class PoRClient {
4
+ private readonly config;
5
+ private zktlsClient;
6
+ private proverClient;
7
+ constructor(config?: SdkConfig);
8
+ /**
9
+ * zkTLS + zkVM (optional)
10
+ */
11
+ run(requestParams: RequestParamsInput, options?: Options): Promise<any>;
12
+ }
@@ -0,0 +1,36 @@
1
+ import { saveToFile } from "../utils.js";
2
+ import { getDefaultOptions } from "../types.js";
3
+ import { ZkTLSClient } from "./zktls_client.js";
4
+ import { ProverClient } from "./prover_client.js";
5
+ import { resolveSdkConfig, printConfig } from "../config.js";
6
+ export class PoRClient {
7
+ config;
8
+ zktlsClient;
9
+ proverClient;
10
+ constructor(config = {}) {
11
+ this.config = resolveSdkConfig(config);
12
+ printConfig(this.config, 'PoRClient');
13
+ this.zktlsClient = new ZkTLSClient(this.config);
14
+ this.proverClient = new ProverClient(this.config);
15
+ }
16
+ /**
17
+ * zkTLS + zkVM (optional)
18
+ */
19
+ async run(requestParams, options = {}) {
20
+ const opts = getDefaultOptions(options);
21
+ console.log("do zkTLS");
22
+ const attestationData = await this.zktlsClient.doZkTLS(requestParams, opts);
23
+ if (attestationData) {
24
+ // optional
25
+ saveToFile("attestation.json", JSON.stringify(attestationData));
26
+ }
27
+ if (opts.runZkvm && attestationData) {
28
+ console.log("do zkVM");
29
+ const result = await this.proverClient.doZkVM(JSON.stringify(attestationData));
30
+ console.log("result", result);
31
+ return result;
32
+ }
33
+ return attestationData;
34
+ }
35
+ }
36
+ //# sourceMappingURL=por_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"por_client.js","sourceRoot":"","sources":["../../src/client/por_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAW,iBAAiB,EAAsB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAa,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAExE,MAAM,OAAO,SAAS;IACH,MAAM,CAAsB;IACrC,WAAW,CAAc;IACzB,YAAY,CAAe;IAEnC,YAAY,SAAoB,EAAE;QAChC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,aAAiC,EAAE,UAAmB,EAAE;QAChE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAExC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC5E,IAAI,eAAe,EAAE,CAAC;YACpB,WAAW;YACX,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { SdkConfig } from "../config.js";
2
+ export declare class ProverClient {
3
+ private readonly config;
4
+ private client;
5
+ constructor(config?: SdkConfig, timeout?: number);
6
+ uploadProgram(filePath: string, name: string, version: string, desc: string, prover?: string): Promise<any>;
7
+ submitTask(attestationData: string): Promise<any>;
8
+ getResult(taskId: string): Promise<any>;
9
+ private unwrap;
10
+ submitTaskWithRetry(attestationData: string, maxRetries?: number, baseDelay?: number): Promise<any>;
11
+ getResultWithTimeout(taskId: string, timeoutMs?: number, intervalMs?: number): Promise<any>;
12
+ private _doZkVM;
13
+ doZkVM(attestationData: string): Promise<any>;
14
+ }
@@ -0,0 +1,121 @@
1
+ import axios from "axios";
2
+ import FormData from "form-data";
3
+ import fs from "fs";
4
+ import { resolveSdkConfig } from "../config.js";
5
+ import { ClientError } from "../error.js";
6
+ import { sleepMs, mockErrorReport, makeErrData } from "../utils.js";
7
+ export class ProverClient {
8
+ config;
9
+ client;
10
+ constructor(config = {}, timeout = 30_000) {
11
+ this.config = resolveSdkConfig(config);
12
+ this.client = axios.create({ baseURL: this.config.zkvmServiceUrl, timeout });
13
+ }
14
+ async uploadProgram(filePath, name, version, desc, prover = "succinct") {
15
+ const form = new FormData();
16
+ form.append("file", fs.createReadStream(filePath));
17
+ form.append("prover", prover);
18
+ form.append("name", name);
19
+ form.append("version", version);
20
+ form.append("desc", desc);
21
+ const res = await this.client.post("/uploadProgram", form, {
22
+ headers: form.getHeaders()
23
+ });
24
+ return this.unwrap("uploadProgram", res.data);
25
+ }
26
+ async submitTask(attestationData) {
27
+ const form = new FormData();
28
+ form.append("zktls_mode", this.config.zktlsMode);
29
+ form.append("token", this.config.token);
30
+ form.append("project_id", this.config.projectId);
31
+ form.append("program_id", this.config.programId);
32
+ form.append("attestation_data", attestationData);
33
+ const res = await this.client.post("/submitTask", form, {
34
+ headers: form.getHeaders()
35
+ });
36
+ return this.unwrap("submitTask", res.data);
37
+ }
38
+ async getResult(taskId) {
39
+ const res = await this.client.get("/getResult", {
40
+ params: { task_id: taskId }
41
+ });
42
+ return this.unwrap("getResult", res.data);
43
+ }
44
+ unwrap(op, data) {
45
+ if (data.rc === 0) {
46
+ return data.result;
47
+ }
48
+ // data.rc === 1
49
+ const { mc, msg } = data;
50
+ throw new ClientError("73001", `${op} failed`, { op, mc, msg });
51
+ }
52
+ async submitTaskWithRetry(attestationData, maxRetries = 4, baseDelay = 1000) {
53
+ let attempt = 0;
54
+ const start = Date.now();
55
+ console.log("Submitting task...");
56
+ while (true) {
57
+ try {
58
+ const result = await this.submitTask(attestationData);
59
+ console.log(`Submitting task done (${Date.now() - start}ms):`, result);
60
+ return result;
61
+ }
62
+ catch (err) {
63
+ const NO_RETRY_CODES = ["73001"]; // from zkvm
64
+ if (err instanceof ClientError && NO_RETRY_CODES.includes(err.code))
65
+ throw err;
66
+ attempt++;
67
+ if (attempt > maxRetries) {
68
+ throw new ClientError("73002", `Submitting task failed after ${maxRetries} retries`, makeErrData(err));
69
+ }
70
+ const delay = baseDelay * 2 ** (attempt - 1);
71
+ console.warn(`Submitting task retrying in ${delay}ms...`);
72
+ await sleepMs(delay);
73
+ }
74
+ }
75
+ }
76
+ async getResultWithTimeout(taskId, timeoutMs = 600_000, intervalMs = 5000) {
77
+ const start = Date.now();
78
+ const isPending = (status) => status === undefined || status === "queued" || status === "running";
79
+ let errData = undefined;
80
+ while (true) {
81
+ const elapsed = Date.now() - start;
82
+ if (elapsed > timeoutMs) {
83
+ throw new ClientError("73003", `Timeout: cannot get task[${taskId}] complete result within ${timeoutMs}ms`, errData);
84
+ }
85
+ try {
86
+ const data = await this.getResult(taskId);
87
+ const { status } = data ?? {};
88
+ errData = { taskId, status };
89
+ if (!isPending(status)) {
90
+ return data;
91
+ }
92
+ }
93
+ catch (err) {
94
+ const NO_RETRY_CODES = ["73001"]; // from zkvm
95
+ if (err instanceof ClientError && NO_RETRY_CODES.includes(err.code))
96
+ throw err;
97
+ errData = makeErrData(err);
98
+ }
99
+ console.warn(`Getting result retrying in ${intervalMs}ms...`);
100
+ await sleepMs(intervalMs);
101
+ }
102
+ }
103
+ async _doZkVM(attestationData) {
104
+ try {
105
+ const submitResult = await this.submitTaskWithRetry(attestationData);
106
+ const result = await this.getResultWithTimeout(submitResult.task_id);
107
+ return result;
108
+ }
109
+ catch (err) {
110
+ if (!(err instanceof ClientError)) {
111
+ err = new ClientError("73099", `Do doZkVM failed`, makeErrData(err));
112
+ }
113
+ await mockErrorReport(err);
114
+ throw err;
115
+ }
116
+ }
117
+ async doZkVM(attestationData) {
118
+ return await this._doZkVM(attestationData);
119
+ }
120
+ }
121
+ //# sourceMappingURL=prover_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prover_client.js","sourceRoot":"","sources":["../../src/client/prover_client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Options, RequestParamsInput } from "../types.js";
2
+ import { SdkConfig } from "../config.js";
3
+ export declare class ZkTLSClient {
4
+ private readonly config;
5
+ private primusNetwork;
6
+ constructor(config?: SdkConfig);
7
+ /**
8
+ * Initialize PrimusNetwork SDK
9
+ */
10
+ private _initializePrimusNetwork;
11
+ /**
12
+ * Submit zkTLS task with retry and exponential backoff
13
+ */
14
+ private _submitZkTLSTaskWithRetry;
15
+ /**
16
+ * Run attestation with retries
17
+ */
18
+ private _attestWithRetry;
19
+ /**
20
+ * Verify and poll task result with retries
21
+ */
22
+ private _verifyAndPollTaskResultWithRetry;
23
+ /**
24
+ * Prepare final zkVM attestation data
25
+ */
26
+ private _prepareZkVmRequestData;
27
+ /**
28
+ * Main entry: perform zkTLS attestation and task flow
29
+ */
30
+ private _doZkTLS;
31
+ doZkTLS(params: RequestParamsInput, options?: Options): Promise<any>;
32
+ }
@@ -0,0 +1,213 @@
1
+ import { PrimusNetwork } from "@primuslabs/network-core-sdk";
2
+ import { ethers } from "ethers";
3
+ import { sleepMs, mockErrorReport, makeErrData } from "../utils.js";
4
+ import { getDefaultOptions } from "../types.js";
5
+ import { resolveSdkConfig } from "../config.js";
6
+ import { ClientError } from "../error.js";
7
+ import { DataServiceClient } from "./data_service_client.js";
8
+ import { v4 as uuidv4 } from 'uuid';
9
+ export class ZkTLSClient {
10
+ config;
11
+ primusNetwork;
12
+ constructor(config = {}) {
13
+ this.config = resolveSdkConfig(config);
14
+ this.primusNetwork = new PrimusNetwork();
15
+ }
16
+ /**
17
+ * Initialize PrimusNetwork SDK
18
+ */
19
+ async _initializePrimusNetwork(opts, wallet, chainId) {
20
+ try {
21
+ console.log("🚀 Initializing PrimusNetwork...");
22
+ const result = await this.primusNetwork.init(wallet, chainId, opts.noProxy === true ? "native" : undefined);
23
+ console.log("✅ PrimusNetwork initialized:", result);
24
+ }
25
+ catch (err) {
26
+ throw new ClientError("71002", `Initializing PrimusNetwork failed`, makeErrData(err));
27
+ }
28
+ }
29
+ /**
30
+ * Submit zkTLS task with retry and exponential backoff
31
+ */
32
+ async _submitZkTLSTaskWithRetry(_opts, attestParams, maxRetries = 4, baseDelay = 1000) {
33
+ let attempt = 0;
34
+ const start = Date.now();
35
+ console.log("📝 Submitting zkTLS task...");
36
+ while (true) {
37
+ try {
38
+ let result;
39
+ if (this.config.zktlsMode === "DVC") {
40
+ result = await this.primusNetwork.submitTask(attestParams);
41
+ }
42
+ else if (this.config.zktlsMode === "POR") {
43
+ const client = new DataServiceClient(this.config.dataServiceUrl);
44
+ const bizId = uuidv4();
45
+ const token = this.config.token;
46
+ const projectId = this.config.projectId;
47
+ result = await client.submitTask(bizId, projectId, token);
48
+ }
49
+ console.log(`✅ submitTask done (${Date.now() - start}ms):`, result);
50
+ return result;
51
+ }
52
+ catch (err) {
53
+ const NO_RETRY_CODES = ["72001"]; // from data service client
54
+ if (err instanceof ClientError && NO_RETRY_CODES.includes(err.code))
55
+ throw err;
56
+ attempt++;
57
+ console.warn(`⚠️ submitTask attempt ${attempt} failed: ${err.message}`);
58
+ if (attempt > maxRetries) {
59
+ throw new ClientError("71003", `Submitting zkTLS task failed after ${maxRetries} retries`, makeErrData(err));
60
+ }
61
+ const delay = baseDelay * 2 ** (attempt - 1);
62
+ console.warn(`⏳ submitTask retrying in ${delay}ms...`);
63
+ await sleepMs(delay);
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Run attestation with retries
69
+ */
70
+ async _attestWithRetry(requestParams, opts, attestParams, submitResult, maxRetries = 4, baseDelay = 1000) {
71
+ let attempt = 0;
72
+ const start = Date.now();
73
+ console.log("⚙️ Running attestation...");
74
+ while (true) {
75
+ try {
76
+ const reqParams = opts.requestParamsCallback ? opts.requestParamsCallback() : requestParams;
77
+ if (reqParams.requests.length !== reqParams.responseResolves.length) {
78
+ throw new ClientError("71001", `Request params size mismatch ${reqParams.requests.length} != ${reqParams.responseResolves.length}`);
79
+ }
80
+ const params = {
81
+ ...attestParams,
82
+ ...submitResult,
83
+ requests: reqParams.requests,
84
+ responseResolves: reqParams.responseResolves,
85
+ sslCipher: opts.sslCipher,
86
+ attMode: { algorithmType: opts.algorithmType },
87
+ specialTask: opts.specialTask,
88
+ noProxy: opts.noProxy,
89
+ getAllJsonResponse: "true"
90
+ };
91
+ const result = await this.primusNetwork.attest(params, 5 * 60 * 1000);
92
+ console.log(`✅ attest done (${Date.now() - start}ms):`, result);
93
+ return result;
94
+ }
95
+ catch (err) {
96
+ attempt++;
97
+ if (err) {
98
+ const info = {};
99
+ if (err.code)
100
+ info.code = err.code;
101
+ if (err.message)
102
+ info.message = err.message;
103
+ if (err.data)
104
+ info.data = err.data;
105
+ console.warn(`⚠️ attest attempt ${attempt} failed: ${info}`);
106
+ const NO_RETRY_CODES = ["71001"]; // TODO:
107
+ if (info.code && NO_RETRY_CODES.includes(info.code)) {
108
+ if (err instanceof ClientError)
109
+ throw err;
110
+ throw new ClientError("71004", `Attesting zkTLS failed`, makeErrData(err));
111
+ }
112
+ }
113
+ if (attempt > maxRetries) {
114
+ throw new ClientError("71005", `Attesting zkTLS failed after ${maxRetries} retries`, makeErrData(err));
115
+ }
116
+ const delay = baseDelay * 2 ** (attempt - 1);
117
+ console.warn(`⏳ attest retrying in ${delay}ms...`);
118
+ await sleepMs(delay);
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ * Verify and poll task result with retries
124
+ */
125
+ async _verifyAndPollTaskResultWithRetry(attestResult, maxRetries = 4, baseDelay = 1000) {
126
+ let attempt = 0;
127
+ const start = Date.now();
128
+ console.log("🔍 Verifying task...");
129
+ while (true) {
130
+ try {
131
+ const result = await this.primusNetwork.verifyAndPollTaskResult({
132
+ taskId: attestResult[0].taskId,
133
+ reportTxHash: attestResult[0].reportTxHash
134
+ });
135
+ console.log(`✅ verify done (${Date.now() - start}ms):`, result);
136
+ return result;
137
+ }
138
+ catch (err) {
139
+ attempt++;
140
+ console.warn(`⚠️ verify attempt ${attempt} failed: ${err.message}`);
141
+ if (attempt > maxRetries) {
142
+ throw new ClientError("71006", `Verifying task failed after ${maxRetries} retries`, makeErrData(err));
143
+ }
144
+ const delay = baseDelay * 2 ** (attempt - 1);
145
+ console.warn(`⏳ verify retrying in ${delay}ms...`);
146
+ await sleepMs(delay);
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Prepare final zkVM attestation data
152
+ */
153
+ async _prepareZkVmRequestData(verifyType, attestResult) {
154
+ const taskId = attestResult[0].taskId;
155
+ const plainResponse = this.primusNetwork.getAllJsonResponse(taskId);
156
+ if (!plainResponse) {
157
+ throw new ClientError("71007", `Unable to get plain JSON response.`);
158
+ }
159
+ if (verifyType == 'HASH_COMPARISON') {
160
+ // todo!
161
+ return {
162
+ attestationData: {
163
+ verification_type: Array.from({ length: plainResponse.length }, () => "HASH_COMPARISON"),
164
+ public_data: attestResult,
165
+ private_data: plainResponse
166
+ },
167
+ requestid: taskId
168
+ };
169
+ }
170
+ else {
171
+ return {};
172
+ }
173
+ }
174
+ /**
175
+ * Main entry: perform zkTLS attestation and task flow
176
+ */
177
+ async _doZkTLS(requestParams, options = {}) {
178
+ const startTime = Date.now();
179
+ const attestParams = {
180
+ address: "0x9b7706746c6e19AD5EB5c1DaeEa4b4C09EEC8a5f"
181
+ };
182
+ const opts = getDefaultOptions(options);
183
+ try {
184
+ const provider = new ethers.providers.JsonRpcProvider(this.config.rpcUrl);
185
+ const wallet = this.config.privateKey ? new ethers.Wallet(this.config.privateKey, provider) : provider;
186
+ const { chainId } = await provider.getNetwork();
187
+ await this._initializePrimusNetwork(opts, wallet, chainId);
188
+ const submitResult = await this._submitZkTLSTaskWithRetry(opts, attestParams);
189
+ const attestResult = await this._attestWithRetry(requestParams, opts, attestParams, submitResult);
190
+ await this._verifyAndPollTaskResultWithRetry(attestResult);
191
+ const zkVmRequestData = await this._prepareZkVmRequestData(requestParams.verifyType, attestResult);
192
+ console.log(`✅ Total execution time: ${Date.now() - startTime}ms`);
193
+ return zkVmRequestData;
194
+ }
195
+ catch (err) {
196
+ if (!(err instanceof ClientError)) {
197
+ err = new ClientError("71099", `Do zkTLS failed`, makeErrData(err));
198
+ }
199
+ await mockErrorReport(err);
200
+ throw err;
201
+ }
202
+ }
203
+ async doZkTLS(params, options = {}) {
204
+ const requestParams = Array.isArray(params) ? params : [params];
205
+ let attestations = [];
206
+ for (const reqParams of requestParams) {
207
+ const data = await this._doZkTLS(reqParams, options);
208
+ attestations.push(data.attestationData);
209
+ }
210
+ return attestations;
211
+ }
212
+ }
213
+ //# sourceMappingURL=zktls_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zktls_client.js","sourceRoot":"","sources":["../../src/client/zktls_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAW,iBAAiB,EAAkD,MAAM,aAAa,CAAC;AACzG,OAAO,EAAa,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAGpC,MAAM,OAAO,WAAW;IACL,MAAM,CAAsB;IACrC,aAAa,CAAgB;IAErC,YAAY,SAAoB,EAAE;QAChC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC;IAGD;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,IAAa,EAAE,MAAW,EAAE,OAAe;QAChF,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5G,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,mCAAmC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB,CACrC,KAAc,EACd,YAAiB,EACjB,UAAU,GAAG,CAAC,EACd,SAAS,GAAG,IAAI;QAEhB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAE3C,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC;gBACX,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oBACpC,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oBAC3C,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACjE,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oBACxC,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC;gBACpE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B;gBAC7D,IAAI,GAAG,YAAY,WAAW,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,GAAG,CAAC;gBAE/E,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,yBAAyB,OAAO,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,sCAAsC,UAAU,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/G,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,4BAA4B,KAAK,OAAO,CAAC,CAAC;gBACvD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,aAA4B,EAC5B,IAAa,EACb,YAAiB,EACjB,YAAiB,EACjB,UAAU,GAAG,CAAC,EACd,SAAS,GAAG,IAAI;QAEhB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAEzC,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;gBAC5F,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBACpE,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,gCAAgC,SAAS,CAAC,QAAQ,CAAC,MAAM,OAAO,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtI,CAAC;gBAED,MAAM,MAAM,GAAG;oBACb,GAAG,YAAY;oBACf,GAAG,YAAY;oBACf,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;oBAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;oBAC9C,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,kBAAkB,EAAE,MAAM;iBAC3B,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBAEV,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,IAAI,GAAwB,EAAE,CAAC;oBACrC,IAAI,GAAG,CAAC,IAAI;wBAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACnC,IAAI,GAAG,CAAC,OAAO;wBAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;oBAC5C,IAAI,GAAG,CAAC,IAAI;wBAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,YAAY,IAAI,EAAE,CAAC,CAAC;oBAE7D,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;oBAC1C,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpD,IAAI,GAAG,YAAY,WAAW;4BAAE,MAAM,GAAG,CAAC;wBAC1C,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,wBAAwB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7E,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,gCAAgC,UAAU,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzG,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,OAAO,CAAC,CAAC;gBACnD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iCAAiC,CAC7C,YAAiB,EACjB,UAAU,GAAG,CAAC,EACd,SAAS,GAAG,IAAI;QAEhB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEpC,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;oBAC9D,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;oBAC9B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY;iBAC3C,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,+BAA+B,UAAU,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxG,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,OAAO,CAAC,CAAC;gBACnD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,UAAuB,EAAE,YAAiB;QAC9E,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAAC;YACpC,QAAQ;YACR,OAAO;gBACL,eAAe,EAAE;oBACf,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC;oBACxF,WAAW,EAAE,YAAY;oBACzB,YAAY,EAAE,aAAa;iBAC5B;gBACD,SAAS,EAAE,MAAM;aAClB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IAEH,CAAC;IAGD;;OAEG;IACK,KAAK,CAAC,QAAQ,CAAC,aAA4B,EAAE,UAAmB,EAAE;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG;YACnB,OAAO,EAAE,4CAA4C;SACtD,CAAC;QAEF,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACvG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAEhD,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAE3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAE9E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAC9C,aAAa,EACb,IAAI,EACJ,YAAY,EACZ,YAAY,CACb,CAAC;YAEF,MAAM,IAAI,CAAC,iCAAiC,CAAC,YAAY,CAAC,CAAC;YAE3D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAEnG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;YAEnE,OAAO,eAAe,CAAC;QACzB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,CAAC,GAAG,YAAY,WAAW,CAAC,EAAE,CAAC;gBAClC,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YAE3B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,MAA0B,EAAE,UAAmB,EAAE;QAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,YAAY,GAAU,EAAE,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import "dotenv/config";
2
+ export interface SdkConfig {
3
+ token?: string;
4
+ projectId?: string;
5
+ programId?: string;
6
+ logVerbose?: number;
7
+ zkvmServiceUrl?: string;
8
+ dataServiceUrl?: string;
9
+ rpcUrl?: string;
10
+ privateKey?: string;
11
+ zktlsMode?: "POR" | string;
12
+ }
13
+ export declare function getDefaultConfig(): Required<SdkConfig>;
14
+ export declare function loadConfigFromEnv(): SdkConfig;
15
+ export declare function resolveSdkConfig(userConfig?: SdkConfig): Required<SdkConfig>;
16
+ export declare function printConfig(config: SdkConfig, tag: string): void;
package/dist/config.js ADDED
@@ -0,0 +1,53 @@
1
+ import "dotenv/config";
2
+ export function getDefaultConfig() {
3
+ return {
4
+ token: "",
5
+ projectId: "",
6
+ programId: "",
7
+ logVerbose: 0,
8
+ zkvmServiceUrl: "https://api-por.primuslabs.xyz:38080",
9
+ dataServiceUrl: "http://api-dev.padolabs.org:38101",
10
+ rpcUrl: "https://mainnet.base.org",
11
+ privateKey: "",
12
+ zktlsMode: "POR",
13
+ };
14
+ }
15
+ export function loadConfigFromEnv() {
16
+ const envConfig = {
17
+ token: process.env.TOKEN?.trim(),
18
+ projectId: process.env.PROJECT_ID?.trim(),
19
+ programId: process.env.PROGRAM_ID?.trim(),
20
+ logVerbose: process.env.LOG_VERBOSE !== undefined ? Number(process.env.LOG_VERBOSE) : undefined,
21
+ zkvmServiceUrl: process.env.ZKVM_SERVICE_URL?.trim(),
22
+ dataServiceUrl: process.env.DATA_SERVICE_URL?.trim(),
23
+ rpcUrl: process.env.RPC_URL?.trim(),
24
+ privateKey: process.env.PRIVATE_KEY?.trim(),
25
+ zktlsMode: process.env.ZKTLS_MODE?.trim(),
26
+ };
27
+ // filter undefined field
28
+ return Object.fromEntries(Object.entries(envConfig).filter(([_, value]) => value !== undefined));
29
+ }
30
+ export function resolveSdkConfig(userConfig = {}) {
31
+ const config = {
32
+ ...getDefaultConfig(),
33
+ ...userConfig,
34
+ ...loadConfigFromEnv(),
35
+ };
36
+ // validate
37
+ if (config.zktlsMode === "POR") {
38
+ if (!config.token || !config.projectId || !config.programId) {
39
+ throw new Error("TOKEN, PROJECT_ID, PROGRAM_ID are required in POR mode");
40
+ }
41
+ }
42
+ return config;
43
+ }
44
+ export function printConfig(config, tag) {
45
+ const maskedConfig = {
46
+ ...config,
47
+ token: config.token ? `${config.token.slice(0, 6)}***` : undefined,
48
+ privateKey: config.privateKey ? `${config.privateKey.slice(0, 6)}***` : undefined,
49
+ };
50
+ const filterConfig = Object.fromEntries(Object.entries(maskedConfig).filter(([_, value]) => value !== undefined));
51
+ console.log(tag, "config", filterConfig);
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAkBvB,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QAEb,UAAU,EAAE,CAAC;QAEb,cAAc,EAAE,sCAAsC;QACtD,cAAc,EAAE,mCAAmC;QAEnD,MAAM,EAAE,0BAA0B;QAClC,UAAU,EAAE,EAAE;QAEd,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,SAAS,GAAc;QAC3B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;QAChC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE;QACzC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE;QAEzC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QAE/F,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE;QACpD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE;QAEpD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;QACnC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE;QAE3C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE;KAC1C,CAAC;IAEF,yBAAyB;IACzB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAuB,CAAC;AACzH,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAC9B,aAAwB,EAAE;IAE1B,MAAM,MAAM,GAAwB;QAClC,GAAG,gBAAgB,EAAE;QACrB,GAAG,UAAU;QACb,GAAG,iBAAiB,EAAE;KACvB,CAAC;IAEF,WAAW;IACX,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAiB,EAAE,GAAW;IACxD,MAAM,YAAY,GAAG;QACnB,GAAG,MAAM;QACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAClE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KAClF,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAuB,CAAC;IACxI,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { VERIFY_TYPE, RequestParams } from "../types.js";
2
+ export interface BinanceAccount {
3
+ key: string;
4
+ secret: string;
5
+ }
6
+ export declare class Binance {
7
+ private accounts;
8
+ private readonly recvWindow;
9
+ constructor();
10
+ private loadAccounts;
11
+ getUnifiedAccountRequests(verifyType?: VERIFY_TYPE): RequestParams;
12
+ getSpotAccountRequests(verifyType?: VERIFY_TYPE): RequestParams;
13
+ getAccounts(): BinanceAccount[];
14
+ }
@@ -0,0 +1,55 @@
1
+ import ccxt from "ccxt";
2
+ import { makeHashComparisonParams } from "./helper.js";
3
+ export class Binance {
4
+ accounts;
5
+ recvWindow;
6
+ constructor() {
7
+ this.recvWindow = Number(process.env.BINANCE_RECV_WINDOW || 60) * 1000;
8
+ this.accounts = this.loadAccounts();
9
+ }
10
+ loadAccounts() {
11
+ const accounts = [];
12
+ const _add = (key, secret) => {
13
+ if (key && secret)
14
+ accounts.push({ key, secret });
15
+ };
16
+ _add(process.env.BINANCE_API_KEY, process.env.BINANCE_API_SECRET);
17
+ for (let i = 1; i <= 100; i++) {
18
+ _add(process.env[`BINANCE_API_KEY${i}`], process.env[`BINANCE_API_SECRET${i}`]);
19
+ }
20
+ if (accounts.length === 0) {
21
+ throw new Error("Please configure at least one set of BINANCE_API_KEY{i} / BINANCE_API_SECRET{i} in .env.");
22
+ }
23
+ const seen = new Set();
24
+ for (const acc of accounts) {
25
+ const key = `${acc.key}${acc.secret}`;
26
+ if (seen.has(key))
27
+ throw new Error("Duplicate BINANCE_API_KEY{i} detected");
28
+ seen.add(key);
29
+ }
30
+ return accounts;
31
+ }
32
+ getUnifiedAccountRequests(verifyType = 'HASH_COMPARISON') {
33
+ const signParams = { recvWindow: this.recvWindow };
34
+ const origRequests = [];
35
+ for (const acc of this.accounts) {
36
+ const exchange = new ccxt.binance({ apiKey: acc.key, secret: acc.secret });
37
+ origRequests.push(exchange.sign("um/positionRisk", "papi", "GET", signParams));
38
+ origRequests.push(exchange.sign("balance", "papi", "GET", signParams));
39
+ }
40
+ return makeHashComparisonParams(origRequests, verifyType);
41
+ }
42
+ getSpotAccountRequests(verifyType = 'HASH_COMPARISON') {
43
+ const origRequests = [];
44
+ const signParams = { recvWindow: this.recvWindow };
45
+ for (const acc of this.accounts) {
46
+ const exchange = new ccxt.binance({ apiKey: acc.key, secret: acc.secret });
47
+ origRequests.push(exchange.sign("account", "private", "GET", { ...signParams, omitZeroBalances: true }));
48
+ }
49
+ return makeHashComparisonParams(origRequests, verifyType);
50
+ }
51
+ getAccounts() {
52
+ return this.accounts;
53
+ }
54
+ }
55
+ //# sourceMappingURL=binance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binance.js","sourceRoot":"","sources":["../../src/datasource/binance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { VERIFY_TYPE, RequestParams } from "../types.js";
2
+ export declare function makeHashComparisonParams(origRequests: any[], verifyType: VERIFY_TYPE): RequestParams;
@@ -0,0 +1,34 @@
1
+ export function makeHashComparisonParams(origRequests, verifyType) {
2
+ if (!Array.isArray(origRequests)) {
3
+ throw new Error("Invalid input: origRequests must be an array");
4
+ }
5
+ const requestParams = {
6
+ verifyType: 'HASH_COMPARISON',
7
+ requests: [],
8
+ responseResolves: [],
9
+ };
10
+ for (let i = 0; i < origRequests.length; i++) {
11
+ const origRequest = origRequests[i];
12
+ requestParams.requests.push({
13
+ url: origRequest.url,
14
+ method: "GET",
15
+ header: { ...origRequest.headers },
16
+ body: "",
17
+ });
18
+ if (verifyType == 'HASH_COMPARISON') {
19
+ requestParams.responseResolves.push([
20
+ {
21
+ keyName: `${i}`,
22
+ parseType: "json",
23
+ parsePath: "$",
24
+ op: "SHA256_EX",
25
+ },
26
+ ]);
27
+ }
28
+ else {
29
+ throw Error("not supported verify type");
30
+ }
31
+ }
32
+ return requestParams;
33
+ }
34
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/datasource/helper.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CAAC,YAAmB,EAAE,UAAuB;IACnF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,aAAa,GAAkB;QACnC,UAAU,EAAE,iBAAiB;QAC7B,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1B,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE;YAClC,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QAEH,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAAC;YACpC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBAClC;oBACE,OAAO,EAAE,GAAG,CAAC,EAAE;oBACf,SAAS,EAAE,MAAM;oBACjB,SAAS,EAAE,GAAG;oBACd,EAAE,EAAE,WAAW;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./binance";
2
+ export * from "./okx";
@@ -0,0 +1,3 @@
1
+ export * from "./binance";
2
+ export * from "./okx";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/datasource/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { VERIFY_TYPE, RequestParams } from "../types.js";
2
+ export declare class Okx {
3
+ constructor();
4
+ getSampleRequests(verifyType?: VERIFY_TYPE): RequestParams;
5
+ }
@@ -0,0 +1,17 @@
1
+ import { makeHashComparisonParams } from "./helper.js";
2
+ export class Okx {
3
+ constructor() {
4
+ }
5
+ getSampleRequests(verifyType = 'HASH_COMPARISON') {
6
+ const origRequests = [
7
+ {
8
+ url: "https://www.okx.com/api/v5/public/instruments?instType=SPOT&instId=BTC-USD",
9
+ method: "GET",
10
+ header: {},
11
+ body: "",
12
+ }
13
+ ];
14
+ return makeHashComparisonParams(origRequests, verifyType);
15
+ }
16
+ }
17
+ //# sourceMappingURL=okx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"okx.js","sourceRoot":"","sources":["../../src/datasource/okx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAIvD,MAAM,OAAO,GAAG;IACd;IACA,CAAC;IAEM,iBAAiB,CAAC,aAA0B,iBAAiB;QAClE,MAAM,YAAY,GAAU;YAC1B;gBACE,GAAG,EAAE,4EAA4E;gBACjF,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE;aACT;SACF,CAAC;QACF,OAAO,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;CAEF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ *
3
+ */
4
+ export declare class ClientError extends Error {
5
+ code: string;
6
+ data?: any;
7
+ constructor(code: string, message?: string, data?: any);
8
+ }
package/dist/error.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ *
3
+ */
4
+ export class ClientError extends Error {
5
+ code;
6
+ data;
7
+ constructor(code, message, data) {
8
+ super(message ?? "");
9
+ this.name = "ClientError";
10
+ this.code = code;
11
+ this.data = data;
12
+ }
13
+ }
14
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,IAAI,CAAS;IACb,IAAI,CAAO;IAEX,YAAY,IAAY,EAAE,OAAgB,EAAE,IAAU;QACpD,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export * from "./types";
2
+ export * from "./utils";
3
+ export * from "./client";
4
+ export * as DataSource from "./datasource";
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./types";
2
+ export * from "./utils";
3
+ export * from "./client";
4
+ export * as DataSource from "./datasource";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { AttNetworkRequest, AttNetworkResponseResolve } from "@primuslabs/network-core-sdk/dist/types";
2
+ export type VERIFY_TYPE = "HASH_COMPARISON";
3
+ export type RequestParams = {
4
+ verifyType: VERIFY_TYPE;
5
+ requests: AttNetworkRequest[];
6
+ responseResolves: AttNetworkResponseResolve[][];
7
+ };
8
+ export type RequestParamsInput = RequestParams | RequestParams[];
9
+ export interface Options {
10
+ sslCipher?: string;
11
+ algorithmType?: string;
12
+ specialTask?: any;
13
+ noProxy?: boolean;
14
+ runZkvm?: boolean;
15
+ requestParamsCallback?: () => RequestParams;
16
+ }
17
+ export declare function getDefaultOptions(options: Options): Options;
package/dist/types.js ADDED
@@ -0,0 +1,12 @@
1
+ export function getDefaultOptions(options) {
2
+ const defaults = {
3
+ sslCipher: "ECDHE-RSA-AES128-GCM-SHA256",
4
+ algorithmType: "mpctls",
5
+ specialTask: undefined,
6
+ noProxy: true,
7
+ runZkvm: true,
8
+ requestParamsCallback: undefined,
9
+ };
10
+ return { ...defaults, ...options };
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,QAAQ,GAAY;QACxB,SAAS,EAAE,6BAA6B;QACxC,aAAa,EAAE,QAAQ;QACvB,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,qBAAqB,EAAE,SAAS;KACjC,CAAC;IACF,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { ClientError } from "./error.js";
2
+ /**
3
+ * Save data to file
4
+ */
5
+ export declare function saveToFile(filepath: string, data: string | Buffer): void;
6
+ /**
7
+ * Sleep helper (ms)
8
+ */
9
+ export declare function sleepMs(ms: number): Promise<void>;
10
+ export declare function assertEnvVars<T extends Record<string, any>>(obj: T, keys: readonly (keyof T)[]): void;
11
+ export declare function makeErrData(err: any): Record<string, any> | undefined;
12
+ export declare function mockErrorReport(err: ClientError): Promise<void>;
package/dist/utils.js ADDED
@@ -0,0 +1,38 @@
1
+ import fs from "fs";
2
+ /**
3
+ * Save data to file
4
+ */
5
+ export function saveToFile(filepath, data) {
6
+ fs.writeFileSync(filepath, data);
7
+ }
8
+ /**
9
+ * Sleep helper (ms)
10
+ */
11
+ export async function sleepMs(ms) {
12
+ return new Promise((resolve) => setTimeout(resolve, ms));
13
+ }
14
+ export function assertEnvVars(obj, keys) {
15
+ for (const key of keys) {
16
+ if (!obj[key]) {
17
+ throw new Error(`❌ Missing required .env value: ${String(key)}`);
18
+ }
19
+ }
20
+ }
21
+ export function makeErrData(err) {
22
+ if (!err)
23
+ return undefined;
24
+ const errData = {};
25
+ if (err.code)
26
+ errData.code = err.code;
27
+ if (err.message)
28
+ errData.message = err.message;
29
+ if (err.data)
30
+ errData.data = err.data;
31
+ console.log("makeErrData:", errData);
32
+ return errData;
33
+ }
34
+ export async function mockErrorReport(err) {
35
+ // TODO:
36
+ console.log('mockErrorReport: ', JSON.stringify(err));
37
+ }
38
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,IAAqB;IAChE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAU;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAgC,GAAM,EAAE,IAA0B;IAC7F,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtC,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC/C,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAgB;IACpD,QAAQ;IACR,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@primuslabs/por-client-sdk",
3
+ "version": "0.1.0",
4
+ "author": "Primus Labs <dev@primuslabs.org>",
5
+ "description": "Primus PoR client sdk",
6
+ "license": "ISC",
7
+ "type": "module",
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.cjs"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "bin": {
21
+ "por-cli": "./dist/cli.js"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc -p tsconfig.json",
25
+ "test": "jest",
26
+ "publish": "npm publish --access public"
27
+ },
28
+ "dependencies": {
29
+ "@primuslabs/network-core-sdk": "0.1.4",
30
+ "axios": "^1.13.2",
31
+ "ccxt": "^4.5.11",
32
+ "commander": "^14.0.1",
33
+ "dotenv": "^16.3.1",
34
+ "ethers": "^5.7.2",
35
+ "form-data": "^4.0.4",
36
+ "undici": "^7.16.0",
37
+ "uuid": "^13.0.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/jest": "^30.0.0",
41
+ "@types/node": "^24.10.2",
42
+ "ts-jest": "^29.4.6",
43
+ "ts-node": "^10.9.2",
44
+ "typescript": "^5.9.3"
45
+ }
46
+ }