@dynamic-labs/react-native-extension 4.0.0-alpha.8 → 4.0.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.
- package/index.cjs +50 -35
- package/index.js +51 -36
- package/package.json +6 -6
- package/src/ReactNativeExtension/ReactNativeExtension.d.ts +1 -1
- package/src/ReactNativeExtension/setupStorageHandler/index.d.ts +1 -0
- package/src/ReactNativeExtension/setupStorageHandler/setupStorageHandler.d.ts +2 -0
- package/src/ReactNativeExtension/setupFetchHandler/index.d.ts +0 -1
- package/src/ReactNativeExtension/setupFetchHandler/setupFetchHandler.d.ts +0 -2
- package/src/ReactNativeExtension/setupSecureStorageHandler/index.d.ts +0 -1
- package/src/ReactNativeExtension/setupSecureStorageHandler/setupSecureStorageHandler.d.ts +0 -2
package/index.cjs
CHANGED
|
@@ -3,32 +3,27 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var assertPackageVersion = require('@dynamic-labs/assert-package-version');
|
|
6
|
+
var reactNative = require('react-native');
|
|
6
7
|
var react = require('react');
|
|
7
8
|
var reactNativeWebview = require('react-native-webview');
|
|
8
9
|
var messageTransport = require('@dynamic-labs/message-transport');
|
|
9
10
|
var logger$1 = require('@dynamic-labs/logger');
|
|
10
|
-
var reactNative = require('react-native');
|
|
11
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
12
12
|
var reactNativePasskeyStamper = require('@turnkey/react-native-passkey-stamper');
|
|
13
13
|
var expoLinking = require('expo-linking');
|
|
14
14
|
var expoWebBrowser = require('expo-web-browser');
|
|
15
15
|
var expoSecureStore = require('expo-secure-store');
|
|
16
16
|
|
|
17
|
-
var version = "4.0.0
|
|
17
|
+
var version = "4.0.0";
|
|
18
18
|
|
|
19
19
|
function _extends() {
|
|
20
|
-
_extends = Object.assign ? Object.assign.bind() : function (
|
|
21
|
-
for (var
|
|
22
|
-
var
|
|
23
|
-
for (var
|
|
24
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
25
|
-
target[key] = source[key];
|
|
26
|
-
}
|
|
27
|
-
}
|
|
20
|
+
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
21
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
22
|
+
var t = arguments[e];
|
|
23
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
28
24
|
}
|
|
29
|
-
return
|
|
30
|
-
};
|
|
31
|
-
return _extends.apply(this, arguments);
|
|
25
|
+
return n;
|
|
26
|
+
}, _extends.apply(null, arguments);
|
|
32
27
|
}
|
|
33
28
|
|
|
34
29
|
const logger = new logger$1.Logger('react-native-extension');
|
|
@@ -189,21 +184,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
189
184
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
190
185
|
};
|
|
191
186
|
|
|
192
|
-
const setupFetchHandler = core => {
|
|
193
|
-
const fetchRequestChannel = messageTransport.createRequestChannel(core.messageTransport);
|
|
194
|
-
fetchRequestChannel.handle('fetch', (input, init) => __awaiter(void 0, void 0, void 0, function* () {
|
|
195
|
-
const response = yield fetch(input, init);
|
|
196
|
-
const responseBody = yield response.text();
|
|
197
|
-
return {
|
|
198
|
-
body: responseBody,
|
|
199
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
200
|
-
headers: Object.fromEntries(response.headers.entries()),
|
|
201
|
-
status: response.status,
|
|
202
|
-
statusText: response.statusText
|
|
203
|
-
};
|
|
204
|
-
}));
|
|
205
|
-
};
|
|
206
|
-
|
|
207
187
|
const setupPasskeyHandler = core => {
|
|
208
188
|
const passkeysRequestChannel = messageTransport.createRequestChannel(core.messageTransport);
|
|
209
189
|
passkeysRequestChannel.handle('createPasskey', _a => __awaiter(void 0, [_a], void 0, function* ({
|
|
@@ -254,11 +234,35 @@ const setupPlatformHandler = core => {
|
|
|
254
234
|
}));
|
|
255
235
|
};
|
|
256
236
|
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
237
|
+
const assertValidSource = source => {
|
|
238
|
+
if (source !== 'secureStorage') {
|
|
239
|
+
throw new Error(`Invalid storage source "${source}"`);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const setupStorageHandler = core => {
|
|
243
|
+
const storageRequestChannel = messageTransport.createRequestChannel(core.messageTransport);
|
|
244
|
+
storageRequestChannel.handle('getItem', _a => __awaiter(void 0, [_a], void 0, function* ({
|
|
245
|
+
key,
|
|
246
|
+
source
|
|
247
|
+
}) {
|
|
248
|
+
assertValidSource(source);
|
|
249
|
+
return expoSecureStore.getItemAsync(key);
|
|
250
|
+
}));
|
|
251
|
+
storageRequestChannel.handle('deleteItem', _b => __awaiter(void 0, [_b], void 0, function* ({
|
|
252
|
+
key,
|
|
253
|
+
source
|
|
254
|
+
}) {
|
|
255
|
+
assertValidSource(source);
|
|
256
|
+
return expoSecureStore.deleteItemAsync(key);
|
|
257
|
+
}));
|
|
258
|
+
storageRequestChannel.handle('setItem', _c => __awaiter(void 0, [_c], void 0, function* ({
|
|
259
|
+
key,
|
|
260
|
+
data,
|
|
261
|
+
source
|
|
262
|
+
}) {
|
|
263
|
+
assertValidSource(source);
|
|
264
|
+
return expoSecureStore.setItemAsync(key, data);
|
|
265
|
+
}));
|
|
262
266
|
};
|
|
263
267
|
|
|
264
268
|
const defaultWebviewUrl = `https://webview.dynamicauth.com/${version}`;
|
|
@@ -267,11 +271,22 @@ const ReactNativeExtension = ({
|
|
|
267
271
|
webviewDebuggingEnabled,
|
|
268
272
|
appOrigin
|
|
269
273
|
} = {}) => (_, core) => {
|
|
274
|
+
const isPlatformSupportedByWebView = reactNative.Platform.OS === 'android' || reactNative.Platform.OS === 'ios';
|
|
275
|
+
/**
|
|
276
|
+
* If react-native-webview does not supported it will return
|
|
277
|
+
* a dummy webview component so it does not break expo for web
|
|
278
|
+
*/
|
|
279
|
+
if (!isPlatformSupportedByWebView) {
|
|
280
|
+
return {
|
|
281
|
+
reactNative: {
|
|
282
|
+
WebView: () => null
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
}
|
|
270
286
|
if (appOrigin) core.manifest.setAppOrigin(appOrigin);
|
|
271
287
|
setupPasskeyHandler(core);
|
|
272
|
-
setupFetchHandler(core);
|
|
273
288
|
setupPlatformHandler(core);
|
|
274
|
-
|
|
289
|
+
setupStorageHandler(core);
|
|
275
290
|
return {
|
|
276
291
|
reactNative: {
|
|
277
292
|
WebView: createWebView({
|
package/index.js
CHANGED
|
@@ -1,30 +1,25 @@
|
|
|
1
1
|
import { assertPackageVersion } from '@dynamic-labs/assert-package-version';
|
|
2
|
+
import { StyleSheet, Platform } from 'react-native';
|
|
2
3
|
import { useRef, useEffect, useCallback, useState } from 'react';
|
|
3
4
|
import { WebView as WebView$1 } from 'react-native-webview';
|
|
4
5
|
import { parseMessageTransportData, createRequestChannel } from '@dynamic-labs/message-transport';
|
|
5
6
|
import { Logger } from '@dynamic-labs/logger';
|
|
6
|
-
import { StyleSheet } from 'react-native';
|
|
7
7
|
import { jsx } from 'react/jsx-runtime';
|
|
8
8
|
import { createPasskey, PasskeyStamper } from '@turnkey/react-native-passkey-stamper';
|
|
9
9
|
import { createURL, openURL } from 'expo-linking';
|
|
10
10
|
import { openAuthSessionAsync } from 'expo-web-browser';
|
|
11
|
-
import { getItemAsync,
|
|
11
|
+
import { getItemAsync, deleteItemAsync, setItemAsync } from 'expo-secure-store';
|
|
12
12
|
|
|
13
|
-
var version = "4.0.0
|
|
13
|
+
var version = "4.0.0";
|
|
14
14
|
|
|
15
15
|
function _extends() {
|
|
16
|
-
_extends = Object.assign ? Object.assign.bind() : function (
|
|
17
|
-
for (var
|
|
18
|
-
var
|
|
19
|
-
for (var
|
|
20
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
21
|
-
target[key] = source[key];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
16
|
+
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
17
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
18
|
+
var t = arguments[e];
|
|
19
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
24
20
|
}
|
|
25
|
-
return
|
|
26
|
-
};
|
|
27
|
-
return _extends.apply(this, arguments);
|
|
21
|
+
return n;
|
|
22
|
+
}, _extends.apply(null, arguments);
|
|
28
23
|
}
|
|
29
24
|
|
|
30
25
|
const logger = new Logger('react-native-extension');
|
|
@@ -185,21 +180,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
185
180
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
186
181
|
};
|
|
187
182
|
|
|
188
|
-
const setupFetchHandler = core => {
|
|
189
|
-
const fetchRequestChannel = createRequestChannel(core.messageTransport);
|
|
190
|
-
fetchRequestChannel.handle('fetch', (input, init) => __awaiter(void 0, void 0, void 0, function* () {
|
|
191
|
-
const response = yield fetch(input, init);
|
|
192
|
-
const responseBody = yield response.text();
|
|
193
|
-
return {
|
|
194
|
-
body: responseBody,
|
|
195
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
196
|
-
headers: Object.fromEntries(response.headers.entries()),
|
|
197
|
-
status: response.status,
|
|
198
|
-
statusText: response.statusText
|
|
199
|
-
};
|
|
200
|
-
}));
|
|
201
|
-
};
|
|
202
|
-
|
|
203
183
|
const setupPasskeyHandler = core => {
|
|
204
184
|
const passkeysRequestChannel = createRequestChannel(core.messageTransport);
|
|
205
185
|
passkeysRequestChannel.handle('createPasskey', _a => __awaiter(void 0, [_a], void 0, function* ({
|
|
@@ -250,11 +230,35 @@ const setupPlatformHandler = core => {
|
|
|
250
230
|
}));
|
|
251
231
|
};
|
|
252
232
|
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
233
|
+
const assertValidSource = source => {
|
|
234
|
+
if (source !== 'secureStorage') {
|
|
235
|
+
throw new Error(`Invalid storage source "${source}"`);
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
const setupStorageHandler = core => {
|
|
239
|
+
const storageRequestChannel = createRequestChannel(core.messageTransport);
|
|
240
|
+
storageRequestChannel.handle('getItem', _a => __awaiter(void 0, [_a], void 0, function* ({
|
|
241
|
+
key,
|
|
242
|
+
source
|
|
243
|
+
}) {
|
|
244
|
+
assertValidSource(source);
|
|
245
|
+
return getItemAsync(key);
|
|
246
|
+
}));
|
|
247
|
+
storageRequestChannel.handle('deleteItem', _b => __awaiter(void 0, [_b], void 0, function* ({
|
|
248
|
+
key,
|
|
249
|
+
source
|
|
250
|
+
}) {
|
|
251
|
+
assertValidSource(source);
|
|
252
|
+
return deleteItemAsync(key);
|
|
253
|
+
}));
|
|
254
|
+
storageRequestChannel.handle('setItem', _c => __awaiter(void 0, [_c], void 0, function* ({
|
|
255
|
+
key,
|
|
256
|
+
data,
|
|
257
|
+
source
|
|
258
|
+
}) {
|
|
259
|
+
assertValidSource(source);
|
|
260
|
+
return setItemAsync(key, data);
|
|
261
|
+
}));
|
|
258
262
|
};
|
|
259
263
|
|
|
260
264
|
const defaultWebviewUrl = `https://webview.dynamicauth.com/${version}`;
|
|
@@ -263,11 +267,22 @@ const ReactNativeExtension = ({
|
|
|
263
267
|
webviewDebuggingEnabled,
|
|
264
268
|
appOrigin
|
|
265
269
|
} = {}) => (_, core) => {
|
|
270
|
+
const isPlatformSupportedByWebView = Platform.OS === 'android' || Platform.OS === 'ios';
|
|
271
|
+
/**
|
|
272
|
+
* If react-native-webview does not supported it will return
|
|
273
|
+
* a dummy webview component so it does not break expo for web
|
|
274
|
+
*/
|
|
275
|
+
if (!isPlatformSupportedByWebView) {
|
|
276
|
+
return {
|
|
277
|
+
reactNative: {
|
|
278
|
+
WebView: () => null
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
}
|
|
266
282
|
if (appOrigin) core.manifest.setAppOrigin(appOrigin);
|
|
267
283
|
setupPasskeyHandler(core);
|
|
268
|
-
setupFetchHandler(core);
|
|
269
284
|
setupPlatformHandler(core);
|
|
270
|
-
|
|
285
|
+
setupStorageHandler(core);
|
|
271
286
|
return {
|
|
272
287
|
reactNative: {
|
|
273
288
|
WebView: createWebView({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/react-native-extension",
|
|
3
|
-
"version": "4.0.0
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"main": "./index.cjs",
|
|
5
5
|
"module": "./index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"./package.json": "./package.json"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@turnkey/react-native-passkey-stamper": "0.2.
|
|
18
|
-
"@dynamic-labs/assert-package-version": "4.0.0
|
|
19
|
-
"@dynamic-labs/client": "4.0.0
|
|
20
|
-
"@dynamic-labs/logger": "4.0.0
|
|
21
|
-
"@dynamic-labs/message-transport": "4.0.0
|
|
17
|
+
"@turnkey/react-native-passkey-stamper": "0.2.15",
|
|
18
|
+
"@dynamic-labs/assert-package-version": "4.0.0",
|
|
19
|
+
"@dynamic-labs/client": "4.0.0",
|
|
20
|
+
"@dynamic-labs/logger": "4.0.0",
|
|
21
|
+
"@dynamic-labs/message-transport": "4.0.0"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"react": "^18.2.0",
|
|
@@ -16,7 +16,7 @@ export type ReactNativeExtensionProps = {
|
|
|
16
16
|
};
|
|
17
17
|
export type IReactNativeExtension = {
|
|
18
18
|
reactNative: {
|
|
19
|
-
WebView: () => JSX.Element;
|
|
19
|
+
WebView: () => JSX.Element | null;
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
22
|
export declare const ReactNativeExtension: ({ webviewUrl, webviewDebuggingEnabled, appOrigin, }?: ReactNativeExtensionProps) => Extension<IReactNativeExtension>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { setupStorageHandler } from './setupStorageHandler';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { setupFetchHandler } from './setupFetchHandler';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { setupSecureStorageHandler } from './setupSecureStorageHandler';
|