steamworks-ffi-node 0.3.1 → 0.4.1
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 +53 -20
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/SteamAPICore.d.ts +32 -9
- package/dist/internal/SteamAPICore.d.ts.map +1 -1
- package/dist/internal/SteamAPICore.js +46 -15
- package/dist/internal/SteamAPICore.js.map +1 -1
- package/dist/internal/SteamAchievementManager.d.ts +25 -25
- package/dist/internal/SteamAchievementManager.js +26 -26
- package/dist/internal/SteamAchievementManager.js.map +1 -1
- package/dist/internal/SteamCallbackPoller.d.ts +68 -0
- package/dist/internal/SteamCallbackPoller.d.ts.map +1 -0
- package/dist/internal/SteamCallbackPoller.js +134 -0
- package/dist/internal/SteamCallbackPoller.js.map +1 -0
- package/dist/internal/SteamLeaderboardManager.d.ts +338 -0
- package/dist/internal/SteamLeaderboardManager.d.ts.map +1 -0
- package/dist/internal/SteamLeaderboardManager.js +734 -0
- package/dist/internal/SteamLeaderboardManager.js.map +1 -0
- package/dist/internal/SteamLibraryLoader.d.ts +15 -0
- package/dist/internal/SteamLibraryLoader.d.ts.map +1 -1
- package/dist/internal/SteamLibraryLoader.js +26 -0
- package/dist/internal/SteamLibraryLoader.js.map +1 -1
- package/dist/internal/SteamStatsManager.d.ts +57 -45
- package/dist/internal/SteamStatsManager.d.ts.map +1 -1
- package/dist/internal/SteamStatsManager.js +146 -101
- package/dist/internal/SteamStatsManager.js.map +1 -1
- package/dist/steam.d.ts +115 -172
- package/dist/steam.d.ts.map +1 -1
- package/dist/steam.js +24 -241
- package/dist/steam.js.map +1 -1
- package/dist/{types.d.ts → types/achievements.d.ts} +19 -30
- package/dist/types/achievements.d.ts.map +1 -0
- package/dist/types/achievements.js +6 -0
- package/dist/types/achievements.js.map +1 -0
- package/dist/types/core.d.ts +18 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +6 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +34 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/leaderboards.d.ts +121 -0
- package/dist/types/leaderboards.d.ts.map +1 -0
- package/dist/types/leaderboards.js +45 -0
- package/dist/types/leaderboards.js.map +1 -0
- package/dist/types/stats.d.ts +37 -0
- package/dist/types/stats.d.ts.map +1 -0
- package/dist/types/stats.js +6 -0
- package/dist/types/stats.js.map +1 -0
- package/package.json +4 -3
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/steamworks_sdk/README.md +0 -82
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!
|
|
@@ -52,34 +59,59 @@ npm install steamworks-ffi-node
|
|
|
52
59
|
### Basic Usage
|
|
53
60
|
|
|
54
61
|
```typescript
|
|
55
|
-
import
|
|
62
|
+
import SteamworksSDK from 'steamworks-ffi-node';
|
|
56
63
|
|
|
57
64
|
// Initialize Steam connection
|
|
58
|
-
const steam =
|
|
65
|
+
const steam = new SteamworksSDK();
|
|
59
66
|
const initialized = steam.init({ appId: 480 }); // Your Steam App ID
|
|
60
67
|
|
|
61
68
|
if (initialized) {
|
|
62
69
|
// Get achievements from Steam servers
|
|
63
|
-
const achievements = await steam.getAllAchievements();
|
|
70
|
+
const achievements = await steam.achievements.getAllAchievements();
|
|
64
71
|
console.log('Steam achievements:', achievements);
|
|
65
72
|
|
|
66
73
|
// Unlock achievement (permanent in Steam!)
|
|
67
|
-
await steam.unlockAchievement('ACH_WIN_ONE_GAME');
|
|
74
|
+
await steam.achievements.unlockAchievement('ACH_WIN_ONE_GAME');
|
|
68
75
|
|
|
69
76
|
// Check unlock status from Steam
|
|
70
|
-
const isUnlocked = await steam.isAchievementUnlocked('ACH_WIN_ONE_GAME');
|
|
77
|
+
const isUnlocked = await steam.achievements.isAchievementUnlocked('ACH_WIN_ONE_GAME');
|
|
71
78
|
console.log('Achievement unlocked:', isUnlocked);
|
|
72
79
|
|
|
73
80
|
// Track user statistics
|
|
74
|
-
const kills = await steam.getStatInt('total_kills') || 0;
|
|
75
|
-
await steam.setStatInt('total_kills', kills + 1);
|
|
81
|
+
const kills = await steam.stats.getStatInt('total_kills') || 0;
|
|
82
|
+
await steam.stats.setStatInt('total_kills', kills + 1);
|
|
76
83
|
|
|
77
84
|
// Get global statistics
|
|
78
|
-
await steam.requestGlobalStats(7);
|
|
85
|
+
await steam.stats.requestGlobalStats(7);
|
|
79
86
|
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
80
87
|
steam.runCallbacks();
|
|
81
|
-
const globalKills = await steam.getGlobalStatInt('global.total_kills');
|
|
88
|
+
const globalKills = await steam.stats.getGlobalStatInt('global.total_kills');
|
|
82
89
|
console.log('Total kills worldwide:', globalKills);
|
|
90
|
+
|
|
91
|
+
// Work with leaderboards
|
|
92
|
+
const leaderboard = await steam.leaderboards.findOrCreateLeaderboard(
|
|
93
|
+
'HighScores',
|
|
94
|
+
1, // Descending (higher is better)
|
|
95
|
+
0 // Numeric display
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
if (leaderboard) {
|
|
99
|
+
// Upload score
|
|
100
|
+
await steam.leaderboards.uploadLeaderboardScore(
|
|
101
|
+
leaderboard.handle,
|
|
102
|
+
1000,
|
|
103
|
+
1 // Keep best score
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
// Download top 10 scores
|
|
107
|
+
const topScores = await steam.leaderboards.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
|
|
@@ -89,19 +121,19 @@ steam.shutdown();
|
|
|
89
121
|
### JavaScript (CommonJS)
|
|
90
122
|
|
|
91
123
|
```javascript
|
|
92
|
-
const
|
|
124
|
+
const SteamworksSDK = require('steamworks-ffi-node').default;
|
|
93
125
|
|
|
94
126
|
async function example() {
|
|
95
|
-
const steam =
|
|
127
|
+
const steam = new SteamworksSDK();
|
|
96
128
|
|
|
97
129
|
if (steam.init({ appId: 480 })) {
|
|
98
|
-
const achievements = await steam.getAllAchievements();
|
|
130
|
+
const achievements = await steam.achievements.getAllAchievements();
|
|
99
131
|
console.log(`Found ${achievements.length} achievements`);
|
|
100
132
|
|
|
101
133
|
// Unlock first locked achievement
|
|
102
134
|
const locked = achievements.find(a => !a.unlocked);
|
|
103
135
|
if (locked) {
|
|
104
|
-
await steam.unlockAchievement(locked.apiName);
|
|
136
|
+
await steam.achievements.unlockAchievement(locked.apiName);
|
|
105
137
|
}
|
|
106
138
|
}
|
|
107
139
|
|
|
@@ -129,16 +161,16 @@ Complete documentation for all APIs is available in the [docs folder](https://gi
|
|
|
129
161
|
This library connects directly to the Steam client and Steamworks SDK:
|
|
130
162
|
|
|
131
163
|
```javascript
|
|
132
|
-
//
|
|
133
|
-
const steam =
|
|
164
|
+
// Steamworks API
|
|
165
|
+
const steam = new SteamworksSDK();
|
|
134
166
|
steam.init({ appId: 480 }); // Connects to actual Steam
|
|
135
167
|
|
|
136
168
|
// Live achievements from Steam servers
|
|
137
|
-
const achievements = await steam.getAllAchievements();
|
|
169
|
+
const achievements = await steam.achievements.getAllAchievements();
|
|
138
170
|
console.log(achievements); // Achievement data from your Steam app
|
|
139
171
|
|
|
140
172
|
// Permanent achievement unlock in Steam
|
|
141
|
-
await steam.unlockAchievement('YOUR_ACHIEVEMENT');
|
|
173
|
+
await steam.achievements.unlockAchievement('YOUR_ACHIEVEMENT');
|
|
142
174
|
// ^ This shows up in Steam overlay and is saved permanently
|
|
143
175
|
```
|
|
144
176
|
|
|
@@ -156,10 +188,10 @@ For Electron applications, use it in your main process:
|
|
|
156
188
|
```typescript
|
|
157
189
|
// main.ts
|
|
158
190
|
import { app } from 'electron';
|
|
159
|
-
import
|
|
191
|
+
import SteamworksSDK from 'steamworks-ffi-node';
|
|
160
192
|
|
|
161
193
|
app.whenReady().then(() => {
|
|
162
|
-
const steam =
|
|
194
|
+
const steam = new SteamworksSDK();
|
|
163
195
|
|
|
164
196
|
if (steam.init({ appId: YOUR_STEAM_APP_ID })) {
|
|
165
197
|
console.log('Steam initialized in Electron!');
|
|
@@ -170,7 +202,8 @@ app.whenReady().then(() => {
|
|
|
170
202
|
});
|
|
171
203
|
|
|
172
204
|
app.on('before-quit', () => {
|
|
173
|
-
|
|
205
|
+
const steam = new SteamworksSDK();
|
|
206
|
+
steam.shutdown();
|
|
174
207
|
});
|
|
175
208
|
```
|
|
176
209
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import SteamworksSDK from './steam';
|
|
2
|
-
|
|
3
|
-
export {
|
|
2
|
+
export { SteamAchievementManager } from './internal/SteamAchievementManager';
|
|
3
|
+
export { SteamStatsManager } from './internal/SteamStatsManager';
|
|
4
|
+
export { SteamLeaderboardManager } from './internal/SteamLeaderboardManager';
|
|
5
|
+
export * from './types';
|
|
4
6
|
export default SteamworksSDK;
|
|
5
|
-
export { SteamworksSDK as Steam };
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,SAAS,CAAC;AAGpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAG7E,cAAc,SAAS,CAAC;AAGxB,eAAe,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
18
|
};
|
|
5
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
20
|
+
exports.SteamLeaderboardManager = exports.SteamStatsManager = exports.SteamAchievementManager = void 0;
|
|
7
21
|
const steam_1 = __importDefault(require("./steam"));
|
|
8
|
-
|
|
22
|
+
// Export manager classes for advanced usage
|
|
23
|
+
var SteamAchievementManager_1 = require("./internal/SteamAchievementManager");
|
|
24
|
+
Object.defineProperty(exports, "SteamAchievementManager", { enumerable: true, get: function () { return SteamAchievementManager_1.SteamAchievementManager; } });
|
|
25
|
+
var SteamStatsManager_1 = require("./internal/SteamStatsManager");
|
|
26
|
+
Object.defineProperty(exports, "SteamStatsManager", { enumerable: true, get: function () { return SteamStatsManager_1.SteamStatsManager; } });
|
|
27
|
+
var SteamLeaderboardManager_1 = require("./internal/SteamLeaderboardManager");
|
|
28
|
+
Object.defineProperty(exports, "SteamLeaderboardManager", { enumerable: true, get: function () { return SteamLeaderboardManager_1.SteamLeaderboardManager; } });
|
|
29
|
+
// Export all types from organized structure
|
|
30
|
+
__exportStar(require("./types"), exports);
|
|
9
31
|
// Export main Steam class
|
|
10
32
|
exports.default = steam_1.default;
|
|
11
33
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oDAAoC;AAEpC,4CAA4C;AAC5C,8EAA6E;AAApE,kIAAA,uBAAuB,OAAA;AAChC,kEAAiE;AAAxD,sHAAA,iBAAiB,OAAA;AAC1B,8EAA6E;AAApE,kIAAA,uBAAuB,OAAA;AAEhC,4CAA4C;AAC5C,0CAAwB;AAExB,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;
|
|
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('
|
|
164
|
-
console.error('
|
|
165
|
-
console.error('
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAI7B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAa,YAAY;
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
666
|
-
* console.log(`
|
|
667
|
-
* console.log(`
|
|
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
|