@dynamic-labs/react-native-extension 4.0.0-alpha.5 → 4.0.0-alpha.50
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 +53 -35
- package/index.js +54 -36
- package/package.json +6 -5
- 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
|
@@ -2,32 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var assertPackageVersion = require('@dynamic-labs/assert-package-version');
|
|
6
|
+
var reactNative = require('react-native');
|
|
5
7
|
var react = require('react');
|
|
6
8
|
var reactNativeWebview = require('react-native-webview');
|
|
7
9
|
var messageTransport = require('@dynamic-labs/message-transport');
|
|
8
10
|
var logger$1 = require('@dynamic-labs/logger');
|
|
9
|
-
var reactNative = require('react-native');
|
|
10
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
12
|
var reactNativePasskeyStamper = require('@turnkey/react-native-passkey-stamper');
|
|
12
13
|
var expoLinking = require('expo-linking');
|
|
13
14
|
var expoWebBrowser = require('expo-web-browser');
|
|
14
15
|
var expoSecureStore = require('expo-secure-store');
|
|
15
16
|
|
|
16
|
-
var version = "4.0.0-alpha.
|
|
17
|
+
var version = "4.0.0-alpha.50";
|
|
17
18
|
|
|
18
19
|
function _extends() {
|
|
19
|
-
_extends = Object.assign ? Object.assign.bind() : function (
|
|
20
|
-
for (var
|
|
21
|
-
var
|
|
22
|
-
for (var
|
|
23
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
24
|
-
target[key] = source[key];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
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]);
|
|
27
24
|
}
|
|
28
|
-
return
|
|
29
|
-
};
|
|
30
|
-
return _extends.apply(this, arguments);
|
|
25
|
+
return n;
|
|
26
|
+
}, _extends.apply(null, arguments);
|
|
31
27
|
}
|
|
32
28
|
|
|
33
29
|
const logger = new logger$1.Logger('react-native-extension');
|
|
@@ -188,21 +184,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
188
184
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
189
185
|
};
|
|
190
186
|
|
|
191
|
-
const setupFetchHandler = core => {
|
|
192
|
-
const fetchRequestChannel = messageTransport.createRequestChannel(core.messageTransport);
|
|
193
|
-
fetchRequestChannel.handle('fetch', (input, init) => __awaiter(void 0, void 0, void 0, function* () {
|
|
194
|
-
const response = yield fetch(input, init);
|
|
195
|
-
const responseBody = yield response.text();
|
|
196
|
-
return {
|
|
197
|
-
body: responseBody,
|
|
198
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
199
|
-
headers: Object.fromEntries(response.headers.entries()),
|
|
200
|
-
status: response.status,
|
|
201
|
-
statusText: response.statusText
|
|
202
|
-
};
|
|
203
|
-
}));
|
|
204
|
-
};
|
|
205
|
-
|
|
206
187
|
const setupPasskeyHandler = core => {
|
|
207
188
|
const passkeysRequestChannel = messageTransport.createRequestChannel(core.messageTransport);
|
|
208
189
|
passkeysRequestChannel.handle('createPasskey', _a => __awaiter(void 0, [_a], void 0, function* ({
|
|
@@ -253,11 +234,35 @@ const setupPlatformHandler = core => {
|
|
|
253
234
|
}));
|
|
254
235
|
};
|
|
255
236
|
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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
|
+
}));
|
|
261
266
|
};
|
|
262
267
|
|
|
263
268
|
const defaultWebviewUrl = `https://webview.dynamicauth.com/${version}`;
|
|
@@ -266,11 +271,22 @@ const ReactNativeExtension = ({
|
|
|
266
271
|
webviewDebuggingEnabled,
|
|
267
272
|
appOrigin
|
|
268
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
|
+
}
|
|
269
286
|
if (appOrigin) core.manifest.setAppOrigin(appOrigin);
|
|
270
287
|
setupPasskeyHandler(core);
|
|
271
|
-
setupFetchHandler(core);
|
|
272
288
|
setupPlatformHandler(core);
|
|
273
|
-
|
|
289
|
+
setupStorageHandler(core);
|
|
274
290
|
return {
|
|
275
291
|
reactNative: {
|
|
276
292
|
WebView: createWebView({
|
|
@@ -282,4 +298,6 @@ const ReactNativeExtension = ({
|
|
|
282
298
|
};
|
|
283
299
|
};
|
|
284
300
|
|
|
301
|
+
assertPackageVersion.assertPackageVersion('@dynamic-labs/react-native-extension', version);
|
|
302
|
+
|
|
285
303
|
exports.ReactNativeExtension = ReactNativeExtension;
|
package/index.js
CHANGED
|
@@ -1,29 +1,25 @@
|
|
|
1
|
+
import { assertPackageVersion } from '@dynamic-labs/assert-package-version';
|
|
2
|
+
import { StyleSheet, Platform } from 'react-native';
|
|
1
3
|
import { useRef, useEffect, useCallback, useState } from 'react';
|
|
2
4
|
import { WebView as WebView$1 } from 'react-native-webview';
|
|
3
5
|
import { parseMessageTransportData, createRequestChannel } from '@dynamic-labs/message-transport';
|
|
4
6
|
import { Logger } from '@dynamic-labs/logger';
|
|
5
|
-
import { StyleSheet } from 'react-native';
|
|
6
7
|
import { jsx } from 'react/jsx-runtime';
|
|
7
8
|
import { createPasskey, PasskeyStamper } from '@turnkey/react-native-passkey-stamper';
|
|
8
9
|
import { createURL, openURL } from 'expo-linking';
|
|
9
10
|
import { openAuthSessionAsync } from 'expo-web-browser';
|
|
10
|
-
import { getItemAsync,
|
|
11
|
+
import { getItemAsync, deleteItemAsync, setItemAsync } from 'expo-secure-store';
|
|
11
12
|
|
|
12
|
-
var version = "4.0.0-alpha.
|
|
13
|
+
var version = "4.0.0-alpha.50";
|
|
13
14
|
|
|
14
15
|
function _extends() {
|
|
15
|
-
_extends = Object.assign ? Object.assign.bind() : function (
|
|
16
|
-
for (var
|
|
17
|
-
var
|
|
18
|
-
for (var
|
|
19
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
20
|
-
target[key] = source[key];
|
|
21
|
-
}
|
|
22
|
-
}
|
|
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]);
|
|
23
20
|
}
|
|
24
|
-
return
|
|
25
|
-
};
|
|
26
|
-
return _extends.apply(this, arguments);
|
|
21
|
+
return n;
|
|
22
|
+
}, _extends.apply(null, arguments);
|
|
27
23
|
}
|
|
28
24
|
|
|
29
25
|
const logger = new Logger('react-native-extension');
|
|
@@ -184,21 +180,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
184
180
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
185
181
|
};
|
|
186
182
|
|
|
187
|
-
const setupFetchHandler = core => {
|
|
188
|
-
const fetchRequestChannel = createRequestChannel(core.messageTransport);
|
|
189
|
-
fetchRequestChannel.handle('fetch', (input, init) => __awaiter(void 0, void 0, void 0, function* () {
|
|
190
|
-
const response = yield fetch(input, init);
|
|
191
|
-
const responseBody = yield response.text();
|
|
192
|
-
return {
|
|
193
|
-
body: responseBody,
|
|
194
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
195
|
-
headers: Object.fromEntries(response.headers.entries()),
|
|
196
|
-
status: response.status,
|
|
197
|
-
statusText: response.statusText
|
|
198
|
-
};
|
|
199
|
-
}));
|
|
200
|
-
};
|
|
201
|
-
|
|
202
183
|
const setupPasskeyHandler = core => {
|
|
203
184
|
const passkeysRequestChannel = createRequestChannel(core.messageTransport);
|
|
204
185
|
passkeysRequestChannel.handle('createPasskey', _a => __awaiter(void 0, [_a], void 0, function* ({
|
|
@@ -249,11 +230,35 @@ const setupPlatformHandler = core => {
|
|
|
249
230
|
}));
|
|
250
231
|
};
|
|
251
232
|
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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
|
+
}));
|
|
257
262
|
};
|
|
258
263
|
|
|
259
264
|
const defaultWebviewUrl = `https://webview.dynamicauth.com/${version}`;
|
|
@@ -262,11 +267,22 @@ const ReactNativeExtension = ({
|
|
|
262
267
|
webviewDebuggingEnabled,
|
|
263
268
|
appOrigin
|
|
264
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
|
+
}
|
|
265
282
|
if (appOrigin) core.manifest.setAppOrigin(appOrigin);
|
|
266
283
|
setupPasskeyHandler(core);
|
|
267
|
-
setupFetchHandler(core);
|
|
268
284
|
setupPlatformHandler(core);
|
|
269
|
-
|
|
285
|
+
setupStorageHandler(core);
|
|
270
286
|
return {
|
|
271
287
|
reactNative: {
|
|
272
288
|
WebView: createWebView({
|
|
@@ -278,4 +294,6 @@ const ReactNativeExtension = ({
|
|
|
278
294
|
};
|
|
279
295
|
};
|
|
280
296
|
|
|
297
|
+
assertPackageVersion('@dynamic-labs/react-native-extension', version);
|
|
298
|
+
|
|
281
299
|
export { ReactNativeExtension };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/react-native-extension",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.50",
|
|
4
4
|
"main": "./index.cjs",
|
|
5
5
|
"module": "./index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
@@ -14,10 +14,11 @@
|
|
|
14
14
|
"./package.json": "./package.json"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@turnkey/react-native-passkey-stamper": "0.2.
|
|
18
|
-
"@dynamic-labs/
|
|
19
|
-
"@dynamic-labs/
|
|
20
|
-
"@dynamic-labs/
|
|
17
|
+
"@turnkey/react-native-passkey-stamper": "0.2.15",
|
|
18
|
+
"@dynamic-labs/assert-package-version": "4.0.0-alpha.50",
|
|
19
|
+
"@dynamic-labs/client": "4.0.0-alpha.50",
|
|
20
|
+
"@dynamic-labs/logger": "4.0.0-alpha.50",
|
|
21
|
+
"@dynamic-labs/message-transport": "4.0.0-alpha.50"
|
|
21
22
|
},
|
|
22
23
|
"peerDependencies": {
|
|
23
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';
|