@bind-protocol/sdk 0.9.0 → 0.10.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.
- package/dist/{adapter-J6D9MZJV.d.ts → adapter-BRj4bkLl.d.ts} +20 -6
- package/dist/{adapter-qe9f1ll3.d.cts → adapter-CNeHM6SQ.d.cts} +20 -6
- package/dist/adapters/dimo/index.cjs +26 -10
- package/dist/adapters/dimo/index.cjs.map +1 -1
- package/dist/adapters/dimo/index.d.cts +7 -1
- package/dist/adapters/dimo/index.d.ts +7 -1
- package/dist/adapters/dimo/index.js +26 -10
- package/dist/adapters/dimo/index.js.map +1 -1
- package/dist/adapters/index.cjs +26 -10
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +26 -10
- package/dist/adapters/index.js.map +1 -1
- package/dist/index.cjs +26 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +26 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,8 @@ import { c as ProveJobInputs } from './types-BcPssdQk.js';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* DIMO Adapter Types
|
|
6
|
+
*
|
|
7
|
+
* Aligned with policy: bind.mobility.basicriskband v0.1.0
|
|
6
8
|
*/
|
|
7
9
|
/**
|
|
8
10
|
* Configuration for the DIMO adapter
|
|
@@ -15,7 +17,7 @@ interface DimoAdapterConfig {
|
|
|
15
17
|
* Query parameters for fetching DIMO telemetry
|
|
16
18
|
*/
|
|
17
19
|
interface DimoQuery {
|
|
18
|
-
/**
|
|
20
|
+
/** DIMO vehicle token ID (maps to policy subject identifier "dimo_token_id") */
|
|
19
21
|
vehicleTokenId: string;
|
|
20
22
|
/** Start date for telemetry range (ISO 8601) */
|
|
21
23
|
from: string;
|
|
@@ -30,15 +32,17 @@ interface DimoTelemetryData {
|
|
|
30
32
|
timestamp: string;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
|
-
* Individual DIMO telemetry signal
|
|
35
|
+
* Individual DIMO telemetry signal row (hourly interval)
|
|
36
|
+
*
|
|
37
|
+
* Matches the three inputs defined in bind.mobility.basicriskband:
|
|
38
|
+
* - powertrainTransmissionTravelledDistance (SUM → mileage_90d)
|
|
39
|
+
* - isIgnitionOn (COUNT → data_points)
|
|
40
|
+
* - speed (MAX → speed_max)
|
|
34
41
|
*/
|
|
35
42
|
interface DimoSignal {
|
|
36
43
|
powertrainTransmissionTravelledDistance: number;
|
|
44
|
+
isIgnitionOn: number;
|
|
37
45
|
speed: number;
|
|
38
|
-
powertrainCombustionEngineSpeed: number;
|
|
39
|
-
obdEngineLoad: number;
|
|
40
|
-
obdDTCList: string[];
|
|
41
|
-
obdRunTime: number;
|
|
42
46
|
timestamp?: string;
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
@@ -56,6 +60,8 @@ interface DimoClient {
|
|
|
56
60
|
*
|
|
57
61
|
* Fetches vehicle telemetry data from the DIMO network and transforms it
|
|
58
62
|
* into circuit inputs for Bind Protocol prove jobs.
|
|
63
|
+
*
|
|
64
|
+
* Aligned with policy: bind.mobility.basicriskband v0.1.0
|
|
59
65
|
*/
|
|
60
66
|
|
|
61
67
|
declare class DimoAdapter implements DataAdapter<DimoAdapterConfig, DimoQuery, DimoTelemetryData> {
|
|
@@ -81,6 +87,14 @@ declare class DimoAdapter implements DataAdapter<DimoAdapterConfig, DimoQuery, D
|
|
|
81
87
|
* Get the list of circuits this adapter supports
|
|
82
88
|
*/
|
|
83
89
|
getSupportedCircuits(): string[];
|
|
90
|
+
/**
|
|
91
|
+
* Aggregate hourly telemetry rows into the three circuit inputs
|
|
92
|
+
* required by bind.mobility.basicriskband:
|
|
93
|
+
*
|
|
94
|
+
* mileage_90d (u32) — SUM of powertrainTransmissionTravelledDistance
|
|
95
|
+
* data_points (u32) — COUNT of isIgnitionOn (sum of per-hour counts)
|
|
96
|
+
* speed_max (u16) — MAX of speed
|
|
97
|
+
*/
|
|
84
98
|
private toRiskBandInputs;
|
|
85
99
|
}
|
|
86
100
|
/**
|
|
@@ -3,6 +3,8 @@ import { c as ProveJobInputs } from './types-BcPssdQk.cjs';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* DIMO Adapter Types
|
|
6
|
+
*
|
|
7
|
+
* Aligned with policy: bind.mobility.basicriskband v0.1.0
|
|
6
8
|
*/
|
|
7
9
|
/**
|
|
8
10
|
* Configuration for the DIMO adapter
|
|
@@ -15,7 +17,7 @@ interface DimoAdapterConfig {
|
|
|
15
17
|
* Query parameters for fetching DIMO telemetry
|
|
16
18
|
*/
|
|
17
19
|
interface DimoQuery {
|
|
18
|
-
/**
|
|
20
|
+
/** DIMO vehicle token ID (maps to policy subject identifier "dimo_token_id") */
|
|
19
21
|
vehicleTokenId: string;
|
|
20
22
|
/** Start date for telemetry range (ISO 8601) */
|
|
21
23
|
from: string;
|
|
@@ -30,15 +32,17 @@ interface DimoTelemetryData {
|
|
|
30
32
|
timestamp: string;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
|
-
* Individual DIMO telemetry signal
|
|
35
|
+
* Individual DIMO telemetry signal row (hourly interval)
|
|
36
|
+
*
|
|
37
|
+
* Matches the three inputs defined in bind.mobility.basicriskband:
|
|
38
|
+
* - powertrainTransmissionTravelledDistance (SUM → mileage_90d)
|
|
39
|
+
* - isIgnitionOn (COUNT → data_points)
|
|
40
|
+
* - speed (MAX → speed_max)
|
|
34
41
|
*/
|
|
35
42
|
interface DimoSignal {
|
|
36
43
|
powertrainTransmissionTravelledDistance: number;
|
|
44
|
+
isIgnitionOn: number;
|
|
37
45
|
speed: number;
|
|
38
|
-
powertrainCombustionEngineSpeed: number;
|
|
39
|
-
obdEngineLoad: number;
|
|
40
|
-
obdDTCList: string[];
|
|
41
|
-
obdRunTime: number;
|
|
42
46
|
timestamp?: string;
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
@@ -56,6 +60,8 @@ interface DimoClient {
|
|
|
56
60
|
*
|
|
57
61
|
* Fetches vehicle telemetry data from the DIMO network and transforms it
|
|
58
62
|
* into circuit inputs for Bind Protocol prove jobs.
|
|
63
|
+
*
|
|
64
|
+
* Aligned with policy: bind.mobility.basicriskband v0.1.0
|
|
59
65
|
*/
|
|
60
66
|
|
|
61
67
|
declare class DimoAdapter implements DataAdapter<DimoAdapterConfig, DimoQuery, DimoTelemetryData> {
|
|
@@ -81,6 +87,14 @@ declare class DimoAdapter implements DataAdapter<DimoAdapterConfig, DimoQuery, D
|
|
|
81
87
|
* Get the list of circuits this adapter supports
|
|
82
88
|
*/
|
|
83
89
|
getSupportedCircuits(): string[];
|
|
90
|
+
/**
|
|
91
|
+
* Aggregate hourly telemetry rows into the three circuit inputs
|
|
92
|
+
* required by bind.mobility.basicriskband:
|
|
93
|
+
*
|
|
94
|
+
* mileage_90d (u32) — SUM of powertrainTransmissionTravelledDistance
|
|
95
|
+
* data_points (u32) — COUNT of isIgnitionOn (sum of per-hour counts)
|
|
96
|
+
* speed_max (u16) — MAX of speed
|
|
97
|
+
*/
|
|
84
98
|
private toRiskBandInputs;
|
|
85
99
|
}
|
|
86
100
|
/**
|
|
@@ -9,12 +9,9 @@ function buildTelemetryQuery(vehicleTokenId, from, to) {
|
|
|
9
9
|
from: ${from},
|
|
10
10
|
to: ${to}
|
|
11
11
|
) {
|
|
12
|
-
powertrainTransmissionTravelledDistance(agg:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
obdEngineLoad(agg: AVG)
|
|
16
|
-
obdDTCList(agg: UNIQUE)
|
|
17
|
-
obdRunTime(agg: AVG)
|
|
12
|
+
powertrainTransmissionTravelledDistance(agg: SUM)
|
|
13
|
+
isIgnitionOn(agg: COUNT)
|
|
14
|
+
speed(agg: MAX)
|
|
18
15
|
timestamp
|
|
19
16
|
}
|
|
20
17
|
}`;
|
|
@@ -41,7 +38,7 @@ ${signalLines}
|
|
|
41
38
|
|
|
42
39
|
// src/adapters/dimo/adapter.ts
|
|
43
40
|
var SUPPORTED_CIRCUITS = [
|
|
44
|
-
"bind.
|
|
41
|
+
"bind.dimo.riskband.v0_1_0"
|
|
45
42
|
];
|
|
46
43
|
var DimoAdapter = class {
|
|
47
44
|
id = "dimo";
|
|
@@ -74,7 +71,7 @@ var DimoAdapter = class {
|
|
|
74
71
|
);
|
|
75
72
|
}
|
|
76
73
|
switch (circuitId) {
|
|
77
|
-
case "bind.
|
|
74
|
+
case "bind.dimo.riskband.v0_1_0":
|
|
78
75
|
return this.toRiskBandInputs(data);
|
|
79
76
|
default:
|
|
80
77
|
throw new Error(`No input transformer for circuit: ${circuitId}`);
|
|
@@ -89,10 +86,29 @@ var DimoAdapter = class {
|
|
|
89
86
|
// ===========================================================================
|
|
90
87
|
// Private transformers
|
|
91
88
|
// ===========================================================================
|
|
89
|
+
/**
|
|
90
|
+
* Aggregate hourly telemetry rows into the three circuit inputs
|
|
91
|
+
* required by bind.mobility.basicriskband:
|
|
92
|
+
*
|
|
93
|
+
* mileage_90d (u32) — SUM of powertrainTransmissionTravelledDistance
|
|
94
|
+
* data_points (u32) — COUNT of isIgnitionOn (sum of per-hour counts)
|
|
95
|
+
* speed_max (u16) — MAX of speed
|
|
96
|
+
*/
|
|
92
97
|
toRiskBandInputs(data) {
|
|
98
|
+
let mileageSum = 0;
|
|
99
|
+
let dataPointsSum = 0;
|
|
100
|
+
let speedMax = 0;
|
|
101
|
+
for (const row of data.signals) {
|
|
102
|
+
mileageSum += row.powertrainTransmissionTravelledDistance ?? 0;
|
|
103
|
+
dataPointsSum += row.isIgnitionOn ?? 0;
|
|
104
|
+
if ((row.speed ?? 0) > speedMax) {
|
|
105
|
+
speedMax = row.speed;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
93
108
|
return {
|
|
94
|
-
|
|
95
|
-
|
|
109
|
+
mileage_90d: String(Math.round(mileageSum)),
|
|
110
|
+
data_points: String(Math.round(dataPointsSum)),
|
|
111
|
+
speed_max: String(Math.round(speedMax))
|
|
96
112
|
};
|
|
97
113
|
}
|
|
98
114
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapters/dimo/queries.ts","../../../src/adapters/dimo/adapter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/dimo/queries.ts","../../../src/adapters/dimo/adapter.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * DIMO GraphQL query builders\n *\n * Aligned with policy: bind.mobility.basicriskband v0.1.0\n * Fetches only the three signals required by the policy:\n * - powertrainTransmissionTravelledDistance (SUM)\n * - isIgnitionOn (COUNT)\n * - speed (MAX)\n */\n\n/**\n * Build a GraphQL query for fetching vehicle telemetry\n * @param vehicleTokenId - The DIMO vehicle token ID\n * @param from - Start date (ISO 8601 or date string)\n * @param to - End date (ISO 8601 or date string)\n * @returns GraphQL query string\n */\nexport function buildTelemetryQuery(\n vehicleTokenId: string,\n from: string,\n to: string\n): string {\n return `{\n signals(\n tokenId: ${vehicleTokenId},\n interval: \"1h\",\n from: ${from},\n to: ${to}\n ) {\n powertrainTransmissionTravelledDistance(agg: SUM)\n isIgnitionOn(agg: COUNT)\n speed(agg: MAX)\n timestamp\n }\n}`;\n}\n\n/**\n * Build a GraphQL query for fetching specific signals\n * Allows customization of which signals to fetch and their aggregation\n */\nexport function buildCustomTelemetryQuery(\n vehicleTokenId: string,\n from: string,\n to: string,\n signals: Array<{\n name: string;\n aggregation?: 'AVG' | 'SUM' | 'MIN' | 'MAX' | 'UNIQUE' | 'COUNT';\n }>,\n interval = '1h'\n): string {\n const signalLines = signals\n .map((s) => {\n if (s.aggregation) {\n return ` ${s.name}(agg: ${s.aggregation})`;\n }\n return ` ${s.name}`;\n })\n .join('\\n');\n\n return `{\n signals(\n tokenId: ${vehicleTokenId},\n interval: \"${interval}\",\n from: ${from},\n to: ${to}\n ) {\n${signalLines}\n timestamp\n }\n}`;\n}\n","/**\n * DIMO Adapter\n *\n * Fetches vehicle telemetry data from the DIMO network and transforms it\n * into circuit inputs for Bind Protocol prove jobs.\n *\n * Aligned with policy: bind.mobility.basicriskband v0.1.0\n */\n\nimport type { DataAdapter } from '../types';\nimport type { ProveJobInputs } from '../../core/types';\nimport type { DimoAdapterConfig, DimoQuery, DimoTelemetryData, DimoClient } from './types';\nimport { buildTelemetryQuery } from './queries';\n\nconst SUPPORTED_CIRCUITS = [\n 'bind.dimo.riskband.v0_1_0',\n];\n\nexport class DimoAdapter implements DataAdapter<DimoAdapterConfig, DimoQuery, DimoTelemetryData> {\n readonly id = 'dimo';\n readonly name = 'DIMO Network';\n readonly description = 'Fetches vehicle telemetry data from the DIMO decentralized network';\n\n private readonly dimoClient: DimoClient;\n\n constructor(config: DimoAdapterConfig) {\n this.dimoClient = config.dimoClient;\n }\n\n /**\n * Fetch telemetry data from DIMO for a vehicle\n * @param query - Query parameters including vehicle token ID and date range\n * @returns Raw telemetry data from DIMO\n */\n async fetchData(query: DimoQuery): Promise<DimoTelemetryData> {\n const graphqlQuery = buildTelemetryQuery(query.vehicleTokenId, query.from, query.to);\n const result = await this.dimoClient.telemetry.query(graphqlQuery);\n return result;\n }\n\n /**\n * Transform DIMO telemetry data into circuit inputs\n * @param data - Raw telemetry data from DIMO\n * @param circuitId - Target circuit ID\n * @returns Inputs ready for prove job submission\n */\n toCircuitInputs(data: DimoTelemetryData, circuitId: string): ProveJobInputs {\n if (!SUPPORTED_CIRCUITS.includes(circuitId)) {\n throw new Error(\n `Circuit \"${circuitId}\" is not supported by the DIMO adapter. ` +\n `Supported circuits: ${SUPPORTED_CIRCUITS.join(', ')}`\n );\n }\n\n switch (circuitId) {\n case 'bind.dimo.riskband.v0_1_0':\n return this.toRiskBandInputs(data);\n default:\n throw new Error(`No input transformer for circuit: ${circuitId}`);\n }\n }\n\n /**\n * Get the list of circuits this adapter supports\n */\n getSupportedCircuits(): string[] {\n return [...SUPPORTED_CIRCUITS];\n }\n\n // ===========================================================================\n // Private transformers\n // ===========================================================================\n\n /**\n * Aggregate hourly telemetry rows into the three circuit inputs\n * required by bind.mobility.basicriskband:\n *\n * mileage_90d (u32) — SUM of powertrainTransmissionTravelledDistance\n * data_points (u32) — COUNT of isIgnitionOn (sum of per-hour counts)\n * speed_max (u16) — MAX of speed\n */\n private toRiskBandInputs(data: DimoTelemetryData): ProveJobInputs {\n let mileageSum = 0;\n let dataPointsSum = 0;\n let speedMax = 0;\n\n for (const row of data.signals) {\n mileageSum += row.powertrainTransmissionTravelledDistance ?? 0;\n dataPointsSum += row.isIgnitionOn ?? 0;\n if ((row.speed ?? 0) > speedMax) {\n speedMax = row.speed;\n }\n }\n\n return {\n mileage_90d: String(Math.round(mileageSum)),\n data_points: String(Math.round(dataPointsSum)),\n speed_max: String(Math.round(speedMax)),\n };\n }\n}\n\n/**\n * Factory function to create a DIMO adapter\n */\nexport function createDimoAdapter(config: DimoAdapterConfig): DimoAdapter {\n return new DimoAdapter(config);\n}\n"]}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
export { D as DimoAdapter, a as DimoAdapterConfig, f as DimoClient, b as DimoQuery, e as DimoSignal, d as DimoTelemetryData, c as createDimoAdapter } from '../../adapter-
|
|
1
|
+
export { D as DimoAdapter, a as DimoAdapterConfig, f as DimoClient, b as DimoQuery, e as DimoSignal, d as DimoTelemetryData, c as createDimoAdapter } from '../../adapter-CNeHM6SQ.cjs';
|
|
2
2
|
import '../../types-ywkMNwun.cjs';
|
|
3
3
|
import '../../types-BcPssdQk.cjs';
|
|
4
4
|
import '@bind-protocol/policy-spec';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* DIMO GraphQL query builders
|
|
8
|
+
*
|
|
9
|
+
* Aligned with policy: bind.mobility.basicriskband v0.1.0
|
|
10
|
+
* Fetches only the three signals required by the policy:
|
|
11
|
+
* - powertrainTransmissionTravelledDistance (SUM)
|
|
12
|
+
* - isIgnitionOn (COUNT)
|
|
13
|
+
* - speed (MAX)
|
|
8
14
|
*/
|
|
9
15
|
/**
|
|
10
16
|
* Build a GraphQL query for fetching vehicle telemetry
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
export { D as DimoAdapter, a as DimoAdapterConfig, f as DimoClient, b as DimoQuery, e as DimoSignal, d as DimoTelemetryData, c as createDimoAdapter } from '../../adapter-
|
|
1
|
+
export { D as DimoAdapter, a as DimoAdapterConfig, f as DimoClient, b as DimoQuery, e as DimoSignal, d as DimoTelemetryData, c as createDimoAdapter } from '../../adapter-BRj4bkLl.js';
|
|
2
2
|
import '../../types-D7Q7ymPa.js';
|
|
3
3
|
import '../../types-BcPssdQk.js';
|
|
4
4
|
import '@bind-protocol/policy-spec';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* DIMO GraphQL query builders
|
|
8
|
+
*
|
|
9
|
+
* Aligned with policy: bind.mobility.basicriskband v0.1.0
|
|
10
|
+
* Fetches only the three signals required by the policy:
|
|
11
|
+
* - powertrainTransmissionTravelledDistance (SUM)
|
|
12
|
+
* - isIgnitionOn (COUNT)
|
|
13
|
+
* - speed (MAX)
|
|
8
14
|
*/
|
|
9
15
|
/**
|
|
10
16
|
* Build a GraphQL query for fetching vehicle telemetry
|
|
@@ -7,12 +7,9 @@ function buildTelemetryQuery(vehicleTokenId, from, to) {
|
|
|
7
7
|
from: ${from},
|
|
8
8
|
to: ${to}
|
|
9
9
|
) {
|
|
10
|
-
powertrainTransmissionTravelledDistance(agg:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
obdEngineLoad(agg: AVG)
|
|
14
|
-
obdDTCList(agg: UNIQUE)
|
|
15
|
-
obdRunTime(agg: AVG)
|
|
10
|
+
powertrainTransmissionTravelledDistance(agg: SUM)
|
|
11
|
+
isIgnitionOn(agg: COUNT)
|
|
12
|
+
speed(agg: MAX)
|
|
16
13
|
timestamp
|
|
17
14
|
}
|
|
18
15
|
}`;
|
|
@@ -39,7 +36,7 @@ ${signalLines}
|
|
|
39
36
|
|
|
40
37
|
// src/adapters/dimo/adapter.ts
|
|
41
38
|
var SUPPORTED_CIRCUITS = [
|
|
42
|
-
"bind.
|
|
39
|
+
"bind.dimo.riskband.v0_1_0"
|
|
43
40
|
];
|
|
44
41
|
var DimoAdapter = class {
|
|
45
42
|
id = "dimo";
|
|
@@ -72,7 +69,7 @@ var DimoAdapter = class {
|
|
|
72
69
|
);
|
|
73
70
|
}
|
|
74
71
|
switch (circuitId) {
|
|
75
|
-
case "bind.
|
|
72
|
+
case "bind.dimo.riskband.v0_1_0":
|
|
76
73
|
return this.toRiskBandInputs(data);
|
|
77
74
|
default:
|
|
78
75
|
throw new Error(`No input transformer for circuit: ${circuitId}`);
|
|
@@ -87,10 +84,29 @@ var DimoAdapter = class {
|
|
|
87
84
|
// ===========================================================================
|
|
88
85
|
// Private transformers
|
|
89
86
|
// ===========================================================================
|
|
87
|
+
/**
|
|
88
|
+
* Aggregate hourly telemetry rows into the three circuit inputs
|
|
89
|
+
* required by bind.mobility.basicriskband:
|
|
90
|
+
*
|
|
91
|
+
* mileage_90d (u32) — SUM of powertrainTransmissionTravelledDistance
|
|
92
|
+
* data_points (u32) — COUNT of isIgnitionOn (sum of per-hour counts)
|
|
93
|
+
* speed_max (u16) — MAX of speed
|
|
94
|
+
*/
|
|
90
95
|
toRiskBandInputs(data) {
|
|
96
|
+
let mileageSum = 0;
|
|
97
|
+
let dataPointsSum = 0;
|
|
98
|
+
let speedMax = 0;
|
|
99
|
+
for (const row of data.signals) {
|
|
100
|
+
mileageSum += row.powertrainTransmissionTravelledDistance ?? 0;
|
|
101
|
+
dataPointsSum += row.isIgnitionOn ?? 0;
|
|
102
|
+
if ((row.speed ?? 0) > speedMax) {
|
|
103
|
+
speedMax = row.speed;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
91
106
|
return {
|
|
92
|
-
|
|
93
|
-
|
|
107
|
+
mileage_90d: String(Math.round(mileageSum)),
|
|
108
|
+
data_points: String(Math.round(dataPointsSum)),
|
|
109
|
+
speed_max: String(Math.round(speedMax))
|
|
94
110
|
};
|
|
95
111
|
}
|
|
96
112
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapters/dimo/queries.ts","../../../src/adapters/dimo/adapter.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/dimo/queries.ts","../../../src/adapters/dimo/adapter.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * DIMO GraphQL query builders\n *\n * Aligned with policy: bind.mobility.basicriskband v0.1.0\n * Fetches only the three signals required by the policy:\n * - powertrainTransmissionTravelledDistance (SUM)\n * - isIgnitionOn (COUNT)\n * - speed (MAX)\n */\n\n/**\n * Build a GraphQL query for fetching vehicle telemetry\n * @param vehicleTokenId - The DIMO vehicle token ID\n * @param from - Start date (ISO 8601 or date string)\n * @param to - End date (ISO 8601 or date string)\n * @returns GraphQL query string\n */\nexport function buildTelemetryQuery(\n vehicleTokenId: string,\n from: string,\n to: string\n): string {\n return `{\n signals(\n tokenId: ${vehicleTokenId},\n interval: \"1h\",\n from: ${from},\n to: ${to}\n ) {\n powertrainTransmissionTravelledDistance(agg: SUM)\n isIgnitionOn(agg: COUNT)\n speed(agg: MAX)\n timestamp\n }\n}`;\n}\n\n/**\n * Build a GraphQL query for fetching specific signals\n * Allows customization of which signals to fetch and their aggregation\n */\nexport function buildCustomTelemetryQuery(\n vehicleTokenId: string,\n from: string,\n to: string,\n signals: Array<{\n name: string;\n aggregation?: 'AVG' | 'SUM' | 'MIN' | 'MAX' | 'UNIQUE' | 'COUNT';\n }>,\n interval = '1h'\n): string {\n const signalLines = signals\n .map((s) => {\n if (s.aggregation) {\n return ` ${s.name}(agg: ${s.aggregation})`;\n }\n return ` ${s.name}`;\n })\n .join('\\n');\n\n return `{\n signals(\n tokenId: ${vehicleTokenId},\n interval: \"${interval}\",\n from: ${from},\n to: ${to}\n ) {\n${signalLines}\n timestamp\n }\n}`;\n}\n","/**\n * DIMO Adapter\n *\n * Fetches vehicle telemetry data from the DIMO network and transforms it\n * into circuit inputs for Bind Protocol prove jobs.\n *\n * Aligned with policy: bind.mobility.basicriskband v0.1.0\n */\n\nimport type { DataAdapter } from '../types';\nimport type { ProveJobInputs } from '../../core/types';\nimport type { DimoAdapterConfig, DimoQuery, DimoTelemetryData, DimoClient } from './types';\nimport { buildTelemetryQuery } from './queries';\n\nconst SUPPORTED_CIRCUITS = [\n 'bind.dimo.riskband.v0_1_0',\n];\n\nexport class DimoAdapter implements DataAdapter<DimoAdapterConfig, DimoQuery, DimoTelemetryData> {\n readonly id = 'dimo';\n readonly name = 'DIMO Network';\n readonly description = 'Fetches vehicle telemetry data from the DIMO decentralized network';\n\n private readonly dimoClient: DimoClient;\n\n constructor(config: DimoAdapterConfig) {\n this.dimoClient = config.dimoClient;\n }\n\n /**\n * Fetch telemetry data from DIMO for a vehicle\n * @param query - Query parameters including vehicle token ID and date range\n * @returns Raw telemetry data from DIMO\n */\n async fetchData(query: DimoQuery): Promise<DimoTelemetryData> {\n const graphqlQuery = buildTelemetryQuery(query.vehicleTokenId, query.from, query.to);\n const result = await this.dimoClient.telemetry.query(graphqlQuery);\n return result;\n }\n\n /**\n * Transform DIMO telemetry data into circuit inputs\n * @param data - Raw telemetry data from DIMO\n * @param circuitId - Target circuit ID\n * @returns Inputs ready for prove job submission\n */\n toCircuitInputs(data: DimoTelemetryData, circuitId: string): ProveJobInputs {\n if (!SUPPORTED_CIRCUITS.includes(circuitId)) {\n throw new Error(\n `Circuit \"${circuitId}\" is not supported by the DIMO adapter. ` +\n `Supported circuits: ${SUPPORTED_CIRCUITS.join(', ')}`\n );\n }\n\n switch (circuitId) {\n case 'bind.dimo.riskband.v0_1_0':\n return this.toRiskBandInputs(data);\n default:\n throw new Error(`No input transformer for circuit: ${circuitId}`);\n }\n }\n\n /**\n * Get the list of circuits this adapter supports\n */\n getSupportedCircuits(): string[] {\n return [...SUPPORTED_CIRCUITS];\n }\n\n // ===========================================================================\n // Private transformers\n // ===========================================================================\n\n /**\n * Aggregate hourly telemetry rows into the three circuit inputs\n * required by bind.mobility.basicriskband:\n *\n * mileage_90d (u32) — SUM of powertrainTransmissionTravelledDistance\n * data_points (u32) — COUNT of isIgnitionOn (sum of per-hour counts)\n * speed_max (u16) — MAX of speed\n */\n private toRiskBandInputs(data: DimoTelemetryData): ProveJobInputs {\n let mileageSum = 0;\n let dataPointsSum = 0;\n let speedMax = 0;\n\n for (const row of data.signals) {\n mileageSum += row.powertrainTransmissionTravelledDistance ?? 0;\n dataPointsSum += row.isIgnitionOn ?? 0;\n if ((row.speed ?? 0) > speedMax) {\n speedMax = row.speed;\n }\n }\n\n return {\n mileage_90d: String(Math.round(mileageSum)),\n data_points: String(Math.round(dataPointsSum)),\n speed_max: String(Math.round(speedMax)),\n };\n }\n}\n\n/**\n * Factory function to create a DIMO adapter\n */\nexport function createDimoAdapter(config: DimoAdapterConfig): DimoAdapter {\n return new DimoAdapter(config);\n}\n"]}
|
package/dist/adapters/index.cjs
CHANGED
|
@@ -9,12 +9,9 @@ function buildTelemetryQuery(vehicleTokenId, from, to) {
|
|
|
9
9
|
from: ${from},
|
|
10
10
|
to: ${to}
|
|
11
11
|
) {
|
|
12
|
-
powertrainTransmissionTravelledDistance(agg:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
obdEngineLoad(agg: AVG)
|
|
16
|
-
obdDTCList(agg: UNIQUE)
|
|
17
|
-
obdRunTime(agg: AVG)
|
|
12
|
+
powertrainTransmissionTravelledDistance(agg: SUM)
|
|
13
|
+
isIgnitionOn(agg: COUNT)
|
|
14
|
+
speed(agg: MAX)
|
|
18
15
|
timestamp
|
|
19
16
|
}
|
|
20
17
|
}`;
|
|
@@ -22,7 +19,7 @@ function buildTelemetryQuery(vehicleTokenId, from, to) {
|
|
|
22
19
|
|
|
23
20
|
// src/adapters/dimo/adapter.ts
|
|
24
21
|
var SUPPORTED_CIRCUITS = [
|
|
25
|
-
"bind.
|
|
22
|
+
"bind.dimo.riskband.v0_1_0"
|
|
26
23
|
];
|
|
27
24
|
var DimoAdapter = class {
|
|
28
25
|
id = "dimo";
|
|
@@ -55,7 +52,7 @@ var DimoAdapter = class {
|
|
|
55
52
|
);
|
|
56
53
|
}
|
|
57
54
|
switch (circuitId) {
|
|
58
|
-
case "bind.
|
|
55
|
+
case "bind.dimo.riskband.v0_1_0":
|
|
59
56
|
return this.toRiskBandInputs(data);
|
|
60
57
|
default:
|
|
61
58
|
throw new Error(`No input transformer for circuit: ${circuitId}`);
|
|
@@ -70,10 +67,29 @@ var DimoAdapter = class {
|
|
|
70
67
|
// ===========================================================================
|
|
71
68
|
// Private transformers
|
|
72
69
|
// ===========================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Aggregate hourly telemetry rows into the three circuit inputs
|
|
72
|
+
* required by bind.mobility.basicriskband:
|
|
73
|
+
*
|
|
74
|
+
* mileage_90d (u32) — SUM of powertrainTransmissionTravelledDistance
|
|
75
|
+
* data_points (u32) — COUNT of isIgnitionOn (sum of per-hour counts)
|
|
76
|
+
* speed_max (u16) — MAX of speed
|
|
77
|
+
*/
|
|
73
78
|
toRiskBandInputs(data) {
|
|
79
|
+
let mileageSum = 0;
|
|
80
|
+
let dataPointsSum = 0;
|
|
81
|
+
let speedMax = 0;
|
|
82
|
+
for (const row of data.signals) {
|
|
83
|
+
mileageSum += row.powertrainTransmissionTravelledDistance ?? 0;
|
|
84
|
+
dataPointsSum += row.isIgnitionOn ?? 0;
|
|
85
|
+
if ((row.speed ?? 0) > speedMax) {
|
|
86
|
+
speedMax = row.speed;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
74
89
|
return {
|
|
75
|
-
|
|
76
|
-
|
|
90
|
+
mileage_90d: String(Math.round(mileageSum)),
|
|
91
|
+
data_points: String(Math.round(dataPointsSum)),
|
|
92
|
+
speed_max: String(Math.round(speedMax))
|
|
77
93
|
};
|
|
78
94
|
}
|
|
79
95
|
};
|