create-kelpie 0.2.0 → 0.3.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/options.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  * what this produces, which is what makes it testable.
7
7
  */
8
8
  import type { ScaffoldOptions } from './scaffold.ts';
9
- export declare const USAGE = "Scaffold a self-hosted Kelpie assembly.\n\n npm create kelpie [directory] [options]\n\nOptions:\n --name <name> Package name. Defaults to the directory name\n --database-url <url> postgres:// connection string\n --port <port> API port (default 3000)\n --web-port <port> Dev server port (default 5173)\n --database-port <port> Host port for the bundled Postgres (default 5432)\n --email-from <address> Address transactional mail comes from\n --docker, --no-docker Write a docker-compose.yml for Postgres (default yes)\n --yes Take every default; never prompt\n --help This message\n\nWith --yes and no --database-url, the connection string points at the bundled\nPostgres. Without a terminal to prompt on, --yes is required.";
9
+ export declare const USAGE = "Scaffold a self-hosted Kelpie assembly.\n\n npm create kelpie@latest\n npm create kelpie@latest -- [directory] [options]\n\nThe -- matters once you pass options: without it npm reads flags like --yes as\nits own rather than passing them on.\n\nOptions:\n --name <name> Package name. Defaults to the directory name\n --database-url <url> postgres:// connection string\n --port <port> API port (default 3000)\n --web-port <port> Dev server port (default 5173)\n --database-port <port> Host port for the bundled Postgres (default 5432)\n --email-from <address> Address transactional mail comes from\n --docker, --no-docker Write a docker-compose.yml for Postgres (default yes)\n --yes Take every default; never prompt\n --help This message\n\nWith --yes and no --database-url, the connection string points at the bundled\nPostgres. Without a terminal to prompt on, --yes is required.";
10
10
  export interface ParsedArguments {
11
11
  readonly directory: string | undefined;
12
12
  readonly name: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAapD,eAAO,MAAM,KAAK,+yBAgB4C,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB;AAgBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAqCvE;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,IAAI,MAAM,CAevC;AAgCD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAsC5G"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAapD,eAAO,MAAM,KAAK,68BAoB4C,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB;AAgBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAqCvE;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,IAAI,MAAM,CAevC;AAgCD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAsC5G"}
package/dist/options.js CHANGED
@@ -21,7 +21,11 @@ const SECRET_KEY_BYTES = 32;
21
21
  const HIGHEST_PORT = 65535;
22
22
  export const USAGE = `Scaffold a self-hosted Kelpie assembly.
23
23
 
24
- npm create kelpie [directory] [options]
24
+ npm create kelpie@latest
25
+ npm create kelpie@latest -- [directory] [options]
26
+
27
+ The -- matters once you pass options: without it npm reads flags like --yes as
28
+ its own rather than passing them on.
25
29
 
26
30
  Options:
27
31
  --name <name> Package name. Defaults to the directory name
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-kelpie",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Scaffold a self-hosted Kelpie assembly. Run it with npm create kelpie.",
5
5
  "keywords": [
6
6
  "kelpie",
@@ -25,7 +25,7 @@
25
25
  "access": "public"
26
26
  },
27
27
  "bin": {
28
- "create-kelpie": "./dist/index.js"
28
+ "create-kelpie": "dist/index.js"
29
29
  },
30
30
  "files": [
31
31
  "dist",
package/src/options.ts CHANGED
@@ -28,7 +28,11 @@ const HIGHEST_PORT = 65535
28
28
 
29
29
  export const USAGE = `Scaffold a self-hosted Kelpie assembly.
30
30
 
31
- npm create kelpie [directory] [options]
31
+ npm create kelpie@latest
32
+ npm create kelpie@latest -- [directory] [options]
33
+
34
+ The -- matters once you pass options: without it npm reads flags like --yes as
35
+ its own rather than passing them on.
32
36
 
33
37
  Options:
34
38
  --name <name> Package name. Defaults to the directory name
@@ -67,6 +67,10 @@ stops the service at boot and lists every problem at once.
67
67
  | `SECRET_ENCRYPTION_KEY` | 32 bytes of base64, generated for this project |
68
68
  | `SECRET_ENCRYPTION_KEY_PREVIOUS` | Optional. Set only while rotating the key above |
69
69
  | `WEBHOOK_DELIVERY_RETENTION_DAYS` | Optional, default 30 |
70
+ | `WEB_BUNDLE_DIR` | Optional. A built web bundle to serve from the same origin as the API. Unset while developing; see Deploying below |
71
+ | `RATE_LIMIT_FORMS_LIMIT` / `RATE_LIMIT_FORMS_WINDOW_SECONDS` | Optional. Requests per window per IP on a public form submit, default 20 / 60 |
72
+ | `RATE_LIMIT_AUTH_LIMIT` / `RATE_LIMIT_AUTH_WINDOW_SECONDS` | Optional. Requests per window per IP on signup, login, and password reset, default 10 / 60 |
73
+ | `RATE_LIMIT_API_LIMIT` / `RATE_LIMIT_API_WINDOW_SECONDS` | Optional. Requests per window per API key on the rest of `/v1`, default 600 / 60 |
70
74
 
71
75
  ### Rotating the encryption key
72
76
 
@@ -80,6 +84,26 @@ unreadable, so rotate rather than replace:
80
84
  3. Re-encrypt everything still under the old key. Safe to run more than once.
81
85
  4. Remove `SECRET_ENCRYPTION_KEY_PREVIOUS` and deploy again.
82
86
 
87
+ ## Deploying
88
+
89
+ `npm run dev` runs two processes. Vite builds the pages as you edit them and
90
+ passes API calls through to the service, so your browser talks to one address.
91
+ Vite is a development tool and has no part in a deployment.
92
+
93
+ Build the pages once, then point the service at what it wrote:
94
+
95
+ ```bash
96
+ npm run build
97
+ WEB_BUNDLE_DIR=./dist npm start
98
+ ```
99
+
100
+ One process now serves the pages and the API on `PORT`. Boot fails if
101
+ `WEB_BUNDLE_DIR` holds no `index.html`, so a deployment whose build did not run
102
+ stops rather than answering every browser with a blank page.
103
+
104
+ Migrations apply at boot. Running more than one instance makes that a race, so
105
+ migrate once in a release step and start the instances with `--no-migrate`.
106
+
83
107
  ## Upgrading
84
108
 
85
109
  ```bash
@@ -1,8 +1,10 @@
1
1
  import { serve } from '@hono/node-server'
2
+ import { getConnInfo } from '@hono/node-server/conninfo'
2
3
  import {
3
4
  ConfigurationError,
4
5
  ModuleBootError,
5
6
  ModuleConfigFileError,
7
+ WebBundleError,
6
8
  connectDatabase,
7
9
  createApp,
8
10
  createEmailSender,
@@ -15,6 +17,7 @@ import {
15
17
  registerModules,
16
18
  resolveActorFrom,
17
19
  runMigrations,
20
+ serveWebBundle,
18
21
  } from '@kelpie/server'
19
22
  import type { CredentialDependencies } from '@kelpie/server'
20
23
 
@@ -72,8 +75,22 @@ async function start(): Promise<void> {
72
75
  contributions,
73
76
  credentials,
74
77
  createId,
78
+ rateLimit: config.rateLimit,
79
+ // The real socket address. A header-based fallback would be spoofable, so
80
+ // this is resolved from the connection itself rather than defaulted
81
+ // inside `createApp`.
82
+ resolveClientIp: (context) => getConnInfo(context).remote.address ?? 'unknown',
75
83
  })
76
84
 
85
+ // After `createApp`, so every API route is registered ahead of the fallback.
86
+ // Unset while developing, where the Vite dev server builds the pages itself
87
+ // and proxies `/v1` here. Set it in a deployment, after `npm run build`, and
88
+ // one process serves the pages and the API on one address.
89
+ if (config.webBundleDirectory !== undefined) {
90
+ serveWebBundle(app, { directory: config.webBundleDirectory })
91
+ logger.info('serving web bundle', { directory: config.webBundleDirectory })
92
+ }
93
+
77
94
  const server = serve({ fetch: app.fetch, port: config.port }, (address) => {
78
95
  logger.info('listening', { port: address.port, runtimeMode: config.runtimeMode })
79
96
  })
@@ -114,5 +131,11 @@ try {
114
131
  process.exit(1)
115
132
  }
116
133
 
134
+ if (error instanceof WebBundleError) {
135
+ reportFatal(error.message)
136
+ reportFatal('Run `npm run build` to produce one, or unset WEB_BUNDLE_DIR to serve the API alone.')
137
+ process.exit(1)
138
+ }
139
+
117
140
  throw error
118
141
  }