@onairos/react-native 3.1.0 → 3.1.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.
- package/lib/commonjs/index.js +18 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/services/apiKeyService.js +133 -10
- package/lib/commonjs/services/apiKeyService.js.map +1 -1
- package/lib/commonjs/services/platformAuthService.js +16 -7
- package/lib/commonjs/services/platformAuthService.js.map +1 -1
- package/lib/commonjs/utils/onairosApi.js +14 -6
- package/lib/commonjs/utils/onairosApi.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/services/apiKeyService.js +128 -8
- package/lib/module/services/apiKeyService.js.map +1 -1
- package/lib/module/services/platformAuthService.js +17 -8
- package/lib/module/services/platformAuthService.js.map +1 -1
- package/lib/module/utils/onairosApi.js +15 -7
- package/lib/module/utils/onairosApi.js.map +1 -1
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/services/apiKeyService.d.ts +18 -0
- package/lib/typescript/services/apiKeyService.d.ts.map +1 -1
- package/lib/typescript/services/platformAuthService.d.ts +3 -3
- package/lib/typescript/services/platformAuthService.d.ts.map +1 -1
- package/lib/typescript/utils/onairosApi.d.ts +4 -3
- package/lib/typescript/utils/onairosApi.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +3 -0
- package/src/services/apiKeyService.ts +130 -0
- package/src/services/platformAuthService.ts +19 -8
- package/src/types/index.d.ts +5 -0
- package/src/utils/onairosApi.ts +17 -6
|
@@ -122,12 +122,12 @@ export declare const disconnectPlatform: (platform: string, username: string) =>
|
|
|
122
122
|
error?: string;
|
|
123
123
|
}>;
|
|
124
124
|
/**
|
|
125
|
-
* Store PIN for user (uses
|
|
126
|
-
* @param username Username
|
|
125
|
+
* Store PIN for user (uses JWT authentication and extracts username from JWT)
|
|
127
126
|
* @param pin User PIN
|
|
127
|
+
* @param username Optional username (if not provided, extracts from JWT)
|
|
128
128
|
* @returns Promise with result
|
|
129
129
|
*/
|
|
130
|
-
export declare const storePIN: (
|
|
130
|
+
export declare const storePIN: (pin: string, username?: string) => Promise<{
|
|
131
131
|
success: boolean;
|
|
132
132
|
error?: string;
|
|
133
133
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platformAuthService.d.ts","sourceRoot":"","sources":["../../../src/services/platformAuthService.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,6BAA6B,QAAa,QAAQ,IAAI,CAkBlE,CAAC;AAoCF;;GAEG;AACH,eAAO,MAAM,YAAY,aAAc,MAAM,KAAG,OAG/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,aAAc,MAAM,KAAG,MAGlD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,aAAc,MAAM,KAAG,MAGnD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,aAAoB,MAAM,YAAY,MAAM,YAAY,MAAM,KAAG,QAAQ,MAAM,GAAG,IAAI,CAsJ/G,CAAC;AAgEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,aAAoB,MAAM,aAAa,MAAM,KAAG,QAAQ,OAAO,CA4N7F,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAS,MAAM,KAAG,MAAM,GAAG,IAW1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAS,MAAM,KAAG,OAG7C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,QAAQ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgExF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,QAAQ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuCpG,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAa,QAAQ,OAAO,CA2D5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAS,MAAM,KAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAgCxG,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WAAY;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,SAYA,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,UAC5B,MAAM,aACH,OAAO,KAChB,QAAQ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmChE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,UACnB,MAAM,QACP,MAAM,aACF,OAAO,KAChB,QAAQ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8CxG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,UAChC,MAAM,aACH,OAAO,KAChB,QAAQ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgCnE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,aAAoB,MAAM,YAAY,MAAM,KAAG,QAAQ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgCzH,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"platformAuthService.d.ts","sourceRoot":"","sources":["../../../src/services/platformAuthService.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,10 +70,11 @@ export declare const updatePlatformConnections: (platforms: Record<string, any>,
|
|
|
70
70
|
debug: boolean;
|
|
71
71
|
}) => Promise<ApiResponse<any>>;
|
|
72
72
|
/**
|
|
73
|
-
* Store user PIN (uses JWT)
|
|
73
|
+
* Store user PIN (uses JWT and extracts username from JWT)
|
|
74
74
|
*/
|
|
75
|
-
export declare const storePIN: (
|
|
76
|
-
debug
|
|
75
|
+
export declare const storePIN: (pin: string, options?: {
|
|
76
|
+
debug?: boolean;
|
|
77
|
+
username?: string;
|
|
77
78
|
}) => Promise<ApiResponse<any>>;
|
|
78
79
|
/**
|
|
79
80
|
* Get current JWT token
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onairosApi.d.ts","sourceRoot":"","sources":["../../../src/utils/onairosApi.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKrD,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH;AAGD,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,eAAe,GACf,YAAY,GACZ,cAAc,GACd,kBAAkB,GAClB,eAAe,CAAC;AAGpB,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;gBAEF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAO9E;AAgND;;GAEG;AACH,eAAO,MAAM,mBAAmB,aACpB,MAAM;;MAEf,QAAQ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,gBACX,QAAQ,kBAAkB,CAAC;;MAEvC,QAAQ,YAAY;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,gBACV,QAAQ,kBAAkB,CAAC;;MAEvC,QAAQ,YAAY;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,MAAM,CAAA;CAAE,CAAC,CAQpE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,iBACT,MAAM;;;iBAEgB,MAAM;kBAAgB,MAAM;GAKjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,aAChB,MAAM;;MAEf,QAAQ,YAAY,GAAG,CAAC,CAI1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;MAExB,QAAQ,YAAY,GAAG,CAAC,CAI1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,cACzB,OAAO,MAAM,EAAE,GAAG,CAAC;;MAE7B,QAAQ,YAAY,GAAG,CAAC,CAK1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"onairosApi.d.ts","sourceRoot":"","sources":["../../../src/utils/onairosApi.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKrD,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH;AAGD,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,eAAe,GACf,YAAY,GACZ,cAAc,GACd,kBAAkB,GAClB,eAAe,CAAC;AAGpB,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;gBAEF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAO9E;AAgND;;GAEG;AACH,eAAO,MAAM,mBAAmB,aACpB,MAAM;;MAEf,QAAQ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,gBACX,QAAQ,kBAAkB,CAAC;;MAEvC,QAAQ,YAAY;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,gBACV,QAAQ,kBAAkB,CAAC;;MAEvC,QAAQ,YAAY;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,MAAM,CAAA;CAAE,CAAC,CAQpE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,iBACT,MAAM;;;iBAEgB,MAAM;kBAAgB,MAAM;GAKjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,aAChB,MAAM;;MAEf,QAAQ,YAAY,GAAG,CAAC,CAI1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;MAExB,QAAQ,YAAY,GAAG,CAAC,CAI1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,cACzB,OAAO,MAAM,EAAE,GAAG,CAAC;;MAE7B,QAAQ,YAAY,GAAG,CAAC,CAK1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,QACd,MAAM,YACF;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC9C,QAAQ,YAAY,GAAG,CAAC,CAiB1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,QAAQ,MAAM,GAAG,IAAI,CAEjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAO,OAE7C,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -352,6 +352,136 @@ export const clearJWT = async (): Promise<void> => {
|
|
|
352
352
|
}
|
|
353
353
|
};
|
|
354
354
|
|
|
355
|
+
/**
|
|
356
|
+
* React Native compatible base64 decoder
|
|
357
|
+
* @param str Base64 encoded string
|
|
358
|
+
* @returns Decoded string
|
|
359
|
+
*/
|
|
360
|
+
const base64Decode = (str: string): string => {
|
|
361
|
+
// Simple base64 decoding for React Native
|
|
362
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
363
|
+
let result = '';
|
|
364
|
+
let i = 0;
|
|
365
|
+
|
|
366
|
+
str = str.replace(/[^A-Za-z0-9+/]/g, '');
|
|
367
|
+
|
|
368
|
+
while (i < str.length) {
|
|
369
|
+
const a = chars.indexOf(str.charAt(i++));
|
|
370
|
+
const b = chars.indexOf(str.charAt(i++));
|
|
371
|
+
const c = chars.indexOf(str.charAt(i++));
|
|
372
|
+
const d = chars.indexOf(str.charAt(i++));
|
|
373
|
+
|
|
374
|
+
const bitmap = (a << 18) | (b << 12) | (c << 6) | d;
|
|
375
|
+
|
|
376
|
+
result += String.fromCharCode((bitmap >> 16) & 255);
|
|
377
|
+
if (c !== 64) result += String.fromCharCode((bitmap >> 8) & 255);
|
|
378
|
+
if (d !== 64) result += String.fromCharCode(bitmap & 255);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return result;
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Decode JWT token payload (React Native compatible)
|
|
386
|
+
* @param token JWT token string
|
|
387
|
+
* @returns Decoded payload or null if invalid
|
|
388
|
+
*/
|
|
389
|
+
export const decodeJWTPayload = (token: string): any => {
|
|
390
|
+
try {
|
|
391
|
+
// Split JWT token (header.payload.signature)
|
|
392
|
+
const parts = token.split('.');
|
|
393
|
+
if (parts.length !== 3) {
|
|
394
|
+
console.error('❌ Invalid JWT token format');
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// Decode payload (base64url to base64)
|
|
399
|
+
const payload = parts[1];
|
|
400
|
+
const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');
|
|
401
|
+
|
|
402
|
+
// Add padding if needed
|
|
403
|
+
const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, '=');
|
|
404
|
+
|
|
405
|
+
// Decode base64 to JSON using React Native compatible decoder
|
|
406
|
+
const decoded = base64Decode(padded);
|
|
407
|
+
return JSON.parse(decoded);
|
|
408
|
+
} catch (error) {
|
|
409
|
+
console.error('❌ Failed to decode JWT token:', error);
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Extract username from JWT token
|
|
416
|
+
* @param token JWT token (optional, uses stored token if not provided)
|
|
417
|
+
* @returns Username or null if not found
|
|
418
|
+
*/
|
|
419
|
+
export const extractUsernameFromJWT = (token?: string): string | null => {
|
|
420
|
+
try {
|
|
421
|
+
const jwtToken = token || userToken;
|
|
422
|
+
if (!jwtToken) {
|
|
423
|
+
console.warn('⚠️ No JWT token available for username extraction');
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
const payload = decodeJWTPayload(jwtToken);
|
|
428
|
+
if (!payload) {
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Try different possible username fields in order of preference
|
|
433
|
+
const username = payload.userName || payload.username || payload.userId || payload.email;
|
|
434
|
+
|
|
435
|
+
if (globalConfig?.enableLogging) {
|
|
436
|
+
console.log('👤 Extracted username from JWT:', username);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
return username || null;
|
|
440
|
+
} catch (error) {
|
|
441
|
+
console.error('❌ Failed to extract username from JWT:', error);
|
|
442
|
+
return null;
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Extract user data from JWT token
|
|
448
|
+
* @param token JWT token (optional, uses stored token if not provided)
|
|
449
|
+
* @returns User data object or null if not found
|
|
450
|
+
*/
|
|
451
|
+
export const extractUserDataFromJWT = (token?: string): any => {
|
|
452
|
+
try {
|
|
453
|
+
const jwtToken = token || userToken;
|
|
454
|
+
if (!jwtToken) {
|
|
455
|
+
console.warn('⚠️ No JWT token available for user data extraction');
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
const payload = decodeJWTPayload(jwtToken);
|
|
460
|
+
if (!payload) {
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
const userData = {
|
|
465
|
+
id: payload.id,
|
|
466
|
+
email: payload.email,
|
|
467
|
+
userId: payload.userId,
|
|
468
|
+
userName: payload.userName || payload.username,
|
|
469
|
+
verified: payload.verified,
|
|
470
|
+
iat: payload.iat,
|
|
471
|
+
exp: payload.exp
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
if (globalConfig?.enableLogging) {
|
|
475
|
+
console.log('👤 Extracted user data from JWT:', userData);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
return userData;
|
|
479
|
+
} catch (error) {
|
|
480
|
+
console.error('❌ Failed to extract user data from JWT:', error);
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
|
|
355
485
|
/**
|
|
356
486
|
* Check if user is authenticated with JWT token
|
|
357
487
|
* @returns True if user has valid JWT token
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Platform, Linking } from 'react-native';
|
|
2
2
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
3
3
|
import type { PlatformAuthConfig } from '../types';
|
|
4
|
-
import { makeDeveloperRequest, getApiConfig, storeJWT } from './apiKeyService';
|
|
4
|
+
import { makeDeveloperRequest, getApiConfig, storeJWT, extractUsernameFromJWT } from './apiKeyService';
|
|
5
5
|
|
|
6
6
|
// 🔑 CRITICAL: Use two-tier authentication system
|
|
7
7
|
// - Developer API key for email verification requests
|
|
@@ -989,23 +989,34 @@ export const disconnectPlatform = async (platform: string, username: string): Pr
|
|
|
989
989
|
};
|
|
990
990
|
|
|
991
991
|
/**
|
|
992
|
-
* Store PIN for user (uses
|
|
993
|
-
* @param username Username
|
|
992
|
+
* Store PIN for user (uses JWT authentication and extracts username from JWT)
|
|
994
993
|
* @param pin User PIN
|
|
994
|
+
* @param username Optional username (if not provided, extracts from JWT)
|
|
995
995
|
* @returns Promise with result
|
|
996
996
|
*/
|
|
997
|
-
export const storePIN = async (
|
|
997
|
+
export const storePIN = async (pin: string, username?: string): Promise<{ success: boolean; error?: string }> => {
|
|
998
998
|
try {
|
|
999
|
-
|
|
999
|
+
// Extract username from JWT if not provided
|
|
1000
|
+
const userToStore = username || extractUsernameFromJWT();
|
|
1000
1001
|
|
|
1001
|
-
|
|
1002
|
+
if (!userToStore) {
|
|
1003
|
+
console.error('❌ No username available - either provide username or ensure JWT token is valid');
|
|
1004
|
+
return {
|
|
1005
|
+
success: false,
|
|
1006
|
+
error: 'No username available for PIN storage'
|
|
1007
|
+
};
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
console.log('🔐 Storing PIN for user:', userToStore);
|
|
1011
|
+
|
|
1012
|
+
// Make authenticated request to store PIN (using developer API key for now)
|
|
1002
1013
|
const response = await makeDeveloperRequest('/store-pin/web', {
|
|
1003
1014
|
method: 'POST',
|
|
1004
1015
|
headers: {
|
|
1005
1016
|
'Content-Type': 'application/json',
|
|
1006
1017
|
},
|
|
1007
1018
|
body: JSON.stringify({
|
|
1008
|
-
username,
|
|
1019
|
+
username: userToStore,
|
|
1009
1020
|
pin
|
|
1010
1021
|
})
|
|
1011
1022
|
});
|
|
@@ -1013,7 +1024,7 @@ export const storePIN = async (username: string, pin: string): Promise<{ success
|
|
|
1013
1024
|
const data = await response.json();
|
|
1014
1025
|
|
|
1015
1026
|
if (response.ok && data.success) {
|
|
1016
|
-
console.log('✅ PIN stored successfully');
|
|
1027
|
+
console.log('✅ PIN stored successfully for user:', userToStore);
|
|
1017
1028
|
return { success: true };
|
|
1018
1029
|
} else {
|
|
1019
1030
|
console.error('❌ Failed to store PIN:', data.error);
|
package/src/types/index.d.ts
CHANGED
|
@@ -243,6 +243,11 @@ declare module '@onairos/react-native' {
|
|
|
243
243
|
// SDK Initialization Functions
|
|
244
244
|
export function initializeApiKey(config: any): Promise<void>;
|
|
245
245
|
export const ADMIN_API_KEY: string;
|
|
246
|
+
|
|
247
|
+
// JWT Token Functions
|
|
248
|
+
export function extractUsernameFromJWT(token?: string): string | null;
|
|
249
|
+
export function extractUserDataFromJWT(token?: string): any;
|
|
250
|
+
export function decodeJWTPayload(token: string): any;
|
|
246
251
|
|
|
247
252
|
// Programmatic Flow
|
|
248
253
|
export function executeOnairosFlow(config: any): Promise<any>;
|
package/src/utils/onairosApi.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Platform } from 'react-native';
|
|
|
2
2
|
import NetInfo from '@react-native-community/netinfo';
|
|
3
3
|
import { OnairosCredentials } from './secureStorage';
|
|
4
4
|
import { logDebug } from './debugHelper';
|
|
5
|
-
import { getJWT, makeUserRequest, makeDeveloperRequest, isUserAuthenticated } from '../services/apiKeyService';
|
|
5
|
+
import { getJWT, makeUserRequest, makeDeveloperRequest, isUserAuthenticated, extractUsernameFromJWT } from '../services/apiKeyService';
|
|
6
6
|
|
|
7
7
|
// API response types
|
|
8
8
|
export interface ApiResponse<T = any> {
|
|
@@ -352,16 +352,27 @@ export const updatePlatformConnections = async (
|
|
|
352
352
|
};
|
|
353
353
|
|
|
354
354
|
/**
|
|
355
|
-
* Store user PIN (uses JWT)
|
|
355
|
+
* Store user PIN (uses JWT and extracts username from JWT)
|
|
356
356
|
*/
|
|
357
357
|
export const storePIN = async (
|
|
358
|
-
username: string,
|
|
359
358
|
pin: string,
|
|
360
|
-
options
|
|
359
|
+
options: { debug?: boolean; username?: string } = {}
|
|
361
360
|
): Promise<ApiResponse<any>> => {
|
|
361
|
+
const { debug = false, username } = options;
|
|
362
|
+
|
|
363
|
+
// Extract username from JWT if not provided
|
|
364
|
+
const userToStore = username || extractUsernameFromJWT();
|
|
365
|
+
|
|
366
|
+
if (!userToStore) {
|
|
367
|
+
throw new ApiError(
|
|
368
|
+
'No username available - either provide username or ensure JWT token is valid',
|
|
369
|
+
'auth_error'
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
|
|
362
373
|
return makeUserApiRequest('store-pin/mobile', 'POST', {
|
|
363
|
-
data: { username, pin },
|
|
364
|
-
debug
|
|
374
|
+
data: { username: userToStore, pin },
|
|
375
|
+
debug,
|
|
365
376
|
});
|
|
366
377
|
};
|
|
367
378
|
|