steamworks-ffi-node 0.3.1 → 0.4.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 (37) hide show
  1. package/README.md +32 -0
  2. package/dist/index.d.ts +2 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/internal/SteamAPICore.d.ts +32 -9
  7. package/dist/internal/SteamAPICore.d.ts.map +1 -1
  8. package/dist/internal/SteamAPICore.js +46 -15
  9. package/dist/internal/SteamAPICore.js.map +1 -1
  10. package/dist/internal/SteamAchievementManager.d.ts +25 -25
  11. package/dist/internal/SteamAchievementManager.js +26 -26
  12. package/dist/internal/SteamAchievementManager.js.map +1 -1
  13. package/dist/internal/SteamCallbackPoller.d.ts +68 -0
  14. package/dist/internal/SteamCallbackPoller.d.ts.map +1 -0
  15. package/dist/internal/SteamCallbackPoller.js +134 -0
  16. package/dist/internal/SteamCallbackPoller.js.map +1 -0
  17. package/dist/internal/SteamLeaderboardManager.d.ts +338 -0
  18. package/dist/internal/SteamLeaderboardManager.d.ts.map +1 -0
  19. package/dist/internal/SteamLeaderboardManager.js +734 -0
  20. package/dist/internal/SteamLeaderboardManager.js.map +1 -0
  21. package/dist/internal/SteamLibraryLoader.d.ts +15 -0
  22. package/dist/internal/SteamLibraryLoader.d.ts.map +1 -1
  23. package/dist/internal/SteamLibraryLoader.js +26 -0
  24. package/dist/internal/SteamLibraryLoader.js.map +1 -1
  25. package/dist/internal/SteamStatsManager.d.ts +57 -45
  26. package/dist/internal/SteamStatsManager.d.ts.map +1 -1
  27. package/dist/internal/SteamStatsManager.js +146 -101
  28. package/dist/internal/SteamStatsManager.js.map +1 -1
  29. package/dist/steam.d.ts +169 -9
  30. package/dist/steam.d.ts.map +1 -1
  31. package/dist/steam.js +178 -0
  32. package/dist/steam.js.map +1 -1
  33. package/dist/types.d.ts +91 -0
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/types.js +34 -0
  36. package/dist/types.js.map +1 -1
  37. package/package.json +4 -3
package/README.md CHANGED
@@ -11,6 +11,8 @@ A production-ready TypeScript/JavaScript wrapper for the Steamworks SDK using Ko
11
11
 
12
12
  > 🎉 **NEW: 100% Stats API Coverage** - All 13 Steam statistics functions implemented! [See Documentation](https://github.com/ArtyProf/steamworks-ffi-node/blob/main/docs/STATS_MANAGER.md)
13
13
 
14
+ > 🎉 **NEW: 100% Leaderboard API Coverage** - All 7 Steam leaderboard functions implemented! [See Documentation](https://github.com/ArtyProf/steamworks-ffi-node/blob/main/docs/LEADERBOARD_MANAGER.md)
15
+
14
16
  ## 🎯 Features
15
17
 
16
18
  - **Complete Achievement API**: 100% coverage of Steam Achievement functionality (20/20 functions)
@@ -24,6 +26,11 @@ A production-ready TypeScript/JavaScript wrapper for the Steamworks SDK using Ko
24
26
  - ✅ User stats (get/set int/float, average rate tracking)
25
27
  - ✅ Friend comparisons (compare stats with friends)
26
28
  - ✅ Global statistics (worldwide aggregated data with history)
29
+ - **Complete Leaderboard API**: 100% coverage of Steam Leaderboard functionality (7/7 functions)
30
+ - ✅ Leaderboard management (find, create, get info)
31
+ - ✅ Score operations (upload with optional details)
32
+ - ✅ Entry download (global, friends, specific users)
33
+ - ✅ UGC integration (attach replays/screenshots to entries)
27
34
  - **Steamworks Integration**: Direct FFI calls to Steamworks C++ SDK
28
35
  - **Cross-Platform**: Windows, macOS, and Linux support
29
36
  - **Batteries Included**: All Steamworks redistributables bundled - no SDK download needed!
@@ -80,6 +87,31 @@ if (initialized) {
80
87
  steam.runCallbacks();
81
88
  const globalKills = await steam.getGlobalStatInt('global.total_kills');
82
89
  console.log('Total kills worldwide:', globalKills);
90
+
91
+ // Work with leaderboards
92
+ const leaderboard = await steam.findOrCreateLeaderboard(
93
+ 'HighScores',
94
+ 1, // Descending (higher is better)
95
+ 0 // Numeric display
96
+ );
97
+
98
+ if (leaderboard) {
99
+ // Upload score
100
+ await steam.uploadLeaderboardScore(
101
+ leaderboard.handle,
102
+ 1000,
103
+ 1 // Keep best score
104
+ );
105
+
106
+ // Download top 10 scores
107
+ const topScores = await steam.downloadLeaderboardEntries(
108
+ leaderboard.handle,
109
+ 0, // Global
110
+ 0,
111
+ 9
112
+ );
113
+ console.log('Top 10 scores:', topScores);
114
+ }
83
115
  }
84
116
 
85
117
  // Cleanup
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import SteamworksSDK from './steam';
2
- import { SteamAchievement, SteamInitOptions, SteamStatus, AchievementProgressLimits, UserAchievement, AchievementGlobalStats, AchievementWithIcon, SteamStat, GlobalStat, GlobalStatHistory, UserStat } from './types';
3
- export { SteamAchievement, SteamInitOptions, SteamStatus, AchievementProgressLimits, UserAchievement, AchievementGlobalStats, AchievementWithIcon, SteamStat, GlobalStat, GlobalStatHistory, UserStat };
2
+ import { SteamAchievement, SteamInitOptions, SteamStatus, AchievementProgressLimits, UserAchievement, AchievementGlobalStats, AchievementWithIcon, SteamStat, GlobalStat, GlobalStatHistory, UserStat, LeaderboardEntry, LeaderboardInfo, LeaderboardScoreUploadResult, LeaderboardSortMethod, LeaderboardDisplayType, LeaderboardDataRequest, LeaderboardUploadScoreMethod } from './types';
3
+ export { SteamAchievement, SteamInitOptions, SteamStatus, AchievementProgressLimits, UserAchievement, AchievementGlobalStats, AchievementWithIcon, SteamStat, GlobalStat, GlobalStatHistory, UserStat, LeaderboardEntry, LeaderboardInfo, LeaderboardScoreUploadResult, LeaderboardSortMethod, LeaderboardDisplayType, LeaderboardDataRequest, LeaderboardUploadScoreMethod };
4
4
  export default SteamworksSDK;
5
5
  export { SteamworksSDK as Steam };
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACT,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACT,CAAC;AAGF,eAAe,aAAa,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC7B,CAAC;AAGF,eAAe,aAAa,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,KAAK,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -3,9 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Steam = void 0;
6
+ exports.Steam = exports.LeaderboardUploadScoreMethod = exports.LeaderboardDataRequest = exports.LeaderboardDisplayType = exports.LeaderboardSortMethod = void 0;
7
7
  const steam_1 = __importDefault(require("./steam"));
8
8
  exports.Steam = steam_1.default;
9
+ const types_1 = require("./types");
10
+ Object.defineProperty(exports, "LeaderboardSortMethod", { enumerable: true, get: function () { return types_1.LeaderboardSortMethod; } });
11
+ Object.defineProperty(exports, "LeaderboardDisplayType", { enumerable: true, get: function () { return types_1.LeaderboardDisplayType; } });
12
+ Object.defineProperty(exports, "LeaderboardDataRequest", { enumerable: true, get: function () { return types_1.LeaderboardDataRequest; } });
13
+ Object.defineProperty(exports, "LeaderboardUploadScoreMethod", { enumerable: true, get: function () { return types_1.LeaderboardUploadScoreMethod; } });
9
14
  // Export main Steam class
10
15
  exports.default = steam_1.default;
11
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAoC;AAkCV,gBAlCnB,eAAa,CAkCW;AAJ/B,0BAA0B;AAC1B,kBAAe,eAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAoC;AAgDV,gBAhDnB,eAAa,CAgDW;AA/C/B,mCAmBiB;AAkBf,sGAtBA,6BAAqB,OAsBA;AACrB,uGAtBA,8BAAsB,OAsBA;AACtB,uGAtBA,8BAAsB,OAsBA;AACtB,6GAtBA,oCAA4B,OAsBA;AAG9B,0BAA0B;AAC1B,kBAAe,eAAa,CAAC"}
@@ -19,7 +19,7 @@ import { SteamLibraryLoader } from './SteamLibraryLoader';
19
19
  *
20
20
  * const success = apiCore.init({ appId: 480 });
21
21
  * if (success) {
22
- * console.log('Steam API initialized!');
22
+ * console.log('[Steamworks] Steam API initialized!');
23
23
  * // Use Steam features...
24
24
  * apiCore.shutdown();
25
25
  * }
@@ -36,6 +36,8 @@ export declare class SteamAPICore {
36
36
  private userStatsInterface;
37
37
  /** Pointer to the ISteamUser interface */
38
38
  private userInterface;
39
+ /** Pointer to the ISteamUtils interface */
40
+ private utilsInterface;
39
41
  /**
40
42
  * Creates a new SteamAPICore instance
41
43
  *
@@ -56,9 +58,9 @@ export declare class SteamAPICore {
56
58
  * ```typescript
57
59
  * const success = apiCore.init({ appId: 480 });
58
60
  * if (success) {
59
- * console.log('Connected to Steam for App ID:', 480);
61
+ * console.log('[Steamworks] Connected to Steam for App ID:', 480);
60
62
  * } else {
61
- * console.error('Failed to initialize Steam API');
63
+ * console.error('[Steamworks] Failed to initialize Steam API');
62
64
  * }
63
65
  * ```
64
66
  *
@@ -114,9 +116,9 @@ export declare class SteamAPICore {
114
116
  * @example
115
117
  * ```typescript
116
118
  * const status = apiCore.getStatus();
117
- * console.log(`Initialized: ${status.initialized}`);
118
- * console.log(`App ID: ${status.appId}`);
119
- * console.log(`Steam ID: ${status.steamId}`);
119
+ * console.log(`[Steamworks] Initialized: ${status.initialized}`);
120
+ * console.log(`[Steamworks] App ID: ${status.appId}`);
121
+ * console.log(`[Steamworks] Steam ID: ${status.steamId}`);
120
122
  * ```
121
123
  *
122
124
  * @remarks
@@ -160,9 +162,9 @@ export declare class SteamAPICore {
160
162
  * @example
161
163
  * ```typescript
162
164
  * if (apiCore.isSteamRunning()) {
163
- * console.log('Steam client is active');
165
+ * console.log('[Steamworks] Steam client is active');
164
166
  * } else {
165
- * console.warn('Steam client is not running');
167
+ * console.warn('[Steamworks] Steam client is not running');
166
168
  * }
167
169
  * ```
168
170
  *
@@ -184,7 +186,7 @@ export declare class SteamAPICore {
184
186
  * @example
185
187
  * ```typescript
186
188
  * if (!apiCore.isInitialized()) {
187
- * console.error('Cannot perform Steam operations - not initialized');
189
+ * console.error('[Steamworks] Cannot perform Steam operations - not initialized');
188
190
  * return;
189
191
  * }
190
192
  * ```
@@ -232,5 +234,26 @@ export declare class SteamAPICore {
232
234
  * - This is a native pointer for use with FFI calls
233
235
  */
234
236
  getUserInterface(): any;
237
+ /**
238
+ * Get the ISteamUtils interface pointer
239
+ *
240
+ * Returns the native pointer to the ISteamUtils interface, which is used
241
+ * for utility operations including API call result checking.
242
+ *
243
+ * @returns Pointer to ISteamUtils interface, or null if not initialized
244
+ *
245
+ * @example
246
+ * ```typescript
247
+ * const utils = apiCore.getUtilsInterface();
248
+ * if (utils) {
249
+ * // Use interface for utility operations
250
+ * }
251
+ * ```
252
+ *
253
+ * @remarks
254
+ * - Returns null if Steam API is not initialized
255
+ * - This is a native pointer for use with FFI calls
256
+ */
257
+ getUtilsInterface(): any;
235
258
  }
236
259
  //# sourceMappingURL=SteamAPICore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SteamAPICore.d.ts","sourceRoot":"","sources":["../../src/internal/SteamAPICore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,YAAY;IACvB,kDAAkD;IAClD,OAAO,CAAC,aAAa,CAAqB;IAE1C,8DAA8D;IAC9D,OAAO,CAAC,WAAW,CAAkB;IAErC,4CAA4C;IAC5C,OAAO,CAAC,KAAK,CAAa;IAE1B,+CAA+C;IAC/C,OAAO,CAAC,kBAAkB,CAAa;IAEvC,0CAA0C;IAC1C,OAAO,CAAC,aAAa,CAAa;IAElC;;;;OAIG;gBACS,aAAa,EAAE,kBAAkB;IAI7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAmExC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,IAAI,IAAI;IAWhB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS,IAAI,WAAW;IAmBxB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,YAAY,IAAI,IAAI;IAUpB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,IAAI,OAAO;IAYzB;;;;;;;;;;;;;;OAcG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,qBAAqB,IAAI,GAAG;IAI5B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,IAAI,GAAG;CAGxB"}
1
+ {"version":3,"file":"SteamAPICore.d.ts","sourceRoot":"","sources":["../../src/internal/SteamAPICore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,YAAY;IACvB,kDAAkD;IAClD,OAAO,CAAC,aAAa,CAAqB;IAE1C,8DAA8D;IAC9D,OAAO,CAAC,WAAW,CAAkB;IAErC,4CAA4C;IAC5C,OAAO,CAAC,KAAK,CAAa;IAE1B,+CAA+C;IAC/C,OAAO,CAAC,kBAAkB,CAAa;IAEvC,0CAA0C;IAC1C,OAAO,CAAC,aAAa,CAAa;IAElC,2CAA2C;IAC3C,OAAO,CAAC,cAAc,CAAa;IAEnC;;;;OAIG;gBACS,aAAa,EAAE,kBAAkB;IAI7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAyExC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,IAAI,IAAI;IAYhB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS,IAAI,WAAW;IAmBxB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,YAAY,IAAI,IAAI;IAUpB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,IAAI,OAAO;IAYzB;;;;;;;;;;;;;;OAcG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,qBAAqB,IAAI,GAAG;IAI5B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,IAAI,GAAG;IAIvB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAAiB,IAAI,GAAG;CAGzB"}
@@ -55,7 +55,7 @@ const path = __importStar(require("path"));
55
55
  *
56
56
  * const success = apiCore.init({ appId: 480 });
57
57
  * if (success) {
58
- * console.log('Steam API initialized!');
58
+ * console.log('[Steamworks] Steam API initialized!');
59
59
  * // Use Steam features...
60
60
  * apiCore.shutdown();
61
61
  * }
@@ -76,6 +76,8 @@ class SteamAPICore {
76
76
  this.userStatsInterface = null;
77
77
  /** Pointer to the ISteamUser interface */
78
78
  this.userInterface = null;
79
+ /** Pointer to the ISteamUtils interface */
80
+ this.utilsInterface = null;
79
81
  this.libraryLoader = libraryLoader;
80
82
  }
81
83
  /**
@@ -92,9 +94,9 @@ class SteamAPICore {
92
94
  * ```typescript
93
95
  * const success = apiCore.init({ appId: 480 });
94
96
  * if (success) {
95
- * console.log('Connected to Steam for App ID:', 480);
97
+ * console.log('[Steamworks] Connected to Steam for App ID:', 480);
96
98
  * } else {
97
- * console.error('Failed to initialize Steam API');
99
+ * console.error('[Steamworks] Failed to initialize Steam API');
98
100
  * }
99
101
  * ```
100
102
  *
@@ -144,6 +146,11 @@ class SteamAPICore {
144
146
  }
145
147
  // Get User interface
146
148
  this.userInterface = this.libraryLoader.SteamAPI_SteamUser_v023();
149
+ // Get Utils interface
150
+ this.utilsInterface = this.libraryLoader.SteamAPI_SteamUtils_v010();
151
+ if (!this.utilsInterface || this.utilsInterface === null) {
152
+ console.warn('[Steamworks] WARNING: Failed to get SteamUtils interface');
153
+ }
147
154
  // Request current stats from Steam servers
148
155
  console.log('[Steamworks] Requesting current stats from Steam...');
149
156
  const statsRequested = this.libraryLoader.SteamAPI_ISteamUserStats_RequestCurrentStats(this.userStatsInterface, 0);
@@ -160,9 +167,9 @@ class SteamAPICore {
160
167
  catch (error) {
161
168
  console.error('[Steamworks] ERROR: Failed to initialize Steam API:', error.message);
162
169
  console.error('[Steamworks] Make sure:');
163
- console.error(' 1. Steam client is running and you\'re logged in');
164
- console.error(' 2. Steamworks redistributable binaries are available');
165
- console.error(' 3. App ID is valid and game is in your library');
170
+ console.error('[Steamworks] 1. Steam client is running and you\'re logged in');
171
+ console.error('[Steamworks] 2. Steamworks redistributable binaries are available');
172
+ console.error('[Steamworks] 3. App ID is valid and game is in your library');
166
173
  return false;
167
174
  }
168
175
  }
@@ -195,6 +202,7 @@ class SteamAPICore {
195
202
  this.initialized = false;
196
203
  this.userStatsInterface = null;
197
204
  this.userInterface = null;
205
+ this.utilsInterface = null;
198
206
  console.log('[Steamworks] Steam API shutdown complete');
199
207
  }
200
208
  }
@@ -209,9 +217,9 @@ class SteamAPICore {
209
217
  * @example
210
218
  * ```typescript
211
219
  * const status = apiCore.getStatus();
212
- * console.log(`Initialized: ${status.initialized}`);
213
- * console.log(`App ID: ${status.appId}`);
214
- * console.log(`Steam ID: ${status.steamId}`);
220
+ * console.log(`[Steamworks] Initialized: ${status.initialized}`);
221
+ * console.log(`[Steamworks] App ID: ${status.appId}`);
222
+ * console.log(`[Steamworks] Steam ID: ${status.steamId}`);
215
223
  * ```
216
224
  *
217
225
  * @remarks
@@ -229,7 +237,7 @@ class SteamAPICore {
229
237
  steamId = steamIdNum.toString();
230
238
  }
231
239
  catch (error) {
232
- console.warn('Failed to get Steam ID:', error.message);
240
+ console.warn('[Steamworks] Failed to get Steam ID:', error.message);
233
241
  }
234
242
  }
235
243
  return {
@@ -266,7 +274,7 @@ class SteamAPICore {
266
274
  this.libraryLoader.SteamAPI_RunCallbacks();
267
275
  }
268
276
  catch (error) {
269
- console.warn('Warning: Error running Steam callbacks:', error.message);
277
+ console.warn('[Steamworks] Warning: Error running Steam callbacks:', error.message);
270
278
  }
271
279
  }
272
280
  }
@@ -280,9 +288,9 @@ class SteamAPICore {
280
288
  * @example
281
289
  * ```typescript
282
290
  * if (apiCore.isSteamRunning()) {
283
- * console.log('Steam client is active');
291
+ * console.log('[Steamworks] Steam client is active');
284
292
  * } else {
285
- * console.warn('Steam client is not running');
293
+ * console.warn('[Steamworks] Steam client is not running');
286
294
  * }
287
295
  * ```
288
296
  *
@@ -299,7 +307,7 @@ class SteamAPICore {
299
307
  return this.libraryLoader.SteamAPI_IsSteamRunning();
300
308
  }
301
309
  catch (error) {
302
- console.warn('Warning: Error checking if Steam is running:', error.message);
310
+ console.warn('[Steamworks] Warning: Error checking if Steam is running:', error.message);
303
311
  return false;
304
312
  }
305
313
  }
@@ -315,7 +323,7 @@ class SteamAPICore {
315
323
  * @example
316
324
  * ```typescript
317
325
  * if (!apiCore.isInitialized()) {
318
- * console.error('Cannot perform Steam operations - not initialized');
326
+ * console.error('[Steamworks] Cannot perform Steam operations - not initialized');
319
327
  * return;
320
328
  * }
321
329
  * ```
@@ -369,6 +377,29 @@ class SteamAPICore {
369
377
  getUserInterface() {
370
378
  return this.userInterface;
371
379
  }
380
+ /**
381
+ * Get the ISteamUtils interface pointer
382
+ *
383
+ * Returns the native pointer to the ISteamUtils interface, which is used
384
+ * for utility operations including API call result checking.
385
+ *
386
+ * @returns Pointer to ISteamUtils interface, or null if not initialized
387
+ *
388
+ * @example
389
+ * ```typescript
390
+ * const utils = apiCore.getUtilsInterface();
391
+ * if (utils) {
392
+ * // Use interface for utility operations
393
+ * }
394
+ * ```
395
+ *
396
+ * @remarks
397
+ * - Returns null if Steam API is not initialized
398
+ * - This is a native pointer for use with FFI calls
399
+ */
400
+ getUtilsInterface() {
401
+ return this.utilsInterface;
402
+ }
372
403
  }
373
404
  exports.SteamAPICore = SteamAPICore;
374
405
  //# sourceMappingURL=SteamAPICore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SteamAPICore.js","sourceRoot":"","sources":["../../src/internal/SteamAPICore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SteamAPICore.js","sourceRoot":"","sources":["../../src/internal/SteamAPICore.ts"],"names":[],"mappings":"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"}
@@ -42,9 +42,9 @@ export declare class SteamAchievementManager {
42
42
  * @example
43
43
  * ```typescript
44
44
  * const achievements = await achievementManager.getAllAchievements();
45
- * console.log(`Found ${achievements.length} achievements`);
45
+ * console.log(`[Steamworks] Found ${achievements.length} achievements`);
46
46
  * achievements.forEach(ach => {
47
- * console.log(`${ach.displayName}: ${ach.unlocked ? 'Unlocked' : 'Locked'}`);
47
+ * console.log(`[Steamworks] ${ach.displayName}: ${ach.unlocked ? 'Unlocked' : 'Locked'}`);
48
48
  * });
49
49
  * ```
50
50
  *
@@ -74,7 +74,7 @@ export declare class SteamAchievementManager {
74
74
  * ```typescript
75
75
  * const success = await achievementManager.unlockAchievement('ACH_WIN_ONE_GAME');
76
76
  * if (success) {
77
- * console.log('Achievement unlocked!');
77
+ * console.log('[Steamworks] Achievement unlocked!');
78
78
  * }
79
79
  * ```
80
80
  *
@@ -131,7 +131,7 @@ export declare class SteamAchievementManager {
131
131
  * ```typescript
132
132
  * const isUnlocked = await achievementManager.isAchievementUnlocked('ACH_WIN_ONE_GAME');
133
133
  * if (isUnlocked) {
134
- * console.log('Player has already won one game');
134
+ * console.log('[Steamworks] Player has already won one game');
135
135
  * }
136
136
  * ```
137
137
  *
@@ -156,7 +156,7 @@ export declare class SteamAchievementManager {
156
156
  * ```typescript
157
157
  * const achievement = await achievementManager.getAchievementByName('ACH_WIN_ONE_GAME');
158
158
  * if (achievement) {
159
- * console.log(`${achievement.displayName}: ${achievement.description}`);
159
+ * console.log(`[Steamworks] ${achievement.displayName}: ${achievement.description}`);
160
160
  * }
161
161
  * ```
162
162
  *
@@ -179,7 +179,7 @@ export declare class SteamAchievementManager {
179
179
  * @example
180
180
  * ```typescript
181
181
  * const total = await achievementManager.getTotalAchievementCount();
182
- * console.log(`This game has ${total} achievements`);
182
+ * console.log(`[Steamworks] This game has ${total} achievements`);
183
183
  * ```
184
184
  *
185
185
  * @remarks
@@ -201,7 +201,7 @@ export declare class SteamAchievementManager {
201
201
  * ```typescript
202
202
  * const total = await achievementManager.getTotalAchievementCount();
203
203
  * const unlocked = await achievementManager.getUnlockedAchievementCount();
204
- * console.log(`Progress: ${unlocked}/${total} (${(unlocked/total*100).toFixed(1)}%)`);
204
+ * console.log(`[Steamworks] Progress: ${unlocked}/${total} (${(unlocked/total*100).toFixed(1)}%)`);
205
205
  * ```
206
206
  *
207
207
  * @remarks
@@ -226,7 +226,7 @@ export declare class SteamAchievementManager {
226
226
  * const iconHandle = await achievementManager.getAchievementIcon('ACH_WIN_ONE_GAME');
227
227
  * if (iconHandle > 0) {
228
228
  * // Use ISteamUtils::GetImageRGBA() to get actual image data
229
- * console.log(`Icon handle: ${iconHandle}`);
229
+ * console.log(`[Steamworks] Icon handle: ${iconHandle}`);
230
230
  * }
231
231
  * ```
232
232
  *
@@ -283,7 +283,7 @@ export declare class SteamAchievementManager {
283
283
  * ```typescript
284
284
  * const limits = await achievementManager.getAchievementProgressLimitsInt('ACH_WIN_50_GAMES');
285
285
  * if (limits) {
286
- * console.log(`Progress range: ${limits.minProgress} to ${limits.maxProgress}`);
286
+ * console.log(`[Steamworks] Progress range: ${limits.minProgress} to ${limits.maxProgress}`);
287
287
  * }
288
288
  * ```
289
289
  *
@@ -310,7 +310,7 @@ export declare class SteamAchievementManager {
310
310
  * ```typescript
311
311
  * const limits = await achievementManager.getAchievementProgressLimitsFloat('ACH_TRAVEL_100KM');
312
312
  * if (limits) {
313
- * console.log(`Need to travel ${limits.maxProgress}km`);
313
+ * console.log(`[Steamworks] Need to travel ${limits.maxProgress}km`);
314
314
  * }
315
315
  * ```
316
316
  *
@@ -383,7 +383,7 @@ export declare class SteamAchievementManager {
383
383
  *
384
384
  * if (achievement && achievement.unlocked) {
385
385
  * const date = new Date(achievement.unlockTime * 1000);
386
- * console.log(`Friend unlocked on: ${date.toLocaleDateString()}`);
386
+ * console.log(`[Steamworks] Friend unlocked on: ${date.toLocaleDateString()}`);
387
387
  * }
388
388
  * ```
389
389
  *
@@ -416,7 +416,7 @@ export declare class SteamAchievementManager {
416
416
  *
417
417
  * // Now can get percentages
418
418
  * const percent = await achievementManager.getAchievementAchievedPercent('ACH_WIN_ONE_GAME');
419
- * console.log(`${percent}% of players have unlocked this achievement`);
419
+ * console.log(`[Steamworks] ${percent}% of players have unlocked this achievement`);
420
420
  * ```
421
421
  *
422
422
  * @remarks
@@ -443,9 +443,9 @@ export declare class SteamAchievementManager {
443
443
  * const percent = await achievementManager.getAchievementAchievedPercent('ACH_WIN_ONE_GAME');
444
444
  * if (percent !== null) {
445
445
  * if (percent < 10) {
446
- * console.log(`Rare achievement! Only ${percent.toFixed(2)}% have this`);
446
+ * console.log(`[Steamworks] Rare achievement! Only ${percent.toFixed(2)}% have this`);
447
447
  * } else {
448
- * console.log(`Common achievement: ${percent.toFixed(2)}% unlocked`);
448
+ * console.log(`[Steamworks] Common achievement: ${percent.toFixed(2)}% unlocked`);
449
449
  * }
450
450
  * }
451
451
  * ```
@@ -482,7 +482,7 @@ export declare class SteamAchievementManager {
482
482
  * const rarest = achievements.reduce((prev, curr) =>
483
483
  * curr.globalUnlockPercentage < prev.globalUnlockPercentage ? curr : prev
484
484
  * );
485
- * console.log(`Rarest: ${rarest.displayName} (${rarest.globalUnlockPercentage.toFixed(2)}%)`);
485
+ * console.log(`[Steamworks] Rarest: ${rarest.displayName} (${rarest.globalUnlockPercentage.toFixed(2)}%)`);
486
486
  * ```
487
487
  *
488
488
  * @remarks
@@ -506,9 +506,9 @@ export declare class SteamAchievementManager {
506
506
  * ```typescript
507
507
  * const mostAchieved = await achievementManager.getMostAchievedAchievementInfo();
508
508
  * if (mostAchieved) {
509
- * console.log(`Most achieved: ${mostAchieved.apiName}`);
510
- * console.log(`Unlocked by: ${mostAchieved.percent.toFixed(2)}% of players`);
511
- * console.log(`You ${mostAchieved.unlocked ? 'have' : 'don\'t have'} it`);
509
+ * console.log(`[Steamworks] Most achieved: ${mostAchieved.apiName}`);
510
+ * console.log(`[Steamworks] Unlocked by: ${mostAchieved.percent.toFixed(2)}% of players`);
511
+ * console.log(`[Steamworks] You ${mostAchieved.unlocked ? 'have' : 'don\'t have'} it`);
512
512
  * }
513
513
  * ```
514
514
  *
@@ -554,7 +554,7 @@ export declare class SteamAchievementManager {
554
554
  * }
555
555
  *
556
556
  * top5.forEach((ach, i) => {
557
- * console.log(`${i + 1}. ${ach.apiName}: ${ach.percent.toFixed(2)}%`);
557
+ * console.log(`[Steamworks] ${i + 1}. ${ach.apiName}: ${ach.percent.toFixed(2)}%`);
558
558
  * });
559
559
  * ```
560
560
  *
@@ -590,14 +590,14 @@ export declare class SteamAchievementManager {
590
590
  * // Get sorted achievements
591
591
  * const sorted = await achievementManager.getAllAchievementsSortedByPopularity();
592
592
  *
593
- * console.log('Most to Least Achieved:');
593
+ * console.log('[Steamworks] Most to Least Achieved:');
594
594
  * sorted.forEach((ach, i) => {
595
- * console.log(`${i + 1}. ${ach.displayName}: ${ach.globalUnlockPercentage.toFixed(2)}%`);
595
+ * console.log(`[Steamworks] ${i + 1}. ${ach.displayName}: ${ach.globalUnlockPercentage.toFixed(2)}%`);
596
596
  * });
597
597
  *
598
598
  * // Find rarest achievements
599
599
  * const rare = sorted.filter(a => a.globalUnlockPercentage < 5);
600
- * console.log(`${rare.length} rare achievements (< 5% unlock rate)`);
600
+ * console.log(`[Steamworks] ${rare.length} rare achievements (< 5% unlock rate)`);
601
601
  * ```
602
602
  *
603
603
  * @remarks
@@ -662,9 +662,9 @@ export declare class SteamAchievementManager {
662
662
  * const achievements = await achievementManager.getAllAchievementsWithIcons();
663
663
  *
664
664
  * achievements.forEach(ach => {
665
- * console.log(`${ach.displayName}:`);
666
- * console.log(` Status: ${ach.unlocked ? 'Unlocked' : 'Locked'}`);
667
- * console.log(` Icon Handle: ${ach.iconHandle}`);
665
+ * console.log(`[Steamworks] ${ach.displayName}:`);
666
+ * console.log(`[Steamworks] Status: ${ach.unlocked ? 'Unlocked' : 'Locked'}`);
667
+ * console.log(`[Steamworks] Icon Handle: ${ach.iconHandle}`);
668
668
  *
669
669
  * if (ach.iconHandle > 0) {
670
670
  * // Use ISteamUtils::GetImageRGBA() to get actual image