From 1a3e23ae2a886c696958168099959cf5afc89bd6 Mon Sep 17 00:00:00 2001 From: Ossama Jouini Date: Sat, 17 Jan 2026 16:47:47 +0100 Subject: [PATCH 1/7] Implemented temporary playtime tracking methods for workshop items (pending PR) --- client.d.ts | 35 +++++++++++++ src/api/workshop.rs | 118 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) diff --git a/client.d.ts b/client.d.ts index 4d8decb7..54660a16 100644 --- a/client.d.ts +++ b/client.d.ts @@ -393,6 +393,41 @@ export declare namespace workshop { */ export function getSubscribedItems(includeLocallyDisabled: boolean): Array export function deleteItem(itemId: bigint): Promise + // TODO: Uncomment these methods once the steamworks-rs PR is merged + // /** + // * Start tracking playtime on a set of workshop items. + // * + // * When your app shuts down, playtime tracking will automatically stop. + // * + // * @param itemIds - The array of workshop items you want to start tracking. (Maximum of 100 items.) + // * @returns Promise that resolves when the operation completes + // * + // * {@link https://partner.steamgames.com/doc/api/ISteamUGC#StartPlaytimeTracking} + // */ + // export function startPlaytimeTracking(itemIds: Array): Promise + // /** + // * Stop tracking playtime on a set of workshop items. + // * + // * This will increment the number of "playtime" sessions for those items by one. + // * When your app shuts down, playtime tracking will automatically stop. + // * + // * @param itemIds - The array of workshop items you want to stop tracking. (Maximum of 100 items.) + // * @returns Promise that resolves when the operation completes + // * + // * {@link https://partner.steamgames.com/doc/api/ISteamUGC#StopPlaytimeTracking} + // */ + // export function stopPlaytimeTracking(itemIds: Array): Promise + // /** + // * Stop tracking playtime of all workshop items. + // * + // * When your app shuts down, playtime tracking will automatically stop. + // * This will increment the number of "playtime" sessions for all items that were being tracked by one. + // * + // * @returns Promise that resolves when the operation completes + // * + // * {@link https://partner.steamgames.com/doc/api/ISteamUGC#StopPlaytimeTrackingForAllItems} + // */ + // export function stopPlaytimeTrackingForAllItems(): Promise export const enum UGCQueryType { RankedByVote = 0, RankedByPublicationDate = 1, diff --git a/src/api/workshop.rs b/src/api/workshop.rs index 3c80a010..b7e9108f 100644 --- a/src/api/workshop.rs +++ b/src/api/workshop.rs @@ -423,4 +423,122 @@ pub mod workshop { Err(e) => Err(Error::from_reason(e.to_string())), } } + + // TODO: Uncomment these methods once the steamworks-rs PR is merged + // PR: https://github.com/Noxime/steamworks-rs/pull/297 + // These methods require start_playtime_tracking, stop_playtime_tracking, and + // stop_playtime_tracking_for_all_items to be added to the steamworks-rs UGC API + + // /// Start tracking playtime on a set of workshop items. + // /// + // /// When your app shuts down, playtime tracking will automatically stop. + // /// + // /// @param itemIds - The array of workshop items you want to start tracking. (Maximum of 100 items.) + // /// @returns Promise that resolves when the operation completes + // /// + // /// {@link https://partner.steamgames.com/doc/api/ISteamUGC#StartPlaytimeTracking} + // #[napi] + // pub async fn start_playtime_tracking(item_ids: Vec) -> Result<(), Error> { + // if item_ids.is_empty() { + // return Err(Error::from_reason( + // "item_ids must contain at least 1 item".to_string(), + // )); + // } + // + // if item_ids.len() > 100 { + // return Err(Error::from_reason( + // "item_ids must not contain more than 100 items".to_string(), + // )); + // } + // + // let client = crate::client::get_client(); + // let (tx, rx) = oneshot::channel(); + // + // let published_file_ids: Vec = item_ids + // .iter() + // .map(|id| PublishedFileId(id.get_u64().1)) + // .collect(); + // + // client + // .ugc() + // .start_playtime_tracking(&published_file_ids, |result| { + // tx.send(result).unwrap(); + // }); + // + // let result = rx.await.unwrap(); + // match result { + // Ok(()) => Ok(()), + // Err(e) => Err(Error::from_reason(e.to_string())), + // } + // } + + // /// Stop tracking playtime on a set of workshop items. + // /// + // /// This will increment the number of "playtime" sessions for those items by one. + // /// When your app shuts down, playtime tracking will automatically stop. + // /// + // /// @param itemIds - The array of workshop items you want to stop tracking. (Maximum of 100 items.) + // /// @returns Promise that resolves when the operation completes + // /// + // /// {@link https://partner.steamgames.com/doc/api/ISteamUGC#StopPlaytimeTracking} + // #[napi] + // pub async fn stop_playtime_tracking(item_ids: Vec) -> Result<(), Error> { + // if item_ids.is_empty() { + // return Err(Error::from_reason( + // "item_ids must contain at least 1 item".to_string(), + // )); + // } + // + // if item_ids.len() > 100 { + // return Err(Error::from_reason( + // "item_ids must not contain more than 100 items".to_string(), + // )); + // } + // + // let client = crate::client::get_client(); + // let (tx, rx) = oneshot::channel(); + // + // let published_file_ids: Vec = item_ids + // .iter() + // .map(|id| PublishedFileId(id.get_u64().1)) + // .collect(); + // + // client + // .ugc() + // .stop_playtime_tracking(&published_file_ids, |result| { + // tx.send(result).unwrap(); + // }); + // + // let result = rx.await.unwrap(); + // match result { + // Ok(()) => Ok(()), + // Err(e) => Err(Error::from_reason(e.to_string())), + // } + // } + + // /// Stop tracking playtime of all workshop items. + // /// + // /// When your app shuts down, playtime tracking will automatically stop. + // /// This will increment the number of "playtime" sessions for all items that were being tracked by one. + // /// + // /// @returns Promise that resolves when the operation completes + // /// + // /// {@link https://partner.steamgames.com/doc/api/ISteamUGC#StopPlaytimeTrackingForAllItems} + // #[napi] + // pub async fn stop_playtime_tracking_for_all_items() -> Result<(), Error> { + // let client = crate::client::get_client(); + // let (tx, rx) = oneshot::channel(); + // + // client + // .ugc() + // .stop_playtime_tracking_for_all_items(|result| { + // tx.send(result).unwrap(); + // }); + // + // let result = rx.await.unwrap(); + // match result { + // Ok(()) => Ok(()), + // Err(e) => Err(Error::from_reason(e.to_string())), + // } + // } } From 158db2bd8515baa1725611faf32551a79ece966d Mon Sep 17 00:00:00 2001 From: Ossama Jouini Date: Thu, 29 Jan 2026 21:50:28 +0100 Subject: [PATCH 2/7] Added more of the screenshot API --- callbacks.d.ts | 4 +++ client.d.ts | 53 +++++++++++++++++++++++++++-- src/api/callback.rs | 11 ++++++ src/api/screenshots.rs | 77 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 142 insertions(+), 3 deletions(-) diff --git a/callbacks.d.ts b/callbacks.d.ts index 05246ff4..53b86945 100644 --- a/callbacks.d.ts +++ b/callbacks.d.ts @@ -53,4 +53,8 @@ export interface CallbackReturns { order_id: number | bigint authorized: boolean } + [client.callback.SteamCallback.ScreenshotRequested]: {} + [client.callback.SteamCallback.ScreenshotReady]: { + local_handle: number | { Fail: null } | { IoFailure: null } + } } diff --git a/client.d.ts b/client.d.ts index 54660a16..0f56e3f2 100644 --- a/client.d.ts +++ b/client.d.ts @@ -56,7 +56,9 @@ export declare namespace callback { P2PSessionRequest = 6, P2PSessionConnectFail = 7, GameLobbyJoinRequested = 8, - MicroTxnAuthorizationResponse = 9 + MicroTxnAuthorizationResponse = 9, + ScreenshotRequested = 10, + ScreenshotReady = 11 } export function register(steamCallback: C, handler: (value: import('./callbacks').CallbackReturns[C]) => void): Handle export class Handle { @@ -262,9 +264,56 @@ export declare namespace overlay { } export declare namespace screenshots { /** - * Triggers the Steam overlay to take a screenshot. + * Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, + * or if the game handles them. + * + * Hooking is disabled by default, and only ever enabled if you do so with this function. + * + * If hooking is enabled, then the ScreenshotRequested callback will be sent if the user presses + * the hotkey or when triggerScreenshot is called, and then the game is expected to call + * addScreenshotToLibrary in response. + * + * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#HookScreenshots} + */ + export function hookScreenshots(hook: boolean): void + /** + * Checks if the app is hooking screenshots, or if the Steam Overlay is handling them. + * + * @returns true if the game is hooking screenshots and is expected to handle them; otherwise, false. + * + * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#IsScreenshotsHooked} + */ + export function isScreenshotsHooked(): boolean + /** + * Either causes the Steam Overlay to take a screenshot, or tells your screenshot manager + * that a screenshot needs to be taken, depending on whether hooking is enabled. + * + * If hooking is disabled (default): + * - Steam overlay takes the screenshot automatically + * - Screenshot is saved to Steam's screenshot folder + * - Can be viewed in Steam > View > Screenshots + * + * If hooking is enabled via hookScreenshots(true): + * - A ScreenshotRequested callback is triggered + * - Your game must handle the screenshot by calling addScreenshotToLibrary + * + * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#TriggerScreenshot} */ export function triggerScreenshot(): void + /** + * Adds a screenshot to the user's Steam screenshot library from disk. + * + * @param filename - The absolute path to the screenshot image file + * @param thumbnailFilename - Optional path to a thumbnail image (can be null/undefined) + * @param width - Width of the screenshot in pixels + * @param height - Height of the screenshot in pixels + * @returns The screenshot handle, or throws an error if the operation fails + * + * This call is asynchronous. The screenshot will be processed and added to the library. + * + * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#AddScreenshotToLibrary} + */ + export function addScreenshotToLibrary(filename: string, thumbnailFilename: string | undefined | null, width: number, height: number): number } export declare namespace stats { export function getInt(name: string): number | null diff --git a/src/api/callback.rs b/src/api/callback.rs index a58ae364..5a4bfd32 100644 --- a/src/api/callback.rs +++ b/src/api/callback.rs @@ -48,6 +48,8 @@ pub mod callback { P2PSessionConnectFail, GameLobbyJoinRequested, MicroTxnAuthorizationResponse, + ScreenshotRequested, + ScreenshotReady, } #[napi(ts_generic_types = "C extends keyof import('./callbacks').CallbackReturns")] @@ -91,6 +93,15 @@ pub mod callback { SteamCallback::MicroTxnAuthorizationResponse => { register_callback::(threadsafe_handler) } + // TODO: Uncomment when steamworks-rs exposes these callback types + SteamCallback::ScreenshotRequested => { + // register_callback::(threadsafe_handler) + panic!("ScreenshotRequested callback not yet supported - needs steamworks-rs update") + } + SteamCallback::ScreenshotReady => { + // register_callback::(threadsafe_handler) + panic!("ScreenshotReady callback not yet supported - needs steamworks-rs update") + } }; let id = HANDLE_ID_COUNTER.fetch_add(1, Ordering::Relaxed); diff --git a/src/api/screenshots.rs b/src/api/screenshots.rs index ebd723d8..d21100e1 100644 --- a/src/api/screenshots.rs +++ b/src/api/screenshots.rs @@ -2,11 +2,86 @@ use napi_derive::napi; #[napi] pub mod screenshots { - /// Triggers the Steam overlay to take a screenshot. + use napi::bindgen_prelude::Error; + use std::path::Path; + + /// Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, + /// or if the game handles them. + /// + /// Hooking is disabled by default, and only ever enabled if you do so with this function. + /// + /// If hooking is enabled, then the ScreenshotRequested callback will be sent if the user presses + /// the hotkey or when triggerScreenshot is called, and then the game is expected to call + /// addScreenshotToLibrary in response. + /// + /// {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#HookScreenshots} + #[napi] + pub fn hook_screenshots(hook: bool) { + let client = crate::client::get_client(); + let screenshots = client.screenshots(); + screenshots.hook_screenshots(hook); + } + + /// Checks if the app is hooking screenshots, or if the Steam Overlay is handling them. + /// + /// @returns true if the game is hooking screenshots and is expected to handle them; otherwise, false. + /// + /// {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#IsScreenshotsHooked} + #[napi] + pub fn is_screenshots_hooked() -> bool { + let client = crate::client::get_client(); + let screenshots = client.screenshots(); + screenshots.is_screenshots_hooked() + } + + /// Either causes the Steam Overlay to take a screenshot, or tells your screenshot manager + /// that a screenshot needs to be taken, depending on whether hooking is enabled. + /// + /// If hooking is disabled (default): + /// - Steam overlay takes the screenshot automatically + /// - Screenshot is saved to Steam's screenshot folder + /// - Can be viewed in Steam > View > Screenshots + /// + /// If hooking is enabled via hookScreenshots(true): + /// - A ScreenshotRequested callback is triggered + /// - Your game must handle the screenshot by calling addScreenshotToLibrary + /// + /// {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#TriggerScreenshot} #[napi] pub fn trigger_screenshot() { let client = crate::client::get_client(); let screenshots = client.screenshots(); screenshots.trigger_screenshot(); } + + /// Adds a screenshot to the user's Steam screenshot library from disk. + /// + /// @param filename - The absolute path to the screenshot image file + /// @param thumbnail_filename - Optional path to a thumbnail image (can be null/undefined) + /// @param width - Width of the screenshot in pixels + /// @param height - Height of the screenshot in pixels + /// @returns The screenshot handle, or throws an error if the operation fails + /// + /// This call is asynchronous. The screenshot will be processed and added to the library. + /// + /// {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#AddScreenshotToLibrary} + #[napi] + pub fn add_screenshot_to_library( + filename: String, + thumbnail_filename: Option, + width: i32, + height: i32, + ) -> Result { + let client = crate::client::get_client(); + let screenshots = client.screenshots(); + + let path = Path::new(&filename); + let thumbnail_path = thumbnail_filename.as_ref().map(|s| Path::new(s.as_str())); + + match screenshots.add_screenshot_to_library(path, thumbnail_path, width, height) { + Ok(handle) => Ok(handle), + Err(e) => Err(Error::from_reason(e.to_string())), + } + } + } From 483e3a408e80376507c26e8b5884c4ed8f5c5a4f Mon Sep 17 00:00:00 2001 From: Ossama Jouini Date: Thu, 29 Jan 2026 21:57:37 +0100 Subject: [PATCH 3/7] removed unnecessary callbacks --- callbacks.d.ts | 4 ---- client.d.ts | 41 ++--------------------------------------- src/api/callback.rs | 11 ----------- src/api/screenshots.rs | 41 +---------------------------------------- 4 files changed, 3 insertions(+), 94 deletions(-) diff --git a/callbacks.d.ts b/callbacks.d.ts index 4a5dd3be..99503810 100644 --- a/callbacks.d.ts +++ b/callbacks.d.ts @@ -56,8 +56,4 @@ export interface CallbackReturns { [client.callback.SteamCallback.GameOverlayActivated]: { active: boolean } - [client.callback.SteamCallback.ScreenshotRequested]: {} - [client.callback.SteamCallback.ScreenshotReady]: { - local_handle: number | { Fail: null } | { IoFailure: null } - } } diff --git a/client.d.ts b/client.d.ts index c362c408..2d115816 100644 --- a/client.d.ts +++ b/client.d.ts @@ -57,9 +57,7 @@ export declare namespace callback { P2PSessionConnectFail = 7, GameLobbyJoinRequested = 8, MicroTxnAuthorizationResponse = 9, - GameOverlayActivated = 10, - ScreenshotRequested = 11, - ScreenshotReady = 12 + GameOverlayActivated = 10 } export function register(steamCallback: C, handler: (value: import('./callbacks').CallbackReturns[C]) => void): Handle export class Handle { @@ -264,42 +262,7 @@ export declare namespace overlay { export function activateToStore(appId: number, flag: StoreFlag): void } export declare namespace screenshots { - /** - * Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, - * or if the game handles them. - * - * Hooking is disabled by default, and only ever enabled if you do so with this function. - * - * If hooking is enabled, then the ScreenshotRequested callback will be sent if the user presses - * the hotkey or when triggerScreenshot is called, and then the game is expected to call - * addScreenshotToLibrary in response. - * - * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#HookScreenshots} - */ - export function hookScreenshots(hook: boolean): void - /** - * Checks if the app is hooking screenshots, or if the Steam Overlay is handling them. - * - * @returns true if the game is hooking screenshots and is expected to handle them; otherwise, false. - * - * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#IsScreenshotsHooked} - */ - export function isScreenshotsHooked(): boolean - /** - * Either causes the Steam Overlay to take a screenshot, or tells your screenshot manager - * that a screenshot needs to be taken, depending on whether hooking is enabled. - * - * If hooking is disabled (default): - * - Steam overlay takes the screenshot automatically - * - Screenshot is saved to Steam's screenshot folder - * - Can be viewed in Steam > View > Screenshots - * - * If hooking is enabled via hookScreenshots(true): - * - A ScreenshotRequested callback is triggered - * - Your game must handle the screenshot by calling addScreenshotToLibrary - * - * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#TriggerScreenshot} - */ + /** Triggers the Steam overlay to take a screenshot. */ export function triggerScreenshot(): void /** * Adds a screenshot to the user's Steam screenshot library from disk. diff --git a/src/api/callback.rs b/src/api/callback.rs index 8e7957dc..041dbc29 100644 --- a/src/api/callback.rs +++ b/src/api/callback.rs @@ -49,8 +49,6 @@ pub mod callback { GameLobbyJoinRequested, MicroTxnAuthorizationResponse, GameOverlayActivated, - ScreenshotRequested, - ScreenshotReady, } #[napi(ts_generic_types = "C extends keyof import('./callbacks').CallbackReturns")] @@ -97,15 +95,6 @@ pub mod callback { SteamCallback::GameOverlayActivated => { register_callback::(threadsafe_handler) } - // TODO: Uncomment when steamworks-rs exposes these callback types - SteamCallback::ScreenshotRequested => { - // register_callback::(threadsafe_handler) - panic!("ScreenshotRequested callback not yet supported - needs steamworks-rs update") - } - SteamCallback::ScreenshotReady => { - // register_callback::(threadsafe_handler) - panic!("ScreenshotReady callback not yet supported - needs steamworks-rs update") - } }; let id = HANDLE_ID_COUNTER.fetch_add(1, Ordering::Relaxed); diff --git a/src/api/screenshots.rs b/src/api/screenshots.rs index d21100e1..5d96cf85 100644 --- a/src/api/screenshots.rs +++ b/src/api/screenshots.rs @@ -5,46 +5,7 @@ pub mod screenshots { use napi::bindgen_prelude::Error; use std::path::Path; - /// Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, - /// or if the game handles them. - /// - /// Hooking is disabled by default, and only ever enabled if you do so with this function. - /// - /// If hooking is enabled, then the ScreenshotRequested callback will be sent if the user presses - /// the hotkey or when triggerScreenshot is called, and then the game is expected to call - /// addScreenshotToLibrary in response. - /// - /// {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#HookScreenshots} - #[napi] - pub fn hook_screenshots(hook: bool) { - let client = crate::client::get_client(); - let screenshots = client.screenshots(); - screenshots.hook_screenshots(hook); - } - - /// Checks if the app is hooking screenshots, or if the Steam Overlay is handling them. - /// - /// @returns true if the game is hooking screenshots and is expected to handle them; otherwise, false. - /// - /// {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#IsScreenshotsHooked} - #[napi] - pub fn is_screenshots_hooked() -> bool { - let client = crate::client::get_client(); - let screenshots = client.screenshots(); - screenshots.is_screenshots_hooked() - } - - /// Either causes the Steam Overlay to take a screenshot, or tells your screenshot manager - /// that a screenshot needs to be taken, depending on whether hooking is enabled. - /// - /// If hooking is disabled (default): - /// - Steam overlay takes the screenshot automatically - /// - Screenshot is saved to Steam's screenshot folder - /// - Can be viewed in Steam > View > Screenshots - /// - /// If hooking is enabled via hookScreenshots(true): - /// - A ScreenshotRequested callback is triggered - /// - Your game must handle the screenshot by calling addScreenshotToLibrary + /// Triggers the Steam overlay to take a screenshot. /// /// {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#TriggerScreenshot} #[napi] From 159ad981991bec9c4412e6e0b67138d646696992 Mon Sep 17 00:00:00 2001 From: Ossama Jouini Date: Thu, 29 Jan 2026 21:58:55 +0100 Subject: [PATCH 4/7] removed white line --- src/api/screenshots.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/api/screenshots.rs b/src/api/screenshots.rs index 5d96cf85..a32490b9 100644 --- a/src/api/screenshots.rs +++ b/src/api/screenshots.rs @@ -44,5 +44,4 @@ pub mod screenshots { Err(e) => Err(Error::from_reason(e.to_string())), } } - } From 3aeaa0061b6f362f4b3a56937ef6f6833a374758 Mon Sep 17 00:00:00 2001 From: Ossama Jouini Date: Tue, 3 Feb 2026 15:38:09 +0000 Subject: [PATCH 5/7] removed comments --- client.d.ts | 43 ++++++------------------------------------- 1 file changed, 6 insertions(+), 37 deletions(-) diff --git a/client.d.ts b/client.d.ts index 2d115816..a861e161 100644 --- a/client.d.ts +++ b/client.d.ts @@ -262,13 +262,17 @@ export declare namespace overlay { export function activateToStore(appId: number, flag: StoreFlag): void } export declare namespace screenshots { - /** Triggers the Steam overlay to take a screenshot. */ + /** + * Triggers the Steam overlay to take a screenshot. + * + * {@link https://partner.steamgames.com/doc/api/ISteamScreenshots#TriggerScreenshot} + */ export function triggerScreenshot(): void /** * Adds a screenshot to the user's Steam screenshot library from disk. * * @param filename - The absolute path to the screenshot image file - * @param thumbnailFilename - Optional path to a thumbnail image (can be null/undefined) + * @param thumbnail_filename - Optional path to a thumbnail image (can be null/undefined) * @param width - Width of the screenshot in pixels * @param height - Height of the screenshot in pixels * @returns The screenshot handle, or throws an error if the operation fails @@ -406,41 +410,6 @@ export declare namespace workshop { */ export function getSubscribedItems(includeLocallyDisabled: boolean): Array export function deleteItem(itemId: bigint): Promise - // TODO: Uncomment these methods once the steamworks-rs PR is merged - // /** - // * Start tracking playtime on a set of workshop items. - // * - // * When your app shuts down, playtime tracking will automatically stop. - // * - // * @param itemIds - The array of workshop items you want to start tracking. (Maximum of 100 items.) - // * @returns Promise that resolves when the operation completes - // * - // * {@link https://partner.steamgames.com/doc/api/ISteamUGC#StartPlaytimeTracking} - // */ - // export function startPlaytimeTracking(itemIds: Array): Promise - // /** - // * Stop tracking playtime on a set of workshop items. - // * - // * This will increment the number of "playtime" sessions for those items by one. - // * When your app shuts down, playtime tracking will automatically stop. - // * - // * @param itemIds - The array of workshop items you want to stop tracking. (Maximum of 100 items.) - // * @returns Promise that resolves when the operation completes - // * - // * {@link https://partner.steamgames.com/doc/api/ISteamUGC#StopPlaytimeTracking} - // */ - // export function stopPlaytimeTracking(itemIds: Array): Promise - // /** - // * Stop tracking playtime of all workshop items. - // * - // * When your app shuts down, playtime tracking will automatically stop. - // * This will increment the number of "playtime" sessions for all items that were being tracked by one. - // * - // * @returns Promise that resolves when the operation completes - // * - // * {@link https://partner.steamgames.com/doc/api/ISteamUGC#StopPlaytimeTrackingForAllItems} - // */ - // export function stopPlaytimeTrackingForAllItems(): Promise export const enum UGCQueryType { RankedByVote = 0, RankedByPublicationDate = 1, From 25f48b4fb819f15de26eb17c3a11b5db6545fdf1 Mon Sep 17 00:00:00 2001 From: Ossama Jouini Date: Tue, 3 Feb 2026 15:41:40 +0000 Subject: [PATCH 6/7] Trigger CI build From 32836e70366dcbf9fa80be8b9529626ef9a8847c Mon Sep 17 00:00:00 2001 From: Ossama Jouini Date: Tue, 3 Feb 2026 15:43:48 +0000 Subject: [PATCH 7/7] Add manual workflow trigger --- .github/workflows/publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 939490a2..e788bee0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,6 +4,7 @@ on: push: branches: [main] pull_request: + workflow_dispatch: env: DEBUG: "napi:*"