jihuaqiang 2 anni fa
parent
commit
6c963c4963
71 ha cambiato i file con 1905 aggiunte e 310 eliminazioni
  1. 16 14
      .eslintrc.js
  2. 3 1
      .prettierrc.js
  3. 37 64
      App.tsx
  4. 2 2
      android/app/_BUCK
  5. 2 2
      android/app/build.gradle
  6. 1 1
      android/app/src/debug/java/com/awesometsproject/ReactNativeFlipper.java
  7. 1 1
      android/app/src/main/AndroidManifest.xml
  8. 2 2
      android/app/src/main/java/com/awesometsproject/MainActivity.java
  9. 3 3
      android/app/src/main/java/com/awesometsproject/MainApplication.java
  10. 4 4
      android/app/src/main/java/com/awesometsproject/newarchitecture/MainApplicationReactNativeHost.java
  11. 1 1
      android/app/src/main/java/com/awesometsproject/newarchitecture/components/MainComponentsRegistry.java
  12. 2 2
      android/app/src/main/java/com/awesometsproject/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
  13. 1 1
      android/app/src/main/jni/Android.mk
  14. 1 1
      android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
  15. 1 1
      android/app/src/main/jni/MainComponentsRegistry.h
  16. 1 1
      android/app/src/main/res/values/strings.xml
  17. 1 1
      android/settings.gradle
  18. 2 2
      app.json
  19. 26 1
      babel.config.js
  20. 2 2
      index.js
  21. 0 88
      ios/AwesomeTSProject.xcodeproj/xcshareddata/xcschemes/AwesomeTSProject.xcscheme
  22. 80 80
      ios/Denet.xcodeproj/project.pbxproj
  23. 1 1
      ios/Denet.xcworkspace/contents.xcworkspacedata
  24. 8 0
      ios/Denet.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  25. 8 0
      ios/Denet.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  26. 0 0
      ios/Denet/AppDelegate.h
  27. 1 1
      ios/Denet/AppDelegate.mm
  28. 0 0
      ios/Denet/Images.xcassets/AppIcon.appiconset/Contents.json
  29. 0 0
      ios/Denet/Images.xcassets/Contents.json
  30. 1 1
      ios/Denet/Info.plist
  31. 1 1
      ios/Denet/LaunchScreen.storyboard
  32. 0 0
      ios/Denet/main.m
  33. 2 2
      ios/DenetTests/DenetTests.m
  34. 0 0
      ios/DenetTests/Info.plist
  35. 2 2
      ios/Podfile
  36. 54 1
      ios/Podfile.lock
  37. 8 8
      metro.config.js
  38. 18 2
      package.json
  39. 119 0
      src/components/useLogin.tsx
  40. 52 0
      src/netWork/index.ts
  41. 5 0
      src/netWork/nft.tsx
  42. 12 0
      src/pages/navigations/NFTs.tsx
  43. 66 0
      src/pages/navigations/home.tsx
  44. 84 0
      src/pages/navigations/me.tsx
  45. 12 0
      src/pages/navigations/message.tsx
  46. 12 0
      src/pages/navigations/wallet.tsx
  47. 32 0
      src/pages/screens/login.tsx
  48. 37 0
      src/pages/screens/redpack.tsx
  49. 80 0
      src/pages/screens/twitter.tsx
  50. 131 0
      src/router/index.tsx
  51. BIN
      src/static/img/home/左侧广告语.png
  52. BIN
      src/static/img/home/滚动气泡.png
  53. 3 0
      src/static/img/tab/home-active.svg
  54. 3 0
      src/static/img/tab/home.svg
  55. 23 0
      src/static/img/tab/index.tsx
  56. 3 0
      src/static/img/tab/me-active.svg
  57. 3 0
      src/static/img/tab/me.svg
  58. 3 0
      src/static/img/tab/message-active.svg
  59. 3 0
      src/static/img/tab/message.svg
  60. 1 0
      src/static/img/tab/nfts-active.svg
  61. 1 0
      src/static/img/tab/nfts.svg
  62. 3 0
      src/static/img/tab/wallet-active.svg
  63. 3 0
      src/static/img/tab/wallet.svg
  64. 28 0
      src/storage/index.ts
  65. 0 0
      src/types/index.ts
  66. 3 0
      src/types/network.ts
  67. 241 0
      src/utils/addDom.js
  68. 26 0
      src/utils/cookie.ts
  69. 57 0
      src/utils/index.ts
  70. 14 1
      tsconfig.json
  71. 552 15
      yarn.lock

+ 16 - 14
.eslintrc.js

@@ -1,16 +1,18 @@
 module.exports = {
-  root: true,
-  extends: '@react-native-community',
-  parser: '@typescript-eslint/parser',
-  plugins: ['@typescript-eslint'],
-  overrides: [
-    {
-      files: ['*.ts', '*.tsx'],
-      rules: {
-        '@typescript-eslint/no-shadow': ['error'],
-        'no-shadow': 'off',
-        'no-undef': 'off',
-      },
-    },
-  ],
+	root: true,
+	extends: '@react-native-community',
+	parser: '@typescript-eslint/parser',
+	plugins: ['@typescript-eslint'],
+	overrides: [
+		{
+			files: ['*.ts', '*.tsx'],
+			rules: {
+				'@typescript-eslint/no-shadow': ['error'],
+				'react-native/no-inline-styles': 'off',
+				'react-hooks/exhaustive-deps': 'off',
+				'no-shadow': 'off',
+				'no-undef': 'off',
+			},
+		},
+	],
 };

+ 3 - 1
.prettierrc.js

@@ -1,7 +1,9 @@
 module.exports = {
+  useTabs: true,
+  tabWidth: 4,
   arrowParens: 'avoid',
   bracketSameLine: true,
-  bracketSpacing: false,
+  bracketSpacing: true,
   singleQuote: true,
   trailingComma: 'all',
 };

+ 37 - 64
App.tsx

@@ -1,67 +1,40 @@
-/**
- * Sample React Native App
- * https://github.com/facebook/react-native
- *
- * Generated with the TypeScript template
- * https://github.com/react-native-community/react-native-template-typescript
- *
- * @format
- */
+import React, { Component } from 'react';
+import { NavigationContainer } from '@react-navigation/native';
+import { createNativeStackNavigator } from '@react-navigation/native-stack';
+import { NavTabScreen } from './src/router';
+import Twitter from '@/pages/screens/twitter/index';
+import Redpack from '@/pages/screens/redpack/index';
+import Login from '@/pages/screens/login/index';
+import { SafeAreaProvider } from 'react-native-safe-area-context';
 
-import React, {useState} from 'react';
-import {
-  SafeAreaView,
-  ScrollView,
-  StatusBar,
-  StyleSheet,
-  useColorScheme,
-  Text,
-  Button,
-} from 'react-native';
-
-import {Colors, Header} from 'react-native/Libraries/NewAppScreen';
-
-const App = () => {
-  const [title, setTitle] = useState('this is test title');
-  const isDarkMode = useColorScheme() === 'dark';
-  const setTitles = () => {
-    setTitle('a');
-  };
-
-  const backgroundStyle = {
-    backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
-  };
-
-  return (
-    <SafeAreaView style={backgroundStyle}>
-      <StatusBar barStyle={isDarkMode ? 'light-content' : 'dark-content'} />
-      <ScrollView
-        contentInsetAdjustmentBehavior="automatic"
-        style={backgroundStyle}>
-        <Header />
-        <Button onPress={setTitles} title={title} />
-      </ScrollView>
-    </SafeAreaView>
-  );
-};
-
-const styles = StyleSheet.create({
-  sectionContainer: {
-    marginTop: 32,
-    paddingHorizontal: 24,
-  },
-  sectionTitle: {
-    fontSize: 24,
-    fontWeight: '600',
-  },
-  sectionDescription: {
-    marginTop: 8,
-    fontSize: 18,
-    fontWeight: '400',
-  },
-  highlight: {
-    fontWeight: '700',
-  },
-});
+class App extends Component {
+	render() {
+		const stackNavigator = createNativeStackNavigator();
 
+		return (
+			<SafeAreaProvider>
+				<NavigationContainer>
+					<stackNavigator.Navigator>
+						<stackNavigator.Screen
+							name="Home"
+							component={NavTabScreen}
+							options={{
+								headerShown: false,
+							}}
+						/>
+						<stackNavigator.Screen
+							name="Twitter"
+							component={Twitter}
+						/>
+						<stackNavigator.Screen
+							name="Redpack"
+							component={Redpack}
+						/>
+						<stackNavigator.Screen name="Login" component={Login} />
+					</stackNavigator.Navigator>
+				</NavigationContainer>
+			</SafeAreaProvider>
+		);
+	}
+}
 export default App;

+ 2 - 2
android/app/_BUCK

@@ -35,12 +35,12 @@ android_library(
 
 android_build_config(
     name = "build_config",
-    package = "com.awesometsproject",
+    package = "com.denet",
 )
 
 android_resource(
     name = "res",
-    package = "com.awesometsproject",
+    package = "com.denet",
     res = "src/main/res",
 )
 

+ 2 - 2
android/app/build.gradle

@@ -134,7 +134,7 @@ android {
     compileSdkVersion rootProject.ext.compileSdkVersion
 
     defaultConfig {
-        applicationId "com.awesometsproject"
+        applicationId "com.denet"
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
         versionCode 1
@@ -157,7 +157,7 @@ android {
                     cppFlags "-std=c++17"
                     // Make sure this target name is the same you specify inside the
                     // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
-                    targets "awesometsproject_appmodules"
+                    targets "denet_appmodules"
                 }
             }
             if (!enableSeparateBuildPerCPUArchitecture) {

+ 1 - 1
android/app/src/debug/java/com/awesometsproject/ReactNativeFlipper.java

@@ -4,7 +4,7 @@
  * <p>This source code is licensed under the MIT license found in the LICENSE file in the root
  * directory of this source tree.
  */
-package com.awesometsproject;
+package com.denet;
 
 import android.content.Context;
 import com.facebook.flipper.android.AndroidFlipperClient;

+ 1 - 1
android/app/src/main/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  package="com.awesometsproject">
+  package="com.denet">
 
     <uses-permission android:name="android.permission.INTERNET" />
 

+ 2 - 2
android/app/src/main/java/com/awesometsproject/MainActivity.java

@@ -1,4 +1,4 @@
-package com.awesometsproject;
+package com.denet;
 
 import com.facebook.react.ReactActivity;
 import com.facebook.react.ReactActivityDelegate;
@@ -12,7 +12,7 @@ public class MainActivity extends ReactActivity {
    */
   @Override
   protected String getMainComponentName() {
-    return "AwesomeTSProject";
+    return "denet";
   }
 
   /**

+ 3 - 3
android/app/src/main/java/com/awesometsproject/MainApplication.java

@@ -1,4 +1,4 @@
-package com.awesometsproject;
+package com.denet;
 
 import android.app.Application;
 import android.content.Context;
@@ -9,7 +9,7 @@ import com.facebook.react.ReactNativeHost;
 import com.facebook.react.ReactPackage;
 import com.facebook.react.config.ReactFeatureFlags;
 import com.facebook.soloader.SoLoader;
-import com.awesometsproject.newarchitecture.MainApplicationReactNativeHost;
+import com.denet.newarchitecture.MainApplicationReactNativeHost;
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
 
@@ -73,7 +73,7 @@ public class MainApplication extends Application implements ReactApplication {
          We use reflection here to pick up the class that initializes Flipper,
         since Flipper library is not available in release mode
         */
-        Class<?> aClass = Class.forName("com.awesometsproject.ReactNativeFlipper");
+        Class<?> aClass = Class.forName("com.denet.ReactNativeFlipper");
         aClass
             .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
             .invoke(null, context, reactInstanceManager);

+ 4 - 4
android/app/src/main/java/com/awesometsproject/newarchitecture/MainApplicationReactNativeHost.java

@@ -1,4 +1,4 @@
-package com.awesometsproject.newarchitecture;
+package com.denet.newarchitecture;
 
 import android.app.Application;
 import androidx.annotation.NonNull;
@@ -19,9 +19,9 @@ import com.facebook.react.fabric.CoreComponentsRegistry;
 import com.facebook.react.fabric.FabricJSIModuleProvider;
 import com.facebook.react.fabric.ReactNativeConfig;
 import com.facebook.react.uimanager.ViewManagerRegistry;
-import com.awesometsproject.BuildConfig;
-import com.awesometsproject.newarchitecture.components.MainComponentsRegistry;
-import com.awesometsproject.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;
+import com.denet.BuildConfig;
+import com.denet.newarchitecture.components.MainComponentsRegistry;
+import com.denet.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;
 import java.util.ArrayList;
 import java.util.List;
 

+ 1 - 1
android/app/src/main/java/com/awesometsproject/newarchitecture/components/MainComponentsRegistry.java

@@ -1,4 +1,4 @@
-package com.awesometsproject.newarchitecture.components;
+package com.denet.newarchitecture.components;
 
 import com.facebook.jni.HybridData;
 import com.facebook.proguard.annotations.DoNotStrip;

+ 2 - 2
android/app/src/main/java/com/awesometsproject/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java

@@ -1,4 +1,4 @@
-package com.awesometsproject.newarchitecture.modules;
+package com.denet.newarchitecture.modules;
 
 import com.facebook.jni.HybridData;
 import com.facebook.react.ReactPackage;
@@ -41,7 +41,7 @@ public class MainApplicationTurboModuleManagerDelegate
     if (!sIsSoLibraryLoaded) {
       // If you change the name of your application .so file in the Android.mk file,
       // make sure you update the name here as well.
-      SoLoader.loadLibrary("awesometsproject_appmodules");
+      SoLoader.loadLibrary("denet_appmodules");
       sIsSoLibraryLoaded = true;
     }
   }

+ 1 - 1
android/app/src/main/jni/Android.mk

@@ -10,7 +10,7 @@ include $(CLEAR_VARS)
 LOCAL_PATH := $(THIS_DIR)
 
 # You can customize the name of your application .so file here.
-LOCAL_MODULE := awesometsproject_appmodules
+LOCAL_MODULE := denet_appmodules
 
 LOCAL_C_INCLUDES := $(LOCAL_PATH)
 LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)

+ 1 - 1
android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h

@@ -14,7 +14,7 @@ class MainApplicationTurboModuleManagerDelegate
  public:
   // Adapt it to the package you used for your Java class.
   static constexpr auto kJavaDescriptor =
-      "Lcom/awesometsproject/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
+      "Lcom/denet/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
 
   static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);
 

+ 1 - 1
android/app/src/main/jni/MainComponentsRegistry.h

@@ -13,7 +13,7 @@ class MainComponentsRegistry
  public:
   // Adapt it to the package you used for your Java class.
   constexpr static auto kJavaDescriptor =
-      "Lcom/awesometsproject/newarchitecture/components/MainComponentsRegistry;";
+      "Lcom/denet/newarchitecture/components/MainComponentsRegistry;";
 
   static void registerNatives();
 

+ 1 - 1
android/app/src/main/res/values/strings.xml

@@ -1,3 +1,3 @@
 <resources>
-    <string name="app_name">AwesomeTSProject</string>
+    <string name="app_name">Denet</string>
 </resources>

+ 1 - 1
android/settings.gradle

@@ -1,4 +1,4 @@
-rootProject.name = 'AwesomeTSProject'
+rootProject.name = 'Denet'
 apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
 include ':app'
 includeBuild('../node_modules/react-native-gradle-plugin')

+ 2 - 2
app.json

@@ -1,4 +1,4 @@
 {
-  "name": "AwesomeTSProject",
-  "displayName": "AwesomeTSProject"
+  "name": "Denet",
+  "displayName": "Denet"
 }

+ 26 - 1
babel.config.js

@@ -1,3 +1,28 @@
 module.exports = {
-  presets: ['module:metro-react-native-babel-preset'],
+	presets: ['module:metro-react-native-babel-preset'],
+	plugins: [
+		[
+			'module-resolver',
+			{
+				root: ['.'],
+				alias: {
+					'@/utils': './src/utils',
+					'@/styles': './src/styles',
+					'@/actions': './src/actions',
+					'@/components': './src/components',
+					'@/services': './src/services',
+					'@/pages': './src/pages',
+					'@/storage': './src/storage',
+					'@/netWork': './src/netWork',
+					'@/static/*': ['src/static'],
+				},
+			},
+		],
+		[
+			'babel-plugin-inline-import',
+			{
+				extensions: ['.svg'],
+			},
+		],
+	],
 };

+ 2 - 2
index.js

@@ -2,8 +2,8 @@
  * @format
  */
 
-import {AppRegistry} from 'react-native';
+import { AppRegistry } from 'react-native';
 import App from './App';
-import {name as appName} from './app.json';
+import { name as appName } from './app.json';
 
 AppRegistry.registerComponent(appName, () => App);

+ 0 - 88
ios/AwesomeTSProject.xcodeproj/xcshareddata/xcschemes/AwesomeTSProject.xcscheme

@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1210"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
-               BuildableName = "AwesomeTSProject.app"
-               BlueprintName = "AwesomeTSProject"
-               ReferencedContainer = "container:AwesomeTSProject.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "00E356ED1AD99517003FC87E"
-               BuildableName = "AwesomeTSProjectTests.xctest"
-               BlueprintName = "AwesomeTSProjectTests"
-               ReferencedContainer = "container:AwesomeTSProject.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
-            BuildableName = "AwesomeTSProject.app"
-            BlueprintName = "AwesomeTSProject"
-            ReferencedContainer = "container:AwesomeTSProject.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
-            BuildableName = "AwesomeTSProject.app"
-            BlueprintName = "AwesomeTSProject"
-            ReferencedContainer = "container:AwesomeTSProject.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 80 - 80
ios/AwesomeTSProject.xcodeproj/project.pbxproj → ios/Denet.xcodeproj/project.pbxproj

@@ -7,12 +7,12 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		00E356F31AD99517003FC87E /* AwesomeTSProjectTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* AwesomeTSProjectTests.m */; };
-		0C80B921A6F3F58F76C31292 /* libPods-AwesomeTSProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-AwesomeTSProject.a */; };
+		00E356F31AD99517003FC87E /* DenetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* DenetTests.m */; };
+		0C80B921A6F3F58F76C31292 /* libPods-Denet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-Denet.a */; };
 		13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
 		13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
 		13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
-		7699B88040F8A987B510C191 /* libPods-AwesomeTSProject-AwesomeTSProjectTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-AwesomeTSProject-AwesomeTSProjectTests.a */; };
+		7699B88040F8A987B510C191 /* libPods-Denet-DenetTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-Denet-DenetTests.a */; };
 		81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
 /* End PBXBuildFile section */
 
@@ -22,27 +22,27 @@
 			containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
 			proxyType = 1;
 			remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
-			remoteInfo = AwesomeTSProject;
+			remoteInfo = Denet;
 		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		00E356EE1AD99517003FC87E /* AwesomeTSProjectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AwesomeTSProjectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		00E356EE1AD99517003FC87E /* DenetTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DenetTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		00E356F21AD99517003FC87E /* AwesomeTSProjectTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AwesomeTSProjectTests.m; sourceTree = "<group>"; };
-		13B07F961A680F5B00A75B9A /* AwesomeTSProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AwesomeTSProject.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = AwesomeTSProject/AppDelegate.h; sourceTree = "<group>"; };
-		13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = AwesomeTSProject/AppDelegate.mm; sourceTree = "<group>"; };
-		13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AwesomeTSProject/Images.xcassets; sourceTree = "<group>"; };
-		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = AwesomeTSProject/Info.plist; sourceTree = "<group>"; };
-		13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = AwesomeTSProject/main.m; sourceTree = "<group>"; };
-		19F6CBCC0A4E27FBF8BF4A61 /* libPods-AwesomeTSProject-AwesomeTSProjectTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AwesomeTSProject-AwesomeTSProjectTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		3B4392A12AC88292D35C810B /* Pods-AwesomeTSProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AwesomeTSProject.debug.xcconfig"; path = "Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject.debug.xcconfig"; sourceTree = "<group>"; };
-		5709B34CF0A7D63546082F79 /* Pods-AwesomeTSProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AwesomeTSProject.release.xcconfig"; path = "Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject.release.xcconfig"; sourceTree = "<group>"; };
-		5B7EB9410499542E8C5724F5 /* Pods-AwesomeTSProject-AwesomeTSProjectTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AwesomeTSProject-AwesomeTSProjectTests.debug.xcconfig"; path = "Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests.debug.xcconfig"; sourceTree = "<group>"; };
-		5DCACB8F33CDC322A6C60F78 /* libPods-AwesomeTSProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AwesomeTSProject.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = AwesomeTSProject/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		89C6BE57DB24E9ADA2F236DE /* Pods-AwesomeTSProject-AwesomeTSProjectTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AwesomeTSProject-AwesomeTSProjectTests.release.xcconfig"; path = "Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests.release.xcconfig"; sourceTree = "<group>"; };
+		00E356F21AD99517003FC87E /* DenetTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DenetTests.m; sourceTree = "<group>"; };
+		13B07F961A680F5B00A75B9A /* Denet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Denet.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Denet/AppDelegate.h; sourceTree = "<group>"; };
+		13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = Denet/AppDelegate.mm; sourceTree = "<group>"; };
+		13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Denet/Images.xcassets; sourceTree = "<group>"; };
+		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Denet/Info.plist; sourceTree = "<group>"; };
+		13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Denet/main.m; sourceTree = "<group>"; };
+		19F6CBCC0A4E27FBF8BF4A61 /* libPods-Denet-DenetTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Denet-DenetTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		3B4392A12AC88292D35C810B /* Pods-Denet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Denet.debug.xcconfig"; path = "Target Support Files/Pods-Denet/Pods-Denet.debug.xcconfig"; sourceTree = "<group>"; };
+		5709B34CF0A7D63546082F79 /* Pods-Denet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Denet.release.xcconfig"; path = "Target Support Files/Pods-Denet/Pods-Denet.release.xcconfig"; sourceTree = "<group>"; };
+		5B7EB9410499542E8C5724F5 /* Pods-Denet-DenetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Denet-DenetTests.debug.xcconfig"; path = "Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests.debug.xcconfig"; sourceTree = "<group>"; };
+		5DCACB8F33CDC322A6C60F78 /* libPods-Denet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Denet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Denet/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		89C6BE57DB24E9ADA2F236DE /* Pods-Denet-DenetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Denet-DenetTests.release.xcconfig"; path = "Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests.release.xcconfig"; sourceTree = "<group>"; };
 		ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
 /* End PBXFileReference section */
 
@@ -51,7 +51,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				7699B88040F8A987B510C191 /* libPods-AwesomeTSProject-AwesomeTSProjectTests.a in Frameworks */,
+				7699B88040F8A987B510C191 /* libPods-Denet-DenetTests.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -59,20 +59,20 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				0C80B921A6F3F58F76C31292 /* libPods-AwesomeTSProject.a in Frameworks */,
+				0C80B921A6F3F58F76C31292 /* libPods-Denet.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		00E356EF1AD99517003FC87E /* AwesomeTSProjectTests */ = {
+		00E356EF1AD99517003FC87E /* DenetTests */ = {
 			isa = PBXGroup;
 			children = (
-				00E356F21AD99517003FC87E /* AwesomeTSProjectTests.m */,
+				00E356F21AD99517003FC87E /* DenetTests.m */,
 				00E356F01AD99517003FC87E /* Supporting Files */,
 			);
-			path = AwesomeTSProjectTests;
+			path = DenetTests;
 			sourceTree = "<group>";
 		};
 		00E356F01AD99517003FC87E /* Supporting Files */ = {
@@ -83,7 +83,7 @@
 			name = "Supporting Files";
 			sourceTree = "<group>";
 		};
-		13B07FAE1A68108700A75B9A /* AwesomeTSProject */ = {
+		13B07FAE1A68108700A75B9A /* Denet */ = {
 			isa = PBXGroup;
 			children = (
 				13B07FAF1A68108700A75B9A /* AppDelegate.h */,
@@ -93,15 +93,15 @@
 				81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
 				13B07FB71A68108700A75B9A /* main.m */,
 			);
-			name = AwesomeTSProject;
+			name = Denet;
 			sourceTree = "<group>";
 		};
 		2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
 				ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
-				5DCACB8F33CDC322A6C60F78 /* libPods-AwesomeTSProject.a */,
-				19F6CBCC0A4E27FBF8BF4A61 /* libPods-AwesomeTSProject-AwesomeTSProjectTests.a */,
+				5DCACB8F33CDC322A6C60F78 /* libPods-Denet.a */,
+				19F6CBCC0A4E27FBF8BF4A61 /* libPods-Denet-DenetTests.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -116,9 +116,9 @@
 		83CBB9F61A601CBA00E9B192 = {
 			isa = PBXGroup;
 			children = (
-				13B07FAE1A68108700A75B9A /* AwesomeTSProject */,
+				13B07FAE1A68108700A75B9A /* Denet */,
 				832341AE1AAA6A7D00B99B32 /* Libraries */,
-				00E356EF1AD99517003FC87E /* AwesomeTSProjectTests */,
+				00E356EF1AD99517003FC87E /* DenetTests */,
 				83CBBA001A601CBA00E9B192 /* Products */,
 				2D16E6871FA4F8E400B85C8A /* Frameworks */,
 				BBD78D7AC51CEA395F1C20DB /* Pods */,
@@ -131,8 +131,8 @@
 		83CBBA001A601CBA00E9B192 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				13B07F961A680F5B00A75B9A /* AwesomeTSProject.app */,
-				00E356EE1AD99517003FC87E /* AwesomeTSProjectTests.xctest */,
+				13B07F961A680F5B00A75B9A /* Denet.app */,
+				00E356EE1AD99517003FC87E /* DenetTests.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -140,10 +140,10 @@
 		BBD78D7AC51CEA395F1C20DB /* Pods */ = {
 			isa = PBXGroup;
 			children = (
-				3B4392A12AC88292D35C810B /* Pods-AwesomeTSProject.debug.xcconfig */,
-				5709B34CF0A7D63546082F79 /* Pods-AwesomeTSProject.release.xcconfig */,
-				5B7EB9410499542E8C5724F5 /* Pods-AwesomeTSProject-AwesomeTSProjectTests.debug.xcconfig */,
-				89C6BE57DB24E9ADA2F236DE /* Pods-AwesomeTSProject-AwesomeTSProjectTests.release.xcconfig */,
+				3B4392A12AC88292D35C810B /* Pods-Denet.debug.xcconfig */,
+				5709B34CF0A7D63546082F79 /* Pods-Denet.release.xcconfig */,
+				5B7EB9410499542E8C5724F5 /* Pods-Denet-DenetTests.debug.xcconfig */,
+				89C6BE57DB24E9ADA2F236DE /* Pods-Denet-DenetTests.release.xcconfig */,
 			);
 			path = Pods;
 			sourceTree = "<group>";
@@ -151,9 +151,9 @@
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
-		00E356ED1AD99517003FC87E /* AwesomeTSProjectTests */ = {
+		00E356ED1AD99517003FC87E /* DenetTests */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "AwesomeTSProjectTests" */;
+			buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "DenetTests" */;
 			buildPhases = (
 				A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
 				00E356EA1AD99517003FC87E /* Sources */,
@@ -167,14 +167,14 @@
 			dependencies = (
 				00E356F51AD99517003FC87E /* PBXTargetDependency */,
 			);
-			name = AwesomeTSProjectTests;
-			productName = AwesomeTSProjectTests;
-			productReference = 00E356EE1AD99517003FC87E /* AwesomeTSProjectTests.xctest */;
+			name = DenetTests;
+			productName = DenetTests;
+			productReference = 00E356EE1AD99517003FC87E /* DenetTests.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
-		13B07F861A680F5B00A75B9A /* AwesomeTSProject */ = {
+		13B07F861A680F5B00A75B9A /* Denet */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "AwesomeTSProject" */;
+			buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Denet" */;
 			buildPhases = (
 				C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
 				FD10A7F022414F080027D42C /* Start Packager */,
@@ -189,9 +189,9 @@
 			);
 			dependencies = (
 			);
-			name = AwesomeTSProject;
-			productName = AwesomeTSProject;
-			productReference = 13B07F961A680F5B00A75B9A /* AwesomeTSProject.app */;
+			name = Denet;
+			productName = Denet;
+			productReference = 13B07F961A680F5B00A75B9A /* Denet.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
@@ -211,7 +211,7 @@
 					};
 				};
 			};
-			buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "AwesomeTSProject" */;
+			buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Denet" */;
 			compatibilityVersion = "Xcode 12.0";
 			developmentRegion = en;
 			hasScannedForEncodings = 0;
@@ -224,8 +224,8 @@
 			projectDirPath = "";
 			projectRoot = "";
 			targets = (
-				13B07F861A680F5B00A75B9A /* AwesomeTSProject */,
-				00E356ED1AD99517003FC87E /* AwesomeTSProjectTests */,
+				13B07F861A680F5B00A75B9A /* Denet */,
+				00E356ED1AD99517003FC87E /* DenetTests */,
 			);
 		};
 /* End PBXProject section */
@@ -272,15 +272,15 @@
 			files = (
 			);
 			inputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet/Pods-Denet-frameworks-${CONFIGURATION}-input-files.xcfilelist",
 			);
 			name = "[CP] Embed Pods Frameworks";
 			outputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet/Pods-Denet-frameworks-${CONFIGURATION}-output-files.xcfilelist",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject-frameworks.sh\"\n";
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Denet/Pods-Denet-frameworks.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
 		A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
@@ -298,7 +298,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-AwesomeTSProject-AwesomeTSProjectTests-checkManifestLockResult.txt",
+				"$(DERIVED_FILE_DIR)/Pods-Denet-DenetTests-checkManifestLockResult.txt",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -320,7 +320,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-AwesomeTSProject-checkManifestLockResult.txt",
+				"$(DERIVED_FILE_DIR)/Pods-Denet-checkManifestLockResult.txt",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -333,15 +333,15 @@
 			files = (
 			);
 			inputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
 			);
 			name = "[CP] Embed Pods Frameworks";
 			outputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests-frameworks.sh\"\n";
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests-frameworks.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
 		E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
@@ -350,15 +350,15 @@
 			files = (
 			);
 			inputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject-resources-${CONFIGURATION}-input-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet/Pods-Denet-resources-${CONFIGURATION}-input-files.xcfilelist",
 			);
 			name = "[CP] Copy Pods Resources";
 			outputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject-resources-${CONFIGURATION}-output-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet/Pods-Denet-resources-${CONFIGURATION}-output-files.xcfilelist",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject/Pods-AwesomeTSProject-resources.sh\"\n";
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Denet/Pods-Denet-resources.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
 		F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
@@ -367,15 +367,15 @@
 			files = (
 			);
 			inputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests-resources-${CONFIGURATION}-input-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests-resources-${CONFIGURATION}-input-files.xcfilelist",
 			);
 			name = "[CP] Copy Pods Resources";
 			outputFileListPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests-resources-${CONFIGURATION}-output-files.xcfilelist",
+				"${PODS_ROOT}/Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests-resources-${CONFIGURATION}-output-files.xcfilelist",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AwesomeTSProject-AwesomeTSProjectTests/Pods-AwesomeTSProject-AwesomeTSProjectTests-resources.sh\"\n";
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Denet-DenetTests/Pods-Denet-DenetTests-resources.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
 		FD10A7F022414F080027D42C /* Start Packager */ = {
@@ -404,7 +404,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				00E356F31AD99517003FC87E /* AwesomeTSProjectTests.m in Sources */,
+				00E356F31AD99517003FC87E /* DenetTests.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -422,7 +422,7 @@
 /* Begin PBXTargetDependency section */
 		00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
-			target = 13B07F861A680F5B00A75B9A /* AwesomeTSProject */;
+			target = 13B07F861A680F5B00A75B9A /* Denet */;
 			targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
 		};
 /* End PBXTargetDependency section */
@@ -430,14 +430,14 @@
 /* Begin XCBuildConfiguration section */
 		00E356F61AD99517003FC87E /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-AwesomeTSProject-AwesomeTSProjectTests.debug.xcconfig */;
+			baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-Denet-DenetTests.debug.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
 					"$(inherited)",
 				);
-				INFOPLIST_FILE = AwesomeTSProjectTests/Info.plist;
+				INFOPLIST_FILE = DenetTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
@@ -451,17 +451,17 @@
 				);
 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AwesomeTSProject.app/AwesomeTSProject";
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Denet.app/Denet";
 			};
 			name = Debug;
 		};
 		00E356F71AD99517003FC87E /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-AwesomeTSProject-AwesomeTSProjectTests.release.xcconfig */;
+			baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-Denet-DenetTests.release.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				COPY_PHASE_STRIP = NO;
-				INFOPLIST_FILE = AwesomeTSProjectTests/Info.plist;
+				INFOPLIST_FILE = DenetTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 12.4;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
@@ -475,19 +475,19 @@
 				);
 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AwesomeTSProject.app/AwesomeTSProject";
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Denet.app/Denet";
 			};
 			name = Release;
 		};
 		13B07F941A680F5B00A75B9A /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-AwesomeTSProject.debug.xcconfig */;
+			baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-Denet.debug.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ENABLE_MODULES = YES;
 				CURRENT_PROJECT_VERSION = 1;
 				ENABLE_BITCODE = NO;
-				INFOPLIST_FILE = AwesomeTSProject/Info.plist;
+				INFOPLIST_FILE = Denet/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -498,7 +498,7 @@
 					"-lc++",
 				);
 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
-				PRODUCT_NAME = AwesomeTSProject;
+				PRODUCT_NAME = Denet;
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
 				VERSIONING_SYSTEM = "apple-generic";
@@ -507,12 +507,12 @@
 		};
 		13B07F951A680F5B00A75B9A /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-AwesomeTSProject.release.xcconfig */;
+			baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-Denet.release.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ENABLE_MODULES = YES;
 				CURRENT_PROJECT_VERSION = 1;
-				INFOPLIST_FILE = AwesomeTSProject/Info.plist;
+				INFOPLIST_FILE = Denet/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -523,7 +523,7 @@
 					"-lc++",
 				);
 				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
-				PRODUCT_NAME = AwesomeTSProject;
+				PRODUCT_NAME = Denet;
 				SWIFT_VERSION = 5.0;
 				VERSIONING_SYSTEM = "apple-generic";
 			};
@@ -669,7 +669,7 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "AwesomeTSProjectTests" */ = {
+		00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "DenetTests" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				00E356F61AD99517003FC87E /* Debug */,
@@ -678,7 +678,7 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "AwesomeTSProject" */ = {
+		13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Denet" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				13B07F941A680F5B00A75B9A /* Debug */,
@@ -687,7 +687,7 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "AwesomeTSProject" */ = {
+		83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Denet" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				83CBBA201A601CBA00E9B192 /* Debug */,

+ 1 - 1
ios/AwesomeTSProject.xcworkspace/contents.xcworkspacedata → ios/Denet.xcworkspace/contents.xcworkspacedata

@@ -2,7 +2,7 @@
 <Workspace
    version = "1.0">
    <FileRef
-      location = "group:AwesomeTSProject.xcodeproj">
+      location = "group:Denet.xcodeproj">
    </FileRef>
    <FileRef
       location = "group:Pods/Pods.xcodeproj">

+ 8 - 0
ios/Denet.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

+ 8 - 0
ios/Denet.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreviewsEnabled</key>
+	<false/>
+</dict>
+</plist>

+ 0 - 0
ios/AwesomeTSProject/AppDelegate.h → ios/Denet/AppDelegate.h


+ 1 - 1
ios/AwesomeTSProject/AppDelegate.mm → ios/Denet/AppDelegate.mm

@@ -44,7 +44,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
 #endif
 
   NSDictionary *initProps = [self prepareInitialProps];
-  UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"AwesomeTSProject", initProps);
+  UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"Denet", initProps);
 
   if (@available(iOS 13.0, *)) {
     rootView.backgroundColor = [UIColor systemBackgroundColor];

+ 0 - 0
ios/AwesomeTSProject/Images.xcassets/AppIcon.appiconset/Contents.json → ios/Denet/Images.xcassets/AppIcon.appiconset/Contents.json


+ 0 - 0
ios/AwesomeTSProject/Images.xcassets/Contents.json → ios/Denet/Images.xcassets/Contents.json


+ 1 - 1
ios/AwesomeTSProject/Info.plist → ios/Denet/Info.plist

@@ -5,7 +5,7 @@
 	<key>CFBundleDevelopmentRegion</key>
 	<string>en</string>
 	<key>CFBundleDisplayName</key>
-	<string>AwesomeTSProject</string>
+	<string>Denet</string>
 	<key>CFBundleExecutable</key>
 	<string>$(EXECUTABLE_NAME)</string>
 	<key>CFBundleIdentifier</key>

+ 1 - 1
ios/AwesomeTSProject/LaunchScreen.storyboard → ios/Denet/LaunchScreen.storyboard

@@ -16,7 +16,7 @@
                         <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AwesomeTSProject" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Denet" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
                                 <rect key="frame" x="0.0" y="202" width="375" height="43"/>
                                 <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
                                 <nil key="highlightedColor"/>

+ 0 - 0
ios/AwesomeTSProject/main.m → ios/Denet/main.m


+ 2 - 2
ios/AwesomeTSProjectTests/AwesomeTSProjectTests.m → ios/DenetTests/DenetTests.m

@@ -7,11 +7,11 @@
 #define TIMEOUT_SECONDS 600
 #define TEXT_TO_LOOK_FOR @"Welcome to React"
 
-@interface AwesomeTSProjectTests : XCTestCase
+@interface DenetTests : XCTestCase
 
 @end
 
-@implementation AwesomeTSProjectTests
+@implementation DenetTests
 
 - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
 {

+ 0 - 0
ios/AwesomeTSProjectTests/Info.plist → ios/DenetTests/Info.plist


+ 2 - 2
ios/Podfile

@@ -6,7 +6,7 @@ install! 'cocoapods', :deterministic_uuids => false
 
 production = ENV["PRODUCTION"] == "1"
 
-target 'AwesomeTSProject' do
+target 'Denet' do
   config = use_native_modules!
 
   # Flags change depending on the env values.
@@ -23,7 +23,7 @@ target 'AwesomeTSProject' do
     :app_path => "#{Pod::Config.instance.installation_root}/.."
   )
 
-  target 'AwesomeTSProjectTests' do
+  target 'DenetTests' do
     inherit! :complete
     # Pods for testing
   end

+ 54 - 1
ios/Podfile.lock

@@ -1,5 +1,7 @@
 PODS:
   - boost (1.76.0)
+  - BVLinearGradient (2.6.2):
+    - React-Core
   - CocoaAsyncSocket (7.6.5)
   - DoubleConversion (1.1.6)
   - FBLazyVector (0.69.2)
@@ -284,6 +286,18 @@ PODS:
   - React-jsinspector (0.69.2)
   - React-logger (0.69.2):
     - glog
+  - react-native-cookie (0.3.0):
+    - React
+  - react-native-cookies (6.2.1):
+    - React-Core
+  - react-native-safe-area-context (4.3.1):
+    - RCT-Folly
+    - RCTRequired
+    - RCTTypeSafety
+    - React
+    - ReactCommon/turbomodule/core
+  - react-native-webview (11.23.0):
+    - React-Core
   - React-perflogger (0.69.2)
   - React-RCTActionSheet (0.69.2):
     - React-Core/RCTActionSheetHeaders (= 0.69.2)
@@ -350,6 +364,13 @@ PODS:
     - React-jsi (= 0.69.2)
     - React-logger (= 0.69.2)
     - React-perflogger (= 0.69.2)
+  - RNCAsyncStorage (1.17.9):
+    - React-Core
+  - RNScreens (3.15.0):
+    - React-Core
+    - React-RCTImage
+  - RNSVG (13.0.0):
+    - React-Core
   - SocketRocket (0.6.0)
   - Yoga (1.14.0)
   - YogaKit (1.18.1):
@@ -357,6 +378,7 @@ PODS:
 
 DEPENDENCIES:
   - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
+  - BVLinearGradient (from `../node_modules/react-native-linear-gradient`)
   - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
   - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
   - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
@@ -399,6 +421,10 @@ DEPENDENCIES:
   - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
   - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
   - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
+  - react-native-cookie (from `../node_modules/react-native-cookie`)
+  - "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)"
+  - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
+  - react-native-webview (from `../node_modules/react-native-webview`)
   - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
   - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
   - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
@@ -411,6 +437,9 @@ DEPENDENCIES:
   - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
   - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
   - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
+  - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
+  - RNScreens (from `../node_modules/react-native-screens`)
+  - RNSVG (from `../node_modules/react-native-svg`)
   - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
 
 SPEC REPOS:
@@ -434,6 +463,8 @@ SPEC REPOS:
 EXTERNAL SOURCES:
   boost:
     :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
+  BVLinearGradient:
+    :path: "../node_modules/react-native-linear-gradient"
   DoubleConversion:
     :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
   FBLazyVector:
@@ -470,6 +501,14 @@ EXTERNAL SOURCES:
     :path: "../node_modules/react-native/ReactCommon/jsinspector"
   React-logger:
     :path: "../node_modules/react-native/ReactCommon/logger"
+  react-native-cookie:
+    :path: "../node_modules/react-native-cookie"
+  react-native-cookies:
+    :path: "../node_modules/@react-native-cookies/cookies"
+  react-native-safe-area-context:
+    :path: "../node_modules/react-native-safe-area-context"
+  react-native-webview:
+    :path: "../node_modules/react-native-webview"
   React-perflogger:
     :path: "../node_modules/react-native/ReactCommon/reactperflogger"
   React-RCTActionSheet:
@@ -494,11 +533,18 @@ EXTERNAL SOURCES:
     :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
   ReactCommon:
     :path: "../node_modules/react-native/ReactCommon"
+  RNCAsyncStorage:
+    :path: "../node_modules/@react-native-async-storage/async-storage"
+  RNScreens:
+    :path: "../node_modules/react-native-screens"
+  RNSVG:
+    :path: "../node_modules/react-native-svg"
   Yoga:
     :path: "../node_modules/react-native/ReactCommon/yoga"
 
 SPEC CHECKSUMS:
   boost: a7c83b31436843459a1961bfd74b96033dc77234
+  BVLinearGradient: 34a999fda29036898a09c6a6b728b0b4189e1a44
   CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
   DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
   FBLazyVector: e3c1479be506060131807f2f2435af5107c58410
@@ -530,6 +576,10 @@ SPEC CHECKSUMS:
   React-jsiexecutor: 7c23e92591431ac925f430b3118de934cb816ac0
   React-jsinspector: 31e53f048cc8f32605de36981903a7bbf9456892
   React-logger: 9a6c684d5cd56c4129e0c2842dba75c4bfb1e981
+  react-native-cookie: dfde9cd819c42c538abc19dc476c9c7ac53cb530
+  react-native-cookies: f54fcded06bb0cda05c11d86788020b43528a26c
+  react-native-safe-area-context: 6c12e3859b6f27b25de4fee8201cfb858432d8de
+  react-native-webview: e771bc375f789ebfa02a26939a57dbc6fa897336
   React-perflogger: 281c34e42f13245c7a4d6932364d9182f8655e1a
   React-RCTActionSheet: 92f4292754a1b4a0e42bf9b1489206a06f878929
   React-RCTAnimation: 2a5bb5549758e4e594481633f3db649d11519f75
@@ -542,10 +592,13 @@ SPEC CHECKSUMS:
   React-RCTVibration: 0d07f00705b5f11e88aaaaf9131f5e1785d4bd6e
   React-runtimeexecutor: 8030b9cf9b9e87b878d92da680b55b5e74c58e70
   ReactCommon: a9414b91f0d19de002b55d9f4f6cb176d6dd8452
+  RNCAsyncStorage: b2489b49e38c85e10ed45a888d13a2a4c7b32ea1
+  RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7
+  RNSVG: 42a0c731b11179ebbd27a3eeeafa7201ebb476ff
   SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
   Yoga: 236056dd74cda4d9d76c20306fd8c20bb087614d
   YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
 
-PODFILE CHECKSUM: 236145e256a23132405389f56a3f648e1724efc6
+PODFILE CHECKSUM: aae8c4ed7448022ab86268371cc569867287f205
 
 COCOAPODS: 1.11.3

+ 8 - 8
metro.config.js

@@ -6,12 +6,12 @@
  */
 
 module.exports = {
-  transformer: {
-    getTransformOptions: async () => ({
-      transform: {
-        experimentalImportSupport: false,
-        inlineRequires: true,
-      },
-    }),
-  },
+	transformer: {
+		getTransformOptions: async () => ({
+			transform: {
+				experimentalImportSupport: false,
+				inlineRequires: true,
+			},
+		}),
+	},
 };

+ 18 - 2
package.json

@@ -1,5 +1,5 @@
 {
-  "name": "AwesomeTSProject",
+  "name": "Denet",
   "version": "0.0.1",
   "private": true,
   "scripts": {
@@ -10,8 +10,23 @@
     "lint": "eslint . --ext .js,.jsx,.ts,.tsx"
   },
   "dependencies": {
+    "@react-native-async-storage/async-storage": "^1.17.9",
+    "@react-native-cookies/cookies": "^6.2.1",
+    "@react-navigation/bottom-tabs": "^6.3.2",
+    "@react-navigation/native": "^6.0.11",
+    "@react-navigation/native-stack": "^6.7.0",
+    "axios": "^0.27.2",
+    "babel-plugin-inline-import": "^3.0.0",
     "react": "18.0.0",
-    "react-native": "0.69.2"
+    "react-native": "0.69.2",
+    "react-native-cookie": "^0.3.0",
+    "react-native-eventemitter": "^0.0.1",
+    "react-native-linear-gradient": "^2.6.2",
+    "react-native-safe-area-context": "^4.3.1",
+    "react-native-screens": "^3.15.0",
+    "react-native-storage": "^1.0.1",
+    "react-native-svg": "^13.0.0",
+    "react-native-webview": "^11.23.0"
   },
   "devDependencies": {
     "@babel/core": "^7.12.9",
@@ -24,6 +39,7 @@
     "@typescript-eslint/eslint-plugin": "^5.29.0",
     "@typescript-eslint/parser": "^5.29.0",
     "babel-jest": "^26.6.3",
+    "babel-plugin-module-resolver": "^4.1.0",
     "eslint": "^7.32.0",
     "jest": "^26.6.3",
     "metro-react-native-babel-preset": "^0.70.3",

+ 119 - 0
src/components/useLogin.tsx

@@ -0,0 +1,119 @@
+/**
+ * 登录模块
+ */
+import { useState, useEffect } from 'react';
+import { postRequest } from '@/netWork/index';
+import { getStorageData, setStorageData } from '@/storage/index';
+import { Alert } from 'react-native';
+
+type LoginParams = {
+	consumerKey: String;
+	authToken: String;
+};
+type UserInfo = {
+	accessToken?: String;
+	avatarUrl?: String;
+	nickName?: String;
+	uid?: Number;
+};
+export const useLoginCom = (props: any) => {
+	const [userInfo, setUserInfo] = useState({} as UserInfo);
+	const [loginParams, setLoginParamsData] = useState({} as LoginParams);
+	const [loading, setLoading] = useState(false);
+	const [isLogin, setIsLogin] = useState(false);
+	const goTwitterAuthorize = async () => {
+		setLoading(true);
+		let params = {
+			oauthCallback: 'https://testh5.denetme.net/authloginApp',
+		};
+		postRequest('/denet/user/twitterRequestToken', {
+			params,
+		})
+			.then((res: any) => {
+				setLoginParamsData(res.data);
+				if (res.code === 0) {
+					props.navigation.navigate('Login', {
+						token: res.data.authToken,
+					});
+				}
+			})
+			.catch((e: any) => {
+				console.log('e', e);
+			})
+			.finally(() => {
+				setLoading(false);
+			});
+	};
+
+	const twitterLogin = (verifier: any) => {
+		setLoading(true);
+		if (verifier) {
+			postRequest('/denet/user/twitterLogin', {
+				params: {
+					consumerKey: loginParams.consumerKey,
+					oauthToken: loginParams.authToken,
+					oauthVerifier: verifier,
+				},
+			})
+				.then(({ code, data }) => {
+					if (code === 0) {
+						setIsLogin(true);
+						setUserInfo(data);
+						return setStorageData('userInfo', data);
+					} else {
+						Alert.alert('login fail');
+					}
+				})
+				.catch((err: any) => {
+					Alert.alert('login fail.' + err);
+				})
+				.finally(async () => {
+					setLoading(false);
+				});
+		}
+	};
+
+	const logOut = async () => {
+		await setStorageData('userInfo', {});
+		setIsLogin(false);
+		setUserInfo({});
+		Alert.alert('log out success');
+	};
+
+	useEffect(() => {
+		const getUserInfo = async () => {
+			const user = await getStorageData('userInfo');
+			if (user.accessToken) {
+				setUserInfo(user);
+				setIsLogin(true);
+			}
+		};
+		getUserInfo();
+	}, []);
+
+	useEffect(() => {
+		const unsubscribe = props.navigation.addListener('focus', async () => {
+			const user = await getStorageData('userInfo');
+			console.log('userInfo', user);
+			if (user.verifier) {
+				setIsLogin(false);
+				twitterLogin(user.verifier);
+			} else if (user.accessToken) {
+				setUserInfo(user);
+				setIsLogin(true);
+			} else {
+				setUserInfo(user);
+				setIsLogin(false);
+			}
+		});
+		return unsubscribe;
+	}, [props.navigation, twitterLogin]);
+
+	return {
+		isLogin,
+		loading,
+		userInfo,
+		goTwitterAuthorize,
+		logOut,
+	};
+};

+ 52 - 0
src/netWork/index.ts

@@ -0,0 +1,52 @@
+// import {APPTYPE} from '@/utils';
+import axios from 'axios';
+import { getMid } from '@/utils/';
+import { getStorageData } from '../storage';
+
+const instance = axios.create({
+	baseURL: 'https://testapi.denetme.net',
+	timeout: 240000,
+	headers: {
+		'content-type': 'application/json',
+		Accept: 'application/json',
+	},
+});
+
+instance.interceptors.response.use(
+	res => {
+		return res.data;
+	},
+	function (err) {
+		return Promise.reject(err);
+	},
+);
+
+export const postRequest = async (url: any, params = {}, config = null) => {
+	const mid = await getMid();
+	const userInfo = await getStorageData('userInfo');
+	const myConfig = {};
+	if (config) {
+		Object.assign(myConfig, config);
+	}
+	params = Object.assign(
+		{
+			baseInfo: {
+				mid: mid,
+				machineCode: mid,
+				loginUid: userInfo?.uid || '',
+				token: userInfo?.accessToken || '',
+				appType: 3,
+			},
+		},
+		params,
+	);
+
+	return instance
+		.post(url, params, myConfig)
+		.then(res => {
+			return res;
+		})
+		.catch(err => {
+			return err;
+		});
+};

+ 5 - 0
src/netWork/nft.tsx

@@ -0,0 +1,5 @@
+import { postRequest } from '@/netWork/';
+
+export const listJoinNftGroup = (params: {}) => {
+	return postRequest('/nft/group/listJoinNftGroup', params);
+};

+ 12 - 0
src/pages/navigations/NFTs.tsx

@@ -0,0 +1,12 @@
+import React from 'react';
+import {Text, View} from 'react-native';
+
+const NFTs = () => {
+	return (
+		<View style={{flex: 1}}>
+			<Text>NFTs page</Text>
+		</View>
+	);
+};
+
+export default NFTs;

+ 66 - 0
src/pages/navigations/home.tsx

@@ -0,0 +1,66 @@
+import React, {useEffect, useState} from 'react';
+import {Alert, Button, StyleSheet, View} from 'react-native';
+import {SafeAreaView} from 'react-native-safe-area-context';
+import LinearGradient from 'react-native-linear-gradient';
+import {postRequest} from '@/netWork/';
+import {getStorageData, setStorageData} from '@/storage/';
+import {useLoginCom} from '@/components/useLogin';
+import {listJoinNftGroup} from '@/netWork/nft';
+
+interface Props {
+	navigation: any;
+}
+
+const Home = (props: Props) => {
+	const {isLogin, loading, userInfo, goTwitterAuthorize} = useLoginCom(props);
+	const [nftData, setNftData] = useState({});
+
+	const goTwitter = () => {
+		if (isLogin) {
+			props.navigation.navigate('Twitter');
+		} else {
+			goTwitterAuthorize();
+		}
+	};
+
+	useEffect(() => {
+		isLogin &&
+			listJoinNftGroup({
+				pageNum: 1,
+				pageSize: 100,
+			}).then((res: any) => {
+				console.log('nftData', res);
+			});
+	}, []);
+
+	return (
+		<LinearGradient
+			colors={['#91CAFF', '#ECF6FF', '#FFFFFF']}
+			style={{flex: 1}}>
+			<SafeAreaView style={styles.container}>
+				<View style={styles.TwitterBtnWrap}>
+					<Button
+						onPress={goTwitter}
+						title="Web3 Twitter"
+						color="#841584"
+						accessibilityLabel="go Web3 Twitter"
+					/>
+				</View>
+			</SafeAreaView>
+		</LinearGradient>
+	);
+};
+
+const styles = StyleSheet.create({
+	container: {
+		flex: 1,
+		alignItems: 'center',
+		paddingTop: 180,
+	},
+	TwitterBtnWrap: {
+		width: 343,
+		backgroundColor: '#fff',
+	},
+});
+
+export default Home;

+ 84 - 0
src/pages/navigations/me.tsx

@@ -0,0 +1,84 @@
+import React from 'react';
+import {Button, Image, StyleSheet, Text, View} from 'react-native';
+import {useLoginCom} from '@/components/useLogin';
+
+const Me = (props: any) => {
+	const {isLogin, loading, userInfo, goTwitterAuthorize, logOut} =
+		useLoginCom(props);
+	return (
+		<>
+			{!!isLogin && (
+				<View style={styles.contain}>
+					<View style={styles.userInfo}>
+						<Image
+							style={styles.userPhoto}
+							source={{
+								uri: userInfo.avatarUrl,
+							}}
+						/>
+						<Text>{userInfo.nickName}</Text>
+					</View>
+					<View style={styles.logOutContain}>
+						<View style={styles.logOutBtn}>
+							<Button
+								title="Log out"
+								color="#FF0000"
+								onPress={logOut}
+							/>
+						</View>
+						<View style={styles.tips}>
+							<Text>Version 1.0.2|</Text>
+							<Text>用户协议|</Text>
+							<Text>隐私协议</Text>
+						</View>
+					</View>
+				</View>
+			)}
+			{!isLogin && (
+				<>
+					<View style={styles.contain}>
+						<Button
+							title="Log in"
+							color="#FF0000"
+							onPress={goTwitterAuthorize}
+						/>
+					</View>
+				</>
+			)}
+		</>
+	);
+};
+
+const styles = StyleSheet.create({
+	contain: {
+		flex: 1,
+		alignItems: 'center',
+		justifyContent: 'space-between',
+	},
+	userInfo: {
+		marginTop: 80,
+	},
+	userPhoto: {
+		marginBottom: 22,
+		width: 100,
+		height: 100,
+		borderRadius: 50,
+	},
+	logOutContain: {
+		marginBottom: 30,
+	},
+	logOutBtn: {
+		marginBottom: 20,
+		width: 343,
+		height: 44,
+		backgroundColor: '#FEF8F8',
+		borderRadius: 100,
+	},
+	tips: {
+		display: 'flex',
+		flexDirection: 'row',
+		justifyContent: 'center',
+	},
+});
+
+export default Me;

+ 12 - 0
src/pages/navigations/message.tsx

@@ -0,0 +1,12 @@
+import React from 'react';
+import {Text, View} from 'react-native';
+
+const Message = () => {
+	return (
+		<View style={{flex: 1}}>
+			<Text>Message page</Text>
+		</View>
+	);
+};
+
+export default Message;

+ 12 - 0
src/pages/navigations/wallet.tsx

@@ -0,0 +1,12 @@
+import React from 'react';
+import {Text, View} from 'react-native';
+
+const Wallet = () => {
+	return (
+		<View style={{flex: 1}}>
+			<Text>Wallet page</Text>
+		</View>
+	);
+};
+
+export default Wallet;

+ 32 - 0
src/pages/screens/login.tsx

@@ -0,0 +1,32 @@
+import React from 'react';
+import {View} from 'react-native';
+import {WebView} from 'react-native-webview';
+import {setStorageData} from '@/storage/';
+
+interface Props {
+	navigation: any;
+	route: any;
+	token: String;
+}
+const Login = (props: Props) => {
+	const loginSuccess = (data: any) => {
+		console.log(data.nativeEvent.data);
+		const {verifier} = JSON.parse(data.nativeEvent.data);
+		setStorageData('userInfo', {
+			verifier,
+		});
+		props.navigation.goBack();
+	};
+	return (
+		<View style={{flex: 1}}>
+			<WebView
+				onMessage={loginSuccess}
+				source={{
+					uri: `https://api.twitter.com/oauth/authenticate?oauth_token=${props.route.params.token}`,
+				}}
+			/>
+		</View>
+	);
+};
+
+export default Login;

+ 37 - 0
src/pages/screens/redpack.tsx

@@ -0,0 +1,37 @@
+/* eslint-disable react-native/no-inline-styles */
+import React, {Component} from 'react';
+import {View, Text, DeviceEventEmitter, Button} from 'react-native';
+// import EventEmitter from 'react-native-eventemitter';
+
+interface Props {
+	route: any;
+}
+class Redpack extends Component<Props> {
+	favoriteTweet = () => {
+		const idArray = this.props.route.params.tweet_Id.split('');
+		console.log(idArray);
+		const len = idArray.length;
+		const idArray1 = idArray.splice(0, Math.floor(len / 2));
+		DeviceEventEmitter.emit('FavoriteTweet', {
+			id1: idArray1.join(''),
+			id2: idArray.join(''),
+		});
+	};
+	componentDidMount() {
+		// this.TwitterLikeAPI();
+	}
+	render() {
+		return (
+			<View style={{flex: 1}}>
+				<Text>redpack page: {this.props.route.params.tweet_Id}</Text>
+				<Button
+					onPress={this.favoriteTweet}
+					title="FavoriteTweet"
+					color="#841584"
+					accessibilityLabel="FavoriteTweet when click"
+				/>
+			</View>
+		);
+	}
+}
+export default Redpack;

+ 80 - 0
src/pages/screens/twitter.tsx

@@ -0,0 +1,80 @@
+/* eslint-disable react-native/no-inline-styles */
+import React, {Component} from 'react';
+import {View, Text, DeviceEventEmitter} from 'react-native';
+import {WebView} from 'react-native-webview';
+import {addDom} from '../../utils/addDom';
+// import EventEmitter from 'react-native-eventemitter';
+
+interface Props {
+	navigation: any;
+}
+class Twitter extends Component<Props> {
+	webref: any;
+	packUrl: any;
+	openRedpack = (props: any) => {
+		console.log(props.nativeEvent.data);
+		const {tweet_Id, ct0} = JSON.parse(props.nativeEvent.data);
+		this.props.navigation.navigate('Redpack', {
+			tweet_Id,
+			ct0,
+		});
+	};
+	handleWebViewNavigationStateChange = (newNavState: {url: any}) => {
+		const {url} = newNavState;
+		this.packUrl = url;
+		console.log(url);
+		if (!url) {
+			return;
+		}
+	};
+	injectJavaScript = () => {
+		this.webref.injectJavaScript(`
+		(${addDom})();
+      true;
+    `);
+	};
+
+	FavoriteTweet = (data: any) => {
+		// let jsString = `window.TwitterLikeAPI(${data.tweet_Id})`;
+		// data = JSON.parse(data);
+		this.webref.injectJavaScript(`
+		window.TwitterLikeAPI(${data.id1},${data.id2});
+      true;
+    `);
+	};
+
+	componentDidMount() {
+		DeviceEventEmitter.addListener('FavoriteTweet', (data: any) => {
+			this.FavoriteTweet(data);
+		});
+	}
+
+	render() {
+		return (
+			<View style={{flex: 1}}>
+				<Text>{this.packUrl}</Text>
+				<WebView
+					mediaCapturePermissionGrantType={'grant'}
+					setSupportMultipleWindows={false}
+					javaScriptEnabled={true}
+					startInLoadingState={true}
+					originWhitelist={['*']}
+					cacheEnabled={false}
+					javaScriptCanOpenWindowsAutomatically={true}
+					allowUniversalAccessFromFileURLs={true}
+					allowFileAccessFromFileURLs={true}
+					onLoadEnd={this.injectJavaScript}
+					ref={r => (this.webref = r)}
+					onMessage={this.openRedpack}
+					onNavigationStateChange={
+						this.handleWebViewNavigationStateChange
+					}
+					source={{
+						uri: 'https://mobile.twitter.com/home',
+					}}
+				/>
+			</View>
+		);
+	}
+}
+export default Twitter;

+ 131 - 0
src/router/index.tsx

@@ -0,0 +1,131 @@
+import * as React from 'react';
+import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
+import Home from '../pages/navigations/home';
+import Message from '../pages/navigations/message';
+import Wallet from '../pages/navigations/wallet';
+import NFTs from '../pages/navigations/NFTs';
+import Me from '../pages/navigations/me';
+import { Image, Text } from 'react-native';
+import { SvgXml } from 'react-native-svg';
+import TabIcon from './../static/img/tab';
+
+const Tab = createBottomTabNavigator();
+// const HomeStack = createNativeStackNavigator();
+export const NavTabScreen = () => {
+	return (
+		<Tab.Navigator
+			initialRouteName="Twitter"
+			options={{
+				tabBarActiveTintColor: '#1D9BF0',
+				tabBarInactiveTintColor: '#b1b1b1',
+			}}>
+			<Tab.Screen
+				options={{
+					headerShown: false,
+					tabBarIcon: ({ focused }) => {
+						return !!focused ? (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.homeSvgActive}
+							/>
+						) : (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.homeSvg}
+							/>
+						);
+					},
+				}}
+				name="HomeTab"
+				component={Home}
+			/>
+			<Tab.Screen
+				name="Message"
+				options={{
+					tabBarIcon: ({ focused }) => {
+						return !!focused ? (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.messageSvgActive}
+							/>
+						) : (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.messageSvg}
+							/>
+						);
+					},
+				}}
+				component={Message}
+			/>
+			<Tab.Screen
+				name="Wallet"
+				options={{
+					headerShown: false,
+					tabBarIcon: ({ focused }) => {
+						return !!focused ? (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.walletSvgActive}
+							/>
+						) : (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.walletSvg}
+							/>
+						);
+					},
+				}}
+				component={Wallet}
+			/>
+			<Tab.Screen
+				name="NFTs"
+				options={{
+					tabBarIcon: ({ focused }) => {
+						return !!focused ? (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.nftsSvgActive}
+							/>
+						) : (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.nftsSvg}
+							/>
+						);
+					},
+				}}
+				component={NFTs}
+			/>
+			<Tab.Screen
+				name="Me"
+				options={{
+					tabBarIcon: ({ focused }) => {
+						return !!focused ? (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.meSvgActive}
+							/>
+						) : (
+							<SvgXml
+								width="20"
+								height="20"
+								xml={TabIcon.meSvg}
+							/>
+						);
+					},
+				}}
+				component={Me}
+			/>
+		</Tab.Navigator>
+	);
+};

BIN
src/static/img/home/左侧广告语.png


BIN
src/static/img/home/滚动气泡.png


+ 3 - 0
src/static/img/tab/home-active.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.4 26V18.2353H17.6V26H24.1V15.6471H28L15 4L2 15.6471H5.9V26H12.4Z" fill="#1D9BF0"/>
+</svg>

+ 3 - 0
src/static/img/tab/home.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.4 26V18.2353H17.6V26H24.1V15.6471H28L15 4L2 15.6471H5.9V26H12.4Z" fill="#C0C0C0"/>
+</svg>

+ 23 - 0
src/static/img/tab/index.tsx

@@ -0,0 +1,23 @@
+import homeSvg from './home.svg';
+import meSvg from './me.svg';
+import messageSvg from './message.svg';
+import nftsSvg from './nfts.svg';
+import walletSvg from './wallet.svg';
+import homeSvgActive from './home-active.svg';
+import meSvgActive from './me-active.svg';
+import messageSvgActive from './message-active.svg';
+import nftsSvgActive from './nfts-active.svg';
+import walletSvgActive from './wallet-active.svg';
+
+export default {
+	homeSvg,
+	meSvg,
+	messageSvg,
+	nftsSvg,
+	walletSvg,
+	homeSvgActive,
+	meSvgActive,
+	messageSvgActive,
+	nftsSvgActive,
+	walletSvgActive,
+};

+ 3 - 0
src/static/img/tab/me-active.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15 5C16.3261 5 17.5979 5.52678 18.5355 6.46447C19.4732 7.40215 20 8.67392 20 10C20 11.3261 19.4732 12.5979 18.5355 13.5355C17.5979 14.4732 16.3261 15 15 15C13.6739 15 12.4021 14.4732 11.4645 13.5355C10.5268 12.5979 10 11.3261 10 10C10 8.67392 10.5268 7.40215 11.4645 6.46447C12.4021 5.52678 13.6739 5 15 5ZM15 17.5C20.525 17.5 25 19.7375 25 22.5V25H5V22.5C5 19.7375 9.475 17.5 15 17.5Z" fill="#1D9BF0"/>
+</svg>

+ 3 - 0
src/static/img/tab/me.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15 5C16.3261 5 17.5979 5.52678 18.5355 6.46447C19.4732 7.40215 20 8.67392 20 10C20 11.3261 19.4732 12.5979 18.5355 13.5355C17.5979 14.4732 16.3261 15 15 15C13.6739 15 12.4021 14.4732 11.4645 13.5355C10.5268 12.5979 10 11.3261 10 10C10 8.67392 10.5268 7.40215 11.4645 6.46447C12.4021 5.52678 13.6739 5 15 5ZM15 17.5C20.525 17.5 25 19.7375 25 22.5V25H5V22.5C5 19.7375 9.475 17.5 15 17.5Z" fill="#C0C0C0"/>
+</svg>

+ 3 - 0
src/static/img/tab/message-active.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15 24.8203C13.8506 24.8203 12.7405 24.6728 11.6932 24.3981C11.0133 24.2198 9.14472 24.8397 6.0875 26.2578C6.90527 23.6109 7.09915 22.0898 6.66917 21.6945C4.70537 19.8894 3.5 17.4468 3.5 14.7578C3.5 9.20044 8.64872 4.69531 15 4.69531C21.3513 4.69531 26.5 9.20044 26.5 14.7578C26.5 20.3152 21.3513 24.8203 15 24.8203ZM10.4288 16.0803C11.1432 16.0803 11.7225 15.5011 11.7225 14.7866C11.7225 14.0721 11.1432 13.4928 10.4288 13.4928C9.71426 13.4928 9.135 14.0721 9.135 14.7866C9.135 15.5011 9.71426 16.0803 10.4288 16.0803ZM15.0288 16.0803C15.7432 16.0803 16.3225 15.5011 16.3225 14.7866C16.3225 14.0721 15.7432 13.4928 15.0288 13.4928C14.3143 13.4928 13.735 14.0721 13.735 14.7866C13.735 15.5011 14.3143 16.0803 15.0288 16.0803ZM19.6287 16.0803C20.3432 16.0803 20.9225 15.5011 20.9225 14.7866C20.9225 14.0721 20.3432 13.4928 19.6287 13.4928C18.9143 13.4928 18.335 14.0721 18.335 14.7866C18.335 15.5011 18.9143 16.0803 19.6287 16.0803Z" fill="#1D9BF0"/>
+</svg>

+ 3 - 0
src/static/img/tab/message.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15 24.8203C13.8506 24.8203 12.7405 24.6728 11.6932 24.3981C11.0133 24.2198 9.14472 24.8397 6.0875 26.2578C6.90527 23.6109 7.09915 22.0898 6.66917 21.6945C4.70537 19.8894 3.5 17.4468 3.5 14.7578C3.5 9.20044 8.64872 4.69531 15 4.69531C21.3513 4.69531 26.5 9.20044 26.5 14.7578C26.5 20.3152 21.3513 24.8203 15 24.8203ZM10.4288 16.0803C11.1432 16.0803 11.7225 15.5011 11.7225 14.7866C11.7225 14.0721 11.1432 13.4928 10.4288 13.4928C9.71426 13.4928 9.135 14.0721 9.135 14.7866C9.135 15.5011 9.71426 16.0803 10.4288 16.0803ZM15.0288 16.0803C15.7432 16.0803 16.3225 15.5011 16.3225 14.7866C16.3225 14.0721 15.7432 13.4928 15.0288 13.4928C14.3143 13.4928 13.735 14.0721 13.735 14.7866C13.735 15.5011 14.3143 16.0803 15.0288 16.0803ZM19.6287 16.0803C20.3432 16.0803 20.9225 15.5011 20.9225 14.7866C20.9225 14.0721 20.3432 13.4928 19.6287 13.4928C18.9143 13.4928 18.335 14.0721 18.335 14.7866C18.335 15.5011 18.9143 16.0803 19.6287 16.0803Z" fill="#C0C0C0"/>
+</svg>

File diff suppressed because it is too large
+ 1 - 0
src/static/img/tab/nfts-active.svg


File diff suppressed because it is too large
+ 1 - 0
src/static/img/tab/nfts.svg


+ 3 - 0
src/static/img/tab/wallet-active.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.9981 6H23.0044C24.6547 6 26 7.34533 26 8.9981V11.738H18.3117C16.4179 11.738 14.8684 13.2874 14.8684 15.1812V16.0617C14.8684 17.9555 16.4179 19.505 18.3117 19.505H26V22.2448C26 23.9 24.6547 25.2429 23.0019 25.2429H6.9981C5.34287 25.2429 4 23.8976 4 22.2448V8.9981C4 7.34287 5.34533 6 6.9981 6ZM16.0967 15.1806C16.0967 14.5928 16.3279 14.0394 16.7485 13.6188C17.1666 13.1983 17.7224 12.9671 18.3103 12.9671H25.9986V18.2746H18.3103C17.7224 18.2746 17.1691 18.0434 16.7485 17.6229C16.3279 17.2023 16.0967 16.6489 16.0967 16.0611V15.1806ZM20.1991 15.6208C20.1991 15.0773 19.7589 14.6371 19.2153 14.6371C18.6718 14.6371 18.2316 15.0773 18.2316 15.6208C18.2316 16.1644 18.6718 16.6046 19.2153 16.6046C19.7589 16.6046 20.1991 16.1644 20.1991 15.6208Z" fill="#1D9BF0"/>
+</svg>

+ 3 - 0
src/static/img/tab/wallet.svg

@@ -0,0 +1,3 @@
+<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.9981 6H23.0044C24.6547 6 26 7.34533 26 8.9981V11.738H18.3117C16.4179 11.738 14.8684 13.2874 14.8684 15.1812V16.0617C14.8684 17.9555 16.4179 19.505 18.3117 19.505H26V22.2448C26 23.9 24.6547 25.2429 23.0019 25.2429H6.9981C5.34287 25.2429 4 23.8976 4 22.2448V8.9981C4 7.34287 5.34533 6 6.9981 6ZM16.0967 15.1806C16.0967 14.5928 16.3279 14.0394 16.7485 13.6188C17.1666 13.1983 17.7224 12.9671 18.3103 12.9671H25.9986V18.2746H18.3103C17.7224 18.2746 17.1691 18.0434 16.7485 17.6229C16.3279 17.2023 16.0967 16.6489 16.0967 16.0611V15.1806ZM20.1991 15.6208C20.1991 15.0773 19.7589 14.6371 19.2153 14.6371C18.6718 14.6371 18.2316 15.0773 18.2316 15.6208C18.2316 16.1644 18.6718 16.6046 19.2153 16.6046C19.7589 16.6046 20.1991 16.1644 20.1991 15.6208Z" fill="#C0C0C0"/>
+</svg>

+ 28 - 0
src/storage/index.ts

@@ -0,0 +1,28 @@
+import AsyncStorage from '@react-native-async-storage/async-storage';
+
+export const setStorageData = async (key: string, value: any) => {
+	try {
+		await AsyncStorage.setItem(key, JSON.stringify(value));
+	} catch (e) {
+		// saving error
+		return null;
+	}
+};
+
+export const getStorageData = async (key: string) => {
+	try {
+		const value = await AsyncStorage.getItem(key);
+		if (value !== null) {
+			return JSON.parse(value);
+		}
+	} catch (e) {
+		return null;
+	}
+};
+
+export const removeStorageData = async (key: string) => {
+	const result = await AsyncStorage.removeItem(key).catch(() => {
+		return null;
+	});
+	return result;
+};

+ 0 - 0
src/types/index.ts


+ 3 - 0
src/types/network.ts

@@ -0,0 +1,3 @@
+export enum FetchHost {
+	dev = '',
+}

+ 241 - 0
src/utils/addDom.js

@@ -0,0 +1,241 @@
+const addDom = () => {
+	window.parseAllDeNetCard = () => {
+		let de_net_card = [];
+		try {
+			let arr_article = document.querySelectorAll('article') || [];
+			let _txt;
+			for (let i in arr_article) {
+				_txt = arr_article[i].innerText || '';
+				if (_txt.includes('#DeNet') || _txt.includes('#DNFT')) {
+					de_net_card.push({
+						time: new Date().getTime(),
+						dom: arr_article[i],
+					});
+				}
+			}
+		} catch (error) {
+			console.log(error);
+		}
+		return de_net_card;
+	};
+	window.parseCardParmas = dom_card => {
+		let tweet_Id = '';
+		let short_url = '';
+		let a_arr = dom_card.querySelectorAll('a') || [];
+		a_arr = Array.from(a_arr).reverse();
+		for (let i in a_arr) {
+			// 获取推特id
+			if (
+				a_arr[i].href &&
+				a_arr[i].href.indexOf('/status/') > 0 &&
+				!tweet_Id
+			) {
+				tweet_Id = a_arr[i].href.split('/status/')[1] || '';
+				tweet_Id = tweet_Id.split('/')[0];
+			}
+			if (
+				a_arr[i].href &&
+				a_arr[i].href.includes('https://t.co') &&
+				!short_url
+			) {
+				short_url = a_arr[i].href;
+			}
+			if (tweet_Id && short_url) {
+				break;
+			}
+		}
+		return {tweet_Id, short_url, dom_card};
+	};
+	window.parseAllDeNetCardParmas = () => {
+		let json_data = [];
+		window.parseAllDeNetCard().forEach(item => {
+			let _obj = window.parseCardParmas(item.dom);
+			if (_obj.tweet_Id && _obj.short_url && _obj.dom_card) {
+				_obj.time = item.time;
+				json_data.push(_obj);
+			}
+		});
+		return json_data;
+	};
+	window.toRedpackPage = ({post_Id, tweet_Id}) => {
+		window.ReactNativeWebView.postMessage(
+			JSON.stringify({
+				post_Id,
+				tweet_Id,
+				ct0: window.getCookie('ct0'),
+			}),
+		);
+		window.event.stopPropagation();
+		// window.location.href = 'denet://redpack';
+	};
+	window.getCookie = name => {
+		var strcookie = document.cookie; //获取cookie字符串
+		var arrcookie = strcookie.split('; '); //分割
+		//遍历匹配
+		for (var i = 0; i < arrcookie.length; i++) {
+			var arr = arrcookie[i].split('=');
+			if (arr[0] == name) {
+				return arr[1];
+			}
+		}
+		return '';
+	};
+
+	window.TwitterLikeAPI = (id1, id2) => {
+		alert(`${id1}${id2}`);
+		fetch(
+			'https://mobile.twitter.com/i/api/graphql/lI07N6Otwv1PhnEgXILM7A/FavoriteTweet',
+			{
+				headers: {
+					accept: '*/*',
+					'accept-language': 'zh-CN,zh;q=0.9',
+					authorization:
+						'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA',
+					'cache-control': 'no-cache',
+					'content-type': 'application/json',
+					pragma: 'no-cache',
+					'sec-fetch-dest': 'document',
+					'sec-fetch-mode': 'cors',
+					'sec-fetch-site': 'same-origin',
+					'x-csrf-token': window.getCookie('ct0'),
+					'x-twitter-active-user': 'yes',
+					'x-twitter-auth-type': 'OAuth2Session',
+					'x-twitter-client-language': 'zh-cn',
+				},
+				referrer:
+					'https://mobile.twitter.com/laoghaire99/status/1559470845076000769',
+				referrerPolicy: 'strict-origin-when-cross-origin',
+				body: `{"variables":{"tweet_id":"${id1}${id2}"},"queryId":"lI07N6Otwv1PhnEgXILM7A"}`,
+				method: 'POST',
+				mode: 'cors',
+				credentials: 'include',
+			},
+		)
+			.then(res => {
+				console.log(res);
+				alert('success');
+			})
+			.catch(e => {
+				// alert(window.getCookie('ct0'))
+				// alert(e);
+			});
+	};
+	function replaceDOMRedPacket({
+		dom_card,
+		tweet_Id,
+		post_Id,
+		time,
+		short_url,
+		page_type = '',
+	}) {
+		if (!dom_card || !dom_card.parentElement) {
+			return;
+		}
+		let type;
+		let dom = dom_card.querySelector('div[aria-labelledby]');
+		if (dom) {
+			type = 'card';
+			for (let i = 0; i < dom.childNodes.length; i++) {
+				if (
+					dom.childNodes[i].dataset &&
+					dom.childNodes[i].dataset.testid &&
+					dom.childNodes[i].dataset.testid == 'card.wrapper'
+				) {
+					dom.children[i].style.display = 'none';
+				}
+			}
+		} else {
+			type = 'txt';
+			dom = dom_card.querySelector('div[lang][dir=auto]').parentElement;
+		}
+
+		// dom.style = 'min-height:500px';
+		if (dom) {
+			// debugger mode
+			let div = document.createElement('div');
+			div.addEventListener('click', () => {
+				window.toRedpackPage({post_Id, tweet_Id});
+			});
+			div.id = 'denet-card';
+			div.style.color = 'red';
+			div.innerHTML = `
+				<h2>这里是自定义插入的内容</h2>
+                tweet_Id:${tweet_Id} , 
+                post_Id:${post_Id}
+                获取dom时间:${time}
+                短链接:${short_url}<img onclick="toRedpackPage()" src="https://pbs.twimg.com/card_img/1559498011880804353/yV6kTKyQ?format=jpg&name=small" style="width: 100%"/>
+                渲染时长:${(new Date().getTime() - time) / 1000}s
+                `;
+			dom.appendChild(div);
+			// window.TwitterLikeAPI(1559235463868710917);
+
+			// dom.appendChild(this.createIframe({post_Id, tweet_Id, page_type}));
+		}
+	}
+	try {
+		let timer = setInterval(() => {
+			let card_json_data = window.parseAllDeNetCardParmas();
+			if (card_json_data.length) {
+				clearInterval(timer);
+				for (let i = 0; i < card_json_data.length; i++) {
+					replaceDOMRedPacket(card_json_data[i]);
+				}
+			}
+		}, 1000);
+
+		// let contain = document.getElementsByTagName('body')[0];
+		// let iframe = document.createElement('iframe');
+		// iframe.setAttribute('id', 'elonmusk');
+		// iframe.setAttribute('src', 'https://denet.me');
+		// iframe.setAttribute(
+		// 	'style',
+		// 	'width:375px;min-height:50px; position: fixed; left: 0;top:100px;z-index:1000',
+		// );
+		// contain.appendChild(iframe);
+	} catch (error) {
+		console.log(error);
+	}
+};
+
+const TwitterLikeAPI = tweet_Id => {
+	alert(tweet_Id);
+	fetch(
+		'https://mobile.twitter.com/i/api/graphql/lI07N6Otwv1PhnEgXILM7A/FavoriteTweet',
+		{
+			headers: {
+				accept: '*/*',
+				'accept-language': 'zh-CN,zh;q=0.9',
+				authorization:
+					'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA',
+				'cache-control': 'no-cache',
+				'content-type': 'application/json',
+				pragma: 'no-cache',
+				'sec-fetch-dest': 'document',
+				'sec-fetch-mode': 'cors',
+				'sec-fetch-site': 'same-origin',
+				'x-csrf-token': window.getCookie('ct0'),
+				'x-twitter-active-user': 'yes',
+				'x-twitter-auth-type': 'OAuth2Session',
+				'x-twitter-client-language': 'zh-cn',
+			},
+			referrer: 'https://mobile.twitter.com',
+			referrerPolicy: 'strict-origin-when-cross-origin',
+			body: `{"variables":{"tweet_id":"
+				${tweet_Id}
+				"},"queryId":"lI07N6Otwv1PhnEgXILM7A"}`,
+			method: 'POST',
+			mode: 'cors',
+			credentials: 'include',
+		},
+	)
+		.then(res => {
+			console.log(res);
+			alert(JSON.stringify(res));
+		})
+		.catch(e => {
+			// alert(window.getCookie('ct0'))
+			// alert(e);
+		});
+};
+
+export {addDom, TwitterLikeAPI};

+ 26 - 0
src/utils/cookie.ts

@@ -0,0 +1,26 @@
+import CookieManager from '@react-native-cookies/cookies';
+
+const TOP_LEVEL_DOMAIN = 'https://denetme.net';
+
+export const setCookie = (key: any, value: any, options?: any) => {
+	return CookieManager.set(TOP_LEVEL_DOMAIN, {
+		name: key,
+		value,
+		domain: options?.domain,
+		path: options?.path,
+		version: options?.version,
+		expires: options?.expires,
+	});
+};
+
+export const getCookie = (key: any) => {
+	return new Promise(res => {
+		CookieManager.get(TOP_LEVEL_DOMAIN).then((data: any) => {
+			if (data && data[key]) {
+				res(data[key].value);
+			} else {
+				res(null);
+			}
+		});
+	});
+};

+ 57 - 0
src/utils/index.ts

@@ -0,0 +1,57 @@
+import {setCookie, getCookie} from './cookie';
+
+export const APPTYPE = 3;
+
+// 帮助函数
+const guid = () => {
+	return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
+		/[xy]/g,
+		function (c) {
+			var r = (Math.random() * 16) | 0,
+				v = c == 'x' ? r : (r & 0x3) | 0x8;
+			return v.toString(16);
+		},
+	);
+};
+
+// 获取mid
+export const getMid = async () => {
+	let _mid;
+	let _cookie_mid = await getCookie('mid');
+	if (_cookie_mid) {
+		_mid = _cookie_mid;
+	} else {
+		_mid = guid();
+		console.log('_mid', _mid);
+		await setCookie('mid', _mid);
+	}
+	return _mid;
+};
+
+// 获取host
+export const getEnvConfig = () => {
+	let host, logHost;
+
+	// console.log('NODE_ENV=', process.env.NUXT_ENV.MODE);
+
+	// @ts-ignore
+	switch (process.env.NUXT_ENV.MODE) {
+		case `prod`:
+			host = `https://api.denetme.net`;
+			logHost = 'https://log.denetme.net';
+			break;
+		case `pre`:
+			host = `https://preapi.denetme.net`;
+			logHost = 'https:/prelog.denetme.net';
+			break;
+		default:
+			host = `https://testapi.denetme.net`;
+			logHost = 'https://testlog.denetme.net';
+			break;
+	}
+
+	return {
+		host,
+		logHost,
+	};
+};

+ 14 - 1
tsconfig.json

@@ -5,6 +5,19 @@
     /* Visit https://aka.ms/tsconfig.json to read more about this file */
 
     /* Completeness */
-    "skipLibCheck": true                                 /* Skip type checking all .d.ts files. */
+    "skipLibCheck": true,                                 /* Skip type checking all .d.ts files. */
+    "baseUrl": ".",
+    "paths": {
+      // This needs to be mirrored in babel.config.js
+      "@/pages/*": ["src/pages/*"],
+      "@/utils/*": ["src/utils/*"],
+      "@/styles/*": ["src/styles/*"],
+      "@/actions/*": ["src/actions/*"],
+      "@/components/*": ["src/components/*"],
+      "@/services/*": ["src/services/*"],
+      "@/netWork/*": ["src/netWork/*"],
+      "@/storage/*": ["src/storage/*"],
+      "@/static/*": ["src/static/*"],
+    }
   }
 }

File diff suppressed because it is too large
+ 552 - 15
yarn.lock


Some files were not shown because too many files changed in this diff