@onairos/react-native 3.6.7 → 3.6.9
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/README.md +423 -423
- package/lib/commonjs/api/index.js +1 -1
- package/lib/commonjs/assets/images/Checkbox.svg +3 -3
- package/lib/commonjs/assets/images/EnochE.svg +19 -19
- package/lib/commonjs/assets/images/Personalityprofile.svg +3 -3
- package/lib/commonjs/assets/images/Personalitytraits.svg +3 -3
- package/lib/commonjs/assets/images/Userpreferences.svg +3 -3
- package/lib/commonjs/assets/images/arrow.svg +20 -20
- package/lib/commonjs/assets/images/basicproficon.svg +43 -43
- package/lib/commonjs/assets/images/basicprofile.svg +3 -3
- package/lib/commonjs/assets/images/checkmark.svg +4 -4
- package/lib/commonjs/assets/images/contentanalysis.svg +3 -3
- package/lib/commonjs/assets/images/contenticon.svg +23 -23
- package/lib/commonjs/assets/images/personalityicon.svg +18 -18
- package/lib/commonjs/assets/images/x-close.svg +3 -3
- package/lib/commonjs/components/BodyText.js +1 -1
- package/lib/commonjs/components/BrandMark.js +1 -1
- package/lib/commonjs/components/CodeInput.js +1 -1
- package/lib/commonjs/components/EmailInput.js +1 -1
- package/lib/commonjs/components/GoogleButton.js +1 -1
- package/lib/commonjs/components/HeadingGroup.js +1 -1
- package/lib/commonjs/components/LLMDataInputModal.js +1 -1
- package/lib/commonjs/components/ModalHeader.js +1 -1
- package/lib/commonjs/components/ModalSheet.js +1 -1
- package/lib/commonjs/components/Onairos.js +1 -1
- package/lib/commonjs/components/OnairosButton.js +1 -1
- package/lib/commonjs/components/OnairosSignInButton.js +1 -1
- package/lib/commonjs/components/Overlay.js +1 -1
- package/lib/commonjs/components/PersonaImage.js +1 -1
- package/lib/commonjs/components/PersonaLoadingScreen.js +1 -1
- package/lib/commonjs/components/PersonalizationConsentScreen.js +1 -1
- package/lib/commonjs/components/PinCreationScreen.js +1 -1
- package/lib/commonjs/components/PinInput.js +1 -1
- package/lib/commonjs/components/PlatformConnectorsStep.js +1 -1
- package/lib/commonjs/components/PlatformList.js +1 -1
- package/lib/commonjs/components/PlatformToggle.js +1 -1
- package/lib/commonjs/components/PrimaryButton.js +1 -1
- package/lib/commonjs/components/SignInMatchAnimation.js +1 -1
- package/lib/commonjs/components/SignInStep.js +1 -1
- package/lib/commonjs/components/UniversalOnboarding.js +1 -1
- package/lib/commonjs/components/VerificationStep.js +1 -1
- package/lib/commonjs/components/WelcomeScreen.js +1 -1
- package/lib/commonjs/components/icons/Basicproficon.js +1 -1
- package/lib/commonjs/components/icons/Basicprofile.js +1 -1
- package/lib/commonjs/components/icons/Checkbox.js +1 -1
- package/lib/commonjs/components/icons/Checkmark.js +1 -1
- package/lib/commonjs/components/icons/Contentanalysis.js +1 -1
- package/lib/commonjs/components/icons/Contenticon.js +1 -1
- package/lib/commonjs/components/icons/EnochE.js +1 -1
- package/lib/commonjs/components/icons/Personalityicon.js +1 -1
- package/lib/commonjs/components/icons/Personalityprofile.js +1 -1
- package/lib/commonjs/components/icons/Personalitytraits.js +1 -1
- package/lib/commonjs/components/icons/Userpreferences.js +1 -1
- package/lib/commonjs/components/icons/index.js +1 -1
- package/lib/commonjs/components/onboarding/OAuthWebView.js +1 -1
- package/lib/commonjs/components/onboarding/OnboardingHeader.js +1 -1
- package/lib/commonjs/components/onboarding/PinInput.js +1 -1
- package/lib/commonjs/components/onboarding/PlatformConnector.js +1 -1
- package/lib/commonjs/config/PLATFORM_APIS.md +559 -0
- package/lib/commonjs/config/api.js +1 -1
- package/lib/commonjs/config/telegramConfig.js +8 -0
- package/lib/commonjs/config/webchangelog/md +607 -0
- package/lib/commonjs/constants/index.js +1 -1
- package/lib/commonjs/context/AuthContext.js +1 -1
- package/lib/commonjs/hooks/useConnectedAccounts.js +1 -1
- package/lib/commonjs/hooks/useConnections.js +1 -1
- package/lib/commonjs/hooks/useCredentials.js +1 -1
- package/lib/commonjs/hooks/useUserConnections.js +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/services/SDK_API_KEY_VALIDATION.md +421 -421
- package/lib/commonjs/services/apiClient.js +1 -1
- package/lib/commonjs/services/apiKeyService.js +99 -99
- package/lib/commonjs/services/authService.js +72 -72
- package/lib/commonjs/services/biometricPinService.js +1 -1
- package/lib/commonjs/services/chatGPTConversationExtractor.js +1 -1
- package/lib/commonjs/services/chatGPTConversationService.js +1 -1
- package/lib/commonjs/services/claudeConversationExtractor.js +1 -1
- package/lib/commonjs/services/claudeConversationService.js +1 -1
- package/lib/commonjs/services/connectedAccountsService.js +1 -1
- package/lib/commonjs/services/googleAuthService.js +1 -1
- package/lib/commonjs/services/hingeDataExtractor.js +1 -1
- package/lib/commonjs/services/hingeDataService.js +1 -1
- package/lib/commonjs/services/imageCompressionService.js +1 -1
- package/lib/commonjs/services/instagramDataExtractor.js +1 -1
- package/lib/commonjs/services/instagramDataService.js +1 -1
- package/lib/commonjs/services/jwtStorageService.js +1 -1
- package/lib/commonjs/services/linkedinDOMExtractor.js +1 -1
- package/lib/commonjs/services/linkedinProfileService.js +1 -1
- package/lib/commonjs/services/linkedinScrapingService.js +1 -1
- package/lib/commonjs/services/llmDataStorage.js +1 -1
- package/lib/commonjs/services/mobileTrainingService.js +1 -1
- package/lib/commonjs/services/oauthService.js +20 -20
- package/lib/commonjs/services/pinEncryptionService.js +1 -1
- package/lib/commonjs/services/pinStorageUtils.js +1 -1
- package/lib/commonjs/services/platformAuthService.js +1 -1
- package/lib/commonjs/services/sephoraDataExtractor.js +1 -1
- package/lib/commonjs/services/sephoraDataService.js +1 -1
- package/lib/commonjs/services/storageService.js +1 -1
- package/lib/commonjs/services/telegramDataExtractor.js +1 -1
- package/lib/commonjs/services/telegramDataService.js +1 -1
- package/lib/commonjs/services/trainingApiHelpers.js +1 -1
- package/lib/commonjs/services/userConnectionsService.js +1 -1
- package/lib/commonjs/services/youtubeMigrationService.js +1 -1
- package/lib/commonjs/theme/index.js +1 -1
- package/lib/commonjs/types/index.js +1 -1
- package/lib/commonjs/types.js +1 -1
- package/lib/commonjs/utils/Portal.js +1 -1
- package/lib/commonjs/utils/api.js +1 -1
- package/lib/commonjs/utils/assetRegistry.js +1 -1
- package/lib/commonjs/utils/auth.js +1 -1
- package/lib/commonjs/utils/connectorTests.js +1 -1
- package/lib/commonjs/utils/crypto.js +1 -1
- package/lib/commonjs/utils/debugHelper.js +1 -1
- package/lib/commonjs/utils/encryption.js +1 -1
- package/lib/commonjs/utils/eventUtils.js +1 -1
- package/lib/commonjs/utils/haptics.js +1 -1
- package/lib/commonjs/utils/imagePreloader.js +1 -1
- package/lib/commonjs/utils/networkDiagnostics.js +1 -1
- package/lib/commonjs/utils/onairosApi.js +1 -1
- package/lib/commonjs/utils/programmaticFlow.js +1 -1
- package/lib/commonjs/utils/retryHelper.js +1 -1
- package/lib/commonjs/utils/secureStorage.js +1 -1
- package/lib/commonjs/utils/webviewScripts/chatgpt.js +1 -1
- package/lib/commonjs/utils/webviewScripts/claude.js +1 -1
- package/lib/commonjs/utils/webviewScripts/hinge.js +1 -1
- package/lib/commonjs/utils/webviewScripts/index.js +1 -1
- package/lib/commonjs/utils/webviewScripts/instagram.js +1 -1
- package/lib/commonjs/utils/webviewScripts/linkedin.js +1 -1
- package/lib/commonjs/utils/webviewScripts/sephora.js +1 -1
- package/lib/commonjs/utils/webviewScripts/telegram.js +1 -1
- package/lib/module/api/index.js +1 -1
- package/lib/module/assets/images/Checkbox.svg +3 -3
- package/lib/module/assets/images/EnochE.svg +19 -19
- package/lib/module/assets/images/Personalityprofile.svg +3 -3
- package/lib/module/assets/images/Personalitytraits.svg +3 -3
- package/lib/module/assets/images/Userpreferences.svg +3 -3
- package/lib/module/assets/images/arrow.svg +20 -20
- package/lib/module/assets/images/basicproficon.svg +43 -43
- package/lib/module/assets/images/basicprofile.svg +3 -3
- package/lib/module/assets/images/checkmark.svg +4 -4
- package/lib/module/assets/images/contentanalysis.svg +3 -3
- package/lib/module/assets/images/contenticon.svg +23 -23
- package/lib/module/assets/images/personalityicon.svg +18 -18
- package/lib/module/assets/images/x-close.svg +3 -3
- package/lib/module/components/BodyText.js +1 -1
- package/lib/module/components/BrandMark.js +1 -1
- package/lib/module/components/CodeInput.js +1 -1
- package/lib/module/components/EmailInput.js +1 -1
- package/lib/module/components/GoogleButton.js +1 -1
- package/lib/module/components/HeadingGroup.js +1 -1
- package/lib/module/components/LLMDataInputModal.js +1 -1
- package/lib/module/components/ModalHeader.js +1 -1
- package/lib/module/components/ModalSheet.js +1 -1
- package/lib/module/components/Onairos.js +1 -1
- package/lib/module/components/OnairosButton.js +1 -1
- package/lib/module/components/OnairosSignInButton.js +1 -1
- package/lib/module/components/Overlay.js +1 -1
- package/lib/module/components/PersonaImage.js +1 -1
- package/lib/module/components/PersonaLoadingScreen.js +1 -1
- package/lib/module/components/PersonalizationConsentScreen.js +1 -1
- package/lib/module/components/PinCreationScreen.js +1 -1
- package/lib/module/components/PinInput.js +1 -1
- package/lib/module/components/PlatformConnectorsStep.js +1 -1
- package/lib/module/components/PlatformList.js +1 -1
- package/lib/module/components/PlatformToggle.js +1 -1
- package/lib/module/components/PrimaryButton.js +1 -1
- package/lib/module/components/SignInMatchAnimation.js +1 -1
- package/lib/module/components/SignInStep.js +1 -1
- package/lib/module/components/UniversalOnboarding.js +1 -1
- package/lib/module/components/VerificationStep.js +1 -1
- package/lib/module/components/WelcomeScreen.js +1 -1
- package/lib/module/components/icons/Basicproficon.js +1 -1
- package/lib/module/components/icons/Basicprofile.js +1 -1
- package/lib/module/components/icons/Checkbox.js +1 -1
- package/lib/module/components/icons/Checkmark.js +1 -1
- package/lib/module/components/icons/Contentanalysis.js +1 -1
- package/lib/module/components/icons/Contenticon.js +1 -1
- package/lib/module/components/icons/EnochE.js +1 -1
- package/lib/module/components/icons/Personalityicon.js +1 -1
- package/lib/module/components/icons/Personalityprofile.js +1 -1
- package/lib/module/components/icons/Personalitytraits.js +1 -1
- package/lib/module/components/icons/Userpreferences.js +1 -1
- package/lib/module/components/onboarding/OAuthWebView.js +1 -1
- package/lib/module/components/onboarding/OnboardingHeader.js +1 -1
- package/lib/module/components/onboarding/PinInput.js +1 -1
- package/lib/module/components/onboarding/PlatformConnector.js +1 -1
- package/lib/module/config/PLATFORM_APIS.md +559 -0
- package/lib/module/config/api.js +1 -1
- package/lib/module/config/telegramConfig.js +8 -0
- package/lib/module/config/webchangelog/md +607 -0
- package/lib/module/constants/index.js +1 -1
- package/lib/module/context/AuthContext.js +1 -1
- package/lib/module/hooks/useConnectedAccounts.js +1 -1
- package/lib/module/hooks/useConnections.js +1 -1
- package/lib/module/hooks/useCredentials.js +1 -1
- package/lib/module/hooks/useUserConnections.js +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/services/SDK_API_KEY_VALIDATION.md +421 -421
- package/lib/module/services/apiClient.js +1 -1
- package/lib/module/services/apiKeyService.js +99 -99
- package/lib/module/services/authService.js +72 -72
- package/lib/module/services/biometricPinService.js +1 -1
- package/lib/module/services/chatGPTConversationExtractor.js +1 -1
- package/lib/module/services/chatGPTConversationService.js +1 -1
- package/lib/module/services/claudeConversationExtractor.js +1 -1
- package/lib/module/services/claudeConversationService.js +1 -1
- package/lib/module/services/connectedAccountsService.js +1 -1
- package/lib/module/services/googleAuthService.js +1 -1
- package/lib/module/services/hingeDataExtractor.js +1 -1
- package/lib/module/services/hingeDataService.js +1 -1
- package/lib/module/services/imageCompressionService.js +1 -1
- package/lib/module/services/instagramDataExtractor.js +1 -1
- package/lib/module/services/instagramDataService.js +1 -1
- package/lib/module/services/jwtStorageService.js +1 -1
- package/lib/module/services/linkedinDOMExtractor.js +1 -1
- package/lib/module/services/linkedinProfileService.js +1 -1
- package/lib/module/services/linkedinScrapingService.js +1 -1
- package/lib/module/services/llmDataStorage.js +1 -1
- package/lib/module/services/mobileTrainingService.js +1 -1
- package/lib/module/services/oauthService.js +20 -20
- package/lib/module/services/pinEncryptionService.js +1 -1
- package/lib/module/services/pinStorageUtils.js +1 -1
- package/lib/module/services/platformAuthService.js +1 -1
- package/lib/module/services/sephoraDataExtractor.js +1 -1
- package/lib/module/services/sephoraDataService.js +1 -1
- package/lib/module/services/storageService.js +1 -1
- package/lib/module/services/telegramDataExtractor.js +1 -1
- package/lib/module/services/telegramDataService.js +1 -1
- package/lib/module/services/trainingApiHelpers.js +1 -1
- package/lib/module/services/userConnectionsService.js +1 -1
- package/lib/module/services/youtubeMigrationService.js +1 -1
- package/lib/module/theme/index.js +1 -1
- package/lib/module/types.js +1 -1
- package/lib/module/utils/Portal.js +1 -1
- package/lib/module/utils/api.js +1 -1
- package/lib/module/utils/assetRegistry.js +1 -1
- package/lib/module/utils/auth.js +1 -1
- package/lib/module/utils/connectorTests.js +1 -1
- package/lib/module/utils/crypto.js +1 -1
- package/lib/module/utils/debugHelper.js +1 -1
- package/lib/module/utils/encryption.js +1 -1
- package/lib/module/utils/eventUtils.js +1 -1
- package/lib/module/utils/haptics.js +1 -1
- package/lib/module/utils/networkDiagnostics.js +1 -1
- package/lib/module/utils/onairosApi.js +1 -1
- package/lib/module/utils/programmaticFlow.js +1 -1
- package/lib/module/utils/retryHelper.js +1 -1
- package/lib/module/utils/secureStorage.js +1 -1
- package/lib/module/utils/webviewScripts/chatgpt.js +1 -1
- package/lib/module/utils/webviewScripts/claude.js +1 -1
- package/lib/module/utils/webviewScripts/hinge.js +1 -1
- package/lib/module/utils/webviewScripts/index.js +1 -1
- package/lib/module/utils/webviewScripts/instagram.js +1 -1
- package/lib/module/utils/webviewScripts/linkedin.js +1 -1
- package/lib/module/utils/webviewScripts/sephora.js +1 -1
- package/lib/module/utils/webviewScripts/telegram.js +1 -1
- package/package.json +172 -172
|
@@ -0,0 +1,559 @@
|
|
|
1
|
+
# Platform Connector APIs Reference
|
|
2
|
+
|
|
3
|
+
Quick reference for all platform data sources, APIs, authentication, and token management.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Sephora
|
|
8
|
+
|
|
9
|
+
**Platform ID:** `mobile-sephora`
|
|
10
|
+
**Data Type:** E-commerce / Beauty
|
|
11
|
+
|
|
12
|
+
### Authentication
|
|
13
|
+
|
|
14
|
+
| Key | Storage | Format |
|
|
15
|
+
|-----|---------|--------|
|
|
16
|
+
| `seph-access-token` | localStorage | JSON: `{ data: "JWT...", expiry: "timestamp" }` |
|
|
17
|
+
| `x-api-key` | Header | `nQc7BFt78yJBvfYDKtle9APd5RrX984i` |
|
|
18
|
+
|
|
19
|
+
**Token Expiry:** ~150 days (expiry is Unix timestamp in seconds)
|
|
20
|
+
|
|
21
|
+
### APIs
|
|
22
|
+
|
|
23
|
+
| API | Endpoint | Method | Data Retrieved |
|
|
24
|
+
|-----|----------|--------|----------------|
|
|
25
|
+
| **Profile** | `/gapi/users/profiles/{profileId}/current/full` | GET | Name, email, VIB status, Beauty Insider points, skin/hair/makeup preferences, preferred store |
|
|
26
|
+
| **Basket** | `/api/shopping-cart/basket` | GET | Cart items, subtotal, BI points, shipping info |
|
|
27
|
+
| **Loves** | `/gway/v1/dotcom/users/profiles/{profileId}/lists/skus/all` | GET | Wishlist products with ratings, categories, prices, images |
|
|
28
|
+
| **Purchases** | `/api/bi/profiles/{profileId}/purchases` | GET | Purchase history with products, dates, order IDs |
|
|
29
|
+
|
|
30
|
+
### Profile API Params
|
|
31
|
+
```
|
|
32
|
+
?skipApis=targetersResult
|
|
33
|
+
&includeApis=profile,basket,loves,shoppingList,segments
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Loves API Params
|
|
37
|
+
```
|
|
38
|
+
?itemsPerPage=100
|
|
39
|
+
¤tPage=1
|
|
40
|
+
&listShortNameLength=20
|
|
41
|
+
&skipProductDetails=false
|
|
42
|
+
&includeInactiveSkus=true
|
|
43
|
+
&fetchAllLovesList=true
|
|
44
|
+
&sortBy=recently
|
|
45
|
+
&includeCategories=true
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Purchases API Params
|
|
49
|
+
```
|
|
50
|
+
?sortBy=recently
|
|
51
|
+
&itemsPerPage=100
|
|
52
|
+
&groupBy=none
|
|
53
|
+
&excludeSamples=true
|
|
54
|
+
&excludeRewards=true
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Data Extracted
|
|
58
|
+
|
|
59
|
+
**Profile:**
|
|
60
|
+
- `profileId`, `firstName`, `lastName`, `email`
|
|
61
|
+
- `vibStatus` (BI, VIB, Rouge)
|
|
62
|
+
- Beauty Insider: points, segment, spending, birthday gift eligibility
|
|
63
|
+
- Preferences: skin concerns, hair concerns, makeup preferences
|
|
64
|
+
- Preferred store info
|
|
65
|
+
|
|
66
|
+
**Basket:**
|
|
67
|
+
- Items with SKU ID, product ID, name, brand, price, quantity, size, image
|
|
68
|
+
|
|
69
|
+
**Loves:**
|
|
70
|
+
- Products with ratings, reviews, categories, stock status, sale info
|
|
71
|
+
|
|
72
|
+
**Purchases:**
|
|
73
|
+
- Order history with product details, dates, quantities
|
|
74
|
+
|
|
75
|
+
### Token Extraction
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
function getSephoraToken() {
|
|
79
|
+
var tokenKeys = ['seph-access-token', 'sephoraAccessToken', 'accessToken'];
|
|
80
|
+
|
|
81
|
+
// Try localStorage
|
|
82
|
+
for (var i = 0; i < tokenKeys.length; i++) {
|
|
83
|
+
var token = localStorage.getItem(tokenKeys[i]);
|
|
84
|
+
if (token) {
|
|
85
|
+
try {
|
|
86
|
+
var parsed = JSON.parse(token);
|
|
87
|
+
if (parsed && parsed.data) return parsed.data;
|
|
88
|
+
} catch (e) {
|
|
89
|
+
return token; // Not JSON, use as-is
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Try cookies
|
|
95
|
+
var cookieMatch = document.cookie.match(/seph-access-token=([^;]+)/);
|
|
96
|
+
if (cookieMatch) return cookieMatch[1];
|
|
97
|
+
|
|
98
|
+
// Try window state
|
|
99
|
+
if (window.__PRELOADED_STATE__ && window.__PRELOADED_STATE__.user) {
|
|
100
|
+
return window.__PRELOADED_STATE__.user.accessToken;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Profile ID Extraction
|
|
108
|
+
|
|
109
|
+
The `profileId` is needed for most Sephora APIs. Extract from:
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
function getProfileId() {
|
|
113
|
+
// Method 1: From token (JWT payload)
|
|
114
|
+
var token = getSephoraToken();
|
|
115
|
+
if (token) {
|
|
116
|
+
try {
|
|
117
|
+
var payload = JSON.parse(atob(token.split('.')[1]));
|
|
118
|
+
if (payload.sub) return payload.sub;
|
|
119
|
+
} catch (e) {}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Method 2: From localStorage
|
|
123
|
+
var profileId = localStorage.getItem('biAccountId') ||
|
|
124
|
+
localStorage.getItem('profileId');
|
|
125
|
+
if (profileId) return profileId;
|
|
126
|
+
|
|
127
|
+
// Method 3: From window state
|
|
128
|
+
if (window.__PRELOADED_STATE__ && window.__PRELOADED_STATE__.user) {
|
|
129
|
+
return window.__PRELOADED_STATE__.user.profileId;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Method 4: From basket API (doesn't require profileId)
|
|
133
|
+
// Call /api/shopping-cart/basket first, extract profileId from response
|
|
134
|
+
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Token Expiry Check
|
|
140
|
+
|
|
141
|
+
```javascript
|
|
142
|
+
function isTokenExpired() {
|
|
143
|
+
var tokenData = localStorage.getItem('seph-access-token');
|
|
144
|
+
if (!tokenData) return true;
|
|
145
|
+
|
|
146
|
+
try {
|
|
147
|
+
var parsed = JSON.parse(tokenData);
|
|
148
|
+
var expiry = parseInt(parsed.expiry, 10);
|
|
149
|
+
var now = Math.floor(Date.now() / 1000);
|
|
150
|
+
return now >= expiry;
|
|
151
|
+
} catch (e) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Instagram
|
|
160
|
+
|
|
161
|
+
**Platform ID:** `mobile-instagram` (data connector) / `instagram` (OAuth)
|
|
162
|
+
**Data Type:** Social
|
|
163
|
+
|
|
164
|
+
### Authentication
|
|
165
|
+
|
|
166
|
+
| Key | Storage | Notes |
|
|
167
|
+
|-----|---------|-------|
|
|
168
|
+
| `csrftoken` | Cookie | CSRF token for POST requests |
|
|
169
|
+
| `sessionid` | Cookie | Session authentication |
|
|
170
|
+
| `X-IG-App-ID` | Header | `936619743392459` |
|
|
171
|
+
| `__bkv` | URL param | Bloks version: `cc4d2103131ee3bbc02c20a86f633b7fb7a031cbf515d12d81e0c8ae7af305dd` |
|
|
172
|
+
|
|
173
|
+
**Token Expiry:** Session-based (tied to browser session cookie)
|
|
174
|
+
|
|
175
|
+
### APIs
|
|
176
|
+
|
|
177
|
+
| API | Endpoint | Method | Data Retrieved |
|
|
178
|
+
|-----|----------|--------|----------------|
|
|
179
|
+
| **Liked Media (Bloks)** | `/async/wbloks/fetch/` | POST | Liked posts via Bloks framework |
|
|
180
|
+
| **Saved Posts** | `/api/v1/feed/saved/posts/` | GET | Saved posts with media, captions, owner info |
|
|
181
|
+
| **Timeline (GraphQL)** | `/graphql/query` | POST | Feed timeline with media, captions, engagement |
|
|
182
|
+
|
|
183
|
+
### Bloks API (Liked Media)
|
|
184
|
+
|
|
185
|
+
**Endpoint:**
|
|
186
|
+
```
|
|
187
|
+
POST https://www.instagram.com/async/wbloks/fetch/?appid=com.instagram.privacy.activity_center.liked_media_screen&type=app&__bkv={bloksVersionId}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Request Body:** `application/x-www-form-urlencoded`
|
|
191
|
+
```
|
|
192
|
+
params=%7B%7D
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Response Format:**
|
|
196
|
+
```javascript
|
|
197
|
+
for (;;);{"__ar":1,"rid":"...","payload":{"layout":{"bloks_payload":{"data":[
|
|
198
|
+
{"id":"440463611_0","type":"gs","data":{...}},
|
|
199
|
+
...
|
|
200
|
+
]}}}}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Note:** Response has `for (;;);` prefix (anti-JSON hijacking) that must be stripped before JSON.parse()
|
|
204
|
+
|
|
205
|
+
**Parsing the Bloks payload:**
|
|
206
|
+
```javascript
|
|
207
|
+
function parseLikedMedia(data) {
|
|
208
|
+
var likes = [];
|
|
209
|
+
if (data && data.payload && data.payload.layout && data.payload.layout.bloks_payload) {
|
|
210
|
+
var bloksData = data.payload.layout.bloks_payload.data || [];
|
|
211
|
+
bloksData.forEach(function(item, idx) {
|
|
212
|
+
// Bloks items have varying structures
|
|
213
|
+
if (item.type === 'media' || item.type === 'ig' || item.data) {
|
|
214
|
+
likes.push({
|
|
215
|
+
id: item.id || 'like_' + idx,
|
|
216
|
+
type: 'like',
|
|
217
|
+
rawData: item.data,
|
|
218
|
+
bloksType: item.type
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return likes;
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**⚠️ Bloks Caveat:** The Bloks payload structure is complex and may vary. The `data` array contains UI component definitions, not clean media objects. You may need to recursively parse to extract actual media IDs.
|
|
228
|
+
|
|
229
|
+
### Saved Posts API
|
|
230
|
+
|
|
231
|
+
**Endpoint:**
|
|
232
|
+
```
|
|
233
|
+
GET https://www.instagram.com/api/v1/feed/saved/posts/
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Response Format:**
|
|
237
|
+
```javascript
|
|
238
|
+
{
|
|
239
|
+
"items": [
|
|
240
|
+
{
|
|
241
|
+
"media": {
|
|
242
|
+
"id": "...",
|
|
243
|
+
"pk": "...",
|
|
244
|
+
"code": "...",
|
|
245
|
+
"media_type": 1,
|
|
246
|
+
"caption": { "text": "..." },
|
|
247
|
+
"user": { "pk": "...", "username": "..." },
|
|
248
|
+
"like_count": 123,
|
|
249
|
+
"comment_count": 45,
|
|
250
|
+
"taken_at": 1706123456,
|
|
251
|
+
"image_versions2": { "candidates": [{ "url": "..." }] }
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
],
|
|
255
|
+
"more_available": true,
|
|
256
|
+
"next_max_id": "..."
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### GraphQL API (Timeline)
|
|
261
|
+
|
|
262
|
+
**Endpoint:**
|
|
263
|
+
```
|
|
264
|
+
POST https://www.instagram.com/graphql/query
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**Request Body:** `application/x-www-form-urlencoded`
|
|
268
|
+
```
|
|
269
|
+
doc_id=8845758582119845&variables={"first":12,"after":null}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Response Format:**
|
|
273
|
+
```javascript
|
|
274
|
+
{
|
|
275
|
+
"data": {
|
|
276
|
+
"xdt_api__v1__feed__timeline__connection": {
|
|
277
|
+
"pagination_source": null,
|
|
278
|
+
"edges": [
|
|
279
|
+
{
|
|
280
|
+
"node": {
|
|
281
|
+
"media": {
|
|
282
|
+
"id": "3820598654428293407_10139962",
|
|
283
|
+
"pk": "3820598654428293407",
|
|
284
|
+
"code": "...",
|
|
285
|
+
"media_type": 1,
|
|
286
|
+
"caption": { "text": "..." },
|
|
287
|
+
"user": { "pk": "...", "username": "..." },
|
|
288
|
+
"like_count": 123,
|
|
289
|
+
"comment_count": 45,
|
|
290
|
+
"taken_at": 1706123456,
|
|
291
|
+
"image_versions2": { "candidates": [{ "url": "..." }] }
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Required Headers
|
|
302
|
+
|
|
303
|
+
```javascript
|
|
304
|
+
{
|
|
305
|
+
'Accept': '*/*',
|
|
306
|
+
'Accept-Language': 'en-US,en;q=0.9',
|
|
307
|
+
'X-CSRFToken': csrfToken,
|
|
308
|
+
'X-IG-App-ID': '936619743392459',
|
|
309
|
+
'X-Requested-With': 'XMLHttpRequest',
|
|
310
|
+
'X-ASBD-ID': '129477',
|
|
311
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Data Extracted
|
|
316
|
+
|
|
317
|
+
**Liked Media:**
|
|
318
|
+
- Post IDs
|
|
319
|
+
- Bloks payload data (varies by content type)
|
|
320
|
+
|
|
321
|
+
**Saved Posts:**
|
|
322
|
+
- `id`, `pk`, `code` (shortcode for URL)
|
|
323
|
+
- `mediaType` (1=image, 2=video, 8=carousel)
|
|
324
|
+
- `caption` text
|
|
325
|
+
- `owner` (user info: id, username, full name)
|
|
326
|
+
- `likeCount`, `commentCount`
|
|
327
|
+
- `takenAt` (Unix timestamp)
|
|
328
|
+
- `imageUrl` (best quality candidate)
|
|
329
|
+
|
|
330
|
+
**Timeline:**
|
|
331
|
+
- `id`, `pk`, `code` (shortcode for URL)
|
|
332
|
+
- `mediaType` (1=image, 2=video, 8=carousel)
|
|
333
|
+
- `caption` text
|
|
334
|
+
- `owner` (user info: id, username, full name)
|
|
335
|
+
- `likeCount`, `commentCount`
|
|
336
|
+
- `takenAt` (Unix timestamp)
|
|
337
|
+
- `imageUrl` (best quality candidate)
|
|
338
|
+
|
|
339
|
+
### User ID Extraction
|
|
340
|
+
|
|
341
|
+
Instagram requires the user's ID for some operations. Extract from page state:
|
|
342
|
+
|
|
343
|
+
```javascript
|
|
344
|
+
function getUserId() {
|
|
345
|
+
// Method 1: window._sharedData (older pages)
|
|
346
|
+
if (window._sharedData && window._sharedData.config) {
|
|
347
|
+
return window._sharedData.config.viewerId;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Method 2: window.__initialData (newer pages)
|
|
351
|
+
if (window.__initialData && window.__initialData.data && window.__initialData.data.user) {
|
|
352
|
+
return window.__initialData.data.user.id;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Method 3: Script tag parsing (fallback)
|
|
356
|
+
var scripts = document.querySelectorAll('script');
|
|
357
|
+
for (var i = 0; i < scripts.length; i++) {
|
|
358
|
+
var text = scripts[i].textContent || '';
|
|
359
|
+
var match = text.match(/"userId":"(\d+)"/);
|
|
360
|
+
if (match) return match[1];
|
|
361
|
+
match = text.match(/"viewerId":"(\d+)"/);
|
|
362
|
+
if (match) return match[1];
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Bloks Version ID
|
|
370
|
+
|
|
371
|
+
The `__bkv` parameter is a hash that may change with Instagram updates.
|
|
372
|
+
|
|
373
|
+
**Current value:** `cc4d2103131ee3bbc02c20a86f633b7fb7a031cbf515d12d81e0c8ae7af305dd`
|
|
374
|
+
|
|
375
|
+
**To find current value:**
|
|
376
|
+
1. Open Instagram DevTools → Network tab
|
|
377
|
+
2. Navigate to Your Activity → Likes
|
|
378
|
+
3. Look for requests to `/async/wbloks/fetch/`
|
|
379
|
+
4. Copy `__bkv` value from URL
|
|
380
|
+
|
|
381
|
+
### Pagination
|
|
382
|
+
|
|
383
|
+
**Saved Posts:**
|
|
384
|
+
```javascript
|
|
385
|
+
// First request
|
|
386
|
+
GET /api/v1/feed/saved/posts/
|
|
387
|
+
|
|
388
|
+
// Subsequent requests (if more_available: true)
|
|
389
|
+
GET /api/v1/feed/saved/posts/?max_id={next_max_id}
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
**GraphQL Timeline:**
|
|
393
|
+
```javascript
|
|
394
|
+
// First request
|
|
395
|
+
doc_id=8845758582119845&variables={"first":12,"after":null}
|
|
396
|
+
|
|
397
|
+
// Subsequent requests
|
|
398
|
+
doc_id=8845758582119845&variables={"first":12,"after":"{end_cursor}"}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
The `end_cursor` comes from `pageInfo.end_cursor` in the response.
|
|
402
|
+
|
|
403
|
+
### Cookie Extraction Helper
|
|
404
|
+
|
|
405
|
+
```javascript
|
|
406
|
+
function getCookie(name) {
|
|
407
|
+
var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
|
408
|
+
return match ? match[2] : null;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// Usage
|
|
412
|
+
var csrfToken = getCookie('csrftoken');
|
|
413
|
+
var sessionId = getCookie('sessionid');
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Hinge
|
|
419
|
+
|
|
420
|
+
**Platform ID:** `mobile-hinge`
|
|
421
|
+
**Data Type:** Dating
|
|
422
|
+
|
|
423
|
+
### Authentication
|
|
424
|
+
|
|
425
|
+
| Key | Storage | Notes |
|
|
426
|
+
|-----|---------|-------|
|
|
427
|
+
| `auth_token` | Cookie/localStorage | TBD - need to confirm |
|
|
428
|
+
| `hinge_auth_token` | Cookie | Fallback |
|
|
429
|
+
|
|
430
|
+
### APIs
|
|
431
|
+
|
|
432
|
+
| API | Endpoint | Data Retrieved |
|
|
433
|
+
|-----|----------|----------------|
|
|
434
|
+
| TBD | TBD | Matches, messages |
|
|
435
|
+
|
|
436
|
+
### Data Extracted
|
|
437
|
+
- Matches (profiles)
|
|
438
|
+
- Messages/chat history
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Token Expiry Reference
|
|
443
|
+
|
|
444
|
+
| Platform | Token Lifetime | Refresh Mechanism |
|
|
445
|
+
|----------|---------------|-------------------|
|
|
446
|
+
| **Sephora** | ~150 days | Auto-refresh on site visit, `refreshToken` in localStorage |
|
|
447
|
+
| **Instagram** | Session-based | Tied to browser `sessionid` cookie, refreshes on site activity |
|
|
448
|
+
| **Hinge** | TBD | TBD |
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Common Request Headers
|
|
453
|
+
|
|
454
|
+
All platforms require:
|
|
455
|
+
```javascript
|
|
456
|
+
{
|
|
457
|
+
'Accept': 'application/json',
|
|
458
|
+
'Content-Type': 'application/json',
|
|
459
|
+
'credentials': 'include' // for cookies
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
Platform-specific headers are added per connector.
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Onairos Backend Endpoint
|
|
468
|
+
|
|
469
|
+
All extracted data is sent to:
|
|
470
|
+
```
|
|
471
|
+
POST https://api2.onairos.uk/platform-data/store
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
With headers:
|
|
475
|
+
```javascript
|
|
476
|
+
{
|
|
477
|
+
'Content-Type': 'application/json',
|
|
478
|
+
'Authorization': 'Bearer <onairos_user_token>'
|
|
479
|
+
}
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
Payload structure:
|
|
483
|
+
```javascript
|
|
484
|
+
{
|
|
485
|
+
platform: 'mobile-sephora', // platform ID
|
|
486
|
+
dataType: 'ecommerce', // data category
|
|
487
|
+
data: { ... }, // extracted data
|
|
488
|
+
summary: { ... }, // quick stats
|
|
489
|
+
mobileMetadata: {
|
|
490
|
+
platform: 'web',
|
|
491
|
+
source: 'bookmarklet-api',
|
|
492
|
+
extractedAt: 'ISO timestamp',
|
|
493
|
+
tokenExpiry: { ... } // token expiry info
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
## Rate Limits & Best Practices
|
|
501
|
+
|
|
502
|
+
### General Guidelines
|
|
503
|
+
|
|
504
|
+
| Platform | Rate Limit | Recommendation |
|
|
505
|
+
|----------|------------|----------------|
|
|
506
|
+
| **Sephora** | Unknown (generous) | Max 10 requests per extraction |
|
|
507
|
+
| **Instagram** | Strict (anti-bot) | Max 3-5 requests, add delays |
|
|
508
|
+
| **Hinge** | TBD | TBD |
|
|
509
|
+
|
|
510
|
+
### Implementation Tips
|
|
511
|
+
|
|
512
|
+
1. **Parallel requests** - Use `Promise.all()` for independent API calls
|
|
513
|
+
2. **Error handling** - Gracefully handle 401/403 (re-auth needed), 429 (rate limited)
|
|
514
|
+
3. **Credentials** - Always include `credentials: 'include'` for cookie-based auth
|
|
515
|
+
4. **CORS** - These APIs work from same-origin (bookmarklet on the site), not cross-origin
|
|
516
|
+
|
|
517
|
+
### Response Parsing
|
|
518
|
+
|
|
519
|
+
**Instagram Bloks (strip prefix):**
|
|
520
|
+
```javascript
|
|
521
|
+
function parseBloksResponse(text) {
|
|
522
|
+
if (text.startsWith('for (;;);')) {
|
|
523
|
+
text = text.substring(9);
|
|
524
|
+
}
|
|
525
|
+
return JSON.parse(text);
|
|
526
|
+
}
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
**Sephora (standard JSON):**
|
|
530
|
+
```javascript
|
|
531
|
+
var data = await response.json();
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
### Error Codes
|
|
535
|
+
|
|
536
|
+
| Code | Meaning | Action |
|
|
537
|
+
|------|---------|--------|
|
|
538
|
+
| 200 | Success | Parse response |
|
|
539
|
+
| 401 | Unauthorized | Token expired, prompt re-login |
|
|
540
|
+
| 403 | Forbidden | Blocked/banned, try later |
|
|
541
|
+
| 429 | Rate Limited | Wait and retry |
|
|
542
|
+
| 500+ | Server Error | Retry with backoff |
|
|
543
|
+
|
|
544
|
+
---
|
|
545
|
+
|
|
546
|
+
## Quick Implementation Checklist
|
|
547
|
+
|
|
548
|
+
For each platform connector:
|
|
549
|
+
|
|
550
|
+
- [ ] Verify user is on correct domain
|
|
551
|
+
- [ ] Show consent popup
|
|
552
|
+
- [ ] Extract auth token(s)
|
|
553
|
+
- [ ] Check token validity/expiry
|
|
554
|
+
- [ ] Call APIs with proper headers
|
|
555
|
+
- [ ] Parse responses
|
|
556
|
+
- [ ] Build normalized payload
|
|
557
|
+
- [ ] Send to Onairos backend
|
|
558
|
+
- [ ] Show success/error message
|
|
559
|
+
|
|
@@ -4,4 +4,4 @@ var __ONAIROS_REQ_REGISTRY__ = [
|
|
|
4
4
|
require("../services/authService")
|
|
5
5
|
];
|
|
6
6
|
function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
|
|
7
|
-
|
|
7
|
+
Object[_0x3c14(0x0)](exports,_0x3c14(0x1),{'value':!![]}),exports[_0x3c14(0x2)]=exports[_0x3c14(0x3)]=exports['getApiHeaders']=exports[_0x3c14(0x4)]=void 0x0;var _authService=__ONAIROS_REQ_FUNC__(0x0);const API_CONFIG=exports[_0x3c14(0x4)]={'BASE_URL':'https://api2.onairos.uk','ENDPOINTS':{'AUTH':_0x3c14(0x5),'USER':_0x3c14(0x6),'CONNECTIONS':_0x3c14(0x7),'TRAINING':_0x3c14(0x8),'OAUTH':_0x3c14(0x9)},'TIMEOUT':0x7530},getApiHeaders=()=>({'Content-Type':'application/json','Accept':'application/json'});exports[_0x3c14(0xa)]=getApiHeaders;const getAuthHeaders=_0x52f1c7=>({...getApiHeaders(),..._0x52f1c7&&{'Authorization':_0x3c14(0xb)+_0x52f1c7}});exports[_0x3c14(0x3)]=getAuthHeaders;const getUserAuthHeaders=async()=>{const _0x254a6e={'JdtaE':_0x3c14(0xc)},_0xfab59d=await(0x0,_authService[_0x3c14(0xd)])();if(!_0xfab59d)throw new Error(_0x254a6e['JdtaE']);return{...getApiHeaders(),'Authorization':'Bearer\x20'+_0xfab59d};};function _0x3c14(_0x3e783e,_0x3c1447){_0x3e783e=_0x3e783e-0x0;const _0xcc98be=_0x3e78();let _0x52e31a=_0xcc98be[_0x3e783e];return _0x52e31a;}exports[_0x3c14(0x2)]=getUserAuthHeaders;function _0x3e78(){const _0x32c74e=['defineProperty','__esModule','getUserAuthHeaders','getAuthHeaders','API_CONFIG','/auth','/user','/connections','/training','/oauth','getApiHeaders','Bearer\x20','User\x20not\x20authenticated\x20-\x20no\x20JWT\x20token\x20found','getAuthToken'];_0x3e78=function(){return _0x32c74e;};return _0x3e78();}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
// Onairos SDK - Asset Registry (auto-generated)
|
|
3
|
+
var __ONAIROS_REQ_REGISTRY__ = [
|
|
4
|
+
require('telegram'),
|
|
5
|
+
require('telegram/sessions')
|
|
6
|
+
];
|
|
7
|
+
function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
|
|
8
|
+
function _0x5976(_0x4436f6,_0x597692){_0x4436f6=_0x4436f6-0x0;const _0x3ca39c=_0x4436();let _0x5f0075=_0x3ca39c[_0x4436f6];return _0x5f0075;}Object[_0x5976(0x0)](exports,_0x5976(0x1),{'value':!![]}),exports[_0x5976(0x2)]=exports['TELEGRAM_PUBLIC_KEY_TEST']=exports['TELEGRAM_PUBLIC_KEY_PRODUCTION']=exports[_0x5976(0x3)]=exports['TELEGRAM_ACCESS_INFO']=exports[_0x5976(0x4)]=exports['NODEJS_EXAMPLE']=void 0x0;const TELEGRAM_API_CONFIG=exports[_0x5976(0x3)]={'API_ID':0x1fb8026,'API_HASH':_0x5976(0x5),'APP_TITLE':'Onairos','SHORT_NAME':_0x5976(0x6)},TELEGRAM_SERVERS=exports['TELEGRAM_SERVERS']={'production':{'host':_0x5976(0x7),'port':0x1bb,'dc':0x2},'test':{'host':_0x5976(0x8),'port':0x1bb,'dc':0x2}},TELEGRAM_PUBLIC_KEY_PRODUCTION=exports['TELEGRAM_PUBLIC_KEY_PRODUCTION']=_0x5976(0x9),TELEGRAM_PUBLIC_KEY_TEST=exports['TELEGRAM_PUBLIC_KEY_TEST']=_0x5976(0xa),TELEGRAM_ACCESS_INFO=exports[_0x5976(0xb)]={'hasOAuthScopes':![],'accessModel':_0x5976(0xc),'dataExtracted':{'dialogs':!![],'userMessages':!![],'otherMessages':![],'secretChats':![],'media':![],'contacts':![]},'apiMethods':[_0x5976(0xd),_0x5976(0xe)]},PYTHON_EXAMPLE=exports[_0x5976(0x4)]=_0x5976(0xf),NODEJS_EXAMPLE=exports[_0x5976(0x10)]='See\x20comment\x20above';function _0x4436(){const _0x193afd=['defineProperty','__esModule','TELEGRAM_SERVERS','TELEGRAM_API_CONFIG','PYTHON_EXAMPLE','4b76b3a34aa0f56d8a8971db097a2ae3','Onairos','149.154.167.50','149.154.167.40','-----BEGIN\x20RSA\x20PUBLIC\x20KEY-----\x0aMIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\x0a5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\x0a62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\x0a+aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\x0at6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\x0a5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\x0a-----END\x20RSA\x20PUBLIC\x20KEY-----','-----BEGIN\x20RSA\x20PUBLIC\x20KEY-----\x0aMIIBCgKCAQEAyMEdY1aR+sCR3ZSJrtztKTKqigvO/vBfqACJLZtS7QMgCGXJ6XIR\x0ayy7mx66W0/sOFa7/1mAZtEoIokDP3ShoqF4fVNb6XeqgQfaUHd8wJpDWHcR2OFwv\x0aplUUI1PLTktZ9uW2WE23b+ixNwJjJGwBDJPQEQFBE+vfmH0JP503wr5INS1poWg/\x0aj25sIWeYPHYeOrFp/eXaqhISP6G+q2IeTaWTXpwZj4LzXq5YOpk4bYEQ6mvRq7D1\x0aaHWfYmlEGepfaYR8Q0YqvvhYtMte3ITnuSJs171+GDqpdKcSwHnd6FudwGO4pcCO\x0aj4WcDuXc2CTHgH8gFTNhp/Y8/SpDOhvn9QIDAQAB\x0a-----END\x20RSA\x20PUBLIC\x20KEY-----','TELEGRAM_ACCESS_INFO','full_access_after_auth','messages.getDialogs','messages.getHistory','See\x20comment\x20above','NODEJS_EXAMPLE'];_0x4436=function(){return _0x193afd;};return _0x4436();}
|