@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 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.5";
17
+ var version = "4.0.0-alpha.50";
17
18
 
18
19
  function _extends() {
19
- _extends = Object.assign ? Object.assign.bind() : function (target) {
20
- for (var i = 1; i < arguments.length; i++) {
21
- var source = arguments[i];
22
- for (var key in source) {
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 target;
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 setupSecureStorageHandler = core => {
257
- const secureStorageRequestChannel = messageTransport.createRequestChannel(core.messageTransport);
258
- secureStorageRequestChannel.handle('getSecureItem', expoSecureStore.getItemAsync);
259
- secureStorageRequestChannel.handle('setSecureItem', expoSecureStore.setItemAsync);
260
- secureStorageRequestChannel.handle('deleteSecureItem', expoSecureStore.deleteItemAsync);
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
- setupSecureStorageHandler(core);
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, setItemAsync, deleteItemAsync } from 'expo-secure-store';
11
+ import { getItemAsync, deleteItemAsync, setItemAsync } from 'expo-secure-store';
11
12
 
12
- var version = "4.0.0-alpha.5";
13
+ var version = "4.0.0-alpha.50";
13
14
 
14
15
  function _extends() {
15
- _extends = Object.assign ? Object.assign.bind() : function (target) {
16
- for (var i = 1; i < arguments.length; i++) {
17
- var source = arguments[i];
18
- for (var key in source) {
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 target;
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 setupSecureStorageHandler = core => {
253
- const secureStorageRequestChannel = createRequestChannel(core.messageTransport);
254
- secureStorageRequestChannel.handle('getSecureItem', getItemAsync);
255
- secureStorageRequestChannel.handle('setSecureItem', setItemAsync);
256
- secureStorageRequestChannel.handle('deleteSecureItem', deleteItemAsync);
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
- setupSecureStorageHandler(core);
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.5",
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.5",
18
- "@dynamic-labs/client": "4.0.0-alpha.5",
19
- "@dynamic-labs/logger": "4.0.0-alpha.5",
20
- "@dynamic-labs/message-transport": "4.0.0-alpha.5"
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';
@@ -0,0 +1,2 @@
1
+ import { Core } from '@dynamic-labs/client';
2
+ export declare const setupStorageHandler: (core: Core) => void;
@@ -1 +0,0 @@
1
- export { setupFetchHandler } from './setupFetchHandler';
@@ -1,2 +0,0 @@
1
- import { Core } from '@dynamic-labs/client';
2
- export declare const setupFetchHandler: (core: Core) => void;
@@ -1 +0,0 @@
1
- export { setupSecureStorageHandler } from './setupSecureStorageHandler';
@@ -1,2 +0,0 @@
1
- import { Core } from '@dynamic-labs/client';
2
- export declare const setupSecureStorageHandler: (core: Core) => void;