react-native-authsignal 2.3.7 → 2.3.8
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/email.js +11 -18
- package/lib/commonjs/email.js.map +1 -1
- package/lib/commonjs/error.js +2 -4
- package/lib/commonjs/error.js.map +1 -1
- package/lib/commonjs/inapp.js +34 -46
- package/lib/commonjs/inapp.js.map +1 -1
- package/lib/commonjs/index.js +6 -19
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/passkey.js +21 -30
- package/lib/commonjs/passkey.js.map +1 -1
- package/lib/commonjs/push.js +15 -22
- package/lib/commonjs/push.js.map +1 -1
- package/lib/commonjs/qr.js +18 -26
- package/lib/commonjs/qr.js.map +1 -1
- package/lib/commonjs/sms.js +11 -18
- package/lib/commonjs/sms.js.map +1 -1
- package/lib/commonjs/totp.js +8 -14
- package/lib/commonjs/totp.js.map +1 -1
- package/lib/commonjs/types.js +2 -4
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/whatsapp.js +8 -14
- package/lib/commonjs/whatsapp.js.map +1 -1
- package/lib/module/email.js +11 -18
- package/lib/module/email.js.map +1 -1
- package/lib/module/error.js.map +1 -1
- package/lib/module/inapp.js +34 -46
- package/lib/module/inapp.js.map +1 -1
- package/lib/module/index.js +6 -19
- package/lib/module/index.js.map +1 -1
- package/lib/module/passkey.js +21 -30
- package/lib/module/passkey.js.map +1 -1
- package/lib/module/push.js +15 -22
- package/lib/module/push.js.map +1 -1
- package/lib/module/qr.js +18 -26
- package/lib/module/qr.js.map +1 -1
- package/lib/module/sms.js +11 -18
- package/lib/module/sms.js.map +1 -1
- package/lib/module/totp.js +8 -14
- package/lib/module/totp.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/whatsapp.js +8 -14
- package/lib/module/whatsapp.js.map +1 -1
- package/package.json +5 -5
- package/.editorconfig +0 -15
- package/.gitattributes +0 -3
- package/.github/images/authsignal.png +0 -0
- package/.github/pull_request_template.md +0 -12
- package/.github/release-drafter-config.yml +0 -75
- package/.github/workflows/release-drafter.yml +0 -25
- package/.github/workflows/release-package.yml +0 -25
- package/.gitignore +0 -67
- package/.npmignore +0 -1
- package/.watchmanconfig +0 -1
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -7
- package/android/gradlew +0 -234
- package/android/gradlew.bat +0 -89
- package/babel.config.js +0 -3
- package/src/email.ts +0 -94
- package/src/error.ts +0 -28
- package/src/inapp.ts +0 -210
- package/src/index.tsx +0 -100
- package/src/passkey.ts +0 -179
- package/src/push.ts +0 -150
- package/src/qr.ts +0 -153
- package/src/sms.ts +0 -96
- package/src/totp.ts +0 -83
- package/src/types.ts +0 -151
- package/src/whatsapp.ts +0 -78
- package/tsconfig.build.json +0 -5
- package/tsconfig.json +0 -28
- package/yarn.lock +0 -6420
package/src/index.tsx
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { NativeModules, Platform } from 'react-native';
|
|
2
|
-
import { LINKING_ERROR } from './error';
|
|
3
|
-
import { AuthsignalEmail } from './email';
|
|
4
|
-
import { AuthsignalPasskey } from './passkey';
|
|
5
|
-
import { AuthsignalPush } from './push';
|
|
6
|
-
import { AuthsignalSms } from './sms';
|
|
7
|
-
import { AuthsignalTotp } from './totp';
|
|
8
|
-
import { AuthsignalQrCode } from './qr';
|
|
9
|
-
import { AuthsignalWhatsapp } from './whatsapp';
|
|
10
|
-
import { AuthsignalInApp } from './inapp';
|
|
11
|
-
|
|
12
|
-
export * from './types';
|
|
13
|
-
export { ErrorCode } from './error';
|
|
14
|
-
|
|
15
|
-
const AuthsignalModule = NativeModules.AuthsignalModule
|
|
16
|
-
? NativeModules.AuthsignalModule
|
|
17
|
-
: new Proxy(
|
|
18
|
-
{},
|
|
19
|
-
{
|
|
20
|
-
get() {
|
|
21
|
-
throw new Error(LINKING_ERROR);
|
|
22
|
-
},
|
|
23
|
-
}
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
interface ConstructorArgs {
|
|
27
|
-
tenantID: string;
|
|
28
|
-
baseURL?: string;
|
|
29
|
-
deviceID?: string;
|
|
30
|
-
enableLogging?: boolean;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export class Authsignal {
|
|
34
|
-
tenantID: string;
|
|
35
|
-
baseURL: string;
|
|
36
|
-
enableLogging: boolean;
|
|
37
|
-
|
|
38
|
-
email: AuthsignalEmail;
|
|
39
|
-
passkey: AuthsignalPasskey;
|
|
40
|
-
push: AuthsignalPush;
|
|
41
|
-
qr: AuthsignalQrCode;
|
|
42
|
-
inapp: AuthsignalInApp;
|
|
43
|
-
sms: AuthsignalSms;
|
|
44
|
-
totp: AuthsignalTotp;
|
|
45
|
-
whatsapp: AuthsignalWhatsapp;
|
|
46
|
-
|
|
47
|
-
constructor({
|
|
48
|
-
tenantID,
|
|
49
|
-
baseURL = 'https://api.authsignal.com/v1',
|
|
50
|
-
deviceID,
|
|
51
|
-
enableLogging = __DEV__,
|
|
52
|
-
}: ConstructorArgs) {
|
|
53
|
-
this.tenantID = tenantID;
|
|
54
|
-
this.baseURL = baseURL;
|
|
55
|
-
this.enableLogging = enableLogging;
|
|
56
|
-
|
|
57
|
-
const input = { tenantID, baseURL, deviceID, enableLogging };
|
|
58
|
-
|
|
59
|
-
this.passkey = new AuthsignalPasskey(input);
|
|
60
|
-
this.email = new AuthsignalEmail(input);
|
|
61
|
-
this.push = new AuthsignalPush(input);
|
|
62
|
-
this.qr = new AuthsignalQrCode(input);
|
|
63
|
-
this.inapp = new AuthsignalInApp(input);
|
|
64
|
-
this.sms = new AuthsignalSms(input);
|
|
65
|
-
this.totp = new AuthsignalTotp(input);
|
|
66
|
-
this.whatsapp = new AuthsignalWhatsapp(input);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async setToken(token: string): Promise<void> {
|
|
70
|
-
await AuthsignalModule.setToken(token);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async launch(url: string): Promise<string | null> {
|
|
74
|
-
return await launch(url);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function launch(url: string): Promise<string | null> {
|
|
79
|
-
if (Platform.OS === 'ios') {
|
|
80
|
-
return AuthsignalModule.launch(url);
|
|
81
|
-
} else {
|
|
82
|
-
return new Promise((resolve, reject) => {
|
|
83
|
-
const callback = (error: any, token: string) => {
|
|
84
|
-
if (token) {
|
|
85
|
-
resolve(token);
|
|
86
|
-
} else if (error) {
|
|
87
|
-
if (error.error === 'user_cancelled') {
|
|
88
|
-
resolve(null);
|
|
89
|
-
} else {
|
|
90
|
-
reject(error);
|
|
91
|
-
}
|
|
92
|
-
} else {
|
|
93
|
-
reject('Unexpected error');
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
AuthsignalModule.launch(url, callback);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
package/src/passkey.ts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { NativeModules, Platform } from 'react-native';
|
|
2
|
-
import { LINKING_ERROR, handleErrorCodes } from './error';
|
|
3
|
-
import type {
|
|
4
|
-
AuthsignalResponse,
|
|
5
|
-
SignInResponse,
|
|
6
|
-
SignUpResponse,
|
|
7
|
-
} from './types';
|
|
8
|
-
|
|
9
|
-
interface ConstructorArgs {
|
|
10
|
-
tenantID: string;
|
|
11
|
-
baseURL: string;
|
|
12
|
-
deviceID?: string;
|
|
13
|
-
enableLogging: boolean;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
interface PasskeySignUpInput {
|
|
17
|
-
token?: string;
|
|
18
|
-
username?: string;
|
|
19
|
-
displayName?: string;
|
|
20
|
-
ignorePasskeyAlreadyExistsError?: boolean;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
interface PasskeySignInInput {
|
|
24
|
-
action?: string;
|
|
25
|
-
token?: string;
|
|
26
|
-
autofill?: boolean;
|
|
27
|
-
preferImmediatelyAvailableCredentials?: boolean;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
let initialized = false;
|
|
31
|
-
let autofillRequestPending = false;
|
|
32
|
-
|
|
33
|
-
const AuthsignalPasskeyModule = NativeModules.AuthsignalPasskeyModule
|
|
34
|
-
? NativeModules.AuthsignalPasskeyModule
|
|
35
|
-
: new Proxy(
|
|
36
|
-
{},
|
|
37
|
-
{
|
|
38
|
-
get() {
|
|
39
|
-
throw new Error(LINKING_ERROR);
|
|
40
|
-
},
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
export class AuthsignalPasskey {
|
|
45
|
-
tenantID: string;
|
|
46
|
-
baseURL: string;
|
|
47
|
-
deviceID?: string;
|
|
48
|
-
enableLogging: boolean;
|
|
49
|
-
|
|
50
|
-
constructor({ tenantID, baseURL, deviceID, enableLogging }: ConstructorArgs) {
|
|
51
|
-
this.tenantID = tenantID;
|
|
52
|
-
this.baseURL = baseURL;
|
|
53
|
-
this.deviceID = deviceID;
|
|
54
|
-
this.enableLogging = enableLogging;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
async signUp({
|
|
58
|
-
token,
|
|
59
|
-
username,
|
|
60
|
-
displayName,
|
|
61
|
-
ignorePasskeyAlreadyExistsError = false,
|
|
62
|
-
}: PasskeySignUpInput = {}): Promise<AuthsignalResponse<SignUpResponse>> {
|
|
63
|
-
await this.ensureModuleIsInitialized();
|
|
64
|
-
|
|
65
|
-
try {
|
|
66
|
-
const data = await AuthsignalPasskeyModule.signUp(
|
|
67
|
-
token,
|
|
68
|
-
username,
|
|
69
|
-
displayName,
|
|
70
|
-
ignorePasskeyAlreadyExistsError
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
return { data };
|
|
74
|
-
} catch (ex) {
|
|
75
|
-
if (this.enableLogging) {
|
|
76
|
-
console.log(ex);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return handleErrorCodes(ex);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async signIn({
|
|
84
|
-
action,
|
|
85
|
-
token,
|
|
86
|
-
autofill = false,
|
|
87
|
-
preferImmediatelyAvailableCredentials = true,
|
|
88
|
-
}: PasskeySignInInput = {}): Promise<AuthsignalResponse<SignInResponse>> {
|
|
89
|
-
await this.ensureModuleIsInitialized();
|
|
90
|
-
|
|
91
|
-
try {
|
|
92
|
-
if (autofill) {
|
|
93
|
-
if (autofillRequestPending) {
|
|
94
|
-
return {};
|
|
95
|
-
} else {
|
|
96
|
-
autofillRequestPending = true;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (Platform.OS === 'ios') {
|
|
101
|
-
const data = await AuthsignalPasskeyModule.signIn(
|
|
102
|
-
action,
|
|
103
|
-
token,
|
|
104
|
-
autofill,
|
|
105
|
-
preferImmediatelyAvailableCredentials
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
autofillRequestPending = false;
|
|
109
|
-
|
|
110
|
-
return { data };
|
|
111
|
-
} else {
|
|
112
|
-
const data = await AuthsignalPasskeyModule.signIn(
|
|
113
|
-
action,
|
|
114
|
-
token,
|
|
115
|
-
preferImmediatelyAvailableCredentials
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
autofillRequestPending = false;
|
|
119
|
-
|
|
120
|
-
return { data };
|
|
121
|
-
}
|
|
122
|
-
} catch (ex) {
|
|
123
|
-
if (this.enableLogging && !autofill) {
|
|
124
|
-
console.log(ex);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
autofillRequestPending = false;
|
|
128
|
-
|
|
129
|
-
return handleErrorCodes(ex);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
cancel() {
|
|
134
|
-
if (Platform.OS === 'ios') {
|
|
135
|
-
AuthsignalPasskeyModule.cancel();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
isSupported(): boolean {
|
|
140
|
-
if (Platform.OS === 'android') {
|
|
141
|
-
return Platform.Version >= 28;
|
|
142
|
-
} else if (Platform.OS === 'ios') {
|
|
143
|
-
return parseInt(Platform.Version, 10) >= 15;
|
|
144
|
-
} else {
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
async shouldPromptToCreatePasskey({
|
|
150
|
-
username,
|
|
151
|
-
}: { username?: string } = {}): Promise<boolean> {
|
|
152
|
-
await this.ensureModuleIsInitialized();
|
|
153
|
-
|
|
154
|
-
return await AuthsignalPasskeyModule.shouldPromptToCreatePasskey(username);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* @deprecated Use 'preferImmediatelyAvailableCredentials' to control what happens when a passkey isn't available, or use 'shouldPromptToCreatePasskey' to check if you should prompt the user to create a passkey.
|
|
159
|
-
*/
|
|
160
|
-
async isAvailableOnDevice(): Promise<boolean> {
|
|
161
|
-
await this.ensureModuleIsInitialized();
|
|
162
|
-
|
|
163
|
-
return await AuthsignalPasskeyModule.isAvailableOnDevice();
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
private async ensureModuleIsInitialized() {
|
|
167
|
-
if (initialized) {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
await AuthsignalPasskeyModule.initialize(
|
|
172
|
-
this.tenantID,
|
|
173
|
-
this.baseURL,
|
|
174
|
-
this.deviceID
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
initialized = true;
|
|
178
|
-
}
|
|
179
|
-
}
|
package/src/push.ts
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { NativeModules, Platform } from 'react-native';
|
|
2
|
-
import { handleErrorCodes, LINKING_ERROR } from './error';
|
|
3
|
-
import type {
|
|
4
|
-
AddCredentialInput,
|
|
5
|
-
AppChallenge,
|
|
6
|
-
AppCredential,
|
|
7
|
-
AuthsignalResponse,
|
|
8
|
-
UpdateChallengeInput,
|
|
9
|
-
} from './types';
|
|
10
|
-
|
|
11
|
-
interface ConstructorArgs {
|
|
12
|
-
tenantID: string;
|
|
13
|
-
baseURL: string;
|
|
14
|
-
enableLogging: boolean;
|
|
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<
|
|
42
|
-
AuthsignalResponse<AppCredential | undefined>
|
|
43
|
-
> {
|
|
44
|
-
await this.ensureModuleIsInitialized();
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
const data = await AuthsignalPushModule.getCredential();
|
|
48
|
-
|
|
49
|
-
return { data };
|
|
50
|
-
} catch (ex) {
|
|
51
|
-
if (this.enableLogging) {
|
|
52
|
-
console.log(ex);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return handleErrorCodes(ex);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async addCredential({
|
|
60
|
-
token,
|
|
61
|
-
requireUserAuthentication = false,
|
|
62
|
-
keychainAccess,
|
|
63
|
-
}: AddCredentialInput = {}): Promise<AuthsignalResponse<AppCredential>> {
|
|
64
|
-
await this.ensureModuleIsInitialized();
|
|
65
|
-
|
|
66
|
-
try {
|
|
67
|
-
const data =
|
|
68
|
-
Platform.OS === 'ios'
|
|
69
|
-
? await AuthsignalPushModule.addCredential(
|
|
70
|
-
token,
|
|
71
|
-
requireUserAuthentication,
|
|
72
|
-
keychainAccess
|
|
73
|
-
)
|
|
74
|
-
: await AuthsignalPushModule.addCredential(token);
|
|
75
|
-
|
|
76
|
-
return { data };
|
|
77
|
-
} catch (ex) {
|
|
78
|
-
if (this.enableLogging) {
|
|
79
|
-
console.log(ex);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return handleErrorCodes(ex);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async removeCredential(): Promise<AuthsignalResponse<boolean>> {
|
|
87
|
-
await this.ensureModuleIsInitialized();
|
|
88
|
-
|
|
89
|
-
try {
|
|
90
|
-
const data = await AuthsignalPushModule.removeCredential();
|
|
91
|
-
return { data };
|
|
92
|
-
} catch (ex) {
|
|
93
|
-
if (this.enableLogging) {
|
|
94
|
-
console.log(ex);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return handleErrorCodes(ex);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
async getChallenge(): Promise<AuthsignalResponse<AppChallenge | undefined>> {
|
|
102
|
-
await this.ensureModuleIsInitialized();
|
|
103
|
-
|
|
104
|
-
try {
|
|
105
|
-
const data = await AuthsignalPushModule.getChallenge();
|
|
106
|
-
|
|
107
|
-
return { data };
|
|
108
|
-
} catch (ex) {
|
|
109
|
-
if (this.enableLogging) {
|
|
110
|
-
console.log(ex);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return handleErrorCodes(ex);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
async updateChallenge({
|
|
118
|
-
challengeId,
|
|
119
|
-
approved,
|
|
120
|
-
verificationCode = null,
|
|
121
|
-
}: UpdateChallengeInput): Promise<AuthsignalResponse<boolean>> {
|
|
122
|
-
await this.ensureModuleIsInitialized();
|
|
123
|
-
|
|
124
|
-
try {
|
|
125
|
-
const data = await AuthsignalPushModule.updateChallenge(
|
|
126
|
-
challengeId,
|
|
127
|
-
approved,
|
|
128
|
-
verificationCode
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
return { data };
|
|
132
|
-
} catch (ex) {
|
|
133
|
-
if (this.enableLogging) {
|
|
134
|
-
console.log(ex);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return handleErrorCodes(ex);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
private async ensureModuleIsInitialized() {
|
|
142
|
-
if (initialized) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
await AuthsignalPushModule.initialize(this.tenantID, this.baseURL);
|
|
147
|
-
|
|
148
|
-
initialized = true;
|
|
149
|
-
}
|
|
150
|
-
}
|
package/src/qr.ts
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { NativeModules, Platform } from 'react-native';
|
|
2
|
-
import { handleErrorCodes, LINKING_ERROR } from './error';
|
|
3
|
-
import type {
|
|
4
|
-
AddCredentialInput,
|
|
5
|
-
AppCredential,
|
|
6
|
-
AuthsignalResponse,
|
|
7
|
-
ClaimChallengeInput,
|
|
8
|
-
ClaimChallengeResponse,
|
|
9
|
-
UpdateChallengeInput,
|
|
10
|
-
} from './types';
|
|
11
|
-
|
|
12
|
-
interface ConstructorArgs {
|
|
13
|
-
tenantID: string;
|
|
14
|
-
baseURL: string;
|
|
15
|
-
enableLogging: boolean;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
let initialized = false;
|
|
19
|
-
|
|
20
|
-
const AuthsignalQRCodeModule = NativeModules.AuthsignalQRCodeModule
|
|
21
|
-
? NativeModules.AuthsignalQRCodeModule
|
|
22
|
-
: new Proxy(
|
|
23
|
-
{},
|
|
24
|
-
{
|
|
25
|
-
get() {
|
|
26
|
-
throw new Error(LINKING_ERROR);
|
|
27
|
-
},
|
|
28
|
-
}
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
export class AuthsignalQrCode {
|
|
32
|
-
tenantID: string;
|
|
33
|
-
baseURL: string;
|
|
34
|
-
enableLogging: boolean;
|
|
35
|
-
|
|
36
|
-
constructor({ tenantID, baseURL, enableLogging }: ConstructorArgs) {
|
|
37
|
-
this.tenantID = tenantID;
|
|
38
|
-
this.baseURL = baseURL;
|
|
39
|
-
this.enableLogging = enableLogging;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async getCredential(): Promise<
|
|
43
|
-
AuthsignalResponse<AppCredential | undefined>
|
|
44
|
-
> {
|
|
45
|
-
await this.ensureModuleIsInitialized();
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
const data = await AuthsignalQRCodeModule.getCredential();
|
|
49
|
-
|
|
50
|
-
return { data };
|
|
51
|
-
} catch (ex) {
|
|
52
|
-
if (this.enableLogging) {
|
|
53
|
-
console.log(ex);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return handleErrorCodes(ex);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async addCredential({
|
|
61
|
-
token,
|
|
62
|
-
requireUserAuthentication = false,
|
|
63
|
-
keychainAccess,
|
|
64
|
-
}: AddCredentialInput = {}): Promise<AuthsignalResponse<AppCredential>> {
|
|
65
|
-
await this.ensureModuleIsInitialized();
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
const data =
|
|
69
|
-
Platform.OS === 'ios'
|
|
70
|
-
? await AuthsignalQRCodeModule.addCredential(
|
|
71
|
-
token,
|
|
72
|
-
requireUserAuthentication,
|
|
73
|
-
keychainAccess
|
|
74
|
-
)
|
|
75
|
-
: await AuthsignalQRCodeModule.addCredential(token);
|
|
76
|
-
|
|
77
|
-
return { data };
|
|
78
|
-
} catch (ex) {
|
|
79
|
-
if (this.enableLogging) {
|
|
80
|
-
console.log(ex);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return handleErrorCodes(ex);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async removeCredential(): Promise<AuthsignalResponse<boolean>> {
|
|
88
|
-
await this.ensureModuleIsInitialized();
|
|
89
|
-
|
|
90
|
-
try {
|
|
91
|
-
const data = await AuthsignalQRCodeModule.removeCredential();
|
|
92
|
-
return { data };
|
|
93
|
-
} catch (ex) {
|
|
94
|
-
if (this.enableLogging) {
|
|
95
|
-
console.log(ex);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return handleErrorCodes(ex);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
async claimChallenge({
|
|
103
|
-
challengeId,
|
|
104
|
-
}: ClaimChallengeInput): Promise<AuthsignalResponse<ClaimChallengeResponse>> {
|
|
105
|
-
await this.ensureModuleIsInitialized();
|
|
106
|
-
|
|
107
|
-
try {
|
|
108
|
-
const data = await AuthsignalQRCodeModule.claimChallenge(challengeId);
|
|
109
|
-
|
|
110
|
-
return { data };
|
|
111
|
-
} catch (ex) {
|
|
112
|
-
if (this.enableLogging) {
|
|
113
|
-
console.log(ex);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return handleErrorCodes(ex);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
async updateChallenge({
|
|
121
|
-
challengeId,
|
|
122
|
-
approved,
|
|
123
|
-
verificationCode = null,
|
|
124
|
-
}: UpdateChallengeInput): Promise<AuthsignalResponse<boolean>> {
|
|
125
|
-
await this.ensureModuleIsInitialized();
|
|
126
|
-
|
|
127
|
-
try {
|
|
128
|
-
const data = await AuthsignalQRCodeModule.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
|
-
return handleErrorCodes(ex);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
private async ensureModuleIsInitialized() {
|
|
145
|
-
if (initialized) {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
await AuthsignalQRCodeModule.initialize(this.tenantID, this.baseURL);
|
|
150
|
-
|
|
151
|
-
initialized = true;
|
|
152
|
-
}
|
|
153
|
-
}
|
package/src/sms.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { NativeModules } from 'react-native';
|
|
2
|
-
import { handleErrorCodes, LINKING_ERROR } from './error';
|
|
3
|
-
import type { AuthsignalResponse, VerifyInput, VerifyResponse } from './types';
|
|
4
|
-
|
|
5
|
-
interface ConstructorArgs {
|
|
6
|
-
tenantID: string;
|
|
7
|
-
baseURL: string;
|
|
8
|
-
enableLogging: boolean;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
interface EnrollSmsInput {
|
|
12
|
-
phoneNumber: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
let initialized = false;
|
|
16
|
-
|
|
17
|
-
const AuthsignalSMSModule = NativeModules.AuthsignalSMSModule
|
|
18
|
-
? NativeModules.AuthsignalSMSModule
|
|
19
|
-
: new Proxy(
|
|
20
|
-
{},
|
|
21
|
-
{
|
|
22
|
-
get() {
|
|
23
|
-
throw new Error(LINKING_ERROR);
|
|
24
|
-
},
|
|
25
|
-
}
|
|
26
|
-
);
|
|
27
|
-
|
|
28
|
-
export class AuthsignalSms {
|
|
29
|
-
tenantID: string;
|
|
30
|
-
baseURL: string;
|
|
31
|
-
enableLogging: boolean;
|
|
32
|
-
|
|
33
|
-
constructor({ tenantID, baseURL, enableLogging }: ConstructorArgs) {
|
|
34
|
-
this.tenantID = tenantID;
|
|
35
|
-
this.baseURL = baseURL;
|
|
36
|
-
this.enableLogging = enableLogging;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async enroll({
|
|
40
|
-
phoneNumber,
|
|
41
|
-
}: EnrollSmsInput): Promise<AuthsignalResponse<void>> {
|
|
42
|
-
await this.ensureModuleIsInitialized();
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
await AuthsignalSMSModule.enroll(phoneNumber);
|
|
46
|
-
|
|
47
|
-
return {};
|
|
48
|
-
} catch (ex) {
|
|
49
|
-
return this.handleError(ex);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async challenge(): Promise<AuthsignalResponse<void>> {
|
|
54
|
-
await this.ensureModuleIsInitialized();
|
|
55
|
-
|
|
56
|
-
try {
|
|
57
|
-
await AuthsignalSMSModule.challenge();
|
|
58
|
-
|
|
59
|
-
return {};
|
|
60
|
-
} catch (ex) {
|
|
61
|
-
return this.handleError(ex);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async verify({
|
|
66
|
-
code,
|
|
67
|
-
}: VerifyInput): Promise<AuthsignalResponse<VerifyResponse>> {
|
|
68
|
-
await this.ensureModuleIsInitialized();
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
const data = await AuthsignalSMSModule.verify(code);
|
|
72
|
-
|
|
73
|
-
return { data };
|
|
74
|
-
} catch (ex) {
|
|
75
|
-
return this.handleError(ex);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
private async ensureModuleIsInitialized() {
|
|
80
|
-
if (initialized) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
await AuthsignalSMSModule.initialize(this.tenantID, this.baseURL);
|
|
85
|
-
|
|
86
|
-
initialized = true;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
private handleError(ex: unknown) {
|
|
90
|
-
if (this.enableLogging) {
|
|
91
|
-
console.log(ex);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return handleErrorCodes(ex);
|
|
95
|
-
}
|
|
96
|
-
}
|