steamworks-ffi-node 0.4.0 → 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 +24 -23
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -7
- package/dist/index.js.map +1 -1
- package/dist/internal/SteamLeaderboardManager.d.ts.map +1 -1
- package/dist/internal/SteamLeaderboardManager.js.map +1 -1
- package/dist/steam.d.ts +102 -319
- package/dist/steam.d.ts.map +1 -1
- package/dist/steam.js +23 -418
- package/dist/steam.js.map +1 -1
- package/dist/types/achievements.d.ts +49 -0
- 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.d.ts → types/leaderboards.d.ts} +30 -60
- package/dist/types/leaderboards.d.ts.map +1 -0
- package/dist/{types.js → types/leaderboards.js} +16 -8
- 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 +1 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/steamworks_sdk/README.md +0 -82
package/dist/steam.js
CHANGED
|
@@ -9,21 +9,31 @@ const SteamLeaderboardManager_1 = require("./internal/SteamLeaderboardManager");
|
|
|
9
9
|
* Real Steamworks SDK implementation using Koffi FFI
|
|
10
10
|
* This connects directly to the actual Steam client and Steamworks SDK
|
|
11
11
|
*
|
|
12
|
-
* Uses composition pattern with specialized
|
|
13
|
-
* -
|
|
14
|
-
* -
|
|
15
|
-
* -
|
|
16
|
-
*
|
|
17
|
-
*
|
|
12
|
+
* Uses composition pattern with specialized managers:
|
|
13
|
+
* - achievements: SteamAchievementManager - All achievement operations
|
|
14
|
+
* - stats: SteamStatsManager - All stats operations
|
|
15
|
+
* - leaderboards: SteamLeaderboardManager - All leaderboard operations
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const steam = Steam.getInstance();
|
|
20
|
+
* steam.init({ appId: 480 });
|
|
21
|
+
*
|
|
22
|
+
* // Use managers directly
|
|
23
|
+
* await steam.achievements.unlockAchievement('ACH_WIN_ONE_GAME');
|
|
24
|
+
* await steam.stats.setStatInt('NumGames', 1);
|
|
25
|
+
* await steam.leaderboards.uploadScore(handle, 1000, KeepBest);
|
|
26
|
+
* ```
|
|
18
27
|
*/
|
|
19
28
|
class SteamworksSDK {
|
|
20
29
|
constructor() {
|
|
21
|
-
// Initialize
|
|
30
|
+
// Initialize internal modules
|
|
22
31
|
this.libraryLoader = new SteamLibraryLoader_1.SteamLibraryLoader();
|
|
23
32
|
this.apiCore = new SteamAPICore_1.SteamAPICore(this.libraryLoader);
|
|
24
|
-
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
33
|
+
// Initialize public managers
|
|
34
|
+
this.achievements = new SteamAchievementManager_1.SteamAchievementManager(this.libraryLoader, this.apiCore);
|
|
35
|
+
this.stats = new SteamStatsManager_1.SteamStatsManager(this.libraryLoader, this.apiCore);
|
|
36
|
+
this.leaderboards = new SteamLeaderboardManager_1.SteamLeaderboardManager(this.libraryLoader, this.apiCore);
|
|
27
37
|
}
|
|
28
38
|
static getInstance() {
|
|
29
39
|
if (!SteamworksSDK.instance) {
|
|
@@ -31,6 +41,9 @@ class SteamworksSDK {
|
|
|
31
41
|
}
|
|
32
42
|
return SteamworksSDK.instance;
|
|
33
43
|
}
|
|
44
|
+
// ========================================
|
|
45
|
+
// CORE API METHODS
|
|
46
|
+
// ========================================
|
|
34
47
|
/**
|
|
35
48
|
* Initialize Steam API with real Steamworks SDK
|
|
36
49
|
*/
|
|
@@ -49,48 +62,6 @@ class SteamworksSDK {
|
|
|
49
62
|
getStatus() {
|
|
50
63
|
return this.apiCore.getStatus();
|
|
51
64
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Get all achievements from Steam
|
|
54
|
-
*/
|
|
55
|
-
async getAllAchievements() {
|
|
56
|
-
return this.achievementManager.getAllAchievements();
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Unlock achievement in Steam
|
|
60
|
-
*/
|
|
61
|
-
async unlockAchievement(achievementName) {
|
|
62
|
-
return this.achievementManager.unlockAchievement(achievementName);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Clear achievement in Steam (for testing)
|
|
66
|
-
*/
|
|
67
|
-
async clearAchievement(achievementName) {
|
|
68
|
-
return this.achievementManager.clearAchievement(achievementName);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Check if achievement is unlocked
|
|
72
|
-
*/
|
|
73
|
-
async isAchievementUnlocked(achievementName) {
|
|
74
|
-
return this.achievementManager.isAchievementUnlocked(achievementName);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Get achievement by API name
|
|
78
|
-
*/
|
|
79
|
-
async getAchievementByName(achievementName) {
|
|
80
|
-
return this.achievementManager.getAchievementByName(achievementName);
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Get total number of achievements
|
|
84
|
-
*/
|
|
85
|
-
async getTotalAchievementCount() {
|
|
86
|
-
return this.achievementManager.getTotalAchievementCount();
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Get number of unlocked achievements
|
|
90
|
-
*/
|
|
91
|
-
async getUnlockedAchievementCount() {
|
|
92
|
-
return this.achievementManager.getUnlockedAchievementCount();
|
|
93
|
-
}
|
|
94
65
|
/**
|
|
95
66
|
* Run Steam callbacks to process pending events
|
|
96
67
|
*/
|
|
@@ -103,372 +74,6 @@ class SteamworksSDK {
|
|
|
103
74
|
isSteamRunning() {
|
|
104
75
|
return this.apiCore.isSteamRunning();
|
|
105
76
|
}
|
|
106
|
-
// ===== VISUAL & UI FEATURES =====
|
|
107
|
-
/**
|
|
108
|
-
* Get achievement icon handle for use with ISteamUtils::GetImageRGBA()
|
|
109
|
-
*/
|
|
110
|
-
async getAchievementIcon(achievementName) {
|
|
111
|
-
return this.achievementManager.getAchievementIcon(achievementName);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Show achievement progress notification in Steam overlay
|
|
115
|
-
*/
|
|
116
|
-
async indicateAchievementProgress(achievementName, currentProgress, maxProgress) {
|
|
117
|
-
return this.achievementManager.indicateAchievementProgress(achievementName, currentProgress, maxProgress);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Get all achievements with icon handles
|
|
121
|
-
*/
|
|
122
|
-
async getAllAchievementsWithIcons() {
|
|
123
|
-
return this.achievementManager.getAllAchievementsWithIcons();
|
|
124
|
-
}
|
|
125
|
-
// ===== PROGRESS TRACKING =====
|
|
126
|
-
/**
|
|
127
|
-
* Get achievement progress limits (integer-based)
|
|
128
|
-
*/
|
|
129
|
-
async getAchievementProgressLimitsInt(achievementName) {
|
|
130
|
-
return this.achievementManager.getAchievementProgressLimitsInt(achievementName);
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Get achievement progress limits (float-based)
|
|
134
|
-
*/
|
|
135
|
-
async getAchievementProgressLimitsFloat(achievementName) {
|
|
136
|
-
return this.achievementManager.getAchievementProgressLimitsFloat(achievementName);
|
|
137
|
-
}
|
|
138
|
-
// ===== FRIEND/USER ACHIEVEMENTS =====
|
|
139
|
-
/**
|
|
140
|
-
* Request achievement stats for another user (friend)
|
|
141
|
-
* This is async - wait for callback before calling getUserAchievement()
|
|
142
|
-
*/
|
|
143
|
-
async requestUserStats(steamId) {
|
|
144
|
-
return this.achievementManager.requestUserStats(steamId);
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Get achievement status for another user (friend)
|
|
148
|
-
* Must call requestUserStats() first and wait for callback
|
|
149
|
-
*/
|
|
150
|
-
async getUserAchievement(steamId, achievementName) {
|
|
151
|
-
return this.achievementManager.getUserAchievement(steamId, achievementName);
|
|
152
|
-
}
|
|
153
|
-
// ===== GLOBAL STATISTICS =====
|
|
154
|
-
/**
|
|
155
|
-
* Request global achievement percentages from Steam
|
|
156
|
-
* This is async - wait for callback before calling other global stats methods
|
|
157
|
-
*/
|
|
158
|
-
async requestGlobalAchievementPercentages() {
|
|
159
|
-
return this.achievementManager.requestGlobalAchievementPercentages();
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Get percentage of users who unlocked a specific achievement
|
|
163
|
-
* Must call requestGlobalAchievementPercentages() first
|
|
164
|
-
*/
|
|
165
|
-
async getAchievementAchievedPercent(achievementName) {
|
|
166
|
-
return this.achievementManager.getAchievementAchievedPercent(achievementName);
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Get all achievements with global unlock percentages
|
|
170
|
-
* Must call requestGlobalAchievementPercentages() first
|
|
171
|
-
*/
|
|
172
|
-
async getAllAchievementsWithGlobalStats() {
|
|
173
|
-
return this.achievementManager.getAllAchievementsWithGlobalStats();
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Get most achieved achievement
|
|
177
|
-
*/
|
|
178
|
-
async getMostAchievedAchievementInfo() {
|
|
179
|
-
return this.achievementManager.getMostAchievedAchievementInfo();
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Get next most achieved achievement (iterate by popularity)
|
|
183
|
-
*/
|
|
184
|
-
async getNextMostAchievedAchievementInfo(previousIterator) {
|
|
185
|
-
return this.achievementManager.getNextMostAchievedAchievementInfo(previousIterator);
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Get all achievements sorted by global popularity (most achieved first)
|
|
189
|
-
* Must call requestGlobalAchievementPercentages() first
|
|
190
|
-
*/
|
|
191
|
-
async getAllAchievementsSortedByPopularity() {
|
|
192
|
-
return this.achievementManager.getAllAchievementsSortedByPopularity();
|
|
193
|
-
}
|
|
194
|
-
// ===== TESTING & DEVELOPMENT =====
|
|
195
|
-
/**
|
|
196
|
-
* Reset all stats and optionally achievements
|
|
197
|
-
* WARNING: This clears ALL user stats and achievements!
|
|
198
|
-
*/
|
|
199
|
-
async resetAllStats(includeAchievements = false) {
|
|
200
|
-
return this.achievementManager.resetAllStats(includeAchievements);
|
|
201
|
-
}
|
|
202
|
-
// ========================================
|
|
203
|
-
// STATS API
|
|
204
|
-
// ========================================
|
|
205
|
-
// ===== USER STATS (GET/SET) =====
|
|
206
|
-
/**
|
|
207
|
-
* Get an integer stat value
|
|
208
|
-
*/
|
|
209
|
-
async getStatInt(statName) {
|
|
210
|
-
return this.statsManager.getStatInt(statName);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Get a float stat value
|
|
214
|
-
*/
|
|
215
|
-
async getStatFloat(statName) {
|
|
216
|
-
return this.statsManager.getStatFloat(statName);
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Set an integer stat value
|
|
220
|
-
*/
|
|
221
|
-
async setStatInt(statName, value) {
|
|
222
|
-
return this.statsManager.setStatInt(statName, value);
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Set a float stat value
|
|
226
|
-
*/
|
|
227
|
-
async setStatFloat(statName, value) {
|
|
228
|
-
return this.statsManager.setStatFloat(statName, value);
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Update an average rate stat (e.g., kills per hour, average speed)
|
|
232
|
-
*/
|
|
233
|
-
async updateAvgRateStat(statName, countThisSession, sessionLength) {
|
|
234
|
-
return this.statsManager.updateAvgRateStat(statName, countThisSession, sessionLength);
|
|
235
|
-
}
|
|
236
|
-
// ===== FRIEND/USER STATS =====
|
|
237
|
-
/**
|
|
238
|
-
* Request stats for another user (friend)
|
|
239
|
-
* Must be called before getting user stats
|
|
240
|
-
*/
|
|
241
|
-
async requestUserStatsForStats(steamId) {
|
|
242
|
-
return this.statsManager.requestUserStats(steamId);
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Get an integer stat value for another user (friend)
|
|
246
|
-
* Must call requestUserStatsForStats() first and wait for callback
|
|
247
|
-
*/
|
|
248
|
-
async getUserStatInt(steamId, statName) {
|
|
249
|
-
return this.statsManager.getUserStatInt(steamId, statName);
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Get a float stat value for another user (friend)
|
|
253
|
-
* Must call requestUserStatsForStats() first and wait for callback
|
|
254
|
-
*/
|
|
255
|
-
async getUserStatFloat(steamId, statName) {
|
|
256
|
-
return this.statsManager.getUserStatFloat(steamId, statName);
|
|
257
|
-
}
|
|
258
|
-
// ===== GLOBAL STATS =====
|
|
259
|
-
/**
|
|
260
|
-
* Request global stats data from Steam
|
|
261
|
-
* Must be called before getting global stats
|
|
262
|
-
* @param historyDays - Number of days of history to retrieve (0-60)
|
|
263
|
-
*/
|
|
264
|
-
async requestGlobalStats(historyDays = 0) {
|
|
265
|
-
return this.statsManager.requestGlobalStats(historyDays);
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Get a global stat value (int64)
|
|
269
|
-
* Must call requestGlobalStats() first and wait for callback
|
|
270
|
-
*/
|
|
271
|
-
async getGlobalStatInt(statName) {
|
|
272
|
-
return this.statsManager.getGlobalStatInt(statName);
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Get a global stat value (double)
|
|
276
|
-
* Must call requestGlobalStats() first and wait for callback
|
|
277
|
-
*/
|
|
278
|
-
async getGlobalStatDouble(statName) {
|
|
279
|
-
return this.statsManager.getGlobalStatDouble(statName);
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Get global stat history (int64)
|
|
283
|
-
* Returns daily values for the stat, with [0] being today, [1] yesterday, etc.
|
|
284
|
-
* @param days - Number of days of history to retrieve (max 60)
|
|
285
|
-
*/
|
|
286
|
-
async getGlobalStatHistoryInt(statName, days = 7) {
|
|
287
|
-
return this.statsManager.getGlobalStatHistoryInt(statName, days);
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Get global stat history (double)
|
|
291
|
-
* Returns daily values for the stat, with [0] being today, [1] yesterday, etc.
|
|
292
|
-
* @param days - Number of days of history to retrieve (max 60)
|
|
293
|
-
*/
|
|
294
|
-
async getGlobalStatHistoryDouble(statName, days = 7) {
|
|
295
|
-
return this.statsManager.getGlobalStatHistoryDouble(statName, days);
|
|
296
|
-
}
|
|
297
|
-
// ========================================
|
|
298
|
-
// LEADERBOARDS API
|
|
299
|
-
// ========================================
|
|
300
|
-
/**
|
|
301
|
-
* Find or create a leaderboard with specified sort and display settings
|
|
302
|
-
*
|
|
303
|
-
* If the leaderboard doesn't exist, it will be created with the specified settings.
|
|
304
|
-
* If it exists, returns the info for the existing leaderboard.
|
|
305
|
-
*
|
|
306
|
-
* @param leaderboardName - Unique name for the leaderboard (set in Steamworks dashboard)
|
|
307
|
-
* @param sortMethod - How to sort scores (Ascending/Descending)
|
|
308
|
-
* @param displayType - How to display scores (Numeric/TimeSeconds/TimeMilliseconds)
|
|
309
|
-
* @returns Promise resolving to leaderboard info object, or null on failure
|
|
310
|
-
*
|
|
311
|
-
* @example
|
|
312
|
-
* ```typescript
|
|
313
|
-
* const leaderboard = await steam.findOrCreateLeaderboard(
|
|
314
|
-
* 'HighScores',
|
|
315
|
-
* LeaderboardSortMethod.Descending,
|
|
316
|
-
* LeaderboardDisplayType.Numeric
|
|
317
|
-
* );
|
|
318
|
-
* if (leaderboard) {
|
|
319
|
-
* console.log(`Leaderboard handle: ${leaderboard.handle}`);
|
|
320
|
-
* }
|
|
321
|
-
* ```
|
|
322
|
-
*/
|
|
323
|
-
async findOrCreateLeaderboard(leaderboardName, sortMethod, displayType) {
|
|
324
|
-
return this.leaderboardManager.findOrCreateLeaderboard(leaderboardName, sortMethod, displayType);
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Find an existing leaderboard (does not create if missing)
|
|
328
|
-
*
|
|
329
|
-
* @param leaderboardName - Unique name for the leaderboard
|
|
330
|
-
* @returns Promise resolving to leaderboard info object, or null if not found
|
|
331
|
-
*
|
|
332
|
-
* @example
|
|
333
|
-
* ```typescript
|
|
334
|
-
* const leaderboard = await steam.findLeaderboard('HighScores');
|
|
335
|
-
* if (!leaderboard) {
|
|
336
|
-
* console.log('Leaderboard not found');
|
|
337
|
-
* }
|
|
338
|
-
* ```
|
|
339
|
-
*/
|
|
340
|
-
async findLeaderboard(leaderboardName) {
|
|
341
|
-
return this.leaderboardManager.findLeaderboard(leaderboardName);
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Get leaderboard metadata (name, entry count, sort method, display type)
|
|
345
|
-
*
|
|
346
|
-
* @param leaderboardHandle - Handle to the leaderboard
|
|
347
|
-
* @returns Leaderboard info object, or null on failure
|
|
348
|
-
*
|
|
349
|
-
* @example
|
|
350
|
-
* ```typescript
|
|
351
|
-
* const handle = await steam.findLeaderboard('HighScores');
|
|
352
|
-
* const info = await steam.getLeaderboardInfo(handle);
|
|
353
|
-
* console.log(`${info.name}: ${info.entryCount} entries`);
|
|
354
|
-
* ```
|
|
355
|
-
*/
|
|
356
|
-
async getLeaderboardInfo(leaderboardHandle) {
|
|
357
|
-
return this.leaderboardManager.getLeaderboardInfo(leaderboardHandle);
|
|
358
|
-
}
|
|
359
|
-
/**
|
|
360
|
-
* Upload a score to a leaderboard
|
|
361
|
-
*
|
|
362
|
-
* @param leaderboardHandle - Handle to the leaderboard
|
|
363
|
-
* @param score - The score value to upload
|
|
364
|
-
* @param uploadMethod - KeepBest (only updates if better) or ForceUpdate (always update)
|
|
365
|
-
* @param scoreDetails - Optional array of up to 64 int32 values for additional data
|
|
366
|
-
* @returns Promise resolving to upload result object, or null on failure
|
|
367
|
-
*
|
|
368
|
-
* @example
|
|
369
|
-
* ```typescript
|
|
370
|
-
* // Simple score upload
|
|
371
|
-
* const result = await steam.uploadLeaderboardScore(
|
|
372
|
-
* leaderboard.handle,
|
|
373
|
-
* 1000,
|
|
374
|
-
* LeaderboardUploadScoreMethod.KeepBest
|
|
375
|
-
* );
|
|
376
|
-
*
|
|
377
|
-
* // With details (e.g., time, deaths, collectibles)
|
|
378
|
-
* const result = await steam.uploadLeaderboardScore(
|
|
379
|
-
* leaderboard.handle,
|
|
380
|
-
* 1000,
|
|
381
|
-
* LeaderboardUploadScoreMethod.KeepBest,
|
|
382
|
-
* [120, 5, 15] // time in seconds, deaths, collectibles
|
|
383
|
-
* );
|
|
384
|
-
*
|
|
385
|
-
* if (result?.scoreChanged) {
|
|
386
|
-
* console.log(`New rank: ${result.globalRankNew}`);
|
|
387
|
-
* }
|
|
388
|
-
* ```
|
|
389
|
-
*/
|
|
390
|
-
async uploadLeaderboardScore(leaderboardHandle, score, uploadMethod, scoreDetails) {
|
|
391
|
-
return this.leaderboardManager.uploadScore(leaderboardHandle, score, uploadMethod, scoreDetails);
|
|
392
|
-
}
|
|
393
|
-
/**
|
|
394
|
-
* Download leaderboard entries
|
|
395
|
-
*
|
|
396
|
-
* @param leaderboardHandle - Handle to the leaderboard
|
|
397
|
-
* @param dataRequest - Type of data to download (Global/AroundUser/Friends)
|
|
398
|
-
* @param rangeStart - Starting index (for Global) or offset from user (for AroundUser)
|
|
399
|
-
* @param rangeEnd - Ending index (for Global) or offset from user (for AroundUser)
|
|
400
|
-
* @returns Promise resolving to array of leaderboard entries
|
|
401
|
-
*
|
|
402
|
-
* @example
|
|
403
|
-
* ```typescript
|
|
404
|
-
* // Get top 10 global scores
|
|
405
|
-
* const top10 = await steam.downloadLeaderboardEntries(
|
|
406
|
-
* leaderboard,
|
|
407
|
-
* LeaderboardDataRequest.Global,
|
|
408
|
-
* 0,
|
|
409
|
-
* 9
|
|
410
|
-
* );
|
|
411
|
-
*
|
|
412
|
-
* // Get 5 above and 5 below current user
|
|
413
|
-
* const aroundUser = await steam.downloadLeaderboardEntries(
|
|
414
|
-
* leaderboard,
|
|
415
|
-
* LeaderboardDataRequest.GlobalAroundUser,
|
|
416
|
-
* -5,
|
|
417
|
-
* 5
|
|
418
|
-
* );
|
|
419
|
-
*
|
|
420
|
-
* // Get all friends' scores
|
|
421
|
-
* const friends = await steam.downloadLeaderboardEntries(
|
|
422
|
-
* leaderboard,
|
|
423
|
-
* LeaderboardDataRequest.Friends,
|
|
424
|
-
* 0,
|
|
425
|
-
* 0
|
|
426
|
-
* );
|
|
427
|
-
* ```
|
|
428
|
-
*/
|
|
429
|
-
async downloadLeaderboardEntries(leaderboardHandle, dataRequest, rangeStart, rangeEnd) {
|
|
430
|
-
return this.leaderboardManager.downloadLeaderboardEntries(leaderboardHandle, dataRequest, rangeStart, rangeEnd);
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Download leaderboard entries for specific Steam users
|
|
434
|
-
*
|
|
435
|
-
* @param leaderboardHandle - Handle to the leaderboard
|
|
436
|
-
* @param steamIds - Array of Steam ID strings (max 100)
|
|
437
|
-
* @returns Promise resolving to array of leaderboard entries
|
|
438
|
-
*
|
|
439
|
-
* @example
|
|
440
|
-
* ```typescript
|
|
441
|
-
* const entries = await steam.downloadLeaderboardEntriesForUsers(
|
|
442
|
-
* leaderboard.handle,
|
|
443
|
-
* ['76561198000000000', '76561198000000001']
|
|
444
|
-
* );
|
|
445
|
-
* ```
|
|
446
|
-
*/
|
|
447
|
-
async downloadLeaderboardEntriesForUsers(leaderboardHandle, steamIds) {
|
|
448
|
-
return this.leaderboardManager.downloadLeaderboardEntriesForUsers(leaderboardHandle, steamIds);
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* Attach user-generated content to a leaderboard entry
|
|
452
|
-
*
|
|
453
|
-
* Associates a piece of UGC (like a replay file, screenshot, or level)
|
|
454
|
-
* with the current user's leaderboard entry.
|
|
455
|
-
*
|
|
456
|
-
* @param leaderboardHandle - Handle to the leaderboard
|
|
457
|
-
* @param ugcHandle - Handle to the shared UGC content (from ISteamRemoteStorage::FileShare())
|
|
458
|
-
* @returns Promise resolving to true if successful
|
|
459
|
-
*
|
|
460
|
-
* @example
|
|
461
|
-
* ```typescript
|
|
462
|
-
* // First share a file to get UGC handle
|
|
463
|
-
* // const ugcHandle = await steamRemoteStorage.fileShare('replay.dat');
|
|
464
|
-
*
|
|
465
|
-
* const ugcHandle = BigInt('123456789');
|
|
466
|
-
* await steam.attachLeaderboardUGC(leaderboard, ugcHandle);
|
|
467
|
-
* ```
|
|
468
|
-
*/
|
|
469
|
-
async attachLeaderboardUGC(leaderboardHandle, ugcHandle) {
|
|
470
|
-
return this.leaderboardManager.attachLeaderboardUGC(leaderboardHandle, ugcHandle);
|
|
471
|
-
}
|
|
472
77
|
}
|
|
473
78
|
exports.default = SteamworksSDK;
|
|
474
79
|
//# sourceMappingURL=steam.js.map
|
package/dist/steam.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steam.js","sourceRoot":"","sources":["../src/steam.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"steam.js","sourceRoot":"","sources":["../src/steam.ts"],"names":[],"mappings":";;AAIA,sEAAmE;AACnE,0DAAuD;AACvD,gFAA6E;AAC7E,oEAAiE;AACjE,gFAA6E;AAE7E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,aAAa;IA0GjB;QACE,8BAA8B;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,uCAAkB,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpD,6BAA6B;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,iDAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,GAAG,IAAI,iDAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,2CAA2C;IAC3C,mBAAmB;IACnB,2CAA2C;IAE3C;;OAEG;IACH,IAAI,CAAC,OAAyB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;CACF;AAED,kBAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Achievement-related types for the SteamAchievementManager
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Steam achievement data
|
|
6
|
+
*/
|
|
7
|
+
export interface SteamAchievement {
|
|
8
|
+
apiName: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
description: string;
|
|
11
|
+
unlocked: boolean;
|
|
12
|
+
unlockTime: number;
|
|
13
|
+
hidden?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Achievement progress limits for progress tracking
|
|
17
|
+
*/
|
|
18
|
+
export interface AchievementProgressLimits {
|
|
19
|
+
minProgress: number;
|
|
20
|
+
maxProgress: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* User (friend) achievement data
|
|
24
|
+
*/
|
|
25
|
+
export interface UserAchievement {
|
|
26
|
+
steamId: string;
|
|
27
|
+
apiName: string;
|
|
28
|
+
displayName: string;
|
|
29
|
+
description: string;
|
|
30
|
+
unlocked: boolean;
|
|
31
|
+
unlockTime: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Global achievement statistics with unlock percentage
|
|
35
|
+
*/
|
|
36
|
+
export interface AchievementGlobalStats {
|
|
37
|
+
apiName: string;
|
|
38
|
+
displayName: string;
|
|
39
|
+
description: string;
|
|
40
|
+
unlocked: boolean;
|
|
41
|
+
globalUnlockPercentage: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Achievement with icon handle for visual display
|
|
45
|
+
*/
|
|
46
|
+
export interface AchievementWithIcon extends SteamAchievement {
|
|
47
|
+
iconHandle: number;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=achievements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"achievements.d.ts","sourceRoot":"","sources":["../../src/types/achievements.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"achievements.js","sourceRoot":"","sources":["../../src/types/achievements.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Steam API types used across all managers
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Options for initializing the Steam API
|
|
6
|
+
*/
|
|
7
|
+
export interface SteamInitOptions {
|
|
8
|
+
appId: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Current Steam connection status
|
|
12
|
+
*/
|
|
13
|
+
export interface SteamStatus {
|
|
14
|
+
initialized: boolean;
|
|
15
|
+
appId: number;
|
|
16
|
+
steamId: string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central export file for all Steam types
|
|
3
|
+
*
|
|
4
|
+
* Types are organized by manager:
|
|
5
|
+
* - core.ts - Core Steam API types
|
|
6
|
+
* - achievements.ts - Achievement-related types
|
|
7
|
+
* - stats.ts - Stats-related types
|
|
8
|
+
* - leaderboards.ts - Leaderboard-related types
|
|
9
|
+
*/
|
|
10
|
+
export * from './core';
|
|
11
|
+
export * from './achievements';
|
|
12
|
+
export * from './stats';
|
|
13
|
+
export * from './leaderboards';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,QAAQ,CAAC;AAGvB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Central export file for all Steam types
|
|
4
|
+
*
|
|
5
|
+
* Types are organized by manager:
|
|
6
|
+
* - core.ts - Core Steam API types
|
|
7
|
+
* - achievements.ts - Achievement-related types
|
|
8
|
+
* - stats.ts - Stats-related types
|
|
9
|
+
* - leaderboards.ts - Leaderboard-related types
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
23
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
// Core types
|
|
27
|
+
__exportStar(require("./core"), exports);
|
|
28
|
+
// Achievement types
|
|
29
|
+
__exportStar(require("./achievements"), exports);
|
|
30
|
+
// Stats types
|
|
31
|
+
__exportStar(require("./stats"), exports);
|
|
32
|
+
// Leaderboard types
|
|
33
|
+
__exportStar(require("./leaderboards"), exports);
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;AAEH,aAAa;AACb,yCAAuB;AAEvB,oBAAoB;AACpB,iDAA+B;AAE/B,cAAc;AACd,0CAAwB;AAExB,oBAAoB;AACpB,iDAA+B"}
|