{"_id":"@1paws1/game-sdk","_rev":"6-da8ea215cacc1d14f1323f058aacbc2c","name":"@1paws1/game-sdk","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.1":{"name":"@1paws1/game-sdk","version":"0.1.1","author":{"name":"Mission Pawsible"},"license":"MIT","_id":"@1paws1/game-sdk@0.1.1","maintainers":[{"name":"setter_bd","email":"setter@babydoge.com"},{"name":"harryjohnsondev","email":"admin@babydoge.com"}],"homepage":"https://gitlab.com/paws1632146/game-sdk#readme","bugs":{"url":"https://gitlab.com/paws1632146/game-sdk/issues"},"dist":{"shasum":"20f56872fab03470efec2ed546166f37ec939cca","tarball":"https://registry.npmjs.org/@1paws1/game-sdk/-/game-sdk-0.1.1.tgz","fileCount":18,"integrity":"sha512-4Y6f0dr8ONZS5QrKfhTaKSxWHJB9IBde5GnKqq4Wn5zAHVWK44rtWSlmaoe3TilbDn/R5WtiQ6wEJfch8NaWuw==","signatures":[{"sig":"MEUCIFmfKr+u0myMIG6YcrLnY7g0NspYhZDKEK1cIQZRMsDbAiEAvL+vVnS2PUguMVdYaAhpnPT/m4ieRikHfiVLhIIKX70=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28539},"main":"./dist/index.cjs","type":"module","zshy":{"exports":{".":"./src/index.ts"}},"types":"./dist/index.d.cts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.cts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b7c0a7de3a38cb06caf688a012382f762d1d18ae","scripts":{"build":"zshy","prepublishOnly":"npm run build","publish:manual":"source env.sh && npm publish --access public"},"_npmUser":{"name":"setter_bd","email":"setter@babydoge.com"},"repository":{"url":"git+https://gitlab.com/paws1632146/game-sdk.git","type":"git"},"_npmVersion":"11.6.2","description":"Game SDK for Mission Pawsible","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@tma.js/bridge":"^2.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zshy":"^0.4.4","typescript":"^5","@types/node":"^20"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/game-sdk_0.1.1_1763377584103_0.5014759823550905","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@1paws1/game-sdk","version":"0.1.2","author":{"name":"Mission Pawsible"},"license":"MIT","_id":"@1paws1/game-sdk@0.1.2","maintainers":[{"name":"setter_bd","email":"setter@babydoge.com"},{"name":"harryjohnsondev","email":"admin@babydoge.com"}],"homepage":"https://gitlab.com/paws1632146/game-sdk#readme","bugs":{"url":"https://gitlab.com/paws1632146/game-sdk/issues"},"dist":{"shasum":"23c0a666717c28ff0e5094bf4333900daf5c7227","tarball":"https://registry.npmjs.org/@1paws1/game-sdk/-/game-sdk-0.1.2.tgz","fileCount":18,"integrity":"sha512-0A35BXbHpxZ5EMU9VuwB92a0sylLEQqhylQW/l4lk0ikpHYQAHs+7L6Z0cMQ8sm1JewmY2zAM/bBUPWRGvrQzQ==","signatures":[{"sig":"MEUCIHYQf8+ujSBtjb2n1x9vMMB1tOkCx9mPSnkBPy4nWEqGAiEA45Ge3Cy4igQlwNOBB7rwsM48Iih9myjKlpyHKQrxl+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28143},"main":"./dist/index.cjs","type":"module","zshy":{"exports":{".":"./src/index.ts"}},"types":"./dist/index.d.cts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.cts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"fdb137976ab2d94b5a9c8784392806ffa24bc776","scripts":{"build":"zshy","prepublishOnly":"npm run build","publish:manual":"source env.sh && npm publish --dry-run --access public"},"_npmUser":{"name":"setter_bd","email":"setter@babydoge.com"},"repository":{"url":"git+https://gitlab.com/paws1632146/game-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"Game SDK for Mission Pawsible","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@tma.js/bridge":"^2.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zshy":"^0.4.4","typescript":"^5","@types/node":"^20"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/game-sdk_0.1.2_1763378983675_0.2209026179777298","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@1paws1/game-sdk","version":"0.1.3","author":{"name":"Mission Pawsible"},"license":"UNLICENSED","_id":"@1paws1/game-sdk@0.1.3","maintainers":[{"name":"setter_bd","email":"setter@babydoge.com"},{"name":"harryjohnsondev","email":"admin@babydoge.com"}],"dist":{"shasum":"acb4ec9e53bf5d68f7f6f0dc5807831598604feb","tarball":"https://registry.npmjs.org/@1paws1/game-sdk/-/game-sdk-0.1.3.tgz","fileCount":18,"integrity":"sha512-ipSaDbpR4olJynqwV71AmT13g+ZqbbgQseWGsMgKKFPf1eCmnFG/vtH6sxehPq83IATvgbRTjY5Llqcsj9vqhg==","signatures":[{"sig":"MEQCIAM0ZEqJEWfQ4r/jCJ98SNbxNjaXNFlA21AdrfxxSYBtAiA2SJNmTzKYBjLYi548+L8OKN3XTEuAGH78/9KIKGD7ww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27975},"main":"./dist/index.cjs","type":"module","zshy":{"exports":{".":"./src/index.ts"}},"types":"./dist/index.d.cts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.cts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8d55dcc54a95779df6ca089e25cc4289d1db0315","scripts":{"build":"zshy","prepublishOnly":"npm run build"},"_npmUser":{"name":"setter_bd","email":"setter@babydoge.com"},"_npmVersion":"10.8.2","description":"Game SDK for Mission Pawsible","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@tma.js/bridge":"^2.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zshy":"^0.4.4","typescript":"^5","@types/node":"^20"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/game-sdk_0.1.3_1763379498959_0.669635522684703","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@1paws1/game-sdk","version":"0.1.4","author":{"name":"Mission Pawsible"},"license":"UNLICENSED","_id":"@1paws1/game-sdk@0.1.4","maintainers":[{"name":"setter_bd","email":"setter@babydoge.com"},{"name":"harryjohnsondev","email":"admin@babydoge.com"}],"dist":{"shasum":"666df42d2abfa5ce656f7cf9d7a1d99a3b66d3e1","tarball":"https://registry.npmjs.org/@1paws1/game-sdk/-/game-sdk-0.1.4.tgz","fileCount":18,"integrity":"sha512-TPtQjlMgNfKmZSEoYM+M43NWsdBqJrll3sXARecEmt+GDA3rXYpNlwD/lGnerg0oQ6L4Wxf/Tu0ZECFysfYytw==","signatures":[{"sig":"MEUCIAykWBlMbzVdTos0qAn7skr8ujhS97aMNCkH8cet4JX2AiEA8gocQM66covd5noD/aDXz5+J1H2ApsDiqZQJYWRGJHQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27975},"main":"./dist/index.cjs","type":"module","zshy":{"exports":{".":"./src/index.ts"}},"types":"./dist/index.d.cts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.cts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"3f04970fd1d5e86b2f62ec3b0e8b5c42ece85a00","scripts":{"build":"zshy","prepublishOnly":"npm run build"},"_npmUser":{"name":"setter_bd","email":"setter@babydoge.com"},"_npmVersion":"10.7.0","description":"Game SDK for Mission Pawsible","directories":{},"_nodeVersion":"18.20.4","dependencies":{"@tma.js/bridge":"^2.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zshy":"^0.4.4","typescript":"^5","@types/node":"^20"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/game-sdk_0.1.4_1763384727380_0.2960813292777673","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@1paws1/game-sdk","version":"0.1.5","author":{"name":"Mission Pawsible"},"license":"UNLICENSED","_id":"@1paws1/game-sdk@0.1.5","maintainers":[{"name":"setter_bd","email":"setter@babydoge.com"},{"name":"harryjohnsondev","email":"admin@babydoge.com"}],"dist":{"shasum":"eaf9538fac657495fae09529b3e7e12e525b9543","tarball":"https://registry.npmjs.org/@1paws1/game-sdk/-/game-sdk-0.1.5.tgz","fileCount":18,"integrity":"sha512-q08MqrEUlmuxrJMZkDUZhONSSlwqIsgdnmsGS3JyQHsxj1cWYh1XKLSeiHCkyWqhaLg+WswhLsPY35oFbr6Z7A==","signatures":[{"sig":"MEUCIQDF7/ekpy2DirQ4ajMCycXFoKJV9w5aaR9pCr46Mnn+sAIgJA6dJuRGeQvqvWcGhELSGWc8Pw5xWwsFX3etdTdcGHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27981},"main":"./dist/index.cjs","type":"module","zshy":{"exports":{".":"./src/index.ts"}},"types":"./dist/index.d.cts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.cts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9ff6a5c6f2a20b3c82055a9b12ac134efa4ee355","scripts":{"build":"zshy","prepublishOnly":"npm run build"},"_npmUser":{"name":"setter_bd","email":"setter@babydoge.com"},"_npmVersion":"10.7.0","description":"Game SDK for Mission Pawsible","directories":{},"_nodeVersion":"18.20.4","dependencies":{"@tma.js/bridge":"^2.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zshy":"^0.4.4","typescript":"^5","@types/node":"^20"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/game-sdk_0.1.5_1763385220575_0.14715497760806562","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-17T11:06:23.968Z","modified":"2025-12-31T10:21:26.032Z","0.1.1":"2025-11-17T11:06:24.287Z","0.1.2":"2025-11-17T11:29:43.858Z","0.1.3":"2025-11-17T11:38:19.168Z","0.1.4":"2025-11-17T13:05:27.565Z","0.1.5":"2025-11-17T13:13:40.744Z"},"author":{"name":"Mission Pawsible"},"license":"UNLICENSED","description":"Game SDK for Mission Pawsible","maintainers":[{"email":"admin@babydoge.com","name":"harryjohnsondev"}],"readme":"# Mission Pawsible Game SDK\n\n## Введение\n\nMission Pawsible Game SDK - это библиотека для интеграции игр в Telegram Mini App с поддержкой встраивания через iframe.\n\n## Установка\n\n### Установка пакета\n\nПосле настройки registry установите пакет:\n\n```bash\nnpm install @1paws1/game-sdk\n```\n\n## Импорт\n\n```typescript\nimport { MissionPawsibleSDK } from \"@1paws1/game-sdk\";\n```\n\n## Инициализация\n\n### Создание экземпляра SDK\n\n```typescript\nconst sdk = new MissionPawsibleSDK({\n  clientId: \"your-client-id\",\n  debug: false, // опционально\n  apiUrl: \"https://backend.missionpawsible.game\", // опционально\n});\n```\n\n### Параметры конструктора (Options)\n\n#### `clientId` (обязательный)\n\n- **Тип**: `string`\n- **Описание**: Уникальный идентификатор клиента, полученный при интеграции с Mission Pawsible платформой. Используется для аутентификации при запросах к API.\n\n#### `debug` (опциональный)\n\n- **Тип**: `boolean`\n- **По умолчанию**: `false`\n- **Описание**: Включает режим отладки. При `true` в консоль будут выводиться логи работы SDK для диагностики проблем.\n\n#### `apiUrl` (опциональный)\n\n- **Тип**: `string`\n- **По умолчанию**: `\"https://backend.missionpawsible.game\"`\n- **Описание**: URL адрес API бекенда Mission Pawsible. Используется для получения подмененного initData при работе в интегрированном режиме.\n\n## Методы SDK\n\n### `init()`\n\nИнициализирует SDK и настраивает интеграцию с Telegram WebView.\n\n**⚠️ ВАЖНО**: Метод `init()` **должен вызываться до** вызова `Telegram.WebApp.ready()` или любых других методов Telegram SDK.\n\n**Пример использования:**\n\n```typescript\nconst sdk = new MissionPawsibleSDK({\n  clientId: \"your-client-id\",\n  debug: true,\n});\n\n// Вызывайте init() ПЕРЕД Telegram.WebApp.ready()\nsdk.init();\n\n// Теперь можно безопасно использовать Telegram SDK\nTelegram.WebApp.ready();\n```\n\n**Возвращаемое значение:** `void`\n\n**Свойства после инициализации:**\n\n- `sdk.isInitialized` - `true`, если SDK успешно инициализирован\n- `sdk.isIntegrated` - `true`, если игра запущена в интегрированном режиме (через Mission Pawsible платформу)\n\n### `authorize<T>(callback: AuthorizeCallback<T>): Promise<T>`\n\nИспользуется для получения и подмены `initData` перед отправкой на ваш бекенд.\n\n**⚠️ ВАЖНО**: Метод `authorize()` используется для **подмены initData**. В интегрированном режиме SDK автоматически получает новый `initData` с сервера Mission Pawsible, который должен использоваться вместо оригинального.\n\n**Пример использования:**\n\n```typescript\nconst authData = await sdk.authorize(async ({ isIntegrated, initData }) => {\n  // Отправка initData на ваш бекенд\n  const response = await fetch(\"https://your-backend.com/auth\", {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify({\n      initData: initData,\n      isIntegrated: isIntegrated,\n    }),\n  });\n\n  return await response.json();\n});\n```\n\n**Параметры:**\n\n- `callback` - Асинхронная функция, которая получает объект с параметрами:\n  - `isIntegrated: boolean` - флаг, указывающий работает ли игра в интегрированном режиме\n  - `initData: string` - строка initData для отправки на бекенд (уже подмененная, если `isIntegrated = true`)\n\n**Что делает метод:**\n\n1. Если `isIntegrated = false`:\n\n   - Использует оригинальный `initData` из `window.Telegram.WebApp.initData`\n   - Вызывает callback с оригинальными данными\n\n2. Если `isIntegrated = true`:\n   - Проверяет, что SDK инициализирован (выбросит ошибку, если `init()` не был вызван)\n   - Отправляет запрос на `${apiUrl}/integration/auth` с `clientId` и оригинальным `initData`\n   - Получает новый подмененный `initData` с сервера\n   - Вызывает callback с подмененным `initData`\n\n**Возвращаемое значение:** `Promise<T>` - результат выполнения callback функции\n\n**Ошибки:**\n\n- `Error: \"SDK not initialized\"` - если метод вызван до `init()` в интегрированном режиме\n\n### `getOptions(): Options`\n\nВозвращает текущие опции SDK.\n\n**Пример использования:**\n\n```typescript\nconst options = sdk.getOptions();\nconsole.log(options.clientId); // 'your-client-id'\nconsole.log(options.debug); // false\nconsole.log(options.apiUrl); // 'https://backend.missionpawsible.game'\n```\n\n**Возвращаемое значение:** Объект `Options` с текущими настройками SDK\n\n## Работа с бекендом\n\n### ⚠️ КРИТИЧЕСКИ ВАЖНО: Валидация initData на бекенде\n\nПри отправке `initData` на ваш бекенд, **обязательно проверяйте** значение `isIntegrated`:\n\n#### Если `isIntegrated = false`:\n\n- Валидируйте `initData` используя **Bot Father token** (стандартная валидация Telegram)\n\n#### Если `isIntegrated = true`:\n\n- **НЕ используйте** Bot Father token для валидации\n- Используйте **secret значение**, которое вы получили при интеграции вместе с `clientId`\n- Этот secret используется для валидации подмененного `initData`, полученного от Mission Pawsible API\n\n**Пример валидации на бекенде:**\n\n```typescript\n// Псевдокод для примера\nasync function validateInitData(initData: string, isIntegrated: boolean) {\n  if (isIntegrated) {\n    // Используйте secret, полученный при интеграции\n    const secret = getIntegrationSecret(clientId);\n    return validateWithSecret(initData, secret);\n  } else {\n    // Используйте Bot Father token\n    const botToken = process.env.BOT_TOKEN;\n    return validateWithBotToken(initData, botToken);\n  }\n}\n```\n\n## Полный пример использования\n\n```typescript\nimport { MissionPawsibleSDK } from \"@1paws1/game-sdk\";\n\n// 1. Создание экземпляра SDK\nconst sdk = new MissionPawsibleSDK({\n  clientId: \"your-client-id\",\n  debug: process.env.NODE_ENV === \"development\",\n});\n\n// 2. Инициализация ПЕРЕД Telegram.WebApp.ready()\nsdk.init();\n\n// 3. Теперь можно использовать Telegram SDK\nTelegram.WebApp.ready();\n\n// 4. Использование authorize для получения подмененного initData\nasync function authenticate() {\n  try {\n    const userData = await sdk.authorize(async ({ isIntegrated, initData }) => {\n      // Отправка на ваш бекенд\n      const response = await fetch(\"https://your-backend.com/auth\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          initData,\n          isIntegrated,\n        }),\n      });\n\n      if (!response.ok) {\n        throw new Error(\"Authentication failed\");\n      }\n\n      return await response.json();\n    });\n\n    console.log(\"User authenticated:\", userData);\n    return userData;\n  } catch (error) {\n    console.error(\"Authentication error:\", error);\n    throw error;\n  }\n}\n\n// 5. Вызов аутентификации\nauthenticate();\n```\n\n## Отладка\n\nДля включения режима отладки установите `debug: true` при создании экземпляра SDK:\n\n```typescript\nconst sdk = new MissionPawsibleSDK({\n  clientId: \"your-client-id\",\n  debug: true,\n});\n```\n\nВ консоли браузера вы увидите подробные логи:\n\n- Инициализация SDK\n- Проверка режима интеграции\n- Запросы к API для получения подмененного initData\n- Обработка событий от родительского окна\n\n## Типы\n\n```typescript\ntype Options = {\n  clientId: string;\n  debug?: boolean;\n  apiUrl?: string;\n};\n\ntype AuthorizeCallbackParams = {\n  isIntegrated: boolean;\n  initData: string;\n};\n\ntype AuthorizeCallback<T> = (params: AuthorizeCallbackParams) => Promise<T>;\n```\n\n## Поддержка\n\nПри возникновении проблем проверьте:\n\n1. ✅ `init()` вызван до `Telegram.WebApp.ready()`\n2. ✅ `clientId` указан корректно\n3. ✅ В интегрированном режиме используется правильный `secret` для валидации на бекенде\n4. ✅ Включен режим отладки для диагностики (`debug: true`)\n","readmeFilename":"README.md"}