react-native-authsignal 0.1.0 → 0.2.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 (56) hide show
  1. package/.github/workflows/release-package.yml +0 -14
  2. package/{LICENSE → LICENSE.md} +3 -2
  3. package/README.md +1 -1
  4. package/android/build.gradle +6 -11
  5. package/android/gradle.properties +1 -2
  6. package/android/src/main/java/com/authsignal/react/AuthsignalModule.java +2 -2
  7. package/android/src/main/java/com/authsignal/react/AuthsignalPackage.java +5 -1
  8. package/android/src/main/java/com/authsignal/react/AuthsignalPasskeyModule.java +96 -0
  9. package/android/src/main/java/com/authsignal/react/AuthsignalPushModule.java +156 -0
  10. package/ios/Authsignal-Bridging-Header.h +1 -0
  11. package/ios/Authsignal.xcodeproj/project.pbxproj +16 -6
  12. package/ios/AuthsignalModule.h +11 -0
  13. package/ios/{Authsignal.m → AuthsignalModule.m} +3 -3
  14. package/ios/AuthsignalPasskeyModule.m +23 -0
  15. package/ios/AuthsignalPasskeyModule.swift +77 -0
  16. package/ios/AuthsignalPushModule.m +30 -0
  17. package/ios/AuthsignalPushModule.swift +145 -0
  18. package/lib/commonjs/error.js +13 -0
  19. package/lib/commonjs/error.js.map +1 -0
  20. package/lib/commonjs/index.js +37 -8
  21. package/lib/commonjs/index.js.map +1 -1
  22. package/lib/commonjs/passkey.js +99 -0
  23. package/lib/commonjs/passkey.js.map +1 -0
  24. package/lib/commonjs/push.js +134 -0
  25. package/lib/commonjs/push.js.map +1 -0
  26. package/lib/commonjs/types.js +2 -0
  27. package/lib/commonjs/types.js.map +1 -0
  28. package/lib/module/error.js +6 -0
  29. package/lib/module/error.js.map +1 -0
  30. package/lib/module/index.js +34 -7
  31. package/lib/module/index.js.map +1 -1
  32. package/lib/module/passkey.js +92 -0
  33. package/lib/module/passkey.js.map +1 -0
  34. package/lib/module/push.js +127 -0
  35. package/lib/module/push.js.map +1 -0
  36. package/lib/module/types.js +2 -0
  37. package/lib/module/types.js.map +1 -0
  38. package/lib/typescript/error.d.ts +2 -0
  39. package/lib/typescript/error.d.ts.map +1 -0
  40. package/lib/typescript/index.d.ts +16 -0
  41. package/lib/typescript/index.d.ts.map +1 -1
  42. package/lib/typescript/passkey.d.ts +26 -0
  43. package/lib/typescript/passkey.d.ts.map +1 -0
  44. package/lib/typescript/push.d.ts +25 -0
  45. package/lib/typescript/push.d.ts.map +1 -0
  46. package/lib/typescript/types.d.ts +5 -0
  47. package/lib/typescript/types.d.ts.map +1 -0
  48. package/package.json +3 -3
  49. package/react-native-authsignal.podspec +2 -1
  50. package/src/error.ts +7 -0
  51. package/src/index.tsx +35 -10
  52. package/src/passkey.ts +114 -0
  53. package/src/push.ts +157 -0
  54. package/src/types.ts +4 -0
  55. package/yarn.lock +405 -126
  56. package/ios/Authsignal.h +0 -12
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","initialized","AuthsignalPasskeyModule","Proxy","get","Error","AuthsignalPasskey","constructor","tenantID","baseURL","enableLogging","signUp","token","userName","ensureModuleIsInitialized","data","ex","console","log","error","message","signIn","autofill","OS","cancel","initialize"],"sourceRoot":"../../src","sources":["passkey.ts"],"mappings":";AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AACtD,SAASC,aAAa,QAAQ,SAAS;AAmBvC,IAAIC,WAAW,GAAG,KAAK;AAEvB,MAAMC,uBAAuB,GAAGJ,aAAa,CAACI,uBAAuB,GACjEJ,aAAa,CAACI,uBAAuB,GACrC,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACL,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEL,OAAO,MAAMM,iBAAiB,CAAC;EAK7BC,WAAW,OAAwD;IAAA,IAAvD;MAAEC,QAAQ;MAAEC,OAAO;MAAEC;IAA+B,CAAC;IAAA;IAAA;IAAA;IAC/D,IAAI,CAACF,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,aAAa,GAAGA,aAAa;EACpC;EAEA,MAAMC,MAAM,QAGgD;IAAA,IAH/C;MACXC,KAAK;MACLC;IACkB,CAAC;IACnB,MAAM,IAAI,CAACC,yBAAyB,EAAE;IAEtC,IAAI;MACF,MAAMC,IAAI,GAAG,MAAMb,uBAAuB,CAACS,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC;MAElE,OAAO;QAAEE;MAAK,CAAC;IACjB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACX,IAAI,IAAI,CAACN,aAAa,EAAE;QACtBO,OAAO,CAACC,GAAG,CAACF,EAAE,CAAC;MACjB;MAEA,IAAIA,EAAE,YAAYX,KAAK,EAAE;QACvB,OAAO;UAAEc,KAAK,EAAEH,EAAE,CAACI;QAAQ,CAAC;MAC9B;MAEA,MAAMJ,EAAE;IACV;EACF;EAEA,MAAMK,MAAM,QAGgD;IAAA,IAH/C;MACXT,KAAK;MACLU,QAAQ,GAAG;IACO,CAAC;IACnB,MAAM,IAAI,CAACR,yBAAyB,EAAE;IAEtC,IAAI;MACF,IAAIf,QAAQ,CAACwB,EAAE,KAAK,KAAK,EAAE;QACzB,MAAMR,IAAI,GAAG,MAAMb,uBAAuB,CAACmB,MAAM,CAACT,KAAK,EAAEU,QAAQ,CAAC;QAElE,OAAO;UAAEP;QAAK,CAAC;MACjB,CAAC,MAAM,IAAI,CAACO,QAAQ,EAAE;QACpB,MAAMP,IAAI,GAAG,MAAMb,uBAAuB,CAACmB,MAAM,CAACT,KAAK,CAAC;QAExD,OAAO;UAAEG;QAAK,CAAC;MACjB,CAAC,MAAM;QACL,MAAM,IAAIV,KAAK,CAAC,mCAAmC,CAAC;MACtD;IACF,CAAC,CAAC,OAAOW,EAAE,EAAE;MACX,IAAI,IAAI,CAACN,aAAa,IAAI,CAACY,QAAQ,EAAE;QACnCL,OAAO,CAACC,GAAG,CAACF,EAAE,CAAC;MACjB;MAEA,IAAIA,EAAE,YAAYX,KAAK,EAAE;QACvB,OAAO;UAAEc,KAAK,EAAEH,EAAE,CAACI;QAAQ,CAAC;MAC9B;MAEA,MAAMJ,EAAE;IACV;EACF;EAEAQ,MAAM,GAAG;IACP,IAAIzB,QAAQ,CAACwB,EAAE,KAAK,KAAK,EAAE;MACzBrB,uBAAuB,CAACsB,MAAM,EAAE;IAClC;EACF;EAEA,MAAcV,yBAAyB,GAAG;IACxC,IAAIb,WAAW,EAAE;MACf;IACF;IAEA,MAAMC,uBAAuB,CAACuB,UAAU,CAAC,IAAI,CAACjB,QAAQ,EAAE,IAAI,CAACC,OAAO,CAAC;IAErER,WAAW,GAAG,IAAI;EACpB;AACF"}
@@ -0,0 +1,127 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ import { NativeModules } from 'react-native';
3
+ import { LINKING_ERROR } from './error';
4
+ let initialized = false;
5
+ const AuthsignalPushModule = NativeModules.AuthsignalPushModule ? NativeModules.AuthsignalPushModule : new Proxy({}, {
6
+ get() {
7
+ throw new Error(LINKING_ERROR);
8
+ }
9
+ });
10
+ export class AuthsignalPush {
11
+ constructor(_ref) {
12
+ let {
13
+ tenantID,
14
+ baseURL,
15
+ enableLogging
16
+ } = _ref;
17
+ _defineProperty(this, "tenantID", void 0);
18
+ _defineProperty(this, "baseURL", void 0);
19
+ _defineProperty(this, "enableLogging", void 0);
20
+ this.tenantID = tenantID;
21
+ this.baseURL = baseURL;
22
+ this.enableLogging = enableLogging;
23
+ }
24
+ async getCredential() {
25
+ await this.ensureModuleIsInitialized();
26
+ try {
27
+ const data = await AuthsignalPushModule.getCredential();
28
+ return {
29
+ data
30
+ };
31
+ } catch (ex) {
32
+ if (this.enableLogging) {
33
+ console.log(ex);
34
+ }
35
+ if (ex instanceof Error) {
36
+ return {
37
+ error: ex.message
38
+ };
39
+ }
40
+ throw ex;
41
+ }
42
+ }
43
+ async addCredential(token) {
44
+ await this.ensureModuleIsInitialized();
45
+ try {
46
+ const data = await AuthsignalPushModule.addCredential(token);
47
+ return {
48
+ data
49
+ };
50
+ } catch (ex) {
51
+ if (this.enableLogging) {
52
+ console.log(ex);
53
+ }
54
+ if (ex instanceof Error) {
55
+ return {
56
+ error: ex.message
57
+ };
58
+ }
59
+ throw ex;
60
+ }
61
+ }
62
+ async removeCredential() {
63
+ await this.ensureModuleIsInitialized();
64
+ try {
65
+ const data = await AuthsignalPushModule.removeCredential();
66
+ return {
67
+ data
68
+ };
69
+ } catch (ex) {
70
+ if (this.enableLogging) {
71
+ console.log(ex);
72
+ }
73
+ if (ex instanceof Error) {
74
+ return {
75
+ error: ex.message
76
+ };
77
+ }
78
+ throw ex;
79
+ }
80
+ }
81
+ async getChallenge() {
82
+ await this.ensureModuleIsInitialized();
83
+ try {
84
+ const data = await AuthsignalPushModule.getChallenge();
85
+ return {
86
+ data
87
+ };
88
+ } catch (ex) {
89
+ if (this.enableLogging) {
90
+ console.log(ex);
91
+ }
92
+ if (ex instanceof Error) {
93
+ return {
94
+ error: ex.message
95
+ };
96
+ }
97
+ throw ex;
98
+ }
99
+ }
100
+ async updateChallenge(challengeId, approved, verificationCode) {
101
+ await this.ensureModuleIsInitialized();
102
+ try {
103
+ const data = await NativeModules.updateChallenge(challengeId, approved, verificationCode);
104
+ return {
105
+ data
106
+ };
107
+ } catch (ex) {
108
+ if (this.enableLogging) {
109
+ console.log(ex);
110
+ }
111
+ if (ex instanceof Error) {
112
+ return {
113
+ error: ex.message
114
+ };
115
+ }
116
+ throw ex;
117
+ }
118
+ }
119
+ async ensureModuleIsInitialized() {
120
+ if (initialized) {
121
+ return;
122
+ }
123
+ await AuthsignalPushModule.initialize(this.tenantID, this.baseURL);
124
+ initialized = true;
125
+ }
126
+ }
127
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","LINKING_ERROR","initialized","AuthsignalPushModule","Proxy","get","Error","AuthsignalPush","constructor","tenantID","baseURL","enableLogging","getCredential","ensureModuleIsInitialized","data","ex","console","log","error","message","addCredential","token","removeCredential","getChallenge","updateChallenge","challengeId","approved","verificationCode","initialize"],"sourceRoot":"../../src","sources":["push.ts"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const LINKING_ERROR: string;
2
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,QAIO,CAAC"}
@@ -1,2 +1,18 @@
1
+ import { AuthsignalPasskey } from './passkey';
2
+ import { AuthsignalPush } from './push';
3
+ interface ConstructorArgs {
4
+ tenantID: string;
5
+ baseURL?: string;
6
+ enableLogging?: boolean;
7
+ }
8
+ export declare class Authsignal {
9
+ tenantID: string;
10
+ baseURL: string;
11
+ enableLogging: boolean;
12
+ passkey: AuthsignalPasskey;
13
+ push: AuthsignalPush;
14
+ constructor({ tenantID, baseURL, enableLogging, }: ConstructorArgs);
15
+ }
1
16
  export declare function launch(url: string): Promise<string | null>;
17
+ export {};
2
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAmBA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAaxC,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,UAAU;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IAEvB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC;gBAET,EACV,QAAQ,EACR,OAA+C,EAC/C,aAAuB,GACxB,EAAE,eAAe;CAQnB;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB1D"}
@@ -0,0 +1,26 @@
1
+ import type { AuthsignalResponse } from './types';
2
+ interface ConstructorArgs {
3
+ tenantID: string;
4
+ baseURL: string;
5
+ enableLogging: boolean;
6
+ }
7
+ interface PasskeySignUpInput {
8
+ token: string;
9
+ userName?: string;
10
+ }
11
+ interface PasskeySignInInput {
12
+ token?: string;
13
+ autofill?: boolean;
14
+ }
15
+ export declare class AuthsignalPasskey {
16
+ tenantID: string;
17
+ baseURL: string;
18
+ enableLogging: boolean;
19
+ constructor({ tenantID, baseURL, enableLogging }: ConstructorArgs);
20
+ signUp({ token, userName, }: PasskeySignUpInput): Promise<AuthsignalResponse<string>>;
21
+ signIn({ token, autofill, }: PasskeySignInInput): Promise<AuthsignalResponse<string>>;
22
+ cancel(): void;
23
+ private ensureModuleIsInitialized;
24
+ }
25
+ export {};
26
+ //# sourceMappingURL=passkey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../src/passkey.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAeD,qBAAa,iBAAiB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;gBAEX,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,eAAe;IAM3D,MAAM,CAAC,EACX,KAAK,EACL,QAAQ,GACT,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAoBrD,MAAM,CAAC,EACX,KAAK,EACL,QAAgB,GACjB,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IA4B3D,MAAM;YAMQ,yBAAyB;CASxC"}
@@ -0,0 +1,25 @@
1
+ import type { AuthsignalResponse } from './types';
2
+ interface ConstructorArgs {
3
+ tenantID: string;
4
+ baseURL: string;
5
+ enableLogging: boolean;
6
+ }
7
+ interface PushCredential {
8
+ credentialID: string;
9
+ createdAt: string;
10
+ lastAuthenticatedAt?: string;
11
+ }
12
+ export declare class AuthsignalPush {
13
+ tenantID: string;
14
+ baseURL: string;
15
+ enableLogging: boolean;
16
+ constructor({ tenantID, baseURL, enableLogging }: ConstructorArgs);
17
+ getCredential(): Promise<AuthsignalResponse<PushCredential>>;
18
+ addCredential(token: string): Promise<AuthsignalResponse<boolean>>;
19
+ removeCredential(): Promise<AuthsignalResponse<boolean>>;
20
+ getChallenge(): Promise<AuthsignalResponse<string>>;
21
+ updateChallenge(challengeId: string, approved: boolean, verificationCode: string | null): Promise<AuthsignalResponse<boolean>>;
22
+ private ensureModuleIsInitialized;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/push.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAeD,qBAAa,cAAc;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;gBAEX,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,eAAe;IAM3D,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAoB5D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAoBlE,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAmBxD,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAoBnD,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,EACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAwBzB,yBAAyB;CASxC"}
@@ -0,0 +1,5 @@
1
+ export interface AuthsignalResponse<T> {
2
+ data?: T;
3
+ error?: string;
4
+ }
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-authsignal",
3
- "version": "0.1.0",
4
- "description": "test",
3
+ "version": "0.2.1",
4
+ "description": "The official Authsignal React Native library.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
7
7
  "types": "lib/typescript/index.d.ts",
@@ -37,7 +37,7 @@
37
37
  "android"
38
38
  ],
39
39
  "repository": "https://github.com/authsignal/react-native-authsignal.git",
40
- "author": "Authsignal <chris@authsignal.com> (https://www.authsignal.com)",
40
+ "author": "Authsignal <support@authsignal.com> (https://www.authsignal.com)",
41
41
  "license": "MIT",
42
42
  "bugs": {
43
43
  "url": "https://github.com/authsignal/react-native-authsignal.git/issues"
@@ -11,12 +11,13 @@ Pod::Spec.new do |s|
11
11
  s.license = package["license"]
12
12
  s.authors = package["author"]
13
13
 
14
- s.platforms = { :ios => "10.0" }
14
+ s.platforms = { :ios => "13.0" }
15
15
  s.source = { :git => "https://github.com/authsignal/react-native-authsignal.git.git", :tag => "#{s.version}" }
16
16
 
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
19
  s.dependency "React-Core"
20
+ s.dependency 'Authsignal', '0.1.10'
20
21
 
21
22
  # Don't install the dependencies when we run `pod install` in the old architecture.
22
23
  if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
package/src/error.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { Platform } from 'react-native';
2
+
3
+ export const LINKING_ERROR =
4
+ `The package 'react-native-authsignal' doesn't seem to be linked. Make sure: \n\n` +
5
+ Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
6
+ '- You rebuilt the app after installing the package\n' +
7
+ '- You are not using Expo Go\n';
package/src/index.tsx CHANGED
@@ -1,13 +1,10 @@
1
1
  import { NativeModules, Platform } from 'react-native';
2
+ import { LINKING_ERROR } from './error';
3
+ import { AuthsignalPasskey } from './passkey';
4
+ import { AuthsignalPush } from './push';
2
5
 
3
- const LINKING_ERROR =
4
- `The package 'react-native-authsignal' doesn't seem to be linked. Make sure: \n\n` +
5
- Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
6
- '- You rebuilt the app after installing the package\n' +
7
- '- You are not using Expo Go\n';
8
-
9
- const Authsignal = NativeModules.Authsignal
10
- ? NativeModules.Authsignal
6
+ const AuthsignalModule = NativeModules.AuthsignalModule
7
+ ? NativeModules.AuthsignalModule
11
8
  : new Proxy(
12
9
  {},
13
10
  {
@@ -17,9 +14,37 @@ const Authsignal = NativeModules.Authsignal
17
14
  }
18
15
  );
19
16
 
17
+ interface ConstructorArgs {
18
+ tenantID: string;
19
+ baseURL?: string;
20
+ enableLogging?: boolean;
21
+ }
22
+
23
+ export class Authsignal {
24
+ tenantID: string;
25
+ baseURL: string;
26
+ enableLogging: boolean;
27
+
28
+ passkey: AuthsignalPasskey;
29
+ push: AuthsignalPush;
30
+
31
+ constructor({
32
+ tenantID,
33
+ baseURL = 'https://challenge.authsignal.com/v1',
34
+ enableLogging = __DEV__,
35
+ }: ConstructorArgs) {
36
+ this.tenantID = tenantID;
37
+ this.baseURL = baseURL;
38
+ this.enableLogging = enableLogging;
39
+
40
+ this.passkey = new AuthsignalPasskey({ tenantID, baseURL, enableLogging });
41
+ this.push = new AuthsignalPush({ tenantID, baseURL, enableLogging });
42
+ }
43
+ }
44
+
20
45
  export function launch(url: string): Promise<string | null> {
21
46
  if (Platform.OS === 'ios') {
22
- return Authsignal.launch(url);
47
+ return AuthsignalModule.launch(url);
23
48
  } else {
24
49
  return new Promise((resolve, reject) => {
25
50
  const callback = (error: any, token: string) => {
@@ -36,7 +61,7 @@ export function launch(url: string): Promise<string | null> {
36
61
  }
37
62
  };
38
63
 
39
- Authsignal.launch(url, callback);
64
+ AuthsignalModule.launch(url, callback);
40
65
  });
41
66
  }
42
67
  }
package/src/passkey.ts ADDED
@@ -0,0 +1,114 @@
1
+ import { NativeModules, Platform } from 'react-native';
2
+ import { LINKING_ERROR } from './error';
3
+ import type { AuthsignalResponse } from './types';
4
+
5
+ interface ConstructorArgs {
6
+ tenantID: string;
7
+ baseURL: string;
8
+ enableLogging: boolean;
9
+ }
10
+
11
+ interface PasskeySignUpInput {
12
+ token: string;
13
+ userName?: string;
14
+ }
15
+
16
+ interface PasskeySignInInput {
17
+ token?: string;
18
+ autofill?: boolean;
19
+ }
20
+
21
+ let initialized = false;
22
+
23
+ const AuthsignalPasskeyModule = NativeModules.AuthsignalPasskeyModule
24
+ ? NativeModules.AuthsignalPasskeyModule
25
+ : new Proxy(
26
+ {},
27
+ {
28
+ get() {
29
+ throw new Error(LINKING_ERROR);
30
+ },
31
+ }
32
+ );
33
+
34
+ export class AuthsignalPasskey {
35
+ tenantID: string;
36
+ baseURL: string;
37
+ enableLogging: boolean;
38
+
39
+ constructor({ tenantID, baseURL, enableLogging }: ConstructorArgs) {
40
+ this.tenantID = tenantID;
41
+ this.baseURL = baseURL;
42
+ this.enableLogging = enableLogging;
43
+ }
44
+
45
+ async signUp({
46
+ token,
47
+ userName,
48
+ }: PasskeySignUpInput): Promise<AuthsignalResponse<string>> {
49
+ await this.ensureModuleIsInitialized();
50
+
51
+ try {
52
+ const data = await AuthsignalPasskeyModule.signUp(token, userName);
53
+
54
+ return { data };
55
+ } catch (ex) {
56
+ if (this.enableLogging) {
57
+ console.log(ex);
58
+ }
59
+
60
+ if (ex instanceof Error) {
61
+ return { error: ex.message };
62
+ }
63
+
64
+ throw ex;
65
+ }
66
+ }
67
+
68
+ async signIn({
69
+ token,
70
+ autofill = false,
71
+ }: PasskeySignInInput): Promise<AuthsignalResponse<string>> {
72
+ await this.ensureModuleIsInitialized();
73
+
74
+ try {
75
+ if (Platform.OS === 'ios') {
76
+ const data = await AuthsignalPasskeyModule.signIn(token, autofill);
77
+
78
+ return { data };
79
+ } else if (!autofill) {
80
+ const data = await AuthsignalPasskeyModule.signIn(token);
81
+
82
+ return { data };
83
+ } else {
84
+ throw new Error('autofill is only supported on iOS');
85
+ }
86
+ } catch (ex) {
87
+ if (this.enableLogging && !autofill) {
88
+ console.log(ex);
89
+ }
90
+
91
+ if (ex instanceof Error) {
92
+ return { error: ex.message };
93
+ }
94
+
95
+ throw ex;
96
+ }
97
+ }
98
+
99
+ cancel() {
100
+ if (Platform.OS === 'ios') {
101
+ AuthsignalPasskeyModule.cancel();
102
+ }
103
+ }
104
+
105
+ private async ensureModuleIsInitialized() {
106
+ if (initialized) {
107
+ return;
108
+ }
109
+
110
+ await AuthsignalPasskeyModule.initialize(this.tenantID, this.baseURL);
111
+
112
+ initialized = true;
113
+ }
114
+ }
package/src/push.ts ADDED
@@ -0,0 +1,157 @@
1
+ import { NativeModules } from 'react-native';
2
+ import { LINKING_ERROR } from './error';
3
+ import type { AuthsignalResponse } from './types';
4
+
5
+ interface ConstructorArgs {
6
+ tenantID: string;
7
+ baseURL: string;
8
+ enableLogging: boolean;
9
+ }
10
+
11
+ interface PushCredential {
12
+ credentialID: string;
13
+ createdAt: string;
14
+ lastAuthenticatedAt?: string;
15
+ }
16
+
17
+ let initialized = false;
18
+
19
+ const AuthsignalPushModule = NativeModules.AuthsignalPushModule
20
+ ? NativeModules.AuthsignalPushModule
21
+ : new Proxy(
22
+ {},
23
+ {
24
+ get() {
25
+ throw new Error(LINKING_ERROR);
26
+ },
27
+ }
28
+ );
29
+
30
+ export class AuthsignalPush {
31
+ tenantID: string;
32
+ baseURL: string;
33
+ enableLogging: boolean;
34
+
35
+ constructor({ tenantID, baseURL, enableLogging }: ConstructorArgs) {
36
+ this.tenantID = tenantID;
37
+ this.baseURL = baseURL;
38
+ this.enableLogging = enableLogging;
39
+ }
40
+
41
+ async getCredential(): Promise<AuthsignalResponse<PushCredential>> {
42
+ await this.ensureModuleIsInitialized();
43
+
44
+ try {
45
+ const data = await AuthsignalPushModule.getCredential();
46
+
47
+ return { data };
48
+ } catch (ex) {
49
+ if (this.enableLogging) {
50
+ console.log(ex);
51
+ }
52
+
53
+ if (ex instanceof Error) {
54
+ return { error: ex.message };
55
+ }
56
+
57
+ throw ex;
58
+ }
59
+ }
60
+
61
+ async addCredential(token: string): Promise<AuthsignalResponse<boolean>> {
62
+ await this.ensureModuleIsInitialized();
63
+
64
+ try {
65
+ const data = await AuthsignalPushModule.addCredential(token);
66
+
67
+ return { data };
68
+ } catch (ex) {
69
+ if (this.enableLogging) {
70
+ console.log(ex);
71
+ }
72
+
73
+ if (ex instanceof Error) {
74
+ return { error: ex.message };
75
+ }
76
+
77
+ throw ex;
78
+ }
79
+ }
80
+
81
+ async removeCredential(): Promise<AuthsignalResponse<boolean>> {
82
+ await this.ensureModuleIsInitialized();
83
+
84
+ try {
85
+ const data = await AuthsignalPushModule.removeCredential();
86
+ return { data };
87
+ } catch (ex) {
88
+ if (this.enableLogging) {
89
+ console.log(ex);
90
+ }
91
+
92
+ if (ex instanceof Error) {
93
+ return { error: ex.message };
94
+ }
95
+
96
+ throw ex;
97
+ }
98
+ }
99
+
100
+ async getChallenge(): Promise<AuthsignalResponse<string>> {
101
+ await this.ensureModuleIsInitialized();
102
+
103
+ try {
104
+ const data = await AuthsignalPushModule.getChallenge();
105
+
106
+ return { data };
107
+ } catch (ex) {
108
+ if (this.enableLogging) {
109
+ console.log(ex);
110
+ }
111
+
112
+ if (ex instanceof Error) {
113
+ return { error: ex.message };
114
+ }
115
+
116
+ throw ex;
117
+ }
118
+ }
119
+
120
+ async updateChallenge(
121
+ challengeId: string,
122
+ approved: boolean,
123
+ verificationCode: string | null
124
+ ): Promise<AuthsignalResponse<boolean>> {
125
+ await this.ensureModuleIsInitialized();
126
+
127
+ try {
128
+ const data = await NativeModules.updateChallenge(
129
+ challengeId,
130
+ approved,
131
+ verificationCode
132
+ );
133
+
134
+ return { data };
135
+ } catch (ex) {
136
+ if (this.enableLogging) {
137
+ console.log(ex);
138
+ }
139
+
140
+ if (ex instanceof Error) {
141
+ return { error: ex.message };
142
+ }
143
+
144
+ throw ex;
145
+ }
146
+ }
147
+
148
+ private async ensureModuleIsInitialized() {
149
+ if (initialized) {
150
+ return;
151
+ }
152
+
153
+ await AuthsignalPushModule.initialize(this.tenantID, this.baseURL);
154
+
155
+ initialized = true;
156
+ }
157
+ }
package/src/types.ts ADDED
@@ -0,0 +1,4 @@
1
+ export interface AuthsignalResponse<T> {
2
+ data?: T;
3
+ error?: string;
4
+ }