@series-inc/rundot-game-sdk 5.8.2 → 5.8.4

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.
@@ -1,4 +1,4 @@
1
- import { generateId, RpcAdsApi, RpcAnalyticsApi, RpcStorageApi, RpcAvatarApi, RpcNavigationApi, RpcNotificationsApi, RpcPopupsApi, HostProfileApi, HostDeviceApi, HostEnvironmentApi, HostSystemApi, HostCdnApi, HostTimeApi, RpcAiApi, RpcHapticsApi, RpcFeaturesApi, RpcLifecycleApi, RpcRoomsApi, RpcLoggingApi, RpcIapApi, RpcPreloaderApi, RpcEntitlementApi, RpcShopApi, RpcSharedAssetsApi, initializeRoomsApi, RpcAccessGateApi, applyAccessGates, WsMultiplayerApi, MockAdsApi, MockLifecycleApi, MockAnalyticsApi, createMockStorageApi, MockAvatarApi, MockNavigationApi, MockNotificationsApi, MockPopupsApi, MockProfileApi, MockDeviceApi, MockEnvironmentApi, MockSystemApi, MockCdnApi, MockTimeApi, MockAiApi, MockHapticsApi, MockFeaturesApi, MockLoggingApi, MockIapApi, MockSocialApi, MockEntitlementApi, MockShopApi, MockPreloaderApi, MockSharedAssetsApi, MockAccessGateApi, MockMultiplayerApi } from './chunk-V7H54HGI.js';
1
+ import { generateId, RpcAdsApi, RpcAnalyticsApi, RpcStorageApi, RpcAvatarApi, RpcNavigationApi, RpcNotificationsApi, RpcPopupsApi, HostProfileApi, HostDeviceApi, HostEnvironmentApi, HostSystemApi, HostCdnApi, HostTimeApi, RpcAiApi, RpcHapticsApi, RpcFeaturesApi, RpcLifecycleApi, RpcRoomsApi, RpcLoggingApi, RpcIapApi, RpcPreloaderApi, RpcEntitlementApi, RpcShopApi, RpcSharedAssetsApi, initializeRoomsApi, RpcAccessGateApi, applyAccessGates, WsMultiplayerApi, MockAdsApi, MockLifecycleApi, MockAnalyticsApi, createMockStorageApi, MockAvatarApi, MockNavigationApi, MockNotificationsApi, MockPopupsApi, MockProfileApi, MockDeviceApi, MockEnvironmentApi, MockSystemApi, MockCdnApi, MockTimeApi, MockAiApi, MockHapticsApi, MockFeaturesApi, MockLoggingApi, MockIapApi, MockEntitlementApi, MockShopApi, MockPreloaderApi, MockSharedAssetsApi, MockAccessGateApi, MockMultiplayerApi } from './chunk-WRQ3NCXC.js';
2
2
 
3
3
  // src/rpc/RpcClient.ts
4
4
  var RpcClient = class {
@@ -532,7 +532,7 @@ function initializeSimulation(rundotGameApi, host) {
532
532
  }
533
533
 
534
534
  // src/version.ts
535
- var SDK_VERSION = "5.8.2";
535
+ var SDK_VERSION = "5.8.4";
536
536
 
537
537
  // src/leaderboard/utils.ts
538
538
  var HASH_ALGORITHM_WEB_CRYPTO = "SHA-256";
@@ -1015,6 +1015,53 @@ function initializeUgc(rundotGameApiInstance, host) {
1015
1015
  rundotGameApiInstance.ugc = host.ugc;
1016
1016
  }
1017
1017
 
1018
+ // src/social/MockSocialApi.ts
1019
+ var MOCK_QR_CODE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==";
1020
+ var MOCK_SHARE_LINK_ID = "mock-share-id";
1021
+ var MockSocialApi = class {
1022
+ async shareLinkAsync(options) {
1023
+ const shareUrl = this.createMockUrl(options.shareParams);
1024
+ if (typeof navigator !== "undefined" && navigator.clipboard) {
1025
+ try {
1026
+ await navigator.clipboard.writeText(shareUrl);
1027
+ console.log("[RUN.game SDK] (mock) Copied share URL to clipboard");
1028
+ } catch (error) {
1029
+ console.warn(
1030
+ "[RUN.game SDK] (mock) Failed to copy share URL to clipboard",
1031
+ error
1032
+ );
1033
+ }
1034
+ }
1035
+ return { shareUrl, shareLinkId: MOCK_SHARE_LINK_ID };
1036
+ }
1037
+ async createQRCodeAsync(options) {
1038
+ const shareUrl = this.createMockUrl(options.shareParams);
1039
+ return {
1040
+ shareUrl,
1041
+ qrCode: MOCK_QR_CODE,
1042
+ shareLinkId: MOCK_SHARE_LINK_ID
1043
+ };
1044
+ }
1045
+ async addShareClickDataAsync(options) {
1046
+ console.log("[RUN.game SDK] (mock) addShareClickDataAsync:", options);
1047
+ }
1048
+ async getShareClicksAsync(options) {
1049
+ console.log("[RUN.game SDK] (mock) getShareClicksAsync:", options);
1050
+ return { clicks: [], truncated: false };
1051
+ }
1052
+ async getMyShareClickDataAsync(options) {
1053
+ console.log("[RUN.game SDK] (mock) getMyShareClickDataAsync:", options);
1054
+ return null;
1055
+ }
1056
+ createMockUrl(shareParams) {
1057
+ const params = new URLSearchParams(shareParams);
1058
+ console.log("Mocking Social API share link with params:", params);
1059
+ console.warn("Reminder that share params are stored online and so when mocking the url, the mock url is just a template");
1060
+ console.warn("The actual share url will look something like this: https://mock-share-url.com/97dt/mock-share-id");
1061
+ return `https://mock-share-url.com/97dt/mock-share-id`;
1062
+ }
1063
+ };
1064
+
1018
1065
  // src/social/RpcSocialApi.ts
1019
1066
  var RpcSocialApi = class {
1020
1067
  constructor(rpcClient) {
@@ -2055,6 +2102,6 @@ function initializeSocial(rundotGameApi, host) {
2055
2102
  rundotGameApi.social = host.social;
2056
2103
  }
2057
2104
 
2058
- export { HASH_ALGORITHM_NODE, HASH_ALGORITHM_WEB_CRYPTO, MockImageGenApi, MockLeaderboardApi, RemoteHost, RpcClient, RpcImageGenApi, RpcLeaderboardApi, RpcSimulationApi, RpcSocialApi, SDK_VERSION, computeScoreHash, createHost, initializeImageGen, initializeLeaderboard, initializeSimulation, initializeSocial, initializeUgc };
2059
- //# sourceMappingURL=chunk-ES6LGNOY.js.map
2060
- //# sourceMappingURL=chunk-ES6LGNOY.js.map
2105
+ export { HASH_ALGORITHM_NODE, HASH_ALGORITHM_WEB_CRYPTO, MockImageGenApi, MockLeaderboardApi, MockSocialApi, RemoteHost, RpcClient, RpcImageGenApi, RpcLeaderboardApi, RpcSimulationApi, RpcSocialApi, SDK_VERSION, computeScoreHash, createHost, initializeImageGen, initializeLeaderboard, initializeSimulation, initializeSocial, initializeUgc };
2106
+ //# sourceMappingURL=chunk-OY6T42UR.js.map
2107
+ //# sourceMappingURL=chunk-OY6T42UR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rpc/RpcClient.ts","../src/imageGen/RpcImageGenApi.ts","../src/imageGen/MockImageGenApi.ts","../src/imageGen/index.ts","../src/simulation/RpcSimulationApi.ts","../src/simulation/index.ts","../src/version.ts","../src/leaderboard/utils.ts","../src/leaderboard/RpcLeaderboardApi.ts","../src/leaderboard/MockLeaderboardApi.ts","../src/leaderboard/index.ts","../src/ugc/RpcUgcApi.ts","../src/ugc/MockUgcApi.ts","../src/ugc/index.ts","../src/social/MockSocialApi.ts","../src/social/RpcSocialApi.ts","../src/RundotGameTransport.ts","../src/RemoteHost.ts","../src/MockHost.ts","../src/Host.ts","../src/social/index.ts"],"names":["submittedAt","entry","modeEntries","inserted"],"mappings":"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","file":"chunk-OY6T42UR.js","sourcesContent":["import { RpcRequest } from './RpcRequest.ts'\nimport { RpcResponse } from './RpcResponse.ts'\nimport { RpcTransport } from './RpcTransport.ts'\nimport { RpcNotification } from './RpcNotification'\nimport { generateId } from '../utils/idGenerator'\n\ninterface PendingCall {\n id: string\n resolve: (value: unknown) => void\n reject: (error: unknown) => void\n}\n\nexport interface Subscription {\n unsubscribe: () => void\n}\n\nexport class RpcClient {\n private readonly pendingCalls = new Map<string, PendingCall>()\n private readonly notificationCallbacks = new Map<string, Function>()\n\n private onResponseSub: Subscription | null = null\n private onNotificationSub: Subscription | null = null\n private transport: RpcTransport | null = null\n\n start(transport: RpcTransport): void {\n this.transport = transport\n this.onResponseSub = transport.onResponse(async (response) => {\n return this.handleRpcResponse(response)\n })\n this.onNotificationSub = transport.onNotification(async (notification) => {\n return this.handleRpcNotification(notification)\n })\n }\n\n stop(): void {\n if (this.onResponseSub) {\n this.onResponseSub.unsubscribe()\n this.onResponseSub = null\n }\n\n if (this.onNotificationSub) {\n this.onNotificationSub.unsubscribe()\n this.onNotificationSub = null\n }\n\n this.transport = null\n }\n\n onNotification<TPayload>(\n id: string,\n callback: (payload: TPayload) => void,\n ): Subscription {\n this.notificationCallbacks.set(id, callback)\n return {\n unsubscribe: () => {\n this.notificationCallbacks.delete(id)\n },\n }\n }\n\n callT<TArgs, TResult>(\n method: string,\n args?: TArgs,\n timeout: number = 30000,\n ): Promise<TResult> {\n return this.call(method, args, timeout)\n }\n\n async call<TResponse>(\n method: string,\n args?: unknown,\n timeout: number = 30000,\n ): Promise<TResponse> {\n // NOTE(Zee): Make this into options?\n return new Promise((resolve, reject) => {\n const id = generateId()\n this.addPendingCall(\n id,\n (value: unknown) => resolve(value as TResponse),\n (error: unknown) => reject(error),\n )\n\n const request: RpcRequest = {\n type: 'rpc-request',\n id,\n method,\n args: args,\n }\n\n if (this.transport) {\n this.transport.sendRequest(request)\n }\n\n // NOTE(Zee): This is dangerous. We REALLY need to rely on the host to send back a response, otherwise we may permanently hang here...\n if (timeout > 0) {\n const startTime = Date.now()\n setTimeout(() => {\n if (this.hasPendingCall(id)) {\n this.removePendingCall(id)\n const elapsed = Date.now() - startTime\n console.error(\n `[RpcClient] TIMEOUT: ${method} after ${elapsed}ms (limit: ${timeout}ms)`,\n {\n method,\n id,\n args: this.safeStringifyArgs(args).substring(0, 500),\n timeout,\n elapsed,\n timestamp: new Date().toISOString(),\n },\n )\n reject(new Error(`RPC call ${method} timed out after ${elapsed}ms`))\n }\n }, timeout)\n }\n })\n }\n\n private hasPendingCall(id: string): boolean {\n return this.pendingCalls.has(id)\n }\n\n private safeStringifyArgs(args: unknown): string {\n if (args === undefined) {\n return 'undefined'\n }\n if (args === null) {\n return 'null'\n }\n try {\n const serialized = JSON.stringify(args)\n if (serialized === undefined) {\n return 'undefined'\n }\n return serialized\n } catch (error) {\n return `[unserializable args: ${String(error)}]`\n }\n }\n\n private addPendingCall(\n id: string,\n resolve: (v: unknown) => void,\n reject: (e: unknown) => void,\n ): void {\n this.pendingCalls.set(id, {\n id: id,\n resolve: resolve,\n reject: reject,\n })\n }\n\n private removePendingCall(id: string): void {\n this.pendingCalls.delete(id)\n }\n\n private getPendingCall(id: string): PendingCall | undefined {\n return this.pendingCalls.get(id)\n }\n\n private handleRpcResponse(response: RpcResponse): boolean {\n const pending = this.getPendingCall(response.id)\n if (!pending) {\n return false\n }\n this.removePendingCall(response.id)\n\n if (response.error) {\n pending.reject(new Error(response.error.message))\n return true\n }\n\n pending.resolve(response.result)\n return true\n }\n\n private handleRpcNotification(notification: RpcNotification): void {\n const callback = this.notificationCallbacks.get(notification.id)\n if (callback) {\n callback(notification.payload)\n }\n }\n}\n","import { ImageGenApi, ImageGenParams, ImageGenResult } from './ImageGenApi';\nimport { RpcClient } from '../rpc';\nimport { RundotGameMessageId } from '../RundotGameMessageId';\n\nexport class RpcImageGenApi implements ImageGenApi {\n constructor(private readonly rpcClient: RpcClient) {}\n\n async generate(params: ImageGenParams): Promise<ImageGenResult> {\n // Use infinite timeout (-1) like AI API - image generation can be slow\n return this.rpcClient.call<ImageGenResult>(\n RundotGameMessageId.H5_IMAGE_GEN_GENERATE,\n params,\n -1, // Infinite timeout, matching RpcAiApi pattern\n );\n }\n}\n","import { ImageGenApi, ImageGenParams, ImageGenResult } from './ImageGenApi';\n\nexport class MockImageGenApi implements ImageGenApi {\n async generate(_params: ImageGenParams): Promise<ImageGenResult> {\n console.warn('[RUN.game SDK] Image generation API not available in mock mode');\n throw new Error('Image generation API requires backend connection');\n }\n}\n","import type { Host } from '../Host';\nimport type { RundotGameAPI } from '../rundot-game-api/types';\n\nexport * from './ImageGenApi';\nexport { RpcImageGenApi } from './RpcImageGenApi';\nexport { MockImageGenApi } from './MockImageGenApi';\n// HttpImageGenApi is intentionally NOT exported here.\n// It depends on Firebase and should only be imported by SandboxHost.\n// This prevents Firebase from being bundled in production builds.\n\nexport function initializeImageGen(rundotGameApi: RundotGameAPI, host: Host): void {\n rundotGameApi.imageGen = host.imageGen;\n}\n","import {\n CollectRecipeResult,\n ExecuteRecipeOptions,\n ExecuteRecipeResponse,\n ExecuteScopedRecipeResult,\n ExecuteScopedRecipeOptions,\n GetActiveRunsOptions,\n GetAvailableRecipesOptions,\n GetAvailableRecipesResult,\n GetBatchRecipeRequirements,\n Recipe,\n SimulationApi,\n SimulationAvailableItem,\n SimulationAssignment,\n SimulationBatchOperation,\n SimulationBatchOperationsResult,\n SimulationPowerPreview,\n SimulationRunSummary,\n SimulationSlotMutationResult,\n SimulationSlotValidationResult,\n SimulationSlotContainer,\n SimulationState,\n SimulationPersonalState,\n SimulationRoomState,\n TriggerRecipeChainOptions,\n ResetStateOptions,\n ResetStateResult,\n} from './SimulationApi'\nimport { RpcClient } from '../rpc'\nimport { RundotGameMessageId } from '../RundotGameMessageId'\nimport {\n RecipeRequirementResult,\n RundotGameSimulationConfig,\n SimulationSubscribeOptions,\n SimulationUpdateData,\n} from '../rundot-game-api/types'\nimport { generateId } from '../utils/idGenerator'\n\ninterface ResolveFieldValueResponse {\n value: unknown\n}\n\ninterface SimulationUpdateNotification {\n subscriptionId: string\n updates: SimulationUpdateData\n}\n\ninterface StateResponseExtension {\n configuration?: RundotGameSimulationConfig\n}\n\ninterface PersonalStateResponse extends SimulationPersonalState, StateResponseExtension {}\n\ninterface RoomStateResponse extends SimulationRoomState, StateResponseExtension {}\n\ntype GetStateResponse = PersonalStateResponse | RoomStateResponse\n\nexport class RpcSimulationApi implements SimulationApi {\n private readonly rpcClient: RpcClient\n private _simulationConfig: RundotGameSimulationConfig | null = null\n private readonly subscriptionCallbacks = new Map<\n string,\n (data: SimulationUpdateData) => void\n >()\n\n constructor(rpcClient: RpcClient) {\n this.rpcClient = rpcClient\n this.rpcClient.onNotification(\n RundotGameMessageId.H5_SIMULATION_UPDATE,\n this.handleSimulationUpdate.bind(this),\n )\n }\n\n isEnabled(): boolean {\n return true\n }\n\n async validateSlotAssignmentAsync(\n containerId: string,\n slotId: string,\n itemId: string,\n ): Promise<SimulationSlotValidationResult> {\n return this.rpcClient.call<SimulationSlotValidationResult>(\n RundotGameMessageId.H5_SIMULATION_VALIDATE_ASSIGNMENT,\n {\n containerId,\n slotId,\n itemId,\n },\n )\n }\n\n async subscribeAsync(\n options: SimulationSubscribeOptions,\n ): Promise<() => void> {\n this.ensureValidSubscribeOptions(options)\n\n const subscriptionId = generateId()\n this.subscriptionCallbacks.set(subscriptionId, options.onUpdate)\n\n try {\n await this.rpcClient.call(RundotGameMessageId.H5_SIMULATION_SUBSCRIBE, {\n subscriptionId,\n entities: options.entities,\n tags: options.tags,\n activeRuns: options.activeRuns,\n roomId: options.roomId,\n })\n } catch (error) {\n this.subscriptionCallbacks.delete(subscriptionId)\n throw error\n }\n\n let unsubscribed = false\n return () => {\n if (unsubscribed) {\n return\n }\n unsubscribed = true\n\n this.subscriptionCallbacks.delete(subscriptionId)\n\n void this.rpcClient\n .call(RundotGameMessageId.H5_SIMULATION_UNSUBSCRIBE, {\n subscriptionId,\n })\n .catch((error) => {\n console.error(\n '[RUN.game SDK] Failed to unsubscribe simulation listener',\n error,\n )\n })\n }\n }\n\n executeBatchOperationsAsync(\n operations: Array<SimulationBatchOperation>,\n validateOnly?: boolean,\n ): Promise<SimulationBatchOperationsResult> {\n return this.rpcClient.call<SimulationBatchOperationsResult>(\n RundotGameMessageId.H5_SIMULATION_BATCH_OPERATIONS,\n {\n operations,\n validateOnly,\n },\n )\n }\n async getAvailableItemsAsync(\n containerId: string,\n slotId: string,\n ): Promise<SimulationAvailableItem[]> {\n const response = await this.rpcClient.call<{\n availableItems?: SimulationAvailableItem[]\n }>(\n RundotGameMessageId.H5_SIMULATION_GET_AVAILABLE_ITEMS,\n {\n containerId,\n slotId,\n },\n )\n return response.availableItems || []\n }\n calculatePowerPreviewAsync(\n containerId: string,\n slotId: string,\n candidateItemId: string,\n ): Promise<SimulationPowerPreview> {\n return this.rpcClient.call<SimulationPowerPreview>(\n RundotGameMessageId.H5_SIMULATION_CALCULATE_POWER_PREVIEW,\n {\n containerId,\n slotId,\n candidateItemId,\n },\n )\n }\n assignItemToSlotAsync(\n containerId: string,\n slotId: string,\n itemId: string,\n ): Promise<SimulationSlotMutationResult> {\n return this.rpcClient.call<SimulationSlotMutationResult>(\n RundotGameMessageId.H5_SIMULATION_ASSIGN_ITEM,\n {\n containerId,\n slotId,\n itemId,\n },\n )\n }\n\n removeItemFromSlotAsync(\n containerId: string,\n slotId: string,\n ): Promise<SimulationSlotMutationResult> {\n return this.rpcClient.call<SimulationSlotMutationResult>(\n RundotGameMessageId.H5_SIMULATION_REMOVE_ITEM,\n {\n containerId,\n slotId,\n },\n )\n }\n\n async getSlotContainersAsync(): Promise<SimulationSlotContainer[]> {\n const response = await this.rpcClient.call<{\n containers?: SimulationSlotContainer[]\n }>(\n RundotGameMessageId.H5_SIMULATION_GET_CONTAINERS,\n {},\n )\n return response.containers || []\n }\n\n async getSlotAssignmentsAsync(\n containerId: string,\n ): Promise<SimulationAssignment[]> {\n const response = await this.rpcClient.call<\n SimulationAssignment[] | { assignments?: SimulationAssignment[] }\n >(\n RundotGameMessageId.H5_SIMULATION_GET_ASSIGNMENTS,\n {\n containerId,\n },\n )\n // Server returns raw array, not wrapped in .assignments property\n return Array.isArray(response)\n ? response\n : response.assignments || []\n }\n\n async getStateAsync(roomId?: string): Promise<SimulationState> {\n const response = await this.rpcClient.call<GetStateResponse>(\n RundotGameMessageId.H5_SIMULATION_GET_STATE,\n {\n roomId: roomId,\n },\n )\n\n // Cache configuration if included in response\n if (response.configuration) {\n this._simulationConfig = response.configuration\n }\n return response\n }\n\n async getConfigAsync(roomId?: string): Promise<RundotGameSimulationConfig> {\n if (this._simulationConfig) {\n return this._simulationConfig\n }\n\n // Fetch configuration directly\n const config = await this.rpcClient.call<RundotGameSimulationConfig>(\n RundotGameMessageId.H5_SIMULATION_GET_CONFIG,\n {\n roomId,\n },\n )\n if (config) {\n this._simulationConfig = config\n return config\n }\n\n throw new Error('No simulation configuration available')\n }\n\n executeRecipeAsync(\n recipeId: string,\n inputs?: Record<string, unknown>,\n options?: ExecuteRecipeOptions,\n ): Promise<ExecuteRecipeResponse> {\n return this.rpcClient.call<ExecuteRecipeResponse>(\n RundotGameMessageId.H5_SIMULATION_EXECUTE_RECIPE,\n {\n recipeId: recipeId,\n inputs: inputs,\n roomId: options?.roomId,\n batchAmount: options?.batchAmount,\n allowPartialBatch: options?.allowPartialBatch,\n entity: options?.entity,\n nonce: options?.nonce,\n },\n )\n }\n\n collectRecipeAsync(runId: string): Promise<CollectRecipeResult> {\n return this.rpcClient.call(RundotGameMessageId.H5_SIMULATION_COLLECT_RECIPE, {\n runId: runId,\n })\n }\n\n resetStateAsync(options?: ResetStateOptions): Promise<ResetStateResult> {\n return this.rpcClient.call<ResetStateResult>(\n RundotGameMessageId.H5_SIMULATION_RESET_STATE,\n {\n initializeRecipe: options?.initializeRecipe,\n },\n )\n }\n\n getActiveRunsAsync(\n options?: GetActiveRunsOptions,\n ): Promise<SimulationRunSummary[]> {\n return this.rpcClient.call<SimulationRunSummary[]>(\n RundotGameMessageId.H5_SIMULATION_GET_ACTIVE_RUNS,\n {\n roomId: options?.roomId,\n },\n )\n }\n\n executeScopedRecipeAsync(\n recipeId: string,\n entity: string,\n inputs?: Record<string, unknown>,\n options?: ExecuteScopedRecipeOptions,\n ): Promise<ExecuteScopedRecipeResult> {\n return this.rpcClient.call(\n RundotGameMessageId.H5_SIMULATION_EXECUTE_SCOPED_RECIPE,\n {\n recipeId: recipeId,\n entity: entity,\n inputs: inputs,\n roomId: options?.roomId ?? null,\n options,\n },\n )\n }\n\n getAvailableRecipesAsync(\n options?: GetAvailableRecipesOptions,\n ): Promise<GetAvailableRecipesResult> {\n return this.rpcClient.call(\n RundotGameMessageId.H5_SIMULATION_GET_AVAILABLE_RECIPES,\n {\n roomId: options?.roomId || null,\n includeActorRecipes: options?.includeActorRecipes || false,\n },\n )\n }\n\n getRecipeRequirementsAsync(\n recipe: Recipe,\n ): Promise<RecipeRequirementResult> {\n return this.rpcClient.call<RecipeRequirementResult>(\n RundotGameMessageId.H5_SIMULATION_GET_RECIPE_REQUIREMENTS,\n {\n recipeId: recipe.recipeId,\n nonce: recipe.nonce,\n entity: recipe.entity,\n batchAmount: recipe.batchAmount,\n },\n )\n }\n\n getBatchRecipeRequirementsAsync(\n recipes: Recipe[],\n ): Promise<GetBatchRecipeRequirements> {\n return this.rpcClient.call<GetBatchRecipeRequirements>(\n RundotGameMessageId.H5_SIMULATION_GET_BATCH_RECIPE_REQUIREMENTS,\n {\n recipes,\n },\n )\n }\n\n triggerRecipeChainAsync(\n recipeId: string,\n options?: TriggerRecipeChainOptions,\n ): Promise<ExecuteRecipeResponse> {\n return this.rpcClient.call<ExecuteRecipeResponse>(\n RundotGameMessageId.H5_SIMULATION_TRIGGER_RECIPE_CHAIN,\n {\n triggerRecipeId: recipeId,\n context: options?.context,\n roomId: options?.roomId,\n },\n )\n }\n\n getEntityMetadataAsync(\n entityId: string,\n ): Promise<Record<string, unknown>> {\n return this.rpcClient.call<Record<string, unknown>>(\n RundotGameMessageId.H5_SIMULATION_GET_ENTITY_METADATA,\n {\n entityId,\n },\n )\n }\n\n async resolveFieldValueAsync(\n entityId: string,\n fieldPath: string,\n entity?: string,\n ): Promise<unknown> {\n const response = await this.rpcClient.call<ResolveFieldValueResponse>(\n RundotGameMessageId.H5_SIMULATION_RESOLVE_VALUE,\n {\n entityId,\n fieldPath,\n entity,\n },\n )\n // Extract primitive value from server response wrapper\n return response.value\n }\n\n private handleSimulationUpdate(\n notification: SimulationUpdateNotification,\n ): void {\n if (!notification || !notification.subscriptionId) {\n console.warn('[RUN.game SDK] Received malformed simulation update')\n return\n }\n\n const callback = this.subscriptionCallbacks.get(notification.subscriptionId)\n if (!callback) {\n console.warn(\n '[RUN.game SDK] Received update for unknown subscription:',\n notification.subscriptionId,\n )\n return\n }\n\n try {\n callback(notification.updates)\n } catch (error) {\n console.error('[RUN.game SDK] Error in simulation subscription callback', error)\n }\n }\n\n private ensureValidSubscribeOptions(\n options: unknown,\n ): asserts options is SimulationSubscribeOptions {\n if (typeof options !== 'object' || options === null) {\n throw new Error('Simulation subscribe requires an options object')\n }\n\n const opts = options as Record<string, unknown>\n\n if (typeof opts.onUpdate !== 'function') {\n throw new Error('Simulation subscribe requires an onUpdate callback')\n }\n\n const hasFilter =\n (Array.isArray(opts.entities) && opts.entities.length > 0) ||\n (Array.isArray(opts.tags) && opts.tags.length > 0) ||\n Boolean(opts.activeRuns)\n\n if (!hasFilter) {\n throw new Error(\n 'Simulation subscribe requires at least one filter (entities, tags, activeRuns)',\n )\n }\n }\n}\n","import { RundotGameAPI, SimulationSubscribeOptions } from '../rundot-game-api/types'\nimport { Host } from '../Host'\nimport {\n SimulationApi,\n ExecuteScopedRecipeOptions,\n TriggerRecipeChainOptions,\n GetAvailableRecipesOptions,\n Recipe,\n ResetStateOptions,\n} from './SimulationApi'\n\nexport * from './SimulationApi'\nexport * from './RpcSimulationApi'\n// HttpSimulationApi is intentionally NOT exported here.\n// It depends on Firebase and should only be imported by SandboxHost via direct import.\n// This prevents Firebase from being bundled in production builds.\n\nexport function initializeSimulation(rundotGameApi: RundotGameAPI, host: Host) {\n rundotGameApi.simulation = {\n isEnabled: () => true,\n } as SimulationApi\n\n rundotGameApi.simulation.getConfigAsync = () => {\n return host.simulation.getConfigAsync()\n }\n\n rundotGameApi.simulation.getStateAsync = (roomId) => {\n return host.simulation.getStateAsync(roomId)\n }\n\n rundotGameApi.simulation.executeRecipeAsync = (recipeId, inputs, options) => {\n return host.simulation.executeRecipeAsync(recipeId, inputs, options)\n }\n\n rundotGameApi.simulation.getActiveRunsAsync = () => {\n return host.simulation.getActiveRunsAsync()\n }\n\n rundotGameApi.simulation.collectRecipeAsync = (runId: string) => {\n return host.simulation.collectRecipeAsync(runId)\n }\n\n rundotGameApi.simulation.executeScopedRecipeAsync = (\n recipeId: string,\n entity: string,\n inputs?: Record<string, unknown>,\n options?: ExecuteScopedRecipeOptions,\n ) => {\n return host.simulation.executeScopedRecipeAsync(recipeId, entity, inputs, options)\n }\n\n rundotGameApi.simulation.triggerRecipeChainAsync = (\n recipeId: string,\n options?: TriggerRecipeChainOptions,\n ) => {\n return host.simulation.triggerRecipeChainAsync(recipeId, options)\n }\n\n rundotGameApi.simulation.getAvailableRecipesAsync = async (\n options?: GetAvailableRecipesOptions,\n ) => {\n return host.simulation.getAvailableRecipesAsync(options)\n }\n\n rundotGameApi.simulation.getRecipeRequirementsAsync = (recipe: Recipe) => {\n return host.simulation.getRecipeRequirementsAsync(recipe)\n }\n\n rundotGameApi.simulation.getBatchRecipeRequirementsAsync = (recipes) => {\n return host.simulation.getBatchRecipeRequirementsAsync(recipes)\n }\n\n rundotGameApi.simulation.resolveFieldValueAsync = (\n entityId,\n fieldPath,\n entity,\n ) => {\n return host.simulation.resolveFieldValueAsync(entityId, fieldPath, entity)\n }\n\n rundotGameApi.simulation.getEntityMetadataAsync = (entityId) => {\n return host.simulation.getEntityMetadataAsync(entityId)\n }\n\n rundotGameApi.simulation.getSlotAssignmentsAsync = (containerId) => {\n return host.simulation.getSlotAssignmentsAsync(containerId)\n }\n\n rundotGameApi.simulation.getSlotContainersAsync = () => {\n return host.simulation.getSlotContainersAsync()\n }\n\n rundotGameApi.simulation.assignItemToSlotAsync = (containerId, slotId, itemId) => {\n return host.simulation.assignItemToSlotAsync(containerId, slotId, itemId)\n }\n\n rundotGameApi.simulation.removeItemFromSlotAsync = (containerId, slotId) => {\n return host.simulation.removeItemFromSlotAsync(containerId, slotId)\n }\n\n rundotGameApi.simulation.getAvailableItemsAsync = (containerId, slotId) => {\n return host.simulation.getAvailableItemsAsync(containerId, slotId)\n }\n\n rundotGameApi.simulation.calculatePowerPreviewAsync = (\n containerId: string,\n slotId: string,\n candidateItemId: string,\n ) => {\n return host.simulation.calculatePowerPreviewAsync(\n containerId,\n slotId,\n candidateItemId,\n )\n }\n\n rundotGameApi.simulation.executeBatchOperationsAsync = (\n operations,\n validateOnly,\n ) => {\n return host.simulation.executeBatchOperationsAsync(operations, validateOnly)\n }\n\n rundotGameApi.simulation.validateSlotAssignmentAsync = (\n containerId,\n slotId,\n itemId,\n ) => {\n return host.simulation.validateSlotAssignmentAsync(\n containerId,\n slotId,\n itemId,\n )\n }\n\n // ===== REAL-TIME SUBSCRIPTIONS =====\n rundotGameApi.simulation.subscribeAsync = (options: SimulationSubscribeOptions) => {\n return host.simulation.subscribeAsync(options)\n }\n\n // ===== STATE MANAGEMENT =====\n rundotGameApi.simulation.resetStateAsync = (options?: ResetStateOptions) => {\n return host.simulation.resetStateAsync(options)\n }\n}\n","declare const __SDK_VERSION__: string\nexport const SDK_VERSION = __SDK_VERSION__\n","/**\n * Hash algorithm used for score sealing\n */\nexport const HASH_ALGORITHM_WEB_CRYPTO = 'SHA-256'\nexport const HASH_ALGORITHM_NODE = 'sha256'\n\n/**\n * Compute HMAC-SHA256 hash for score sealing.\n * Hash always includes: score, duration, token\n * Matches server-side hash computation exactly.\n *\n * @param score - The score value\n * @param duration - Duration in seconds\n * @param token - Score token\n * @param sealingNonce - One-time nonce for this submission\n * @param sealingSecret - Secret key for HMAC\n * @returns Hex-encoded hash string\n */\nexport async function computeScoreHash(\n score: number,\n duration: number,\n token: string,\n sealingNonce: string,\n sealingSecret: string,\n): Promise<string> {\n // Build payload: score:value|duration:value|token:value\n const payload = `score:${score}|duration:${duration}|token:${token}`\n const fullPayload = `${payload}|nonce:${sealingNonce}`\n\n // HMAC-SHA256 using Web Crypto API\n const encoder = new TextEncoder()\n const keyData = encoder.encode(sealingSecret)\n const messageData = encoder.encode(fullPayload)\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: HASH_ALGORITHM_WEB_CRYPTO },\n false,\n ['sign'],\n )\n\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData)\n\n // Convert to hex string\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n","import { RpcClient } from '../rpc'\nimport { RundotGameMessageId } from '../RundotGameMessageId'\nimport {\n GetPagedScoresOptions,\n LeaderboardApi,\n PagedScoresResponse,\n GetPodiumScoresOptions,\n PodiumScoresResponse,\n PlayerRankResult,\n PlayerRankOptions,\n ScoreToken,\n SubmitScoreParams,\n SubmitScoreResult,\n} from './LeaderboardApi'\nimport { computeScoreHash } from './utils'\n\nexport class RpcLeaderboardApi implements LeaderboardApi {\n private readonly rpcClient: RpcClient\n /** Cache of score tokens for automatic hash computation */\n private tokenCache: Map<string, ScoreToken> = new Map()\n\n constructor(rpcClient: RpcClient) {\n this.rpcClient = rpcClient\n }\n\n /**\n * Create a score token for submitting a score.\n * Token is cached for automatic hash computation if score sealing is enabled.\n *\n * @param mode - Optional game mode\n * @returns Score token with sealing data if enabled\n */\n async createScoreToken(mode?: string): Promise<ScoreToken> {\n const token = await this.rpcClient.call<ScoreToken>(\n RundotGameMessageId.H5_LEADERBOARD_CREATE_SCORE_TOKEN,\n mode ? { mode } : {},\n )\n\n // Cache token with sealing data for auto-hash computation\n this.tokenCache.set(token.token, token)\n\n return token\n }\n\n /**\n * Submit a score to the leaderboard.\n * Automatically computes hash if score sealing is enabled and token was created via createScoreToken().\n *\n * @param params - Score submission parameters\n * @returns Submission result with acceptance status and rank\n * @throws Error if token not found in cache\n */\n async submitScore(params: SubmitScoreParams): Promise<SubmitScoreResult> {\n let hash: string | undefined\n\n // If token provided, check if sealing is enabled and auto-compute hash\n if (params.token) {\n const cachedToken = this.tokenCache.get(params.token)\n\n if (!cachedToken) {\n throw new Error(\n 'Invalid token: not found in cache. Did you call createScoreToken() first?'\n )\n }\n\n // Auto-compute hash if sealing enabled (token has nonce and secret)\n if (cachedToken.sealingNonce && cachedToken.sealingSecret) {\n hash = await computeScoreHash(\n params.score,\n params.duration,\n params.token,\n cachedToken.sealingNonce,\n cachedToken.sealingSecret,\n )\n }\n\n // Clean up used token from cache\n this.tokenCache.delete(params.token)\n }\n\n // Send to host/server (includes hash if sealing enabled)\n return this.rpcClient.call<SubmitScoreResult>(\n RundotGameMessageId.H5_LEADERBOARD_SUBMIT_SCORE,\n {\n token: params.token,\n score: params.score,\n duration: params.duration,\n mode: params.mode,\n telemetry: params.telemetry,\n metadata: params.metadata,\n hash, // undefined if no sealing, computed if sealing enabled\n },\n )\n }\n\n getPagedScores(options?: GetPagedScoresOptions): Promise<PagedScoresResponse> {\n return this.rpcClient.call<PagedScoresResponse>(\n RundotGameMessageId.H5_LEADERBOARD_GET_PAGED_SCORES,\n options ?? {},\n )\n }\n\n getMyRank(options?: PlayerRankOptions): Promise<PlayerRankResult> {\n return this.rpcClient.call<PlayerRankResult>(\n RundotGameMessageId.H5_LEADERBOARD_GET_MY_RANK,\n options ?? {},\n )\n }\n\n getPodiumScores(options?: GetPodiumScoresOptions): Promise<PodiumScoresResponse> {\n return this.rpcClient.call<PodiumScoresResponse>(\n RundotGameMessageId.H5_LEADERBOARD_GET_PODIUM_SCORES,\n options ?? {},\n )\n }\n}\n","import {\n GetPagedScoresOptions,\n LeaderboardApi,\n LeaderboardEntry,\n PagedScoresResponse,\n GetPodiumScoresOptions,\n PodiumScoresResponse,\n PlayerRankResult,\n PlayerRankOptions,\n ScoreToken,\n SubmitScoreParams,\n SubmitScoreResult,\n} from './LeaderboardApi'\nimport { computeScoreHash } from './utils'\n\ninterface MockScoreToken {\n id: string\n expiresAt: number\n mode: string\n sealingNonce: string | null\n used: boolean\n}\n\nexport class MockLeaderboardApi implements LeaderboardApi {\n private tokens: Map<string, MockScoreToken> = new Map()\n /** Cache of score tokens for automatic hash computation */\n private tokenCache: Map<string, ScoreToken> = new Map()\n private entriesByMode: Map<string, LeaderboardEntry[]> = new Map()\n private tokenCounter = 0\n private enableScoreSealing = false\n private scoreSealingSecret = 'mock-leaderboard-secret-key'\n\n constructor(options?: { enableScoreSealing?: boolean; scoreSealingSecret?: string }) {\n if (options?.enableScoreSealing) {\n this.enableScoreSealing = true\n }\n if (options?.scoreSealingSecret) {\n this.scoreSealingSecret = options.scoreSealingSecret\n }\n }\n\n /**\n * Configure mock leaderboard settings\n *\n * @param options - Configuration options\n */\n configure(options: { enableScoreSealing?: boolean; scoreSealingSecret?: string }): void {\n if (typeof options.enableScoreSealing === 'boolean') {\n this.enableScoreSealing = options.enableScoreSealing\n }\n if (options.scoreSealingSecret) {\n this.scoreSealingSecret = options.scoreSealingSecret\n }\n }\n\n private generateNonce(): string {\n return (\n Math.random().toString(36).slice(2) +\n Math.random().toString(36).slice(2)\n ).slice(0, 64)\n }\n\n private getModeKey(mode: string): string {\n const normalizedMode = mode || 'default'\n return `${normalizedMode}`\n }\n\n private getEntriesForMode(mode: string): LeaderboardEntry[] {\n const key = this.getModeKey(mode)\n if (!this.entriesByMode.has(key)) {\n this.entriesByMode.set(key, [])\n }\n return this.entriesByMode.get(key)!\n }\n\n /**\n * Create a mock score token for testing.\n * Token is cached for automatic hash computation if score sealing is enabled.\n *\n * @param mode - Optional game mode\n * @returns Score token with sealing data if enabled\n */\n async createScoreToken(mode?: string): Promise<ScoreToken> {\n const token = `mock_token_${++this.tokenCounter}`\n const startTime = Date.now()\n const expiresAt = startTime + 3_600_000\n const resolvedMode = mode || 'default'\n const sealingNonce = this.enableScoreSealing ? this.generateNonce() : null\n const sealingSecret = this.enableScoreSealing ? this.scoreSealingSecret : null\n\n this.tokens.set(token, {\n id: token,\n expiresAt,\n mode: resolvedMode,\n sealingNonce,\n used: false,\n })\n\n const result = {\n token,\n startTime,\n expiresAt,\n sealingNonce,\n sealingSecret,\n mode: resolvedMode,\n }\n\n // Cache for auto-hash computation\n this.tokenCache.set(token, result)\n\n return result\n }\n\n /**\n * Submit a mock score to the leaderboard.\n * Automatically computes hash if score sealing is enabled and token was created via createScoreToken().\n *\n * @param params - Score submission parameters\n * @returns Submission result with acceptance status and rank\n * @throws Error if token not found in cache or validation fails\n */\n async submitScore(params: SubmitScoreParams): Promise<SubmitScoreResult> {\n let hash: string | undefined\n\n // Auto-compute hash if token has sealing data\n if (params.token) {\n const cachedToken = this.tokenCache.get(params.token)\n\n if (!cachedToken) {\n throw new Error(\n 'Invalid token: not found in cache. Did you call createScoreToken() first?'\n )\n }\n\n if (cachedToken.sealingNonce && cachedToken.sealingSecret) {\n hash = await computeScoreHash(\n params.score,\n params.duration,\n params.token,\n cachedToken.sealingNonce,\n cachedToken.sealingSecret,\n )\n }\n }\n\n // Simple mode (no token)\n if (!params.token) {\n const mode = params.mode || 'default';\n const submittedAt = Date.now();\n \n const entry: LeaderboardEntry = {\n profileId: `mock_profile`,\n username: 'Mock Player',\n avatarUrl: null,\n score: params.score,\n duration: params.duration,\n submittedAt,\n token: 'simple-mode',\n rank: null,\n zScore: null,\n isAnomaly: false,\n trustScore: 50,\n metadata: params.metadata ?? null,\n isSeed: false,\n };\n \n const modeEntries = this.getEntriesForMode(mode);\n modeEntries.push(entry);\n modeEntries.sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return a.submittedAt - b.submittedAt;\n });\n \n modeEntries.forEach((e, index) => {\n modeEntries[index] = { ...e, rank: index + 1 };\n });\n \n const inserted = modeEntries.find((e) => e.submittedAt === submittedAt);\n return {\n accepted: true,\n rank: inserted?.rank ?? null,\n };\n }\n \n // Token mode\n const scoreToken = this.tokens.get(params.token);\n if (!scoreToken) {\n throw new Error('Invalid score token');\n }\n\n if (scoreToken.expiresAt < Date.now()) {\n throw new Error('Invalid or expired score token');\n }\n\n if (scoreToken.used) {\n throw new Error('Score token already used');\n }\n\n if (params.mode && params.mode !== scoreToken.mode) {\n throw new Error('Submission mode does not match token mode');\n }\n\n // Verify hash if sealing enabled\n if (scoreToken.sealingNonce && !hash) {\n throw new Error('Score hash required when score sealing is enabled');\n }\n\n const submittedAt = Date.now();\n const entry: LeaderboardEntry = {\n profileId: `mock_profile`,\n username: 'Mock Player',\n avatarUrl: null,\n score: params.score,\n duration: params.duration,\n submittedAt,\n token: params.token,\n rank: null,\n zScore: null,\n isAnomaly: false,\n trustScore: 50,\n metadata: params.metadata ?? null,\n isSeed: false,\n };\n\n const modeEntries = this.getEntriesForMode(scoreToken.mode);\n modeEntries.push(entry);\n modeEntries.sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return a.submittedAt - b.submittedAt;\n });\n\n modeEntries.forEach((e, index) => {\n modeEntries[index] = { ...e, rank: index + 1 };\n });\n\n scoreToken.used = true;\n scoreToken.sealingNonce = null;\n\n // Clean up cache\n this.tokenCache.delete(params.token)\n\n const inserted = modeEntries.find((e) => e.token === params.token && e.submittedAt === submittedAt);\n\n return {\n accepted: true,\n rank: inserted?.rank ?? null,\n };\n }\n\n async getPagedScores(options?: GetPagedScoresOptions): Promise<PagedScoresResponse> {\n const limit = options?.limit ?? 10\n const mode = options?.mode ?? 'default'\n const modeEntries = [...this.getEntriesForMode(mode)]\n\n const entries = modeEntries.slice(0, limit).map((entry) => ({\n ...entry,\n }))\n\n return {\n variant: 'standard',\n entries,\n totalEntries: modeEntries.length,\n nextCursor: null,\n playerRank: null,\n periodInstance: options?.period ?? 'alltime',\n }\n }\n\n async getMyRank(_options?: PlayerRankOptions): Promise<PlayerRankResult> {\n const mode = _options?.mode ?? 'default'\n const modeEntries = this.getEntriesForMode(mode)\n const playerEntry = modeEntries[0] ?? null\n\n return {\n rank: playerEntry?.rank ?? null,\n score: playerEntry?.score,\n totalPlayers: modeEntries.length,\n percentile: playerEntry\n ? Math.max(0, 1 - ((playerEntry.rank ?? 1) - 1) / Math.max(modeEntries.length, 1))\n : undefined,\n trustScore: 50,\n periodInstance: _options?.period ?? 'alltime',\n }\n }\n\n async getPodiumScores(options?: GetPodiumScoresOptions): Promise<PodiumScoresResponse> {\n const mode = options?.mode ?? 'default'\n const modeEntries = [...this.getEntriesForMode(mode)]\n\n const topCount = Math.max(1, Math.min(options?.topCount ?? 3, 10))\n const aheadCount = Math.max(0, Math.min(options?.contextAhead ?? 4, 10))\n const behindCount = Math.max(0, Math.min(options?.contextBehind ?? 2, 10))\n\n const topEntries = modeEntries.slice(0, topCount)\n const playerEntry = modeEntries[0] ?? null\n const totalEntries = modeEntries.length\n\n let playerRank = playerEntry?.rank ?? null\n let beforePlayer: LeaderboardEntry[] = []\n let afterPlayer: LeaderboardEntry[] = []\n let totalBefore = playerRank ? playerRank - 1 : 0\n let totalAfter = playerRank ? Math.max(totalEntries - playerRank, 0) : 0\n let omittedBefore = totalBefore\n let omittedAfter = totalAfter\n\n if (playerRank && playerRank > 0) {\n const beforeStart = Math.max(playerRank - aheadCount - 1, 0)\n beforePlayer = modeEntries.slice(beforeStart, playerRank - 1)\n const afterEnd = Math.min(playerRank + behindCount, totalEntries)\n afterPlayer = modeEntries.slice(playerRank, afterEnd)\n\n const shownTopAhead = topEntries.filter((entry) => (entry.rank ?? 0) > 0 && (entry.rank ?? 0) < playerRank!).length\n omittedBefore = Math.max(totalBefore - (beforePlayer.length + shownTopAhead), 0)\n omittedAfter = Math.max(totalAfter - afterPlayer.length, 0)\n }\n\n return {\n variant: 'highlight',\n entries: topEntries,\n totalEntries,\n nextCursor: null,\n playerRank: playerRank ?? null,\n periodInstance: options?.period ?? 'alltime',\n context: {\n topEntries,\n beforePlayer,\n playerEntry: playerEntry ?? null,\n afterPlayer,\n totalBefore,\n totalAfter,\n omittedBefore,\n omittedAfter,\n },\n }\n }\n}\n","import { Host } from '../Host'\nimport { RundotGameAPI } from '../rundot-game-api/types'\n\nexport * from './LeaderboardApi'\nexport { RpcLeaderboardApi } from './RpcLeaderboardApi'\nexport { MockLeaderboardApi } from './MockLeaderboardApi'\n// HttpLeaderboardApi is intentionally NOT exported here.\n// It depends on Firebase (via callRemoteFunction) and should only be imported by SandboxHost.\n// This prevents Firebase from being bundled in production builds.\nexport * from './utils'\n\nexport function initializeLeaderboard(rundotGameApiInstance: RundotGameAPI, host: Host) {\n rundotGameApiInstance.leaderboard = host.leaderboard\n}\n","/**\n * RPC-backed UGC API implementation for RemoteHost\n *\n * All operations are forwarded to the React Native host via RPC messages.\n */\nimport { RpcClient } from '../rpc'\nimport { RundotGameMessageId } from '../RundotGameMessageId'\nimport {\n UgcApi,\n UgcEntry,\n UgcCreateParams,\n UgcUpdateParams,\n UgcListParams,\n UgcListResponse,\n UgcBrowseParams,\n UgcBrowseResponse,\n UgcReportParams,\n UgcCountParams,\n} from './UgcApi'\n\nexport class RpcUgcApi implements UgcApi {\n private readonly rpcClient: RpcClient\n\n constructor(rpcClient: RpcClient) {\n this.rpcClient = rpcClient\n }\n\n async create(params: UgcCreateParams): Promise<UgcEntry> {\n return this.rpcClient.call<UgcEntry>(RundotGameMessageId.H5_UGC_CREATE, params)\n }\n\n async update(params: UgcUpdateParams): Promise<UgcEntry> {\n return this.rpcClient.call<UgcEntry>(RundotGameMessageId.H5_UGC_UPDATE, params)\n }\n\n async delete(id: string): Promise<void> {\n await this.rpcClient.call<void>(RundotGameMessageId.H5_UGC_DELETE, { id })\n }\n\n async get(id: string): Promise<UgcEntry | null> {\n return this.rpcClient.call<UgcEntry | null>(RundotGameMessageId.H5_UGC_GET, { id })\n }\n\n async listMine(params?: UgcListParams): Promise<UgcListResponse> {\n return this.rpcClient.call<UgcListResponse>(\n RundotGameMessageId.H5_UGC_LIST_MINE,\n params ?? {},\n )\n }\n\n async browse(params?: UgcBrowseParams): Promise<UgcBrowseResponse> {\n return this.rpcClient.call<UgcBrowseResponse>(\n RundotGameMessageId.H5_UGC_BROWSE,\n params ?? {},\n )\n }\n\n // Phase 2: Engagement methods\n\n async like(id: string): Promise<{ likeCount: number }> {\n return this.rpcClient.call<{ likeCount: number }>(\n RundotGameMessageId.H5_UGC_LIKE,\n { id },\n )\n }\n\n async unlike(id: string): Promise<{ likeCount: number }> {\n return this.rpcClient.call<{ likeCount: number }>(\n RundotGameMessageId.H5_UGC_UNLIKE,\n { id },\n )\n }\n\n async recordUse(id: string): Promise<{ useCount: number }> {\n return this.rpcClient.call<{ useCount: number }>(\n RundotGameMessageId.H5_UGC_RECORD_USE,\n { id },\n )\n }\n\n async report(params: UgcReportParams): Promise<void> {\n await this.rpcClient.call<void>(RundotGameMessageId.H5_UGC_REPORT, params)\n }\n\n async count(params?: UgcCountParams): Promise<{ count: number }> {\n return this.rpcClient.call<{ count: number }>(\n RundotGameMessageId.H5_UGC_COUNT,\n params ?? {},\n )\n }\n}\n","/**\n * Mock UGC API implementation\n *\n * Returns empty results for reads and throws errors for writes.\n * UGC requires a backend connection to function properly.\n */\nimport {\n UgcApi,\n UgcEntry,\n UgcCreateParams,\n UgcUpdateParams,\n UgcListParams,\n UgcListResponse,\n UgcBrowseParams,\n UgcBrowseResponse,\n UgcReportParams,\n UgcCountParams,\n} from './UgcApi'\n\nexport class MockUgcApi implements UgcApi {\n async create(_params: UgcCreateParams): Promise<UgcEntry> {\n console.warn('[Venus SDK] UGC API not available in mock mode')\n throw new Error('UGC API requires backend connection')\n }\n\n async update(_params: UgcUpdateParams): Promise<UgcEntry> {\n console.warn('[Venus SDK] UGC API not available in mock mode')\n throw new Error('UGC API requires backend connection')\n }\n\n async delete(_id: string): Promise<void> {\n console.warn('[Venus SDK] UGC API not available in mock mode')\n throw new Error('UGC API requires backend connection')\n }\n\n async get(_id: string): Promise<UgcEntry | null> {\n return null\n }\n\n async listMine(_params?: UgcListParams): Promise<UgcListResponse> {\n return { entries: [], nextCursor: undefined }\n }\n\n async browse(_params?: UgcBrowseParams): Promise<UgcBrowseResponse> {\n return { entries: [], nextCursor: undefined }\n }\n\n // Phase 2: Engagement methods\n\n async like(_id: string): Promise<{ likeCount: number }> {\n console.warn('[Venus SDK] UGC API not available in mock mode')\n throw new Error('UGC API requires backend connection')\n }\n\n async unlike(_id: string): Promise<{ likeCount: number }> {\n console.warn('[Venus SDK] UGC API not available in mock mode')\n throw new Error('UGC API requires backend connection')\n }\n\n async recordUse(_id: string): Promise<{ useCount: number }> {\n console.warn('[Venus SDK] UGC API not available in mock mode')\n throw new Error('UGC API requires backend connection')\n }\n\n async report(_params: UgcReportParams): Promise<void> {\n console.warn('[Venus SDK] UGC API not available in mock mode')\n throw new Error('UGC API requires backend connection')\n }\n\n async count(_params?: UgcCountParams): Promise<{ count: number }> {\n return { count: 0 }\n }\n}\n","import { Host } from '../Host'\nimport { RundotGameAPI } from '../rundot-game-api/types'\n\nexport * from './UgcApi'\nexport { RpcUgcApi } from './RpcUgcApi'\nexport { MockUgcApi } from './MockUgcApi'\n// HttpUgcApi is intentionally NOT exported here.\n// It depends on Firebase (via callRemoteFunction) and should only be imported by SandboxHost.\n// This prevents Firebase from being bundled in production builds.\n\nexport function initializeUgc(rundotGameApiInstance: RundotGameAPI, host: Host): void {\n rundotGameApiInstance.ugc = host.ugc\n}\n","import {\n QRCodeResult,\n ShareClickData,\n ShareLinkResult,\n SocialApi,\n SocialQRCodeOptions,\n} from './SocialApi';\n\nconst MOCK_QR_CODE =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';\n\nconst MOCK_SHARE_LINK_ID = 'mock-share-id';\n\nexport class MockSocialApi implements SocialApi {\n async shareLinkAsync(options: {\n shareParams: Record<string, string>;\n }): Promise<ShareLinkResult> {\n const shareUrl = this.createMockUrl(options.shareParams);\n\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n try {\n await navigator.clipboard.writeText(shareUrl);\n console.log('[RUN.game SDK] (mock) Copied share URL to clipboard');\n } catch (error) {\n console.warn(\n '[RUN.game SDK] (mock) Failed to copy share URL to clipboard',\n error,\n );\n }\n }\n\n return { shareUrl, shareLinkId: MOCK_SHARE_LINK_ID };\n }\n\n async createQRCodeAsync(options: {\n shareParams: Record<string, string>;\n qrOptions?: SocialQRCodeOptions;\n }): Promise<QRCodeResult> {\n const shareUrl = this.createMockUrl(options.shareParams);\n\n return {\n shareUrl,\n qrCode: MOCK_QR_CODE,\n shareLinkId: MOCK_SHARE_LINK_ID,\n };\n }\n\n async addShareClickDataAsync(options: {\n shareLinkId: string;\n metadata: Record<string, string>;\n }): Promise<void> {\n console.log('[RUN.game SDK] (mock) addShareClickDataAsync:', options);\n }\n\n async getShareClicksAsync(options: {\n shareLinkId: string;\n }): Promise<{ clicks: ShareClickData[]; truncated: boolean }> {\n console.log('[RUN.game SDK] (mock) getShareClicksAsync:', options);\n return { clicks: [], truncated: false };\n }\n\n async getMyShareClickDataAsync(options: {\n shareLinkId: string;\n }): Promise<ShareClickData | null> {\n console.log('[RUN.game SDK] (mock) getMyShareClickDataAsync:', options);\n return null;\n }\n\n private createMockUrl(shareParams: Record<string, string>): string {\n const params = new URLSearchParams(shareParams);\n console.log('Mocking Social API share link with params:', params);\n console.warn('Reminder that share params are stored online and so when mocking the url, the mock url is just a template')\n console.warn('The actual share url will look something like this: https://mock-share-url.com/97dt/mock-share-id')\n return `https://mock-share-url.com/97dt/mock-share-id`;\n }\n}\n","import { RpcClient } from '../rpc';\nimport { RundotGameMessageId } from '../RundotGameMessageId';\nimport {\n QRCodeResult,\n ShareClickData,\n ShareLinkResult,\n ShareMetadata,\n SocialApi,\n SocialQRCodeOptions,\n} from './SocialApi';\n\nexport class RpcSocialApi implements SocialApi {\n constructor(private readonly rpcClient: RpcClient) {}\n\n async shareLinkAsync(options: {\n shareParams: Record<string, string>;\n metadata?: ShareMetadata;\n }): Promise<ShareLinkResult> {\n const result = (await this.rpcClient.call(RundotGameMessageId.SHARE_LINK, {\n shareParams: options.shareParams,\n metadata: options.metadata ?? {},\n })) as { shareUrl: string; shareLinkId: string };\n\n return {\n shareUrl: result.shareUrl,\n shareLinkId: result.shareLinkId,\n };\n }\n\n async createQRCodeAsync(options: {\n shareParams: Record<string, string>;\n metadata?: ShareMetadata;\n qrOptions?: SocialQRCodeOptions;\n }): Promise<QRCodeResult> {\n const result = (await this.rpcClient.call(\n RundotGameMessageId.CREATE_SHARE_QRCODE,\n {\n shareParams: options.shareParams,\n metadata: options.metadata ?? {},\n qrOptions: options.qrOptions ?? {},\n },\n )) as { shareUrl: string; qrCode: string; shareLinkId: string };\n\n return {\n shareUrl: result.shareUrl,\n qrCode: result.qrCode,\n shareLinkId: result.shareLinkId,\n };\n }\n\n async addShareClickDataAsync(options: {\n shareLinkId: string;\n metadata: Record<string, string>;\n }): Promise<void> {\n await this.rpcClient.call(RundotGameMessageId.SHARE_ADD_CLICK_DATA, {\n shareLinkId: options.shareLinkId,\n metadata: options.metadata,\n });\n }\n\n async getShareClicksAsync(options: {\n shareLinkId: string;\n }): Promise<{ clicks: ShareClickData[]; truncated: boolean }> {\n const result = (await this.rpcClient.call(\n RundotGameMessageId.SHARE_GET_CLICKS,\n { shareLinkId: options.shareLinkId },\n )) as { clicks: ShareClickData[]; truncated: boolean };\n\n return result;\n }\n\n async getMyShareClickDataAsync(options: {\n shareLinkId: string;\n }): Promise<ShareClickData | null> {\n const result = (await this.rpcClient.call(\n RundotGameMessageId.SHARE_GET_MY_CLICK_DATA,\n { shareLinkId: options.shareLinkId },\n )) as ShareClickData | null;\n\n return result;\n }\n}\n","import {\n OnNotificationCallback,\n OnRequestCallback,\n OnResponseCallback,\n RpcNotification,\n RpcRequest,\n RpcResponse,\n RpcTransport,\n Subscription,\n} from './rpc'\nimport { RundotGameMessageId } from './RundotGameMessageId'\n\nexport interface RundotGameMessage {\n type: string\n direction: string\n data?: {\n /**\n * Internal RPC correlation ID for request/response matching.\n *\n * ⚠️ WIRE PROTOCOL STABILITY WARNING ⚠️\n * This field name is part of the wire protocol between the SDK (H5 games) and the\n * host app (venus client). Both sides MUST agree on this field name.\n *\n * DO NOT RENAME THIS FIELD without coordinating a synchronized release of:\n * 1. venus-sdk (this file)\n * 2. venus/client H5MessageBus.ts\n *\n * Renaming breaks RPC - responses will not correlate and all API calls will timeout.\n */\n requestId?: string\n success?: boolean\n\n //NOTE(Zee): Some things send 'value' others send 'data'\n value?: any\n data?: any\n\n error?: string\n\n script?: string\n }\n instanceId: string\n timestamp: number\n}\n\ndeclare global {\n interface Window {\n _rundotGameInitState?: {\n poolId: string\n apiInjected: boolean\n gameInitialized: boolean\n }\n ReactNativeWebView?: {\n postMessage(message: string): void\n }\n rundotGame: {\n _config: {\n locale: string\n instanceId: string\n context?: any\n profile?: {\n id?: string\n username?: string\n name?: string\n displayName?: string\n avatarUrl?: string | null\n isAnonymous?: boolean\n }\n environment: {\n browserInfo?: {\n language: string\n }\n }\n _handlers: Record<string, any>\n }\n profile?: {\n id?: string\n username?: string\n avatarUrl?: string | null\n name?: string\n displayName?: string\n isAnonymous?: boolean\n } | null\n _fetchFromCdn: (url: string) => Promise<string>\n }\n }\n}\n\nexport type OnRundotGameMessageCallback = (message: RundotGameMessage) => void\n\nexport class RundotGameTransport implements RpcTransport {\n private readonly messageHandler: (event: MessageEvent) => void\n\n private readonly onNotificationCallbacks: OnNotificationCallback[] = []\n private readonly onNotificationCallbacksToRemove: OnNotificationCallback[] =\n []\n\n private readonly onRundotGameMessageCallbacks: OnRundotGameMessageCallback[] = []\n private readonly onResponseCallbacks: OnResponseCallback[] = []\n private readonly onResponseCallbacksToRemove: OnResponseCallback[] = []\n\n private _instanceId: string | null = null\n private isStarted: boolean = false\n private isProcessingMessage: boolean = false\n\n constructor() {\n this.messageHandler = async (event) => {\n this.isProcessingMessage = true\n\n let message: RundotGameMessage\n if (typeof event.data === 'string') {\n //this.log(`Message is a string. Parsing...`)\n message = JSON.parse(event.data)\n } else {\n message = event.data as RundotGameMessage\n }\n\n if (!message) {\n this.logInfo('No message found. Ignoring message...')\n return\n }\n\n //this.logInfo(`message received:\\n${JSON.stringify(message, null, 2)}`)\n\n this.notifyRundotGameMessageReceived(message)\n\n if (\n message.type === RundotGameMessageId.PAUSE ||\n message.type === RundotGameMessageId.RESUME ||\n message.type === RundotGameMessageId.AWAKE ||\n message.type === RundotGameMessageId.SLEEP ||\n message.type === RundotGameMessageId.QUIT\n ) {\n const notification: RpcNotification = {\n type: 'rpc-notification',\n id: message.type,\n payload: message.data,\n }\n this.handleNotification(notification)\n\n // NOTE(Zee): This early return is dangerous here. we have to make sure isProcessingMessage is set to false!\n this.isProcessingMessage = false\n return\n }\n\n const messageData = message.data\n if (!messageData) {\n this.logWarn('No data found. Ignoring message...')\n this.isProcessingMessage = false\n return\n }\n\n if (message.type === RundotGameMessageId.H5_SIMULATION_UPDATE) {\n const notification: RpcNotification = {\n type: 'rpc-notification',\n id: message.type,\n payload: message.data,\n }\n this.handleNotification(notification)\n this.isProcessingMessage = false\n return\n }\n\n const requestId = messageData.requestId\n if (!requestId) {\n this.logWarn('No requestId. Ignoring message...')\n this.isProcessingMessage = false\n return\n }\n\n if (message.type !== RundotGameMessageId.H5_RESPONSE) {\n this.logWarn(`Ignoring unknown message type: ${message.type}`)\n this.isProcessingMessage = false\n return\n }\n\n const success = messageData.success\n let error = undefined\n if (!success) {\n error = {\n message: messageData.error || 'Unknown error',\n }\n }\n\n // Result can be either inside value or data\n let result = messageData.value\n if (result === undefined) {\n result = messageData.data\n }\n\n const response: RpcResponse = {\n type: 'rpc-response',\n id: requestId,\n result: result,\n method: message.type,\n error: error,\n }\n\n await this.handleResponse(response)\n this.isProcessingMessage = false\n }\n }\n onNotification(callback: OnNotificationCallback): Subscription {\n this.onNotificationCallbacks.push(callback)\n return {\n unsubscribe: () => {\n if (this.isProcessingMessage) {\n this.onNotificationCallbacks.push(callback)\n } else {\n this.removeOnNotificationCallback(callback)\n }\n },\n }\n }\n\n onRequest(callback: OnRequestCallback): Subscription {\n throw new Error('Method not implemented.')\n }\n\n onResponse(callback: OnResponseCallback): Subscription {\n this.onResponseCallbacks.push(callback)\n return {\n unsubscribe: () => {\n if (this.isProcessingMessage) {\n this.onResponseCallbacksToRemove.push(callback)\n } else {\n this.removeOnResponseCallback(callback)\n }\n },\n }\n }\n\n public get instanceId(): string | null {\n return this._instanceId\n }\n\n public set instanceId(instanceId: string) {\n this._instanceId = instanceId\n }\n\n sendRequest(request: RpcRequest): void {\n const instanceId = this.instanceId || 'unknown'\n const method = request.method\n const args =\n request.args && typeof request.args === 'object'\n ? (request.args as Record<string, unknown>)\n : {}\n const message: RundotGameMessage = {\n type: method,\n direction: 'H5_TO_APP',\n data: {\n ...args,\n requestId: request.id,\n },\n instanceId: instanceId,\n timestamp: Date.now(),\n }\n this.sendRundotGameMessage(message)\n }\n\n sendRundotGameMessage(message: RundotGameMessage): void {\n const messageAsString = JSON.stringify(message, null, 2)\n //this.logInfo(`Sending message:\\n${messageAsString}`)\n const reactNativeWebView = window.ReactNativeWebView\n if (reactNativeWebView) {\n reactNativeWebView.postMessage(messageAsString)\n } else {\n window.parent.postMessage(messageAsString, '*')\n }\n }\n\n sendResponse(response: RpcResponse): void {\n throw new Error('Method not implemented.')\n }\n\n start() {\n if (this.isStarted) {\n return\n }\n this.isStarted = true\n window.addEventListener('message', this.messageHandler, true)\n this.logInfo(`Started`)\n }\n\n stop() {\n if (!this.isStarted) {\n return\n }\n this.isStarted = false\n window.removeEventListener('message', this.messageHandler)\n this.logInfo(`Stopped`)\n }\n\n private handleNotification(notification: RpcNotification): void {\n //this.logInfo('Notification received: ', notification.id)\n for (const callback of this.onNotificationCallbacks) {\n callback(notification)\n }\n\n for (const callback of this.onNotificationCallbacksToRemove) {\n this.removeOnNotificationCallback(callback)\n }\n this.onNotificationCallbacksToRemove.length = 0\n }\n\n private async handleResponse(response: RpcResponse): Promise<void> {\n for (const callback of this.onResponseCallbacks) {\n const consumed = await callback(response)\n if (consumed) {\n break\n }\n }\n\n for (const callback of this.onResponseCallbacksToRemove) {\n this.removeOnResponseCallback(callback)\n }\n this.onResponseCallbacksToRemove.length = 0\n }\n\n private removeOnResponseCallback(callback: OnResponseCallback): void {\n this.onResponseCallbacks.splice(\n this.onResponseCallbacks.indexOf(callback),\n 1,\n )\n }\n\n private removeOnNotificationCallback(callback: OnNotificationCallback): void {\n this.onNotificationCallbacks.splice(\n this.onNotificationCallbacks.indexOf(callback),\n 1,\n )\n }\n\n private logInfo(message: string, ...params: any[]) {\n console.log(`[RUN.game Transport] ${message}`, ...params)\n }\n\n private logWarn(message: string, ...params: any[]) {\n console.warn(`[RUN.game Transport] ${message}`, ...params)\n }\n\n onRundotGameMessage(callback: OnRundotGameMessageCallback): Subscription {\n this.onRundotGameMessageCallbacks.push(callback)\n return {\n unsubscribe: () => {\n this.onRundotGameMessageCallbacks.splice(\n this.onRundotGameMessageCallbacks.indexOf(callback),\n 1,\n )\n },\n }\n }\n\n private notifyRundotGameMessageReceived(message: RundotGameMessage) {\n for (const callback of this.onRundotGameMessageCallbacks) {\n callback(message)\n }\n }\n}\n","import {\n Host,\n InitializationContext,\n SafeArea,\n InitializationOptions,\n} from './Host.ts'\nimport { RpcClient } from './rpc'\nimport { RundotGameTransport } from './RundotGameTransport.ts'\nimport { AnalyticsApi, RpcAnalyticsApi } from './analytics'\nimport { AdsApi, RpcAdsApi } from './ads'\nimport { RpcStorageApi, StorageApi } from './storage'\nimport { RundotGameMessageId } from './RundotGameMessageId.ts'\nimport { Avatar3dApi, RpcAvatarApi } from './avatar3d'\nimport { RundotGameAPI } from './rundot-game-api/types.ts'\nimport { NavigationApi, RpcNavigationApi } from './navigation'\nimport { NotificationsApi } from './notifications'\nimport { RpcNotificationsApi } from './notifications/RpcNotificationsApi'\nimport { PopupsApi, RpcPopupsApi } from './popups'\nimport { HostProfileApi, ProfileApi } from './profile'\nimport { SystemApi, HostSystemApi } from './system'\nimport { HostDeviceApi, DeviceInfo } from './device'\nimport { HostEnvironmentApi, EnvironmentInfo } from './environment'\nimport { CdnApi, HostCdnApi } from './cdn'\nimport { HostTimeApi, TimeApi } from './time'\nimport { AiApi, RpcAiApi } from './ai'\nimport { HapticsApi, RpcHapticsApi } from './haptics'\nimport { FeaturesApi, RpcFeaturesApi } from './features'\nimport { LifecycleApi, RpcLifecycleApi } from './lifecycles'\nimport { RpcSimulationApi, SimulationApi } from './simulation'\nimport { RoomsApi, initializeRoomsApi } from './rooms'\nimport { RpcRoomsApi } from './rooms/RpcRoomsApi'\nimport { LoggingApi, RpcLoggingApi } from './logging'\nimport { IapApi, RpcIapApi } from './iap'\nimport { RpcSharedAssetsApi } from './shared-assets'\nimport { LeaderboardApi, RpcLeaderboardApi } from './leaderboard'\nimport { UgcApi, RpcUgcApi } from './ugc'\nimport { PreloaderApi, RpcPreloaderApi } from './game-preloader'\nimport { SocialApi } from './social/SocialApi'\nimport { RpcSocialApi } from './social/RpcSocialApi'\nimport { ImageGenApi, RpcImageGenApi } from './imageGen'\nimport { EntitlementApi, RpcEntitlementApi } from './entitlements'\nimport { ShopApi, RpcShopApi } from './shop'\nimport { AccessGateApi, RpcAccessGateApi, applyAccessGates } from './access-gate'\nimport type { MultiplayerApi } from './mp/client/MultiplayerApi'\nimport { WsMultiplayerApi } from './mp/client/WsMultiplayerApi'\n\nexport class RemoteHost implements Host {\n readonly ads: AdsApi\n readonly analytics: AnalyticsApi\n readonly deviceCache: StorageApi\n readonly appStorage: StorageApi\n readonly globalStorage: StorageApi\n readonly avatar3d: Avatar3dApi\n readonly navigation: NavigationApi\n readonly notifications: NotificationsApi\n readonly popups: PopupsApi\n readonly profile: ProfileApi\n readonly system: SystemApi\n readonly cdn: CdnApi\n readonly time: TimeApi\n ai: AiApi\n readonly haptics: HapticsApi\n readonly features: FeaturesApi\n readonly lifecycle: LifecycleApi\n simulation: SimulationApi\n rooms: RoomsApi\n readonly logging: LoggingApi\n readonly iap: IapApi\n readonly leaderboard: LeaderboardApi\n ugc: UgcApi\n readonly preloader: PreloaderApi\n readonly social: SocialApi\n imageGen: ImageGenApi\n readonly entitlements: EntitlementApi\n readonly shop: ShopApi\n readonly accessGate: AccessGateApi\n readonly multiplayer: MultiplayerApi\n\n context?: InitializationContext\n\n get isInitialized() {\n return this._isInitialized\n }\n\n private readonly rundotGameApi: RundotGameAPI\n private readonly rpcClient: RpcClient\n private _isInitialized: boolean = false\n private _roomServerUrl: string = ''\n\n constructor(rundotGameApi: RundotGameAPI) {\n this.rundotGameApi = rundotGameApi\n const rpcClient = new RpcClient()\n this.rpcClient = rpcClient\n\n this.ads = new RpcAdsApi(rpcClient)\n this.analytics = new RpcAnalyticsApi(rpcClient)\n this.deviceCache = new RpcStorageApi(rpcClient, {\n clear: RundotGameMessageId.DEVICE_CACHE_CLEAR,\n getItem: RundotGameMessageId.DEVICE_CACHE_GET_ITEM,\n getKey: RundotGameMessageId.DEVICE_CACHE_KEY,\n length: RundotGameMessageId.DEVICE_CACHE_LENGTH,\n removeItem: RundotGameMessageId.DEVICE_CACHE_REMOVE_ITEM,\n setItem: RundotGameMessageId.DEVICE_CACHE_SET_ITEM,\n })\n this.appStorage = new RpcStorageApi(rpcClient, {\n clear: RundotGameMessageId.APP_STORAGE_CLEAR,\n getItem: RundotGameMessageId.APP_STORAGE_GET_ITEM,\n getKey: RundotGameMessageId.APP_STORAGE_KEY,\n length: RundotGameMessageId.APP_STORAGE_LENGTH,\n removeItem: RundotGameMessageId.APP_STORAGE_REMOVE_ITEM,\n setItem: RundotGameMessageId.APP_STORAGE_SET_ITEM,\n getAllItems: RundotGameMessageId.APP_STORAGE_GET_ALL_ITEMS,\n setMultipleItems: RundotGameMessageId.APP_STORAGE_SET_ITEM,\n removeMultipleItems: RundotGameMessageId.APP_STORAGE_REMOVE_ITEM,\n })\n this.globalStorage = new RpcStorageApi(rpcClient, {\n clear: RundotGameMessageId.GLOBAL_STORAGE_CLEAR,\n getItem: RundotGameMessageId.GLOBAL_STORAGE_GET_ITEM,\n getKey: RundotGameMessageId.GLOBAL_STORAGE_KEY,\n length: RundotGameMessageId.GLOBAL_STORAGE_LENGTH,\n removeItem: RundotGameMessageId.GLOBAL_STORAGE_REMOVE_ITEM,\n setItem: RundotGameMessageId.GLOBAL_STORAGE_SET_ITEM,\n getAllItems: RundotGameMessageId.GLOBAL_STORAGE_GET_ALL_ITEMS,\n setMultipleItems: RundotGameMessageId.GLOBAL_STORAGE_SET_MULTIPLE_ITEMS,\n removeMultipleItems: RundotGameMessageId.GLOBAL_STORAGE_REMOVE_MULTIPLE_ITEMS,\n })\n\n this.avatar3d = new RpcAvatarApi(rpcClient, rundotGameApi)\n this.navigation = new RpcNavigationApi(rpcClient, rundotGameApi)\n this.notifications = new RpcNotificationsApi(rpcClient)\n this.popups = new RpcPopupsApi(rpcClient)\n this.profile = new HostProfileApi(rundotGameApi)\n\n // Create device and environment APIs and combine into system namespace\n const deviceApi = new HostDeviceApi(rundotGameApi)\n const environmentApi = new HostEnvironmentApi(rundotGameApi)\n this.system = new HostSystemApi(deviceApi, environmentApi, rundotGameApi)\n\n this.cdn = new HostCdnApi()\n this.time = new HostTimeApi(rpcClient, rundotGameApi)\n this.ai = new RpcAiApi(rpcClient)\n this.haptics = new RpcHapticsApi(rpcClient)\n this.features = new RpcFeaturesApi(rpcClient)\n this.lifecycle = new RpcLifecycleApi(rpcClient)\n this.simulation = new RpcSimulationApi(rpcClient)\n this.rooms = new RpcRoomsApi(rpcClient)\n this.logging = new RpcLoggingApi(this, rpcClient)\n this.iap = new RpcIapApi(rpcClient)\n this.leaderboard = new RpcLeaderboardApi(rpcClient)\n this.ugc = new RpcUgcApi(rpcClient)\n this.preloader = new RpcPreloaderApi(rpcClient)\n this.social = new RpcSocialApi(rpcClient)\n this.imageGen = new RpcImageGenApi(rpcClient)\n this.entitlements = new RpcEntitlementApi(rpcClient)\n this.shop = new RpcShopApi(rpcClient)\n rundotGameApi.isMock = () => false\n this.rundotGameApi.sharedAssets = new RpcSharedAssetsApi(rpcClient, rundotGameApi)\n\n initializeRoomsApi(this.rundotGameApi, this)\n\n this.accessGate = new RpcAccessGateApi(rpcClient, rundotGameApi)\n applyAccessGates(this)\n\n // Multiplayer API — gets join ticket via RPC to native host\n // serverUrl and gameId are resolved lazily after initialize() populates them from InitResponse\n this.multiplayer = new WsMultiplayerApi({\n serverUrl: () => this._roomServerUrl,\n getJoinTicket: async (req) => {\n const result = await rpcClient.call<{ ticket: string }>(\n RundotGameMessageId.H5_REQUEST_JOIN_TICKET,\n req,\n )\n return result.ticket\n },\n })\n }\n\n async initialize(\n options?: InitializationOptions,\n ): Promise<InitializationContext> {\n this.log('Initializing Remote Host...')\n\n const transport = new RundotGameTransport()\n transport.start()\n this.rpcClient.start(transport)\n\n // Set up room notification routing in RpcRoomsApi\n const roomsApi = this.rooms as RpcRoomsApi\n roomsApi.setupNotifications(transport)\n\n const response = await this.rpcClient.call<InitResponse>(\n RundotGameMessageId.INIT_SDK,\n {},\n -1,\n )\n\n transport.instanceId = response.instanceId\n this._roomServerUrl = response.roomServerUrl ?? ''\n this.log(`Remote Host Initialized with id: ${transport.instanceId}`)\n\n // Store data on RundotGameAPI instance (not global window.rundotGameApi)\n // Profile, device, and environment are all required in InitResponse\n const profile = response.profile\n const sanitizedProfile = {\n id: profile.id,\n username: profile.username,\n avatarUrl: profile.avatarUrl ?? null,\n isAnonymous: Boolean(profile.isAnonymous),\n }\n this.rundotGameApi._profileData = sanitizedProfile\n this.rundotGameApi._deviceData = response.device\n this.rundotGameApi._environmentData = response.environment\n this.rundotGameApi._localeData = response.locale\n this.rundotGameApi._languageCodeData = response.languageCode\n\n this._isInitialized = true\n\n await this.rpcClient.call(RundotGameMessageId.READY, {})\n\n const safeArea = response.safeArea\n if (safeArea) {\n // Store internally for system.getSafeArea()\n this.rundotGameApi._safeAreaData = safeArea\n }\n\n this.context = {\n safeArea: safeArea,\n initializeAsleep: response.initializeAsleep,\n launchParams: response.launchParams,\n shareParams: response.shareParams,\n notificationParams: response.notificationParams,\n shareLinkId: response.shareLinkId,\n }\n\n return this.context\n }\n\n private log(message: string) {\n console.log(`[RUN.game SDK] [Remote Host] ${message}`)\n }\n}\n\nexport interface InitResponse {\n initializeAsleep: boolean\n instanceId: string\n /** Game ID — used by multiplayer API to connect to the correct room server */\n gameId?: string\n /** Room server URL for multiplayer WebSocket connections */\n roomServerUrl?: string\n profile: {\n id: string\n username: string\n avatarUrl?: string | null\n isAnonymous?: boolean\n }\n safeArea?: SafeArea\n launchParams: Record<string, string>\n shareParams: Record<string, string>\n notificationParams?: Record<string, string>\n shareLinkId?: string\n environment: EnvironmentInfo\n device: DeviceInfo\n locale: string\n languageCode: string\n rooms?: {\n gameType?: string\n rulesPreset?: string\n matchmaking?: Record<string, any>\n createOptions?: Record<string, any>\n privateMatchDefaults?: Record<string, any>\n [key: string]: any\n }\n}\n","import { AnalyticsApi, MockAnalyticsApi } from './analytics'\nimport { Host, InitializationContext, InitializationOptions } from './Host.ts'\nimport { AdsApi, MockAdsApi } from './ads'\nimport { createMockStorageApi, StorageApi } from './storage'\nimport { Avatar3dApi, MockAvatarApi } from './avatar3d'\nimport { RundotGameAPI } from './rundot-game-api/types.ts'\nimport { MockNavigationApi, NavigationApi } from './navigation'\nimport { MockNotificationsApi, NotificationsApi } from './notifications'\nimport { MockPopupsApi, PopupsApi } from './popups'\nimport { MockProfileApi, ProfileApi } from './profile'\nimport { SystemApi, MockSystemApi } from './system'\nimport { MockDeviceApi } from './device'\nimport { MockEnvironmentApi } from './environment'\nimport { CdnApi, MockCdnApi } from './cdn'\nimport { MockTimeApi, TimeApi } from './time'\nimport { AiApi, MockAiApi } from './ai'\nimport { HapticsApi, MockHapticsApi } from './haptics'\nimport { FeaturesApi, MockFeaturesApi } from './features'\nimport { LifecycleApi, MockLifecycleApi } from './lifecycles'\nimport { SimulationApi } from './simulation'\nimport { RoomsApi, initializeRoomsApi } from './rooms'\nimport { LoggingApi, MockLoggingApi } from './logging'\nimport { IapApi, MockIapApi } from './iap'\nimport { RundotGameMessageId } from './RundotGameMessageId.ts'\nimport {\n MockOverlay,\n OverlayElements,\n MockActionSheetItem,\n MockActionSheetOptions,\n} from './MockOverlay'\nimport { MockSharedAssetsApi } from './shared-assets'\nimport { LeaderboardApi, MockLeaderboardApi } from './leaderboard'\nimport { UgcApi, MockUgcApi } from './ugc'\nimport { MockPreloaderApi, PreloaderApi } from './game-preloader'\nimport { SocialApi } from './social/SocialApi'\nimport { MockSocialApi } from './social/MockSocialApi'\nimport { ImageGenApi, MockImageGenApi } from './imageGen'\nimport { EntitlementApi, MockEntitlementApi } from './entitlements'\nimport { ShopApi, MockShopApi } from './shop'\nimport { AccessGateApi, MockAccessGateApi, applyAccessGates } from './access-gate'\nimport type { MultiplayerApi } from './mp/client/MultiplayerApi'\nimport { MockMultiplayerApi } from './mp/client/MockMultiplayerApi'\n\nconst ROOMS_UNAVAILABLE_MESSAGE =\n '[RUN.game SDK] Rooms API is only available when running inside the RUN.game host environment.'\n\nfunction createUnavailableRoomsApi(): RoomsApi {\n const roomsUnavailableError = (): Error => new Error(ROOMS_UNAVAILABLE_MESSAGE)\n\n return {\n async createRoomAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async joinOrCreateRoomAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async joinRoomByCodeAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async getUserRoomsAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async subscribeAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async updateRoomDataAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async getRoomDataAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async sendRoomMessageAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async leaveRoomAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async kickPlayerAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async startRoomGameAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async proposeMoveAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n async validateMoveAsync(): Promise<never> {\n throw roomsUnavailableError()\n },\n }\n}\n\nconst SIMULATION_UNAVAILABLE_MESSAGE =\n '[RUN.game SDK] Simulation API is only available when running inside the RUN.game host environment.'\n\nfunction createUnavailableSimulationApi(): SimulationApi {\n const simulationUnavailableError = (): Error => new Error(SIMULATION_UNAVAILABLE_MESSAGE)\n\n return {\n isEnabled(): boolean {\n return false\n },\n async getStateAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getConfigAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async executeRecipeAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getActiveRunsAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async collectRecipeAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async executeScopedRecipeAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async triggerRecipeChainAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getAvailableRecipesAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getRecipeRequirementsAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getBatchRecipeRequirementsAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async resolveFieldValueAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getEntityMetadataAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getSlotContainersAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getSlotAssignmentsAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async assignItemToSlotAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async removeItemFromSlotAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async getAvailableItemsAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async calculatePowerPreviewAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async validateSlotAssignmentAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async executeBatchOperationsAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async subscribeAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n async resetStateAsync(): Promise<never> {\n throw simulationUnavailableError()\n },\n }\n}\n\nenum MockHostState {\n PLAYING,\n PAUSED,\n SLEEPING,\n TERMINATED,\n}\n\nexport class MockHost implements Host {\n readonly ads: AdsApi\n readonly analytics: AnalyticsApi\n readonly deviceCache: StorageApi\n readonly appStorage: StorageApi\n readonly globalStorage: StorageApi\n readonly avatar3d: Avatar3dApi\n readonly navigation: NavigationApi\n readonly notifications: NotificationsApi\n readonly popups: PopupsApi\n readonly profile: ProfileApi\n readonly system: SystemApi\n readonly cdn: CdnApi\n readonly time: TimeApi\n ai: AiApi\n readonly haptics: HapticsApi\n readonly features: FeaturesApi\n readonly lifecycle: LifecycleApi\n simulation: SimulationApi\n rooms: RoomsApi\n readonly logging: LoggingApi\n readonly iap: IapApi\n readonly leaderboard: LeaderboardApi\n ugc: UgcApi\n readonly preloader: PreloaderApi\n readonly social: SocialApi\n readonly imageGen: ImageGenApi\n readonly entitlements: EntitlementApi\n readonly shop: ShopApi\n readonly accessGate: AccessGateApi\n readonly multiplayer: MultiplayerApi\n\n context?: InitializationContext\n\n private state: MockHostState = MockHostState.PLAYING\n\n get isInitialized() {\n return this._isInitialized\n }\n\n private readonly rundotGameApi: RundotGameAPI\n private _isInitialized: boolean = false\n private readonly _overlay: MockOverlay\n\n private readonly _mockLifecyclesApi: MockLifecycleApi\n private readonly _mockAdsApi: MockAdsApi\n\n constructor(rundotGameApi: RundotGameAPI) {\n this.rundotGameApi = rundotGameApi\n this._overlay = this.createOverlay()\n this._mockAdsApi = new MockAdsApi(this._overlay)\n this._mockLifecyclesApi = new MockLifecycleApi()\n\n this.ads = this._mockAdsApi\n this.analytics = new MockAnalyticsApi()\n\n // Use local mock implementations (no backend connection)\n const appUrl = typeof window !== 'undefined' ? window.location.href : ''\n this.deviceCache = createMockStorageApi('deviceCache', appUrl)\n this.appStorage = createMockStorageApi('appStorage', appUrl)\n this.globalStorage = createMockStorageApi('globalStorage')\n this.simulation = createUnavailableSimulationApi()\n this.rooms = createUnavailableRoomsApi()\n this.leaderboard = new MockLeaderboardApi()\n this.ugc = new MockUgcApi()\n\n this.avatar3d = new MockAvatarApi(rundotGameApi)\n this.navigation = new MockNavigationApi(rundotGameApi)\n this.notifications = new MockNotificationsApi(rundotGameApi)\n this.popups = new MockPopupsApi(this._overlay)\n this.profile = new MockProfileApi(rundotGameApi)\n\n // Create device and environment APIs and combine into system namespace\n const deviceApi = new MockDeviceApi(rundotGameApi)\n const environmentApi = new MockEnvironmentApi(rundotGameApi)\n this.system = new MockSystemApi(deviceApi, environmentApi, rundotGameApi)\n\n // MockCdnApi reads configuration from rundotGameApi._mock at runtime\n this.cdn = new MockCdnApi(rundotGameApi)\n this.time = new MockTimeApi(rundotGameApi)\n this.ai = new MockAiApi()\n this.haptics = new MockHapticsApi(rundotGameApi)\n this.features = new MockFeaturesApi()\n this.lifecycle = this._mockLifecyclesApi\n this.logging = new MockLoggingApi()\n this.iap = new MockIapApi()\n this.social = new MockSocialApi()\n this.imageGen = new MockImageGenApi()\n this.entitlements = new MockEntitlementApi()\n this.shop = new MockShopApi()\n\n initializeRoomsApi(this.rundotGameApi, this)\n\n this.preloader = new MockPreloaderApi()\n rundotGameApi.isMock = () => true\n this.rundotGameApi.sharedAssets = new MockSharedAssetsApi(this.rundotGameApi)\n\n this.accessGate = new MockAccessGateApi(rundotGameApi)\n applyAccessGates(this)\n\n this.multiplayer = new MockMultiplayerApi({\n getProfile: () => rundotGameApi.getProfile(),\n })\n }\n\n initialize(options?: InitializationOptions): Promise<InitializationContext> {\n this._isInitialized = true\n\n // Populate system data on RundotGameAPI instance (same as RemoteHost)\n this.rundotGameApi._profileData = this.profile.getCurrentProfile()\n this.rundotGameApi._deviceData = this.system.getDevice()\n this.rundotGameApi._environmentData = this.system.getEnvironment()\n \n // Populate locale data (added for ph-strip-sdk-config-static-data branch)\n this.rundotGameApi._localeData = this.rundotGameApi._mock?.locale || 'en-US'\n this.rundotGameApi._languageCodeData = this.rundotGameApi._mock?.languageCode || 'en'\n\n this.context = {\n initializeAsleep: false,\n safeArea: this.rundotGameApi._safeAreaData,\n launchParams: options?.launchParams || {\"MOCK_LAUNCH_PARAMS_KEY\": \"MOCK_LAUNCH_PARAMS_VALUE\"},\n shareParams: options?.shareParams || {\"MOCK_SHARE_PARAMS_KEY\": \"MOCK_SHARE_PARAMS_VALUE\"},\n notificationParams: {},\n shareLinkId: options?.shareParams ? 'mock-share-id' : undefined,\n }\n\n return Promise.resolve(this.context)\n }\n\n private createOverlay(): MockOverlay {\n // Create overlay container\n const overlayContainer = document.createElement('div')\n overlayContainer.id = 'rundot-game-mock-overlay'\n overlayContainer.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 10000;\n `\n document.body.appendChild(overlayContainer)\n\n // Setup ad overlay container\n const adOverlay = this.setupAdOverlay()\n\n // Setup action sheet overlay container\n const actionSheet = this.setupActionSheetOverlay()\n\n return {\n container: overlayContainer,\n elements: {},\n appVisibilityState: 'visible',\n actionSheetOverlay: actionSheet,\n adOverlay: adOverlay,\n showAdOverlay: () => {\n return this.showAdOverlay('REWARDED VIDEO AD')\n },\n showActionSheet: (items, options) => {\n return this.showActionSheetOverlay(items, options)\n },\n }\n }\n\n private tryAwake() {\n if (this.state === MockHostState.SLEEPING) {\n this.triggerLifecycleEvent(RundotGameMessageId.AWAKE)\n this.state = MockHostState.PAUSED\n }\n }\n\n private trySleep() {\n if (this.state === MockHostState.PAUSED) {\n this.triggerLifecycleEvent(RundotGameMessageId.SLEEP)\n this.state = MockHostState.SLEEPING\n }\n }\n\n private tryPlay() {\n if (this.state === MockHostState.TERMINATED) {\n this.triggerLifecycleEvent(RundotGameMessageId.AWAKE)\n this.state = MockHostState.PAUSED\n this.triggerLifecycleEvent(RundotGameMessageId.RESUME)\n this.state = MockHostState.PLAYING\n }\n }\n\n private tryQuit() {\n if (this.state === MockHostState.PLAYING) {\n this.triggerLifecycleEvent(RundotGameMessageId.PAUSE)\n this.state = MockHostState.PAUSED\n }\n\n if (this.state === MockHostState.PAUSED) {\n this.triggerLifecycleEvent(RundotGameMessageId.SLEEP)\n this.state = MockHostState.SLEEPING\n }\n\n if (this.state === MockHostState.SLEEPING){\n this.triggerLifecycleEvent(RundotGameMessageId.QUIT)\n this.state = MockHostState.TERMINATED\n }\n }\n\n private tryResume() {\n if (this.state === MockHostState.PAUSED) {\n this.triggerLifecycleEvent(RundotGameMessageId.RESUME)\n this.state = MockHostState.PLAYING\n }\n }\n\n private async showAdOverlay(type: any): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const overlay = this._overlay\n const adOverlay = overlay.adOverlay\n\n // Clear any existing content\n overlay.adOverlay.innerHTML = ''\n\n // Add ad type heading\n const heading = document.createElement('h1')\n heading.style.cssText = `\n font-size: 24px;\n margin-bottom: 20px;\n text-align: center;\n `\n heading.innerText =\n type === 'interstitial' ? 'INTERSTITIAL AD' : 'REWARDED VIDEO AD'\n overlay.adOverlay.appendChild(heading)\n\n // Add mock ad content\n const content = document.createElement('div')\n content.style.cssText = `\n width: 300px;\n height: 250px;\n background-color: #1e40af;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 20px;\n border-radius: 8px;\n `\n content.innerText = 'Mock Ad Content'\n adOverlay.appendChild(content)\n\n // Add timer text\n const timer = document.createElement('p')\n timer.style.cssText = `\n margin-bottom: 20px;\n font-size: 16px;\n `\n timer.innerText = 'Normally ads would have a timer...'\n adOverlay.appendChild(timer)\n\n // Add OK button\n const okButton = document.createElement('button')\n okButton.style.cssText = `\n padding: 10px 40px;\n background-color: #2563eb;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n `\n okButton.innerText = 'Close Ad'\n adOverlay.appendChild(okButton)\n\n // Show the overlay\n adOverlay.style.display = 'flex'\n\n okButton.onclick = () => {\n this.hideAdOverlay()\n resolve(true)\n }\n })\n }\n\n private hideAdOverlay() {\n const overlay = this._overlay\n if (overlay.adOverlay) {\n overlay.adOverlay.style.display = 'none'\n }\n }\n\n private setupActionSheetOverlay() {\n const actionSheetOverlay = document.createElement('div')\n actionSheetOverlay.id = 'rundot-game-action-sheet-overlay'\n actionSheetOverlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10600;\n font-family: sans-serif;\n display: none;\n `\n document.body.appendChild(actionSheetOverlay)\n return actionSheetOverlay\n }\n\n private createOverlayButton(\n id: string,\n text: string,\n position: { x: number; y: number; width: number; height: number },\n onClick: () => void,\n background: string,\n color: string,\n ) {\n const button = document.createElement('button')\n button.id = `rundot-game-mock-${id}-button`\n button.innerText = text\n button.style.cssText = `\n position: absolute;\n left: ${position.x}px;\n top: ${position.y}px;\n width: ${position.width}px;\n min-width: ${position.width}px;\n height: ${position.height}px;\n background: ${background};\n color: ${color};\n border: none;\n border-radius: 8px;\n font-family: sans-serif;\n font-weight: bold;\n font-size: ${Math.min(position.width, position.height) / 3}px;\n cursor: pointer;\n pointer-events: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.9;\n transition: opacity 0.2s;\n `\n button.addEventListener('click', onClick)\n button.addEventListener('mouseover', () => {\n button.style.opacity = '1'\n })\n button.addEventListener('mouseout', () => {\n button.style.opacity = '0.9'\n })\n\n return button\n }\n\n private triggerLifecycleEvent(name: string) {\n console.log('Trigger Lifecycle Event: ', name)\n\n if (name == RundotGameMessageId.PAUSE) {\n this._mockLifecyclesApi.triggerPauseCallbacks()\n } else if (name == RundotGameMessageId.RESUME) {\n this._mockLifecyclesApi.triggerResumeCallbacks()\n } else if (name == RundotGameMessageId.QUIT) {\n this._mockLifecyclesApi.triggerQuitCallbacks()\n } else if (name == RundotGameMessageId.AWAKE) {\n this._mockLifecyclesApi.triggerAwakeCallbacks()\n } else if (name == RundotGameMessageId.SLEEP) {\n this._mockLifecyclesApi.triggerSleepCallbacks()\n }\n }\n\n private setupAdOverlay() {\n const adOverlay = document.createElement('div')\n adOverlay.id = 'rundot-game-ad-overlay'\n adOverlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(37, 99, 235, 0.9);\n color: white;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: 10500;\n font-family: sans-serif;\n display: none;\n `\n document.body.appendChild(adOverlay)\n return adOverlay\n }\n\n private log(msg: string, ...args: any[]) {\n console.log(`[RUN.game Mock] ${msg}`, ...args)\n }\n\n private showActionSheetOverlay(\n items: MockActionSheetItem[],\n options?: MockActionSheetOptions,\n ): Promise<string | number | null> {\n this.log('Showing ActionSheetOverlay...')\n\n return new Promise((resolve, reject) => {\n const overlay = this._overlay\n // Clear any existing content and event listeners\n overlay.actionSheetOverlay.innerHTML = ''\n overlay.actionSheetOverlay.style.display = 'flex'\n\n // Create action sheet container\n const actionSheet = document.createElement('div')\n actionSheet.className = 'rundot-game-action-sheet'\n actionSheet.style.cssText = `\n background-color: white;\n border-radius: 8px;\n width: 80%;\n max-width: 400px;\n max-height: 80%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n color: black;\n `\n\n // Add title if provided\n if (options?.title) {\n const titleContainer = document.createElement('div')\n titleContainer.style.cssText = `\n padding: 16px;\n border-bottom: 1px solid #eaeaea;\n font-weight: bold;\n font-size: 18px;\n text-align: center;\n color: black;\n `\n titleContainer.innerText = options.title\n actionSheet.appendChild(titleContainer)\n }\n\n // Add message if provided\n if (options?.message) {\n const messageContainer = document.createElement('div')\n messageContainer.style.cssText = `\n padding: 8px 16px;\n color: #666;\n font-size: 14px;\n text-align: center;\n `\n messageContainer.innerText = options.message\n actionSheet.appendChild(messageContainer)\n }\n\n // Add options\n const optionsContainer = document.createElement('div')\n optionsContainer.style.cssText = `\n overflow-y: auto;\n max-height: 300px;\n `\n\n items.forEach((item, index) => {\n const optionItem = document.createElement('div')\n optionItem.style.cssText = `\n padding: 12px 16px;\n border-bottom: 1px solid #eaeaea;\n cursor: pointer;\n display: flex;\n align-items: center;\n transition: background-color 0.2s;\n color: black;\n `\n\n // Add hover effect\n optionItem.addEventListener('mouseover', () => {\n optionItem.style.backgroundColor = '#f5f5f5'\n })\n\n optionItem.addEventListener('mouseout', () => {\n optionItem.style.backgroundColor = 'white'\n })\n\n // Add icon if provided\n if (item.icon) {\n const iconSpan = document.createElement('span')\n iconSpan.style.cssText = `\n margin-right: 12px;\n font-size: 16px;\n `\n iconSpan.innerText = item.icon\n optionItem.appendChild(iconSpan)\n }\n\n // Add label\n const labelSpan = document.createElement('span')\n labelSpan.style.cssText = `\n color: black;\n `\n labelSpan.innerText = item.label\n optionItem.appendChild(labelSpan)\n\n // Handle click\n optionItem.addEventListener('click', () => {\n this.hideActionSheetOverlay()\n const optionId = item.id !== undefined ? item.id : index\n resolve(optionId)\n })\n\n optionsContainer.appendChild(optionItem)\n })\n\n actionSheet.appendChild(optionsContainer)\n\n // Add cancel button only if cancel is not disabled\n if (!options?.disableCancel) {\n const cancelButton = document.createElement('div')\n cancelButton.style.cssText = `\n padding: 14px 16px;\n text-align: center;\n font-weight: bold;\n cursor: pointer;\n color: #3b82f6;\n border-top: 1px solid #eaeaea;\n `\n cancelButton.innerText = options?.cancelButtonText || 'Cancel'\n cancelButton.addEventListener('click', () => {\n this.hideActionSheetOverlay()\n resolve(null)\n })\n\n actionSheet.appendChild(cancelButton)\n }\n\n // Add close button (X) in the top-right corner only if cancel is not disabled\n if (!options?.disableCancel) {\n const closeButton = document.createElement('div')\n closeButton.style.cssText = `\n position: absolute;\n top: 8px;\n right: 8px;\n width: 24px;\n height: 24px;\n border-radius: 12px;\n background-color: rgba(0,0,0,0.1);\n color: #666;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 14px;\n `\n closeButton.innerText = '✕'\n closeButton.addEventListener('click', () => {\n this.hideActionSheetOverlay()\n resolve(null)\n })\n\n actionSheet.appendChild(closeButton)\n overlay.actionSheetOverlay.appendChild(actionSheet)\n }\n })\n }\n\n hideActionSheetOverlay() {\n const overlay = this._overlay\n if (overlay.actionSheetOverlay) {\n overlay.actionSheetOverlay.style.display = 'none'\n }\n }\n}\n","import { MockHost } from './MockHost.ts'\nimport { RemoteHost } from './RemoteHost.ts'\nimport { AnalyticsApi } from './analytics'\nimport { AdsApi } from './ads'\nimport { StorageApi } from './storage'\nimport { Avatar3dApi } from './avatar3d'\nimport { RundotGameAPI } from './rundot-game-api/types.ts'\nimport { NavigationApi } from './navigation'\nimport { NotificationsApi } from './notifications'\nimport { PopupsApi } from './popups'\nimport { ProfileApi } from './profile'\nimport { SystemApi } from './system'\nimport { CdnApi } from './cdn'\nimport { TimeApi } from './time'\nimport { AiApi } from './ai'\nimport { HapticsApi } from './haptics'\nimport { FeaturesApi } from './features'\nimport { LifecycleApi } from './lifecycles'\nimport { SimulationApi } from './simulation'\nimport { RoomsApi } from './rooms'\nimport type { MultiplayerApi } from './mp/client/MultiplayerApi'\nimport { LoggingApi } from './logging'\nimport { IapApi } from './iap'\nimport { LeaderboardApi } from './leaderboard'\nimport { UgcApi } from './ugc'\nimport { PreloaderApi } from './game-preloader'\nimport { SocialApi } from './social'\nimport { ImageGenApi } from './imageGen/ImageGenApi'\nimport { EntitlementApi } from './entitlements'\nimport { ShopApi } from './shop'\nimport { AccessGateApi } from './access-gate'\n\n/**\n * Safe area insets representing padding needed to avoid device notches and host UI.\n * Includes toolbar/feedHeader height + device safe areas.\n */\nexport interface SafeArea {\n left: number\n top: number\n right: number\n bottom: number\n}\n\n/**\n * @deprecated Use SafeArea instead. Will be removed in v4.0.0\n */\nexport type HudInsets = SafeArea\n\nexport interface InitializationOptions {\n helpText?: string\n hardDisableMock?: boolean\n mock?: Record<string, any>\n usePreloader?: boolean\n launchParams?: Record<string, string>\n shareParams?: Record<string, string>\n notificationParams?: Record<string, string>\n}\n\nexport interface InitializationContext {\n /**\n * Safe area insets from INIT_SDK response.\n * @deprecated Use RundotGameAPI.system.getSafeArea() instead. Will be removed in v4.0.0\n */\n safeArea?: SafeArea\n initializeAsleep: boolean\n launchParams?: Record<string, string>\n shareParams?: Record<string, string>\n notificationParams?: Record<string, string>\n /** The share document ID when launched from a share link; `undefined` otherwise. */\n shareLinkId?: string\n}\n\nexport interface Host {\n readonly ads: AdsApi\n readonly analytics: AnalyticsApi\n readonly deviceCache: StorageApi\n readonly appStorage: StorageApi\n readonly globalStorage: StorageApi\n readonly avatar3d: Avatar3dApi\n readonly navigation: NavigationApi\n readonly notifications: NotificationsApi\n readonly popups: PopupsApi\n readonly profile: ProfileApi\n readonly system: SystemApi\n readonly cdn: CdnApi\n readonly time: TimeApi\n readonly ai: AiApi\n readonly haptics: HapticsApi\n readonly features: FeaturesApi\n readonly lifecycle: LifecycleApi\n readonly simulation: SimulationApi\n readonly rooms: RoomsApi\n readonly logging: LoggingApi\n readonly leaderboard: LeaderboardApi\n readonly ugc: UgcApi\n readonly preloader: PreloaderApi\n readonly social: SocialApi\n readonly imageGen: ImageGenApi\n readonly entitlements: EntitlementApi\n readonly shop: ShopApi\n readonly accessGate: AccessGateApi\n readonly multiplayer: MultiplayerApi\n readonly isInitialized: boolean\n readonly iap: IapApi\n\n readonly context?: InitializationContext\n\n initialize(options?: InitializationOptions): Promise<InitializationContext>\n}\n\n/**\n * Create a Host instance based on the runtime environment.\n *\n * SandboxHost is loaded via a separate entry point (`@series-inc/rundot-game-sdk/sandbox`)\n * which registers a factory on `globalThis.__RUNDOT_SANDBOX_HOST_FACTORY__`.\n * The Vite sandbox plugin injects this import automatically, keeping Firebase\n * completely out of the main bundle's dependency graph.\n */\nexport async function createHost(rundotGameApi: RundotGameAPI, isMock: boolean): Promise<Host> {\n if (isMock) {\n const factory = (globalThis as any).__RUNDOT_SANDBOX_HOST_FACTORY__\n if (factory) {\n console.log('[RUN.game SDK] Sandbox factory found, initializing SandboxHost...')\n return factory(rundotGameApi)\n }\n\n console.log('[RUN.game SDK] Creating a Mock Host')\n return new MockHost(rundotGameApi)\n }\n\n console.log('[RUN.game SDK] Creating a Remote Host')\n return new RemoteHost(rundotGameApi)\n}\n","import { Host } from '../Host';\nimport { RundotGameAPI } from '../rundot-game-api/types';\n\nexport * from './SocialApi';\nexport * from './RpcSocialApi';\nexport * from './MockSocialApi';\n\nexport function initializeSocial(rundotGameApi: RundotGameAPI, host: Host): void {\n rundotGameApi.social = host.social;\n}\n"]}
@@ -4013,53 +4013,6 @@ function initializePreloader(rundotGameApi, host) {
4013
4013
  rundotGameApi.preloader = host.preloader;
4014
4014
  }
4015
4015
 
4016
- // src/social/MockSocialApi.ts
4017
- var MOCK_QR_CODE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==";
4018
- var MOCK_SHARE_LINK_ID = "mock-share-id";
4019
- var MockSocialApi = class {
4020
- async shareLinkAsync(options) {
4021
- const shareUrl = this.createMockUrl(options.shareParams);
4022
- if (typeof navigator !== "undefined" && navigator.clipboard) {
4023
- try {
4024
- await navigator.clipboard.writeText(shareUrl);
4025
- console.log("[RUN.game SDK] (mock) Copied share URL to clipboard");
4026
- } catch (error) {
4027
- console.warn(
4028
- "[RUN.game SDK] (mock) Failed to copy share URL to clipboard",
4029
- error
4030
- );
4031
- }
4032
- }
4033
- return { shareUrl, shareLinkId: MOCK_SHARE_LINK_ID };
4034
- }
4035
- async createQRCodeAsync(options) {
4036
- const shareUrl = this.createMockUrl(options.shareParams);
4037
- return {
4038
- shareUrl,
4039
- qrCode: MOCK_QR_CODE,
4040
- shareLinkId: MOCK_SHARE_LINK_ID
4041
- };
4042
- }
4043
- async addShareClickDataAsync(options) {
4044
- console.log("[RUN.game SDK] (mock) addShareClickDataAsync:", options);
4045
- }
4046
- async getShareClicksAsync(options) {
4047
- console.log("[RUN.game SDK] (mock) getShareClicksAsync:", options);
4048
- return { clicks: [], truncated: false };
4049
- }
4050
- async getMyShareClickDataAsync(options) {
4051
- console.log("[RUN.game SDK] (mock) getMyShareClickDataAsync:", options);
4052
- return null;
4053
- }
4054
- createMockUrl(shareParams) {
4055
- const params = new URLSearchParams(shareParams);
4056
- console.log("Mocking Social API share link with params:", params);
4057
- console.warn("Reminder that share params are stored online and so when mocking the url, the mock url is just a template");
4058
- console.warn("The actual share url will look something like this: https://mock-share-url.com/97dt/mock-share-id");
4059
- return `https://mock-share-url.com/97dt/mock-share-id`;
4060
- }
4061
- };
4062
-
4063
4016
  // src/access-gate/AccessTier.ts
4064
4017
  var AccessDeniedError = class extends Error {
4065
4018
  requiredTier;
@@ -4813,6 +4766,6 @@ var MockMultiplayerApi = class {
4813
4766
  }
4814
4767
  };
4815
4768
 
4816
- export { AccessDeniedError, BaseCdnApi, DEFAULT_SHARED_LIB_CDN_BASE, EMBEDDED_LIBRARIES, EMBEDDED_LIBRARY_BY_KEY, FILE_EXTENSION_PATTERN, HapticFeedbackStyle, HostCdnApi, HostDeviceApi, HostEnvironmentApi, HostProfileApi, HostSystemApi, HostTimeApi, MIN_CDN_PATH_SEGMENTS, MODULE_TO_LIBRARY_SPECIFIERS, MockAccessGateApi, MockAdsApi, MockAiApi, MockAnalyticsApi, MockAvatarApi, MockCdnApi, MockDeviceApi, MockEntitlementApi, MockEnvironmentApi, MockFeaturesApi, MockHapticsApi, MockIapApi, MockLifecycleApi, MockLoggingApi, MockMultiplayerApi, MockNavigationApi, MockNotificationsApi, MockPopupsApi, MockPreloaderApi, MockProfileApi, MockSharedAssetsApi, MockShopApi, MockSocialApi, MockStorageApi, MockSystemApi, MockTimeApi, ROOM_GAME_PHASES, RpcAccessGateApi, RpcAdsApi, RpcAiApi, RpcAnalyticsApi, RpcAvatarApi, RpcEntitlementApi, RpcFeaturesApi, RpcHapticsApi, RpcIapApi, RpcLifecycleApi, RpcLoggingApi, RpcNavigationApi, RpcNotificationsApi, RpcPopupsApi, RpcPreloaderApi, RpcRoomsApi, RpcSharedAssetsApi, RpcShopApi, RpcStorageApi, RundotGameMessageId, RundotGameRoom, SandboxProfileApi, WsMultiplayerApi, applyAccessGates, base64ToArrayBuffer, base64ToUtf8, createAccessGatedApi, createMockStorageApi, generateId, getLibraryDefinition, hasHostedUrlStructure, initializeAccessGate, initializeAds, initializeAi, initializeAnalytics, initializeAvatar3d, initializeCdn, initializeEntitlements, initializeFeaturesApi, initializeHaptics, initializeIap, initializeLifecycleApi, initializeLocalNotifications, initializeLoggingApi, initializePopups, initializePreloader, initializeProfile, initializeRoomsApi, initializeShop, initializeStackNavigation, initializeStorage, initializeSystem, initializeTime, isPacificDaylightTime, parseCdnPathSegments, resolveCollectionItemPrice, setupRoomNotifications };
4817
- //# sourceMappingURL=chunk-V7H54HGI.js.map
4818
- //# sourceMappingURL=chunk-V7H54HGI.js.map
4769
+ export { AccessDeniedError, BaseCdnApi, DEFAULT_SHARED_LIB_CDN_BASE, EMBEDDED_LIBRARIES, EMBEDDED_LIBRARY_BY_KEY, FILE_EXTENSION_PATTERN, HapticFeedbackStyle, HostCdnApi, HostDeviceApi, HostEnvironmentApi, HostProfileApi, HostSystemApi, HostTimeApi, MIN_CDN_PATH_SEGMENTS, MODULE_TO_LIBRARY_SPECIFIERS, MockAccessGateApi, MockAdsApi, MockAiApi, MockAnalyticsApi, MockAvatarApi, MockCdnApi, MockDeviceApi, MockEntitlementApi, MockEnvironmentApi, MockFeaturesApi, MockHapticsApi, MockIapApi, MockLifecycleApi, MockLoggingApi, MockMultiplayerApi, MockNavigationApi, MockNotificationsApi, MockPopupsApi, MockPreloaderApi, MockProfileApi, MockSharedAssetsApi, MockShopApi, MockStorageApi, MockSystemApi, MockTimeApi, ROOM_GAME_PHASES, RpcAccessGateApi, RpcAdsApi, RpcAiApi, RpcAnalyticsApi, RpcAvatarApi, RpcEntitlementApi, RpcFeaturesApi, RpcHapticsApi, RpcIapApi, RpcLifecycleApi, RpcLoggingApi, RpcNavigationApi, RpcNotificationsApi, RpcPopupsApi, RpcPreloaderApi, RpcRoomsApi, RpcSharedAssetsApi, RpcShopApi, RpcStorageApi, RundotGameMessageId, RundotGameRoom, SandboxProfileApi, WsMultiplayerApi, applyAccessGates, base64ToArrayBuffer, base64ToUtf8, createAccessGatedApi, createMockStorageApi, generateId, getLibraryDefinition, hasHostedUrlStructure, initializeAccessGate, initializeAds, initializeAi, initializeAnalytics, initializeAvatar3d, initializeCdn, initializeEntitlements, initializeFeaturesApi, initializeHaptics, initializeIap, initializeLifecycleApi, initializeLocalNotifications, initializeLoggingApi, initializePopups, initializePreloader, initializeProfile, initializeRoomsApi, initializeShop, initializeStackNavigation, initializeStorage, initializeSystem, initializeTime, isPacificDaylightTime, parseCdnPathSegments, resolveCollectionItemPrice, setupRoomNotifications };
4770
+ //# sourceMappingURL=chunk-WRQ3NCXC.js.map
4771
+ //# sourceMappingURL=chunk-WRQ3NCXC.js.map