@series-inc/venus-sdk 3.0.2 → 3.0.3

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/rooms/VenusRoom.ts","../src/rooms/RoomsApi.ts","../src/rooms/index.ts","../src/VenusMessageId.ts","../src/ads/RpcAdsApi.ts","../src/ads/MockAdsApi.ts","../src/ads/index.ts","../src/ai/RpcAiApi.ts","../src/ai/MockAiApi.ts","../src/ai/index.ts","../src/analytics/MockAnalyticsApi.ts","../src/analytics/RpcAnalyticsApi.ts","../src/analytics/index.ts","../src/avatar3d/MockAvatarApi.ts","../src/avatar3d/RpcAvatarApi.ts","../src/avatar3d/index.ts","../src/cdn/HostCdnApi.ts","../src/cdn/MockCdnApi.ts","../src/cdn/index.ts","../src/features/RpcFeaturesApi.ts","../src/features/MockFeaturesApi.ts","../src/features/index.ts","../src/haptics/HapticsApi.ts","../src/haptics/RpcHapticsApi.ts","../src/haptics/MockHapticsApi.ts","../src/haptics/index.ts","../src/iap/RpcIapApi.ts","../src/iap/MockCurrencyIcon.ts","../src/iap/MockIapApi.ts","../src/iap/index.ts","../src/lifecycles/MockLifecycleApi.ts","../src/lifecycles/RpcLifecycleApi.ts","../src/lifecycles/index.ts","../src/logging/MockLoggingApi.ts","../src/logging/RpcLoggingApi.ts","../src/logging/index.ts","../src/navigation/MockNavigationApi.ts","../src/navigation/RpcNavigationApi.ts","../src/navigation/index.ts","../src/notifications/MockNotificationsApi.ts","../src/notifications/RpcNotificationsApi.ts","../src/notifications/index.ts","../src/popups/RpcPopupsApi.ts","../src/popups/MockPopupsApi.ts","../src/popups/index.ts","../src/profile/HostProfileApi.ts","../src/profile/MockProfileApi.ts","../src/profile/index.ts","../src/rpc/RpcClient.ts","../src/storage/MockStorageApi.ts","../src/storage/RpcStorageApi.ts","../src/storage/index.ts","../src/simulation/utils.ts","../src/simulation/RpcSimulationApi.ts","../src/simulation/MockSimulationApi.ts","../src/simulation/index.ts","../src/time/utils.ts","../src/time/HostTimeApi.ts","../src/time/MockTimeApi.ts","../src/time/index.ts","../src/version.ts","../src/shared-assets/consts.ts","../src/shared-assets/RpcSharedAssetsApi.ts","../src/shared-assets/MockSharedAssetsApi.ts","../src/leaderboard/RpcLeaderboardApi.ts","../src/leaderboard/MockLeaderboardApi.ts","../src/leaderboard/index.ts","../src/game-preloader/MockPreloaderApi.ts","../src/game-preloader/RpcPreloaderApi.ts","../src/game-preloader/index.ts","../src/post/MockPostApi.ts","../src/post/RpcPostApi.ts","../src/post/index.ts","../src/social/MockSocialApi.ts","../src/social/RpcSocialApi.ts","../src/VenusTransport.ts","../src/RemoteHost.ts","../src/rooms/RpcRoomsApi.ts","../src/MockHost.ts","../src/Host.ts","../src/social/index.ts"],"names":["VenusMessageId","selectedAsset","HapticFeedbackStyle","generateAppIdentifier","setupRoomNotifications"],"mappings":"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","file":"chunk-JO6V5EXF.mjs","sourcesContent":["export class VenusRoom {\r\n public readonly id: string\r\n public name: string\r\n public players: any[]\r\n public maxPlayers: number\r\n public gameType: string\r\n public appId: string\r\n public type: any\r\n public createdBy: string\r\n public createdAt: number\r\n public updatedAt: number\r\n public isPrivate: boolean\r\n public currentPlayers: string[]\r\n public status: any\r\n public customMetadata: Record<string, any>\r\n public admins: string[]\r\n public roomCode: string\r\n public description: string\r\n public data: Record<string, any>\r\n public version: string\r\n\r\n private _subscriptions = new Map()\r\n\r\n constructor(roomData: any) {\r\n this.id = roomData.id\r\n this.name = roomData.name\r\n this.players = roomData.currentPlayers || []\r\n this.maxPlayers = roomData.maxPlayers\r\n this.gameType = roomData.gameType\r\n\r\n this.appId = roomData.appId\r\n this.type = roomData.type\r\n this.createdBy = roomData.createdBy\r\n this.createdAt = roomData.createdAt\r\n this.updatedAt = roomData.updatedAt\r\n this.isPrivate = roomData.isPrivate\r\n this.currentPlayers = roomData.currentPlayers || []\r\n this.status = roomData.status\r\n this.customMetadata = roomData.customMetadata || {}\r\n this.admins = roomData.admins || []\r\n this.roomCode = roomData.roomCode\r\n this.description = roomData.description\r\n this.data = roomData.data || {}\r\n this.version = roomData.version\r\n\r\n console.log(`VenusRoom: Created room object for ${this.id}`, {\r\n hasCustomMetadata: !!this.customMetadata,\r\n hasGameState: !!this.customMetadata?.rules?.gameState,\r\n gamePhase: this.customMetadata?.rules?.gameState?.phase,\r\n currentPlayer: this.customMetadata?.rules?.gameState?.currentPlayer,\r\n })\r\n }\r\n\r\n private updateFromRoomData(newRoomData: any) {\r\n if (newRoomData.id === this.id) {\r\n // Update all room properties with fresh data\r\n this.name = newRoomData.name || this.name\r\n this.players = newRoomData.currentPlayers || this.players\r\n this.maxPlayers = newRoomData.maxPlayers || this.maxPlayers\r\n this.gameType = newRoomData.gameType || this.gameType\r\n this.currentPlayers = newRoomData.currentPlayers || this.currentPlayers\r\n this.customMetadata = newRoomData.customMetadata || this.customMetadata\r\n this.data = newRoomData.data || this.data\r\n this.status = newRoomData.status || this.status\r\n this.updatedAt = newRoomData.updatedAt || this.updatedAt\r\n\r\n console.log(`VenusRoom: Updated room object ${this.id} with fresh data`, {\r\n hasCustomMetadata: !!this.customMetadata,\r\n hasGameState: !!this.customMetadata?.rules?.gameState,\r\n gamePhase: this.customMetadata?.rules?.gameState?.phase,\r\n currentPlayer: this.customMetadata?.rules?.gameState?.currentPlayer,\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import { VenusRoom } from './VenusRoom'\r\n\r\nexport interface CreateRoomOptions {\r\n maxPlayers?: number\r\n gameType?: string\r\n isPrivate?: boolean\r\n roomCode?: string\r\n name?: string\r\n description?: string\r\n customMetadata?: Record<string, any>\r\n}\r\n\r\nexport interface JoinOrCreateResult {\r\n action: 'created' | 'joined'\r\n room: VenusRoom\r\n playersJoined: number\r\n}\r\n\r\nexport interface RoomSubscriptionOptions {\r\n onData?: (roomData: any) => void\r\n onMessages?: (messagePayload: any) => void\r\n onMoves?: (movePayload: any) => void\r\n onGameEvents?: (eventPayload: any) => void\r\n}\r\n\r\nexport interface ProposeMovePayload {\r\n gameSpecificState: any\r\n moveType: string\r\n clientContext?: Record<string, any>\r\n clientProposalId?: string\r\n}\r\n\r\nexport interface ProposeMoveResult {\r\n proposedMoveId: string\r\n}\r\n\r\nexport interface ValidateMoveResult {\r\n success: boolean\r\n moveId: string\r\n isValid: boolean\r\n reason?: string | null\r\n}\r\n\r\nexport interface RoomsApi {\r\n // Core matchmaking (internal names, bound to clean namespace)\r\n createRoom(options: CreateRoomOptions): Promise<VenusRoom>\r\n joinOrCreateRoom(options: CreateRoomOptions): Promise<JoinOrCreateResult>\r\n joinRoomByCode?(roomCode: string): Promise<VenusRoom>\r\n getUserRooms?(includeArchived?: boolean): Promise<VenusRoom[]>\r\n\r\n // Subscriptions\r\n subscribe?(\r\n room: VenusRoom,\r\n options: RoomSubscriptionOptions,\r\n ): (() => void) | { unsubscribe(): void }\r\n\r\n // Room instance methods\r\n updateData?(room: VenusRoom, updates: Record<string, any>, merge?: boolean): Promise<any>\r\n getData?(room: VenusRoom): Promise<any>\r\n sendMessage?(room: VenusRoom, messageData: any): Promise<string>\r\n leave?(room: VenusRoom): Promise<any>\r\n startGame?(room: VenusRoom, gameConfig?: Record<string, any>, turnOrder?: string[] | null): Promise<any>\r\n proposeMove?(room: VenusRoom, proposalPayload: ProposeMovePayload): Promise<ProposeMoveResult>\r\n validateMove?(\r\n room: VenusRoom,\r\n moveId: string,\r\n isValid: boolean,\r\n reason?: string | null,\r\n validatorId?: string | null,\r\n ): Promise<ValidateMoveResult>\r\n}\r\n","import { VenusAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\nimport { RoomsApi } from './RoomsApi'\r\nimport { VenusTransport, VenusMessage } from '../VenusTransport'\r\nimport { Subscription } from '../rpc'\r\n\r\nexport * from './RoomsApi'\r\nexport { VenusRoom } from './VenusRoom'\r\n\r\ntype MutableVenusApi = VenusAPI & Record<string, any>\r\ntype MutableRoomsApi = RoomsApi & Record<string, any>\r\n\r\n// Type definitions for room notification payloads\r\ninterface RoomDataUpdatedPayload {\r\n roomId: string\r\n roomData: any\r\n timestamp?: number\r\n}\r\n\r\ninterface RoomMessagePayload {\r\n roomId: string\r\n message: any\r\n}\r\n\r\ninterface ProposedMoveValidationPayload {\r\n roomId: string\r\n proposedMoveData: any\r\n proposedMoveId?: string\r\n changeType?: string\r\n timestamp?: number\r\n}\r\n\r\nfunction bindMethod(\r\n target: Record<string, any>,\r\n targetKey: string,\r\n source: MutableRoomsApi,\r\n sourceKey?: string,\r\n) {\r\n const key = sourceKey ?? targetKey\r\n const fn = source?.[key]\r\n if (typeof fn === 'function') {\r\n target[targetKey] = fn.bind(source)\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * Set up room notification listeners using the transport's onVenusMessage hook.\r\n * This routes host-sent room notifications (H5_ROOM_DATA_UPDATED, etc.) to the\r\n * callbacks registered in the RoomsApi instance.\r\n * @param transport The Venus transport to listen for messages\r\n * @param getSubscriptions Function to retrieve subscription state from RoomsApi\r\n */\r\nexport function setupRoomNotifications(\r\n transport: VenusTransport,\r\n getSubscriptions: () => any,\r\n): Subscription {\r\n console.log('[Venus Rooms] Setting up room notification listeners')\r\n \r\n return transport.onVenusMessage((message: VenusMessage) => {\r\n const subscriptions = getSubscriptions()\r\n if (!subscriptions) {\r\n return\r\n }\r\n\r\n // Route H5_ROOM_DATA_UPDATED notifications to data callbacks\r\n if (message.type === 'H5_ROOM_DATA_UPDATED') {\r\n const messageData = message.data as RoomDataUpdatedPayload\r\n const { roomId, roomData } = messageData\r\n if (!roomId) return\r\n\r\n const callbacks = subscriptions.data?.[roomId] || []\r\n const allEventsCallbacks = subscriptions.allEvents?.[roomId] || []\r\n console.log(`[Venus Rooms] 🔔 Room data updated for ${roomId}, notifying ${callbacks.length} callbacks`, roomData)\r\n \r\n callbacks.forEach((callback: (data: any) => void) => {\r\n try {\r\n callback(roomData)\r\n } catch (error) {\r\n console.error('[Venus Rooms] Error in room data callback:', error)\r\n throw error // Fail loudly - rethrow after logging\r\n }\r\n })\r\n\r\n // Also notify allEvents listeners\r\n allEventsCallbacks.forEach((callback: (payload: any) => void) => {\r\n try {\r\n callback({ type: message.type, ...messageData })\r\n } catch (error) {\r\n console.error('[Venus Rooms] Error in allEvents callback:', error)\r\n throw error\r\n }\r\n })\r\n }\r\n\r\n // Route H5_ROOM_MESSAGE_* notifications to message callbacks\r\n if (\r\n message.type === 'H5_ROOM_MESSAGE_RECEIVED' ||\r\n message.type === 'H5_ROOM_MESSAGE_UPDATED' ||\r\n message.type === 'H5_ROOM_MESSAGE_DELETED'\r\n ) {\r\n const messageData = message.data as RoomMessagePayload\r\n const { roomId } = messageData\r\n if (!roomId) return\r\n\r\n const callbacks = subscriptions.messages?.[roomId] || []\r\n const allEventsCallbacks = subscriptions.allEvents?.[roomId] || []\r\n console.log(`[Venus Rooms] 🔔 Room message event for ${roomId}, notifying ${callbacks.length} callbacks`)\r\n \r\n // Forward full payload to preserve messageId for deletes and other metadata\r\n callbacks.forEach((callback: (payload: any) => void) => {\r\n try {\r\n callback(messageData)\r\n } catch (error) {\r\n console.error('[Venus Rooms] Error in room message callback:', error)\r\n throw error // Fail loudly - rethrow after logging\r\n }\r\n })\r\n\r\n // Also notify allEvents listeners\r\n allEventsCallbacks.forEach((callback: (payload: any) => void) => {\r\n try {\r\n callback({ type: message.type, ...messageData })\r\n } catch (error) {\r\n console.error('[Venus Rooms] Error in allEvents callback:', error)\r\n throw error\r\n }\r\n })\r\n }\r\n\r\n // Route H5_PROPOSED_MOVE_VALIDATION_UPDATED to game event callbacks\r\n if (message.type === 'app:h5:proposedMoveValidationUpdated') {\r\n const messageData = message.data as ProposedMoveValidationPayload\r\n const { roomId } = messageData\r\n if (!roomId) return\r\n\r\n const callbacks = subscriptions.gameEvents?.[roomId] || []\r\n const allEventsCallbacks = subscriptions.allEvents?.[roomId] || []\r\n console.log(`[Venus Rooms] 🔔 Proposed move validation updated for ${roomId}, notifying ${callbacks.length} callbacks`)\r\n \r\n // Forward full payload to preserve proposedMoveId, changeType, timestamp\r\n callbacks.forEach((callback: (payload: any) => void) => {\r\n try {\r\n callback(messageData)\r\n } catch (error) {\r\n console.error('[Venus Rooms] Error in game event callback:', error)\r\n throw error // Fail loudly - rethrow after logging\r\n }\r\n })\r\n\r\n // Also notify allEvents listeners\r\n allEventsCallbacks.forEach((callback: (payload: any) => void) => {\r\n try {\r\n callback({ type: message.type, ...messageData })\r\n } catch (error) {\r\n console.error('[Venus Rooms] Error in allEvents callback:', error)\r\n throw error\r\n }\r\n })\r\n }\r\n })\r\n}\r\n\r\nexport function initializeRoomsApi(venusApi: VenusAPI, host: Host) {\r\n const roomsApi = host?.rooms as MutableRoomsApi | undefined\r\n if (!roomsApi) {\r\n console.warn(\r\n '[Venus SDK] Host did not provide a rooms implementation. Rooms API will be unavailable.',\r\n )\r\n return\r\n }\r\n\r\n const venus = venusApi as MutableVenusApi\r\n const existingNamespace = (venus.rooms || {}) as Record<string, any>\r\n const roomsNamespace: Record<string, any> = Object.assign({}, existingNamespace)\r\n\r\n const namespaceBindings: Array<[string, string?]> = [\r\n ['create', 'createRoom'],\r\n ['joinOrCreate', 'joinOrCreateRoom'],\r\n ['joinByCode', 'joinRoomByCode'],\r\n ['list', 'getUserRooms'],\r\n ['subscribeToRoom', 'subscribe'],\r\n ['updateRoomData', 'updateData'],\r\n ['getRoomData', 'getData'],\r\n ['sendRoomMessage', 'sendMessage'],\r\n ['leaveRoom', 'leave'],\r\n ['startRoomGame', 'startGame'],\r\n ['proposeMove'],\r\n ['validateMove'],\r\n ]\r\n\r\n namespaceBindings.forEach(([targetKey, sourceKey]) => {\r\n bindMethod(roomsNamespace, targetKey, roomsApi, sourceKey)\r\n })\r\n\r\n venus.rooms = roomsNamespace as any\r\n}\r\n","export enum VenusMessageId {\r\n H5_RESPONSE = 'H5_RESPONSE',\r\n\r\n // Ads\r\n IS_REWARDED_AD_READY = 'H5_IS_REWARDED_AD_READY',\r\n SHOW_REWARDED_AD = 'H5_SHOW_REWARDED_AD',\r\n\r\n // Analytics\r\n LOG_ANALYTICS_EVENT = 'H5_LOG_ANALYTICS_EVENT',\r\n TRACK_FUNNEL_STEP = 'H5_TRACK_FUNNEL_STEP',\r\n\r\n // Device Cache operations (renamed from Local Storage)\r\n DEVICE_CACHE_GET_ITEM = 'H5_DEVICE_CACHE_GET_ITEM',\r\n DEVICE_CACHE_SET_ITEM = 'H5_DEVICE_CACHE_SET_ITEM',\r\n DEVICE_CACHE_REMOVE_ITEM = 'H5_DEVICE_CACHE_REMOVE_ITEM',\r\n DEVICE_CACHE_CLEAR = 'H5_DEVICE_CACHE_CLEAR',\r\n DEVICE_CACHE_KEY = 'H5_DEVICE_CACHE_KEY',\r\n DEVICE_CACHE_LENGTH = 'H5_DEVICE_CACHE_LENGTH',\r\n\r\n // App Storage operations (NEW - cloud-synced)\r\n APP_STORAGE_GET_ITEM = 'H5_APP_STORAGE_GET_ITEM',\r\n APP_STORAGE_SET_ITEM = 'H5_APP_STORAGE_SET_ITEM',\r\n APP_STORAGE_REMOVE_ITEM = 'H5_APP_STORAGE_REMOVE_ITEM',\r\n APP_STORAGE_CLEAR = 'H5_APP_STORAGE_CLEAR',\r\n APP_STORAGE_KEY = 'H5_APP_STORAGE_KEY',\r\n APP_STORAGE_LENGTH = 'H5_APP_STORAGE_LENGTH',\r\n APP_STORAGE_GET_ALL_ITEMS = 'H5_APP_STORAGE_GET_ALL_ITEMS',\r\n APP_STORAGE_SET_MULTIPLE_ITEMS = 'H5_APP_STORAGE_SET_MULTIPLE_ITEMS',\r\n APP_STORAGE_REMOVE_MULTIPLE_ITEMS = 'H5_APP_STORAGE_REMOVE_MULTIPLE_ITEMS',\r\n\r\n // Global Storage operations (NEW - cloud-synced, cross-app)\r\n GLOBAL_STORAGE_GET_ITEM = 'H5_GLOBAL_STORAGE_GET_ITEM',\r\n GLOBAL_STORAGE_SET_ITEM = 'H5_GLOBAL_STORAGE_SET_ITEM',\r\n GLOBAL_STORAGE_REMOVE_ITEM = 'H5_GLOBAL_STORAGE_REMOVE_ITEM',\r\n GLOBAL_STORAGE_CLEAR = 'H5_GLOBAL_STORAGE_CLEAR',\r\n GLOBAL_STORAGE_KEY = 'H5_GLOBAL_STORAGE_KEY',\r\n GLOBAL_STORAGE_LENGTH = 'H5_GLOBAL_STORAGE_LENGTH',\r\n GLOBAL_STORAGE_GET_ALL_ITEMS = 'H5_GLOBAL_STORAGE_GET_ALL_ITEMS',\r\n GLOBAL_STORAGE_SET_MULTIPLE_ITEMS = 'H5_GLOBAL_STORAGE_SET_MULTIPLE_ITEMS',\r\n GLOBAL_STORAGE_REMOVE_MULTIPLE_ITEMS = 'H5_GLOBAL_STORAGE_REMOVE_MULTIPLE_ITEMS',\r\n\r\n // Avatar3d operations\r\n AVATAR3D_LOAD = 'H5_AVATAR3D_LOAD',\r\n AVATAR3D_SAVE = 'H5_AVATAR3D_SAVE',\r\n AVATAR3D_DELETE = 'H5_AVATAR3D_DELETE',\r\n\r\n // Stack navigation operations\r\n H5_STACK_PUSH_REQUEST = 'H5_STACK_PUSH_REQUEST',\r\n H5_STACK_POP_REQUEST = 'H5_STACK_POP_REQUEST',\r\n\r\n // Local notifications\r\n SCHEDULE_LOCAL_NOTIFICATION = 'H5_SCHEDULE_LOCAL_NOTIFICATION',\r\n CANCEL_LOCAL_NOTIFICATION = 'H5_CANCEL_LOCAL_NOTIFICATION',\r\n GET_ALL_SCHEDULED_LOCAL_NOTIFICATIONS = 'H5_GET_ALL_SCHEDULED_LOCAL_NOTIFICATIONS',\r\n IS_LOCAL_NOTIFICATIONS_ENABLED = 'H5_IS_LOCAL_NOTIFICATIONS_ENABLED',\r\n SET_LOCAL_NOTIFICATIONS_ENABLED = 'H5_SET_LOCAL_NOTIFICATIONS_ENABLED',\r\n\r\n // UI requests\r\n TOAST = 'H5_TOAST',\r\n ALERT_DIALOG = 'H5_ALERT_DIALOG',\r\n CONFIRM_DIALOG = 'H5_CONFIRM_DIALOG',\r\n ACTION_SHEET_SHOW = 'H5_ACTION_SHEET_SHOW',\r\n\r\n // Utils operations\r\n REQUEST_SERVER_TIME = 'H5_REQUEST_SERVER_TIME',\r\n\r\n // Post interaction operations\r\n GET_POST_INTERACTIONS = 'H5_GET_POST_INTERACTIONS',\r\n TOGGLE_LIKE = 'H5_TOGGLE_LIKE',\r\n OPEN_COMMENTS = 'H5_OPEN_COMMENTS', // For opening comments with callback support\r\n TOGGLE_FOLLOW = 'H5_TOGGLE_FOLLOW',\r\n\r\n // Social distribution\r\n SHARE_LINK = 'H5_SHARE_LINK',\r\n CREATE_SHARE_QRCODE = 'H5_CREATE_SHARE_QRCODE',\r\n\r\n // AI requests\r\n AI_CHAT_COMPLETION = 'H5_AI_CHAT_COMPLETION',\r\n AI_GET_AVAILABLE_MODELS = 'H5_AI_GET_AVAILABLE_MODELS',\r\n\r\n // Haptic feedback\r\n TRIGGER_HAPTIC = 'H5_TRIGGER_HAPTIC',\r\n\r\n DEBUG = 'H5_DEBUG',\r\n\r\n // IAP\r\n // these are probably not going to be the endpoints\r\n H5_IAP_GET_WALLET = 'H5_IAP_GET_WALLET',\r\n H5_IAP_SPEND_CURRENCY = 'H5_IAP_SPEND_CURRENCY',\r\n SHOW_INTERSTITIAL_AD = 'H5_SHOW_INTERSTITIAL_AD',\r\n\r\n // IAP Notifications (from parent to H5)\r\n IAP_SPEND_CURRENCY_COMPLETE = 'IAP_SPEND_CURRENCY_COMPLETE',\r\n IAP_WALLET_UPDATE = 'IAP_WALLET_UPDATE',\r\n\r\n // Lifecycle messages\r\n READY = 'READY',\r\n INIT_SDK = 'INITIALIZE_SDK',\r\n PAUSE = 'PAUSE',\r\n RESUME = 'RESUME',\r\n AWAKE = 'AWAKE',\r\n SLEEP = 'SLEEP',\r\n QUIT = 'QUIT',\r\n\r\n // ab testing\r\n /** given the experiment name, returns the entire experiment object as configured for the current user */\r\n GET_EXPERIMENT = 'H5_GET_EXPERIMENT',\r\n /** returns the boolean value for a feature flag using the statsig parameter store, or the feature flags constants as fallback */\r\n GET_FEATURE_FLAG = 'H5_GET_FEATURE_FLAG',\r\n /** returns the gate value (boolean) for a given feature gate for the current user */\r\n GET_FEATURE_GATE = 'H5_GET_FEATURE_GATE',\r\n\r\n // Simulations\r\n\r\n // Recipe\r\n H5_SIMULATION_EXECUTE_RECIPE = 'H5_SIMULATION_EXECUTE_RECIPE',\r\n H5_SIMULATION_GET_ACTIVE_RUNS = 'H5_SIMULATION_GET_ACTIVE_RUNS',\r\n H5_SIMULATION_COLLECT_RECIPE = 'H5_SIMULATION_COLLECT_RECIPE',\r\n H5_SIMULATION_EXECUTE_SCOPED_RECIPE = 'H5_SIMULATION_EXECUTE_SCOPED_RECIPE',\r\n H5_SIMULATION_GET_AVAILABLE_RECIPES = 'H5_SIMULATION_GET_AVAILABLE_RECIPES',\r\n H5_SIMULATION_GET_RECIPE_REQUIREMENTS = 'H5_SIMULATION_GET_RECIPE_REQUIREMENTS',\r\n H5_SIMULATION_GET_BATCH_RECIPE_REQUIREMENTS = 'H5_SIMULATION_GET_BATCH_RECIPE_REQUIREMENTS',\r\n H5_SIMULATION_TRIGGER_RECIPE_CHAIN = 'H5_SIMULATION_TRIGGER_RECIPE_CHAIN',\r\n\r\n H5_SIMULATION_RESOLVE_VALUE = 'H5_SIMULATION_RESOLVE_VALUE',\r\n H5_SIMULATION_GET_ENTITY_METADATA = 'H5_SIMULATION_GET_ENTITY_METADATA',\r\n\r\n H5_SIMULATION_GET_STATE = 'H5_SIMULATION_GET_STATE',\r\n H5_SIMULATION_GET_CONFIG = 'H5_SIMULATION_GET_CONFIG',\r\n\r\n H5_SIMULATION_GET_CONTAINERS = 'H5_SIMULATION_GET_CONTAINERS',\r\n H5_SIMULATION_GET_ASSIGNMENTS = 'H5_SIMULATION_GET_ASSIGNMENTS',\r\n H5_SIMULATION_ASSIGN_ITEM = 'H5_SIMULATION_ASSIGN_ITEM',\r\n H5_SIMULATION_REMOVE_ITEM = 'H5_SIMULATION_REMOVE_ITEM',\r\n H5_SIMULATION_CALCULATE_POWER_PREVIEW = 'H5_SIMULATION_CALCULATE_POWER_PREVIEW',\r\n H5_SIMULATION_GET_AVAILABLE_ITEMS = 'H5_SIMULATION_GET_AVAILABLE_ITEMS',\r\n\r\n H5_SIMULATION_VALIDATE_ASSIGNMENT = 'H5_SIMULATION_VALIDATE_ASSIGNMENT',\r\n H5_SIMULATION_BATCH_OPERATIONS = 'H5_SIMULATION_BATCH_OPERATIONS',\r\n\r\n // Leaderboard operations\r\n H5_LEADERBOARD_START_RUN = 'H5_LEADERBOARD_START_RUN',\r\n H5_LEADERBOARD_SUBMIT_SCORE = 'H5_LEADERBOARD_SUBMIT_SCORE',\r\n H5_LEADERBOARD_GET = 'H5_LEADERBOARD_GET',\r\n H5_LEADERBOARD_GET_HIGHLIGHT = 'H5_LEADERBOARD_GET_HIGHLIGHT',\r\n H5_LEADERBOARD_GET_PLAYER_STATS = 'H5_LEADERBOARD_GET_PLAYER_STATS',\r\n\r\n // H5 Room operations (Stage 1)\r\n H5_ROOM_CREATE = 'H5_ROOM_CREATE',\r\n H5_ROOM_JOIN = 'H5_ROOM_JOIN',\r\n H5_ROOM_JOIN_OR_CREATE = 'H5_ROOM_JOIN_OR_CREATE',\r\n H5_ROOM_LEAVE = 'H5_ROOM_LEAVE',\r\n H5_ROOM_UPDATE_DATA = 'H5_ROOM_UPDATE_DATA',\r\n H5_ROOM_GET_DATA = 'H5_ROOM_GET_DATA',\r\n H5_ROOM_SUBSCRIBE = 'H5_ROOM_SUBSCRIBE',\r\n H5_ROOM_UNSUBSCRIBE = 'H5_ROOM_UNSUBSCRIBE',\r\n H5_ROOM_SEND_MESSAGE = 'H5_ROOM_SEND_MESSAGE',\r\n H5_ROOM_GET_MESSAGES = 'H5_ROOM_GET_MESSAGES',\r\n H5_ROOM_LIST_ROOMS = 'H5_ROOM_LIST_ROOMS',\r\n H5_ROOM_LIST_PUBLIC = 'H5_ROOM_LIST_PUBLIC',\r\n H5_ROOM_SEARCH = 'H5_ROOM_SEARCH',\r\n H5_ROOM_JOIN_BY_CODE = 'H5_ROOM_JOIN_BY_CODE',\r\n H5_ROOM_GET_USER_ROOMS = 'H5_ROOM_GET_USER_ROOMS',\r\n H5_ROOM_GET_PLAYERS = 'H5_ROOM_GET_PLAYERS',\r\n H5_ROOM_UPDATE_PLAYER_DATA = 'H5_ROOM_UPDATE_PLAYER_DATA',\r\n H5_ROOM_START_GAME = 'H5_ROOM_START_GAME',\r\n H5_ROOM_PROPOSE_MOVE = 'h5:room:proposeMove',\r\n H5_ROOM_END_GAME = 'H5_ROOM_END_GAME',\r\n H5_ROOM_ELIMINATE_PLAYER = 'H5_ROOM_ELIMINATE_PLAYER',\r\n H5_ROOM_PROMOTE_TO_SPECTATOR = 'H5_ROOM_PROMOTE_TO_SPECTATOR',\r\n\r\n // Embedded Assets\r\n H5_LOAD_EMBEDDED_ASSET = 'H5_LOAD_EMBEDDED_ASSET',\r\n\r\n //Preloader operations\r\n H5_SHOW_LOAD_SCREEN = 'H5_SHOW_LOAD_SCREEN',\r\n H5_HIDE_LOAD_SCREEN = 'H5_HIDE_LOAD_SCREEN',\r\n H5_SET_LOADER_TEXT = 'H5_SET_LOADER_TEXT',\r\n H5_SET_LOADER_PROGRESS = 'H5_SET_LOADER_PROGRESS',\r\n H5_IAP_OPEN_STORE = \"H5_IAP_OPEN_STORE\",\r\n H5_IAP_GET_CURRENCY_ICON = \"H5_IAP_GET_CURRENCY_ICON\",\r\n}\r\n","import { AdsApi, ShowInterstitialAdOptions, ShowRewardedAdOptions } from './AdsApi.ts'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId.ts'\r\n\r\nexport class RpcAdsApi implements AdsApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async showInterstitialAd(options?: ShowInterstitialAdOptions): Promise<boolean> {\r\n console.log(`[Venus SDK] [RpcAdsApi] showInterstitialAd`)\r\n const response = await this.rpcClient.call<ShowInterstitialAdResponse>(\r\n VenusMessageId.SHOW_INTERSTITIAL_AD,\r\n options || {},\r\n -1,\r\n )\r\n return response.shown\r\n }\r\n\r\n async isRewardedAdReadyAsync(): Promise<boolean> {\r\n console.log(`[Venus SDK] [RpcAdsApi] isRewardedAdReadyAsync`)\r\n const response = await this.rpcClient.call<IsRewardedAdReadyResponse>(\r\n VenusMessageId.IS_REWARDED_AD_READY,\r\n )\r\n return response.ready\r\n }\r\n\r\n async showRewardedAdAsync(options?: ShowRewardedAdOptions): Promise<boolean> {\r\n console.log('[Venus SDK] [RpcAdsApi] showRewardedAdAsync')\r\n const result = await this.rpcClient.call<ShowRewardedAdResponse>(\r\n VenusMessageId.SHOW_REWARDED_AD,\r\n options || {},\r\n -1,\r\n )\r\n const resultAsString = JSON.stringify(result, null, 2)\r\n console.log(\r\n `[Venus SDK] [RpcAdsApi] rewarded ad shown with result as JSON:\\n${resultAsString}`,\r\n )\r\n return result.rewardEarned\r\n }\r\n}\r\n\r\ninterface IsRewardedAdReadyResponse {\r\n ready: boolean\r\n adType: 'rewarded'\r\n}\r\n\r\ninterface ShowInterstitialAdResponse {\r\n shown: boolean\r\n adType: 'interstitial'\r\n}\r\n\r\ninterface ShowRewardedAdResponse {\r\n shown: boolean\r\n adType: string\r\n rewardEarned: boolean\r\n}\r\n","import { AdsApi, ShowInterstitialAdOptions, ShowRewardedAdOptions } from './AdsApi.ts'\r\nimport { createMockDelay, MOCK_DELAYS } from '../venus-api/systems/core'\r\nimport { MockOverlay } from '../MockOverlay'\r\n\r\nexport class MockAdsApi implements AdsApi {\r\n private mockOverlay: MockOverlay\r\n\r\n constructor(mockOverlay: MockOverlay) {\r\n this.mockOverlay = mockOverlay\r\n }\r\n\r\n async isRewardedAdReadyAsync(): Promise<boolean> {\r\n this.log('[MockAdsApi] isRewardedAdReadyAsync called')\r\n await createMockDelay(MOCK_DELAYS.short)\r\n return true\r\n }\r\n\r\n async showRewardedAdAsync(options?: ShowRewardedAdOptions): Promise<boolean> {\r\n this.log('[MockAdsApi] showRewardedAdAsync called')\r\n await this.mockOverlay.showAdOverlay(options)\r\n this.log('[MockAdsApi] Rewarded ad completed')\r\n return true\r\n }\r\n\r\n async showInterstitialAd(options?: ShowInterstitialAdOptions): Promise<boolean> {\r\n this.log(`[MockAdsApi] showInterstitialAd`)\r\n await this.mockOverlay.showAdOverlay(options)\r\n this.log('[MockAdsApi] interstitial ad shown')\r\n return true\r\n }\r\n\r\n private log(message: string, ...args: any[]): void {\r\n console.log(`[Venus SDK] ${message}`, ...args)\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types.ts'\nimport { Host } from '../Host.ts'\n\nexport * from './AdsApi.ts'\nexport * from './RpcAdsApi'\nexport * from './MockAdsApi'\n\n// Initialize ads functionality on a VenusAPI instance\nexport function initializeAds(venusApiInstance: VenusAPI, host: Host) {\n // Legacy\n venusApiInstance.isRewardedAdReadyAsync =\n host.ads.isRewardedAdReadyAsync.bind(host.ads)\n venusApiInstance.showRewardedAdAsync = host.ads.showRewardedAdAsync.bind(\n host.ads,\n )\n\n venusApiInstance.ads = host.ads\n}\n","import { AiApi, AiChatCompletionRequest, AiChatCompletionData } from './AiApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\n\r\nexport class RpcAiApi implements AiApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async requestChatCompletionAsync(\r\n request: AiChatCompletionRequest,\r\n ): Promise<AiChatCompletionData> {\r\n const response = await this.rpcClient.call<AiChatCompletionData>(\r\n VenusMessageId.AI_CHAT_COMPLETION,\r\n {\r\n request: (() => {\r\n const { apiKey, ...requestWithoutApiKey } = request\r\n return requestWithoutApiKey\r\n })(),\r\n },\r\n )\r\n // Return direct response data\r\n return response\r\n }\r\n\r\n async getAvailableCompletionModels(): Promise<Array<string>> {\r\n const response = await this.rpcClient.call<Array<string>>(\r\n VenusMessageId.AI_GET_AVAILABLE_MODELS,\r\n )\r\n return response\r\n }\r\n}\r\n","import { AiApi, AiChatCompletionData, AiChatCompletionRequest } from './AiApi'\r\n\r\nexport class MockAiApi implements AiApi {\r\n async requestChatCompletionAsync(\r\n request: AiChatCompletionRequest,\r\n ): Promise<AiChatCompletionData> {\r\n const { apiKey, ...requestBody } = request\r\n \r\n if (!apiKey) {\r\n throw new Error('An API key is required for a chat completion request when developing locally.')\r\n }\r\n\r\n const response = await fetch('https://series.ullm.rho.live/api/v1/completions', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`,\r\n },\r\n body: JSON.stringify(requestBody),\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`)\r\n }\r\n\r\n const data: AiChatCompletionData = await response.json()\r\n return data\r\n }\r\n\r\n async getAvailableCompletionModels(): Promise<Array<string>> {\r\n const response = await fetch('https://series.ullm.rho.live/api/v1/models', {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`)\r\n }\r\n\r\n const data: Array<string> = await response.json()\r\n return data\r\n }\r\n}\r\n","import { Host } from '../Host'\r\nimport { VenusAPI } from '../venus-api/types'\r\nimport { AiChatCompletionRequest } from './AiApi'\r\n\r\nexport * from './AiApi'\r\nexport * from './RpcAiApi'\r\nexport * from './MockAiApi'\r\n\r\nexport function initializeAi(venusApi: VenusAPI, host: Host) {\r\n venusApi.ai = host.ai\r\n}\r\n","import { AnalyticsApi } from './AnalyticsApi.ts'\r\nimport { createMockDelay, MOCK_DELAYS } from '../venus-api/systems/core'\r\n\r\nexport class MockAnalyticsApi implements AnalyticsApi {\r\n async recordCustomEvent(\r\n eventName: string,\r\n payload: Record<string, any>,\r\n ): Promise<void> {\r\n console.log(\r\n `[Venus Mock] Logging event with ${eventName}, params ${payload}`,\r\n )\r\n await createMockDelay(MOCK_DELAYS.short)\r\n }\r\n\r\n async trackFunnelStep(stepNumber: number, stepName: string, funnelName?: string): Promise<void> {\r\n console.log(`[Venus Mock] tracking funnel step ${stepName} (step ${stepNumber}) for funnel ${funnelName ?? 'game'}`);\r\n await createMockDelay(MOCK_DELAYS.short)\r\n }\r\n}\r\n","import { AnalyticsApi } from './AnalyticsApi.ts'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId.ts'\r\n\r\nexport class RpcAnalyticsApi implements AnalyticsApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async recordCustomEvent(\r\n eventName: string,\r\n payload: Record<string, any>,\r\n ): Promise<void> {\r\n console.log(\r\n `[Venus SDK] [RpcAnalyticsApi] recordCustomEvent: ${eventName} payload:\\n${JSON.stringify(payload, null, 2)}`,\r\n )\r\n await this.rpcClient.call(VenusMessageId.LOG_ANALYTICS_EVENT, {\r\n eventName: eventName,\r\n params: payload,\r\n })\r\n }\r\n\r\n async trackFunnelStep(stepNumber: number, stepName: string, funnelName?: string): Promise<void> {\r\n console.log(\r\n `[Venus SDK] [RpcAnalyticsApi] trackFunnelStep: stepNumber: ${stepNumber} stepName: ${stepName} funnelName: ${funnelName}`,\r\n )\r\n await this.rpcClient.call(VenusMessageId.TRACK_FUNNEL_STEP, {\r\n stepNumber,\r\n stepName,\r\n funnelName,\r\n })\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types.ts'\r\nimport { Host } from '../Host.ts'\r\n\r\nexport * from './AnalyticsApi'\r\nexport * from './MockAnalyticsApi'\r\nexport * from './RpcAnalyticsApi'\r\n\r\nexport function initializeAnalytics(venusApiInstance: VenusAPI, host: Host) {\r\n venusApiInstance.logCustomEvent = async (options) => {\r\n const result = await host.analytics.recordCustomEvent(\r\n options.eventName,\r\n options.params,\r\n )\r\n }\r\n\r\n venusApiInstance.analytics = host.analytics\r\n}\r\n","import { Avatar3dApi, Avatar3dEdits, ShowEditorOptions } from './Avatar3dApi.ts'\r\nimport { VenusAPI } from '../venus-api/types.ts'\r\nimport { Avatar3dConfig } from './Avatar3dConfig.ts'\r\nimport { AssetManifest, Category } from './AssetManifest.ts'\r\nimport { createMockDelay, MOCK_DELAYS } from '../venus-api/systems/core'\r\n\r\ndeclare global {\r\n interface Window {\r\n VenusPrototyping?: {\r\n showAvatarEditorOverlay: (\r\n options: any,\r\n resolve: (args: any) => void,\r\n ) => Promise<void>\r\n }\r\n }\r\n}\r\n\r\nexport class MockAvatarApi implements Avatar3dApi {\r\n private readonly _venusApi: VenusAPI\r\n\r\n private cachedAssets: Record<string, Category> | null = null\r\n private cachedVersion: string = ''\r\n\r\n constructor(venusApi: VenusAPI) {\r\n this._venusApi = venusApi\r\n }\r\n downloadAssetPaths(): Promise<Record<string, string[]>> {\r\n console.log('[Venus Mock] Downloading avatar3d asset paths...')\r\n return this.getAllAssetPaths()\r\n }\r\n\r\n async deleteAvatar(): Promise<void> {\r\n console.log(`[Venus Mock] Deleting avatar3d config`)\r\n const venusApi = this._venusApi\r\n\r\n // Get current profile from Venus API context\r\n const currentProfile = venusApi.getCurrentProfile()\r\n const profileId = currentProfile?.id || 'default_profile'\r\n\r\n // Remove from localStorage\r\n localStorage.removeItem(`venus-mock-avatar3d-${profileId}`)\r\n\r\n console.log(\r\n `[Venus Mock] Avatar3d config deleted from localStorage for profile: ${profileId}`,\r\n )\r\n }\r\n\r\n async loadAvatar(avatar3dId?: string): Promise<Avatar3dConfig | null> {\r\n console.log(`[Venus Mock] Loading avatar3d`, { avatar3dId })\r\n const venusApi = this._venusApi\r\n let config\r\n\r\n if (avatar3dId) {\r\n // Mock shared avatar3d loading using deterministic selection\r\n console.log(`[Venus Mock] Loading shared avatar3d by ID: ${avatar3dId}`)\r\n config = await this.selectAvatarConfig(avatar3dId, false)\r\n } else {\r\n // Always return a valid avatar, even if no profile\r\n const currentProfile = venusApi.getCurrentProfile()\r\n const profileId = currentProfile?.id || 'default_profile'\r\n\r\n console.log(`[Venus Mock] Loading avatar3d for profile: ${profileId}`)\r\n\r\n // Always generate fresh avatar config with current CDN URLs\r\n // localStorage is only used for save persistence, not loading\r\n console.log(\r\n '[Venus Mock] Generating fresh avatar config with current CDN URLs',\r\n )\r\n if (profileId === 'default_profile') {\r\n // Use consistent defaults for the default profile\r\n config = await this.selectAvatarConfig(null, true)\r\n } else {\r\n // Use seeded random for other profiles\r\n config = await this.selectAvatarConfig(profileId, false)\r\n }\r\n }\r\n\r\n // Return direct config or null if not found\r\n return config || null\r\n }\r\n\r\n async saveAvatar(config: Avatar3dConfig): Promise<string> {\r\n console.log(`[Venus Mock] Saving avatar3d config:`, config)\r\n const venusApi = this._venusApi\r\n\r\n // Get current profile from Venus API context\r\n const currentProfile = venusApi.getCurrentProfile()\r\n const profileId = currentProfile?.id || 'default_profile'\r\n\r\n // Save to localStorage for mock persistence\r\n localStorage.setItem(\r\n `venus-mock-avatar3d-${profileId}`,\r\n JSON.stringify(config),\r\n )\r\n\r\n // Generate a mock avatar3dId\r\n const mockAvatar3dId = `mock_avatar3d_${profileId}_${Date.now()}`\r\n\r\n console.log(\r\n `[Venus Mock] Avatar3d config saved to localStorage with mock ID: ${mockAvatar3dId}`,\r\n )\r\n\r\n // Return direct avatar ID\r\n return mockAvatar3dId\r\n }\r\n\r\n downloadManifest(): Promise<AssetManifest> {\r\n return this.loadAssetsManifest()\r\n }\r\n\r\n async showEditor(options?: ShowEditorOptions): Promise<Avatar3dEdits> {\r\n console.log(\r\n `[Venus Mock] showAvatar3dEditorAsync called with options:`,\r\n options,\r\n )\r\n\r\n // Mock implementation - simulate opening avatar editor\r\n if (window.VenusPrototyping) {\r\n // If prototyping utilities are available, use them for a better experience\r\n return new Promise((resolve) => {\r\n window.VenusPrototyping!.showAvatarEditorOverlay(options, resolve)\r\n })\r\n }\r\n\r\n // Simple browser-based simulation\r\n console.log('[Venus Mock] Simulating avatar editor opening...')\r\n\r\n // Simulate delay for opening editor\r\n await createMockDelay(MOCK_DELAYS.medium)\r\n\r\n // Generate a mock avatar configuration\r\n const mockAvatarConfig = await this.selectAvatarConfig(null, false)\r\n\r\n // Simulate user interaction - 70% chance they save changes, 30% they cancel\r\n const userSavedChanges = Math.random() > 0.3\r\n\r\n console.log(\r\n '[Venus Mock] Avatar editor simulation complete - user would use requestPopOrQuit() with result data',\r\n )\r\n\r\n // Return direct editor result\r\n if (userSavedChanges) {\r\n const mockAvatarId = `mock_avatar_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\r\n\r\n return {\r\n wasChanged: true,\r\n config: mockAvatarConfig,\r\n savedAvatarId: mockAvatarId,\r\n }\r\n } else {\r\n return {\r\n wasChanged: false,\r\n config: null,\r\n savedAvatarId: null,\r\n }\r\n }\r\n }\r\n\r\n private async getAssets() {\r\n let cachedAssets = this.cachedAssets\r\n if (!cachedAssets) {\r\n this.log('No cached assets found, loading new manifest...')\r\n cachedAssets = (await this.loadAssetsManifest()).categories\r\n }\r\n return cachedAssets\r\n }\r\n\r\n private async loadAssetsManifest() {\r\n this.log('Loading avatar3d assets manifest from CDN...')\r\n const venusApi = this._venusApi\r\n\r\n // Use the CDN base URL from Venus API configuration\r\n const baseManifestUrl = venusApi.resolveAvatarAssetUrl('assets.json')\r\n\r\n // Add cache busting to prevent CDN/browser cache issues\r\n const separator = baseManifestUrl.includes('?') ? '&' : '?'\r\n const manifestUrl = `${baseManifestUrl}${separator}v=${Date.now()}`\r\n\r\n console.log('[Venus Mock] Fetching manifest from URL:', manifestUrl)\r\n\r\n try {\r\n const response = await fetch(manifestUrl, {\r\n method: 'GET',\r\n headers: {\r\n Accept: 'application/json, text/plain, */*',\r\n 'Content-Type': 'application/json',\r\n },\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n })\r\n\r\n console.log(\r\n '[Venus Mock] Fetch response status:',\r\n response.status,\r\n response.statusText,\r\n )\r\n console.log(\r\n '[Venus Mock] Response headers:',\r\n Object.fromEntries(response.headers.entries()),\r\n )\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to fetch assets manifest: ${response.status} ${response.statusText}`,\r\n )\r\n }\r\n\r\n const manifest = (await response.json()) as AssetManifest\r\n console.log('[Venus Mock] Loaded assets manifest:', {\r\n version: manifest.version,\r\n generatedAt: manifest.generatedAt,\r\n categories: Object.keys(manifest.categories || {}),\r\n })\r\n\r\n // Cache the assets but not the raw JSON\r\n this.cachedAssets = manifest.categories || {}\r\n this.cachedVersion = manifest.version\r\n\r\n return manifest\r\n } catch (error) {\r\n console.error('[Venus Mock] Failed to load assets manifest:', error)\r\n\r\n // Return a fallback minimal manifest for development\r\n console.log(\r\n '[Venus Mock] Using fallback minimal manifest for development',\r\n )\r\n const fallbackManifest: AssetManifest = {\r\n version: 'dev-fallback',\r\n generatedAt: new Date().toISOString(),\r\n categories: {\r\n head: {\r\n type: 'mesh',\r\n assets: [\r\n {\r\n id: 'head_default',\r\n filename: 'head_default.glb',\r\n displayName: 'Default Head',\r\n },\r\n {\r\n id: 'head_variant1',\r\n filename: 'head_variant1.glb',\r\n displayName: 'Head Variant 1',\r\n },\r\n ],\r\n },\r\n outfit: {\r\n type: 'mesh',\r\n assets: [\r\n {\r\n id: 'outfit_default',\r\n filename: 'outfit_default.glb',\r\n displayName: 'Default Outfit',\r\n },\r\n {\r\n id: 'outfit_casual',\r\n filename: 'outfit_casual.glb',\r\n displayName: 'Casual Outfit',\r\n },\r\n ],\r\n },\r\n hat: {\r\n type: 'mesh',\r\n assets: [\r\n {\r\n id: 'hat_none',\r\n filename: 'hat_none.glb',\r\n displayName: 'No Hat',\r\n },\r\n {\r\n id: 'hat_cap',\r\n filename: 'hat_cap.glb',\r\n displayName: 'Baseball Cap',\r\n },\r\n ],\r\n },\r\n hair: {\r\n type: 'mesh',\r\n assets: [\r\n {\r\n id: 'hair_default',\r\n filename: 'hair_default.glb',\r\n displayName: 'Default Hair',\r\n },\r\n {\r\n id: 'hair_long',\r\n filename: 'hair_long.glb',\r\n displayName: 'Long Hair',\r\n },\r\n ],\r\n },\r\n 'face-accessory': {\r\n type: 'mesh',\r\n assets: [\r\n {\r\n id: 'glasses_none',\r\n filename: 'glasses_none.glb',\r\n displayName: 'No Glasses',\r\n },\r\n {\r\n id: 'glasses_regular',\r\n filename: 'glasses_regular.glb',\r\n displayName: 'Regular Glasses',\r\n },\r\n ],\r\n },\r\n animation: {\r\n type: 'mesh',\r\n assets: [\r\n {\r\n id: 'idle_default',\r\n filename: 'idle_default.glb',\r\n displayName: 'Default Idle',\r\n },\r\n {\r\n id: 'wave',\r\n filename: 'wave.glb',\r\n displayName: 'Wave Animation',\r\n },\r\n ],\r\n },\r\n },\r\n }\r\n\r\n this.cachedAssets = fallbackManifest.categories\r\n this.cachedVersion = fallbackManifest.version\r\n\r\n return fallbackManifest\r\n }\r\n }\r\n\r\n private async selectAvatarConfig(\r\n avatarId: string | null = null,\r\n useDefaults = false,\r\n ): Promise<Avatar3dConfig> {\r\n const categories = await this.getAssets()\r\n this.log(`Manifest ${JSON.stringify(categories, null, 2)}`)\r\n\r\n const rng = avatarId ? this.seededRandom(avatarId) : () => Math.random()\r\n\r\n const headAsset = this.selectAsset(\r\n categories,\r\n 'head',\r\n rng,\r\n avatarId,\r\n useDefaults,\r\n )\r\n\r\n const outfitAsset = this.selectAsset(\r\n categories,\r\n 'outfit',\r\n rng,\r\n avatarId,\r\n useDefaults,\r\n )\r\n const hatAsset = this.selectAsset(\r\n categories,\r\n 'hat',\r\n rng,\r\n avatarId,\r\n useDefaults,\r\n )\r\n const hairAsset = this.selectAsset(\r\n categories,\r\n 'hair',\r\n rng,\r\n avatarId,\r\n useDefaults,\r\n )\r\n const faceAccessoryAsset = this.selectAsset(\r\n categories,\r\n 'face-accessory',\r\n rng,\r\n avatarId,\r\n useDefaults,\r\n )\r\n const animationAsset = this.selectAsset(\r\n categories,\r\n 'animation',\r\n rng,\r\n avatarId,\r\n useDefaults,\r\n )\r\n\r\n const config: Avatar3dConfig = {\r\n headAsset: headAsset.filename,\r\n outfitAsset: outfitAsset.filename,\r\n animationAsset: animationAsset.filename,\r\n faceAccessoryAsset: faceAccessoryAsset.filename,\r\n hairAsset: hairAsset.filename,\r\n hatAsset: hatAsset.filename,\r\n skinColor: null, // NOTE(Zee): This was not selected anywhere?\r\n }\r\n\r\n console.log(\r\n `[Venus Mock] Selected avatar config for ${avatarId || 'default'}:`,\r\n config,\r\n )\r\n return config\r\n }\r\n\r\n private selectAsset(\r\n manifest: Record<string, Category>,\r\n categoryId: string,\r\n rng: () => number,\r\n avatarId: string | null,\r\n useDefaults = false,\r\n ) {\r\n const categoryAssets = manifest[categoryId].assets\r\n\r\n if (useDefaults) {\r\n // Always use the first asset for default avatar (consistent)\r\n const selectedAsset = categoryAssets[0]\r\n console.log(\r\n `[Venus Mock] Using default asset for ${categoryId}:`,\r\n selectedAsset.id,\r\n )\r\n return selectedAsset\r\n }\r\n\r\n if (avatarId) {\r\n // Use seeded random for deterministic selection based on ID\r\n const index = Math.floor(rng() * categoryAssets.length)\r\n const selectedAsset = categoryAssets[index]\r\n console.log(\r\n `[Venus Mock] Seeded selection for ${avatarId} ${categoryId}:`,\r\n selectedAsset.id,\r\n `(index ${index}/${categoryAssets.length})`,\r\n )\r\n return selectedAsset\r\n }\r\n\r\n // Fallback to first asset if no ID\r\n const selectedAsset = categoryAssets[0]\r\n this.log(`Fallback to first asset for ${categoryId}:`, selectedAsset.id)\r\n\r\n return selectedAsset\r\n }\r\n\r\n private seededRandom(seed: string) {\r\n const hash = this.simpleHash(seed)\r\n let state = hash\r\n return function () {\r\n state = (state * 1664525 + 1013904223) % 4294967296\r\n return state / 4294967296\r\n }\r\n }\r\n\r\n private simpleHash(str: string) {\r\n let hash = 0\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charCodeAt(i)\r\n hash = (hash << 5) - hash + char\r\n hash = hash & hash // Convert to 32-bit integer\r\n }\r\n return Math.abs(hash)\r\n }\r\n\r\n private async getAllAssetPaths() {\r\n const venusApi = this._venusApi\r\n const assets = await this.getAssets()\r\n const allPaths: Record<string, string[]> = {}\r\n\r\n for (const [category, categoryData] of Object.entries(assets)) {\r\n allPaths[category] = (categoryData?.assets || []).map((asset) =>\r\n venusApi.resolveAvatarAssetUrl(`${category}/${asset.filename}`),\r\n )\r\n }\r\n\r\n this.log('All available asset paths:', allPaths)\r\n return allPaths\r\n }\r\n\r\n private log(message: string, ...args: any[]) {\r\n console.log(`\"[Venus Mock] ${message}`, args)\r\n }\r\n}\r\n","import { Avatar3dApi, Avatar3dEdits, ShowEditorOptions } from './Avatar3dApi.ts'\r\nimport { Avatar3dConfig } from './Avatar3dConfig.ts'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId.ts'\r\nimport { Asset, AssetManifest } from './AssetManifest.ts'\r\nimport { VenusAPI } from '../venus-api/types.ts'\r\n\r\nexport class RpcAvatarApi implements Avatar3dApi {\r\n private readonly venusApi: VenusAPI\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient, venusApi: VenusAPI) {\r\n this.rpcClient = rpcClient\r\n this.venusApi = venusApi\r\n }\r\n\r\n async downloadAssetPaths(): Promise<Record<string, string[]>> {\r\n const venusApi = this.venusApi\r\n console.log('[Venus] Downloading avatar3d asset paths...')\r\n\r\n const manifestUrl = venusApi.resolveAvatarAssetUrl('assets.json')\r\n console.log('[Venus] 🔍 Manifest URL resolved to:', manifestUrl)\r\n\r\n const manifest = await this.fetchFromCdn(manifestUrl)\r\n console.log('[Venus] 📦 Manifest loaded successfully:', {\r\n version: manifest.version,\r\n categories: Object.keys(manifest.categories || {}),\r\n totalAssets: Object.values(manifest.categories || {}).reduce(function (\r\n sum,\r\n cat,\r\n ) {\r\n return sum + (cat.assets?.length || 0)\r\n }, 0),\r\n })\r\n\r\n const categories = manifest.categories || {}\r\n\r\n // Process into asset paths with full URLs\r\n const assetPaths: Record<string, string[]> = {}\r\n for (const categoryKey in categories) {\r\n const categoryData = categories[categoryKey]\r\n const categoryPath = categoryKey\r\n const assetUrls = (categoryData?.assets || []).map((asset: Asset) => {\r\n const url = venusApi.resolveAvatarAssetUrl(\r\n categoryPath + '/' + asset.filename,\r\n )\r\n console.log('[Venus] 🎨 Asset URL:', asset.filename, '->', url)\r\n return url\r\n })\r\n assetPaths[categoryKey] = assetUrls\r\n console.log(\r\n '[Venus] 📁 Category',\r\n categoryKey,\r\n 'has',\r\n assetUrls.length,\r\n 'assets',\r\n )\r\n }\r\n\r\n console.log('[Venus] Avatar3d asset paths downloaded successfully')\r\n\r\n // Return direct asset paths\r\n return assetPaths\r\n }\r\n\r\n async downloadManifest(): Promise<AssetManifest> {\r\n console.log('[Venus] Downloading avatar3d manifest...')\r\n const venusApi = this.venusApi\r\n\r\n // Use shared CDN fetch utility\r\n const manifestUrl = venusApi.resolveAvatarAssetUrl('assets.json')\r\n const manifest = await this.fetchFromCdn(manifestUrl)\r\n\r\n console.log('[Venus] Avatar3d manifest downloaded successfully')\r\n\r\n // Return direct manifest\r\n return manifest\r\n }\r\n\r\n async loadAvatar(avatarId?: string): Promise<Avatar3dConfig | null> {\r\n const result = await this.rpcClient.call(VenusMessageId.AVATAR3D_LOAD, {\r\n avatar3dId: avatarId,\r\n })\r\n this.log(\r\n `Avatar loaded with the following result:\\n${JSON.stringify(result, null, 2)}`,\r\n )\r\n return result as Avatar3dConfig\r\n }\r\n\r\n saveAvatar(config: Avatar3dConfig): Promise<string> {\r\n return this.rpcClient.call(VenusMessageId.AVATAR3D_SAVE, {\r\n config: config,\r\n })\r\n }\r\n\r\n deleteAvatar(): Promise<void> {\r\n return this.rpcClient.call(VenusMessageId.AVATAR3D_DELETE)\r\n }\r\n\r\n async showEditor(options?: ShowEditorOptions): Promise<Avatar3dEdits> {\r\n const rpcClient = this.rpcClient\r\n\r\n console.log(\r\n '[Venus] 🎨 showAvatar3dEditorAsync called with options:',\r\n options,\r\n )\r\n\r\n console.log(\r\n '[Venus] 📤 Sending H5_STACK_PUSH_REQUEST for avatar3d using _sendRequest...',\r\n )\r\n\r\n // Use _sendRequest to get the final result when the editor closes\r\n const rawResult = await rpcClient.call<Avatar3dEdits>(\r\n VenusMessageId.H5_STACK_PUSH_REQUEST,\r\n {\r\n targetAppId: 'AVATAR3D',\r\n contextData: options?.contextData || {},\r\n appParams: {\r\n currentAvatar: options?.currentAvatar,\r\n onSave: options?.onSave,\r\n onCancel: options?.onCancel,\r\n },\r\n },\r\n )\r\n\r\n console.log(\r\n '[Venus] ✅ Avatar editor completed with raw result:',\r\n rawResult,\r\n )\r\n\r\n // Return direct editor result\r\n return {\r\n wasChanged: rawResult.wasChanged || false,\r\n config: rawResult.config || null,\r\n savedAvatarId: rawResult.savedAvatarId || null,\r\n }\r\n }\r\n\r\n private async fetchFromCdn(url: string): Promise<AssetManifest> {\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n Accept: 'application/json, text/plain, */*',\r\n 'Content-Type': 'application/json',\r\n },\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `CDN fetch failed: ${response.status} ${response.statusText}`,\r\n )\r\n }\r\n\r\n return (await response.json()) as AssetManifest\r\n }\r\n\r\n private log(message: string, ...options: any[]): void {\r\n console.log(`[Venus] ${message}`, options)\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types.ts'\nimport { Host } from '../Host.ts'\n\nexport * from './Avatar3dApi'\nexport * from './Avatar3dConfig'\nexport * from './AssetManifest'\nexport * from './MockAvatarApi'\nexport * from './RpcAvatarApi'\n\nexport function initializeAvatar3d(venusApi: VenusAPI, host: Host) {\n venusApi.loadAvatar3dAsync = host.avatar3d.loadAvatar.bind(host.avatar3d)\n venusApi.saveAvatar3dAsync = host.avatar3d.saveAvatar.bind(host.avatar3d)\n venusApi.deleteAvatar3dAsync = host.avatar3d.deleteAvatar.bind(host.avatar3d)\n venusApi.downloadAvatar3dManifestAsync = host.avatar3d.downloadManifest.bind(\n host.avatar3d,\n )\n venusApi.showAvatar3dEditorAsync = host.avatar3d.showEditor.bind(\n host.avatar3d,\n )\n venusApi.downloadAvatar3dAssetPathsAsync =\n host.avatar3d.downloadAssetPaths.bind(host.avatar3d)\n}\n","import { CdnApi, FetchBlobOptions, SubPath } from './CdnApi'\r\n\r\nexport class HostCdnApi implements CdnApi {\r\n private readonly baseUrl: string\r\n\r\n constructor(baseUrl: string) {\r\n this.baseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl\r\n }\r\n\r\n async fetchBlob(path: SubPath, options?: FetchBlobOptions): Promise<Blob> {\r\n const controller = new AbortController()\r\n const timeoutId = setTimeout(\r\n () => controller.abort(),\r\n options?.timeout ?? 30000,\r\n )\r\n\r\n try {\r\n const url = this.resolveAssetUrl(path)\r\n const response = await fetch(url, {\r\n mode: 'cors',\r\n credentials: 'omit',\r\n headers: { Accept: '/*' },\r\n signal: controller.signal,\r\n })\r\n\r\n clearTimeout(timeoutId)\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\r\n }\r\n\r\n return await response.blob()\r\n } catch (error) {\r\n clearTimeout(timeoutId)\r\n throw error\r\n }\r\n }\r\n\r\n async fetchFromCdn(url: string, request?: RequestInit): Promise<Response> {\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n Accept: 'application/json, text/plain, */*',\r\n 'Content-Type': 'application/json',\r\n },\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `CDN fetch failed: \\${response.status} \\${response.statusText}`,\r\n )\r\n }\r\n\r\n return response\r\n }\r\n\r\n getAssetCdnBaseUrl(): string {\r\n return this.baseUrl\r\n }\r\n\r\n resolveAssetUrl(subPath: string): string {\r\n // Clean up the subPath (remove leading slash if present)\r\n const cleanSubPath = subPath.startsWith('/') ? subPath.slice(1) : subPath\r\n\r\n // Split path into directory and filename parts, encode only filename to preserve directory structure\r\n const pathParts = cleanSubPath.split('/')\r\n const encodedParts = pathParts.map((part, index) => {\r\n // Only encode the filename (last part), keep directory names as-is for URL structure\r\n return index === pathParts.length - 1 ? encodeURIComponent(part) : part\r\n })\r\n const encodedSubPath = encodedParts.join('/')\r\n\r\n const fullUrl = this.baseUrl + '/' + encodedSubPath\r\n return fullUrl\r\n }\r\n\r\n resolveAvatarAssetUrl(subPath: string): string {\r\n // Prepend 'avatar3d/' to the subPath and resolve using the base method\r\n const avatarSubPath = 'avatar3d/' + subPath\r\n return this.resolveAssetUrl(avatarSubPath)\r\n }\r\n\r\n resolveSharedLibUrl(subPath: string): string {\r\n // Prepend 'libs/' to the subPath and resolve using the base method\r\n const libSubPath = 'libs/' + subPath\r\n return this.resolveAssetUrl(libSubPath)\r\n }\r\n}\r\n","import { CdnApi, FetchBlobOptions, SubPath } from './CdnApi'\r\n\r\nexport class MockCdnApi implements CdnApi {\r\n private readonly baseUrl: string\r\n\r\n constructor() {\r\n this.baseUrl = 'https://venus-static-01293ak.web.app/'\r\n }\r\n\r\n async fetchBlob(path: SubPath, options?: FetchBlobOptions): Promise<Blob> {\r\n const controller = new AbortController()\r\n const timeoutId = setTimeout(\r\n () => controller.abort(),\r\n options?.timeout ?? 30000,\r\n )\r\n\r\n try {\r\n const url = this.resolveAssetUrl(path)\r\n const response = await fetch(url, {\r\n mode: 'cors',\r\n credentials: 'omit',\r\n headers: { Accept: '/*' },\r\n signal: controller.signal,\r\n })\r\n\r\n clearTimeout(timeoutId)\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\r\n }\r\n\r\n return await response.blob()\r\n } catch (error) {\r\n clearTimeout(timeoutId)\r\n throw error\r\n }\r\n }\r\n\r\n getAssetCdnBaseUrl(): string {\r\n return this.baseUrl\r\n }\r\n\r\n resolveAssetUrl(subPath: string): string {\r\n // If subPath is already a full URL, return it as-is\r\n if (subPath.startsWith('http://') || subPath.startsWith('https://')) {\r\n // Input is already a full URL\r\n return subPath\r\n }\r\n\r\n if (subPath.startsWith('cdn/')) {\r\n return subPath\r\n }\r\n\r\n // Clean up the subPath (remove leading slash if present)\r\n const cleanSubPath = subPath.startsWith('/') ? subPath.slice(1) : subPath\r\n\r\n // Split path into directory and filename parts, encode only filename to preserve directory structure\r\n const pathParts = cleanSubPath.split('/')\r\n const encodedParts = pathParts.map((part, index) => {\r\n // Only encode the filename (last part), keep directory names as-is for URL structure\r\n return index === pathParts.length - 1 ? encodeURIComponent(part) : part\r\n })\r\n const encodedSubPath = encodedParts.join('/')\r\n\r\n // Construct the full URL\r\n const fullUrl = `${this.baseUrl}${encodedSubPath}`\r\n\r\n // Resolved asset URL\r\n return fullUrl\r\n }\r\n\r\n resolveAvatarAssetUrl(subPath: string): string {\r\n // If subPath is already a full URL, return it as-is\r\n if (subPath.startsWith('http://') || subPath.startsWith('https://')) {\r\n // Avatar asset input is already a full URL\r\n return subPath\r\n }\r\n\r\n // Prepend 'avatar3d/' to the subPath and resolve using the base method\r\n const avatarSubPath = `avatar3d/${subPath}`\r\n return this.resolveAssetUrl(avatarSubPath)\r\n }\r\n\r\n resolveSharedLibUrl(subPath: string): string {\r\n // If subPath is already a full URL, return it as-is\r\n if (subPath.startsWith('http://') || subPath.startsWith('https://')) {\r\n // Shared lib input is already a full URL\r\n return subPath\r\n }\r\n\r\n // Prepend 'libs/' to the subPath and resolve using the base method\r\n const libSubPath = `libs/${subPath}`\r\n return this.resolveAssetUrl(libSubPath)\r\n }\r\n\r\n async fetchFromCdn(url: string, options?: RequestInit): Promise<Response> {\r\n // Fetching from network\r\n\r\n // Security validation - only allow trusted CDN domains\r\n const allowedDomains = [\r\n 'venus-static-01293ak.web.app',\r\n 'firebasestorage.googleapis.com',\r\n 'cdn.venusapp.com',\r\n 'storage.googleapis.com',\r\n ]\r\n let urlObj: URL | null = null\r\n\r\n try {\r\n let isAllowed = true\r\n\r\n if (url.startsWith('http://') || url.startsWith('https://')) {\r\n urlObj = new URL(url)\r\n isAllowed = allowedDomains.some(\r\n (domain) =>\r\n urlObj!.hostname === domain ||\r\n urlObj!.hostname.endsWith('.' + domain),\r\n )\r\n\r\n if (!isAllowed) {\r\n const error = `Domain not allowed: ${urlObj.hostname}. Allowed domains: ${allowedDomains.join(', ')}`\r\n console.error('[Venus Network Mock] Security error:', error)\r\n throw new Error(error)\r\n }\r\n } else {\r\n // In development mode, let relative URLs be handled naturally by the browser/dev server\r\n // Using relative URL as-is in development mode\r\n // Don't convert to absolute URL - let fetch handle the relative URL\r\n urlObj = null // We'll use the original URL directly\r\n }\r\n\r\n const fetchUrl = urlObj ? urlObj.href : url\r\n // Making request\r\n\r\n const response = await fetch(fetchUrl, {\r\n method: options?.method || 'GET',\r\n headers: {\r\n Accept: 'text/plain, application/octet-stream, application/json, */*',\r\n ...options?.headers,\r\n },\r\n cache: options?.cache || 'default',\r\n mode: 'cors',\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\r\n }\r\n\r\n // Fetch successful\r\n return response\r\n } catch (error) {\r\n // CORS Fallback for mock\r\n if (\r\n error instanceof Error &&\r\n error.message &&\r\n (error.message.includes('CORS') ||\r\n error.message.includes('preflight') ||\r\n error.message.includes('Access-Control') ||\r\n error.message.includes('cache-control'))\r\n ) {\r\n // CORS error detected, trying minimal fetch\r\n\r\n try {\r\n const fallbackUrl = urlObj ? urlObj.href : url\r\n const fallbackResponse = await fetch(fallbackUrl, {\r\n method: 'GET',\r\n mode: 'cors',\r\n cache: 'default',\r\n })\r\n\r\n if (!fallbackResponse.ok) {\r\n throw new Error(\r\n `HTTP ${fallbackResponse.status}: ${fallbackResponse.statusText}`,\r\n )\r\n }\r\n\r\n const fallbackText = await fallbackResponse.text()\r\n\r\n // CORS fallback fetch successful\r\n return fallbackResponse\r\n } catch (fallbackError) {\r\n console.error(\r\n '[Venus Network Mock] CORS fallback also failed (from network.js):',\r\n {\r\n url,\r\n originalError: error.message,\r\n fallbackError: fallbackError,\r\n timestamp: new Date().toISOString(),\r\n },\r\n )\r\n throw new Error(\r\n `CORS error: ${error.message}. Fallback also failed: ${fallbackError}`,\r\n )\r\n }\r\n }\r\n\r\n console.error('[Venus Network Mock] Fetch failed (from network.js):', {\r\n url,\r\n error: error,\r\n timestamp: new Date().toISOString(),\r\n })\r\n throw error\r\n }\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\n\r\nexport * from './CdnApi'\r\nexport * from './HostCdnApi'\r\nexport * from './MockCdnApi'\r\n\r\nexport function initializeCdn(venusApi: VenusAPI, host: Host) {\r\n // Core asset URL resolver\r\n venusApi.resolveAssetUrl = function (subPath) {\r\n return host.cdn.resolveAssetUrl(subPath)\r\n }\r\n\r\n // Avatar-specific asset URL resolver that prepends 'avatar3d/' to the subPath\r\n venusApi.resolveAvatarAssetUrl = function (subPath) {\r\n return host.cdn.resolveAvatarAssetUrl(subPath)\r\n }\r\n\r\n // Shared library URL resolver that prepends 'libs/' to the subPath\r\n venusApi.resolveSharedLibUrl = function (subPath) {\r\n return host.cdn.resolveSharedLibUrl(subPath)\r\n }\r\n\r\n // Helper method to get the base CDN URL\r\n venusApi.getAssetCdnBaseUrl = function () {\r\n return host.cdn.getAssetCdnBaseUrl()\r\n }\r\n\r\n venusApi.fetchFromCdn = (url: string, options?: RequestInit) => {\r\n return host.cdn.fetchFromCdn(url, options)\r\n }\r\n\r\n venusApi.cdn = host.cdn\r\n}\r\n","import { Experiment, FeaturesApi } from './FeaturesApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\n\r\nexport class RpcFeaturesApi implements FeaturesApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rcpClient: RpcClient) {\r\n this.rpcClient = rcpClient\r\n }\r\n\r\n async getExperiment(experimentName: string): Promise<Experiment | null> {\r\n console.log('[Venus] Getting Experiment', experimentName)\r\n return await this.rpcClient.call(VenusMessageId.GET_EXPERIMENT, {\r\n experimentName: experimentName,\r\n })\r\n }\r\n\r\n async getFeatureFlag(flagName: string): Promise<boolean> {\r\n console.log('[Venus] Getting Feature Flag', flagName)\r\n return await this.rpcClient.call(VenusMessageId.GET_FEATURE_FLAG, {\r\n flagName: flagName,\r\n })\r\n }\r\n\r\n async getFeatureGate(gateName: string): Promise<boolean> {\r\n console.log('[Venus] Getting Feature Gate', gateName)\r\n return await this.rpcClient.call(VenusMessageId.GET_FEATURE_GATE, {\r\n gateName: gateName,\r\n })\r\n }\r\n}\r\n","import { Experiment, FeaturesApi } from './FeaturesApi'\n\nexport class MockFeaturesApi implements FeaturesApi {\n async getExperiment(experimentName: string): Promise<Experiment | null> {\n return null\n }\n\n async getFeatureFlag(flagName: string): Promise<boolean> {\n return Promise.resolve(false)\n }\n\n getFeatureGate(gateName: string): Promise<boolean> {\n return Promise.resolve(false)\n }\n}\n","import { VenusAPI } from '../venus-api/types'\nimport { Host } from '../Host'\n\nexport * from './FeaturesApi'\nexport * from './RpcFeaturesApi'\nexport * from './MockFeaturesApi'\n\nexport function initializeFeaturesApi(venusApi: VenusAPI, host: Host) {\n venusApi.getExperiment = (options) => {\n return host.features.getExperiment(options.experimentName)\n }\n\n venusApi.getFeatureGate = (options) => {\n return host.features.getFeatureGate(options.gateName)\n }\n\n venusApi.getFeatureFlag = (options) => {\n return host.features.getFeatureFlag(options.flagName)\n }\n}\n","export enum HapticFeedbackStyle {\n Light = 'light',\n Medium = 'medium',\n Heavy = 'heavy',\n Success = 'success',\n Warning = 'warning',\n Error = 'error',\n}\nexport interface HapticsApi {\n triggerHapticAsync(style: HapticFeedbackStyle): Promise<void>\n}\n","import { HapticFeedbackStyle, HapticsApi } from './HapticsApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\n\r\nexport class RpcHapticsApi implements HapticsApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async triggerHapticAsync(style: HapticFeedbackStyle): Promise<void> {\r\n await this.rpcClient.call(VenusMessageId.TRIGGER_HAPTIC, {\r\n style: style,\r\n })\r\n }\r\n}\r\n","import { HapticFeedbackStyle, HapticsApi } from './HapticsApi'\nimport { VenusAPI } from '../venus-api/types'\n\nexport class MockHapticsApi implements HapticsApi {\n private readonly venusApi: VenusAPI\n\n constructor(venusApi: VenusAPI) {\n this.venusApi = venusApi\n }\n\n async triggerHapticAsync(style: HapticFeedbackStyle): Promise<void> {\n const venusApi = this.venusApi\n // Check if device supports haptics\n if (!venusApi._mock.device.supportsHaptics) {\n return\n }\n }\n}\n","import { VenusAPI } from '../venus-api/types'\nimport { Host } from '../Host'\n\nexport * from './HapticsApi'\nexport * from './RpcHapticsApi'\nexport * from './MockHapticsApi'\n\nexport function initializeHaptics(venusApi: VenusAPI, host: Host) {\n venusApi.triggerHapticAsync = (style) => {\n return host.haptics.triggerHapticAsync(style)\n }\n}\n","// packages/api/src/iap/RpcIapApi.ts\r\nimport { IapApi, SpendCurrencyOptions } from './IapApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { LoadEmbeddedAssetsResponse } from '../shared-assets/RpcSharedAssetsApi'\r\n\r\nexport class RpcIapApi implements IapApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async getHardCurrencyBalance(): Promise<number> {\r\n const response = await this.rpcClient.call<number>(\r\n VenusMessageId.H5_IAP_GET_WALLET,\r\n )\r\n return response\r\n }\r\n\r\n async spendCurrency(\r\n productId: string,\r\n cost: number,\r\n options?: SpendCurrencyOptions,\r\n ): Promise<void> {\r\n const result = await this.rpcClient.callT<\r\n IapSpendCurrencyRequest,\r\n IapSpendCurrencyResult\r\n >(VenusMessageId.H5_IAP_SPEND_CURRENCY, {\r\n amount: cost,\r\n productId: productId,\r\n screenName: options?.screenName,\r\n })\r\n if (!result.success) {\r\n throw new Error(result.error)\r\n }\r\n }\r\n\r\n async openStore(): Promise<void> {\r\n await this.rpcClient.call(VenusMessageId.H5_IAP_OPEN_STORE)\r\n }\r\n\r\n async getCurrencyIcon(): Promise<LoadEmbeddedAssetsResponse> {\r\n return await this.rpcClient.call(VenusMessageId.H5_IAP_GET_CURRENCY_ICON)\r\n }\r\n}\r\n\r\ninterface IapSpendCurrencyRequest {\r\n amount: number // Required: amount to spend\r\n productId: string // Required: unique identifier for the item being purchased\r\n screenName?: string // Optional: screen/route name where purchase occurred\r\n}\r\n\r\ninterface IapSpendCurrencyResult {\r\n success?: boolean\r\n error?: string\r\n}\r\n","export const mockCurrencyIconBase64 = \"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\";\r\n","import { LoadEmbeddedAssetsResponse } from '../shared-assets'\r\nimport { IapApi, SpendCurrencyOptions } from './IapApi'\r\nimport { mockCurrencyIconBase64 } from './MockCurrencyIcon'\r\n\r\nexport class MockIapApi implements IapApi {\r\n private _hardCurrency: number = 100\r\n\r\n get hardCurrency(): number {\r\n return this._hardCurrency\r\n }\r\n\r\n set hardCurrency(value: number) {\r\n this._hardCurrency = value\r\n }\r\n\r\n async spendCurrency(\r\n productId: string,\r\n cost: number,\r\n options?: SpendCurrencyOptions,\r\n ): Promise<void> {\r\n console.log(`[Mock IAP] Spending ${cost} on ${productId})`)\r\n const remainingHardCurrency = this._hardCurrency - cost\r\n if (remainingHardCurrency < 0) {\r\n throw new Error(\r\n `Not enough hard currency. Expected ${cost}, found ${this._hardCurrency}`,\r\n )\r\n }\r\n this._hardCurrency = remainingHardCurrency\r\n }\r\n\r\n async getHardCurrencyBalance(): Promise<number> {\r\n console.log('[Mock IAP] get hard currency called')\r\n return this._hardCurrency\r\n }\r\n\r\n async openStore(): Promise<void> {\r\n console.log('[Mock IAP] open store called')\r\n }\r\n\r\n async getCurrencyIcon(): Promise<LoadEmbeddedAssetsResponse> {\r\n console.log('[Mock IAP] get currency icon called')\r\n return {\r\n base64Data: mockCurrencyIconBase64,\r\n }\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types.ts'\nimport { Host } from '../Host.ts'\n\nexport * from './IapApi'\nexport * from './RpcIapApi'\nexport * from './MockIapApi'\n\nexport function initializeIap(venusApiInstance: VenusAPI, host: Host) {\n venusApiInstance.iap = host.iap\n}\n","import {\r\n AwakeCallback,\r\n QuitCallback,\r\n LifecycleApi,\r\n PauseCallback,\r\n ResumeCallback,\r\n SleepCallback,\r\n} from './LifecycleApi'\r\nimport { Subscription } from '../rpc'\r\n\r\nexport class MockLifecycleApi implements LifecycleApi {\r\n private pauseCallbacks: Set<PauseCallback> = new Set<PauseCallback>()\r\n private resumeCallbacks: Set<ResumeCallback> = new Set<PauseCallback>()\r\n private awakeCallbacks = new Set<AwakeCallback>()\r\n private sleepCallbacks = new Set<SleepCallback>()\r\n private quitCallbacks = new Set<QuitCallback>()\r\n\r\n onSleep(callback: SleepCallback): Subscription {\r\n this.sleepCallbacks.add(callback)\r\n return {\r\n unsubscribe: () => {\r\n this.sleepCallbacks.delete(callback)\r\n },\r\n }\r\n }\r\n\r\n onAwake(callback: AwakeCallback): Subscription {\r\n this.awakeCallbacks.add(callback)\r\n return {\r\n unsubscribe: () => {\r\n this.awakeCallbacks.delete(callback)\r\n },\r\n }\r\n }\r\n\r\n onPause(callback: PauseCallback): Subscription {\r\n this.pauseCallbacks.add(callback)\r\n return {\r\n unsubscribe: () => {\r\n this.pauseCallbacks.delete(callback)\r\n },\r\n }\r\n }\r\n\r\n onResume(callback: ResumeCallback): Subscription {\r\n this.resumeCallbacks.add(callback)\r\n return {\r\n unsubscribe: () => {\r\n this.resumeCallbacks.delete(callback)\r\n },\r\n }\r\n }\r\n\r\n onQuit(callback: QuitCallback): Subscription {\r\n this.quitCallbacks.add(callback)\r\n return {\r\n unsubscribe: () => {\r\n this.quitCallbacks.delete(callback)\r\n },\r\n }\r\n }\r\n\r\n triggerPauseCallbacks() {\r\n for (const callback of this.pauseCallbacks) {\r\n callback()\r\n }\r\n }\r\n\r\n triggerResumeCallbacks() {\r\n for (const callback of this.resumeCallbacks) {\r\n callback()\r\n }\r\n }\r\n\r\n triggerAwakeCallbacks() {\r\n for (const callback of this.awakeCallbacks) {\r\n callback()\r\n }\r\n }\r\n\r\n triggerSleepCallbacks() {\r\n for (const callback of this.sleepCallbacks) {\r\n callback()\r\n }\r\n }\r\n\r\n triggerQuitCallbacks() {\r\n for (const callback of this.quitCallbacks) {\r\n callback()\r\n }\r\n }\r\n}\r\n","import {\r\n AwakeCallback,\r\n LifecycleApi,\r\n PauseCallback,\r\n QuitCallback,\r\n ResumeCallback,\r\n SleepCallback,\r\n} from './LifecycleApi'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { RpcClient, Subscription } from '../rpc'\r\n\r\nexport class RpcLifecycleApi implements LifecycleApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n onQuit(callback: QuitCallback): Subscription {\r\n return this.rpcClient.onNotification(VenusMessageId.QUIT, callback)\r\n }\r\n\r\n onSleep(callback: SleepCallback): Subscription {\r\n return this.rpcClient.onNotification(VenusMessageId.SLEEP, callback)\r\n }\r\n\r\n onAwake(callback: AwakeCallback): Subscription {\r\n return this.rpcClient.onNotification(VenusMessageId.AWAKE, callback)\r\n }\r\n\r\n onResume(callback: ResumeCallback): Subscription {\r\n return this.rpcClient.onNotification(VenusMessageId.RESUME, callback)\r\n }\r\n\r\n onPause(callback: PauseCallback): Subscription {\r\n return this.rpcClient.onNotification(VenusMessageId.PAUSE, callback)\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\n\r\nexport * from './LifecycleApi'\r\nexport * from './MockLifecycleApi'\r\nexport * from './RpcLifecycleApi'\r\n\r\nexport function initializeLifecycleApi(venusApi: VenusAPI, host: Host) {\r\n venusApi.lifecycles = host.lifecycle\r\n}\r\n","import { LoggingApi } from './LoggingApi'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\n\r\nexport class MockLoggingApi implements LoggingApi {\r\n logDebug(message?: any, ...args: any[]): void {\r\n console.log(`[Venus Mock] ${message}`, args)\r\n }\r\n\r\n logError(message: string, ...args: any[]): void {\r\n console.error(`[Venus Mock] ${message}`, args)\r\n }\r\n}\r\n","import { LoggingApi } from './LoggingApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { Host } from '../Host'\r\n\r\nexport class RpcLoggingApi implements LoggingApi {\r\n private readonly host: Host\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(host: Host, rpcClient: RpcClient) {\r\n this.host = host\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n logDebug(message: string, ...args: any[]): void {\r\n if (!this.host.isInitialized) {\r\n console.log(message, args)\r\n } else {\r\n message = this.buildMessage(message, ...args)\r\n this.rpcClient.call(VenusMessageId.DEBUG, { level: 'log', message })\r\n }\r\n }\r\n\r\n logError(message: string, ...args: any[]): void {\r\n if (!this.host.isInitialized) {\r\n console.log(message, ...args)\r\n } else {\r\n message = this.buildMessage(message, ...args)\r\n this.rpcClient.call(VenusMessageId.DEBUG, {\r\n level: 'error',\r\n message,\r\n })\r\n }\r\n }\r\n\r\n private buildMessage(message: string, ...args: any[]): string {\r\n // Handle multiple parameters like console.error\r\n if (args && args.length > 0) {\r\n const stringArgs: string[] = []\r\n for (const arg of args) {\r\n const argAsString = this.toStringArg(arg)\r\n if (argAsString) {\r\n stringArgs.push(argAsString)\r\n }\r\n }\r\n message += stringArgs.join(' ')\r\n }\r\n return message\r\n }\r\n\r\n private toStringArg(arg: any) {\r\n if (arg) {\r\n if (typeof arg === 'object') {\r\n try {\r\n return JSON.stringify(arg)\r\n } catch (e) {\r\n return String(arg)\r\n }\r\n }\r\n return String(arg)\r\n }\r\n return undefined\r\n }\r\n}\r\n","import { Host } from '../Host'\nimport { VenusAPI } from '../venus-api/types'\n\nexport * from './LoggingApi'\nexport * from './MockLoggingApi'\nexport * from './RpcLoggingApi'\n\nexport function initializeLoggingApi(venusApi: VenusAPI, host: Host): void {\n venusApi.log = (message, ...args: any[]) => {\n return host.logging.logDebug(message, ...args)\n }\n\n venusApi.error = (message, ...args: any[]) => {\n return host.logging.logError(message, ...args)\n }\n}\n","import {\n NavigationApi,\n NavigationStackInfo,\n PushAppOptions,\n QuitOptions,\n} from './NavigationApi'\nimport { VenusAPI } from '../venus-api/types'\nimport { createMockDelay, MOCK_DELAYS } from '../venus-api/systems/core'\n\nexport class MockNavigationApi implements NavigationApi {\n private readonly venusApi: VenusAPI\n\n constructor(venusApi: VenusAPI) {\n this.venusApi = venusApi\n }\n async requestPopOrQuit(options?: QuitOptions): Promise<boolean> {\n return true\n }\n\n getStackInfo(): NavigationStackInfo {\n const venusApi = this.venusApi\n const info: NavigationStackInfo = {\n isInStack: venusApi._mock.stackState.isInStack,\n stackPosition: venusApi._mock.stackState.stackPosition,\n isTopOfStack: venusApi._mock.stackState.isTopOfStack,\n stackDepth: venusApi._mock.stackState.stackDepth,\n parentInstanceId: venusApi._mock.stackState.parentInstanceId,\n }\n return info\n }\n\n async popApp(): Promise<void> {\n const venusApi = this.venusApi\n // Check if we can pop\n if (venusApi._mock.stackState.stackDepth <= 1) {\n console.warn('[Venus Mock] Cannot pop - at base of stack or not in stack')\n return\n }\n\n // Simulate delay\n await createMockDelay(MOCK_DELAYS.short)\n\n // Pop from history\n const poppedApp = venusApi._mock.stackState.stackHistory.pop()\n venusApi._mock.stackState.stackDepth--\n venusApi._mock.stackState.stackPosition = Math.max(\n 0,\n venusApi._mock.stackState.stackDepth - 1,\n )\n\n // Update stack state\n if (venusApi._mock.stackState.stackDepth === 0) {\n venusApi._mock.stackState.isInStack = false\n venusApi._mock.stackState.isTopOfStack = false\n venusApi._mock.stackState.parentInstanceId = null\n }\n\n this.log('App popped: ', poppedApp)\n }\n\n async pushApp(appId: string, options?: PushAppOptions): Promise<void> {\n const venusApi = this.venusApi\n\n // Simulate delay for mock\n await createMockDelay(MOCK_DELAYS.medium)\n\n // Update mock stack state\n venusApi._mock.stackState.stackHistory.push({\n appId,\n pushedAt: Date.now(),\n contextData: options?.contextData,\n appParams: options?.appParams,\n })\n\n venusApi._mock.stackState.isInStack = true\n venusApi._mock.stackState.stackDepth++\n venusApi._mock.stackState.stackPosition =\n venusApi._mock.stackState.stackDepth - 1\n venusApi._mock.stackState.isTopOfStack = true\n\n const pushedInstanceId = `mock-stack-${appId}-${Date.now()}`\n this.log('PushedInstanceId: ', pushedInstanceId)\n }\n\n private log(message: string, ...args: any[]) {\n console.log(`[Venus Mock] ${message}`, ...args)\n }\n}\n","import {\r\n NavigationApi,\r\n NavigationStackInfo,\r\n PushAppOptions,\r\n QuitOptions,\r\n} from './NavigationApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { VenusAPI } from '../venus-api/types'\r\n\r\nexport class RpcNavigationApi implements NavigationApi {\r\n private readonly venusApi: VenusAPI\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient, venusApi: VenusAPI) {\r\n this.rpcClient = rpcClient\r\n this.venusApi = venusApi\r\n }\r\n async requestPopOrQuit(options?: QuitOptions): Promise<boolean> {\r\n const result = await this.rpcClient.call<PopOrQuitResponse>(\r\n VenusMessageId.QUIT,\r\n options,\r\n )\r\n return result.success\r\n }\r\n\r\n getStackInfo(): NavigationStackInfo {\r\n const venusApi = this.venusApi\r\n console.log('[Venus] getStackInfo called')\r\n const config = window.venus._config\r\n const stackInfo = config.context?.stack || {\r\n isInStack: false,\r\n stackPosition: 0,\r\n parentInstanceId: null,\r\n appType: 'standalone',\r\n }\r\n return stackInfo\r\n }\r\n\r\n popApp(): Promise<void> {\r\n const rpcClient = this.rpcClient\r\n console.log('[Venus] popAppAsync called')\r\n return rpcClient.call(VenusMessageId.H5_STACK_POP_REQUEST)\r\n }\r\n\r\n pushApp(appId: string, options?: PushAppOptions): Promise<void> {\r\n const rpcClient = this.rpcClient\r\n console.log('[Venus] pushAppAsync called', { appId, options })\r\n return rpcClient.call(VenusMessageId.H5_STACK_PUSH_REQUEST, {\r\n targetAppId: appId,\r\n contextData: options?.contextData,\r\n appParams: options?.appParams,\r\n })\r\n }\r\n}\r\n\r\ninterface PopOrQuitResponse {\r\n success: boolean\r\n action: 'popped_from_stack'\r\n quitReason: string\r\n timestamp: number\r\n}\r\n","import { VenusAPI } from '../venus-api/types'\nimport { Host } from '../Host'\n\nexport * from './NavigationApi'\nexport * from './MockNavigationApi'\nexport * from './RpcNavigationApi'\n\nexport function initializeStackNavigation(venusApi: VenusAPI, host: Host) {\n venusApi._mock.stackState = {\n isInStack: false,\n stackPosition: 0,\n stackDepth: 0,\n isTopOfStack: false,\n parentInstanceId: null,\n stackHistory: [], // Track navigation history for mock\n }\n\n venusApi.pushAppAsync = host.navigation.pushApp.bind(host.navigation)\n venusApi.popAppAsync = host.navigation.popApp.bind(host.navigation)\n venusApi.getStackInfo = host.navigation.getStackInfo.bind(host.navigation)\n venusApi.requestPopOrQuit = (options) => {\n return host.navigation.requestPopOrQuit(options)\n }\n}\n","import {\r\n NotificationsApi,\r\n ScheduleLocalNotification,\r\n ScheduleNotificationOptions,\r\n} from './NotificationsApi'\r\nimport {\r\n createMockDelay,\r\n isWebPlatform,\r\n MOCK_DELAYS,\r\n} from '../venus-api/systems/core'\r\nimport { VenusAPI } from '../venus-api/types'\r\n\r\nexport class MockNotificationsApi implements NotificationsApi {\r\n private readonly venusApi: VenusAPI\r\n\r\n constructor(venusApi: VenusAPI) {\r\n this.venusApi = venusApi\r\n }\r\n\r\n async cancelNotification(notificationId: string): Promise<boolean> {\r\n const venusApi = this.venusApi\r\n\r\n // Check if notifications are supported on this platform\r\n if (isWebPlatform()) {\r\n console.log(\r\n '[Venus Mock] Cancel notification on web platform (simulated):',\r\n notificationId,\r\n )\r\n return true\r\n }\r\n\r\n console.log('[Venus Mock] Cancel local notification:', notificationId)\r\n\r\n // Simulate a delay\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n // Remove from mock storage\r\n if (\r\n venusApi._mock.scheduledNotifications &&\r\n venusApi._mock.scheduledNotifications[notificationId]\r\n ) {\r\n delete venusApi._mock.scheduledNotifications[notificationId]\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n async getAllScheduledLocalNotifications(): Promise<\r\n ScheduleLocalNotification[]\r\n > {\r\n // Check if notifications are supported on this platform\r\n if (isWebPlatform()) {\r\n console.log(\r\n '[Venus Mock] Get notifications on web platform (returning empty list)',\r\n )\r\n // Return direct array (not wrapped in success object)\r\n return []\r\n }\r\n\r\n console.log('[Venus Mock] Get all scheduled local notifications')\r\n\r\n // Simulate a delay\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n const venusApi = this.venusApi\r\n\r\n // Return direct array of notifications (not wrapped in success object)\r\n const notifications = venusApi._mock.scheduledNotifications || {}\r\n return Object.values(notifications)\r\n }\r\n\r\n async isLocalNotificationsEnabled(): Promise<boolean> {\r\n // Check if notifications are supported on this platform\r\n if (isWebPlatform()) {\r\n console.log('[Venus Mock] Notifications not available on web platform')\r\n // Return direct boolean (not wrapped in success object)\r\n return false\r\n }\r\n\r\n console.log('[Venus Mock] Check if local notifications are enabled')\r\n\r\n // Simulate a delay\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n const venusApi = this.venusApi\r\n // Return direct boolean (not wrapped in success object)\r\n const isEnabled = venusApi._mock.notificationsEnabled !== false\r\n return isEnabled\r\n }\r\n\r\n async scheduleAsync(\r\n title: string,\r\n body: string,\r\n seconds: number,\r\n notificationId?: string,\r\n options?: ScheduleNotificationOptions\r\n ): Promise<string | null> {\r\n const { priority = 50, groupId, payload } = options || {}\r\n \r\n // Check if notifications are supported on this platform\r\n if (isWebPlatform()) {\r\n console.log(\r\n '[Venus Mock] Notifications not supported on web platform, simulating success',\r\n )\r\n\r\n // Provide helpful feedback to developers\r\n console.info(\r\n '🔔 [Venus Mock] Notification would be scheduled:',\r\n title || 'Untitled',\r\n '\\n Body:',\r\n body || 'No body',\r\n '\\n This is a simulation - real notifications require a native platform.',\r\n )\r\n\r\n // Return direct mock ID (not wrapped in success object)\r\n const mockId = `mock-web-notification-${Date.now()}`\r\n return mockId\r\n }\r\n\r\n console.log('[Venus Mock] Schedule local notification:', { title, body, seconds, options })\r\n\r\n const venusApi = this.venusApi\r\n // Initialize pendingRequests if it doesn't exist\r\n if (!venusApi._mock.pendingRequests) {\r\n console.log('[Venus Mock] Initializing pendingRequests')\r\n venusApi._mock.pendingRequests = {}\r\n }\r\n\r\n const requestId = Date.now().toString()\r\n console.log('[Venus Mock] Creating request with ID:', requestId)\r\n\r\n return new Promise((resolve) => {\r\n venusApi._mock.pendingRequests[requestId] = { resolve }\r\n\r\n // Generate a mock notification ID\r\n const id = notificationId || `mock-notification-${Date.now()}`\r\n\r\n // Store this notification in mock storage for later retrieval\r\n if (!venusApi._mock.scheduledNotifications) {\r\n venusApi._mock.scheduledNotifications = {}\r\n }\r\n\r\n venusApi._mock.scheduledNotifications[id] = {\r\n id,\r\n title,\r\n body,\r\n payload,\r\n seconds,\r\n }\r\n\r\n // Simulate a delay using standard timing\r\n setTimeout(() => {\r\n // Return direct notification ID (not wrapped in success object)\r\n resolve(id)\r\n }, MOCK_DELAYS.short)\r\n })\r\n }\r\n\r\n async setLocalNotificationsEnabled(enabled: boolean): Promise<boolean> {\r\n const venusApi = this.venusApi\r\n\r\n // Check if notifications are supported on this platform\r\n if (isWebPlatform()) {\r\n console.log(\r\n '[Venus Mock] Set notifications enabled on web platform (simulated):',\r\n enabled,\r\n )\r\n // Return void for successful setting (like the real API)\r\n return true\r\n }\r\n\r\n console.log('[Venus Mock] Set local notifications enabled:', enabled)\r\n\r\n // Simulate a delay\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n // Update mock storage\r\n venusApi._mock.notificationsEnabled = enabled\r\n return enabled\r\n }\r\n}\r\n","import {\r\n NotificationsApi,\r\n ScheduleLocalNotification,\r\n ScheduleNotificationOptions,\r\n NotificationTriggerInput,\r\n} from './NotificationsApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\n\r\nexport class RpcNotificationsApi implements NotificationsApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async scheduleAsync(\r\n title: string,\r\n body: string,\r\n seconds: number,\r\n notificationId?: string,\r\n options?: ScheduleNotificationOptions\r\n ): Promise<string | null> {\r\n const { priority = 50, groupId, payload } = options || {}\r\n \r\n const request: ScheduleLocalNotificationRequest = {\r\n title,\r\n body,\r\n priority,\r\n key: groupId,\r\n data: payload,\r\n seconds,\r\n notificationId,\r\n }\r\n const response =\r\n await this.rpcClient.call<ScheduleLocalNotificationResponse>(\r\n VenusMessageId.SCHEDULE_LOCAL_NOTIFICATION,\r\n request,\r\n )\r\n\r\n if (response.scheduled) {\r\n return response.id\r\n }\r\n return null\r\n }\r\n\r\n async cancelNotification(id: string): Promise<boolean> {\r\n const result = await this.rpcClient.call<CancelLocalNotificationResult>(\r\n VenusMessageId.CANCEL_LOCAL_NOTIFICATION,\r\n {\r\n id: id,\r\n },\r\n )\r\n return result.canceled\r\n }\r\n\r\n async getAllScheduledLocalNotifications(): Promise<\r\n ScheduleLocalNotification[]\r\n > {\r\n const response =\r\n await this.rpcClient.call<GetAllLocalNotificationsResponse>(\r\n VenusMessageId.GET_ALL_SCHEDULED_LOCAL_NOTIFICATIONS,\r\n {},\r\n )\r\n\r\n const notifications: ScheduleLocalNotification[] =\r\n response.notifications.map((notif) => {\r\n return {\r\n id: notif.identifier,\r\n title: notif.content.title,\r\n body: notif.content.body,\r\n payload: notif.content.data,\r\n trigger: notif.trigger,\r\n }\r\n })\r\n\r\n return notifications\r\n }\r\n\r\n async isLocalNotificationsEnabled(): Promise<boolean> {\r\n const response =\r\n await this.rpcClient.call<IsLocalNotificationsEnabledResponse>(\r\n VenusMessageId.IS_LOCAL_NOTIFICATIONS_ENABLED,\r\n {},\r\n )\r\n return response.enabled\r\n }\r\n\r\n async setLocalNotificationsEnabled(enabled: boolean): Promise<boolean> {\r\n const response =\r\n await this.rpcClient.call<SetLocalNotificationsEnabledResponse>(\r\n VenusMessageId.SET_LOCAL_NOTIFICATIONS_ENABLED,\r\n {\r\n enabled: enabled,\r\n },\r\n )\r\n return response.enabled\r\n }\r\n}\r\n\r\ninterface CancelLocalNotificationResult {\r\n id: string\r\n canceled: boolean\r\n}\r\n\r\ninterface ScheduleLocalNotificationRequest {\r\n title: string\r\n body: string\r\n priority: number\r\n key?: string // Optional key for grouping related notifications\r\n data?: Record<string, any>\r\n seconds?: number\r\n notificationId?: string\r\n}\r\n\r\ninterface ScheduleLocalNotificationResponse {\r\n id: string\r\n scheduled: boolean\r\n trigger?: NotificationTriggerInput\r\n}\r\n\r\ninterface IsLocalNotificationsEnabledResponse {\r\n enabled: boolean\r\n}\r\n\r\ninterface SetLocalNotificationsEnabledResponse {\r\n enabled: boolean\r\n}\r\n\r\ninterface GetAllLocalNotificationsResponse {\r\n notifications: NotificationRequest[]\r\n count: number\r\n}\r\n\r\ninterface NotificationRequest {\r\n identifier: string\r\n content: NotificationContent\r\n trigger?: NotificationTriggerInput\r\n}\r\n\r\nexport type NotificationContent = {\r\n title: string | null\r\n subtitle: string | null\r\n body: string | null\r\n data?: Record<string, any>\r\n}\r\n","import { VenusAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\n\r\nexport * from './NotificationsApi'\r\nexport * from './MockNotificationsApi'\r\nexport * from './RpcNotificationsApi'\r\n\r\nexport function initializeLocalNotifications(venusApi: VenusAPI, host: Host) {\r\n venusApi.notifications = host.notifications\r\n}\r\n","import {\r\n ActionSheetItem,\r\n PopupsApi,\r\n ShowActionSheetOptions,\r\n ShowAlertOptions,\r\n ShowConfirmOptions,\r\n ShowToastOptions,\r\n} from './PopupsApi'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { RpcClient } from '../rpc'\r\n\r\nexport class RpcPopupsApi implements PopupsApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async showActionSheet(\r\n items: ActionSheetItem[],\r\n options?: ShowActionSheetOptions,\r\n ): Promise<string | number | null> {\r\n const result = await this.rpcClient.call<string | number>(\r\n VenusMessageId.ACTION_SHEET_SHOW,\r\n {\r\n title: options?.title || '',\r\n message: options?.message || '',\r\n options: items,\r\n cancelButtonText: options?.cancelButtonText || 'Cancel',\r\n },\r\n )\r\n return result\r\n }\r\n\r\n async showAlert(\r\n title: string,\r\n message: string,\r\n options?: ShowAlertOptions,\r\n ): Promise<void> {\r\n const buttonText = options?.buttonText || 'OK'\r\n await this.rpcClient.call(VenusMessageId.ALERT_DIALOG, {\r\n title,\r\n message,\r\n buttonText,\r\n })\r\n }\r\n\r\n async showConfirm(\r\n title: string,\r\n message: string,\r\n options?: ShowConfirmOptions,\r\n ): Promise<boolean> {\r\n const confirmText = options?.confirmText || 'OK'\r\n const cancelText = options?.cancelText || 'Cancel'\r\n\r\n const result = await this.rpcClient.call<boolean>(\r\n VenusMessageId.CONFIRM_DIALOG,\r\n {\r\n title,\r\n message,\r\n confirmText,\r\n cancelText,\r\n },\r\n )\r\n\r\n return result\r\n }\r\n\r\n async showToast(\r\n message: string,\r\n options?: ShowToastOptions,\r\n ): Promise<boolean> {\r\n const duration = options?.duration ?? 3000\r\n const variant = options?.variant ?? 'info'\r\n const response = await this.rpcClient.call<ShowToastResponse>(\r\n VenusMessageId.TOAST,\r\n {\r\n message,\r\n duration,\r\n variant,\r\n action: options?.action,\r\n },\r\n duration + 2000,\r\n )\r\n return response.actionTriggered\r\n }\r\n}\r\n\r\nexport interface ShowToastResponse {\r\n shown: boolean\r\n actionTriggered: boolean\r\n}\r\n","import {\r\n ActionSheetItem,\r\n PopupsApi,\r\n ShowActionSheetOptions,\r\n ShowAlertOptions,\r\n ShowConfirmOptions,\r\n ShowToastOptions,\r\n} from './PopupsApi'\r\nimport { MockOverlay } from '../MockOverlay'\r\n\r\nexport class MockPopupsApi implements PopupsApi {\r\n private readonly overlay: MockOverlay\r\n\r\n constructor(override: MockOverlay) {\r\n this.overlay = override\r\n }\r\n\r\n showActionSheet(\r\n items: ActionSheetItem[],\r\n options?: ShowActionSheetOptions,\r\n ): Promise<string | number | null> {\r\n console.log(\r\n `[Venus Mock] Show Action sheet, items: ${JSON.stringify(items, null, 2)}, options: ${JSON.stringify(options, null, 2)}`,\r\n )\r\n return this.overlay.showActionSheet(items, options)\r\n }\r\n\r\n async showAlert(\r\n title: string,\r\n message: string,\r\n options?: ShowAlertOptions,\r\n ): Promise<void> {\r\n window.alert(`${title}\\n${message}`)\r\n }\r\n\r\n async showConfirm(\r\n title: string,\r\n message: string,\r\n options?: ShowConfirmOptions,\r\n ): Promise<boolean> {\r\n const result = window.confirm(`${title || 'Confirm'}\\n${message}`)\r\n\r\n return result\r\n }\r\n\r\n async showToast(\r\n message: string,\r\n options?: ShowToastOptions,\r\n ): Promise<boolean> {\r\n const variant = options?.variant ?? 'info'\r\n const duration = options?.duration ?? 3000\r\n const action = options?.action\r\n\r\n console.log('[Venus Mock] Toast:', message, {\r\n variant,\r\n duration,\r\n hasAction: !!action,\r\n })\r\n\r\n // Handle action toasts vs simple toasts\r\n if (action) {\r\n // Action toast - show with action button simulation\r\n const actionResult = window.confirm(\r\n `${message}\\n\\n[${action.label}] or [Cancel]`,\r\n )\r\n\r\n if (actionResult) {\r\n console.log('[Venus Mock] Toast action triggered:', action.label)\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\n\r\nexport * from './PopupsApi'\r\nexport * from './RpcPopupsApi'\r\nexport * from './MockPopupsApi'\r\n\r\nexport function initializePopups(venusApi: VenusAPI, host: Host) {\r\n venusApi.showToast = async (input) => {\r\n if (typeof input === 'string') {\r\n return await host.popups.showToast(input)\r\n } else {\r\n return await host.popups.showToast(input.message, {\r\n duration: input.duration,\r\n action: input.action,\r\n variant: 'success',\r\n })\r\n }\r\n }\r\n\r\n venusApi.showAlert = async (input) => {\r\n await host.popups.showAlert(input.title, input.message, {\r\n buttonText: input.buttonText,\r\n })\r\n }\r\n\r\n venusApi.showConfirm = async (input) => {\r\n const confirmed = await host.popups.showConfirm(\r\n input.title,\r\n input.message,\r\n {\r\n confirmText: input.confirmText,\r\n cancelText: input.cancelText,\r\n },\r\n )\r\n return confirmed\r\n }\r\n\r\n venusApi.showActionSheet = async (input) => {\r\n return await host.popups.showActionSheet(input.options, {\r\n title: input.title,\r\n message: input.message,\r\n cancelButtonText: input.cancelButtonText,\r\n disableCancel: input.disableCancel,\r\n })\r\n }\r\n\r\n venusApi.popups = host.popups\r\n}\r\n","import { ProfileApi } from './ProfileApi'\r\nimport { Profile } from '../venus-api/types'\r\n\r\nexport class HostProfileApi implements ProfileApi {\r\n getCurrentProfile(): Profile {\r\n // Return profile from dedicated profile storage\r\n const profile = window.venus?.profile\r\n \r\n if (!profile) {\r\n throw new Error(\r\n '[Venus SDK] Host profile handshake did not complete. Await VenusAPI.initializeAsync() so INIT_SDK can deliver the profile before calling profile APIs.',\r\n )\r\n }\r\n\r\n // Profile is already sanitized by RemoteHost.initNew()\r\n // Validate required fields\r\n if (!profile.id || !profile.username) {\r\n throw new Error(\r\n '[Venus SDK] INIT_SDK returned an incomplete profile (missing id/username). The host must supply real credentials before rooms APIs are used.',\r\n )\r\n }\r\n\r\n return {\r\n id: profile.id,\r\n username: profile.username,\r\n avatarUrl: profile.avatarUrl,\r\n isAnonymous: profile.isAnonymous,\r\n }\r\n }\r\n}\r\n","import { ProfileApi } from './ProfileApi'\r\nimport { Profile } from '../venus-api/types'\r\n\r\nexport class MockProfileApi implements ProfileApi {\r\n getCurrentProfile(): Profile {\r\n return {\r\n id: 'mock_profile_123',\r\n name: 'Mock User',\r\n username: 'mockuser',\r\n isAnonymous: false,\r\n }\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types.ts'\nimport { Host } from '../Host'\n\nexport * from './ProfileApi'\nexport * from './HostProfileApi'\nexport * from './MockProfileApi'\n\nexport function initializeProfile(venusApi: VenusAPI, host: Host) {\n venusApi.getCurrentProfile = () => {\n return host.profile.getCurrentProfile()\n }\n}\n","import { RpcRequest } from './RpcRequest.ts'\r\nimport { RpcResponse } from './RpcResponse.ts'\r\nimport { RpcTransport } from './RpcTransport.ts'\r\nimport { RpcNotification } from './RpcNotification'\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 = this.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 generateId(): string {\r\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\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 { StorageApi } from './StorageApi.ts'\r\n\r\nexport type StorageType = 'globalStorage' | 'deviceCache' | 'appStorage'\r\n\r\nexport function createMockStorageApi(\r\n storageType: StorageType,\r\n appUrl?: string,\r\n) {\r\n const appIdentifier = appUrl ? generateAppIdentifier(appUrl) : null\r\n\r\n let prefix\r\n let syncDelay = 0 // Simulate sync delay for cloud storage\r\n\r\n switch (storageType) {\r\n case 'deviceCache':\r\n prefix = 'venus:app' // Keep same prefix for backward compatibility\r\n syncDelay = 0 // No sync delay\r\n break\r\n case 'appStorage':\r\n prefix = 'venus:app' // Same prefix as deviceCache (both are app-specific)\r\n syncDelay = 100 // Simulate cloud sync delay\r\n break\r\n case 'globalStorage':\r\n prefix = 'venus:global' // Cross-app cloud storage\r\n syncDelay = 100 // Simulate cloud sync delay\r\n break\r\n default:\r\n throw new Error(`Unknown storage type: ${storageType}`)\r\n }\r\n\r\n prefix =\r\n storageType === 'globalStorage' || !appIdentifier\r\n ? `${prefix}:`\r\n : `${prefix}:${appIdentifier}:`\r\n\r\n return new MockStorageApi(prefix, syncDelay)\r\n}\r\n\r\nexport class MockStorageApi implements StorageApi {\r\n private readonly prefix: string\r\n private readonly syncDelay: number\r\n\r\n constructor(prefix: string, syncDelay: number) {\r\n this.prefix = prefix\r\n this.syncDelay = syncDelay\r\n }\r\n\r\n async clear(): Promise<void> {\r\n const fullLength = localStorage.length\r\n for (let i = 0; i < fullLength; i++) {\r\n const fullKey = localStorage.key(i)\r\n if (fullKey && fullKey.startsWith(this.prefix)) {\r\n localStorage.removeItem(fullKey)\r\n }\r\n }\r\n await this.simulateSyncDelay()\r\n }\r\n\r\n async getAllItems(): Promise<string[]> {\r\n const items = new Array<string>()\r\n const fullLength = localStorage.length\r\n for (let i = 0; i < fullLength; i++) {\r\n const fullKey = localStorage.key(i)\r\n if (fullKey && fullKey.startsWith(this.prefix)) {\r\n const item = localStorage.getItem(fullKey)\r\n if (item) {\r\n items.push(item)\r\n }\r\n }\r\n }\r\n return items\r\n }\r\n\r\n async getItem(key: string): Promise<string | null> {\r\n const fullKey = this.buildKey(key)\r\n await this.simulateSyncDelay()\r\n return localStorage.getItem(fullKey)\r\n }\r\n\r\n async key(index: number): Promise<string | null> {\r\n const keys = this.keys()\r\n if (index < 0 || index >= keys.length) {\r\n return null\r\n }\r\n await this.simulateSyncDelay()\r\n return keys[index]\r\n }\r\n\r\n async length(): Promise<number> {\r\n return this.keys().length\r\n }\r\n\r\n async removeItem(key: string): Promise<void> {\r\n const fullKey = this.buildKey(key)\r\n await this.simulateSyncDelay()\r\n localStorage.removeItem(fullKey)\r\n }\r\n\r\n async setItem(key: string, item: string): Promise<void> {\r\n const fullKey = this.buildKey(key)\r\n await this.simulateSyncDelay()\r\n localStorage.setItem(fullKey, item)\r\n }\r\n\r\n async setMultipleItems(\r\n entries: { key: string; value: string }[],\r\n ): Promise<void> {\r\n for (const entry of entries) {\r\n const fullKey = this.buildKey(entry.key)\r\n localStorage.setItem(fullKey, entry.value)\r\n }\r\n await this.simulateSyncDelay()\r\n }\r\n\r\n async removeMultipleItems(keys: string[]): Promise<void> {\r\n for (const key of keys) {\r\n const fullKey = this.buildKey(key)\r\n localStorage.removeItem(fullKey)\r\n }\r\n await this.simulateSyncDelay()\r\n }\r\n\r\n private buildKey(key: string): string {\r\n const prefix = this.prefix\r\n return `${prefix}${key}`\r\n }\r\n\r\n private extractKey(fullKey: string): string {\r\n const prefix = this.prefix\r\n return fullKey.substring(prefix.length)\r\n }\r\n\r\n private keys(): string[] {\r\n const keys = new Array<string>()\r\n let length = localStorage.length\r\n for (let i = 0; i < length; i++) {\r\n const fullKey = localStorage.key(i)\r\n if (fullKey && fullKey.startsWith(this.prefix)) {\r\n length++\r\n const key = this.extractKey(fullKey)\r\n keys.push(key)\r\n }\r\n }\r\n return keys\r\n }\r\n\r\n private async simulateSyncDelay() {\r\n const syncDelay = this.syncDelay\r\n if (syncDelay > 0) {\r\n await new Promise((resolve) => setTimeout(resolve, syncDelay))\r\n }\r\n }\r\n}\r\n\r\nfunction generateAppIdentifier(appUrl?: string) {\r\n if (!appUrl) appUrl = ''\r\n\r\n // First normalize to ensure we're hashing the same identifier regardless of format\r\n const normalizedId = normalizeAppIdentifier(appUrl)\r\n // Generating hash for normalized ID\r\n\r\n let hash = 0\r\n for (let i = 0; i < normalizedId.length; i++) {\r\n const char = normalizedId.charCodeAt(i)\r\n hash = (hash << 5) - hash + char // Same as real API - djb2 hash algorithm\r\n hash |= 0 // Convert to 32bit integer\r\n }\r\n\r\n // Convert to hex\r\n // Generated app identifier\r\n return Math.abs(hash).toString(16)\r\n}\r\n\r\nfunction normalizeAppIdentifier(input: string) {\r\n // Normalizing app identifier input\r\n\r\n // Handle full URLs\r\n if (input.startsWith('http')) {\r\n try {\r\n // For URLs like http://127.0.0.1:5000/H5/bird-flap/index.html?cacheBust=12345678\r\n // Extract the app ID part (bird-flap)\r\n const url = new URL(input)\r\n const pathParts = url.pathname.split('/')\r\n\r\n // Find the part after 'H5' in the path\r\n const h5Index = pathParts.findIndex((part) => part === 'H5')\r\n if (h5Index !== -1 && h5Index < pathParts.length - 1) {\r\n const appId = pathParts[h5Index + 1]\r\n // Extracted app ID from full URL path\r\n return appId\r\n }\r\n\r\n // If we couldn't extract from path, use the hostname as fallback\r\n // Could not extract app ID from URL path, using hostname\r\n return url.hostname\r\n } catch (error) {\r\n console.error(`[Venus Mock] Error parsing URL: ${error}`, { input })\r\n // If URL parsing fails, treat as a raw ID\r\n return input\r\n }\r\n }\r\n\r\n // Handle path-based URLs like '/H5/bird-flap/index.html'\r\n if (input.includes('/H5/')) {\r\n try {\r\n const pathParts = input.split('/')\r\n // Find the part after 'H5' in the path\r\n const h5Index = pathParts.findIndex((part) => part === 'H5')\r\n if (h5Index !== -1 && h5Index < pathParts.length - 1) {\r\n const appId = pathParts[h5Index + 1]\r\n // Extracted app ID from path-based URL\r\n return appId\r\n }\r\n } catch (error) {\r\n console.error(`[Venus Mock] Error parsing path-based URL: ${error}`, {\r\n input,\r\n })\r\n }\r\n }\r\n\r\n // Not a URL, just return as is\r\n // Input is not a URL, treating as raw app ID\r\n return input\r\n}\r\n","import { RpcClient } from '../rpc'\nimport { StorageApi } from './StorageApi.ts'\n\nexport interface MethodIds {\n clear: string\n getItem: string\n getKey: string\n length: string\n removeItem: string\n setItem: string\n getAllItems?: string\n removeMultipleItems?: string\n setMultipleItems?: string\n}\n\nexport class RpcStorageApi implements StorageApi {\n private readonly rpcClient: RpcClient\n private readonly methodIds: MethodIds\n\n constructor(rpcClient: RpcClient, methodIds: MethodIds) {\n this.rpcClient = rpcClient\n this.methodIds = methodIds\n }\n\n clear(): Promise<void> {\n return this.rpcClient.call(this.methodIds.clear)\n }\n\n getItem(key: string): Promise<string | null> {\n return this.rpcClient.call(this.methodIds.getItem, {\n key: key,\n })\n }\n\n setItem(key: string, value: string): Promise<void> {\n return this.rpcClient.call(this.methodIds.setItem, {\n key: key,\n value: value,\n })\n }\n\n key(index: number): Promise<string | null> {\n return this.rpcClient.call(this.methodIds.getKey, {\n index: index,\n })\n }\n\n length(): Promise<number> {\n return this.rpcClient.call(this.methodIds.length)\n }\n\n removeItem(key: string): Promise<void> {\n return this.rpcClient.call(this.methodIds.removeItem, {\n key: key,\n })\n }\n\n removeMultipleItems(keys: string[]): Promise<void> {\n if (!this.methodIds.removeMultipleItems) {\n throw new Error('Method not implemented')\n }\n return this.rpcClient.call(this.methodIds.removeMultipleItems, {\n keys: keys,\n })\n }\n\n getAllItems(): Promise<string[]> {\n if (!this.methodIds.getAllItems) {\n throw new Error('Method not implemented')\n }\n return this.rpcClient.call(this.methodIds.getAllItems)\n }\n\n setMultipleItems(items: { key: string; value: string }[]): Promise<void> {\n if (!this.methodIds.setMultipleItems) {\n throw new Error('Method not implemented')\n }\n return this.rpcClient.call(this.methodIds.setMultipleItems, {\n items: items,\n })\n }\n}\n","import { VenusAPI } from '../venus-api/types.ts'\nimport { Host } from '../Host.ts'\n\nexport * from './StorageApi'\nexport * from './MockStorageApi'\nexport * from './RpcStorageApi'\n\nexport function initializeStorage(venusApiInstance: VenusAPI, host: Host) {\n venusApiInstance.deviceCache = host.deviceCache\n venusApiInstance.appStorage = host.appStorage\n venusApiInstance.globalStorage = host.globalStorage\n}\n","export function sumContributions(\n contributions: Record<string, any>,\n): Record<string, number> {\n const totals: Record<string, number> = {}\n for (const profileId in contributions) {\n for (const entityId in contributions[profileId]) {\n const amount = contributions[profileId][entityId] || 0\n totals[entityId] = (totals[entityId] || 0) + amount\n }\n }\n return totals\n}\n","import {\r\n CollectRecipeResult,\r\n ExecuteRecipeOptions,\r\n ExecuteScopedRecipeResult,\r\n GetActiveRunsOptions,\r\n GetAvailableRecipesOptions,\r\n GetAvailableRecipesResult,\r\n GetBatchRecipeRequirements,\r\n Recipe,\r\n SimulationApi,\r\n TriggerRecipeChainOptions,\r\n} from './SimulationApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { VenusSimulationConfig } from '../venus-api/types'\r\nimport { sumContributions } from './utils'\r\n\r\nexport class RpcSimulationApi implements SimulationApi {\r\n private readonly rpcClient: RpcClient\r\n private _simulationConfig: VenusSimulationConfig | null = null\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n async validateSlotAssignmentAsync(\r\n containerId: string,\r\n slotId: string,\r\n itemId: string,\r\n ): Promise<any> {\r\n return this.rpcClient.call(\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 sumContributions(contributions: Record<string, any>): Record<string, number> {\r\n return sumContributions(contributions)\r\n }\r\n\r\n executeBatchOperationsAsync(\r\n operations: Array<any>,\r\n validateOnly?: boolean,\r\n ): Promise<any> {\r\n return this.rpcClient.call(VenusMessageId.H5_SIMULATION_BATCH_OPERATIONS, {\r\n operations,\r\n validateOnly,\r\n })\r\n }\r\n async getAvailableItemsAsync(\r\n containerId: string,\r\n slotId: string,\r\n ): Promise<Array<any>> {\r\n const response = await this.rpcClient.call<any>(\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<any> {\r\n return this.rpcClient.call(\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<any> {\r\n return this.rpcClient.call(VenusMessageId.H5_SIMULATION_ASSIGN_ITEM, {\r\n containerId,\r\n slotId,\r\n itemId,\r\n })\r\n }\r\n\r\n removeItemFromSlotAsync(containerId: string, slotId: string): Promise<any> {\r\n return this.rpcClient.call(VenusMessageId.H5_SIMULATION_REMOVE_ITEM, {\r\n containerId,\r\n slotId,\r\n })\r\n }\r\n\r\n async getSlotContainersAsync(): Promise<any> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_SIMULATION_GET_CONTAINERS,\r\n {},\r\n )\r\n return response.containers || []\r\n }\r\n\r\n async getSlotAssignmentsAsync(containerId: string): Promise<any> {\r\n const response: any = await this.rpcClient.call(\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) ? response : response.assignments || []\r\n }\r\n\r\n async getStateAsync(roomId?: string): Promise<any> {\r\n const response = await this.rpcClient.call<any>(\r\n VenusMessageId.H5_SIMULATION_GET_STATE,\r\n {\r\n roomId: roomId,\r\n },\r\n )\r\n\r\n console.log('[Venus SDK] getStateAsync', response)\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 )\r\n console.log('[Venus SDK] getConfigAsync', config)\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?: any,\r\n options?: ExecuteRecipeOptions,\r\n ): Promise<any> {\r\n return this.rpcClient.call(VenusMessageId.H5_SIMULATION_EXECUTE_RECIPE, {\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 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(options?: GetActiveRunsOptions): Promise<any> {\r\n return this.rpcClient.call(VenusMessageId.H5_SIMULATION_GET_ACTIVE_RUNS, {\r\n roomId: options?.roomId,\r\n })\r\n }\r\n\r\n executeScopedRecipeAsync(\r\n recipeId: string,\r\n entity: string,\r\n inputs?: any,\r\n options?: any,\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(recipe: Recipe): Promise<any> {\r\n return this.rpcClient.call(\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(\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<any> {\r\n return this.rpcClient.call(\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(entityId: string): Promise<any> {\r\n return this.rpcClient.call(\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<any> {\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\r\ninterface ResolveFieldValueResponse {\r\n value: any\r\n}\r\n","import {\r\n CollectRecipeResult,\r\n ExecuteRecipeOptions,\r\n ExecuteScopedRecipeResult,\r\n GetActiveRunsOptions,\r\n GetAvailableRecipesOptions,\r\n GetAvailableRecipesResult,\r\n GetBatchRecipeRequirements,\r\n Recipe,\r\n SimulationApi,\r\n TriggerRecipeChainOptions,\r\n} from './SimulationApi'\r\nimport {\r\n RecipeRequirementResult,\r\n VenusSimulationConfig,\r\n VenusSimulationEffect,\r\n VenusSimulationState,\r\n} from '../venus-api/types'\r\nimport { sumContributions } from './utils'\r\n\r\nfunction generateAppIdentifier() {\r\n if (typeof window === 'undefined') return 'unknown-app'\r\n\r\n const url = window.location.href\r\n // Extract app ID from URL path like /H5/farming-game/index.html\r\n const match = url.match(/\\/H5\\/([^\\/]+)/)\r\n return match ? match[1] : 'unknown-app'\r\n}\r\n\r\nexport class MockSimulationApi implements SimulationApi {\r\n private readonly mockSimulationConfigs = new Map<\r\n string,\r\n VenusSimulationConfig\r\n >() // appIdentifier -> config\r\n private readonly mockSimulationStates = new Map<\r\n string,\r\n VenusSimulationState\r\n >() // appIdentifier -> config\r\n private readonly mockActiveTimers = new Map() // appIdentifier -> timers[]\r\n private readonly appId: string\r\n private readonly providedSimulationConfig: VenusSimulationConfig | null\r\n\r\n constructor(simulationConfig: VenusSimulationConfig | null = null) {\r\n this.appId = generateAppIdentifier()\r\n this.providedSimulationConfig = simulationConfig\r\n }\r\n\r\n sumContributions(contributions: Record<string, any>): Record<string, number> {\r\n return sumContributions(contributions)\r\n }\r\n\r\n async validateSlotAssignmentAsync(\r\n containerId: string,\r\n slotId: string,\r\n itemId: string,\r\n ): Promise<any> {\r\n this.log('validateSlotAssignmentAsync called:', {\r\n containerId,\r\n slotId,\r\n itemId,\r\n })\r\n return { valid: true, message: 'Mock validation successful' }\r\n }\r\n async executeBatchOperationsAsync(\r\n operations: Array<any>,\r\n validateOnly?: boolean,\r\n ): Promise<any> {\r\n this.log('executeBatchOperationsAsync called:', {\r\n operations,\r\n validateOnly,\r\n })\r\n return {\r\n success: true,\r\n results: operations.map(() => ({ success: true })),\r\n }\r\n }\r\n async getAvailableItemsAsync(\r\n containerId: string,\r\n slotId: string,\r\n ): Promise<Array<any>> {\r\n console.log('[Venus Simulation Mock] getAvailableItemsAsync called:', {\r\n containerId,\r\n slotId,\r\n })\r\n const appIdentifier = generateAppIdentifier()\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n const config = mockSimulationConfigs.get(appIdentifier) || {\r\n entities: {},\r\n }\r\n\r\n // Mock: return some available items based on config\r\n const availableItems = Object.entries(config.entities)\r\n .slice(0, 3) // Mock: limit to first 3 entities\r\n .map(([entityId, entity]) => ({\r\n entityId,\r\n quantity: 1,\r\n metadata: entity.metadata,\r\n powerPreview: 100, // Mock power value\r\n }))\r\n\r\n return availableItems\r\n }\r\n async calculatePowerPreviewAsync(\r\n containerId: string,\r\n slotId: string,\r\n candidateItemId: string,\r\n ): Promise<any> {\r\n this.log('calculatePowerPreviewAsync called:', {\r\n containerId,\r\n slotId,\r\n candidateItemId,\r\n })\r\n return {\r\n currentPower: 1000,\r\n previewPower: 1200,\r\n powerDelta: 200,\r\n breakdown: { base: 800, weapon: 200, armor: 200 },\r\n }\r\n }\r\n\r\n async getSlotContainersAsync(): Promise<any> {\r\n this.log('getSlotContainersAsync called')\r\n const appIdentifier = this.appId\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n const config = mockSimulationConfigs.get(appIdentifier) || {\r\n entities: {},\r\n }\r\n\r\n // Find entities with slot definitions\r\n const containers = Object.entries(config.entities)\r\n .filter(([_, entity]) => entity.metadata?.slots)\r\n .map(([entityId, entity]) => ({\r\n entityId,\r\n slots: entity.metadata?.slots,\r\n isOwned: true, // Mock: assume all containers are owned\r\n }))\r\n\r\n return containers\r\n }\r\n async getSlotAssignmentsAsync(containerId: string): Promise<any> {\r\n this.log('getSlotAssignmentsAsync called for:', containerId)\r\n // Mock: return empty assignments\r\n return []\r\n }\r\n async resolveFieldValueAsync(\r\n entityId: string,\r\n fieldPath: string,\r\n entity?: string,\r\n ): Promise<any> {\r\n this.log('resolveFieldValueAsync called:', {\r\n entityId,\r\n fieldPath,\r\n entity,\r\n })\r\n\r\n // Mock: return some reasonable field values\r\n const mockValues: Record<string, number> = {\r\n basePower: 850,\r\n weaponPower: 300,\r\n armorPower: 150,\r\n total_power: 1300,\r\n total_defense_power: 5000,\r\n }\r\n\r\n return mockValues[fieldPath] || 100\r\n }\r\n async getEntityMetadataAsync(entityId: string): Promise<any> {\r\n this.log('getEntityMetadataAsync called for:', entityId)\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n const appIdentifier = this.appId\r\n const config: VenusSimulationConfig = mockSimulationConfigs.get(\r\n appIdentifier,\r\n ) || {\r\n entities: {},\r\n recipes: {},\r\n fieldResolution: {},\r\n version: '0.0.0',\r\n matchmaking: {},\r\n }\r\n\r\n const entity = config.entities[entityId]\r\n return entity?.metadata || {}\r\n }\r\n\r\n async collectRecipeAsync(runId: string): Promise<CollectRecipeResult> {\r\n this.log('collectRecipeAsync called:', { runId })\r\n\r\n // Mock successful collection with sample rewards\r\n const mockRewards = {\r\n cash: Math.floor(Math.random() * 1000) + 500,\r\n experience: Math.floor(Math.random() * 50) + 25,\r\n }\r\n\r\n return {\r\n success: true,\r\n runId: runId,\r\n rewards: mockRewards,\r\n message: 'Rewards collected successfully',\r\n }\r\n }\r\n\r\n executeRecipeAsync(\r\n recipeId: string,\r\n inputs?: any,\r\n options?: ExecuteRecipeOptions,\r\n ): Promise<any> {\r\n this.log('executeRecipeAsync called:', {\r\n recipeId,\r\n inputs,\r\n options,\r\n })\r\n const appIdentifier = this.appId\r\n return this.executeRecipe(appIdentifier, recipeId, inputs)\r\n }\r\n\r\n async executeScopedRecipeAsync(\r\n recipeId: string,\r\n entity: string,\r\n inputs?: any,\r\n options?: any,\r\n ): Promise<ExecuteScopedRecipeResult> {\r\n this.log('executeScopedRecipeAsync called:', {\r\n recipeId,\r\n entity,\r\n inputs,\r\n roomId: options?.roomId,\r\n options,\r\n })\r\n return {\r\n success: true,\r\n message: 'Mock scoped recipe execution successful',\r\n }\r\n }\r\n\r\n async getActiveRunsAsync(options?: GetActiveRunsOptions): Promise<any> {\r\n this.log('getActiveRunsAsync called:', options)\r\n const appIdentifier = this.appId\r\n\r\n let state = this.mockSimulationStates.get(appIdentifier)\r\n if (!state) {\r\n state = await this.initializeSimulationState(appIdentifier)\r\n }\r\n\r\n return state.activeRuns || []\r\n }\r\n\r\n async getAvailableRecipesAsync(\r\n options?: GetAvailableRecipesOptions,\r\n ): Promise<GetAvailableRecipesResult> {\r\n this.log('getAvailableRecipesAsync called:', options)\r\n\r\n // Mock available recipes based on context\r\n const baseRecipes = [\r\n { id: 'collect_resources', scope: 'player', clientViewable: true },\r\n { id: 'upgrade_equipment', scope: 'player', clientViewable: true },\r\n ]\r\n\r\n if (options?.roomId) {\r\n baseRecipes.push(\r\n { id: 'room_upgrade', scope: 'room', clientViewable: true },\r\n { id: 'cooperative_project', scope: 'room', clientViewable: true },\r\n )\r\n }\r\n\r\n if (options?.includeActorRecipes && options?.roomId) {\r\n baseRecipes.push(\r\n { id: 'trade_with_npc', scope: 'actor', clientViewable: true },\r\n { id: 'attack_monster', scope: 'actor', clientViewable: true },\r\n )\r\n }\r\n\r\n return { success: true, recipes: baseRecipes }\r\n }\r\n\r\n async getBatchRecipeRequirementsAsync(\r\n recipes: Recipe[],\r\n ): Promise<GetBatchRecipeRequirements> {\r\n this.log('getBatchRecipeRequirementsAsync called:', {\r\n count: recipes?.length,\r\n })\r\n const results = (recipes || []).map((q) => ({\r\n recipeId: q.recipeId,\r\n entity: q.entity || null,\r\n amount: q.batchAmount || 1,\r\n inputs: { cash: 'BE:0' },\r\n canAfford: true,\r\n disabled: false,\r\n }))\r\n return { success: true, results: results }\r\n }\r\n\r\n async getRecipeRequirementsAsync(\r\n recipe: Recipe,\r\n ): Promise<RecipeRequirementResult> {\r\n this.log('getRecipeRequirementsAsync called:', recipe)\r\n // Return minimal structure similar to server response for single\r\n return {\r\n recipeId: recipe.recipeId,\r\n entity: recipe.entity || null,\r\n amount: recipe.batchAmount,\r\n inputs: { cash: 'BE:0' },\r\n canAfford: true,\r\n disabled: false,\r\n }\r\n }\r\n\r\n async triggerRecipeChainAsync(\r\n recipeId: string,\r\n options?: TriggerRecipeChainOptions,\r\n ): Promise<any> {\r\n this.log('triggerRecipeChainAsync called:', { recipeId, ...options })\r\n return {\r\n success: true,\r\n message: 'Mock recipe chain triggered successfully',\r\n }\r\n }\r\n\r\n private log(message: string, ...args: any): void {\r\n console.log(`[Venus Sim Mock] ${message}`, args)\r\n }\r\n\r\n private async executeRecipe(\r\n appIdentifier: string,\r\n recipeId: string,\r\n inputs: any,\r\n ) {\r\n this.log(`Executing recipe ${recipeId} for ${appIdentifier}`, inputs)\r\n\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n const mockSimulationStates = this.mockSimulationStates\r\n\r\n let config = mockSimulationConfigs.get(appIdentifier)\r\n let state = mockSimulationStates.get(appIdentifier)\r\n\r\n // Initialize if not exists\r\n if (!config || !state) {\r\n state = await this.initializeSimulationState(appIdentifier)\r\n\r\n // NOTE(Zee): Config still can be null here\r\n config = mockSimulationConfigs.get(appIdentifier)\r\n if (!config) {\r\n throw new Error('Failed to initialize simulation config')\r\n }\r\n }\r\n\r\n const recipe = config.recipes?.[recipeId]\r\n if (!recipe) {\r\n throw new Error(`Recipe ${recipeId} not found`)\r\n }\r\n\r\n // Check if recipe is disabled\r\n if (state.disabledRecipes?.includes(recipeId)) {\r\n throw new Error(`Recipe ${recipeId} is disabled`)\r\n }\r\n\r\n // Validate inputs\r\n if (recipe.inputs) {\r\n for (const [entityId, required] of Object.entries(recipe.inputs)) {\r\n const available = state.inventory[entityId] || 0\r\n if (available < required) {\r\n throw new Error(\r\n `Insufficient ${entityId}: required ${required}, available ${available}`,\r\n )\r\n }\r\n }\r\n }\r\n\r\n // Consume inputs\r\n if (recipe.inputs) {\r\n for (const [entityId, input] of Object.entries(recipe.inputs)) {\r\n const inventoryValue = state.inventory[entityId] || 0\r\n if (typeof input === 'number' && typeof inventoryValue === 'number') {\r\n state.inventory[entityId] = inventoryValue - input\r\n }\r\n }\r\n }\r\n\r\n // Apply begin effects immediately\r\n if (recipe.beginEffects) {\r\n this.applyEffects(state, recipe.beginEffects)\r\n }\r\n\r\n // Create simulation run\r\n const runId = this.generateRunId()\r\n const now = Date.now()\r\n const expiresAt = now + (recipe.duration || 0)\r\n\r\n const run = {\r\n id: runId,\r\n recipeId,\r\n status: 'running',\r\n startTime: now,\r\n expiresAt,\r\n inputs: recipe.inputs || {},\r\n }\r\n\r\n state.activeRuns.push(run)\r\n\r\n if (recipe.duration === 0) {\r\n // Instant recipe\r\n this.completeRun(appIdentifier, runId)\r\n return { status: 'completed', runId }\r\n } else {\r\n const mockActiveTimers = this.mockActiveTimers\r\n\r\n // Timed recipe\r\n const timer = setTimeout(() => {\r\n this.completeRun(appIdentifier, runId)\r\n }, recipe.duration)\r\n\r\n const timers = mockActiveTimers.get(appIdentifier) || []\r\n timers.push(timer)\r\n mockActiveTimers.set(appIdentifier, timers)\r\n\r\n return {\r\n status: 'running',\r\n runId,\r\n expiresAt: new Date(expiresAt).toISOString(),\r\n }\r\n }\r\n }\r\n\r\n private async initializeSimulationState(appIdentifier: string) {\r\n this.log(`Initializing simulation state for ${appIdentifier}`)\r\n\r\n const providedSimulationConfig = this.providedSimulationConfig\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n const mockSimulationStates = this.mockSimulationStates\r\n const mockActiveTimers = this.mockActiveTimers\r\n\r\n // Get configuration - use provided config or empty config\r\n const config: VenusSimulationConfig = providedSimulationConfig || {\r\n version: '1.0',\r\n entities: {},\r\n recipes: {},\r\n }\r\n mockSimulationConfigs.set(appIdentifier, config)\r\n\r\n // Initialize empty inventory\r\n const initialInventory: Record<string, any> = {}\r\n\r\n // If a config was provided, initialize starting inventory based on it\r\n if (providedSimulationConfig && config.entities) {\r\n // You can customize initial amounts here based on your needs\r\n // This is just an example that gives a small amount of each entity\r\n Object.keys(config.entities).forEach((entityId) => {\r\n initialInventory[entityId] = 0 // Start with 0, let the app set initial values\r\n })\r\n }\r\n\r\n const state = {\r\n inventory: initialInventory,\r\n activeRuns: [],\r\n disabledRecipes: new Array<string>(),\r\n }\r\n\r\n // Check for recipes that start disabled\r\n if (config.recipes) {\r\n Object.entries(config.recipes).forEach(([recipeId, recipe]) => {\r\n if (recipe.metadata?.startsDisabled) {\r\n state.disabledRecipes.push(recipeId)\r\n }\r\n })\r\n }\r\n\r\n mockSimulationStates.set(appIdentifier, state)\r\n mockActiveTimers.set(appIdentifier, [])\r\n\r\n console.log(\r\n `[Venus Simulation Mock] Initialized state for ${appIdentifier}:`,\r\n state,\r\n )\r\n\r\n // Auto-start any auto-restart recipes if configured\r\n if (config.recipes) {\r\n Object.entries(config.recipes).forEach(([recipeId, recipe]) => {\r\n // Check for autoRestart at top level OR in metadata\r\n const isAutoRestart = recipe.autoRestart || recipe.metadata?.autoRestart\r\n if (isAutoRestart && recipe.outputs) {\r\n this.log(`Found auto-restart recipe: ${recipeId}`, {\r\n topLevelAutoRestart: recipe.autoRestart,\r\n metadataAutoRestart: recipe.metadata?.autoRestart,\r\n hasOutputs: !!recipe.outputs,\r\n duration: recipe.duration,\r\n })\r\n\r\n // Check if this recipe should auto-start based on its condition\r\n const condition =\r\n recipe.maxRestartCondition || recipe.metadata?.maxRestartCondition\r\n if (condition && condition.entity) {\r\n const currentAmount = initialInventory[condition.entity] || 0\r\n if (currentAmount < condition.maxValue) {\r\n console.log(\r\n `[Venus Simulation Mock] Auto-starting ${recipeId} at initialization`,\r\n {\r\n currentAmount,\r\n maxValue: condition.maxValue,\r\n entity: condition.entity,\r\n },\r\n )\r\n setTimeout(() => {\r\n this.executeRecipe(appIdentifier, recipeId, {})\r\n }, 1000)\r\n }\r\n } else {\r\n // No condition means always auto-start (like building_income_tick)\r\n console.log(\r\n `[Venus Simulation Mock] Auto-starting ${recipeId} at initialization (no condition)`,\r\n )\r\n setTimeout(() => {\r\n this.executeRecipe(appIdentifier, recipeId, {})\r\n }, 1000)\r\n }\r\n }\r\n })\r\n }\r\n\r\n return state\r\n }\r\n\r\n private generateRunId() {\r\n return 'run_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)\r\n }\r\n\r\n private completeRun(appIdentifier: string, runId: string) {\r\n this.log(`Completing run ${runId} for ${appIdentifier}`)\r\n\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n const mockSimulationStates = this.mockSimulationStates\r\n\r\n const config = mockSimulationConfigs.get(appIdentifier)\r\n const state = mockSimulationStates.get(appIdentifier)\r\n\r\n if (!config || !state) return\r\n\r\n const runIndex = state.activeRuns.findIndex((r: any) => r.id === runId)\r\n if (runIndex === -1) return\r\n\r\n const run = state.activeRuns[runIndex]\r\n const recipe = config.recipes?.[run.recipeId]\r\n\r\n if (!recipe) return\r\n\r\n // Calculate outputs\r\n const outputs: Record<string, any> = {}\r\n const rng = this.createSeededRandom(runId) // Use run ID as seed\r\n\r\n if (recipe.outputs) {\r\n for (const [entityId, value] of Object.entries(recipe.outputs)) {\r\n if (typeof value === 'number') {\r\n outputs[entityId] = value\r\n } else if (\r\n typeof value === 'object' &&\r\n value != null &&\r\n 'min' in value &&\r\n 'max' in value &&\r\n typeof value.min == 'number' &&\r\n typeof value.max === 'number'\r\n ) {\r\n outputs[entityId] =\r\n Math.floor(rng() * (value.max - value.min + 1)) + value.min\r\n }\r\n }\r\n }\r\n\r\n // Add outputs to inventory\r\n for (const [entityId, amount] of Object.entries(outputs)) {\r\n state.inventory[entityId] = (state.inventory[entityId] || 0) + amount\r\n }\r\n\r\n // Apply end effects\r\n if (recipe.endEffects) {\r\n this.applyEffects(state, recipe.endEffects)\r\n }\r\n\r\n // Update run\r\n run.status = 'completed'\r\n run.outputs = outputs\r\n\r\n // Remove from active runs\r\n state.activeRuns.splice(runIndex, 1)\r\n\r\n // Check for auto-restart (top level OR metadata)\r\n const isAutoRestart = recipe.autoRestart || recipe.metadata?.autoRestart\r\n if (isAutoRestart) {\r\n console.log(\r\n `[Venus Simulation Mock] Checking auto-restart for ${run.recipeId}`,\r\n {\r\n topLevelAutoRestart: recipe.autoRestart,\r\n metadataAutoRestart: recipe.metadata?.autoRestart,\r\n hasCondition: !!(\r\n recipe.maxRestartCondition || recipe.metadata?.maxRestartCondition\r\n ),\r\n },\r\n )\r\n\r\n const condition =\r\n recipe.maxRestartCondition || recipe.metadata?.maxRestartCondition\r\n if (condition) {\r\n const currentAmount = state.inventory[condition.entity] || 0\r\n if (currentAmount < condition.maxValue) {\r\n console.log(\r\n `[Venus Simulation Mock] Auto-restarting ${run.recipeId}`,\r\n {\r\n currentAmount,\r\n maxValue: condition.maxValue,\r\n entity: condition.entity,\r\n },\r\n )\r\n setTimeout(() => {\r\n this.executeRecipe(appIdentifier, run.recipeId, recipe.inputs || {})\r\n }, 1000)\r\n }\r\n } else {\r\n // No condition means always auto-restart (like building_income_tick)\r\n console.log(\r\n `[Venus Simulation Mock] Auto-restarting ${run.recipeId} (no condition)`,\r\n )\r\n setTimeout(() => {\r\n this.executeRecipe(appIdentifier, run.recipeId, recipe.inputs || {})\r\n }, 1000)\r\n }\r\n }\r\n\r\n console.log(\r\n `[Venus Simulation Mock] Completed run ${runId}, outputs:`,\r\n outputs,\r\n )\r\n }\r\n\r\n private createSeededRandom(seed: string) {\r\n let hash = 0\r\n for (let i = 0; i < seed.length; i++) {\r\n const char = seed.charCodeAt(i)\r\n hash = (hash << 5) - hash + char\r\n hash = hash & hash\r\n }\r\n\r\n return () => {\r\n hash = (hash * 9301 + 49297) % 233280\r\n return hash / 233280\r\n }\r\n }\r\n\r\n private applyEffects(state: any, effects: VenusSimulationEffect[]) {\r\n if (!effects || !Array.isArray(effects)) return\r\n\r\n for (const effect of effects) {\r\n switch (effect.type) {\r\n case 'set':\r\n state.inventory[effect.target] = effect.value\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Set ${effect.target} = ${effect.value}`,\r\n )\r\n break\r\n case 'add':\r\n state.inventory[effect.target] =\r\n (state.inventory[effect.target] || 0) + effect.value\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Add ${effect.value} to ${effect.target} (new value: ${state.inventory[effect.target]})`,\r\n )\r\n break\r\n case 'multiply':\r\n state.inventory[effect.target] =\r\n (state.inventory[effect.target] || 0) * effect.value\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Multiply ${effect.target} by ${effect.value} (new value: ${state.inventory[effect.target]})`,\r\n )\r\n break\r\n case 'min':\r\n state.inventory[effect.target] = Math.max(\r\n state.inventory[effect.target] || 0,\r\n effect.value,\r\n )\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Set ${effect.target} min ${effect.value} (new value: ${state.inventory[effect.target]})`,\r\n )\r\n break\r\n case 'max':\r\n state.inventory[effect.target] = Math.min(\r\n state.inventory[effect.target] || 0,\r\n effect.value,\r\n )\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Set ${effect.target} max ${effect.value} (new value: ${state.inventory[effect.target]})`,\r\n )\r\n break\r\n case 'enable_recipe':\r\n if (state.disabledRecipes?.includes(effect.target)) {\r\n state.disabledRecipes = state.disabledRecipes.filter(\r\n (r: any) => r !== effect.target,\r\n )\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Enabled recipe ${effect.target}`,\r\n )\r\n }\r\n break\r\n case 'disable_recipe':\r\n if (!state.disabledRecipes) state.disabledRecipes = []\r\n if (!state.disabledRecipes.includes(effect.target)) {\r\n state.disabledRecipes.push(effect.target)\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Disabled recipe ${effect.target}`,\r\n )\r\n }\r\n break\r\n case 'trigger_recipe':\r\n // TODO: Implement recipe triggering if needed\r\n console.log(\r\n `[Venus Simulation Mock] Effect: Trigger recipe ${effect.target} (not implemented)`,\r\n )\r\n break\r\n default:\r\n console.warn(\r\n `[Venus Simulation Mock] Unknown effect type: ${effect.type}`,\r\n )\r\n }\r\n }\r\n }\r\n\r\n async getConfigAsync(): Promise<any> {\r\n console.log('[Venus Simulation Mock] getConfigAsync called')\r\n const appIdentifier = this.appId\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n const config = mockSimulationConfigs.get(appIdentifier) || {\r\n version: '1.0',\r\n entities: {},\r\n recipes: {},\r\n }\r\n return config\r\n }\r\n\r\n async getStateAsync(roomId?: string): Promise<any> {\r\n this.log('getStateAsync called:', roomId)\r\n const appIdentifier = this.appId\r\n\r\n const mockSimulationStates = this.mockSimulationStates\r\n let state = mockSimulationStates.get(appIdentifier)\r\n if (!state) {\r\n state = await this.initializeSimulationState(appIdentifier)\r\n }\r\n\r\n const mockSimulationConfigs = this.mockSimulationConfigs\r\n return {\r\n ...state,\r\n roomId: roomId,\r\n configuration: mockSimulationConfigs.get(appIdentifier),\r\n }\r\n }\r\n\r\n async assignItemToSlotAsync(\r\n containerId: string,\r\n slotId: string,\r\n itemId: string,\r\n ): Promise<any> {\r\n this.log('assignItemToSlotAsync called:', {\r\n containerId,\r\n slotId,\r\n itemId,\r\n })\r\n return { success: true, message: 'Mock assignment successful' }\r\n }\r\n\r\n async removeItemFromSlotAsync(\r\n containerId: string,\r\n slotId: string,\r\n ): Promise<any> {\r\n this.log('removeItemFromSlotAsync called:', {\r\n containerId,\r\n slotId,\r\n })\r\n return { success: true, message: 'Mock removal successful' }\r\n }\r\n}\r\n","import { VenusAPI, VenusSimulationAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\n\r\nexport * from './SimulationApi'\r\nexport * from './RpcSimulationApi'\r\nexport * from './MockSimulationApi'\r\n\r\nexport function initializeSimulation(venusApi: VenusAPI, host: Host) {\r\n console.log('[Venus SDK] Initializing new Simulation Api')\r\n\r\n venusApi.simulation = {\r\n isEnabled: () => true,\r\n } as VenusSimulationAPI\r\n\r\n venusApi.simulation.getConfigAsync = () => {\r\n return host.simulation.getConfigAsync()\r\n }\r\n\r\n venusApi.simulation.getStateAsync = (options) => {\r\n return host.simulation.getStateAsync(options?.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,\r\n entity,\r\n inputs,\r\n roomId,\r\n options,\r\n ) => {\r\n return host.simulation.executeScopedRecipeAsync(recipeId, entity, inputs, {\r\n roomId,\r\n ...options,\r\n })\r\n }\r\n\r\n venusApi.simulation.triggerRecipeChainAsync = (recipeId, context, roomId) => {\r\n return host.simulation.triggerRecipeChainAsync(recipeId, {\r\n context: context,\r\n roomId: roomId,\r\n })\r\n }\r\n\r\n venusApi.simulation.getAvailableRecipesAsync = async (\r\n roomId,\r\n includeActorRecipes,\r\n ) => {\r\n const result = await host.simulation.getAvailableRecipesAsync({\r\n roomId: roomId,\r\n includeActorRecipes: includeActorRecipes,\r\n })\r\n return result.recipes\r\n }\r\n\r\n venusApi.simulation.getRecipeRequirementsAsync = (\r\n recipeId,\r\n entity,\r\n amount,\r\n ) => {\r\n return host.simulation.getRecipeRequirementsAsync({\r\n recipeId: recipeId,\r\n entity: entity,\r\n batchAmount: amount,\r\n })\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 venusApi.simulation.sumContributions = (contributions) => {\r\n return host.simulation.sumContributions(contributions)\r\n }\r\n}\r\n","export function isPacificDaylightTime(date: Date) {\n // US DST rules: Starts second Sunday in March, ends first Sunday in November\n const year = date.getFullYear()\n\n // Calculate second Sunday in March\n const marchStart = new Date(year, 2, 8) // March 8th\n const daysUntilSundayInMarch = (7 - marchStart.getDay()) % 7\n const dstStart = new Date(year, 2, 8 + daysUntilSundayInMarch)\n dstStart.setHours(2, 0, 0, 0) // 2am local time\n\n // Calculate first Sunday in November\n const novemberStart = new Date(year, 10, 1) // November 1st\n const daysUntilSundayInNov = (7 - novemberStart.getDay()) % 7\n const dstEnd = new Date(year, 10, 1 + daysUntilSundayInNov)\n dstEnd.setHours(2, 0, 0, 0) // 2am local time\n\n // Compare with current date\n return date >= dstStart && date < dstEnd\n}\n","import { GetFutureTimeOptions, ServerTimeData, TimeApi } from './TimeApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { isPacificDaylightTime } from './utils'\r\n\r\nexport class HostTimeApi implements TimeApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async requestTimeAsync(): Promise<ServerTimeData> {\r\n const response = await this.rpcClient.call<ServerTimeData>(\r\n VenusMessageId.REQUEST_SERVER_TIME,\r\n {},\r\n )\r\n return response\r\n }\r\n\r\n formatTime(timestamp: number, options?: any): string {\r\n // Get user locale from configuration\r\n let locale = 'en-US' // Default fallback locale\r\n\r\n const windowVenus = window.venus\r\n\r\n if (windowVenus._config.locale) {\r\n locale = windowVenus._config.locale\r\n } else if (\r\n windowVenus._config.environment &&\r\n windowVenus._config.environment.browserInfo &&\r\n windowVenus._config.environment.browserInfo.language\r\n ) {\r\n locale = windowVenus._config.environment.browserInfo.language\r\n }\r\n\r\n // Create a Date object from the timestamp\r\n const date = new Date(timestamp)\r\n\r\n // Format options\r\n const dateTimeOptions = {\r\n dateStyle: options.dateStyle || 'medium',\r\n timeStyle: options.timeStyle || 'medium',\r\n hour12: options.hour12 !== undefined ? options.hour12 : true,\r\n ...options,\r\n }\r\n\r\n return date.toLocaleString(locale, dateTimeOptions)\r\n }\r\n\r\n formatNumber(value: number, options?: Intl.NumberFormatOptions): string {\r\n try {\r\n // Get user locale from configuration\r\n let locale = 'en-US' // Default fallback locale\r\n const windowVenus = window.venus\r\n\r\n if (windowVenus._config.locale) {\r\n locale = windowVenus._config.locale\r\n } else if (\r\n windowVenus._config.environment &&\r\n windowVenus._config.environment.browserInfo &&\r\n windowVenus._config.environment.browserInfo.language\r\n ) {\r\n locale = windowVenus._config.environment.browserInfo.language\r\n }\r\n\r\n // Format options\r\n const numberOptions = {\r\n style: options?.style || 'decimal',\r\n minimumFractionDigits: options?.minimumFractionDigits || 0,\r\n maximumFractionDigits: options?.maximumFractionDigits || 2,\r\n ...options,\r\n }\r\n\r\n return value.toLocaleString(locale, numberOptions)\r\n } catch (error) {\r\n console.error('[Venus] Error formatting number:', error)\r\n // Fallback to basic formatting\r\n return String(value)\r\n }\r\n }\r\n\r\n async getFutureTimeAsync(options?: GetFutureTimeOptions): Promise<number> {\r\n // Get the current server time first\r\n const timeInfo = await this.requestTimeAsync()\r\n\r\n // Start with the server time\r\n const serverTime = new Date(timeInfo.serverTime)\r\n const result = new Date(serverTime)\r\n\r\n // Add days, hours, and minutes if specified\r\n if (options?.days) {\r\n result.setDate(result.getDate() + options.days)\r\n }\r\n\r\n if (options?.hours) {\r\n result.setHours(result.getHours() + options.hours)\r\n }\r\n\r\n if (options?.minutes) {\r\n result.setMinutes(result.getMinutes() + options.minutes)\r\n }\r\n\r\n // Set specific time of day if requested\r\n if (options?.timeOfDay) {\r\n const { hour = 0, minute = 0, second = 0 } = options.timeOfDay\r\n\r\n // If we're setting the time of day, we do it in the user's local timezone\r\n // Get timezone offset in minutes\r\n const timezoneOffset =\r\n timeInfo.timezoneOffset || new Date().getTimezoneOffset()\r\n\r\n // First set the UTC time that corresponds to the local time\r\n const localHour = hour\r\n\r\n // Reset hours, minutes, seconds\r\n result.setHours(localHour, minute, second, 0)\r\n }\r\n\r\n // For specific timezones, we need to convert\r\n if (options?.timezone) {\r\n switch (options.timezone.toUpperCase()) {\r\n case 'PT':\r\n case 'PST':\r\n case 'PDT': {\r\n // Handle Pacific Time conversion\r\n // First determine if date is in PDT\r\n const isPDT = isPacificDaylightTime(result)\r\n const ptOffset = isPDT ? -7 : -8 // PDT is UTC-7, PST is UTC-8\r\n\r\n // Reset time to midnight UTC\r\n result.setUTCHours(0, 0, 0, 0)\r\n\r\n // Add the specific time in PT (converting to UTC)\r\n const { hour = 0, minute = 0, second = 0 } = options.timeOfDay || {}\r\n\r\n // Convert PT time to UTC time\r\n // e.g., 9am PT = 16:00 or 17:00 UTC\r\n const utcHour = (hour - ptOffset) % 24\r\n result.setUTCHours(utcHour, minute, second, 0)\r\n break\r\n }\r\n // Add other timezone cases as needed\r\n default:\r\n console.warn(\r\n '[Venus] Timezone ' +\r\n options.timezone +\r\n ' not supported, using local time',\r\n )\r\n }\r\n }\r\n\r\n // Return direct timestamp number\r\n return result.getTime()\r\n }\r\n}\r\n","import { GetFutureTimeOptions, ServerTimeData, TimeApi } from './TimeApi'\nimport { createMockDelay, MOCK_DELAYS } from '../venus-api/systems/core'\nimport { VenusAPI } from '../venus-api/types'\nimport { isPacificDaylightTime } from './utils'\n\nexport class MockTimeApi implements TimeApi {\n private readonly venusApi: VenusAPI\n\n constructor(venusApi: VenusAPI) {\n this.venusApi = venusApi\n }\n\n formatNumber(value: number, options?: Intl.NumberFormatOptions): string {\n const locale = this.getLocale()\n\n // Format options\n const numberOptions = {\n style: options?.style || 'decimal',\n minimumFractionDigits: options?.minimumFractionDigits || 0,\n maximumFractionDigits: options?.maximumFractionDigits || 2,\n ...options,\n }\n\n console.log(`[Venus Mock] Formatting number ${value} with locale ${locale}`)\n return value.toLocaleString(locale, numberOptions)\n }\n\n formatTime(timestamp: number, options?: any): string {\n // Get user locale from configuration\n const locale = this.getLocale()\n\n // Create a Date object from the timestamp\n const date = new Date(timestamp)\n\n // Format options\n const dateTimeOptions = {\n dateStyle: options.dateStyle || 'medium',\n timeStyle: options.timeStyle || 'medium',\n hour12: options.hour12 !== undefined ? options.hour12 : true,\n ...options,\n }\n\n console.log(\n `[Venus Mock] Formatting time ${timestamp} with locale ${locale}`,\n )\n return date.toLocaleString(locale, dateTimeOptions)\n }\n\n async getFutureTimeAsync(options?: GetFutureTimeOptions): Promise<number> {\n console.log('[Venus Mock] Getting future time with options:', options)\n\n // Get the current server time first - now returns direct TimeInfo object\n const timeInfo = await this.requestTimeAsync()\n\n // Start with the server time\n const serverTime = new Date(timeInfo.serverTime)\n const result = new Date(serverTime)\n\n // Add days, hours, and minutes if specified\n if (options?.days) {\n result.setDate(result.getDate() + options.days)\n }\n\n if (options?.hours) {\n result.setHours(result.getHours() + options.hours)\n }\n\n if (options?.minutes) {\n result.setMinutes(result.getMinutes() + options.minutes)\n }\n\n // Set specific time of day if requested\n if (options?.timeOfDay) {\n const { hour = 0, minute = 0, second = 0 } = options.timeOfDay\n\n // If we're setting the time of day, we do it in the user's local timezone\n // Get timezone offset in minutes\n const timezoneOffset =\n timeInfo.timezoneOffset || new Date().getTimezoneOffset()\n\n // First set the UTC time that corresponds to the local time\n const localHour = hour\n\n // Reset hours, minutes, seconds\n result.setHours(localHour, minute, second, 0)\n }\n\n // For specific timezones, we need to convert\n if (options?.timezone) {\n switch (options?.timezone.toUpperCase()) {\n case 'PT':\n case 'PST':\n case 'PDT': {\n // Handle Pacific Time conversion\n // First determine if date is in PDT\n const isPDT = isPacificDaylightTime(result)\n const ptOffset = isPDT ? -7 : -8 // PDT is UTC-7, PST is UTC-8\n\n // Reset time to midnight UTC\n const utcDay = result.getUTCDate()\n const utcMonth = result.getUTCMonth()\n const utcYear = result.getUTCFullYear()\n result.setUTCHours(0, 0, 0, 0)\n\n // Add the specific time in PT (converting to UTC)\n const { hour = 0, minute = 0, second = 0 } = options.timeOfDay || {}\n\n // Convert PT time to UTC time\n // e.g., 9am PT = 16:00 or 17:00 UTC\n const utcHour = (hour - ptOffset) % 24\n result.setUTCHours(utcHour, minute, second, 0)\n break\n }\n // Add other timezone cases as needed\n default:\n console.warn(\n `[Venus Mock] Timezone ${options.timezone} not supported, using local time`,\n )\n }\n }\n\n // Return direct timestamp number to match real API\n return result.getTime()\n }\n\n async requestTimeAsync(): Promise<ServerTimeData> {\n console.log('[Venus Mock] Requesting time')\n await createMockDelay(MOCK_DELAYS.short)\n\n const venusApi = this.venusApi\n\n // In the mock, we'll simulate server-client time offset\n // This helps developers test time sync behavior\n\n // Simulate a small offset between server and client time\n // In production, this could be seconds or even minutes\n const mockOffset = venusApi._mock.serverTimeOffset || 2500 // Default 2.5 second offset\n const mockServerTime = Date.now() + mockOffset\n\n // Get timezone offset in minutes (positive for west of UTC, negative for east)\n const timezoneOffset = new Date().getTimezoneOffset()\n\n // Convert server time (UTC) to local time\n // Note: getTimezoneOffset() returns minutes WEST of UTC with reversed sign convention:\n // - For UTC-5 (e.g., Eastern Time): Returns +300 minutes (positive)\n // - For UTC+3 (e.g., Moscow): Returns -180 minutes (negative)\n // So we subtract the offset (which adds time for eastern timezones and subtracts for western)\n const localTime = mockServerTime - timezoneOffset * 60000\n\n // Return direct TimeInfo object (not wrapped in success object)\n const timeInfo = {\n serverTime: mockServerTime,\n localTime,\n timezoneOffset: timezoneOffset,\n formattedTime: new Date(localTime).toISOString(),\n locale: venusApi._mock.user?.locale || 'en-US',\n }\n\n console.log('[Venus Mock] Time response:', {\n serverTime: new Date(timeInfo.serverTime).toISOString(),\n localTime: new Date(timeInfo.localTime).toISOString(),\n timezoneOffset: timeInfo.timezoneOffset,\n })\n\n return timeInfo\n }\n\n private getLocale() {\n const venusApi = this.venusApi\n\n // Get user locale from configuration\n let locale = 'en-US' // Default fallback locale\n\n if (venusApi._mock.user && venusApi._mock.user.locale) {\n locale = venusApi._mock.user.locale\n } else if (\n venusApi._mock.environment &&\n venusApi._mock.environment.browserInfo.language\n ) {\n locale = venusApi._mock.environment.browserInfo.language\n }\n\n return locale\n }\n}\n","import { VenusAPI } from '../venus-api/types'\nimport { Host } from '../Host'\n\nexport * from './TimeApi'\nexport * from './HostTimeApi'\nexport * from './utils'\nexport * from './MockTimeApi'\n\nexport function initializeTime(venusApi: VenusAPI, host: Host) {\n venusApi.requestTimeAsync = () => {\n return host.time.requestTimeAsync()\n }\n\n venusApi.getFutureTimeAsync = (options?: {\n days?: number\n hours?: number\n minutes?: number\n timeOfDay?: any\n timezone?: string\n }) => {\n return host.time.getFutureTimeAsync(options)\n }\n\n venusApi.formatTime = (timestamp, options) => {\n return host.time.formatTime(timestamp, options)\n }\n\n venusApi.formatNumber = (value, options) => {\n return host.time.formatNumber(value, options)\n }\n}\n","declare const __SDK_VERSION__: string\nexport const SDK_VERSION = __SDK_VERSION__\n","export const BurgerTimeAssetsCdnPath = 'burger-time/Core.stow'\r\nexport const CharacterAssetsCdnPath = 'burger-time/Character.stow'\r\n","import { SharedAssetsApi } from './SharedAssetsApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { VenusAPI } from '../venus-api'\r\nimport { BurgerTimeAssetsCdnPath, CharacterAssetsCdnPath } from './consts'\r\n\r\nexport class RpcSharedAssetsApi implements SharedAssetsApi {\r\n private readonly venusApi: VenusAPI\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient, venusApi: VenusAPI) {\r\n this.rpcClient = rpcClient\r\n this.venusApi = venusApi\r\n }\r\n\r\n async loadBurgerTimeAssetsBundle(): Promise<ArrayBuffer> {\r\n try {\r\n const response = await this.rpcClient.callT<\r\n LoadEmbeddedAssetsRequest,\r\n LoadEmbeddedAssetsResponse\r\n >(VenusMessageId.H5_LOAD_EMBEDDED_ASSET, {\r\n assetKey: 'burgerTimeCoreBundle',\r\n })\r\n return base64ToArrayBuffer(response.base64Data)\r\n } catch (err) {\r\n try {\r\n const blob = await this.venusApi.cdn.fetchBlob(BurgerTimeAssetsCdnPath)\r\n return await blob.arrayBuffer()\r\n } catch (e) {\r\n throw new Error('Failed to load burgerTimeAssetsBundle')\r\n }\r\n }\r\n }\r\n\r\n async loadCharactersBundle(): Promise<ArrayBuffer> {\r\n try {\r\n const response = await this.rpcClient.callT<\r\n LoadEmbeddedAssetsRequest,\r\n LoadEmbeddedAssetsResponse\r\n >(VenusMessageId.H5_LOAD_EMBEDDED_ASSET, {\r\n assetKey: 'characters',\r\n })\r\n return base64ToArrayBuffer(response.base64Data)\r\n } catch (err) {\r\n try {\r\n const blob = await this.venusApi.cdn.fetchBlob(CharacterAssetsCdnPath)\r\n return await blob.arrayBuffer()\r\n } catch (e) {\r\n throw new Error('Failed to load charactersBundle')\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport interface LoadEmbeddedAssetsRequest {\r\n assetKey: string\r\n}\r\n\r\nexport interface LoadEmbeddedAssetsResponse {\r\n base64Data: string\r\n}\r\n\r\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\r\n // Decode base64 to raw binary string\r\n const binaryString = atob(base64)\r\n\r\n // Create a buffer with the same length\r\n const len = binaryString.length\r\n const bytes = new Uint8Array(len)\r\n\r\n // Fill the buffer with the char codes\r\n for (let i = 0; i < len; i++) {\r\n bytes[i] = binaryString.charCodeAt(i)\r\n }\r\n\r\n // Return the ArrayBuffer\r\n return bytes.buffer\r\n}\r\n","import { SharedAssetsApi } from './SharedAssetsApi'\r\nimport { VenusAPI } from '../venus-api/types'\r\nimport { BurgerTimeAssetsCdnPath, CharacterAssetsCdnPath } from './consts'\r\n\r\nexport class MockSharedAssetsApi implements SharedAssetsApi {\r\n private readonly venusApi: VenusAPI\r\n\r\n constructor(venusApi: VenusAPI) {\r\n this.venusApi = venusApi\r\n }\r\n\r\n async loadBurgerTimeAssetsBundle(): Promise<ArrayBuffer> {\r\n const blob = await this.venusApi.cdn.fetchBlob(BurgerTimeAssetsCdnPath)\r\n return await blob.arrayBuffer()\r\n }\r\n\r\n async loadCharactersBundle(): Promise<ArrayBuffer> {\r\n const blob = await this.venusApi.cdn.fetchBlob(CharacterAssetsCdnPath)\r\n return await blob.arrayBuffer()\r\n }\r\n}\r\n","import { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport {\r\n GetLeaderboardOptions,\r\n LeaderboardApi,\r\n LeaderboardResponse,\r\n LeaderboardHighlightOptions,\r\n LeaderboardHighlightResponse,\r\n PlayerStats,\r\n PlayerStatsOptions,\r\n StartRunResult,\r\n SubmitScoreOptions,\r\n SubmitScoreResult,\r\n} from './LeaderboardApi'\r\n\r\nexport class RpcLeaderboardApi implements LeaderboardApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n startRun(mode?: string): Promise<StartRunResult> {\r\n return this.rpcClient.call<StartRunResult>(\r\n VenusMessageId.H5_LEADERBOARD_START_RUN,\r\n mode ? { mode } : {},\r\n )\r\n }\r\n\r\n submitScore(\r\n sessionId: string,\r\n score: number,\r\n durationSec: number,\r\n options?: SubmitScoreOptions,\r\n ): Promise<SubmitScoreResult> {\r\n return this.rpcClient.call<SubmitScoreResult>(\r\n VenusMessageId.H5_LEADERBOARD_SUBMIT_SCORE,\r\n {\r\n sessionId,\r\n score,\r\n durationSec,\r\n mode: options?.mode,\r\n telemetry: options?.telemetry,\r\n metadata: options?.metadata,\r\n hash: options?.hash,\r\n },\r\n )\r\n }\r\n\r\n getLeaderboard(options?: GetLeaderboardOptions): Promise<LeaderboardResponse> {\r\n return this.rpcClient.call<LeaderboardResponse>(\r\n VenusMessageId.H5_LEADERBOARD_GET,\r\n options ?? {},\r\n )\r\n }\r\n\r\n getPlayerStats(options?: PlayerStatsOptions): Promise<PlayerStats> {\r\n return this.rpcClient.call<PlayerStats>(\r\n VenusMessageId.H5_LEADERBOARD_GET_PLAYER_STATS,\r\n options ?? {},\r\n )\r\n }\r\n\r\n getLeaderboardHighlight(options?: LeaderboardHighlightOptions): Promise<LeaderboardHighlightResponse> {\r\n return this.rpcClient.call<LeaderboardHighlightResponse>(\r\n VenusMessageId.H5_LEADERBOARD_GET_HIGHLIGHT,\r\n options ?? {},\r\n )\r\n }\r\n}\r\n","import {\r\n GetLeaderboardOptions,\r\n LeaderboardApi,\r\n LeaderboardEntry,\r\n LeaderboardResponse,\r\n LeaderboardHighlightOptions,\r\n LeaderboardHighlightResponse,\r\n PlayerStats,\r\n PlayerStatsOptions,\r\n StartRunResult,\r\n SubmitScoreOptions,\r\n SubmitScoreResult,\r\n} from './LeaderboardApi'\r\n\r\ninterface MockSession {\r\n id: string\r\n expiresAt: number\r\n mode: string\r\n hashNonce: string | null\r\n used: boolean\r\n}\r\n\r\nexport class MockLeaderboardApi implements LeaderboardApi {\r\n private sessions: Map<string, MockSession> = new Map()\r\n private entriesByMode: Map<string, LeaderboardEntry[]> = new Map()\r\n private sessionCounter = 0\r\n private requiresHash = false\r\n\r\n constructor(options?: { requiresHash?: boolean }) {\r\n if (options?.requiresHash) {\r\n this.requiresHash = true\r\n }\r\n }\r\n\r\n configure(options: { requiresHash?: boolean }): void {\r\n if (typeof options.requiresHash === 'boolean') {\r\n this.requiresHash = options.requiresHash\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 async startRun(mode?: string): Promise<StartRunResult> {\r\n const sessionId = `mock_session_${++this.sessionCounter}`\r\n const startTime = Date.now()\r\n const expiresAt = startTime + 3_600_000\r\n const resolvedMode = mode || 'default'\r\n const hashNonce = this.requiresHash ? this.generateNonce() : null\r\n\r\n this.sessions.set(sessionId, {\r\n id: sessionId,\r\n expiresAt,\r\n mode: resolvedMode,\r\n hashNonce,\r\n used: false,\r\n })\r\n\r\n return {\r\n sessionId,\r\n startTime,\r\n expiresAt,\r\n hashNonce,\r\n mode: resolvedMode,\r\n }\r\n }\r\n\r\n async submitScore(\r\n sessionId: string,\r\n score: number,\r\n durationSec: number,\r\n options?: SubmitScoreOptions,\r\n ): Promise<SubmitScoreResult> {\r\n const session = this.sessions.get(sessionId)\r\n if (!session) {\r\n throw new Error('Invalid leaderboard session')\r\n }\r\n\r\n if (session.expiresAt < Date.now()) {\r\n throw new Error('Invalid or expired leaderboard session')\r\n }\r\n\r\n if (session.used) {\r\n throw new Error('Leaderboard session already used')\r\n }\r\n\r\n if (options?.mode && options.mode !== session.mode) {\r\n throw new Error('Submission mode does not match session mode')\r\n }\r\n\r\n if (session.hashNonce && !options?.hash) {\r\n throw new Error('Score hash is required for sealed leaderboard submissions')\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,\r\n durationSec,\r\n submittedAt,\r\n sessionId,\r\n rank: null,\r\n zScore: null,\r\n isAnomaly: false,\r\n trustScore: 50,\r\n metadata: options?.metadata ?? null,\r\n isSeed: false,\r\n }\r\n\r\n const modeEntries = this.getEntriesForMode(session.mode)\r\n modeEntries.push(entry)\r\n modeEntries.sort((a, b) => {\r\n if (b.score !== a.score) {\r\n return b.score - a.score\r\n }\r\n return a.submittedAt - b.submittedAt\r\n })\r\n\r\n modeEntries.forEach((e, index) => {\r\n modeEntries[index] = {\r\n ...e,\r\n rank: index + 1,\r\n }\r\n })\r\n\r\n session.used = true\r\n session.hashNonce = null\r\n\r\n const inserted = modeEntries.find((e) => e.sessionId === sessionId && 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 getLeaderboard(options?: GetLeaderboardOptions): Promise<LeaderboardResponse> {\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 getPlayerStats(_options?: PlayerStatsOptions): Promise<PlayerStats> {\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 getLeaderboardHighlight(options?: LeaderboardHighlightOptions): Promise<LeaderboardHighlightResponse> {\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\r\nexport function initializeLeaderboard(venusApiInstance: VenusAPI, host: Host) {\r\n venusApiInstance.leaderboard = host.leaderboard\r\n}\r\n","import { PreloaderApi } from \"./PreloaderApi\"\r\n\r\nexport class MockPreloaderApi implements PreloaderApi {\r\n async showLoadScreen(): Promise<void> {\r\n console.log('showLoadScreen')\r\n }\r\n\r\n async hideLoadScreen(): Promise<void> {\r\n console.log('hideLoadScreen')\r\n }\r\n\r\n async setLoaderText(text: string): Promise<void> {\r\n console.log('setLoaderText', text)\r\n }\r\n\r\n async setLoaderProgress(progress: number): Promise<void> {\r\n console.log('setLoaderProgress', progress)\r\n }\r\n}","import { PreloaderApi } from './PreloaderApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\n\r\nexport class RpcPreloaderApi implements PreloaderApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n async showLoadScreen(): Promise<void> {\r\n await this.rpcClient.call(VenusMessageId.H5_SHOW_LOAD_SCREEN)\r\n }\r\n\r\n async hideLoadScreen(): Promise<void> {\r\n await this.rpcClient.call(VenusMessageId.H5_HIDE_LOAD_SCREEN)\r\n }\r\n\r\n async setLoaderText(text: string): Promise<void> {\r\n await this.rpcClient.call(VenusMessageId.H5_SET_LOADER_TEXT, { text })\r\n }\r\n\r\n async setLoaderProgress(progress: number): Promise<void> {\r\n await this.rpcClient.call(VenusMessageId.H5_SET_LOADER_PROGRESS, { progress })\r\n }\r\n}","import { VenusAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\n\r\nexport * from './PreloaderApi'\r\nexport * from './MockPreloaderApi'\r\nexport * from './RpcPreloaderApi'\r\n\r\nexport function initializePreloader(venusApi: VenusAPI, host: Host) {\r\n venusApi.preloader = host.preloader\r\n}","import {\r\n OpenCommentsResult,\r\n PostApi,\r\n PostInfo,\r\n ToggleFollowResult,\r\n ToggleLikeResult,\r\n} from './PostApi'\r\nimport { createMockDelay, MOCK_DELAYS } from '../venus-api/systems/core'\r\nimport { VenusAPI } from '../venus-api/types'\r\n\r\nexport class MockPostApi implements PostApi {\r\n private readonly venusApi: VenusAPI\r\n\r\n constructor(venusApi: VenusAPI) {\r\n this.venusApi = venusApi\r\n }\r\n\r\n async getPostInfo(): Promise<PostInfo> {\r\n const venusApi = this.venusApi\r\n\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n return venusApi._mock.currentPostInteractions\r\n }\r\n\r\n async openCommentsAsync(): Promise<OpenCommentsResult> {\r\n // console.log('[Venus Mock] Opening comments with options:', options);\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n return {\r\n opened: true,\r\n commentsCount: 0,\r\n }\r\n }\r\n\r\n async toggleFollowAsync(): Promise<ToggleFollowResult> {\r\n const venusApi = this.venusApi\r\n\r\n console.log('[Venus Mock] *Toggling follow status')\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n // Toggle following state\r\n venusApi._mock.currentPostInteractions.isFollowing =\r\n !venusApi._mock.currentPostInteractions.isFollowing\r\n\r\n const isFollowing = venusApi._mock.currentPostInteractions.isFollowing\r\n\r\n // Return direct data, not wrapped in success object\r\n return {\r\n isFollowing: isFollowing,\r\n action: isFollowing ? 'followed' : 'unfollowed',\r\n }\r\n }\r\n\r\n async toggleLikeAsync(): Promise<ToggleLikeResult> {\r\n const venusApi = this.venusApi\r\n\r\n await createMockDelay(MOCK_DELAYS.short)\r\n\r\n // Toggle like state and update count\r\n venusApi._mock.currentPostInteractions.isLiked =\r\n !venusApi._mock.currentPostInteractions.isLiked\r\n\r\n const isLiked = venusApi._mock.currentPostInteractions.isLiked\r\n\r\n if (isLiked) {\r\n venusApi._mock.currentPostInteractions.likesCount++\r\n } else {\r\n venusApi._mock.currentPostInteractions.likesCount = Math.max(\r\n 0,\r\n venusApi._mock.currentPostInteractions.likesCount - 1,\r\n )\r\n }\r\n\r\n // Return direct data, not wrapped in success object\r\n return {\r\n isLiked: isLiked,\r\n likesCount: venusApi._mock.currentPostInteractions.likesCount,\r\n action: isLiked ? 'liked' : 'unliked',\r\n }\r\n }\r\n}\r\n","import {\r\n OpenCommentsResult,\r\n PostApi,\r\n PostInfo,\r\n ToggleFollowResult,\r\n ToggleLikeResult,\r\n} from './PostApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\n\r\nexport class RpcPostApi implements PostApi {\r\n private readonly rpcClient: RpcClient\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n }\r\n\r\n getPostInfo(): Promise<PostInfo> {\r\n return this.rpcClient.call(VenusMessageId.GET_POST_INTERACTIONS, {})\r\n }\r\n\r\n openCommentsAsync(): Promise<OpenCommentsResult> {\r\n return this.rpcClient.call(VenusMessageId.OPEN_COMMENTS, {})\r\n }\r\n\r\n toggleFollowAsync(): Promise<ToggleFollowResult> {\r\n return this.rpcClient.call<ToggleFollowResult>(\r\n VenusMessageId.TOGGLE_FOLLOW,\r\n {},\r\n )\r\n }\r\n\r\n toggleLikeAsync(): Promise<ToggleLikeResult> {\r\n return this.rpcClient.call<ToggleLikeResult>(VenusMessageId.TOGGLE_LIKE, {})\r\n }\r\n}\r\n","import { VenusAPI } from '../venus-api/types'\r\nimport { Host } from '../Host'\r\n\r\nexport * from './PostApi'\r\nexport * from './MockPostApi'\r\nexport * from './RpcPostApi'\r\n\r\nexport function initializePost(venusApi: VenusAPI, host: Host) {\r\n venusApi.getPostInteractionsAsync = () => {\r\n return host.post.getPostInfo()\r\n }\r\n\r\n venusApi.toggleFollowAsync = () => {\r\n return host.post.toggleFollowAsync()\r\n }\r\n\r\n venusApi.toggleLikeAsync = () => {\r\n return host.post.toggleLikeAsync()\r\n }\r\n\r\n venusApi.openCommentsAsync = async () => {\r\n await host.post.openCommentsAsync()\r\n }\r\n}\r\n","import {\r\n QRCodeResult,\r\n ShareLinkResult,\r\n SocialApi,\r\n SocialQRCodeOptions,\r\n} from './SocialApi';\r\n\r\nconst MOCK_QR_CODE =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';\r\n\r\nexport class MockSocialApi implements SocialApi {\r\n async shareLinkAsync(options: {\r\n launchParams: Record<string, string>;\r\n }): Promise<ShareLinkResult> {\r\n const shareUrl = this.createMockUrl(options.launchParams);\r\n\r\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\r\n try {\r\n await navigator.clipboard.writeText(shareUrl);\r\n console.log('[Venus SDK] (mock) Copied share URL to clipboard');\r\n } catch (error) {\r\n console.warn(\r\n '[Venus SDK] (mock) Failed to copy share URL to clipboard',\r\n error,\r\n );\r\n }\r\n }\r\n\r\n return { shareUrl };\r\n }\r\n\r\n async createQRCodeAsync(options: {\r\n launchParams: Record<string, string>;\r\n qrOptions?: SocialQRCodeOptions;\r\n }): Promise<QRCodeResult> {\r\n const shareUrl = this.createMockUrl(options.launchParams);\r\n\r\n return {\r\n shareUrl,\r\n qrCode: MOCK_QR_CODE,\r\n };\r\n }\r\n\r\n private createMockUrl(launchParams: Record<string, string>): string {\r\n const params = new URLSearchParams(launchParams);\r\n return `https://mock-share.venus.test/share?${params.toString()}`;\r\n }\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 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 HudInsets,\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 { CdnApi, HostCdnApi } from './cdn'\r\nimport { HostTimeApi, TimeApi } from './time'\r\nimport { PostApi, RpcPostApi } from './post'\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 cdn: CdnApi\r\n readonly time: TimeApi\r\n readonly post: PostApi\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 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()\r\n this.cdn = new HostCdnApi(getCdnBaseUrl())\r\n this.time = new HostTimeApi(rpcClient)\r\n this.post = new RpcPostApi(rpcClient)\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 console.log('[Venus SDK] Remote host created')\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 if (response.profile) {\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\r\n // Ensure window.venus exists before setting profile\r\n if (typeof window !== 'undefined') {\r\n const globalWindow = window as any\r\n const venus = globalWindow.venus || (globalWindow.venus = {})\r\n\r\n venus.profile = sanitizedProfile\r\n if (venus._config) {\r\n venus._config.profile = sanitizedProfile\r\n }\r\n if (venus.config) {\r\n venus.config.profile = sanitizedProfile\r\n }\r\n }\r\n }\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 hudInsets = response.hudInsets\r\n if (hudInsets) {\r\n this.venusApi.config.ui.safeArea = hudInsets\r\n }\r\n\r\n return {\r\n hudInsets: hudInsets,\r\n initializeAsleep: response.initializeAsleep,\r\n }\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 hudInsets?: HudInsets\r\n launchParams?: Record<string, string>\r\n}\r\n","import {\r\n RoomsApi,\r\n CreateRoomOptions,\r\n JoinOrCreateResult,\r\n RoomSubscriptionOptions,\r\n ProposeMovePayload,\r\n ProposeMoveResult,\r\n ValidateMoveResult,\r\n} from './RoomsApi'\r\nimport { RpcClient } from '../rpc'\r\nimport { VenusMessageId } from '../VenusMessageId'\r\nimport { VenusRoom } from './VenusRoom'\r\n\r\ntype SubscriptionCallback = (payload: any) => void\r\ntype RoomSubscriptions = Record<string, SubscriptionCallback[]>\r\n\r\ninterface SubscriptionState {\r\n data: RoomSubscriptions\r\n messages: RoomSubscriptions\r\n gameEvents: RoomSubscriptions\r\n allEvents: RoomSubscriptions\r\n}\r\n\r\nexport class RpcRoomsApi implements RoomsApi {\r\n private readonly rpcClient: RpcClient\r\n private readonly subscriptions: SubscriptionState\r\n private transportSubscription: { unsubscribe: () => void } | null = null\r\n\r\n constructor(rpcClient: RpcClient) {\r\n this.rpcClient = rpcClient\r\n this.subscriptions = {\r\n data: {},\r\n messages: {},\r\n gameEvents: {},\r\n allEvents: {},\r\n }\r\n }\r\n\r\n /**\r\n * Get the subscription state for external access (used by setupRoomNotifications)\r\n */\r\n getSubscriptions(): SubscriptionState {\r\n return this.subscriptions\r\n }\r\n\r\n /**\r\n * Set up room notification routing from the transport\r\n */\r\n setupNotifications(transport: any): void {\r\n const { setupRoomNotifications } = require('./index')\r\n this.transportSubscription = setupRoomNotifications(\r\n transport,\r\n () => this.getSubscriptions(),\r\n )\r\n }\r\n\r\n /**\r\n * Clean up subscriptions and resources\r\n */\r\n dispose(): void {\r\n if (this.transportSubscription) {\r\n this.transportSubscription.unsubscribe()\r\n this.transportSubscription = null\r\n console.log('[Venus Rooms] Cleaned up room notification subscription')\r\n }\r\n }\r\n\r\n async createRoom(options: CreateRoomOptions): Promise<VenusRoom> {\r\n const response = await this.rpcClient.call<any>(\r\n VenusMessageId.H5_ROOM_CREATE,\r\n {\r\n options: options,\r\n },\r\n )\r\n if (response.success === false) {\r\n throw new Error(response.error || 'Failed to create room')\r\n }\r\n\r\n // The response IS the room data when coming from the real API\r\n const roomData = response.roomData || response\r\n const room = new VenusRoom(roomData)\r\n // 🔧 FIX: Register room object for subscription updates\r\n //window.venus._roomObjects[room.id] = room\r\n return room\r\n }\r\n\r\n async joinOrCreateRoom(options: CreateRoomOptions): Promise<JoinOrCreateResult> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_JOIN_OR_CREATE,\r\n {\r\n options: options,\r\n },\r\n )\r\n if (response.success === false) {\r\n throw new Error(response.error || 'Failed to join or create room')\r\n }\r\n\r\n const data = response.value || response\r\n const room = new VenusRoom(data.roomData)\r\n // 🔧 FIX: Register room object for subscription updates\r\n // window.venus._roomObjects[room.id] = room\r\n\r\n return {\r\n action: data.action,\r\n room: room,\r\n playersJoined: data.playersJoined,\r\n }\r\n }\r\n\r\n async joinRoomByCode(roomCode: string): Promise<VenusRoom> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_JOIN_BY_CODE,\r\n {\r\n roomCode: roomCode,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to join room by code')\r\n }\r\n\r\n // The response IS the room data when coming from the real API\r\n const roomData = response.roomData || response\r\n const room = new VenusRoom(roomData)\r\n // 🔧 FIX: Register room object for subscription updates\r\n // window.venus._roomObjects[room.id] = room\r\n return room\r\n }\r\n\r\n // Get user's rooms with optional filtering\r\n async getUserRooms(includeArchived = false): Promise<VenusRoom[]> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_GET_USER_ROOMS,\r\n {\r\n includeArchived: includeArchived,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to get user rooms')\r\n }\r\n\r\n // Convert raw room data to VenusRoom objects and filter out corrupted entries\r\n const rawRooms = response.rooms || []\r\n const venusRooms = []\r\n\r\n for (const roomData of rawRooms) {\r\n // Skip rooms with missing canonical ID\r\n if (!roomData.id) {\r\n console.warn('getUserRooms: Skipping room with missing ID:', roomData)\r\n continue\r\n }\r\n\r\n try {\r\n const venusRoom = new VenusRoom(roomData)\r\n // 🔧 FIX: Register room object for subscription updates\r\n //window.venus._roomObjects[venusRoom.id] = venusRoom\r\n venusRooms.push(venusRoom)\r\n } catch (error) {\r\n console.warn(\r\n 'getUserRooms: Failed to create VenusRoom object:',\r\n error,\r\n roomData,\r\n )\r\n // Continue processing other rooms\r\n }\r\n }\r\n\r\n return venusRooms\r\n }\r\n\r\n async updateData(room: VenusRoom, updates: Record<string, any>, merge = true): Promise<any> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_UPDATE_DATA,\r\n {\r\n roomId: room.id,\r\n updates: updates,\r\n merge: merge,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to update room data')\r\n }\r\n return response.data\r\n }\r\n\r\n async getData(room: VenusRoom): Promise<any> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_GET_DATA,\r\n {\r\n roomId: room.id,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to get room data')\r\n }\r\n return response.data\r\n }\r\n\r\n async sendMessage(venusRoom: VenusRoom, messageData: any): Promise<string> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_SEND_MESSAGE,\r\n {\r\n roomId: venusRoom.id,\r\n message: messageData,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to send message')\r\n }\r\n return response.messageId\r\n }\r\n\r\n async leave(room: VenusRoom): Promise<any> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_LEAVE,\r\n {\r\n roomId: room.id,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to leave room')\r\n }\r\n\r\n // Clean up all subscriptions\r\n // this._subscriptions.forEach((sub) => {\r\n // if (sub.unsubscribe) sub.unsubscribe()\r\n // })\r\n // this._subscriptions.clear()\r\n //\r\n // // 🔧 FIX: Remove room object from global registry when leaving\r\n // if (window.venus._roomObjects[this.id]) {\r\n // delete window.venus._roomObjects[this.id]\r\n // console.log(\r\n // `[Venus Rooms] 🧹 Removed room object ${this.id} from global registry`,\r\n // )\r\n // }\r\n\r\n return response\r\n }\r\n\r\n async startGame(room: VenusRoom, gameConfig: Record<string, any> = {}, turnOrder: string[] | null = null): Promise<any> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_START_GAME,\r\n {\r\n roomId: room.id,\r\n gameConfig: gameConfig,\r\n turnOrder: turnOrder,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to start game')\r\n }\r\n return response.data\r\n }\r\n\r\n async proposeMove(room: VenusRoom, proposalPayload: ProposeMovePayload): Promise<ProposeMoveResult> {\r\n const response: any = await this.rpcClient.call(\r\n VenusMessageId.H5_ROOM_PROPOSE_MOVE,\r\n {\r\n roomId: room.id,\r\n gameSpecificState: proposalPayload.gameSpecificState,\r\n moveType: proposalPayload.moveType,\r\n clientContext: proposalPayload.clientContext,\r\n clientProposalId: proposalPayload.clientProposalId,\r\n },\r\n )\r\n if (response?.success === false) {\r\n throw new Error(response.error || 'Failed to propose move')\r\n }\r\n return response.data\r\n }\r\n\r\n async validateMove(\r\n room: VenusRoom,\r\n moveId: string,\r\n isValid: boolean,\r\n reason: string | null = null,\r\n validatorId: string | null = null,\r\n ): Promise<ValidateMoveResult> {\r\n console.log(`[Venus Rooms] Validating move ${moveId}: ${isValid}`)\r\n // TODO: Implement actual validation logic when peer validation is added\r\n // For now, just return success to maintain compatibility\r\n return { success: true, moveId, isValid, reason }\r\n }\r\n\r\n async roomSubscribeToGameEvents(room: VenusRoom, callback: any) {\r\n const subscriptionId =\r\n 'game_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)\r\n\r\n if (!this.subscriptions.gameEvents[room.id]) {\r\n this.subscriptions.gameEvents[room.id] = []\r\n }\r\n this.subscriptions.gameEvents[room.id].push(callback)\r\n }\r\n\r\n subscribe(room: VenusRoom, options: RoomSubscriptionOptions = {}): () => void {\r\n const subscriptionIds: any[] = []\r\n const roomId = room.id\r\n\r\n // Set up data subscription if requested\r\n if (options.onData) {\r\n const dataSubId =\r\n 'data_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)\r\n\r\n if (!this.subscriptions.data[roomId]) {\r\n this.subscriptions.data[roomId] = []\r\n }\r\n this.subscriptions.data[roomId].push(options.onData)\r\n subscriptionIds.push({\r\n type: 'data',\r\n id: dataSubId,\r\n callback: options.onData,\r\n })\r\n }\r\n\r\n // Set up messages subscription if requested\r\n if (options.onMessages) {\r\n const msgSubId =\r\n 'messages_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)\r\n\r\n if (!this.subscriptions.messages[roomId]) {\r\n this.subscriptions.messages[roomId] = []\r\n }\r\n this.subscriptions.messages[roomId].push(options.onMessages)\r\n subscriptionIds.push({\r\n type: 'messages',\r\n id: msgSubId,\r\n callback: options.onMessages,\r\n })\r\n }\r\n\r\n // Set up game events subscription if requested\r\n if (options.onMoves || options.onGameEvents) {\r\n const handler = options.onMoves || options.onGameEvents\r\n if (handler) {\r\n const gameSubId =\r\n 'game_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)\r\n\r\n if (!this.subscriptions.gameEvents[roomId]) {\r\n this.subscriptions.gameEvents[roomId] = []\r\n }\r\n this.subscriptions.gameEvents[roomId].push(handler)\r\n subscriptionIds.push({\r\n type: 'gameEvents',\r\n id: gameSubId,\r\n callback: handler,\r\n })\r\n }\r\n }\r\n\r\n // Start the actual Firebase subscription if this is the first subscription\r\n const needsSubscription =\r\n subscriptionIds.length > 0 &&\r\n ((this.subscriptions.data[roomId]?.length ?? 0) <= 1) &&\r\n ((this.subscriptions.messages[roomId]?.length ?? 0) <= 1) &&\r\n ((this.subscriptions.gameEvents[roomId]?.length ?? 0) <= 1)\r\n\r\n if (needsSubscription) {\r\n this.rpcClient\r\n .call(VenusMessageId.H5_ROOM_SUBSCRIBE, {\r\n roomId: roomId,\r\n subscribeToData: !!options.onData,\r\n subscribeToMessages: !!options.onMessages,\r\n subscribeToProposedMoves: !!(options.onMoves || options.onGameEvents),\r\n })\r\n .catch((error) => {\r\n console.error('Failed to set up room subscription:', error)\r\n })\r\n }\r\n\r\n // Return composite unsubscribe function (idempotent)\r\n let called = false\r\n return () => {\r\n if (called) return\r\n called = true\r\n\r\n // Remove all callbacks\r\n subscriptionIds.forEach((sub: { type: string; callback: any }) => {\r\n const bucket = this.subscriptions[sub.type as keyof SubscriptionState]\r\n const callbacks = (bucket && bucket[roomId]) || []\r\n const index = callbacks.indexOf(sub.callback)\r\n if (index > -1) callbacks.splice(index, 1)\r\n })\r\n\r\n // Check if we should unsubscribe from Firebase\r\n const hasNoCallbacks =\r\n ((this.subscriptions.data[roomId]?.length ?? 0) === 0) &&\r\n ((this.subscriptions.messages[roomId]?.length ?? 0) === 0) &&\r\n ((this.subscriptions.gameEvents[roomId]?.length ?? 0) === 0)\r\n\r\n if (hasNoCallbacks) {\r\n this.rpcClient\r\n .call(VenusMessageId.H5_ROOM_UNSUBSCRIBE, {\r\n roomId: roomId,\r\n })\r\n .catch((error) => {\r\n console.error('Failed to clean up room subscription:', error)\r\n })\r\n }\r\n }\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 {\r\n ActionSheetItem,\r\n MockPopupsApi,\r\n PopupsApi,\r\n ShowActionSheetOptions,\r\n} from './popups'\r\nimport { MockProfileApi, ProfileApi } from './profile'\r\nimport { CdnApi, MockCdnApi } from './cdn'\r\nimport { MockTimeApi, TimeApi } from './time'\r\nimport { MockPostApi, PostApi } from './post'\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 { MockSimulationApi, 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 { MockOverlay, OverlayElements } from './MockOverlay'\r\nimport { MockSharedAssetsApi, RpcSharedAssetsApi } 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 createRoom(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async joinOrCreateRoom(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async getUserRooms(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async joinRoomByCode(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n subscribe(): never {\r\n throw roomsUnavailableError()\r\n },\r\n async updateData(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async getData(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async sendMessage(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async leave(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async startGame(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async proposeMove(): Promise<never> {\r\n throw roomsUnavailableError()\r\n },\r\n async validateMove(): Promise<never> {\r\n throw roomsUnavailableError()\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 cdn: CdnApi\r\n readonly time: TimeApi\r\n readonly post: PostApi\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 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 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.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()\r\n this.cdn = new MockCdnApi()\r\n this.time = new MockTimeApi(venusApi)\r\n this.post = new MockPostApi(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.simulation = new MockSimulationApi()\r\n this.rooms = createUnavailableRoomsApi()\r\n this.logging = new MockLoggingApi()\r\n this.iap = new MockIapApi()\r\n this.social = new MockSocialApi()\r\n this.leaderboard = new MockLeaderboardApi()\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 const controls = this.updateUiControls()\r\n return Promise.resolve({\r\n initializeAsleep: false,\r\n hudInsets: {\r\n top: controls.feedHeader.height,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n }\r\n })\r\n }\r\n\r\n private updateUiControls() {\r\n const controls = {\r\n closeButton: { x: 16, y: 16, width: 32, height: 32 },\r\n menuButton: {\r\n x: window.innerWidth - 48,\r\n y: 16,\r\n width: 32,\r\n height: 32,\r\n },\r\n feedHeader: { x: 0, y: 0, width: window.innerWidth, height: 56 },\r\n playButton: {\r\n x: 0,\r\n y: window.innerHeight - 60,\r\n width: window.innerWidth,\r\n height: 60,\r\n },\r\n }\r\n return controls\r\n }\r\n\r\n private createOverlay(): MockOverlay {\r\n const venusApi = this.venusApi\r\n venusApi.config.ui.controls = this.updateUiControls()\r\n const uiControls = venusApi.config.ui.controls\r\n\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\r\n const menuButton = this.createOverlayButton(\r\n 'close',\r\n 'Menu',\r\n uiControls.menuButton,\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: ActionSheetItem[] = []\r\n\r\n const awakeAction: ActionSheetItem = {\r\n label: '⏰ Awake',\r\n id: 'awakeAction',\r\n }\r\n\r\n const sleepAction: ActionSheetItem = {\r\n label: '💤 Sleep',\r\n id: 'sleepAction',\r\n }\r\n\r\n const quitAction: ActionSheetItem = {\r\n label: '🛑 Quit',\r\n id: 'quitAction',\r\n }\r\n\r\n const playAction: ActionSheetItem = {\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 //this.log('Updating mock overlay')\r\n const venusApi = this.venusApi\r\n const overlay = this._overlay\r\n\r\n venusApi.config.ui.controls = this.updateUiControls()\r\n\r\n // Get updated UI controls from VenusAPI\r\n const uiControls = venusApi.config.ui.controls\r\n //this.log('Controls: ', venusApi.config.ui.controls)\r\n\r\n const menuBtn = overlay.elements.menuButton\r\n const menuPos = uiControls.menuButton\r\n menuBtn.style.left = `${menuPos.x}px`\r\n menuBtn.style.top = `${menuPos.y}px`\r\n menuBtn.style.width = `${menuPos.width}px`\r\n menuBtn.style.minWidth = `${menuPos.width}px`\r\n menuBtn.style.height = `${menuPos.height}px`\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: ActionSheetItem[],\r\n options?: ShowActionSheetOptions,\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","import { MockHost } from './MockHost.ts'\r\nimport { RemoteHost } from './RemoteHost.ts'\r\nimport { AnalyticsApi } from './analytics'\r\nimport { AdsApi } from './ads'\r\nimport { StorageApi } from './storage'\r\nimport { Avatar3dApi } from './avatar3d'\r\nimport { VenusAPI, VenusConfig } 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 { CdnApi } from './cdn'\r\nimport { TimeApi } from './time'\r\nimport { PostApi } from './post'\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\nexport interface HudInsets {\r\n left: number\r\n top: number\r\n right: number\r\n bottom: number\r\n}\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 hudInsets?: HudInsets\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 cdn: CdnApi\r\n readonly time: TimeApi\r\n readonly post: PostApi\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 initialize(options?: InitializationOptions): Promise<InitializationContext>\r\n}\r\n\r\nexport function createHost(venusApi: VenusAPI, isMock: boolean): Host {\r\n if (isMock) {\r\n console.log('[Venus SDK] Creating Local Host')\r\n return new MockHost(venusApi)\r\n } else {\r\n console.log('[Venus SDK] Creating Remote Host')\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"]}