@series-inc/venus-sdk 3.4.2 → 3.4.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/idGenerator.ts","../src/rpc/RpcClient.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/social/RpcSocialApi.ts","../src/VenusTransport.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-DJ3WT3FA.js","sourcesContent":["/**\r\n * Generate a unique ID using timestamp and random component\r\n */\r\nexport function generateId(): string {\r\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\r\n}\r\n","import { RpcRequest } from './RpcRequest.ts'\r\nimport { RpcResponse } from './RpcResponse.ts'\r\nimport { RpcTransport } from './RpcTransport.ts'\r\nimport { RpcNotification } from './RpcNotification'\r\nimport { generateId } from '../utils/idGenerator'\r\n\r\ninterface PendingCall {\r\n id: string\r\n resolve: (value: any) => void\r\n reject: (error: any) => void\r\n}\r\n\r\nexport interface Subscription {\r\n unsubscribe: () => void\r\n}\r\n\r\nexport class RpcClient {\r\n private readonly pendingCalls = new Map<string, PendingCall>()\r\n private readonly notificationCallbacks = new Map<string, Function>()\r\n\r\n private onResponseSub: Subscription | null = null\r\n private onNotificationSub: Subscription | null = null\r\n private transport: RpcTransport | null = null\r\n\r\n start(transport: RpcTransport) {\r\n this.transport = transport\r\n this.onResponseSub = transport.onResponse(async (response) => {\r\n return this.handleRpcResponse(response)\r\n })\r\n this.onNotificationSub = transport.onNotification(async (notification) => {\r\n return this.handleRpcNotification(notification)\r\n })\r\n }\r\n\r\n stop() {\r\n if (this.onResponseSub) {\r\n this.onResponseSub.unsubscribe()\r\n this.onResponseSub = null\r\n }\r\n\r\n if (this.onNotificationSub) {\r\n this.onNotificationSub.unsubscribe()\r\n this.onNotificationSub = null\r\n }\r\n\r\n this.transport = null\r\n }\r\n\r\n onNotification<TPayload>(\r\n id: string,\r\n callback: (payload: TPayload) => void,\r\n ): Subscription {\r\n this.notificationCallbacks.set(id, callback)\r\n return {\r\n unsubscribe: () => {\r\n this.notificationCallbacks.delete(id)\r\n },\r\n }\r\n }\r\n\r\n callT<TArgs, TResult>(\r\n method: string,\r\n args: TArgs,\r\n timeout: number = 5000,\r\n ): Promise<TResult> {\r\n return this.call(method, args, timeout)\r\n }\r\n\r\n async call<TResponse>(\r\n method: string,\r\n args?: any,\r\n timeout: number = 5000,\r\n ): Promise<TResponse> {\r\n // NOTE(Zee): Make this into options?\r\n return new Promise((resolve, reject) => {\r\n const id = generateId()\r\n this.addPendingCall(id, resolve, reject)\r\n\r\n const request: RpcRequest = {\r\n type: 'rpc-request',\r\n id,\r\n method,\r\n args: args,\r\n }\r\n\r\n if (this.transport) {\r\n this.transport.sendRequest(request)\r\n }\r\n\r\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...\r\n if (timeout > 0) {\r\n setTimeout(() => {\r\n if (this.hasPendingCall(id)) {\r\n this.removePendingCall(id)\r\n reject(new Error(`RPC call ${method} timed out`))\r\n }\r\n }, timeout)\r\n }\r\n })\r\n }\r\n\r\n private hasPendingCall(id: string): boolean {\r\n return this.pendingCalls.has(id)\r\n }\r\n\r\n private addPendingCall(\r\n id: string,\r\n resolve: (v: any) => void,\r\n reject: (e: any) => void,\r\n ) {\r\n this.pendingCalls.set(id, {\r\n id: id,\r\n resolve: resolve,\r\n reject: reject,\r\n })\r\n }\r\n\r\n private removePendingCall(id: string) {\r\n this.pendingCalls.delete(id)\r\n }\r\n\r\n private getPendingCall(id: string) {\r\n return this.pendingCalls.get(id)\r\n }\r\n\r\n private handleRpcResponse(response: RpcResponse): boolean {\r\n const pending = this.getPendingCall(response.id)\r\n if (!pending) {\r\n return false\r\n }\r\n this.removePendingCall(response.id)\r\n\r\n if (response.error) {\r\n pending.reject(new Error(response.error.message))\r\n return true\r\n }\r\n\r\n pending.resolve(response.result)\r\n return true\r\n }\r\n\r\n private handleRpcNotification(notification: RpcNotification): void {\r\n const callback = this.notificationCallbacks.get(notification.id)\r\n if (callback) {\r\n callback(notification.payload)\r\n }\r\n }\r\n}\r\n","import {\r\n CollectRecipeResult,\r\n ExecuteRecipeOptions,\r\n ExecuteRecipeResponse,\r\n ExecuteScopedRecipeResult,\r\n ExecuteScopedRecipeOptions,\r\n GetActiveRunsOptions,\r\n GetAvailableRecipesOptions,\r\n GetAvailableRecipesResult,\r\n GetBatchRecipeRequirements,\r\n Recipe,\r\n SimulationApi,\r\n SimulationAvailableItem,\r\n SimulationAssignment,\r\n SimulationBatchOperation,\r\n SimulationBatchOperationsResult,\r\n SimulationPowerPreview,\r\n SimulationRunSummary,\r\n SimulationSlotMutationResult,\r\n SimulationSlotValidationResult,\r\n SimulationSlotContainer,\r\n SimulationState,\r\n SimulationPersonalState,\r\n SimulationRoomState,\r\n TriggerRecipeChainOptions,\r\n} from './SimulationApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport {\r\n RecipeRequirementResult,\r\n VenusSimulationConfig,\r\n SimulationSubscribeOptions,\r\n SimulationUpdateData,\r\n} from '../venus-api/types'\r\nimport { generateId } from '../utils/idGenerator'\r\n\r\ninterface ResolveFieldValueResponse {\r\n value: unknown\r\n}\r\n\r\ninterface SimulationUpdateNotification {\r\n subscriptionId: string\r\n updates: SimulationUpdateData\r\n}\r\n\r\ninterface StateResponseExtension {\r\n configuration?: VenusSimulationConfig\r\n}\r\n\r\ninterface PersonalStateResponse extends SimulationPersonalState, StateResponseExtension {}\r\n\r\ninterface RoomStateResponse extends SimulationRoomState, StateResponseExtension {}\r\n\r\ntype GetStateResponse = PersonalStateResponse | RoomStateResponse\r\n\r\nexport class RpcSimulationApi implements SimulationApi {\r\n private readonly rpcClient: RpcClient\r\n private _simulationConfig: VenusSimulationConfig | null = null\r\n private readonly subscriptionCallbacks = new Map<\r\n string,\r\n (data: SimulationUpdateData) => void\r\n >()\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n this.rpcClient.onNotification(\r\n VenusMessageId.H5_SIMULATION_UPDATE,\r\n this.handleSimulationUpdate.bind(this),\r\n )\r\n }\r\n\r\n isEnabled(): boolean {\r\n return true\r\n }\r\n\r\n async validateSlotAssignmentAsync(\r\n containerId: string,\r\n slotId: string,\r\n itemId: string,\r\n ): Promise<SimulationSlotValidationResult> {\r\n return this.rpcClient.call<SimulationSlotValidationResult>(\r\n VenusMessageId.H5_SIMULATION_VALIDATE_ASSIGNMENT,\r\n {\r\n containerId,\r\n slotId,\r\n itemId,\r\n },\r\n )\r\n }\r\n\r\n async subscribeAsync(\r\n options: SimulationSubscribeOptions,\r\n ): Promise<() => void> {\r\n this.ensureValidSubscribeOptions(options)\r\n\r\n const subscriptionId = generateId()\r\n this.subscriptionCallbacks.set(subscriptionId, options.onUpdate)\r\n\r\n try {\r\n await this.rpcClient.call(VenusMessageId.H5_SIMULATION_SUBSCRIBE, {\r\n subscriptionId,\r\n entities: options.entities,\r\n tags: options.tags,\r\n activeRuns: options.activeRuns,\r\n roomId: options.roomId,\r\n })\r\n } catch (error) {\r\n this.subscriptionCallbacks.delete(subscriptionId)\r\n throw error\r\n }\r\n\r\n let unsubscribed = false\r\n return () => {\r\n if (unsubscribed) {\r\n return\r\n }\r\n unsubscribed = true\r\n\r\n this.subscriptionCallbacks.delete(subscriptionId)\r\n\r\n void this.rpcClient\r\n .call(VenusMessageId.H5_SIMULATION_UNSUBSCRIBE, {\r\n subscriptionId,\r\n })\r\n .catch((error) => {\r\n console.error(\r\n '[Venus SDK] Failed to unsubscribe simulation listener',\r\n error,\r\n )\r\n })\r\n }\r\n }\r\n\r\n executeBatchOperationsAsync(\r\n operations: Array<SimulationBatchOperation>,\r\n validateOnly?: boolean,\r\n ): Promise<SimulationBatchOperationsResult> {\r\n return this.rpcClient.call<SimulationBatchOperationsResult>(\r\n VenusMessageId.H5_SIMULATION_BATCH_OPERATIONS,\r\n {\r\n operations,\r\n validateOnly,\r\n },\r\n )\r\n }\r\n async getAvailableItemsAsync(\r\n containerId: string,\r\n slotId: string,\r\n ): Promise<SimulationAvailableItem[]> {\r\n const response = await this.rpcClient.call<{\r\n availableItems?: SimulationAvailableItem[]\r\n }>(\r\n VenusMessageId.H5_SIMULATION_GET_AVAILABLE_ITEMS,\r\n {\r\n containerId,\r\n slotId,\r\n },\r\n )\r\n return response.availableItems || []\r\n }\r\n calculatePowerPreviewAsync(\r\n containerId: string,\r\n slotId: string,\r\n candidateItemId: string,\r\n ): Promise<SimulationPowerPreview> {\r\n return this.rpcClient.call<SimulationPowerPreview>(\r\n VenusMessageId.H5_SIMULATION_CALCULATE_POWER_PREVIEW,\r\n {\r\n containerId,\r\n slotId,\r\n candidateItemId,\r\n },\r\n )\r\n }\r\n assignItemToSlotAsync(\r\n containerId: string,\r\n slotId: string,\r\n itemId: string,\r\n ): Promise<SimulationSlotMutationResult> {\r\n return this.rpcClient.call<SimulationSlotMutationResult>(\r\n VenusMessageId.H5_SIMULATION_ASSIGN_ITEM,\r\n {\r\n containerId,\r\n slotId,\r\n itemId,\r\n },\r\n )\r\n }\r\n\r\n removeItemFromSlotAsync(\r\n containerId: string,\r\n slotId: string,\r\n ): Promise<SimulationSlotMutationResult> {\r\n return this.rpcClient.call<SimulationSlotMutationResult>(\r\n VenusMessageId.H5_SIMULATION_REMOVE_ITEM,\r\n {\r\n containerId,\r\n slotId,\r\n },\r\n )\r\n }\r\n\r\n async getSlotContainersAsync(): Promise<SimulationSlotContainer[]> {\r\n const response = await this.rpcClient.call<{\r\n containers?: SimulationSlotContainer[]\r\n }>(\r\n VenusMessageId.H5_SIMULATION_GET_CONTAINERS,\r\n {},\r\n )\r\n return response.containers || []\r\n }\r\n\r\n async getSlotAssignmentsAsync(\r\n containerId: string,\r\n ): Promise<SimulationAssignment[]> {\r\n const response = await this.rpcClient.call<\r\n SimulationAssignment[] | { assignments?: SimulationAssignment[] }\r\n >(\r\n VenusMessageId.H5_SIMULATION_GET_ASSIGNMENTS,\r\n {\r\n containerId,\r\n },\r\n )\r\n // Server returns raw array, not wrapped in .assignments property\r\n return Array.isArray(response)\r\n ? response\r\n : response.assignments || []\r\n }\r\n\r\n async getStateAsync(roomId?: string): Promise<SimulationState> {\r\n const response = await this.rpcClient.call<GetStateResponse>(\r\n VenusMessageId.H5_SIMULATION_GET_STATE,\r\n {\r\n roomId: roomId,\r\n },\r\n )\r\n\r\n // Cache configuration if included in response\r\n if (response.configuration) {\r\n this._simulationConfig = response.configuration\r\n }\r\n return response\r\n }\r\n\r\n async getConfigAsync(roomId?: string): Promise<VenusSimulationConfig> {\r\n if (this._simulationConfig) {\r\n return this._simulationConfig\r\n }\r\n\r\n // Fetch configuration directly\r\n const config = await this.rpcClient.call<VenusSimulationConfig>(\r\n VenusMessageId.H5_SIMULATION_GET_CONFIG,\r\n {\r\n roomId,\r\n },\r\n )\r\n if (config) {\r\n this._simulationConfig = config\r\n return config\r\n }\r\n\r\n throw new Error('No simulation configuration available')\r\n }\r\n\r\n executeRecipeAsync(\r\n recipeId: string,\r\n inputs?: Record<string, unknown>,\r\n options?: ExecuteRecipeOptions,\r\n ): Promise<ExecuteRecipeResponse> {\r\n return this.rpcClient.call<ExecuteRecipeResponse>(\r\n VenusMessageId.H5_SIMULATION_EXECUTE_RECIPE,\r\n {\r\n recipeId: recipeId,\r\n inputs: inputs,\r\n roomId: options?.roomId,\r\n batchAmount: options?.batchAmount,\r\n allowPartialBatch: options?.allowPartialBatch,\r\n entity: options?.entity,\r\n },\r\n )\r\n }\r\n\r\n collectRecipeAsync(runId: string): Promise<CollectRecipeResult> {\r\n return this.rpcClient.call(VenusMessageId.H5_SIMULATION_COLLECT_RECIPE, {\r\n runId: runId,\r\n })\r\n }\r\n\r\n getActiveRunsAsync(\r\n options?: GetActiveRunsOptions,\r\n ): Promise<SimulationRunSummary[]> {\r\n return this.rpcClient.call<SimulationRunSummary[]>(\r\n VenusMessageId.H5_SIMULATION_GET_ACTIVE_RUNS,\r\n {\r\n roomId: options?.roomId,\r\n },\r\n )\r\n }\r\n\r\n executeScopedRecipeAsync(\r\n recipeId: string,\r\n entity: string,\r\n inputs?: Record<string, unknown>,\r\n options?: ExecuteScopedRecipeOptions,\r\n ): Promise<ExecuteScopedRecipeResult> {\r\n return this.rpcClient.call(\r\n VenusMessageId.H5_SIMULATION_EXECUTE_SCOPED_RECIPE,\r\n {\r\n recipeId: recipeId,\r\n entity: entity,\r\n inputs: inputs,\r\n roomId: options?.roomId ?? null,\r\n options,\r\n },\r\n )\r\n }\r\n\r\n getAvailableRecipesAsync(\r\n options?: GetAvailableRecipesOptions,\r\n ): Promise<GetAvailableRecipesResult> {\r\n return this.rpcClient.call(\r\n VenusMessageId.H5_SIMULATION_GET_AVAILABLE_RECIPES,\r\n {\r\n roomId: options?.roomId || null,\r\n includeActorRecipes: options?.includeActorRecipes || false,\r\n },\r\n )\r\n }\r\n\r\n getRecipeRequirementsAsync(\r\n recipe: Recipe,\r\n ): Promise<RecipeRequirementResult> {\r\n return this.rpcClient.call<RecipeRequirementResult>(\r\n VenusMessageId.H5_SIMULATION_GET_RECIPE_REQUIREMENTS,\r\n {\r\n recipeId: recipe.recipeId,\r\n entity: recipe.entity,\r\n batchAmount: recipe.batchAmount,\r\n },\r\n )\r\n }\r\n\r\n getBatchRecipeRequirementsAsync(\r\n recipes: Recipe[],\r\n ): Promise<GetBatchRecipeRequirements> {\r\n return this.rpcClient.call<GetBatchRecipeRequirements>(\r\n VenusMessageId.H5_SIMULATION_GET_BATCH_RECIPE_REQUIREMENTS,\r\n {\r\n recipes,\r\n },\r\n )\r\n }\r\n\r\n triggerRecipeChainAsync(\r\n recipeId: string,\r\n options?: TriggerRecipeChainOptions,\r\n ): Promise<ExecuteRecipeResponse> {\r\n return this.rpcClient.call<ExecuteRecipeResponse>(\r\n VenusMessageId.H5_SIMULATION_TRIGGER_RECIPE_CHAIN,\r\n {\r\n triggerRecipeId: recipeId,\r\n context: options?.context,\r\n roomId: options?.roomId,\r\n },\r\n )\r\n }\r\n\r\n getEntityMetadataAsync(\r\n entityId: string,\r\n ): Promise<Record<string, unknown>> {\r\n return this.rpcClient.call<Record<string, unknown>>(\r\n VenusMessageId.H5_SIMULATION_GET_ENTITY_METADATA,\r\n {\r\n entityId,\r\n },\r\n )\r\n }\r\n\r\n async resolveFieldValueAsync(\r\n entityId: string,\r\n fieldPath: string,\r\n entity?: string,\r\n ): Promise<unknown> {\r\n const response = await this.rpcClient.call<ResolveFieldValueResponse>(\r\n VenusMessageId.H5_SIMULATION_RESOLVE_VALUE,\r\n {\r\n entityId,\r\n fieldPath,\r\n entity,\r\n },\r\n )\r\n // Extract primitive value from server response wrapper\r\n return response.value\r\n }\r\n\r\n private handleSimulationUpdate(\r\n notification: SimulationUpdateNotification,\r\n ): void {\r\n if (!notification || !notification.subscriptionId) {\r\n console.warn('[Venus SDK] Received malformed simulation update')\r\n return\r\n }\r\n\r\n const callback = this.subscriptionCallbacks.get(notification.subscriptionId)\r\n if (!callback) {\r\n console.warn(\r\n '[Venus SDK] Received update for unknown subscription:',\r\n notification.subscriptionId,\r\n )\r\n return\r\n }\r\n\r\n try {\r\n callback(notification.updates)\r\n } catch (error) {\r\n console.error('[Venus SDK] Error in simulation subscription callback', error)\r\n }\r\n }\r\n\r\n private ensureValidSubscribeOptions(\r\n options: unknown,\r\n ): asserts options is SimulationSubscribeOptions {\r\n if (typeof options !== 'object' || options === null) {\r\n throw new Error('Simulation subscribe requires an options object')\r\n }\r\n\r\n const opts = options as Record<string, unknown>\r\n\r\n if (typeof opts.onUpdate !== 'function') {\r\n throw new Error('Simulation subscribe requires an onUpdate callback')\r\n }\r\n\r\n const hasFilter =\r\n (Array.isArray(opts.entities) && opts.entities.length > 0) ||\r\n (Array.isArray(opts.tags) && opts.tags.length > 0) ||\r\n Boolean(opts.activeRuns)\r\n\r\n if (!hasFilter) {\r\n throw new Error(\r\n 'Simulation subscribe requires at least one filter (entities, tags, activeRuns)',\r\n )\r\n }\r\n }\r\n}\r\n","import { VenusAPI, SimulationSubscribeOptions } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\nimport {\r\n SimulationApi,\r\n ExecuteScopedRecipeOptions,\r\n TriggerRecipeChainOptions,\r\n GetAvailableRecipesOptions,\r\n Recipe,\r\n} from './SimulationApi'\r\n\r\nexport * from './SimulationApi'\r\nexport * from './RpcSimulationApi'\r\n// HttpSimulationApi is intentionally NOT exported here.\r\n// It depends on Firebase and should only be imported by SandboxHost via direct import.\r\n// This prevents Firebase from being bundled in production builds.\r\n\r\nexport function initializeSimulation(venusApi: VenusAPI, host: Host) {\r\n venusApi.simulation = {\r\n isEnabled: () => true,\r\n } as SimulationApi\r\n\r\n venusApi.simulation.getConfigAsync = () => {\r\n return host.simulation.getConfigAsync()\r\n }\r\n\r\n venusApi.simulation.getStateAsync = (roomId) => {\r\n return host.simulation.getStateAsync(roomId)\r\n }\r\n\r\n venusApi.simulation.executeRecipeAsync = (recipeId, inputs, options) => {\r\n return host.simulation.executeRecipeAsync(recipeId, inputs, options)\r\n }\r\n\r\n venusApi.simulation.getActiveRunsAsync = () => {\r\n return host.simulation.getActiveRunsAsync()\r\n }\r\n\r\n venusApi.simulation.collectRecipeAsync = (runId: string) => {\r\n return host.simulation.collectRecipeAsync(runId)\r\n }\r\n\r\n venusApi.simulation.executeScopedRecipeAsync = (\r\n recipeId: string,\r\n entity: string,\r\n inputs?: Record<string, unknown>,\r\n options?: ExecuteScopedRecipeOptions,\r\n ) => {\r\n return host.simulation.executeScopedRecipeAsync(recipeId, entity, inputs, options)\r\n }\r\n\r\n venusApi.simulation.triggerRecipeChainAsync = (\r\n recipeId: string,\r\n options?: TriggerRecipeChainOptions,\r\n ) => {\r\n return host.simulation.triggerRecipeChainAsync(recipeId, options)\r\n }\r\n\r\n venusApi.simulation.getAvailableRecipesAsync = async (\r\n options?: GetAvailableRecipesOptions,\r\n ) => {\r\n return host.simulation.getAvailableRecipesAsync(options)\r\n }\r\n\r\n venusApi.simulation.getRecipeRequirementsAsync = (recipe: Recipe) => {\r\n return host.simulation.getRecipeRequirementsAsync(recipe)\r\n }\r\n\r\n venusApi.simulation.getBatchRecipeRequirementsAsync = (recipes) => {\r\n return host.simulation.getBatchRecipeRequirementsAsync(recipes)\r\n }\r\n\r\n venusApi.simulation.resolveFieldValueAsync = (\r\n entityId,\r\n fieldPath,\r\n entity,\r\n ) => {\r\n return host.simulation.resolveFieldValueAsync(entityId, fieldPath, entity)\r\n }\r\n\r\n venusApi.simulation.getEntityMetadataAsync = (entityId) => {\r\n return host.simulation.getEntityMetadataAsync(entityId)\r\n }\r\n\r\n venusApi.simulation.getSlotAssignmentsAsync = (containerId) => {\r\n return host.simulation.getSlotAssignmentsAsync(containerId)\r\n }\r\n\r\n venusApi.simulation.getSlotContainersAsync = () => {\r\n return host.simulation.getSlotContainersAsync()\r\n }\r\n\r\n venusApi.simulation.assignItemToSlotAsync = (containerId, slotId, itemId) => {\r\n return host.simulation.assignItemToSlotAsync(containerId, slotId, itemId)\r\n }\r\n\r\n venusApi.simulation.removeItemFromSlotAsync = (containerId, slotId) => {\r\n return host.simulation.removeItemFromSlotAsync(containerId, slotId)\r\n }\r\n\r\n venusApi.simulation.getAvailableItemsAsync = (containerId, slotId) => {\r\n return host.simulation.getAvailableItemsAsync(containerId, slotId)\r\n }\r\n\r\n venusApi.simulation.calculatePowerPreviewAsync = (\r\n containerId: string,\r\n slotId: string,\r\n candidateItemId: string,\r\n ) => {\r\n return host.simulation.calculatePowerPreviewAsync(\r\n containerId,\r\n slotId,\r\n candidateItemId,\r\n )\r\n }\r\n\r\n venusApi.simulation.executeBatchOperationsAsync = (\r\n operations,\r\n validateOnly,\r\n ) => {\r\n return host.simulation.executeBatchOperationsAsync(operations, validateOnly)\r\n }\r\n\r\n venusApi.simulation.validateSlotAssignmentAsync = (\r\n containerId,\r\n slotId,\r\n itemId,\r\n ) => {\r\n return host.simulation.validateSlotAssignmentAsync(\r\n containerId,\r\n slotId,\r\n itemId,\r\n )\r\n }\r\n\r\n // ===== REAL-TIME SUBSCRIPTIONS =====\r\n venusApi.simulation.subscribeAsync = (options: SimulationSubscribeOptions) => {\r\n return host.simulation.subscribeAsync(options)\r\n }\r\n}\r\n","declare const __SDK_VERSION__: string\r\nexport const SDK_VERSION = __SDK_VERSION__\r\n","/**\r\n * Hash algorithm used for score sealing\r\n */\r\nexport const HASH_ALGORITHM_WEB_CRYPTO = 'SHA-256'\r\nexport const HASH_ALGORITHM_NODE = 'sha256'\r\n\r\n/**\r\n * Compute HMAC-SHA256 hash for score sealing.\r\n * Hash always includes: score, duration, token\r\n * Matches server-side hash computation exactly.\r\n *\r\n * @param score - The score value\r\n * @param duration - Duration in seconds\r\n * @param token - Score token\r\n * @param sealingNonce - One-time nonce for this submission\r\n * @param sealingSecret - Secret key for HMAC\r\n * @returns Hex-encoded hash string\r\n */\r\nexport async function computeScoreHash(\r\n score: number,\r\n duration: number,\r\n token: string,\r\n sealingNonce: string,\r\n sealingSecret: string,\r\n): Promise<string> {\r\n // Build payload: score:value|duration:value|token:value\r\n const payload = `score:${score}|duration:${duration}|token:${token}`\r\n const fullPayload = `${payload}|nonce:${sealingNonce}`\r\n\r\n // HMAC-SHA256 using Web Crypto API\r\n const encoder = new TextEncoder()\r\n const keyData = encoder.encode(sealingSecret)\r\n const messageData = encoder.encode(fullPayload)\r\n\r\n const cryptoKey = await crypto.subtle.importKey(\r\n 'raw',\r\n keyData,\r\n { name: 'HMAC', hash: HASH_ALGORITHM_WEB_CRYPTO },\r\n false,\r\n ['sign'],\r\n )\r\n\r\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData)\r\n\r\n // Convert to hex string\r\n return Array.from(new Uint8Array(signature))\r\n .map((b) => b.toString(16).padStart(2, '0'))\r\n .join('')\r\n}\r\n\r\n","import { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport {\r\n GetPagedScoresOptions,\r\n LeaderboardApi,\r\n PagedScoresResponse,\r\n GetPodiumScoresOptions,\r\n PodiumScoresResponse,\r\n PlayerRankResult,\r\n PlayerRankOptions,\r\n ScoreToken,\r\n SubmitScoreParams,\r\n SubmitScoreResult,\r\n} from './LeaderboardApi'\r\nimport { computeScoreHash } from './utils'\r\n\r\nexport class RpcLeaderboardApi implements LeaderboardApi {\r\n private readonly rpcClient: RpcClient\r\n /** Cache of score tokens for automatic hash computation */\r\n private tokenCache: Map<string, ScoreToken> = new Map()\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n /**\r\n * Create a score token for submitting a score.\r\n * Token is cached for automatic hash computation if score sealing is enabled.\r\n *\r\n * @param mode - Optional game mode\r\n * @returns Score token with sealing data if enabled\r\n */\r\n async createScoreToken(mode?: string): Promise<ScoreToken> {\r\n const token = await this.rpcClient.call<ScoreToken>(\r\n VenusMessageId.H5_LEADERBOARD_CREATE_SCORE_TOKEN,\r\n mode ? { mode } : {},\r\n )\r\n\r\n // Cache token with sealing data for auto-hash computation\r\n this.tokenCache.set(token.token, token)\r\n\r\n return token\r\n }\r\n\r\n /**\r\n * Submit a score to the leaderboard.\r\n * Automatically computes hash if score sealing is enabled and token was created via createScoreToken().\r\n *\r\n * @param params - Score submission parameters\r\n * @returns Submission result with acceptance status and rank\r\n * @throws Error if token not found in cache\r\n */\r\n async submitScore(params: SubmitScoreParams): Promise<SubmitScoreResult> {\r\n let hash: string | undefined\r\n\r\n // If token provided, check if sealing is enabled and auto-compute hash\r\n if (params.token) {\r\n const cachedToken = this.tokenCache.get(params.token)\r\n\r\n if (!cachedToken) {\r\n throw new Error(\r\n 'Invalid token: not found in cache. Did you call createScoreToken() first?'\r\n )\r\n }\r\n\r\n // Auto-compute hash if sealing enabled (token has nonce and secret)\r\n if (cachedToken.sealingNonce && cachedToken.sealingSecret) {\r\n hash = await computeScoreHash(\r\n params.score,\r\n params.duration,\r\n params.token,\r\n cachedToken.sealingNonce,\r\n cachedToken.sealingSecret,\r\n )\r\n }\r\n\r\n // Clean up used token from cache\r\n this.tokenCache.delete(params.token)\r\n }\r\n\r\n // Send to host/server (includes hash if sealing enabled)\r\n return this.rpcClient.call<SubmitScoreResult>(\r\n VenusMessageId.H5_LEADERBOARD_SUBMIT_SCORE,\r\n {\r\n token: params.token,\r\n score: params.score,\r\n duration: params.duration,\r\n mode: params.mode,\r\n telemetry: params.telemetry,\r\n metadata: params.metadata,\r\n hash, // undefined if no sealing, computed if sealing enabled\r\n },\r\n )\r\n }\r\n\r\n getPagedScores(options?: GetPagedScoresOptions): Promise<PagedScoresResponse> {\r\n return this.rpcClient.call<PagedScoresResponse>(\r\n VenusMessageId.H5_LEADERBOARD_GET_PAGED_SCORES,\r\n options ?? {},\r\n )\r\n }\r\n\r\n getMyRank(options?: PlayerRankOptions): Promise<PlayerRankResult> {\r\n return this.rpcClient.call<PlayerRankResult>(\r\n VenusMessageId.H5_LEADERBOARD_GET_MY_RANK,\r\n options ?? {},\r\n )\r\n }\r\n\r\n getPodiumScores(options?: GetPodiumScoresOptions): Promise<PodiumScoresResponse> {\r\n return this.rpcClient.call<PodiumScoresResponse>(\r\n VenusMessageId.H5_LEADERBOARD_GET_PODIUM_SCORES,\r\n options ?? {},\r\n )\r\n }\r\n}\r\n","import {\r\n GetPagedScoresOptions,\r\n LeaderboardApi,\r\n LeaderboardEntry,\r\n PagedScoresResponse,\r\n GetPodiumScoresOptions,\r\n PodiumScoresResponse,\r\n PlayerRankResult,\r\n PlayerRankOptions,\r\n ScoreToken,\r\n SubmitScoreParams,\r\n SubmitScoreResult,\r\n} from './LeaderboardApi'\r\nimport { computeScoreHash } from './utils'\r\n\r\ninterface MockScoreToken {\r\n id: string\r\n expiresAt: number\r\n mode: string\r\n sealingNonce: string | null\r\n used: boolean\r\n}\r\n\r\nexport class MockLeaderboardApi implements LeaderboardApi {\r\n private tokens: Map<string, MockScoreToken> = new Map()\r\n /** Cache of score tokens for automatic hash computation */\r\n private tokenCache: Map<string, ScoreToken> = new Map()\r\n private entriesByMode: Map<string, LeaderboardEntry[]> = new Map()\r\n private tokenCounter = 0\r\n private enableScoreSealing = false\r\n private scoreSealingSecret = 'mock-leaderboard-secret-key'\r\n\r\n constructor(options?: { enableScoreSealing?: boolean; scoreSealingSecret?: string }) {\r\n if (options?.enableScoreSealing) {\r\n this.enableScoreSealing = true\r\n }\r\n if (options?.scoreSealingSecret) {\r\n this.scoreSealingSecret = options.scoreSealingSecret\r\n }\r\n }\r\n\r\n /**\r\n * Configure mock leaderboard settings\r\n *\r\n * @param options - Configuration options\r\n */\r\n configure(options: { enableScoreSealing?: boolean; scoreSealingSecret?: string }): void {\r\n if (typeof options.enableScoreSealing === 'boolean') {\r\n this.enableScoreSealing = options.enableScoreSealing\r\n }\r\n if (options.scoreSealingSecret) {\r\n this.scoreSealingSecret = options.scoreSealingSecret\r\n }\r\n }\r\n\r\n private generateNonce(): string {\r\n return (\r\n Math.random().toString(36).slice(2) +\r\n Math.random().toString(36).slice(2)\r\n ).slice(0, 64)\r\n }\r\n\r\n private getModeKey(mode: string): string {\r\n const normalizedMode = mode || 'default'\r\n return `${normalizedMode}`\r\n }\r\n\r\n private getEntriesForMode(mode: string): LeaderboardEntry[] {\r\n const key = this.getModeKey(mode)\r\n if (!this.entriesByMode.has(key)) {\r\n this.entriesByMode.set(key, [])\r\n }\r\n return this.entriesByMode.get(key)!\r\n }\r\n\r\n /**\r\n * Create a mock score token for testing.\r\n * Token is cached for automatic hash computation if score sealing is enabled.\r\n *\r\n * @param mode - Optional game mode\r\n * @returns Score token with sealing data if enabled\r\n */\r\n async createScoreToken(mode?: string): Promise<ScoreToken> {\r\n const token = `mock_token_${++this.tokenCounter}`\r\n const startTime = Date.now()\r\n const expiresAt = startTime + 3_600_000\r\n const resolvedMode = mode || 'default'\r\n const sealingNonce = this.enableScoreSealing ? this.generateNonce() : null\r\n const sealingSecret = this.enableScoreSealing ? this.scoreSealingSecret : null\r\n\r\n this.tokens.set(token, {\r\n id: token,\r\n expiresAt,\r\n mode: resolvedMode,\r\n sealingNonce,\r\n used: false,\r\n })\r\n\r\n const result = {\r\n token,\r\n startTime,\r\n expiresAt,\r\n sealingNonce,\r\n sealingSecret,\r\n mode: resolvedMode,\r\n }\r\n\r\n // Cache for auto-hash computation\r\n this.tokenCache.set(token, result)\r\n\r\n return result\r\n }\r\n\r\n /**\r\n * Submit a mock score to the leaderboard.\r\n * Automatically computes hash if score sealing is enabled and token was created via createScoreToken().\r\n *\r\n * @param params - Score submission parameters\r\n * @returns Submission result with acceptance status and rank\r\n * @throws Error if token not found in cache or validation fails\r\n */\r\n async submitScore(params: SubmitScoreParams): Promise<SubmitScoreResult> {\r\n let hash: string | undefined\r\n\r\n // Auto-compute hash if token has sealing data\r\n if (params.token) {\r\n const cachedToken = this.tokenCache.get(params.token)\r\n\r\n if (!cachedToken) {\r\n throw new Error(\r\n 'Invalid token: not found in cache. Did you call createScoreToken() first?'\r\n )\r\n }\r\n\r\n if (cachedToken.sealingNonce && cachedToken.sealingSecret) {\r\n hash = await computeScoreHash(\r\n params.score,\r\n params.duration,\r\n params.token,\r\n cachedToken.sealingNonce,\r\n cachedToken.sealingSecret,\r\n )\r\n }\r\n }\r\n\r\n // Simple mode (no token)\r\n if (!params.token) {\r\n const mode = params.mode || 'default';\r\n const submittedAt = Date.now();\r\n \r\n const entry: LeaderboardEntry = {\r\n profileId: `mock_profile`,\r\n username: 'Mock Player',\r\n avatarUrl: null,\r\n score: params.score,\r\n duration: params.duration,\r\n submittedAt,\r\n token: 'simple-mode',\r\n rank: null,\r\n zScore: null,\r\n isAnomaly: false,\r\n trustScore: 50,\r\n metadata: params.metadata ?? null,\r\n isSeed: false,\r\n };\r\n \r\n const modeEntries = this.getEntriesForMode(mode);\r\n modeEntries.push(entry);\r\n modeEntries.sort((a, b) => {\r\n if (b.score !== a.score) return b.score - a.score;\r\n return a.submittedAt - b.submittedAt;\r\n });\r\n \r\n modeEntries.forEach((e, index) => {\r\n modeEntries[index] = { ...e, rank: index + 1 };\r\n });\r\n \r\n const inserted = modeEntries.find((e) => e.submittedAt === submittedAt);\r\n return {\r\n accepted: true,\r\n rank: inserted?.rank ?? null,\r\n };\r\n }\r\n \r\n // Token mode\r\n const scoreToken = this.tokens.get(params.token);\r\n if (!scoreToken) {\r\n throw new Error('Invalid score token');\r\n }\r\n\r\n if (scoreToken.expiresAt < Date.now()) {\r\n throw new Error('Invalid or expired score token');\r\n }\r\n\r\n if (scoreToken.used) {\r\n throw new Error('Score token already used');\r\n }\r\n\r\n if (params.mode && params.mode !== scoreToken.mode) {\r\n throw new Error('Submission mode does not match token mode');\r\n }\r\n\r\n // Verify hash if sealing enabled\r\n if (scoreToken.sealingNonce && !hash) {\r\n throw new Error('Score hash required when score sealing is enabled');\r\n }\r\n\r\n const submittedAt = Date.now();\r\n const entry: LeaderboardEntry = {\r\n profileId: `mock_profile`,\r\n username: 'Mock Player',\r\n avatarUrl: null,\r\n score: params.score,\r\n duration: params.duration,\r\n submittedAt,\r\n token: params.token,\r\n rank: null,\r\n zScore: null,\r\n isAnomaly: false,\r\n trustScore: 50,\r\n metadata: params.metadata ?? null,\r\n isSeed: false,\r\n };\r\n\r\n const modeEntries = this.getEntriesForMode(scoreToken.mode);\r\n modeEntries.push(entry);\r\n modeEntries.sort((a, b) => {\r\n if (b.score !== a.score) return b.score - a.score;\r\n return a.submittedAt - b.submittedAt;\r\n });\r\n\r\n modeEntries.forEach((e, index) => {\r\n modeEntries[index] = { ...e, rank: index + 1 };\r\n });\r\n\r\n scoreToken.used = true;\r\n scoreToken.sealingNonce = null;\r\n\r\n // Clean up cache\r\n this.tokenCache.delete(params.token)\r\n\r\n const inserted = modeEntries.find((e) => e.token === params.token && e.submittedAt === submittedAt);\r\n\r\n return {\r\n accepted: true,\r\n rank: inserted?.rank ?? null,\r\n };\r\n }\r\n\r\n async getPagedScores(options?: GetPagedScoresOptions): Promise<PagedScoresResponse> {\r\n const limit = options?.limit ?? 10\r\n const mode = options?.mode ?? 'default'\r\n const modeEntries = [...this.getEntriesForMode(mode)]\r\n\r\n const entries = modeEntries.slice(0, limit).map((entry) => ({\r\n ...entry,\r\n }))\r\n\r\n return {\r\n variant: 'standard',\r\n entries,\r\n totalEntries: modeEntries.length,\r\n nextCursor: null,\r\n playerRank: null,\r\n periodInstance: options?.period ?? 'alltime',\r\n }\r\n }\r\n\r\n async getMyRank(_options?: PlayerRankOptions): Promise<PlayerRankResult> {\r\n const mode = _options?.mode ?? 'default'\r\n const modeEntries = this.getEntriesForMode(mode)\r\n const playerEntry = modeEntries[0] ?? null\r\n\r\n return {\r\n rank: playerEntry?.rank ?? null,\r\n score: playerEntry?.score,\r\n totalPlayers: modeEntries.length,\r\n percentile: playerEntry\r\n ? Math.max(0, 1 - ((playerEntry.rank ?? 1) - 1) / Math.max(modeEntries.length, 1))\r\n : undefined,\r\n trustScore: 50,\r\n periodInstance: _options?.period ?? 'alltime',\r\n }\r\n }\r\n\r\n async getPodiumScores(options?: GetPodiumScoresOptions): Promise<PodiumScoresResponse> {\r\n const mode = options?.mode ?? 'default'\r\n const modeEntries = [...this.getEntriesForMode(mode)]\r\n\r\n const topCount = Math.max(1, Math.min(options?.topCount ?? 3, 10))\r\n const aheadCount = Math.max(0, Math.min(options?.contextAhead ?? 4, 10))\r\n const behindCount = Math.max(0, Math.min(options?.contextBehind ?? 2, 10))\r\n\r\n const topEntries = modeEntries.slice(0, topCount)\r\n const playerEntry = modeEntries[0] ?? null\r\n const totalEntries = modeEntries.length\r\n\r\n let playerRank = playerEntry?.rank ?? null\r\n let beforePlayer: LeaderboardEntry[] = []\r\n let afterPlayer: LeaderboardEntry[] = []\r\n let totalBefore = playerRank ? playerRank - 1 : 0\r\n let totalAfter = playerRank ? Math.max(totalEntries - playerRank, 0) : 0\r\n let omittedBefore = totalBefore\r\n let omittedAfter = totalAfter\r\n\r\n if (playerRank && playerRank > 0) {\r\n const beforeStart = Math.max(playerRank - aheadCount - 1, 0)\r\n beforePlayer = modeEntries.slice(beforeStart, playerRank - 1)\r\n const afterEnd = Math.min(playerRank + behindCount, totalEntries)\r\n afterPlayer = modeEntries.slice(playerRank, afterEnd)\r\n\r\n const shownTopAhead = topEntries.filter((entry) => (entry.rank ?? 0) > 0 && (entry.rank ?? 0) < playerRank!).length\r\n omittedBefore = Math.max(totalBefore - (beforePlayer.length + shownTopAhead), 0)\r\n omittedAfter = Math.max(totalAfter - afterPlayer.length, 0)\r\n }\r\n\r\n return {\r\n variant: 'highlight',\r\n entries: topEntries,\r\n totalEntries,\r\n nextCursor: null,\r\n playerRank: playerRank ?? null,\r\n periodInstance: options?.period ?? 'alltime',\r\n context: {\r\n topEntries,\r\n beforePlayer,\r\n playerEntry: playerEntry ?? null,\r\n afterPlayer,\r\n totalBefore,\r\n totalAfter,\r\n omittedBefore,\r\n omittedAfter,\r\n },\r\n }\r\n }\r\n}\r\n","import { Host } from '../Host'\r\nimport { VenusAPI } from '../venus-api/types'\r\n\r\nexport * from './LeaderboardApi'\r\nexport { RpcLeaderboardApi } from './RpcLeaderboardApi'\r\nexport { MockLeaderboardApi } from './MockLeaderboardApi'\r\n// HttpLeaderboardApi is intentionally NOT exported here.\r\n// It depends on Firebase (via callRemoteFunction) and should only be imported by SandboxHost.\r\n// This prevents Firebase from being bundled in production builds.\r\nexport * from './utils'\r\n\r\nexport function initializeLeaderboard(venusApiInstance: VenusAPI, host: Host) {\r\n venusApiInstance.leaderboard = host.leaderboard\r\n}\r\n","import { RpcClient } from '../rpc';\r\nimport { VenusMessageId } from '../VenusMessageId';\r\nimport {\r\n QRCodeResult,\r\n ShareLinkResult,\r\n ShareMetadata,\r\n SocialApi,\r\n SocialQRCodeOptions,\r\n} from './SocialApi';\r\n\r\nexport class RpcSocialApi implements SocialApi {\r\n constructor(private readonly rpcClient: RpcClient) {}\r\n\r\n async shareLinkAsync(options: {\r\n launchParams: Record<string, string>;\r\n metadata?: ShareMetadata;\r\n }): Promise<ShareLinkResult> {\r\n const result = (await this.rpcClient.call(VenusMessageId.SHARE_LINK, {\r\n launchParams: options.launchParams,\r\n metadata: options.metadata ?? {},\r\n })) as { shareUrl: string };\r\n\r\n return {\r\n shareUrl: result.shareUrl,\r\n };\r\n }\r\n\r\n async createQRCodeAsync(options: {\r\n launchParams: Record<string, string>;\r\n metadata?: ShareMetadata;\r\n qrOptions?: SocialQRCodeOptions;\r\n }): Promise<QRCodeResult> {\r\n const result = (await this.rpcClient.call(\r\n VenusMessageId.CREATE_SHARE_QRCODE,\r\n {\r\n launchParams: options.launchParams,\r\n metadata: options.metadata ?? {},\r\n qrOptions: options.qrOptions ?? {},\r\n },\r\n )) as { shareUrl: string; qrCode: string };\r\n\r\n return {\r\n shareUrl: result.shareUrl,\r\n qrCode: result.qrCode,\r\n };\r\n }\r\n}\r\n","import {\r\n OnNotificationCallback,\r\n OnRequestCallback,\r\n OnResponseCallback,\r\n RpcNotification,\r\n RpcRequest,\r\n RpcResponse,\r\n RpcTransport,\r\n Subscription,\r\n} from './rpc'\r\nimport { VenusMessageId } from './VenusMessageId'\r\n\r\nexport interface VenusMessage {\r\n type: string\r\n direction: string\r\n data?: {\r\n requestId?: string\r\n success?: boolean\r\n\r\n //NOTE(Zee): Some things send 'value' others send 'data'\r\n value?: any\r\n data?: any\r\n\r\n error?: string\r\n\r\n script?: string\r\n }\r\n instanceId: string\r\n timestamp: number\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n _venusInitState?: {\r\n poolId: string\r\n apiInjected: boolean\r\n gameInitialized: boolean\r\n }\r\n ReactNativeWebView?: {\r\n postMessage(message: string): void\r\n }\r\n venus: {\r\n _config: {\r\n locale: string\r\n instanceId: string\r\n context?: any\r\n profile?: {\r\n id?: string\r\n username?: string\r\n name?: string\r\n displayName?: string\r\n avatarUrl?: string | null\r\n isAnonymous?: boolean\r\n }\r\n environment: {\r\n browserInfo?: {\r\n language: string\r\n }\r\n }\r\n _handlers: Record<string, any>\r\n }\r\n profile?: {\r\n id?: string\r\n username?: string\r\n avatarUrl?: string | null\r\n name?: string\r\n displayName?: string\r\n isAnonymous?: boolean\r\n } | null\r\n _fetchFromCdn: (url: string) => Promise<string>\r\n }\r\n }\r\n}\r\n\r\nexport type OnVenusMessageCallback = (message: VenusMessage) => void\r\n\r\nexport class VenusTransport implements RpcTransport {\r\n private readonly messageHandler: (event: MessageEvent) => void\r\n\r\n private readonly onNotificationCallbacks: OnNotificationCallback[] = []\r\n private readonly onNotificationCallbacksToRemove: OnNotificationCallback[] =\r\n []\r\n\r\n private readonly onVenusMessageCallbacks: OnVenusMessageCallback[] = []\r\n private readonly onResponseCallbacks: OnResponseCallback[] = []\r\n private readonly onResponseCallbacksToRemove: OnResponseCallback[] = []\r\n\r\n private _instanceId: string | null = null\r\n private isStarted: boolean = false\r\n private isProcessingMessage: boolean = false\r\n\r\n constructor() {\r\n this.messageHandler = async (event) => {\r\n this.isProcessingMessage = true\r\n\r\n let message: VenusMessage\r\n if (typeof event.data === 'string') {\r\n //this.log(`Message is a string. Parsing...`)\r\n message = JSON.parse(event.data)\r\n } else {\r\n message = event.data as VenusMessage\r\n }\r\n\r\n if (!message) {\r\n this.logInfo('No message found. Ignoring message...')\r\n return\r\n }\r\n\r\n //this.logInfo(`message received:\\n${JSON.stringify(message, null, 2)}`)\r\n\r\n this.notifyVenusMessageReceived(message)\r\n\r\n if (\r\n message.type === VenusMessageId.PAUSE ||\r\n message.type === VenusMessageId.RESUME ||\r\n message.type === VenusMessageId.AWAKE ||\r\n message.type === VenusMessageId.SLEEP ||\r\n message.type === VenusMessageId.QUIT\r\n ) {\r\n const notification: RpcNotification = {\r\n type: 'rpc-notification',\r\n id: message.type,\r\n payload: message.data,\r\n }\r\n this.handleNotification(notification)\r\n\r\n // NOTE(Zee): This early return is dangerous here. we have to make sure isProcessingMessage is set to false!\r\n this.isProcessingMessage = false\r\n return\r\n }\r\n\r\n const messageData = message.data\r\n if (!messageData) {\r\n this.logWarn('No data found. Ignoring message...')\r\n this.isProcessingMessage = false\r\n return\r\n }\r\n\r\n if (message.type === VenusMessageId.H5_SIMULATION_UPDATE) {\r\n const notification: RpcNotification = {\r\n type: 'rpc-notification',\r\n id: message.type,\r\n payload: message.data,\r\n }\r\n this.handleNotification(notification)\r\n this.isProcessingMessage = false\r\n return\r\n }\r\n\r\n const requestId = messageData.requestId\r\n if (!requestId) {\r\n this.logWarn('No requestId. Ignoring message...')\r\n this.isProcessingMessage = false\r\n return\r\n }\r\n\r\n if (message.type !== VenusMessageId.H5_RESPONSE) {\r\n this.logWarn(`Ignoring unknown message type: ${message.type}`)\r\n this.isProcessingMessage = false\r\n return\r\n }\r\n\r\n const success = messageData.success\r\n let error = undefined\r\n if (!success) {\r\n error = {\r\n message: messageData.error || 'Unknown error',\r\n }\r\n }\r\n\r\n // Result can be either inside value or data\r\n let result = messageData.value\r\n if (result === undefined) {\r\n result = messageData.data\r\n }\r\n\r\n const response: RpcResponse = {\r\n type: 'rpc-response',\r\n id: requestId,\r\n result: result,\r\n method: message.type,\r\n error: error,\r\n }\r\n\r\n await this.handleResponse(response)\r\n this.isProcessingMessage = false\r\n }\r\n }\r\n onNotification(callback: OnNotificationCallback): Subscription {\r\n this.onNotificationCallbacks.push(callback)\r\n return {\r\n unsubscribe: () => {\r\n if (this.isProcessingMessage) {\r\n this.onNotificationCallbacks.push(callback)\r\n } else {\r\n this.removeOnNotificationCallback(callback)\r\n }\r\n },\r\n }\r\n }\r\n\r\n onRequest(callback: OnRequestCallback): Subscription {\r\n throw new Error('Method not implemented.')\r\n }\r\n\r\n onResponse(callback: OnResponseCallback): Subscription {\r\n this.onResponseCallbacks.push(callback)\r\n return {\r\n unsubscribe: () => {\r\n if (this.isProcessingMessage) {\r\n this.onResponseCallbacksToRemove.push(callback)\r\n } else {\r\n this.removeOnResponseCallback(callback)\r\n }\r\n },\r\n }\r\n }\r\n\r\n public get instanceId(): string | null {\r\n return this._instanceId\r\n }\r\n\r\n public set instanceId(instanceId: string) {\r\n this._instanceId = instanceId\r\n }\r\n\r\n sendRequest(request: RpcRequest): void {\r\n const instanceId = this.instanceId || 'unknown'\r\n const method = request.method\r\n const message: VenusMessage = {\r\n type: method,\r\n direction: 'H5_TO_APP',\r\n data: {\r\n ...request.args,\r\n requestId: request.id,\r\n },\r\n instanceId: instanceId,\r\n timestamp: Date.now(),\r\n }\r\n this.sendVenusMessage(message)\r\n }\r\n\r\n sendVenusMessage(message: VenusMessage): void {\r\n const messageAsString = JSON.stringify(message, null, 2)\r\n //this.logInfo(`Sending message:\\n${messageAsString}`)\r\n const reactNativeWebView = window.ReactNativeWebView\r\n if (reactNativeWebView) {\r\n reactNativeWebView.postMessage(messageAsString)\r\n } else {\r\n window.parent.postMessage(messageAsString, '*')\r\n }\r\n }\r\n\r\n sendResponse(response: RpcResponse): void {\r\n throw new Error('Method not implemented.')\r\n }\r\n\r\n start() {\r\n if (this.isStarted) {\r\n return\r\n }\r\n this.isStarted = true\r\n window.addEventListener('message', this.messageHandler, true)\r\n this.logInfo(`Started`)\r\n }\r\n\r\n stop() {\r\n if (!this.isStarted) {\r\n return\r\n }\r\n this.isStarted = false\r\n window.removeEventListener('message', this.messageHandler)\r\n this.logInfo(`Stopped`)\r\n }\r\n\r\n private handleNotification(notification: RpcNotification): void {\r\n //this.logInfo('Notification received: ', notification.id)\r\n for (const callback of this.onNotificationCallbacks) {\r\n callback(notification)\r\n }\r\n\r\n for (const callback of this.onNotificationCallbacksToRemove) {\r\n this.removeOnNotificationCallback(callback)\r\n }\r\n this.onNotificationCallbacksToRemove.length = 0\r\n }\r\n\r\n private async handleResponse(response: RpcResponse): Promise<void> {\r\n for (const callback of this.onResponseCallbacks) {\r\n const consumed = await callback(response)\r\n if (consumed) {\r\n break\r\n }\r\n }\r\n\r\n for (const callback of this.onResponseCallbacksToRemove) {\r\n this.removeOnResponseCallback(callback)\r\n }\r\n this.onResponseCallbacksToRemove.length = 0\r\n }\r\n\r\n private removeOnResponseCallback(callback: OnResponseCallback): void {\r\n this.onResponseCallbacks.splice(\r\n this.onResponseCallbacks.indexOf(callback),\r\n 1,\r\n )\r\n }\r\n\r\n private removeOnNotificationCallback(callback: OnNotificationCallback): void {\r\n this.onNotificationCallbacks.splice(\r\n this.onNotificationCallbacks.indexOf(callback),\r\n 1,\r\n )\r\n }\r\n\r\n private logInfo(message: string, ...params: any[]) {\r\n console.log(`[Venus Transport] ${message}`, ...params)\r\n }\r\n\r\n private logWarn(message: string, ...params: any[]) {\r\n console.warn(`[Venus Transport] ${message}`, ...params)\r\n }\r\n\r\n onVenusMessage(callback: OnVenusMessageCallback): Subscription {\r\n this.onVenusMessageCallbacks.push(callback)\r\n return {\r\n unsubscribe: () => {\r\n this.onVenusMessageCallbacks.splice(\r\n this.onVenusMessageCallbacks.indexOf(callback),\r\n 1,\r\n )\r\n },\r\n }\r\n }\r\n\r\n private notifyVenusMessageReceived(message: VenusMessage) {\r\n for (const callback of this.onVenusMessageCallbacks) {\r\n callback(message)\r\n }\r\n }\r\n}\r\n","import {\r\n Host,\r\n InitializationContext,\r\n SafeArea,\r\n InitializationOptions,\r\n} from './Host.ts'\r\nimport { RpcClient } from './rpc'\r\nimport { VenusTransport } from './VenusTransport.ts'\r\nimport { AnalyticsApi, RpcAnalyticsApi } from './analytics'\r\nimport { AdsApi, RpcAdsApi } from './ads'\r\nimport { RpcStorageApi, StorageApi } from './storage'\r\nimport { VenusMessageId } from './VenusMessageId.ts'\r\nimport { Avatar3dApi, RpcAvatarApi } from './avatar3d'\r\nimport { VenusAPI } from './venus-api/types.ts'\r\nimport { NavigationApi, RpcNavigationApi } from './navigation'\r\nimport { NotificationsApi } from './notifications'\r\nimport { RpcNotificationsApi } from './notifications/RpcNotificationsApi'\r\nimport { PopupsApi, RpcPopupsApi } from './popups'\r\nimport { HostProfileApi, ProfileApi } from './profile'\r\nimport { SystemApi, HostSystemApi } from './system'\r\nimport { HostDeviceApi, DeviceInfo } from './device'\r\nimport { HostEnvironmentApi, EnvironmentInfo } from './environment'\r\nimport { CdnApi, HostCdnApi } from './cdn'\r\nimport { HostTimeApi, TimeApi } from './time'\r\nimport { AiApi, RpcAiApi } from './ai'\r\nimport { HapticsApi, RpcHapticsApi } from './haptics'\r\nimport { FeaturesApi, RpcFeaturesApi } from './features'\r\nimport { LifecycleApi, RpcLifecycleApi } from './lifecycles'\r\nimport { RpcSimulationApi, SimulationApi } from './simulation'\r\nimport { RoomsApi, initializeRoomsApi } from './rooms'\r\nimport { RpcRoomsApi } from './rooms/RpcRoomsApi'\r\nimport { LoggingApi, RpcLoggingApi } from './logging'\r\nimport { IapApi, RpcIapApi } from './iap'\r\nimport { RpcSharedAssetsApi } from './shared-assets'\r\nimport { LeaderboardApi, RpcLeaderboardApi } from './leaderboard'\r\nimport { PreloaderApi, RpcPreloaderApi } from './game-preloader'\r\nimport { SocialApi } from './social/SocialApi'\r\nimport { RpcSocialApi } from './social/RpcSocialApi'\r\n\r\nconst getCdnBaseUrl = (): string => {\r\n return 'https://venus-static-01293ak.web.app/'\r\n}\r\n\r\nexport class RemoteHost implements Host {\r\n readonly ads: AdsApi\r\n readonly analytics: AnalyticsApi\r\n readonly deviceCache: StorageApi\r\n readonly appStorage: StorageApi\r\n readonly globalStorage: StorageApi\r\n readonly avatar3d: Avatar3dApi\r\n readonly navigation: NavigationApi\r\n readonly notifications: NotificationsApi\r\n readonly popups: PopupsApi\r\n readonly profile: ProfileApi\r\n readonly system: SystemApi\r\n readonly cdn: CdnApi\r\n readonly time: TimeApi\r\n readonly ai: AiApi\r\n readonly haptics: HapticsApi\r\n readonly features: FeaturesApi\r\n readonly lifecycle: LifecycleApi\r\n readonly simulation: SimulationApi\r\n readonly rooms: RoomsApi\r\n readonly logging: LoggingApi\r\n readonly iap: IapApi\r\n readonly leaderboard: LeaderboardApi\r\n readonly preloader: PreloaderApi\r\n readonly social: SocialApi\r\n\r\n context?: InitializationContext\r\n\r\n get isInitialized() {\r\n return this._isInitialized\r\n }\r\n\r\n private readonly venusApi: VenusAPI\r\n private readonly rpcClient: RpcClient\r\n private _isInitialized: boolean = false\r\n\r\n constructor(venusApi: VenusAPI) {\r\n this.venusApi = venusApi\r\n const rpcClient = new RpcClient()\r\n this.rpcClient = rpcClient\r\n\r\n this.ads = new RpcAdsApi(rpcClient)\r\n this.analytics = new RpcAnalyticsApi(rpcClient)\r\n this.deviceCache = new RpcStorageApi(rpcClient, {\r\n clear: VenusMessageId.DEVICE_CACHE_CLEAR,\r\n getItem: VenusMessageId.DEVICE_CACHE_GET_ITEM,\r\n getKey: VenusMessageId.DEVICE_CACHE_KEY,\r\n length: VenusMessageId.DEVICE_CACHE_LENGTH,\r\n removeItem: VenusMessageId.DEVICE_CACHE_REMOVE_ITEM,\r\n setItem: VenusMessageId.DEVICE_CACHE_SET_ITEM,\r\n })\r\n this.appStorage = new RpcStorageApi(rpcClient, {\r\n clear: VenusMessageId.APP_STORAGE_CLEAR,\r\n getItem: VenusMessageId.APP_STORAGE_GET_ITEM,\r\n getKey: VenusMessageId.APP_STORAGE_KEY,\r\n length: VenusMessageId.APP_STORAGE_LENGTH,\r\n removeItem: VenusMessageId.APP_STORAGE_REMOVE_ITEM,\r\n setItem: VenusMessageId.APP_STORAGE_SET_ITEM,\r\n getAllItems: VenusMessageId.APP_STORAGE_GET_ALL_ITEMS,\r\n setMultipleItems: VenusMessageId.APP_STORAGE_SET_ITEM,\r\n removeMultipleItems: VenusMessageId.APP_STORAGE_REMOVE_ITEM,\r\n })\r\n this.globalStorage = new RpcStorageApi(rpcClient, {\r\n clear: VenusMessageId.GLOBAL_STORAGE_CLEAR,\r\n getItem: VenusMessageId.GLOBAL_STORAGE_GET_ITEM,\r\n getKey: VenusMessageId.GLOBAL_STORAGE_KEY,\r\n length: VenusMessageId.GLOBAL_STORAGE_LENGTH,\r\n removeItem: VenusMessageId.GLOBAL_STORAGE_REMOVE_ITEM,\r\n setItem: VenusMessageId.GLOBAL_STORAGE_SET_ITEM,\r\n getAllItems: VenusMessageId.GLOBAL_STORAGE_GET_ALL_ITEMS,\r\n setMultipleItems: VenusMessageId.GLOBAL_STORAGE_SET_MULTIPLE_ITEMS,\r\n removeMultipleItems: VenusMessageId.GLOBAL_STORAGE_REMOVE_MULTIPLE_ITEMS,\r\n })\r\n\r\n this.avatar3d = new RpcAvatarApi(rpcClient, venusApi)\r\n this.navigation = new RpcNavigationApi(rpcClient, venusApi)\r\n this.notifications = new RpcNotificationsApi(rpcClient)\r\n this.popups = new RpcPopupsApi(rpcClient)\r\n this.profile = new HostProfileApi(venusApi)\r\n\r\n // Create device and environment APIs and combine into system namespace\r\n const deviceApi = new HostDeviceApi(venusApi)\r\n const environmentApi = new HostEnvironmentApi(venusApi)\r\n this.system = new HostSystemApi(deviceApi, environmentApi, venusApi)\r\n\r\n this.cdn = new HostCdnApi(getCdnBaseUrl())\r\n this.time = new HostTimeApi(rpcClient, venusApi)\r\n this.ai = new RpcAiApi(rpcClient)\r\n this.haptics = new RpcHapticsApi(rpcClient)\r\n this.features = new RpcFeaturesApi(rpcClient)\r\n this.lifecycle = new RpcLifecycleApi(rpcClient)\r\n this.simulation = new RpcSimulationApi(rpcClient)\r\n this.rooms = new RpcRoomsApi(rpcClient)\r\n this.logging = new RpcLoggingApi(this, rpcClient)\r\n this.iap = new RpcIapApi(rpcClient)\r\n this.leaderboard = new RpcLeaderboardApi(rpcClient)\r\n this.preloader = new RpcPreloaderApi(rpcClient)\r\n this.social = new RpcSocialApi(rpcClient)\r\n venusApi.isMock = () => false\r\n this.venusApi.sharedAssets = new RpcSharedAssetsApi(rpcClient, venusApi)\r\n\r\n initializeRoomsApi(this.venusApi, this)\r\n }\r\n\r\n async initialize(\r\n options?: InitializationOptions,\r\n ): Promise<InitializationContext> {\r\n this.log('Initializing Remote Host...')\r\n\r\n const transport = new VenusTransport()\r\n transport.start()\r\n this.rpcClient.start(transport)\r\n\r\n // Set up room notification routing in RpcRoomsApi\r\n const roomsApi = this.rooms as RpcRoomsApi\r\n roomsApi.setupNotifications(transport)\r\n\r\n const response = await this.rpcClient.call<InitResponse>(\r\n VenusMessageId.INIT_SDK,\r\n {},\r\n 5000,\r\n )\r\n\r\n transport.instanceId = response.instanceId\r\n this.log(`Remote Host Initialized with id: ${transport.instanceId}`)\r\n\r\n // Store data on VenusAPI instance (not global window.venus)\r\n // Profile, device, and environment are all required in InitResponse\r\n const profile = response.profile\r\n const sanitizedProfile = {\r\n id: profile.id,\r\n username: profile.username,\r\n avatarUrl: profile.avatarUrl ?? null,\r\n isAnonymous: Boolean(profile.isAnonymous),\r\n }\r\n this.venusApi._profileData = sanitizedProfile\r\n this.venusApi._deviceData = response.device\r\n this.venusApi._environmentData = response.environment\r\n this.venusApi._localeData = response.locale\r\n this.venusApi._languageCodeData = response.languageCode\r\n\r\n this._isInitialized = true\r\n\r\n // Set launchParams directly on VenusAPI instance\r\n this.venusApi.launchParams = response.launchParams\r\n\r\n await this.rpcClient.call(VenusMessageId.READY, {})\r\n\r\n const safeArea = response.safeArea\r\n if (safeArea) {\r\n // Store internally for system.getSafeArea()\r\n this.venusApi._safeAreaData = safeArea\r\n }\r\n\r\n this.context = {\r\n safeArea: safeArea,\r\n initializeAsleep: response.initializeAsleep,\r\n }\r\n\r\n return this.context\r\n }\r\n\r\n private log(message: string) {\r\n console.log(`[Venus SDK] [Remote Host] ${message}`)\r\n }\r\n}\r\n\r\nexport interface InitResponse {\r\n initializeAsleep: boolean\r\n instanceId: string\r\n profile: {\r\n id: string\r\n username: string\r\n avatarUrl?: string | null\r\n isAnonymous?: boolean\r\n }\r\n safeArea?: SafeArea\r\n launchParams: Record<string, string>\r\n environment: EnvironmentInfo\r\n device: DeviceInfo\r\n locale: string\r\n languageCode: string\r\n rooms?: {\r\n gameType?: string\r\n rulesPreset?: string\r\n matchmaking?: Record<string, any>\r\n createOptions?: Record<string, any>\r\n privateMatchDefaults?: Record<string, any>\r\n [key: string]: any\r\n }\r\n}\r\n","import { AnalyticsApi, MockAnalyticsApi } from './analytics'\r\nimport { Host, InitializationContext, InitializationOptions } from './Host.ts'\r\nimport { AdsApi, MockAdsApi } from './ads'\r\nimport { createMockStorageApi, StorageApi } from './storage'\r\nimport { Avatar3dApi, MockAvatarApi } from './avatar3d'\r\nimport { VenusAPI } from './venus-api/types.ts'\r\nimport { MockNavigationApi, NavigationApi } from './navigation'\r\nimport { MockNotificationsApi, NotificationsApi } from './notifications'\r\nimport { MockPopupsApi, PopupsApi } from './popups'\r\nimport { MockProfileApi, ProfileApi } from './profile'\r\nimport { SystemApi, MockSystemApi } from './system'\r\nimport { MockDeviceApi } from './device'\r\nimport { MockEnvironmentApi } from './environment'\r\nimport { CdnApi, MockCdnApi } from './cdn'\r\nimport { MockTimeApi, TimeApi } from './time'\r\nimport { AiApi, MockAiApi } from './ai'\r\nimport { HapticsApi, MockHapticsApi } from './haptics'\r\nimport { FeaturesApi, MockFeaturesApi } from './features'\r\nimport { LifecycleApi, MockLifecycleApi } from './lifecycles'\r\nimport { SimulationApi } from './simulation'\r\nimport { RoomsApi, initializeRoomsApi } from './rooms'\r\nimport { LoggingApi, MockLoggingApi } from './logging'\r\nimport { IapApi, MockIapApi } from './iap'\r\nimport { VenusMessageId } from './VenusMessageId'\r\nimport {\r\n MockOverlay,\r\n OverlayElements,\r\n MockActionSheetItem,\r\n MockActionSheetOptions,\r\n} from './MockOverlay'\r\nimport { MockSharedAssetsApi } from './shared-assets'\r\nimport { LeaderboardApi, MockLeaderboardApi } from './leaderboard'\r\nimport { MockPreloaderApi, PreloaderApi } from './game-preloader'\r\nimport { SocialApi } from './social/SocialApi'\r\nimport { MockSocialApi } from './social/MockSocialApi'\r\n\r\nconst ROOMS_UNAVAILABLE_MESSAGE =\r\n '[Venus SDK] Rooms API is only available when running inside the Venus host environment.'\r\n\r\nfunction createUnavailableRoomsApi(): RoomsApi {\r\n const roomsUnavailableError = (): Error => new Error(ROOMS_UNAVAILABLE_MESSAGE)\r\n\r\n return {\r\n async createRoomAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async joinOrCreateRoomAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async joinRoomByCodeAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async getUserRoomsAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async subscribeAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async updateRoomDataAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async getRoomDataAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async sendRoomMessageAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async leaveRoomAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async kickPlayerAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async startRoomGameAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async proposeMoveAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async validateMoveAsync(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n }\r\n}\r\n\r\nconst SIMULATION_UNAVAILABLE_MESSAGE =\r\n '[Venus SDK] Simulation API is only available when running inside the Venus host environment.'\r\n\r\nfunction createUnavailableSimulationApi(): SimulationApi {\r\n const simulationUnavailableError = (): Error => new Error(SIMULATION_UNAVAILABLE_MESSAGE)\r\n\r\n return {\r\n isEnabled(): boolean {\r\n return false\r\n },\r\n async getStateAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getConfigAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async executeRecipeAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getActiveRunsAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async collectRecipeAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async executeScopedRecipeAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async triggerRecipeChainAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getAvailableRecipesAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getRecipeRequirementsAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getBatchRecipeRequirementsAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async resolveFieldValueAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getEntityMetadataAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getSlotContainersAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getSlotAssignmentsAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async assignItemToSlotAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async removeItemFromSlotAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async getAvailableItemsAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async calculatePowerPreviewAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async validateSlotAssignmentAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async executeBatchOperationsAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n async subscribeAsync(): Promise<never> {\r\n throw simulationUnavailableError()\r\n },\r\n }\r\n}\r\n\r\nenum MockHostState {\r\n PLAYING,\r\n PAUSED,\r\n SLEEPING,\r\n TERMINATED,\r\n}\r\n\r\nexport class MockHost implements Host {\r\n readonly ads: AdsApi\r\n readonly analytics: AnalyticsApi\r\n readonly deviceCache: StorageApi\r\n readonly appStorage: StorageApi\r\n readonly globalStorage: StorageApi\r\n readonly avatar3d: Avatar3dApi\r\n readonly navigation: NavigationApi\r\n readonly notifications: NotificationsApi\r\n readonly popups: PopupsApi\r\n readonly profile: ProfileApi\r\n readonly system: SystemApi\r\n readonly cdn: CdnApi\r\n readonly time: TimeApi\r\n readonly ai: AiApi\r\n readonly haptics: HapticsApi\r\n readonly features: FeaturesApi\r\n readonly lifecycle: LifecycleApi\r\n readonly simulation: SimulationApi\r\n readonly rooms: RoomsApi\r\n readonly logging: LoggingApi\r\n readonly iap: IapApi\r\n readonly leaderboard: LeaderboardApi\r\n readonly preloader: PreloaderApi\r\n readonly social: SocialApi\r\n\r\n context?: InitializationContext\r\n\r\n private state: MockHostState = MockHostState.PLAYING\r\n\r\n get isInitialized() {\r\n return this._isInitialized\r\n }\r\n\r\n private readonly venusApi: VenusAPI\r\n private _isInitialized: boolean = false\r\n private readonly _overlay: MockOverlay\r\n\r\n private readonly _mockLifecyclesApi: MockLifecycleApi\r\n private readonly _mockAdsApi: MockAdsApi\r\n\r\n constructor(venusApi: VenusAPI) {\r\n this.venusApi = venusApi\r\n this._overlay = this.createOverlay()\r\n this._mockAdsApi = new MockAdsApi(this._overlay)\r\n this._mockLifecyclesApi = new MockLifecycleApi()\r\n\r\n this.ads = this._mockAdsApi\r\n this.analytics = new MockAnalyticsApi()\r\n\r\n // Use local mock implementations (no backend connection)\r\n const appUrl = typeof window !== 'undefined' ? window.location.href : ''\r\n this.deviceCache = createMockStorageApi('deviceCache', appUrl)\r\n this.appStorage = createMockStorageApi('appStorage', appUrl)\r\n this.globalStorage = createMockStorageApi('globalStorage')\r\n this.simulation = createUnavailableSimulationApi()\r\n this.rooms = createUnavailableRoomsApi()\r\n this.leaderboard = new MockLeaderboardApi()\r\n\r\n this.avatar3d = new MockAvatarApi(venusApi)\r\n this.navigation = new MockNavigationApi(venusApi)\r\n this.notifications = new MockNotificationsApi(venusApi)\r\n this.popups = new MockPopupsApi(this._overlay)\r\n this.profile = new MockProfileApi(venusApi)\r\n\r\n // Create device and environment APIs and combine into system namespace\r\n const deviceApi = new MockDeviceApi(venusApi)\r\n const environmentApi = new MockEnvironmentApi(venusApi)\r\n this.system = new MockSystemApi(deviceApi, environmentApi, venusApi)\r\n\r\n // MockCdnApi reads configuration from venusApi._mock at runtime\r\n this.cdn = new MockCdnApi(venusApi)\r\n this.time = new MockTimeApi(venusApi)\r\n this.ai = new MockAiApi()\r\n this.haptics = new MockHapticsApi(venusApi)\r\n this.features = new MockFeaturesApi()\r\n this.lifecycle = this._mockLifecyclesApi\r\n this.logging = new MockLoggingApi()\r\n this.iap = new MockIapApi()\r\n this.social = new MockSocialApi()\r\n\r\n initializeRoomsApi(this.venusApi, this)\r\n\r\n this.preloader = new MockPreloaderApi()\r\n venusApi.isMock = () => true\r\n this.venusApi.sharedAssets = new MockSharedAssetsApi(this.venusApi)\r\n }\r\n\r\n initialize(options?: InitializationOptions): Promise<InitializationContext> {\r\n this._isInitialized = true\r\n\r\n // Populate system data on VenusAPI instance (same as RemoteHost)\r\n this.venusApi._profileData = this.profile.getCurrentProfile()\r\n this.venusApi._deviceData = this.system.getDevice()\r\n this.venusApi._environmentData = this.system.getEnvironment()\r\n \r\n // Populate locale data (added for ph-strip-sdk-config-static-data branch)\r\n this.venusApi._localeData = this.venusApi._mock?.locale || 'en-US'\r\n this.venusApi._languageCodeData = this.venusApi._mock?.languageCode || 'en'\r\n\r\n this.context = {\r\n initializeAsleep: false,\r\n safeArea: this.venusApi._safeAreaData,\r\n }\r\n\r\n return Promise.resolve(this.context)\r\n }\r\n\r\n private createOverlay(): MockOverlay {\r\n // Create overlay container\r\n const overlayContainer = document.createElement('div')\r\n overlayContainer.id = 'venus-mock-overlay'\r\n overlayContainer.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 10000;\r\n `\r\n document.body.appendChild(overlayContainer)\r\n\r\n // Create close button with hardcoded position\r\n const menuButton = this.createOverlayButton(\r\n 'close',\r\n 'Menu',\r\n { x: window.innerWidth - 48, y: 16, width: 32, height: 32 },\r\n () => {\r\n this.handleMenuButtonClicked()\r\n },\r\n 'rgba(59, 130, 246, 0.7)', // Blue background instead of black\r\n '#FFFFFF',\r\n )\r\n overlayContainer.appendChild(menuButton)\r\n\r\n // Setup ad overlay container\r\n const adOverlay = this.setupAdOverlay()\r\n\r\n // Setup action sheet overlay container\r\n const actionSheet = this.setupActionSheetOverlay()\r\n\r\n // Handle window resize\r\n window.addEventListener('resize', () => {\r\n this.updateOverlayLayout()\r\n })\r\n\r\n return {\r\n container: overlayContainer,\r\n elements: {\r\n menuButton: menuButton,\r\n },\r\n appVisibilityState: 'visible',\r\n actionSheetOverlay: actionSheet,\r\n adOverlay: adOverlay,\r\n showAdOverlay: () => {\r\n return this.showAdOverlay('REWARDED VIDEO AD')\r\n },\r\n showActionSheet: (items, options) => {\r\n return this.showActionSheetOverlay(items, options)\r\n },\r\n }\r\n }\r\n\r\n private async handleMenuButtonClicked() {\r\n\r\n if (this.state === MockHostState.PLAYING) {\r\n this.triggerLifecycleEvent(VenusMessageId.PAUSE)\r\n this.state = MockHostState.PAUSED\r\n }\r\n\r\n const actionSheetItems: MockActionSheetItem[] = []\r\n\r\n const awakeAction: MockActionSheetItem = {\r\n label: '⏰ Awake',\r\n id: 'awakeAction',\r\n }\r\n\r\n const sleepAction: MockActionSheetItem = {\r\n label: '💤 Sleep',\r\n id: 'sleepAction',\r\n }\r\n\r\n const quitAction: MockActionSheetItem = {\r\n label: '🛑 Quit',\r\n id: 'quitAction',\r\n }\r\n\r\n const playAction: MockActionSheetItem = {\r\n label: '▶️ Play',\r\n id: 'playAction',\r\n }\r\n\r\n if (this.state === MockHostState.PAUSED) {\r\n // Only add sleep action if we are paused\r\n actionSheetItems.push(sleepAction)\r\n } else if (this.state === MockHostState.SLEEPING) {\r\n // Only add awake action if we are sleeping\r\n actionSheetItems.push(awakeAction)\r\n }\r\n\r\n if (this.state !== MockHostState.TERMINATED) {\r\n // Add quit action if the game has not been terminated yet\r\n actionSheetItems.push(quitAction)\r\n } else if (this.state === MockHostState.TERMINATED) {\r\n // Add play action only if the game is terminated\r\n actionSheetItems.push(playAction)\r\n }\r\n\r\n const action = await this.showActionSheetOverlay(actionSheetItems)\r\n\r\n if (action === awakeAction.id) {\r\n this.tryAwake()\r\n } else if (action === sleepAction.id) {\r\n this.trySleep()\r\n } else if (action === playAction.id) {\r\n this.tryPlay()\r\n } else if (action === quitAction.id) {\r\n this.tryQuit()\r\n } else {\r\n this.tryResume()\r\n }\r\n }\r\n\r\n private tryAwake() {\r\n if (this.state === MockHostState.SLEEPING) {\r\n this.triggerLifecycleEvent(VenusMessageId.AWAKE)\r\n this.state = MockHostState.PAUSED\r\n }\r\n }\r\n\r\n private trySleep() {\r\n if (this.state === MockHostState.PAUSED) {\r\n this.triggerLifecycleEvent(VenusMessageId.SLEEP)\r\n this.state = MockHostState.SLEEPING\r\n }\r\n }\r\n\r\n private tryPlay() {\r\n if (this.state === MockHostState.TERMINATED) {\r\n this.triggerLifecycleEvent(VenusMessageId.AWAKE)\r\n this.state = MockHostState.PAUSED\r\n this.triggerLifecycleEvent(VenusMessageId.RESUME)\r\n this.state = MockHostState.PLAYING\r\n }\r\n }\r\n\r\n private tryQuit() {\r\n if (this.state === MockHostState.PLAYING) {\r\n this.triggerLifecycleEvent(VenusMessageId.PAUSE)\r\n this.state = MockHostState.PAUSED\r\n }\r\n\r\n if (this.state === MockHostState.PAUSED) {\r\n this.triggerLifecycleEvent(VenusMessageId.SLEEP)\r\n this.state = MockHostState.SLEEPING\r\n }\r\n\r\n if (this.state === MockHostState.SLEEPING){\r\n this.triggerLifecycleEvent(VenusMessageId.QUIT)\r\n this.state = MockHostState.TERMINATED\r\n }\r\n }\r\n\r\n private tryResume() {\r\n if (this.state === MockHostState.PAUSED) {\r\n this.triggerLifecycleEvent(VenusMessageId.RESUME)\r\n this.state = MockHostState.PLAYING\r\n }\r\n }\r\n\r\n private async showAdOverlay(type: any): Promise<boolean> {\r\n return new Promise((resolve, reject) => {\r\n const overlay = this._overlay\r\n const adOverlay = overlay.adOverlay\r\n\r\n // Clear any existing content\r\n overlay.adOverlay.innerHTML = ''\r\n\r\n // Add ad type heading\r\n const heading = document.createElement('h1')\r\n heading.style.cssText = `\r\n font-size: 24px;\r\n margin-bottom: 20px;\r\n text-align: center;\r\n `\r\n heading.innerText =\r\n type === 'interstitial' ? 'INTERSTITIAL AD' : 'REWARDED VIDEO AD'\r\n overlay.adOverlay.appendChild(heading)\r\n\r\n // Add mock ad content\r\n const content = document.createElement('div')\r\n content.style.cssText = `\r\n width: 300px;\r\n height: 250px;\r\n background-color: #1e40af;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-bottom: 20px;\r\n border-radius: 8px;\r\n `\r\n content.innerText = 'Mock Ad Content'\r\n adOverlay.appendChild(content)\r\n\r\n // Add timer text\r\n const timer = document.createElement('p')\r\n timer.style.cssText = `\r\n margin-bottom: 20px;\r\n font-size: 16px;\r\n `\r\n timer.innerText = 'Normally ads would have a timer...'\r\n adOverlay.appendChild(timer)\r\n\r\n // Add OK button\r\n const okButton = document.createElement('button')\r\n okButton.style.cssText = `\r\n padding: 10px 40px;\r\n background-color: #2563eb;\r\n color: white;\r\n border: none;\r\n border-radius: 4px;\r\n font-size: 16px;\r\n cursor: pointer;\r\n `\r\n okButton.innerText = 'Close Ad'\r\n adOverlay.appendChild(okButton)\r\n\r\n // Show the overlay\r\n adOverlay.style.display = 'flex'\r\n\r\n okButton.onclick = () => {\r\n this.hideAdOverlay()\r\n resolve(true)\r\n }\r\n })\r\n }\r\n\r\n private hideAdOverlay() {\r\n const overlay = this._overlay\r\n if (overlay.adOverlay) {\r\n overlay.adOverlay.style.display = 'none'\r\n }\r\n }\r\n\r\n private setupActionSheetOverlay() {\r\n const actionSheetOverlay = document.createElement('div')\r\n actionSheetOverlay.id = 'venus-action-sheet-overlay'\r\n actionSheetOverlay.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 10600;\r\n font-family: sans-serif;\r\n display: none;\r\n `\r\n document.body.appendChild(actionSheetOverlay)\r\n return actionSheetOverlay\r\n }\r\n\r\n private createOverlayButton(\r\n id: string,\r\n text: string,\r\n position: { x: number; y: number; width: number; height: number },\r\n onClick: () => void,\r\n background: string,\r\n color: string,\r\n ) {\r\n const button = document.createElement('button')\r\n button.id = `venus-mock-${id}-button`\r\n button.innerText = text\r\n button.style.cssText = `\r\n position: absolute;\r\n left: ${position.x}px;\r\n top: ${position.y}px;\r\n width: ${position.width}px;\r\n min-width: ${position.width}px;\r\n height: ${position.height}px;\r\n background: ${background};\r\n color: ${color};\r\n border: none;\r\n border-radius: 8px;\r\n font-family: sans-serif;\r\n font-weight: bold;\r\n font-size: ${Math.min(position.width, position.height) / 3}px;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0.9;\r\n transition: opacity 0.2s;\r\n `\r\n button.addEventListener('click', onClick)\r\n button.addEventListener('mouseover', () => {\r\n button.style.opacity = '1'\r\n })\r\n button.addEventListener('mouseout', () => {\r\n button.style.opacity = '0.9'\r\n })\r\n\r\n return button\r\n }\r\n\r\n private updateOverlayLayout() {\r\n const overlay = this._overlay\r\n const menuBtn = overlay.elements.menuButton\r\n\r\n menuBtn.style.left = `${window.innerWidth - 48}px`\r\n menuBtn.style.top = '16px'\r\n menuBtn.style.width = '32px'\r\n menuBtn.style.minWidth = '32px'\r\n menuBtn.style.height = '32px'\r\n }\r\n\r\n private triggerLifecycleEvent(name: string) {\r\n console.log('Trigger Lifecycle Event: ', name)\r\n\r\n if (name == VenusMessageId.PAUSE) {\r\n this._mockLifecyclesApi.triggerPauseCallbacks()\r\n } else if (name == VenusMessageId.RESUME) {\r\n this._mockLifecyclesApi.triggerResumeCallbacks()\r\n } else if (name == VenusMessageId.QUIT) {\r\n this._mockLifecyclesApi.triggerQuitCallbacks()\r\n } else if (name == VenusMessageId.AWAKE) {\r\n this._mockLifecyclesApi.triggerAwakeCallbacks()\r\n } else if (name == VenusMessageId.SLEEP) {\r\n this._mockLifecyclesApi.triggerSleepCallbacks()\r\n }\r\n }\r\n\r\n private setOverlayElementVisibility(\r\n element: keyof OverlayElements,\r\n visible: boolean,\r\n ) {\r\n const overlay = this._overlay\r\n const elements = overlay.elements\r\n if (elements[element]) {\r\n elements[element].style.display = visible ? 'flex' : 'none'\r\n }\r\n }\r\n\r\n private setupAdOverlay() {\r\n const adOverlay = document.createElement('div')\r\n adOverlay.id = 'venus-ad-overlay'\r\n adOverlay.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(37, 99, 235, 0.9);\r\n color: white;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 10500;\r\n font-family: sans-serif;\r\n display: none;\r\n `\r\n document.body.appendChild(adOverlay)\r\n return adOverlay\r\n }\r\n\r\n private log(msg: string, ...args: any[]) {\r\n console.log(`[Venus Mock] ${msg}`, ...args)\r\n }\r\n\r\n private showActionSheetOverlay(\r\n items: MockActionSheetItem[],\r\n options?: MockActionSheetOptions,\r\n ): Promise<string | number | null> {\r\n this.log('Showing ActionSheetOverlay...')\r\n\r\n return new Promise((resolve, reject) => {\r\n const overlay = this._overlay\r\n // Clear any existing content and event listeners\r\n overlay.actionSheetOverlay.innerHTML = ''\r\n overlay.actionSheetOverlay.style.display = 'flex'\r\n\r\n // Create action sheet container\r\n const actionSheet = document.createElement('div')\r\n actionSheet.className = 'venus-action-sheet'\r\n actionSheet.style.cssText = `\r\n background-color: white;\r\n border-radius: 8px;\r\n width: 80%;\r\n max-width: 400px;\r\n max-height: 80%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n color: black;\r\n `\r\n\r\n // Add title if provided\r\n if (options?.title) {\r\n const titleContainer = document.createElement('div')\r\n titleContainer.style.cssText = `\r\n padding: 16px;\r\n border-bottom: 1px solid #eaeaea;\r\n font-weight: bold;\r\n font-size: 18px;\r\n text-align: center;\r\n color: black;\r\n `\r\n titleContainer.innerText = options.title\r\n actionSheet.appendChild(titleContainer)\r\n }\r\n\r\n // Add message if provided\r\n if (options?.message) {\r\n const messageContainer = document.createElement('div')\r\n messageContainer.style.cssText = `\r\n padding: 8px 16px;\r\n color: #666;\r\n font-size: 14px;\r\n text-align: center;\r\n `\r\n messageContainer.innerText = options.message\r\n actionSheet.appendChild(messageContainer)\r\n }\r\n\r\n // Add options\r\n const optionsContainer = document.createElement('div')\r\n optionsContainer.style.cssText = `\r\n overflow-y: auto;\r\n max-height: 300px;\r\n `\r\n\r\n items.forEach((item, index) => {\r\n const optionItem = document.createElement('div')\r\n optionItem.style.cssText = `\r\n padding: 12px 16px;\r\n border-bottom: 1px solid #eaeaea;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n transition: background-color 0.2s;\r\n color: black;\r\n `\r\n\r\n // Add hover effect\r\n optionItem.addEventListener('mouseover', () => {\r\n optionItem.style.backgroundColor = '#f5f5f5'\r\n })\r\n\r\n optionItem.addEventListener('mouseout', () => {\r\n optionItem.style.backgroundColor = 'white'\r\n })\r\n\r\n // Add icon if provided\r\n if (item.icon) {\r\n const iconSpan = document.createElement('span')\r\n iconSpan.style.cssText = `\r\n margin-right: 12px;\r\n font-size: 16px;\r\n `\r\n iconSpan.innerText = item.icon\r\n optionItem.appendChild(iconSpan)\r\n }\r\n\r\n // Add label\r\n const labelSpan = document.createElement('span')\r\n labelSpan.style.cssText = `\r\n color: black;\r\n `\r\n labelSpan.innerText = item.label\r\n optionItem.appendChild(labelSpan)\r\n\r\n // Handle click\r\n optionItem.addEventListener('click', () => {\r\n this.hideActionSheetOverlay()\r\n const optionId = item.id !== undefined ? item.id : index\r\n resolve(optionId)\r\n })\r\n\r\n optionsContainer.appendChild(optionItem)\r\n })\r\n\r\n actionSheet.appendChild(optionsContainer)\r\n\r\n // Add cancel button only if cancel is not disabled\r\n if (!options?.disableCancel) {\r\n const cancelButton = document.createElement('div')\r\n cancelButton.style.cssText = `\r\n padding: 14px 16px;\r\n text-align: center;\r\n font-weight: bold;\r\n cursor: pointer;\r\n color: #3b82f6;\r\n border-top: 1px solid #eaeaea;\r\n `\r\n cancelButton.innerText = options?.cancelButtonText || 'Cancel'\r\n cancelButton.addEventListener('click', () => {\r\n this.hideActionSheetOverlay()\r\n resolve(null)\r\n })\r\n\r\n actionSheet.appendChild(cancelButton)\r\n }\r\n\r\n // Add close button (X) in the top-right corner only if cancel is not disabled\r\n if (!options?.disableCancel) {\r\n const closeButton = document.createElement('div')\r\n closeButton.style.cssText = `\r\n position: absolute;\r\n top: 8px;\r\n right: 8px;\r\n width: 24px;\r\n height: 24px;\r\n border-radius: 12px;\r\n background-color: rgba(0,0,0,0.1);\r\n color: #666;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n font-size: 14px;\r\n `\r\n closeButton.innerText = '✕'\r\n closeButton.addEventListener('click', () => {\r\n this.hideActionSheetOverlay()\r\n resolve(null)\r\n })\r\n\r\n actionSheet.appendChild(closeButton)\r\n overlay.actionSheetOverlay.appendChild(actionSheet)\r\n }\r\n })\r\n }\r\n\r\n hideActionSheetOverlay() {\r\n const overlay = this._overlay\r\n if (overlay.actionSheetOverlay) {\r\n overlay.actionSheetOverlay.style.display = 'none'\r\n }\r\n }\r\n}\r\n","/// <reference types=\"vite/client\" />\r\nimport { MockHost } from './MockHost.ts'\r\nimport { RemoteHost } from './RemoteHost.ts'\r\nimport { isSandboxEnabled } from './config/sandbox'\r\nimport { AnalyticsApi } from './analytics'\r\nimport { AdsApi } from './ads'\r\nimport { StorageApi } from './storage'\r\nimport { Avatar3dApi } from './avatar3d'\r\nimport { VenusAPI } from './venus-api/types.ts'\r\nimport { NavigationApi } from './navigation'\r\nimport { NotificationsApi } from './notifications'\r\nimport { PopupsApi } from './popups'\r\nimport { ProfileApi } from './profile'\r\nimport { SystemApi } from './system'\r\nimport { CdnApi } from './cdn'\r\nimport { TimeApi } from './time'\r\nimport { AiApi } from './ai'\r\nimport { HapticsApi } from './haptics'\r\nimport { FeaturesApi } from './features'\r\nimport { LifecycleApi } from './lifecycles'\r\nimport { SimulationApi } from './simulation'\r\nimport { RoomsApi } from './rooms'\r\nimport { LoggingApi } from './logging'\r\nimport { IapApi } from './iap'\r\nimport { LeaderboardApi } from './leaderboard'\r\nimport { PreloaderApi } from './game-preloader'\r\nimport { SocialApi } from './social'\r\n\r\n/**\r\n * Safe area insets representing padding needed to avoid device notches and host UI.\r\n * Includes toolbar/feedHeader height + device safe areas.\r\n */\r\nexport interface SafeArea {\r\n left: number\r\n top: number\r\n right: number\r\n bottom: number\r\n}\r\n\r\n/**\r\n * @deprecated Use SafeArea instead. Will be removed in v4.0.0\r\n */\r\nexport type HudInsets = SafeArea\r\n\r\nexport interface InitializationOptions {\r\n helpText?: string\r\n hardDisableMock?: boolean\r\n mock?: Record<string, any>\r\n usePreloader?: boolean\r\n}\r\n\r\nexport interface InitializationContext {\r\n /**\r\n * Safe area insets from INIT_SDK response.\r\n * @deprecated Use VenusAPI.system.getSafeArea() instead. Will be removed in v4.0.0\r\n */\r\n safeArea?: SafeArea\r\n initializeAsleep: boolean\r\n}\r\n\r\nexport interface Host {\r\n readonly ads: AdsApi\r\n readonly analytics: AnalyticsApi\r\n readonly deviceCache: StorageApi\r\n readonly appStorage: StorageApi\r\n readonly globalStorage: StorageApi\r\n readonly avatar3d: Avatar3dApi\r\n readonly navigation: NavigationApi\r\n readonly notifications: NotificationsApi\r\n readonly popups: PopupsApi\r\n readonly profile: ProfileApi\r\n readonly system: SystemApi\r\n readonly cdn: CdnApi\r\n readonly time: TimeApi\r\n readonly ai: AiApi\r\n readonly haptics: HapticsApi\r\n readonly features: FeaturesApi\r\n readonly lifecycle: LifecycleApi\r\n readonly simulation: SimulationApi\r\n readonly rooms: RoomsApi\r\n readonly logging: LoggingApi\r\n readonly leaderboard: LeaderboardApi\r\n readonly preloader: PreloaderApi\r\n readonly social: SocialApi\r\n readonly isInitialized: boolean\r\n readonly iap: IapApi\r\n\r\n readonly context?: InitializationContext\r\n\r\n initialize(options?: InitializationOptions): Promise<InitializationContext>\r\n}\r\n\r\n/**\r\n * Create a Host instance based on the runtime environment.\r\n *\r\n * ## Why SandboxHost uses dynamic import\r\n *\r\n * SandboxHost depends on Firebase (~200KB+ gzipped) for authentication and\r\n * Firestore. This is ONLY needed during local development when using the\r\n * Venus sandbox mode (connecting to real Firebase backend via Vite dev server).\r\n *\r\n * In production builds (H5 games deployed to Venus app):\r\n * - `window.__VENUS_SANDBOX__` is never set (Vite plugin only runs in dev)\r\n * - `isSandboxEnabled()` returns false\r\n * - SandboxHost is never instantiated\r\n *\r\n * Using a static import like `import { SandboxHost } from './SandboxHost.ts'`\r\n * would cause Rollup/Vite to bundle SandboxHost AND all its dependencies\r\n * (including Firebase) into the production bundle, even though they're unused.\r\n *\r\n * Dynamic import (`await import('./SandboxHost.ts')`) tells the bundler to\r\n * code-split SandboxHost into a separate chunk that's only loaded at runtime\r\n * when the condition is true. In production, this chunk is never loaded.\r\n *\r\n * This keeps production bundles small (~200KB+ smaller) and faster to load.\r\n */\r\nexport async function createHost(venusApi: VenusAPI, isMock: boolean): Promise<Host> {\r\n if (isMock) {\r\n // Browser-based development\r\n //\r\n // We use import.meta.env.DEV to enable dead code elimination in production.\r\n // Vite/Rollup replaces import.meta.env.DEV with `false` during production builds,\r\n // allowing the bundler to completely remove this entire branch - including the\r\n // dynamic import statement. This means the SandboxHost chunk (with Firebase)\r\n // is never even created in the production bundle.\r\n //\r\n // Without import.meta.env.DEV, the bundler would create a separate chunk for\r\n // SandboxHost+Firebase that's included in the build but never loaded at runtime.\r\n // With import.meta.env.DEV, the chunk doesn't exist at all in production.\r\n if (import.meta.env?.DEV && isSandboxEnabled()) {\r\n // Dynamic import: creates a separate chunk for SandboxHost + Firebase.\r\n // This chunk is only created in dev builds and loaded when sandbox is active.\r\n const { SandboxHost } = await import('./SandboxHost.ts')\r\n return new SandboxHost(venusApi)\r\n }\r\n // Pure mock mode: local mocks only, no backend\r\n return new MockHost(venusApi)\r\n } else {\r\n // Running inside Venus native app\r\n return new RemoteHost(venusApi)\r\n }\r\n}\r\n","import { Host } from '../Host';\r\nimport { VenusAPI } from '../venus-api/types';\r\n\r\nexport * from './SocialApi';\r\nexport * from './RpcSocialApi';\r\nexport * from './MockSocialApi';\r\n\r\nexport function initializeSocial(venusApi: VenusAPI, host: Host): void {\r\n venusApi.social = host.social;\r\n\r\n // Provide getter method for launch parameters\r\n venusApi.getLaunchParams = () => {\r\n return venusApi.launchParams || {};\r\n };\r\n}\r\n"]}