capybara-game-sdk 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +246 -0
- package/dist/index.d.ts +246 -0
- package/dist/index.js +698 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +690 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/AuthModule.ts","../src/ParentBridge.ts","../src/PaymentsModule.ts","../src/GameSDK.ts","../src/ApiClient.ts","../src/StorageModule.ts","../src/hooks.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { User } from \"./types\";\nimport { ParentBridge } from \"./ParentBridge\";\n\nexport class AuthModule {\n private currentUser: User | null = null;\n private authChangeListeners: Set<(user: User | null) => void> = new Set();\n\n constructor(private bridge: ParentBridge) {\n this.initialize();\n }\n\n private async initialize(): Promise<void> {\n // Get initial user state\n this.currentUser = await this.bridge.getCurrentUser();\n\n // Listen for auth changes from parent\n this.bridge.on(\"auth_changed\", (user: User | null) => {\n this.currentUser = user;\n this.notifyAuthChange();\n });\n }\n\n private notifyAuthChange(): void {\n this.authChangeListeners.forEach((listener) => {\n try {\n listener(this.currentUser);\n } catch (error) {\n console.error(\"Error in auth change listener:\", error);\n }\n });\n }\n\n /**\n * Get the currently authenticated user\n */\n async getCurrentUser(): Promise<User | null> {\n if (!this.currentUser) {\n this.currentUser = await this.bridge.getCurrentUser();\n }\n return this.currentUser;\n }\n\n /**\n * Get bearer token for the authenticated user\n */\n async getBearerToken(): Promise<string | null> {\n return await this.bridge.getBearerToken();\n }\n\n /**\n * Request user authentication (triggers parent app UI)\n */\n async requestLogin(): Promise<void> {\n await this.bridge.requestLogin();\n // Wait a bit and refresh user\n await new Promise((resolve) => setTimeout(resolve, 500));\n this.currentUser = await this.bridge.getCurrentUser();\n this.notifyAuthChange();\n }\n\n /**\n * Logout the current user\n */\n async logout(): Promise<void> {\n await this.bridge.logout();\n this.currentUser = null;\n this.notifyAuthChange();\n }\n\n /**\n * Listen for authentication state changes\n */\n onAuthChange(callback: (user: User | null) => void): () => void {\n this.authChangeListeners.add(callback);\n\n // Immediately call with current state\n callback(this.currentUser);\n\n // Return unsubscribe function\n return () => {\n this.authChangeListeners.delete(callback);\n };\n }\n\n /**\n * Check if user is authenticated\n */\n isAuthenticated(): boolean {\n return this.currentUser !== null;\n }\n}\n","import type {\n ParentMessage,\n ChildMessage,\n User,\n CreditBalance,\n PaymentResult,\n} from \"./types\";\n\n/**\n * Secure communication bridge between iframe and parent app\n * Uses postMessage with origin verification\n */\nexport class ParentBridge {\n private allowedOrigins: Set<string>;\n private messageHandlers: Map<string, (data: any) => void> = new Map();\n private pendingRequests: Map<\n string,\n { resolve: (value: any) => void; reject: (error: Error) => void }\n > = new Map();\n private requestIdCounter = 0;\n\n constructor(allowedOrigins: string[] = [\"*\"]) {\n this.allowedOrigins = new Set(allowedOrigins);\n this.setupMessageListener();\n }\n\n private setupMessageListener(): void {\n window.addEventListener(\"message\", (event: MessageEvent<ParentMessage>) => {\n // Security: Verify origin\n if (\n this.allowedOrigins.size > 0 &&\n !this.allowedOrigins.has(\"*\") &&\n !this.allowedOrigins.has(event.origin)\n ) {\n console.warn(\n \"Rejected message from unauthorized origin:\",\n event.origin,\n );\n return;\n }\n\n const message = event.data;\n if (!message || typeof message !== \"object\" || !message.type) {\n return;\n }\n\n // Handle response to a pending request\n const requestId = (message as any).requestId;\n if (requestId && this.pendingRequests.has(requestId)) {\n const { resolve, reject } = this.pendingRequests.get(requestId)!;\n this.pendingRequests.delete(requestId);\n\n if (message.error) {\n reject(new Error(message.error));\n } else {\n resolve(message.data);\n }\n return;\n }\n\n // Handle regular messages\n const handler = this.messageHandlers.get(message.type);\n if (handler) {\n handler(message.data);\n }\n });\n }\n\n /**\n * Send a message to parent and wait for response\n */\n private sendRequest<T>(type: string, data?: any): Promise<T> {\n return new Promise((resolve, reject) => {\n const requestId = `req_${this.requestIdCounter++}_${Date.now()}`;\n\n this.pendingRequests.set(requestId, { resolve, reject });\n\n const message: ChildMessage & { requestId: string } = {\n type: type as any,\n data,\n requestId,\n };\n\n window.parent.postMessage(message, \"*\");\n\n // Timeout after 30 seconds\n setTimeout(() => {\n if (this.pendingRequests.has(requestId)) {\n this.pendingRequests.delete(requestId);\n reject(new Error(\"Request timeout\"));\n }\n }, 30000);\n });\n }\n\n /**\n * Send a message to parent without expecting a response\n */\n private sendMessage(type: string, data?: any): void {\n const message: ChildMessage = {\n type: type as any,\n data,\n };\n\n window.parent.postMessage(message, \"*\");\n }\n\n /**\n * Listen for messages from parent\n */\n on(type: string, handler: (data: any) => void): void {\n this.messageHandlers.set(type, handler);\n }\n\n /**\n * Remove message listener\n */\n off(type: string): void {\n this.messageHandlers.delete(type);\n }\n\n /**\n * Get current authenticated user\n */\n async getCurrentUser(): Promise<User | null> {\n try {\n return await this.sendRequest<User | null>(\"get_user\");\n } catch (error) {\n console.error(\"Failed to get current user:\", error);\n return null;\n }\n }\n\n /**\n * Request user to login (triggers parent app UI)\n */\n async requestLogin(): Promise<void> {\n return this.sendRequest<void>(\"request_login\");\n }\n\n /**\n * Logout current user\n */\n async logout(): Promise<void> {\n return this.sendRequest<void>(\"logout\");\n }\n\n /**\n * Get bearer token for authenticated user\n */\n async getBearerToken(): Promise<string | null> {\n try {\n return await this.sendRequest<string | null>(\"get_bearer_token\");\n } catch (error) {\n console.error(\"Failed to get bearer token:\", error);\n return null;\n }\n }\n\n /**\n * Get user's credit balance\n */\n async getBalance(): Promise<CreditBalance> {\n return this.sendRequest<CreditBalance>(\"get_balance\");\n }\n\n /**\n * Charge credits from user's balance\n */\n async chargeCredits(\n amount: number,\n description: string,\n ): Promise<PaymentResult> {\n return this.sendRequest<PaymentResult>(\"charge_credits\", {\n amount,\n description,\n });\n }\n\n /**\n * Notify parent that SDK is ready\n */\n notifyReady(): void {\n this.sendMessage(\"ready\");\n }\n}\n","import type { CreditBalance, PaymentResult, Transaction } from \"./types\";\nimport { ParentBridge } from \"./ParentBridge\";\nimport { AuthModule } from \"./AuthModule\";\n\nexport class PaymentsModule {\n private currentBalance: CreditBalance = { credits: 0 };\n private balanceChangeListeners: Set<(balance: CreditBalance) => void> =\n new Set();\n private transactions: Transaction[] = [];\n\n constructor(\n private bridge: ParentBridge,\n private auth: AuthModule,\n private devMode: boolean,\n ) {\n this.initialize();\n }\n\n private async initialize(): Promise<void> {\n // Get initial balance if authenticated\n if (this.auth.isAuthenticated()) {\n await this.refreshBalance();\n }\n\n // Listen for auth changes\n this.auth.onAuthChange(async (user) => {\n if (user) {\n await this.refreshBalance();\n } else {\n this.currentBalance = { credits: 0 };\n this.notifyBalanceChange();\n }\n });\n\n // Listen for balance updates from parent\n this.bridge.on(\"balance_updated\", (balance: CreditBalance) => {\n this.currentBalance = balance;\n this.notifyBalanceChange();\n });\n }\n\n private async refreshBalance(): Promise<void> {\n try {\n this.currentBalance = await this.bridge.getBalance();\n this.notifyBalanceChange();\n } catch (error) {\n console.error(\"Failed to refresh balance:\", error);\n }\n }\n\n private notifyBalanceChange(): void {\n this.balanceChangeListeners.forEach((listener) => {\n try {\n listener(this.currentBalance);\n } catch (error) {\n console.error(\"Error in balance change listener:\", error);\n }\n });\n }\n\n /**\n * Get the current credit balance\n */\n async getBalance(): Promise<CreditBalance> {\n if (!this.auth.isAuthenticated()) {\n throw new Error(\"User must be authenticated to check balance\");\n }\n\n if (this.devMode) {\n return { credits: 999999 }; // Unlimited credits in dev mode\n }\n\n await this.refreshBalance();\n return this.currentBalance;\n }\n\n /**\n * Charge credits from the user's balance\n * In dev mode, this is a no-op (free)\n */\n async charge(amount: number, description: string): Promise<PaymentResult> {\n if (!this.auth.isAuthenticated()) {\n throw new Error(\"User must be authenticated to make payments\");\n }\n\n if (amount <= 0) {\n throw new Error(\"Amount must be greater than 0\");\n }\n\n // In dev mode, all charges are free\n if (this.devMode) {\n console.warn(\n `Dev mode: Charging ${amount} credits for \"${description}\" - no actual charge applied.`,\n );\n return {\n success: true,\n newBalance: 999999,\n };\n }\n\n try {\n const result = await this.bridge.chargeCredits(amount, description);\n\n if (result.success) {\n this.currentBalance = { credits: result.newBalance };\n this.notifyBalanceChange();\n\n // Track transaction\n this.transactions.push({\n amount: -amount,\n description,\n timestamp: Date.now(),\n });\n }\n\n return result;\n } catch (error) {\n return {\n success: false,\n newBalance: this.currentBalance.credits,\n error:\n error instanceof Error ? error.message : \"Failed to charge credits\",\n };\n }\n }\n\n /**\n * Listen for balance changes\n */\n onBalanceChange(callback: (balance: CreditBalance) => void): () => void {\n this.balanceChangeListeners.add(callback);\n\n // Immediately call with current balance\n callback(this.currentBalance);\n\n // Return unsubscribe function\n return () => {\n this.balanceChangeListeners.delete(callback);\n };\n }\n\n /**\n * Get transaction history\n * Note: This only includes transactions made during the current session\n * For full history, the parent app should provide an API\n */\n async getHistory(): Promise<Transaction[]> {\n return [...this.transactions];\n }\n\n /**\n * Gift credits to another user (requires server-side implementation)\n */\n async giftCredits(\n userId: string,\n amount: number,\n description: string,\n ): Promise<PaymentResult> {\n // This would need to be implemented on the server side\n throw new Error(\"Gift credits not yet implemented\");\n }\n\n /**\n * Set development mode\n */\n setDevMode(enabled: boolean): void {\n this.devMode = enabled;\n }\n}\n","import { AuthModule } from \"./AuthModule\";\nimport { ParentBridge } from \"./ParentBridge\";\nimport { PaymentsModule } from \"./PaymentsModule\";\nimport { GameSDKConfig } from \"./types\";\n\nexport class GameSDK {\n private static instance: GameSDK | null = null;\n public readonly auth: AuthModule;\n public readonly payments: PaymentsModule;\n\n private bridge: ParentBridge;\n private config: GameSDKConfig;\n public readonly gameId: string;\n\n private constructor(config: GameSDKConfig) {\n this.config = config;\n this.gameId = config.gameId;\n\n // Initialize parent bridge\n this.bridge = new ParentBridge();\n\n // Initialize modules\n this.auth = new AuthModule(this.bridge);\n this.payments = new PaymentsModule(\n this.bridge,\n this.auth,\n config.devMode || false,\n );\n\n // Notify parent that SDK is ready\n this.bridge.notifyReady();\n\n // Call onReady callback\n if (config.onReady) {\n setTimeout(config.onReady, 0);\n }\n }\n\n /**\n * Initialize the Game SDK\n */\n static async init(config: GameSDKConfig): Promise<GameSDK> {\n if (GameSDK.instance) {\n console.warn(\"GameSDK already initialized. Returning existing instance.\");\n return GameSDK.instance;\n }\n\n // Validate config\n if (!config.gameId) {\n throw new Error(\"gameId is required\");\n }\n\n GameSDK.instance = new GameSDK(config);\n return GameSDK.instance;\n }\n\n /**\n * Get the current SDK instance\n */\n static getInstance(): GameSDK {\n if (!GameSDK.instance) {\n throw new Error(\"GameSDK not initialized. Call GameSDK.init() first.\");\n }\n return GameSDK.instance;\n }\n\n /**\n * Set development mode\n */\n setDevMode(enabled: boolean): void {\n this.config.devMode = enabled;\n this.payments.setDevMode(enabled);\n }\n\n /**\n * Get SDK configuration\n */\n getConfig(): Readonly<GameSDKConfig> {\n return { ...this.config };\n }\n\n /**\n * Clean up SDK resources\n */\n async destroy(): Promise<void> {\n // Leave all multiplayer rooms\n // await this.multiplayer.leaveAll();\n\n // Clear instance\n GameSDK.instance = null;\n }\n}\n","import { AuthModule } from \"./AuthModule\";\n\n// Hardcoded server URL as per project convention\nconst API_BASE_URL = \"https://api.gamesdk.com\";\n\n/**\n * API client for communicating with the game server\n */\nexport class ApiClient {\n constructor(private auth: AuthModule) {}\n\n private async getHeaders(): Promise<Record<string, string>> {\n const token = await this.auth.getBearerToken();\n return {\n \"Content-Type\": \"application/json\",\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n };\n }\n\n private async makeRequest<T>(\n endpoint: string,\n options: RequestInit = {},\n ): Promise<T> {\n const url = `${API_BASE_URL}${endpoint}`;\n const headers = await this.getHeaders();\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...headers,\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(\n `API request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n return response.json();\n }\n\n /**\n * Save game data to the server\n */\n async saveGameData(gameId: string, data: any): Promise<void> {\n await this.makeRequest(\"/api/storage/save\", {\n method: \"POST\",\n body: JSON.stringify({ gameId, data }),\n });\n }\n\n /**\n * Load game data from the server\n */\n async loadGameData(gameId: string): Promise<any | null> {\n try {\n const result = await this.makeRequest<{ data: any }>(\n \"/api/storage/load\",\n {\n method: \"GET\",\n },\n );\n return result.data;\n } catch (error) {\n // If data doesn't exist, return null\n if (error instanceof Error && error.message.includes(\"404\")) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Clear game data from the server\n */\n async clearGameData(gameId: string): Promise<void> {\n await this.makeRequest(\"/api/storage/clear\", {\n method: \"DELETE\",\n });\n }\n\n /**\n * Check if game data exists on the server\n */\n async gameDataExists(gameId: string): Promise<boolean> {\n try {\n await this.makeRequest(\"/api/storage/exists\", {\n method: \"GET\",\n });\n return true;\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"404\")) {\n return false;\n }\n throw error;\n }\n }\n\n /**\n * Get the size of stored game data\n */\n async getGameDataSize(gameId: string): Promise<number> {\n const result = await this.makeRequest<{ size: number }>(\n \"/api/storage/size\",\n {\n method: \"GET\",\n },\n );\n return result.size;\n }\n}\n","import { AuthModule } from \"./AuthModule\";\nimport { ApiClient } from \"./ApiClient\";\n\n/**\n * Storage module for persisting game data\n * Data is automatically scoped to userId + gameId\n */\nexport class StorageModule {\n private gameId: string;\n private apiClient: ApiClient;\n\n constructor(\n gameId: string,\n private auth: AuthModule,\n ) {\n this.gameId = gameId;\n this.apiClient = new ApiClient(auth);\n }\n\n /**\n * Save data to storage\n * Data is automatically scoped to current user and game\n * Maximum size: 5MB\n */\n async save<T = any>(data: T): Promise<void> {\n try {\n const serialized = JSON.stringify(data);\n\n // Check size limit (5MB = 5 * 1024 * 1024 bytes)\n const sizeInBytes = new Blob([serialized]).size;\n if (sizeInBytes > 5 * 1024 * 1024) {\n throw new Error(\"Storage limit exceeded: Maximum 5MB allowed\");\n }\n\n await this.apiClient.saveGameData(this.gameId, data);\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\"Failed to save data to storage\");\n }\n }\n\n /**\n * Load data from storage\n * Returns null if no data exists\n */\n async load<T = any>(): Promise<T | null> {\n try {\n return await this.apiClient.loadGameData(this.gameId);\n } catch (error) {\n console.error(\"Failed to load data from storage:\", error);\n return null;\n }\n }\n\n /**\n * Clear all stored data for current user and game\n */\n async clear(): Promise<void> {\n try {\n await this.apiClient.clearGameData(this.gameId);\n } catch (error) {\n console.error(\"Failed to clear storage:\", error);\n }\n }\n\n /**\n * Check if data exists in storage\n */\n async exists(): Promise<boolean> {\n return this.apiClient.gameDataExists(this.gameId);\n }\n\n /**\n * Get the size of stored data in bytes\n */\n async getSize(): Promise<number> {\n try {\n return await this.apiClient.getGameDataSize(this.gameId);\n } catch (error) {\n return 0;\n }\n }\n}\n","import { useEffect, useState, useCallback, useRef } from \"react\";\nimport { GameSDK } from \"./GameSDK\";\nimport type { User, CreditBalance, GameSDKConfig } from \"./types\";\n\n/**\n * Hook to initialize the Game SDK\n */\nexport function useGameSDK(config: GameSDKConfig) {\n const [sdk, setSDK] = useState<GameSDK | null>(null);\n const [isReady, setIsReady] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n let mounted = true;\n\n const initSDK = async () => {\n try {\n const configWithReady = {\n ...config,\n onReady: () => {\n if (mounted) {\n setIsReady(true);\n config.onReady?.();\n }\n },\n };\n\n const instance = await GameSDK.init(configWithReady);\n\n if (mounted) {\n setSDK(instance);\n }\n } catch (err) {\n if (mounted) {\n setError(\n err instanceof Error ? err : new Error(\"Failed to initialize SDK\"),\n );\n }\n }\n };\n\n initSDK();\n\n return () => {\n mounted = false;\n };\n }, [config.gameId]);\n\n return { sdk, isReady, error };\n}\n\n/**\n * Hook to access the current user\n */\nexport function useAuth() {\n const sdk = GameSDK.getInstance();\n const [user, setUser] = useState<User | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let mounted = true;\n\n const loadUser = async () => {\n const currentUser = await sdk.auth.getCurrentUser();\n if (mounted) {\n setUser(currentUser);\n setIsLoading(false);\n }\n };\n\n loadUser();\n\n const unsubscribe = sdk.auth.onAuthChange((newUser) => {\n if (mounted) {\n setUser(newUser);\n }\n });\n\n return () => {\n mounted = false;\n unsubscribe();\n };\n }, [sdk]);\n\n const login = useCallback(async () => {\n await sdk.auth.requestLogin();\n }, [sdk]);\n\n const logout = useCallback(async () => {\n await sdk.auth.logout();\n }, [sdk]);\n\n return {\n user,\n isLoading,\n isAuthenticated: !!user,\n login,\n logout,\n };\n}\n\n/**\n * Hook to access credit balance\n */\nexport function useCredits() {\n const sdk = GameSDK.getInstance();\n const [balance, setBalance] = useState<CreditBalance>({ credits: 0 });\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let mounted = true;\n\n const loadBalance = async () => {\n try {\n const currentBalance = await sdk.payments.getBalance();\n if (mounted) {\n setBalance(currentBalance);\n setIsLoading(false);\n }\n } catch (error) {\n if (mounted) {\n setIsLoading(false);\n }\n }\n };\n\n loadBalance();\n\n const unsubscribe = sdk.payments.onBalanceChange((newBalance) => {\n if (mounted) {\n setBalance(newBalance);\n }\n });\n\n return () => {\n mounted = false;\n unsubscribe();\n };\n }, [sdk]);\n\n const charge = useCallback(\n async (amount: number, description: string) => {\n return await sdk.payments.charge(amount, description);\n },\n [sdk],\n );\n\n return {\n balance: balance.credits,\n isLoading,\n charge,\n };\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "capybara-game-sdk",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Game SDK for building multiplayer AI-powered games",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsup src/index.ts --format cjs,esm --dts --clean",
|
|
13
|
+
"dev": "tsup src/index.ts --format cjs,esm --dts --watch",
|
|
14
|
+
"typecheck": "tsc --noEmit",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"game",
|
|
19
|
+
"sdk",
|
|
20
|
+
"multiplayer",
|
|
21
|
+
"ai",
|
|
22
|
+
"capybara"
|
|
23
|
+
],
|
|
24
|
+
"author": "Capybara Team",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"react": ">=16.8.0"
|
|
28
|
+
},
|
|
29
|
+
"peerDependenciesMeta": {
|
|
30
|
+
"react": {
|
|
31
|
+
"optional": true
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@colyseus/sdk": "^0.17.25",
|
|
36
|
+
"colyseus.js": "^0.15.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^20.0.0",
|
|
40
|
+
"@types/react": "^19.2.4",
|
|
41
|
+
"react": "^19.2.4",
|
|
42
|
+
"tsup": "^8.0.0",
|
|
43
|
+
"typescript": "^5.0.0"
|
|
44
|
+
}
|
|
45
|
+
}
|