create-near-app 5.3.1 → 6.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/make.js +19 -15
- package/dist/messages.js +2 -2
- package/dist/package-json.js +17 -1
- package/dist/types.js +1 -1
- package/dist/user-input.js +16 -15
- package/package.json +4 -1
- package/templates/contracts/js/deploy.sh +6 -1
- package/templates/contracts/js/package-lock.json +5966 -0
- package/templates/contracts/js/src/contract.ts +5 -5
- package/templates/contracts/rust/Cargo.toml +1 -1
- package/templates/contracts/rust/README.md +2 -2
- package/templates/contracts/rust/deploy.sh +5 -0
- package/templates/contracts/rust/src/lib.rs +11 -11
- package/templates/frontend/gateway/.nvmrc +1 -0
- package/templates/frontend/gateway/.prettierrc +6 -0
- package/templates/frontend/gateway/next.config.js +15 -0
- package/templates/frontend/gateway/package.json +74 -0
- package/templates/frontend/gateway/public/apple-touch-icon.png +0 -0
- package/templates/frontend/gateway/public/bos-meta.png +0 -0
- package/templates/frontend/gateway/public/favicon.ico +0 -0
- package/templates/frontend/gateway/public/favicon.png +0 -0
- package/templates/frontend/gateway/public/fonts/FKGrotesk.woff2 +0 -0
- package/templates/frontend/gateway/public/fonts/Mona-Sans.woff2 +0 -0
- package/templates/frontend/gateway/public/logo192.png +0 -0
- package/templates/frontend/gateway/public/next.svg +1 -0
- package/templates/frontend/gateway/public/robots.txt +3 -0
- package/templates/frontend/gateway/public/site.webmanifest +8 -0
- package/templates/frontend/gateway/public/vercel.svg +1 -0
- package/templates/frontend/gateway/src/assets/images/near-icon.svg +3 -0
- package/templates/frontend/gateway/src/components/MetaTags.tsx +22 -0
- package/templates/frontend/gateway/src/components/component/ComponentWrapperPage.tsx +27 -0
- package/templates/frontend/gateway/src/components/layouts/DefaultLayout.tsx +16 -0
- package/templates/frontend/gateway/src/components/layouts/SimpleLayout.tsx +9 -0
- package/templates/frontend/gateway/src/components/lib/Button/Button.tsx +379 -0
- package/templates/frontend/gateway/src/components/lib/Button/index.tsx +1 -0
- package/templates/frontend/gateway/src/components/lib/Spinner/Spinner.tsx +33 -0
- package/templates/frontend/gateway/src/components/lib/Spinner/index.ts +1 -0
- package/templates/frontend/gateway/src/components/lib/Text/Text.tsx +14 -0
- package/templates/frontend/gateway/src/components/lib/Text/index.tsx +1 -0
- package/templates/frontend/gateway/src/components/lib/Toast/README.md +83 -0
- package/templates/frontend/gateway/src/components/lib/Toast/Toast.tsx +25 -0
- package/templates/frontend/gateway/src/components/lib/Toast/Toaster.tsx +48 -0
- package/templates/frontend/gateway/src/components/lib/Toast/api.ts +6 -0
- package/templates/frontend/gateway/src/components/lib/Toast/index.ts +3 -0
- package/templates/frontend/gateway/src/components/lib/Toast/store.ts +83 -0
- package/templates/frontend/gateway/src/components/lib/Toast/styles.ts +126 -0
- package/templates/frontend/gateway/src/components/navigation/Navigation.tsx +23 -0
- package/templates/frontend/gateway/src/components/navigation/UserDropdownMenu.tsx +209 -0
- package/templates/frontend/gateway/src/components/navigation/desktop/DesktopNavigation.tsx +109 -0
- package/templates/frontend/gateway/src/components/navigation/desktop/MainNavigationMenu.tsx +170 -0
- package/templates/frontend/gateway/src/components/navigation/icons/close.svg +22 -0
- package/templates/frontend/gateway/src/components/navigation/icons/near-icon.svg +3 -0
- package/templates/frontend/gateway/src/components/navigation/icons/near-logo.svg +14 -0
- package/templates/frontend/gateway/src/components/navigation/icons/return.svg +29 -0
- package/templates/frontend/gateway/src/components/navigation/icons/search.svg +3 -0
- package/templates/frontend/gateway/src/components/navigation/mobile/AccordionMenu.tsx +141 -0
- package/templates/frontend/gateway/src/components/navigation/mobile/Menu.tsx +86 -0
- package/templates/frontend/gateway/src/components/navigation/mobile/MobileNavigation.tsx +131 -0
- package/templates/frontend/gateway/src/components/navigation/navigation-categories.ts +75 -0
- package/templates/frontend/gateway/src/components/vm/VmCommitButton.tsx +20 -0
- package/templates/frontend/gateway/src/components/vm/VmComponent.tsx +29 -0
- package/templates/frontend/gateway/src/components/vm/VmInitializer.tsx +124 -0
- package/templates/frontend/gateway/src/data/components.ts +50 -0
- package/templates/frontend/gateway/src/data/web3.ts +292 -0
- package/templates/frontend/gateway/src/hooks/useBosComponents.ts +14 -0
- package/templates/frontend/gateway/src/hooks/useBosLoaderInitializer.ts +60 -0
- package/templates/frontend/gateway/src/hooks/useFlags.ts +40 -0
- package/templates/frontend/gateway/src/hooks/useLayout.tsx +12 -0
- package/templates/frontend/gateway/src/index.d.ts +9 -0
- package/templates/frontend/gateway/src/pages/_app.tsx +47 -0
- package/templates/frontend/gateway/src/pages/_document.tsx +27 -0
- package/templates/frontend/gateway/src/pages/dig.tsx +25 -0
- package/templates/frontend/gateway/src/pages/flags.tsx +83 -0
- package/templates/frontend/gateway/src/pages/hello-api.tsx +105 -0
- package/templates/frontend/gateway/src/pages/hello-component.tsx +23 -0
- package/templates/frontend/gateway/src/pages/hello-ethereum.tsx +23 -0
- package/templates/frontend/gateway/src/pages/hello-social.tsx +31 -0
- package/templates/frontend/gateway/src/pages/index.tsx +51 -0
- package/templates/frontend/gateway/src/pages/nui.tsx +25 -0
- package/templates/frontend/gateway/src/stores/auth.ts +29 -0
- package/templates/frontend/gateway/src/stores/bos-loader.ts +20 -0
- package/templates/frontend/gateway/src/stores/current-component.ts +11 -0
- package/templates/frontend/gateway/src/stores/vm.ts +24 -0
- package/templates/frontend/gateway/src/styles/globals.css +68 -0
- package/templates/frontend/gateway/src/styles/theme.css +129 -0
- package/templates/frontend/gateway/src/utils/config.ts +49 -0
- package/templates/frontend/gateway/src/utils/form-validation.ts +18 -0
- package/templates/frontend/gateway/src/utils/keypom-options.ts +59 -0
- package/templates/frontend/gateway/src/utils/route/privateRoute.tsx +20 -0
- package/templates/frontend/gateway/src/utils/route/signedOutRoute.tsx +21 -0
- package/templates/frontend/gateway/src/utils/types.ts +33 -0
- package/templates/frontend/gateway/tsconfig.json +24 -0
- package/templates/frontend/vanilla/.env +1 -0
- package/templates/frontend/vanilla/index.html +15 -6
- package/templates/frontend/vanilla/index.js +1 -1
- package/templates/frontend/{shared → vanilla}/near-wallet.js +2 -2
- package/templates/frontend/vanilla/package.json +9 -8
- package/templates/integration-tests/js-tests/package-lock.json +5014 -0
- package/templates/integration-tests/js-tests/package.json +3 -0
- package/templates/integration-tests/js-tests/src/main.ava.ts +6 -6
- package/templates/integration-tests/rust-tests/src/tests.rs +7 -7
- package/templates/frontend/react/App.js +0 -75
- package/templates/frontend/react/assets/favicon.ico +0 -0
- package/templates/frontend/react/assets/global.css +0 -231
- package/templates/frontend/react/assets/logo-black.svg +0 -1
- package/templates/frontend/react/assets/logo-white.svg +0 -1
- package/templates/frontend/react/index.html +0 -15
- package/templates/frontend/react/index.js +0 -23
- package/templates/frontend/react/package.json +0 -52
- package/templates/frontend/react/ui-components.js +0 -59
- package/templates/frontend/shared/start.sh +0 -26
- /package/templates/{shared → contracts/rust}/rust-toolchain.toml +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { NetworkId } from './types';
|
|
2
|
+
|
|
3
|
+
export const KEYPOM_OPTIONS = (networkId: NetworkId) => {
|
|
4
|
+
return {
|
|
5
|
+
beginTrial: {
|
|
6
|
+
landing: {
|
|
7
|
+
title: 'Create an Account',
|
|
8
|
+
body: 'To start, enter a username.',
|
|
9
|
+
fieldPlaceholder: 'Account ID',
|
|
10
|
+
buttonText: 'Create',
|
|
11
|
+
},
|
|
12
|
+
claiming: {
|
|
13
|
+
title: 'Creating Account',
|
|
14
|
+
body: 'Your account is being created. Please wait...',
|
|
15
|
+
},
|
|
16
|
+
claimed: {
|
|
17
|
+
title: 'You\'re all set! 🎉',
|
|
18
|
+
body: 'Your account has been successfully created.',
|
|
19
|
+
buttonText: 'Continue to app',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
trialOver: {
|
|
23
|
+
mainBody: {
|
|
24
|
+
title: 'Your trial has ended',
|
|
25
|
+
body: 'Choose a wallet provider and onboard fully into the NEAR ecosystem.',
|
|
26
|
+
imageOne: {
|
|
27
|
+
title: 'Secure Your Digital Assets',
|
|
28
|
+
body: 'Now that your trial is over, secure your account with an official wallet provider!',
|
|
29
|
+
},
|
|
30
|
+
imageTwo: {
|
|
31
|
+
title: 'Log In to Any NEAR App',
|
|
32
|
+
body: 'Once your account is secured, you can use any app on NEAR!',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
offboardingOptions: {
|
|
36
|
+
title: 'Choose a Wallet',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
invalidAction: {
|
|
40
|
+
title: 'Invalid Action',
|
|
41
|
+
body: 'Your trial does not allow you to perform this action. For more information, please contact the site administrator.',
|
|
42
|
+
},
|
|
43
|
+
insufficientBalance: {
|
|
44
|
+
title: 'Insufficient Balance',
|
|
45
|
+
body: 'Your account does not have enough balance for the action you are trying to perform. Please try again with a different action. For more information, please contact the site administrator.',
|
|
46
|
+
},
|
|
47
|
+
wallets: [
|
|
48
|
+
{
|
|
49
|
+
name: 'MyNEARWallet',
|
|
50
|
+
description: 'Secure your account with a Seed Phrase',
|
|
51
|
+
iconUrl:
|
|
52
|
+
'data:image/png;base64,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',
|
|
53
|
+
redirectUrl: `${
|
|
54
|
+
networkId === 'testnet' ? 'https://testnet.mynearwallet.com' : 'https://app.mynearwallet.com'
|
|
55
|
+
}/linkdrop/ACCOUNT_ID/SECRET_KEY`,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useAuthStore } from '@/stores/auth';
|
|
2
|
+
import type { NextComponentType } from 'next';
|
|
3
|
+
import { useRouter } from 'next/router';
|
|
4
|
+
|
|
5
|
+
const privateRoute = (Component: NextComponentType) => {
|
|
6
|
+
const Private = (props: any) => {
|
|
7
|
+
const signedIn = useAuthStore((store) => store.signedIn);
|
|
8
|
+
const router = useRouter();
|
|
9
|
+
|
|
10
|
+
if (!signedIn && router) {
|
|
11
|
+
// `signin` or `signup`?
|
|
12
|
+
router.push('/signup');
|
|
13
|
+
}
|
|
14
|
+
return <Component {...props} />;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return Private;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default privateRoute;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useRouter } from 'next/router';
|
|
2
|
+
|
|
3
|
+
import { useAuthStore } from '@/stores/auth';
|
|
4
|
+
|
|
5
|
+
import type { NextPageWithLayout } from '../types';
|
|
6
|
+
|
|
7
|
+
const signedOutRoute = (Component: NextPageWithLayout) => {
|
|
8
|
+
const SignedOut = (props: NextPageWithLayout) => {
|
|
9
|
+
const signedIn = useAuthStore((store) => store.signedIn);
|
|
10
|
+
const router = useRouter();
|
|
11
|
+
|
|
12
|
+
if (signedIn && router) {
|
|
13
|
+
router.push('/');
|
|
14
|
+
}
|
|
15
|
+
return <Component {...props} />;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return SignedOut;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default signedOutRoute;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { NextPage } from 'next';
|
|
2
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
export type NextPageWithLayout<T = any> = NextPage<T> & {
|
|
5
|
+
getLayout?: (page: ReactElement) => ReactNode;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type NetworkId = ProductionNetwork['networkId'];
|
|
9
|
+
export type Network = ProductionNetwork;
|
|
10
|
+
// export type NetworkId = ProductionNetwork['networkId'] | DevelopmentNetwork['networkId'];
|
|
11
|
+
// export type Network = ProductionNetwork | DevelopmentNetwork;
|
|
12
|
+
|
|
13
|
+
type ProductionNetwork = {
|
|
14
|
+
networkId: 'testnet' | 'mainnet';
|
|
15
|
+
viewAccountId: string;
|
|
16
|
+
nodeUrl: string;
|
|
17
|
+
walletUrl: string;
|
|
18
|
+
helperUrl: string;
|
|
19
|
+
fastAuth: {
|
|
20
|
+
mpcRecoveryUrl: string;
|
|
21
|
+
authHelperUrl: string; // TODO refactor: review by fastauth team
|
|
22
|
+
accountIdSuffix: string;
|
|
23
|
+
firebase: {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
authDomain: string;
|
|
26
|
+
projectId: string;
|
|
27
|
+
storageBucket: string;
|
|
28
|
+
messagingSenderId: string;
|
|
29
|
+
appId: string;
|
|
30
|
+
measurementId: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es5",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
+
"allowJs": true,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"forceConsistentCasingInFileNames": true,
|
|
9
|
+
"strictPropertyInitialization": false,
|
|
10
|
+
"noEmit": true,
|
|
11
|
+
"esModuleInterop": true,
|
|
12
|
+
"module": "esnext",
|
|
13
|
+
"moduleResolution": "node",
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"isolatedModules": true,
|
|
16
|
+
"jsx": "preserve",
|
|
17
|
+
"incremental": true,
|
|
18
|
+
"paths": {
|
|
19
|
+
"@/*": ["./src/*"]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types/**/*.d.ts"],
|
|
23
|
+
"exclude": ["node_modules"]
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CONTRACT_NAME=hello.near-examples.testnet
|
|
@@ -18,15 +18,24 @@
|
|
|
18
18
|
Welcome to NEAR!
|
|
19
19
|
</h3>
|
|
20
20
|
<p>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
<b data-behavior="contract"></b>
|
|
22
|
+
is storing a greeting message in the NEAR blockchain. To change it you
|
|
23
|
+
need to sign in using the NEAR Wallet. It is very simple, just use the
|
|
24
|
+
button below.
|
|
24
25
|
</p>
|
|
25
26
|
<p>
|
|
26
27
|
Do not worry, this app runs in the test network ("testnet"). It works
|
|
27
28
|
just like the main network ("mainnet"), but using NEAR Tokens that are
|
|
28
29
|
only for testing!
|
|
29
30
|
</p>
|
|
31
|
+
|
|
32
|
+
<p>
|
|
33
|
+
<b> Note </b>: The contract address is being loaded from
|
|
34
|
+
an <code> env </code> variable. If you chose to add a contract during
|
|
35
|
+
the wizard, running <code> npm run deploy </code> will deploy the
|
|
36
|
+
contract code and update the <code> env </code> variable used here.
|
|
37
|
+
</p>
|
|
38
|
+
|
|
30
39
|
<p style="text-align: center; margin-top: 2.5em">
|
|
31
40
|
<button id="sign-in-button">Sign in with NEAR Wallet</button>
|
|
32
41
|
</p>
|
|
@@ -56,7 +65,7 @@
|
|
|
56
65
|
</div>
|
|
57
66
|
</form>
|
|
58
67
|
<p>
|
|
59
|
-
Look at that! A Hello World app! This greeting is stored on
|
|
68
|
+
Look at that! A Hello World app! This greeting is stored on <b data-behavior="contract"></b>.
|
|
60
69
|
</p>
|
|
61
70
|
<ol>
|
|
62
71
|
<li>
|
|
@@ -64,11 +73,11 @@
|
|
|
64
73
|
to interact with the methods <code>set_greeting</code> and <code>get_greeting</code>.
|
|
65
74
|
</li>
|
|
66
75
|
<li>
|
|
67
|
-
These method live in the <a target="_blank" href="https://docs.near.org/
|
|
76
|
+
These method live in the <a target="_blank" href="https://docs.near.org/develop/contracts/welcome">smart contract</a>,
|
|
68
77
|
who's code is defined in the <code>contract/</code> folder.
|
|
69
78
|
</li>
|
|
70
79
|
<li>
|
|
71
|
-
When you run <code>npm run
|
|
80
|
+
When you run <code>npm run deploy</code> the code in the <code>contract/</code> folder is compiled and deployed to the NEAR testnet.
|
|
72
81
|
You can see how this happens by looking in <code>package.json</code> at the <code>scripts</code> section to
|
|
73
82
|
find the <code>dev</code> command.
|
|
74
83
|
</li>
|
|
@@ -5,7 +5,7 @@ const CONTRACT_ADDRESS = process.env.CONTRACT_NAME;
|
|
|
5
5
|
|
|
6
6
|
// When creating the wallet you can optionally ask to create an access key
|
|
7
7
|
// Having the key enables to call non-payable methods without interrupting the user to sign
|
|
8
|
-
const wallet = new Wallet({ createAccessKeyFor: CONTRACT_ADDRESS })
|
|
8
|
+
const wallet = new Wallet({ createAccessKeyFor: CONTRACT_ADDRESS });
|
|
9
9
|
|
|
10
10
|
// Setup on page load
|
|
11
11
|
window.onload = async () => {
|
|
@@ -24,8 +24,8 @@ export class Wallet {
|
|
|
24
24
|
// key, so the user skips signing non-payable transactions.
|
|
25
25
|
// Omitting the accountId will result in the user being
|
|
26
26
|
// asked to sign all transactions.
|
|
27
|
-
this.createAccessKeyFor = createAccessKeyFor
|
|
28
|
-
this.network = 'testnet'
|
|
27
|
+
this.createAccessKeyFor = createAccessKeyFor;
|
|
28
|
+
this.network = 'testnet';
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// To be called when the website loads
|
|
@@ -3,26 +3,27 @@
|
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"license": "(MIT AND Apache-2.0)",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"start": "
|
|
6
|
+
"start": "parcel index.html --open",
|
|
7
|
+
"dev": "parcel index.html --open",
|
|
7
8
|
"build": "parcel build index.html --public-url ./"
|
|
8
9
|
},
|
|
9
10
|
"devDependencies": {
|
|
10
|
-
"
|
|
11
|
+
"buffer": "^6.0.0",
|
|
11
12
|
"events": "^3.3.0",
|
|
12
13
|
"https-browserify": "^1.0.0",
|
|
13
14
|
"nodemon": "^2.0.16",
|
|
14
15
|
"parcel": "^2.7.0",
|
|
15
|
-
"punycode": "^1.4.1",
|
|
16
16
|
"process": "^0.11.10",
|
|
17
|
+
"punycode": "^1.4.1",
|
|
17
18
|
"stream-http": "^3.1.0",
|
|
18
19
|
"url": "^0.11.0"
|
|
19
20
|
},
|
|
20
21
|
"dependencies": {
|
|
21
|
-
"@near-wallet-selector/core": "^8.
|
|
22
|
-
"@near-wallet-selector/ledger": "^8.
|
|
23
|
-
"@near-wallet-selector/modal-ui": "^8.
|
|
24
|
-
"@near-wallet-selector/my-near-wallet": "^8.
|
|
25
|
-
"@near-wallet-selector/near-wallet": "^8.
|
|
22
|
+
"@near-wallet-selector/core": "^8.7.0",
|
|
23
|
+
"@near-wallet-selector/ledger": "^8.7.0",
|
|
24
|
+
"@near-wallet-selector/modal-ui": "^8.7.0",
|
|
25
|
+
"@near-wallet-selector/my-near-wallet": "^8.7.0",
|
|
26
|
+
"@near-wallet-selector/near-wallet": "^8.7.0",
|
|
26
27
|
"near-api-js": "^2.1.4"
|
|
27
28
|
}
|
|
28
29
|
}
|