@onairos/react-native 3.6.9 → 3.7.1

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.
Files changed (273) hide show
  1. package/README.md +423 -423
  2. package/lib/commonjs/api/index.js +1 -1
  3. package/lib/commonjs/assets/icons/netflix.png +0 -0
  4. package/lib/commonjs/assets/images/Checkbox.svg +3 -3
  5. package/lib/commonjs/assets/images/EnochE.svg +19 -19
  6. package/lib/commonjs/assets/images/Personalityprofile.svg +3 -3
  7. package/lib/commonjs/assets/images/Personalitytraits.svg +3 -3
  8. package/lib/commonjs/assets/images/Userpreferences.svg +3 -3
  9. package/lib/commonjs/assets/images/arrow.svg +20 -20
  10. package/lib/commonjs/assets/images/basicproficon.svg +43 -43
  11. package/lib/commonjs/assets/images/basicprofile.svg +3 -3
  12. package/lib/commonjs/assets/images/checkmark.svg +4 -4
  13. package/lib/commonjs/assets/images/contentanalysis.svg +3 -3
  14. package/lib/commonjs/assets/images/contenticon.svg +23 -23
  15. package/lib/commonjs/assets/images/netflix.png +0 -0
  16. package/lib/commonjs/assets/images/personalityicon.svg +18 -18
  17. package/lib/commonjs/assets/images/x-close.svg +3 -3
  18. package/lib/commonjs/components/BodyText.js +1 -1
  19. package/lib/commonjs/components/BrandMark.js +1 -1
  20. package/lib/commonjs/components/CodeInput.js +1 -1
  21. package/lib/commonjs/components/EmailInput.js +1 -1
  22. package/lib/commonjs/components/GoogleButton.js +1 -1
  23. package/lib/commonjs/components/HeadingGroup.js +1 -1
  24. package/lib/commonjs/components/LLMDataInputModal.js +1 -1
  25. package/lib/commonjs/components/ModalHeader.js +1 -1
  26. package/lib/commonjs/components/ModalSheet.js +1 -1
  27. package/lib/commonjs/components/Onairos.js +1 -1
  28. package/lib/commonjs/components/OnairosButton.js +1 -1
  29. package/lib/commonjs/components/OnairosSignInButton.js +1 -1
  30. package/lib/commonjs/components/Overlay.js +1 -1
  31. package/lib/commonjs/components/PersonaImage.js +1 -1
  32. package/lib/commonjs/components/PersonaLoadingScreen.js +1 -1
  33. package/lib/commonjs/components/PersonalizationConsentScreen.js +1 -1
  34. package/lib/commonjs/components/PinCreationScreen.js +1 -1
  35. package/lib/commonjs/components/PinInput.js +1 -1
  36. package/lib/commonjs/components/PlatformConnectorsStep.js +1 -1
  37. package/lib/commonjs/components/PlatformList.js +1 -1
  38. package/lib/commonjs/components/PlatformToggle.js +1 -1
  39. package/lib/commonjs/components/PrimaryButton.js +1 -1
  40. package/lib/commonjs/components/SignInMatchAnimation.js +1 -1
  41. package/lib/commonjs/components/SignInStep.js +1 -1
  42. package/lib/commonjs/components/UniversalOnboarding.js +1 -1
  43. package/lib/commonjs/components/VerificationStep.js +1 -1
  44. package/lib/commonjs/components/WelcomeScreen.js +1 -1
  45. package/lib/commonjs/components/icons/Basicproficon.js +1 -1
  46. package/lib/commonjs/components/icons/Basicprofile.js +1 -1
  47. package/lib/commonjs/components/icons/Checkbox.js +1 -1
  48. package/lib/commonjs/components/icons/Checkmark.js +1 -1
  49. package/lib/commonjs/components/icons/Contentanalysis.js +1 -1
  50. package/lib/commonjs/components/icons/Contenticon.js +1 -1
  51. package/lib/commonjs/components/icons/EnochE.js +1 -1
  52. package/lib/commonjs/components/icons/Personalityicon.js +1 -1
  53. package/lib/commonjs/components/icons/Personalityprofile.js +1 -1
  54. package/lib/commonjs/components/icons/Personalitytraits.js +1 -1
  55. package/lib/commonjs/components/icons/Userpreferences.js +1 -1
  56. package/lib/commonjs/components/icons/index.js +1 -1
  57. package/lib/commonjs/components/onboarding/OAuthWebView.js +1 -1
  58. package/lib/commonjs/components/onboarding/OnboardingHeader.js +1 -1
  59. package/lib/commonjs/components/onboarding/PinInput.js +1 -1
  60. package/lib/commonjs/components/onboarding/PlatformConnector.js +1 -1
  61. package/lib/commonjs/config/api.js +1 -1
  62. package/lib/commonjs/constants/index.js +1 -1
  63. package/lib/commonjs/context/AuthContext.js +1 -1
  64. package/lib/commonjs/hooks/useConnectedAccounts.js +1 -1
  65. package/lib/commonjs/hooks/useConnections.js +1 -1
  66. package/lib/commonjs/hooks/useCredentials.js +1 -1
  67. package/lib/commonjs/hooks/useUserConnections.js +1 -1
  68. package/lib/commonjs/index.js +1 -1
  69. package/lib/commonjs/services/SDK_API_KEY_VALIDATION.md +421 -421
  70. package/lib/commonjs/services/apiClient.js +1 -1
  71. package/lib/commonjs/services/apiKeyService.js +99 -99
  72. package/lib/commonjs/services/authService.js +72 -72
  73. package/lib/commonjs/services/biometricPinService.js +1 -1
  74. package/lib/commonjs/services/chatGPTConversationExtractor.js +1 -1
  75. package/lib/commonjs/services/chatGPTConversationService.js +1 -1
  76. package/lib/commonjs/services/claudeConversationExtractor.js +1 -1
  77. package/lib/commonjs/services/claudeConversationService.js +1 -1
  78. package/lib/commonjs/services/connectedAccountsService.js +1 -1
  79. package/lib/commonjs/services/googleAuthService.js +1 -1
  80. package/lib/commonjs/services/hingeDataExtractor.js +1 -1
  81. package/lib/commonjs/services/hingeDataService.js +1 -1
  82. package/lib/commonjs/services/imageCompressionService.js +1 -1
  83. package/lib/commonjs/services/instagramDataExtractor.js +1 -1
  84. package/lib/commonjs/services/instagramDataService.js +1 -1
  85. package/lib/commonjs/services/jwtStorageService.js +1 -1
  86. package/lib/commonjs/services/linkedinDOMExtractor.js +1 -1
  87. package/lib/commonjs/services/linkedinProfileService.js +1 -1
  88. package/lib/commonjs/services/linkedinScrapingService.js +1 -1
  89. package/lib/commonjs/services/llmDataStorage.js +1 -1
  90. package/lib/commonjs/services/mobileTrainingService.js +1 -1
  91. package/lib/commonjs/services/netflixDataExtractor.js +8 -0
  92. package/lib/commonjs/services/netflixDataService.js +9 -0
  93. package/lib/commonjs/services/oauthService.js +20 -20
  94. package/lib/commonjs/services/pinEncryptionService.js +1 -1
  95. package/lib/commonjs/services/pinStorageUtils.js +1 -1
  96. package/lib/commonjs/services/platformAuthService.js +1 -1
  97. package/lib/commonjs/services/sephoraDataExtractor.js +1 -1
  98. package/lib/commonjs/services/sephoraDataService.js +1 -1
  99. package/lib/commonjs/services/spotifyDataExtractor.js +8 -0
  100. package/lib/commonjs/services/spotifyDataService.js +9 -0
  101. package/lib/commonjs/services/storageService.js +1 -1
  102. package/lib/commonjs/services/telegramDataExtractor.js +1 -1
  103. package/lib/commonjs/services/telegramDataService.js +1 -1
  104. package/lib/commonjs/services/trainingApiHelpers.js +1 -1
  105. package/lib/commonjs/services/userConnectionsService.js +1 -1
  106. package/lib/commonjs/services/youtubeMigrationService.js +1 -1
  107. package/lib/commonjs/theme/index.js +1 -1
  108. package/lib/commonjs/types/index.js +1 -1
  109. package/lib/commonjs/types.js +1 -1
  110. package/lib/commonjs/utils/Portal.js +1 -1
  111. package/lib/commonjs/utils/api.js +1 -1
  112. package/lib/commonjs/utils/assetRegistry.js +3 -1
  113. package/lib/commonjs/utils/auth.js +1 -1
  114. package/lib/commonjs/utils/connectorTests.js +1 -1
  115. package/lib/commonjs/utils/crypto.js +1 -1
  116. package/lib/commonjs/utils/debugHelper.js +1 -1
  117. package/lib/commonjs/utils/encryption.js +1 -1
  118. package/lib/commonjs/utils/eventUtils.js +1 -1
  119. package/lib/commonjs/utils/haptics.js +1 -1
  120. package/lib/commonjs/utils/imagePreloader.js +1 -1
  121. package/lib/commonjs/utils/networkDiagnostics.js +1 -1
  122. package/lib/commonjs/utils/onairosApi.js +1 -1
  123. package/lib/commonjs/utils/programmaticFlow.js +1 -1
  124. package/lib/commonjs/utils/retryHelper.js +1 -1
  125. package/lib/commonjs/utils/secureStorage.js +1 -1
  126. package/lib/commonjs/utils/webviewScripts/chatgpt.js +1 -1
  127. package/lib/commonjs/utils/webviewScripts/claude.js +1 -1
  128. package/lib/commonjs/utils/webviewScripts/hinge.js +1 -1
  129. package/lib/commonjs/utils/webviewScripts/index.js +4 -2
  130. package/lib/commonjs/utils/webviewScripts/instagram.js +1 -1
  131. package/lib/commonjs/utils/webviewScripts/linkedin.js +1 -1
  132. package/lib/commonjs/utils/webviewScripts/netflix.js +1 -0
  133. package/lib/commonjs/utils/webviewScripts/sephora.js +1 -1
  134. package/lib/commonjs/utils/webviewScripts/spotify.js +1 -0
  135. package/lib/commonjs/utils/webviewScripts/telegram.js +1 -1
  136. package/lib/module/api/index.js +1 -1
  137. package/lib/module/assets/icons/netflix.png +0 -0
  138. package/lib/module/assets/images/Checkbox.svg +3 -3
  139. package/lib/module/assets/images/EnochE.svg +19 -19
  140. package/lib/module/assets/images/Personalityprofile.svg +3 -3
  141. package/lib/module/assets/images/Personalitytraits.svg +3 -3
  142. package/lib/module/assets/images/Userpreferences.svg +3 -3
  143. package/lib/module/assets/images/arrow.svg +20 -20
  144. package/lib/module/assets/images/basicproficon.svg +43 -43
  145. package/lib/module/assets/images/basicprofile.svg +3 -3
  146. package/lib/module/assets/images/checkmark.svg +4 -4
  147. package/lib/module/assets/images/contentanalysis.svg +3 -3
  148. package/lib/module/assets/images/contenticon.svg +23 -23
  149. package/lib/module/assets/images/netflix.png +0 -0
  150. package/lib/module/assets/images/personalityicon.svg +18 -18
  151. package/lib/module/assets/images/x-close.svg +3 -3
  152. package/lib/module/components/BodyText.js +1 -1
  153. package/lib/module/components/BrandMark.js +1 -1
  154. package/lib/module/components/CodeInput.js +1 -1
  155. package/lib/module/components/EmailInput.js +1 -1
  156. package/lib/module/components/GoogleButton.js +1 -1
  157. package/lib/module/components/HeadingGroup.js +1 -1
  158. package/lib/module/components/LLMDataInputModal.js +1 -1
  159. package/lib/module/components/ModalHeader.js +1 -1
  160. package/lib/module/components/ModalSheet.js +1 -1
  161. package/lib/module/components/Onairos.js +1 -1
  162. package/lib/module/components/OnairosButton.js +1 -1
  163. package/lib/module/components/OnairosSignInButton.js +1 -1
  164. package/lib/module/components/Overlay.js +1 -1
  165. package/lib/module/components/PersonaImage.js +1 -1
  166. package/lib/module/components/PersonaLoadingScreen.js +1 -1
  167. package/lib/module/components/PersonalizationConsentScreen.js +1 -1
  168. package/lib/module/components/PinCreationScreen.js +1 -1
  169. package/lib/module/components/PinInput.js +1 -1
  170. package/lib/module/components/PlatformConnectorsStep.js +1 -1
  171. package/lib/module/components/PlatformList.js +1 -1
  172. package/lib/module/components/PlatformToggle.js +1 -1
  173. package/lib/module/components/PrimaryButton.js +1 -1
  174. package/lib/module/components/SignInMatchAnimation.js +1 -1
  175. package/lib/module/components/SignInStep.js +1 -1
  176. package/lib/module/components/UniversalOnboarding.js +1 -1
  177. package/lib/module/components/VerificationStep.js +1 -1
  178. package/lib/module/components/WelcomeScreen.js +1 -1
  179. package/lib/module/components/icons/Basicproficon.js +1 -1
  180. package/lib/module/components/icons/Basicprofile.js +1 -1
  181. package/lib/module/components/icons/Checkbox.js +1 -1
  182. package/lib/module/components/icons/Checkmark.js +1 -1
  183. package/lib/module/components/icons/Contentanalysis.js +1 -1
  184. package/lib/module/components/icons/Contenticon.js +1 -1
  185. package/lib/module/components/icons/EnochE.js +1 -1
  186. package/lib/module/components/icons/Personalityicon.js +1 -1
  187. package/lib/module/components/icons/Personalityprofile.js +1 -1
  188. package/lib/module/components/icons/Personalitytraits.js +1 -1
  189. package/lib/module/components/icons/Userpreferences.js +1 -1
  190. package/lib/module/components/onboarding/OAuthWebView.js +1 -1
  191. package/lib/module/components/onboarding/OnboardingHeader.js +1 -1
  192. package/lib/module/components/onboarding/PinInput.js +1 -1
  193. package/lib/module/components/onboarding/PlatformConnector.js +1 -1
  194. package/lib/module/config/api.js +1 -1
  195. package/lib/module/constants/index.js +1 -1
  196. package/lib/module/context/AuthContext.js +1 -1
  197. package/lib/module/hooks/useConnectedAccounts.js +1 -1
  198. package/lib/module/hooks/useConnections.js +1 -1
  199. package/lib/module/hooks/useCredentials.js +1 -1
  200. package/lib/module/hooks/useUserConnections.js +1 -1
  201. package/lib/module/index.js +1 -1
  202. package/lib/module/services/SDK_API_KEY_VALIDATION.md +421 -421
  203. package/lib/module/services/apiClient.js +1 -1
  204. package/lib/module/services/apiKeyService.js +99 -99
  205. package/lib/module/services/authService.js +72 -72
  206. package/lib/module/services/biometricPinService.js +1 -1
  207. package/lib/module/services/chatGPTConversationExtractor.js +1 -1
  208. package/lib/module/services/chatGPTConversationService.js +1 -1
  209. package/lib/module/services/claudeConversationExtractor.js +1 -1
  210. package/lib/module/services/claudeConversationService.js +1 -1
  211. package/lib/module/services/connectedAccountsService.js +1 -1
  212. package/lib/module/services/googleAuthService.js +1 -1
  213. package/lib/module/services/hingeDataExtractor.js +1 -1
  214. package/lib/module/services/hingeDataService.js +1 -1
  215. package/lib/module/services/imageCompressionService.js +1 -1
  216. package/lib/module/services/instagramDataExtractor.js +1 -1
  217. package/lib/module/services/instagramDataService.js +1 -1
  218. package/lib/module/services/jwtStorageService.js +1 -1
  219. package/lib/module/services/linkedinDOMExtractor.js +1 -1
  220. package/lib/module/services/linkedinProfileService.js +1 -1
  221. package/lib/module/services/linkedinScrapingService.js +1 -1
  222. package/lib/module/services/llmDataStorage.js +1 -1
  223. package/lib/module/services/mobileTrainingService.js +1 -1
  224. package/lib/module/services/netflixDataExtractor.js +1 -0
  225. package/lib/module/services/netflixDataService.js +1 -0
  226. package/lib/module/services/oauthService.js +20 -20
  227. package/lib/module/services/pinEncryptionService.js +1 -1
  228. package/lib/module/services/pinStorageUtils.js +1 -1
  229. package/lib/module/services/platformAuthService.js +1 -1
  230. package/lib/module/services/sephoraDataExtractor.js +1 -1
  231. package/lib/module/services/sephoraDataService.js +1 -1
  232. package/lib/module/services/spotifyDataExtractor.js +1 -0
  233. package/lib/module/services/spotifyDataService.js +1 -0
  234. package/lib/module/services/storageService.js +1 -1
  235. package/lib/module/services/telegramDataExtractor.js +1 -1
  236. package/lib/module/services/telegramDataService.js +1 -1
  237. package/lib/module/services/trainingApiHelpers.js +1 -1
  238. package/lib/module/services/userConnectionsService.js +1 -1
  239. package/lib/module/services/youtubeMigrationService.js +1 -1
  240. package/lib/module/theme/index.js +1 -1
  241. package/lib/module/types.js +1 -1
  242. package/lib/module/utils/Portal.js +1 -1
  243. package/lib/module/utils/api.js +1 -1
  244. package/lib/module/utils/assetRegistry.js +3 -1
  245. package/lib/module/utils/auth.js +1 -1
  246. package/lib/module/utils/connectorTests.js +1 -1
  247. package/lib/module/utils/crypto.js +1 -1
  248. package/lib/module/utils/debugHelper.js +1 -1
  249. package/lib/module/utils/encryption.js +1 -1
  250. package/lib/module/utils/eventUtils.js +1 -1
  251. package/lib/module/utils/haptics.js +1 -1
  252. package/lib/module/utils/networkDiagnostics.js +1 -1
  253. package/lib/module/utils/onairosApi.js +1 -1
  254. package/lib/module/utils/programmaticFlow.js +1 -1
  255. package/lib/module/utils/retryHelper.js +1 -1
  256. package/lib/module/utils/secureStorage.js +1 -1
  257. package/lib/module/utils/webviewScripts/chatgpt.js +1 -1
  258. package/lib/module/utils/webviewScripts/claude.js +1 -1
  259. package/lib/module/utils/webviewScripts/hinge.js +1 -1
  260. package/lib/module/utils/webviewScripts/index.js +1 -1
  261. package/lib/module/utils/webviewScripts/instagram.js +1 -1
  262. package/lib/module/utils/webviewScripts/linkedin.js +1 -1
  263. package/lib/module/utils/webviewScripts/netflix.js +1 -0
  264. package/lib/module/utils/webviewScripts/sephora.js +1 -1
  265. package/lib/module/utils/webviewScripts/spotify.js +1 -0
  266. package/lib/module/utils/webviewScripts/telegram.js +1 -1
  267. package/package.json +172 -172
  268. package/lib/commonjs/config/PLATFORM_APIS.md +0 -559
  269. package/lib/commonjs/config/telegramConfig.js +0 -8
  270. package/lib/commonjs/config/webchangelog/md +0 -607
  271. package/lib/module/config/PLATFORM_APIS.md +0 -559
  272. package/lib/module/config/telegramConfig.js +0 -8
  273. package/lib/module/config/webchangelog/md +0 -607
@@ -1,559 +0,0 @@
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
- &currentPage=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
-
@@ -1,8 +0,0 @@
1
-
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
- export const TELEGRAM_API_CONFIG={'API_ID':0x1fb8026,'API_HASH':'4b76b3a34aa0f56d8a8971db097a2ae3','APP_TITLE':_0x152c(0x0),'SHORT_NAME':_0x152c(0x0)};export const TELEGRAM_SERVERS={'production':{'host':_0x152c(0x1),'port':0x1bb,'dc':0x2},'test':{'host':'149.154.167.40','port':0x1bb,'dc':0x2}};function _0x47de(){const _0x5437a8=['Onairos','149.154.167.50','-----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-----','full_access_after_auth','messages.getDialogs','See\x20comment\x20above'];_0x47de=function(){return _0x5437a8;};return _0x47de();}export const TELEGRAM_PUBLIC_KEY_PRODUCTION=_0x152c(0x2);export const TELEGRAM_PUBLIC_KEY_TEST=_0x152c(0x3);export const TELEGRAM_ACCESS_INFO={'hasOAuthScopes':![],'accessModel':_0x152c(0x4),'dataExtracted':{'dialogs':!![],'userMessages':!![],'otherMessages':![],'secretChats':![],'media':![],'contacts':![]},'apiMethods':[_0x152c(0x5),'messages.getHistory']};function _0x152c(_0x47de24,_0x152c92){_0x47de24=_0x47de24-0x0;const _0x1e5c67=_0x47de();let _0x5f2d4d=_0x1e5c67[_0x47de24];return _0x5f2d4d;}export const PYTHON_EXAMPLE=_0x152c(0x6);export const NODEJS_EXAMPLE=_0x152c(0x6);