@hellocoop/quickstart 1.1.0 → 2.0.1

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/README.md CHANGED
@@ -9,6 +9,17 @@ npx @hellocoop/quickstart@latest
9
9
 
10
10
  This will open up a browser window, where you will need to login with Hellō, and then choose to create a new app, or return the `client_id`.
11
11
 
12
+ ### Options
13
+
14
+ - --provider_hint (-p) - space separated string of provider_hint
15
+ - --suffix (-x) - suffix to add to generated app name
16
+ - --integration (-i) - integration name shown in console
17
+ - --file (-f) - file to write out HELLO_CLIENT_ID_DEFAULT
18
+ - --secret (-s) - boolean to generate a HELLO_COOKIE_SECRET_DEFAULT value
19
+ - --wildcard (-w) - boolean to set the wildcard domain Development Redirect URI
20
+ - --debug (-d) - output debug info
21
+
22
+
12
23
  ## Import Package
13
24
 
14
25
  This package is useful for platform specific installers such as [Hellō Quickstart for Next.js](https://www.npmjs.com/package/@hellocoop/quickstart-nextjs)
package/index.js CHANGED
@@ -66,8 +66,8 @@ const quickstart = async function (params) {
66
66
  const hellooDomain = process.env.HELLO_DOMAIN || 'hello.coop'
67
67
  const quickstartURL = `https://quickstart.${hellooDomain}/?${queryString}`
68
68
  server.listen(port, host, () => {
69
- console.log('Obtaining a client_id from Hellō Quickstart using:')
70
- console.log(quickstartURL)
69
+ console.log('Obtaining a client_id with Hellō Quickstart')
70
+ // console.log(quickstartURL)
71
71
  const rl = readline.createInterface({
72
72
  input: process.stdin,
73
73
  output: process.stdout
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hellocoop/quickstart",
3
- "version": "1.1.0",
3
+ "version": "2.0.1",
4
4
  "description": "A CLI and module to start the Hello Quickstart web app and return a client_id",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -36,7 +36,11 @@
36
36
  "dependencies": {
37
37
  "dotenv": "^16.3.1",
38
38
  "get-port": "^7.0.0",
39
- "open": "^9.1.0"
39
+ "open": "^9.1.0",
40
+ "semver": "^7.5.4"
40
41
  },
41
- "type": "module"
42
+ "type": "module",
43
+ "engines": {
44
+ "node": ">=18.3"
45
+ }
42
46
  }
package/quickstart.mjs CHANGED
@@ -1,6 +1,125 @@
1
1
  #!/usr/bin/env node
2
+ import semver from 'semver';
3
+ import * as fs from 'fs'
4
+
5
+ const requiredVersion = '>=18.3.0';
6
+
7
+ if (!semver.satisfies(process.versions.node, requiredVersion)) {
8
+ console.error(`This script requires Node.js version ${requiredVersion}`);
9
+ process.exit(1);
10
+ }
11
+
12
+ // following are in Nodejs 18+
13
+ import { parseArgs } from "node:util";
14
+ import { randomBytes } from 'crypto'
15
+
16
+ if (!process.stdout.isTTY) {
17
+ const error = new Error('Not running on interactive terminal. Exiting Hellō Quickstart.')
18
+ console.error(error)
19
+ process.exit(1);
20
+ }
21
+
22
+ const {
23
+ values: { provider_hint, suffix, file, secret, wildcard, integration, debug },
24
+ } = parseArgs({
25
+ options: {
26
+ provider_hint: {
27
+ type: "string",
28
+ short: "p",
29
+ default: '',
30
+ },
31
+ suffix: {
32
+ type: "string",
33
+ short: "x",
34
+ default: '',
35
+ },
36
+ integration: {
37
+ type: "string",
38
+ short: "i",
39
+ default: ''
40
+ },
41
+ file: {
42
+ type: "string",
43
+ short: "f",
44
+ },
45
+ secret: {
46
+ type: "boolean",
47
+ short: "s",
48
+ },
49
+ wildcard: {
50
+ type: "boolean",
51
+ short: "w",
52
+ },
53
+ debug: {
54
+ type: "boolean",
55
+ short: "d",
56
+ },
57
+ },
58
+ });
59
+
2
60
  import 'dotenv/config'
3
- import qs from './index.js';
61
+ import quickstart from './index.js';
62
+
63
+ const existingClientId = process.env.HELLO_CLIENT_ID_DEFAULT
64
+ if (existingClientId) {
65
+ console.error(`HELLO_CLIENT_ID_DEFAULT already set to ${existingClientId}`)
66
+ process.exit(0);
67
+ }
68
+
69
+ if (debug) {
70
+ console.log('Hellō Quickstart parameters:')
71
+ if (provider_hint)
72
+ console.log(` provider_hint="${provider_hint}"`)
73
+ if (suffix)
74
+ console.log(` suffix="${suffix}"`)
75
+ if (integration)
76
+ console.log(` integration="${integration}"`)
77
+ if (file)
78
+ console.log(` writing output to "${file}"`)
79
+ console.log(` generate secret=${secret}`)
80
+ console.log(` enable wildcard=${wildcard}\n`);
81
+ }
82
+
83
+ (async () => {
84
+
85
+ const options = {
86
+ suffix,
87
+ provider_hint,
88
+ wildcard_domain: wildcard,
89
+ integration
90
+ }
91
+
92
+ const output = {}
93
+ try {
94
+ output.client_id = await quickstart(options)
95
+ } catch(err) {
96
+ console.error(err)
97
+ process.exit(1)
98
+ }
99
+ if (secret)
100
+ output.secret = randomBytes(32).toString('hex')
101
+
102
+ if (file) {
103
+ let helloConfig = `
104
+ # added by @hellocoop/quickstart-nextjs on ${(new Date()).toISOString()}
105
+ HELLO_CLIENT_ID_DEFAULT='${output.client_id}'`
106
+ if (secret) {
107
+ helloConfig +=`
108
+ HELLO_COOKIE_SECRET_DEFAULT='${output.secret}'
109
+ `
110
+ }
111
+ const outputFile = process.cwd()+'/'+file
112
+
113
+ try {
114
+ const err = fs.appendFileSync(outputFile,helloConfig)
115
+ } catch(err) {
116
+ console.err(err)
117
+ process.exit(1)
118
+ }
119
+ console.log(`\nUpdated ${outputFile} with:`)
120
+ console.log(helloConfig+'\n')
121
+ } else {
122
+ console.log(JSON.stringify(output,null,4))
123
+ }
4
124
 
5
- const client_id = await qs();
6
- console.log({ client_id });
125
+ })();