@getpara/create-para-app 0.6.0 → 2.7.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.
Files changed (142) hide show
  1. package/README.md +71 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +306 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +7 -48
  9. package/dist/index.js.map +1 -0
  10. package/dist/package-builder.d.ts +13 -0
  11. package/dist/package-builder.d.ts.map +1 -0
  12. package/dist/package-builder.js +89 -0
  13. package/dist/package-builder.js.map +1 -0
  14. package/dist/post-scaffold.d.ts +3 -0
  15. package/dist/post-scaffold.d.ts.map +1 -0
  16. package/dist/post-scaffold.js +64 -0
  17. package/dist/post-scaffold.js.map +1 -0
  18. package/dist/prompt-orchestrator.d.ts +3 -0
  19. package/dist/prompt-orchestrator.d.ts.map +1 -0
  20. package/dist/prompt-orchestrator.js +198 -0
  21. package/dist/prompt-orchestrator.js.map +1 -0
  22. package/dist/scaffolder.d.ts +3 -0
  23. package/dist/scaffolder.d.ts.map +1 -0
  24. package/dist/scaffolder.js +82 -0
  25. package/dist/scaffolder.js.map +1 -0
  26. package/dist/template-registry.d.ts +12 -0
  27. package/dist/template-registry.d.ts.map +1 -0
  28. package/dist/template-registry.js +29 -0
  29. package/dist/template-registry.js.map +1 -0
  30. package/dist/template-renderer.d.ts +11 -0
  31. package/dist/template-renderer.d.ts.map +1 -0
  32. package/dist/template-renderer.js +133 -0
  33. package/dist/template-renderer.js.map +1 -0
  34. package/dist/template-strategies/expo-template.d.ts +18 -0
  35. package/dist/template-strategies/expo-template.d.ts.map +1 -0
  36. package/dist/template-strategies/expo-template.js +173 -0
  37. package/dist/template-strategies/expo-template.js.map +1 -0
  38. package/dist/template-strategies/index.d.ts +4 -0
  39. package/dist/template-strategies/index.d.ts.map +1 -0
  40. package/dist/template-strategies/index.js +3 -0
  41. package/dist/template-strategies/index.js.map +1 -0
  42. package/dist/template-strategies/nextjs-template.d.ts +12 -0
  43. package/dist/template-strategies/nextjs-template.d.ts.map +1 -0
  44. package/dist/template-strategies/nextjs-template.js +123 -0
  45. package/dist/template-strategies/nextjs-template.js.map +1 -0
  46. package/dist/types.d.ts +67 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +16 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils/fs.d.ts +11 -0
  51. package/dist/utils/fs.d.ts.map +1 -0
  52. package/dist/utils/fs.js +38 -0
  53. package/dist/utils/fs.js.map +1 -0
  54. package/dist/utils/logger.d.ts +10 -0
  55. package/dist/utils/logger.d.ts.map +1 -0
  56. package/dist/utils/logger.js +25 -19
  57. package/dist/utils/logger.js.map +1 -0
  58. package/package.json +35 -30
  59. package/templates/expo/_env.example +3 -0
  60. package/templates/expo/_gitignore +48 -0
  61. package/templates/expo/_yarnrc.yml +1 -0
  62. package/templates/expo/app/(auth)/_layout.tsx +12 -0
  63. package/templates/expo/app/(auth)/index.tsx.template +86 -0
  64. package/templates/expo/app/(tabs)/_layout.tsx +16 -0
  65. package/templates/expo/app/(tabs)/index.tsx +112 -0
  66. package/templates/expo/app/(tabs)/send.tsx +111 -0
  67. package/templates/expo/app/_layout.tsx +17 -0
  68. package/templates/expo/app/index.tsx +22 -0
  69. package/templates/expo/app.json.template +32 -0
  70. package/templates/expo/assets/adaptive-icon.png +0 -0
  71. package/templates/expo/assets/favicon.png +0 -0
  72. package/templates/expo/assets/icon.png +0 -0
  73. package/templates/expo/assets/splash.png +0 -0
  74. package/templates/expo/babel.config.cjs +12 -0
  75. package/templates/expo/components/features/AuthForm.tsx.template +138 -0
  76. package/templates/expo/components/features/OAuthButtons.tsx.template +27 -0
  77. package/templates/expo/components/features/index.ts.template +4 -0
  78. package/templates/expo/components/ui/Button.tsx +58 -0
  79. package/templates/expo/components/ui/Card.tsx +11 -0
  80. package/templates/expo/components/ui/Divider.tsx +19 -0
  81. package/templates/expo/components/ui/Input.tsx +23 -0
  82. package/templates/expo/components/ui/WalletCard.tsx +44 -0
  83. package/templates/expo/components/ui/index.ts +5 -0
  84. package/templates/expo/eslint.config.cjs +15 -0
  85. package/templates/expo/global.css +3 -0
  86. package/templates/expo/hooks/useOneClickLogin.ts.template +161 -0
  87. package/templates/expo/hooks/useViemClient.ts +118 -0
  88. package/templates/expo/hooks/useWallets.ts +52 -0
  89. package/templates/expo/index.js +2 -0
  90. package/templates/expo/lib/auth.ts +54 -0
  91. package/templates/expo/lib/constants.ts.template +2 -0
  92. package/templates/expo/lib/para.ts +13 -0
  93. package/templates/expo/metro.config.cjs +14 -0
  94. package/templates/expo/nativewind-env.d.ts +2 -0
  95. package/templates/expo/prettier.config.cjs +10 -0
  96. package/templates/expo/providers/ParaProvider.tsx +140 -0
  97. package/templates/expo/tailwind.config.cjs +23 -0
  98. package/templates/expo/tsconfig.json +11 -0
  99. package/templates/expo/types/index.ts +28 -0
  100. package/templates/nextjs/README.md +69 -0
  101. package/templates/nextjs/_env.example +8 -0
  102. package/templates/nextjs/_gitignore +36 -0
  103. package/templates/nextjs/_yarnrc.yml +1 -0
  104. package/templates/nextjs/next.config.ts +5 -0
  105. package/templates/nextjs/postcss.config.mjs +7 -0
  106. package/templates/nextjs/public/para.svg +3 -0
  107. package/templates/nextjs/src/app/layout.tsx +30 -0
  108. package/templates/nextjs/src/app/page.tsx +40 -0
  109. package/templates/nextjs/src/components/ParaProvider.tsx +116 -0
  110. package/templates/nextjs/src/components/layout/Header.tsx +44 -0
  111. package/templates/nextjs/src/components/ui/ConnectCard.tsx +24 -0
  112. package/templates/nextjs/src/components/ui/SignMessage.tsx +53 -0
  113. package/templates/nextjs/src/components/ui/WalletInfo.tsx +22 -0
  114. package/templates/nextjs/src/hooks/useSignHelloWorld.ts +23 -0
  115. package/templates/nextjs/src/styles/globals.css +1 -0
  116. package/templates/nextjs/tsconfig.json +27 -0
  117. package/dist/bin/index.js +0 -2
  118. package/dist/commands/scaffold.js +0 -137
  119. package/dist/integrations/codeGenerators.js +0 -637
  120. package/dist/integrations/packageJsonHelpers.js +0 -77
  121. package/dist/integrations/sdkSetup.js +0 -24
  122. package/dist/integrations/sdkSetupNextjs.js +0 -111
  123. package/dist/integrations/sdkSetupVite.js +0 -82
  124. package/dist/package.json +0 -44
  125. package/dist/prompts/interactive.js +0 -98
  126. package/dist/src/commands/scaffold.js +0 -157
  127. package/dist/src/index.js +0 -48
  128. package/dist/src/integrations/codeGenerators.js +0 -633
  129. package/dist/src/integrations/packageJsonHelpers.js +0 -77
  130. package/dist/src/integrations/sdkSetup.js +0 -24
  131. package/dist/src/integrations/sdkSetupNextjs.js +0 -111
  132. package/dist/src/integrations/sdkSetupVite.js +0 -82
  133. package/dist/src/prompts/interactive.js +0 -98
  134. package/dist/src/templates/nextjs.js +0 -68
  135. package/dist/src/templates/vite-react.js +0 -52
  136. package/dist/src/utils/exec.js +0 -16
  137. package/dist/src/utils/formatting.js +0 -31
  138. package/dist/src/utils/logger.js +0 -19
  139. package/dist/templates/nextjs.js +0 -61
  140. package/dist/templates/vite-react.js +0 -43
  141. package/dist/utils/exec.js +0 -16
  142. package/dist/utils/formatting.js +0 -31
package/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # @getpara/create-para-app
2
+
3
+ Create Para SDK applications with one command.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npx @getpara/create-para-app my-app
9
+ cd my-app
10
+ cp .env.example .env
11
+ # Add your Para API key to .env
12
+ yarn dev
13
+ ```
14
+
15
+ ## Features
16
+
17
+ - **Interactive setup** - Choose your networks, auth methods, and wallets
18
+ - **Network support** - EVM (Ethereum, Polygon, etc.), Solana, Cosmos
19
+ - **Auth methods** - Email, Phone, OAuth (Google, Apple, Twitter, etc.)
20
+ - **External wallets** - MetaMask, Phantom, Keplr, and more
21
+ - **Modern stack** - Next.js 15, React 19, Tailwind CSS 4, TypeScript
22
+
23
+ ## Usage
24
+
25
+ ### Interactive Mode
26
+
27
+ ```bash
28
+ npx @getpara/create-para-app
29
+ ```
30
+
31
+ Follow the prompts to configure your app:
32
+
33
+ 1. **App name** - Your project name (lowercase, hyphens allowed)
34
+ 2. **Networks** - Select EVM, Solana, Cosmos (or multiple)
35
+ 3. **Auth methods** - Email, Phone, OAuth providers
36
+ 4. **External wallets** - Wallets to support based on selected networks
37
+
38
+ ### With App Name
39
+
40
+ ```bash
41
+ npx @getpara/create-para-app my-para-app
42
+ ```
43
+
44
+ ## Generated Project
45
+
46
+ The CLI creates a Next.js application with:
47
+
48
+ - Para SDK pre-configured with your selected options
49
+ - Connect wallet UI
50
+ - Message signing example
51
+ - Tailwind CSS styling
52
+ - TypeScript configured
53
+
54
+ ## Requirements
55
+
56
+ - Node.js 18.0.0 or higher
57
+ - Yarn or npm
58
+
59
+ ## Get Your API Key
60
+
61
+ Visit [developer.getpara.com](https://developer.getpara.com) to create an account and get your API key.
62
+
63
+ ## Documentation
64
+
65
+ - [Para Documentation](https://docs.getpara.com)
66
+ - [Para React SDK](https://docs.getpara.com/react-sdk)
67
+ - [Examples](https://github.com/para-space/examples-hub)
68
+
69
+ ## License
70
+
71
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function cli(): Promise<void>;
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA+LA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA0JzC"}
package/dist/cli.js ADDED
@@ -0,0 +1,306 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ import { runPrompts } from './prompt-orchestrator.js';
4
+ import { scaffold } from './scaffolder.js';
5
+ import { runPostScaffold } from './post-scaffold.js';
6
+ import { templateRegistry } from './template-registry.js';
7
+ import { pathExists, removeDir } from './utils/fs.js';
8
+ import path from 'node:path';
9
+ function parseArgs(argv) {
10
+ const args = {};
11
+ for (let i = 0; i < argv.length; i++) {
12
+ const arg = argv[i];
13
+ if (arg === '--help' || arg === '-h') {
14
+ args.help = true;
15
+ }
16
+ else if (arg === '--yes' || arg === '-y') {
17
+ args.yes = true;
18
+ }
19
+ else if (arg === '--skip-install') {
20
+ args.skipInstall = true;
21
+ }
22
+ else if (arg === '--template' && argv[i + 1]) {
23
+ args.template = argv[++i];
24
+ }
25
+ else if (arg === '--bundle-id' && argv[i + 1]) {
26
+ args.bundleId = argv[++i];
27
+ }
28
+ else if (arg === '--networks' && argv[i + 1]) {
29
+ args.networks = argv[++i].split(',');
30
+ }
31
+ else if (arg === '--email') {
32
+ args.email = true;
33
+ }
34
+ else if (arg === '--phone') {
35
+ args.phone = true;
36
+ }
37
+ else if (arg === '--oauth' && argv[i + 1]) {
38
+ args.oauth = argv[++i].split(',');
39
+ }
40
+ else if (arg === '--wallets' && argv[i + 1]) {
41
+ args.wallets = argv[++i].split(',');
42
+ }
43
+ else if (!arg.startsWith('-') && !args.appName) {
44
+ args.appName = arg;
45
+ }
46
+ }
47
+ return args;
48
+ }
49
+ function printHelp() {
50
+ console.log(`
51
+ ${pc.bold('@getpara/create-para-app')} - Create Para SDK applications
52
+
53
+ ${pc.dim('Usage:')}
54
+ npx @getpara/create-para-app [app-name] [options]
55
+
56
+ ${pc.dim('Options:')}
57
+ --template <type> Template: nextjs, expo (default: nextjs)
58
+ --bundle-id <id> Bundle ID for Expo (e.g., com.company.app)
59
+ --networks <list> Comma-separated networks: evm,solana,cosmos
60
+ --email Enable email authentication
61
+ --phone Enable phone authentication
62
+ --oauth <list> OAuth providers: GOOGLE,APPLE,TWITTER,DISCORD,FACEBOOK,FARCASTER
63
+ --wallets <list> External wallets: METAMASK,PHANTOM,KEPLR,etc.
64
+ --skip-install Skip dependency installation
65
+ -y, --yes Skip confirmations (overwrite existing directory)
66
+ -h, --help Show this help message
67
+
68
+ ${pc.dim('Examples:')}
69
+ ${pc.cyan('npx @getpara/create-para-app my-app')}
70
+ ${pc.cyan('npx @getpara/create-para-app my-app --template expo --bundle-id com.company.myapp')}
71
+ ${pc.cyan('npx @getpara/create-para-app my-app --template nextjs --networks evm --email')}
72
+ ${pc.cyan('npx @getpara/create-para-app my-app --networks evm,solana --oauth GOOGLE,APPLE -y')}
73
+
74
+ ${pc.dim('Interactive mode:')}
75
+ Run without options for interactive prompts.
76
+ `);
77
+ }
78
+ function isNonInteractive(args) {
79
+ // Non-interactive if:
80
+ // - For Next.js: networks are specified (minimum required)
81
+ // - For Expo: bundle-id is specified (networks default to EVM)
82
+ if (args.template === 'expo') {
83
+ return !!args.bundleId;
84
+ }
85
+ return !!args.networks && args.networks.length > 0;
86
+ }
87
+ function buildConfigFromArgs(args) {
88
+ if (!args.appName) {
89
+ throw new Error('App name is required in non-interactive mode');
90
+ }
91
+ const template = args.template ?? 'nextjs';
92
+ // Validate template
93
+ if (!templateRegistry.hasTemplate(template)) {
94
+ throw new Error(`Unknown template: ${template}. Available: nextjs, expo`);
95
+ }
96
+ // Template-specific validation
97
+ if (template === 'expo') {
98
+ // Expo requires bundle ID
99
+ if (!args.bundleId) {
100
+ throw new Error('--bundle-id is required for Expo template');
101
+ }
102
+ // Validate bundle ID format
103
+ const expoStrategy = templateRegistry.getStrategy('expo');
104
+ const bundleIdError = expoStrategy.validateBundleId(args.bundleId);
105
+ if (bundleIdError) {
106
+ throw new Error(`Invalid bundle ID: ${bundleIdError}`);
107
+ }
108
+ // Expo is EVM-only, warn if other networks specified
109
+ if (args.networks && args.networks.some(n => n !== 'evm')) {
110
+ console.log(pc.yellow('Warning: Expo template only supports EVM. Other networks will be ignored.'));
111
+ }
112
+ // Expo doesn't support external wallets
113
+ if (args.wallets && args.wallets.length > 0) {
114
+ console.log(pc.yellow('Warning: Expo template does not support external wallets. --wallets will be ignored.'));
115
+ }
116
+ }
117
+ else {
118
+ // Next.js requires networks
119
+ if (!args.networks || args.networks.length === 0) {
120
+ throw new Error('--networks is required in non-interactive mode');
121
+ }
122
+ }
123
+ // Default to email auth if no auth method specified
124
+ const hasEmail = args.email ?? (!args.phone && !args.oauth);
125
+ const hasPhone = args.phone ?? false;
126
+ const hasOAuth = !!(args.oauth && args.oauth.length > 0);
127
+ // For Expo: EVM only, no external wallets
128
+ // For Next.js: use provided networks and wallets
129
+ const networks = template === 'expo' ? ['evm'] : args.networks;
130
+ const externalWallets = template === 'expo' ? [] : (args.wallets ?? []);
131
+ const baseConfig = {
132
+ appName: args.appName,
133
+ template,
134
+ networks: networks,
135
+ authMethods: {
136
+ email: hasEmail,
137
+ phone: hasPhone,
138
+ oauth: hasOAuth,
139
+ oauthProviders: args.oauth ?? [],
140
+ },
141
+ externalWallets: externalWallets,
142
+ };
143
+ if (template === 'expo') {
144
+ return {
145
+ ...baseConfig,
146
+ template: 'expo',
147
+ bundleId: args.bundleId,
148
+ };
149
+ }
150
+ return {
151
+ ...baseConfig,
152
+ template: 'nextjs',
153
+ };
154
+ }
155
+ function getStartCommand(config) {
156
+ return config.template === 'expo' ? 'yarn start' : 'yarn dev';
157
+ }
158
+ function getEnvVarName(config) {
159
+ return config.template === 'expo' ? 'EXPO_PUBLIC_PARA_API_KEY' : 'NEXT_PUBLIC_PARA_API_KEY';
160
+ }
161
+ export async function cli() {
162
+ const args = parseArgs(process.argv.slice(2));
163
+ // Help
164
+ if (args.help) {
165
+ printHelp();
166
+ process.exit(0);
167
+ }
168
+ let config;
169
+ if (isNonInteractive(args)) {
170
+ // Non-interactive mode
171
+ console.log(pc.cyan('@getpara/create-para-app'), pc.dim('(non-interactive mode)'));
172
+ console.log();
173
+ try {
174
+ config = buildConfigFromArgs(args);
175
+ }
176
+ catch (error) {
177
+ console.error(pc.red('Error:'), error.message);
178
+ console.log();
179
+ console.log(pc.dim('Run with --help for usage information.'));
180
+ process.exit(1);
181
+ }
182
+ console.log(pc.dim('Configuration:'));
183
+ console.log(pc.dim(` Template: ${config.template}`));
184
+ console.log(pc.dim(` App name: ${config.appName}`));
185
+ if (config.template === 'expo') {
186
+ console.log(pc.dim(` Bundle ID: ${config.bundleId}`));
187
+ }
188
+ console.log(pc.dim(` Networks: ${config.networks.join(', ')}`));
189
+ console.log(pc.dim(` Auth: ${[
190
+ config.authMethods.email && 'email',
191
+ config.authMethods.phone && 'phone',
192
+ config.authMethods.oauth && `oauth(${config.authMethods.oauthProviders.join(',')})`,
193
+ ]
194
+ .filter(Boolean)
195
+ .join(', ')}`));
196
+ if (config.externalWallets.length > 0) {
197
+ console.log(pc.dim(` Wallets: ${config.externalWallets.join(', ')}`));
198
+ }
199
+ console.log();
200
+ }
201
+ else {
202
+ // Interactive mode
203
+ console.log();
204
+ p.intro(pc.bgCyan(pc.black(' @getpara/create-para-app ')));
205
+ try {
206
+ config = await runPrompts(args.appName, args.template);
207
+ }
208
+ catch (error) {
209
+ if (error instanceof Error && error.message === 'cancelled') {
210
+ p.cancel('Operation cancelled.');
211
+ process.exit(0);
212
+ }
213
+ throw error;
214
+ }
215
+ }
216
+ // Check if directory already exists
217
+ const targetDir = path.join(process.cwd(), config.appName);
218
+ if (await pathExists(targetDir)) {
219
+ if (isNonInteractive(args)) {
220
+ if (args.yes) {
221
+ console.log(pc.yellow(`Overwriting existing directory: ${config.appName}`));
222
+ await removeDir(targetDir);
223
+ }
224
+ else {
225
+ console.error(pc.red(`Error: Directory ${config.appName} already exists.`));
226
+ console.log(pc.dim('Use --yes to overwrite.'));
227
+ process.exit(1);
228
+ }
229
+ }
230
+ else {
231
+ const shouldOverwrite = await p.confirm({
232
+ message: `Directory ${pc.cyan(config.appName)} already exists. Overwrite?`,
233
+ initialValue: false,
234
+ });
235
+ if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {
236
+ p.cancel('Operation cancelled.');
237
+ process.exit(0);
238
+ }
239
+ const s = p.spinner();
240
+ s.start('Removing existing directory...');
241
+ await removeDir(targetDir);
242
+ s.stop('Removed existing directory');
243
+ }
244
+ }
245
+ // Scaffold the project
246
+ if (isNonInteractive(args)) {
247
+ console.log(pc.cyan('Creating project...'));
248
+ await scaffold(config);
249
+ console.log(pc.green('✓'), 'Project created!');
250
+ if (!args.skipInstall) {
251
+ await runPostScaffold(config, true); // silent mode
252
+ }
253
+ console.log();
254
+ console.log(pc.green('Done!'), `Your Para app is ready at ${pc.cyan(config.appName)}`);
255
+ console.log();
256
+ console.log(pc.dim('Next steps:'));
257
+ console.log(` cd ${config.appName}`);
258
+ console.log(' cp .env.example .env');
259
+ console.log(` # Add your ${getEnvVarName(config)} to .env`);
260
+ if (args.skipInstall) {
261
+ console.log(' yarn install');
262
+ }
263
+ if (config.template === 'expo') {
264
+ console.log(' npx expo prebuild');
265
+ console.log(' yarn ios # or yarn android');
266
+ }
267
+ else {
268
+ console.log(` ${getStartCommand(config)}`);
269
+ }
270
+ console.log();
271
+ }
272
+ else {
273
+ const s = p.spinner();
274
+ s.start('Creating your Para app...');
275
+ try {
276
+ await scaffold(config);
277
+ s.stop('Project created!');
278
+ // Post-scaffold tasks
279
+ await runPostScaffold(config);
280
+ // Final message
281
+ console.log();
282
+ p.outro(pc.green('Your Para app is ready!'));
283
+ console.log();
284
+ console.log(pc.dim(' Next steps:'));
285
+ console.log();
286
+ console.log(` ${pc.cyan('cd')} ${config.appName}`);
287
+ console.log(` ${pc.cyan('cp')} .env.example .env`);
288
+ console.log(` ${pc.dim(`# Add your ${getEnvVarName(config)} to .env`)}`);
289
+ if (config.template === 'expo') {
290
+ console.log(` ${pc.cyan('npx')} expo prebuild`);
291
+ console.log(` ${pc.cyan('yarn')} ios ${pc.dim('# or yarn android')}`);
292
+ }
293
+ else {
294
+ console.log(` ${pc.cyan(getStartCommand(config).split(' ')[0])} ${getStartCommand(config).split(' ')[1]}`);
295
+ }
296
+ console.log();
297
+ console.log(pc.dim(` Get your API key at ${pc.underline('https://developer.getpara.com')}`));
298
+ console.log();
299
+ }
300
+ catch (error) {
301
+ s.stop('Failed to create project');
302
+ throw error;
303
+ }
304
+ }
305
+ }
306
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js CHANGED
@@ -1,48 +1,7 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { program } from 'commander';
11
- import updateNotifier from 'update-notifier';
12
- import pkg from '../package.json' assert { type: 'json' };
13
- import scaffold from './commands/scaffold.js';
14
- updateNotifier({ pkg }).notify();
15
- program
16
- .name('create-para-app')
17
- .description('CLI tool for scaffolding new apps with Para SDKs')
18
- .version(pkg.version)
19
- .usage('[projectName] [options]')
20
- .helpOption('--help', 'Display help for command');
21
- program
22
- .argument('[projectName]')
23
- .description('Scaffold a new app with specified template and features')
24
- .option('--template <template>', 'Specify the template: nextjs or vite-react')
25
- .option('--use-latest', 'Use the latest version of the underlying framework')
26
- .option('--no-prompt', 'Skip interactive prompts')
27
- .option('--no-git', 'Disable git initialization')
28
- .option('--package-manager <pm>', 'Specify package manager: npm, yarn, bun, pnpm', 'yarn')
29
- .option('--skip-deps', 'Skip dependency installation')
30
- .option('--typescript', 'Enable TypeScript (default: enabled)', true)
31
- .option('--no-typescript', 'Disable TypeScript')
32
- .option('--eslint', 'Enable ESLint (default: enabled)', true)
33
- .option('--no-eslint', 'Disable ESLint')
34
- .option('--tailwind', 'Enable Tailwind CSS (default: enabled)', true)
35
- .option('--no-tailwind', 'Disable Tailwind CSS')
36
- .option('--src-dir', 'Use src/ directory (default: enabled)', true)
37
- .option('--no-src-dir', 'Disable src/ directory')
38
- .option('--app', 'Use the App Router (default: enabled)', true)
39
- .option('--no-app', 'Disable App Router')
40
- .option('--networks <list>', 'Comma separated networks: "evm,cosmos,solana"')
41
- .option('--evm-signer <signer>', 'Specify EVM signer: "ethers" or "viem"')
42
- .option('--external-wallet', 'Enable external wallet support (default: false)')
43
- .option('--api-key <key>', 'Provide your API key to skip prompt')
44
- .option('--project-name <name>', 'Explicitly set project name to skip name prompt')
45
- .action((projectName, options) => __awaiter(void 0, void 0, void 0, function* () {
46
- yield scaffold(projectName, options);
47
- }));
48
- program.parse(process.argv);
1
+ #!/usr/bin/env node
2
+ import { cli } from './cli.js';
3
+ cli().catch(error => {
4
+ console.error('Error:', error);
5
+ process.exit(1);
6
+ });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ScaffoldConfig } from './types.js';
2
+ interface PackageJson {
3
+ name: string;
4
+ version: string;
5
+ private: boolean;
6
+ type: string;
7
+ scripts: Record<string, string>;
8
+ dependencies: Record<string, string>;
9
+ devDependencies: Record<string, string>;
10
+ }
11
+ export declare function buildPackageJson(config: ScaffoldConfig): PackageJson;
12
+ export {};
13
+ //# sourceMappingURL=package-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-builder.d.ts","sourceRoot":"","sources":["../src/package-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AA0DD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CA4BpE"}
@@ -0,0 +1,89 @@
1
+ // All dependencies - included regardless of selected networks
2
+ // This matches the para-modal examples and ensures @getpara/react-sdk works correctly
3
+ const DEPENDENCIES = {
4
+ // EVM + wagmi peer deps
5
+ '@base-org/account': '^2.5.0',
6
+ '@gemini-wallet/core': '^0.3.2',
7
+ '@metamask/sdk': '^0.34.0',
8
+ '@safe-global/safe-apps-provider': '^0.18.6',
9
+ '@safe-global/safe-apps-sdk': '^9.1.0',
10
+ 'porto': '^0.2.37',
11
+ 'viem': '2.42.1',
12
+ 'wagmi': '3.1.0',
13
+ // Cosmos
14
+ '@cosmjs/amino': '0.37.0',
15
+ '@cosmjs/cosmwasm-stargate': '0.37.0',
16
+ '@cosmjs/encoding': '0.37.0',
17
+ '@cosmjs/launchpad': '0.27.1',
18
+ '@cosmjs/proto-signing': '0.37.0',
19
+ '@cosmjs/stargate': '0.37.0',
20
+ '@cosmjs/tendermint-rpc': '0.37.0',
21
+ 'graz': '0.4.2',
22
+ // Solana
23
+ '@solana-mobile/wallet-adapter-mobile': '2.2.5',
24
+ '@solana/wallet-adapter-base': '0.9.27',
25
+ '@solana/wallet-adapter-react': '0.15.39',
26
+ '@solana/wallet-adapter-walletconnect': '0.1.21',
27
+ '@solana/web3.js': '1.98.4',
28
+ // Farcaster (peer deps of Para SDK)
29
+ '@farcaster/mini-app-solana': '1.1.1',
30
+ '@farcaster/miniapp-sdk': '0.2.1',
31
+ '@farcaster/miniapp-wagmi-connector': '1.1.0',
32
+ // Core
33
+ '@getpara/react-sdk': '2.5.0',
34
+ '@tanstack/react-query': '5.90.12',
35
+ 'arg': '^5.0.2',
36
+ 'next': '15.1.5',
37
+ 'react': '^19.0.0',
38
+ 'react-dom': '^19.0.0',
39
+ 'starknet': '^9.2.1',
40
+ };
41
+ // Dev dependencies
42
+ const DEV_DEPENDENCIES = {
43
+ '@eslint/js': '^9.29.0',
44
+ '@tailwindcss/postcss': '^4.1.10',
45
+ '@types/node': '^20',
46
+ '@types/react': '^19',
47
+ '@types/react-dom': '^19',
48
+ 'eslint': '^9.29.0',
49
+ 'pino-pretty': '13.0.0',
50
+ 'postcss': '^8',
51
+ 'tailwindcss': '^4.1.10',
52
+ 'typescript': '^5',
53
+ 'typescript-eslint': '^8.22.0',
54
+ };
55
+ export function buildPackageJson(config) {
56
+ // Build scripts
57
+ const scripts = {
58
+ dev: 'next dev',
59
+ build: 'next build',
60
+ start: 'next start',
61
+ lint: 'eslint .',
62
+ typecheck: 'tsc --noEmit',
63
+ };
64
+ // Add postinstall for Cosmos (graz codegen)
65
+ if (config.networks.includes('cosmos')) {
66
+ scripts.postinstall = 'yarn graz --generate';
67
+ }
68
+ // Sort dependencies alphabetically
69
+ const sortedDeps = sortObject(DEPENDENCIES);
70
+ const sortedDevDeps = sortObject(DEV_DEPENDENCIES);
71
+ return {
72
+ name: config.appName,
73
+ version: '0.1.0',
74
+ private: true,
75
+ type: 'module',
76
+ scripts,
77
+ dependencies: sortedDeps,
78
+ devDependencies: sortedDevDeps,
79
+ };
80
+ }
81
+ function sortObject(obj) {
82
+ return Object.keys(obj)
83
+ .sort()
84
+ .reduce((acc, key) => {
85
+ acc[key] = obj[key];
86
+ return acc;
87
+ }, {});
88
+ }
89
+ //# sourceMappingURL=package-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-builder.js","sourceRoot":"","sources":["../src/package-builder.ts"],"names":[],"mappings":"AAYA,8DAA8D;AAC9D,sFAAsF;AACtF,MAAM,YAAY,GAA2B;IAC3C,wBAAwB;IACxB,mBAAmB,EAAE,QAAQ;IAC7B,qBAAqB,EAAE,QAAQ;IAC/B,eAAe,EAAE,SAAS;IAC1B,iCAAiC,EAAE,SAAS;IAC5C,4BAA4B,EAAE,QAAQ;IACtC,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,OAAO;IAChB,SAAS;IACT,eAAe,EAAE,QAAQ;IACzB,2BAA2B,EAAE,QAAQ;IACrC,kBAAkB,EAAE,QAAQ;IAC5B,mBAAmB,EAAE,QAAQ;IAC7B,uBAAuB,EAAE,QAAQ;IACjC,kBAAkB,EAAE,QAAQ;IAC5B,wBAAwB,EAAE,QAAQ;IAClC,MAAM,EAAE,OAAO;IACf,SAAS;IACT,sCAAsC,EAAE,OAAO;IAC/C,6BAA6B,EAAE,QAAQ;IACvC,8BAA8B,EAAE,SAAS;IACzC,sCAAsC,EAAE,QAAQ;IAChD,iBAAiB,EAAE,QAAQ;IAC3B,oCAAoC;IACpC,4BAA4B,EAAE,OAAO;IACrC,wBAAwB,EAAE,OAAO;IACjC,oCAAoC,EAAE,OAAO;IAC7C,OAAO;IACP,oBAAoB,EAAE,OAAO;IAC7B,uBAAuB,EAAE,SAAS;IAClC,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,mBAAmB;AACnB,MAAM,gBAAgB,GAA2B;IAC/C,YAAY,EAAE,SAAS;IACvB,sBAAsB,EAAE,SAAS;IACjC,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,KAAK;IACrB,kBAAkB,EAAE,KAAK;IACzB,QAAQ,EAAE,SAAS;IACnB,aAAa,EAAE,QAAQ;IACvB,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,IAAI;IAClB,mBAAmB,EAAE,SAAS;CAC/B,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,gBAAgB;IAChB,MAAM,OAAO,GAA2B;QACtC,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,cAAc;KAC1B,CAAC;IAEF,4CAA4C;IAC5C,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,WAAW,GAAG,sBAAsB,CAAC;IAC/C,CAAC;IAED,mCAAmC;IACnC,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAEnD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,OAAO;QACpB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,YAAY,EAAE,UAAU;QACxB,eAAe,EAAE,aAAa;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAA2B;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,MAAM,CACL,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAA4B,CAC7B,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ScaffoldConfig } from './types.js';
2
+ export declare function runPostScaffold(config: ScaffoldConfig, silent?: boolean): Promise<void>;
3
+ //# sourceMappingURL=post-scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-scaffold.d.ts","sourceRoot":"","sources":["../src/post-scaffold.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC3F"}
@@ -0,0 +1,64 @@
1
+ import { spawn } from 'node:child_process';
2
+ import path from 'node:path';
3
+ import * as p from '@clack/prompts';
4
+ import pc from 'picocolors';
5
+ export async function runPostScaffold(config, silent = false) {
6
+ const projectDir = path.join(process.cwd(), config.appName);
7
+ if (silent) {
8
+ // Non-interactive mode - just install without prompts
9
+ console.log(pc.cyan('Installing dependencies...'));
10
+ try {
11
+ await runCommand('yarn', ['install'], projectDir);
12
+ console.log(pc.green('✓'), 'Dependencies installed!');
13
+ }
14
+ catch {
15
+ console.log(pc.yellow('⚠'), 'Could not install dependencies. Run `yarn install` manually.');
16
+ }
17
+ return;
18
+ }
19
+ // Interactive mode - ask user
20
+ const shouldInstall = await p.confirm({
21
+ message: 'Install dependencies now?',
22
+ initialValue: true,
23
+ });
24
+ if (p.isCancel(shouldInstall)) {
25
+ return;
26
+ }
27
+ if (shouldInstall) {
28
+ const s = p.spinner();
29
+ s.start('Installing dependencies with yarn...');
30
+ try {
31
+ await runCommand('yarn', ['install'], projectDir);
32
+ s.stop('Dependencies installed!');
33
+ }
34
+ catch {
35
+ s.stop('Failed to install dependencies');
36
+ p.log.warn('Could not install dependencies automatically. Please run `yarn install` manually.');
37
+ }
38
+ }
39
+ }
40
+ function runCommand(command, args, cwd) {
41
+ return new Promise((resolve, reject) => {
42
+ const child = spawn(command, args, {
43
+ cwd,
44
+ stdio: 'pipe', // Don't show output
45
+ shell: true,
46
+ });
47
+ let stderr = '';
48
+ child.stderr?.on('data', data => {
49
+ stderr += data.toString();
50
+ });
51
+ child.on('close', code => {
52
+ if (code === 0) {
53
+ resolve();
54
+ }
55
+ else {
56
+ reject(new Error(`Command failed with code ${code}: ${stderr}`));
57
+ }
58
+ });
59
+ child.on('error', error => {
60
+ reject(error);
61
+ });
62
+ });
63
+ }
64
+ //# sourceMappingURL=post-scaffold.js.map