@mobtechi/sdk-core 1.1.3 → 1.1.4
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 +4 -5
- package/dist/index.d.mts +3 -13
- package/dist/index.d.ts +3 -13
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,7 +22,6 @@ import { MobTechi, MemoryStorageProvider } from '@mobtechi/sdk-core';
|
|
|
22
22
|
const mobtechi = new MobTechi({
|
|
23
23
|
baseUrl: 'https://api.mobtechi.com', // Replace with your environment URL
|
|
24
24
|
appId: 'your-app-id',
|
|
25
|
-
orgId: 'your-org-id', // Optional
|
|
26
25
|
storage: new MemoryStorageProvider(), // Replace with localStorage/AsyncStorage provider for persistence
|
|
27
26
|
tokenKey: 'mobtechi_auth_token'
|
|
28
27
|
});
|
|
@@ -40,13 +39,13 @@ Handles user identity, login, OTP verification, and token management automatical
|
|
|
40
39
|
|
|
41
40
|
```typescript
|
|
42
41
|
// 1. Identify User
|
|
43
|
-
await mobtechi.api.identify({ identifier: 'user@example.com', app_id: '...'
|
|
42
|
+
await mobtechi.api.identify({ identifier: 'user@example.com', app_id: '...'});
|
|
44
43
|
|
|
45
44
|
// 2. Login (Send OTP or Password)
|
|
46
|
-
await mobtechi.login({ identifier: 'user@example.com', app_id: '...'
|
|
45
|
+
await mobtechi.login({ identifier: 'user@example.com', app_id: '...' });
|
|
47
46
|
|
|
48
47
|
// 3. Verify OTP (Automatically sets the access token upon success)
|
|
49
|
-
await mobtechi.verifyOtp({ identifier: 'user@example.com', code: '123456', app_id: '...'
|
|
48
|
+
await mobtechi.verifyOtp({ identifier: 'user@example.com', code: '123456', app_id: '...' });
|
|
50
49
|
|
|
51
50
|
// 4. Logout (Clears local token and resets entitlements)
|
|
52
51
|
await mobtechi.logout();
|
|
@@ -84,7 +83,7 @@ Fetch user-specific or app-specific ad configurations and claim rewards.
|
|
|
84
83
|
const adsConfig = await mobtechi.api.getAdsConfig('your-org-id', 'your-app-key');
|
|
85
84
|
|
|
86
85
|
// Claim rewards
|
|
87
|
-
await mobtechi.api.claimReward({
|
|
86
|
+
await mobtechi.api.claimReward({ appKey: '...', rewardType: '...' });
|
|
88
87
|
```
|
|
89
88
|
|
|
90
89
|
## Advanced Usage
|
package/dist/index.d.mts
CHANGED
|
@@ -22,7 +22,6 @@ interface MobTechiUser {
|
|
|
22
22
|
dob: string | null;
|
|
23
23
|
preferences: Record<string, any> | null;
|
|
24
24
|
full_name: string | null;
|
|
25
|
-
org_id: string | null;
|
|
26
25
|
is_premium?: boolean;
|
|
27
26
|
has_ads?: boolean;
|
|
28
27
|
flags?: Record<string, any>;
|
|
@@ -93,7 +92,6 @@ declare class MemoryStorageProvider implements StorageProvider {
|
|
|
93
92
|
interface MobTechiClientOptions {
|
|
94
93
|
baseUrl: string;
|
|
95
94
|
appId?: string;
|
|
96
|
-
orgId?: string;
|
|
97
95
|
storage?: StorageProvider;
|
|
98
96
|
tokenKey?: string;
|
|
99
97
|
}
|
|
@@ -104,8 +102,7 @@ declare class MobTechiClient {
|
|
|
104
102
|
private tokenKey;
|
|
105
103
|
private currentToken;
|
|
106
104
|
appId?: string;
|
|
107
|
-
|
|
108
|
-
constructor(optionsOrBaseUrl: MobTechiClientOptions | string, appId?: string, orgId?: string, storage?: StorageProvider, tokenKey?: string);
|
|
105
|
+
constructor(optionsOrBaseUrl: MobTechiClientOptions | string, appId?: string, storage?: StorageProvider, tokenKey?: string);
|
|
109
106
|
setToken(token: string | null): Promise<void>;
|
|
110
107
|
getToken(): Promise<string | null>;
|
|
111
108
|
get<T = any>(path: string, config?: any): Promise<{
|
|
@@ -130,11 +127,9 @@ declare class MobTechiClient {
|
|
|
130
127
|
}>;
|
|
131
128
|
identify(payload: AuthDto & {
|
|
132
129
|
app_id: string;
|
|
133
|
-
org_id: string;
|
|
134
130
|
}): Promise<any>;
|
|
135
131
|
login(payload: AuthDto & {
|
|
136
132
|
app_id: string;
|
|
137
|
-
org_id: string;
|
|
138
133
|
}): Promise<{
|
|
139
134
|
status: number;
|
|
140
135
|
data: any;
|
|
@@ -142,7 +137,6 @@ declare class MobTechiClient {
|
|
|
142
137
|
register(payload: any): Promise<any>;
|
|
143
138
|
verifyOtp(payload: VerifyOtpDto & {
|
|
144
139
|
app_id: string;
|
|
145
|
-
org_id: string;
|
|
146
140
|
}): Promise<{
|
|
147
141
|
status: number;
|
|
148
142
|
data: any;
|
|
@@ -151,12 +145,11 @@ declare class MobTechiClient {
|
|
|
151
145
|
refreshToken(refresh_token: string): Promise<any>;
|
|
152
146
|
logout(token: string): Promise<void>;
|
|
153
147
|
updateProfile(payload: any, token?: string): Promise<any>;
|
|
154
|
-
getPlans(
|
|
148
|
+
getPlans(appKey?: string, token?: string): Promise<any>;
|
|
155
149
|
getSubscriptionStatus(appKey: string, token?: string): Promise<any>;
|
|
156
150
|
getEntitlements(appKey: string): Promise<any>;
|
|
157
151
|
createOrder(payload: {
|
|
158
152
|
planId: string;
|
|
159
|
-
orgId: string;
|
|
160
153
|
appKey: string;
|
|
161
154
|
}, token?: string): Promise<any>;
|
|
162
155
|
createSubscription(appKey: string, payload: {
|
|
@@ -165,9 +158,8 @@ declare class MobTechiClient {
|
|
|
165
158
|
createTopUp(appKey: string, payload: {
|
|
166
159
|
credits: number;
|
|
167
160
|
}): Promise<any>;
|
|
168
|
-
getAdsConfig(
|
|
161
|
+
getAdsConfig(appKey: string): Promise<any>;
|
|
169
162
|
claimReward(payload: {
|
|
170
|
-
orgId: string;
|
|
171
163
|
appKey: string;
|
|
172
164
|
rewardType: string;
|
|
173
165
|
}): Promise<any>;
|
|
@@ -233,14 +225,12 @@ declare class MobTechi {
|
|
|
233
225
|
*/
|
|
234
226
|
login(payload: AuthDto & {
|
|
235
227
|
app_id: string;
|
|
236
|
-
org_id: string;
|
|
237
228
|
}): Promise<{
|
|
238
229
|
status: number;
|
|
239
230
|
data: any;
|
|
240
231
|
}>;
|
|
241
232
|
verifyOtp(payload: VerifyOtpDto & {
|
|
242
233
|
app_id: string;
|
|
243
|
-
org_id: string;
|
|
244
234
|
}): Promise<{
|
|
245
235
|
status: number;
|
|
246
236
|
data: any;
|
package/dist/index.d.ts
CHANGED
|
@@ -22,7 +22,6 @@ interface MobTechiUser {
|
|
|
22
22
|
dob: string | null;
|
|
23
23
|
preferences: Record<string, any> | null;
|
|
24
24
|
full_name: string | null;
|
|
25
|
-
org_id: string | null;
|
|
26
25
|
is_premium?: boolean;
|
|
27
26
|
has_ads?: boolean;
|
|
28
27
|
flags?: Record<string, any>;
|
|
@@ -93,7 +92,6 @@ declare class MemoryStorageProvider implements StorageProvider {
|
|
|
93
92
|
interface MobTechiClientOptions {
|
|
94
93
|
baseUrl: string;
|
|
95
94
|
appId?: string;
|
|
96
|
-
orgId?: string;
|
|
97
95
|
storage?: StorageProvider;
|
|
98
96
|
tokenKey?: string;
|
|
99
97
|
}
|
|
@@ -104,8 +102,7 @@ declare class MobTechiClient {
|
|
|
104
102
|
private tokenKey;
|
|
105
103
|
private currentToken;
|
|
106
104
|
appId?: string;
|
|
107
|
-
|
|
108
|
-
constructor(optionsOrBaseUrl: MobTechiClientOptions | string, appId?: string, orgId?: string, storage?: StorageProvider, tokenKey?: string);
|
|
105
|
+
constructor(optionsOrBaseUrl: MobTechiClientOptions | string, appId?: string, storage?: StorageProvider, tokenKey?: string);
|
|
109
106
|
setToken(token: string | null): Promise<void>;
|
|
110
107
|
getToken(): Promise<string | null>;
|
|
111
108
|
get<T = any>(path: string, config?: any): Promise<{
|
|
@@ -130,11 +127,9 @@ declare class MobTechiClient {
|
|
|
130
127
|
}>;
|
|
131
128
|
identify(payload: AuthDto & {
|
|
132
129
|
app_id: string;
|
|
133
|
-
org_id: string;
|
|
134
130
|
}): Promise<any>;
|
|
135
131
|
login(payload: AuthDto & {
|
|
136
132
|
app_id: string;
|
|
137
|
-
org_id: string;
|
|
138
133
|
}): Promise<{
|
|
139
134
|
status: number;
|
|
140
135
|
data: any;
|
|
@@ -142,7 +137,6 @@ declare class MobTechiClient {
|
|
|
142
137
|
register(payload: any): Promise<any>;
|
|
143
138
|
verifyOtp(payload: VerifyOtpDto & {
|
|
144
139
|
app_id: string;
|
|
145
|
-
org_id: string;
|
|
146
140
|
}): Promise<{
|
|
147
141
|
status: number;
|
|
148
142
|
data: any;
|
|
@@ -151,12 +145,11 @@ declare class MobTechiClient {
|
|
|
151
145
|
refreshToken(refresh_token: string): Promise<any>;
|
|
152
146
|
logout(token: string): Promise<void>;
|
|
153
147
|
updateProfile(payload: any, token?: string): Promise<any>;
|
|
154
|
-
getPlans(
|
|
148
|
+
getPlans(appKey?: string, token?: string): Promise<any>;
|
|
155
149
|
getSubscriptionStatus(appKey: string, token?: string): Promise<any>;
|
|
156
150
|
getEntitlements(appKey: string): Promise<any>;
|
|
157
151
|
createOrder(payload: {
|
|
158
152
|
planId: string;
|
|
159
|
-
orgId: string;
|
|
160
153
|
appKey: string;
|
|
161
154
|
}, token?: string): Promise<any>;
|
|
162
155
|
createSubscription(appKey: string, payload: {
|
|
@@ -165,9 +158,8 @@ declare class MobTechiClient {
|
|
|
165
158
|
createTopUp(appKey: string, payload: {
|
|
166
159
|
credits: number;
|
|
167
160
|
}): Promise<any>;
|
|
168
|
-
getAdsConfig(
|
|
161
|
+
getAdsConfig(appKey: string): Promise<any>;
|
|
169
162
|
claimReward(payload: {
|
|
170
|
-
orgId: string;
|
|
171
163
|
appKey: string;
|
|
172
164
|
rewardType: string;
|
|
173
165
|
}): Promise<any>;
|
|
@@ -233,14 +225,12 @@ declare class MobTechi {
|
|
|
233
225
|
*/
|
|
234
226
|
login(payload: AuthDto & {
|
|
235
227
|
app_id: string;
|
|
236
|
-
org_id: string;
|
|
237
228
|
}): Promise<{
|
|
238
229
|
status: number;
|
|
239
230
|
data: any;
|
|
240
231
|
}>;
|
|
241
232
|
verifyOtp(payload: VerifyOtpDto & {
|
|
242
233
|
app_id: string;
|
|
243
|
-
org_id: string;
|
|
244
234
|
}): Promise<{
|
|
245
235
|
status: number;
|
|
246
236
|
data: any;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var k=Object.create;var g=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var x=(i,t)=>{for(var e in t)g(i,e,{get:t[e],enumerable:!0})},b=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of v(t))!I.call(i,r)&&r!==e&&g(i,r,{get:()=>t[r],enumerable:!(s=_(t,r))||s.enumerable});return i};var A=(i,t,e)=>(e=i!=null?k(P(i)):{},b(t||!i||!i.__esModule?g(e,"default",{value:i,enumerable:!0}):e,i)),E=i=>b(g({},"__esModule",{value:!0}),i);var S={};x(S,{AnalyticsTracker:()=>l,EntitlementEngine:()=>u,MemoryStorageProvider:()=>o,MobTechi:()=>y,MobTechiClient:()=>c,MobTechiSDK:()=>m});module.exports=E(S);var o=class{store={};getItem(t){return this.store[t]||null}setItem(t,e){this.store[t]=e}removeItem(t){delete this.store[t]}};var T=A(require("axios"));var c=class{client;baseUrl;storage;tokenKey;currentToken=null;appId;constructor(t,e,s,r){let p,d=e,f=s,w=r;typeof t=="object"&&t!==null?(p=t.baseUrl,d=t.appId,f=t.storage,w=t.tokenKey):p=t,this.baseUrl=p,this.appId=d,this.storage=f||new o,this.tokenKey=w||"mobtechi_auth_token",this.client=T.default.create({baseURL:this.baseUrl,headers:{"Content-Type":"application/json",...d&&{"x-app-id":d}}}),this.client.interceptors.request.use(async a=>{if(!this.currentToken){let n=await this.storage.getItem(this.tokenKey);n&&(this.currentToken=n)}return this.currentToken&&a.headers&&(a.headers.Authorization=`Bearer ${this.currentToken}`),this.currentToken==="guest_access_token"&&(a.adapter=async()=>{let n=a.url||"",h={};return n.includes("/subscription/status")?h={isPremium:!0,tier:"premium",expiresAt:new Date(Date.now()+31536e6).toISOString()}:n.includes("/subscription/plans")?h=[{id:"plan_1",name:"Premium Guest",price:0}]:n.includes("/ads/config")&&(h={enabled:!1}),{data:h,status:200,statusText:"OK",headers:{},config:a,request:{}}}),a})}async setToken(t){this.currentToken=t,t?await this.storage.setItem(this.tokenKey,t):await this.storage.removeItem(this.tokenKey)}async getToken(){return this.currentToken||(this.currentToken=await this.storage.getItem(this.tokenKey)),this.currentToken}async get(t,e){let s=await this.client.get(t,e);return{data:s.data,status:s.status}}async post(t,e,s){let r=await this.client.post(t,e,s);return{data:r.data,status:r.status}}async put(t,e,s){let r=await this.client.put(t,e,s);return{data:r.data,status:r.status}}async patch(t,e,s){let r=await this.client.patch(t,e,s);return{data:r.data,status:r.status}}async delete(t,e){let s=await this.client.delete(t,e);return{data:s.data,status:s.status}}async identify(t){return(await this.client.post("/auth/identify",t)).data}async login(t){let e=await this.client.post("/auth/login",t);return{status:e.status,data:e.data}}async register(t){return(await this.client.post("/auth/register",t)).data}async verifyOtp(t){let e=await this.client.post("/auth/otp_verify",t);return{status:e.status,data:e.data}}async validateToken(t){return(await this.client.get("/auth/validate",{headers:{Authorization:`Bearer ${t}`}})).data}async refreshToken(t){return(await this.client.post("/auth/refresh",{refresh_token:t})).data}async logout(t){await this.client.delete("/auth/logout",{headers:{Authorization:`Bearer ${t}`}})}async updateProfile(t,e){let s=e?{Authorization:`Bearer ${e}`}:{};return(await this.client.put("/user/update-profile",t,{headers:s})).data}async getPlans(t,e){let s=t||this.appId||"",r=e?{headers:{Authorization:`Bearer ${e}`}}:{};return(await this.client.get(`/user/subscription/plans?appKey=${s}`,r)).data}async getSubscriptionStatus(t,e){return(await this.client.get(`/user/subscription/status?appId=${t}`)).data}async getEntitlements(t){return(await this.client.get(`/${t}/subscriptions/entitlements`)).data}async createOrder(t,e){return(await this.client.post("/user/subscription/create-order",t)).data}async createSubscription(t,e){return(await this.client.post(`/${t}/subscriptions/create`,e)).data}async createTopUp(t,e){return(await this.client.post(`/${t}/subscriptions/topup`,e)).data}async getAdsConfig(t){return(await this.client.get(`/user/ads/config?appKey=${t}`)).data}async claimReward(t){return(await this.client.post("/user/rewards/ad-claim",t)).data}};var u=class{entitlements=[];isPremiumFlag=!1;setState(t,e=[]){this.isPremiumFlag=t,this.entitlements=e}checkPremium(){return this.isPremiumFlag?!0:this.entitlements.some(t=>t.active&&t.tier!=="FREE")}hasFeature(t){return this.isPremiumFlag?!0:this.entitlements.some(e=>e.active&&e.granted_features&&e.granted_features.includes(t))}};var l=class{constructor(t,e){this.api=t;this.appId=e}api;appId;sessionEvents=new Set;async shouldDeduplicate(t){if(t==="onboarding_completed"||t==="first_code_execution"){let e=`mt_dedup_${t}`;return await this.api.storage.getItem(e)==="true"}return t==="paywall_viewed"?this.sessionEvents.has(t):!1}async markTracked(t){if(t==="onboarding_completed"||t==="first_code_execution"){let e=`mt_dedup_${t}`;await this.api.storage.setItem(e,"true")}else t==="paywall_viewed"&&this.sessionEvents.add(t)}track(t,e){(async()=>{await this.shouldDeduplicate(t)||(await this.markTracked(t),await this.capture({event_name:t,payload:e}))})().catch(s=>{console.warn(`[MobTechi Analytics] failed async track for ${t}`,s)})}trackError(t,e,s){(async()=>{await this.capture({event_name:t,is_error:!0,stack_trace:e.stack,metadata:s})})().catch(r=>{console.warn(`[MobTechi Analytics] failed async trackError for ${t}`,r)})}async capture(t){try{await this.api.post("/analytics/capture",{app_id:this.appId,...t})}catch{console.warn(`[MobTechi Analytics] Failed to track event: ${t.event_name}`)}}};var y=class{api;entitlements;analytics;constructor(t){this.api=new c(t),this.entitlements=new u,this.analytics=new l(this.api,t.appId||"unknown")}async login(t){return await this.api.login(t)}async verifyOtp(t){let e=await this.api.verifyOtp(t);return e.data&&e.data.token&&await this.api.setToken(e.data.token),e}async logout(){let t=await this.api.getToken();if(t)try{await this.api.logout(t)}catch{}await this.api.setToken(null),this.entitlements.setState(!1,[])}async syncEntitlements(t){try{let e=await this.api.getEntitlements(t);if(e){let s=!!e.isPremium,r=e.features||[];this.entitlements.setState(s,r),m.setPremiumUser(s)}return e}catch(e){throw console.error("Failed to sync entitlements",e),e}}},m={_isPremium:!1,setPremiumUser:i=>{m._isPremium=i},isPremiumUser:()=>m._isPremium};0&&(module.exports={AnalyticsTracker,EntitlementEngine,MemoryStorageProvider,MobTechi,MobTechiClient,MobTechiSDK});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var l=class{store={};getItem(t){return this.store[t]||null}setItem(t,e){this.store[t]=e}removeItem(t){delete this.store[t]}};import w from"axios";var p=class{client;baseUrl;storage;tokenKey;currentToken=null;appId;constructor(t,e,s,r){let o,c=e,m=s,y=r;typeof t=="object"&&t!==null?(o=t.baseUrl,c=t.appId,m=t.storage,y=t.tokenKey):o=t,this.baseUrl=o,this.appId=c,this.storage=m||new l,this.tokenKey=y||"mobtechi_auth_token",this.client=w.create({baseURL:this.baseUrl,headers:{"Content-Type":"application/json",...c&&{"x-app-id":c}}}),this.client.interceptors.request.use(async a=>{if(!this.currentToken){let n=await this.storage.getItem(this.tokenKey);n&&(this.currentToken=n)}return this.currentToken&&a.headers&&(a.headers.Authorization=`Bearer ${this.currentToken}`),this.currentToken==="guest_access_token"&&(a.adapter=async()=>{let n=a.url||"",u={};return n.includes("/subscription/status")?u={isPremium:!0,tier:"premium",expiresAt:new Date(Date.now()+31536e6).toISOString()}:n.includes("/subscription/plans")?u=[{id:"plan_1",name:"Premium Guest",price:0}]:n.includes("/ads/config")&&(u={enabled:!1}),{data:u,status:200,statusText:"OK",headers:{},config:a,request:{}}}),a})}async setToken(t){this.currentToken=t,t?await this.storage.setItem(this.tokenKey,t):await this.storage.removeItem(this.tokenKey)}async getToken(){return this.currentToken||(this.currentToken=await this.storage.getItem(this.tokenKey)),this.currentToken}async get(t,e){let s=await this.client.get(t,e);return{data:s.data,status:s.status}}async post(t,e,s){let r=await this.client.post(t,e,s);return{data:r.data,status:r.status}}async put(t,e,s){let r=await this.client.put(t,e,s);return{data:r.data,status:r.status}}async patch(t,e,s){let r=await this.client.patch(t,e,s);return{data:r.data,status:r.status}}async delete(t,e){let s=await this.client.delete(t,e);return{data:s.data,status:s.status}}async identify(t){return(await this.client.post("/auth/identify",t)).data}async login(t){let e=await this.client.post("/auth/login",t);return{status:e.status,data:e.data}}async register(t){return(await this.client.post("/auth/register",t)).data}async verifyOtp(t){let e=await this.client.post("/auth/otp_verify",t);return{status:e.status,data:e.data}}async validateToken(t){return(await this.client.get("/auth/validate",{headers:{Authorization:`Bearer ${t}`}})).data}async refreshToken(t){return(await this.client.post("/auth/refresh",{refresh_token:t})).data}async logout(t){await this.client.delete("/auth/logout",{headers:{Authorization:`Bearer ${t}`}})}async updateProfile(t,e){let s=e?{Authorization:`Bearer ${e}`}:{};return(await this.client.put("/user/update-profile",t,{headers:s})).data}async getPlans(t,e){let s=t||this.appId||"",r=e?{headers:{Authorization:`Bearer ${e}`}}:{};return(await this.client.get(`/user/subscription/plans?appKey=${s}`,r)).data}async getSubscriptionStatus(t,e){return(await this.client.get(`/user/subscription/status?appId=${t}`)).data}async getEntitlements(t){return(await this.client.get(`/${t}/subscriptions/entitlements`)).data}async createOrder(t,e){return(await this.client.post("/user/subscription/create-order",t)).data}async createSubscription(t,e){return(await this.client.post(`/${t}/subscriptions/create`,e)).data}async createTopUp(t,e){return(await this.client.post(`/${t}/subscriptions/topup`,e)).data}async getAdsConfig(t){return(await this.client.get(`/user/ads/config?appKey=${t}`)).data}async claimReward(t){return(await this.client.post("/user/rewards/ad-claim",t)).data}};var d=class{entitlements=[];isPremiumFlag=!1;setState(t,e=[]){this.isPremiumFlag=t,this.entitlements=e}checkPremium(){return this.isPremiumFlag?!0:this.entitlements.some(t=>t.active&&t.tier!=="FREE")}hasFeature(t){return this.isPremiumFlag?!0:this.entitlements.some(e=>e.active&&e.granted_features&&e.granted_features.includes(t))}};var h=class{constructor(t,e){this.api=t;this.appId=e}api;appId;sessionEvents=new Set;async shouldDeduplicate(t){if(t==="onboarding_completed"||t==="first_code_execution"){let e=`mt_dedup_${t}`;return await this.api.storage.getItem(e)==="true"}return t==="paywall_viewed"?this.sessionEvents.has(t):!1}async markTracked(t){if(t==="onboarding_completed"||t==="first_code_execution"){let e=`mt_dedup_${t}`;await this.api.storage.setItem(e,"true")}else t==="paywall_viewed"&&this.sessionEvents.add(t)}track(t,e){(async()=>{await this.shouldDeduplicate(t)||(await this.markTracked(t),await this.capture({event_name:t,payload:e}))})().catch(s=>{console.warn(`[MobTechi Analytics] failed async track for ${t}`,s)})}trackError(t,e,s){(async()=>{await this.capture({event_name:t,is_error:!0,stack_trace:e.stack,metadata:s})})().catch(r=>{console.warn(`[MobTechi Analytics] failed async trackError for ${t}`,r)})}async capture(t){try{await this.api.post("/analytics/capture",{app_id:this.appId,...t})}catch{console.warn(`[MobTechi Analytics] Failed to track event: ${t.event_name}`)}}};var f=class{api;entitlements;analytics;constructor(t){this.api=new p(t),this.entitlements=new d,this.analytics=new h(this.api,t.appId||"unknown")}async login(t){return await this.api.login(t)}async verifyOtp(t){let e=await this.api.verifyOtp(t);return e.data&&e.data.token&&await this.api.setToken(e.data.token),e}async logout(){let t=await this.api.getToken();if(t)try{await this.api.logout(t)}catch{}await this.api.setToken(null),this.entitlements.setState(!1,[])}async syncEntitlements(t){try{let e=await this.api.getEntitlements(t);if(e){let s=!!e.isPremium,r=e.features||[];this.entitlements.setState(s,r),g.setPremiumUser(s)}return e}catch(e){throw console.error("Failed to sync entitlements",e),e}}},g={_isPremium:!1,setPremiumUser:i=>{g._isPremium=i},isPremiumUser:()=>g._isPremium};export{h as AnalyticsTracker,d as EntitlementEngine,l as MemoryStorageProvider,f as MobTechi,p as MobTechiClient,g as MobTechiSDK};
|