@irsdk-node/native 5.0.0 → 5.2.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/README.md +18 -0
- package/binding.gyp +5 -13
- package/dist/cjs/index.cjs +27 -11
- package/dist/esm/index.js +26 -11
- package/dist/types/INativeSDK.d.ts +13 -15
- package/dist/types/MockSdk.d.ts +6 -16
- package/dist/types/index.d.ts +1 -0
- package/lib/irsdk_node.cpp +533 -0
- package/lib/irsdk_node.h +93 -36
- package/lib/logger.cpp +68 -0
- package/lib/logger.h +57 -0
- package/lib/root.cpp +11 -0
- package/package.json +6 -6
- package/prebuilds/@irsdk-node+native.node +0 -0
- package/lib/irsdk_node.cc +0 -404
- package/lib/irsdk_node_mocked.cc +0 -226
- package/prebuilds/darwin-arm64/@irsdk-node+native.node +0 -0
- package/prebuilds/linux-x64/@irsdk-node+native.node +0 -0
- package/prebuilds/win32-x64/@irsdk-node+native.node +0 -0
- package/scripts/generate-var-types.js +0 -71
package/README.md
CHANGED
|
@@ -113,3 +113,21 @@ $ pnpm clean
|
|
|
113
113
|
# Lint package
|
|
114
114
|
$ pnpm lint
|
|
115
115
|
```
|
|
116
|
+
|
|
117
|
+
#### ⚠️ C++ Build errors from prebuildify/node-gyp
|
|
118
|
+
|
|
119
|
+
If the C++ build fails with an error similar to:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
gyp: /<path>/<to>/common.gypi not found (cwd: /<cwd>/<path>) while reading includes of binding.gyp...
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Then try looking for your global node-gyp and prebuildify caches. On Windows, they should be somewhere around:
|
|
126
|
+
|
|
127
|
+
- Node-gyp:
|
|
128
|
+
- `C:\Users\<YourUser>\AppData\Local\node-gyp`
|
|
129
|
+
- `C:\Users\<YourUser>\AppData\Local\.node-gyp`
|
|
130
|
+
- Prebuildify:
|
|
131
|
+
- `C:\Users\<YourUser>\AppData\Local\Temp\prebuildify`
|
|
132
|
+
|
|
133
|
+
Once cleared, you can try running `pnpm clean && pnpm build` again. Prebuildify and Node-GYP should then attempt to do a fresh install before attempting to build.
|
package/binding.gyp
CHANGED
|
@@ -3,19 +3,11 @@
|
|
|
3
3
|
{
|
|
4
4
|
"target_name": "irsdk_node",
|
|
5
5
|
"sources": [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"lib/irsdk_node.cc",
|
|
12
|
-
"lib/irsdk_utils.cpp",
|
|
13
|
-
"lib/irsdk_defines.h"
|
|
14
|
-
]
|
|
15
|
-
}],
|
|
16
|
-
["OS!='win'", {
|
|
17
|
-
"sources": ["lib/irsdk_node_mocked.cc"]
|
|
18
|
-
}]
|
|
6
|
+
"lib/root.cpp",
|
|
7
|
+
"lib/logger.cpp",
|
|
8
|
+
"lib/irsdk_node.cpp",
|
|
9
|
+
"lib/irsdk_utils.cpp",
|
|
10
|
+
"lib/irsdk_defines.h"
|
|
19
11
|
],
|
|
20
12
|
"defines": [
|
|
21
13
|
"NAPI_DISABLE_CPP_EXCEPTIONS",
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -9336,6 +9336,7 @@ var require_telemetry = __commonJS({
|
|
|
9336
9336
|
// src/index.ts
|
|
9337
9337
|
var index_exports = {};
|
|
9338
9338
|
__export(index_exports, {
|
|
9339
|
+
LogLevel: () => LogLevel,
|
|
9339
9340
|
NativeSDK: () => NativeSDK,
|
|
9340
9341
|
sdkIsMocked: () => sdkIsMocked
|
|
9341
9342
|
});
|
|
@@ -9351,6 +9352,16 @@ var import_node_gyp_build = __toESM(require("node-gyp-build"), 1);
|
|
|
9351
9352
|
// src/MockSdk.ts
|
|
9352
9353
|
var import_node_console = require("node:console");
|
|
9353
9354
|
|
|
9355
|
+
// src/INativeSDK.ts
|
|
9356
|
+
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
9357
|
+
LogLevel2[LogLevel2["None"] = 0] = "None";
|
|
9358
|
+
LogLevel2[LogLevel2["Error"] = 1] = "Error";
|
|
9359
|
+
LogLevel2[LogLevel2["Warn"] = 2] = "Warn";
|
|
9360
|
+
LogLevel2[LogLevel2["Info"] = 3] = "Info";
|
|
9361
|
+
LogLevel2[LogLevel2["Debug"] = 4] = "Debug";
|
|
9362
|
+
return LogLevel2;
|
|
9363
|
+
})(LogLevel || {});
|
|
9364
|
+
|
|
9354
9365
|
// src/mock-data/loader.ts
|
|
9355
9366
|
var import_js_yaml = require("js-yaml");
|
|
9356
9367
|
var loadMockSessionData = async () => {
|
|
@@ -9369,6 +9380,7 @@ var MockSDK = class {
|
|
|
9369
9380
|
currDataVersion = 1;
|
|
9370
9381
|
isMocked = true;
|
|
9371
9382
|
enableLogging = false;
|
|
9383
|
+
logLevel = 0 /* None */;
|
|
9372
9384
|
_isRunning = false;
|
|
9373
9385
|
constructor() {
|
|
9374
9386
|
this._loadMockData().catch((reason) => {
|
|
@@ -9398,14 +9410,21 @@ var MockSDK = class {
|
|
|
9398
9410
|
return this._isRunning;
|
|
9399
9411
|
}
|
|
9400
9412
|
waitForData(_timeout) {
|
|
9401
|
-
|
|
9413
|
+
const dataNotReady = !mockSession || !mockTelemetry;
|
|
9414
|
+
return this._isRunning && !dataNotReady;
|
|
9402
9415
|
}
|
|
9403
9416
|
getSessionData() {
|
|
9404
9417
|
return mockSession ?? "";
|
|
9405
9418
|
}
|
|
9419
|
+
getSessionConnectionID() {
|
|
9420
|
+
return mockSession ? 1 : -1;
|
|
9421
|
+
}
|
|
9422
|
+
getSessionVersionNum() {
|
|
9423
|
+
return mockSession ? 1 : -1;
|
|
9424
|
+
}
|
|
9406
9425
|
getTelemetryData() {
|
|
9407
9426
|
if (!mockTelemetry) {
|
|
9408
|
-
|
|
9427
|
+
return {};
|
|
9409
9428
|
}
|
|
9410
9429
|
return mockTelemetry;
|
|
9411
9430
|
}
|
|
@@ -9418,8 +9437,9 @@ var MockSDK = class {
|
|
|
9418
9437
|
}
|
|
9419
9438
|
return mockTelemetry[name];
|
|
9420
9439
|
}
|
|
9421
|
-
broadcast(...args) {
|
|
9422
|
-
(0, import_node_console.log)("Mocking SDK call:", ...args);
|
|
9440
|
+
broadcast(message, ...args) {
|
|
9441
|
+
(0, import_node_console.log)("Mocking SDK call:", message, ...args);
|
|
9442
|
+
return true;
|
|
9423
9443
|
}
|
|
9424
9444
|
__getTelemetryTypes() {
|
|
9425
9445
|
return {};
|
|
@@ -9429,16 +9449,11 @@ var MockSDK = class {
|
|
|
9429
9449
|
// src/index.ts
|
|
9430
9450
|
var DIR_NAME = getDirname();
|
|
9431
9451
|
var sdkBinding;
|
|
9432
|
-
var isMocked;
|
|
9452
|
+
var isMocked = false;
|
|
9433
9453
|
try {
|
|
9434
9454
|
const rootDir = (0, import_node_path.join)(DIR_NAME, "../..");
|
|
9435
9455
|
const binding = (0, import_node_gyp_build.default)(rootDir);
|
|
9436
|
-
|
|
9437
|
-
if (isMocked) {
|
|
9438
|
-
sdkBinding = MockSDK;
|
|
9439
|
-
} else {
|
|
9440
|
-
sdkBinding = binding.iRacingSdkNode;
|
|
9441
|
-
}
|
|
9456
|
+
sdkBinding = binding.iRacingSdkNode;
|
|
9442
9457
|
} catch {
|
|
9443
9458
|
console.warn("Failed to load native iRacing SDK module. Loading mock SDK instead.");
|
|
9444
9459
|
isMocked = true;
|
|
@@ -9448,6 +9463,7 @@ var NativeSDK = sdkBinding;
|
|
|
9448
9463
|
var sdkIsMocked = isMocked;
|
|
9449
9464
|
// Annotate the CommonJS export names for ESM import in node:
|
|
9450
9465
|
0 && (module.exports = {
|
|
9466
|
+
LogLevel,
|
|
9451
9467
|
NativeSDK,
|
|
9452
9468
|
sdkIsMocked
|
|
9453
9469
|
});
|
package/dist/esm/index.js
CHANGED
|
@@ -9339,6 +9339,16 @@ import importNativeModule from "node-gyp-build";
|
|
|
9339
9339
|
// src/MockSdk.ts
|
|
9340
9340
|
import { error, warn, log } from "node:console";
|
|
9341
9341
|
|
|
9342
|
+
// src/INativeSDK.ts
|
|
9343
|
+
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
9344
|
+
LogLevel2[LogLevel2["None"] = 0] = "None";
|
|
9345
|
+
LogLevel2[LogLevel2["Error"] = 1] = "Error";
|
|
9346
|
+
LogLevel2[LogLevel2["Warn"] = 2] = "Warn";
|
|
9347
|
+
LogLevel2[LogLevel2["Info"] = 3] = "Info";
|
|
9348
|
+
LogLevel2[LogLevel2["Debug"] = 4] = "Debug";
|
|
9349
|
+
return LogLevel2;
|
|
9350
|
+
})(LogLevel || {});
|
|
9351
|
+
|
|
9342
9352
|
// src/mock-data/loader.ts
|
|
9343
9353
|
import { dump } from "js-yaml";
|
|
9344
9354
|
var loadMockSessionData = async () => {
|
|
@@ -9357,6 +9367,7 @@ var MockSDK = class {
|
|
|
9357
9367
|
currDataVersion = 1;
|
|
9358
9368
|
isMocked = true;
|
|
9359
9369
|
enableLogging = false;
|
|
9370
|
+
logLevel = 0 /* None */;
|
|
9360
9371
|
_isRunning = false;
|
|
9361
9372
|
constructor() {
|
|
9362
9373
|
this._loadMockData().catch((reason) => {
|
|
@@ -9386,14 +9397,21 @@ var MockSDK = class {
|
|
|
9386
9397
|
return this._isRunning;
|
|
9387
9398
|
}
|
|
9388
9399
|
waitForData(_timeout) {
|
|
9389
|
-
|
|
9400
|
+
const dataNotReady = !mockSession || !mockTelemetry;
|
|
9401
|
+
return this._isRunning && !dataNotReady;
|
|
9390
9402
|
}
|
|
9391
9403
|
getSessionData() {
|
|
9392
9404
|
return mockSession ?? "";
|
|
9393
9405
|
}
|
|
9406
|
+
getSessionConnectionID() {
|
|
9407
|
+
return mockSession ? 1 : -1;
|
|
9408
|
+
}
|
|
9409
|
+
getSessionVersionNum() {
|
|
9410
|
+
return mockSession ? 1 : -1;
|
|
9411
|
+
}
|
|
9394
9412
|
getTelemetryData() {
|
|
9395
9413
|
if (!mockTelemetry) {
|
|
9396
|
-
|
|
9414
|
+
return {};
|
|
9397
9415
|
}
|
|
9398
9416
|
return mockTelemetry;
|
|
9399
9417
|
}
|
|
@@ -9406,8 +9424,9 @@ var MockSDK = class {
|
|
|
9406
9424
|
}
|
|
9407
9425
|
return mockTelemetry[name];
|
|
9408
9426
|
}
|
|
9409
|
-
broadcast(...args) {
|
|
9410
|
-
log("Mocking SDK call:", ...args);
|
|
9427
|
+
broadcast(message, ...args) {
|
|
9428
|
+
log("Mocking SDK call:", message, ...args);
|
|
9429
|
+
return true;
|
|
9411
9430
|
}
|
|
9412
9431
|
__getTelemetryTypes() {
|
|
9413
9432
|
return {};
|
|
@@ -9417,16 +9436,11 @@ var MockSDK = class {
|
|
|
9417
9436
|
// src/index.ts
|
|
9418
9437
|
var DIR_NAME = getDirname();
|
|
9419
9438
|
var sdkBinding;
|
|
9420
|
-
var isMocked;
|
|
9439
|
+
var isMocked = false;
|
|
9421
9440
|
try {
|
|
9422
9441
|
const rootDir = join(DIR_NAME, "../..");
|
|
9423
9442
|
const binding = importNativeModule(rootDir);
|
|
9424
|
-
|
|
9425
|
-
if (isMocked) {
|
|
9426
|
-
sdkBinding = MockSDK;
|
|
9427
|
-
} else {
|
|
9428
|
-
sdkBinding = binding.iRacingSdkNode;
|
|
9429
|
-
}
|
|
9443
|
+
sdkBinding = binding.iRacingSdkNode;
|
|
9430
9444
|
} catch {
|
|
9431
9445
|
console.warn("Failed to load native iRacing SDK module. Loading mock SDK instead.");
|
|
9432
9446
|
isMocked = true;
|
|
@@ -9435,6 +9449,7 @@ try {
|
|
|
9435
9449
|
var NativeSDK = sdkBinding;
|
|
9436
9450
|
var sdkIsMocked = isMocked;
|
|
9437
9451
|
export {
|
|
9452
|
+
LogLevel,
|
|
9438
9453
|
NativeSDK,
|
|
9439
9454
|
sdkIsMocked
|
|
9440
9455
|
};
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BroadcastCommand, BroadcastCommandArgs, TelemetryVariable, TelemetryVarList } from '@irsdk-node/types';
|
|
2
2
|
export type TelemetryTypesDict = Record<string, number>;
|
|
3
|
+
export declare enum LogLevel {
|
|
4
|
+
None = 0,
|
|
5
|
+
Error = 1,
|
|
6
|
+
Warn = 2,
|
|
7
|
+
Info = 3,
|
|
8
|
+
Debug = 4
|
|
9
|
+
}
|
|
3
10
|
/**
|
|
4
11
|
* Interface of the iRacing SDK native module.
|
|
5
12
|
*
|
|
@@ -9,29 +16,20 @@ export type TelemetryTypesDict = Record<string, number>;
|
|
|
9
16
|
export interface INativeSDK {
|
|
10
17
|
readonly currDataVersion: number;
|
|
11
18
|
readonly isMocked: boolean;
|
|
19
|
+
/** @deprecated use .logLevel instead */
|
|
12
20
|
enableLogging: boolean;
|
|
21
|
+
logLevel: LogLevel;
|
|
13
22
|
startSDK(): boolean;
|
|
14
23
|
stopSDK(): void;
|
|
15
24
|
isRunning(): boolean;
|
|
16
25
|
waitForData(timeout?: number): boolean;
|
|
17
26
|
getSessionData(): string;
|
|
18
27
|
getTelemetryData(): TelemetryVarList;
|
|
28
|
+
getSessionVersionNum(): number;
|
|
29
|
+
getSessionConnectionID(): number;
|
|
19
30
|
getTelemetryVariable<T>(index: number): TelemetryVariable<T>;
|
|
20
31
|
getTelemetryVariable<T>(name: string): TelemetryVariable<T>;
|
|
21
32
|
__getTelemetryTypes(): TelemetryTypesDict;
|
|
22
|
-
broadcast
|
|
23
|
-
broadcast(message: BroadcastMessages.CameraSwitchNum, driver: number, group: number, camera: number): void;
|
|
24
|
-
broadcast(message: BroadcastMessages.CameraSetState, state: CameraState): void;
|
|
25
|
-
broadcast(message: BroadcastMessages.ReplaySetPlaySpeed, speed: number, slowMotion: number): void;
|
|
26
|
-
broadcast(message: BroadcastMessages.ReplaySetPlayPosition, pos: ReplayPositionCommand, frame: number): void;
|
|
27
|
-
broadcast(message: BroadcastMessages.ReplaySearch, mode: ReplaySearchCommand): void;
|
|
28
|
-
broadcast(message: BroadcastMessages.ReplaySetState, state: ReplayStateCommand): void;
|
|
29
|
-
broadcast(message: BroadcastMessages.ReloadTextures, command: ReloadTexturesCommand, carIndex?: number): void;
|
|
30
|
-
broadcast(message: BroadcastMessages.ChatCommand, command: ChatCommand, macro?: number): void;
|
|
31
|
-
broadcast(message: BroadcastMessages.PitCommand, command: PitCommand, param?: number): void;
|
|
32
|
-
broadcast(message: BroadcastMessages.TelemCommand, command: TelemetryCommand): void;
|
|
33
|
-
broadcast(message: BroadcastMessages.FFBCommand, command: FFBCommand, value: number): void;
|
|
34
|
-
broadcast(message: BroadcastMessages.ReplaySearchSessionTime, session: number, time: number): void;
|
|
35
|
-
broadcast(message: BroadcastMessages.VideoCapture, command: VideoCaptureCommand): void;
|
|
33
|
+
broadcast<Command extends BroadcastCommand = BroadcastCommand>(message: Command, ...args: BroadcastCommandArgs<Command>): boolean;
|
|
36
34
|
}
|
|
37
35
|
export type NativeSDKImpl = new () => INativeSDK;
|
package/dist/types/MockSdk.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type
|
|
1
|
+
import { BroadcastCommand, BroadcastCommandArgs, TelemetryVariable, TelemetryVarList } from '@irsdk-node/types';
|
|
2
|
+
import { LogLevel, type INativeSDK, type TelemetryTypesDict } from './INativeSDK.js';
|
|
3
3
|
type TelemetryVarKey = keyof TelemetryVarList;
|
|
4
4
|
type TelemetryResultTypes = boolean | number | string;
|
|
5
5
|
/**
|
|
@@ -14,6 +14,7 @@ export declare class MockSDK implements INativeSDK {
|
|
|
14
14
|
currDataVersion: number;
|
|
15
15
|
isMocked: boolean;
|
|
16
16
|
enableLogging: boolean;
|
|
17
|
+
logLevel: LogLevel;
|
|
17
18
|
private _isRunning;
|
|
18
19
|
constructor();
|
|
19
20
|
private _loadMockData;
|
|
@@ -22,23 +23,12 @@ export declare class MockSDK implements INativeSDK {
|
|
|
22
23
|
isRunning(): boolean;
|
|
23
24
|
waitForData(_timeout?: number): boolean;
|
|
24
25
|
getSessionData(): string;
|
|
26
|
+
getSessionConnectionID(): number;
|
|
27
|
+
getSessionVersionNum(): number;
|
|
25
28
|
getTelemetryData(): TelemetryVarList;
|
|
26
29
|
getTelemetryVariable<T extends TelemetryResultTypes>(index: number): TelemetryVariable<T[]>;
|
|
27
30
|
getTelemetryVariable<T extends TelemetryResultTypes>(name: TelemetryVarKey): TelemetryVariable<T[]>;
|
|
28
|
-
broadcast
|
|
29
|
-
broadcast(message: BroadcastMessages.CameraSwitchNum, driver: number, group: number, camera: number): void;
|
|
30
|
-
broadcast(message: BroadcastMessages.CameraSetState, state: CameraState): void;
|
|
31
|
-
broadcast(message: BroadcastMessages.ReplaySetPlaySpeed, speed: number, slowMotion: number): void;
|
|
32
|
-
broadcast(message: BroadcastMessages.ReplaySetPlayPosition, pos: ReplayPositionCommand, frame: number): void;
|
|
33
|
-
broadcast(message: BroadcastMessages.ReplaySearch, mode: ReplaySearchCommand): void;
|
|
34
|
-
broadcast(message: BroadcastMessages.ReplaySetState, state: ReplayStateCommand): void;
|
|
35
|
-
broadcast(message: BroadcastMessages.ReloadTextures, command: ReloadTexturesCommand, carIndex?: number): void;
|
|
36
|
-
broadcast(message: BroadcastMessages.ChatCommand, command: ChatCommand, macro?: number): void;
|
|
37
|
-
broadcast(message: BroadcastMessages.PitCommand, command: PitCommand, param?: number): void;
|
|
38
|
-
broadcast(message: BroadcastMessages.TelemCommand, command: TelemetryCommand): void;
|
|
39
|
-
broadcast(message: BroadcastMessages.FFBCommand, command: FFBCommand, value: number): void;
|
|
40
|
-
broadcast(message: BroadcastMessages.ReplaySearchSessionTime, session: number, time: number): void;
|
|
41
|
-
broadcast(message: BroadcastMessages.VideoCapture, command: VideoCaptureCommand): void;
|
|
31
|
+
broadcast<Command extends BroadcastCommand = BroadcastCommand>(message: Command, ...args: BroadcastCommandArgs<Command>): boolean;
|
|
42
32
|
__getTelemetryTypes(): TelemetryTypesDict;
|
|
43
33
|
}
|
|
44
34
|
export {};
|
package/dist/types/index.d.ts
CHANGED