react-native-nitro-auth 0.3.0 → 0.5.0

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 (100) hide show
  1. package/README.md +602 -57
  2. package/android/build.gradle +8 -2
  3. package/android/gradle.properties +2 -2
  4. package/android/src/main/cpp/JniOnLoad.cpp +1 -0
  5. package/android/src/main/cpp/PlatformAuth+Android.cpp +37 -4
  6. package/android/src/main/java/com/auth/AuthAdapter.kt +586 -69
  7. package/android/src/main/java/com/auth/GoogleSignInActivity.kt +17 -4
  8. package/android/src/main/java/com/auth/MicrosoftAuthActivity.kt +25 -0
  9. package/app.plugin.js +115 -5
  10. package/cpp/AuthCache.cpp +72 -19
  11. package/cpp/HybridAuth.cpp +20 -0
  12. package/cpp/HybridAuth.hpp +1 -0
  13. package/ios/AuthAdapter.swift +470 -53
  14. package/ios/KeychainStore.swift +43 -0
  15. package/ios/PlatformAuth+iOS.mm +34 -3
  16. package/lib/commonjs/Auth.web.js +262 -10
  17. package/lib/commonjs/Auth.web.js.map +1 -1
  18. package/lib/commonjs/index.js +7 -11
  19. package/lib/commonjs/index.js.map +1 -1
  20. package/lib/commonjs/service.js +130 -1
  21. package/lib/commonjs/service.js.map +1 -1
  22. package/lib/commonjs/service.web.js +32 -6
  23. package/lib/commonjs/service.web.js.map +1 -1
  24. package/lib/commonjs/ui/social-button.js +46 -8
  25. package/lib/commonjs/ui/social-button.js.map +1 -1
  26. package/lib/commonjs/ui/social-button.web.js +46 -8
  27. package/lib/commonjs/ui/social-button.web.js.map +1 -1
  28. package/lib/commonjs/use-auth.js +27 -2
  29. package/lib/commonjs/use-auth.js.map +1 -1
  30. package/lib/commonjs/utils/logger.js +1 -1
  31. package/lib/commonjs/utils/logger.js.map +1 -1
  32. package/lib/module/Auth.web.js +262 -10
  33. package/lib/module/Auth.web.js.map +1 -1
  34. package/lib/module/index.js +1 -1
  35. package/lib/module/index.js.map +1 -1
  36. package/lib/module/service.js +130 -1
  37. package/lib/module/service.js.map +1 -1
  38. package/lib/module/service.web.js +32 -1
  39. package/lib/module/service.web.js.map +1 -1
  40. package/lib/module/ui/social-button.js +47 -9
  41. package/lib/module/ui/social-button.js.map +1 -1
  42. package/lib/module/ui/social-button.web.js +47 -9
  43. package/lib/module/ui/social-button.web.js.map +1 -1
  44. package/lib/module/use-auth.js +27 -2
  45. package/lib/module/use-auth.js.map +1 -1
  46. package/lib/module/utils/logger.js +1 -1
  47. package/lib/module/utils/logger.js.map +1 -1
  48. package/lib/typescript/commonjs/Auth.nitro.d.ts +10 -2
  49. package/lib/typescript/commonjs/Auth.nitro.d.ts.map +1 -1
  50. package/lib/typescript/commonjs/Auth.web.d.ts +9 -1
  51. package/lib/typescript/commonjs/Auth.web.d.ts.map +1 -1
  52. package/lib/typescript/commonjs/AuthStorage.nitro.d.ts +7 -0
  53. package/lib/typescript/commonjs/AuthStorage.nitro.d.ts.map +1 -1
  54. package/lib/typescript/commonjs/index.d.ts +2 -2
  55. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/service.d.ts +8 -1
  57. package/lib/typescript/commonjs/service.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/service.web.d.ts +25 -1
  59. package/lib/typescript/commonjs/service.web.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/ui/social-button.d.ts.map +1 -1
  61. package/lib/typescript/commonjs/ui/social-button.web.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/use-auth.d.ts +13 -8
  63. package/lib/typescript/commonjs/use-auth.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/utils/logger.d.ts +5 -5
  65. package/lib/typescript/commonjs/utils/logger.d.ts.map +1 -1
  66. package/lib/typescript/module/Auth.nitro.d.ts +10 -2
  67. package/lib/typescript/module/Auth.nitro.d.ts.map +1 -1
  68. package/lib/typescript/module/Auth.web.d.ts +9 -1
  69. package/lib/typescript/module/Auth.web.d.ts.map +1 -1
  70. package/lib/typescript/module/AuthStorage.nitro.d.ts +7 -0
  71. package/lib/typescript/module/AuthStorage.nitro.d.ts.map +1 -1
  72. package/lib/typescript/module/index.d.ts +2 -2
  73. package/lib/typescript/module/index.d.ts.map +1 -1
  74. package/lib/typescript/module/service.d.ts +8 -1
  75. package/lib/typescript/module/service.d.ts.map +1 -1
  76. package/lib/typescript/module/service.web.d.ts +25 -1
  77. package/lib/typescript/module/service.web.d.ts.map +1 -1
  78. package/lib/typescript/module/ui/social-button.d.ts.map +1 -1
  79. package/lib/typescript/module/ui/social-button.web.d.ts.map +1 -1
  80. package/lib/typescript/module/use-auth.d.ts +13 -8
  81. package/lib/typescript/module/use-auth.d.ts.map +1 -1
  82. package/lib/typescript/module/utils/logger.d.ts +5 -5
  83. package/lib/typescript/module/utils/logger.d.ts.map +1 -1
  84. package/nitrogen/generated/shared/c++/AuthProvider.hpp +4 -0
  85. package/nitrogen/generated/shared/c++/HybridAuthSpec.cpp +1 -0
  86. package/nitrogen/generated/shared/c++/HybridAuthSpec.hpp +1 -0
  87. package/nitrogen/generated/shared/c++/LoginOptions.hpp +17 -3
  88. package/nitrogen/generated/shared/c++/MicrosoftPrompt.hpp +84 -0
  89. package/package.json +13 -10
  90. package/react-native-nitro-auth.podspec +4 -2
  91. package/src/Auth.nitro.ts +17 -2
  92. package/src/Auth.web.ts +388 -22
  93. package/src/AuthStorage.nitro.ts +11 -2
  94. package/src/index.ts +2 -2
  95. package/src/service.ts +168 -2
  96. package/src/service.web.ts +41 -1
  97. package/src/ui/social-button.tsx +34 -4
  98. package/src/ui/social-button.web.tsx +34 -4
  99. package/src/use-auth.ts +37 -3
  100. package/src/utils/logger.ts +5 -5
@@ -26,14 +26,22 @@ declare class AuthWeb implements Auth {
26
26
  private mapError;
27
27
  private loginGoogle;
28
28
  private decodeGoogleJwt;
29
+ private loginMicrosoft;
30
+ private generateCodeVerifier;
31
+ private generateCodeChallenge;
32
+ private base64UrlEncode;
33
+ private exchangeMicrosoftCodeForTokens;
34
+ private getMicrosoftAuthBaseUrl;
35
+ private decodeMicrosoftJwt;
29
36
  private loginApple;
37
+ silentRestore(): Promise<void>;
30
38
  logout(): void;
31
39
  private updateUser;
32
40
  setLoggingEnabled(enabled: boolean): void;
33
41
  setStorageAdapter(adapter: AuthStorageAdapter | undefined): void;
34
42
  name: string;
35
43
  dispose(): void;
36
- equals(other: any): boolean;
44
+ equals(other: unknown): boolean;
37
45
  }
38
46
  export declare const AuthModule: AuthWeb;
39
47
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.web.d.ts","sourceRoot":"","sources":["../../../src/Auth.web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAgB9D,cAAM,OAAQ,YAAW,IAAI;IAC3B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,eAAe,CAAiC;;IAMxD,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,eAAe;IAQvB,IAAI,WAAW,IAAI,QAAQ,GAAG,SAAS,CAEtC;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,kBAAkB,CAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,GAC7C,MAAM,IAAI;IAQb,iBAAiB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI;IAOrE,OAAO,CAAC,MAAM;IAIR,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7C,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAW7C,YAAY,IAAI,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAmBzE,OAAO,CAAC,QAAQ;YAoBF,WAAW;IA8FzB,OAAO,CAAC,eAAe;YAcT,UAAU;IA+CxB,MAAM,IAAI,IAAI;IAQd,OAAO,CAAC,UAAU;IAUlB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI;IAQhE,IAAI,SAAU;IACd,OAAO;IACP,MAAM,CAAC,KAAK,EAAE,GAAG;CAGlB;AAED,eAAO,MAAM,UAAU,SAAgB,CAAC"}
1
+ {"version":3,"file":"Auth.web.d.ts","sourceRoot":"","sources":["../../../src/Auth.web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA8B9D,cAAM,OAAQ,YAAW,IAAI;IAC3B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,eAAe,CAAiC;;IAMxD,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,eAAe;IAQvB,IAAI,WAAW,IAAI,QAAQ,GAAG,SAAS,CAEtC;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,kBAAkB,CAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,GAC7C,MAAM,IAAI;IAQb,iBAAiB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI;IAOrE,OAAO,CAAC,MAAM;IAIR,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB9C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7C,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAW7C,YAAY,IAAI,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA8FzE,OAAO,CAAC,QAAQ;YAgBF,WAAW;IA8FzB,OAAO,CAAC,eAAe;YAcT,cAAc;IAwH5B,OAAO,CAAC,oBAAoB;YAMd,qBAAqB;IAOnC,OAAO,CAAC,eAAe;YAKT,8BAA8B;IAsF5C,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,kBAAkB;YAaZ,UAAU;IA+ClB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAcpC,MAAM,IAAI,IAAI;IASd,OAAO,CAAC,UAAU;IAUlB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI;IAQhE,IAAI,SAAU;IACd,OAAO;IACP,MAAM,CAAC,KAAK,EAAE,OAAO;CAGtB;AAED,eAAO,MAAM,UAAU,SAAgB,CAAC"}
@@ -1,4 +1,11 @@
1
1
  import type { HybridObject } from "react-native-nitro-modules";
2
+ /**
3
+ * Custom storage adapter for persisting auth state.
4
+ *
5
+ * On native platforms, this must be a native HybridObject (Swift/Kotlin).
6
+ * For JS-based storage (AsyncStorage, MMKV), use the JS wrapper approach
7
+ * documented in the README.
8
+ */
2
9
  export interface AuthStorageAdapter extends HybridObject<{
3
10
  ios: "c++";
4
11
  android: "c++";
@@ -1 +1 @@
1
- {"version":3,"file":"AuthStorage.nitro.d.ts","sourceRoot":"","sources":["../../../src/AuthStorage.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,kBACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IACpD;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
1
+ {"version":3,"file":"AuthStorage.nitro.d.ts","sourceRoot":"","sources":["../../../src/AuthStorage.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAmB,SAAQ,YAAY,CAAC;IACvD,GAAG,EAAE,KAAK,CAAC;IACX,OAAO,EAAE,KAAK,CAAC;CAChB,CAAC;IACA;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
@@ -1,6 +1,6 @@
1
1
  export * from "./Auth.nitro";
2
2
  export * from "./AuthStorage.nitro";
3
3
  export * from "./ui/social-button";
4
- export * from "./use-auth";
5
- export { AuthService } from "./service";
4
+ export { useAuth, type UseAuthReturn } from "./use-auth";
5
+ export { AuthService, type JSStorageAdapter } from "./service";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
@@ -1,3 +1,10 @@
1
1
  import type { Auth } from "./Auth.nitro";
2
- export declare const AuthService: Auth;
2
+ export interface JSStorageAdapter {
3
+ save(key: string, value: string): void | Promise<void>;
4
+ load(key: string): string | undefined | Promise<string | undefined>;
5
+ remove(key: string): void | Promise<void>;
6
+ }
7
+ export declare const AuthService: Auth & {
8
+ setJSStorageAdapter(adapter: JSStorageAdapter | undefined): void;
9
+ };
3
10
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,WAAW,MAAgD,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,IAAI,EAKL,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAmCD,eAAO,MAAM,WAAW,EAAE,IAAI,GAAG;IAC/B,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC;CAoHlE,CAAC"}
@@ -1,2 +1,26 @@
1
- export { AuthModule as AuthService } from "./Auth.web";
1
+ import type { AuthStorageAdapter } from "./AuthStorage.nitro";
2
+ import type { JSStorageAdapter } from "./service";
3
+ export declare const AuthService: {
4
+ name: string;
5
+ currentUser: import("./Auth.nitro").AuthUser | undefined;
6
+ grantedScopes: string[];
7
+ hasPlayServices: boolean;
8
+ login: (provider: import("./Auth.nitro").AuthProvider, options?: import("./Auth.nitro").LoginOptions) => Promise<void>;
9
+ logout: () => void;
10
+ requestScopes: (scopes: string[]) => Promise<void>;
11
+ revokeScopes: (scopes: string[]) => Promise<void>;
12
+ getAccessToken: () => Promise<string | undefined>;
13
+ refreshToken: () => Promise<{
14
+ accessToken?: string;
15
+ idToken?: string;
16
+ }>;
17
+ silentRestore: () => Promise<void>;
18
+ onAuthStateChanged: (callback: (user: import("./Auth.nitro").AuthUser | undefined) => void) => () => void;
19
+ onTokensRefreshed: (callback: (tokens: import("./Auth.nitro").AuthTokens) => void) => () => void;
20
+ setLoggingEnabled: (enabled: boolean) => void;
21
+ setStorageAdapter: (adapter: AuthStorageAdapter | undefined) => void;
22
+ dispose: () => void;
23
+ equals: (other: unknown) => boolean;
24
+ setJSStorageAdapter(adapter: JSStorageAdapter | undefined): void;
25
+ };
2
26
  //# sourceMappingURL=service.web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.web.d.ts","sourceRoot":"","sources":["../../../src/service.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"service.web.d.ts","sourceRoot":"","sources":["../../../src/service.web.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD,eAAO,MAAM,WAAW;;;;;;;;;;;mBAqCw0H,CAAC;eAAiB,CAAC;;;;;;;;;iCAJp1H,gBAAgB,GAAG,SAAS,GAAG,IAAI;CAGjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"social-button.d.ts","sourceRoot":"","sources":["../../../../src/ui/social-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAKL,SAAS,EACT,SAAS,EAEV,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAQ,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAElE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAOD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+EpD,CAAC"}
1
+ {"version":3,"file":"social-button.d.ts","sourceRoot":"","sources":["../../../../src/ui/social-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAKL,SAAS,EACT,SAAS,EAEV,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAQ,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAElE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAOD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAoGpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"social-button.web.d.ts","sourceRoot":"","sources":["../../../../src/ui/social-button.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAKL,SAAS,EACT,SAAS,EAEV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG5D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+EpD,CAAC"}
1
+ {"version":3,"file":"social-button.web.d.ts","sourceRoot":"","sources":["../../../../src/ui/social-button.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAKL,SAAS,EACT,SAAS,EAEV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG5D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAoGpD,CAAC"}
@@ -1,15 +1,20 @@
1
1
  import type { AuthUser, AuthProvider, LoginOptions, AuthTokens } from "./Auth.nitro";
2
- export declare function useAuth(): {
2
+ interface AuthState {
3
+ user: AuthUser | undefined;
4
+ scopes: string[];
5
+ loading: boolean;
6
+ error: Error | undefined;
7
+ }
8
+ export interface UseAuthReturn extends AuthState {
3
9
  hasPlayServices: boolean;
4
10
  login: (provider: AuthProvider, options?: LoginOptions) => Promise<void>;
5
11
  logout: () => void;
6
- requestScopes: (newScopes: string[]) => Promise<void>;
7
- revokeScopes: (scopesToRevoke: string[]) => Promise<void>;
12
+ requestScopes: (scopes: string[]) => Promise<void>;
13
+ revokeScopes: (scopes: string[]) => Promise<void>;
8
14
  getAccessToken: () => Promise<string | undefined>;
9
15
  refreshToken: () => Promise<AuthTokens>;
10
- user: AuthUser | undefined;
11
- scopes: string[];
12
- loading: boolean;
13
- error: Error | undefined;
14
- };
16
+ silentRestore: () => Promise<void>;
17
+ }
18
+ export declare function useAuth(): UseAuthReturn;
19
+ export {};
15
20
  //# sourceMappingURL=use-auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-auth.d.ts","sourceRoot":"","sources":["../../../src/use-auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACX,MAAM,cAAc,CAAC;AAStB,wBAAgB,OAAO;;sBASF,YAAY,YAAY,YAAY;;+BAiCH,MAAM,EAAE;mCAqBJ,MAAM,EAAE;;;UArE1D,QAAQ,GAAG,SAAS;YAClB,MAAM,EAAE;aACP,OAAO;WACT,KAAK,GAAG,SAAS;EAiJzB"}
1
+ {"version":3,"file":"use-auth.d.ts","sourceRoot":"","sources":["../../../src/use-auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,YAAY,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,wBAAgB,OAAO,IAAI,aAAa,CAqKvC"}
@@ -1,8 +1,8 @@
1
1
  export declare const logger: {
2
- setEnabled: (value: boolean) => void;
3
- log: (...args: any[]) => false | void;
4
- warn: (...args: any[]) => false | void;
5
- error: (...args: any[]) => false | void;
6
- debug: (...args: any[]) => false | void;
2
+ setEnabled(value: boolean): void;
3
+ log: (...args: unknown[]) => false | void;
4
+ warn: (...args: unknown[]) => false | void;
5
+ error: (...args: unknown[]) => false | void;
6
+ debug: (...args: unknown[]) => false | void;
7
7
  };
8
8
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;wBACG,OAAO;mBAGZ,GAAG,EAAE;oBACJ,GAAG,EAAE;qBACJ,GAAG,EAAE;qBACL,GAAG,EAAE;CACvB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;sBACC,OAAO,GAAG,IAAI;mBAGjB,OAAO,EAAE;oBACR,OAAO,EAAE;qBACR,OAAO,EAAE;qBACT,OAAO,EAAE;CAC3B,CAAC"}
@@ -31,6 +31,7 @@ namespace margelo::nitro::NitroAuth {
31
31
  enum class AuthProvider {
32
32
  GOOGLE SWIFT_NAME(google) = 0,
33
33
  APPLE SWIFT_NAME(apple) = 1,
34
+ MICROSOFT SWIFT_NAME(microsoft) = 2,
34
35
  } CLOSED_ENUM;
35
36
 
36
37
  } // namespace margelo::nitro::NitroAuth
@@ -45,6 +46,7 @@ namespace margelo::nitro {
45
46
  switch (hashString(unionValue.c_str(), unionValue.size())) {
46
47
  case hashString("google"): return margelo::nitro::NitroAuth::AuthProvider::GOOGLE;
47
48
  case hashString("apple"): return margelo::nitro::NitroAuth::AuthProvider::APPLE;
49
+ case hashString("microsoft"): return margelo::nitro::NitroAuth::AuthProvider::MICROSOFT;
48
50
  default: [[unlikely]]
49
51
  throw std::invalid_argument("Cannot convert \"" + unionValue + "\" to enum AuthProvider - invalid value!");
50
52
  }
@@ -53,6 +55,7 @@ namespace margelo::nitro {
53
55
  switch (arg) {
54
56
  case margelo::nitro::NitroAuth::AuthProvider::GOOGLE: return JSIConverter<std::string>::toJSI(runtime, "google");
55
57
  case margelo::nitro::NitroAuth::AuthProvider::APPLE: return JSIConverter<std::string>::toJSI(runtime, "apple");
58
+ case margelo::nitro::NitroAuth::AuthProvider::MICROSOFT: return JSIConverter<std::string>::toJSI(runtime, "microsoft");
56
59
  default: [[unlikely]]
57
60
  throw std::invalid_argument("Cannot convert AuthProvider to JS - invalid value: "
58
61
  + std::to_string(static_cast<int>(arg)) + "!");
@@ -66,6 +69,7 @@ namespace margelo::nitro {
66
69
  switch (hashString(unionValue.c_str(), unionValue.size())) {
67
70
  case hashString("google"):
68
71
  case hashString("apple"):
72
+ case hashString("microsoft"):
69
73
  return true;
70
74
  default:
71
75
  return false;
@@ -23,6 +23,7 @@ namespace margelo::nitro::NitroAuth {
23
23
  prototype.registerHybridMethod("getAccessToken", &HybridAuthSpec::getAccessToken);
24
24
  prototype.registerHybridMethod("refreshToken", &HybridAuthSpec::refreshToken);
25
25
  prototype.registerHybridMethod("logout", &HybridAuthSpec::logout);
26
+ prototype.registerHybridMethod("silentRestore", &HybridAuthSpec::silentRestore);
26
27
  prototype.registerHybridMethod("onAuthStateChanged", &HybridAuthSpec::onAuthStateChanged);
27
28
  prototype.registerHybridMethod("onTokensRefreshed", &HybridAuthSpec::onTokensRefreshed);
28
29
  prototype.registerHybridMethod("setLoggingEnabled", &HybridAuthSpec::setLoggingEnabled);
@@ -75,6 +75,7 @@ namespace margelo::nitro::NitroAuth {
75
75
  virtual std::shared_ptr<Promise<std::optional<std::string>>> getAccessToken() = 0;
76
76
  virtual std::shared_ptr<Promise<AuthTokens>> refreshToken() = 0;
77
77
  virtual void logout() = 0;
78
+ virtual std::shared_ptr<Promise<void>> silentRestore() = 0;
78
79
  virtual std::function<void()> onAuthStateChanged(const std::function<void(const std::optional<AuthUser>& /* user */)>& callback) = 0;
79
80
  virtual std::function<void()> onTokensRefreshed(const std::function<void(const AuthTokens& /* tokens */)>& callback) = 0;
80
81
  virtual void setLoggingEnabled(bool enabled) = 0;
@@ -28,11 +28,13 @@
28
28
  #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
29
29
  #endif
30
30
 
31
-
31
+ // Forward declaration of `MicrosoftPrompt` to properly resolve imports.
32
+ namespace margelo::nitro::NitroAuth { enum class MicrosoftPrompt; }
32
33
 
33
34
  #include <string>
34
35
  #include <vector>
35
36
  #include <optional>
37
+ #include "MicrosoftPrompt.hpp"
36
38
 
37
39
  namespace margelo::nitro::NitroAuth {
38
40
 
@@ -45,10 +47,13 @@ namespace margelo::nitro::NitroAuth {
45
47
  std::optional<std::string> loginHint SWIFT_PRIVATE;
46
48
  std::optional<bool> useOneTap SWIFT_PRIVATE;
47
49
  std::optional<bool> useSheet SWIFT_PRIVATE;
50
+ std::optional<bool> forceAccountPicker SWIFT_PRIVATE;
51
+ std::optional<std::string> tenant SWIFT_PRIVATE;
52
+ std::optional<MicrosoftPrompt> prompt SWIFT_PRIVATE;
48
53
 
49
54
  public:
50
55
  LoginOptions() = default;
51
- explicit LoginOptions(std::optional<std::vector<std::string>> scopes, std::optional<std::string> loginHint, std::optional<bool> useOneTap, std::optional<bool> useSheet): scopes(scopes), loginHint(loginHint), useOneTap(useOneTap), useSheet(useSheet) {}
56
+ explicit LoginOptions(std::optional<std::vector<std::string>> scopes, std::optional<std::string> loginHint, std::optional<bool> useOneTap, std::optional<bool> useSheet, std::optional<bool> forceAccountPicker, std::optional<std::string> tenant, std::optional<MicrosoftPrompt> prompt): scopes(scopes), loginHint(loginHint), useOneTap(useOneTap), useSheet(useSheet), forceAccountPicker(forceAccountPicker), tenant(tenant), prompt(prompt) {}
52
57
 
53
58
  public:
54
59
  friend bool operator==(const LoginOptions& lhs, const LoginOptions& rhs) = default;
@@ -67,7 +72,10 @@ namespace margelo::nitro {
67
72
  JSIConverter<std::optional<std::vector<std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "scopes"))),
68
73
  JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loginHint"))),
69
74
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useOneTap"))),
70
- JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useSheet")))
75
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useSheet"))),
76
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker"))),
77
+ JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "tenant"))),
78
+ JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "prompt")))
71
79
  );
72
80
  }
73
81
  static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::NitroAuth::LoginOptions& arg) {
@@ -76,6 +84,9 @@ namespace margelo::nitro {
76
84
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "loginHint"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.loginHint));
77
85
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "useOneTap"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useOneTap));
78
86
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "useSheet"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useSheet));
87
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.forceAccountPicker));
88
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "tenant"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.tenant));
89
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "prompt"), JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::toJSI(runtime, arg.prompt));
79
90
  return obj;
80
91
  }
81
92
  static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
@@ -90,6 +101,9 @@ namespace margelo::nitro {
90
101
  if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loginHint")))) return false;
91
102
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useOneTap")))) return false;
92
103
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useSheet")))) return false;
104
+ if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker")))) return false;
105
+ if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "tenant")))) return false;
106
+ if (!JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "prompt")))) return false;
93
107
  return true;
94
108
  }
95
109
  };
@@ -0,0 +1,84 @@
1
+ ///
2
+ /// MicrosoftPrompt.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/NitroHash.hpp>)
11
+ #include <NitroModules/NitroHash.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+ #if __has_include(<NitroModules/JSIConverter.hpp>)
16
+ #include <NitroModules/JSIConverter.hpp>
17
+ #else
18
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
19
+ #endif
20
+ #if __has_include(<NitroModules/NitroDefines.hpp>)
21
+ #include <NitroModules/NitroDefines.hpp>
22
+ #else
23
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
24
+ #endif
25
+
26
+ namespace margelo::nitro::NitroAuth {
27
+
28
+ /**
29
+ * An enum which can be represented as a JavaScript union (MicrosoftPrompt).
30
+ */
31
+ enum class MicrosoftPrompt {
32
+ LOGIN SWIFT_NAME(login) = 0,
33
+ CONSENT SWIFT_NAME(consent) = 1,
34
+ SELECT_ACCOUNT SWIFT_NAME(selectAccount) = 2,
35
+ NONE SWIFT_NAME(none) = 3,
36
+ } CLOSED_ENUM;
37
+
38
+ } // namespace margelo::nitro::NitroAuth
39
+
40
+ namespace margelo::nitro {
41
+
42
+ // C++ MicrosoftPrompt <> JS MicrosoftPrompt (union)
43
+ template <>
44
+ struct JSIConverter<margelo::nitro::NitroAuth::MicrosoftPrompt> final {
45
+ static inline margelo::nitro::NitroAuth::MicrosoftPrompt fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
46
+ std::string unionValue = JSIConverter<std::string>::fromJSI(runtime, arg);
47
+ switch (hashString(unionValue.c_str(), unionValue.size())) {
48
+ case hashString("login"): return margelo::nitro::NitroAuth::MicrosoftPrompt::LOGIN;
49
+ case hashString("consent"): return margelo::nitro::NitroAuth::MicrosoftPrompt::CONSENT;
50
+ case hashString("select_account"): return margelo::nitro::NitroAuth::MicrosoftPrompt::SELECT_ACCOUNT;
51
+ case hashString("none"): return margelo::nitro::NitroAuth::MicrosoftPrompt::NONE;
52
+ default: [[unlikely]]
53
+ throw std::invalid_argument("Cannot convert \"" + unionValue + "\" to enum MicrosoftPrompt - invalid value!");
54
+ }
55
+ }
56
+ static inline jsi::Value toJSI(jsi::Runtime& runtime, margelo::nitro::NitroAuth::MicrosoftPrompt arg) {
57
+ switch (arg) {
58
+ case margelo::nitro::NitroAuth::MicrosoftPrompt::LOGIN: return JSIConverter<std::string>::toJSI(runtime, "login");
59
+ case margelo::nitro::NitroAuth::MicrosoftPrompt::CONSENT: return JSIConverter<std::string>::toJSI(runtime, "consent");
60
+ case margelo::nitro::NitroAuth::MicrosoftPrompt::SELECT_ACCOUNT: return JSIConverter<std::string>::toJSI(runtime, "select_account");
61
+ case margelo::nitro::NitroAuth::MicrosoftPrompt::NONE: return JSIConverter<std::string>::toJSI(runtime, "none");
62
+ default: [[unlikely]]
63
+ throw std::invalid_argument("Cannot convert MicrosoftPrompt to JS - invalid value: "
64
+ + std::to_string(static_cast<int>(arg)) + "!");
65
+ }
66
+ }
67
+ static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
68
+ if (!value.isString()) {
69
+ return false;
70
+ }
71
+ std::string unionValue = JSIConverter<std::string>::fromJSI(runtime, value);
72
+ switch (hashString(unionValue.c_str(), unionValue.size())) {
73
+ case hashString("login"):
74
+ case hashString("consent"):
75
+ case hashString("select_account"):
76
+ case hashString("none"):
77
+ return true;
78
+ default:
79
+ return false;
80
+ }
81
+ }
82
+ };
83
+
84
+ } // namespace margelo::nitro
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-nitro-auth",
3
- "version": "0.3.0",
4
- "description": "High-performance authentication library for React Native with Google Sign-In and Apple Sign-In support, powered by Nitro Modules (JSI)",
3
+ "version": "0.5.0",
4
+ "description": "High-performance authentication library for React Native with Google Sign-In, Apple Sign-In, and Microsoft Sign-In support, powered by Nitro Modules (JSI)",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
7
7
  "types": "lib/typescript/commonjs/index.d.ts",
@@ -47,6 +47,8 @@
47
47
  "authentication",
48
48
  "google-sign-in",
49
49
  "apple-sign-in",
50
+ "microsoft-sign-in",
51
+ "azure-ad",
50
52
  "social-login",
51
53
  "nitro",
52
54
  "jsi",
@@ -77,14 +79,15 @@
77
79
  },
78
80
  "devDependencies": {
79
81
  "@expo/config-plugins": "^54.0.4",
80
- "@react-native/babel-preset": "^0.81.0",
81
- "@testing-library/react": "^16.1.0",
82
- "@types/node": "^22.14.0",
83
- "jest-environment-jsdom": "^29.7.0",
84
- "react": "19.1.0",
85
- "react-native": "0.81.5",
86
- "react-native-nitro-modules": "^0.33.0",
87
- "react-native-web": "^0.21.2"
82
+ "@react-native/babel-preset": "^0.83.1",
83
+ "@testing-library/react": "^16.3.2",
84
+ "@types/node": "^25.2.1",
85
+ "jest-environment-jsdom": "^30.2.0",
86
+ "react": "19.2.4",
87
+ "react-native": "0.83.1",
88
+ "react-native-nitro-modules": "^0.33.7",
89
+ "react-native-web": "^0.21.2",
90
+ "typescript": "^5.9.3"
88
91
  },
89
92
  "peerDependencies": {
90
93
  "react": "*",
@@ -10,10 +10,10 @@ Pod::Spec.new do |s|
10
10
  s.license = package["license"]
11
11
  s.authors = package["author"]
12
12
 
13
- s.platforms = { :ios => "13.0" }
13
+ s.platforms = { :ios => "15.1" }
14
14
  s.source = { :git => "https://github.com/JoaoPauloCMarra/react-native-nitro-auth.git", :tag => "#{s.version}" }
15
15
 
16
- s.swift_version = "5.0"
16
+ s.swift_version = "5.9"
17
17
 
18
18
  s.source_files = [
19
19
  "ios/**/*.{h,m,mm,swift}",
@@ -32,6 +32,8 @@ Pod::Spec.new do |s|
32
32
  ].join(" ")
33
33
  }
34
34
 
35
+ s.frameworks = ["Security"]
36
+
35
37
  s.dependency "React-Core"
36
38
  s.dependency "GoogleSignIn", "~> 9.0"
37
39
 
package/src/Auth.nitro.ts CHANGED
@@ -2,21 +2,35 @@ import type { HybridObject } from "react-native-nitro-modules";
2
2
 
3
3
  import type { AuthStorageAdapter } from "./AuthStorage.nitro";
4
4
 
5
- export type AuthProvider = "google" | "apple";
5
+ export type AuthProvider = "google" | "apple" | "microsoft";
6
6
 
7
7
  export type AuthErrorCode =
8
8
  | "cancelled"
9
9
  | "network_error"
10
10
  | "configuration_error"
11
11
  | "unsupported_provider"
12
+ | "invalid_state"
13
+ | "invalid_nonce"
14
+ | "token_error"
15
+ | "no_id_token"
16
+ | "parse_error"
17
+ | "refresh_failed"
12
18
  | "unknown";
13
19
 
20
+ export type MicrosoftPrompt = "login" | "consent" | "select_account" | "none";
21
+
14
22
  export interface LoginOptions {
15
23
  scopes?: string[];
16
24
  loginHint?: string;
17
25
  useOneTap?: boolean;
18
26
  /** (iOS only) Use native sign-in sheet */
19
27
  useSheet?: boolean;
28
+ /** Force account picker to show, ignoring any cached session or loginHint */
29
+ forceAccountPicker?: boolean;
30
+ /** (Microsoft only) Azure AD tenant - "common", "organizations", "consumers", or tenant ID */
31
+ tenant?: string;
32
+ /** (Microsoft only) Prompt behavior for login */
33
+ prompt?: MicrosoftPrompt;
20
34
  }
21
35
 
22
36
  export interface AuthTokens {
@@ -51,9 +65,10 @@ export interface Auth extends HybridObject<{ ios: "c++"; android: "c++" }> {
51
65
  refreshToken(): Promise<AuthTokens>;
52
66
 
53
67
  logout(): void;
68
+ silentRestore(): Promise<void>;
54
69
 
55
70
  onAuthStateChanged(
56
- callback: (user: AuthUser | undefined) => void
71
+ callback: (user: AuthUser | undefined) => void,
57
72
  ): () => void;
58
73
  onTokensRefreshed(callback: (tokens: AuthTokens) => void): () => void;
59
74
  setLoggingEnabled(enabled: boolean): void;