create-near-app 6.0.0-beta.2 → 6.0.0-beta.3

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.
Files changed (150) hide show
  1. package/dist/app.js +6 -11
  2. package/dist/make.js +44 -81
  3. package/dist/messages.js +31 -23
  4. package/dist/package-json.js +16 -16
  5. package/dist/tracking.js +1 -1
  6. package/dist/types.js +5 -4
  7. package/dist/user-input.js +81 -89
  8. package/package.json +1 -1
  9. package/templates/contracts/{rust → rs}/Cargo.toml +0 -3
  10. package/templates/contracts/{rust → rs}/README.md +14 -5
  11. package/templates/contracts/rs/build.sh +3 -0
  12. package/templates/contracts/rs/deploy.sh +2 -0
  13. package/templates/contracts/{rust → rs}/src/lib.rs +4 -6
  14. package/templates/contracts/rs/test-rs.sh +9 -0
  15. package/templates/contracts/rs/test-ts.sh +10 -0
  16. package/templates/contracts/{js → ts}/README.md +1 -0
  17. package/templates/contracts/ts/package.json +20 -0
  18. package/templates/frontend/next/.eslintrc.json +3 -0
  19. package/templates/frontend/next/README.md +36 -0
  20. package/templates/frontend/next/jsconfig.json +7 -0
  21. package/templates/frontend/next/next.config.js +6 -0
  22. package/templates/frontend/next/package.json +40 -0
  23. package/templates/frontend/next/public/near-logo.svg +43 -0
  24. package/templates/frontend/next/public/near.svg +1 -0
  25. package/templates/frontend/next/src/app/app.module.css +228 -0
  26. package/templates/frontend/next/src/app/globals.css +95 -0
  27. package/templates/frontend/next/src/app/hello-components/page.js +44 -0
  28. package/templates/frontend/next/src/app/hello-near/page.js +64 -0
  29. package/templates/frontend/next/src/app/layout.js +22 -0
  30. package/templates/frontend/next/src/app/page.js +37 -0
  31. package/templates/frontend/next/src/components/cards.js +46 -0
  32. package/templates/frontend/next/src/components/navigation.js +36 -0
  33. package/templates/frontend/next/src/components/vm-component.js +26 -0
  34. package/templates/frontend/next/src/config.js +21 -0
  35. package/templates/frontend/next/src/wallets/wallet-selector.js +128 -0
  36. package/templates/frontend/{gateway/src/data/web3.ts → next/src/wallets/web3-wallet.ts} +4 -7
  37. package/templates/frontend/vanilla/.babelrc +7 -0
  38. package/templates/frontend/vanilla/package.json +27 -13
  39. package/templates/frontend/vanilla/{assets → src/assets}/global.css +25 -56
  40. package/templates/frontend/vanilla/src/components.html +61 -0
  41. package/templates/frontend/vanilla/src/components.js +63 -0
  42. package/templates/frontend/vanilla/src/hello-near.html +80 -0
  43. package/templates/frontend/vanilla/src/hello.js +61 -0
  44. package/templates/frontend/vanilla/src/index.html +65 -0
  45. package/templates/frontend/vanilla/{near-wallet.js → src/near-wallet.js} +20 -18
  46. package/templates/frontend/vanilla/webpack.config.js +79 -0
  47. package/templates/{integration-tests/rust-tests → sandbox-tests/sandbox-rs}/Cargo.toml +5 -5
  48. package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/package.json +6 -6
  49. package/templates/contracts/js/build.sh +0 -5
  50. package/templates/contracts/js/deploy.sh +0 -18
  51. package/templates/contracts/js/package.json +0 -19
  52. package/templates/contracts/rust/build.sh +0 -6
  53. package/templates/contracts/rust/deploy.sh +0 -18
  54. package/templates/frontend/gateway/.env +0 -1
  55. package/templates/frontend/gateway/.nvmrc +0 -1
  56. package/templates/frontend/gateway/.prettierrc +0 -6
  57. package/templates/frontend/gateway/next.config.js +0 -15
  58. package/templates/frontend/gateway/package.json +0 -74
  59. package/templates/frontend/gateway/public/apple-touch-icon.png +0 -0
  60. package/templates/frontend/gateway/public/bos-meta.png +0 -0
  61. package/templates/frontend/gateway/public/favicon.png +0 -0
  62. package/templates/frontend/gateway/public/fonts/FKGrotesk.woff2 +0 -0
  63. package/templates/frontend/gateway/public/fonts/Mona-Sans.woff2 +0 -0
  64. package/templates/frontend/gateway/public/logo192.png +0 -0
  65. package/templates/frontend/gateway/public/robots.txt +0 -3
  66. package/templates/frontend/gateway/public/site.webmanifest +0 -8
  67. package/templates/frontend/gateway/src/assets/images/near-icon.svg +0 -3
  68. package/templates/frontend/gateway/src/components/MetaTags.tsx +0 -22
  69. package/templates/frontend/gateway/src/components/component/ComponentWrapperPage.tsx +0 -27
  70. package/templates/frontend/gateway/src/components/layouts/DefaultLayout.tsx +0 -16
  71. package/templates/frontend/gateway/src/components/layouts/SimpleLayout.tsx +0 -9
  72. package/templates/frontend/gateway/src/components/lib/Button/Button.tsx +0 -379
  73. package/templates/frontend/gateway/src/components/lib/Button/index.tsx +0 -1
  74. package/templates/frontend/gateway/src/components/lib/Spinner/Spinner.tsx +0 -33
  75. package/templates/frontend/gateway/src/components/lib/Spinner/index.ts +0 -1
  76. package/templates/frontend/gateway/src/components/lib/Text/Text.tsx +0 -14
  77. package/templates/frontend/gateway/src/components/lib/Text/index.tsx +0 -1
  78. package/templates/frontend/gateway/src/components/lib/Toast/README.md +0 -83
  79. package/templates/frontend/gateway/src/components/lib/Toast/Toast.tsx +0 -25
  80. package/templates/frontend/gateway/src/components/lib/Toast/Toaster.tsx +0 -48
  81. package/templates/frontend/gateway/src/components/lib/Toast/api.ts +0 -6
  82. package/templates/frontend/gateway/src/components/lib/Toast/index.ts +0 -3
  83. package/templates/frontend/gateway/src/components/lib/Toast/store.ts +0 -83
  84. package/templates/frontend/gateway/src/components/lib/Toast/styles.ts +0 -126
  85. package/templates/frontend/gateway/src/components/navigation/Navigation.tsx +0 -23
  86. package/templates/frontend/gateway/src/components/navigation/UserDropdownMenu.tsx +0 -209
  87. package/templates/frontend/gateway/src/components/navigation/desktop/DesktopNavigation.tsx +0 -109
  88. package/templates/frontend/gateway/src/components/navigation/desktop/MainNavigationMenu.tsx +0 -170
  89. package/templates/frontend/gateway/src/components/navigation/icons/close.svg +0 -22
  90. package/templates/frontend/gateway/src/components/navigation/icons/near-icon.svg +0 -3
  91. package/templates/frontend/gateway/src/components/navigation/icons/near-logo.svg +0 -14
  92. package/templates/frontend/gateway/src/components/navigation/icons/return.svg +0 -29
  93. package/templates/frontend/gateway/src/components/navigation/icons/search.svg +0 -3
  94. package/templates/frontend/gateway/src/components/navigation/mobile/AccordionMenu.tsx +0 -141
  95. package/templates/frontend/gateway/src/components/navigation/mobile/Menu.tsx +0 -86
  96. package/templates/frontend/gateway/src/components/navigation/mobile/MobileNavigation.tsx +0 -131
  97. package/templates/frontend/gateway/src/components/navigation/navigation-categories.ts +0 -75
  98. package/templates/frontend/gateway/src/components/vm/VmCommitButton.tsx +0 -20
  99. package/templates/frontend/gateway/src/components/vm/VmComponent.tsx +0 -29
  100. package/templates/frontend/gateway/src/components/vm/VmInitializer.tsx +0 -124
  101. package/templates/frontend/gateway/src/data/components.ts +0 -50
  102. package/templates/frontend/gateway/src/hooks/useBosComponents.ts +0 -14
  103. package/templates/frontend/gateway/src/hooks/useBosLoaderInitializer.ts +0 -60
  104. package/templates/frontend/gateway/src/hooks/useFlags.ts +0 -40
  105. package/templates/frontend/gateway/src/hooks/useLayout.tsx +0 -12
  106. package/templates/frontend/gateway/src/index.d.ts +0 -9
  107. package/templates/frontend/gateway/src/pages/_app.tsx +0 -47
  108. package/templates/frontend/gateway/src/pages/_document.tsx +0 -27
  109. package/templates/frontend/gateway/src/pages/dig.tsx +0 -25
  110. package/templates/frontend/gateway/src/pages/flags.tsx +0 -83
  111. package/templates/frontend/gateway/src/pages/hello-api.tsx +0 -105
  112. package/templates/frontend/gateway/src/pages/hello-component.tsx +0 -23
  113. package/templates/frontend/gateway/src/pages/hello-ethereum.tsx +0 -23
  114. package/templates/frontend/gateway/src/pages/hello-social.tsx +0 -31
  115. package/templates/frontend/gateway/src/pages/index.tsx +0 -51
  116. package/templates/frontend/gateway/src/pages/nui.tsx +0 -25
  117. package/templates/frontend/gateway/src/stores/auth.ts +0 -29
  118. package/templates/frontend/gateway/src/stores/bos-loader.ts +0 -20
  119. package/templates/frontend/gateway/src/stores/current-component.ts +0 -11
  120. package/templates/frontend/gateway/src/stores/vm.ts +0 -24
  121. package/templates/frontend/gateway/src/styles/globals.css +0 -68
  122. package/templates/frontend/gateway/src/styles/theme.css +0 -129
  123. package/templates/frontend/gateway/src/utils/config.ts +0 -49
  124. package/templates/frontend/gateway/src/utils/form-validation.ts +0 -18
  125. package/templates/frontend/gateway/src/utils/keypom-options.ts +0 -59
  126. package/templates/frontend/gateway/src/utils/route/privateRoute.tsx +0 -20
  127. package/templates/frontend/gateway/src/utils/route/signedOutRoute.tsx +0 -21
  128. package/templates/frontend/gateway/src/utils/types.ts +0 -33
  129. package/templates/frontend/gateway/tsconfig.json +0 -24
  130. package/templates/frontend/vanilla/.env +0 -1
  131. package/templates/frontend/vanilla/index.html +0 -97
  132. package/templates/frontend/vanilla/index.js +0 -70
  133. package/templates/shared/template.gitignore +0 -31
  134. /package/templates/contracts/{rust → rs}/.cargo/config +0 -0
  135. /package/templates/contracts/{rust → rs}/rust-toolchain.toml +0 -0
  136. /package/templates/contracts/{js → ts}/package-lock.json +0 -0
  137. /package/templates/contracts/{js → ts}/src/contract.ts +0 -0
  138. /package/templates/contracts/{js → ts}/tsconfig.json +0 -0
  139. /package/templates/frontend/{gateway → next}/public/next.svg +0 -0
  140. /package/templates/frontend/{gateway → next}/public/vercel.svg +0 -0
  141. /package/templates/frontend/{gateway/public → next/src/app}/favicon.ico +0 -0
  142. /package/templates/{shared → frontend/vanilla}/.gitpod.yml +0 -0
  143. /package/templates/{shared → frontend/vanilla}/README.md +0 -0
  144. /package/templates/frontend/vanilla/{assets → src/assets}/favicon.ico +0 -0
  145. /package/templates/frontend/vanilla/{assets → src/assets}/logo-black.svg +0 -0
  146. /package/templates/frontend/vanilla/{assets → src/assets}/logo-white.svg +0 -0
  147. /package/templates/{integration-tests/rust-tests → sandbox-tests/sandbox-rs}/src/tests.rs +0 -0
  148. /package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/ava.config.cjs +0 -0
  149. /package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/package-lock.json +0 -0
  150. /package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/src/main.ava.ts +0 -0
@@ -0,0 +1,64 @@
1
+ 'use client'
2
+ import { DocsCard, HelloComponentsCard } from '@/components/cards';
3
+ import { useWallet } from '@/wallets/wallet-selector';
4
+ import { useState, useEffect } from 'react'
5
+ import { HelloNearContract, NetworkId } from '../../config';
6
+ import styles from '../app.module.css'
7
+
8
+ // Contract that the app will interact with
9
+ const CONTRACT = HelloNearContract[NetworkId];
10
+
11
+ export default function HelloNear({ }) {
12
+ const { signedAccountId, viewMethod, callMethod } = useWallet()
13
+
14
+ const [greeting, setGreeting] = useState('loading...')
15
+ const [loggedIn, setLoggedIn] = useState(false)
16
+ const [showSpinner, setShowSpinner] = useState(false)
17
+
18
+ useEffect(() => {
19
+ viewMethod && viewMethod(CONTRACT, 'get_greeting', {}).then(
20
+ greeting => setGreeting(greeting)
21
+ )
22
+ }, [viewMethod])
23
+
24
+ useEffect(() => {
25
+ setLoggedIn(!!signedAccountId)
26
+ }, [signedAccountId])
27
+
28
+ const saveGreeting = async () => {
29
+ setShowSpinner(true)
30
+ await callMethod(CONTRACT, 'set_greeting', { greeting });
31
+ setShowSpinner(false)
32
+ }
33
+
34
+ return (
35
+ <main className={styles.main}>
36
+ <div className={styles.description}>
37
+ <p>
38
+ Interacting with the contract: &nbsp;
39
+ <code className={styles.code}>{CONTRACT}</code>
40
+ </p>
41
+ </div>
42
+
43
+ <div className={styles.center}>
44
+ <h1 className="w-100"> The contract says: <code>{greeting}</code> </h1>
45
+ <div className="input-group" hidden={!loggedIn}>
46
+ <input type="text" className="form-control w-20" placeholder="Store a new greeting" onChange={t => { setGreeting(t.target.value) }} />
47
+ <div className="input-group-append">
48
+ <button className="btn btn-secondary" onClick={saveGreeting}>
49
+ <span hidden={showSpinner}> Save </span>
50
+ <i className="spinner-border spinner-border-sm" hidden={!showSpinner}></i>
51
+ </button>
52
+ </div>
53
+ </div>
54
+ <div className='w-100 text-end align-text-center' hidden={loggedIn}>
55
+ <p className='m-0'> Please login to change the greeting </p>
56
+ </div>
57
+ </div>
58
+ <div className={styles.grid}>
59
+ <DocsCard />
60
+ <HelloComponentsCard />
61
+ </div>
62
+ </main>
63
+ )
64
+ }
@@ -0,0 +1,22 @@
1
+ 'use client'
2
+ import './globals.css'
3
+ import '@near-wallet-selector/modal-ui/styles.css';
4
+
5
+ import { ComponentMap, NetworkId } from '@/config';
6
+ import { Navigation } from '@/components/navigation';
7
+ import { initWallet } from '@/wallets/wallet-selector';
8
+
9
+ export default function RootLayout({ children }) {
10
+
11
+ const createAccessKeyFor = ComponentMap[NetworkId].socialDB;
12
+ initWallet({ createAccessKeyFor });
13
+
14
+ return (
15
+ <html lang="en">
16
+ <body>
17
+ <Navigation />
18
+ {children}
19
+ </body>
20
+ </html>
21
+ )
22
+ }
@@ -0,0 +1,37 @@
1
+ import Image from 'next/image'
2
+ import styles from './app.module.css'
3
+ import { DocsCard, HelloComponentsCard, HelloNearCard } from '@/components/cards'
4
+
5
+ export default function Home({ }) {
6
+ return (
7
+ <main className={styles.main}>
8
+ <div className={styles.description}> </div>
9
+
10
+ <div className={styles.center}>
11
+ <Image
12
+ className={styles.logo}
13
+ src="/near.svg"
14
+ alt="Next.js Logo"
15
+ width={110 * 1.5}
16
+ height={28 * 1.5}
17
+ priority
18
+ />
19
+ <h3 className="ms-2 me-3 text-dark"> + </h3>
20
+ <Image
21
+ className={styles.logo}
22
+ src="/next.svg"
23
+ alt="Next.js Logo"
24
+ width={300 * .58}
25
+ height={61 * .58}
26
+ priority
27
+ />
28
+ </div>
29
+
30
+ <div className={styles.grid}>
31
+ <HelloComponentsCard />
32
+ <HelloNearCard />
33
+ <DocsCard />
34
+ </div>
35
+ </main>
36
+ )
37
+ }
@@ -0,0 +1,46 @@
1
+ import styles from '../app/app.module.css';
2
+
3
+ export const DocsCard = () => {
4
+ return (
5
+ <a
6
+ href="https://docs.near.org/develop/integrate/quickstart-frontend"
7
+ className={styles.card}
8
+ target='_blank'
9
+ rel="noopener noreferrer"
10
+ >
11
+ <h2>
12
+ Near Docs <span>-&gt;</span>
13
+ </h2>
14
+ <p>Learn how this application works, and what you can build on Near.</p>
15
+ </a>);
16
+ }
17
+
18
+ export const HelloNearCard = () => {
19
+ return (
20
+ <a
21
+ href="/hello-near"
22
+ className={styles.card}
23
+ rel="noopener noreferrer"
24
+ >
25
+ <h2>
26
+ Near Integration <span>-&gt;</span>
27
+ </h2>
28
+ <p>Discover how simple it is to interact with a Near smart contract.</p>
29
+ </a>
30
+ );
31
+ }
32
+
33
+ export const HelloComponentsCard = () => {
34
+ return (
35
+ <a
36
+ href="/hello-components"
37
+ className={styles.card}
38
+ rel="noopener noreferrer"
39
+ >
40
+ <h2>
41
+ Web3 Components <span>-&gt;</span>
42
+ </h2>
43
+ <p>See how Web3 components can help you to create multi-chain apps.</p>
44
+ </a>
45
+ )
46
+ }
@@ -0,0 +1,36 @@
1
+ import Image from 'next/image';
2
+ import Link from 'next/link';
3
+ import { useEffect, useState } from 'react';
4
+
5
+ import NearLogo from 'public/near-logo.svg';
6
+ import { useWallet } from '@/wallets/wallet-selector';
7
+
8
+ export const Navigation = () => {
9
+
10
+ const { signedAccountId, logOut, logIn } = useWallet()
11
+ const [action, setAction] = useState(() => { })
12
+ const [label, setLabel] = useState('Loading...')
13
+
14
+ useEffect(() => {
15
+ if (signedAccountId) {
16
+ setAction(() => logOut)
17
+ setLabel(`Logout ${signedAccountId}`)
18
+ } else {
19
+ setAction(() => logIn)
20
+ setLabel('Login')
21
+ }
22
+ }, [signedAccountId, logOut, logIn, setAction, setLabel]);
23
+
24
+ return (
25
+ <nav className="navbar navbar-expand-lg">
26
+ <div className="container-fluid">
27
+ <Link href="/" passHref legacyBehavior>
28
+ <Image priority src={NearLogo} alt="NEAR" width="30" height="24" className="d-inline-block align-text-top" />
29
+ </Link>
30
+ <div className='navbar-nav pt-1'>
31
+ <button className="btn btn-secondary" onClick={action} > {label} </button>
32
+ </div>
33
+ </div>
34
+ </nav>
35
+ );
36
+ }
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+ import { useInitNear, Widget, EthersProviderContext } from 'near-social-vm';
4
+
5
+ import { useWallet } from '@/wallets/wallet-selector';
6
+ import { useEthersProviderContext } from '@/wallets/web3-wallet';
7
+ import { NetworkId } from '@/config';
8
+
9
+ export default function Component({ src }) {
10
+ const ethersContext = useEthersProviderContext();
11
+ const { selector } = useWallet();
12
+ const { initNear } = useInitNear();
13
+
14
+ useEffect(() => {
15
+ initNear && selector && initNear({ networkId: NetworkId, selector });
16
+ }, [initNear, selector]);
17
+
18
+ return (
19
+ <div>
20
+ <EthersProviderContext.Provider value={ethersContext}>
21
+ <Widget src={src} />
22
+ </EthersProviderContext.Provider>
23
+ <p className="mt-4 small"> <span className="text-secondary">Source:</span> <a href={`https://near.social/mob.near/widget/WidgetSource?src=${src}`}> {src} </a> </p>
24
+ </div>
25
+ );
26
+ }
@@ -0,0 +1,21 @@
1
+ export const NetworkId = 'testnet';
2
+
3
+ export const HelloNearContract = {
4
+ mainnet: 'hello.near-examples.near',
5
+ testnet: 'hello.near-examples.testnet',
6
+ }
7
+
8
+ export const ComponentMap = {
9
+ mainnet: {
10
+ socialDB: 'social.near',
11
+ Lido: 'zavodil.near/widget/Lido',
12
+ HelloNear: 'gagdiez.near/widget/HelloNear',
13
+ LoveNear: 'gagdiez.near/widget/LoveNear',
14
+ },
15
+ testnet: {
16
+ socialDB: 'v1.social08.testnet',
17
+ Lido: 'influencer.testnet/widget/Lido',
18
+ HelloNear: 'influencer.testnet/widget/HelloNear',
19
+ LoveNear: 'influencer.testnet/widget/LoveNear',
20
+ }
21
+ }
@@ -0,0 +1,128 @@
1
+ import { create as createStore } from 'zustand';
2
+ import { distinctUntilChanged, map } from "rxjs";
3
+ import { providers } from 'near-api-js';
4
+ import { setupWalletSelector } from '@near-wallet-selector/core';
5
+ import { setupModal } from '@near-wallet-selector/modal-ui';
6
+ import { setupMyNearWallet } from '@near-wallet-selector/my-near-wallet';
7
+ import { setupHereWallet } from '@near-wallet-selector/here-wallet';
8
+
9
+ import { NetworkId } from '@/config';
10
+ import { useEffect, useState } from 'react';
11
+
12
+ export const useWallet = createStore(set => ({
13
+ signedAccountId: '',
14
+ logOut: undefined,
15
+ logIn: undefined,
16
+ selector: undefined,
17
+ viewMethod: undefined,
18
+ callMethod: undefined,
19
+ setLogActions: ({ logOut, logIn }) => set({ logOut, logIn }),
20
+ setAuth: ({ signedAccountId }) => set({ signedAccountId }),
21
+ setMethods: ({ viewMethod, callMethod }) => set({ viewMethod, callMethod }),
22
+ setStoreSelector: ({ selector }) => set({ selector }),
23
+ }));
24
+
25
+ export function initWallet({ createAccessKeyFor }) {
26
+ const setAuth = useWallet(store => store.setAuth);
27
+ const setLogActions = useWallet(store => store.setLogActions);
28
+ const setMethods = useWallet(store => store.setMethods);
29
+ const setStoreSelector = useWallet(store => store.setStoreSelector);
30
+ const [selector, setSelector] = useState(undefined);
31
+
32
+ useEffect(() => {
33
+ console.log('initWallet')
34
+ const selector = setupWalletSelector({
35
+ network: NetworkId,
36
+ modules: [setupMyNearWallet(), setupHereWallet()]
37
+ })
38
+
39
+ setSelector(selector);
40
+ setStoreSelector({ selector });
41
+ }, []);
42
+
43
+ useEffect(() => {
44
+ console.log('selector then')
45
+ if(!selector) return;
46
+
47
+ selector.then(walletSelector => {
48
+ const accounts = walletSelector.store.getState().accounts
49
+ const signedAccountId = accounts.find((account) => account.active)?.accountId || '';
50
+ setAuth({ signedAccountId });
51
+
52
+ walletSelector.store.observable
53
+ .pipe(
54
+ map((state) => state.accounts),
55
+ distinctUntilChanged()
56
+ )
57
+ .subscribe((accounts) => {
58
+ console.log("accounts", accounts)
59
+ const signedAccountId = accounts.find((account) => account.active)?.accountId || '';
60
+ setAuth({ signedAccountId });
61
+ });
62
+ })
63
+ }, [selector, setAuth]);
64
+
65
+ useEffect(() => {
66
+ console.log('actions')
67
+
68
+ if(!selector) return;
69
+
70
+ // defined logOut and logIn actions
71
+ const logOut = async () => {
72
+ const wallet = await (await selector).wallet();
73
+ await wallet.signOut();
74
+ setAuth({ signedAccountId: '' });
75
+ }
76
+
77
+ const logIn = async () => {
78
+ const modal = setupModal(await selector, { contractId: createAccessKeyFor });
79
+ modal.show();
80
+ }
81
+
82
+ setLogActions({ logOut, logIn });
83
+ }, [selector, setAuth]);
84
+
85
+ useEffect(() => {
86
+ console.log('methods')
87
+
88
+ if(!selector) return;
89
+
90
+ const viewMethod = async (contractId, method, args = {}) => {
91
+ const { network } = (await selector).options;
92
+ const provider = new providers.JsonRpcProvider({ url: network.nodeUrl });
93
+
94
+ let res = await provider.query({
95
+ request_type: 'call_function',
96
+ account_id: contractId,
97
+ method_name: method,
98
+ args_base64: Buffer.from(JSON.stringify(args)).toString('base64'),
99
+ finality: 'optimistic',
100
+ });
101
+ return JSON.parse(Buffer.from(res.result).toString());
102
+ }
103
+
104
+ const callMethod = async (contractId, method, args = {}, gas = '30000000000000', deposit = 0) => {
105
+ const wallet = await (await selector).wallet();
106
+
107
+ const outcome = await wallet.signAndSendTransaction({
108
+ receiverId: contractId,
109
+ actions: [
110
+ {
111
+ type: 'FunctionCall',
112
+ params: {
113
+ methodName: method,
114
+ args,
115
+ gas,
116
+ deposit,
117
+ },
118
+ },
119
+ ],
120
+ });
121
+
122
+ return providers.getTransactionLastResult(outcome)
123
+ }
124
+
125
+ setMethods({ viewMethod, callMethod });
126
+
127
+ }, [selector]);
128
+ }
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  import type { EIP1193Provider } from '@web3-onboard/core';
2
3
  import injectedModule from '@web3-onboard/injected-wallets';
3
4
  import ledgerModule from '@web3-onboard/ledger';
@@ -6,8 +7,6 @@ import walletConnectModule from '@web3-onboard/walletconnect';
6
7
  import { useEffect, useState } from 'react';
7
8
  import { singletonHook } from 'react-singleton-hook';
8
9
 
9
- import icon from '@/assets/images/near-icon.svg';
10
-
11
10
  const web3onboardKey = 'web3-onboard:connectedWallets';
12
11
 
13
12
  const wcV2InitOptions: any = {
@@ -231,8 +230,8 @@ export const onboard = init({
231
230
  ],
232
231
  appMetadata: {
233
232
  name: 'NEAR',
234
- icon: icon.content,
235
- description: 'NEAR - BOS',
233
+ icon: '/next.svg',
234
+ description: 'NEAR',
236
235
  },
237
236
  theme: 'dark',
238
237
  containerElements: {
@@ -258,8 +257,6 @@ export const useEthersProviderContext = singletonHook(defaultEthersProviderConte
258
257
 
259
258
  const walletsSub = onboard.state.select('wallets');
260
259
 
261
- // TODO: do we need to unsubscribe?
262
- // const { unsubscribe } = walletsSub.subscribe((wallets) => {
263
260
  walletsSub.subscribe((wallets) => {
264
261
  const connectedWallets = wallets.map(({ label }) => label);
265
262
  localStorage.setItem(web3onboardKey, JSON.stringify(connectedWallets));
@@ -289,4 +286,4 @@ export const useEthersProviderContext = singletonHook(defaultEthersProviderConte
289
286
  }, [wallet]);
290
287
 
291
288
  return ethersProvider;
292
- });
289
+ });
@@ -0,0 +1,7 @@
1
+ {
2
+ "presets": ["@babel/preset-env", ["@babel/preset-react", {"runtime": "automatic"}]],
3
+ "plugins": [
4
+ "@babel/plugin-syntax-dynamic-import",
5
+ "@babel/plugin-transform-class-properties"
6
+ ]
7
+ }
@@ -3,27 +3,41 @@
3
3
  "version": "1.0.0",
4
4
  "license": "(MIT AND Apache-2.0)",
5
5
  "scripts": {
6
- "start": "parcel index.html --open",
7
- "dev": "parcel index.html --open",
8
- "build": "parcel build index.html --public-url ./"
6
+ "dev": "webpack serve --open"
9
7
  },
10
8
  "devDependencies": {
11
- "buffer": "^6.0.0",
12
- "events": "^3.3.0",
9
+ "@babel/core": "^7.23.2",
10
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
11
+ "@babel/plugin-transform-class-properties": "^7.18.6",
12
+ "@babel/preset-env": "^7.23.2",
13
+ "@babel/preset-react": "^7.22.15",
14
+ "babel-loader": "^9.1.3",
15
+ "buffer": "^6.0.3",
16
+ "copy-webpack-plugin": "^11.0.0",
17
+ "css-loader": "^6.8.1",
18
+ "html-webpack-plugin": "^5.5.3",
13
19
  "https-browserify": "^1.0.0",
14
- "nodemon": "^2.0.16",
15
- "parcel": "^2.7.0",
16
20
  "process": "^0.11.10",
17
- "punycode": "^1.4.1",
18
- "stream-http": "^3.1.0",
19
- "url": "^0.11.0"
21
+ "stream-http": "^3.2.0",
22
+ "style-loader": "^3.3.3",
23
+ "url": "^0.11.3",
24
+ "webpack": "^5.89.0",
25
+ "webpack-cli": "^5.1.4",
26
+ "webpack-dev-server": "^4.15.1"
20
27
  },
21
28
  "dependencies": {
22
29
  "@near-wallet-selector/core": "^8.7.0",
23
- "@near-wallet-selector/ledger": "^8.7.0",
30
+ "@near-wallet-selector/here-wallet": "^8.7.0",
24
31
  "@near-wallet-selector/modal-ui": "^8.7.0",
25
32
  "@near-wallet-selector/my-near-wallet": "^8.7.0",
26
- "@near-wallet-selector/near-wallet": "^8.7.0",
27
- "near-api-js": "^2.1.4"
33
+ "crypto-browserify": "^3.12.0",
34
+ "near-api-js": "^2.1.4",
35
+ "near-social-vm": "github:NearSocial/VM#2.5.2",
36
+ "prop-types": "^15.8.1",
37
+ "react": "^18.2.0",
38
+ "react-dom": "^18.2.0",
39
+ "react-router-dom": "^6.18.0",
40
+ "semantic-ui-react": "^2.1.4",
41
+ "stream": "^0.0.2"
28
42
  }
29
43
  }
@@ -12,40 +12,47 @@ html {
12
12
  --primary: #FF585D;
13
13
  --secondary: #0072CE;
14
14
 
15
- background-color: var(--bg);
16
15
  color: var(--fg);
17
- font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
16
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Noto Sans, Ubuntu, Droid Sans, Helvetica Neue, sans-serif;
18
17
  font-size: calc(0.9em + 0.5vw);
19
18
  line-height: 1.3;
20
19
  }
21
20
 
22
21
  body {
23
22
  margin: 0;
24
- padding: 1em;
23
+ height: 100vh;
24
+ background: linear-gradient(to bottom, transparent, rgb(var(--shadow))) rgb(var(--light-gray));
25
+ background-color: var(--shadow) !important;
25
26
  }
26
27
 
27
- main {
28
- margin: 0 auto;
29
- max-width: 26em;
28
+ a {
29
+ color: var(--fg) !important;
30
+ text-decoration: none !important;
30
31
  }
31
32
 
32
- main.please-wait {}
33
+ .container{
34
+ display: flex;
35
+ flex: 1;
36
+ flex-direction: column;
37
+ justify-content: space-between;
38
+ align-items: center;
39
+ padding: 2rem;
40
+ padding-top: 0;
41
+ }
33
42
 
34
43
  h1 {
35
- background-image: url(./logo-black.svg);
36
- background-position: center 1em;
37
- background-repeat: no-repeat;
38
- background-size: auto 1.5em;
39
- margin-top: 0;
40
- padding: 3.5em 0 0;
41
44
  text-align: center;
42
45
  font-size: 1.5em;
43
46
  }
47
+
44
48
  .greeting {
45
49
  color: var(--secondary);
46
50
  text-decoration: underline;
47
51
  }
48
- h2 {
52
+
53
+ .alert{
54
+ max-width: 410px;
55
+ font-size: 13px;
49
56
  text-align: center;
50
57
  }
51
58
 
@@ -53,22 +60,6 @@ h2 {
53
60
  pointer-events: none;
54
61
  }
55
62
 
56
- ul.information {
57
- margin: 2em 0 2em 0;
58
- padding: 0;
59
- text-align: left;
60
- font-size: 0.8em;
61
-
62
- }
63
- .information li:first-child {
64
- border-top: 1px solid var(--light-gray);
65
- }
66
- .information li {
67
- padding: 0.5em 0;
68
- border-bottom: 1px solid var(--light-gray);
69
- list-style: none;
70
- }
71
-
72
63
  .change {
73
64
  display: flex;
74
65
  flex-direction: column;
@@ -76,7 +67,6 @@ ul.information {
76
67
  justify-content: space-evenly;
77
68
  align-items: stretch;
78
69
  font-size: 1em;
79
- border: 2px solid var(--light-gray);
80
70
  padding: 0.5em;
81
71
  }
82
72
  .change > div {
@@ -90,12 +80,6 @@ ul.information {
90
80
  border-bottom-right-radius: 0;
91
81
  border-top-right-radius: 0;
92
82
  }
93
- .change label {
94
- display: block;
95
- text-align: left;
96
- margin-right: 10px;
97
- padding-bottom: 0.5em;
98
- }
99
83
  .change button {
100
84
  border-bottom-left-radius: 0;
101
85
  border-top-left-radius: 0;
@@ -122,30 +106,15 @@ button, input {
122
106
  outline: none;
123
107
  }
124
108
 
125
- main.please-wait .change button {
109
+ .please-wait .change button {
126
110
  position: relative;
127
111
  pointer-events: none;
128
- background-color: white;
129
112
  }
130
- main.please-wait .change button span {
113
+ .please-wait .change button span {
131
114
  visibility: hidden;
132
115
  }
133
116
 
134
- button {
135
- background-color: var(--secondary);
136
- border-radius: 5px;
137
- border: none;
138
- color: #efefef;
139
- cursor: pointer;
140
- padding: 0.3em 0.75em;
141
- transition: transform 30ms;
142
- }
143
- button:hover, button:focus {
144
- box-shadow: 0 0 10em rgba(255, 255, 255, 0.2) inset;
145
- }
146
-
147
117
  input {
148
- background-color: var(--light-gray);
149
118
  border: none;
150
119
  border-radius: 5px 0 0 5px;
151
120
  caret-color: var(--primary);
@@ -184,8 +153,8 @@ li {
184
153
  }
185
154
  }
186
155
 
187
- main.please-wait .loader,
188
- main.please-wait .loader:after{
156
+ .please-wait .loader,
157
+ .please-wait .loader:after{
189
158
  display: inline-block;
190
159
  }
191
160
  .loader,